=0;){if(M in E){k=E[M].line,A===0&&(A=E[M].lineStart);break}(c.charAt(M)===`\n`||c.charAt(M)==="\\r"&&c.charAt(M+1)!==`\n`)&&(L++,A===0&&(A=M+1)),M--}var U=k+L,te=p-A;return E[p]={line:U,lineStart:A},{offset:p,line:U+1,column:te+1}}function j(c){if(!I(c))throw new Error("not a parser: "+c)}function Y(c,p){return typeof c=="string"?c.charAt(p):c[p]}function ee(c){if(typeof c!="number")throw new Error("not a number: "+c)}function ae(c){if(typeof c!="function")throw new Error("not a function: "+c)}function O(c){if(typeof c!="string")throw new Error("not a string: "+c)}var $=2,Q=3,ue=8,De=5*ue,Re=4*ue,Qt=" ";function Mt(c,p){return new Array(p+1).join(c)}function _t(c,p,E){var k=p-c.length;return k<=0?c:Mt(E,k)+c}function Ae(c,p,E,k){return{from:c-p>0?c-p:0,to:c+E>k?k:c+E}}function Bt(c,p){var E,k,L,A,M,U=p.index,te=U.offset,Ee=1;if(te===c.length)return"Got the end of the input";if(y(c)){var me=te-te%ue,dt=te-me,ve=Ae(me,De,Re+ue,c.length),ht=a(function(le){return a(function(en){return _t(en.toString(16),2,"0")},le)},function(le,en){var tn=le.length,Rt=[],nn=0;if(tn<=en)return[le.slice()];for(var rn=0;rn=4&&(E+=1),Ee=2,L=a(function(le){return le.length<=4?le.join(" "):le.slice(0,4).join(" ")+" "+le.slice(4).join(" ")},ht),(M=(8*(A.to>0?A.to-1:A.to)).toString(16).length)<2&&(M=2)}else{var Xt=c.split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);E=U.column-1,k=U.line-1,A=Ae(k,$,Q,Xt.length),L=Xt.slice(A.from,A.to),M=A.to.toString().length}var ll=k-A.from;return y(c)&&(M=(8*(A.to>0?A.to-1:A.to)).toString(16).length)<2&&(M=2),o(function(le,en,tn){var Rt,nn=tn===ll,rn=nn?"> ":Qt;return Rt=y(c)?_t((8*(A.from+tn)).toString(16),M,"0"):_t((A.from+tn+1).toString(),M," "),[].concat(le,[rn+Rt+" | "+en],nn?[Qt+Mt(" ",M)+" | "+_t("",E," ")+Mt("^",Ee)]:[])},[],L).join(`\n`)}function So(c,p){return[`\n`,"-- PARSING FAILED "+Mt("-",50),`\n\n`,Bt(c,p),`\n\n`,(E=p.expected,E.length===1?`Expected:\n\n`+E[0]:`Expected one of the following: \n\n`+E.join(", ")),`\n`].join("");var E}function ko(c){return c.flags!==void 0?c.flags:[c.global?"g":"",c.ignoreCase?"i":"",c.multiline?"m":"",c.unicode?"u":"",c.sticky?"y":""].join("")}function Br(){for(var c=[].slice.call(arguments),p=c.length,E=0;E=2?ee(p):p=0;var E=function(L){return RegExp("^(?:"+L.source+")",ko(L))}(c),k=""+c;return r(function(L,A){var M=E.exec(L.slice(A));if(M){if(0<=p&&p<=M.length){var U=M[0],te=M[p];return w(A+U.length,te)}return v(A,"valid match group (0 to "+M.length+") in "+k)}return v(A,k)})}function $t(c){return r(function(p,E){return w(E,c)})}function $r(c){return r(function(p,E){return v(E,c)})}function Rr(c){if(I(c))return r(function(p,E){var k=c._(p,E);return k.index=E,k.value="",k});if(typeof c=="string")return Rr(Bn(c));if(c instanceof RegExp)return Rr(ft(c));throw new Error("not a string, regexp, or parser: "+c)}function vo(c){return j(c),r(function(p,E){var k=c._(p,E),L=p.slice(E,k.index);return k.status?v(E,\'not "\'+L+\'"\'):w(E,null)})}function jr(c){return ae(c),r(function(p,E){var k=Y(p,E);return E
=c.length?v(p,"any character/byte"):w(p+1,Y(c,p))}),tl=r(function(c,p){return w(c.length,c.slice(p))}),Ws=r(function(c,p){return p=0}).desc(p)},r.optWhitespace=ol,r.Parser=r,r.range=function(c,p){return jr(function(E){return c<=E&&E<=p}).desc(c+"-"+p)},r.regex=ft,r.regexp=ft,r.sepBy=Co,r.sepBy1=Us,r.seq=Br,r.seqMap=Pt,r.seqObj=function(){for(var c,p={},E=0,k=(c=arguments,Array.prototype.slice.call(c)),L=k.length,A=0;A255)throw new Error("Value specified to byte constructor ("+c+"=0x"+c.toString(16)+") is larger in value than a single byte.");var p=(c>15?"0x":"0x0")+c.toString(16);return r(function(E,k){var L=Y(E,k);return L===c?w(k+1,L):v(k,p)})},buffer:function(c){return m("buffer",c).map(function(p){return Buffer.from(p)})},encodedString:function(c,p){return m("string",p).map(function(E){return E.toString(c)})},uintBE:b,uint8BE:b(1),uint16BE:b(2),uint32BE:b(4),uintLE:g,uint8LE:g(1),uint16LE:g(2),uint32LE:g(4),intBE:D,int8BE:D(1),int16BE:D(2),int32BE:D(4),intLE:T,int8LE:T(1),int16LE:T(2),int32LE:T(4),floatBE:m("floatBE",4).map(function(c){return c.readFloatBE(0)}),floatLE:m("floatLE",4).map(function(c){return c.readFloatLE(0)}),doubleBE:m("doubleBE",8).map(function(c){return c.readDoubleBE(0)}),doubleLE:m("doubleLE",8).map(function(c){return c.readDoubleLE(0)})},n.exports=r}])})});var Ru=_o(Ne=>{"use strict";var Sf=Ne&&Ne.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,s){r.__proto__=s}||function(r,s){for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(r[i]=s[i])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(Ne,"__esModule",{value:!0});Ne.EmptyBTree=Ne.asSet=Ne.simpleComparator=Ne.defaultComparator=void 0;function Bu(n,e){if(Number.isFinite(n)&&Number.isFinite(e))return n-e;var t=typeof n,r=typeof e;if(t!==r)return te?1:n===e?0:Number.isNaN(n)?Number.isNaN(e)?0:-1:Number.isNaN(e)?1:Array.isArray(n)?0:Number.NaN}Ne.defaultComparator=Bu;function kf(n,e){return n>e?1:n=4?Math.min(r,256):32,this._compare=t||Bu,e&&this.setPairs(e)}return Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"length",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isEmpty",{get:function(){return this._size===0},enumerable:!1,configurable:!0}),n.prototype.clear=function(){this._root=fo,this._size=0},n.prototype.forEach=function(e,t){var r=this;return t!==void 0&&(e=e.bind(t)),this.forEachPair(function(s,i){return e(i,s,r)})},n.prototype.forEachPair=function(e,t){var r=this.minKey(),s=this.maxKey();return this.forRange(r,s,!0,e,t)},n.prototype.get=function(e,t){return this._root.get(e,t,this)},n.prototype.set=function(e,t,r){this._root.isShared&&(this._root=this._root.clone());var s=this._root.set(e,t,r,this);return s===!0||s===!1?s:(this._root=new vf([this._root,s]),!0)},n.prototype.has=function(e){return this.forRange(e,e,!0,void 0)!==0},n.prototype.delete=function(e){return this.editRange(e,e,!0,Mu)!==0},n.prototype.with=function(e,t,r){var s=this.clone();return s.set(e,t,r)||r?s:this},n.prototype.withPairs=function(e,t){var r=this.clone();return r.setPairs(e,t)!==0||t?r:this},n.prototype.withKeys=function(e,t){for(var r=this.clone(),s=!1,i=0;i=s.length){a=3;continue e}if(++i[l]0;l--)s[l-1]=s[l][i[l]].children,i[l-1]=0;o=s[0][i[0]],u=-1,a=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.entriesReversed=function(e,t,r){if(e===void 0&&(e=this.maxKey(),r=void 0,e===void 0))return An();var s=this.findPath(e)||this.findPath(this.maxKey()),i=s.nodequeue,o=s.nodeindex,a=s.leaf;Le(!i[0]||a===i[0][o[0]],"wat!");var u=a.indexOf(e,0,this._compare);!r&&u=0)return{done:!1,value:[a.keys[u],a.values[u]]};l=2;continue;case 1:if(--u>=0)return t[0]=a.keys[u],t[1]=a.values[u],{done:!1,value:t};l=2;case 2:for(var f=-1;;){if(++f>=i.length){l=3;continue e}if(--o[f]>=0)break}for(;f>0;f--)i[f-1]=i[f][o[f]].children,o[f-1]=i[f-1].length-1;a=i[0][o[0]],u=a.keys.length,l=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.findPath=function(e){var t=this._root,r,s;if(t.isLeaf)r=_u,s=_u;else{r=[],s=[];for(var i=0;!t.isLeaf;i++){if(r[i]=t.children,s[i]=e===void 0?0:t.indexOf(e,0,this._compare),s[i]>=r[i].length)return;t=r[i][s[i]]}r.reverse(),s.reverse()}return{nodequeue:r,nodeindex:s,leaf:t}},n.prototype.diffAgainst=function(e,t,r,s){if(e._compare!==this._compare)throw new Error("Tree comparators are not the same.");if(this.isEmpty||e.isEmpty)return this.isEmpty&&e.isEmpty?void 0:this.isEmpty?r===void 0?void 0:n.stepToEnd(n.makeDiffCursor(e),r):t===void 0?void 0:n.stepToEnd(n.makeDiffCursor(this),t);for(var i=this._compare,o=n.makeDiffCursor(this),a=n.makeDiffCursor(e),u=!0,l=!0,f=n.compare(o,a,i);u&&l;){var d=n.compare(o,a,i),m=o.leaf,h=o.internalSpine,b=o.levelIndices,g=a.leaf,D=a.internalSpine,T=a.levelIndices;if(m||g){if(f!==0){if(d===0){if(m&&g&&s){var I=m.values[b[b.length-1]],N=g.values[T[T.length-1]];if(!Object.is(I,N)){var y=s(o.currentKey,I,N);if(y&&y.break)return y.break}}}else if(d>0){if(g&&r){var w=g.values[T[T.length-1]],y=r(a.currentKey,w);if(y&&y.break)return y.break}}else if(t&&m&&f!==0){var I=m.values[b[b.length-1]],y=t(o.currentKey,I);if(y&&y.break)return y.break}}}else if(!m&&!g&&d===0){var v=h.length-1,x=D.length-1,C=h[v][b[v]],V=D[x][T[x]];if(V===C){f=0,u=n.step(o,!0),l=n.step(a,!0);continue}}f=d,d<0?u=n.step(o):l=n.step(a)}if(u&&t)return n.finishCursorWalk(o,a,i,t);if(l&&r)return n.finishCursorWalk(a,o,i,r)},n.finishCursorWalk=function(e,t,r,s){var i=n.compare(e,t,r);if(i===0){if(!n.step(e))return}else i<0&&Le(!1,"cursor walk terminated early");return n.stepToEnd(e,s)},n.stepToEnd=function(e,t){for(var r=!0;r;){var s=e.leaf,i=e.levelIndices,o=e.currentKey;if(s){var a=s.values[i[i.length-1]],u=t(o,a);if(u&&u.break)return u.break}r=n.step(e)}},n.makeDiffCursor=function(e){var t=e._root,r=e.height;return{height:r,internalSpine:[[t]],levelIndices:[0],leaf:void 0,currentKey:t.maxKey()}},n.step=function(e,t){var r=e.internalSpine,s=e.levelIndices,i=e.leaf;if(t===!0||i){var o=s.length;if(t===!0||s[o-1]===0){var a=r.length;if(a===0)return!1;for(var u=a-1,l=u;l>=0;){if(s[l]>0)return ls?xf:void 0}),i},n.prototype.setPairs=function(e,t){for(var r=0,s=0;s>1;i0)o=a;else{if(u===0)return a;if(e===e)return s.length;throw new Error("BTree: NaN was used as a key")}a=i+o>>1}return a^t},n.prototype.minKey=function(){return this.keys[0]},n.prototype.minPair=function(e){if(this.keys.length!==0)return e[0]=this.keys[0],e[1]=this.values[0],e},n.prototype.maxPair=function(e){if(this.keys.length!==0){var t=this.keys.length-1;return e[0]=this.keys[t],e[1]=this.values[t],e}},n.prototype.clone=function(){var e=this.values;return new n(this.keys.slice(0),e===pe?e:e.slice(0))},n.prototype.greedyClone=function(e){return this.isShared&&!e?this:this.clone()},n.prototype.get=function(e,t,r){var s=this.indexOf(e,-1,r._compare);return s<0?t:this.values[s]},n.prototype.getPairOrNextLower=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i-1:r?i:i-1;if(o>=0)return s[0]=this.keys[o],s[1]=this.values[o],s},n.prototype.getPairOrNextHigher=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i:r?i:i+1,a=this.keys;if(o0,"empty leaf at depth",e,"and baseIndex",r),s},n.prototype.set=function(e,t,r,s){var i=this.indexOf(e,-1,s._compare);if(i<0){if(i=~i,s._size++,this.keys.lengththis.keys.length&&(i-=this.keys.length,a=o),a.insertInLeaf(i,e,t,s),o}else return r!==!1&&(t!==void 0&&this.reifyValues(),this.keys[i]=e,this.values[i]=t),!1},n.prototype.reifyValues=function(){return this.values===pe?this.values=this.values.slice(0,this.keys.length):this.values},n.prototype.insertInLeaf=function(e,t,r,s){if(this.keys.splice(e,0,t),this.values===pe){for(;pe.length>1,t=this.keys.splice(e),r=this.values===pe?pe:this.values.splice(e);return new n(t,r)},n.prototype.forRange=function(e,t,r,s,i,o,a){var u=i._compare,l,f;if(t===e){if(!r||(f=(l=this.indexOf(e,-1,u))+1,l<0))return o}else l=this.indexOf(e,0,u),f=this.indexOf(t,-1,u),f<0?f=~f:r===!0&&f++;var d=this.keys,m=this.values;if(a!==void 0)for(var h=l;h=a.length)return this.maxPair(i);var u=a[o].getPairOrNextLower(t,r,s,i);return u===void 0&&o>0?a[o-1].maxPair(i):u},e.prototype.getPairOrNextHigher=function(t,r,s,i){var o=this.indexOf(t,0,r),a=this.children,u=a.length;if(!(o>=u)){var l=a[o].getPairOrNextHigher(t,r,s,i);return l===void 0&&o1||t>0,"internal node has length",i,"at depth",t,"baseIndex",s);for(var a=0,u=this.children,l=this.keys,f=0,d=0;d=f,"wtf",s),Le(d===0||u[d-1].constructor===u[d].constructor,"type mismatch, baseIndex:",s),u[d].maxKey()!=l[d]&&Le(!1,"keys[",d,"] =",l[d],"is wrong, should be ",u[d].maxKey(),"at depth",t,"baseIndex",s),d===0||r._compare(l[d-1],l[d])<0||Le(!1,"sort violation at depth",t,"index",d,"keys",l[d-1],l[d]);var m=f===0;return(m||f>r.maxNodeSize*o)&&Le(!1,m?"too few":"too many","children (",f,a,") at depth",t,"maxNodeSize:",r.maxNodeSize,"children.length:",o,"baseIndex:",s),a},e.prototype.set=function(t,r,s,i){var o=this.children,a=i._maxNodeSize,u=i._compare,l=Math.min(this.indexOf(t,0,u),o.length-1),f=o[l];if(f.isShared&&(o[l]=f=f.clone()),f.keys.length>=a){var d;l>0&&(d=o[l-1]).keys.length0&&(b=h,l-=this.keys.length),b.insert(l+1,m),h},e.prototype.insert=function(t,r){this.children.splice(t,0,r),this.keys.splice(t,0,r.maxKey())},e.prototype.splitOffRightSide=function(){var t=this.children.length>>1;return new e(this.children.splice(t),this.keys.splice(t))},e.prototype.takeFromRight=function(t){this.keys.push(t.keys.shift()),this.children.push(t.children.shift())},e.prototype.takeFromLeft=function(t){this.keys.unshift(t.keys.pop()),this.children.unshift(t.children.pop())},e.prototype.forRange=function(t,r,s,i,o,a,u){var l=o._compare,f=this.keys,d=this.children,m=this.indexOf(t,0,l),h=m,b=Math.min(r===t?m:this.indexOf(r,0,l),f.length-1);if(i){if(h<=b)try{for(;h<=b;h++){d[h].isShared&&(d[h]=d[h].clone());var g=d[h].forRange(t,r,s,i,o,a,u);if(f[h]=d[h].maxKey(),typeof g!="number")return g;a=g}}finally{var D=o._maxNodeSize>>1;for(m>0&&m--,h=b;h>=m;h--)d[h].keys.length<=D&&(d[h].keys.length!==0?this.tryMerge(h,o._maxNodeSize):(f.splice(h,1),d.splice(h,1)));d.length!==0&&d[0].keys.length===0&&Le(!1,"emptiness bug")}}else for(;h<=b;h++){var g=d[h].forRange(t,r,s,i,o,a,u);if(typeof g!="number")return g;a=g}return a},e.prototype.tryMerge=function(t,r){var s=this.children;return t>=0&&t+1{let i=[e(s),s];return r&&t(r[0],i[0])===r[0]?r:i},null)[1]}function Ro(n,e){return e.reduce((t,r)=>(t[r]=n[r],t),{})}function kt(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function nt(n,e,t){return rr(n)&&n>=e&&n<=t}function bl(n,e){return n-e*Math.floor(n/e)}function re(n,e=2){let t=n<0,r;return t?r="-"+(""+-n).padStart(e,"0"):r=(""+n).padStart(e,"0"),r}function Dt(n){if(!(W(n)||n===null||n===""))return parseInt(n,10)}function Ct(n){if(!(W(n)||n===null||n===""))return parseFloat(n)}function sr(n){if(!(W(n)||n===null||n==="")){let e=parseFloat("0."+n)*1e3;return Math.floor(e)}}function an(n,e,t=!1){let r=10**e;return(t?Math.trunc:Math.round)(n*r)/r}function jt(n){return n%4===0&&(n%100!==0||n%400===0)}function qt(n){return jt(n)?366:365}function un(n,e){let t=bl(e-1,12)+1,r=n+(e-t)/12;return t===2?jt(r)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][t-1]}function ir(n){let e=Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,n.second,n.millisecond);return n.year<100&&n.year>=0&&(e=new Date(e),e.setUTCFullYear(e.getUTCFullYear()-1900)),+e}function ln(n){let e=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7,t=n-1,r=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7;return e===4||r===3?53:52}function or(n){return n>99?n:n>60?1900+n:2e3+n}function Jr(n,e,t,r=null){let s=new Date(n),i={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(i.timeZone=r);let o=R({timeZoneName:e},i),a=new Intl.DateTimeFormat(t,o).formatToParts(s).find(u=>u.type.toLowerCase()==="timezonename");return a?a.value:null}function Vt(n,e){let t=parseInt(n,10);Number.isNaN(t)&&(t=0);let r=parseInt(e,10)||0,s=t<0||Object.is(t,-0)?-r:r;return t*60+s}function ei(n){let e=Number(n);if(typeof n=="boolean"||n===""||Number.isNaN(e))throw new fe(`Invalid unit value ${n}`);return e}function cn(n,e){let t={};for(let r in n)if(kt(n,r)){let s=n[r];if(s==null)continue;t[e(r)]=ei(s)}return t}function vt(n,e){let t=Math.trunc(Math.abs(n/60)),r=Math.trunc(Math.abs(n%60)),s=n>=0?"+":"-";switch(e){case"short":return`${s}${re(t,2)}:${re(r,2)}`;case"narrow":return`${s}${t}${r>0?`:${r}`:""}`;case"techie":return`${s}${re(t,2)}${re(r,2)}`;default:throw new RangeError(`Value format ${e} is out of range for property format`)}}function ar(n){return Ro(n,["hour","minute","second","millisecond"])}var ti=/[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;var Fl=["January","February","March","April","May","June","July","August","September","October","November","December"],ni=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],El=["J","F","M","A","M","J","J","A","S","O","N","D"];function ri(n){switch(n){case"narrow":return[...El];case"short":return[...ni];case"long":return[...Fl];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var si=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ii=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],wl=["M","T","W","T","F","S","S"];function oi(n){switch(n){case"narrow":return[...wl];case"short":return[...ii];case"long":return[...si];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var ai=["AM","PM"],Tl=["Before Christ","Anno Domini"],Sl=["BC","AD"],kl=["B","A"];function ui(n){switch(n){case"narrow":return[...kl];case"short":return[...Sl];case"long":return[...Tl];default:return null}}function jo(n){return ai[n.hour<12?0:1]}function qo(n,e){return oi(e)[n.weekday-1]}function Vo(n,e){return ri(e)[n.month-1]}function Uo(n,e){return ui(e)[n.year<0?0:1]}function Ko(n,e,t="always",r=!1){let s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},i=["hours","minutes","seconds"].indexOf(n)===-1;if(t==="auto"&&i){let d=n==="days";switch(e){case 1:return d?"tomorrow":`next ${s[n][0]}`;case-1:return d?"yesterday":`last ${s[n][0]}`;case 0:return d?"today":`this ${s[n][0]}`;default:}}let o=Object.is(e,-0)||e<0,a=Math.abs(e),u=a===1,l=s[n],f=r?u?l[1]:l[2]||l[1]:u?s[n][0]:n;return o?`${a} ${f} ago`:`in ${a} ${f}`}function Wo(n,e){let t="";for(let r of n)r.literal?t+=r.val:t+=e(r.val);return t}var Cl={D:on,DD:$n,DDD:Rn,DDDD:jn,t:qn,tt:Vn,ttt:Un,tttt:Kn,T:Wn,TT:Hn,TTT:Jn,TTTT:zn,f:Yn,ff:Zn,fff:Xn,ffff:tr,F:Gn,FF:Qn,FFF:er,FFFF:nr},we=class n{static create(e,t={}){return new n(e,t)}static parseFormat(e){let t=null,r="",s=!1,i=[];for(let o=0;o0&&i.push({literal:s,val:r}),t=null,r="",s=!s):s||a===t?r+=a:(r.length>0&&i.push({literal:!1,val:r}),r=a,t=a)}return r.length>0&&i.push({literal:s,val:r}),i}static macroTokenToFormatOpts(e){return Cl[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,R(R({},this.opts),t)).format()}formatDateTime(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).format()}formatDateTimeParts(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).formatToParts()}resolvedOptions(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return re(e,t);let r=R({},this.opts);return t>0&&(r.padTo=t),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){let r=this.loc.listingMode()==="en",s=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",i=(h,b)=>this.loc.extract(e,h,b),o=h=>e.isOffsetFixed&&e.offset===0&&h.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,h.format):"",a=()=>r?jo(e):i({hour:"numeric",hourCycle:"h12"},"dayperiod"),u=(h,b)=>r?Vo(e,h):i(b?{month:h}:{month:h,day:"numeric"},"month"),l=(h,b)=>r?qo(e,h):i(b?{weekday:h}:{weekday:h,month:"long",day:"numeric"},"weekday"),f=h=>{let b=n.macroTokenToFormatOpts(h);return b?this.formatWithSystemDefault(e,b):h},d=h=>r?Uo(e,h):i({era:h},"era"),m=h=>{switch(h){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12===0?12:e.hour%12);case"hh":return this.num(e.hour%12===0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return a();case"d":return s?i({day:"numeric"},"day"):this.num(e.day);case"dd":return s?i({day:"2-digit"},"day"):this.num(e.day,2);case"c":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return this.num(e.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return s?i({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return s?i({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return u("short",!0);case"LLLL":return u("long",!0);case"LLLLL":return u("narrow",!0);case"M":return s?i({month:"numeric"},"month"):this.num(e.month);case"MM":return s?i({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return u("short",!1);case"MMMM":return u("long",!1);case"MMMMM":return u("narrow",!1);case"y":return s?i({year:"numeric"},"year"):this.num(e.year);case"yy":return s?i({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return s?i({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return s?i({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return f(h)}};return Wo(n.parseFormat(t),m)}formatDurationFromString(e,t){let r=u=>{switch(u[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},s=u=>l=>{let f=r(l);return f?this.num(u.get(f),l.length):l},i=n.parseFormat(t),o=i.reduce((u,{literal:l,val:f})=>l?u:u.concat(f),[]),a=e.shiftTo(...o.map(r).filter(u=>u));return Wo(i,s(a))}};var de=class{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var ke=class{get type(){throw new je}get name(){throw new je}get ianaName(){return this.name}get isUniversal(){throw new je}offsetName(e,t){throw new je}formatOffset(e,t){throw new je}offset(e){throw new je}equals(e){throw new je}get isValid(){throw new je}};var ci=null,fn=class n extends ke{static get instance(){return ci===null&&(ci=new n),ci}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:r}){return Jr(e,t,r)}formatOffset(e,t){return vt(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return e.type==="system"}get isValid(){return!0}};var Yr={};function vl(n){return Yr[n]||(Yr[n]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:n,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),Yr[n]}var xl={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function Ol(n,e){let t=n.format(e).replace(/\\u200E/g,""),r=/(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(t),[,s,i,o,a,u,l,f]=r;return[o,s,i,a,u,l,f]}function Il(n,e){let t=n.formatToParts(e),r=[];for(let s=0;s=0?b:1e3+b,(m-h)/(60*1e3)}equals(e){return e.type==="iana"&&e.name===this.name}get isValid(){return this.valid}};var fi=null,he=class n extends ke{static get utcInstance(){return fi===null&&(fi=new n(0)),fi}static instance(e){return e===0?n.utcInstance:new n(e)}static parseSpecifier(e){if(e){let t=e.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);if(t)return new n(Vt(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${vt(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${vt(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return vt(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return e.type==="fixed"&&e.fixed===this.fixed}get isValid(){return!0}};var dn=class extends ke{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Ve(n,e){let t;if(W(n)||n===null)return e;if(n instanceof ke)return n;if(Bo(n)){let r=n.toLowerCase();return r==="local"||r==="system"?e:r==="utc"||r==="gmt"?he.utcInstance:he.parseSpecifier(r)||ge.create(n)}else return tt(n)?he.instance(n):typeof n=="object"&&n.offset&&typeof n.offset=="number"?n:new dn(n)}var Ho=()=>Date.now(),Jo="system",zo=null,Yo=null,Go=null,Zo,X=class{static get now(){return Ho}static set now(e){Ho=e}static set defaultZone(e){Jo=e}static get defaultZone(){return Ve(Jo,fn.instance)}static get defaultLocale(){return zo}static set defaultLocale(e){zo=e}static get defaultNumberingSystem(){return Yo}static set defaultNumberingSystem(e){Yo=e}static get defaultOutputCalendar(){return Go}static set defaultOutputCalendar(e){Go=e}static get throwOnInvalid(){return Zo}static set throwOnInvalid(e){Zo=e}static resetCaches(){ne.resetCache(),ge.resetCache()}};var Qo={};function Ll(n,e={}){let t=JSON.stringify([n,e]),r=Qo[t];return r||(r=new Intl.ListFormat(n,e),Qo[t]=r),r}var di={};function hi(n,e={}){let t=JSON.stringify([n,e]),r=di[t];return r||(r=new Intl.DateTimeFormat(n,e),di[t]=r),r}var mi={};function Nl(n,e={}){let t=JSON.stringify([n,e]),r=mi[t];return r||(r=new Intl.NumberFormat(n,e),mi[t]=r),r}var pi={};function Al(n,e={}){let o=e,{base:t}=o,r=Ys(o,["base"]),s=JSON.stringify([n,r]),i=pi[s];return i||(i=new Intl.RelativeTimeFormat(n,e),pi[s]=i),i}var ur=null;function Ml(){return ur||(ur=new Intl.DateTimeFormat().resolvedOptions().locale,ur)}function _l(n){let e=n.indexOf("-u-");if(e===-1)return[n];{let t,r=n.substring(0,e);try{t=hi(n).resolvedOptions()}catch(o){t=hi(r).resolvedOptions()}let{numberingSystem:s,calendar:i}=t;return[r,s,i]}}function Bl(n,e,t){return(t||e)&&(n+="-u",t&&(n+=`-ca-${t}`),e&&(n+=`-nu-${e}`)),n}function Pl(n){let e=[];for(let t=1;t<=12;t++){let r=q.utc(2016,t,1);e.push(n(r))}return e}function $l(n){let e=[];for(let t=1;t<=7;t++){let r=q.utc(2016,11,13+t);e.push(n(r))}return e}function Gr(n,e,t,r,s){let i=n.listingMode(t);return i==="error"?null:i==="en"?r(e):s(e)}function Rl(n){return n.numberingSystem&&n.numberingSystem!=="latn"?!1:n.numberingSystem==="latn"||!n.locale||n.locale.startsWith("en")||new Intl.DateTimeFormat(n.intl).resolvedOptions().numberingSystem==="latn"}var Di=class{constructor(e,t,r){this.padTo=r.padTo||0,this.floor=r.floor||!1;let a=r,{padTo:s,floor:i}=a,o=Ys(a,["padTo","floor"]);if(!t||Object.keys(o).length>0){let u=R({useGrouping:!1},r);r.padTo>0&&(u.minimumIntegerDigits=r.padTo),this.inf=Nl(e,u)}}format(e){if(this.inf){let t=this.floor?Math.floor(e):e;return this.inf.format(t)}else{let t=this.floor?Math.floor(e):an(e,3);return re(t,this.padTo)}}},yi=class{constructor(e,t,r){this.opts=r;let s;if(e.zone.isUniversal){let o=-1*(e.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;e.offset!==0&&ge.create(a).valid?(s=a,this.dt=e):(s="UTC",r.timeZoneName?this.dt=e:this.dt=e.offset===0?e:q.fromMillis(e.ts+e.offset*60*1e3))}else e.zone.type==="system"?this.dt=e:(this.dt=e,s=e.zone.name);let i=R({},this.opts);s&&(i.timeZone=s),this.dtf=hi(t,i)}format(){return this.dtf.format(this.dt.toJSDate())}formatToParts(){return this.dtf.formatToParts(this.dt.toJSDate())}resolvedOptions(){return this.dtf.resolvedOptions()}},gi=class{constructor(e,t,r){this.opts=R({style:"long"},r),!t&&Hr()&&(this.rtf=Al(e,r))}format(e,t){return this.rtf?this.rtf.format(e,t):Ko(t,e,this.opts.numeric,this.opts.style!=="long")}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}},ne=class n{static fromOpts(e){return n.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,r,s=!1){let i=e||X.defaultLocale,o=i||(s?"en-US":Ml()),a=t||X.defaultNumberingSystem,u=r||X.defaultOutputCalendar;return new n(o,a,u,i)}static resetCache(){ur=null,di={},mi={},pi={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:r}={}){return n.create(e,t,r)}constructor(e,t,r,s){let[i,o,a]=_l(e);this.locale=i,this.numberingSystem=t||o||null,this.outputCalendar=r||a||null,this.intl=Bl(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=Rl(this)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return e&&t?"en":"intl"}clone(e){return!e||Object.getOwnPropertyNames(e).length===0?this:n.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1)}redefaultToEN(e={}){return this.clone(ye(R({},e),{defaultToEN:!0}))}redefaultToSystem(e={}){return this.clone(ye(R({},e),{defaultToEN:!1}))}months(e,t=!1,r=!0){return Gr(this,e,r,ri,()=>{let s=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return this.monthsCache[i][e]||(this.monthsCache[i][e]=Pl(o=>this.extract(o,s,"month"))),this.monthsCache[i][e]})}weekdays(e,t=!1,r=!0){return Gr(this,e,r,oi,()=>{let s=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=$l(o=>this.extract(o,s,"weekday"))),this.weekdaysCache[i][e]})}meridiems(e=!0){return Gr(this,void 0,e,()=>ai,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[q.utc(2016,11,13,9),q.utc(2016,11,13,19)].map(r=>this.extract(r,t,"dayperiod"))}return this.meridiemCache})}eras(e,t=!0){return Gr(this,e,t,ui,()=>{let r={era:e};return this.eraCache[e]||(this.eraCache[e]=[q.utc(-40,1,1),q.utc(2017,1,1)].map(s=>this.extract(s,r,"era"))),this.eraCache[e]})}extract(e,t,r){let s=this.dtFormatter(e,t),i=s.formatToParts(),o=i.find(a=>a.type.toLowerCase()===r);return o?o.value:null}numberFormatter(e={}){return new Di(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new yi(e,this.intl,t)}relFormatter(e={}){return new gi(this.intl,this.isEnglish(),e)}listFormatter(e={}){return Ll(this.intl,e)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}};function mn(...n){let e=n.reduce((t,r)=>t+r.source,"");return RegExp(`^${e}$`)}function pn(...n){return e=>n.reduce(([t,r,s],i)=>{let[o,a,u]=i(e,s);return[R(R({},t),o),a||r,u]},[{},null,1]).slice(0,2)}function Dn(n,...e){if(n==null)return[null,null];for(let[t,r]of e){let s=t.exec(n);if(s)return r(s)}return[null,null]}function ea(...n){return(e,t)=>{let r={},s;for(s=0;sh!==void 0&&(b||h&&f)?-h:h;return[{years:m(Ct(t)),months:m(Ct(r)),weeks:m(Ct(s)),days:m(Ct(i)),hours:m(Ct(o)),minutes:m(Ct(a)),seconds:m(Ct(u),u==="-0"),milliseconds:m(sr(l),d)}]}var Ql={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Ei(n,e,t,r,s,i,o){let a={year:e.length===2?or(Dt(e)):Dt(e),month:ni.indexOf(t)+1,day:Dt(r),hour:Dt(s),minute:Dt(i)};return o&&(a.second=Dt(o)),n&&(a.weekday=n.length>3?si.indexOf(n)+1:ii.indexOf(n)+1),a}var Xl=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;function ec(n){let[,e,t,r,s,i,o,a,u,l,f,d]=n,m=Ei(e,s,r,t,i,o,a),h;return u?h=Ql[u]:l?h=0:h=Vt(f,d),[m,new he(h)]}function tc(n){return n.replace(/\\([^()]*\\)|[\\n\\t]/g," ").replace(/(\\s\\s+)/g," ").trim()}var nc=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,rc=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,sc=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;function Xo(n){let[,e,t,r,s,i,o,a]=n;return[Ei(e,s,r,t,i,o,a),he.utcInstance]}function ic(n){let[,e,t,r,s,i,o,a]=n;return[Ei(e,a,t,r,s,i,o),he.utcInstance]}var oc=mn(ql,Fi),ac=mn(Vl,Fi),uc=mn(Ul,Fi),lc=mn(na),sa=pn(zl,yn,lr,cr),cc=pn(Kl,yn,lr,cr),fc=pn(Wl,yn,lr,cr),dc=pn(yn,lr,cr);function ia(n){return Dn(n,[oc,sa],[ac,cc],[uc,fc],[lc,dc])}function oa(n){return Dn(tc(n),[Xl,ec])}function aa(n){return Dn(n,[nc,Xo],[rc,Xo],[sc,ic])}function ua(n){return Dn(n,[Gl,Zl])}var hc=pn(yn);function la(n){return Dn(n,[Yl,hc])}var mc=mn(Hl,Jl),pc=mn(ra),Dc=pn(yn,lr,cr);function ca(n){return Dn(n,[mc,sa],[pc,Dc])}var yc="Invalid Duration",fa={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},gc=R({years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3}},fa),Me=146097/400,gn=146097/4800,bc=R({years:{quarters:4,months:12,weeks:Me/7,days:Me,hours:Me*24,minutes:Me*24*60,seconds:Me*24*60*60,milliseconds:Me*24*60*60*1e3},quarters:{months:3,weeks:Me/28,days:Me/4,hours:Me*24/4,minutes:Me*24*60/4,seconds:Me*24*60*60/4,milliseconds:Me*24*60*60*1e3/4},months:{weeks:gn/7,days:gn,hours:gn*24,minutes:gn*24*60,seconds:gn*24*60*60,milliseconds:gn*24*60*60*1e3}},fa),Kt=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Fc=Kt.slice(0).reverse();function Ut(n,e,t=!1){let r={values:t?e.values:R(R({},n.values),e.values||{}),loc:n.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||n.conversionAccuracy};return new B(r)}function Ec(n){return n<0?Math.floor(n):Math.ceil(n)}function da(n,e,t,r,s){let i=n[s][t],o=e[t]/i,a=Math.sign(o)===Math.sign(r[s]),u=!a&&r[s]!==0&&Math.abs(o)<=1?Ec(o):Math.trunc(o);r[s]+=u,e[t]-=u*i}function wc(n,e){Fc.reduce((t,r)=>W(e[r])?t:(t&&da(n,e,t,e,r),r),null)}var B=class n{constructor(e){let t=e.conversionAccuracy==="longterm"||!1;this.values=e.values,this.loc=e.loc||ne.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=t?bc:gc,this.isLuxonDuration=!0}static fromMillis(e,t){return n.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(e==null||typeof e!="object")throw new fe(`Duration.fromObject: argument expected to be an object, got ${e===null?"null":typeof e}`);return new n({values:cn(e,n.normalizeUnit),loc:ne.fromObject(t),conversionAccuracy:t.conversionAccuracy})}static fromDurationLike(e){if(tt(e))return n.fromMillis(e);if(n.isDuration(e))return e;if(typeof e=="object")return n.fromObject(e);throw new fe(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){let[r]=ua(e);return r?n.fromObject(r,t):n.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static fromISOTime(e,t){let[r]=la(e);return r?n.fromObject(r,t):n.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new fe("need to specify a reason the Duration is invalid");let r=e instanceof de?e:new de(e,t);if(X.throwOnInvalid)throw new Wr(r);return new n({invalid:r})}static normalizeUnit(e){let t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e&&e.toLowerCase()];if(!t)throw new sn(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let r=ye(R({},t),{floor:t.round!==!1&&t.floor!==!1});return this.isValid?we.create(this.loc,r).formatDurationFromString(this,e):yc}toHuman(e={}){let t=Kt.map(r=>{let s=this.values[r];return W(s)?null:this.loc.numberFormatter(ye(R({style:"unit",unitDisplay:"long"},e),{unit:r.slice(0,-1)})).format(s)}).filter(r=>r);return this.loc.listFormatter(R({type:"conjunction",style:e.listStyle||"narrow"},e)).format(t)}toObject(){return this.isValid?R({},this.values):{}}toISO(){if(!this.isValid)return null;let e="P";return this.years!==0&&(e+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(e+=this.months+this.quarters*3+"M"),this.weeks!==0&&(e+=this.weeks+"W"),this.days!==0&&(e+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(e+="T"),this.hours!==0&&(e+=this.hours+"H"),this.minutes!==0&&(e+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(e+=an(this.seconds+this.milliseconds/1e3,3)+"S"),e==="P"&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();if(t<0||t>=864e5)return null;e=R({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},e);let r=this.shiftTo("hours","minutes","seconds","milliseconds"),s=e.format==="basic"?"hhmm":"hh:mm";(!e.suppressSeconds||r.seconds!==0||r.milliseconds!==0)&&(s+=e.format==="basic"?"ss":":ss",(!e.suppressMilliseconds||r.milliseconds!==0)&&(s+=".SSS"));let i=r.toFormat(s);return e.includePrefix&&(i="T"+i),i}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.as("milliseconds")}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let t=n.fromDurationLike(e),r={};for(let s of Kt)(kt(t.values,s)||kt(this.values,s))&&(r[s]=t.get(s)+this.get(s));return Ut(this,{values:r},!0)}minus(e){if(!this.isValid)return this;let t=n.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let r of Object.keys(this.values))t[r]=ei(e(this.values[r],r));return Ut(this,{values:t},!0)}get(e){return this[n.normalizeUnit(e)]}set(e){if(!this.isValid)return this;let t=R(R({},this.values),cn(e,n.normalizeUnit));return Ut(this,{values:t})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t}),i={loc:s};return r&&(i.conversionAccuracy=r),Ut(this,i)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return wc(this.matrix,e),Ut(this,{values:e},!0)}shiftTo(...e){if(!this.isValid)return this;if(e.length===0)return this;e=e.map(o=>n.normalizeUnit(o));let t={},r={},s=this.toObject(),i;for(let o of Kt)if(e.indexOf(o)>=0){i=o;let a=0;for(let l in r)a+=this.matrix[l][o]*r[l],r[l]=0;tt(s[o])&&(a+=s[o]);let u=Math.trunc(a);t[o]=u,r[o]=(a*1e3-u*1e3)/1e3;for(let l in s)Kt.indexOf(l)>Kt.indexOf(o)&&da(this.matrix,s,l,t,o)}else tt(s[o])&&(r[o]=s[o]);for(let o in r)r[o]!==0&&(t[i]+=o===i?r[o]:r[o]/this.matrix[i][o]);return Ut(this,{values:t},!0).normalize()}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=this.values[t]===0?0:-this.values[t];return Ut(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;function t(r,s){return r===void 0||r===0?s===void 0||s===0:r===s}for(let r of Kt)if(!t(this.values[r],e.values[r]))return!1;return!0}};var fr="Invalid Interval";function Tc(n,e){return!n||!n.isValid?yt.invalid("missing or invalid start"):!e||!e.isValid?yt.invalid("missing or invalid end"):ee:!1}isBefore(e){return this.isValid?this.e<=e:!1}contains(e){return this.isValid?this.s<=e&&this.e>e:!1}set({start:e,end:t}={}){return this.isValid?n.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];let t=e.map(bn).filter(o=>this.contains(o)).sort(),r=[],{s}=this,i=0;for(;s+this.e?this.e:o;r.push(n.fromDateTimes(s,a)),s=a,i+=1}return r}splitBy(e){let t=B.fromDurationLike(e);if(!this.isValid||!t.isValid||t.as("milliseconds")===0)return[];let{s:r}=this,s=1,i,o=[];for(;ru*s));i=+a>+this.e?this.e:a,o.push(n.fromDateTimes(r,i)),r=i,s+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e:!1}equals(e){return!this.isValid||!e.isValid?!1:this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let t=this.s>e.s?this.s:e.s,r=this.e=r?null:n.fromDateTimes(t,r)}union(e){if(!this.isValid)return this;let t=this.se.e?this.e:e.e;return n.fromDateTimes(t,r)}static merge(e){let[t,r]=e.sort((s,i)=>s.s-i.s).reduce(([s,i],o)=>i?i.overlaps(o)||i.abutsStart(o)?[s,i.union(o)]:[s.concat([i]),o]:[s,o],[[],null]);return r&&t.push(r),t}static xor(e){let t=null,r=0,s=[],i=e.map(u=>[{time:u.s,type:"s"},{time:u.e,type:"e"}]),o=Array.prototype.concat(...i),a=o.sort((u,l)=>u.time-l.time);for(let u of a)r+=u.type==="s"?1:-1,r===1?t=u.time:(t&&+t!=+u.time&&s.push(n.fromDateTimes(t,u.time)),t=null);return n.merge(s)}difference(...e){return n.xor([this].concat(e)).map(t=>this.intersection(t)).filter(t=>t&&!t.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \\u2013 ${this.e.toISO()})`:fr}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:fr}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:fr}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:fr}toFormat(e,{separator:t=" \\u2013 "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:fr}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):B.invalid(this.invalidReason)}mapEndpoints(e){return n.fromDateTimes(e(this.s),e(this.e))}};var gt=class{static hasDST(e=X.defaultZone){let t=q.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return ge.isValidZone(e)}static normalizeZone(e){return Ve(e,X.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||ne.create(t,r,i)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||ne.create(t,r,i)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||ne.create(t,r,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||ne.create(t,r,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return ne.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return ne.create(t,null,"gregory").eras(e)}static features(){return{relative:Hr()}}};function ha(n,e){let t=s=>s.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=t(e)-t(n);return Math.floor(B.fromMillis(r).as("days"))}function Sc(n,e,t){let r=[["years",(a,u)=>u.year-a.year],["quarters",(a,u)=>u.quarter-a.quarter],["months",(a,u)=>u.month-a.month+(u.year-a.year)*12],["weeks",(a,u)=>{let l=ha(a,u);return(l-l%7)/7}],["days",ha]],s={},i,o;for(let[a,u]of r)if(t.indexOf(a)>=0){i=a;let l=u(n,e);o=n.plus({[a]:l}),o>e?(n=n.plus({[a]:l-1}),l-=1):n=o,s[a]=l}return[n,s,o,i]}function ma(n,e,t,r){let[s,i,o,a]=Sc(n,e,t),u=e-s,l=t.filter(d=>["hours","minutes","seconds","milliseconds"].indexOf(d)>=0);l.length===0&&(o0?B.fromMillis(u,r).shiftTo(...l).plus(f):f}var wi={arab:"[\\u0660-\\u0669]",arabext:"[\\u06F0-\\u06F9]",bali:"[\\u1B50-\\u1B59]",beng:"[\\u09E6-\\u09EF]",deva:"[\\u0966-\\u096F]",fullwide:"[\\uFF10-\\uFF19]",gujr:"[\\u0AE6-\\u0AEF]",hanidec:"[\\u3007|\\u4E00|\\u4E8C|\\u4E09|\\u56DB|\\u4E94|\\u516D|\\u4E03|\\u516B|\\u4E5D]",khmr:"[\\u17E0-\\u17E9]",knda:"[\\u0CE6-\\u0CEF]",laoo:"[\\u0ED0-\\u0ED9]",limb:"[\\u1946-\\u194F]",mlym:"[\\u0D66-\\u0D6F]",mong:"[\\u1810-\\u1819]",mymr:"[\\u1040-\\u1049]",orya:"[\\u0B66-\\u0B6F]",tamldec:"[\\u0BE6-\\u0BEF]",telu:"[\\u0C66-\\u0C6F]",thai:"[\\u0E50-\\u0E59]",tibt:"[\\u0F20-\\u0F29]",latn:"\\\\d"},pa={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},kc=wi.hanidec.replace(/[\\[|\\]]/g,"").split("");function Da(n){let e=parseInt(n,10);if(isNaN(e)){e="";for(let t=0;t=i&&r<=o&&(e+=r-i)}}return parseInt(e,10)}else return e}function _e({numberingSystem:n},e=""){return new RegExp(`${wi[n||"latn"]}${e}`)}var Cc="missing Intl.DateTimeFormat.formatToParts support";function G(n,e=t=>t){return{regex:n,deser:([t])=>e(Da(t))}}var vc="\\xA0",ba=`[ ${vc}]`,Fa=new RegExp(ba,"g");function xc(n){return n.replace(/\\./g,"\\\\.?").replace(Fa,ba)}function ya(n){return n.replace(/\\./g,"").replace(Fa," ").toLowerCase()}function Ue(n,e){return n===null?null:{regex:RegExp(n.map(xc).join("|")),deser:([t])=>n.findIndex(r=>ya(t)===ya(r))+e}}function ga(n,e){return{regex:n,deser:([,t,r])=>Vt(t,r),groups:e}}function Ti(n){return{regex:n,deser:([e])=>e}}function Oc(n){return n.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,"\\\\$&")}function Ic(n,e){let t=_e(e),r=_e(e,"{2}"),s=_e(e,"{3}"),i=_e(e,"{4}"),o=_e(e,"{6}"),a=_e(e,"{1,2}"),u=_e(e,"{1,3}"),l=_e(e,"{1,6}"),f=_e(e,"{1,9}"),d=_e(e,"{2,4}"),m=_e(e,"{4,6}"),h=D=>({regex:RegExp(Oc(D.val)),deser:([T])=>T,literal:!0}),g=(D=>{if(n.literal)return h(D);switch(D.val){case"G":return Ue(e.eras("short",!1),0);case"GG":return Ue(e.eras("long",!1),0);case"y":return G(l);case"yy":return G(d,or);case"yyyy":return G(i);case"yyyyy":return G(m);case"yyyyyy":return G(o);case"M":return G(a);case"MM":return G(r);case"MMM":return Ue(e.months("short",!0,!1),1);case"MMMM":return Ue(e.months("long",!0,!1),1);case"L":return G(a);case"LL":return G(r);case"LLL":return Ue(e.months("short",!1,!1),1);case"LLLL":return Ue(e.months("long",!1,!1),1);case"d":return G(a);case"dd":return G(r);case"o":return G(u);case"ooo":return G(s);case"HH":return G(r);case"H":return G(a);case"hh":return G(r);case"h":return G(a);case"mm":return G(r);case"m":return G(a);case"q":return G(a);case"qq":return G(r);case"s":return G(a);case"ss":return G(r);case"S":return G(u);case"SSS":return G(s);case"u":return Ti(f);case"uu":return Ti(a);case"uuu":return G(t);case"a":return Ue(e.meridiems(),0);case"kkkk":return G(i);case"kk":return G(d,or);case"W":return G(a);case"WW":return G(r);case"E":case"c":return G(t);case"EEE":return Ue(e.weekdays("short",!1,!1),1);case"EEEE":return Ue(e.weekdays("long",!1,!1),1);case"ccc":return Ue(e.weekdays("short",!0,!1),1);case"cccc":return Ue(e.weekdays("long",!0,!1),1);case"Z":case"ZZ":return ga(new RegExp(`([+-]${a.source})(?::(${r.source}))?`),2);case"ZZZ":return ga(new RegExp(`([+-]${a.source})(${r.source})?`),2);case"z":return Ti(/[a-z_+-/]{1,256}?/i);default:return h(D)}})(n)||{invalidReason:Cc};return g.token=n,g}var Lc={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};function Nc(n,e,t){let{type:r,value:s}=n;if(r==="literal")return{literal:!0,val:s};let i=t[r],o=Lc[r];if(typeof o=="object"&&(o=o[i]),o)return{literal:!1,val:o}}function Ac(n){return[`^${n.map(t=>t.regex).reduce((t,r)=>`${t}(${r.source})`,"")}$`,n]}function Mc(n,e,t){let r=n.match(e);if(r){let s={},i=1;for(let o in t)if(kt(t,o)){let a=t[o],u=a.groups?a.groups+1:1;!a.literal&&a.token&&(s[a.token.val[0]]=a.deser(r.slice(i,i+u))),i+=u}return[r,s]}else return[r,{}]}function _c(n){let e=i=>{switch(i){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},t=null,r;return W(n.z)||(t=ge.create(n.z)),W(n.Z)||(t||(t=new he(n.Z)),r=n.Z),W(n.q)||(n.M=(n.q-1)*3+1),W(n.h)||(n.h<12&&n.a===1?n.h+=12:n.h===12&&n.a===0&&(n.h=0)),n.G===0&&n.y&&(n.y=-n.y),W(n.u)||(n.S=sr(n.u)),[Object.keys(n).reduce((i,o)=>{let a=e(o);return a&&(i[a]=n[o]),i},{}),t,r]}var Si=null;function Bc(){return Si||(Si=q.fromMillis(1555555555555)),Si}function Pc(n,e){if(n.literal)return n;let t=we.macroTokenToFormatOpts(n.val);if(!t)return n;let i=we.create(e,t).formatDateTimeParts(Bc()).map(o=>Nc(o,e,t));return i.includes(void 0)?n:i}function $c(n,e){return Array.prototype.concat(...n.map(t=>Pc(t,e)))}function ki(n,e,t){let r=$c(we.parseFormat(t),n),s=r.map(o=>Ic(o,n)),i=s.find(o=>o.invalidReason);if(i)return{input:e,tokens:r,invalidReason:i.invalidReason};{let[o,a]=Ac(s),u=RegExp(o,"i"),[l,f]=Mc(e,u,a),[d,m,h]=f?_c(f):[null,null,void 0];if(kt(f,"a")&&kt(f,"H"))throw new pt("Can\'t include meridiem when specifying 24-hour format");return{input:e,tokens:r,regex:u,rawMatches:l,matches:f,result:d,zone:m,specificOffset:h}}}function Ea(n,e,t){let{result:r,zone:s,specificOffset:i,invalidReason:o}=ki(n,e,t);return[r,s,i,o]}var wa=[0,31,59,90,120,151,181,212,243,273,304,334],Ta=[0,31,60,91,121,152,182,213,244,274,305,335];function Be(n,e){return new de("unit out of range",`you specified ${e} (of type ${typeof e}) as a ${n}, which is invalid`)}function Sa(n,e,t){let r=new Date(Date.UTC(n,e-1,t));n<100&&n>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);let s=r.getUTCDay();return s===0?7:s}function ka(n,e,t){return t+(jt(n)?Ta:wa)[e-1]}function Ca(n,e){let t=jt(n)?Ta:wa,r=t.findIndex(i=>iln(e)?(a=e+1,o=1):a=e,R({weekYear:a,weekNumber:o,weekday:i},ar(n))}function Ci(n){let{weekYear:e,weekNumber:t,weekday:r}=n,s=Sa(e,1,4),i=qt(e),o=t*7+r-s-3,a;o<1?(a=e-1,o+=qt(a)):o>i?(a=e+1,o-=qt(e)):a=e;let{month:u,day:l}=Ca(a,o);return R({year:a,month:u,day:l},ar(n))}function Qr(n){let{year:e,month:t,day:r}=n,s=ka(e,t,r);return R({year:e,ordinal:s},ar(n))}function vi(n){let{year:e,ordinal:t}=n,{month:r,day:s}=Ca(e,t);return R({year:e,month:r,day:s},ar(n))}function va(n){let e=rr(n.weekYear),t=nt(n.weekNumber,1,ln(n.weekYear)),r=nt(n.weekday,1,7);return e?t?r?!1:Be("weekday",n.weekday):Be("week",n.week):Be("weekYear",n.weekYear)}function xa(n){let e=rr(n.year),t=nt(n.ordinal,1,qt(n.year));return e?t?!1:Be("ordinal",n.ordinal):Be("year",n.year)}function xi(n){let e=rr(n.year),t=nt(n.month,1,12),r=nt(n.day,1,un(n.year,n.month));return e?t?r?!1:Be("day",n.day):Be("month",n.month):Be("year",n.year)}function Oi(n){let{hour:e,minute:t,second:r,millisecond:s}=n,i=nt(e,0,23)||e===24&&t===0&&r===0&&s===0,o=nt(t,0,59),a=nt(r,0,59),u=nt(s,0,999);return i?o?a?u?!1:Be("millisecond",s):Be("second",r):Be("minute",t):Be("hour",e)}var Ii="Invalid DateTime",Oa=864e13;function Xr(n){return new de("unsupported zone",`the zone "${n.name}" is not supported`)}function Li(n){return n.weekData===null&&(n.weekData=Zr(n.c)),n.weekData}function dr(n,e){let t={ts:n.ts,zone:n.zone,c:n.c,o:n.o,loc:n.loc,invalid:n.invalid};return new q(ye(R(R({},t),e),{old:t}))}function Pa(n,e,t){let r=n-e*60*1e3,s=t.offset(r);if(e===s)return[r,e];r-=(s-e)*60*1e3;let i=t.offset(r);return s===i?[r,s]:[n-Math.min(s,i)*60*1e3,Math.max(s,i)]}function Ia(n,e){n+=e*60*1e3;let t=new Date(n);return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate(),hour:t.getUTCHours(),minute:t.getUTCMinutes(),second:t.getUTCSeconds(),millisecond:t.getUTCMilliseconds()}}function ts(n,e,t){return Pa(ir(n),e,t)}function La(n,e){let t=n.o,r=n.c.year+Math.trunc(e.years),s=n.c.month+Math.trunc(e.months)+Math.trunc(e.quarters)*3,i=ye(R({},n.c),{year:r,month:s,day:Math.min(n.c.day,un(r,s))+Math.trunc(e.days)+Math.trunc(e.weeks)*7}),o=B.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=ir(i),[u,l]=Pa(a,t,n.zone);return o!==0&&(u+=o,l=n.zone.offset(u)),{ts:u,o:l}}function hr(n,e,t,r,s,i){let{setZone:o,zone:a}=t;if(n&&Object.keys(n).length!==0){let u=e||a,l=q.fromObject(n,ye(R({},t),{zone:u,specificOffset:i}));return o?l:l.setZone(a)}else return q.invalid(new de("unparsable",`the input "${s}" can\'t be parsed as ${r}`))}function es(n,e,t=!0){return n.isValid?we.create(ne.create("en-US"),{allowZ:t,forceSimple:!0}).formatDateTimeFromString(n,e):null}function Ni(n,e){let t=n.c.year>9999||n.c.year<0,r="";return t&&n.c.year>=0&&(r+="+"),r+=re(n.c.year,t?6:4),e?(r+="-",r+=re(n.c.month),r+="-",r+=re(n.c.day)):(r+=re(n.c.month),r+=re(n.c.day)),r}function Na(n,e,t,r,s,i){let o=re(n.c.hour);return e?(o+=":",o+=re(n.c.minute),(n.c.second!==0||!t)&&(o+=":")):o+=re(n.c.minute),(n.c.second!==0||!t)&&(o+=re(n.c.second),(n.c.millisecond!==0||!r)&&(o+=".",o+=re(n.c.millisecond,3))),s&&(n.isOffsetFixed&&n.offset===0&&!i?o+="Z":n.o<0?(o+="-",o+=re(Math.trunc(-n.o/60)),o+=":",o+=re(Math.trunc(-n.o%60))):(o+="+",o+=re(Math.trunc(n.o/60)),o+=":",o+=re(Math.trunc(n.o%60)))),i&&(o+="["+n.zone.ianaName+"]"),o}var $a={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Rc={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},jc={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Ra=["year","month","day","hour","minute","second","millisecond"],qc=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],Vc=["year","ordinal","hour","minute","second","millisecond"];function Aa(n){let e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[n.toLowerCase()];if(!e)throw new sn(n);return e}function Ma(n,e){let t=Ve(e.zone,X.defaultZone),r=ne.fromObject(e),s=X.now(),i,o;if(W(n.year))i=s;else{for(let l of Ra)W(n[l])&&(n[l]=$a[l]);let a=xi(n)||Oi(n);if(a)return q.invalid(a);let u=t.offset(s);[i,o]=ts(n,u,t)}return new q({ts:i,zone:t,loc:r,o})}function _a(n,e,t){let r=W(t.round)?!0:t.round,s=(o,a)=>(o=an(o,r||t.calendary?0:2,!0),e.loc.clone(t).relFormatter(t).format(o,a)),i=o=>t.calendary?e.hasSame(n,o)?0:e.startOf(o).diff(n.startOf(o),o).get(o):e.diff(n,o).get(o);if(t.unit)return s(i(t.unit),t.unit);for(let o of t.units){let a=i(o);if(Math.abs(a)>=1)return s(a,o)}return s(n>e?-0:0,t.units[t.units.length-1])}function Ba(n){let e={},t;return n.length>0&&typeof n[n.length-1]=="object"?(e=n[n.length-1],t=Array.from(n).slice(0,n.length-1)):t=Array.from(n),[e,t]}var q=class n{constructor(e){let t=e.zone||X.defaultZone,r=e.invalid||(Number.isNaN(e.ts)?new de("invalid input"):null)||(t.isValid?null:Xr(t));this.ts=W(e.ts)?X.now():e.ts;let s=null,i=null;if(!r)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[s,i]=[e.old.c,e.old.o];else{let a=t.offset(this.ts);s=Ia(this.ts,a),r=Number.isNaN(s.year)?new de("invalid input"):null,s=r?null:s,i=r?null:a}this._zone=t,this.loc=e.loc||ne.create(),this.invalid=r,this.weekData=null,this.c=s,this.o=i,this.isLuxonDateTime=!0}static now(){return new n({})}static local(){let[e,t]=Ba(arguments),[r,s,i,o,a,u,l]=t;return Ma({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static utc(){let[e,t]=Ba(arguments),[r,s,i,o,a,u,l]=t;return e.zone=he.utcInstance,Ma({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static fromJSDate(e,t={}){let r=Po(e)?e.valueOf():NaN;if(Number.isNaN(r))return n.invalid("invalid input");let s=Ve(t.zone,X.defaultZone);return s.isValid?new n({ts:r,zone:s,loc:ne.fromObject(t)}):n.invalid(Xr(s))}static fromMillis(e,t={}){if(tt(e))return e<-Oa||e>Oa?n.invalid("Timestamp out of range"):new n({ts:e,zone:Ve(t.zone,X.defaultZone),loc:ne.fromObject(t)});throw new fe(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(tt(e))return new n({ts:e*1e3,zone:Ve(t.zone,X.defaultZone),loc:ne.fromObject(t)});throw new fe("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};let r=Ve(t.zone,X.defaultZone);if(!r.isValid)return n.invalid(Xr(r));let s=X.now(),i=W(t.specificOffset)?r.offset(s):t.specificOffset,o=cn(e,Aa),a=!W(o.ordinal),u=!W(o.year),l=!W(o.month)||!W(o.day),f=u||l,d=o.weekYear||o.weekNumber,m=ne.fromObject(t);if((f||a)&&d)throw new pt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&a)throw new pt("Can\'t mix ordinal dates with month/day");let h=d||o.weekday&&!f,b,g,D=Ia(s,i);h?(b=qc,g=Rc,D=Zr(D)):a?(b=Vc,g=jc,D=Qr(D)):(b=Ra,g=$a);let T=!1;for(let C of b){let V=o[C];W(V)?T?o[C]=g[C]:o[C]=D[C]:T=!0}let I=h?va(o):a?xa(o):xi(o),N=I||Oi(o);if(N)return n.invalid(N);let y=h?Ci(o):a?vi(o):o,[w,v]=ts(y,i,r),x=new n({ts:w,zone:r,o:v,loc:m});return o.weekday&&f&&e.weekday!==x.weekday?n.invalid("mismatched weekday",`you can\'t specify both a weekday of ${o.weekday} and a date of ${x.toISO()}`):x}static fromISO(e,t={}){let[r,s]=ia(e);return hr(r,s,t,"ISO 8601",e)}static fromRFC2822(e,t={}){let[r,s]=oa(e);return hr(r,s,t,"RFC 2822",e)}static fromHTTP(e,t={}){let[r,s]=aa(e);return hr(r,s,t,"HTTP",t)}static fromFormat(e,t,r={}){if(W(e)||W(t))throw new fe("fromFormat requires an input string and a format");let{locale:s=null,numberingSystem:i=null}=r,o=ne.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0}),[a,u,l,f]=Ea(o,e,t);return f?n.invalid(f):hr(a,u,r,`format ${t}`,e,l)}static fromString(e,t,r={}){return n.fromFormat(e,t,r)}static fromSQL(e,t={}){let[r,s]=ca(e);return hr(r,s,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new fe("need to specify a reason the DateTime is invalid");let r=e instanceof de?e:new de(e,t);if(X.throwOnInvalid)throw new Ur(r);return new n({invalid:r})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}get(e){return this[e]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Li(this).weekYear:NaN}get weekNumber(){return this.isValid?Li(this).weekNumber:NaN}get weekday(){return this.isValid?Li(this).weekday:NaN}get ordinal(){return this.isValid?Qr(this.c).ordinal:NaN}get monthShort(){return this.isValid?gt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?gt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?gt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?gt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}get isInLeapYear(){return jt(this.year)}get daysInMonth(){return un(this.year,this.month)}get daysInYear(){return this.isValid?qt(this.year):NaN}get weeksInWeekYear(){return this.isValid?ln(this.weekYear):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:r,calendar:s}=we.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:r,outputCalendar:s}}toUTC(e=0,t={}){return this.setZone(he.instance(e),t)}toLocal(){return this.setZone(X.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:r=!1}={}){if(e=Ve(e,X.defaultZone),e.equals(this.zone))return this;if(e.isValid){let s=this.ts;if(t||r){let i=e.offset(this.ts),o=this.toObject();[s]=ts(o,i,e)}return dr(this,{ts:s,zone:e})}else return n.invalid(Xr(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t,outputCalendar:r});return dr(this,{loc:s})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;let t=cn(e,Aa),r=!W(t.weekYear)||!W(t.weekNumber)||!W(t.weekday),s=!W(t.ordinal),i=!W(t.year),o=!W(t.month)||!W(t.day),a=i||o,u=t.weekYear||t.weekNumber;if((a||s)&&u)throw new pt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&s)throw new pt("Can\'t mix ordinal dates with month/day");let l;r?l=Ci(R(R({},Zr(this.c)),t)):W(t.ordinal)?(l=R(R({},this.toObject()),t),W(t.day)&&(l.day=Math.min(un(l.year,l.month),l.day))):l=vi(R(R({},Qr(this.c)),t));let[f,d]=ts(l,this.o,this.zone);return dr(this,{ts:f,o:d})}plus(e){if(!this.isValid)return this;let t=B.fromDurationLike(e);return dr(this,La(this,t))}minus(e){if(!this.isValid)return this;let t=B.fromDurationLike(e).negate();return dr(this,La(this,t))}startOf(e){if(!this.isValid)return this;let t={},r=B.normalizeUnit(e);switch(r){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0;break;case"milliseconds":break}if(r==="weeks"&&(t.weekday=1),r==="quarters"){let s=Math.ceil(this.month/3);t.month=(s-1)*3+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?we.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):Ii}toLocaleString(e=on,t={}){return this.isValid?we.create(this.loc.clone(t),e).formatDateTime(this):Ii}toLocaleParts(e={}){return this.isValid?we.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:r=!1,includeOffset:s=!0,extendedZone:i=!1}={}){if(!this.isValid)return null;let o=e==="extended",a=Ni(this,o);return a+="T",a+=Na(this,o,t,r,s,i),a}toISODate({format:e="extended"}={}){return this.isValid?Ni(this,e==="extended"):null}toISOWeekDate(){return es(this,"kkkk-\'W\'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:r=!0,includePrefix:s=!1,extendedZone:i=!1,format:o="extended"}={}){return this.isValid?(s?"T":"")+Na(this,o==="extended",t,e,r,i):null}toRFC2822(){return es(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return es(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss \'GMT\'")}toSQLDate(){return this.isValid?Ni(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:r=!0}={}){let s="HH:mm:ss.SSS";return(t||e)&&(r&&(s+=" "),t?s+="z":e&&(s+="ZZ")),es(this,s,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Ii}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t=R({},this.c);return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",r={}){if(!this.isValid||!e.isValid)return B.invalid("created by diffing an invalid DateTime");let s=R({locale:this.locale,numberingSystem:this.numberingSystem},r),i=$o(t).map(B.normalizeUnit),o=e.valueOf()>this.valueOf(),a=o?this:e,u=o?e:this,l=ma(a,u,i,s);return o?l.negate():l}diffNow(e="milliseconds",t={}){return this.diff(n.now(),e,t)}until(e){return this.isValid?yt.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;let r=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(t)<=r&&r<=s.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let t=e.base||n.fromObject({},{zone:this.zone}),r=e.padding?thist.valueOf(),Math.min)}static max(...e){if(!e.every(n.isDateTime))throw new fe("max requires all arguments be DateTimes");return Xs(e,t=>t.valueOf(),Math.max)}static fromFormatExplain(e,t,r={}){let{locale:s=null,numberingSystem:i=null}=r,o=ne.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0});return ki(o,e,t)}static fromStringExplain(e,t,r={}){return n.fromFormatExplain(e,t,r)}static get DATE_SHORT(){return on}static get DATE_MED(){return $n}static get DATE_MED_WITH_WEEKDAY(){return Gs}static get DATE_FULL(){return Rn}static get DATE_HUGE(){return jn}static get TIME_SIMPLE(){return qn}static get TIME_WITH_SECONDS(){return Vn}static get TIME_WITH_SHORT_OFFSET(){return Un}static get TIME_WITH_LONG_OFFSET(){return Kn}static get TIME_24_SIMPLE(){return Wn}static get TIME_24_WITH_SECONDS(){return Hn}static get TIME_24_WITH_SHORT_OFFSET(){return Jn}static get TIME_24_WITH_LONG_OFFSET(){return zn}static get DATETIME_SHORT(){return Yn}static get DATETIME_SHORT_WITH_SECONDS(){return Gn}static get DATETIME_MED(){return Zn}static get DATETIME_MED_WITH_SECONDS(){return Qn}static get DATETIME_MED_WITH_WEEKDAY(){return Zs}static get DATETIME_FULL(){return Xn}static get DATETIME_FULL_WITH_SECONDS(){return er}static get DATETIME_HUGE(){return tr}static get DATETIME_HUGE_WITH_SECONDS(){return nr}};function bn(n){if(q.isDateTime(n))return n;if(n&&n.valueOf&&tt(n.valueOf()))return q.fromJSDate(n);if(n&&typeof n=="object")return q.fromObject(n);throw new fe(`Unknown datetime argument: ${n}, of type ${typeof n}`)}var bt=Vr(ns());var Fn=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE89\\uDE8F-\\uDEC2\\uDEC6\\uDECE-\\uDEDC\\uDEDF-\\uDEE9]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;function Mi(n){return n==null?n:n.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds").normalize()}function ja(n,e,t,r){return n.second==0&&n.minute==0&&n.hour==0?n.toLocal().toFormat(e,{locale:r}):n.toLocal().toFormat(t,{locale:r})}function qa(n){n=Mi(n);let e="";return n.years&&(e+=`${n.years} years, `),n.months&&(e+=`${n.months} months, `),n.weeks&&(e+=`${n.weeks} weeks, `),n.days&&(e+=`${n.days} days, `),n.hours&&(e+=`${n.hours} hours, `),n.minutes&&(e+=`${n.minutes} minutes, `),n.seconds&&(e+=`${Math.round(n.seconds)} seconds, `),n.milliseconds&&(e+=`${Math.round(n.milliseconds)} ms, `),e.endsWith(", ")&&(e=e.substring(0,e.length-2)),e}function En(n){return n.includes("/")&&(n=n.substring(n.lastIndexOf("/")+1)),n.endsWith(".md")&&(n=n.substring(0,n.length-3)),n}function Va(n){return n.includes(".")?n.substring(n.lastIndexOf(".")+1):""}var Uc=bt.alt(bt.regex(new RegExp(Fn(),"")),bt.regex(/[0-9\\p{Letter}_-]+/u),bt.whitespace.map(n=>" "),bt.any.map(n=>" ")).many().map(n=>n.join("").split(/\\s+/).join(" ").trim());function Ua(n){return Uc.tryParse(n)}var Oe=class n{static file(e,t=!1,r){return new n({path:e,embed:t,display:r,subpath:void 0,type:"file"})}static infer(e,t=!1,r){if(e.includes("#^")){let s=e.split("#^");return n.block(s[0],s[1],t,r)}else if(e.includes("#")){let s=e.split("#");return n.header(s[0],s[1],t,r)}else return n.file(e,t,r)}static header(e,t,r,s){return new n({path:e,embed:r,display:s,subpath:Ua(t),type:"header"})}static block(e,t,r,s){return new n({path:e,embed:r,display:s,subpath:t,type:"block"})}static fromObject(e){return new n(e)}static parseInner(e){let[t,r]=Kc(e);return n.infer(t,!1,r)}constructor(e){Object.assign(this,e)}withPath(e){return new n(Object.assign({},this,{path:e}))}withDisplay(e){return new n(Object.assign({},this,{display:e}))}withEmbed(e){return this.embed==e?this:new n(Object.assign({},this,{embed:e}))}withHeader(e){return n.header(this.path,e,this.embed,this.display)}withBlock(e){return n.block(this.path,e,this.embed,this.display)}equals(e){return e==null||e==null?!1:this.path==e.path&&this.type==e.type&&this.subpath==e.subpath}toString(){return this.markdown()}toObject(){return{path:this.path,type:this.type,subpath:this.subpath,display:this.display,embed:this.embed}}toFile(){return n.file(this.path,this.embed,this.display)}toEmbed(){return this.withEmbed(!0)}fromEmbed(){return this.withEmbed(!1)}markdown(){let e=(this.embed?"!":"")+"[["+this.obsidianLink();return e+="|",e+=this.displayOrDefault(),e+="]]",e}displayOrDefault(){if(this.display)return this.display;{let e=En(this.path);return(this.type=="header"||this.type=="block")&&(e+=" > "+this.subpath),e}}obsidianLink(){var t,r;let e=this.path.replace("|","\\\\|");return this.type=="header"?e+"#"+((t=this.subpath)==null?void 0:t.replace("|","\\\\|")):this.type=="block"?e+"#^"+((r=this.subpath)==null?void 0:r.replace("|","\\\\|")):e}fileName(){return En(this.path)}};function Kc(n){let e=-1;for(;(e=n.indexOf("|",e+1))>=0;)if(!(e>0&&n[e-1]=="\\\\"))return[n.substring(0,e).replace(/\\\\\\|/g,"|"),n.substring(e+1)];return[n.replace(/\\\\\\|/g,"|"),void 0]}var rs=Symbol.for("yaml.alias"),ss=Symbol.for("yaml.document"),Ke=Symbol.for("yaml.map"),_i=Symbol.for("yaml.pair"),Ie=Symbol.for("yaml.scalar"),Ft=Symbol.for("yaml.seq"),Te=Symbol.for("yaml.node.type"),We=n=>!!n&&typeof n=="object"&&n[Te]===rs,rt=n=>!!n&&typeof n=="object"&&n[Te]===ss,He=n=>!!n&&typeof n=="object"&&n[Te]===Ke,H=n=>!!n&&typeof n=="object"&&n[Te]===_i,K=n=>!!n&&typeof n=="object"&&n[Te]===Ie,Je=n=>!!n&&typeof n=="object"&&n[Te]===Ft;function Z(n){if(n&&typeof n=="object")switch(n[Te]){case Ke:case Ft:return!0}return!1}function J(n){if(n&&typeof n=="object")switch(n[Te]){case rs:case Ke:case Ie:case Ft:return!0}return!1}var Ka=n=>(K(n)||Z(n))&&!!n.anchor;var Ce=Symbol("break visit"),Wa=Symbol("skip children"),st=Symbol("remove node");function ze(n,e){let t=Ha(e);rt(n)?wn(null,n.contents,t,Object.freeze([n]))===st&&(n.contents=null):wn(null,n,t,Object.freeze([]))}ze.BREAK=Ce;ze.SKIP=Wa;ze.REMOVE=st;function wn(n,e,t,r){let s=Ja(n,e,t,r);if(J(s)||H(s))return za(n,r,s),wn(n,s,t,r);if(typeof s!="symbol"){if(Z(e)){r=Object.freeze(r.concat(e));for(let i=0;in.replace(/[!,[\\]{}]/g,e=>Wc[e]),it=class n{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},n.defaultYaml,e),this.tags=Object.assign({},n.defaultTags,t)}clone(){let e=new n(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new n(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:n.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},n.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:n.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},n.defaultTags),this.atNextDocument=!1);let r=e.trim().split(/[ \\t]+/),s=r.shift();switch(s){case"%TAG":{if(r.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[i,o]=r;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=r;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\\d+\\.\\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${s}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren\'t resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,r,s]=e.match(new RegExp("^(.*!)([^!]*)$","s"));s||t(`The ${e} tag has no suffix`);let i=this.tags[r];if(i)try{return i+decodeURIComponent(s)}catch(o){return t(String(o)),null}return r==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,r]of Object.entries(this.tags))if(e.startsWith(r))return t+Hc(e.substring(r.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),s;if(e&&r.length>0&&J(e.contents)){let i={};ze(e.contents,(o,a)=>{J(a)&&a.tag&&(i[a.tag]=!0)}),s=Object.keys(i)}else s=[];for(let[i,o]of r)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||s.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`\n`)}};it.defaultYaml={explicit:!1,version:"1.2"};it.defaultTags={"!!":"tag:yaml.org,2002:"};function os(n){if(/[\\x00-\\x19\\s,[\\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Bi(n){let e=new Set;return ze(n,{Value(t,r){r.anchor&&e.add(r.anchor)}}),e}function Pi(n,e){for(let t=1;;++t){let r=`${n}${t}`;if(!e.has(r))return r}}function Ya(n,e){let t=[],r=new Map,s=null;return{onAnchor:i=>{t.push(i),s||(s=Bi(n));let o=Pi(e,s);return s.add(o),o},setAnchors:()=>{for(let i of t){let o=r.get(i);if(typeof o=="object"&&o.anchor&&(K(o.node)||Z(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:r}}function xt(n,e,t,r){if(r&&typeof r=="object")if(Array.isArray(r))for(let s=0,i=r.length;sce(r,String(s),t));if(n&&typeof n.toJSON=="function"){if(!t||!Ka(n))return n.toJSON(e,t);let r={aliasCount:0,count:1,res:void 0};t.anchors.set(n,r),t.onCreate=i=>{r.res=i,delete t.onCreate};let s=n.toJSON(e,t);return t.onCreate&&t.onCreate(s),s}return typeof n=="bigint"&&!(t!=null&&t.keep)?Number(n):n}var Ot=class{constructor(e){Object.defineProperty(this,Te,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:r,onAnchor:s,reviver:i}={}){if(!rt(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},a=ce(this,"",o);if(typeof s=="function")for(let{count:u,res:l}of o.anchors.values())s(l,u);return typeof i=="function"?xt(i,{"":a},"",a):a}};var Et=class extends Ot{constructor(e){super(rs),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return ze(e,{Node:(r,s)=>{if(s===this)return ze.BREAK;s.anchor===this.source&&(t=s)}}),t}toJSON(e,t){if(!t)return{source:this.source};let{anchors:r,doc:s,maxAliasCount:i}=t,o=this.resolve(s);if(!o){let u=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(u)}let a=r.get(o);if(a||(ce(o,null,t),a=r.get(o)),!a||a.res===void 0){let u="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(u)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=as(s,o,r)),a.count*a.aliasCount>i)){let u="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(u)}return a.res}toString(e,t,r){let s=`*${this.source}`;if(e){if(os(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${s} `}return s}};function as(n,e,t){if(We(e)){let r=e.resolve(n),s=t&&r&&t.get(r);return s?s.count*s.aliasCount:0}else if(Z(e)){let r=0;for(let s of e.items){let i=as(n,s,t);i>r&&(r=i)}return r}else if(H(e)){let r=as(n,e.key,t),s=as(n,e.value,t);return Math.max(r,s)}return 1}var us=n=>!n||typeof n!="function"&&typeof n!="object",P=class extends Ot{constructor(e){super(Ie),this.value=e}toJSON(e,t){return t!=null&&t.keep?this.value:ce(this.value,e,t)}toString(){return String(this.value)}};P.BLOCK_FOLDED="BLOCK_FOLDED";P.BLOCK_LITERAL="BLOCK_LITERAL";P.PLAIN="PLAIN";P.QUOTE_DOUBLE="QUOTE_DOUBLE";P.QUOTE_SINGLE="QUOTE_SINGLE";var Jc="tag:yaml.org,2002:";function zc(n,e,t){var r;if(e){let s=t.filter(o=>o.tag===e),i=(r=s.find(o=>!o.format))!=null?r:s[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(s=>{var i;return((i=s.identify)==null?void 0:i.call(s,n))&&!s.format})}function wt(n,e,t){var d,m,h;if(rt(n)&&(n=n.contents),J(n))return n;if(H(n)){let b=(m=(d=t.schema[Ke]).createNode)==null?void 0:m.call(d,t.schema,null,t);return b.items.push(n),b}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt!="undefined"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:r,onAnchor:s,onTagObj:i,schema:o,sourceObjects:a}=t,u;if(r&&n&&typeof n=="object"){if(u=a.get(n),u)return u.anchor||(u.anchor=s(n)),new Et(u.anchor);u={anchor:null,node:null},a.set(n,u)}e!=null&&e.startsWith("!!")&&(e=Jc+e.slice(2));let l=zc(n,e,o.tags);if(!l){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let b=new P(n);return u&&(u.node=b),b}l=n instanceof Map?o[Ke]:Symbol.iterator in Object(n)?o[Ft]:o[Ke]}i&&(i(l),delete t.onTagObj);let f=l!=null&&l.createNode?l.createNode(t.schema,n,t):typeof((h=l==null?void 0:l.nodeClass)==null?void 0:h.from)=="function"?l.nodeClass.from(t.schema,n,t):new P(n);return e?f.tag=e:l.default||(f.tag=l.tag),u&&(u.node=f),f}function pr(n,e,t){let r=t;for(let s=e.length-1;s>=0;--s){let i=e[s];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=r,r=o}else r=new Map([[i,r]])}return wt(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var kn=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Sn=class extends Ot{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(r=>J(r)||H(r)?r.clone(e):r),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(kn(e))this.add(t);else{let[r,...s]=e,i=this.get(r,!0);if(Z(i))i.addIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let s=this.get(t,!0);if(Z(s))return s.deleteIn(r);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...s]=e,i=this.get(r,!0);return s.length===0?!t&&K(i)?i.value:i:Z(i)?i.getIn(s,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!H(t))return!1;let r=t.value;return r==null||e&&K(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let s=this.get(t,!0);return Z(s)?s.hasIn(r):!1}setIn(e,t){let[r,...s]=e;if(s.length===0)this.set(r,t);else{let i=this.get(r,!0);if(Z(i))i.setIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}};var Ga=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function Pe(n,e){return/^\\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var ot=(n,e,t)=>n.endsWith(`\n`)?Pe(t,e):t.includes(`\n`)?`\n`+Pe(t,e):(n.endsWith(" ")?"":" ")+t;var $i="flow",ls="block",Dr="quoted";function yr(n,e,t="flow",{indentAtStart:r,lineWidth:s=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!s||s<0)return n;ss-Math.max(2,i)?l.push(0):d=s-r);let m,h,b=!1,g=-1,D=-1,T=-1;t===ls&&(g=Za(n,g,e.length),g!==-1&&(d=g+u));for(let N;N=n[g+=1];){if(t===Dr&&N==="\\\\"){switch(D=g,n[g+1]){case"x":g+=3;break;case"u":g+=5;break;case"U":g+=9;break;default:g+=1}T=g}if(N===`\n`)t===ls&&(g=Za(n,g,e.length)),d=g+e.length+u,m=void 0;else{if(N===" "&&h&&h!==" "&&h!==`\n`&&h!==" "){let y=n[g+1];y&&y!==" "&&y!==`\n`&&y!==" "&&(m=g)}if(g>=d)if(m)l.push(m),d=m+u,m=void 0;else if(t===Dr){for(;h===" "||h===" ";)h=N,N=n[g+=1],b=!0;let y=g>T+1?g-2:D-1;if(f[y])return n;l.push(y),f[y]=!0,d=y+u,m=void 0}else b=!0}h=N}if(b&&a&&a(),l.length===0)return n;o&&o();let I=n.slice(0,l[0]);for(let N=0;N({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),ds=n=>/^(%|---|\\.\\.\\.)/m.test(n);function Yc(n,e,t){if(!e||e<0)return!1;let r=e-t,s=n.length;if(s<=r)return!1;for(let i=0,o=0;ir)return!0;if(o=i+1,s-o<=r)return!1}return!0}function gr(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:r}=e,s=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(ds(n)?" ":""),o="",a=0;for(let u=0,l=t[u];l;l=t[++u])if(l===" "&&t[u+1]==="\\\\"&&t[u+2]==="n"&&(o+=t.slice(a,u)+"\\\\ ",u+=1,a=u,l="\\\\"),l==="\\\\")switch(t[u+1]){case"u":{o+=t.slice(a,u);let f=t.substr(u+2,4);switch(f){case"0000":o+="\\\\0";break;case"0007":o+="\\\\a";break;case"000b":o+="\\\\v";break;case"001b":o+="\\\\e";break;case"0085":o+="\\\\N";break;case"00a0":o+="\\\\_";break;case"2028":o+="\\\\L";break;case"2029":o+="\\\\P";break;default:f.substr(0,2)==="00"?o+="\\\\x"+f.substr(2):o+=t.substr(u,6)}u+=5,a=u+1}break;case"n":if(r||t[u+2]===\'"\'||t.length\n`;let d,m;for(m=t.length;m>0;--m){let v=t[m-1];if(v!==`\n`&&v!==" "&&v!==" ")break}let h=t.substring(m),b=h.indexOf(`\n`);b===-1?d="-":t===h||b!==h.length-1?(d="+",i&&i()):d="",h&&(t=t.slice(0,-h.length),h[h.length-1]===`\n`&&(h=h.slice(0,-1)),h=h.replace(ji,`$&${l}`));let g=!1,D,T=-1;for(D=0;D")+(g?l?"2":"1":"")+d;if(n&&(y+=" "+a(n.replace(/ ?[\\r\\n]+/g," ")),s&&s()),f)return t=t.replace(/\\n+/g,`$&${l}`),`${y}\n${l}${I}${t}${h}`;t=t.replace(/\\n+/g,`\n$&`).replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g,"$1$2").replace(/\\n+/g,`$&${l}`);let w=yr(`${I}${t}${h}`,l,ls,fs(r,!0));return`${y}\n${l}${w}`}function Gc(n,e,t,r){let{type:s,value:i}=n,{actualString:o,implicitKey:a,indent:u,indentStep:l,inFlow:f}=e;if(a&&i.includes(`\n`)||f&&/[[\\]{},]/.test(i))return Cn(i,e);if(!i||/^[\\n\\t ,[\\]{}#&*!|>\'"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(i))return a||f||!i.includes(`\n`)?Cn(i,e):cs(n,e,t,r);if(!a&&!f&&s!==P.PLAIN&&i.includes(`\n`))return cs(n,e,t,r);if(ds(i)){if(u==="")return e.forceBlockIndent=!0,cs(n,e,t,r);if(a&&u===l)return Cn(i,e)}let d=i.replace(/\\n+/g,`$&\n${u}`);if(o){let m=g=>{var D;return g.default&&g.tag!=="tag:yaml.org,2002:str"&&((D=g.test)==null?void 0:D.test(d))},{compat:h,tags:b}=e.doc.schema;if(b.some(m)||h!=null&&h.some(m))return Cn(i,e)}return a?d:yr(d,u,$i,fs(e,!1))}function Wt(n,e,t,r){let{implicitKey:s,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==P.QUOTE_DOUBLE&&/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(o.value)&&(a=P.QUOTE_DOUBLE);let u=f=>{switch(f){case P.BLOCK_FOLDED:case P.BLOCK_LITERAL:return s||i?Cn(o.value,e):cs(o,e,t,r);case P.QUOTE_DOUBLE:return gr(o.value,e);case P.QUOTE_SINGLE:return Ri(o.value,e);case P.PLAIN:return Gc(o,e,t,r);default:return null}},l=u(a);if(l===null){let{defaultKeyType:f,defaultStringType:d}=e.options,m=s&&f||d;if(l=u(m),l===null)throw new Error(`Unsupported default string type ${m}`)}return l}function hs(n,e){let t=Object.assign({blockQuote:!0,commentString:Ga,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),r;switch(t.collectionStyle){case"block":r=!1;break;case"flow":r=!0;break;default:r=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:r,options:t}}function Zc(n,e){var s,i,o,a;if(e.tag){let u=n.filter(l=>l.tag===e.tag);if(u.length>0)return(s=u.find(l=>l.format===e.format))!=null?s:u[0]}let t,r;if(K(e)){r=e.value;let u=n.filter(l=>{var f;return(f=l.identify)==null?void 0:f.call(l,r)});if(u.length>1){let l=u.filter(f=>f.test);l.length>0&&(u=l)}t=(i=u.find(l=>l.format===e.format))!=null?i:u.find(l=>!l.format)}else r=e,t=n.find(u=>u.nodeClass&&r instanceof u.nodeClass);if(!t){let u=(a=(o=r==null?void 0:r.constructor)==null?void 0:o.name)!=null?a:typeof r;throw new Error(`Tag not resolved for ${u} value`)}return t}function Qc(n,e,{anchors:t,doc:r}){if(!r.directives)return"";let s=[],i=(K(n)||Z(n))&&n.anchor;i&&os(i)&&(t.add(i),s.push(`&${i}`));let o=n.tag?n.tag:e.default?null:e.tag;return o&&s.push(r.directives.tagString(o)),s.join(" ")}function Tt(n,e,t,r){var u,l;if(H(n))return n.toString(e,t,r);if(We(n)){if(e.doc.directives)return n.toString(e);if((u=e.resolvedAliases)!=null&&u.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let s,i=J(n)?n:e.doc.createNode(n,{onTagObj:f=>s=f});s||(s=Zc(e.doc.schema.tags,i));let o=Qc(i,s,e);o.length>0&&(e.indentAtStart=((l=e.indentAtStart)!=null?l:0)+o.length+1);let a=typeof s.stringify=="function"?s.stringify(i,e,t,r):K(i)?Wt(i,e,t,r):i.toString(e,t,r);return o?K(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}\n${e.indent}${a}`:a}function Qa({key:n,value:e},t,r,s){var x,C;let{allNullValues:i,doc:o,indent:a,indentStep:u,options:{commentString:l,indentSeq:f,simpleKeys:d}}=t,m=J(n)&&n.comment||null;if(d){if(m)throw new Error("With simple keys, key nodes cannot have comments");if(Z(n)||!J(n)&&typeof n=="object"){let V="With simple keys, collection cannot be used as a key value";throw new Error(V)}}let h=!d&&(!n||m&&e==null&&!t.inFlow||Z(n)||(K(n)?n.type===P.BLOCK_FOLDED||n.type===P.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!h&&(d||!i),indent:a+u});let b=!1,g=!1,D=Tt(n,t,()=>b=!0,()=>g=!0);if(!h&&!t.inFlow&&D.length>1024){if(d)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");h=!0}if(t.inFlow){if(i||e==null)return b&&r&&r(),D===""?"?":h?`? ${D}`:D}else if(i&&!d||e==null&&h)return D=`? ${D}`,m&&!b?D+=ot(D,t.indent,l(m)):g&&s&&s(),D;b&&(m=null),h?(m&&(D+=ot(D,t.indent,l(m))),D=`? ${D}\n${a}:`):(D=`${D}:`,m&&(D+=ot(D,t.indent,l(m))));let T,I,N;J(e)?(T=!!e.spaceBefore,I=e.commentBefore,N=e.comment):(T=!1,I=null,N=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!h&&!m&&K(e)&&(t.indentAtStart=D.length+1),g=!1,!f&&u.length>=2&&!t.inFlow&&!h&&Je(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let y=!1,w=Tt(e,t,()=>y=!0,()=>g=!0),v=" ";if(m||T||I){if(v=T?`\n`:"",I){let V=l(I);v+=`\n${Pe(V,t.indent)}`}w===""&&!t.inFlow?v===`\n`&&(v=`\n\n`):v+=`\n${t.indent}`}else if(!h&&Z(e)){let V=w[0],j=w.indexOf(`\n`),Y=j!==-1,ee=(C=(x=t.inFlow)!=null?x:e.flow)!=null?C:e.items.length===0;if(Y||!ee){let ae=!1;if(Y&&(V==="&"||V==="!")){let O=w.indexOf(" ");V==="&"&&O!==-1&&On===ps||typeof n=="symbol"&&n.description===ps,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new P(Symbol(ps)),{addToJSMap:Vi}),stringify:()=>ps},Xa=(n,e)=>(Ye.identify(e)||K(e)&&(!e.type||e.type===P.PLAIN)&&Ye.identify(e.value))&&(n==null?void 0:n.doc.schema.tags.some(t=>t.tag===Ye.tag&&t.default));function Vi(n,e,t){if(t=n&&We(t)?t.resolve(n.doc):t,Je(t))for(let r of t.items)qi(n,e,r);else if(Array.isArray(t))for(let r of t)qi(n,e,r);else qi(n,e,t)}function qi(n,e,t){let r=n&&We(t)?t.resolve(n.doc):t;if(!He(r))throw new Error("Merge sources must be maps or map aliases");let s=r.toJSON(null,n,Map);for(let[i,o]of s)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}function Ds(n,e,{key:t,value:r}){if(J(t)&&t.addToJSMap)t.addToJSMap(n,e,r);else if(Xa(n,t))Vi(n,e,r);else{let s=ce(t,"",n);if(e instanceof Map)e.set(s,ce(r,s,n));else if(e instanceof Set)e.add(s);else{let i=Xc(t,s,n),o=ce(r,i,n);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function Xc(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(J(n)&&(t!=null&&t.doc)){let r=hs(t.doc,{});r.anchors=new Set;for(let i of t.anchors.keys())r.anchors.add(i.anchor);r.inFlow=!0,r.inStringifyKey=!0;let s=n.toString(r);if(!t.mapKeyWarned){let i=JSON.stringify(s);i.length>40&&(i=i.substring(0,36)+\'..."\'),ms(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return s}return JSON.stringify(e)}function vn(n,e,t){let r=wt(n,void 0,t),s=wt(e,void 0,t);return new ie(r,s)}var ie=class n{constructor(e,t=null){Object.defineProperty(this,Te,{value:_i}),this.key=e,this.value=t}clone(e){let{key:t,value:r}=this;return J(t)&&(t=t.clone(e)),J(r)&&(r=r.clone(e)),new n(t,r)}toJSON(e,t){let r=t!=null&&t.mapAsMap?new Map:{};return Ds(t,r,this)}toString(e,t,r){return e!=null&&e.doc?Qa(this,e,t,r):JSON.stringify(this)}};function gs(n,e,t){var i;return(((i=e.inFlow)!=null?i:n.flow)?tf:ef)(n,e,t)}function ef({comment:n,items:e},t,{blockItemPrefix:r,flowChars:s,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:u,options:{commentString:l}}=t,f=Object.assign({},t,{indent:i,type:null}),d=!1,m=[];for(let b=0;bD=null,()=>d=!0);D&&(T+=ot(T,i,l(D))),d&&D&&(d=!1),m.push(r+T)}let h;if(m.length===0)h=s.start+s.end;else{h=m[0];for(let b=1;bD=null);bf||T.includes(`\n`))&&(l=!0),d.push(T),f=d.length}let{start:m,end:h}=t;if(d.length===0)return m+h;if(!l){let b=d.reduce((g,D)=>g+D.length+2,2);l=e.options.lineWidth>0&&b>e.options.lineWidth}if(l){let b=m;for(let g of d)b+=g?`\n${i}${s}${g}`:`\n`;return`${b}\n${s}${h}`}else return`${m}${o}${d.join(" ")}${o}${h}`}function ys({indent:n,options:{commentString:e}},t,r,s){if(r&&s&&(r=r.replace(/^\\n+/,"")),r){let i=Pe(e(r),n);t.push(i.trimStart())}}function It(n,e){let t=K(e)?e.value:e;for(let r of n)if(H(r)&&(r.key===e||r.key===t||K(r.key)&&r.key.value===t))return r}var oe=class extends Sn{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Ke,e),this.items=[]}static from(e,t,r){let{keepUndefined:s,replacer:i}=r,o=new this(e),a=(u,l)=>{if(typeof i=="function")l=i.call(t,u,l);else if(Array.isArray(i)&&!i.includes(u))return;(l!==void 0||s)&&o.items.push(vn(u,l,r))};if(t instanceof Map)for(let[u,l]of t)a(u,l);else if(t&&typeof t=="object")for(let u of Object.keys(t))a(u,t[u]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){var o;let r;H(e)?r=e:!e||typeof e!="object"||!("key"in e)?r=new ie(e,e==null?void 0:e.value):r=new ie(e.key,e.value);let s=It(this.items,r.key),i=(o=this.schema)==null?void 0:o.sortMapEntries;if(s){if(!t)throw new Error(`Key ${r.key} already set`);K(s.value)&&us(r.value)?s.value.value=r.value:s.value=r.value}else if(i){let a=this.items.findIndex(u=>i(r,u)<0);a===-1?this.items.push(r):this.items.splice(a,0,r)}else this.items.push(r)}delete(e){let t=It(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){var i;let r=It(this.items,e),s=r==null?void 0:r.value;return(i=!t&&K(s)?s.value:s)!=null?i:void 0}has(e){return!!It(this.items,e)}set(e,t){this.add(new ie(e,t),!0)}toJSON(e,t,r){let s=r?new r:t!=null&&t.mapAsMap?new Map:{};t!=null&&t.onCreate&&t.onCreate(s);for(let i of this.items)Ds(t,s,i);return s}toString(e,t,r){if(!e)return JSON.stringify(this);for(let s of this.items)if(!H(s))throw new Error(`Map items must all be pairs; found ${JSON.stringify(s)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),gs(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:r,onComment:t})}};var Ge={collection:"map",default:!0,nodeClass:oe,tag:"tag:yaml.org,2002:map",resolve(n,e){return He(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>oe.from(n,e,t)};var be=class extends Sn{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ft,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=bs(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let r=bs(e);if(typeof r!="number")return;let s=this.items[r];return!t&&K(s)?s.value:s}has(e){let t=bs(e);return typeof t=="number"&&t=0?e:null}var Ze={collection:"seq",default:!0,nodeClass:be,tag:"tag:yaml.org,2002:seq",resolve(n,e){return Je(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>be.from(n,e,t)};var Lt={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,r){return e=Object.assign({actualString:!0},e),Wt(n,e,t,r)}};var Ht={identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new P(null),stringify:({source:n},e)=>typeof n=="string"&&Ht.test.test(n)?n:e.options.nullStr};var br={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new P(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&br.test.test(n)){let r=n[0]==="t"||n[0]==="T";if(e===r)return n}return e?t.options.trueStr:t.options.falseStr}};function Fe({format:n,minFractionDigits:e,tag:t,value:r}){if(typeof r=="bigint")return String(r);let s=typeof r=="number"?r:Number(r);if(!isFinite(s))return isNaN(s)?".nan":s<0?"-.inf":".inf";let i=JSON.stringify(r);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}var Fs={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Fe},Es={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Fe(n)}},ws={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,resolve(n){let e=new P(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Fe};var Ts=n=>typeof n=="bigint"||Number.isInteger(n),Ui=(n,e,t,{intAsBigInt:r})=>r?BigInt(n):parseInt(n.substring(e),t);function eu(n,e,t){let{value:r}=n;return Ts(r)&&r>=0?t+r.toString(e):Fe(n)}var Ss={identify:n=>Ts(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Ui(n,2,8,t),stringify:n=>eu(n,8,"0o")},ks={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Ui(n,0,10,t),stringify:Fe},Cs={identify:n=>Ts(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Ui(n,2,16,t),stringify:n=>eu(n,16,"0x")};var tu=[Ge,Ze,Lt,Ht,br,Ss,ks,Cs,Fs,Es,ws];function nu(n){return typeof n=="bigint"||Number.isInteger(n)}var vs=({value:n})=>JSON.stringify(n),nf=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:vs},{identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:vs},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:n=>n==="true",stringify:vs},{identify:nu,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>nu(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:vs}],rf={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},ru=[Ge,Ze].concat(nf,rf);var Fr={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof Buffer=="function")return Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\\n\\r]/g,"")),r=new Uint8Array(t.length);for(let s=0;s1&&e("Each pair must have its own sequence indicator");let i=s.items[0]||new ie(new P(null));if(s.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${s.commentBefore}\n${i.key.commentBefore}`:s.commentBefore),s.comment){let o=(t=i.value)!=null?t:i.key;o.comment=o.comment?`${s.comment}\n${o.comment}`:s.comment}s=i}n.items[r]=H(s)?s:new ie(s)}}else e("Expected a sequence for this tag");return n}function Wi(n,e,t){let{replacer:r}=t,s=new be(n);s.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof r=="function"&&(o=r.call(e,String(i++),o));let a,u;if(Array.isArray(o))if(o.length===2)a=o[0],u=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let l=Object.keys(o);if(l.length===1)a=l[0],u=o[a];else throw new TypeError(`Expected tuple with one key, not ${l.length} keys`)}else a=o;s.items.push(vn(a,u,t))}return s}var Er={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ki,createNode:Wi};var xn=class n extends be{constructor(){super(),this.add=oe.prototype.add.bind(this),this.delete=oe.prototype.delete.bind(this),this.get=oe.prototype.get.bind(this),this.has=oe.prototype.has.bind(this),this.set=oe.prototype.set.bind(this),this.tag=n.tag}toJSON(e,t){if(!t)return super.toJSON(e);let r=new Map;t!=null&&t.onCreate&&t.onCreate(r);for(let s of this.items){let i,o;if(H(s)?(i=ce(s.key,"",t),o=ce(s.value,i,t)):i=ce(s,"",t),r.has(i))throw new Error("Ordered maps must not include duplicate keys");r.set(i,o)}return r}static from(e,t,r){let s=Wi(e,t,r),i=new this;return i.items=s.items,i}};xn.tag="tag:yaml.org,2002:omap";var wr={collection:"seq",identify:n=>n instanceof Map,nodeClass:xn,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=Ki(n,e),r=[];for(let{key:s}of t.items)K(s)&&(r.includes(s.value)?e(`Ordered maps must not include duplicate keys: ${s.value}`):r.push(s.value));return Object.assign(new xn,t)},createNode:(n,e,t)=>xn.from(n,e,t)};function su({value:n,source:e},t){return e&&(n?Hi:Ji).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var Hi={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new P(!0),stringify:su},Ji={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new P(!1),stringify:su};var iu={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Fe},ou={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Fe(n)}},au={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,resolve(n){let e=new P(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let r=n.substring(t+1).replace(/_/g,"");r[r.length-1]==="0"&&(e.minFractionDigits=r.length)}return e},stringify:Fe};var Tr=n=>typeof n=="bigint"||Number.isInteger(n);function xs(n,e,t,{intAsBigInt:r}){let s=n[0];if((s==="-"||s==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),r){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return s==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return s==="-"?-1*i:i}function zi(n,e,t){let{value:r}=n;if(Tr(r)){let s=r.toString(e);return r<0?"-"+t+s.substr(1):t+s}return Fe(n)}var uu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>xs(n,2,2,t),stringify:n=>zi(n,2,"0b")},lu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>xs(n,1,8,t),stringify:n=>zi(n,8,"0")},cu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>xs(n,0,10,t),stringify:Fe},fu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>xs(n,2,16,t),stringify:n=>zi(n,16,"0x")};var On=class n extends oe{constructor(e){super(e),this.tag=n.tag}add(e){let t;H(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new ie(e.key,null):t=new ie(e,null),It(this.items,t.key)||this.items.push(t)}get(e,t){let r=It(this.items,e);return!t&&H(r)?K(r.key)?r.key.value:r.key:r}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let r=It(this.items,e);r&&!t?this.items.splice(this.items.indexOf(r),1):!r&&t&&this.items.push(new ie(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,r){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,r);throw new Error("Set items must all have null values")}static from(e,t,r){let{replacer:s}=r,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof s=="function"&&(o=s.call(t,o,o)),i.items.push(vn(o,null,r));return i}};On.tag="tag:yaml.org,2002:set";var Sr={collection:"map",identify:n=>n instanceof Set,nodeClass:On,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>On.from(n,e,t),resolve(n,e){if(He(n)){if(n.hasAllNullValues(!0))return Object.assign(new On,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};function Yi(n,e){let t=n[0],r=t==="-"||t==="+"?n.substring(1):n,s=o=>e?BigInt(o):Number(o),i=r.replace(/_/g,"").split(":").reduce((o,a)=>o*s(60)+s(a),s(0));return t==="-"?s(-1)*i:i}function du(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return Fe(n);let r="";e<0&&(r="-",e*=t(-1));let s=t(60),i=[e%s];return e<60?i.unshift(0):(e=(e-i[0])/s,i.unshift(e%s),e>=60&&(e=(e-i[0])/s,i.unshift(e))),r+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\\d*$/,"")}var Os={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>Yi(n,t),stringify:du},Is={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,resolve:n=>Yi(n,!1),stringify:du},In={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\\\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(In.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,r,s,i,o,a]=e.map(Number),u=e[7]?Number((e[7]+"00").substr(1,3)):0,l=Date.UTC(t,r-1,s,i||0,o||0,a||0,u),f=e[8];if(f&&f!=="Z"){let d=Yi(f,!1);Math.abs(d)<30&&(d*=60),l-=6e4*d}return new Date(l)},stringify:({value:n})=>n.toISOString().replace(/((T00:00)?:00)?\\.000Z$/,"")};var Gi=[Ge,Ze,Lt,Ht,Hi,Ji,uu,lu,cu,fu,iu,ou,au,Fr,Ye,wr,Er,Sr,Os,Is,In];var hu=new Map([["core",tu],["failsafe",[Ge,Ze,Lt]],["json",ru],["yaml11",Gi],["yaml-1.1",Gi]]),mu={binary:Fr,bool:br,float:ws,floatExp:Es,floatNaN:Fs,floatTime:Is,int:ks,intHex:Cs,intOct:Ss,intTime:Os,map:Ge,merge:Ye,null:Ht,omap:wr,pairs:Er,seq:Ze,set:Sr,timestamp:In},pu={"tag:yaml.org,2002:binary":Fr,"tag:yaml.org,2002:merge":Ye,"tag:yaml.org,2002:omap":wr,"tag:yaml.org,2002:pairs":Er,"tag:yaml.org,2002:set":Sr,"tag:yaml.org,2002:timestamp":In};function Ls(n,e,t){let r=hu.get(e);if(r&&!n)return t&&!r.includes(Ye)?r.concat(Ye):r.slice();let s=r;if(!s)if(Array.isArray(n))s=[];else{let i=Array.from(hu.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(n))for(let i of n)s=s.concat(i);else typeof n=="function"&&(s=n(s.slice()));return t&&(s=s.concat(Ye)),s.reduce((i,o)=>{let a=typeof o=="string"?mu[o]:o;if(!a){let u=JSON.stringify(o),l=Object.keys(mu).map(f=>JSON.stringify(f)).join(", ");throw new Error(`Unknown custom tag ${u}; use one of ${l}`)}return i.includes(a)||i.push(a),i},[])}var sf=(n,e)=>n.keye.key?1:0,kr=class n{constructor({compat:e,customTags:t,merge:r,resolveKnownTags:s,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ls(e,"compat"):e?Ls(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=s?pu:{},this.tags=Ls(t,this.name,r),this.toStringOptions=a!=null?a:null,Object.defineProperty(this,Ke,{value:Ge}),Object.defineProperty(this,Ie,{value:Lt}),Object.defineProperty(this,Ft,{value:Ze}),this.sortMapEntries=typeof o=="function"?o:o===!0?sf:null}clone(){let e=Object.create(n.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function Du(n,e){var u;let t=[],r=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),r=!0):n.directives.docStart&&(r=!0)}r&&t.push("---");let s=hs(n,e),{commentString:i}=s.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift(Pe(l,""))}let o=!1,a=null;if(n.contents){if(J(n.contents)){if(n.contents.spaceBefore&&r&&t.push(""),n.contents.commentBefore){let d=i(n.contents.commentBefore);t.push(Pe(d,""))}s.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,f=Tt(n.contents,s,()=>a=null,l);a&&(f+=ot(f,"",i(a))),(f[0]==="|"||f[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${f}`:t.push(f)}else t.push(Tt(n.contents,s));if((u=n.directives)!=null&&u.docEnd)if(n.comment){let l=i(n.comment);l.includes(`\n`)?(t.push("..."),t.push(Pe(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(Pe(i(l),"")))}return t.join(`\n`)+`\n`}var Nt=class n{constructor(e,t,r){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Te,{value:ss});let s=null;typeof t=="function"||Array.isArray(t)?s=t:r===void 0&&t&&(r=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},r);this.options=i;let{version:o}=i;r!=null&&r._directives?(this.directives=r._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new it({version:o}),this.setSchema(o,r),this.contents=e===void 0?null:this.createNode(e,s,r)}clone(){let e=Object.create(n.prototype,{[Te]:{value:ss}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=J(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ln(this.contents)&&this.contents.add(e)}addIn(e,t){Ln(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let r=Bi(this);e.anchor=!t||r.has(t)?Pi(t||"a",r):t}return new Et(e.anchor)}createNode(e,t,r){let s;if(typeof t=="function")e=t.call({"":e},"",e),s=t;else if(Array.isArray(t)){let D=I=>typeof I=="number"||I instanceof String||I instanceof Number,T=t.filter(D).map(String);T.length>0&&(t=t.concat(T)),s=t}else r===void 0&&t&&(r=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:u,onTagObj:l,tag:f}=r!=null?r:{},{onAnchor:d,setAnchors:m,sourceObjects:h}=Ya(this,o||"a"),b={aliasDuplicateObjects:i!=null?i:!0,keepUndefined:u!=null?u:!1,onAnchor:d,onTagObj:l,replacer:s,schema:this.schema,sourceObjects:h},g=wt(e,f,b);return a&&Z(g)&&(g.flow=!0),m(),g}createPair(e,t,r={}){let s=this.createNode(e,null,r),i=this.createNode(t,null,r);return new ie(s,i)}delete(e){return Ln(this.contents)?this.contents.delete(e):!1}deleteIn(e){return kn(e)?this.contents==null?!1:(this.contents=null,!0):Ln(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return Z(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return kn(e)?!t&&K(this.contents)?this.contents.value:this.contents:Z(this.contents)?this.contents.getIn(e,t):void 0}has(e){return Z(this.contents)?this.contents.has(e):!1}hasIn(e){return kn(e)?this.contents!==void 0:Z(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=pr(this.schema,[e],t):Ln(this.contents)&&this.contents.set(e,t)}setIn(e,t){kn(e)?this.contents=t:this.contents==null?this.contents=pr(this.schema,Array.from(e),t):Ln(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let r;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new it({version:"1.1"}),r={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new it({version:e}),r={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,r=null;break;default:{let s=JSON.stringify(e);throw new Error(`Expected \'1.1\', \'1.2\' or null as first argument, but found: ${s}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(r)this.schema=new kr(Object.assign(r,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:r,maxAliasCount:s,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:r===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},u=ce(this.contents,t!=null?t:"",a);if(typeof i=="function")for(let{count:l,res:f}of a.anchors.values())i(f,l);return typeof o=="function"?xt(o,{"":u},"",u):u}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Du(this,e)}};function Ln(n){if(Z(n))return!0;throw new Error("Expected a YAML collection as document contents")}var Cr=class extends Error{constructor(e,t,r,s){super(),this.name=e,this.code=r,this.message=s,this.pos=t}},Qe=class extends Cr{constructor(e,t,r){super("YAMLParseError",e,t,r)}},vr=class extends Cr{constructor(e,t,r){super("YAMLWarning",e,t,r)}},Zi=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:r,col:s}=t.linePos[0];t.message+=` at line ${r}, column ${s}`;let i=s-1,o=n.substring(e.lineStarts[r-1],e.lineStarts[r]).replace(/[\\n\\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\\u2026"),r>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[r-2],e.lineStarts[r-1]);a.length>80&&(a=a.substring(0,79)+`\\u2026\n`),o=a+o}if(/[^ ]/.test(o)){let a=1,u=t.linePos[1];u&&u.line===r&&u.col>s&&(a=Math.max(1,Math.min(u.col-s,80-i)));let l=" ".repeat(i)+"^".repeat(a);t.message+=`:\n\n${o}\n${l}\n`}};function at(n,{flow:e,indicator:t,next:r,offset:s,onError:i,parentIndent:o,startOnNewline:a}){let u=!1,l=a,f=a,d="",m="",h=!1,b=!1,g=null,D=null,T=null,I=null,N=null,y=null,w=null;for(let C of n)switch(b&&(C.type!=="space"&&C.type!=="newline"&&C.type!=="comma"&&i(C.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),b=!1),g&&(l&&C.type!=="comment"&&C.type!=="newline"&&i(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),g=null),C.type){case"space":!e&&(t!=="doc-start"||(r==null?void 0:r.type)!=="flow-collection")&&C.source.includes(" ")&&(g=C),f=!0;break;case"comment":{f||i(C,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let V=C.source.substring(1)||" ";d?d+=m+V:d=V,m="",l=!1;break}case"newline":l?d?d+=C.source:u=!0:m+=C.source,l=!0,h=!0,(D||T)&&(I=C),f=!0;break;case"anchor":D&&i(C,"MULTIPLE_ANCHORS","A node can have at most one anchor"),C.source.endsWith(":")&&i(C.offset+C.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),D=C,w===null&&(w=C.offset),l=!1,f=!1,b=!0;break;case"tag":{T&&i(C,"MULTIPLE_TAGS","A node can have at most one tag"),T=C,w===null&&(w=C.offset),l=!1,f=!1,b=!0;break}case t:(D||T)&&i(C,"BAD_PROP_ORDER",`Anchors and tags must be after the ${C.source} indicator`),y&&i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.source} in ${e!=null?e:"collection"}`),y=C,l=t==="seq-item-ind"||t==="explicit-key-ind",f=!1;break;case"comma":if(e){N&&i(C,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),N=C,l=!1,f=!1;break}default:i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.type} token`),l=!1,f=!1}let v=n[n.length-1],x=v?v.offset+v.source.length:s;return b&&r&&r.type!=="space"&&r.type!=="newline"&&r.type!=="comma"&&(r.type!=="scalar"||r.source!=="")&&i(r.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g&&(l&&g.indent<=o||(r==null?void 0:r.type)==="block-map"||(r==null?void 0:r.type)==="block-seq")&&i(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:N,found:y,spaceBefore:u,comment:d,hasNewline:h,anchor:D,tag:T,newlineAfterProp:I,end:x,start:w!=null?w:x}}function At(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`\n`))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(At(e.key)||At(e.value))return!0}return!1;default:return!0}}function xr(n,e,t){if((e==null?void 0:e.type)==="flow-collection"){let r=e.end[0];r.indent===n&&(r.source==="]"||r.source==="}")&&At(e)&&t(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function Ns(n,e,t){let{uniqueKeys:r}=n.options;if(r===!1)return!1;let s=typeof r=="function"?r:(i,o)=>i===o||K(i)&&K(o)&&i.value===o.value;return e.some(i=>s(i.key,t))}var yu="All mapping items must start at the same column";function gu({composeNode:n,composeEmptyNode:e},t,r,s,i){var f,d;let o=(f=i==null?void 0:i.nodeClass)!=null?f:oe,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let u=r.offset,l=null;for(let m of r.items){let{start:h,key:b,sep:g,value:D}=m,T=at(h,{indicator:"explicit-key-ind",next:b!=null?b:g==null?void 0:g[0],offset:u,onError:s,parentIndent:r.indent,startOnNewline:!0}),I=!T.found;if(I){if(b&&(b.type==="block-seq"?s(u,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in b&&b.indent!==r.indent&&s(u,"BAD_INDENT",yu)),!T.anchor&&!T.tag&&!g){l=T.end,T.comment&&(a.comment?a.comment+=`\n`+T.comment:a.comment=T.comment);continue}(T.newlineAfterProp||At(b))&&s(b!=null?b:h[h.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else((d=T.found)==null?void 0:d.indent)!==r.indent&&s(u,"BAD_INDENT",yu);t.atKey=!0;let N=T.end,y=b?n(t,b,T,s):e(t,N,h,null,T,s);t.schema.compat&&xr(r.indent,b,s),t.atKey=!1,Ns(t,a.items,y)&&s(N,"DUPLICATE_KEY","Map keys must be unique");let w=at(g!=null?g:[],{indicator:"map-value-ind",next:D,offset:y.range[2],onError:s,parentIndent:r.indent,startOnNewline:!b||b.type==="block-scalar"});if(u=w.end,w.found){I&&((D==null?void 0:D.type)==="block-map"&&!w.hasNewline&&s(u,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&T.startn&&(n.type==="block-map"||n.type==="block-seq");function Fu({composeNode:n,composeEmptyNode:e},t,r,s,i){var D,T;let o=r.start.source==="{",a=o?"flow map":"flow sequence",u=(D=i==null?void 0:i.nodeClass)!=null?D:o?oe:be,l=new u(t.schema);l.flow=!0;let f=t.atRoot;f&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let d=r.offset+r.start.source.length;for(let I=0;I0){let I=ut(b,g,t.options.strict,s);I.comment&&(l.comment?l.comment+=`\n`+I.comment:l.comment=I.comment),l.range=[r.offset,g,I.offset]}else l.range=[r.offset,g,g];return l}function eo(n,e,t,r,s,i){let o=t.type==="block-map"?gu(n,e,t,r,i):t.type==="block-seq"?bu(n,e,t,r,i):Fu(n,e,t,r,i),a=o.constructor;return s==="!"||s===a.tagName?(o.tag=a.tagName,o):(s&&(o.tag=s),o)}function Eu(n,e,t,r,s){var m,h;let i=r.tag,o=i?e.directives.tagName(i.source,b=>s(i,"TAG_RESOLVE_FAILED",b)):null;if(t.type==="block-seq"){let{anchor:b,newlineAfterProp:g}=r,D=b&&i?b.offset>i.offset?b:i:b!=null?b:i;D&&(!g||g.offsetb.tag===o&&b.collection===a);if(!u){let b=e.schema.knownTags[o];if(b&&b.collection===a)e.schema.tags.push(Object.assign({},b,{default:!1})),u=b;else return b!=null&&b.collection?s(i,"BAD_COLLECTION_TYPE",`${b.tag} used for ${a} collection, but expects ${b.collection}`,!0):s(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),eo(n,e,t,s,o)}let l=eo(n,e,t,s,o,u),f=(h=(m=u.resolve)==null?void 0:m.call(u,l,b=>s(i,"TAG_RESOLVE_FAILED",b),e.options))!=null?h:l,d=J(f)?f:new P(f);return d.range=l.range,d.tag=o,u!=null&&u.format&&(d.format=u.format),d}function to(n,e,t){let r=e.offset,s=of(e,n.options.strict,t);if(!s)return{value:"",type:null,comment:"",range:[r,r,r]};let i=s.mode===">"?P.BLOCK_FOLDED:P.BLOCK_LITERAL,o=e.source?af(e.source):[],a=o.length;for(let g=o.length-1;g>=0;--g){let D=o[g][1];if(D===""||D==="\\r")a=g;else break}if(a===0){let g=s.chomp==="+"&&o.length>0?`\n`.repeat(Math.max(1,o.length-1)):"",D=r+s.length;return e.source&&(D+=e.source.length),{value:g,type:i,comment:s.comment,range:[r,D,D]}}let u=e.indent+s.indent,l=e.offset+s.length,f=0;for(let g=0;gu&&(u=D.length);else{D.length=a;--g)o[g][0].length>u&&(a=g+1);let d="",m="",h=!1;for(let g=0;gu||T[0]===" "?(m===" "?m=`\n`:!h&&m===`\n`&&(m=`\n\n`),d+=m+D.slice(u)+T,m=`\n`,h=!0):T===""?m===`\n`?d+=`\n`:m=`\n`:(d+=m+T,m=" ",h=!1)}switch(s.chomp){case"-":break;case"+":for(let g=a;gt(r+m,h,b);switch(s){case"scalar":a=P.PLAIN,u=uf(i,l);break;case"single-quoted-scalar":a=P.QUOTE_SINGLE,u=lf(i,l);break;case"double-quoted-scalar":a=P.QUOTE_DOUBLE,u=cf(i,l);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${s}`),{value:"",type:null,comment:"",range:[r,r+i.length,r+i.length]}}let f=r+i.length,d=ut(o,f,e,t);return{value:u,type:a,comment:d.comment,range:[r,f,d.offset]}}function uf(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),wu(n)}function lf(n,e){return(n[n.length-1]!=="\'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing \'quote"),wu(n.slice(1,-1)).replace(/\'\'/g,"\'")}function wu(n){var u;let e,t;try{e=new RegExp(`(.*?)(?i?n.slice(i,r+1):s)}else t+=s}return(n[n.length-1]!==\'"\'||n.length===1)&&e(n.length,"MISSING_CHAR",\'Missing closing "quote\'),t}function ff(n,e){let t="",r=n[e+1];for(;(r===" "||r===" "||r===`\n`||r==="\\r")&&!(r==="\\r"&&n[e+2]!==`\n`);)r===`\n`&&(t+=`\n`),e+=1,r=n[e+1];return t||(t=" "),{fold:t,offset:e}}var df={0:"\\0",a:"\\x07",b:"\\b",e:"\\x1B",f:"\\f",n:`\n`,r:"\\r",t:" ",v:"\\v",N:"\\x85",_:"\\xA0",L:"\\u2028",P:"\\u2029"," ":" ",\'"\':\'"\',"/":"/","\\\\":"\\\\"," ":" "};function hf(n,e,t,r){let s=n.substr(e,t),o=s.length===t&&/^[0-9a-fA-F]+$/.test(s)?parseInt(s,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return r(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}function ro(n,e,t,r){let{value:s,type:i,comment:o,range:a}=e.type==="block-scalar"?to(n,e,r):no(e,n.options.strict,r),u=t?n.directives.tagName(t.source,d=>r(t,"TAG_RESOLVE_FAILED",d)):null,l;n.options.stringKeys&&n.atKey?l=n.schema[Ie]:u?l=mf(n.schema,s,u,t,r):e.type==="scalar"?l=pf(n,s,e,r):l=n.schema[Ie];let f;try{let d=l.resolve(s,m=>r(t!=null?t:e,"TAG_RESOLVE_FAILED",m),n.options);f=K(d)?d:new P(d)}catch(d){let m=d instanceof Error?d.message:String(d);r(t!=null?t:e,"TAG_RESOLVE_FAILED",m),f=new P(s)}return f.range=a,f.source=s,i&&(f.type=i),u&&(f.tag=u),l.format&&(f.format=l.format),o&&(f.comment=o),f}function mf(n,e,t,r,s){var a;if(t==="!")return n[Ie];let i=[];for(let u of n.tags)if(!u.collection&&u.tag===t)if(u.default&&u.test)i.push(u);else return u;for(let u of i)if((a=u.test)!=null&&a.test(e))return u;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(s(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[Ie])}function pf({atKey:n,directives:e,schema:t},r,s,i){var a;let o=t.tags.find(u=>{var l;return(u.default===!0||n&&u.default==="key")&&((l=u.test)==null?void 0:l.test(r))})||t[Ie];if(t.compat){let u=(a=t.compat.find(l=>{var f;return l.default&&((f=l.test)==null?void 0:f.test(r))}))!=null?a:t[Ie];if(o.tag!==u.tag){let l=e.tagString(o.tag),f=e.tagString(u.tag),d=`Value may be parsed as either ${l} or ${f}`;i(s,"TAG_RESOLVE_FAILED",d,!0)}}return o}function Tu(n,e,t){if(e){t===null&&(t=e.length);for(let r=t-1;r>=0;--r){let s=e[r];switch(s.type){case"space":case"comment":case"newline":n-=s.source.length;continue}for(s=e[++r];(s==null?void 0:s.type)==="space";)n+=s.source.length,s=e[++r];break}}return n}var Df={composeNode:so,composeEmptyNode:As};function so(n,e,t,r){let s=n.atKey,{spaceBefore:i,comment:o,anchor:a,tag:u}=t,l,f=!0;switch(e.type){case"alias":l=yf(n,e,r),(a||u)&&r(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":l=ro(n,e,u,r),a&&(l.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":l=Eu(Df,n,e,t,r),a&&(l.anchor=a.source.substring(1));break;default:{let d=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;r(e,"UNEXPECTED_TOKEN",d),l=As(n,e.offset,void 0,null,t,r),f=!1}}return a&&l.anchor===""&&r(a,"BAD_ALIAS","Anchor cannot be an empty string"),s&&n.options.stringKeys&&(!K(l)||typeof l.value!="string"||l.tag&&l.tag!=="tag:yaml.org,2002:str")&&r(u!=null?u:e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),i&&(l.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?l.comment=o:l.commentBefore=o),n.options.keepSourceTokens&&f&&(l.srcToken=e),l}function As(n,e,t,r,{spaceBefore:s,comment:i,anchor:o,tag:a,end:u},l){let f={type:"scalar",offset:Tu(e,t,r),indent:-1,source:""},d=ro(n,f,a,l);return o&&(d.anchor=o.source.substring(1),d.anchor===""&&l(o,"BAD_ALIAS","Anchor cannot be an empty string")),s&&(d.spaceBefore=!0),i&&(d.comment=i,d.range[2]=u),d}function yf({options:n},{offset:e,source:t,end:r},s){let i=new Et(t.substring(1));i.source===""&&s(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&s(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=ut(r,o,n.strict,s);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}function Su(n,e,{offset:t,start:r,value:s,end:i},o){let a=Object.assign({_directives:e},n),u=new Nt(void 0,a),l={atKey:!1,atRoot:!0,directives:u.directives,options:u.options,schema:u.schema},f=at(r,{indicator:"doc-start",next:s!=null?s:i==null?void 0:i[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});f.found&&(u.directives.docStart=!0,s&&(s.type==="block-map"||s.type==="block-seq")&&!f.hasNewline&&o(f.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),u.contents=s?so(l,s,f,o):As(l,f.end,r,null,f,o);let d=u.contents.range[2],m=ut(i,d,!1,o);return m.comment&&(u.comment=m.comment),u.range=[t,d,m.offset],u}function Or(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function ku(n){var s;let e="",t=!1,r=!1;for(let i=0;i{let o=Or(t);i?this.warnings.push(new vr(o,r,s)):this.errors.push(new Qe(o,r,s))},this.directives=new it({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:r,afterEmptyLine:s}=ku(this.prelude);if(r){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${r}`:r;else if(s||e.directives.docStart||!i)e.commentBefore=r;else if(Z(i)&&!i.flow&&i.items.length>0){let o=i.items[0];H(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${r}\n${a}`:r}else{let o=i.commentBefore;i.commentBefore=o?`${r}\n${o}`:r}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:ku(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,r=-1){for(let s of e)yield*S(this.next(s));yield*S(this.end(t,r))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,r,s)=>{let i=Or(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",r,s)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Su(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,r=new Qe(Or(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(r):this.doc.errors.push(r);break}case"doc-end":{if(!this.doc){let r="Unexpected doc-end without preceding document";this.errors.push(new Qe(Or(e),"UNEXPECTED_TOKEN",r));break}this.doc.directives.docEnd=!0;let t=ut(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let r=this.doc.comment;this.doc.comment=r?`${r}\n${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Qe(Or(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let r=Object.assign({_directives:this.directives},this.options),s=new Nt(void 0,r);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),s.range=[0,t,t],this.decorate(s,!1),yield s}}};var io=Symbol("break visit"),gf=Symbol("skip children"),Cu=Symbol("remove item");function Jt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),vu(Object.freeze([]),n,e)}Jt.BREAK=io;Jt.SKIP=gf;Jt.REMOVE=Cu;Jt.itemAtPath=(n,e)=>{let t=n;for(let[r,s]of e){let i=t==null?void 0:t[r];if(i&&"items"in i)t=i.items[s];else return}return t};Jt.parentCollection=(n,e)=>{let t=Jt.itemAtPath(n,e.slice(0,-1)),r=e[e.length-1][0],s=t==null?void 0:t[r];if(s&&"items"in s)return s;throw new Error("Parent collection not found")};function vu(n,e,t){let r=t(e,n);if(typeof r=="symbol")return r;for(let s of["key","value"]){let i=e[s];if(i&&"items"in i){for(let o=0;o":return"block-scalar-header"}return null}function Xe(n){switch(n){case void 0:case" ":case`\n`:case"\\r":case" ":return!0;default:return!1}}var Ou=new Set("0123456789ABCDEFabcdef"),Ff=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*\'()"),_s=new Set(",[]{}"),Ef=new Set(` ,[]{}\n\\r `),lo=n=>!n||Ef.has(n),Lr=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){var s;if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let r=(s=this.next)!=null?s:"stream";for(;r&&(t||this.hasChars(1));)r=yield*S(this.parseNext(r))}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`\n`?!0:t==="\\r"?this.buffer[e+1]===`\n`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let r=0;for(;t===" ";)t=this.buffer[++r+e];if(t==="\\r"){let s=this.buffer[r+e+1];if(s===`\n`||!s&&!this.atEnd)return e+r+1}return t===`\n`||r>=this.indentNext||!t&&!this.atEnd?e+r:-1}if(t==="-"||t==="."){let r=this.buffer.substr(e,3);if((r==="---"||r==="...")&&Xe(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&ðis.indentValue&&!Xe(this.charAt(1))&&(this.indentNext=this.indentValue),yield*S(this.parseBlockStart())}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Xe(t)){let r=(yield*S(this.pushCount(1)))+(yield*S(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=r,yield*S(this.parseBlockStart())}return"doc"}*parseDocument(){yield*S(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*S(this.pushIndicators());switch(e[t]){case"#":yield*S(this.pushCount(e.length-t));case void 0:return yield*S(this.pushNewline()),yield*S(this.parseLineStart());case"{":case"[":return yield*S(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*S(this.pushCount(1)),"doc";case"*":return yield*S(this.pushUntil(lo)),"doc";case\'"\':case"\'":return yield*S(this.parseQuotedScalar());case"|":case">":return t+=yield*S(this.parseBlockScalarHeader()),t+=yield*S(this.pushSpaces(!0)),yield*S(this.pushCount(e.length-t)),yield*S(this.pushNewline()),yield*S(this.parseBlockScalar());default:return yield*S(this.parsePlainScalar())}}*parseFlowCollection(){let e,t,r=-1;do e=yield*S(this.pushNewline()),e>0?(t=yield*S(this.pushSpaces(!1)),this.indentValue=r=t):t=0,t+=yield*S(this.pushSpaces(!0));while(e+t>0);let s=this.getLine();if(s===null)return this.setNext("flow");if((r!==-1&&r"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*S(this.pushUntil(t=>Xe(t)||t==="#"))}*parseBlockScalar(){let e=this.pos-1,t=0,r;e:for(let i=this.pos;r=this.buffer[i];++i)switch(r){case" ":t+=1;break;case`\n`:e=i,t=0;break;case"\\r":{let o=this.buffer[i+1];if(!o&&!this.atEnd)return this.setNext("block-scalar");if(o===`\n`)break}default:break e}if(!r&&!this.atEnd)return this.setNext("block-scalar");if(t>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=t:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let i=this.continueScalar(e+1);if(i===-1)break;e=this.buffer.indexOf(`\n`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let s=e+1;for(r=this.buffer[s];r===" ";)r=this.buffer[++s];if(r===" "){for(;r===" "||r===" "||r==="\\r"||r===`\n`;)r=this.buffer[++s];e=s-1}else if(!this.blockScalarKeep)do{let i=e-1,o=this.buffer[i];o==="\\r"&&(o=this.buffer[--i]);let a=i;for(;o===" ";)o=this.buffer[--i];if(o===`\n`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield Ms,yield*S(this.pushToIndex(e+1,!0)),yield*S(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,r=this.pos-1,s;for(;s=this.buffer[++r];)if(s===":"){let i=this.buffer[r+1];if(Xe(i)||e&&_s.has(i))break;t=r}else if(Xe(s)){let i=this.buffer[r+1];if(s==="\\r"&&(i===`\n`?(r+=1,s=`\n`,i=this.buffer[r+1]):t=r),i==="#"||e&&_s.has(i))break;if(s===`\n`){let o=this.continueScalar(r+1);if(o===-1)break;r=Math.max(r,o-2)}}else{if(e&&_s.has(s))break;t=r}return!s&&!this.atEnd?this.setNext("plain-scalar"):(yield Ms,yield*S(this.pushToIndex(t+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let r=this.buffer.slice(this.pos,e);return r?(yield r,this.pos+=r.length,r.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*S(this.pushTag()))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()));case"&":return(yield*S(this.pushUntil(lo)))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Xe(t)||e&&_s.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*S(this.pushCount(1)))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Xe(t)&&t!==">";)t=this.buffer[++e];return yield*S(this.pushToIndex(t===">"?e+1:e,!1))}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Ff.has(t))t=this.buffer[++e];else if(t==="%"&&Ou.has(this.buffer[e+1])&&Ou.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*S(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===`\n`?yield*S(this.pushCount(1)):e==="\\r"&&this.charAt(1)===`\n`?yield*S(this.pushCount(2)):0}*pushSpaces(e){let t=this.pos-1,r;do r=this.buffer[++t];while(r===" "||e&&r===" ");let s=t-this.pos;return s>0&&(yield this.buffer.substr(this.pos,s),this.pos=t),s}*pushUntil(e){let t=this.pos,r=this.buffer[t];for(;!e(r);)r=this.buffer[++t];return yield*S(this.pushToIndex(t,!1))}};var Nr=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,r=this.lineStarts.length;for(;t>1;this.lineStarts[i]=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;((t=n[++e])==null?void 0:t.type)==="space";);return n.splice(e,n.length)}function Lu(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!zt(e.start,"explicit-key-ind")&&!zt(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,Nu(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Ar=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new Lr,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let r of this.lexer.lex(e,t))yield*S(this.next(r));t||(yield*S(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*S(this.step()),this.offset+=e.length;return}let t=xu(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*S(this.step()),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let r=`Not a YAML token: ${e}`;yield*S(this.pop({type:"error",offset:this.offset,message:r,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*S(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&(!e||e.type!=="doc-end")){for(;this.stack.length>0;)yield*S(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*S(this.stream());switch(e.type){case"document":return yield*S(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*S(this.scalar(e));case"block-scalar":return yield*S(this.blockScalar(e));case"block-map":return yield*S(this.blockMap(e));case"block-seq":return yield*S(this.blockSequence(e));case"flow-collection":return yield*S(this.flowCollection(e));case"doc-end":return yield*S(this.documentEnd(e))}yield*S(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e!=null?e:this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let r=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in r?r.indent:0:t.type==="flow-collection"&&r.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Lu(t),r.type){case"document":r.value=t;break;case"block-scalar":r.props.push(t);break;case"block-map":{let s=r.items[r.items.length-1];if(s.value){r.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(s.sep)s.value=t;else{Object.assign(s,{key:t,sep:[]}),this.onKeyLine=!s.explicitKey;return}break}case"block-seq":{let s=r.items[r.items.length-1];s.value?r.items.push({start:[],value:t}):s.value=t;break}case"flow-collection":{let s=r.items[r.items.length-1];!s||s.value?r.items.push({start:[],key:t,sep:[]}):s.sep?s.value=t:Object.assign(s,{key:t,sep:[]});return}default:yield*S(this.pop()),yield*S(this.pop(t))}if((r.type==="document"||r.type==="block-map"||r.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let s=t.items[t.items.length-1];s&&!s.sep&&!s.value&&s.start.length>0&&Iu(s.start)===-1&&(t.indent===0||s.start.every(i=>i.type!=="comment"||i.indent=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,i=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",o=[];if(i&&t.sep&&!t.value){let a=[];for(let u=0;ue.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=t.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):i||t.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(zt(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(Nu(t.key)&&!zt(t.sep,"newline")){let a=Nn(t.start),u=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:u,sep:l}]})}else o.length>0?t.sep=t.sep.concat(o,this.sourceToken):t.sep.push(this.sourceToken);else if(zt(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let a=Nn(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||i?e.items.push({start:o,key:null,sep:[this.sourceToken]}):zt(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);i||t.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(a):(Object.assign(t,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){s&&a.type!=="block-seq"&&e.items.push({start:o}),this.stack.push(a);return}}}}yield*S(this.pop()),yield*S(this.step())}*blockSequence(e){var r;let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0,i=Array.isArray(s)?s[s.length-1]:void 0;(i==null?void 0:i.type)==="comment"?s==null||s.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let s=e.items[e.items.length-2],i=(r=s==null?void 0:s.value)==null?void 0:r.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||zt(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*S(this.pop()),yield*S(this.step())}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let r;do yield*S(this.pop()),r=this.peek(1);while(r&&r.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let s=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:s,sep:[]}):t.sep?this.stack.push(s):Object.assign(t,{key:s,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let r=this.startBlockValue(e);r?this.stack.push(r):(yield*S(this.pop()),yield*S(this.step()))}else{let r=this.peek(2);if(r.type==="block-map"&&(this.type==="map-value-ind"&&r.indent===e.indent||this.type==="newline"&&!r.items[r.items.length-1].sep))yield*S(this.pop()),yield*S(this.step());else if(this.type==="map-value-ind"&&r.type!=="flow-collection"){let s=Bs(r),i=Nn(s);Lu(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*S(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`\n`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`\n`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Bs(e),r=Nn(t);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Bs(e),r=Nn(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(r=>r.type==="newline"||r.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*S(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*S(this.pop()),yield*S(this.step());break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*S(this.pop()))}}};function wf(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new Nr||null,prettyErrors:e}}function Au(n,e={}){let{lineCounter:t,prettyErrors:r}=wf(e),s=new Ar(t==null?void 0:t.addNewLine),i=new Ir(e),o=null;for(let a of i.compose(s.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Qe(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&t&&(o.errors.forEach(Zi(n,t)),o.warnings.forEach(Zi(n,t))),o}function co(n,e,t){let r;typeof e=="function"?r=e:t===void 0&&e&&typeof e=="object"&&(t=e);let s=Au(n,t);if(!s)return null;if(s.warnings.forEach(i=>ms(s.options.logLevel,i)),s.errors.length>0){if(s.options.logLevel!=="silent")throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:r},t))}var js=Vr(Ru());var F=Vr(ns());var et;(N=>{N.DEFAULT_TO_STRING={nullRepresentation:"-",dateFormat:"MMMM dd, yyyy",dateTimeFormat:"h:mm a - MMMM dd, yyyy"};function e(y,w=N.DEFAULT_TO_STRING,v=!1){let x=t(y);if(!x)return w.nullRepresentation;switch(x.type){case"null":return w.nullRepresentation;case"string":return x.value;case"number":case"boolean":return""+x.value;case"link":return x.value.markdown();case"function":return"";case"array":let C="";return v&&(C+="["),C+=x.value.map(V=>e(V,w,!0)).join(", "),v&&(C+="]"),C;case"object":return"{ "+Object.entries(x.value).map(V=>V[0]+": "+e(V[1],w,!0)).join(", ")+" }";case"date":return ja(x.value,w.dateFormat,w.dateTimeFormat);case"duration":return qa(x.value)}}N.toString=e;function t(y){return h(y)?{type:"null",value:y}:f(y)?{type:"number",value:y}:l(y)?{type:"string",value:y}:g(y)?{type:"boolean",value:y}:m(y)?{type:"duration",value:y}:d(y)?{type:"date",value:y}:b(y)?{type:"array",value:y}:D(y)?{type:"link",value:y}:I(y)?{type:"function",value:y}:T(y)?{type:"object",value:y}:void 0}N.wrapValue=t;function r(y,w){if(T(y)){let v={};for(let[x,C]of Object.entries(y))v[x]=r(C,w);return v}else if(b(y)){let v=[];for(let x of y)v.push(r(x,w));return v}else return w(y)}N.mapLeaves=r;function s(y,w){return i(y,w)==0}N.equals=s;function i(y,w,v){var V,j;if(y===w||(y===void 0&&(y=null),w===void 0&&(w=null),y===null&&w===null))return 0;if(y===null)return-1;if(w===null)return 1;let x=t(y),C=t(w);if(x===void 0&&C===void 0)return 0;if(x===void 0)return-1;if(C===void 0)return 1;if(x.type!=C.type)return x.type.localeCompare(C.type);if(x.value===C.value)return 0;switch(x.type){case"string":return x.value.localeCompare(C.value);case"number":return x.valueAe,O=ae(Y.path).localeCompare(ae(ee.path));if(O!=0)return O;let $=Y.type.localeCompare(ee.type);return $!=0?$:Y.subpath&&!ee.subpath?1:!Y.subpath&&ee.subpath?-1:!Y.subpath&&!ee.subpath?0:((V=Y.subpath)!=null?V:"").localeCompare((j=ee.subpath)!=null?j:"");case"date":return x.value0;case"boolean":return w.value;case"link":return!!w.value.path;case"date":return w.value.toMillis()!=0;case"duration":return w.value.as("seconds")!=0;case"object":return Object.keys(w.value).length>0;case"array":return w.value.length>0;case"null":return!1;case"function":return!0}}N.isTruthy=a;function u(y){if(y==null)return y;if(N.isArray(y))return[].concat(y.map(w=>u(w)));if(N.isObject(y)){let w={};for(let[v,x]of Object.entries(y))w[v]=u(x);return w}else return y}N.deepCopy=u;function l(y){return typeof y=="string"}N.isString=l;function f(y){return typeof y=="number"}N.isNumber=f;function d(y){return y instanceof q}N.isDate=d;function m(y){return y instanceof B}N.isDuration=m;function h(y){return y==null}N.isNull=h;function b(y){return Array.isArray(y)}N.isArray=b;function g(y){return typeof y=="boolean"}N.isBoolean=g;function D(y){return y instanceof Oe}N.isLink=D;function T(y){return y!==void 0&&typeof y=="object"&&!b(y)&&!m(y)&&!d(y)&&!D(y)&&!h(y)}N.isObject=T;function I(y){return typeof y=="function"}N.isFunction=I})(et||(et={}));var ju;(i=>{function n(o){return et.isObject(o)&&Object.keys(o).length==2&&"key"in o&&"rows"in o}i.isElementGroup=n;function e(o){for(let a of o)if(!n(a))return!1;return!0}i.isGrouping=e;function t(o){for(let a of o)if(n(a))return!1;return!0}i.isLeaf=t;function r(o){if(n(o))return r(o.rows);if(e(o)){let a=0;for(let u of o)a+=r(u.rows);return a}else return o.length}i.count=r;function s(o,a,u){if(u<=a)return[];if(t(o))return o.slice(a,u);let l=0,f=0;for(;l=o.length)return[];let d=[];for(;l{function n(u){return new ho(u)}a.success=n;function e(u){return new mo(u)}a.failure=e;function t(u,l,f){return u.successful?l.successful?f(u.value,l.value):e(l.error):e(u.error)}a.flatMap2=t;function r(u,l,f){return t(u,l,(d,m)=>n(f(d,m)))}a.map2=r;function s(u,l){let f=[];for(let d of u){let m=l(d);if(!m.successful)return m.cast();f.push(m.value)}return a.success(f)}a.mapAll=s;function i(u){try{return a.success(u())}catch(l){return a.failure(l)}}a.trying=i;async function o(u){try{return a.success(await u)}catch(l){return a.failure(l)}}a.async=o})(Se||(Se={}));var Yt;(N=>{N.EVERYTHING={type:"everything"},N.NOTHING={type:"nothing"},N.EMPTY_SET=new Set;function r(y){return y.size==0?N.NOTHING:{type:"atom",value:y}}N.atom=r;function s(y){return y?N.EVERYTHING:N.NOTHING}N.constant=s;function i(y){return y!==void 0?r(y):N.NOTHING}N.nullableAtom=i;function o(y){return y.size==0?N.EVERYTHING:{type:"negated",value:y}}N.negated=o;function a(y){switch(y.type){case"everything":return N.NOTHING;case"nothing":return N.EVERYTHING;case"atom":return o(y.value);case"negated":return r(y.value)}}N.negate=a;function u(y){switch(y.type){case"everything":return!1;case"negated":return!1;case"atom":return y.value.size==0;case"nothing":return!0}}N.empty=u;function l(y,w){switch(y.type){case"everything":return w;case"nothing":return N.EMPTY_SET;case"atom":return y.value;case"negated":return I(w,y.value)}}N.resolve=l;function f(y){return d(y,w=>w)}N.intersect=f;function d(y,w){return m(y,v=>Se.success(w(v))).orElseThrow()}N.lazyIntersect=d;function m(y,w){let v=[],x=[];for(let C of y){let V=w(C);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(u(j))return Se.success(N.NOTHING);j.type!=="everything"&&(j.type=="atom"?v.push(j.value):j.type=="negated"&&x.push(j.value))}}return v.length==0&&x.length==0?Se.success(N.EVERYTHING):v.length>0&&x.length==0?Se.success(r(D(v))):v.length==0&&x.length>0?Se.success(o(T(x))):Se.success(N.atom(I(D(v),T(x))))}N.lazyFailableIntersection=m;function h(y){return b(y,w=>w)}N.union=h;function b(y,w){return g(y,v=>Se.success(w(v))).orElseThrow()}N.lazyUnion=b;function g(y,w){let v=[],x=[];for(let C of y){let V=w(C);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(j.type==="everything")return Se.success(N.EVERYTHING);u(j)||(j.type=="atom"?v.push(j.value):j.type=="negated"&&x.push(j.value))}}return v.length==0&&x.length==0?Se.success(N.NOTHING):v.length>0&&x.length==0?Se.success(N.atom(T(v))):v.length==0&&x.length>0?Se.success(N.negated(D(x))):Se.success(o(I(D(x),T(v))))}N.lazyFailableUnion=g;function D(y){if(y.length==0)return new Set;if(y.length==1)return y[0];let w=[].concat(y).sort((v,x)=>v.size-x.size);for(;w.length>1;){let v=new Set,x=w.pop();for(let C of w[0])x.has(C)&&v.add(C);w[0]=v}return w[0]}N.setIntersect=D;function T(y){if(y.length==0)return new Set;if(y.length==1)return y[0];let w=new Set;for(let v of y)for(let x of v)w.add(x);return w}N.setUnion=T;function I(y,w){if(y.size>w.size){let v=new Set(y);for(let x of w)v.delete(x);return v}else{let v=new Set;for(let x of y)w.has(x)||v.add(x);return v}}N.setIntersectNegation=I})(Yt||(Yt={}));var se;(g=>{g.ROW="$row";function e(D){return{type:"variable",name:D}}g.variable=e;function t(D){return{type:"literal",value:D}}g.literal=t;function r(D,T,I){return{type:"binaryop",left:D,op:T,right:I}}g.binaryOp=r;function s(D,T){return{type:"binaryop",left:D,right:T,op:"index"}}g.index=s;function i(D){let T=D.split("."),I=g.variable(T[0]);for(let N=1;N"||D==">="||D=="!="||D=="="}g.isCompareOp=d;function m(D,T=new Set([g.ROW])){switch(D.type){case"binaryop":return D.op==="index"&&D.left.type=="variable"&&D.left.name==g.ROW&&D.right.type=="literal"&&et.isString(D.right.value)?T.has(D.right.value)?new Set:new Set([D.right.value]):Yt.setUnion([m(D.left,T),m(D.right,T)]);case"function":return Yt.setUnion(D.arguments.map(N=>m(N,T)));case"lambda":let I=T!=null?T:new Set;for(let N of D.arguments)I.add(N);return m(D.value,I);case"list":return Yt.setUnion(D.values.map(N=>m(N,T)));case"negated":return m(D.child,T);case"object":return Yt.setUnion(Object.values(D.values).map(N=>m(N,T)));case"variable":return T&&T.has(D.name)?new Set:new Set([D.name]);case"literal":return new Set}}g.unboundVariables=m;function h(D){switch(D.type){case"binaryop":return D.op==="index"?`${h(D.left)}[${h(D.right)}]`:`${h(D.left)} ${D.op} ${h(D.right)}`;case"function":return`${h(D.func)}(${D.arguments.map(h).join(", ")})`;case"lambda":return`(${D.arguments.join(", ")}) => ${h(D.value)}`;case"list":return`[${D.values.map(h).join(", ")}]`;case"negated":return`!${h(D.child)}`;case"object":return`{${Object.entries(D.values).map(([I,N])=>`${I}: ${h(N)}`).join(", ")}}`;case"variable":return D.name;case"literal":let T=et.wrapValue(D.value);if(!T)return"null";switch(T.type){case"string":return`"${T.value}"`;default:return et.toString(T.value)}}}g.toString=h,g.NULL=g.literal(null)})(se||(se={}));var z=F.createLanguage({number:n=>F.regexp(/-?[0-9]+(\\.[0-9]+)?/).map(e=>Number.parseFloat(e)).desc("number"),string:n=>F.string(\'"\').then(F.alt(n.escapeCharacter,F.noneOf(\'"\\\\\')).atLeast(0).map(e=>e.join(""))).skip(F.string(\'"\')).desc("string"),escapeCharacter:n=>F.string("\\\\").then(F.any).map(e=>e===\'"\'?\'"\':e==="\\\\"?"\\\\":"\\\\"+e),bool:n=>F.regexp(/true|false|True|False/).map(e=>e.toLowerCase()=="true").desc("boolean"),tag:n=>F.seqMap(F.string("#"),F.alt(F.regexp(/[^\\u2000-\\u206F\\u2E00-\\u2E7F\'!"#$%&()*+,.:;<=>?@^`{|}~\\[\\]\\\\\\s]/).desc("text")).many(),(e,t)=>e+t.join("")).desc("tag"),identifier:n=>F.seqMap(F.alt(F.regexp(/[\\p{Letter}$]/u),F.regexp(qu).desc("text")),F.alt(F.regexp(/[0-9\\p{Letter}$_-]/u),F.regexp(qu).desc("text")).many(),(e,t)=>e+t.join("")).desc("variable"),link:n=>F.regexp(/\\[\\[([^\\[\\]]*?)\\]\\]/u,1).map(e=>Oe.parseInner(e)).desc("file link"),embedLink:n=>F.seqMap(F.string("!").atMost(1),n.link,(e,t)=>(e.length>0&&(t.embed=!0),t)).desc("file link"),binaryPlusMinus:n=>F.regexp(/\\+|-/).map(e=>e).desc("\'+\' or \'-\'"),binaryMulDiv:n=>F.regexp(/\\*|\\/|%/).map(e=>e).desc("\'*\' or \'/\' or \'%\'"),binaryCompareOp:n=>F.regexp(/>=|<=|!=|>|<|=/).map(e=>e).desc("\'>=\' or \'<=\' or \'!=\' or \'=\' or \'>\' or \'<\'"),binaryAndOp:n=>F.regexp(/and|&/i).map(e=>"&").desc("\'and\'"),binaryOrOp:n=>F.regexp(/or|\\|/i).map(e=>"|").desc("\'or\'"),rootDate:n=>F.seqMap(F.regexp(/\\d{4}/),F.string("-"),F.regexp(/\\d{2}/),(e,t,r)=>q.fromObject({year:Number.parseInt(e),month:Number.parseInt(r)})).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),dateShorthand:n=>F.alt(...Object.keys(Uu).sort((e,t)=>t.length-e.length).map(F.string)),date:n=>Of(n.rootDate,e=>F.seqMap(F.string("-"),F.regexp(/\\d{2}/),(t,r)=>e.set({day:Number.parseInt(r)})),e=>F.seqMap(F.string("T"),F.regexp(/\\d{2}/),(t,r)=>e.set({hour:Number.parseInt(r)})),e=>F.seqMap(F.string(":"),F.regexp(/\\d{2}/),(t,r)=>e.set({minute:Number.parseInt(r)})),e=>F.seqMap(F.string(":"),F.regexp(/\\d{2}/),(t,r)=>e.set({second:Number.parseInt(r)})),e=>F.alt(F.seqMap(F.string("."),F.regexp(/\\d{3}/),(t,r)=>e.set({millisecond:Number.parseInt(r)})),F.succeed(e)),e=>F.alt(F.seqMap(F.string("+").or(F.string("-")),F.regexp(/\\d{1,2}(:\\d{2})?/),(t,r)=>e.setZone("UTC"+t+r,{keepLocalTime:!0})),F.seqMap(F.string("Z"),()=>e.setZone("utc",{keepLocalTime:!0})),F.seqMap(F.string("["),F.regexp(/[0-9A-Za-z+-\\/]+/u),F.string("]"),(t,r,s)=>e.setZone(r,{keepLocalTime:!0})))).assert(e=>e.isValid,"valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),datePlus:n=>F.alt(n.dateShorthand.map(e=>Uu[e]()),n.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),durationType:n=>F.alt(...Object.keys(Vu).sort((e,t)=>t.length-e.length).map(F.string)),duration:n=>F.seqMap(n.number,F.optWhitespace,n.durationType,(e,t,r)=>Vu[r].mapUnits(s=>s*e)).sepBy1(F.string(",").trim(F.optWhitespace).or(F.optWhitespace)).map(e=>e.reduce((t,r)=>t.plus(r))).desc("duration like 4hr2min"),rawNull:n=>F.string("null"),atomInlineField:n=>F.alt(n.date,n.duration.map(e=>Mi(e)),n.string,n.tag,n.embedLink,n.bool,n.number,n.rawNull),inlineFieldList:n=>n.atomInlineField.sepBy(F.string(",").trim(F.optWhitespace).lookahead(n.atomInlineField)),inlineField:n=>F.alt(F.seqMap(n.atomInlineField,F.string(",").trim(F.optWhitespace),n.inlineFieldList,(e,t,r)=>[e].concat(r)),n.atomInlineField)}),qu=new RegExp(Fn(),""),Vu={year:B.fromObject({years:1}),years:B.fromObject({years:1}),yr:B.fromObject({years:1}),yrs:B.fromObject({years:1}),month:B.fromObject({months:1}),months:B.fromObject({months:1}),mo:B.fromObject({months:1}),mos:B.fromObject({months:1}),week:B.fromObject({weeks:1}),weeks:B.fromObject({weeks:1}),wk:B.fromObject({weeks:1}),wks:B.fromObject({weeks:1}),w:B.fromObject({weeks:1}),day:B.fromObject({days:1}),days:B.fromObject({days:1}),d:B.fromObject({days:1}),hour:B.fromObject({hours:1}),hours:B.fromObject({hours:1}),hr:B.fromObject({hours:1}),hrs:B.fromObject({hours:1}),h:B.fromObject({hours:1}),minute:B.fromObject({minutes:1}),minutes:B.fromObject({minutes:1}),min:B.fromObject({minutes:1}),mins:B.fromObject({minutes:1}),m:B.fromObject({minutes:1}),second:B.fromObject({seconds:1}),seconds:B.fromObject({seconds:1}),sec:B.fromObject({seconds:1}),secs:B.fromObject({seconds:1}),s:B.fromObject({seconds:1})},Uu={now:()=>q.local(),today:()=>q.local().startOf("day"),yesterday:()=>q.local().startOf("day").minus(B.fromObject({days:1})),tomorrow:()=>q.local().startOf("day").plus(B.fromObject({days:1})),sow:()=>q.local().startOf("week"),"start-of-week":()=>q.local().startOf("week"),eow:()=>q.local().endOf("week"),"end-of-week":()=>q.local().endOf("week"),soy:()=>q.local().startOf("year"),"start-of-year":()=>q.local().startOf("year"),eoy:()=>q.local().endOf("year"),"end-of-year":()=>q.local().endOf("year"),som:()=>q.local().startOf("month"),"start-of-month":()=>q.local().startOf("month"),eom:()=>q.local().endOf("month"),"end-of-month":()=>q.local().endOf("month")},Ku=F.createLanguage({variable:n=>z.identifier.map(se.variable).desc("variable"),number:n=>z.number.map(se.literal).desc("number"),string:n=>z.string.map(se.literal).desc("string"),bool:n=>z.bool.map(se.literal).desc("boolean"),date:n=>St("date",z.datePlus).map(([e,t])=>se.literal(t)).desc("date"),duration:n=>St("dur",z.duration).map(([e,t])=>se.literal(t)).desc("duration"),null:n=>z.rawNull.map(e=>se.NULL),link:n=>z.link.map(se.literal),list:n=>n.expression.sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("[").skip(F.optWhitespace),F.optWhitespace.then(F.string("]"))).map(e=>se.list(e)).desc("list"),object:n=>F.seqMap(z.identifier.or(z.string),F.string(":").trim(F.optWhitespace),n.expression,(e,t,r)=>({name:e,value:r})).sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("{").skip(F.optWhitespace),F.optWhitespace.then(F.string("}"))).map(e=>{let t={};for(let r of e)t[r.name]=r.value;return se.object(t)}).desc("object (\'{ a: 1, b: 2 }\')"),atom:n=>F.alt(z.embedLink.map(e=>se.literal(e)),n.negated,n.link,n.list,n.object,n.lambda,n.parens,n.bool,n.number,n.string,n.date,n.duration,n.null,n.variable),index:n=>F.seqMap(n.atom,F.alt(n.dotPostfix,n.indexPostfix,n.functionPostfix).many(),(e,t)=>{let r=e;for(let s of t)switch(s.type){case"dot":r=se.index(r,se.literal(s.expr));break;case"index":r=se.index(r,s.expr);break;case"function":r=se.func(r,s.exprs);break}return r}),negated:n=>F.seqMap(F.string("!"),n.index,(e,t)=>se.negate(t)).desc("negated field"),parens:n=>n.expression.trim(F.optWhitespace).wrap(F.string("("),F.string(")")),lambda:n=>F.seqMap(z.identifier.sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("(").trim(F.optWhitespace),F.string(")").trim(F.optWhitespace)),F.string("=>").trim(F.optWhitespace),n.expression,(e,t,r)=>({type:"lambda",arguments:e,value:r})),dotPostfix:n=>F.seqMap(F.string("."),z.identifier,(e,t)=>({type:"dot",expr:t})),indexPostfix:n=>F.seqMap(F.string("["),F.optWhitespace,n.expression,F.optWhitespace,F.string("]"),(e,t,r,s,i)=>({type:"index",expr:r})),functionPostfix:n=>F.seqMap(F.string("("),F.optWhitespace,n.expression.sepBy(F.string(",").trim(F.optWhitespace)),F.optWhitespace,F.string(")"),(e,t,r,s,i)=>({type:"function",exprs:r})),binaryMulDiv:n=>Mn(n.index,z.binaryMulDiv,se.binaryOp),binaryPlusMinus:n=>Mn(n.binaryMulDiv,z.binaryPlusMinus,se.binaryOp),binaryCompare:n=>Mn(n.binaryPlusMinus,z.binaryCompareOp,se.binaryOp),binaryBoolean:n=>Mn(n.binaryCompare,z.binaryAndOp.or(z.binaryOrOp),se.binaryOp),binaryOp:n=>n.binaryBoolean,expression:n=>n.binaryOp}),lb=F.createLanguage({queryTag:n=>z.tag.map(e=>({type:"tagged",value:e})),queryId:n=>St("id",z.string).map(([e,t])=>({type:"id",value:t})),queryType:n=>F.string("@").then(z.identifier).map(e=>({type:"typed",value:e})),queryPath:n=>St(F.regexp(/e?path/i).desc("[e]path"),z.string).map(([e,t])=>({type:"path",value:t,exact:e.toLowerCase()==="epath"})),queryParentOf:n=>St(F.regexp(/parentof|supertree/i).desc("parentof"),n.query).map(([e,t])=>({type:"parent-of",children:t,inclusive:e.toLowerCase()==="supertree"})),queryChildOf:n=>St(F.regexp(/childof|subtree/i).desc("childof"),n.query).map(([e,t])=>({type:"child-of",parents:t,inclusive:e.toLowerCase()==="subtree"})),querySimpleLinked:n=>z.link.map(e=>({type:"linked",source:{type:"link",value:e},direction:"incoming"})),queryLinked:n=>St(F.regexp(/linksto|linkedfrom|connected/i).desc("connected"),n.query).map(([e,t])=>({type:"linked",source:t,direction:e.toLowerCase()=="linksto"?"incoming":e.toLowerCase()=="linkedfrom"?"outgoing":"both"})),queryExists:n=>St(F.regexp(/exists/i).desc("exists"),z.identifier.or(z.string)).map(([e,t])=>({type:"field",value:t})),queryQuotedExpression:n=>St(F.regexp(/expr/i).desc("expr"),Ku.expression).map(([e,t])=>({type:"expression",expression:t})),queryRawExpression:n=>Ku.binaryCompare.map(e=>({type:"expression",expression:e})),queryParens:n=>n.query.trim(F.optWhitespace).wrap(F.string("("),F.string(")")),queryNegate:n=>F.string("!").skip(F.optWhitespace).then(n.queryAtom).map(e=>({type:"not",element:e})),queryAtom:n=>F.alt(n.queryParens,n.queryNegate,n.querySimpleLinked,n.queryTag,n.queryType,n.queryId,n.queryExists,n.queryChildOf,n.queryParentOf,n.queryLinked,n.queryPath,n.queryQuotedExpression,n.queryRawExpression),queryAnds:n=>Mn(n.queryAtom,z.binaryAndOp,(e,t,r)=>({type:"and",elements:[e,r]})),queryOrs:n=>Mn(n.queryAnds,z.binaryOrOp,(e,t,r)=>({type:"or",elements:[e,r]})),query:n=>n.queryOrs.trim(F.optWhitespace)});function Mn(n,e,t){return F.seqMap(n,F.seq(F.optWhitespace,e,F.optWhitespace,n).many(),(r,s)=>{if(s.length==0)return r;let i=t(r,s[0][1],s[0][3]);for(let o=1;o[r,s])}function Of(n,...e){return F.custom((t,r)=>(s,i)=>{let o=n._(s,i);if(!o.status)return o;for(let a of e){let u=a(o.value)._(s,o.index);if(!u.status)return o;o=u}return o})}var Zt=Vr(ns());function Gt(n,e){let t={};for(let[r,s]of Object.entries(n))t[r]=e(s);return t}var _n;(r=>{r.NOOP_NORMALIZER=s=>s;function e(s){let i=et.wrapValue(s);if(!i)return null;switch(i==null?void 0:i.type){case"array":return i.value.map(r.json);case"object":return Gt(i.value,r.json);case"date":return{$_type:"date",value:i.value.toISO({includeOffset:!0})};case"link":return{$_type:"link",value:i.value.toObject()};case"duration":return{$_type:"duration",value:i.value.toISO()};case"boolean":case"number":case"string":return i.value;case"function":case"null":return null}}r.json=e;function t(s,i=r.NOOP_NORMALIZER){if(s==null)return null;if(Array.isArray(s))return i(s.map(o=>r.value(o,i)));if(typeof s=="object"){if(!("$_type"in s))return Gt(s,a=>r.value(a,i));let o=s.$_type;switch(o){case"date":return i(q.fromISO(s.value,{setZone:!0}));case"duration":return i(B.fromISO(s.value));case"link":return i(Oe.fromObject(s.value));default:throw new Error(`Unrecognized serialized type \'${o}\'!`)}}return i(s)}r.value=t})(_n||(_n={}));function Wu(n){return Object.assign({},n,{value:_n.json(n.value)})}function $s(n,e){return Array.isArray(n)?n.map(t=>$s(t,e)):{key:n.key,raw:n.value,value:Nf(n.value),position:{line:e,start:n.start,startValue:n.startValue,end:n.end},wrapping:n.wrapping}}var Ps=Object.freeze({"[":"]","(":")"});function If(n,e,t,r){let s=0,i=!1;for(let o=e;o=0;){let o=Lf(n,i);if(!o){i=n.indexOf(s,i+1);continue}t.push(o),i=n.indexOf(s,o.end)}}e&&(t=t.concat(qf(n))),t.sort((s,i)=>s.start-i.start);let r=[];for(let s=0;sn.join("")),Mf=Zt.regexp(/[^0-9\\w\\p{Letter}]*/u).then(Af).skip(Zt.regexp(/[_\\*~`]*/u));function zu(n){let e=Hu(n,0);if(!e)return;let t=Mf.parse(e.key);if(t.status)return{key:t.value,value:n.substring(e.valueIndex).trim(),start:0,startValue:e.valueIndex,end:n.length}}var _f=/\\u{2795}\\s*(\\d{4}-\\d{2}-\\d{2})/u,Bf=/(?:\\u{1F4C5}|\\u{1F4C6}|\\u{1F5D3}\\u{FE0F}?)\\s*(\\d{4}-\\d{2}-\\d{2})/u,Pf=/\\u{2705}\\s*(\\d{4}-\\d{2}-\\d{2})/u,$f=/[\\u{23F3}\\u{231B}]\\s*(\\d{4}-\\d{2}-\\d{2})/u,Rf=/\\u{1F6EB}\\s*(\\d{4}-\\d{2}-\\d{2})/u,jf=[{regex:_f,key:"created"},{regex:Rf,key:"start"},{regex:$f,key:"scheduled"},{regex:Bf,key:"due"},{regex:Pf,key:"completion"}];function qf(n){let e=[];for(let{regex:t,key:r}of jf){let s=t.exec(n);s&&e.push({key:r,value:s[1],start:s.index,startValue:s.index+1,end:s.index+s[0].length,wrapping:"emoji-shorthand"})}return e}var Rs;(t=>{function n(r){let s=et.wrapValue(e);if(!s)return null;switch(s.type){case"string":case"boolean":case"null":case"number":return s.value;case"array":return s.value.map(n);case"date":return s.value.toISO();case"duration":return s.value.toHuman();case"function":return null;case"link":return s.value.markdown();case"object":return Gt(s.value,n)}}t.yaml=n;function e(r){if(r==null)return null;if(typeof r=="object")if(Array.isArray(r)){let s=[];for(let i of r)s.push(e(i));return s}else{if(r instanceof Date)return q.fromJSDate(r);{let s=r,i={};for(let o in s)i[o]=e(s[o]);return i}}else{if(typeof r=="number")return r;if(typeof r=="boolean")return r;if(typeof r=="string"){let s=z.date.parse(r);if(s.status)return s.value;let i=z.duration.parse(r);if(i.status)return i.value;let o=z.link.parse(r);return o.status?o.value:r}}return null}t.literal=e})(Rs||(Rs={}));var Vf=/```yaml:data/i,Uf=/^(?:```|~~~)(.*)$/im,Kf=/^[\\s>]*(\\d+\\.|\\d+\\)|\\*|-|\\+)\\s*(\\[.{0,1}\\])?\\s*(.*)$/mu;function Zu(n,e,t,r){let{lines:s,metadata:i,frontmatter:o,sections:a}=Fo(n,e,t);return new po(n,r,s.length,i,a,o).build()}function Fo(n,e,t){var b,g,D,T,I,N,y,w,v,x,C,V,j,Y,ee,ae;let r=t.frontmatter?Gu(t.frontmatter):void 0,s=e.split(/\\r\\n|\\r|\\n/),i=new $e,o=[],a=(b=t.headings)!=null?b:[];a.sort((O,$)=>O.position.start.line-$.position.start.line);let u=new js.default(void 0,(O,$)=>O-$);for(let O=0;O0&&!Yu(s,0,O.start)){let $=new _r(0,O.start,En(n),1,0);u.set(0,$)}}let l=new js.default(void 0,(O,$)=>O-$),f=1;for(let O of t.sections||[]){if(O.type==="heading")continue;let $=O.position.start.line,Q=O.position.end.line+1,ue=s[$];if(O.type==="list")l.set($,new Do($,Q,f++,O.id));else if(O.type=="code"&&Vf.test(ue)){let De=s.slice($+1,Q-1).join(`\n`).replace(/\\t/gm," "),Re=Gu(co(De));l.set($,new yo($,Q,f++,Re,O.id))}else if(O.type==="code"){let De=ue.match(Uf);if(!De)l.set($,new qs($,Q,f++,[],"indent",$,Q,O.id));else{let Re=De.length>1&&De[1]?De[1].split(","):[];l.set($,new qs($,Q,f++,Re,"fenced",$+1,Q-1,O.id))}}else l.set($,new go($,Q,f++,O.type,O.id))}for(let O of l.values())(D=ct(O.start,u))==null||D.block(O);let d=/^[\\t\\f\\v ]*[\\-+\\*]\\s(\\[.\\]\\s)?/,m=/^(>?\\s?)*(\\t|\\s)*/g,h=new js.default(void 0,(O,$)=>O-$);for(let O of t.listItems||[]){let Q=s[O.position.start.line].match(Kf),ue,De;Q&&(ue=Q[1],De=Q[3]);let Re=new bo(O.position.start.line,O.position.end.line+1,O.parent,ue,O.id,O.task,De);h.set(Re.start,Re)}for(let O of h.values())if(O.parentLine<0){let $=l.get(-O.parentLine);if(!$||$.type!=="list")continue;$.items.push(O)}else(T=h.get(O.parentLine))==null||T.elements.push(O);for(let O of(I=t.tags)!=null?I:[]){let $=O.tag.startsWith("#")?O.tag:"#"+O.tag,Q=O.position.start.line;i.tag($),(N=ct(Q,u))==null||N.metadata.tag($),(y=ct(Q,l))==null||y.metadata.tag($),(w=ct(Q,h))==null||w.metadata.tag($)}if(t.frontmatter)for(let O of Wf(t.frontmatter)){let $=O.startsWith("#")?O:"#"+O;i.tag($)}for(let O of(v=t.links)!=null?v:[]){let $=Oe.infer(O.link),Q=O.position.start.line;i.link($),(x=ct(Q,u))==null||x.metadata.link($),(C=ct(Q,l))==null||C.metadata.link($),(V=ct(Q,h))==null||V.metadata.link($)}for(let O of(j=t.frontmatterLinks)!=null?j:[])i.link(Oe.infer(O.link,!1,O.displayText));for(let O of Eo(s)){let $=O.position.line;i.inlineField(O),(Y=ct($,u))==null||Y.metadata.inlineField(O),(ee=ct($,l))==null||ee.metadata.inlineField(O),(ae=ct($,h))==null||ae.metadata.inlineField(O)}return o.push(...u.values()),{lines:s,frontmatter:r,metadata:i,sections:o}}function Yu(n,e,t){for(let r=e;r32768||!t.includes("::"))continue;let r=Ju(t);if(r.length>0)for(let s of r)yield $s(s,e);else{let s=zu(t);s&&(yield $s(s,e))}}}function Gu(n){let e={};for(let t of Object.keys(n)){let r=n[t];e[t.toLowerCase()]={key:t,value:_n.json(Rs.literal(r)),raw:r}}return e}function ct(n,e){var r;let t=(r=e.getPairOrNextLower(n))==null?void 0:r[1];if(t&&t.end>=n)return t}function Wf(n){return Object.keys(n).filter(t=>t.toLowerCase()=="tags"||t.toLowerCase()=="tag").map(t=>Qu(n[t],/[,\\s]+/)).reduce((t,r)=>t.concat(r),[]).map(t=>t.startsWith("#")?t:"#"+t)}function Qu(n,e){return n==null||n==null?[]:Array.isArray(n)?n.filter(t=>!!t).map(t=>Qu(t,e)).reduce((t,r)=>t.concat(r),[]):(""+n).split(e).filter(t=>!!t).map(t=>t.trim()).filter(t=>t.length>0)}var $e=class{constructor(){this.tags=new Set;this.links=[];this.inlineFields={}}tag(e){this.tags.add(e)}link(e){this.links.find(t=>t.equals(e))||this.links.push(e)}inlineField(e){let t=e.key.toLowerCase();Object.keys(this.inlineFields).some(r=>r.toLowerCase()==t)||(this.inlineFields[t]=e)}finishTags(){return Array.from(this.tags)}finishLinks(){return this.links.map(e=>e.toObject())}finishInlineFields(){return Gt(this.inlineFields,Wu)}},po=class{constructor(e,t,r,s,i,o){this.path=e;this.stats=t;this.length=r;this.metadata=s;this.sections=i;this.frontmatter=o}build(){return{$path:this.path,$ctime:this.stats.ctime,$mtime:this.stats.mtime,$size:this.stats.size,$extension:Va(this.path),$position:{start:0,end:this.length},$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$infields:this.metadata.finishInlineFields(),$sections:this.sections.map(e=>e.build()),$frontmatter:this.frontmatter}}},_r=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.title=r;this.level=s;this.ordinal=i;this.blocks=[];this.metadata=new $e}block(e){this.blocks.push(e)}build(){return{$title:this.title,$ordinal:this.ordinal,$level:this.level,$tags:this.metadata.finishTags(),$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$position:{start:this.start,end:this.end},$blocks:this.blocks.map(e=>e.build())}}},Do=class{constructor(e,t,r,s){this.start=e;this.end=t;this.ordinal=r;this.blockId=s;this.type="list";this.metadata=new $e;this.items=[]}build(){return{$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"list",$blockId:this.blockId,$elements:this.items.map(e=>e.build())}}},qs=class{constructor(e,t,r,s,i,o,a,u){this.start=e;this.end=t;this.ordinal=r;this.languages=s;this.style=i;this.contentStart=o;this.contentEnd=a;this.blockId=u;this.type="codeblock";this.metadata=new $e}build(){return{$type:"codeblock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$languages:this.languages,$style:this.style,$contentPosition:{start:this.contentStart,end:this.contentEnd}}}},yo=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.data=s;this.blockId=i;this.type="datablock";this.metadata=new $e}build(){return{$type:"datablock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$data:this.data}}},go=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.type=s;this.blockId=i;this.metadata=new $e}build(){return{$type:this.type,$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId}}},bo=class{constructor(e,t,r,s,i,o,a){this.start=e;this.end=t;this.parentLine=r;this.symbol=s;this.blockId=i;this.status=o;this.text=a;this.metadata=new $e;this.elements=[]}build(){return{$parentLine:this.parentLine,$position:{start:this.start,end:this.end},$blockId:this.blockId,$elements:this.elements.map(e=>e.build()),$type:this.status?"task":"list",$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$status:this.status,$symbol:this.symbol,$text:this.text}}};function Xu(n,e,t,r){var o;let s=new To(n,r),i=JSON.parse(e);for(let a of i.nodes)if(a.type!="group")if(a.type=="text"){let{frontmatter:u,metadata:l,lines:f,sections:d}=Fo(n,a.text,t.caches[a.id]),m=new Vs(n,a.id,a,u);d.forEach(h=>m.section(h)),s.card(m);for(let h in l.tags)s.metadata.tag(h);for(let h of(o=l.links)!=null?o:[])s.metadata.link(h);for(let h of Eo(f))s.metadata.inlineField(h)}else{let u=new Vs(n,a.id,a);s.card(u)}return s.build()}var wo=class{constructor(e,t,r){this.path=e;this.id=t;this.nodeJson=r;this.metadata=new $e}build(){return{$file:this.path,$id:this.id,$position:{x:this.nodeJson.x,y:this.nodeJson.y},$dimensions:{width:this.nodeJson.width,height:this.nodeJson.height},$color:this.nodeJson.color,$link:Oe.file(this.path).withBlock(this.id).toObject()}}},Vs=class extends wo{constructor(t,r,s,i){super(t,r,s);this.path=t;this.id=r;this.nodeJson=s;this.frontmatter=i;this.sections=[]}section(t){return this.sections.push(t),t}build(){switch(this.nodeJson.type){case"text":return ye(R({},super.build()),{$infields:this.metadata.finishInlineFields(),$frontmatter:this.frontmatter,$sections:this.sections.map(t=>t.build()),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"text-card",$color:this.nodeJson.color});case"file":return ye(R({},super.build()),{$linkedFile:this.nodeJson.file});case"link":return ye(R({},super.build()),{$url:this.nodeJson.url})}}},To=class{constructor(e,t){this.path=e;this.stats=t;this.cards=[];this.metadata=new $e}card(e){return this.cards.push(e),e}build(){return{$cards:this.cards.map(e=>e.build()),$ctime:this.stats.ctime,$mtime:this.stats.mtime,$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$tags:this.metadata.finishTags(),$path:this.path,$size:this.stats.size}}};onmessage=async n=>{try{let e=n.data;if(e.type==="markdown"){let t=Zu(e.path,e.contents,e.metadata,e.stat);postMessage({type:"markdown",result:t})}else if(e.type==="canvas"){let t=Xu(e.path,e.contents,e.index,e.stat);postMessage({type:"canvas",result:t})}else postMessage({$error:"Unsupported import method."})}catch(e){console.error(`Datacore Indexer failed to index ${n.data.path}: ${e}`),postMessage({$error:e.message})}};\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vcGFyc2ltbW9uL2J1aWxkL3BhcnNpbW1vbi51bWQubWluLmpzIiwgIi4uLy4uL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbHV4b24vc3JjL2Vycm9ycy5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL3V0aWwuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvZW5nbGlzaC5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvaW52YWxpZC5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvSUFOQVpvbmUuanMiLCAiLi4vLi4vbHV4b24vc3JjL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvem9uZVV0aWwuanMiLCAiLi4vLi4vbHV4b24vc3JjL3NldHRpbmdzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9yZWdleFBhcnNlci5qcyIsICIuLi8uLi9sdXhvbi9zcmMvZHVyYXRpb24uanMiLCAiLi4vLi4vbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbmZvLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2RpZmYuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL3Rva2VuUGFyc2VyLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2NvbnZlcnNpb25zLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vZW1vamktcmVnZXgvaW5kZXgubWpzIiwgIi4uLy4uLy4uL3NyYy9leHByZXNzaW9uL2xpbmsudHMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvaWRlbnRpdHkuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvdmlzaXQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2RpcmVjdGl2ZXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2FuY2hvcnMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2FwcGx5UmV2aXZlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9ub2Rlcy90b0pTLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL05vZGUuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvQWxpYXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvU2NhbGFyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2RvYy9jcmVhdGVOb2RlLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL0NvbGxlY3Rpb24uanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeUNvbW1lbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L2ZvbGRGbG93TGluZXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeVN0cmluZy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zdHJpbmdpZnkvc3RyaW5naWZ5LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3N0cmluZ2lmeS9zdHJpbmdpZnlQYWlyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2xvZy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvbWVyZ2UuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvYWRkUGFpclRvSlNNYXAuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvUGFpci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zdHJpbmdpZnkvc3RyaW5naWZ5Q29sbGVjdGlvbi5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9ub2Rlcy9ZQU1MTWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9jb21tb24vbWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL1lBTUxTZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9zZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9zdHJpbmcuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9udWxsLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9jb3JlL2Jvb2wuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeU51bWJlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvY29yZS9mbG9hdC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvY29yZS9pbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvcmUvc2NoZW1hLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9qc29uL3NjaGVtYS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvYmluYXJ5LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS95YW1sLTEuMS9wYWlycy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvb21hcC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvYm9vbC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvZmxvYXQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL3lhbWwtMS4xL2ludC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvc2V0LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS95YW1sLTEuMS90aW1lc3RhbXAuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL3lhbWwtMS4xL3NjaGVtYS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvdGFncy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvU2NoZW1hLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3N0cmluZ2lmeS9zdHJpbmdpZnlEb2N1bWVudC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9kb2MvRG9jdW1lbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZXJyb3JzLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1wcm9wcy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3V0aWwtY29udGFpbnMtbmV3bGluZS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3V0aWwtZmxvdy1pbmRlbnQtY2hlY2suanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS91dGlsLW1hcC1pbmNsdWRlcy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3Jlc29sdmUtYmxvY2stbWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1ibG9jay1zZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS9yZXNvbHZlLWVuZC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3Jlc29sdmUtZmxvdy1jb2xsZWN0aW9uLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZS1jb2xsZWN0aW9uLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1ibG9jay1zY2FsYXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS9yZXNvbHZlLWZsb3ctc2NhbGFyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZS1zY2FsYXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS91dGlsLWVtcHR5LXNjYWxhci1wb3NpdGlvbi5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL2NvbXBvc2Utbm9kZS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL2NvbXBvc2UtZG9jLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvcGFyc2UvY3N0LXZpc2l0LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3BhcnNlL2NzdC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9wYXJzZS9sZXhlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9wYXJzZS9saW5lLWNvdW50ZXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvcGFyc2UvcGFyc2VyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3B1YmxpYy1hcGkuanMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L2ltcG9ydC9tYXJrZG93bi50cyIsICIuLi8uLi8uLi9zcmMvZXhwcmVzc2lvbi9wYXJzZXIudHMiLCAiLi4vLi4vLi4vc3JjL2V4cHJlc3Npb24vbGl0ZXJhbC50cyIsICIuLi8uLi8uLi9zcmMvYXBpL3Jlc3VsdC50cyIsICIuLi8uLi8uLi9zcmMvZXhwcmVzc2lvbi9maWx0ZXJzLnRzIiwgIi4uLy4uLy4uL3NyYy9leHByZXNzaW9uL2V4cHJlc3Npb24udHMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L2ltcG9ydC9pbmxpbmUtZmllbGQudHMiLCAiLi4vLi4vLi4vc3JjL3V0aWxzL2RhdGEudHMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L3R5cGVzL2pzb24vY29tbW9uLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC90eXBlcy95YW1sLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC9pbXBvcnQvY2FudmFzLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIWZ1bmN0aW9uKG4sdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QYXJzaW1tb249dCgpOm4uUGFyc2ltbW9uPXQoKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Z1bmN0aW9uIHIoZSl7aWYodFtlXSlyZXR1cm4gdFtlXS5leHBvcnRzO3ZhciB1PXRbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiBuW2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLHIpLHUubD0hMCx1LmV4cG9ydHN9cmV0dXJuIHIubT1uLHIuYz10LHIuZD1mdW5jdGlvbihuLHQsZSl7ci5vKG4sdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LHIucj1mdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciB0PW4mJm4uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG59O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1ufXZhciB1PWUucHJvdG90eXBlO2Z1bmN0aW9uIG8obix0KXtmb3IodmFyIHI9MDtyPG47cisrKXQocil9ZnVuY3Rpb24gaShuLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7byh0Lmxlbmd0aCxmdW5jdGlvbihyKXtuKHRbcl0scix0KX0pfShmdW5jdGlvbihyLGUsdSl7dD1uKHQscixlLHUpfSxyKSx0fWZ1bmN0aW9uIGEobix0KXtyZXR1cm4gaShmdW5jdGlvbih0LHIsZSx1KXtyZXR1cm4gdC5jb25jYXQoW24ocixlLHUpXSl9LFtdLHQpfWZ1bmN0aW9uIGYobix0KXt2YXIgcj17djowLGJ1Zjp0fTtyZXR1cm4gbyhuLGZ1bmN0aW9uKCl7dmFyIG47cj17djpyLnY8PDF8KG49ci5idWYsblswXT4+NyksYnVmOmZ1bmN0aW9uKG4pe3ZhciB0PWkoZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG4uY29uY2F0KHI9PT1lLmxlbmd0aC0xP0J1ZmZlci5mcm9tKFt0LDBdKS5yZWFkVUludDE2QkUoMCk6ZS5yZWFkVUludDE2QkUocikpfSxbXSxuKTtyZXR1cm4gQnVmZmVyLmZyb20oYShmdW5jdGlvbihuKXtyZXR1cm4objw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfX0pLHJ9ZnVuY3Rpb24gYygpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyIGdsb2JhbCBkb2VzIG5vdCBleGlzdDsgcGxlYXNlIHVzZSB3ZWJwYWNrIGlmIHlvdSBuZWVkIHRvIHBhcnNlIEJ1ZmZlcnMgaW4gdGhlIGJyb3dzZXIuXCIpfWZ1bmN0aW9uIGwobil7cygpO3ZhciB0PWkoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwLG4pO2lmKHQlOCE9MCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYml0cyBbXCIrbi5qb2luKFwiLCBcIikrXCJdIGFkZCB1cCB0byBcIit0K1wiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFwiKTt2YXIgcix1PXQvOCxvPShyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjQ4fSxpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG58fChyKHQpP3Q6bil9LG51bGwsbikpO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8rXCIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LlwiKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKStcIiBieXRlc1wiKTpiKGUsaShmdW5jdGlvbihuLHQpe3ZhciByPWYodCxuLmJ1Zik7cmV0dXJue2NvbGw6bi5jb2xsLmNvbmNhdChyLnYpLGJ1ZjpyLmJ1Zn19LHtjb2xsOltdLGJ1Zjp0LnNsaWNlKHIsZSl9LG4pLmNvbGwpfSl9ZnVuY3Rpb24gaChuLHQpe3JldHVybiBuZXcgZShmdW5jdGlvbihyLGUpe3JldHVybiBzKCksZSt0PnIubGVuZ3RoP3goZSx0K1wiIGJ5dGVzIGZvciBcIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBwKG4sdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mKHI9dCl8fE1hdGguZmxvb3IocikhPT1yfHx0PDB8fHQ+Nil0aHJvdyBuZXcgRXJyb3IobitcIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uXCIpO3ZhciByfWZ1bmN0aW9uIGQobil7cmV0dXJuIHAoXCJ1aW50QkVcIixuKSxoKFwidWludEJFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIHAoXCJ1aW50TEVcIixuKSxoKFwidWludExFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIHAoXCJpbnRCRVwiLG4pLGgoXCJpbnRCRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIHAoXCJpbnRMRVwiLG4pLGgoXCJpbnRMRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09e30udG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiB3KG4pe3JldHVybiBjKCkmJkJ1ZmZlci5pc0J1ZmZlcihuKX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJue3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldDtyZXR1cm4gZS5fc3VwcG9ydHNTZXQ9bixufSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIHI9bmV3IFNldChuKSx1PTA7dTx0Lmxlbmd0aDt1Kyspci5hZGQodFt1XSk7dmFyIG89QXJyYXkuZnJvbShyKTtyZXR1cm4gby5zb3J0KCksb31mb3IodmFyIGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXV09ITA7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspaVt0W2ZdXT0hMDt2YXIgYz1bXTtmb3IodmFyIHMgaW4gaSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmYy5wdXNoKHMpO3JldHVybiBjLnNvcnQoKSxjfShuLmV4cGVjdGVkLHQuZXhwZWN0ZWQpOnQuZXhwZWN0ZWQ7cmV0dXJue3N0YXR1czpuLnN0YXR1cyxpbmRleDpuLmluZGV4LHZhbHVlOm4udmFsdWUsZnVydGhlc3Q6dC5mdXJ0aGVzdCxleHBlY3RlZDpyfX12YXIgaj17fTtmdW5jdGlvbiBTKG4sdCl7aWYodyhuKSlyZXR1cm57b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfShcIlxcblwiPT09bi5jaGFyQXQoaSl8fFwiXFxyXCI9PT1uLmNoYXJBdChpKSYmXCJcXG5cIiE9PW4uY2hhckF0KGkrMSkpJiYodSsrLDA9PT1vJiYobz1pKzEpKSxpLS19dmFyIGE9ZSt1LGY9dC1vO3JldHVybiByW3RdPXtsaW5lOmEsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmErMSxjb2x1bW46ZisxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcihcIm5vdCBhIHBhcnNlcjogXCIrbil9ZnVuY3Rpb24gTChuLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZihcIm51bWJlclwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBudW1iZXI6IFwiK24pfWZ1bmN0aW9uIGsobil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBmdW5jdGlvbjogXCIrbil9ZnVuY3Rpb24gUChuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmc6IFwiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PVwiICBcIjtmdW5jdGlvbiBSKG4sdCl7cmV0dXJuIG5ldyBBcnJheSh0KzEpLmpvaW4obil9ZnVuY3Rpb24gVShuLHQscil7dmFyIGU9dC1uLmxlbmd0aDtyZXR1cm4gZTw9MD9uOlIocixlKStufWZ1bmN0aW9uIFcobix0LHIsZSl7cmV0dXJue2Zyb206bi10PjA/bi10OjAsdG86bityPmU/ZTpuK3J9fWZ1bmN0aW9uIEQobix0KXt2YXIgcixlLHUsbyxmLGM9dC5pbmRleCxzPWMub2Zmc2V0LGw9MTtpZihzPT09bi5sZW5ndGgpcmV0dXJuXCJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXRcIjtpZih3KG4pKXt2YXIgaD1zLXMlSSxwPXMtaCxkPVcoaCxGLE0rSSxuLmxlbmd0aCksdj1hKGZ1bmN0aW9uKG4pe3JldHVybiBhKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4udG9TdHJpbmcoMTYpLDIsXCIwXCIpfSxuKX0sZnVuY3Rpb24obix0KXt2YXIgcj1uLmxlbmd0aCxlPVtdLHU9MDtpZihyPD10KXJldHVybltuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1oL0kscj0zKnAscD49NCYmKHIrPTEpLGw9Mix1PWEoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbihcIiBcIik6bi5zbGljZSgwLDQpLmpvaW4oXCIgXCIpK1wiICBcIituLnNsaWNlKDQpLmpvaW4oXCIgXCIpfSx2KSwoZj0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGY9Mil9ZWxzZXt2YXIgZz1uLnNwbGl0KC9cXHJcXG58W1xcblxcclxcdTIwMjhcXHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxmPW8udG8udG9TdHJpbmcoKS5sZW5ndGh9dmFyIG09ZS1vLmZyb207cmV0dXJuIHcobikmJihmPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoZj0yKSxpKGZ1bmN0aW9uKHQsZSx1KXt2YXIgaSxhPXU9PT1tLGM9YT9cIj4gXCI6ejtyZXR1cm4gaT13KG4pP1UoKDgqKG8uZnJvbSt1KSkudG9TdHJpbmcoMTYpLGYsXCIwXCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksZixcIiBcIiksW10uY29uY2F0KHQsW2MraStcIiB8IFwiK2VdLGE/W3orUihcIiBcIixmKStcIiB8IFwiK1UoXCJcIixyLFwiIFwiKStSKFwiXlwiLGwpXTpbXSl9LFtdLHUpLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gTihuLHQpe3JldHVybltcIlxcblwiLFwiLS0gUEFSU0lORyBGQUlMRUQgXCIrUihcIi1cIiw1MCksXCJcXG5cXG5cIixEKG4sdCksXCJcXG5cXG5cIiwocj10LmV4cGVjdGVkLDE9PT1yLmxlbmd0aD9cIkV4cGVjdGVkOlxcblxcblwiK3JbMF06XCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIrci5qb2luKFwiLCBcIikpLFwiXFxuXCJdLmpvaW4oXCJcIik7dmFyIHJ9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD9cImdcIjpcIlwiLG4uaWdub3JlQ2FzZT9cImlcIjpcIlwiLG4ubXVsdGlsaW5lP1wibVwiOlwiXCIsbi51bmljb2RlP1widVwiOlwiXCIsbi5zdGlja3k/XCJ5XCI6XCJcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoLHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7Zm9yKHZhciB1LG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSs9MSl7aWYoISh1PUIobltpXS5fKHIsZSksdSkpLnN0YXR1cylyZXR1cm4gdTtvW2ldPXUudmFsdWUsZT11LmluZGV4fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcIik7dmFyIHQ9bi5wb3AoKTtyZXR1cm4gayh0KSxDLmFwcGx5KG51bGwsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KG51bGwsbil9KX1mdW5jdGlvbiBUKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIFkoXCJ6ZXJvIGFsdGVybmF0ZXNcIik7Zm9yKHZhciByPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSx1PTA7dTxuLmxlbmd0aDt1Kz0xKWlmKChlPUIoblt1XS5fKHQsciksZSkpLnN0YXR1cylyZXR1cm4gZTtyZXR1cm4gZX0pfWZ1bmN0aW9uIFYobix0KXtyZXR1cm4gSChuLHQpLm9yKFgoW10pKX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIF8obiksXyh0KSxKKG4sdC50aGVuKG4pLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybltuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9XCInXCIrbitcIidcIjtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PWUrbi5sZW5ndGgsbz1yLnNsaWNlKGUsdSk7cmV0dXJuIG89PT1uP2IodSxvKTp4KGUsdCl9KX1mdW5jdGlvbiBRKG4sdCl7IWZ1bmN0aW9uKG4pe2lmKCEobiBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcmVnZXhwOiBcIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKFwiaVwiIT09ZSYmXCJtXCIhPT1lJiZcInVcIiE9PWUmJlwic1wiIT09ZSl0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnIFwiJytlKydcIjogJytuKX19KG4pLGFyZ3VtZW50cy5sZW5ndGg+PTI/Tyh0KTp0PTA7dmFyIHI9ZnVuY3Rpb24obil7cmV0dXJuIFJlZ0V4cChcIl4oPzpcIituLnNvdXJjZStcIilcIixHKG4pKX0obiksdT1cIlwiK247cmV0dXJuIGUoZnVuY3Rpb24obixlKXt2YXIgbz1yLmV4ZWMobi5zbGljZShlKSk7aWYobyl7aWYoMDw9dCYmdDw9by5sZW5ndGgpe3ZhciBpPW9bMF0sYT1vW3RdO3JldHVybiBiKGUraS5sZW5ndGgsYSl9cmV0dXJuIHgoZSxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFwiK28ubGVuZ3RoK1wiKSBpbiBcIit1KX1yZXR1cm4geChlLHUpfSl9ZnVuY3Rpb24gWChuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiBiKHIsbil9KX1mdW5jdGlvbiBZKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHgocixuKX0pfWZ1bmN0aW9uIFoobil7aWYoeShuKSlyZXR1cm4gZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpO3JldHVybiBlLmluZGV4PXIsZS52YWx1ZT1cIlwiLGV9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcihcIm5vdCBhIHN0cmluZywgcmVnZXhwLCBvciBwYXJzZXI6IFwiK24pfWZ1bmN0aW9uICQobil7cmV0dXJuIF8obiksZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpLHU9dC5zbGljZShyLGUuaW5kZXgpO3JldHVybiBlLnN0YXR1cz94KHIsJ25vdCBcIicrdSsnXCInKTpiKHIsbnVsbCl9KX1mdW5jdGlvbiBubihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9TCh0LHIpO3JldHVybiByPHQubGVuZ3RoJiZuKGUpP2IocisxLGUpOngocixcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpfXUucGFyc2U9ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4mJiF3KG4pKXRocm93IG5ldyBFcnJvcihcIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnRcIik7dmFyIHQscj10aGlzLnNraXAoYW4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPVwiUGFyc2ltbW9uRXJyb3JcIixlLnJlc3VsdD10LGV9LHUuYXNzZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24ocil7cmV0dXJuIG4ocik/WChyKTpZKHQpfSl9LHUub3I9ZnVuY3Rpb24obil7cmV0dXJuIFQodGhpcyxuKX0sdS50cmltPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLndyYXAobixuKX0sdS53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEoobix0aGlzLHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdH0pfSx1LnRocnU9ZnVuY3Rpb24obil7cmV0dXJuIG4odGhpcyl9LHUudGhlbj1mdW5jdGlvbihuKXtyZXR1cm4gXyhuKSxDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSl9LHUubWFueT1mdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9W10sdT12b2lkIDA7Oyl7aWYoISh1PUIobi5fKHQsciksdSkpLnN0YXR1cylyZXR1cm4gQihiKHIsZSksdSk7aWYocj09PXUuaW5kZXgpdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXCIpO3I9dS5pbmRleCxlLnB1c2godS52YWx1ZSl9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgYW4gYXJyYXk6IFwiK24pfSh0KSx0Lmxlbmd0aCl7UCh0WzBdKTtmb3IodmFyIHI9dFswXSxlPTE7ZTx0Lmxlbmd0aDtlKyspUCh0W2VdKSxyKz1uK3RbZV07cmV0dXJuIHJ9cmV0dXJuXCJcIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoXCJcIil9LHUudGltZXM9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW4pLE8obiksTyh0KSxlKGZ1bmN0aW9uKGUsdSl7Zm9yKHZhciBvPVtdLGk9dm9pZCAwLGE9dm9pZCAwLGY9MDtmPG47Zis9MSl7aWYoYT1CKGk9ci5fKGUsdSksYSksIWkuc3RhdHVzKXJldHVybiBhO3U9aS5pbmRleCxvLnB1c2goaS52YWx1ZSl9Zm9yKDtmPHQmJihhPUIoaT1yLl8oZSx1KSxhKSxpLnN0YXR1cyk7Zis9MSl1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO3JldHVybiBCKGIodSxvKSxhKX0pfSx1LnJlc3VsdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSx1LmF0TW9zdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50aW1lcygwLG4pfSx1LmF0TGVhc3Q9ZnVuY3Rpb24obil7cmV0dXJuIEoodGhpcy50aW1lcyhuKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBuLmNvbmNhdCh0KX0pfSx1Lm1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihiKHUuaW5kZXgsbih1LnZhbHVlKSksdSk6dX0pfSx1LmNvbnRyYW1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10LnBhcnNlKG4oci5zbGljZShlKSkpO3JldHVybiB1LnN0YXR1cz9iKGUrci5sZW5ndGgsdS52YWx1ZSk6dX0pfSx1LnByb21hcD1mdW5jdGlvbihuLHQpe3JldHVybiBrKG4pLGsodCksdGhpcy5jb250cmFtYXAobikubWFwKHQpfSx1LnNraXA9ZnVuY3Rpb24obil7cmV0dXJuIEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KX0sdS5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbihuLHQscil7cmV0dXJue3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybntuYW1lOm4sdmFsdWU6cixzdGFydDp0LGVuZDplfX0pfSx1LnNlcEJ5PWZ1bmN0aW9uKG4pe3JldHVybiBWKHRoaXMsbil9LHUuc2VwQnkxPWZ1bmN0aW9uKG4pe3JldHVybiBIKHRoaXMsbil9LHUubG9va2FoZWFkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoWihuKSl9LHUubm90Rm9sbG93ZWRCeT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKCQobikpfSx1LmRlc2M9ZnVuY3Rpb24obil7RShuKXx8KG49W25dKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzfHwodS5leHBlY3RlZD1uKSx1fSl9LHUuZmFsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3IoWChuKSl9LHUuYXA9ZnVuY3Rpb24obil7cmV0dXJuIEoobix0aGlzLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9KX0sdS5jaGFpbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0Iobih1LnZhbHVlKS5fKHIsdS5pbmRleCksdSk6dX0pfSx1LmNvbmNhdD11Lm9yLHUuZW1wdHk9cm4sdS5vZj1YLHVbXCJmYW50YXN5LWxhbmQvYXBcIl09dS5hcCx1W1wiZmFudGFzeS1sYW5kL2NoYWluXCJdPXUuY2hhaW4sdVtcImZhbnRhc3ktbGFuZC9jb25jYXRcIl09dS5jb25jYXQsdVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT11LmVtcHR5LHVbXCJmYW50YXN5LWxhbmQvb2ZcIl09dS5vZix1W1wiZmFudGFzeS1sYW5kL21hcFwiXT11Lm1hcDt2YXIgZW49ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKHQsUyhuLHQpKX0pLHVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdD49bi5sZW5ndGg/eCh0LFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpOmIodCsxLEwobix0KSl9KSxvbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIobi5sZW5ndGgsbi5zbGljZSh0KSl9KSxhbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ8bi5sZW5ndGg/eCh0LFwiRU9GXCIpOmIodCxudWxsKX0pLGZuPVEoL1swLTldLykuZGVzYyhcImEgZGlnaXRcIiksY249USgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKSxzbj1RKC9bYS16XS9pKS5kZXNjKFwiYSBsZXR0ZXJcIiksbG49USgvW2Etel0qL2kpLmRlc2MoXCJvcHRpb25hbCBsZXR0ZXJzXCIpLGhuPVEoL1xccyovKS5kZXNjKFwib3B0aW9uYWwgd2hpdGVzcGFjZVwiKSxwbj1RKC9cXHMrLykuZGVzYyhcIndoaXRlc3BhY2VcIiksZG49SyhcIlxcclwiKSx2bj1LKFwiXFxuXCIpLGduPUsoXCJcXHJcXG5cIiksbW49VChnbix2bixkbikuZGVzYyhcIm5ld2xpbmVcIikseW49VChtbixhbik7ZS5hbGw9b24sZS5hbHQ9VCxlLmFueT11bixlLmNyPWRuLGUuY3JlYXRlTGFuZ3VhZ2U9ZnVuY3Rpb24obil7dmFyIHQ9e307Zm9yKHZhciByIGluIG4pKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJmZ1bmN0aW9uKHIpe3Rbcl09dG4oZnVuY3Rpb24oKXtyZXR1cm4gbltyXSh0KX0pfShyKTtyZXR1cm4gdH0sZS5jcmxmPWduLGUuY3VzdG9tPWZ1bmN0aW9uKG4pe3JldHVybiBlKG4oYix4KSl9LGUuZGlnaXQ9Zm4sZS5kaWdpdHM9Y24sZS5lbXB0eT1ybixlLmVuZD15bixlLmVvZj1hbixlLmZhaWw9WSxlLmZvcm1hdEVycm9yPU4sZS5pbmRleD1lbixlLmlzUGFyc2VyPXksZS5sYXp5PXRuLGUubGV0dGVyPXNuLGUubGV0dGVycz1sbixlLmxmPXZuLGUubG9va2FoZWFkPVosZS5tYWtlRmFpbHVyZT14LGUubWFrZVN1Y2Nlc3M9YixlLm5ld2xpbmU9bW4sZS5ub25lT2Y9ZnVuY3Rpb24obil7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk8MH0pLmRlc2MoXCJub25lIG9mICdcIituK1wiJ1wiKX0sZS5ub3RGb2xsb3dlZEJ5PSQsZS5vZj1YLGUub25lT2Y9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4uc3BsaXQoXCJcIikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09XCInXCIrdFtyXStcIidcIjtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT49MH0pLmRlc2ModCl9LGUub3B0V2hpdGVzcGFjZT1obixlLlBhcnNlcj1lLGUucmFuZ2U9ZnVuY3Rpb24obix0KXtyZXR1cm4gbm4oZnVuY3Rpb24ocil7cmV0dXJuIG48PXImJnI8PXR9KS5kZXNjKG4rXCItXCIrdCl9LGUucmVnZXg9USxlLnJlZ2V4cD1RLGUuc2VwQnk9VixlLnNlcEJ5MT1ILGUuc2VxPUMsZS5zZXFNYXA9SixlLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXt9LHI9MCx1PShuPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSksbz11Lmxlbmd0aCxpPTA7aTxvO2krPTEpe3ZhciBhPXVbaV07aWYoIXkoYSkpe2lmKEUoYSkmJjI9PT1hLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFbMF0mJnkoYVsxXSkpe3ZhciBmPWFbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZikpdGhyb3cgbmV3IEVycm9yKFwic2VxT2JqOiBkdXBsaWNhdGUga2V5IFwiK2YpO3RbZl09ITAscisrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuXCIpfX1pZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXCIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgYSxmO2lmKEUodVtpXSk/KGE9dVtpXVswXSxmPXVbaV1bMV0pOihhPW51bGwsZj11W2ldKSwhKHI9QihmLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2EmJihlW2FdPXIudmFsdWUpLHQ9ci5pbmRleH1yZXR1cm4gQihiKHQsZSkscil9KX0sZS5zdHJpbmc9SyxlLnN1Y2NlZWQ9WCxlLnRha2VXaGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPXI7ZTx0Lmxlbmd0aCYmbihMKHQsZSkpOyllKys7cmV0dXJuIGIoZSx0LnNsaWNlKHIsZSkpfSl9LGUudGVzdD1ubixlLndoaXRlc3BhY2U9cG4sZVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT1ybixlW1wiZmFudGFzeS1sYW5kL29mXCJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9YShmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJbXCIrZS5qb2luKFwiLCBcIikrXCJdIHNob3VsZCBiZSBsZW5ndGggMiwgZ290IGxlbmd0aCBcIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIitlWzBdKTtyZXR1cm4gdFtlWzBdXT0hMCxyKyssZX1yZXR1cm4gTyhuKSxbbnVsbCxuXX0sbik7aWYocjwxKXRocm93IG5ldyBFcnJvcihcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1wiK24uam9pbihcIiwgXCIpK1wiXVwiKTt2YXIgdT1hKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSxlKTtyZXR1cm4gbChhKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSxlKSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGwhPT10WzBdJiYoblt0WzBdXT10WzFdKSxufSx7fSxhKGZ1bmN0aW9uKHQscil7cmV0dXJuW3QsbltyXV19LHUpKX0pfSxieXRlOmZ1bmN0aW9uKG4pe2lmKHMoKSxPKG4pLG4+MjU1KXRocm93IG5ldyBFcnJvcihcIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yIChcIituK1wiPTB4XCIrbi50b1N0cmluZygxNikrXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCIpO3ZhciB0PShuPjE1P1wiMHhcIjpcIjB4MFwiKStuLnRvU3RyaW5nKDE2KTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PUwocixlKTtyZXR1cm4gdT09PW4/YihlKzEsdSk6eChlLHQpfSl9LGJ1ZmZlcjpmdW5jdGlvbihuKXtyZXR1cm4gaChcImJ1ZmZlclwiLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gQnVmZmVyLmZyb20obil9KX0sZW5jb2RlZFN0cmluZzpmdW5jdGlvbihuLHQpe3JldHVybiBoKFwic3RyaW5nXCIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6aChcImZsb2F0QkVcIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOmgoXCJmbG9hdExFXCIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdExFKDApfSksZG91YmxlQkU6aChcImRvdWJsZUJFXCIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOmgoXCJkb3VibGVMRVwiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPWV9XSl9KTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuRW1wdHlCVHJlZSA9IGV4cG9ydHMuYXNTZXQgPSBleHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBleHBvcnRzLmRlZmF1bHRDb21wYXJhdG9yID0gdm9pZCAwO1xyXG4vKipcclxuICogQ29tcGFyZXMgRGVmYXVsdENvbXBhcmFibGVzIHRvIGZvcm0gYSBzdHJpY3QgcGFydGlhbCBvcmRlcmluZy5cclxuICpcclxuICogSGFuZGxlcyArLy0wIGFuZCBOYU4gbGlrZSBNYXA6IE5hTiBpcyBlcXVhbCB0byBOYU4sIGFuZCAtMCBpcyBlcXVhbCB0byArMC5cclxuICpcclxuICogQXJyYXlzIGFyZSBjb21wYXJlZCB1c2luZyAnPCcgYW5kICc+Jywgd2hpY2ggbWF5IGNhdXNlIHVuZXhwZWN0ZWQgZXF1YWxpdHk6XHJcbiAqIGZvciBleGFtcGxlIFsxXSB3aWxsIGJlIGNvbnNpZGVyZWQgZXF1YWwgdG8gWycxJ10uXHJcbiAqXHJcbiAqIFR3byBvYmplY3RzIHdpdGggZXF1YWwgdmFsdWVPZiBjb21wYXJlIHRoZSBzYW1lLCBidXQgY29tcGFyZSB1bmVxdWFsIHRvXHJcbiAqIHByaW1pdGl2ZXMgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmF0b3IoYSwgYikge1xyXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZpbml0ZSBudW1iZXJzIGZpcnN0IGZvciBwZXJmb3JtYW5jZS5cclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdHJpY2sgb2YgdXNpbmcgJ2EgLSBiJyBhbmQgY2hlY2tpbmcgZm9yIE5hTiB0byBkZXRlY3Qgbm9uLW51bWJlcnNcclxuICAgIC8vIGRvZXMgbm90IHdvcmsgaWYgdGhlIHN0cmluZ3MgYXJlIG51bWVyaWMgKGV4OiBcIjVcIikuIFRoaXMgd291bGQgbGVhZGluZyBtb3N0IFxyXG4gICAgLy8gY29tcGFyaXNvbiBmdW5jdGlvbnMgdXNpbmcgdGhhdCBhcHByb2FjaCB0byBmYWlsIHRvIGhhdmUgdHJhbnNpdGl2aXR5LlxyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShhKSAmJiBOdW1iZXIuaXNGaW5pdGUoYikpIHtcclxuICAgICAgICByZXR1cm4gYSAtIGI7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgZGVmYXVsdCA8IGFuZCA+IG9wZXJhdG9ycyBhcmUgbm90IHRvdGFsbHkgb3JkZXJlZC4gVG8gYWxsb3cgdHlwZXMgdG8gYmUgbWl4ZWRcclxuICAgIC8vIGluIGEgc2luZ2xlIGNvbGxlY3Rpb24sIGNvbXBhcmUgdHlwZXMgYW5kIG9yZGVyIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgYnkgdHlwZS5cclxuICAgIHZhciB0YSA9IHR5cGVvZiBhO1xyXG4gICAgdmFyIHRiID0gdHlwZW9mIGI7XHJcbiAgICBpZiAodGEgIT09IHRiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICB9XHJcbiAgICBpZiAodGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmRpemVkIEphdmFTY3JpcHQgYnVnOiBudWxsIGlzIG5vdCBhbiBvYmplY3QsIGJ1dCB0eXBlb2Ygc2F5cyBpdCBpc1xyXG4gICAgICAgIGlmIChhID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gYiA9PT0gbnVsbCA/IDAgOiAtMTtcclxuICAgICAgICBlbHNlIGlmIChiID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBhID0gYS52YWx1ZU9mKCk7XHJcbiAgICAgICAgYiA9IGIudmFsdWVPZigpO1xyXG4gICAgICAgIHRhID0gdHlwZW9mIGE7XHJcbiAgICAgICAgdGIgPSB0eXBlb2YgYjtcclxuICAgICAgICAvLyBEZWFsIHdpdGggdGhlIHR3byB2YWx1ZU9mKClzIHByb2R1Y2luZyBkaWZmZXJlbnQgdHlwZXNcclxuICAgICAgICBpZiAodGEgIT09IHRiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0YSA8IHRiID8gLTEgOiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGEgYW5kIGIgYXJlIG5vdyB0aGUgc2FtZSB0eXBlLCBhbmQgd2lsbCBiZSBhIG51bWJlciwgc3RyaW5nIG9yIGFycmF5IFxyXG4gICAgLy8gKHdoaWNoIHdlIGFzc3VtZSBob2xkcyBudW1iZXJzIG9yIHN0cmluZ3MpLCBvciBzb21ldGhpbmcgdW5zdXBwb3J0ZWQuXHJcbiAgICBpZiAoYSA8IGIpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKGEgPiBiKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgaWYgKGEgPT09IGIpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAvLyBPcmRlciBOYU4gbGVzcyB0aGFuIG90aGVyIG51bWJlcnNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oYSkpXHJcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihiKSA/IDAgOiAtMTtcclxuICAgIGVsc2UgaWYgKE51bWJlci5pc05hTihiKSlcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIC8vIFRoaXMgY291bGQgYmUgdHdvIG9iamVjdHMgKGUuZy4gWzddIGFuZCBbJzcnXSkgdGhhdCBhcmVuJ3Qgb3JkZXJlZFxyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAwIDogTnVtYmVyLk5hTjtcclxufVxyXG5leHBvcnRzLmRlZmF1bHRDb21wYXJhdG9yID0gZGVmYXVsdENvbXBhcmF0b3I7XHJcbjtcclxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICByZXR1cm4gYSA+IGIgPyAxIDogYSA8IGIgPyAtMSA6IDA7XHJcbn1cclxuZXhwb3J0cy5zaW1wbGVDb21wYXJhdG9yID0gc2ltcGxlQ29tcGFyYXRvcjtcclxuO1xyXG4vKipcclxuICogQSByZWFzb25hYmx5IGZhc3QgY29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgd2l0aCBhIHBvd2VyZnVsIEFQSS5cclxuICogTGFyZ2VseSBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIE1hcC4gQlRyZWUgaXMgYSBCKyB0cmVlIGRhdGEgc3RydWN0dXJlLFxyXG4gKiBzbyB0aGUgY29sbGVjdGlvbiBpcyBzb3J0ZWQgYnkga2V5LlxyXG4gKlxyXG4gKiBCKyB0cmVlcyB0ZW5kIHRvIHVzZSBtZW1vcnkgbW9yZSBlZmZpY2llbnRseSB0aGFuIGhhc2h0YWJsZXMgc3VjaCBhcyB0aGVcclxuICogc3RhbmRhcmQgTWFwLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgYSBsYXJnZSBudW1iZXIgb2ZcclxuICogaXRlbXMuIEhvd2V2ZXIsIG1haW50YWluaW5nIHRoZSBzb3J0IG9yZGVyIG1ha2VzIHRoZW0gbW9kZXN0bHkgc2xvd2VyOlxyXG4gKiBPKGxvZyBzaXplKSByYXRoZXIgdGhhbiBPKDEpLiBUaGlzIEIrIHRyZWUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgTygxKVxyXG4gKiBmYXN0IGNsb25pbmcuIEl0IGFsc28gc3VwcG9ydHMgZnJlZXplKCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0XHJcbiAqIGEgQlRyZWUgaXMgbm90IGNoYW5nZWQgYWNjaWRlbnRhbGx5LlxyXG4gKlxyXG4gKiBDb25mdXNpbmdseSwgdGhlIEVTNiBNYXAuZm9yRWFjaChjKSBtZXRob2QgY2FsbHMgYyh2YWx1ZSxrZXkpIGluc3RlYWQgb2ZcclxuICogYyhrZXksdmFsdWUpLCBpbiBjb250cmFzdCB0byBvdGhlciBtZXRob2RzIHN1Y2ggYXMgc2V0KCkgYW5kIGVudHJpZXMoKVxyXG4gKiB3aGljaCBwdXQgdGhlIGtleSBmaXJzdC4gSSBjYW4gb25seSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgd2FzIHJldmVyc2VkIG9uXHJcbiAqIHRoZSB0aGVvcnkgdGhhdCB1c2VycyB3b3VsZCB1c3VhbGx5IHdhbnQgdG8gZXhhbWluZSB2YWx1ZXMgYW5kIGlnbm9yZSBrZXlzLlxyXG4gKiBCVHJlZSdzIGZvckVhY2goKSB0aGVyZWZvcmUgd29ya3MgdGhlIHNhbWUgd2F5LCBidXQgYSBzZWNvbmQgbWV0aG9kXHJcbiAqIGAuZm9yRWFjaFBhaXIoKGtleSx2YWx1ZSk9PnsuLi59KWAgaXMgcHJvdmlkZWQgd2hpY2ggc2VuZHMgeW91IHRoZSBrZXlcclxuICogZmlyc3QgYW5kIHRoZSB2YWx1ZSBzZWNvbmQ7IHRoaXMgbWV0aG9kIGlzIHNsaWdodGx5IGZhc3RlciBiZWNhdXNlIGl0IGlzXHJcbiAqIHRoZSBcIm5hdGl2ZVwiIGZvci1lYWNoIG1ldGhvZCBmb3IgdGhpcyBjbGFzcy5cclxuICpcclxuICogT3V0IG9mIHRoZSBib3gsIEJUcmVlIHN1cHBvcnRzIGtleXMgdGhhdCBhcmUgbnVtYmVycywgc3RyaW5ncywgYXJyYXlzIG9mXHJcbiAqIG51bWJlcnMvc3RyaW5ncywgRGF0ZSwgYW5kIG9iamVjdHMgdGhhdCBoYXZlIGEgdmFsdWVPZigpIG1ldGhvZCByZXR1cm5pbmcgYVxyXG4gKiBudW1iZXIgb3Igc3RyaW5nLiBPdGhlciBkYXRhIHR5cGVzLCBzdWNoIGFzIGFycmF5cyBvZiBEYXRlIG9yIGN1c3RvbVxyXG4gKiBvYmplY3RzLCByZXF1aXJlIGEgY3VzdG9tIGNvbXBhcmF0b3IsIHdoaWNoIHlvdSBtdXN0IHBhc3MgYXMgdGhlIHNlY29uZFxyXG4gKiBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IgKHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBsaXN0IG9mXHJcbiAqIGluaXRpYWwgaXRlbXMpLiBTeW1ib2xzIGNhbm5vdCBiZSB1c2VkIGFzIGtleXMgYmVjYXVzZSB0aGV5IGFyZSB1bm9yZGVyZWRcclxuICogKG9uZSBTeW1ib2wgaXMgbmV2ZXIgXCJncmVhdGVyXCIgb3IgXCJsZXNzXCIgdGhhbiBhbm90aGVyKS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogR2l2ZW4gYSB7bmFtZTogc3RyaW5nLCBhZ2U6IG51bWJlcn0gb2JqZWN0LCB5b3UgY2FuIGNyZWF0ZSBhIHRyZWUgc29ydGVkIGJ5XHJcbiAqIG5hbWUgYW5kIHRoZW4gYnkgYWdlIGxpa2UgdGhpczpcclxuICpcclxuICogICAgIHZhciB0cmVlID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgKGEsIGIpID0+IHtcclxuICogICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSlcclxuICogICAgICAgICByZXR1cm4gMTsgLy8gUmV0dXJuIGEgbnVtYmVyID4wIHdoZW4gYSA+IGJcclxuICogICAgICAgZWxzZSBpZiAoYS5uYW1lIDwgYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAtMTsgLy8gUmV0dXJuIGEgbnVtYmVyIDwwIHdoZW4gYSA8IGJcclxuICogICAgICAgZWxzZSAvLyBuYW1lcyBhcmUgZXF1YWwgKG9yIGluY29tcGFyYWJsZSlcclxuICogICAgICAgICByZXR1cm4gYS5hZ2UgLSBiLmFnZTsgLy8gUmV0dXJuID4wIHdoZW4gYS5hZ2UgPiBiLmFnZVxyXG4gKiAgICAgfSk7XHJcbiAqXHJcbiAqICAgICB0cmVlLnNldCh7bmFtZTpcIkJpbGxcIiwgYWdlOjE3fSwgXCJoYXBweVwiKTtcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiRnJhblwiLCBhZ2U6NDB9LCBcImJ1c3kgJiBzdHJlc3NlZFwiKTtcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6NTV9LCBcInJlY2VudGx5IGxhaWQgb2ZmXCIpO1xyXG4gKiAgICAgdHJlZS5mb3JFYWNoUGFpcigoaywgdikgPT4ge1xyXG4gKiAgICAgICBjb25zb2xlLmxvZyhgTmFtZTogJHtrLm5hbWV9IEFnZTogJHtrLmFnZX0gU3RhdHVzOiAke3Z9YCk7XHJcbiAqICAgICB9KTtcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBcInJhbmdlXCIgbWV0aG9kcyAoYGZvckVhY2gsIGZvclJhbmdlLCBlZGl0UmFuZ2VgKSB3aWxsIHJldHVybiB0aGUgbnVtYmVyXHJcbiAqIG9mIGVsZW1lbnRzIHRoYXQgd2VyZSBzY2FubmVkLiBJbiBhZGRpdGlvbiwgdGhlIGNhbGxiYWNrIGNhbiByZXR1cm4ge2JyZWFrOlJ9XHJcbiAqIHRvIHN0b3AgZWFybHkgYW5kIHJldHVybiBSIGZyb20gdGhlIG91dGVyIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiAtIFRPRE86IFRlc3QgcGVyZm9ybWFuY2Ugb2YgcHJlYWxsb2NhdGluZyB2YWx1ZXMgYXJyYXkgYXQgbWF4IHNpemVcclxuICogLSBUT0RPOiBBZGQgZmFzdCBpbml0aWFsaXphdGlvbiB3aGVuIGEgc29ydGVkIGFycmF5IGlzIHByb3ZpZGVkIHRvIGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEZvciBtb3JlIGRvY3VtZW50YXRpb24gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9xd2VydGllL2J0cmVlLXR5cGVzY3JpcHRcclxuICpcclxuICogQXJlIHlvdSBhIEMjIGRldmVsb3Blcj8gWW91IG1pZ2h0IGxpa2UgdGhlIHNpbWlsYXIgZGF0YSBzdHJ1Y3R1cmVzIEkgbWFkZSBmb3IgQyM6XHJcbiAqIEJEaWN0aW9uYXJ5LCBCTGlzdCwgZXRjLiBTZWUgaHR0cDovL2NvcmUubG95Yy5uZXQvY29sbGVjdGlvbnMvXHJcbiAqXHJcbiAqIEBhdXRob3IgRGF2aWQgUGllcGdyYXNzXHJcbiAqL1xyXG52YXIgQlRyZWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGFuIGVtcHR5IEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gY29tcGFyZSBDdXN0b20gZnVuY3Rpb24gdG8gY29tcGFyZSBwYWlycyBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZS5cclxuICAgICAqICAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdENvbXBhcmF0b3Igd2lsbCBiZSB1c2VkIHdoaWNoIGlzIHZhbGlkIGFzIGxvbmcgYXMgSyBleHRlbmRzIERlZmF1bHRDb21wYXJhYmxlLlxyXG4gICAgICogQHBhcmFtIGVudHJpZXMgQSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGluaXRpYWxpemUgdGhlIHRyZWVcclxuICAgICAqIEBwYXJhbSBtYXhOb2RlU2l6ZSBCcmFuY2hpbmcgZmFjdG9yIChtYXhpbXVtIGl0ZW1zIG9yIGNoaWxkcmVuIHBlciBub2RlKVxyXG4gICAgICogICBNdXN0IGJlIGluIHJhbmdlIDQuLjI1Ni4gSWYgdW5kZWZpbmVkIG9yIDw0IHRoZW4gZGVmYXVsdCBpcyB1c2VkOyBpZiA+MjU2IHRoZW4gMjU2LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCVHJlZShlbnRyaWVzLCBjb21wYXJlLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QgPSBFbXB0eUxlYWY7XHJcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fbWF4Tm9kZVNpemUgPSBtYXhOb2RlU2l6ZSA+PSA0ID8gTWF0aC5taW4obWF4Tm9kZVNpemUsIDI1NikgOiAzMjtcclxuICAgICAgICB0aGlzLl9jb21wYXJlID0gY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyYXRvcjtcclxuICAgICAgICBpZiAoZW50cmllcylcclxuICAgICAgICAgICAgdGhpcy5zZXRQYWlycyhlbnRyaWVzKTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBFUzYgTWFwPEssVj4gbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSB0cmVlLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2l6ZTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xyXG4gICAgICAgIC8qKiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSB0cmVlLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2l6ZTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJpc0VtcHR5XCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmZiB0aGUgdHJlZSBjb250YWlucyBubyBrZXktdmFsdWUgcGFpcnMuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplID09PSAwOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogUmVsZWFzZXMgdGhlIHRyZWUgc28gdGhhdCBpdHMgc2l6ZSBpcyAwLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QgPSBFbXB0eUxlYWY7XHJcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJ1bnMgYSBmdW5jdGlvbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciwgaW4gb3JkZXIgZnJvbSBzbWFsbGVzdCB0b1xyXG4gICAgICogIGxhcmdlc3Qga2V5LiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEVTNiBNYXAsIHRoZSBhcmd1bWVudCBvcmRlciB0b1xyXG4gICAgICogIHRoZSBjYWxsYmFjayBpcyBiYWNrd2FyZHM6IHZhbHVlIGZpcnN0LCB0aGVuIGtleS4gQ2FsbCBmb3JFYWNoUGFpclxyXG4gICAgICogIGluc3RlYWQgdG8gcmVjZWl2ZSB0aGUga2V5IGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAqIEBwYXJhbSB0aGlzQXJnIElmIHByb3ZpZGVkLCB0aGlzIHBhcmFtZXRlciBpcyBhc3NpZ25lZCBhcyB0aGUgYHRoaXNgXHJcbiAgICAgKiAgICAgICAgdmFsdWUgZm9yIGVhY2ggY2FsbGJhY2suXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IHdlcmUgc2VudCB0byB0aGUgY2FsbGJhY2ssXHJcbiAgICAgKiAgICAgICAgb3IgdGhlIFIgdmFsdWUgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkIHticmVhazpSfS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpc0FyZyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaFBhaXIoZnVuY3Rpb24gKGssIHYpIHsgcmV0dXJuIGNhbGxiYWNrKHYsIGssIF90aGlzKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJ1bnMgYSBmdW5jdGlvbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciwgaW4gb3JkZXIgZnJvbSBzbWFsbGVzdCB0b1xyXG4gICAgICogIGxhcmdlc3Qga2V5LiBUaGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un0gKHdoZXJlIFIgaXMgYW55IHZhbHVlXHJcbiAgICAgKiAgZXhjZXB0IHVuZGVmaW5lZCkgdG8gc3RvcCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIFIgZnJvbSBmb3JFYWNoUGFpci5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiAgICAgICAgVGhlIHJlYXNvbiB0aGF0IHlvdSBtdXN0IHJldHVybiB7YnJlYWs6Un0gaW5zdGVhZCBvZiBzaW1wbHkgUlxyXG4gICAgICogICAgICAgIGl0c2VsZiBpcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBlZGl0UmFuZ2UoKSwgd2hpY2ggYWxsb3dzXHJcbiAgICAgKiAgICAgICAgbXVsdGlwbGUgYWN0aW9ucywgbm90IGp1c3QgYnJlYWtpbmcuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHRoaXJkIGFyZ3VtZW50IG9mXHJcbiAgICAgKiAgICAgICAgYG9uRm91bmRgIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhlIGNvdW50ZXIgaW5jcmVhc2VzXHJcbiAgICAgKiAgICAgICAgYnkgb25lIGVhY2ggdGltZSBgb25Gb3VuZGAgaXMgY2FsbGVkLiBEZWZhdWx0IHZhbHVlOiAwXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhaXJzIHNlbnQgdG8gdGhlIGNhbGxiYWNrIChwbHVzIGluaXRpYWxDb3VudGVyLFxyXG4gICAgICogICAgICAgIGlmIHlvdSBwcm92aWRlZCBvbmUpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9IHRoZW5cclxuICAgICAqICAgICAgICB0aGUgUiB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2hQYWlyID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciBsb3cgPSB0aGlzLm1pbktleSgpLCBoaWdoID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShsb3csIGhpZ2gsIHRydWUsIGNhbGxiYWNrLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHBhaXIgaW4gdGhlIHRyZWUgYW5kIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBrZXkgd2FzIG5vdCBmb3VuZC5cclxuICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSwgb3IgZGVmYXVsdFZhbHVlIGlmIHRoZSBrZXkgd2FzIG5vdCBmb3VuZC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obG9nIHNpemUpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXQoa2V5LCBkZWZhdWx0VmFsdWUsIHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBvciBvdmVyd3JpdGVzIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHNvcnQgb3JkZXIgb2ZcclxuICAgICAqICAgICAgICBkYXRhIGluIHRoZSB0cmVlLlxyXG4gICAgICogQHBhcmFtIHZhbHVlIGRhdGEgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGtleSAob3B0aW9uYWwpXHJcbiAgICAgKiBAcGFyYW0gb3ZlcndyaXRlIFdoZXRoZXIgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGtleS12YWx1ZSBwYWlyXHJcbiAgICAgKiAgICAgICAgKGRlZmF1bHQ6IHRydWUpLiBJZiB0aGlzIGlzIGZhbHNlIGFuZCB0aGVyZSBpcyBhbiBleGlzdGluZ1xyXG4gICAgICogICAgICAgIGtleS12YWx1ZSBwYWlyIHRoZW4gdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5LXZhbHVlIHBhaXIgd2FzIGFkZGVkLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqIE5vdGU6IHdoZW4gb3ZlcndyaXRpbmcgYSBwcmV2aW91cyBlbnRyeSwgdGhlIGtleSBpcyB1cGRhdGVkXHJcbiAgICAgKiBhcyB3ZWxsIGFzIHRoZSB2YWx1ZS4gVGhpcyBoYXMgbm8gZWZmZWN0IHVubGVzcyB0aGUgbmV3IGtleVxyXG4gICAgICogaGFzIGRhdGEgdGhhdCBkb2VzIG5vdCBhZmZlY3QgaXRzIHNvcnQgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3QuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSB0aGlzLl9yb290LmNsb25lKCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3Jvb3Quc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSB8fCByZXN1bHQgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIC8vIFJvb3Qgbm9kZSBoYXMgc3BsaXQsIHNvIGNyZWF0ZSBhIG5ldyByb290IG5vZGUuXHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IG5ldyBCTm9kZUludGVybmFsKFt0aGlzLl9yb290LCByZXN1bHRdKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgQisgdHJlZSwgZmFsc2UgaWYgbm90LlxyXG4gICAgICogVXNlIGdldCgpIGZvciBiZXN0IHBlcmZvcm1hbmNlOyB1c2UgaGFzKCkgaWYgeW91IG5lZWQgdG9cclxuICAgICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gXCJ1bmRlZmluZWQgdmFsdWVcIiBhbmQgXCJrZXkgbm90IHByZXNlbnRcIi5cclxuICAgICAqIEBwYXJhbSBrZXkgS2V5IHRvIGRldGVjdFxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShrZXksIGtleSwgdHJ1ZSwgdW5kZWZpbmVkKSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBzaW5nbGUga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgS2V5IHRvIGZpbmRcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBwYWlyIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UmFuZ2Uoa2V5LCBrZXksIHRydWUsIERlbGV0ZVJhbmdlKSAhPT0gMDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LnNldChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHx8IG92ZXJ3cml0ZSA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS12YWx1ZSBwYWlycyBzZXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aFBhaXJzID0gZnVuY3Rpb24gKHBhaXJzLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LnNldFBhaXJzKHBhaXJzLCBvdmVyd3JpdGUpICE9PSAwIHx8IG92ZXJ3cml0ZSA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcHJlc2VudC5cclxuICAgICAqICBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBhZGQuIElmIGEga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZSxcclxuICAgICAqICAgICAgICAgbmVpdGhlciB0aGUgZXhpc3Rpbmcga2V5IG5vciB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbW9kaWZpZWQuXHJcbiAgICAgKiAgQHBhcmFtIHJldHVyblRoaXNJZlVuY2hhbmdlZCBpZiB0cnVlLCByZXR1cm5zIHRoaXMgaWYgYWxsIGtleXMgYWxyZWFkeVxyXG4gICAgICogIGV4aXN0ZWQuIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIGFsbFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byBleGlzdGluZyBrZXlzIGFyZSBjbG9uZWQgZXZlbiBpZiB0aGUgY29sbGVjdGlvbiBpc1xyXG4gICAgICogIHVsdGltYXRlbHkgdW5jaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoS2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCksIGNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSBudS5zZXQoa2V5c1tpXSwgdW5kZWZpbmVkLCBmYWxzZSkgfHwgY2hhbmdlZDtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkICYmICFjaGFuZ2VkID8gdGhpcyA6IG51O1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IHJlbW92ZWQuXHJcbiAgICAgKiBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiB0aGUga2V5IGRpZG4ndCBleGlzdC5cclxuICAgICAqICBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLCBub2RlKHMpIGxlYWRpbmdcclxuICAgICAqICB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZCBldmVuIHdoZW4gdGhlIGtleVxyXG4gICAgICogIHR1cm5zIG91dCBub3QgdG8gZXhpc3QgYW5kIHRoZSBjb2xsZWN0aW9uIGlzIHVuY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhvdXQgPSBmdW5jdGlvbiAoa2V5LCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXRob3V0UmFuZ2Uoa2V5LCBrZXksIHRydWUsIHJldHVyblRoaXNJZlVuY2hhbmdlZCk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXlzIHJlbW92ZWQuXHJcbiAgICAgKiBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBub25lIG9mIHRoZSBrZXlzXHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcyxcclxuICAgICAqICBub2RlKHMpIGxlYWRpbmcgdG8gd2hlcmUgdGhlIGtleSB3b3VsZCBoYXZlIGJlZW4gc3RvcmVkIGFyZSBjbG9uZWRcclxuICAgICAqICBldmVuIHdoZW4gdGhlIGtleSB0dXJucyBvdXQgbm90IHRvIGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dEtleXMgPSBmdW5jdGlvbiAoa2V5cywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIHJldHVybiBudS5kZWxldGVLZXlzKGtleXMpIHx8ICFyZXR1cm5UaGlzSWZVbmNoYW5nZWQgPyBudSA6IHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCByYW5nZSBvZiBrZXlzIHJlbW92ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dFJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICBpZiAobnUuZGVsZXRlUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCkgPT09IDAgJiYgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICByZXR1cm4gbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggcGFpcnMgcmVtb3ZlZCB3aGVuZXZlciB0aGUgY2FsbGJhY2tcclxuICAgICAqICBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBgd2hlcmUoKWAgaXMgYSBzeW5vbnltIGZvciB0aGlzIG1ldGhvZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuZ3JlZWR5Q2xvbmUoKTtcclxuICAgICAgICB2YXIgZGVsO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayhrLCB2LCBpKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZWwgPSBEZWxldGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFkZWwgJiYgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICByZXR1cm4gbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggYWxsIHZhbHVlcyBhbHRlcmVkIGJ5IGEgY2FsbGJhY2sgZnVuY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWFwVmFsdWVzID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIHRtcCA9IHt9O1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuZ3JlZWR5Q2xvbmUoKTtcclxuICAgICAgICBudS5lZGl0QWxsKGZ1bmN0aW9uIChrLCB2LCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXAudmFsdWUgPSBjYWxsYmFjayh2LCBrLCBpKSwgdG1wO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICBCVHJlZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcclxuICAgICAgICB2YXIgaSA9IDAsIHAgPSBpbml0aWFsVmFsdWU7XHJcbiAgICAgICAgdmFyIGl0ID0gdGhpcy5lbnRyaWVzKHRoaXMubWluS2V5KCksIFJldXNlZEFycmF5KSwgbmV4dDtcclxuICAgICAgICB3aGlsZSAoIShuZXh0ID0gaXQubmV4dCgpKS5kb25lKVxyXG4gICAgICAgICAgICBwID0gY2FsbGJhY2socCwgbmV4dC52YWx1ZSwgaSsrLCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSXRlcmF0b3IgbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgcHJvdmlkZXMgaXRlbXMgaW4gb3JkZXIgKGFzY2VuZGluZyBvcmRlciBpZlxyXG4gICAgICogIHRoZSBjb2xsZWN0aW9uJ3MgY29tcGFyYXRvciB1c2VzIGFzY2VuZGluZyBvcmRlciwgYXMgaXMgdGhlIGRlZmF1bHQuKVxyXG4gICAgICogIEBwYXJhbSBsb3dlc3RLZXkgRmlyc3Qga2V5IHRvIGJlIGl0ZXJhdGVkLCBvciB1bmRlZmluZWQgdG8gc3RhcnQgYXRcclxuICAgICAqICAgICAgICAgbWluS2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGhpZ2hlciBrZXkgKGFjY29yZGluZyB0byB0aGUgY29tcGFyYXRvcikuXHJcbiAgICAgKiAgQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWVcclxuICAgICAqICAgICAgICAgcGFpcnMsIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAobG93ZXN0S2V5LCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpbmZvID0gdGhpcy5maW5kUGF0aChsb3dlc3RLZXkpO1xyXG4gICAgICAgIGlmIChpbmZvID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigpO1xyXG4gICAgICAgIHZhciBub2RlcXVldWUgPSBpbmZvLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gaW5mby5ub2RlaW5kZXgsIGxlYWYgPSBpbmZvLmxlYWY7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgIHZhciBpID0gKGxvd2VzdEtleSA9PT0gdW5kZWZpbmVkID8gLTEgOiBsZWFmLmluZGV4T2YobG93ZXN0S2V5LCAwLCB0aGlzLl9jb21wYXJlKSAtIDEpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGp1bXA6IGZvciAoOzspIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPCBsZWFmLmtleXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBbbGVhZi5rZXlzW2ldLCBsZWFmLnZhbHVlc1tpXV0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPCBsZWFmLmtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK25vZGVpbmRleFtsZXZlbF0gPCBub2RlcXVldWVbbGV2ZWxdLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgcHJvdmlkZXMgaXRlbXMgaW4gcmV2ZXJzZWQgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGhpZ2hlc3RLZXkgS2V5IGF0IHdoaWNoIHRvIHN0YXJ0IGl0ZXJhdGluZywgb3IgdW5kZWZpbmVkIHRvXHJcbiAgICAgKiAgICAgICAgIHN0YXJ0IGF0IG1heEtleSgpLiBJZiB0aGUgc3BlY2lmaWVkIGtleSBkb2Vzbid0IGV4aXN0IHRoZW4gaXRlcmF0aW9uXHJcbiAgICAgKiAgICAgICAgIHN0YXJ0cyBhdCB0aGUgbmV4dCBsb3dlciBrZXkgKGFjY29yZGluZyB0byB0aGUgY29tcGFyYXRvcikuXHJcbiAgICAgKiAgQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWVcclxuICAgICAqICAgICAgICAgcGFpcnMsIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqICBAcGFyYW0gc2tpcEhpZ2hlc3QgSWZmIHRoaXMgZmxhZyBpcyB0cnVlIGFuZCB0aGUgaGlnaGVzdEtleSBleGlzdHMgaW4gdGhlXHJcbiAgICAgKiAgICAgICAgIGNvbGxlY3Rpb24sIHRoZSBwYWlyIG1hdGNoaW5nIGhpZ2hlc3RLZXkgaXMgc2tpcHBlZCwgbm90IGl0ZXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllc1JldmVyc2VkID0gZnVuY3Rpb24gKGhpZ2hlc3RLZXksIHJldXNlZEFycmF5LCBza2lwSGlnaGVzdCkge1xyXG4gICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaGlnaGVzdEtleSA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIHNraXBIaWdoZXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAoaGlnaGVzdEtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7IC8vIGNvbGxlY3Rpb24gaXMgZW1wdHlcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF9hID0gdGhpcy5maW5kUGF0aChoaWdoZXN0S2V5KSB8fCB0aGlzLmZpbmRQYXRoKHRoaXMubWF4S2V5KCkpLCBub2RlcXVldWUgPSBfYS5ub2RlcXVldWUsIG5vZGVpbmRleCA9IF9hLm5vZGVpbmRleCwgbGVhZiA9IF9hLmxlYWY7XHJcbiAgICAgICAgY2hlY2soIW5vZGVxdWV1ZVswXSB8fCBsZWFmID09PSBub2RlcXVldWVbMF1bbm9kZWluZGV4WzBdXSwgXCJ3YXQhXCIpO1xyXG4gICAgICAgIHZhciBpID0gbGVhZi5pbmRleE9mKGhpZ2hlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpO1xyXG4gICAgICAgIGlmICghc2tpcEhpZ2hlc3QgJiYgaSA8IGxlYWYua2V5cy5sZW5ndGggJiYgdGhpcy5fY29tcGFyZShsZWFmLmtleXNbaV0sIGhpZ2hlc3RLZXkpIDw9IDApXHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBbbGVhZi5rZXlzW2ldLCBsZWFmLnZhbHVlc1tpXV0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLWkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkQXJyYXlbMF0gPSBsZWFmLmtleXNbaV0sIHJldXNlZEFycmF5WzFdID0gbGVhZi52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldXNlZEFycmF5IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBsZWFmIG5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbGV2ZWwgPSAtMTs7KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytsZXZlbCA+PSBub2RlcXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGp1bXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1ub2RlaW5kZXhbbGV2ZWxdID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGxldmVsID4gMDsgbGV2ZWwtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2xldmVsIC0gMV0gPSBub2RlcXVldWVbbGV2ZWxdW25vZGVpbmRleFtsZXZlbF1dLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZWluZGV4W2xldmVsIC0gMV0gPSBub2RlcXVldWVbbGV2ZWwgLSAxXS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWYgPSBub2RlcXVldWVbMF1bbm9kZWluZGV4WzBdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGxlYWYua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qIFVzZWQgYnkgZW50cmllcygpIGFuZCBlbnRyaWVzUmV2ZXJzZWQoKSB0byBwcmVwYXJlIHRvIHN0YXJ0IGl0ZXJhdGluZy5cclxuICAgICAqIEl0IGRldmVsb3BzIGEgXCJub2RlIHF1ZXVlXCIgZm9yIGVhY2ggbm9uLWxlYWYgbGV2ZWwgb2YgdGhlIHRyZWUuXHJcbiAgICAgKiBMZXZlbHMgYXJlIG51bWJlcmVkIFwiYm90dG9tLXVwXCIgc28gdGhhdCBsZXZlbCAwIGlzIGEgbGlzdCBvZiBsZWFmXHJcbiAgICAgKiBub2RlcyBmcm9tIGEgbG93LWxldmVsIG5vbi1sZWFmIG5vZGUuIFRoZSBxdWV1ZSBhdCBhIGdpdmVuIGxldmVsIExcclxuICAgICAqIGNvbnNpc3RzIG9mIG5vZGVxdWV1ZVtMXSB3aGljaCBpcyB0aGUgY2hpbGRyZW4gb2YgYSBCTm9kZUludGVybmFsLFxyXG4gICAgICogYW5kIG5vZGVpbmRleFtMXSwgdGhlIGN1cnJlbnQgaW5kZXggd2l0aGluIHRoYXQgY2hpbGQgbGlzdCwgc3VjaFxyXG4gICAgICogc3VjaCB0aGF0IG5vZGVxdWV1ZVtMLTFdID09PSBub2RlcXVldWVbTF1bbm9kZWluZGV4W0xdXS5jaGlsZHJlbi5cclxuICAgICAqIChIb3dldmVyIGluc2lkZSB0aGlzIGZ1bmN0aW9uIHRoZSBvcmRlciBpcyByZXZlcnNlZC4pXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5maW5kUGF0aCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgbmV4dG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHZhciBub2RlcXVldWUsIG5vZGVpbmRleDtcclxuICAgICAgICBpZiAobmV4dG5vZGUuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IEVtcHR5QXJyYXksIG5vZGVpbmRleCA9IEVtcHR5QXJyYXk7IC8vIGF2b2lkIGFsbG9jYXRpb25zXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBub2RlcXVldWUgPSBbXSwgbm9kZWluZGV4ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyAhbmV4dG5vZGUuaXNMZWFmOyBkKyspIHtcclxuICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtkXSA9IG5leHRub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgbm9kZWluZGV4W2RdID0ga2V5ID09PSB1bmRlZmluZWQgPyAwIDogbmV4dG5vZGUuaW5kZXhPZihrZXksIDAsIHRoaXMuX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVpbmRleFtkXSA+PSBub2RlcXVldWVbZF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZmlyc3Qga2V5ID4gbWF4S2V5KClcclxuICAgICAgICAgICAgICAgIG5leHRub2RlID0gbm9kZXF1ZXVlW2RdW25vZGVpbmRleFtkXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZXF1ZXVlLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgbm9kZWluZGV4LnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZXF1ZXVlOiBub2RlcXVldWUsIG5vZGVpbmRleDogbm9kZWluZGV4LCBsZWFmOiBuZXh0bm9kZSB9O1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYHRoaXNgIGFuZCBgb3RoZXJgLlxyXG4gICAgICogRm9yIGVmZmljaWVuY3ksIHRoZSBkaWZmIGlzIHJldHVybmVkIHZpYSBpbnZvY2F0aW9ucyBvZiBzdXBwbGllZCBoYW5kbGVycy5cclxuICAgICAqIFRoZSBjb21wdXRhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIGluIHdoaWNoIHRoZSB0d28gdHJlZXMgaGF2ZSBsYXJnZSBhbW91bnRzXHJcbiAgICAgKiBvZiBzaGFyZWQgZGF0YSAob2J0YWluZWQgYnkgY2FsbGluZyB0aGUgYGNsb25lYCBvciBgd2l0aGAgQVBJcykgYW5kIHdpbGwgYXZvaWRcclxuICAgICAqIGFueSBpdGVyYXRpb24gb2Ygc2hhcmVkIHN0YXRlLlxyXG4gICAgICogVGhlIGhhbmRsZXJzIGNhbiBjYXVzZSBjb21wdXRhdGlvbiB0byBlYXJseSBleGl0IGJ5IHJldHVybmluZyB7YnJlYWs6IFJ9LlxyXG4gICAgICogTmVpdGhlciBvZiB0aGUgY29sbGVjdGlvbnMgc2hvdWxkIGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uIHByb2Nlc3MgKGluIHlvdXIgY2FsbGJhY2tzKSwgYXMgdGhpcyBtZXRob2QgYXNzdW1lcyB0aGV5IHdpbGwgbm90IGJlIG11dGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIHRyZWUgdG8gY29tcHV0ZSBhIGRpZmYgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSBvbmx5VGhpcyBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyBvbmx5IHByZXNlbnQgaW4gYHRoaXNgLlxyXG4gICAgICogQHBhcmFtIG9ubHlPdGhlciBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyBvbmx5IHByZXNlbnQgaW4gYG90aGVyYC5cclxuICAgICAqIEBwYXJhbSBkaWZmZXJlbnQgQ2FsbGJhY2sgaW52b2tlZCBmb3IgYWxsIGtleXMgd2l0aCBkaWZmZXJpbmcgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGlmZkFnYWluc3QgPSBmdW5jdGlvbiAob3RoZXIsIG9ubHlUaGlzLCBvbmx5T3RoZXIsIGRpZmZlcmVudCkge1xyXG4gICAgICAgIGlmIChvdGhlci5fY29tcGFyZSAhPT0gdGhpcy5fY29tcGFyZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlIGNvbXBhcmF0b3JzIGFyZSBub3QgdGhlIHNhbWUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5IHx8IG90aGVyLmlzRW1wdHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSAmJiBvdGhlci5pc0VtcHR5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgLy8gSWYgb25lIHRyZWUgaXMgZW1wdHksIGV2ZXJ5dGhpbmcgd2lsbCBiZSBhbiBvbmx5VGhpcy9vbmx5T3RoZXIuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb25seU90aGVyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBCVHJlZS5zdGVwVG9FbmQoQlRyZWUubWFrZURpZmZDdXJzb3Iob3RoZXIpLCBvbmx5T3RoZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb25seVRoaXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcih0aGlzKSwgb25seVRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDdXJzb3ItYmFzZWQgZGlmZiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czpcclxuICAgICAgICAvLyAtIFVudGlsIG5laXRoZXIgY3Vyc29yIGhhcyBuYXZpZ2F0ZWQgdG8gdGhlIGVuZCBvZiB0aGUgdHJlZSwgZG8gdGhlIGZvbGxvd2luZzpcclxuICAgICAgICAvLyAgLSBJZiB0aGUgYHRoaXNgIGN1cnNvciBpcyBcImJlaGluZFwiIHRoZSBgb3RoZXJgIGN1cnNvciAoc3RyaWN0bHkgPCwgdmlhIGNvbXBhcmUpLCBhZHZhbmNlIGl0LlxyXG4gICAgICAgIC8vICAtIE90aGVyd2lzZSwgYWR2YW5jZSB0aGUgYG90aGVyYCBjdXJzb3IuXHJcbiAgICAgICAgLy8gIC0gQW55IHRpbWUgYSBjdXJzb3IgaXMgc3RlcHBlZCwgcGVyZm9ybSB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAgIC0gSWYgZWl0aGVyIGN1cnNvciBwb2ludHMgdG8gYSBrZXkvdmFsdWUgcGFpcjpcclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA9PT0gb3RoZXJDdXJzb3IgYW5kIHRoZSB2YWx1ZXMgZGlmZmVyLCBpdCBpcyBhIERpZmZlcmVudC5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA+IG90aGVyQ3Vyc29yIGFuZCBvdGhlckN1cnNvciBpcyBhdCBhIGtleS92YWx1ZSBwYWlyLCBpdCBpcyBhbiBPbmx5T3RoZXIuXHJcbiAgICAgICAgLy8gICAgICAtIElmIHRoaXNDdXJzb3IgPCBvdGhlckN1cnNvciBhbmQgdGhpc0N1cnNvciBpcyBhdCBhIGtleS92YWx1ZSBwYWlyLCBpdCBpcyBhbiBPbmx5VGhpcyBhcyBsb25nIGFzIHRoZSBtb3N0IHJlY2VudCBcclxuICAgICAgICAvLyAgICAgICAgY3Vyc29yIHN0ZXAgd2FzICpub3QqIG90aGVyQ3Vyc29yIGFkdmFuY2luZyBmcm9tIGEgdGllLiBUaGUgZXh0cmEgY29uZGl0aW9uIGF2b2lkcyBlcnJvbmVvdXMgT25seU90aGVyIGNhbGxzIFxyXG4gICAgICAgIC8vICAgICAgICB0aGF0IHdvdWxkIG9jY3VyIGR1ZSB0byBvdGhlckN1cnNvciBiZWluZyB0aGUgXCJsZWFkZXJcIi5cclxuICAgICAgICAvLyAgICAtIE90aGVyd2lzZSwgaWYgYm90aCBjdXJzb3JzIHBvaW50IHRvIG5vZGVzLCBjb21wYXJlIHRoZW0uIElmIHRoZXkgYXJlIGVxdWFsIGJ5IHJlZmVyZW5jZSAoc2hhcmVkKSwgc2tpcFxyXG4gICAgICAgIC8vICAgICAgYm90aCBjdXJzb3JzIHRvIHRoZSBuZXh0IG5vZGUgaW4gdGhlIHdhbGsuXHJcbiAgICAgICAgLy8gLSBPbmNlIG9uZSBjdXJzb3IgaGFzIGZpbmlzaGVkIHN0ZXBwaW5nLCBhbnkgcmVtYWluaW5nIHN0ZXBzIChpZiBhbnkpIGFyZSB0YWtlbiBhbmQga2V5L3ZhbHVlIHBhaXJzIGFyZSBsb2dnZWRcclxuICAgICAgICAvLyAgIGFzIE9ubHlPdGhlciAoaWYgb3RoZXJDdXJzb3IgaXMgc3RlcHBpbmcpIG9yIE9ubHlUaGlzIChpZiB0aGlzQ3Vyc29yIGlzIHN0ZXBwaW5nKS5cclxuICAgICAgICAvLyBUaGlzIGFsZ29yaXRobSBnaXZlcyB0aGUgY3JpdGljYWwgZ3VhcmFudGVlIHRoYXQgYWxsIGxvY2F0aW9ucyAoYm90aCBub2RlcyBhbmQga2V5L3ZhbHVlIHBhaXJzKSBpbiBib3RoIHRyZWVzIHRoYXQgXHJcbiAgICAgICAgLy8gYXJlIGlkZW50aWNhbCBieSB2YWx1ZSAoYW5kIHBvc3NpYmx5IGJ5IHJlZmVyZW5jZSkgd2lsbCBiZSB2aXNpdGVkICphdCB0aGUgc2FtZSB0aW1lKiBieSB0aGUgY3Vyc29ycy5cclxuICAgICAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGVtaXR0aW5nIGluY29ycmVjdCBkaWZmcywgYXMgd2VsbCBhcyBhbGxvd2luZyBmb3Igc2tpcHBpbmcgc2hhcmVkIG5vZGVzLlxyXG4gICAgICAgIHZhciBfY29tcGFyZSA9IHRoaXMuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIHRoaXNDdXJzb3IgPSBCVHJlZS5tYWtlRGlmZkN1cnNvcih0aGlzKTtcclxuICAgICAgICB2YXIgb3RoZXJDdXJzb3IgPSBCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlcik7XHJcbiAgICAgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgaG93IHRoaXNTdGVwcGVkTGFzdCBpcyBpbml0aWFsaXplZC5cclxuICAgICAgICAvLyBTdGVwIG9yZGVyIGlzIG9ubHkgdXNlZCB3aGVuIGVpdGhlciBjdXJzb3IgaXMgYXQgYSBsZWFmLCBhbmQgY3Vyc29ycyBhbHdheXMgc3RhcnQgYXQgYSBub2RlLlxyXG4gICAgICAgIHZhciB0aGlzU3VjY2VzcyA9IHRydWUsIG90aGVyU3VjY2VzcyA9IHRydWUsIHByZXZDdXJzb3JPcmRlciA9IEJUcmVlLmNvbXBhcmUodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlKTtcclxuICAgICAgICB3aGlsZSAodGhpc1N1Y2Nlc3MgJiYgb3RoZXJTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJzb3JPcmRlciA9IEJUcmVlLmNvbXBhcmUodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlKTtcclxuICAgICAgICAgICAgdmFyIHRoaXNMZWFmID0gdGhpc0N1cnNvci5sZWFmLCB0aGlzSW50ZXJuYWxTcGluZSA9IHRoaXNDdXJzb3IuaW50ZXJuYWxTcGluZSwgdGhpc0xldmVsSW5kaWNlcyA9IHRoaXNDdXJzb3IubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgb3RoZXJMZWFmID0gb3RoZXJDdXJzb3IubGVhZiwgb3RoZXJJbnRlcm5hbFNwaW5lID0gb3RoZXJDdXJzb3IuaW50ZXJuYWxTcGluZSwgb3RoZXJMZXZlbEluZGljZXMgPSBvdGhlckN1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzTGVhZiB8fCBvdGhlckxlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJzb3JzIHdlcmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gbGFzdCBzdGVwLCB0aGVuIHRoZXJlIGlzIG5vIHdvcmsgdG8gYmUgZG9uZS5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNMZWFmICYmIG90aGVyTGVhZiAmJiBkaWZmZXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVxdWFsIGtleXMsIGNoZWNrIGZvciBtb2RpZmljYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9IHRoaXNMZWFmLnZhbHVlc1t0aGlzTGV2ZWxJbmRpY2VzW3RoaXNMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbE90aGVyID0gb3RoZXJMZWFmLnZhbHVlc1tvdGhlckxldmVsSW5kaWNlc1tvdGhlckxldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5pcyh2YWxUaGlzLCB2YWxPdGhlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZGlmZmVyZW50KHRoaXNDdXJzb3IuY3VycmVudEtleSwgdmFsVGhpcywgdmFsT3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnNvck9yZGVyID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3ZSBrbm93IHRoYXQgZWl0aGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxLiBvdGhlckN1cnNvciBzdGVwcGVkIGxhc3QgZnJvbSBhIHN0YXJ0aW5nIHBvc2l0aW9uIHRoYXQgdHJhaWxlZCB0aGlzQ3Vyc29yLCBhbmQgaXMgc3RpbGwgYmVoaW5kLCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAyLiB0aGlzQ3Vyc29yIHN0ZXBwZWQgbGFzdCBhbmQgbGVhcGZyb2dnZWQgb3RoZXJDdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIG9mIHRoZXNlIGNhc2VzIGlzIGFuIFwib25seSBvdGhlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckxlYWYgJiYgb25seU90aGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3RoZXJWYWwgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvbmx5T3RoZXIob3RoZXJDdXJzb3IuY3VycmVudEtleSwgb3RoZXJWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5icmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvbmx5VGhpcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgcHJldkN1cnNvck9yZGVyICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9IHRoaXNMZWFmLnZhbHVlc1t0aGlzTGV2ZWxJbmRpY2VzW3RoaXNMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlUaGlzKHRoaXNDdXJzb3IuY3VycmVudEtleSwgdmFsVGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzTGVhZiAmJiAhb3RoZXJMZWFmICYmIGN1cnNvck9yZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxhc3RPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVUaGlzID0gdGhpc0ludGVybmFsU3BpbmVbbGFzdFRoaXNdW3RoaXNMZXZlbEluZGljZXNbbGFzdFRoaXNdXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlT3RoZXIgPSBvdGhlckludGVybmFsU3BpbmVbbGFzdE90aGVyXVtvdGhlckxldmVsSW5kaWNlc1tsYXN0T3RoZXJdXTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlT3RoZXIgPT09IG5vZGVUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldkN1cnNvck9yZGVyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzU3VjY2VzcyA9IEJUcmVlLnN0ZXAodGhpc0N1cnNvciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkN1cnNvck9yZGVyID0gY3Vyc29yT3JkZXI7XHJcbiAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG90aGVyU3VjY2VzcyA9IEJUcmVlLnN0ZXAob3RoZXJDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzU3VjY2VzcyAmJiBvbmx5VGhpcylcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgaWYgKG90aGVyU3VjY2VzcyAmJiBvbmx5T3RoZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBCVHJlZS5maW5pc2hDdXJzb3JXYWxrKG90aGVyQ3Vyc29yLCB0aGlzQ3Vyc29yLCBfY29tcGFyZSwgb25seU90aGVyKTtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBkaWZmQWdhaW5zdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQlRyZWUuZmluaXNoQ3Vyc29yV2FsayA9IGZ1bmN0aW9uIChjdXJzb3IsIGN1cnNvckZpbmlzaGVkLCBjb21wYXJlS2V5cywgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgY29tcGFyZWQgPSBCVHJlZS5jb21wYXJlKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzKTtcclxuICAgICAgICBpZiAoY29tcGFyZWQgPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKCFCVHJlZS5zdGVwKGN1cnNvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb21wYXJlZCA8IDApIHtcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwiY3Vyc29yIHdhbGsgdGVybWluYXRlZCBlYXJseVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJUcmVlLnN0ZXBUb0VuZChjdXJzb3IsIGNhbGxiYWNrKTtcclxuICAgIH07XHJcbiAgICBCVHJlZS5zdGVwVG9FbmQgPSBmdW5jdGlvbiAoY3Vyc29yLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjYW5TdGVwID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAoY2FuU3RlcCkge1xyXG4gICAgICAgICAgICB2YXIgbGVhZiA9IGN1cnNvci5sZWFmLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBjdXJyZW50S2V5ID0gY3Vyc29yLmN1cnJlbnRLZXk7XHJcbiAgICAgICAgICAgIGlmIChsZWFmKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsZWFmLnZhbHVlc1tsZXZlbEluZGljZXNbbGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjayhjdXJyZW50S2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhblN0ZXAgPSBCVHJlZS5zdGVwKGN1cnNvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQlRyZWUubWFrZURpZmZDdXJzb3IgPSBmdW5jdGlvbiAodHJlZSkge1xyXG4gICAgICAgIHZhciBfcm9vdCA9IHRyZWUuX3Jvb3QsIGhlaWdodCA9IHRyZWUuaGVpZ2h0O1xyXG4gICAgICAgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0LCBpbnRlcm5hbFNwaW5lOiBbW19yb290XV0sIGxldmVsSW5kaWNlczogWzBdLCBsZWFmOiB1bmRlZmluZWQsIGN1cnJlbnRLZXk6IF9yb290Lm1heEtleSgpIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIHdhbGsgb2YgaXRzIHRyZWUuXHJcbiAgICAgKiBDdXJzb3JzIGFyZSB3YWxrZWQgYmFja3dhcmRzIGluIHNvcnQgb3JkZXIsIGFzIHRoaXMgYWxsb3dzIHRoZW0gdG8gbGV2ZXJhZ2UgbWF4S2V5KCkgaW4gb3JkZXIgdG8gYmUgY29tcGFyZWQgaW4gTygxKS5cclxuICAgICAqIEBwYXJhbSBjdXJzb3IgVGhlIGN1cnNvciB0byBzdGVwXHJcbiAgICAgKiBAcGFyYW0gc3RlcFRvTm9kZSBJZiB0cnVlLCB0aGUgY3Vyc29yIHdpbGwgYmUgYWR2YW5jZWQgdG8gdGhlIG5leHQgbm9kZSAoc2tpcHBpbmcgdmFsdWVzKVxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RlcCB3YXMgY29tcGxldGVkIGFuZCBmYWxzZSBpZiB0aGUgc3RlcCB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgY3Vyc29yIHRvIG1vdmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnN0ZXAgPSBmdW5jdGlvbiAoY3Vyc29yLCBzdGVwVG9Ob2RlKSB7XHJcbiAgICAgICAgdmFyIGludGVybmFsU3BpbmUgPSBjdXJzb3IuaW50ZXJuYWxTcGluZSwgbGV2ZWxJbmRpY2VzID0gY3Vyc29yLmxldmVsSW5kaWNlcywgbGVhZiA9IGN1cnNvci5sZWFmO1xyXG4gICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxlYWYpIHtcclxuICAgICAgICAgICAgdmFyIGxldmVsc0xlbmd0aCA9IGxldmVsSW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIC8vIFN0ZXAgdG8gdGhlIG5leHQgbm9kZSBvbmx5IGlmOlxyXG4gICAgICAgICAgICAvLyAtIFdlIGFyZSBleHBsaWNpdGx5IGRpcmVjdGVkIHRvIHZpYSBzdGVwVG9Ob2RlLCBvclxyXG4gICAgICAgICAgICAvLyAtIFRoZXJlIGFyZSBubyBrZXkvdmFsdWUgcGFpcnMgbGVmdCB0byBzdGVwIHRvIGluIHRoaXMgbGVhZlxyXG4gICAgICAgICAgICBpZiAoc3RlcFRvTm9kZSA9PT0gdHJ1ZSB8fCBsZXZlbEluZGljZXNbbGV2ZWxzTGVuZ3RoIC0gMV0gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzcGluZUxlbmd0aCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgLy8gUm9vdCBpcyBsZWFmXHJcbiAgICAgICAgICAgICAgICBpZiAoc3BpbmVMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gV2FsayBiYWNrIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBuZXcgc3VidHJlZSB0byBkZXNjZW5kIGludG9cclxuICAgICAgICAgICAgICAgIHZhciBub2RlTGV2ZWxJbmRleCA9IHNwaW5lTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIHZhciBsZXZlbEluZGV4V2Fsa0JhY2sgPSBub2RlTGV2ZWxJbmRleDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsZXZlbEluZGV4V2Fsa0JhY2sgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGljZXNbbGV2ZWxJbmRleFdhbGtCYWNrXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kZXhXYWxrQmFjayA8IGxldmVsc0xlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBsZWFmIHN0YXRlIGZyb20gY3Vyc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IubGVhZiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsSW5kaWNlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3YWxrZWQgdXB3YXJkcyBwYXN0IGFueSBpbnRlcm5hbCBub2RlLCBzbGljZSB0aGVtIG91dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbm9kZUxldmVsSW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuaW50ZXJuYWxTcGluZSA9IGludGVybmFsU3BpbmUuc2xpY2UoMCwgbGV2ZWxJbmRleFdhbGtCYWNrICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV3IGludGVybmFsIG5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBpbnRlcm5hbFNwaW5lW2xldmVsSW5kZXhXYWxrQmFja11bLS1sZXZlbEluZGljZXNbbGV2ZWxJbmRleFdhbGtCYWNrXV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXZlbEluZGV4V2Fsa0JhY2stLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEN1cnNvciBpcyBpbiB0aGUgZmFyIGxlZnQgbGVhZiBvZiB0aGUgdHJlZSwgbm8gbW9yZSBub2RlcyB0byBlbnVtZXJhdGVcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV3IGxlYWYgdmFsdWVcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gLS1sZXZlbEluZGljZXNbbGV2ZWxzTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGxlYWYua2V5c1t2YWx1ZUluZGV4XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBDdXJzb3IgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWx1ZSBpbiBhIGxlYWYsIHNvIG1vdmUgZG93bndhcmRzXHJcbiAgICAgICAgICAgIHZhciBuZXh0TGV2ZWwgPSBpbnRlcm5hbFNwaW5lLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMZXZlbCA9IG5leHRMZXZlbCAtIDE7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gaW50ZXJuYWxTcGluZVtjdXJyZW50TGV2ZWxdW2xldmVsSW5kaWNlc1tjdXJyZW50TGV2ZWxdXTtcclxuICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbnRlcmluZyBpbnRvIGEgbGVhZi4gU2V0IHRoZSBjdXJzb3IgdG8gcG9pbnQgYXQgdGhlIGxhc3Qga2V5L3ZhbHVlIHBhaXIuXHJcbiAgICAgICAgICAgICAgICBjdXJzb3IubGVhZiA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVJbmRleCA9IGxldmVsSW5kaWNlc1tuZXh0TGV2ZWxdID0gbm9kZS52YWx1ZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbm9kZS5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsU3BpbmVbbmV4dExldmVsXSA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkSW5kZXggPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBjaGlsZEluZGV4O1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBjaGlsZHJlbltjaGlsZEluZGV4XS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgdHdvIGN1cnNvcnMuIFJldHVybnMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIGN1cnNvciBpcyBhaGVhZCBpbiBhIHdhbGsuXHJcbiAgICAgKiBOb3RlIHRoYXQgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnNvckEsIGN1cnNvckIsIGNvbXBhcmVLZXlzKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodEEgPSBjdXJzb3JBLmhlaWdodCwgY3VycmVudEtleUEgPSBjdXJzb3JBLmN1cnJlbnRLZXksIGxldmVsSW5kaWNlc0EgPSBjdXJzb3JBLmxldmVsSW5kaWNlcztcclxuICAgICAgICB2YXIgaGVpZ2h0QiA9IGN1cnNvckIuaGVpZ2h0LCBjdXJyZW50S2V5QiA9IGN1cnNvckIuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQiA9IGN1cnNvckIubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIC8vIFJldmVyc2UgdGhlIGNvbXBhcmlzb24gb3JkZXIsIGFzIGN1cnNvcnMgYXJlIGFkdmFuY2VkIGluIHJldmVyc2Ugc29ydGluZyBvcmRlclxyXG4gICAgICAgIHZhciBrZXlDb21wYXJpc29uID0gY29tcGFyZUtleXMoY3VycmVudEtleUIsIGN1cnJlbnRLZXlBKTtcclxuICAgICAgICBpZiAoa2V5Q29tcGFyaXNvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Q29tcGFyaXNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTm9ybWFsaXplIGRlcHRoIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgc2hvcnRlc3QgdHJlZS5cclxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjb25jdXJyZW50IGN1cnNvciB3YWxrcyBvZiB0cmVlcyBvZiBkaWZmZXJpbmcgaGVpZ2h0cyBjYW4gcmVsaWFibHkgbGFuZCBvbiBzaGFyZWQgbm9kZXMgYXQgdGhlIHNhbWUgdGltZS5cclxuICAgICAgICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIGEgY3Vyc29yIHRoYXQgaXMgb24gYW4gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMSB3aXRoIG1heEtleSBYIGlzIGNvbnNpZGVyZWQgXCJiZWhpbmRcIiBhIGN1cnNvciBvbiBhblxyXG4gICAgICAgIC8vIGludGVybmFsIG5vZGUgYXQgZGVwdGggRDIgd2l0aCBtYXhLZXkgWSwgd2hlbiBEMSA8IEQyLiBUaHVzLCBhbHdheXMgd2Fsa2luZyB0aGUgY3Vyc29yIHRoYXQgaXMgXCJiZWhpbmRcIiB3aWxsIGFsbG93IHRoZSBjdXJzb3JcclxuICAgICAgICAvLyBhdCBzaGFsbG93ZXIgZGVwdGggKGJ1dCBlcXVhbCBtYXhLZXkpIHRvIFwiY2F0Y2ggdXBcIiBhbmQgbGFuZCBvbiBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIGhlaWdodE1pbiA9IGhlaWdodEEgPCBoZWlnaHRCID8gaGVpZ2h0QSA6IGhlaWdodEI7XHJcbiAgICAgICAgdmFyIGRlcHRoQU5vcm1hbGl6ZWQgPSBsZXZlbEluZGljZXNBLmxlbmd0aCAtIChoZWlnaHRBIC0gaGVpZ2h0TWluKTtcclxuICAgICAgICB2YXIgZGVwdGhCTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0IubGVuZ3RoIC0gKGhlaWdodEIgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHJldHVybiBkZXB0aEFOb3JtYWxpemVkIC0gZGVwdGhCTm9ybWFsaXplZDtcclxuICAgIH07XHJcbiAgICAvLyBFbmQgb2YgaGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYSBuZXcgaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aGUga2V5cyBvZiBlYWNoIHBhaXIgaW4gYXNjZW5kaW5nIG9yZGVyLlxyXG4gICAgICogIEBwYXJhbSBmaXJzdEtleTogTWluaW11bSBrZXkgdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVswXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBuZXcgaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aGUgdmFsdWVzIG9mIGVhY2ggcGFpciBpbiBvcmRlciBieSBrZXkuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB3aG9zZSBhc3NvY2lhdGVkIHZhbHVlIGlzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKGZpcnN0S2V5KSB7XHJcbiAgICAgICAgdmFyIGl0ID0gdGhpcy5lbnRyaWVzKGZpcnN0S2V5LCBSZXVzZWRBcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSBpdC5uZXh0KCk7XHJcbiAgICAgICAgICAgIGlmIChuLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgbi52YWx1ZSA9IG4udmFsdWVbMV07XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwibWF4Tm9kZVNpemVcIiwge1xyXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLy8gQWRkaXRpb25hbCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4vdmFsdWVzIGJlZm9yZSBub2RlcyB3aWxsIHNwbGl0LiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4Tm9kZVNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIEdldHMgdGhlIGxvd2VzdCBrZXkgaW4gdGhlIHRyZWUuIENvbXBsZXhpdHk6IE8obG9nIHNpemUpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWluS2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5taW5LZXkoKTsgfTtcclxuICAgIC8qKiBHZXRzIHRoZSBoaWdoZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTygxKSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Jvb3QubWF4S2V5KCk7IH07XHJcbiAgICAvKiogUXVpY2tseSBjbG9uZXMgdGhlIHRyZWUgYnkgbWFya2luZyB0aGUgcm9vdCBub2RlIGFzIHNoYXJlZC5cclxuICAgICAqICBCb3RoIGNvcGllcyByZW1haW4gZWRpdGFibGUuIFdoZW4geW91IG1vZGlmeSBlaXRoZXIgY29weSwgYW55XHJcbiAgICAgKiAgbm9kZXMgdGhhdCBhcmUgc2hhcmVkIChvciBwb3RlbnRpYWxseSBzaGFyZWQpIGJldHdlZW4gdGhlIHR3b1xyXG4gICAgICogIGNvcGllcyBhcmUgY2xvbmVkIHNvIHRoYXQgdGhlIGNoYW5nZXMgZG8gbm90IGFmZmVjdCBvdGhlciBjb3BpZXMuXHJcbiAgICAgKiAgVGhpcyBpcyBrbm93biBhcyBjb3B5LW9uLXdyaXRlIGJlaGF2aW9yLCBvciBcImxhenkgY29weWluZ1wiLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCB0aGlzLl9jb21wYXJlLCB0aGlzLl9tYXhOb2RlU2l6ZSk7XHJcbiAgICAgICAgcmVzdWx0Ll9yb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICByZXN1bHQuX3NpemUgPSB0aGlzLl9zaXplO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIFBlcmZvcm1zIGEgZ3JlZWR5IGNsb25lLCBpbW1lZGlhdGVseSBkdXBsaWNhdGluZyBhbnkgbm9kZXMgdGhhdCBhcmVcclxuICAgICAqICBub3QgY3VycmVudGx5IG1hcmtlZCBhcyBzaGFyZWQsIGluIG9yZGVyIHRvIGF2b2lkIG1hcmtpbmcgYW55XHJcbiAgICAgKiAgYWRkaXRpb25hbCBub2RlcyBhcyBzaGFyZWQuXHJcbiAgICAgKiAgQHBhcmFtIGZvcmNlIENsb25lIGFsbCBub2RlcywgZXZlbiBzaGFyZWQgb25lcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdyZWVkeUNsb25lID0gZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290LmdyZWVkeUNsb25lKGZvcmNlKTtcclxuICAgICAgICByZXN1bHQuX3NpemUgPSB0aGlzLl9zaXplO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgZmlsbGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSB0cmVlLCBzb3J0ZWQgYnkga2V5ICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChtYXhMZW5ndGgpIHtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSB2b2lkIDApIHsgbWF4TGVuZ3RoID0gMHg3RkZGRkZGRjsgfVxyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbktleSgpLCBtYXggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2UobWluLCBtYXgsIHRydWUsIG1heExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuICAgIC8qKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBrZXlzLCBzb3J0ZWQgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5rZXlzQXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcclxuICAgICAgICB0aGlzLl9yb290LmZvclJhbmdlKHRoaXMubWluS2V5KCksIHRoaXMubWF4S2V5KCksIHRydWUsIGZhbHNlLCB0aGlzLCAwLCBmdW5jdGlvbiAoaywgdikgeyByZXN1bHRzLnB1c2goayk7IH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBHZXRzIGFuIGFycmF5IG9mIGFsbCB2YWx1ZXMsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaCh2KTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0cmVlJ3MgZGF0YSBiYXNlZCBvbiB0b0FycmF5KCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFN0b3JlcyBhIGtleS12YWx1ZSBwYWlyIG9ubHkgaWYgdGhlIGtleSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IGtleSB3YXMgYWRkZWRcclxuICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuc2V0SWZOb3RQcmVzZW50ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXQoa2V5LCB2YWx1ZSwgZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHBhaXIgd2hvc2Uga2V5IGlzIGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiBJZiBrZXkgPT09IHVuZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsb3dlc3QgcGFpci5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBvbiBldmVyeSBpdGVyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0SGlnaGVyUGFpciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV1c2VkQXJyYXkgPSByZXVzZWRBcnJheSB8fCBbXTtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldFBhaXJPck5leHRIaWdoZXIoa2V5LCB0aGlzLl9jb21wYXJlLCBmYWxzZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IGtleSBsYXJnZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXHJcbiAgICAgKiAgQWxzbywgbmV4dEhpZ2hlcktleSh1bmRlZmluZWQpIHJldHVybnMgdGhlIGxvd2VzdCBrZXkuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0SGlnaGVyS2V5ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5uZXh0SGlnaGVyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHBhaXIgd2hvc2Uga2V5IGlzIHNtYWxsZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSAob3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUpLlxyXG4gICAgICogIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGhpZ2hlc3QgcGFpci5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubmV4dExvd2VyUGFpciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV1c2VkQXJyYXkgPSByZXVzZWRBcnJheSB8fCBbXTtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldFBhaXJPck5leHRMb3dlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IHNtYWxsZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXHJcbiAgICAgKiAgQWxzbywgbmV4dExvd2VyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgaGlnaGVzdCBrZXkuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRMb3dlclBhaXIoa2V5LCBSZXVzZWRBcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIHAgJiYgcFswXTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBrZXkgaWYgaXQgZXhpc3RzXHJcbiAgICAgKiAgb3IgdGhlIHBhaXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXh0IGxvd2VyIHBhaXIgb3RoZXJ3aXNlLiBJZiB0aGVyZSBpcyBub1xyXG4gICAgICogIG5leHQgbG93ZXIgcGFpciwgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldFBhaXJPck5leHRMb3dlciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIHRydWUsIHJldXNlZEFycmF5IHx8IFtdKTtcclxuICAgIH07XHJcbiAgICAvKiogRWRpdHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGtleSBpbiB0aGUgdHJlZSwgaWYgaXQgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RlZCwgZmFsc2UgaWYgbm90LlxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5jaGFuZ2VJZlByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgZnVuY3Rpb24gKGssIHYpIHsgcmV0dXJuICh7IHZhbHVlOiB2YWx1ZSB9KTsgfSkgIT09IDA7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZHMgYW4gYXJyYXkgb2YgcGFpcnMgZnJvbSB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIHNvcnRlZCBieSBrZXkuXHJcbiAgICAgKiBFYWNoIHJldHVybmVkIHBhaXIgaXMgYWxzbyBhbiBhcnJheTogcGFpclswXSBpcyB0aGUga2V5LCBwYWlyWzFdIGlzIHRoZSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBpbiB0aGUgYXJyYXkgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBUaGlzIG1ldGhvZCByZXR1cm5zIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGl0cyBwYWlyIHdpbGwgYmUgaW5jbHVkZWRcclxuICAgICAqICAgICAgICBpbiB0aGUgb3V0cHV0IGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuIE5vdGU6IGlmIHRoZVxyXG4gICAgICogICAgICAgIGBsb3dgIGtleSBpcyBwcmVzZW50LCBpdCBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC5cclxuICAgICAqIEBwYXJhbSBtYXhMZW5ndGggTGVuZ3RoIGxpbWl0LiBnZXRSYW5nZSB3aWxsIHN0b3Agc2Nhbm5pbmcgdGhlIHRyZWUgd2hlblxyXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgYXJyYXkgcmVhY2hlcyB0aGlzIHNpemUuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKHJlc3VsdC5sZW5ndGggKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldFJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDNGRkZGRkY7IH1cclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChbaywgdl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5sZW5ndGggPiBtYXhMZW5ndGggPyBCcmVhayA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogQWRkcyBhbGwgcGFpcnMgZnJvbSBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLlxyXG4gICAgICogQHBhcmFtIHBhaXJzIFBhaXJzIHRvIGFkZCB0byB0aGlzIHRyZWUuIElmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyxcclxuICAgICAqICAgICAgICBsYXRlciBwYWlycyBjdXJyZW50bHkgb3ZlcndyaXRlIGVhcmxpZXIgb25lcyAoZS5nLiBbWzAsMV0sWzAsN11dXHJcbiAgICAgKiAgICAgICAgYXNzb2NpYXRlcyAwIHdpdGggNy4pXHJcbiAgICAgKiBAcGFyYW0gb3ZlcndyaXRlIFdoZXRoZXIgdG8gb3ZlcndyaXRlIHBhaXJzIHRoYXQgYWxyZWFkeSBleGlzdCAoaWYgZmFsc2UsXHJcbiAgICAgKiAgICAgICAgcGFpcnNbaV0gaXMgaWdub3JlZCB3aGVuIHRoZSBrZXkgcGFpcnNbaV1bMF0gYWxyZWFkeSBleGlzdHMuKVxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBwYWlycyBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocGFpcnMubGVuZ3RoICogbG9nKHNpemUgKyBwYWlycy5sZW5ndGgpKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuc2V0UGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBhZGRlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0KHBhaXJzW2ldWzBdLCBwYWlyc1tpXVsxXSwgb3ZlcndyaXRlKSlcclxuICAgICAgICAgICAgICAgIGFkZGVkKys7XHJcbiAgICAgICAgcmV0dXJuIGFkZGVkO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBrZXlzLCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkga2V5LlxyXG4gICAgICogTm90ZTogdGhlIGNhbGxiYWNrIGBvbkZvdW5kYCBtdXN0IG5vdCBpbnNlcnQgb3IgcmVtb3ZlIGl0ZW1zIGluIHRoZVxyXG4gICAgICogY29sbGVjdGlvbi4gRG9pbmcgc28gbWF5IGNhdXNlIGluY29ycmVjdCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlXHJcbiAgICAgKiBjYWxsYmFjayBhZnRlcndhcmQuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiB7YnJlYWs6Un0gdG8gc3RvcCBlYXJseSB3aXRoIHJlc3VsdCBSLlxyXG4gICAgICogQHBhcmFtIGluaXRpYWxDb3VudGVyIEluaXRpYWwgdGhpcmQgYXJndW1lbnQgb2Ygb25Gb3VuZC4gVGhpcyB2YWx1ZVxyXG4gICAgICogICAgICAgIGluY3JlYXNlcyBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQ6IDBcclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgdmFsdWVzIGZvdW5kLCBvciBSIGlmIHRoZSBjYWxsYmFjayByZXR1cm5lZFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKG51bWJlciBvZiBpdGVtcyBzY2FubmVkICsgbG9nIHNpemUpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByID0gdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgaW5pdGlhbENvdW50ZXIgfHwgMCwgb25Gb3VuZCk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByID09PSBcIm51bWJlclwiID8gciA6IHIuYnJlYWs7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZXMgdmFsdWVzIGZvciBhIHN1YnNlcXVlbmNlIG9mIGtleXMuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIHNob3VsZCBpZGVhbGx5IGJlIGEgcHVyZSBmdW5jdGlvbi5cclxuICAgICAqICAgU3BlY2ZpY2FsbHksIGl0IG11c3Qgbm90IGluc2VydCBpdGVtcywgY2FsbCBjbG9uZSgpLCBvciBjaGFuZ2VcclxuICAgICAqICAgdGhlIGNvbGxlY3Rpb24gZXhjZXB0IHZpYSByZXR1cm4gdmFsdWU7IG91dC1vZi1iYW5kIGVkaXRpbmcgbWF5XHJcbiAgICAgKiAgIGNhdXNlIGFuIGV4Y2VwdGlvbiBvciBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0b1xyXG4gICAgICogICB0aGUgY2FsbGJhY2sgKGR1cGxpY2F0ZSBvciBtaXNzZWQgaXRlbXMpLiBJdCBtdXN0IG5vdCBjYXVzZSBhXHJcbiAgICAgKiAgIGNsb25lKCkgb2YgdGhlIGNvbGxlY3Rpb24sIG90aGVyd2lzZSB0aGUgY2xvbmUgY291bGQgYmUgbW9kaWZpZWRcclxuICAgICAqICAgYnkgY2hhbmdlcyByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IHNjYW5uZWQgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBTY2FubmluZyBzdG9wcyB3aGVuIGEga2V5IGxhcmdlciB0aGFuIHRoaXMgaXMgcmVhY2hlZC5cclxuICAgICAqIEBwYXJhbSBpbmNsdWRlSGlnaCBJZiB0aGUgYGhpZ2hgIGtleSBpcyBwcmVzZW50LCBgb25Gb3VuZGAgaXMgY2FsbGVkIGZvclxyXG4gICAgICogICAgICAgIHRoYXQgZmluYWwgcGFpciBpZiBhbmQgb25seSBpZiB0aGlzIHBhcmFtZXRlciBpcyB0cnVlLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4gYHt2YWx1ZTp2fWAgdG8gY2hhbmdlIHRoZSB2YWx1ZSBhc3NvY2lhdGVkXHJcbiAgICAgKiAgICAgICAgd2l0aCB0aGUgY3VycmVudCBrZXksIGB7ZGVsZXRlOnRydWV9YCB0byBkZWxldGUgdGhlIGN1cnJlbnQgcGFpcixcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIsIG9yIGl0IGNhbiByZXR1cm4gbm90aGluZ1xyXG4gICAgICogICAgICAgICh1bmRlZmluZWQgb3Ige30pIHRvIGNhdXNlIG5vIGVmZmVjdCBhbmQgY29udGludWUgaXRlcmF0aW5nLlxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIGNhbiBiZSBjb21iaW5lZCB3aXRoIG9uZSBvZiB0aGUgb3RoZXIgdHdvIGNvbW1hbmRzLlxyXG4gICAgICogICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBgY291bnRlcmAgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpdGVyYXRlZFxyXG4gICAgICogICAgICAgIHByZXZpb3VzbHk7IGl0IGVxdWFscyAwIHdoZW4gYG9uRm91bmRgIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgdmFsdWVzIHNjYW5uZWQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogICBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqICAgTm90ZTogaWYgdGhlIHRyZWUgaGFzIGJlZW4gY2xvbmVkIHdpdGggY2xvbmUoKSwgYW55IHNoYXJlZFxyXG4gICAgICogICBub2RlcyBhcmUgY29waWVkIGJlZm9yZSBgb25Gb3VuZGAgaXMgY2FsbGVkLiBUaGlzIHRha2VzIE8obikgdGltZVxyXG4gICAgICogICB3aGVyZSBuIGlzIHByb3BvcnRpb25hbCB0byB0aGUgYW1vdW50IG9mIHNoYXJlZCBkYXRhIHNjYW5uZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lZGl0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgb25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpIHtcclxuICAgICAgICB2YXIgcm9vdCA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgaWYgKHJvb3QuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290ID0gcm9vdC5jbG9uZSgpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByID0gcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCB0cnVlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByID09PSBcIm51bWJlclwiID8gciA6IHIuYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB2YXIgaXNTaGFyZWQgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHdoaWxlIChyb290LmtleXMubGVuZ3RoIDw9IDEgJiYgIXJvb3QuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgICAgICBpc1NoYXJlZCB8fCAoaXNTaGFyZWQgPSByb290LmlzU2hhcmVkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290ID0gcm9vdC5rZXlzLmxlbmd0aCA9PT0gMCA/IEVtcHR5TGVhZiA6XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5jaGlsZHJlblswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZiBhbnkgYW5jZXN0b3Igb2YgdGhlIG5ldyByb290IHdhcyBzaGFyZWQsIHRoZSBuZXcgcm9vdCBtdXN0IGFsc28gYmUgc2hhcmVkXHJcbiAgICAgICAgICAgIGlmIChpc1NoYXJlZCkge1xyXG4gICAgICAgICAgICAgICAgcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqIFNhbWUgYXMgYGVkaXRSYW5nZWAgZXhjZXB0IHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgYWxsIHBhaXJzLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRBbGwgPSBmdW5jdGlvbiAob25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgb25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHJhbmdlIG9mIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IHNjYW5uZWQgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBTY2FubmluZyBzdG9wcyB3aGVuIGEga2V5IGxhcmdlciB0aGFuIHRoaXMgaXMgcmVhY2hlZC5cclxuICAgICAqIEBwYXJhbSBpbmNsdWRlSGlnaCBTcGVjaWZpZXMgd2hldGhlciB0aGUgYGhpZ2hgIGtleSwgaWYgcHJlc2VudCwgaXMgZGVsZXRlZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgd2VyZSBkZWxldGVkLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSArIG51bWJlciBvZiBpdGVtcyBkZWxldGVkKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlUmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBEZWxldGVSYW5nZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIERlbGV0ZXMgYSBzZXJpZXMgb2Yga2V5cyBmcm9tIHRoZSBjb2xsZWN0aW9uLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmRlbGV0ZUtleXMgPSBmdW5jdGlvbiAoa2V5cykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZShrZXlzW2ldKSlcclxuICAgICAgICAgICAgICAgIHIrKztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIGhlaWdodCBvZiB0aGUgdHJlZTogdGhlIG51bWJlciBvZiBpbnRlcm5hbCBub2RlcyBiZXR3ZWVuIHRoZVxyXG4gICAgICAgICAqICBCVHJlZSBvYmplY3QgYW5kIGl0cyBsZWFmIG5vZGVzICh6ZXJvIGlmIHRoZXJlIGFyZSBubyBpbnRlcm5hbCBub2RlcykuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5fcm9vdDtcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IC0xO1xyXG4gICAgICAgICAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0Kys7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5pc0xlYWYgPyB1bmRlZmluZWQgOiBub2RlLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIE1ha2VzIHRoZSBvYmplY3QgcmVhZC1vbmx5IHRvIGVuc3VyZSBpdCBpcyBub3QgYWNjaWRlbnRhbGx5IG1vZGlmaWVkLlxyXG4gICAgICogIEZyZWV6aW5nIGRvZXMgbm90IGhhdmUgdG8gYmUgcGVybWFuZW50OyB1bmZyZWV6ZSgpIHJldmVyc2VzIHRoZSBlZmZlY3QuXHJcbiAgICAgKiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgcmVwbGFjaW5nIG11dGF0b3IgZnVuY3Rpb25zIHdpdGggYSBmdW5jdGlvblxyXG4gICAgICogIHRoYXQgdGhyb3dzIGFuIEVycm9yLiBDb21wYXJlZCB0byB1c2luZyBhIHByb3BlcnR5IChlLmcuIHRoaXMuaXNGcm96ZW4pXHJcbiAgICAgKiAgdGhpcyBpbXBsZW1lbnRhdGlvbiBnaXZlcyBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gbm9uLWZyb3plbiBCVHJlZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHQgPSB0aGlzO1xyXG4gICAgICAgIC8vIE5vdGU6IGFsbCBvdGhlciBtdXRhdG9ycyB1bHRpbWF0ZWx5IGNhbGwgc2V0KCkgb3IgZWRpdFJhbmdlKCkgXHJcbiAgICAgICAgLy8gICAgICAgc28gd2UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aG9zZSBvdGhlcnMuXHJcbiAgICAgICAgdC5jbGVhciA9IHQuc2V0ID0gdC5lZGl0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRlZCB0byBtb2RpZnkgYSBmcm96ZW4gQlRyZWVcIik7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKiogRW5zdXJlcyBtdXRhdGlvbnMgYXJlIGFsbG93ZWQsIHJldmVyc2luZyB0aGUgZWZmZWN0IG9mIGZyZWV6ZSgpLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnVuZnJlZXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXCJUaGUgb3BlcmFuZCBvZiBhICdkZWxldGUnIG9wZXJhdG9yIG11c3QgYmUgb3B0aW9uYWwuXCJcclxuICAgICAgICAvLyAgICAgICAgICAgICh3cm9uZzogZGVsZXRlIGRvZXMgbm90IGFmZmVjdCB0aGUgcHJvdG90eXBlLilcclxuICAgICAgICBkZWxldGUgdGhpcy5jbGVhcjtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgZGVsZXRlIHRoaXMuc2V0O1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5lZGl0UmFuZ2U7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJpc0Zyb3plblwiLCB7XHJcbiAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHJlZSBhcHBlYXJzIHRvIGJlIGZyb3plbi4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoJ2VkaXRSYW5nZScpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBTY2FucyB0aGUgdHJlZSBmb3Igc2lnbnMgb2Ygc2VyaW91cyBidWdzIChlLmcuIHRoaXMuc2l6ZSBkb2Vzbid0IG1hdGNoXHJcbiAgICAgKiAgbnVtYmVyIG9mIGVsZW1lbnRzLCBpbnRlcm5hbCBub2RlcyBub3QgY2FjaGluZyBtYXggZWxlbWVudCBwcm9wZXJseS4uLilcclxuICAgICAqICBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIG5vZGVzKSwgaS5lLiBPKHNpemUpLiBUaGlzIG1ldGhvZFxyXG4gICAgICogIHNraXBzIHRoZSBtb3N0IGV4cGVuc2l2ZSB0ZXN0IC0gd2hldGhlciBhbGwga2V5cyBhcmUgc29ydGVkIC0gYnV0IGl0XHJcbiAgICAgKiAgZG9lcyBjaGVjayB0aGF0IG1heEtleSgpIG9mIHRoZSBjaGlsZHJlbiBvZiBpbnRlcm5hbCBub2RlcyBhcmUgc29ydGVkLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9yb290LmNoZWNrVmFsaWQoMCwgdGhpcywgMCk7XHJcbiAgICAgICAgY2hlY2soc2l6ZSA9PT0gdGhpcy5zaXplLCBcInNpemUgbWlzbWF0Y2g6IGNvdW50ZWQgXCIsIHNpemUsIFwiYnV0IHN0b3JlZFwiLCB0aGlzLnNpemUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCVHJlZTtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQlRyZWU7XHJcbi8qKiBBIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHJldHVybnMgaXRzIGFyZ3VtZW50LCB0eXBlZCBhc1xyXG4gKiAgYElTb3J0ZWRTZXQ8Sz5gIGlmIHRoZSBCVHJlZSBpbXBsZW1lbnRzIGl0LCBhcyBpdCBkb2VzIGlmIGBWIGV4dGVuZHMgdW5kZWZpbmVkYC5cclxuICogIElmIGBWYCBjYW5ub3QgYmUgYHVuZGVmaW5lZGAsIGl0IHJldHVybnMgYHVua25vd25gIGluc3RlYWQuIE9yIGF0IGxlYXN0LCB0aGF0XHJcbiAqICB3YXMgdGhlIGludGVudGlvbiwgYnV0IFR5cGVTY3JpcHQgaXMgYWN0aW5nIHdlaXJkIGFuZCBtYXkgcmV0dXJuIGBJU29ydGVkU2V0PEs+YFxyXG4gKiAgZXZlbiBpZiBgVmAgY2FuJ3QgYmUgYHVuZGVmaW5lZGAgKGRpc2N1c3Npb246IGJ0cmVlLXR5cGVzY3JpcHQgaXNzdWUgIzE0KSAqL1xyXG5mdW5jdGlvbiBhc1NldChidHJlZSkge1xyXG4gICAgcmV0dXJuIGJ0cmVlO1xyXG59XHJcbmV4cG9ydHMuYXNTZXQgPSBhc1NldDtcclxuaWYgKFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3IpIC8vIGl0ZXJhdG9yIGlzIGVxdWl2YWxlbnQgdG8gZW50cmllcygpXHJcbiAgICBCVHJlZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzO1xyXG5CVHJlZS5wcm90b3R5cGUud2hlcmUgPSBCVHJlZS5wcm90b3R5cGUuZmlsdGVyO1xyXG5CVHJlZS5wcm90b3R5cGUuc2V0UmFuZ2UgPSBCVHJlZS5wcm90b3R5cGUuc2V0UGFpcnM7XHJcbkJUcmVlLnByb3RvdHlwZS5hZGQgPSBCVHJlZS5wcm90b3R5cGUuc2V0OyAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIElTZXRTaW5rPEs+XHJcbmZ1bmN0aW9uIGl0ZXJhdG9yKG5leHQpIHtcclxuICAgIGlmIChuZXh0ID09PSB2b2lkIDApIHsgbmV4dCA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pOyB9KTsgfVxyXG4gICAgdmFyIHJlc3VsdCA9IHsgbmV4dDogbmV4dCB9O1xyXG4gICAgaWYgKFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3IpXHJcbiAgICAgICAgcmVzdWx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4vKiogTGVhZiBub2RlIC8gYmFzZSBjbGFzcy4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbnZhciBCTm9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJOb2RlKGtleXMsIHZhbHVlcykge1xyXG4gICAgICAgIGlmIChrZXlzID09PSB2b2lkIDApIHsga2V5cyA9IFtdOyB9XHJcbiAgICAgICAgdGhpcy5rZXlzID0ga2V5cztcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcyB8fCB1bmRlZlZhbHM7XHJcbiAgICAgICAgdGhpcy5pc1NoYXJlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCTm9kZS5wcm90b3R5cGUsIFwiaXNMZWFmXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4gPT09IHVuZGVmaW5lZDsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBTaGFyZWQgbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhLZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1t0aGlzLmtleXMubGVuZ3RoIC0gMV07XHJcbiAgICB9O1xyXG4gICAgLy8gSWYga2V5IG5vdCBmb3VuZCwgcmV0dXJucyBpXmZhaWxYb3Igd2hlcmUgaSBpcyB0aGUgaW5zZXJ0aW9uIGluZGV4LlxyXG4gICAgLy8gQ2FsbGVycyB0aGF0IGRvbid0IGNhcmUgd2hldGhlciB0aGVyZSB3YXMgYSBtYXRjaCB3aWxsIHNldCBmYWlsWG9yPTAuXHJcbiAgICBCTm9kZS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChrZXksIGZhaWxYb3IsIGNtcCkge1xyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG4gICAgICAgIHZhciBsbyA9IDAsIGhpID0ga2V5cy5sZW5ndGgsIG1pZCA9IGhpID4+IDE7XHJcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBjbXAoa2V5c1ttaWRdLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoYyA8IDApXHJcbiAgICAgICAgICAgICAgICBsbyA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPiAwKSAvLyBrZXkgPCBrZXlzW21pZF1cclxuICAgICAgICAgICAgICAgIGhpID0gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjIGlzIE5hTiBvciBvdGhlcndpc2UgaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0ga2V5KSAvLyBhdCBsZWFzdCB0aGUgc2VhcmNoIGtleSBpcyBub3QgTmFOXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlOiBOYU4gd2FzIHVzZWQgYXMgYSBrZXlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpID4+IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtaWQgXiBmYWlsWG9yO1xyXG4gICAgICAgIC8vIFVucm9sbGVkIHZlcnNpb246IGJlbmNobWFya3Mgc2hvdyBzYW1lIHNwZWVkLCBub3Qgd29ydGggdXNpbmdcclxuICAgICAgICAvKnZhciBpID0gMSwgYzogbnVtYmVyID0gMCwgc3VtID0gMDtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgaSA9IDM7XHJcbiAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gOCkge1xyXG4gICAgICAgICAgICBpID0gNztcclxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDE2KSB7XHJcbiAgICAgICAgICAgICAgaSA9IDE1O1xyXG4gICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSAzMikge1xyXG4gICAgICAgICAgICAgICAgaSA9IDMxO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGkgPSAxMjc7XHJcbiAgICAgICAgICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDY0IDogLTY0O1xyXG4gICAgICAgICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMzIgOiAtMzI7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMTYgOiAtMTY7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gOCA6IC04O1xyXG4gICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDQgOiAtNDtcclxuICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAyIDogLTI7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMSA6IC0xO1xyXG4gICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgaWYgKGMgPCAwKSB7XHJcbiAgICAgICAgICArK2k7XHJcbiAgICAgICAgICBjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxO1xyXG4gICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdW0gIT09IHN1bSkge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0ga2V5KSAvLyBhdCBsZWFzdCB0aGUgc2VhcmNoIGtleSBpcyBub3QgTmFOXHJcbiAgICAgICAgICAgIHJldHVybiBrZXlzLmxlbmd0aCBeIGZhaWxYb3I7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlOiBOYU4gd2FzIHVzZWQgYXMgYSBrZXlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjID09PSAwID8gaSA6IGkgXiBmYWlsWG9yOyovXHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIExlYWYgTm9kZTogbWlzYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluS2V5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmtleXNbMF07XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1pblBhaXIgPSBmdW5jdGlvbiAocmV1c2VkQXJyYXkpIHtcclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1swXTtcclxuICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciBsYXN0SW5kZXggPSB0aGlzLmtleXMubGVuZ3RoIC0gMTtcclxuICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbbGFzdEluZGV4XTtcclxuICAgICAgICByZXR1cm4gcmV1c2VkQXJyYXk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZSh0aGlzLmtleXMuc2xpY2UoMCksIHYgPT09IHVuZGVmVmFscyA/IHYgOiB2LnNsaWNlKDApKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UgPyB0aGlzIDogdGhpcy5jbG9uZSgpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICByZXR1cm4gaSA8IDAgPyBkZWZhdWx0VmFsdWUgOiB0aGlzLnZhbHVlc1tpXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIC0gMSA6IChpbmNsdXNpdmUgPyBpIDogaSAtIDEpO1xyXG4gICAgICAgIGlmIChpbmRleE9yTG93ZXIgPj0gMCkge1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlciA9IGZ1bmN0aW9uIChrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCBjb21wYXJlKTtcclxuICAgICAgICB2YXIgaW5kZXhPckxvd2VyID0gaSA8IDAgPyB+aSA6IChpbmNsdXNpdmUgPyBpIDogaSArIDEpO1xyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG4gICAgICAgIGlmIChpbmRleE9yTG93ZXIgPCBrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGtleXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV1c2VkQXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoZGVwdGgsIHRyZWUsIGJhc2VJbmRleCkge1xyXG4gICAgICAgIHZhciBrTCA9IHRoaXMua2V5cy5sZW5ndGgsIHZMID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG4gICAgICAgIGNoZWNrKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyBrTCA8PSB2TCA6IGtMID09PSB2TCwgXCJrZXlzL3ZhbHVlcyBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcIndpdGggbGVuZ3Roc1wiLCBrTCwgdkwsIFwiYW5kIGJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGNoZWNrIGZvciBcIm5vZGUgdG9vIHNtYWxsXCIgYmVjYXVzZSBzb21ldGltZXMgYSBub2RlXHJcbiAgICAgICAgLy8gY2FuIGxlZ2l0aW1hdGVseSBoYXZlIHNpemUgMS4gVGhpcyBvY2N1cnMgaWYgdGhlcmUgaXMgYSBiYXRjaCBcclxuICAgICAgICAvLyBkZWxldGlvbiwgbGVhdmluZyBhIG5vZGUgb2Ygc2l6ZSAxLCBhbmQgdGhlIHNpYmxpbmdzIGFyZSBmdWxsIHNvXHJcbiAgICAgICAgLy8gaXQgY2FuJ3QgYmUgbWVyZ2VkIHdpdGggYWRqYWNlbnQgbm9kZXMuIEhvd2V2ZXIsIHRoZSBwYXJlbnQgd2lsbFxyXG4gICAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBhdmVyYWdlIG5vZGUgc2l6ZSBpcyBhdCBsZWFzdCBoYWxmIG9mIHRoZSBtYXhpbXVtLlxyXG4gICAgICAgIGNoZWNrKGRlcHRoID09IDAgfHwga0wgPiAwLCBcImVtcHR5IGxlYWYgYXQgZGVwdGhcIiwgZGVwdGgsIFwiYW5kIGJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBrTDtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBzZXQgJiBub2RlIHNwbGl0dGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgdHJlZS5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIC8vIGtleSBkb2VzIG5vdCBleGlzdCB5ZXRcclxuICAgICAgICAgICAgaSA9IH5pO1xyXG4gICAgICAgICAgICB0cmVlLl9zaXplKys7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydEluTGVhZihpLCBrZXksIHZhbHVlLCB0cmVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbGVhZiBub2RlIGlzIGZ1bGwgYW5kIG11c3Qgc3BsaXRcclxuICAgICAgICAgICAgICAgIHZhciBuZXdSaWdodFNpYmxpbmcgPSB0aGlzLnNwbGl0T2ZmUmlnaHRTaWRlKCksIHRhcmdldCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IHRoaXMua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3UmlnaHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEluTGVhZihpLCBrZXksIHZhbHVlLCB0cmVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEtleSBhbHJlYWR5IGV4aXN0c1xyXG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWlmeVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgLy8gdXN1YWxseSB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBzb21lIHVzZXJzIG1heSB3aXNoIHRvIGVkaXQgdGhlIGtleVxyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5yZWlmeVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbnNlcnRJbkxlYWYgPSBmdW5jdGlvbiAoaSwga2V5LCB2YWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSwgMCwga2V5KTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscykge1xyXG4gICAgICAgICAgICB3aGlsZSAodW5kZWZWYWxzLmxlbmd0aCA8IHRyZWUuX21heE5vZGVTaXplKVxyXG4gICAgICAgICAgICAgICAgdW5kZWZWYWxzLnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB1bmRlZlZhbHMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVzLnNwbGljZShpLCAwLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnRha2VGcm9tUmlnaHQgPSBmdW5jdGlvbiAocmhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAocmhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYucHVzaChyaHMudmFsdWVzLnNoaWZ0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21MZWZ0ID0gZnVuY3Rpb24gKGxocykge1xyXG4gICAgICAgIC8vIFJlbWluZGVyOiBwYXJlbnQgbm9kZSBtdXN0IHVwZGF0ZSBpdHMgY29weSBvZiBrZXkgZm9yIHRoaXMgbm9kZVxyXG4gICAgICAgIC8vIGFzc2VydDogbmVpdGhlciBub2RlIGlzIHNoYXJlZFxyXG4gICAgICAgIC8vIGFzc2VydCByaHMua2V5cy5sZW5ndGggPiAobWF4Tm9kZVNpemUvMiAmJiB0aGlzLmtleXMubGVuZ3RoPG1heE5vZGVTaXplKVxyXG4gICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKGxocy52YWx1ZXMgPT09IHVuZGVmVmFscykge1xyXG4gICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICAgICAgdi51bnNoaWZ0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ID0gdGhpcy5yZWlmeVZhbHVlcygpO1xyXG4gICAgICAgICAgICB2LnVuc2hpZnQobGhzLnZhbHVlcy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy51bnNoaWZ0KGxocy5rZXlzLnBvcCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuc3BsaXRPZmZSaWdodFNpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmtleXMubGVuZ3RoID4+IDEsIGtleXMgPSB0aGlzLmtleXMuc3BsaWNlKGhhbGYpO1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzID8gdW5kZWZWYWxzIDogdGhpcy52YWx1ZXMuc3BsaWNlKGhhbGYpO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGUoa2V5cywgdmFsdWVzKTtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBzY2FubmluZyAmIGRlbGV0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaUxvdywgaUhpZ2g7XHJcbiAgICAgICAgaWYgKGhpZ2ggPT09IGxvdykge1xyXG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVIaWdoKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgICAgICBpSGlnaCA9IChpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgLTEsIGNtcCkpICsgMTtcclxuICAgICAgICAgICAgaWYgKGlMb3cgPCAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaUxvdyA9IHRoaXMuaW5kZXhPZihsb3csIDAsIGNtcCk7XHJcbiAgICAgICAgICAgIGlIaWdoID0gdGhpcy5pbmRleE9mKGhpZ2gsIC0xLCBjbXApO1xyXG4gICAgICAgICAgICBpZiAoaUhpZ2ggPCAwKVxyXG4gICAgICAgICAgICAgICAgaUhpZ2ggPSB+aUhpZ2g7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVIaWdoID09PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgaUhpZ2grKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChvbkZvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGlMb3c7IGkgPCBpSGlnaDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvbkZvdW5kKGtleSwgdmFsdWVzW2ldLCBjb3VudCsrKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0TW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlzW2ldIHx8IHRoaXMuaXNTaGFyZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCVHJlZSBpbGxlZ2FsbHkgY2hhbmdlZCBvciBjbG9uZWQgaW4gZWRpdFJhbmdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlbGV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcyAhPT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUuX3NpemUtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlIaWdoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0Lmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSByZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5icmVhayAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY291bnQgKz0gaUhpZ2ggLSBpTG93O1xyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogQWRkcyBlbnRpcmUgY29udGVudHMgb2YgcmlnaHQtaGFuZCBzaWJsaW5nIChyaHMgaXMgbGVmdCB1bmNoYW5nZWQpICovXHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWVyZ2VTaWJsaW5nID0gZnVuY3Rpb24gKHJocywgXykge1xyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoLmFwcGx5KHRoaXMua2V5cywgcmhzLmtleXMpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVzLnB1c2guYXBwbHkodGhpcy52YWx1ZXMsIHJocy5yZWlmeVZhbHVlcygpKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQk5vZGU7XHJcbn0oKSk7XHJcbi8qKiBJbnRlcm5hbCBub2RlIChub24tbGVhZiBub2RlKSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlSW50ZXJuYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoQk5vZGVJbnRlcm5hbCwgX3N1cGVyKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZHJlbmAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIGNoaWxkcmVuIGFyZSBlaXRoZXIgbWFya2VkIHNoYXJlZCwgb3IgYXJlbid0IGluY2x1ZGVkIGluIGFub3RoZXIgdHJlZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gQk5vZGVJbnRlcm5hbChjaGlsZHJlbiwga2V5cykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgIGtleXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBrZXlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5zbGljZSgwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZUludGVybmFsKGNoaWxkcmVuLCB0aGlzLmtleXMuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdyZWVkeUNsb25lID0gZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTaGFyZWQgJiYgIWZvcmNlKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB2YXIgbnUgPSBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNsaWNlKDApLCB0aGlzLmtleXMuc2xpY2UoMCkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG51LmNoaWxkcmVuW2ldID0gbnUuY2hpbGRyZW5baV0uZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluS2V5KCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pblBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1heFBhaXIgPSBmdW5jdGlvbiAocmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgdHJlZS5fY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gaSA8IGNoaWxkcmVuLmxlbmd0aCA/IGNoaWxkcmVuW2ldLmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkgOiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSBjaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgaSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2kgLSAxXS5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiwgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGlmIChpID49IGxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpIDwgbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSArIDFdLm1pblBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoZGVwdGgsIHRyZWUsIGJhc2VJbmRleCkge1xyXG4gICAgICAgIHZhciBrTCA9IHRoaXMua2V5cy5sZW5ndGgsIGNMID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2soa0wgPT09IGNMLCBcImtleXMvY2hpbGRyZW4gbGVuZ3RoIG1pc21hdGNoOiBkZXB0aFwiLCBkZXB0aCwgXCJsZW5ndGhzXCIsIGtMLCBjTCwgXCJiYXNlSW5kZXhcIiwgYmFzZUluZGV4KTtcclxuICAgICAgICBjaGVjayhrTCA+IDEgfHwgZGVwdGggPiAwLCBcImludGVybmFsIG5vZGUgaGFzIGxlbmd0aFwiLCBrTCwgXCJhdCBkZXB0aFwiLCBkZXB0aCwgXCJiYXNlSW5kZXhcIiwgYmFzZUluZGV4KTtcclxuICAgICAgICB2YXIgc2l6ZSA9IDAsIGMgPSB0aGlzLmNoaWxkcmVuLCBrID0gdGhpcy5rZXlzLCBjaGlsZFNpemUgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY0w7IGkrKykge1xyXG4gICAgICAgICAgICBzaXplICs9IGNbaV0uY2hlY2tWYWxpZChkZXB0aCArIDEsIHRyZWUsIGJhc2VJbmRleCArIHNpemUpO1xyXG4gICAgICAgICAgICBjaGlsZFNpemUgKz0gY1tpXS5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgY2hlY2soc2l6ZSA+PSBjaGlsZFNpemUsIFwid3RmXCIsIGJhc2VJbmRleCk7IC8vIG5vIHdheSB0aGlzIHdpbGwgZXZlciBmYWlsXHJcbiAgICAgICAgICAgIGNoZWNrKGkgPT09IDAgfHwgY1tpIC0gMV0uY29uc3RydWN0b3IgPT09IGNbaV0uY29uc3RydWN0b3IsIFwidHlwZSBtaXNtYXRjaCwgYmFzZUluZGV4OlwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoY1tpXS5tYXhLZXkoKSAhPSBrW2ldKVxyXG4gICAgICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwia2V5c1tcIiwgaSwgXCJdID1cIiwga1tpXSwgXCJpcyB3cm9uZywgc2hvdWxkIGJlIFwiLCBjW2ldLm1heEtleSgpLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoIShpID09PSAwIHx8IHRyZWUuX2NvbXBhcmUoa1tpIC0gMV0sIGtbaV0pIDwgMCkpXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJzb3J0IHZpb2xhdGlvbiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJpbmRleFwiLCBpLCBcImtleXNcIiwga1tpIC0gMV0sIGtbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAyMDIwLzA4OiBCVHJlZSBkb2Vzbid0IGFsd2F5cyBhdm9pZCBncm9zc2x5IHVuZGVyc2l6ZWQgbm9kZXMsXHJcbiAgICAgICAgLy8gYnV0IEFGQUlLIHN1Y2ggbm9kZXMgYXJlIHByZXR0eSBoYXJtbGVzcywgc28gYWNjZXB0IHRoZW0uXHJcbiAgICAgICAgdmFyIHRvb2ZldyA9IGNoaWxkU2l6ZSA9PT0gMDsgLy8gY2hpbGRTaXplIDwgKHRyZWUubWF4Tm9kZVNpemUgPj4gMSkqY0w7XHJcbiAgICAgICAgaWYgKHRvb2ZldyB8fCBjaGlsZFNpemUgPiB0cmVlLm1heE5vZGVTaXplICogY0wpXHJcbiAgICAgICAgICAgIGNoZWNrKGZhbHNlLCB0b29mZXcgPyBcInRvbyBmZXdcIiA6IFwidG9vIG1hbnlcIiwgXCJjaGlsZHJlbiAoXCIsIGNoaWxkU2l6ZSwgc2l6ZSwgXCIpIGF0IGRlcHRoXCIsIGRlcHRoLCBcIm1heE5vZGVTaXplOlwiLCB0cmVlLm1heE5vZGVTaXplLCBcImNoaWxkcmVuLmxlbmd0aDpcIiwgY0wsIFwiYmFzZUluZGV4OlwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBzaXplO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJbnRlcm5hbCBOb2RlOiBzZXQgJiBub2RlIHNwbGl0dGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBjID0gdGhpcy5jaGlsZHJlbiwgbWF4ID0gdHJlZS5fbWF4Tm9kZVNpemUsIGNtcCA9IHRyZWUuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLmluZGV4T2Yoa2V5LCAwLCBjbXApLCBjLmxlbmd0aCAtIDEpLCBjaGlsZCA9IGNbaV07XHJcbiAgICAgICAgaWYgKGNoaWxkLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICBjW2ldID0gY2hpbGQgPSBjaGlsZC5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChjaGlsZC5rZXlzLmxlbmd0aCA+PSBtYXgpIHtcclxuICAgICAgICAgICAgLy8gY2hpbGQgaXMgZnVsbDsgaW5zZXJ0aW5nIGFueXRoaW5nIGVsc2Ugd2lsbCBjYXVzZSBhIHNwbGl0LlxyXG4gICAgICAgICAgICAvLyBTaGlmdGluZyBhbiBpdGVtIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpYmxpbmcgbWF5IGF2b2lkIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFdlIGNhbiBkbyBhIHNoaWZ0IGlmIHRoZSBhZGphY2VudCBub2RlIGlzIG5vdCBmdWxsIGFuZCBpZiB0aGVcclxuICAgICAgICAgICAgLy8gY3VycmVudCBrZXkgY2FuIHN0aWxsIGJlIHBsYWNlZCBpbiB0aGUgc2FtZSBub2RlIGFmdGVyIHRoZSBzaGlmdC5cclxuICAgICAgICAgICAgdmFyIG90aGVyO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgKG90aGVyID0gY1tpIC0gMV0pLmtleXMubGVuZ3RoIDwgbWF4ICYmIGNtcChjaGlsZC5rZXlzWzBdLCBrZXkpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG90aGVyLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNbaSAtIDFdID0gb3RoZXIgPSBvdGhlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgb3RoZXIudGFrZUZyb21SaWdodChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaSAtIDFdID0gb3RoZXIubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKG90aGVyID0gY1tpICsgMV0pICE9PSB1bmRlZmluZWQgJiYgb3RoZXIua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLm1heEtleSgpLCBrZXkpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG90aGVyLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNbaSArIDFdID0gb3RoZXIgPSBvdGhlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgb3RoZXIudGFrZUZyb21MZWZ0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpXSA9IGNbaV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkLnNldChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGQubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gVGhlIGNoaWxkIGhhcyBzcGxpdCBhbmQgYHJlc3VsdGAgaXMgYSBuZXcgcmlnaHQgY2hpbGQuLi4gZG9lcyBpdCBmaXQ/XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCBtYXgpIHsgLy8geWVzXHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KGkgKyAxLCByZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIG5vLCB3ZSBtdXN0IHNwbGl0IGFsc29cclxuICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKGNtcChyZXN1bHQubWF4S2V5KCksIHRoaXMubWF4S2V5KCkpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3UmlnaHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaSAtPSB0aGlzLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldC5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBgY2hpbGRgIGF0IGluZGV4IGBpYC5cclxuICAgICAqIFRoaXMgZG9lcyBub3QgbWFyayBgY2hpbGRgIGFzIHNoYXJlZCwgc28gaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXJcclxuICAgICAqIHRvIGVuc3VyZSB0aGF0IGVpdGhlciBjaGlsZCBpcyBtYXJrZWQgc2hhcmVkLCBvciBpdCBpcyBub3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoaSwgY2hpbGQpIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpLCAwLCBjaGlsZCk7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBjaGlsZC5tYXhLZXkoKSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCB0aGlzIG5vZGUuXHJcbiAgICAgKiBNb2RpZmllcyB0aGlzIHRvIHJlbW92ZSB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGl0ZW1zLCByZXR1cm5pbmcgYSBzZXBhcmF0ZSBub2RlIGNvbnRhaW5pbmcgdGhlbS5cclxuICAgICAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuc3BsaXRPZmZSaWdodFNpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gYXNzZXJ0ICF0aGlzLmlzU2hhcmVkO1xyXG4gICAgICAgIHZhciBoYWxmID0gdGhpcy5jaGlsZHJlbi5sZW5ndGggPj4gMTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwodGhpcy5jaGlsZHJlbi5zcGxpY2UoaGFsZiksIHRoaXMua2V5cy5zcGxpY2UoaGFsZikpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tUmlnaHQgPSBmdW5jdGlvbiAocmhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2gocmhzLmtleXMuc2hpZnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKHJocy5jaGlsZHJlbi5zaGlmdCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChsaHMuY2hpbGRyZW4ucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJbnRlcm5hbCBOb2RlOiBzY2FubmluZyAmIGRlbGV0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTm90ZTogYGNvdW50YCBpcyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgdG8gYG9uRm91bmRgLiBcclxuICAgIC8vICAgICAgIEEgbGVhZiBub2RlJ3MgYGZvclJhbmdlYCBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHZhbHVlIGZvciB0aGlzIGNvdW50ZXIsXHJcbiAgICAvLyAgICAgICB1bmxlc3MgdGhlIG9wZXJhdGlvbiBpcyB0byBzdG9wIGVhcmx5LlxyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZm9yUmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKSB7XHJcbiAgICAgICAgdmFyIGNtcCA9IHRyZWUuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICB2YXIgaUxvdyA9IHRoaXMuaW5kZXhPZihsb3csIDAsIGNtcCksIGkgPSBpTG93O1xyXG4gICAgICAgIHZhciBpSGlnaCA9IE1hdGgubWluKGhpZ2ggPT09IGxvdyA/IGlMb3cgOiB0aGlzLmluZGV4T2YoaGlnaCwgMCwgY21wKSwga2V5cy5sZW5ndGggLSAxKTtcclxuICAgICAgICBpZiAoIWVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIFNpbXBsZSBjYXNlXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBjb3VudCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpIDw9IGlIaWdoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8PSBpSGlnaDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IGNoaWxkcmVuW2ldLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogaWYgY2hpbGRyZW5baV0gaXMgZW1wdHkgdGhlbiBrZXlzW2ldPXVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBUaGlzIGlzIGFuIGludmFsaWQgc3RhdGUsIGJ1dCBpdCBpcyBmaXhlZCBiZWxvdy5cclxuICAgICAgICAgICAgICAgICAgICBrZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgLy8gRGVsZXRpb25zIG1heSBoYXZlIG9jY3VycmVkLCBzbyBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG1lcmdlIG5vZGVzLlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGYgPSB0cmVlLl9tYXhOb2RlU2l6ZSA+PiAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlMb3cgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIGlMb3ctLTtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IGlIaWdoOyBpID49IGlMb3c7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCA8PSBoYWxmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlNZXJnZShpLCB0cmVlLl9tYXhOb2RlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIGNoaWxkIGlzIGVtcHR5ISBkZWxldGUgaXQhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDAgJiYgY2hpbGRyZW5bMF0ua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwiZW1wdGluZXNzIGJ1Z1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIE1lcmdlcyBjaGlsZCBpIHdpdGggY2hpbGQgaSsxIGlmIHRoZWlyIGNvbWJpbmVkIHNpemUgaXMgbm90IHRvbyBsYXJnZSAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudHJ5TWVyZ2UgPSBmdW5jdGlvbiAoaSwgbWF4U2l6ZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKGkgPj0gMCAmJiBpICsgMSA8IGNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ua2V5cy5sZW5ndGggKyBjaGlsZHJlbltpICsgMV0ua2V5cy5sZW5ndGggPD0gbWF4U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmlzU2hhcmVkKSAvLyBjbG9uZWQgYWxyZWFkeSBVTkxFU1MgaSBpcyBvdXRzaWRlIHNjYW4gcmFuZ2VcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IGNoaWxkcmVuW2ldLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5tZXJnZVNpYmxpbmcoY2hpbGRyZW5baSArIDFdLCBtYXhTaXplKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpICsgMSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTW92ZSBjaGlsZHJlbiBmcm9tIGByaHNgIGludG8gdGhpcy5cclxuICAgICAqIGByaHNgIG11c3QgYmUgcGFydCBvZiB0aGlzIHRyZWUsIGFuZCBiZSByZW1vdmVkIGZyb20gaXQgYWZ0ZXIgdGhpcyBjYWxsXHJcbiAgICAgKiAob3RoZXJ3aXNlIGlzU2hhcmVkIGZvciBpdHMgY2hpbGRyZW4gY291bGQgYmUgaW5jb3JyZWN0KS5cclxuICAgICAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWVyZ2VTaWJsaW5nID0gZnVuY3Rpb24gKHJocywgbWF4Tm9kZVNpemUpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIG9sZExlbmd0aCA9IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgdmFyIHJoc0NoaWxkcmVuID0gcmhzLmNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaC5hcHBseSh0aGlzLmNoaWxkcmVuLCByaHNDaGlsZHJlbik7XHJcbiAgICAgICAgaWYgKHJocy5pc1NoYXJlZCAmJiAhdGhpcy5pc1NoYXJlZCkge1xyXG4gICAgICAgICAgICAvLyBBbGwgY2hpbGRyZW4gb2YgYSBzaGFyZWQgbm9kZSBhcmUgaW1wbGljaXRseSBzaGFyZWQsIGFuZCBzaW5jZSB0aGVpciBuZXdcclxuICAgICAgICAgICAgLy8gcGFyZW50IGlzIG5vdCBzaGFyZWQsIHRoZXkgbXVzdCBub3cgYmUgZXhwbGljaXRseSBtYXJrZWQgYXMgc2hhcmVkLlxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJoc0NoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmhzQ2hpbGRyZW5baV0uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBvdXIgY2hpbGRyZW4gYXJlIHRoZW1zZWx2ZXMgYWxtb3N0IGVtcHR5IGR1ZSB0byBhIG1hc3MtZGVsZXRlLFxyXG4gICAgICAgIC8vIHRoZXkgbWF5IG5lZWQgdG8gYmUgbWVyZ2VkIHRvbyAoYnV0IG9ubHkgdGhlIG9sZExlbmd0aC0xIGFuZCBpdHNcclxuICAgICAgICAvLyByaWdodCBzaWJsaW5nIHNob3VsZCBuZWVkIHRoaXMpLlxyXG4gICAgICAgIHRoaXMudHJ5TWVyZ2Uob2xkTGVuZ3RoIC0gMSwgbWF4Tm9kZVNpemUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZUludGVybmFsO1xyXG59KEJOb2RlKSk7XHJcbi8vIE9wdGltaXphdGlvbjogdGhpcyBhcnJheSBvZiBgdW5kZWZpbmVkYHMgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgbm9ybWFsXHJcbi8vIGFycmF5IG9mIHZhbHVlcyBpbiBub2RlcyB3aGVyZSBgdW5kZWZpbmVkYCBpcyB0aGUgb25seSB2YWx1ZS5cclxuLy8gSXRzIGxlbmd0aCBpcyBleHRlbmRlZCB0byBtYXggbm9kZSBzaXplIG9uIGZpcnN0IHVzZTsgc2luY2UgaXQgY2FuXHJcbi8vIGJlIHNoYXJlZCBiZXR3ZWVuIHRyZWVzIHdpdGggZGlmZmVyZW50IG1heGltdW1zLCBpdHMgbGVuZ3RoIGNhbiBvbmx5XHJcbi8vIGluY3JlYXNlLCBuZXZlciBkZWNyZWFzZS4gSXRzIHR5cGUgc2hvdWxkIGJlIHVuZGVmaW5lZFtdIGJ1dCBzdHJhbmdlbHlcclxuLy8gVHlwZVNjcmlwdCB3b24ndCBhbGxvdyB0aGUgY29tcGFyaXNvbiBWW10gPT09IHVuZGVmaW5lZFtdLiBUbyBwcmV2ZW50XHJcbi8vIHVzZXJzIGZyb20gbWFraW5nIHRoaXMgYXJyYXkgdG9vIGxhcmdlLCBCVHJlZSBoYXMgYSBtYXhpbXVtIG5vZGUgc2l6ZS5cclxuLy9cclxuLy8gRkFROiB1bmRlZlZhbHNbaV0gaXMgYWxyZWFkeSB1bmRlZmluZWQsIHNvIHdoeSBpbmNyZWFzZSB0aGUgYXJyYXkgc2l6ZT9cclxuLy8gUmVhZGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgYW4gYXJyYXkgaXMgcmVsYXRpdmVseSBzbG93IGJlY2F1c2UgaXRcclxuLy8gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBzY2FubmluZyB0aGUgcHJvdG90eXBlIGNoYWluLlxyXG52YXIgdW5kZWZWYWxzID0gW107XHJcbnZhciBEZWxldGUgPSB7IGRlbGV0ZTogdHJ1ZSB9LCBEZWxldGVSYW5nZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIERlbGV0ZTsgfTtcclxudmFyIEJyZWFrID0geyBicmVhazogdHJ1ZSB9O1xyXG52YXIgRW1wdHlMZWFmID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBuID0gbmV3IEJOb2RlKCk7XHJcbiAgICBuLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgIHJldHVybiBuO1xyXG59KSgpO1xyXG52YXIgRW1wdHlBcnJheSA9IFtdO1xyXG52YXIgUmV1c2VkQXJyYXkgPSBbXTsgLy8gYXNzdW1lZCB0aHJlYWQtbG9jYWxcclxuZnVuY3Rpb24gY2hlY2soZmFjdCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmICghZmFjdCkge1xyXG4gICAgICAgIGFyZ3MudW5zaGlmdCgnQisgdHJlZScpOyAvLyBhdCBiZWdpbm5pbmcgb2YgbWVzc2FnZVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihhcmdzLmpvaW4oJyAnKSk7XHJcbiAgICB9XHJcbn1cclxuLyoqIEEgQlRyZWUgZnJvemVuIGluIHRoZSBlbXB0eSBzdGF0ZS4gKi9cclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBuZXcgQlRyZWUoKTsgdC5mcmVlemUoKTsgcmV0dXJuIHQ7IH0pKCk7XHJcbiIsICIvLyB0aGVzZSBhcmVuJ3QgcmVhbGx5IHByaXZhdGUsIGJ1dCBub3IgYXJlIHRoZXkgcmVhbGx5IHVzZWZ1bCB0byBkb2N1bWVudFxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEx1eG9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEludGVydmFsRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREdXJhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIER1cmF0aW9uOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFVuaXRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bml0KSB7XG4gICAgc3VwZXIoYEludmFsaWQgdW5pdCAke3VuaXR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFpvbmVJc0Fic3RyYWN0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzXCIpO1xuICB9XG59XG4iLCAiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG4gPSBcIm51bWVyaWNcIixcbiAgcyA9IFwic2hvcnRcIixcbiAgbCA9IFwibG9uZ1wiO1xuXG5leHBvcnQgY29uc3QgREFURV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuIiwgIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuLy8gVFlQRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCIgJiYgbyAlIDEgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuXG4vLyBDQVBBQklMSVRJRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlbGF0aXZlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pXG5leHBvcnQgZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikge1xuICBsZXQgZCA9IERhdGUuVVRDKFxuICAgIG9iai55ZWFyLFxuICAgIG9iai5tb250aCAtIDEsXG4gICAgb2JqLmRheSxcbiAgICBvYmouaG91cixcbiAgICBvYmoubWludXRlLFxuICAgIG9iai5zZWNvbmQsXG4gICAgb2JqLm1pbGxpc2Vjb25kXG4gICk7XG5cbiAgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdFxuICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkge1xuICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcikge1xuICBjb25zdCBwMSA9XG4gICAgICAod2Vla1llYXIgK1xuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNCkgLVxuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0MDApKSAlXG4gICAgICA3LFxuICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsXG4gICAgcDIgPSAobGFzdCArIE1hdGguZmxvb3IobGFzdCAvIDQpIC0gTWF0aC5mbG9vcihsYXN0IC8gMTAwKSArIE1hdGguZmxvb3IobGFzdCAvIDQwMCkpICUgNztcbiAgcmV0dXJuIHAxID09PSA0IHx8IHAyID09PSAzID8gNTMgOiA1Mjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXIpIHtcbiAgaWYgKHllYXIgPiA5OSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2UgcmV0dXJuIHllYXIgPiA2MCA/IDE5MDAgKyB5ZWFyIDogMjAwMCArIHllYXI7XG59XG5cbi8vIFBBUlNJTkdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSA9IG51bGwpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKSxcbiAgICBpbnRsT3B0cyA9IHtcbiAgICAgIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICB9O1xuXG4gIGlmICh0aW1lWm9uZSkge1xuICAgIGludGxPcHRzLnRpbWVab25lID0gdGltZVpvbmU7XG4gIH1cblxuICBjb25zdCBtb2RpZmllZCA9IHsgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQsIC4uLmludGxPcHRzIH07XG5cbiAgY29uc3QgcGFyc2VkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBtb2RpZmllZClcbiAgICAuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICAgIC5maW5kKChtKSA9PiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0aW1lem9uZW5hbWVcIik7XG4gIHJldHVybiBwYXJzZWQgPyBwYXJzZWQudmFsdWUgOiBudWxsO1xufVxuXG4vLyBzaWduZWRPZmZzZXQoJy01JywgJzMwJykgLT4gLTMzMFxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpIHtcbiAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7XG5cbiAgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTBcbiAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkge1xuICAgIG9mZkhvdXIgPSAwO1xuICB9XG5cbiAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCxcbiAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjtcbiAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDtcbn1cblxuLy8gQ09FUkNJT05cblxuZXhwb3J0IGZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7XG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09PSBcIlwiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKVxuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCB1bml0IHZhbHVlICR7dmFsdWV9YCk7XG4gIHJldHVybiBudW1lcmljVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcbiAgZm9yIChjb25zdCB1IGluIG9iaikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHUpKSB7XG4gICAgICBjb25zdCB2ID0gb2JqW3VdO1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPZmZzZXQob2Zmc2V0LCBmb3JtYXQpIHtcbiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAvIDYwKSksXG4gICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSxcbiAgICBzaWduID0gb2Zmc2V0ID49IDAgPyBcIitcIiA6IFwiLVwiO1xuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX06JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnN9JHttaW51dGVzID4gMCA/IGA6JHttaW51dGVzfWAgOiBcIlwifWA7XG4gICAgY2FzZSBcInRlY2hpZVwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVmFsdWUgZm9ybWF0ICR7Zm9ybWF0fSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2JqZWN0KG9iaikge1xuICByZXR1cm4gcGljayhvYmosIFtcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSk7XG59XG5cbmV4cG9ydCBjb25zdCBpYW5hUmVnZXggPVxuICAvW0EtWmEtel8rLV17MSwyNTZ9KD86Oj9cXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXC9bQS1aYS16MC05XystXXsxLDI1Nn0pPyk/LztcbiIsICJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGFkU3RhcnQgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VucyhzcGxpdHMsIHRva2VuVG9TdHJpbmcpIHtcbiAgbGV0IHMgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHNwbGl0cykge1xuICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICBzICs9IHRva2VuLnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyArPSB0b2tlblRvU3RyaW5nKHRva2VuLnZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5jb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0ge1xuICBEOiBGb3JtYXRzLkRBVEVfU0hPUlQsXG4gIEREOiBGb3JtYXRzLkRBVEVfTUVELFxuICBEREQ6IEZvcm1hdHMuREFURV9GVUxMLFxuICBEREREOiBGb3JtYXRzLkRBVEVfSFVHRSxcbiAgdDogRm9ybWF0cy5USU1FX1NJTVBMRSxcbiAgdHQ6IEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMsXG4gIHR0dDogRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VULFxuICB0dHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCxcbiAgVDogRm9ybWF0cy5USU1FXzI0X1NJTVBMRSxcbiAgVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX1NFQ09ORFMsXG4gIFRUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VULFxuICBUVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCxcbiAgZjogRm9ybWF0cy5EQVRFVElNRV9TSE9SVCxcbiAgZmY6IEZvcm1hdHMuREFURVRJTUVfTUVELFxuICBmZmY6IEZvcm1hdHMuREFURVRJTUVfRlVMTCxcbiAgZmZmZjogRm9ybWF0cy5EQVRFVElNRV9IVUdFLFxuICBGOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyxcbiAgRkY6IEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyxcbiAgRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTLFxuICBGRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRm9ybWF0KGZtdCkge1xuICAgIGxldCBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRGdWxsID0gXCJcIixcbiAgICAgIGJyYWNrZXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwbGl0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm10Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gZm10LmNoYXJBdChpKTtcbiAgICAgIGlmIChjID09PSBcIidcIikge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBjdXJyZW50RnVsbCA9IFwiXCI7XG4gICAgICAgIGJyYWNrZXRlZCA9ICFicmFja2V0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIGlmIChjID09PSBjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogZmFsc2UsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEZ1bGwgPSBjO1xuICAgICAgICBjdXJyZW50ID0gYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwbGl0cztcbiAgfVxuXG4gIHN0YXRpYyBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7XG4gICAgcmV0dXJuIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHNbdG9rZW5dO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0cztcbiAgICB0aGlzLmxvYyA9IGxvY2FsZTtcbiAgICB0aGlzLnN5c3RlbUxvYyA9IG51bGw7XG4gIH1cblxuICBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykge1xuICAgIGlmICh0aGlzLnN5c3RlbUxvYyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zeXN0ZW1Mb2MgPSB0aGlzLmxvYy5yZWRlZmF1bHRUb1N5c3RlbSgpO1xuICAgIH1cbiAgICBjb25zdCBkZiA9IHRoaXMuc3lzdGVtTG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVQYXJ0cyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXNcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgIC8vIG1zXG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTtcbiAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCwgMik7XG4gICAgICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwKSwgMik7XG4gICAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMDApKTtcbiAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUpO1xuICAgICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7XG4gICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyKTtcbiAgICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7XG4gICAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyKTtcbiAgICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyLCAyKTtcbiAgICAgICAgICAvLyBvZmZzZXRcbiAgICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArNlxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJuYXJyb3dcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDY6MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwic2hvcnRcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwidGVjaGllXCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFU1RcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcInNob3J0XCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcImxvbmdcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgLy8gem9uZVxuICAgICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTtcbiAgICAgICAgICAvLyBtZXJpZGllbXNcbiAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgcmV0dXJuIG1lcmlkaWVtKCk7XG4gICAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIm51bWVyaWNcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSk7XG4gICAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwiMi1kaWdpdFwiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5LCAyKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMSwgZG9lc24ndCBzZWVtIHRvIHdvcmtcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIHllYXJzXG4gICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMjAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpIDogdGhpcy5udW0oZHQueWVhcik7XG4gICAgICAgICAgY2FzZSBcInl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIjItZGlnaXRcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNik7XG4gICAgICAgICAgLy8gZXJhc1xuICAgICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFEXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwic2hvcnRcIik7XG4gICAgICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFubm8gRG9taW5pXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibG9uZ1wiKTtcbiAgICAgICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJuYXJyb3dcIik7XG4gICAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlcik7XG4gICAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlciwgMik7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBleHBsYW5hdGlvbikge1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgfVxuXG4gIHRvTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5leHBsYW5hdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucmVhc29ufTogJHt0aGlzLmV4cGxhbmF0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBab25lSXNBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQGludGVyZmFjZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBab25lIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmVcbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCBvcHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnbmFycm93JywgJ3Nob3J0Jywgb3IgJ3RlY2hpZScuIFJldHVybmluZyAnKzYnLCAnKzA2OjAwJywgb3IgJyswNjAwJyByZXNwZWN0aXZlbHlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gY29tcHV0ZSB0aGUgb2Zmc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCh0cykge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbywgaXNVbmRlZmluZWQsIG9ialRvTG9jYWxUUyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBkdGZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gbWFrZURURih6b25lKSB7XG4gIGlmICghZHRmQ2FjaGVbem9uZV0pIHtcbiAgICBkdGZDYWNoZVt6b25lXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIiwge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiB6b25lLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgc2Vjb25kOiBcIjItZGlnaXRcIixcbiAgICAgIGVyYTogXCJzaG9ydFwiLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBkdGZDYWNoZVt6b25lXTtcbn1cblxuY29uc3QgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBlcmE6IDMsXG4gIGhvdXI6IDQsXG4gIG1pbnV0ZTogNSxcbiAgc2Vjb25kOiA2LFxufTtcblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCBcIlwiKSxcbiAgICBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspIChBRHxCQyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpLFxuICAgIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZDtcbiAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgY29uc3QgZmlsbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gZm9ybWF0dGVkW2ldO1xuICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTtcblxuICAgIGlmICh0eXBlID09PSBcImVyYVwiKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZDtcbn1cblxubGV0IGlhbmFab25lQ2FjaGUgPSB7fTtcbi8qKlxuICogQSB6b25lIGlkZW50aWZpZWQgYnkgYW4gSUFOQSBpZGVudGlmaWVyLCBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJQU5BWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWVcbiAgICogQHJldHVybiB7SUFOQVpvbmV9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKG5hbWUpIHtcbiAgICBpZiAoIWlhbmFab25lQ2FjaGVbbmFtZV0pIHtcbiAgICAgIGlhbmFab25lQ2FjaGVbbmFtZV0gPSBuZXcgSUFOQVpvbmUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgaWFuYVpvbmVDYWNoZSA9IHt9O1xuICAgIGR0ZkNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBzcGVjaWZpZXIuIFRoaXMgb25seSBjaGVja3MgdGhlIHN0cmluZydzIGZvcm1hdCwgbm90IHRoYXQgdGhlIHNwZWNpZmllciBpZGVudGlmaWVzIGEga25vd24gem9uZTsgc2VlIGlzVmFsaWRab25lIGZvciB0aGF0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBzdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIkFtZXJpY2EvTmV3X1lvcmtcIikgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoXCJTcG9ydH5+YmxvcnBcIikgLy89PiBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGZvciBzb21lIHZhbGlkIElBTkEgbmFtZXMuIFVzZSBpc1ZhbGlkWm9uZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaWFuYVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCh0cykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgICBpZiAoaXNOYU4oZGF0ZSkpIHJldHVybiBOYU47XG5cbiAgICBjb25zdCBkdGYgPSBtYWtlRFRGKHRoaXMubmFtZSk7XG4gICAgbGV0IFt5ZWFyLCBtb250aCwgZGF5LCBhZE9yQmMsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IGR0Zi5mb3JtYXRUb1BhcnRzXG4gICAgICA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSlcbiAgICAgIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKTtcblxuICAgIGlmIChhZE9yQmMgPT09IFwiQkNcIikge1xuICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7XG4gICAgfVxuXG4gICAgLy8gYmVjYXVzZSB3ZSdyZSB1c2luZyBob3VyMTIgYW5kIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMjU1NjQmY2FuPTImcT0lMjIyNCUzQTAwJTIyJTIwZGF0ZXRpbWVmb3JtYXRcbiAgICBjb25zdCBhZGp1c3RlZEhvdXIgPSBob3VyID09PSAyNCA/IDAgOiBob3VyO1xuXG4gICAgY29uc3QgYXNVVEMgPSBvYmpUb0xvY2FsVFMoe1xuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5LFxuICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLFxuICAgICAgbWludXRlLFxuICAgICAgc2Vjb25kLFxuICAgICAgbWlsbGlzZWNvbmQ6IDAsXG4gICAgfSk7XG5cbiAgICBsZXQgYXNUUyA9ICtkYXRlO1xuICAgIGNvbnN0IG92ZXIgPSBhc1RTICUgMTAwMDtcbiAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjtcbiAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiaWFuYVwiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgc2lnbmVkT2Zmc2V0IH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IHNpbmdsZXRvbiA9IG51bGw7XG5cbi8qKlxuICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKVxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeGVkT2Zmc2V0Wm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIFVUQ1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBGaXhlZE9mZnNldFpvbmUoMCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXNcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPT09IDAgPyBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2UgOiBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgXCJVVEMrNlwiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2VcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzA2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQy02OjAwXCIpXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNwZWNpZmllcihzKSB7XG4gICAgaWYgKHMpIHtcbiAgICAgIGNvbnN0IHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cXGR7MSwyfSkoPzo6KFxcZHsyfSkpPyk/JC9pKTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRml4ZWRPZmZzZXRab25lKHNpZ25lZE9mZnNldChyWzFdLCByWzJdKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3Iob2Zmc2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy5maXhlZCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImZpeGVkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIGdldCBpYW5hTmFtZSgpIHtcbiAgICBpZiAodGhpcy5maXhlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiRXRjL1VUQ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEV0Yy9HTVQke2Zvcm1hdE9mZnNldCgtdGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgICB9XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiZml4ZWRcIiAmJiBvdGhlclpvbmUuZml4ZWQgPT09IHRoaXMuZml4ZWQ7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbi8qKlxuICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkWm9uZSBleHRlbmRzIFpvbmUge1xuICBjb25zdHJ1Y3Rvcih6b25lTmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqICBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuem9uZU5hbWUgPSB6b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImludmFsaWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuLi96b25lcy9pbnZhbGlkWm9uZS5qc1wiO1xuXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHtcbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFpvbmUpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgY29uc3QgbG93ZXJlZCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyZWQgPT09IFwibG9jYWxcIiB8fCBsb3dlcmVkID09PSBcInN5c3RlbVwiKSByZXR1cm4gZGVmYXVsdFpvbmU7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dC5vZmZzZXQgJiYgdHlwZW9mIGlucHV0Lm9mZnNldCA9PT0gXCJudW1iZXJcIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxubGV0IG5vdyA9ICgpID0+IERhdGUubm93KCksXG4gIGRlZmF1bHRab25lID0gXCJzeXN0ZW1cIixcbiAgZGVmYXVsdExvY2FsZSA9IG51bGwsXG4gIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudWxsLFxuICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLFxuICB0aHJvd09uSW52YWxpZDtcblxuLyoqXG4gKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0IG5vdygpIHtcbiAgICByZXR1cm4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50XG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gRGF0ZS5ub3coKSArIDMwMDAgLy8gcHJldGVuZCBpdCBpcyAzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWVcbiAgICovXG4gIHN0YXRpYyBzZXQgbm93KG4pIHtcbiAgICBub3cgPSBuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVXNlIHRoZSB2YWx1ZSBcInN5c3RlbVwiIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoem9uZSkge1xuICAgIGRlZmF1bHRab25lID0gem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIG9iamVjdCBjdXJyZW50bHkgdXNlZCB0byBjcmVhdGUgRGF0ZVRpbWVzLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRab25lKCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZShsb2NhbGUpIHtcbiAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0obnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcihvdXRwdXRDYWxlbmRhcikge1xuICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgdGhyb3dPbkludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRocm93T25JbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQodCkge1xuICAgIHRocm93T25JbnZhbGlkID0gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldENhY2hlcygpIHtcbiAgICBMb2NhbGUucmVzZXRDYWNoZSgpO1xuICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhZFN0YXJ0LCByb3VuZFRvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vLyB0b2RvIC0gcmVtYXAgY2FjaGluZ1xuXG5sZXQgaW50bExGQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZExGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxMRkNhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxMRkNhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxEVENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bERUQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxEVENhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxOdW1DYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxOdW1DYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBpbnRsUmVsQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFJURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJhc2UsIC4uLmNhY2hlS2V5T3B0cyB9ID0gb3B0czsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9uc1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxSZWxDYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG5mdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7XG4gIGlmIChzeXNMb2NhbGVDYWNoZSkge1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfSBlbHNlIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICBjb25zdCB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZihcIi11LVwiKTtcbiAgaWYgKHVJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gW2xvY2FsZVN0cl07XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIC8vIHJldHVybiB0aGUgc21hbGxlciBvbmUgc28gdGhhdCB3ZSBjYW4gYXBwZW5kIHRoZSBjYWxlbmRhciBhbmQgbnVtYmVyaW5nIG92ZXJyaWRlcyB0byBpdFxuICAgIHJldHVybiBbc21hbGxlciwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhcl07XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50bENvbmZpZ1N0cmluZyhsb2NhbGVTdHIsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpIHtcbiAgaWYgKG91dHB1dENhbGVuZGFyIHx8IG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGxvY2FsZVN0ciArPSBcIi11XCI7XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikge1xuICBjb25zdCBtb2RlID0gbG9jLmxpc3RpbmdNb2RlKGRlZmF1bHRPSyk7XG5cbiAgaWYgKG1vZGUgPT09IFwiZXJyb3JcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiZW5cIikge1xuICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW50bEZuKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNGYXN0TnVtYmVycyhsb2MpIHtcbiAgaWYgKGxvYy5udW1iZXJpbmdTeXN0ZW0gJiYgbG9jLm51bWJlcmluZ1N5c3RlbSAhPT0gXCJsYXRuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvYy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiIHx8XG4gICAgICAhbG9jLmxvY2FsZSB8fFxuICAgICAgbG9jLmxvY2FsZS5zdGFydHNXaXRoKFwiZW5cIikgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvYy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seU51bWJlckZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGludGwsIGZvcmNlU2ltcGxlLCBvcHRzKSB7XG4gICAgdGhpcy5wYWRUbyA9IG9wdHMucGFkVG8gfHwgMDtcbiAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTtcblxuICAgIGNvbnN0IHsgcGFkVG8sIGZsb29yLCAuLi5vdGhlck9wdHMgfSA9IG9wdHM7XG5cbiAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaW50bE9wdHMgPSB7IHVzZUdyb3VwaW5nOiBmYWxzZSwgLi4ub3B0cyB9O1xuICAgICAgaWYgKG9wdHMucGFkVG8gPiAwKSBpbnRsT3B0cy5taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG9wdHMucGFkVG87XG4gICAgICB0aGlzLmluZiA9IGdldENhY2hlZElORihpbnRsLCBpbnRsT3B0cyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0KGkpIHtcbiAgICBpZiAodGhpcy5pbmYpIHtcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiBpO1xuICAgICAgcmV0dXJuIHRoaXMuaW5mLmZvcm1hdChmaXhlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRvIG1hdGNoIHRoZSBicm93c2VyJ3MgbnVtYmVyZm9ybWF0dGVyIGRlZmF1bHRzXG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogcm91bmRUbyhpLCAzKTtcbiAgICAgIHJldHVybiBwYWRTdGFydChmaXhlZCwgdGhpcy5wYWRUbyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5RGF0ZUZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGR0LCBpbnRsLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcblxuICAgIGxldCB6O1xuICAgIGlmIChkdC56b25lLmlzVW5pdmVyc2FsKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBtYWtlIGRvLiBUd28gY2FzZXM6XG4gICAgICAgIC8vIDEuIFRoZSBmb3JtYXQgb3B0aW9ucyB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFdlIGNhbid0IGRvIHRoYXQsIHNvIHRoZSBiZXN0XG4gICAgICAgIC8vIHdlIGNhbiBkbyBpcyBmb3JtYXQgdGhlIGRhdGUgaW4gVVRDLlxuICAgICAgICAvLyAyLiBUaGUgZm9ybWF0IG9wdGlvbnMgZG9uJ3QgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBUaGVuIHdlIGNhbiBhZGp1c3QgdGhlbVxuICAgICAgICAvLyB0aGUgdGltZSBhbmQgdGVsbCB0aGUgZm9ybWF0dGVyIHRvIHNob3cgaXQgdG8gdXMgaW4gVVRDLCBzbyB0aGF0IHRoZSB0aW1lIGlzIHJpZ2h0XG4gICAgICAgIC8vIGFuZCB0aGUgYmFkIHpvbmUgZG9lc24ndCBzaG93IHVwLlxuICAgICAgICB6ID0gXCJVVENcIjtcbiAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwic3lzdGVtXCIpIHtcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgeiA9IGR0LnpvbmUubmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRsT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgaWYgKHopIHtcbiAgICAgIGludGxPcHRzLnRpbWVab25lID0gejtcbiAgICB9XG4gICAgdGhpcy5kdGYgPSBnZXRDYWNoZWREVEYoaW50bCwgaW50bE9wdHMpO1xuICB9XG5cbiAgZm9ybWF0KCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXQodGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQb2x5UmVsRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0geyBzdHlsZTogXCJsb25nXCIsIC4uLm9wdHMgfTtcbiAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7XG4gICAgICB0aGlzLnJ0ZiA9IGdldENhY2hlZFJURihpbnRsLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRW5nbGlzaC5mb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIHRoaXMub3B0cy5udW1lcmljLCB0aGlzLm9wdHMuc3R5bGUgIT09IFwibG9uZ1wiKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KSB7XG4gICAgaWYgKHRoaXMucnRmKSB7XG4gICAgICByZXR1cm4gdGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsZSB7XG4gIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7XG4gICAgLy8gdGhlIHN5c3RlbSBsb2NhbGUgaXMgdXNlZnVsIGZvciBodW1hbiByZWFkYWJsZSBzdHJpbmdzIGJ1dCBhbm5veWluZyBmb3IgcGFyc2luZy9mb3JtYXR0aW5nIGtub3duIGZvcm1hdHNcbiAgICBjb25zdCBsb2NhbGVSID0gc3BlY2lmaWVkTG9jYWxlIHx8IChkZWZhdWx0VG9FTiA/IFwiZW4tVVNcIiA6IHN5c3RlbUxvY2FsZSgpKTtcbiAgICBjb25zdCBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gICAgY29uc3Qgb3V0cHV0Q2FsZW5kYXJSID0gb3V0cHV0Q2FsZW5kYXIgfHwgU2V0dGluZ3MuZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTtcbiAgfVxuXG4gIHN0YXRpYyByZXNldENhY2hlKCkge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbiAgICBpbnRsRFRDYWNoZSA9IHt9O1xuICAgIGludGxOdW1DYWNoZSA9IHt9O1xuICAgIGludGxSZWxDYWNoZSA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3QoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgbnVtYmVyaW5nLCBvdXRwdXRDYWxlbmRhciwgc3BlY2lmaWVkTG9jYWxlKSB7XG4gICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpO1xuXG4gICAgdGhpcy5sb2NhbGUgPSBwYXJzZWRMb2NhbGU7XG4gICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmcgfHwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtIHx8IG51bGw7XG4gICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyIHx8IHBhcnNlZE91dHB1dENhbGVuZGFyIHx8IG51bGw7XG4gICAgdGhpcy5pbnRsID0gaW50bENvbmZpZ1N0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIHRoaXMub3V0cHV0Q2FsZW5kYXIpO1xuXG4gICAgdGhpcy53ZWVrZGF5c0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tZXJpZGllbUNhY2hlID0gbnVsbDtcbiAgICB0aGlzLmVyYUNhY2hlID0ge307XG5cbiAgICB0aGlzLnNwZWNpZmllZExvY2FsZSA9IHNwZWNpZmllZExvY2FsZTtcbiAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gbnVsbDtcbiAgfVxuXG4gIGdldCBmYXN0TnVtYmVycygpIHtcbiAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gc3VwcG9ydHNGYXN0TnVtYmVycyh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZDtcbiAgfVxuXG4gIGxpc3RpbmdNb2RlKCkge1xuICAgIGNvbnN0IGlzQWN0dWFsbHlFbiA9IHRoaXMuaXNFbmdsaXNoKCk7XG4gICAgY29uc3QgaGFzTm9XZWlyZG5lc3MgPVxuICAgICAgKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIikgJiZcbiAgICAgICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IFwiZ3JlZ29yeVwiKTtcbiAgICByZXR1cm4gaXNBY3R1YWxseUVuICYmIGhhc05vV2VpcmRuZXNzID8gXCJlblwiIDogXCJpbnRsXCI7XG4gIH1cblxuICBjbG9uZShhbHRzKSB7XG4gICAgaWYgKCFhbHRzIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKFxuICAgICAgICBhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSxcbiAgICAgICAgYWx0cy5udW1iZXJpbmdTeXN0ZW0gfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGFsdHMub3V0cHV0Q2FsZW5kYXIgfHwgdGhpcy5vdXRwdXRDYWxlbmRhcixcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5tb250aHMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXQgPyB7IG1vbnRoOiBsZW5ndGgsIGRheTogXCJudW1lcmljXCIgfSA6IHsgbW9udGg6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7XG4gICAgICAgIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwTW9udGhzKChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcIm1vbnRoXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIHdlZWtkYXlzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLndlZWtkYXlzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0XG4gICAgICAgICAgPyB7IHdlZWtkYXk6IGxlbmd0aCwgeWVhcjogXCJudW1lcmljXCIsIG1vbnRoOiBcImxvbmdcIiwgZGF5OiBcIm51bWVyaWNcIiB9XG4gICAgICAgICAgOiB7IHdlZWtkYXk6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwid2Vla2RheVwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBtZXJpZGllbXMoZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYoXG4gICAgICB0aGlzLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdE9LLFxuICAgICAgKCkgPT4gRW5nbGlzaC5tZXJpZGllbXMsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvXG4gICAgICAgIC8vIGZvciBBTSBhbmQgUE0uIFRoaXMgaXMgcHJvYmFibHkgd3JvbmcsIGJ1dCBpdCdzIG1ha2VzIHBhcnNpbmcgd2F5IGVhc2llci5cbiAgICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBpbnRsID0geyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH07XG4gICAgICAgICAgdGhpcy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChcbiAgICAgICAgICAgIChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImRheXBlcmlvZFwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBlcmFzKGxlbmd0aCwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2guZXJhcywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IHsgZXJhOiBsZW5ndGggfTtcblxuICAgICAgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzXG4gICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLlxuICAgICAgaWYgKCF0aGlzLmVyYUNhY2hlW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcCgoZHQpID0+XG4gICAgICAgICAgdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImVyYVwiKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lcmFDYWNoZVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgZXh0cmFjdChkdCwgaW50bE9wdHMsIGZpZWxkKSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksXG4gICAgICByZXN1bHRzID0gZGYuZm9ybWF0VG9QYXJ0cygpLFxuICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZCk7XG4gICAgcmV0dXJuIG1hdGNoaW5nID8gbWF0Y2hpbmcudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgbnVtYmVyRm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKVxuICAgIC8vIChpbiBjb250cmFzdCwgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbiBpcyB1c2VkIGhlYXZpbHkpXG4gICAgcmV0dXJuIG5ldyBQb2x5TnVtYmVyRm9ybWF0dGVyKHRoaXMuaW50bCwgb3B0cy5mb3JjZVNpbXBsZSB8fCB0aGlzLmZhc3ROdW1iZXJzLCBvcHRzKTtcbiAgfVxuXG4gIGR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5RGF0ZUZvcm1hdHRlcihkdCwgdGhpcy5pbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICByZWxGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5UmVsRm9ybWF0dGVyKHRoaXMuaW50bCwgdGhpcy5pc0VuZ2xpc2goKSwgb3B0cyk7XG4gIH1cblxuICBsaXN0Rm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBnZXRDYWNoZWRMRih0aGlzLmludGwsIG9wdHMpO1xuICB9XG5cbiAgaXNFbmdsaXNoKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gXCJlblwiIHx8XG4gICAgICB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSBcImVuLXVzXCIgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoXCJlbi11c1wiKVxuICAgICk7XG4gIH1cblxuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2NhbGUgPT09IG90aGVyLmxvY2FsZSAmJlxuICAgICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJlxuICAgICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXJcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgdW50cnVuY2F0ZVllYXIsXG4gIHNpZ25lZE9mZnNldCxcbiAgcGFyc2VJbnRlZ2VyLFxuICBwYXJzZU1pbGxpcyxcbiAgaWFuYVJlZ2V4LFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZ1xufSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vKlxuICogVGhpcyBmaWxlIGhhbmRsZXMgcGFyc2luZyBmb3Igd2VsbC1zcGVjaWZpZWQgZm9ybWF0cy4gSGVyZSdzIGhvdyBpdCB3b3JrczpcbiAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLlxuICogQW4gZXh0cmFjdG9yIGlzIGp1c3QgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgcmVnZXggbWF0Y2ggYXJyYXkgYW5kIHJldHVybnMgYSB7IHllYXI6IC4uLiwgbW9udGg6IC4uLiB9IG9iamVjdFxuICogcGFyc2UoKSBkb2VzIHRoZSB3b3JrIG9mIGV4ZWN1dGluZyB0aGUgcmVnZXggYW5kIGFwcGx5aW5nIHRoZSBleHRyYWN0b3IuIEl0IHRha2VzIG11bHRpcGxlIHJlZ2V4L2V4dHJhY3RvciBwYWlycyB0byB0cnkgaW4gc2VxdWVuY2UuXG4gKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgXCJjdXJzb3JcIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy5cbiAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuXG4gKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiBjb21iaW5lUmVnZXhlcyguLi5yZWdleGVzKSB7XG4gIGNvbnN0IGZ1bGwgPSByZWdleGVzLnJlZHVjZSgoZiwgcikgPT4gZiArIHIuc291cmNlLCBcIlwiKTtcbiAgcmV0dXJuIFJlZ0V4cChgXiR7ZnVsbH0kYCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKC4uLmV4dHJhY3RvcnMpIHtcbiAgcmV0dXJuIG0gPT5cbiAgICBleHRyYWN0b3JzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW21lcmdlZFZhbHMsIG1lcmdlZFpvbmUsIGN1cnNvcl0sIGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3ZhbCwgem9uZSwgbmV4dF0gPSBleChtLCBjdXJzb3IpO1xuICAgICAgICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLCAuLi52YWwgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTtcbiAgICAgICAgfSxcbiAgICAgICAgW3t9LCBudWxsLCAxXVxuICAgICAgKVxuICAgICAgLnNsaWNlKDAsIDIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzLCAuLi5wYXR0ZXJucykge1xuICBpZiAocyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3JlZ2V4LCBleHRyYWN0b3JdIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7XG4gICAgaWYgKG0pIHtcbiAgICAgIHJldHVybiBleHRyYWN0b3IobSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbbnVsbCwgbnVsbF07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHtcbiAgcmV0dXJuIChtYXRjaCwgY3Vyc29yKSA9PiB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXQsIG51bGwsIGN1cnNvciArIGldO1xuICB9O1xufVxuXG4vLyBJU08gYW5kIFNRTCBwYXJzaW5nXG5jb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/KS87XG5jb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcXFxbKCR7aWFuYVJlZ2V4LnNvdXJjZX0pXFxcXF0pPyk/YDtcbmNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlsuLF0oXFxkezEsMzB9KSk/KT8pPy87XG5jb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7XG5jb25zdCBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OlQke2lzb1RpbWVSZWdleC5zb3VyY2V9KT9gKTtcbmNvbnN0IGlzb1ltZFJlZ2V4ID0gLyhbKy1dXFxkezZ9fFxcZHs0fSkoPzotPyhcXGRcXGQpKD86LT8oXFxkXFxkKSk/KT8vO1xuY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcXGR7NH0pLT9XKFxcZFxcZCkoPzotPyhcXGQpKT8vO1xuY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcXGR7NH0pLT8oXFxkezN9KS87XG5jb25zdCBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZShcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtEYXlcIik7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZShcInllYXJcIiwgXCJvcmRpbmFsXCIpO1xuY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lXG5jb25zdCBzcWxUaW1lUmVnZXggPSBSZWdFeHAoXG4gIGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSA/KD86JHtvZmZzZXRSZWdleC5zb3VyY2V9fCgke2lhbmFSZWdleC5zb3VyY2V9KSk/YFxuKTtcbmNvbnN0IHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86ICR7c3FsVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuXG5mdW5jdGlvbiBpbnQobWF0Y2gsIHBvcywgZmFsbGJhY2spIHtcbiAgY29uc3QgbSA9IG1hdGNoW3Bvc107XG4gIHJldHVybiBpc1VuZGVmaW5lZChtKSA/IGZhbGxiYWNrIDogcGFyc2VJbnRlZ2VyKG0pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPWW1kKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB5ZWFyOiBpbnQobWF0Y2gsIGN1cnNvciksXG4gICAgbW9udGg6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMSksXG4gICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksXG4gICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSxcbiAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLFxuICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID0gL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICBzLFxuICAgIHllYXJTdHIsXG4gICAgbW9udGhTdHIsXG4gICAgd2Vla1N0cixcbiAgICBkYXlTdHIsXG4gICAgaG91clN0cixcbiAgICBtaW51dGVTdHIsXG4gICAgc2Vjb25kU3RyLFxuICAgIG1pbGxpc2Vjb25kc1N0clxuICBdID0gbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpXG4gICAgfVxuICBdO1xufVxuXG4vLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmtcbi8vIGFuZCBub3QganVzdCB0aGF0IHdlJ3JlIGluIC0yNDAgKnJpZ2h0IG5vdyouIEJ1dCBzaW5jZSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSB1c2VkIHRoYXQgb2Z0ZW5cbi8vIEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSB0aGF0XG5jb25zdCBvYnNPZmZzZXRzID0ge1xuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpXG4gIH07XG5cbiAgaWYgKHNlY29uZFN0cikgcmVzdWx0LnNlY29uZCA9IHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpO1xuICBpZiAod2Vla2RheVN0cikge1xuICAgIHJlc3VsdC53ZWVrZGF5ID1cbiAgICAgIHdlZWtkYXlTdHIubGVuZ3RoID4gM1xuICAgICAgICA/IEVuZ2xpc2gud2Vla2RheXNMb25nLmluZGV4T2Yod2Vla2RheVN0cikgKyAxXG4gICAgICAgIDogRW5nbGlzaC53ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUkZDIDI4MjIvNTMyMlxuY29uc3QgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxkXFxkKShcXGRcXGQpKSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgICAgLFxuICAgICAgd2Vla2RheVN0cixcbiAgICAgIGRheVN0cixcbiAgICAgIG1vbnRoU3RyLFxuICAgICAgeWVhclN0cixcbiAgICAgIGhvdXJTdHIsXG4gICAgICBtaW51dGVTdHIsXG4gICAgICBzZWNvbmRTdHIsXG4gICAgICBvYnNPZmZzZXQsXG4gICAgICBtaWxPZmZzZXQsXG4gICAgICBvZmZIb3VyU3RyLFxuICAgICAgb2ZmTWludXRlU3RyXG4gICAgXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcblxuICBsZXQgb2Zmc2V0O1xuICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICB9IGVsc2UgaWYgKG1pbE9mZnNldCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIilcbiAgICAudHJpbSgpO1xufVxuXG4vLyBodHRwIGRhdGVcblxuY29uc3QgcmZjMTEyMyA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXGRcXGQpIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxcZHs0fSkgKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkgR01UJC8sXG4gIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBcXGR8XFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSAoXFxkezR9KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMTEyM09yODUwKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIGRheVN0ciwgbW9udGhTdHIsIHllYXJTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBU0NJSShtYXRjaCkge1xuICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgeWVhclN0cl0gPSBtYXRjaCxcbiAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7XG4gIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdO1xufVxuXG5jb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpO1xuXG5jb25zdCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPWW1kLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09XZWVrRGF0YSxcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT09yZGluYWxEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuLypcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLFxuICAgIFtpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZV0sXG4gICAgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykge1xuICByZXR1cm4gcGFyc2UocHJlcHJvY2Vzc1JGQzI4MjIocyksIFtyZmMyODIyLCBleHRyYWN0UkZDMjgyMl0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVFRQRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbcmZjODUwLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbYXNjaWksIGV4dHJhY3RBU0NJSV1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRHVyYXRpb24ocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb0R1cmF0aW9uLCBleHRyYWN0SVNPRHVyYXRpb25dKTtcbn1cblxuY29uc3QgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pO1xufVxuXG5jb25zdCBzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsWW1kUmVnZXgsIHNxbFRpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU1FMKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3NxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbc3FsVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmVdXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIER1cmF0aW9uXCI7XG5cbi8vIHVuaXQgY29udmVyc2lvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBsb3dPcmRlck1hdHJpeCA9IHtcbiAgICB3ZWVrczoge1xuICAgICAgZGF5czogNyxcbiAgICAgIGhvdXJzOiA3ICogMjQsXG4gICAgICBtaW51dGVzOiA3ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgZGF5czoge1xuICAgICAgaG91cnM6IDI0LFxuICAgICAgbWludXRlczogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIGhvdXJzOiB7IG1pbnV0ZXM6IDYwLCBzZWNvbmRzOiA2MCAqIDYwLCBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwIH0sXG4gICAgbWludXRlczogeyBzZWNvbmRzOiA2MCwgbWlsbGlzZWNvbmRzOiA2MCAqIDEwMDAgfSxcbiAgICBzZWNvbmRzOiB7IG1pbGxpc2Vjb25kczogMTAwMCB9LFxuICB9LFxuICBjYXN1YWxNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiA1MixcbiAgICAgIGRheXM6IDM2NSxcbiAgICAgIGhvdXJzOiAzNjUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDM2NSAqIDI0ICogNjAsXG4gICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBxdWFydGVyczoge1xuICAgICAgbW9udGhzOiAzLFxuICAgICAgd2Vla3M6IDEzLFxuICAgICAgZGF5czogOTEsXG4gICAgICBob3VyczogOTEgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDkxICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgIHdlZWtzOiA0LFxuICAgICAgZGF5czogMzAsXG4gICAgICBob3VyczogMzAgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDMwICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcblxuICAgIC4uLmxvd09yZGVyTWF0cml4LFxuICB9LFxuICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCxcbiAgZGF5c0luTW9udGhBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDgwMCxcbiAgYWNjdXJhdGVNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0LFxuICAgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogZGF5c0luWWVhckFjY3VyYXRlIC8gMjgsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LFxuICAgICAgaG91cnM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCkgLyA0LFxuICAgICAgbWludXRlczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjApIC8gNCxcbiAgICAgIHNlY29uZHM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjApIC8gNCxcbiAgICAgIG1pbGxpc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDApIC8gNCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luTW9udGhBY2N1cmF0ZSxcbiAgICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH07XG5cbi8vIHVuaXRzIG9yZGVyZWQgYnkgc2l6ZVxuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1xuICBcInllYXJzXCIsXG4gIFwicXVhcnRlcnNcIixcbiAgXCJtb250aHNcIixcbiAgXCJ3ZWVrc1wiLFxuICBcImRheXNcIixcbiAgXCJob3Vyc1wiLFxuICBcIm1pbnV0ZXNcIixcbiAgXCJzZWNvbmRzXCIsXG4gIFwibWlsbGlzZWNvbmRzXCIsXG5dO1xuXG5jb25zdCByZXZlcnNlVW5pdHMgPSBvcmRlcmVkVW5pdHMuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMgXCJjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBqdXN0IGxpa2UgdGhpcyBvbmUsIGJ1dCB3aXRoIHRoZXNlIGNoYW5nZXNcIlxuZnVuY3Rpb24gY2xvbmUoZHVyLCBhbHRzLCBjbGVhciA9IGZhbHNlKSB7XG4gIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHNcbiAgY29uc3QgY29uZiA9IHtcbiAgICB2YWx1ZXM6IGNsZWFyID8gYWx0cy52YWx1ZXMgOiB7IC4uLmR1ci52YWx1ZXMsIC4uLihhbHRzLnZhbHVlcyB8fCB7fSkgfSxcbiAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLFxuICAgIGNvbnZlcnNpb25BY2N1cmFjeTogYWx0cy5jb252ZXJzaW9uQWNjdXJhY3kgfHwgZHVyLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gYW50aVRydW5jKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTWF0aC5mbG9vcihuKSA6IE1hdGguY2VpbChuKTtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gY29udmVydChtYXRyaXgsIGZyb21NYXAsIGZyb21Vbml0LCB0b01hcCwgdG9Vbml0KSB7XG4gIGNvbnN0IGNvbnYgPSBtYXRyaXhbdG9Vbml0XVtmcm9tVW5pdF0sXG4gICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LFxuICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSxcbiAgICAvLyBvaywgc28gdGhpcyBpcyB3aWxkLCBidXQgc2VlIHRoZSBtYXRyaXggaW4gdGhlIHRlc3RzXG4gICAgYWRkZWQgPVxuICAgICAgIXNhbWVTaWduICYmIHRvTWFwW3RvVW5pdF0gIT09IDAgJiYgTWF0aC5hYnMocmF3KSA8PSAxID8gYW50aVRydW5jKHJhdykgOiBNYXRoLnRydW5jKHJhdyk7XG4gIHRvTWFwW3RvVW5pdF0gKz0gYWRkZWQ7XG4gIGZyb21NYXBbZnJvbVVuaXRdIC09IGFkZGVkICogY29udjtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykge1xuICByZXZlcnNlVW5pdHMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uI2Zyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24jZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGFjY3VyYXRlID8gXCJsb25ndGVybVwiIDogXCJjYXN1YWxcIjtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIER1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IGNvdW50IH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLlxuICAgKiBJZiB0aGlzIG9iamVjdCBpcyBlbXB0eSB0aGVuIGEgemVybyBtaWxsaXNlY29uZHMgZHVyYXRpb24gaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoucXVhcnRlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3Vyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz1bXV0gLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgRHVyYXRpb24uZnJvbU9iamVjdDogYXJndW1lbnQgZXhwZWN0ZWQgdG8gYmUgYW4gb2JqZWN0LCBnb3QgJHtcbiAgICAgICAgICBvYmogPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBvYmpcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7XG4gICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICAgIGNvbnZlcnNpb25BY2N1cmFjeTogb3B0cy5jb252ZXJzaW9uQWNjdXJhY3ksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQVDIzSCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyMyB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1A1WTNNJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDUsIG1vbnRoczogMyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMToyMjozMy40NDQnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDIyLCBzZWNvbmRzOiAzMywgbWlsbGlzZWNvbmRzOiA0NDQgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT1RpbWVPbmx5KHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgZGF0ZXRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRHVyYXRpb25FcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgIHllYXI6IFwieWVhcnNcIixcbiAgICAgIHllYXJzOiBcInllYXJzXCIsXG4gICAgICBxdWFydGVyOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBxdWFydGVyczogXCJxdWFydGVyc1wiLFxuICAgICAgbW9udGg6IFwibW9udGhzXCIsXG4gICAgICBtb250aHM6IFwibW9udGhzXCIsXG4gICAgICB3ZWVrOiBcIndlZWtzXCIsXG4gICAgICB3ZWVrczogXCJ3ZWVrc1wiLFxuICAgICAgZGF5OiBcImRheXNcIixcbiAgICAgIGRheXM6IFwiZGF5c1wiLFxuICAgICAgaG91cjogXCJob3Vyc1wiLFxuICAgICAgaG91cnM6IFwiaG91cnNcIixcbiAgICAgIG1pbnV0ZTogXCJtaW51dGVzXCIsXG4gICAgICBtaW51dGVzOiBcIm1pbnV0ZXNcIixcbiAgICAgIHNlY29uZDogXCJzZWNvbmRzXCIsXG4gICAgICBzZWNvbmRzOiBcInNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdO1xuXG4gICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNEdXJhdGlvbihvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkR1cmF0aW9uKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgIHRoZSBsb2NhbGUgb2YgYSBEdXJhdGlvbiwgc3VjaCAnZW4tR0InXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIER1cmF0aW9uLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIER1cmF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOlxuICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzXG4gICAqICogYHNgIGZvciBzZWNvbmRzXG4gICAqICogYG1gIGZvciBtaW51dGVzXG4gICAqICogYGhgIGZvciBob3Vyc1xuICAgKiAqIGBkYCBmb3IgZGF5c1xuICAgKiAqIGB3YCBmb3Igd2Vla3NcbiAgICogKiBgTWAgZm9yIG1vbnRoc1xuICAgKiAqIGB5YCBmb3IgeWVhcnNcbiAgICogTm90ZXM6XG4gICAqICogQWRkIHBhZGRpbmcgYnkgcmVwZWF0aW5nIHRoZSB0b2tlbiwgZS5nLiBcInl5XCIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgXCJoaGhoXCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzXG4gICAqICogVG9rZW5zIGNhbiBiZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICogKiBUaGUgZHVyYXRpb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHNldCBvZiB1bml0cyBpbiB0aGUgZm9ybWF0IHN0cmluZyB1c2luZyB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30gYW5kIHRoZSBEdXJhdGlvbnMncyBjb252ZXJzaW9uIGFjY3VyYWN5IHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbG9vcj10cnVlXSAtIGZsb29yIG51bWVyaWNhbCB2YWx1ZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieSBkIHNcIikgLy89PiBcIjEgNiAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieXkgZGQgc3NzXCIpIC8vPT4gXCIwMSAwNiAwMDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJNIFNcIikgLy89PiBcIjEyIDUxODQwMjAwMFwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZtdE9wdHMgPSB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC5cbiAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0XG4gICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KVxuICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnXG4gICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiBcImxvbmdcIiB9KSAvLz0+ICcxIGRheSwgNSBob3VycywgYW5kIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogXCJzaG9ydFwiIH0pIC8vPT4gJzEgZGF5LCA1IGhyLCA2IG1pbidcbiAgICogYGBgXG4gICAqL1xuICB0b0h1bWFuKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGwgPSBvcmRlcmVkVW5pdHNcbiAgICAgIC5tYXAoKHVuaXQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZXNbdW5pdF07XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAgICAgLm51bWJlckZvcm1hdHRlcih7IHN0eWxlOiBcInVuaXRcIiwgdW5pdERpc3BsYXk6IFwibG9uZ1wiLCAuLi5vcHRzLCB1bml0OiB1bml0LnNsaWNlKDAsIC0xKSB9KVxuICAgICAgICAgIC5mb3JtYXQodmFsKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChuKSA9PiBuKTtcblxuICAgIHJldHVybiB0aGlzLmxvY1xuICAgICAgLmxpc3RGb3JtYXR0ZXIoeyB0eXBlOiBcImNvbmp1bmN0aW9uXCIsIHN0eWxlOiBvcHRzLmxpc3RTdHlsZSB8fCBcIm5hcnJvd1wiLCAuLi5vcHRzIH0pXG4gICAgICAuZm9ybWF0KGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHRvT2JqZWN0KCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHsgLi4udGhpcy52YWx1ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAzLCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1AzWVQ0NVMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDQsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDRNVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNSB9KS50b0lTTygpIC8vPT4gJ1A1TSdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDUgfSkudG9JU08oKSAvLz0+ICdQVDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiA2IH0pLnRvSVNPKCkgLy89PiAnUFQwLjAwNlMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKCkge1xuICAgIC8vIHdlIGNvdWxkIHVzZSB0aGUgZm9ybWF0dGVyLCBidXQgdGhpcyBpcyBhbiBlYXNpZXIgd2F5IHRvIGdldCB0aGUgbWluaW11bSBzdHJpbmdcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgcyA9IFwiUFwiO1xuICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyBcIllcIjtcbiAgICBpZiAodGhpcy5tb250aHMgIT09IDAgfHwgdGhpcy5xdWFydGVycyAhPT0gMCkgcyArPSB0aGlzLm1vbnRocyArIHRoaXMucXVhcnRlcnMgKiAzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArIFwiV1wiO1xuICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgXCJEXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDAgfHwgdGhpcy5taW51dGVzICE9PSAwIHx8IHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIHMgKz0gXCJUXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHMgKz0gdGhpcy5ob3VycyArIFwiSFwiO1xuICAgIGlmICh0aGlzLm1pbnV0ZXMgIT09IDApIHMgKz0gdGhpcy5taW51dGVzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIC8vIHRoaXMgd2lsbCBoYW5kbGUgXCJmbG9hdGluZyBwb2ludCBtYWRuZXNzXCIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXNcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlblxuICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyBcIlNcIjtcbiAgICBpZiAocyA9PT0gXCJQXCIpIHMgKz0gXCJUMFNcIjtcbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiwgZm9ybWF0dGVkIGFzIGEgdGltZSBvZiBkYXkuXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQsIG5lZ2F0aXZlLCBvciBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMjQgaG91cnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVQcmVmaXg9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgYFRgIHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoKSAvLz0+ICcxMTowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NNaWxsaXNlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDA6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NTZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTEwMDAwLjAwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTtcbiAgICBpZiAobWlsbGlzIDwgMCB8fCBtaWxsaXMgPj0gODY0MDAwMDApIHJldHVybiBudWxsO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsXG4gICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSxcbiAgICAgIGZvcm1hdDogXCJleHRlbmRlZFwiLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNoaWZ0VG8oXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpO1xuXG4gICAgbGV0IGZtdCA9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcImhobW1cIiA6IFwiaGg6bW1cIjtcblxuICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gXCJiYXNpY1wiID8gXCJzc1wiIDogXCI6c3NcIjtcbiAgICAgIGlmICghb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcyB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgICAgZm10ICs9IFwiLlNTU1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdHIgPSB2YWx1ZS50b0Zvcm1hdChmbXQpO1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkge1xuICAgICAgc3RyID0gXCJUXCIgKyBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXMoXCJtaWxsaXNlY29uZHNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdGhpcyBEdXJhdGlvbiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cyh4ID0+IHggKiAyKSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDYwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cygoeCwgdSkgPT4gdSA9PT0gXCJob3VyXCIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1hcFVuaXRzKGZuKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJlc3VsdFtrXSA9IGFzTnVtYmVyKGZuKHRoaXMudmFsdWVzW2tdLCBrKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gM1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW0R1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pXG4gICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSlcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbWl4ZWQgPSB7IC4uLnRoaXMudmFsdWVzLCAuLi5ub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSB9O1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbWl4ZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlIGFuZC9vciBudW1iZXJpbmdTeXN0ZW0uICBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIGR1ci5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNvbnZlcnNpb25BY2N1cmFjeSB9ID0ge30pIHtcbiAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtIH0pLFxuICAgICAgb3B0cyA9IHsgbG9jIH07XG5cbiAgICBpZiAoY29udmVyc2lvbkFjY3VyYWN5KSB7XG4gICAgICBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGNvbnZlcnNpb25BY2N1cmFjeTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlcycgb3IgJ2RheXMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ2RheXMnKSAvLz0+IDM2NVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdtb250aHMnKSAvLz0+IDEyXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe2hvdXJzOiA2MH0pLmFzKCdkYXlzJykgLy89PiAyLjVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgYXModW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnNoaWZ0VG8odW5pdCkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBub3JtYWxpemUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCB2YWxzKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIHBsdXMgYW55dGhpbmcgZnVydGhlciBkb3duIHRoZSBjaGFpbiB0aGF0IHNob3VsZCBiZSByb2xsZWQgdXAgaW4gdG8gdGhpc1xuICAgICAgICBmb3IgKGNvbnN0IGRvd24gaW4gdmFscykge1xuICAgICAgICAgIGlmIChvcmRlcmVkVW5pdHMuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cy5pbmRleE9mKGspKSB7XG4gICAgICAgICAgICBjb252ZXJ0KHRoaXMubWF0cml4LCB2YWxzLCBkb3duLCBidWlsdCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKS5ub3JtYWxpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5lZ2F0aXZlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkubmVnYXRlKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IC0xLCBzZWNvbmRzOiAtMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5lZ2F0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbmVnYXRlZCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbmVnYXRlZCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aHMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGhzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWtzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXlzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlcy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGVzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnNcbiAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEdXJhdGlvbnMgYXJlIGVxdWFsIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdW5pdHMgYW5kIHRoZSBzYW1lIHZhbHVlcyBmb3IgZWFjaCB1bml0LlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7XG4gICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWxcbiAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDtcbiAgICAgIHJldHVybiB2MSA9PT0gdjI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKCFlcSh0aGlzLnZhbHVlc1t1XSwgb3RoZXIudmFsdWVzW3VdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgSW50ZXJ2YWxcIjtcblxuLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZFxuZnVuY3Rpb24gdmFsaWRhdGVTdGFydEVuZChzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQgfHwgIXN0YXJ0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFwiKTtcbiAgfSBlbHNlIGlmICghZW5kIHx8ICFlbmQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIGVuZFwiKTtcbiAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFxuICAgICAgXCJlbmQgYmVmb3JlIHN0YXJ0XCIsXG4gICAgICBgVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9JHtzdGFydC50b0lTTygpfSBhbmQgZW5kPSR7ZW5kLnRvSVNPKCl9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBJbnRlcnZhbDpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYW4gSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZnJvbURhdGVUaW1lc30sIHtAbGluayBJbnRlcnZhbCNhZnRlcn0sIHtAbGluayBJbnRlcnZhbCNiZWZvcmV9LCBvciB7QGxpbmsgSW50ZXJ2YWwjZnJvbUlTT30uXG4gKiAqICoqQWNjZXNzb3JzKiogVXNlIHtAbGluayBJbnRlcnZhbCNzdGFydH0gYW5kIHtAbGluayBJbnRlcnZhbCNlbmR9IHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZC5cbiAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgb3RoZXIgSW50ZXJ2YWxzIG91dCBvZiB0aGlzIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNzZXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRBdH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEJ5fSwge0BsaW5rIEludGVydmFsI2RpdmlkZUVxdWFsbHl9LCB7QGxpbmsgSW50ZXJ2YWwjbWVyZ2V9LCB7QGxpbmsgSW50ZXJ2YWwjeG9yfSwge0BsaW5rIEludGVydmFsI3VuaW9ufSwge0BsaW5rIEludGVydmFsI2ludGVyc2VjdGlvbn0sIG9yIHtAbGluayBJbnRlcnZhbCNkaWZmZXJlbmNlfS5cbiAqICogKipDb21wYXJpc29uKiogVG8gY29tcGFyZSB0aGlzIEludGVydmFsIHRvIGFub3RoZXIgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI2VxdWFsc30sIHtAbGluayBJbnRlcnZhbCNvdmVybGFwc30sIHtAbGluayBJbnRlcnZhbCNhYnV0c1N0YXJ0fSwge0BsaW5rIEludGVydmFsI2FidXRzRW5kfSwge0BsaW5rIEludGVydmFsI2VuZ3VsZnN9XG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVydmFsIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lID0gY29uZmlnLmVuZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSW50ZXJ2YWxFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksXG4gICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlRXJyb3IgPSB2YWxpZGF0ZVN0YXJ0RW5kKGJ1aWx0U3RhcnQsIGJ1aWx0RW5kKTtcblxuICAgIGlmICh2YWxpZGF0ZUVycm9yID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoe1xuICAgICAgICBzdGFydDogYnVpbHRTdGFydCxcbiAgICAgICAgZW5kOiBidWlsdEVuZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYWZ0ZXIoc3RhcnQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBiZWZvcmUoZW5kLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQubWludXMoZHVyKSwgZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy5cbiAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3MsIGVdID0gKHRleHQgfHwgXCJcIikuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmIChzICYmIGUpIHtcbiAgICAgIGxldCBzdGFydCwgc3RhcnRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnQgPSBEYXRlVGltZS5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGFydElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuZCA9IERhdGVUaW1lLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGVuZElzVmFsaWQgPSBlbmQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmFmdGVyKHN0YXJ0LCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNJbnRlcnZhbChvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkludGVydmFsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IHN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnMgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IGVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbiA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgbGVuZ3RoKHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbiguLi5bdW5pdF0pLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC5cbiAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknXG4gICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLFxuICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKSxcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaSA9IDA7XG5cbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLFxuICAgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHNtYWxsZXIgSW50ZXJ2YWxzLCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLlxuICAgKiBMZWZ0IG92ZXIgdGltZSBpcyBncm91cGVkIGludG8gYSBzbWFsbGVyIGludGVydmFsXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgbGVuZ3RoIG9mIGVhY2ggcmVzdWx0aW5nIGludGVydmFsLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QnkoZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoXCJtaWxsaXNlY29uZHNcIikgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaWR4ID0gMSxcbiAgICAgIG5leHQ7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5zdGFydC5wbHVzKGR1ci5tYXBVbml0cygoeCkgPT4geCAqIGlkeCkpO1xuICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZQYXJ0cyAtIFRoZSBudW1iZXIgb2YgSW50ZXJ2YWxzIHRvIGRpdmlkZSB0aGUgSW50ZXJ2YWwgaW50by5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaXZpZGVFcXVhbGx5KG51bWJlck9mUGFydHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgc3BlY2lmaWVkIEludGVydmFsXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBvdmVybGFwcyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmUgPiBvdGhlci5zICYmIHRoaXMucyA8IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c1N0YXJ0KG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK3RoaXMuZSA9PT0gK290aGVyLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c0VuZChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgZW5ndWxmcyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZW5ndWxmcyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5lcXVhbHMob3RoZXIucykgJiYgdGhpcy5lLmVxdWFscyhvdGhlci5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWF4aW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWluaW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHksIG1lYW5pbmcsIHRoZSBpbnRlcnZhbHMgZG9uJ3QgaW50ZXJzZWN0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIGludGVyc2VjdGlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zID4gb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG5cbiAgICBpZiAocyA+PSBlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW5pb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA8IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuXG4gICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJnZShpbnRlcnZhbHMpIHtcbiAgICBjb25zdCBbZm91bmQsIGZpbmFsXSA9IGludGVydmFsc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGEucyAtIGIucylcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbc29mYXIsIGN1cnJlbnRdLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3ZlcmxhcHMoaXRlbSkgfHwgY3VycmVudC5hYnV0c1N0YXJ0KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2Zhci5jb25jYXQoW2N1cnJlbnRdKSwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbW10sIG51bGxdXG4gICAgICApO1xuICAgIGlmIChmaW5hbCkge1xuICAgICAgZm91bmQucHVzaChmaW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHhvcihpbnRlcnZhbHMpIHtcbiAgICBsZXQgc3RhcnQgPSBudWxsLFxuICAgICAgY3VycmVudENvdW50ID0gMDtcbiAgICBjb25zdCByZXN1bHRzID0gW10sXG4gICAgICBlbmRzID0gaW50ZXJ2YWxzLm1hcCgoaSkgPT4gW1xuICAgICAgICB7IHRpbWU6IGkucywgdHlwZTogXCJzXCIgfSxcbiAgICAgICAgeyB0aW1lOiBpLmUsIHR5cGU6IFwiZVwiIH0sXG4gICAgICBdKSxcbiAgICAgIGZsYXR0ZW5lZCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4uZW5kcyksXG4gICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcblxuICAgIGZvciAoY29uc3QgaSBvZiBhcnIpIHtcbiAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09IFwic1wiID8gMSA6IC0xO1xuXG4gICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7XG4gICAgICAgIHN0YXJ0ID0gaS50aW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgc3BhbiBvZiB0aW1lIGluIHRoaXMgSW50ZXJ2YWwgdGhhdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpZmZlcmVuY2UoLi4uaW50ZXJ2YWxzKSB7XG4gICAgcmV0dXJuIEludGVydmFsLnhvcihbdGhpc10uY29uY2F0KGludGVydmFscykpXG4gICAgICAubWFwKChpKSA9PiB0aGlzLmludGVyc2VjdGlvbihpKSlcbiAgICAgIC5maWx0ZXIoKGkpID0+IGkgJiYgIWkuaXNFbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IC0gdGhlIGZvcm1hdCBzdHJpbmcuIFRoaXMgc3RyaW5nIGZvcm1hdHMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZS4gU2VlIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0gZm9yIGRldGFpbHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcgXHUyMDEzICddIC0gYSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCByZXByZXNlbnRhdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiBcdTIwMTMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwgImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vaW1wbC91dGlsLmpzXCI7XG5cbi8qKlxuICogVGhlIEluZm8gY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgZ2VuZXJhbCB0aW1lIGFuZCBkYXRlIHJlbGF0ZWQgZGF0YS4gRm9yIGV4YW1wbGUsIGl0IGhhcyBtZXRob2RzIGZvciBmaW5kaW5nIG91dCBpZiBhIHRpbWUgem9uZSBoYXMgYSBEU1QsIGZvciBsaXN0aW5nIHRoZSBtb250aHMgaW4gYW55IHN1cHBvcnRlZCBsb2NhbGUsIGFuZCBmb3IgZGlzY292ZXJpbmcgd2hpY2ggb2YgTHV4b24gZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5mbyB7XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBoYXNEU1Qoem9uZSA9IFNldHRpbmdzLmRlZmF1bHRab25lKSB7XG4gICAgY29uc3QgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7IG1vbnRoOiAxMiB9KTtcblxuICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7IG1vbnRoOiA2IH0pLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgaXMgYSB2YWxpZCBJQU5BIHNwZWNpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBab25lIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZElBTkFab25lKHpvbmUpIHtcbiAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFpvbmUoem9uZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuXG4gICAqXG4gICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2VcbiAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lXG4gICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0XG4gICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkXG4gICAqIEByZXR1cm4ge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplWm9uZShpbnB1dCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgbW9udGggbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcpWzBdIC8vPT4gJ0phbidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnKVswXSAvLz0+ICcxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAnXHUwNjYxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbG9uZycsIHsgb3V0cHV0Q2FsZW5kYXI6ICdpc2xhbWljJyB9KVswXSAvLz0+ICdSYWJpXHUwMkJCIEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MkJcdTA2NDZcdTA2NEFcdTA2NDYnXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHdlZWtkYXlzKGxlbmd0aCA9IFwibG9uZ1wiLCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLlxuICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgbWVyaWRpZW1zLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoKSAvLz0+IFsgJ0FNJywgJ1BNJyBdXG4gICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKHsgbG9jYWxlOiAnbXknIH0pIC8vPT4gWyAnXHUxMDE0XHUxMDM2XHUxMDE0XHUxMDAwXHUxMDNBJywgJ1x1MTAwQVx1MTAxNFx1MTAzMScgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJpZGllbXMoeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwic2hvcnRcIiBvciBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSlx1MDBFOXN1cy1DaHJpc3QnLCAnYXByXHUwMEU4cyBKXHUwMEU5c3VzLUNocmlzdCcgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBlcmFzKGxlbmd0aCA9IFwic2hvcnRcIiwgeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgXCJncmVnb3J5XCIpLmVyYXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICogU29tZSBmZWF0dXJlcyBvZiBMdXhvbiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgZW52aXJvbm1lbnRzLiBGb3IgZXhhbXBsZSwgb24gb2xkZXIgYnJvd3NlcnMsIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRoZSBjYXNlLlxuICAgKiBLZXlzOlxuICAgKiAqIGByZWxhdGl2ZWA6IHdoZXRoZXIgdGhpcyBlbnZpcm9ubWVudCBzdXBwb3J0cyByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmdcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCkgfTtcbiAgfVxufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikge1xuICBjb25zdCB1dGNEYXlTdGFydCA9IChkdCkgPT4gZHQudG9VVEMoMCwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLFxuICAgIG1zID0gdXRjRGF5U3RhcnQobGF0ZXIpIC0gdXRjRGF5U3RhcnQoZWFybGllcik7XG4gIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKFwiZGF5c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7XG4gIGNvbnN0IGRpZmZlcnMgPSBbXG4gICAgW1wieWVhcnNcIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sXG4gICAgW1wicXVhcnRlcnNcIiwgKGEsIGIpID0+IGIucXVhcnRlciAtIGEucXVhcnRlcl0sXG4gICAgW1wibW9udGhzXCIsIChhLCBiKSA9PiBiLm1vbnRoIC0gYS5tb250aCArIChiLnllYXIgLSBhLnllYXIpICogMTJdLFxuICAgIFtcbiAgICAgIFwid2Vla3NcIixcbiAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkYXlEaWZmKGEsIGIpO1xuICAgICAgICByZXR1cm4gKGRheXMgLSAoZGF5cyAlIDcpKSAvIDc7XG4gICAgICB9LFxuICAgIF0sXG4gICAgW1wiZGF5c1wiLCBkYXlEaWZmXSxcbiAgXTtcblxuICBjb25zdCByZXN1bHRzID0ge307XG4gIGxldCBsb3dlc3RPcmRlciwgaGlnaFdhdGVyO1xuXG4gIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykge1xuICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHtcbiAgICAgIGxvd2VzdE9yZGVyID0gdW5pdDtcblxuICAgICAgbGV0IGRlbHRhID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIH0pO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIC0gMSB9KTtcbiAgICAgICAgZGVsdGEgLT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnNvciA9IGhpZ2hXYXRlcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykge1xuICBsZXQgW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl0gPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpO1xuXG4gIGNvbnN0IHJlbWFpbmluZ01pbGxpcyA9IGxhdGVyIC0gY3Vyc29yO1xuXG4gIGNvbnN0IGxvd2VyT3JkZXJVbml0cyA9IHVuaXRzLmZpbHRlcihcbiAgICAodSkgPT4gW1wiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXS5pbmRleE9mKHUpID49IDBcbiAgKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChoaWdoV2F0ZXIgPCBsYXRlcikge1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbbG93ZXN0T3JkZXJdOiAxIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikge1xuICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7XG5cbiAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMocmVtYWluaW5nTWlsbGlzLCBvcHRzKVxuICAgICAgLnNoaWZ0VG8oLi4ubG93ZXJPcmRlclVuaXRzKVxuICAgICAgLnBsdXMoZHVyYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxufVxuIiwgImNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7XG4gIGFyYWI6IFwiW1xcdTA2NjAtXFx1MDY2OV1cIixcbiAgYXJhYmV4dDogXCJbXFx1MDZGMC1cXHUwNkY5XVwiLFxuICBiYWxpOiBcIltcXHUxQjUwLVxcdTFCNTldXCIsXG4gIGJlbmc6IFwiW1xcdTA5RTYtXFx1MDlFRl1cIixcbiAgZGV2YTogXCJbXFx1MDk2Ni1cXHUwOTZGXVwiLFxuICBmdWxsd2lkZTogXCJbXFx1RkYxMC1cXHVGRjE5XVwiLFxuICBndWpyOiBcIltcXHUwQUU2LVxcdTBBRUZdXCIsXG4gIGhhbmlkZWM6IFwiW1x1MzAwN3xcdTRFMDB8XHU0RThDfFx1NEUwOXxcdTU2REJ8XHU0RTk0fFx1NTE2RHxcdTRFMDN8XHU1MTZCfFx1NEU1RF1cIixcbiAga2htcjogXCJbXFx1MTdFMC1cXHUxN0U5XVwiLFxuICBrbmRhOiBcIltcXHUwQ0U2LVxcdTBDRUZdXCIsXG4gIGxhb286IFwiW1xcdTBFRDAtXFx1MEVEOV1cIixcbiAgbGltYjogXCJbXFx1MTk0Ni1cXHUxOTRGXVwiLFxuICBtbHltOiBcIltcXHUwRDY2LVxcdTBENkZdXCIsXG4gIG1vbmc6IFwiW1xcdTE4MTAtXFx1MTgxOV1cIixcbiAgbXltcjogXCJbXFx1MTA0MC1cXHUxMDQ5XVwiLFxuICBvcnlhOiBcIltcXHUwQjY2LVxcdTBCNkZdXCIsXG4gIHRhbWxkZWM6IFwiW1xcdTBCRTYtXFx1MEJFRl1cIixcbiAgdGVsdTogXCJbXFx1MEM2Ni1cXHUwQzZGXVwiLFxuICB0aGFpOiBcIltcXHUwRTUwLVxcdTBFNTldXCIsXG4gIHRpYnQ6IFwiW1xcdTBGMjAtXFx1MEYyOV1cIixcbiAgbGF0bjogXCJcXFxcZFwiLFxufTtcblxuY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0ge1xuICBhcmFiOiBbMTYzMiwgMTY0MV0sXG4gIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSxcbiAgYmFsaTogWzY5OTIsIDcwMDFdLFxuICBiZW5nOiBbMjUzNCwgMjU0M10sXG4gIGRldmE6IFsyNDA2LCAyNDE1XSxcbiAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLFxuICBndWpyOiBbMjc5MCwgMjc5OV0sXG4gIGtobXI6IFs2MTEyLCA2MTIxXSxcbiAga25kYTogWzMzMDIsIDMzMTFdLFxuICBsYW9vOiBbMzc5MiwgMzgwMV0sXG4gIGxpbWI6IFs2NDcwLCA2NDc5XSxcbiAgbWx5bTogWzM0MzAsIDM0MzldLFxuICBtb25nOiBbNjE2MCwgNjE2OV0sXG4gIG15bXI6IFs0MTYwLCA0MTY5XSxcbiAgb3J5YTogWzI5MTgsIDI5MjddLFxuICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sXG4gIHRlbHU6IFszMTc0LCAzMTgzXSxcbiAgdGhhaTogWzM2NjQsIDM2NzNdLFxuICB0aWJ0OiBbMzg3MiwgMzg4MV0sXG59O1xuXG5jb25zdCBoYW5pZGVjQ2hhcnMgPSBudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMucmVwbGFjZSgvW1xcW3xcXF1dL2csIFwiXCIpLnNwbGl0KFwiXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEaWdpdHMoc3RyKSB7XG4gIGxldCB2YWx1ZSA9IHBhcnNlSW50KHN0ciwgMTApO1xuICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIGlmIChzdHJbaV0uc2VhcmNoKG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYykgIT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9IGhhbmlkZWNDaGFycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBudW1iZXJpbmdTeXN0ZW1zVVRGMTYpIHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gbnVtYmVyaW5nU3lzdGVtc1VURjE2W2tleV07XG4gICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBjb2RlIC0gbWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0UmVnZXgoeyBudW1iZXJpbmdTeXN0ZW0gfSwgYXBwZW5kID0gXCJcIikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW251bWJlcmluZ1N5c3RlbSB8fCBcImxhdG5cIl19JHthcHBlbmR9YCk7XG59XG4iLCAiaW1wb3J0IHsgcGFyc2VNaWxsaXMsIGlzVW5kZWZpbmVkLCB1bnRydW5jYXRlWWVhciwgc2lnbmVkT2Zmc2V0LCBoYXNPd25Qcm9wZXJ0eSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCB7IGRpZ2l0UmVnZXgsIHBhcnNlRGlnaXRzIH0gZnJvbSBcIi4vZGlnaXRzLmpzXCI7XG5pbXBvcnQgeyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuY29uc3QgTUlTU0lOR19GVFAgPSBcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcIjtcblxuZnVuY3Rpb24gaW50VW5pdChyZWdleCwgcG9zdCA9IChpKSA9PiBpKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcG9zdChwYXJzZURpZ2l0cyhzKSkgfTtcbn1cblxuY29uc3QgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtcbmNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gO1xuY29uc3Qgc3BhY2VPck5CU1BSZWdFeHAgPSBuZXcgUmVnRXhwKHNwYWNlT3JOQlNQLCBcImdcIik7XG5cbmZ1bmN0aW9uIGZpeExpc3RSZWdleChzKSB7XG4gIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbFxuICAvLyBtYWtlIHNwYWNlIGFuZCBub24gYnJlYWthYmxlIHNwYWNlIGNoYXJhY3RlcnMgaW50ZXJjaGFuZ2VhYmxlXG4gIHJldHVybiBzLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuP1wiKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpIHtcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXCIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsXG4gICAgLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIFwiIFwiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcFxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7XG4gIGlmIChzdHJpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKFwifFwiKSksXG4gICAgICBkZXNlcjogKFtzXSkgPT5cbiAgICAgICAgc3RyaW5ncy5maW5kSW5kZXgoKGkpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoWywgaCwgbV0pID0+IHNpZ25lZE9mZnNldChoLCBtKSwgZ3JvdXBzIH07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZShyZWdleCkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHMgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHtcbiAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLFxuICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsyfVwiKSxcbiAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInszfVwiKSxcbiAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezR9XCIpLFxuICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns2fVwiKSxcbiAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDJ9XCIpLFxuICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwzfVwiKSxcbiAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDZ9XCIpLFxuICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDl9XCIpLFxuICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcInsyLDR9XCIpLFxuICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns0LDZ9XCIpLFxuICAgIGxpdGVyYWwgPSAodCkgPT4gKHsgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLCBkZXNlcjogKFtzXSkgPT4gcywgbGl0ZXJhbDogdHJ1ZSB9KSxcbiAgICB1bml0YXRlID0gKHQpID0+IHtcbiAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0LnZhbCkge1xuICAgICAgICAvLyBlcmFcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJzaG9ydFwiLCBmYWxzZSksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIC8vIHllYXJzXG4gICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcInl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91clRvU2l4KTtcbiAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHNpeCk7XG4gICAgICAgIC8vIG1vbnRoc1xuICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcImxvbmdcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIG9yZGluYWxzXG4gICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIC8vIHRpbWVcbiAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lVG9OaW5lKTtcbiAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICAvLyBtZXJpZGllbVxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApO1xuICAgICAgICAvLyB3ZWVrWWVhciAoaylcbiAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7XG4gICAgICAgIC8vIHdlZWtOdW1iZXIgKFcpXG4gICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyB3ZWVrZGF5c1xuICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgfTtcblxuICBjb25zdCB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwge1xuICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQLFxuICB9O1xuXG4gIHVuaXQudG9rZW4gPSB0b2tlbjtcblxuICByZXR1cm4gdW5pdDtcbn1cblxuY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7XG4gIHllYXI6IHtcbiAgICBcIjItZGlnaXRcIjogXCJ5eVwiLFxuICAgIG51bWVyaWM6IFwieXl5eXlcIixcbiAgfSxcbiAgbW9udGg6IHtcbiAgICBudW1lcmljOiBcIk1cIixcbiAgICBcIjItZGlnaXRcIjogXCJNTVwiLFxuICAgIHNob3J0OiBcIk1NTVwiLFxuICAgIGxvbmc6IFwiTU1NTVwiLFxuICB9LFxuICBkYXk6IHtcbiAgICBudW1lcmljOiBcImRcIixcbiAgICBcIjItZGlnaXRcIjogXCJkZFwiLFxuICB9LFxuICB3ZWVrZGF5OiB7XG4gICAgc2hvcnQ6IFwiRUVFXCIsXG4gICAgbG9uZzogXCJFRUVFXCIsXG4gIH0sXG4gIGRheXBlcmlvZDogXCJhXCIsXG4gIGRheVBlcmlvZDogXCJhXCIsXG4gIGhvdXI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxufTtcblxuZnVuY3Rpb24gdG9rZW5Gb3JQYXJ0KHBhcnQsIGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBwYXJ0O1xuXG4gIGlmICh0eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiB0cnVlLFxuICAgICAgdmFsOiB2YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdO1xuXG4gIGxldCB2YWwgPSBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbFt0eXBlXTtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICB2YWwgPSB2YWxbc3R5bGVdO1xuICB9XG5cbiAgaWYgKHZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgIHZhbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykge1xuICBjb25zdCByZSA9IHVuaXRzLm1hcCgodSkgPT4gdS5yZWdleCkucmVkdWNlKChmLCByKSA9PiBgJHtmfSgke3Iuc291cmNlfSlgLCBcIlwiKTtcbiAgcmV0dXJuIFtgXiR7cmV9JGAsIHVuaXRzXTtcbn1cblxuZnVuY3Rpb24gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycykge1xuICBjb25zdCBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3QgYWxsID0ge307XG4gICAgbGV0IG1hdGNoSW5kZXggPSAxO1xuICAgIGZvciAoY29uc3QgaSBpbiBoYW5kbGVycykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkge1xuICAgICAgICBjb25zdCBoID0gaGFuZGxlcnNbaV0sXG4gICAgICAgICAgZ3JvdXBzID0gaC5ncm91cHMgPyBoLmdyb3VwcyArIDEgOiAxO1xuICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7XG4gICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbbWF0Y2hlcywgYWxsXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21hdGNoZXMsIHt9XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIHtcbiAgY29uc3QgdG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICBjYXNlIFwic1wiOlxuICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgIHJldHVybiBcIm1pbnV0ZVwiO1xuICAgICAgY2FzZSBcImhcIjpcbiAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgIHJldHVybiBcImRheVwiO1xuICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgcmV0dXJuIFwib3JkaW5hbFwiO1xuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgIHJldHVybiBcIm1vbnRoXCI7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla2RheVwiO1xuICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla051bWJlclwiO1xuICAgICAgY2FzZSBcImtcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla1llYXJcIjtcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBcInF1YXJ0ZXJcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBsZXQgem9uZSA9IG51bGw7XG4gIGxldCBzcGVjaWZpY09mZnNldDtcbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7XG4gICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLlopKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICB6b25lID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZShtYXRjaGVzLlopO1xuICAgIH1cbiAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5xKSkge1xuICAgIG1hdGNoZXMuTSA9IChtYXRjaGVzLnEgLSAxKSAqIDMgKyAxO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7XG4gICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkge1xuICAgICAgbWF0Y2hlcy5oICs9IDEyO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHtcbiAgICAgIG1hdGNoZXMuaCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHtcbiAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55O1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnUpKSB7XG4gICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHMgPSBPYmplY3Qua2V5cyhtYXRjaGVzKS5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICBjb25zdCBmID0gdG9GaWVsZChrKTtcbiAgICBpZiAoZikge1xuICAgICAgcltmXSA9IG1hdGNoZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTtcbn1cblxubGV0IGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7XG4gIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7XG4gICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTtcbiAgfVxuXG4gIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7XG4gIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7XG5cbiAgaWYgKCFmb3JtYXRPcHRzKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7XG5cbiAgY29uc3QgdG9rZW5zID0gcGFydHMubWFwKChwKSA9PiB0b2tlbkZvclBhcnQocCwgbG9jYWxlLCBmb3JtYXRPcHRzKSk7XG5cbiAgaWYgKHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gZXhwYW5kTWFjcm9Ub2tlbnModG9rZW5zLCBsb2NhbGUpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4udG9rZW5zLm1hcCgodCkgPT4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSkpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgdG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSksXG4gICAgdW5pdHMgPSB0b2tlbnMubWFwKCh0KSA9PiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKSksXG4gICAgZGlzcXVhbGlmeWluZ1VuaXQgPSB1bml0cy5maW5kKCh0KSA9PiB0LmludmFsaWRSZWFzb24pO1xuXG4gIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkge1xuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb24gfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbcmVnZXhTdHJpbmcsIGhhbmRsZXJzXSA9IGJ1aWxkUmVnZXgodW5pdHMpLFxuICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKSxcbiAgICAgIFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpLFxuICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcylcbiAgICAgICAgOiBbbnVsbCwgbnVsbCwgdW5kZWZpbmVkXTtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIHJlZ2V4LCByYXdNYXRjaGVzLCBtYXRjaGVzLCByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0IH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgeyByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpO1xuICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb25dO1xufVxuIiwgImltcG9ydCB7XG4gIGludGVnZXJCZXR3ZWVuLFxuICBpc0xlYXBZZWFyLFxuICB0aW1lT2JqZWN0LFxuICBkYXlzSW5ZZWFyLFxuICBkYXlzSW5Nb250aCxcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBpc0ludGVnZXIsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcblxuY29uc3Qgbm9uTGVhcExhZGRlciA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sXG4gIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdO1xuXG5mdW5jdGlvbiB1bml0T3V0T2ZSYW5nZSh1bml0LCB2YWx1ZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXG4gICAgXCJ1bml0IG91dCBvZiByYW5nZVwiLFxuICAgIGB5b3Ugc3BlY2lmaWVkICR7dmFsdWV9IChvZiB0eXBlICR7dHlwZW9mIHZhbHVlfSkgYXMgYSAke3VuaXR9LCB3aGljaCBpcyBpbnZhbGlkYFxuICApO1xufVxuXG5mdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JlZ29yaWFuVG9XZWVrKGdyZWdPYmopIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnT2JqLFxuICAgIG9yZGluYWwgPSBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSxcbiAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxMCkgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEpIHtcbiAgY29uc3QgeyB3ZWVrWWVhciwgd2Vla051bWJlciwgd2Vla2RheSB9ID0gd2Vla0RhdGEsXG4gICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDMsXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRXZWVrRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksXG4gICAgdmFsaWRXZWVrID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtOdW1iZXIsIDEsIHdlZWtzSW5XZWVrWWVhcihvYmoud2Vla1llYXIpKSxcbiAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7XG5cbiAgaWYgKCF2YWxpZFllYXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrWWVhclwiLCBvYmoud2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrXCIsIG9iai53ZWVrKTtcbiAgfSBlbHNlIGlmICghdmFsaWRXZWVrZGF5KSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla2RheVwiLCBvYmoud2Vla2RheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJvcmRpbmFsXCIsIG9iai5vcmRpbmFsKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLFxuICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSxcbiAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibW9udGhcIiwgb2JqLm1vbnRoKTtcbiAgfSBlbHNlIGlmICghdmFsaWREYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJkYXlcIiwgb2JqLmRheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkVGltZURhdGEob2JqKSB7XG4gIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSBvYmo7XG4gIGNvbnN0IHZhbGlkSG91ciA9XG4gICAgICBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHxcbiAgICAgIChob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwKSxcbiAgICB2YWxpZE1pbnV0ZSA9IGludGVnZXJCZXR3ZWVuKG1pbnV0ZSwgMCwgNTkpLFxuICAgIHZhbGlkU2Vjb25kID0gaW50ZWdlckJldHdlZW4oc2Vjb25kLCAwLCA1OSksXG4gICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpO1xuXG4gIGlmICghdmFsaWRIb3VyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwiaG91clwiLCBob3VyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtaW51dGVcIiwgbWludXRlKTtcbiAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaWxsaXNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cbiIsICJpbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNVbmRlZmluZWQsXG4gIG1heWJlQXJyYXksXG4gIGlzRGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGJlc3RCeSxcbiAgZGF5c0luTW9udGgsXG4gIGRheXNJblllYXIsXG4gIGlzTGVhcFllYXIsXG4gIHdlZWtzSW5XZWVrWWVhcixcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxuICBvYmpUb0xvY2FsVFMsXG4gIHBhZFN0YXJ0LFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgZGlmZiBmcm9tIFwiLi9pbXBsL2RpZmYuanNcIjtcbmltcG9ydCB7IHBhcnNlUkZDMjgyMkRhdGUsIHBhcnNlSVNPRGF0ZSwgcGFyc2VIVFRQRGF0ZSwgcGFyc2VTUUwgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUZyb21Ub2tlbnMsIGV4cGxhaW5Gcm9tVG9rZW5zIH0gZnJvbSBcIi4vaW1wbC90b2tlblBhcnNlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3JlZ29yaWFuVG9XZWVrLFxuICB3ZWVrVG9HcmVnb3JpYW4sXG4gIGdyZWdvcmlhblRvT3JkaW5hbCxcbiAgb3JkaW5hbFRvR3JlZ29yaWFuLFxuICBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YSxcbiAgaGFzSW52YWxpZFdlZWtEYXRhLFxuICBoYXNJbnZhbGlkT3JkaW5hbERhdGEsXG4gIGhhc0ludmFsaWRUaW1lRGF0YSxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG5mdW5jdGlvbiBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKGR0KSB7XG4gIGlmIChkdC53ZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LndlZWtEYXRhID0gZ3JlZ29yaWFuVG9XZWVrKGR0LmMpO1xuICB9XG4gIHJldHVybiBkdC53ZWVrRGF0YTtcbn1cblxuLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCBcIm1ha2UgYSBuZXcgb2JqZWN0IHdpdGggdGhlc2UgbW9kaWZpY2F0aW9uc1wiLiBhbGwgXCJzZXR0ZXJzXCIgcmVhbGx5IHVzZSB0aGlzXG4vLyB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWxlIG9ubHkgY2hhbmdpbmcgc29tZSBvZiB0aGUgcHJvcGVydGllc1xuZnVuY3Rpb24gY2xvbmUoaW5zdCwgYWx0cykge1xuICBjb25zdCBjdXJyZW50ID0ge1xuICAgIHRzOiBpbnN0LnRzLFxuICAgIHpvbmU6IGluc3Quem9uZSxcbiAgICBjOiBpbnN0LmMsXG4gICAgbzogaW5zdC5vLFxuICAgIGxvYzogaW5zdC5sb2MsXG4gICAgaW52YWxpZDogaW5zdC5pbnZhbGlkLFxuICB9O1xuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgLi4uY3VycmVudCwgLi4uYWx0cywgb2xkOiBjdXJyZW50IH0pO1xufVxuXG4vLyBmaW5kIHRoZSByaWdodCBvZmZzZXQgYSBnaXZlbiBsb2NhbCB0aW1lLiBUaGUgbyBpbnB1dCBpcyBvdXIgZ3Vlc3MsIHdoaWNoIGRldGVybWluZXMgd2hpY2hcbi8vIG9mZnNldCB3ZSdsbCBwaWNrIGluIGFtYmlndW91cyBjYXNlcyAoZS5nLiB0aGVyZSBhcmUgdHdvIDMgQU1zIGIvYyBGYWxsYmFjayBEU1QpXG5mdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHtcbiAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzXG4gIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwO1xuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGUgem9uZSBtYXRjaGVzIHRoZSBvZmZzZXQgZm9yIHRoaXMgdHNcbiAgY29uc3QgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpO1xuXG4gIC8vIElmIHNvLCBvZmZzZXQgZGlkbid0IGNoYW5nZSBhbmQgd2UncmUgZG9uZVxuICBpZiAobyA9PT0gbzIpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTtcbiAgfVxuXG4gIC8vIElmIG5vdCwgY2hhbmdlIHRoZSB0cyBieSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgb2Zmc2V0XG4gIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwO1xuXG4gIC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZVxuICBjb25zdCBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG4gIGlmIChvMiA9PT0gbzMpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvMl07XG4gIH1cblxuICAvLyBJZiBpdCdzIGRpZmZlcmVudCwgd2UncmUgaW4gYSBob2xlIHRpbWUuIFRoZSBvZmZzZXQgaGFzIGNoYW5nZWQsIGJ1dCB0aGUgd2UgZG9uJ3QgYWRqdXN0IHRoZSB0aW1lXG4gIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldO1xufVxuXG4vLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldFxuZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7XG4gIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDtcblxuICBjb25zdCBkID0gbmV3IERhdGUodHMpO1xuXG4gIHJldHVybiB7XG4gICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLFxuICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgIGRheTogZC5nZXRVVENEYXRlKCksXG4gICAgaG91cjogZC5nZXRVVENIb3VycygpLFxuICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgfTtcbn1cblxuLy8gY29udmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGVwb2NoIHRpbWVzdGFtcFxuZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkge1xuICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpO1xufVxuXG4vLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUc1xuZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHtcbiAgY29uc3Qgb1ByZSA9IGluc3QubyxcbiAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgbW9udGggPSBpbnN0LmMubW9udGggKyBNYXRoLnRydW5jKGR1ci5tb250aHMpICsgTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpICogMyxcbiAgICBjID0ge1xuICAgICAgLi4uaW5zdC5jLFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5OlxuICAgICAgICBNYXRoLm1pbihpbnN0LmMuZGF5LCBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpICtcbiAgICAgICAgTWF0aC50cnVuYyhkdXIuZGF5cykgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci53ZWVrcykgKiA3LFxuICAgIH0sXG4gICAgbWlsbGlzVG9BZGQgPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtcbiAgICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLFxuICAgICAgbW9udGhzOiBkdXIubW9udGhzIC0gTWF0aC50cnVuYyhkdXIubW9udGhzKSxcbiAgICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksXG4gICAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLFxuICAgICAgaG91cnM6IGR1ci5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLFxuICAgICAgc2Vjb25kczogZHVyLnNlY29uZHMsXG4gICAgICBtaWxsaXNlY29uZHM6IGR1ci5taWxsaXNlY29uZHMsXG4gICAgfSkuYXMoXCJtaWxsaXNlY29uZHNcIiksXG4gICAgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyhjKTtcblxuICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpO1xuXG4gIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkge1xuICAgIHRzICs9IG1pbGxpc1RvQWRkO1xuICAgIC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWVcbiAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7XG4gIH1cblxuICByZXR1cm4geyB0cywgbyB9O1xufVxuXG4vLyBoZWxwZXIgdXNlZnVsIGluIHR1cm5pbmcgdGhlIHJlc3VsdHMgb2YgcGFyc2luZyBpbnRvIHJlYWwgZGF0ZXNcbi8vIGJ5IGhhbmRsaW5nIHRoZSB6b25lIG9wdGlvbnNcbmZ1bmN0aW9uIHBhcnNlRGF0YVRvRGF0ZVRpbWUocGFyc2VkLCBwYXJzZWRab25lLCBvcHRzLCBmb3JtYXQsIHRleHQsIHNwZWNpZmljT2Zmc2V0KSB7XG4gIGNvbnN0IHsgc2V0Wm9uZSwgem9uZSB9ID0gb3B0cztcbiAgaWYgKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgICBjICs9IFwiOlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICB9XG5cbiAgaWYgKG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7XG5cbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc01pbGxpc2Vjb25kcykge1xuICAgICAgYyArPSBcIi5cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgIGlmIChvLmlzT2Zmc2V0Rml4ZWQgJiYgby5vZmZzZXQgPT09IDAgJiYgIWV4dGVuZGVkWm9uZSkge1xuICAgICAgYyArPSBcIlpcIjtcbiAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHtcbiAgICAgIGMgKz0gXCItXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gJSA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjICs9IFwiK1wiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAlIDYwKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4dGVuZGVkWm9uZSkge1xuICAgIGMgKz0gXCJbXCIgKyBvLnpvbmUuaWFuYU5hbWUgKyBcIl1cIjtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzXG5jb25zdCBkZWZhdWx0VW5pdFZhbHVlcyA9IHtcbiAgICBtb250aDogMSxcbiAgICBkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7XG4gICAgd2Vla051bWJlcjogMSxcbiAgICB3ZWVrZGF5OiAxLFxuICAgIGhvdXI6IDAsXG4gICAgbWludXRlOiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbiAgfSxcbiAgZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzID0ge1xuICAgIG9yZGluYWw6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9O1xuXG4vLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3NcbmNvbnN0IG9yZGVyZWRVbml0cyA9IFtcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSxcbiAgb3JkZXJlZFdlZWtVbml0cyA9IFtcbiAgICBcIndlZWtZZWFyXCIsXG4gICAgXCJ3ZWVrTnVtYmVyXCIsXG4gICAgXCJ3ZWVrZGF5XCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwibWlsbGlzZWNvbmRcIixcbiAgXSxcbiAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFtcInllYXJcIiwgXCJvcmRpbmFsXCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdO1xuXG4vLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIHllYXI6IFwieWVhclwiLFxuICAgIHllYXJzOiBcInllYXJcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIGhvdXI6IFwiaG91clwiLFxuICAgIGhvdXJzOiBcImhvdXJcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBxdWFydGVyOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGVyczogXCJxdWFydGVyXCIsXG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRcIixcbiAgICB3ZWVrZGF5OiBcIndlZWtkYXlcIixcbiAgICB3ZWVrZGF5czogXCJ3ZWVrZGF5XCIsXG4gICAgd2Vla251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla3NudW1iZXI6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWtudW1iZXJzOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVreWVhcjogXCJ3ZWVrWWVhclwiLFxuICAgIHdlZWt5ZWFyczogXCJ3ZWVrWWVhclwiLFxuICAgIG9yZGluYWw6IFwib3JkaW5hbFwiLFxuICB9W3VuaXQudG9Mb3dlckNhc2UoKV07XG5cbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gdGhpcyBpcyBhIGR1bWJlZCBkb3duIHZlcnNpb24gb2YgZnJvbU9iamVjdCgpIHRoYXQgcnVucyBhYm91dCA2MCUgZmFzdGVyXG4vLyBidXQgZG9lc24ndCBkbyBhbnkgdmFsaWRhdGlvbiwgbWFrZXMgYSBidW5jaCBvZiBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IHVuaXRzXG4vLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLlxuZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHtcbiAgY29uc3Qgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksXG4gICAgdHNOb3cgPSBTZXR0aW5ncy5ub3coKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSB6b25lLm9mZnNldCh0c05vdyk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gdHNOb3c7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOlxuICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC5cbiAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLlxuICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOlxuICpcbiAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS5cbiAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSxcbiAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuXG4gKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS5cbiAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uXG4gKlxuICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWUge1xuICAvKipcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7XG5cbiAgICBsZXQgaW52YWxpZCA9XG4gICAgICBjb25maWcuaW52YWxpZCB8fFxuICAgICAgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbCkgfHxcbiAgICAgICghem9uZS5pc1ZhbGlkID8gdW5zdXBwb3J0ZWRab25lKHpvbmUpIDogbnVsbCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy50cyA9IGlzVW5kZWZpbmVkKGNvbmZpZy50cykgPyBTZXR0aW5ncy5ub3coKSA6IGNvbmZpZy50cztcblxuICAgIGxldCBjID0gbnVsbCxcbiAgICAgIG8gPSBudWxsO1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7XG5cbiAgICAgIGlmICh1bmNoYW5nZWQpIHtcbiAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTtcbiAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbDtcbiAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYztcbiAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fem9uZSA9IHpvbmU7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMud2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1WiB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyB1dGMoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcblxuICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTtcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0cyA9IGlzRGF0ZShkYXRlKSA/IGRhdGUudmFsdWVPZigpIDogTmFOO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcImludmFsaWQgaW5wdXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICB0czogdHMsXG4gICAgICB6b25lOiB6b25lVG9Vc2UsXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgbWlsbGlzZWNvbmRzfSB3aXRoIHZhbHVlICR7bWlsbGlzZWNvbmRzfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHtcbiAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXIgLSBob3VyIG9mIHRoZSBkYXksIDAtMjNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGUgLSBtaW51dGUgb2YgdGhlIGhvdXIsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kIC0gbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgMC05OTlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRzTm93ID0gU2V0dGluZ3Mubm93KCksXG4gICAgICBvZmZzZXRQcm92aXMgPSAhaXNVbmRlZmluZWQob3B0cy5zcGVjaWZpY09mZnNldClcbiAgICAgICAgPyBvcHRzLnNwZWNpZmljT2Zmc2V0XG4gICAgICAgIDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksXG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLFxuICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3cpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJJU08gODYwMVwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBSRkMgMjgyMiBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSB0aGUgb2Zmc2V0IGlzIGFsd2F5cyBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaW5nLCBtZXJlbHkgdGhlIHpvbmUgdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpcyBleHByZXNzZWQgaW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignRnJpLCAyNSBOb3YgMjAxNiAxMzoyMzoxMiArMDYwMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMyBaJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJGQzI4MjIodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VSRkMyODIyRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlJGQyAyODIyXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUhUVFAodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VIVFRQRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIkhUVFBcIiwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBpbnB1dCBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcuXG4gICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIHRoZSBsaW5rIGJlbG93IGZvciB0aGUgZm9ybWF0cylcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KSxcbiAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBgZm9ybWF0ICR7Zm10fWAsIHRleHQsIHNwZWNpZmljT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWVcbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycsIHsgc2V0Wm9uZTogdHJ1ZSB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzA5OjEyOjM0LjM0MicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21TUUwodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VTUUwodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJTUUxcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLy8gSU5GT1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdkYXknKTsgLy89PiA0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbdW5pdF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjpcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwXG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIERhdGVUaW1lLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3V0cHV0IGNhbGVuZGFyIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2lzbGFtaWMnLiBUaGUgb3V0cHV0IGNhbGVuZGFyIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgZ2V0IHpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3pvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgem9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5uYW1lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnllYXIgLy89PiAyMDE3XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnllYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRoICgxLTEyKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubW9udGggOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLmRheSAvLz0+IDI1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91ciBvZiB0aGUgZGF5ICgwLTIzKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWludXRlIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyKS5zZWNvbmQgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQgKDAtOTk5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDEyLCAzMSkud2Vla1llYXIgLy89PiAyMDE1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgd2VlayB5ZWFyICgxLTUyaXNoKS5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla2RheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcilcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm9yZGluYWwgLy89PiAxNDVcbiAgICogQHR5cGUge251bWJlcnxEYXRlVGltZX1cbiAgICovXG4gIGdldCBvcmRpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoU2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdG9iZXInLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCB3ZWVrZGF5LCBzdWNoIGFzICdNb24nLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5U2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyB3ZWVrZGF5LCBzdWNoIGFzICdNb25kYXknLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgVVRDIG9mZnNldCBvZiB0aGlzIERhdGVUaW1lIGluIG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyArdGhpcy5vIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFU1RcIiBvciBcIkVEVFwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVhc3Rlcm4gU3RhbmRhcmQgVGltZVwiIG9yIFwiRWFzdGVybiBEYXlsaWdodCBUaW1lXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVMb25nKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJsb25nXCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc09mZnNldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUuaXNVbml2ZXJzYWwgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkRTVCgpIHtcbiAgICBpZiAodGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogMSwgZGF5OiAxIH0pLm9mZnNldCB8fFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDUgfSkub2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbiBhIGxlYXAgeWVhciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuaXNJbkxlYXBZZWFyIC8vPT4gZmFsc2VcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkxlYXBZZWFyKCkge1xuICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIG1vbnRoXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDIpLmRheXNJbk1vbnRoIC8vPT4gMjlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJbk1vbnRoKCkge1xuICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJblllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMDQpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbldlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksXG4gICAgICBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKHsgLi4uZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIC4uLm5vcm1hbGl6ZWQgfSk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGFydE9mKHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIG8ud2Vla2RheSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcInF1YXJ0ZXJzXCIpIHtcbiAgICAgIGNvbnN0IHEgPSBNYXRoLmNlaWwodGhpcy5tb250aCAvIDMpO1xuICAgICAgby5tb250aCA9IChxIC0gMSkgKiAzICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXQobyk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGVuZCBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ21vbnRoJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd3ZWVrJykudG9JU08oKTsgLy8gPT4gJzIwMTQtMDMtMDlUMjM6NTk6NTkuOTk5LTA1OjAwJywgd2Vla3Mgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2RheScpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMjM6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBlbmRPZih1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB0aGlzLnBsdXMoeyBbdW5pdF06IDEgfSlcbiAgICAgICAgICAuc3RhcnRPZih1bml0KVxuICAgICAgICAgIC5taW51cygxKVxuICAgICAgOiB0aGlzO1xuICB9XG5cbiAgLy8gT1VUUFVUXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZSBmb3JtYXR0aW5nIHRvb2wuIEZvciBhIHRhYmxlIG9mIHRva2VucyBhbmQgdGhlaXIgaW50ZXJwcmV0YXRpb25zLCBzZWUgW2hlcmVdKGh0dHBzOi8vbW9tZW50LmdpdGh1Yi5pby9sdXhvbi8jL2Zvcm1hdHRpbmc/aWQ9dGFibGUtb2YtdG9rZW5zKS5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdmcicpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJywgeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnXCIpIC8vPT4gJzIwIGhvdXJzIGFuZCA1NSBtaW51dGVzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKG9wdHMpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGRhdGUuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBhbmQgYW55IHByZXNldHMgZGVmaW5lZCBieSBMdXhvbiwgc3VjaCBhcyBgRGF0ZVRpbWUuREFURV9GVUxMYCBvciBgRGF0ZVRpbWUuVElNRV9TSU1QTEVgLlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0XG4gICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDQvMjAvMjAxN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBsb2NhbGU6ICdlbi1nYicgfSk7IC8vPT4gJzIwLzA0LzIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5USU1FX1NJTVBMRSk7IC8vPT4gJzExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ2xvbmcnLCBtb250aDogJ2xvbmcnLCBkYXk6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1cnNkYXksIEFwcmlsIDIwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1LCBBcHIgMjAsIDExOjI3IEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gRm9ybWF0cy5EQVRFX1NIT1JULCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgXCJwYXJ0c1wiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHNcbiAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdXG4gICAqL1xuICB0b0xvY2FsZVBhcnRzKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MywgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKHtcbiAgICBmb3JtYXQgPSBcImV4dGVuZGVkXCIsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBleHRlbmRlZFpvbmUgPSBmYWxzZSxcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiO1xuXG4gICAgbGV0IGMgPSB0b0lTT0RhdGUodGhpcywgZXh0KTtcbiAgICBjICs9IFwiVFwiO1xuICAgIGMgKz0gdG9JU09UaW1lKHRoaXMsIGV4dCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKTtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIGRhdGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxOTgyMDUyNSdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKHsgZm9ybWF0ID0gXCJleHRlbmRlZFwiIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1dlZWtEYXRlKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgXCJra2trLSdXJ1dXLWNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUoe1xuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjID0gaW5jbHVkZVByZWZpeCA/IFwiVFwiIDogXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgYyArXG4gICAgICB0b0lTT1RpbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiLFxuICAgICAgICBzdXBwcmVzc1NlY29uZHMsXG4gICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICAgICAgICBpbmNsdWRlT2Zmc2V0LFxuICAgICAgICBleHRlbmRlZFpvbmVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gUkZDIDI4MjItY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgKzAwMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1JGQzI4MjIoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjFcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSFRUUCgpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgXCJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUxEYXRlKCkgLy89PiAnMjAxNC0wNy0xMydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxEYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRvSVNPRGF0ZSh0aGlzLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMVGltZSh7IGluY2x1ZGVPZmZzZXQgPSB0cnVlLCBpbmNsdWRlWm9uZSA9IGZhbHNlLCBpbmNsdWRlT2Zmc2V0U3BhY2UgPSB0cnVlIH0gPSB7fSkge1xuICAgIGxldCBmbXQgPSBcIkhIOm1tOnNzLlNTU1wiO1xuXG4gICAgaWYgKGluY2x1ZGVab25lIHx8IGluY2x1ZGVPZmZzZXQpIHtcbiAgICAgIGlmIChpbmNsdWRlT2Zmc2V0U3BhY2UpIHtcbiAgICAgICAgZm10ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVab25lKSB7XG4gICAgICAgIGZtdCArPSBcInpcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgICAgICBmbXQgKz0gXCJaWlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgZm10LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldFNwYWNlPXRydWVdIC0gaW5jbHVkZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlIG9mZnNldCwgc3VjaCBhcyAnMDU6MTU6MTYuMzQ1IC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuaGFzU2FtZShvdGhlckRULCAnZGF5Jyk7IC8vfj4gdHJ1ZSBpZiBvdGhlckRUIGlzIGluIHRoZSBzYW1lIGN1cnJlbnQgY2FsZW5kYXIgZGF5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNTYW1lKG90aGVyRGF0ZVRpbWUsIHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpO1xuICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pO1xuICAgIHJldHVybiBhZGp1c3RlZFRvWm9uZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBhZGp1c3RlZFRvWm9uZS5lbmRPZih1bml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRGF0ZVRpbWVzIGFyZSBlcXVhbCBpZmYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbWlsbGlzZWNvbmQsIGhhdmUgdGhlIHNhbWUgem9uZSBhbmQgbG9jYXRpb24sIGFuZCBhcmUgYm90aCB2YWxpZC5cbiAgICogVG8gY29tcGFyZSBqdXN0IHRoZSBtaWxsaXNlY29uZCB2YWx1ZXMsIHVzZSBgK2R0MSA9PT0gK2R0MmAuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1ZhbGlkICYmXG4gICAgICBvdGhlci5pc1ZhbGlkICYmXG4gICAgICB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmXG4gICAgICB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmXG4gICAgICB0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRoaXMgdGltZSByZWxhdGl2ZSB0byBub3csIHN1Y2ggYXMgXCJpbiB0d28gZGF5c1wiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXJcbiAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1cImxvbmdcIl0gLSB0aGUgc3R5bGUgb2YgdW5pdHMsIG11c3QgYmUgXCJsb25nXCIsIFwic2hvcnRcIiwgb3IgXCJuYXJyb3dcIlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIG9yIFwic2Vjb25kc1wiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCJpbiAxIGRheVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnRvUmVsYXRpdmUoeyBkYXlzOiAxIH0pIC8vPT4gXCJkZW50cm8gZGUgMSBkXHUwMEVEYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWFcdTAwRjFhbmFcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGVtYWluXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7IHpvbmU6IHRoaXMuem9uZSB9KSwgdGhpcywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYXV0b1wiLFxuICAgICAgdW5pdHM6IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiXSxcbiAgICAgIGNhbGVuZGFyeTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWluKC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtaW4gcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWF4KTtcbiAgfVxuXG4gIC8vIE1JU0NcblxuICAvKipcbiAgICogRXhwbGFpbiBob3cgYSBzdHJpbmcgd291bGQgYmUgcGFyc2VkIGJ5IGZyb21Gb3JtYXQoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGFrZW4gYnkgZnJvbUZvcm1hdCgpXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0RXhwbGFpbiBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEZPUk1BVCBQUkVTRVRTXG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4M1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX1NIT1JUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX01FRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIE9jdCAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX0ZVTEwoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ1R1ZXNkYXksIE9jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9TSU1QTEU7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX0xPTkdfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMycsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFRFQnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRUQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCAxNCBPY3QgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkge1xuICBpZiAoRGF0ZVRpbWUuaXNEYXRlVGltZShkYXRlVGltZWlzaCkpIHtcbiAgICByZXR1cm4gZGF0ZVRpbWVpc2g7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIHR5cGVvZiBkYXRlVGltZWlzaCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KGRhdGVUaW1laXNoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgVW5rbm93biBkYXRldGltZSBhcmd1bWVudDogJHtkYXRlVGltZWlzaH0sIG9mIHR5cGUgJHt0eXBlb2YgZGF0ZVRpbWVpc2h9YFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuXG4vKiogVGVzdC1lbnZpcm9ubWVudC1mcmllbmRseSBmdW5jdGlvbiB3aGljaCBmZXRjaGVzIHRoZSBjdXJyZW50IHN5c3RlbSBsb2NhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJlbi1VU1wiO1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlO1xufVxuXG4vLyBEYXRlL1RpbWUgUmVuZGVyaW5nXG5cbi8qKiBOb3JtYWxpemUgYSBkdXJhdGlvbiB0byBhbGwgb2YgdGhlIHByb3BlciB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEdXJhdGlvbihkdXI6IER1cmF0aW9uKSB7XG4gICAgaWYgKGR1ciA9PT0gdW5kZWZpbmVkIHx8IGR1ciA9PT0gbnVsbCkgcmV0dXJuIGR1cjtcblxuICAgIHJldHVybiBkdXIuc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKS5ub3JtYWxpemUoKTtcbn1cblxuLyoqIFN0cmlwIHRoZSB0aW1lIGNvbXBvbmVudHMgb2YgYSBkYXRlIHRpbWUgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVGltZShkdDogRGF0ZVRpbWUpOiBEYXRlVGltZSB7XG4gICAgaWYgKGR0ID09PSBudWxsIHx8IGR0ID09PSB1bmRlZmluZWQpIHJldHVybiBkdDtcblxuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgeWVhcjogZHQueWVhcixcbiAgICAgICAgbW9udGg6IGR0Lm1vbnRoLFxuICAgICAgICBkYXk6IGR0LmRheSxcbiAgICB9KTtcbn1cblxuLyoqIFRyeSB0byBleHRyYWN0IGEgWVlZWU1NREQgZGF0ZSBmcm9tIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlKHN0cjogc3RyaW5nKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlTWF0Y2ggPSAvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIWRhdGVNYXRjaCkgZGF0ZU1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmIChkYXRlTWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXIgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzFdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gTnVtYmVyLnBhcnNlSW50KGRhdGVNYXRjaFsyXSk7XG4gICAgICAgIGxldCBkYXkgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzNdKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW5kZXIgYSBEYXRlVGltZSBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbERhdGUodGltZTogRGF0ZVRpbWUsIGRhdGVGb3JtYXQ6IHN0cmluZywgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyByZWxldmFudCB0aW1lIHNwZWNpZmllZCwgZmFsbCBiYWNrIHRvIGp1c3QgcmVuZGVyaW5nIHRoZSBkYXRlLlxuICAgIGlmICh0aW1lLnNlY29uZCA9PSAwICYmIHRpbWUubWludXRlID09IDAgJiYgdGltZS5ob3VyID09IDApIHtcbiAgICAgICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVGb3JtYXQsIHsgbG9jYWxlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aW1lLnRvTG9jYWwoKS50b0Zvcm1hdChkYXRlVGltZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG59XG5cbi8qKiBSZW5kZXIgYSBkdXJhdGlvbiBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbER1cmF0aW9uKGR1cjogRHVyYXRpb24pOiBzdHJpbmcge1xuICAgIGR1ciA9IG5vcm1hbGl6ZUR1cmF0aW9uKGR1cik7XG5cbiAgICAvLyBUT0RPOiBMdXhvbiBkb2VzIG5vdCBoYXZlIG11bHRpLWxpbmd1YWwvbG9jYWxlLWF3YXJlIGR1cmF0aW9uIHJlbmRlcmluZy5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBpZiAoZHVyLnllYXJzKSByZXN1bHQgKz0gYCR7ZHVyLnllYXJzfSB5ZWFycywgYDtcbiAgICBpZiAoZHVyLm1vbnRocykgcmVzdWx0ICs9IGAke2R1ci5tb250aHN9IG1vbnRocywgYDtcbiAgICBpZiAoZHVyLndlZWtzKSByZXN1bHQgKz0gYCR7ZHVyLndlZWtzfSB3ZWVrcywgYDtcbiAgICBpZiAoZHVyLmRheXMpIHJlc3VsdCArPSBgJHtkdXIuZGF5c30gZGF5cywgYDtcbiAgICBpZiAoZHVyLmhvdXJzKSByZXN1bHQgKz0gYCR7ZHVyLmhvdXJzfSBob3VycywgYDtcbiAgICBpZiAoZHVyLm1pbnV0ZXMpIHJlc3VsdCArPSBgJHtkdXIubWludXRlc30gbWludXRlcywgYDtcbiAgICBpZiAoZHVyLnNlY29uZHMpIHJlc3VsdCArPSBgJHtNYXRoLnJvdW5kKGR1ci5zZWNvbmRzKX0gc2Vjb25kcywgYDtcbiAgICBpZiAoZHVyLm1pbGxpc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLm1pbGxpc2Vjb25kcyl9IG1zLCBgO1xuXG4gICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIiwgXCIpKSByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBQYXRoIHV0aWxpdGllcy5cblxuLyoqIEdldCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHBhdGggKGkuZS4sIGxpa2UgY29tcHV0aW5nICdwYXRoLy4uJykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50Rm9sZGVyKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbn1cblxuLyoqIEdldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgZmlsZSByZWZlcmVuY2VkIGluIHRoZSBnaXZlbiBwYXRoLCBieSBzdHJpcHBpbmcgdGhlIHBhcmVudCBmb2xkZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguaW5jbHVkZXMoXCIvXCIpID8gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIFwidGl0bGVcIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiL1wiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIubWRcIikpIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG4vKiogR2V0IHRoZSBleHRlbnNpb24gb2YgYSBmaWxlIGZyb20gdGhlIGZpbGUgcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXBhdGguaW5jbHVkZXMoXCIuXCIpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi5cIikgKyAxKTtcbn1cblxuLy8gVGFnIGV4dHJhY3Rpb24uXG5cbi8qKiBQYXJzZSBhbGwgc3VidGFncyBvdXQgb2YgdGhlIGdpdmVuIHRhZy4gSS5lLiwgI2hlbGxvL2kvYW0gd291bGQgeWllbGQgWyNoZWxsby9pL2FtLCAjaGVsbG8vaSwgI2hlbGxvXS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3VidGFncyh0YWdzOiBzdHJpbmcgfCBJdGVyYWJsZTxzdHJpbmc+KTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCB0YWcgb2YgdHlwZW9mIHRhZ3MgPT09IFwic3RyaW5nXCIgPyBbdGFnc10gOiB0YWdzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRhZyk7XG4gICAgICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICB0YWcgPSB0YWcuc3Vic3RyaW5nKDAsIHRhZy5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBTcGxpdCBlYWNoIGJsb2NrIGFuZCBzZWN0aW9uIGxpbmsgaW50byB0aGUgb3JpZ2luYWwgbGluayBhbmQgYSBjb3JyZXNwb25kaW5nIGZpbGUgbGluay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsZUxpbmtzKGVsaW5rczogTGlua1tdKTogTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IExpbmtbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBlbGlua3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGluayk7XG5cbiAgICAgICAgY29uc3QgZmlsZUxpbmsgPSBsaW5rLnRvRmlsZSgpO1xuICAgICAgICBpZiAobGluay50eXBlICE9IFwiZmlsZVwiICYmICFyZXN1bHQuZmluZCgoZXhpc3RpbmcpID0+IGV4aXN0aW5nLmVxdWFscyhmaWxlTGluaykpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChmaWxlTGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBTdHJpbmcgZXNjYXBpbmcgYW5kIGNhbm9uaWNhbGl6YXRpb24uXG5cbi8qKlxuICogRXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9SZWd1bGFyX0V4cHJlc3Npb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuY29uc3QgSEVBREVSX0NBTk9OSUNBTElaRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcIlwiKSksXG4gICAgUC5yZWdleCgvWzAtOVxccHtMZXR0ZXJ9Xy1dKy91KSxcbiAgICBQLndoaXRlc3BhY2UubWFwKChfKSA9PiBcIiBcIiksXG4gICAgUC5hbnkubWFwKChfKSA9PiBcIiBcIilcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbihcIlwiKS5zcGxpdCgvXFxzKy8pLmpvaW4oXCIgXCIpLnRyaW0oKTtcbiAgICB9KTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0ZXh0IGluIGEgaGVhZGVyIHRvIGJlIHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IGxpbmthYmxlIHRvLiBUaGlzIG1pbWljc1xuICogaG93IE9ic2lkaWFuIGRvZXMgaXQncyBub3JtYWxpemF0aW9uLCBjb2xsYXBzaW5nIHJlcGVhdGVkIHNwYWNlcyBhbmQgc3RyaXBwaW5nIG91dCBjb250cm9sIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSEVBREVSX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UoaGVhZGVyKTtcbn1cblxuLy8gRmFzdCBleHRyYWN0aW9uIG9mIGxpbmUgcmFuZ2VzIGZyb20gbGFyZ2UgcGllY2VzIG9mIHRleHQuXG5cbi8qKiBVcGRhdGUgdGhlIGxpbmUgcmFuZ2UgZnJvbSBbc3RhcnQsIGVuZCkgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVJlcGxhY2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZnVuYzogKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbZGF0YSwgb2Zmc2V0XSA9IGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpO1xuICAgIGlmICghb2Zmc2V0KSByZXR1cm4gdGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGRhdGEuc3Vic3RyaW5nKDAsIG9mZnNldC5zdGFydCkgKyBmdW5jKGRhdGEuc3Vic3RyaW5nKG9mZnNldC5zdGFydCwgb2Zmc2V0LmVuZCkpICsgZGF0YS5zdWJzdHJpbmcob2Zmc2V0LmVuZClcbiAgICApO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKSwgYXMgd2VsbCBhcyB0aGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVNwYW4oXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXJcbik6IFtzdHJpbmcsIHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB8IHVuZGVmaW5lZF0ge1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuICAgIGVuZCA9IE1hdGgubWF4KGVuZCwgMCk7XG5cbiAgICBpZiAoc3RhcnQgPj0gZW5kKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICAvLyBTdGFydCBieSBmaW5kaW5nIHRoZSBzdGFydGluZyBsaW5lIG9mZnNldC5cbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCAwLCBzdGFydCk7XG4gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IC0xKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBza2lwTmV3bGluZXModGV4dCwgc3RhcnRPZmZzZXQsIGVuZCAtIHN0YXJ0KTtcbiAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogdGV4dC5sZW5ndGggfV07XG4gICAgZWxzZSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxKSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogZW5kT2Zmc2V0IC0gMSB9XTtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIGxpbmVzIGluIHRoZSByYW5nZSBbc3RhcnQsIGVuZCkuIFN0YXJ0IGlzIGluY2x1c2l2ZSwgZW5kIGlzIGV4Y2x1c2l2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFuZ2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpWzBdO1xufVxuXG4vKiogU2tpcCB7Y291bnR9IHRvdGFsIG5ld2xpbmVzLCByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHtjb3VudH0gbGluZXMgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4gSWYgY291bnQgaXMgMCwgdGhlIGluaXRpYWwgb2Zmc2V0IGlzIHJldHVybmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBOZXdsaW5lcyh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gc3RhcnQ7XG5cbiAgICBsZXQgcG9zaXRpb24gPSBzdGFydDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIHBvc2l0aW9uID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09IC0xKSByZXR1cm4gLTE7XG5cbiAgICAgICAgY291bnQtLTtcbiAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuXHQvLyBodHRwczovL210aHMuYmUvZW1vamlcblx0cmV0dXJuIC9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZEM1xcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E1KT98XFx1MjZGOSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjQzXFx1REY0NS1cXHVERjRBXFx1REY0Qy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjdcXHVEREZBLVxcdURERkZdfFxcdURERTlcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdfFxcdURERUFcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXXxcXHVEREVCXFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddfFxcdURERUNcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdfFxcdURERURcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV18XFx1RERFRVxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XXxcXHVEREVGXFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XXxcXHVEREYwXFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERGMVxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXXxcXHVEREYyXFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXXxcXHVEREYzXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdfFxcdURERjRcXHVEODNDXFx1RERGMnxcXHVEREY1XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdfFxcdURERjZcXHVEODNDXFx1RERFNnxcXHVEREY3XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ118XFx1RERGOFxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl18XFx1RERGOVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdfFxcdURERkFcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdfFxcdURERkJcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdfFxcdURERkNcXHVEODNDW1xcdURERUJcXHVEREY4XXxcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RERGRVxcdUQ4M0NbXFx1RERFQVxcdURERjldfFxcdURERkZcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ118XFx1REY0NCg/OlxcdTIwMERcXHVEODNEXFx1REZFQik/fFxcdURGNEIoPzpcXHUyMDBEXFx1RDgzRFxcdURGRTkpP3xcXHVERkMzKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVERkYzXFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1MjZBN1xcdUZFMEY/fFxcdUQ4M0NcXHVERjA4KSk/fFxcdURGRjQoPzpcXHUyMDBEXFx1MjYyMFxcdUZFMEY/fFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjJcXHVEQjQwKD86XFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REM3M1xcdURCNDBcXHVEQzYzXFx1REI0MFxcdURDNzR8XFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0YpPyl8XFx1RDgzRCg/OltcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM11cXHVGRTBGP3xbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjRcXHVERUI1XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQxXFx1REU0M1xcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERURDLVxcdURFREZcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQlxcdURGRjBdfFxcdURDMDgoPzpcXHUyMDBEXFx1MkIxQik/fFxcdURDMTUoPzpcXHUyMDBEXFx1RDgzRVxcdUREQkEpP3xcXHVEQzI2KD86XFx1MjAwRCg/OlxcdTJCMUJ8XFx1RDgzRFxcdUREMjUpKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNjkoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/W1xcdURDNjhcXHVEQzY5XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pP3xcXHVEQzY5XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2Rig/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0RcXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODlcXHVERThGLVxcdURFQzJcXHVERUM2XFx1REVDRS1cXHVERURDXFx1REVERi1cXHVERUU5XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEREQxXFx1MjAwRFxcdUQ4M0VcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT98XFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/KSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImNvbnN0IEFMSUFTID0gU3ltYm9sLmZvcigneWFtbC5hbGlhcycpO1xuY29uc3QgRE9DID0gU3ltYm9sLmZvcigneWFtbC5kb2N1bWVudCcpO1xuY29uc3QgTUFQID0gU3ltYm9sLmZvcigneWFtbC5tYXAnKTtcbmNvbnN0IFBBSVIgPSBTeW1ib2wuZm9yKCd5YW1sLnBhaXInKTtcbmNvbnN0IFNDQUxBUiA9IFN5bWJvbC5mb3IoJ3lhbWwuc2NhbGFyJyk7XG5jb25zdCBTRVEgPSBTeW1ib2wuZm9yKCd5YW1sLnNlcScpO1xuY29uc3QgTk9ERV9UWVBFID0gU3ltYm9sLmZvcigneWFtbC5ub2RlLnR5cGUnKTtcbmNvbnN0IGlzQWxpYXMgPSAobm9kZSkgPT4gISFub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlW05PREVfVFlQRV0gPT09IEFMSUFTO1xuY29uc3QgaXNEb2N1bWVudCA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gRE9DO1xuY29uc3QgaXNNYXAgPSAobm9kZSkgPT4gISFub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlW05PREVfVFlQRV0gPT09IE1BUDtcbmNvbnN0IGlzUGFpciA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gUEFJUjtcbmNvbnN0IGlzU2NhbGFyID0gKG5vZGUpID0+ICEhbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgbm9kZVtOT0RFX1RZUEVdID09PSBTQ0FMQVI7XG5jb25zdCBpc1NlcSA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gU0VRO1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIHN3aXRjaCAobm9kZVtOT0RFX1RZUEVdKSB7XG4gICAgICAgICAgICBjYXNlIE1BUDpcbiAgICAgICAgICAgIGNhc2UgU0VROlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIHN3aXRjaCAobm9kZVtOT0RFX1RZUEVdKSB7XG4gICAgICAgICAgICBjYXNlIEFMSUFTOlxuICAgICAgICAgICAgY2FzZSBNQVA6XG4gICAgICAgICAgICBjYXNlIFNDQUxBUjpcbiAgICAgICAgICAgIGNhc2UgU0VROlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuY29uc3QgaGFzQW5jaG9yID0gKG5vZGUpID0+IChpc1NjYWxhcihub2RlKSB8fCBpc0NvbGxlY3Rpb24obm9kZSkpICYmICEhbm9kZS5hbmNob3I7XG5cbmV4cG9ydCB7IEFMSUFTLCBET0MsIE1BUCwgTk9ERV9UWVBFLCBQQUlSLCBTQ0FMQVIsIFNFUSwgaGFzQW5jaG9yLCBpc0FsaWFzLCBpc0NvbGxlY3Rpb24sIGlzRG9jdW1lbnQsIGlzTWFwLCBpc05vZGUsIGlzUGFpciwgaXNTY2FsYXIsIGlzU2VxIH07XG4iLCAiaW1wb3J0IHsgaXNEb2N1bWVudCwgaXNOb2RlLCBpc1BhaXIsIGlzQ29sbGVjdGlvbiwgaXNNYXAsIGlzU2VxLCBpc1NjYWxhciwgaXNBbGlhcyB9IGZyb20gJy4vbm9kZXMvaWRlbnRpdHkuanMnO1xuXG5jb25zdCBCUkVBSyA9IFN5bWJvbCgnYnJlYWsgdmlzaXQnKTtcbmNvbnN0IFNLSVAgPSBTeW1ib2woJ3NraXAgY2hpbGRyZW4nKTtcbmNvbnN0IFJFTU9WRSA9IFN5bWJvbCgncmVtb3ZlIG5vZGUnKTtcbi8qKlxuICogQXBwbHkgYSB2aXNpdG9yIHRvIGFuIEFTVCBub2RlIG9yIGRvY3VtZW50LlxuICpcbiAqIFdhbGtzIHRocm91Z2ggdGhlIHRyZWUgKGRlcHRoLWZpcnN0KSBzdGFydGluZyBmcm9tIGBub2RlYCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAgIC0gYGtleWA6IEZvciBzZXF1ZW5jZSB2YWx1ZXMgYW5kIG1hcCBgUGFpcmAsIHRoZSBub2RlJ3MgaW5kZXggaW4gdGhlXG4gKiAgICAgY29sbGVjdGlvbi4gV2l0aGluIGEgYFBhaXJgLCBgJ2tleSdgIG9yIGAndmFsdWUnYCwgY29ycmVzcG9uZGluZ2x5LlxuICogICAgIGBudWxsYCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAqICAgLSBgbm9kZWA6IFRoZSBjdXJyZW50IG5vZGUuXG4gKiAgIC0gYHBhdGhgOiBUaGUgYW5jZXN0cnkgb2YgdGhlIGN1cnJlbnQgbm9kZS5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgY29udGludWUgd2l0aCBuZXh0XG4gKiAgICAgc2libGluZ1xuICogICAtIGB2aXNpdC5CUkVBS2A6IFRlcm1pbmF0ZSB0cmF2ZXJzYWwgY29tcGxldGVseVxuICogICAtIGB2aXNpdC5SRU1PVkVgOiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZVxuICogICAtIGBOb2RlYDogUmVwbGFjZSB0aGUgY3VycmVudCBub2RlLCB0aGVuIGNvbnRpbnVlIGJ5IHZpc2l0aW5nIGl0XG4gKiAgIC0gYG51bWJlcmA6IFdoaWxlIGl0ZXJhdGluZyB0aGUgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBtYXAsIHNldCB0aGUgaW5kZXhcbiAqICAgICBvZiB0aGUgbmV4dCBzdGVwLiBUaGlzIGlzIHVzZWZ1bCBlc3BlY2lhbGx5IGlmIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudFxuICogICAgIG5vZGUgaGFzIGNoYW5nZWQuXG4gKlxuICogSWYgYHZpc2l0b3JgIGlzIGEgc2luZ2xlIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB2YWx1ZXNcbiAqIGVuY291bnRlcmVkIGluIHRoZSB0cmVlLCBpbmNsdWRpbmcgZS5nLiBgbnVsbGAgdmFsdWVzLiBBbHRlcm5hdGl2ZWx5LFxuICogc2VwYXJhdGUgdmlzaXRvciBmdW5jdGlvbnMgbWF5IGJlIGRlZmluZWQgZm9yIGVhY2ggYE1hcGAsIGBQYWlyYCwgYFNlcWAsXG4gKiBgQWxpYXNgIGFuZCBgU2NhbGFyYCBub2RlLiBUbyBkZWZpbmUgdGhlIHNhbWUgdmlzaXRvciBmdW5jdGlvbiBmb3IgbW9yZSB0aGFuXG4gKiBvbmUgbm9kZSB0eXBlLCB1c2UgdGhlIGBDb2xsZWN0aW9uYCAobWFwIGFuZCBzZXEpLCBgVmFsdWVgIChtYXAsIHNlcSAmIHNjYWxhcilcbiAqIGFuZCBgTm9kZWAgKGFsaWFzLCBtYXAsIHNlcSAmIHNjYWxhcikgdGFyZ2V0cy4gT2YgYWxsIHRoZXNlLCBvbmx5IHRoZSBtb3N0XG4gKiBzcGVjaWZpYyBkZWZpbmVkIG9uZSB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gdmlzaXQobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSB2aXNpdF8obnVsbCwgbm9kZS5jb250ZW50cywgdmlzaXRvcl8sIE9iamVjdC5mcmVlemUoW25vZGVdKSk7XG4gICAgICAgIGlmIChjZCA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmlzaXRfKG51bGwsIG5vZGUsIHZpc2l0b3JfLCBPYmplY3QuZnJlZXplKFtdKSk7XG59XG4vLyBXaXRob3V0IHRoZSBgYXMgc3ltYm9sYCBjYXN0cywgVFMgZGVjbGFyZXMgdGhlc2UgaW4gdGhlIGB2aXNpdGBcbi8vIG5hbWVzcGFjZSB1c2luZyBgdmFyYCwgYnV0IHRoZW4gY29tcGxhaW5zIGFib3V0IHRoYXQgYmVjYXVzZVxuLy8gYHVuaXF1ZSBzeW1ib2xgIG11c3QgYmUgYGNvbnN0YC5cbi8qKiBUZXJtaW5hdGUgdmlzaXQgdHJhdmVyc2FsIGNvbXBsZXRlbHkgKi9cbnZpc2l0LkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdC5TS0lQID0gU0tJUDtcbi8qKiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSAqL1xudmlzaXQuUkVNT1ZFID0gUkVNT1ZFO1xuZnVuY3Rpb24gdmlzaXRfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpc05vZGUoY3RybCkgfHwgaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdF8oa2V5LCBjdHJsLCB2aXNpdG9yLCBwYXRoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjdHJsICE9PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAoaXNDb2xsZWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBwYXRoID0gT2JqZWN0LmZyZWV6ZShwYXRoLmNvbmNhdChub2RlKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaSA9IHZpc2l0XyhpLCBub2RlLml0ZW1zW2ldLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGFpcihub2RlKSkge1xuICAgICAgICAgICAgcGF0aCA9IE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQobm9kZSkpO1xuICAgICAgICAgICAgY29uc3QgY2sgPSB2aXNpdF8oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IHZpc2l0XygndmFsdWUnLCBub2RlLnZhbHVlLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjdiA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY3YgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3RybDtcbn1cbi8qKlxuICogQXBwbHkgYW4gYXN5bmMgdmlzaXRvciB0byBhbiBBU1Qgbm9kZSBvciBkb2N1bWVudC5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSBgbm9kZWAsIGNhbGxpbmcgYVxuICogYHZpc2l0b3JgIGZ1bmN0aW9uIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogICAtIGBrZXlgOiBGb3Igc2VxdWVuY2UgdmFsdWVzIGFuZCBtYXAgYFBhaXJgLCB0aGUgbm9kZSdzIGluZGV4IGluIHRoZVxuICogICAgIGNvbGxlY3Rpb24uIFdpdGhpbiBhIGBQYWlyYCwgYCdrZXknYCBvciBgJ3ZhbHVlJ2AsIGNvcnJlc3BvbmRpbmdseS5cbiAqICAgICBgbnVsbGAgZm9yIHRoZSByb290IG5vZGUuXG4gKiAgIC0gYG5vZGVgOiBUaGUgY3VycmVudCBub2RlLlxuICogICAtIGBwYXRoYDogVGhlIGFuY2VzdHJ5IG9mIHRoZSBjdXJyZW50IG5vZGUuXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdmlzaXRvciBtYXkgYmUgdXNlZCB0byBjb250cm9sIHRoZSB0cmF2ZXJzYWw6XG4gKiAgIC0gYFByb21pc2VgOiBNdXN0IHJlc29sdmUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzXG4gKiAgIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBEbyBub3RoaW5nIGFuZCBjb250aW51ZVxuICogICAtIGB2aXNpdC5TS0lQYDogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsIGNvbnRpbnVlIHdpdGggbmV4dFxuICogICAgIHNpYmxpbmdcbiAqICAgLSBgdmlzaXQuQlJFQUtgOiBUZXJtaW5hdGUgdHJhdmVyc2FsIGNvbXBsZXRlbHlcbiAqICAgLSBgdmlzaXQuUkVNT1ZFYDogUmVtb3ZlIHRoZSBjdXJyZW50IG5vZGUsIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmVcbiAqICAgLSBgTm9kZWA6IFJlcGxhY2UgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSBieSB2aXNpdGluZyBpdFxuICogICAtIGBudW1iZXJgOiBXaGlsZSBpdGVyYXRpbmcgdGhlIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgbWFwLCBzZXQgdGhlIGluZGV4XG4gKiAgICAgb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRcbiAqICAgICBub2RlIGhhcyBjaGFuZ2VkLlxuICpcbiAqIElmIGB2aXNpdG9yYCBpcyBhIHNpbmdsZSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdmFsdWVzXG4gKiBlbmNvdW50ZXJlZCBpbiB0aGUgdHJlZSwgaW5jbHVkaW5nIGUuZy4gYG51bGxgIHZhbHVlcy4gQWx0ZXJuYXRpdmVseSxcbiAqIHNlcGFyYXRlIHZpc2l0b3IgZnVuY3Rpb25zIG1heSBiZSBkZWZpbmVkIGZvciBlYWNoIGBNYXBgLCBgUGFpcmAsIGBTZXFgLFxuICogYEFsaWFzYCBhbmQgYFNjYWxhcmAgbm9kZS4gVG8gZGVmaW5lIHRoZSBzYW1lIHZpc2l0b3IgZnVuY3Rpb24gZm9yIG1vcmUgdGhhblxuICogb25lIG5vZGUgdHlwZSwgdXNlIHRoZSBgQ29sbGVjdGlvbmAgKG1hcCBhbmQgc2VxKSwgYFZhbHVlYCAobWFwLCBzZXEgJiBzY2FsYXIpXG4gKiBhbmQgYE5vZGVgIChhbGlhcywgbWFwLCBzZXEgJiBzY2FsYXIpIHRhcmdldHMuIE9mIGFsbCB0aGVzZSwgb25seSB0aGUgbW9zdFxuICogc3BlY2lmaWMgZGVmaW5lZCBvbmUgd2lsbCBiZSB1c2VkIGZvciBlYWNoIG5vZGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmMobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLmNvbnRlbnRzLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbbm9kZV0pKTtcbiAgICAgICAgaWYgKGNkID09PSBSRU1PVkUpXG4gICAgICAgICAgICBub2RlLmNvbnRlbnRzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbXSkpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdEFzeW5jLkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlNLSVAgPSBTS0lQO1xuLyoqIFJlbW92ZSB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlJFTU9WRSA9IFJFTU9WRTtcbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmNfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBhd2FpdCBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpc05vZGUoY3RybCkgfHwgaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdEFzeW5jXyhrZXksIGN0cmwsIHZpc2l0b3IsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGN0cmwgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gYXdhaXQgdmlzaXRBc3luY18oaSwgbm9kZS5pdGVtc1tpXSwgdmlzaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgICAgIGkgPSBjaSAtIDE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IEJSRUFLKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BhaXIobm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGNrID0gYXdhaXQgdmlzaXRBc3luY18oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IGF3YWl0IHZpc2l0QXN5bmNfKCd2YWx1ZScsIG5vZGUudmFsdWUsIHZpc2l0b3IsIHBhdGgpO1xuICAgICAgICAgICAgaWYgKGN2ID09PSBCUkVBSylcbiAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICBlbHNlIGlmIChjdiA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHJsO1xufVxuZnVuY3Rpb24gaW5pdFZpc2l0b3IodmlzaXRvcikge1xuICAgIGlmICh0eXBlb2YgdmlzaXRvciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgKHZpc2l0b3IuQ29sbGVjdGlvbiB8fCB2aXNpdG9yLk5vZGUgfHwgdmlzaXRvci5WYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgQWxpYXM6IHZpc2l0b3IuTm9kZSxcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5Ob2RlLFxuICAgICAgICAgICAgU2NhbGFyOiB2aXNpdG9yLk5vZGUsXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuTm9kZVxuICAgICAgICB9LCB2aXNpdG9yLlZhbHVlICYmIHtcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNjYWxhcjogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNlcTogdmlzaXRvci5WYWx1ZVxuICAgICAgICB9LCB2aXNpdG9yLkNvbGxlY3Rpb24gJiYge1xuICAgICAgICAgICAgTWFwOiB2aXNpdG9yLkNvbGxlY3Rpb24sXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuQ29sbGVjdGlvblxuICAgICAgICB9LCB2aXNpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2l0b3I7XG59XG5mdW5jdGlvbiBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHZpc2l0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB2aXNpdG9yKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlzTWFwKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5NYXA/LihrZXksIG5vZGUsIHBhdGgpO1xuICAgIGlmIChpc1NlcShub2RlKSlcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IuU2VxPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaXNQYWlyKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5QYWlyPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaXNTY2FsYXIobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLlNjYWxhcj8uKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlzQWxpYXMobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLkFsaWFzPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVwbGFjZU5vZGUoa2V5LCBwYXRoLCBub2RlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGlmIChpc0NvbGxlY3Rpb24ocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuaXRlbXNba2V5XSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGFpcihwYXJlbnQpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdrZXknKVxuICAgICAgICAgICAgcGFyZW50LmtleSA9IG5vZGU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhcmVudC52YWx1ZSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRG9jdW1lbnQocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuY29udGVudHMgPSBub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHQgPSBpc0FsaWFzKHBhcmVudCkgPyAnYWxpYXMnIDogJ3NjYWxhcic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlcGxhY2Ugbm9kZSB3aXRoICR7cHR9IHBhcmVudGApO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgdmlzaXQsIHZpc2l0QXN5bmMgfTtcbiIsICJpbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gJy4uL3Zpc2l0LmpzJztcblxuY29uc3QgZXNjYXBlQ2hhcnMgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICAnLCc6ICclMkMnLFxuICAgICdbJzogJyU1QicsXG4gICAgJ10nOiAnJTVEJyxcbiAgICAneyc6ICclN0InLFxuICAgICd9JzogJyU3RCdcbn07XG5jb25zdCBlc2NhcGVUYWdOYW1lID0gKHRuKSA9PiB0bi5yZXBsYWNlKC9bISxbXFxde31dL2csIGNoID0+IGVzY2FwZUNoYXJzW2NoXSk7XG5jbGFzcyBEaXJlY3RpdmVzIHtcbiAgICBjb25zdHJ1Y3Rvcih5YW1sLCB0YWdzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IG1hcmtlciBgLS0tYC4gSWYgYG51bGxgLCBhIG1hcmtlciBtYXkgc3RpbGwgYmVcbiAgICAgICAgICogaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50J3Mgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRvY1N0YXJ0ID0gbnVsbDtcbiAgICAgICAgLyoqIFRoZSBkb2MtZW5kIG1hcmtlciBgLi4uYC4gICovXG4gICAgICAgIHRoaXMuZG9jRW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMueWFtbCA9IE9iamVjdC5hc3NpZ24oe30sIERpcmVjdGl2ZXMuZGVmYXVsdFlhbWwsIHlhbWwpO1xuICAgICAgICB0aGlzLnRhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBEaXJlY3RpdmVzLmRlZmF1bHRUYWdzLCB0YWdzKTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgRGlyZWN0aXZlcyh0aGlzLnlhbWwsIHRoaXMudGFncyk7XG4gICAgICAgIGNvcHkuZG9jU3RhcnQgPSB0aGlzLmRvY1N0YXJ0O1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHVyaW5nIHBhcnNpbmcsIGdldCBhIERpcmVjdGl2ZXMgaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IGFuZFxuICAgICAqIHVwZGF0ZSB0aGUgc3RyZWFtIHN0YXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCB2ZXJzaW9uJ3Mgc3BlYy5cbiAgICAgKi9cbiAgICBhdERvY3VtZW50KCkge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgRGlyZWN0aXZlcyh0aGlzLnlhbWwsIHRoaXMudGFncyk7XG4gICAgICAgIHN3aXRjaCAodGhpcy55YW1sLnZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJzEuMSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hdE5leHREb2N1bWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxLjInOlxuICAgICAgICAgICAgICAgIHRoaXMuYXROZXh0RG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnlhbWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0OiBEaXJlY3RpdmVzLmRlZmF1bHRZYW1sLmV4cGxpY2l0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMS4yJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gT2JqZWN0LmFzc2lnbih7fSwgRGlyZWN0aXZlcy5kZWZhdWx0VGFncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9uRXJyb3IgLSBNYXkgYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzXG4gICAgICovXG4gICAgYWRkKGxpbmUsIG9uRXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuYXROZXh0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMueWFtbCA9IHsgZXhwbGljaXQ6IERpcmVjdGl2ZXMuZGVmYXVsdFlhbWwuZXhwbGljaXQsIHZlcnNpb246ICcxLjEnIH07XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBEaXJlY3RpdmVzLmRlZmF1bHRUYWdzKTtcbiAgICAgICAgICAgIHRoaXMuYXROZXh0RG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9bIFxcdF0rLyk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJyVUQUcnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKDAsICclVEFHIGRpcmVjdGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IHR3byBwYXJ0cycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgW2hhbmRsZSwgcHJlZml4XSA9IHBhcnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudGFnc1toYW5kbGVdID0gcHJlZml4O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnJVlBTUwnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy55YW1sLmV4cGxpY2l0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoMCwgJyVZQU1MIGRpcmVjdGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBwYXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgW3ZlcnNpb25dID0gcGFydHM7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPT09ICcxLjEnIHx8IHZlcnNpb24gPT09ICcxLjInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWFtbC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gL15cXGQrXFwuXFxkKyQvLnRlc3QodmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoNiwgYFVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiAke3ZlcnNpb259YCwgaXNWYWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG9uRXJyb3IoMCwgYFVua25vd24gZGlyZWN0aXZlICR7bmFtZX1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSB0YWcsIG1hdGNoaW5nIGhhbmRsZXMgdG8gdGhvc2UgZGVmaW5lZCBpbiAlVEFHIGRpcmVjdGl2ZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXNvbHZlZCB0YWcsIHdoaWNoIG1heSBhbHNvIGJlIHRoZSBub24tc3BlY2lmaWMgdGFnIGAnISdgIG9yIGFcbiAgICAgKiAgIGAnIWxvY2FsJ2AgdGFnLCBvciBgbnVsbGAgaWYgdW5yZXNvbHZhYmxlLlxuICAgICAqL1xuICAgIHRhZ05hbWUoc291cmNlLCBvbkVycm9yKSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiAnISc7IC8vIG5vbi1zcGVjaWZpYyB0YWdcbiAgICAgICAgaWYgKHNvdXJjZVswXSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBvbkVycm9yKGBOb3QgYSB2YWxpZCB0YWc6ICR7c291cmNlfWApO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVsxXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiYXRpbSA9IHNvdXJjZS5zbGljZSgyLCAtMSk7XG4gICAgICAgICAgICBpZiAodmVyYmF0aW0gPT09ICchJyB8fCB2ZXJiYXRpbSA9PT0gJyEhJykge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IoYFZlcmJhdGltIHRhZ3MgYXJlbid0IHJlc29sdmVkLCBzbyAke3NvdXJjZX0gaXMgaW52YWxpZC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2Vbc291cmNlLmxlbmd0aCAtIDFdICE9PSAnPicpXG4gICAgICAgICAgICAgICAgb25FcnJvcignVmVyYmF0aW0gdGFncyBtdXN0IGVuZCB3aXRoIGEgPicpO1xuICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFssIGhhbmRsZSwgc3VmZml4XSA9IHNvdXJjZS5tYXRjaCgvXiguKiEpKFteIV0qKSQvcyk7XG4gICAgICAgIGlmICghc3VmZml4KVxuICAgICAgICAgICAgb25FcnJvcihgVGhlICR7c291cmNlfSB0YWcgaGFzIG5vIHN1ZmZpeGApO1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLnRhZ3NbaGFuZGxlXTtcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgZGVjb2RlVVJJQ29tcG9uZW50KHN1ZmZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvbkVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7IC8vIGxvY2FsIHRhZ1xuICAgICAgICBvbkVycm9yKGBDb3VsZCBub3QgcmVzb2x2ZSB0YWc6ICR7c291cmNlfWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBmdWxseSByZXNvbHZlZCB0YWcsIHJldHVybnMgaXRzIHByaW50YWJsZSBzdHJpbmcgZm9ybSxcbiAgICAgKiB0YWtpbmcgaW50byBhY2NvdW50IGN1cnJlbnQgdGFnIHByZWZpeGVzIGFuZCBkZWZhdWx0cy5cbiAgICAgKi9cbiAgICB0YWdTdHJpbmcodGFnKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2hhbmRsZSwgcHJlZml4XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpKSB7XG4gICAgICAgICAgICBpZiAodGFnLnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlICsgZXNjYXBlVGFnTmFtZSh0YWcuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnWzBdID09PSAnIScgPyB0YWcgOiBgITwke3RhZ30+YDtcbiAgICB9XG4gICAgdG9TdHJpbmcoZG9jKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy55YW1sLmV4cGxpY2l0XG4gICAgICAgICAgICA/IFtgJVlBTUwgJHt0aGlzLnlhbWwudmVyc2lvbiB8fCAnMS4yJ31gXVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgdGFnRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMudGFncyk7XG4gICAgICAgIGxldCB0YWdOYW1lcztcbiAgICAgICAgaWYgKGRvYyAmJiB0YWdFbnRyaWVzLmxlbmd0aCA+IDAgJiYgaXNOb2RlKGRvYy5jb250ZW50cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIHZpc2l0KGRvYy5jb250ZW50cywgKF9rZXksIG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKG5vZGUpICYmIG5vZGUudGFnKVxuICAgICAgICAgICAgICAgICAgICB0YWdzW25vZGUudGFnXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRhZ05hbWVzID0gT2JqZWN0LmtleXModGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGFnTmFtZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbaGFuZGxlLCBwcmVmaXhdIG9mIHRhZ0VudHJpZXMpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGUgPT09ICchIScgJiYgcHJlZml4ID09PSAndGFnOnlhbWwub3JnLDIwMDI6JylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZG9jIHx8IHRhZ05hbWVzLnNvbWUodG4gPT4gdG4uc3RhcnRzV2l0aChwcmVmaXgpKSlcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGAlVEFHICR7aGFuZGxlfSAke3ByZWZpeH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gICAgfVxufVxuRGlyZWN0aXZlcy5kZWZhdWx0WWFtbCA9IHsgZXhwbGljaXQ6IGZhbHNlLCB2ZXJzaW9uOiAnMS4yJyB9O1xuRGlyZWN0aXZlcy5kZWZhdWx0VGFncyA9IHsgJyEhJzogJ3RhZzp5YW1sLm9yZywyMDAyOicgfTtcblxuZXhwb3J0IHsgRGlyZWN0aXZlcyB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc0NvbGxlY3Rpb24gfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gJy4uL3Zpc2l0LmpzJztcblxuLyoqXG4gKiBWZXJpZnkgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgdmFsaWQgYW5jaG9yLlxuICpcbiAqIFdpbGwgdGhyb3cgb24gZXJyb3JzLlxuICovXG5mdW5jdGlvbiBhbmNob3JJc1ZhbGlkKGFuY2hvcikge1xuICAgIGlmICgvW1xceDAwLVxceDE5XFxzLFtcXF17fV0vLnRlc3QoYW5jaG9yKSkge1xuICAgICAgICBjb25zdCBzYSA9IEpTT04uc3RyaW5naWZ5KGFuY2hvcik7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBBbmNob3IgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wgY2hhcmFjdGVyczogJHtzYX1gO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhbmNob3JOYW1lcyhyb290KSB7XG4gICAgY29uc3QgYW5jaG9ycyA9IG5ldyBTZXQoKTtcbiAgICB2aXNpdChyb290LCB7XG4gICAgICAgIFZhbHVlKF9rZXksIG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmFuY2hvcilcbiAgICAgICAgICAgICAgICBhbmNob3JzLmFkZChub2RlLmFuY2hvcik7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9ycztcbn1cbi8qKiBGaW5kIGEgbmV3IGFuY2hvciBuYW1lIHdpdGggdGhlIGdpdmVuIGBwcmVmaXhgIGFuZCBhIG9uZS1pbmRleGVkIHN1ZmZpeC4gKi9cbmZ1bmN0aW9uIGZpbmROZXdBbmNob3IocHJlZml4LCBleGNsdWRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IHRydWU7ICsraSkge1xuICAgICAgICBjb25zdCBuYW1lID0gYCR7cHJlZml4fSR7aX1gO1xuICAgICAgICBpZiAoIWV4Y2x1ZGUuaGFzKG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTm9kZUFuY2hvcnMoZG9jLCBwcmVmaXgpIHtcbiAgICBjb25zdCBhbGlhc09iamVjdHMgPSBbXTtcbiAgICBjb25zdCBzb3VyY2VPYmplY3RzID0gbmV3IE1hcCgpO1xuICAgIGxldCBwcmV2QW5jaG9ycyA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb25BbmNob3I6IChzb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGFsaWFzT2JqZWN0cy5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoIXByZXZBbmNob3JzKVxuICAgICAgICAgICAgICAgIHByZXZBbmNob3JzID0gYW5jaG9yTmFtZXMoZG9jKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGZpbmROZXdBbmNob3IocHJlZml4LCBwcmV2QW5jaG9ycyk7XG4gICAgICAgICAgICBwcmV2QW5jaG9ycy5hZGQoYW5jaG9yKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNob3I7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaXRoIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHRoZSBzb3VyY2Ugbm9kZSBpcyBvbmx5IHJlc29sdmVkIGFmdGVyIGFsbFxuICAgICAgICAgKiBvZiBpdHMgY2hpbGQgbm9kZXMgYXJlLiBUaGlzIGlzIHdoeSBhbmNob3JzIGFyZSBzZXQgb25seSBhZnRlciBhbGwgb2ZcbiAgICAgICAgICogdGhlIG5vZGVzIGhhdmUgYmVlbiBjcmVhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QW5jaG9yczogKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgYWxpYXNPYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gc291cmNlT2JqZWN0cy5nZXQoc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVmLmFuY2hvciAmJlxuICAgICAgICAgICAgICAgICAgICAoaXNTY2FsYXIocmVmLm5vZGUpIHx8IGlzQ29sbGVjdGlvbihyZWYubm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5ub2RlLmFuY2hvciA9IHJlZi5hbmNob3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgcmVwZWF0ZWQgb2JqZWN0ICh0aGlzIHNob3VsZCBub3QgaGFwcGVuKScpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlT2JqZWN0c1xuICAgIH07XG59XG5cbmV4cG9ydCB7IGFuY2hvcklzVmFsaWQsIGFuY2hvck5hbWVzLCBjcmVhdGVOb2RlQW5jaG9ycywgZmluZE5ld0FuY2hvciB9O1xuIiwgIi8qKlxuICogQXBwbGllcyB0aGUgSlNPTi5wYXJzZSByZXZpdmVyIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluIHRoZSBFQ01BLTI2MiBzcGVjLFxuICogaW4gc2VjdGlvbiAyNC41LjEuMSBcIlJ1bnRpbWUgU2VtYW50aWNzOiBJbnRlcm5hbGl6ZUpTT05Qcm9wZXJ0eVwiIG9mIHRoZVxuICogMjAyMSBlZGl0aW9uOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24ucGFyc2VcbiAqXG4gKiBJbmNsdWRlcyBleHRlbnNpb25zIGZvciBoYW5kbGluZyBNYXAgYW5kIFNldCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBhcHBseVJldml2ZXIocmV2aXZlciwgb2JqLCBrZXksIHZhbCkge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYwID0gdmFsW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHYxID0gYXBwbHlSZXZpdmVyKHJldml2ZXIsIHZhbCwgU3RyaW5nKGkpLCB2MCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1hcnJheS1kZWxldGVcbiAgICAgICAgICAgICAgICBpZiAodjEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbFtpXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2MSAhPT0gdjApXG4gICAgICAgICAgICAgICAgICAgIHZhbFtpXSA9IHYxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIEFycmF5LmZyb20odmFsLmtleXMoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2MCA9IHZhbC5nZXQoayk7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCBrLCB2MCk7XG4gICAgICAgICAgICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHZhbC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodjEgIT09IHYwKVxuICAgICAgICAgICAgICAgICAgICB2YWwuc2V0KGssIHYxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdjAgb2YgQXJyYXkuZnJvbSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCB2MCwgdjApO1xuICAgICAgICAgICAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB2YWwuZGVsZXRlKHYwKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2MSAhPT0gdjApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsLmRlbGV0ZSh2MCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbC5hZGQodjEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHYwXSBvZiBPYmplY3QuZW50cmllcyh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCBrLCB2MCk7XG4gICAgICAgICAgICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWxba107XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodjEgIT09IHYwKVxuICAgICAgICAgICAgICAgICAgICB2YWxba10gPSB2MTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV2aXZlci5jYWxsKG9iaiwga2V5LCB2YWwpO1xufVxuXG5leHBvcnQgeyBhcHBseVJldml2ZXIgfTtcbiIsICJpbXBvcnQgeyBoYXNBbmNob3IgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjb252ZXJ0IGFueSBub2RlIG9yIGl0cyBjb250ZW50cyB0byBuYXRpdmUgSmF2YVNjcmlwdFxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnB1dCB2YWx1ZVxuICogQHBhcmFtIGFyZyAtIElmIGB2YWx1ZWAgZGVmaW5lcyBhIGB0b0pTT04oKWAgbWV0aG9kLCB1c2UgdGhpc1xuICogICBhcyBpdHMgZmlyc3QgYXJndW1lbnRcbiAqIEBwYXJhbSBjdHggLSBDb252ZXJzaW9uIGNvbnRleHQsIG9yaWdpbmFsbHkgc2V0IGluIERvY3VtZW50I3RvSlMoKS4gSWZcbiAqICAgYHsga2VlcDogdHJ1ZSB9YCBpcyBub3Qgc2V0LCBvdXRwdXQgc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBKU09OXG4gKiAgIHN0cmluZ2lmaWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9KUyh2YWx1ZSwgYXJnLCBjdHgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHYsIGkpID0+IHRvSlModiwgU3RyaW5nKGkpLCBjdHgpKTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgIGlmICghY3R4IHx8ICFoYXNBbmNob3IodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSlNPTihhcmcsIGN0eCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IGFsaWFzQ291bnQ6IDAsIGNvdW50OiAxLCByZXM6IHVuZGVmaW5lZCB9O1xuICAgICAgICBjdHguYW5jaG9ycy5zZXQodmFsdWUsIGRhdGEpO1xuICAgICAgICBjdHgub25DcmVhdGUgPSByZXMgPT4ge1xuICAgICAgICAgICAgZGF0YS5yZXMgPSByZXM7XG4gICAgICAgICAgICBkZWxldGUgY3R4Lm9uQ3JlYXRlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB2YWx1ZS50b0pTT04oYXJnLCBjdHgpO1xuICAgICAgICBpZiAoY3R4Lm9uQ3JlYXRlKVxuICAgICAgICAgICAgY3R4Lm9uQ3JlYXRlKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnICYmICFjdHg/LmtlZXApXG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHsgdG9KUyB9O1xuIiwgImltcG9ydCB7IGFwcGx5UmV2aXZlciB9IGZyb20gJy4uL2RvYy9hcHBseVJldml2ZXIuanMnO1xuaW1wb3J0IHsgTk9ERV9UWVBFLCBpc0RvY3VtZW50IH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi90b0pTLmpzJztcblxuY2xhc3MgTm9kZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE5PREVfVFlQRSwgeyB2YWx1ZTogdHlwZSB9KTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBub2RlLiAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29weSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7XG4gICAgICAgIGlmICh0aGlzLnJhbmdlKVxuICAgICAgICAgICAgY29weS5yYW5nZSA9IHRoaXMucmFuZ2Uuc2xpY2UoKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKiBBIHBsYWluIEphdmFTY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBub2RlLiAqL1xuICAgIHRvSlMoZG9jLCB7IG1hcEFzTWFwLCBtYXhBbGlhc0NvdW50LCBvbkFuY2hvciwgcmV2aXZlciB9ID0ge30pIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50KGRvYykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIGRvY3VtZW50IGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFuY2hvcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgIGtlZXA6IHRydWUsXG4gICAgICAgICAgICBtYXBBc01hcDogbWFwQXNNYXAgPT09IHRydWUsXG4gICAgICAgICAgICBtYXBLZXlXYXJuZWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWF4QWxpYXNDb3VudDogdHlwZW9mIG1heEFsaWFzQ291bnQgPT09ICdudW1iZXInID8gbWF4QWxpYXNDb3VudCA6IDEwMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB0b0pTKHRoaXMsICcnLCBjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQW5jaG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGNvdW50LCByZXMgfSBvZiBjdHguYW5jaG9ycy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICBvbkFuY2hvcihyZXMsIGNvdW50KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGFwcGx5UmV2aXZlcihyZXZpdmVyLCB7ICcnOiByZXMgfSwgJycsIHJlcylcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTm9kZUJhc2UgfTtcbiIsICJpbXBvcnQgeyBhbmNob3JJc1ZhbGlkIH0gZnJvbSAnLi4vZG9jL2FuY2hvcnMuanMnO1xuaW1wb3J0IHsgdmlzaXQgfSBmcm9tICcuLi92aXNpdC5qcyc7XG5pbXBvcnQgeyBBTElBUywgaXNBbGlhcywgaXNDb2xsZWN0aW9uLCBpc1BhaXIgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IE5vZGVCYXNlIH0gZnJvbSAnLi9Ob2RlLmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5jbGFzcyBBbGlhcyBleHRlbmRzIE5vZGVCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoQUxJQVMpO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0YWcnLCB7XG4gICAgICAgICAgICBzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGlhcyBub2RlcyBjYW5ub3QgaGF2ZSB0YWdzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGlzIGFsaWFzIHdpdGhpbiBgZG9jYCwgZmluZGluZyB0aGUgbGFzdFxuICAgICAqIGluc3RhbmNlIG9mIHRoZSBgc291cmNlYCBhbmNob3IgYmVmb3JlIHRoaXMgbm9kZS5cbiAgICAgKi9cbiAgICByZXNvbHZlKGRvYykge1xuICAgICAgICBsZXQgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZpc2l0KGRvYywge1xuICAgICAgICAgICAgTm9kZTogKF9rZXksIG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gdGhpcylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0LkJSRUFLO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmFuY2hvciA9PT0gdGhpcy5zb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgdG9KU09OKF9hcmcsIGN0eCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZTogdGhpcy5zb3VyY2UgfTtcbiAgICAgICAgY29uc3QgeyBhbmNob3JzLCBkb2MsIG1heEFsaWFzQ291bnQgfSA9IGN0eDtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlKGRvYyk7XG4gICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgVW5yZXNvbHZlZCBhbGlhcyAodGhlIGFuY2hvciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGFsaWFzKTogJHt0aGlzLnNvdXJjZX1gO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgYW5jaG9ycyBmb3IgTm9kZS5wcm90b3R5cGUudG9KUygpXG4gICAgICAgICAgICB0b0pTKHNvdXJjZSwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgIGRhdGEgPSBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5yZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RoaXMgc2hvdWxkIG5vdCBoYXBwZW46IEFsaWFzIGFuY2hvciB3YXMgbm90IHJlc29sdmVkPyc7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4QWxpYXNDb3VudCA+PSAwKSB7XG4gICAgICAgICAgICBkYXRhLmNvdW50ICs9IDE7XG4gICAgICAgICAgICBpZiAoZGF0YS5hbGlhc0NvdW50ID09PSAwKVxuICAgICAgICAgICAgICAgIGRhdGEuYWxpYXNDb3VudCA9IGdldEFsaWFzQ291bnQoZG9jLCBzb3VyY2UsIGFuY2hvcnMpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY291bnQgKiBkYXRhLmFsaWFzQ291bnQgPiBtYXhBbGlhc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ0V4Y2Vzc2l2ZSBhbGlhcyBjb3VudCBpbmRpY2F0ZXMgYSByZXNvdXJjZSBleGhhdXN0aW9uIGF0dGFjayc7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEucmVzO1xuICAgIH1cbiAgICB0b1N0cmluZyhjdHgsIF9vbkNvbW1lbnQsIF9vbkNob21wS2VlcCkge1xuICAgICAgICBjb25zdCBzcmMgPSBgKiR7dGhpcy5zb3VyY2V9YDtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgYW5jaG9ySXNWYWxpZCh0aGlzLnNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMudmVyaWZ5QWxpYXNPcmRlciAmJiAhY3R4LmFuY2hvcnMuaGFzKHRoaXMuc291cmNlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBVbnJlc29sdmVkIGFsaWFzICh0aGUgYW5jaG9yIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYWxpYXMpOiAke3RoaXMuc291cmNlfWA7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LmltcGxpY2l0S2V5KVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtzcmN9IGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRBbGlhc0NvdW50KGRvYywgbm9kZSwgYW5jaG9ycykge1xuICAgIGlmIChpc0FsaWFzKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5vZGUucmVzb2x2ZShkb2MpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzICYmIHNvdXJjZSAmJiBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICByZXR1cm4gYW5jaG9yID8gYW5jaG9yLmNvdW50ICogYW5jaG9yLmFsaWFzQ291bnQgOiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBnZXRBbGlhc0NvdW50KGRvYywgaXRlbSwgYW5jaG9ycyk7XG4gICAgICAgICAgICBpZiAoYyA+IGNvdW50KVxuICAgICAgICAgICAgICAgIGNvdW50ID0gYztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGFpcihub2RlKSkge1xuICAgICAgICBjb25zdCBrYyA9IGdldEFsaWFzQ291bnQoZG9jLCBub2RlLmtleSwgYW5jaG9ycyk7XG4gICAgICAgIGNvbnN0IHZjID0gZ2V0QWxpYXNDb3VudChkb2MsIG5vZGUudmFsdWUsIGFuY2hvcnMpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoa2MsIHZjKTtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cbmV4cG9ydCB7IEFsaWFzIH07XG4iLCAiaW1wb3J0IHsgU0NBTEFSIH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBOb2RlQmFzZSB9IGZyb20gJy4vTm9kZS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi90b0pTLmpzJztcblxuY29uc3QgaXNTY2FsYXJWYWx1ZSA9ICh2YWx1ZSkgPT4gIXZhbHVlIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG5jbGFzcyBTY2FsYXIgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgc3VwZXIoU0NBTEFSKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b0pTT04oYXJnLCBjdHgpIHtcbiAgICAgICAgcmV0dXJuIGN0eD8ua2VlcCA/IHRoaXMudmFsdWUgOiB0b0pTKHRoaXMudmFsdWUsIGFyZywgY3R4KTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuU2NhbGFyLkJMT0NLX0ZPTERFRCA9ICdCTE9DS19GT0xERUQnO1xuU2NhbGFyLkJMT0NLX0xJVEVSQUwgPSAnQkxPQ0tfTElURVJBTCc7XG5TY2FsYXIuUExBSU4gPSAnUExBSU4nO1xuU2NhbGFyLlFVT1RFX0RPVUJMRSA9ICdRVU9URV9ET1VCTEUnO1xuU2NhbGFyLlFVT1RFX1NJTkdMRSA9ICdRVU9URV9TSU5HTEUnO1xuXG5leHBvcnQgeyBTY2FsYXIsIGlzU2NhbGFyVmFsdWUgfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzTm9kZSwgaXNQYWlyLCBNQVAsIFNFUSwgaXNEb2N1bWVudCB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5cbmNvbnN0IGRlZmF1bHRUYWdQcmVmaXggPSAndGFnOnlhbWwub3JnLDIwMDI6JztcbmZ1bmN0aW9uIGZpbmRUYWdPYmplY3QodmFsdWUsIHRhZ05hbWUsIHRhZ3MpIHtcbiAgICBpZiAodGFnTmFtZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRhZ3MuZmlsdGVyKHQgPT4gdC50YWcgPT09IHRhZ05hbWUpO1xuICAgICAgICBjb25zdCB0YWdPYmogPSBtYXRjaC5maW5kKHQgPT4gIXQuZm9ybWF0KSA/PyBtYXRjaFswXTtcbiAgICAgICAgaWYgKCF0YWdPYmopXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhZyAke3RhZ05hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICByZXR1cm4gdGFnT2JqO1xuICAgIH1cbiAgICByZXR1cm4gdGFncy5maW5kKHQgPT4gdC5pZGVudGlmeT8uKHZhbHVlKSAmJiAhdC5mb3JtYXQpO1xufVxuZnVuY3Rpb24gY3JlYXRlTm9kZSh2YWx1ZSwgdGFnTmFtZSwgY3R4KSB7XG4gICAgaWYgKGlzRG9jdW1lbnQodmFsdWUpKVxuICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbnRlbnRzO1xuICAgIGlmIChpc05vZGUodmFsdWUpKVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgaWYgKGlzUGFpcih2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbWFwID0gY3R4LnNjaGVtYVtNQVBdLmNyZWF0ZU5vZGU/LihjdHguc2NoZW1hLCBudWxsLCBjdHgpO1xuICAgICAgICBtYXAuaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fFxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fFxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgKHR5cGVvZiBCaWdJbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmlnSW50KSAvLyBub3Qgc3VwcG9ydGVkIGV2ZXJ5d2hlcmVcbiAgICApIHtcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXJpYWxpemVqc29ucHJvcGVydHlcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWxpYXNEdXBsaWNhdGVPYmplY3RzLCBvbkFuY2hvciwgb25UYWdPYmosIHNjaGVtYSwgc291cmNlT2JqZWN0cyB9ID0gY3R4O1xuICAgIC8vIERldGVjdCBkdXBsaWNhdGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3QgJiB1c2UgQWxpYXMgbm9kZXMgZm9yIGFsbFxuICAgIC8vIGFmdGVyIGZpcnN0LiBUaGUgYHJlZmAgd3JhcHBlciBhbGxvd3MgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgdG8gcmVzb2x2ZS5cbiAgICBsZXQgcmVmID0gdW5kZWZpbmVkO1xuICAgIGlmIChhbGlhc0R1cGxpY2F0ZU9iamVjdHMgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWYgPSBzb3VyY2VPYmplY3RzLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmFuY2hvcilcbiAgICAgICAgICAgICAgICByZWYuYW5jaG9yID0gb25BbmNob3IodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyhyZWYuYW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlZiA9IHsgYW5jaG9yOiBudWxsLCBub2RlOiBudWxsIH07XG4gICAgICAgICAgICBzb3VyY2VPYmplY3RzLnNldCh2YWx1ZSwgcmVmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodGFnTmFtZT8uc3RhcnRzV2l0aCgnISEnKSlcbiAgICAgICAgdGFnTmFtZSA9IGRlZmF1bHRUYWdQcmVmaXggKyB0YWdOYW1lLnNsaWNlKDIpO1xuICAgIGxldCB0YWdPYmogPSBmaW5kVGFnT2JqZWN0KHZhbHVlLCB0YWdOYW1lLCBzY2hlbWEudGFncyk7XG4gICAgaWYgKCF0YWdPYmopIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFNjYWxhcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmVmKVxuICAgICAgICAgICAgICAgIHJlZi5ub2RlID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIHRhZ09iaiA9XG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIE1hcFxuICAgICAgICAgICAgICAgID8gc2NoZW1hW01BUF1cbiAgICAgICAgICAgICAgICA6IFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hW1NFUV1cbiAgICAgICAgICAgICAgICAgICAgOiBzY2hlbWFbTUFQXTtcbiAgICB9XG4gICAgaWYgKG9uVGFnT2JqKSB7XG4gICAgICAgIG9uVGFnT2JqKHRhZ09iaik7XG4gICAgICAgIGRlbGV0ZSBjdHgub25UYWdPYmo7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSB0YWdPYmo/LmNyZWF0ZU5vZGVcbiAgICAgICAgPyB0YWdPYmouY3JlYXRlTm9kZShjdHguc2NoZW1hLCB2YWx1ZSwgY3R4KVxuICAgICAgICA6IHR5cGVvZiB0YWdPYmo/Lm5vZGVDbGFzcz8uZnJvbSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0YWdPYmoubm9kZUNsYXNzLmZyb20oY3R4LnNjaGVtYSwgdmFsdWUsIGN0eClcbiAgICAgICAgICAgIDogbmV3IFNjYWxhcih2YWx1ZSk7XG4gICAgaWYgKHRhZ05hbWUpXG4gICAgICAgIG5vZGUudGFnID0gdGFnTmFtZTtcbiAgICBlbHNlIGlmICghdGFnT2JqLmRlZmF1bHQpXG4gICAgICAgIG5vZGUudGFnID0gdGFnT2JqLnRhZztcbiAgICBpZiAocmVmKVxuICAgICAgICByZWYubm9kZSA9IG5vZGU7XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZU5vZGUgfTtcbiIsICJpbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi4vZG9jL2NyZWF0ZU5vZGUuanMnO1xuaW1wb3J0IHsgaXNOb2RlLCBpc1BhaXIsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IE5vZGVCYXNlIH0gZnJvbSAnLi9Ob2RlLmpzJztcblxuZnVuY3Rpb24gY29sbGVjdGlvbkZyb21QYXRoKHNjaGVtYSwgcGF0aCwgdmFsdWUpIHtcbiAgICBsZXQgdiA9IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGNvbnN0IGsgPSBwYXRoW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIoaykgJiYgayA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gW107XG4gICAgICAgICAgICBhW2tdID0gdjtcbiAgICAgICAgICAgIHYgPSBhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IG5ldyBNYXAoW1trLCB2XV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVOb2RlKHYsIHVuZGVmaW5lZCwge1xuICAgICAgICBhbGlhc0R1cGxpY2F0ZU9iamVjdHM6IGZhbHNlLFxuICAgICAgICBrZWVwVW5kZWZpbmVkOiBmYWxzZSxcbiAgICAgICAgb25BbmNob3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBzb3VyY2VPYmplY3RzOiBuZXcgTWFwKClcbiAgICB9KTtcbn1cbi8vIFR5cGUgZ3VhcmQgaXMgaW50ZW50aW9uYWxseSBhIGxpdHRsZSB3cm9uZyBzbyBhcyB0byBiZSBtb3JlIHVzZWZ1bCxcbi8vIGFzIGl0IGRvZXMgbm90IGNvdmVyIHVudHlwYWJsZSBlbXB0eSBub24tc3RyaW5nIGl0ZXJhYmxlcyAoZS5nLiBbXSkuXG5jb25zdCBpc0VtcHR5UGF0aCA9IChwYXRoKSA9PiBwYXRoID09IG51bGwgfHxcbiAgICAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmICEhcGF0aFtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmUpO1xuY2xhc3MgQ29sbGVjdGlvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBzY2hlbWEpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgdmFsdWU6IHNjaGVtYSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjaGVtYSAtIElmIGRlZmluZWQsIG92ZXJ3cml0ZXMgdGhlIG9yaWdpbmFsJ3Mgc2NoZW1hXG4gICAgICovXG4gICAgY2xvbmUoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO1xuICAgICAgICBpZiAoc2NoZW1hKVxuICAgICAgICAgICAgY29weS5zY2hlbWEgPSBzY2hlbWE7XG4gICAgICAgIGNvcHkuaXRlbXMgPSBjb3B5Lml0ZW1zLm1hcChpdCA9PiBpc05vZGUoaXQpIHx8IGlzUGFpcihpdCkgPyBpdC5jbG9uZShzY2hlbWEpIDogaXQpO1xuICAgICAgICBpZiAodGhpcy5yYW5nZSlcbiAgICAgICAgICAgIGNvcHkucmFuZ2UgPSB0aGlzLnJhbmdlLnNsaWNlKCk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgdmFsdWUgdG8gdGhlIGNvbGxlY3Rpb24uIEZvciBgISFtYXBgIGFuZCBgISFvbWFwYCB0aGUgdmFsdWUgbXVzdFxuICAgICAqIGJlIGEgUGFpciBpbnN0YW5jZSBvciBhIGB7IGtleSwgdmFsdWUgfWAgb2JqZWN0LCB3aGljaCBtYXkgbm90IGhhdmUgYSBrZXlcbiAgICAgKiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgYWRkSW4ocGF0aCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRW1wdHlQYXRoKHBhdGgpKVxuICAgICAgICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICAgICAgaWYgKGlzQ29sbGVjdGlvbihub2RlKSlcbiAgICAgICAgICAgICAgICBub2RlLmFkZEluKHJlc3QsIHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIGNvbGxlY3Rpb25Gcm9tUGF0aCh0aGlzLnNjaGVtYSwgcmVzdCwgdmFsdWUpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFlBTUwgY29sbGVjdGlvbiBhdCAke2tleX0uIFJlbWFpbmluZyBwYXRoOiAke3Jlc3R9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGVJbihwYXRoKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICBpZiAoaXNDb2xsZWN0aW9uKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGVsZXRlSW4ocmVzdCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7a2V5fS4gUmVtYWluaW5nIHBhdGg6ICR7cmVzdH1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpdGVtIGF0IGBrZXlgLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuIEJ5IGRlZmF1bHQgdW53cmFwc1xuICAgICAqIHNjYWxhciB2YWx1ZXMgZnJvbSB0aGVpciBzdXJyb3VuZGluZyBub2RlOyB0byBkaXNhYmxlIHNldCBga2VlcFNjYWxhcmAgdG9cbiAgICAgKiBgdHJ1ZWAgKGNvbGxlY3Rpb25zIGFyZSBhbHdheXMgcmV0dXJuZWQgaW50YWN0KS5cbiAgICAgKi9cbiAgICBnZXRJbihwYXRoLCBrZWVwU2NhbGFyKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcihub2RlKSA/IG5vZGUudmFsdWUgOiBub2RlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKG5vZGUpID8gbm9kZS5nZXRJbihyZXN0LCBrZWVwU2NhbGFyKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFzQWxsTnVsbFZhbHVlcyhhbGxvd1NjYWxhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5ldmVyeShub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghaXNQYWlyKG5vZGUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIChuID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAoYWxsb3dTY2FsYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNTY2FsYXIobikgJiZcbiAgICAgICAgICAgICAgICAgICAgbi52YWx1ZSA9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICFuLmNvbW1lbnRCZWZvcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgIW4uY29tbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAhbi50YWcpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgY29sbGVjdGlvbiBpbmNsdWRlcyBhIHZhbHVlIHdpdGggdGhlIGtleSBga2V5YC5cbiAgICAgKi9cbiAgICBoYXNJbihwYXRoKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKG5vZGUpID8gbm9kZS5oYXNJbihyZXN0KSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhpcyBjb2xsZWN0aW9uLiBGb3IgYCEhc2V0YCwgYHZhbHVlYCBuZWVkcyB0byBiZSBhXG4gICAgICogYm9vbGVhbiB0byBhZGQvcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBba2V5LCAuLi5yZXN0XSA9IHBhdGg7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRJbihyZXN0LCB2YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChub2RlID09PSB1bmRlZmluZWQgJiYgdGhpcy5zY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBjb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIHJlc3QsIHZhbHVlKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtrZXl9LiBSZW1haW5pbmcgcGF0aDogJHtyZXN0fWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBDb2xsZWN0aW9uLCBjb2xsZWN0aW9uRnJvbVBhdGgsIGlzRW1wdHlQYXRoIH07XG4iLCAiLyoqXG4gKiBTdHJpbmdpZmllcyBhIGNvbW1lbnQuXG4gKlxuICogRW1wdHkgY29tbWVudCBsaW5lcyBhcmUgbGVmdCBlbXB0eSxcbiAqIGxpbmVzIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc3BhY2UgYXJlIHJlcGxhY2VkIGJ5IGAjYCxcbiAqIGFuZCBhbGwgb3RoZXIgbGluZXMgYXJlIHByZWZpeGVkIHdpdGggYSBgI2AuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeUNvbW1lbnQgPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvXig/ISQpKD86ICQpPy9nbSwgJyMnKTtcbmZ1bmN0aW9uIGluZGVudENvbW1lbnQoY29tbWVudCwgaW5kZW50KSB7XG4gICAgaWYgKC9eXFxuKyQvLnRlc3QoY29tbWVudCkpXG4gICAgICAgIHJldHVybiBjb21tZW50LnN1YnN0cmluZygxKTtcbiAgICByZXR1cm4gaW5kZW50ID8gY29tbWVudC5yZXBsYWNlKC9eKD8hICokKS9nbSwgaW5kZW50KSA6IGNvbW1lbnQ7XG59XG5jb25zdCBsaW5lQ29tbWVudCA9IChzdHIsIGluZGVudCwgY29tbWVudCkgPT4gc3RyLmVuZHNXaXRoKCdcXG4nKVxuICAgID8gaW5kZW50Q29tbWVudChjb21tZW50LCBpbmRlbnQpXG4gICAgOiBjb21tZW50LmluY2x1ZGVzKCdcXG4nKVxuICAgICAgICA/ICdcXG4nICsgaW5kZW50Q29tbWVudChjb21tZW50LCBpbmRlbnQpXG4gICAgICAgIDogKHN0ci5lbmRzV2l0aCgnICcpID8gJycgOiAnICcpICsgY29tbWVudDtcblxuZXhwb3J0IHsgaW5kZW50Q29tbWVudCwgbGluZUNvbW1lbnQsIHN0cmluZ2lmeUNvbW1lbnQgfTtcbiIsICJjb25zdCBGT0xEX0ZMT1cgPSAnZmxvdyc7XG5jb25zdCBGT0xEX0JMT0NLID0gJ2Jsb2NrJztcbmNvbnN0IEZPTERfUVVPVEVEID0gJ3F1b3RlZCc7XG4vKipcbiAqIFRyaWVzIHRvIGtlZXAgaW5wdXQgYXQgdXAgdG8gYGxpbmVXaWR0aGAgY2hhcmFjdGVycywgc3BsaXR0aW5nIG9ubHkgb24gc3BhY2VzXG4gKiBub3QgZm9sbG93ZWQgYnkgbmV3bGluZXMgb3Igc3BhY2VzIHVubGVzcyBgbW9kZWAgaXMgYCdxdW90ZWQnYC4gTGluZXMgYXJlXG4gKiB0ZXJtaW5hdGVkIHdpdGggYFxcbmAgYW5kIHN0YXJ0ZWQgd2l0aCBgaW5kZW50YC5cbiAqL1xuZnVuY3Rpb24gZm9sZEZsb3dMaW5lcyh0ZXh0LCBpbmRlbnQsIG1vZGUgPSAnZmxvdycsIHsgaW5kZW50QXRTdGFydCwgbGluZVdpZHRoID0gODAsIG1pbkNvbnRlbnRXaWR0aCA9IDIwLCBvbkZvbGQsIG9uT3ZlcmZsb3cgfSA9IHt9KSB7XG4gICAgaWYgKCFsaW5lV2lkdGggfHwgbGluZVdpZHRoIDwgMClcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgaWYgKGxpbmVXaWR0aCA8IG1pbkNvbnRlbnRXaWR0aClcbiAgICAgICAgbWluQ29udGVudFdpZHRoID0gMDtcbiAgICBjb25zdCBlbmRTdGVwID0gTWF0aC5tYXgoMSArIG1pbkNvbnRlbnRXaWR0aCwgMSArIGxpbmVXaWR0aCAtIGluZGVudC5sZW5ndGgpO1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSBlbmRTdGVwKVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICBjb25zdCBmb2xkcyA9IFtdO1xuICAgIGNvbnN0IGVzY2FwZWRGb2xkcyA9IHt9O1xuICAgIGxldCBlbmQgPSBsaW5lV2lkdGggLSBpbmRlbnQubGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgaW5kZW50QXRTdGFydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGluZGVudEF0U3RhcnQgPiBsaW5lV2lkdGggLSBNYXRoLm1heCgyLCBtaW5Db250ZW50V2lkdGgpKVxuICAgICAgICAgICAgZm9sZHMucHVzaCgwKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZW5kID0gbGluZVdpZHRoIC0gaW5kZW50QXRTdGFydDtcbiAgICB9XG4gICAgbGV0IHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgIGxldCBwcmV2ID0gdW5kZWZpbmVkO1xuICAgIGxldCBvdmVyZmxvdyA9IGZhbHNlO1xuICAgIGxldCBpID0gLTE7XG4gICAgbGV0IGVzY1N0YXJ0ID0gLTE7XG4gICAgbGV0IGVzY0VuZCA9IC0xO1xuICAgIGlmIChtb2RlID09PSBGT0xEX0JMT0NLKSB7XG4gICAgICAgIGkgPSBjb25zdW1lTW9yZUluZGVudGVkTGluZXModGV4dCwgaSwgaW5kZW50Lmxlbmd0aCk7XG4gICAgICAgIGlmIChpICE9PSAtMSlcbiAgICAgICAgICAgIGVuZCA9IGkgKyBlbmRTdGVwO1xuICAgIH1cbiAgICBmb3IgKGxldCBjaDsgKGNoID0gdGV4dFsoaSArPSAxKV0pOykge1xuICAgICAgICBpZiAobW9kZSA9PT0gRk9MRF9RVU9URUQgJiYgY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgZXNjU3RhcnQgPSBpO1xuICAgICAgICAgICAgc3dpdGNoICh0ZXh0W2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1UnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVzY0VuZCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09IEZPTERfQkxPQ0spXG4gICAgICAgICAgICAgICAgaSA9IGNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyh0ZXh0LCBpLCBpbmRlbnQubGVuZ3RoKTtcbiAgICAgICAgICAgIGVuZCA9IGkgKyBpbmRlbnQubGVuZ3RoICsgZW5kU3RlcDtcbiAgICAgICAgICAgIHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoID09PSAnICcgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICYmXG4gICAgICAgICAgICAgICAgcHJldiAhPT0gJyAnICYmXG4gICAgICAgICAgICAgICAgcHJldiAhPT0gJ1xcbicgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICE9PSAnXFx0Jykge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIHN1cnJvdW5kZWQgYnkgbm9uLXNwYWNlIGNhbiBiZSByZXBsYWNlZCB3aXRoIG5ld2xpbmUgKyBpbmRlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gdGV4dFtpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dCAhPT0gJyAnICYmIG5leHQgIT09ICdcXG4nICYmIG5leHQgIT09ICdcXHQnKVxuICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9sZHMucHVzaChzcGxpdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHNwbGl0ICsgZW5kU3RlcDtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09IEZPTERfUVVPVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaXRlLXNwYWNlIGNvbGxlY3RlZCBhdCBlbmQgbWF5IHN0cmV0Y2ggcGFzdCBsaW5lV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZXYgPT09ICcgJyB8fCBwcmV2ID09PSAnXFx0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0ZXh0WyhpICs9IDEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBuZXdsaW5lIGVzY2FwZSwgYnV0IGRvbid0IGJyZWFrIHByZWNlZGluZyBlc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaiA9IGkgPiBlc2NFbmQgKyAxID8gaSAtIDIgOiBlc2NTdGFydCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIGxpbmVXaWR0aCAmIG1pbkNvbnRlbnRXaWR0aCBhcmUgc2hvcnRlciB0aGFuIGFuIGVzY2FwZSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVzY2FwZWRGb2xkc1tqXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAgICAgICAgICAgICBmb2xkcy5wdXNoKGopO1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkRm9sZHNbal0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBqICsgZW5kU3RlcDtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBjaDtcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93ICYmIG9uT3ZlcmZsb3cpXG4gICAgICAgIG9uT3ZlcmZsb3coKTtcbiAgICBpZiAoZm9sZHMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICBpZiAob25Gb2xkKVxuICAgICAgICBvbkZvbGQoKTtcbiAgICBsZXQgcmVzID0gdGV4dC5zbGljZSgwLCBmb2xkc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBmb2xkID0gZm9sZHNbaV07XG4gICAgICAgIGNvbnN0IGVuZCA9IGZvbGRzW2kgKyAxXSB8fCB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGZvbGQgPT09IDApXG4gICAgICAgICAgICByZXMgPSBgXFxuJHtpbmRlbnR9JHt0ZXh0LnNsaWNlKDAsIGVuZCl9YDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gRk9MRF9RVU9URUQgJiYgZXNjYXBlZEZvbGRzW2ZvbGRdKVxuICAgICAgICAgICAgICAgIHJlcyArPSBgJHt0ZXh0W2ZvbGRdfVxcXFxgO1xuICAgICAgICAgICAgcmVzICs9IGBcXG4ke2luZGVudH0ke3RleHQuc2xpY2UoZm9sZCArIDEsIGVuZCl9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBQcmVzdW1lcyBgaSArIDFgIGlzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmVcbiAqIEByZXR1cm5zIGluZGV4IG9mIGxhc3QgbmV3bGluZSBpbiBtb3JlLWluZGVudGVkIGJsb2NrXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyh0ZXh0LCBpLCBpbmRlbnQpIHtcbiAgICBsZXQgZW5kID0gaTtcbiAgICBsZXQgc3RhcnQgPSBpICsgMTtcbiAgICBsZXQgY2ggPSB0ZXh0W3N0YXJ0XTtcbiAgICB3aGlsZSAoY2ggPT09ICcgJyB8fCBjaCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgaWYgKGkgPCBzdGFydCArIGluZGVudCkge1xuICAgICAgICAgICAgY2ggPSB0ZXh0WysraV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY2ggPSB0ZXh0WysraV07XG4gICAgICAgICAgICB9IHdoaWxlIChjaCAmJiBjaCAhPT0gJ1xcbicpO1xuICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBjaCA9IHRleHRbc3RhcnRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmQ7XG59XG5cbmV4cG9ydCB7IEZPTERfQkxPQ0ssIEZPTERfRkxPVywgRk9MRF9RVU9URUQsIGZvbGRGbG93TGluZXMgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgZm9sZEZsb3dMaW5lcywgRk9MRF9RVU9URUQsIEZPTERfRkxPVywgRk9MRF9CTE9DSyB9IGZyb20gJy4vZm9sZEZsb3dMaW5lcy5qcyc7XG5cbmNvbnN0IGdldEZvbGRPcHRpb25zID0gKGN0eCwgaXNCbG9jaykgPT4gKHtcbiAgICBpbmRlbnRBdFN0YXJ0OiBpc0Jsb2NrID8gY3R4LmluZGVudC5sZW5ndGggOiBjdHguaW5kZW50QXRTdGFydCxcbiAgICBsaW5lV2lkdGg6IGN0eC5vcHRpb25zLmxpbmVXaWR0aCxcbiAgICBtaW5Db250ZW50V2lkdGg6IGN0eC5vcHRpb25zLm1pbkNvbnRlbnRXaWR0aFxufSk7XG4vLyBBbHNvIGNoZWNrcyBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCAlLCBhcyBwYXJzaW5nIHRoZSBvdXRwdXQgYXMgWUFNTCAxLjEgd2lsbFxuLy8gcHJlc3VtZSB0aGF0J3Mgc3RhcnRpbmcgYSBuZXcgZG9jdW1lbnQuXG5jb25zdCBjb250YWluc0RvY3VtZW50TWFya2VyID0gKHN0cikgPT4gL14oJXwtLS18XFwuXFwuXFwuKS9tLnRlc3Qoc3RyKTtcbmZ1bmN0aW9uIGxpbmVMZW5ndGhPdmVyTGltaXQoc3RyLCBsaW5lV2lkdGgsIGluZGVudExlbmd0aCkge1xuICAgIGlmICghbGluZVdpZHRoIHx8IGxpbmVXaWR0aCA8IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsaW1pdCA9IGxpbmVXaWR0aCAtIGluZGVudExlbmd0aDtcbiAgICBjb25zdCBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAgIGlmIChzdHJMZW4gPD0gbGltaXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMCwgc3RhcnQgPSAwOyBpIDwgc3RyTGVuOyArK2kpIHtcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiBsaW1pdClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBpZiAoc3RyTGVuIC0gc3RhcnQgPD0gbGltaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZG91YmxlUXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChjdHgub3B0aW9ucy5kb3VibGVRdW90ZWRBc0pTT04pXG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIGNvbnN0IHsgaW1wbGljaXRLZXkgfSA9IGN0eDtcbiAgICBjb25zdCBtaW5NdWx0aUxpbmVMZW5ndGggPSBjdHgub3B0aW9ucy5kb3VibGVRdW90ZWRNaW5NdWx0aUxpbmVMZW5ndGg7XG4gICAgY29uc3QgaW5kZW50ID0gY3R4LmluZGVudCB8fCAoY29udGFpbnNEb2N1bWVudE1hcmtlcih2YWx1ZSkgPyAnICAnIDogJycpO1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBjaCA9IGpzb25baV07IGNoOyBjaCA9IGpzb25bKytpXSkge1xuICAgICAgICBpZiAoY2ggPT09ICcgJyAmJiBqc29uW2kgKyAxXSA9PT0gJ1xcXFwnICYmIGpzb25baSArIDJdID09PSAnbicpIHtcbiAgICAgICAgICAgIC8vIHNwYWNlIGJlZm9yZSBuZXdsaW5lIG5lZWRzIHRvIGJlIGVzY2FwZWQgdG8gbm90IGJlIGZvbGRlZFxuICAgICAgICAgICAgc3RyICs9IGpzb24uc2xpY2Uoc3RhcnQsIGkpICsgJ1xcXFwgJztcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgICAgICAgIGNoID0gJ1xcXFwnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgc3dpdGNoIChqc29uW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0ganNvbi5zbGljZShzdGFydCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0ganNvbi5zdWJzdHIoaSArIDIsIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMDAwMCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwMDA3JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcYSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAwMGInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMDAxYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwMDg1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcTic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAwYTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMjAyOCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXEwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyMDI5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcUCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cigwLCAyKSA9PT0gJzAwJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXHgnICsgY29kZS5zdWJzdHIoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBqc29uLnN1YnN0cihpLCA2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbXBsaWNpdEtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbltpICsgMl0gPT09ICdcIicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ubGVuZ3RoIDwgbWluTXVsdGlMaW5lTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xkaW5nIHdpbGwgZWF0IGZpcnN0IG5ld2xpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBqc29uLnNsaWNlKHN0YXJ0LCBpKSArICdcXG5cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25baSArIDJdID09PSAnXFxcXCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2kgKyAzXSA9PT0gJ24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpICsgNF0gIT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGluZGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwYWNlIGFmdGVyIG5ld2xpbmUgbmVlZHMgdG8gYmUgZXNjYXBlZCB0byBub3QgYmUgZm9sZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltpICsgMl0gPT09ICcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHN0ciA9IHN0YXJ0ID8gc3RyICsganNvbi5zbGljZShzdGFydCkgOiBqc29uO1xuICAgIHJldHVybiBpbXBsaWNpdEtleVxuICAgICAgICA/IHN0clxuICAgICAgICA6IGZvbGRGbG93TGluZXMoc3RyLCBpbmRlbnQsIEZPTERfUVVPVEVELCBnZXRGb2xkT3B0aW9ucyhjdHgsIGZhbHNlKSk7XG59XG5mdW5jdGlvbiBzaW5nbGVRdW90ZWRTdHJpbmcodmFsdWUsIGN0eCkge1xuICAgIGlmIChjdHgub3B0aW9ucy5zaW5nbGVRdW90ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgKGN0eC5pbXBsaWNpdEtleSAmJiB2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHx8XG4gICAgICAgIC9bIFxcdF1cXG58XFxuWyBcXHRdLy50ZXN0KHZhbHVlKSAvLyBzaW5nbGUgcXVvdGVkIHN0cmluZyBjYW4ndCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcm91bmQgbmV3bGluZVxuICAgIClcbiAgICAgICAgcmV0dXJuIGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgICBjb25zdCBpbmRlbnQgPSBjdHguaW5kZW50IHx8IChjb250YWluc0RvY3VtZW50TWFya2VyKHZhbHVlKSA/ICcgICcgOiAnJyk7XG4gICAgY29uc3QgcmVzID0gXCInXCIgKyB2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIikucmVwbGFjZSgvXFxuKy9nLCBgJCZcXG4ke2luZGVudH1gKSArIFwiJ1wiO1xuICAgIHJldHVybiBjdHguaW1wbGljaXRLZXlcbiAgICAgICAgPyByZXNcbiAgICAgICAgOiBmb2xkRmxvd0xpbmVzKHJlcywgaW5kZW50LCBGT0xEX0ZMT1csIGdldEZvbGRPcHRpb25zKGN0eCwgZmFsc2UpKTtcbn1cbmZ1bmN0aW9uIHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KSB7XG4gICAgY29uc3QgeyBzaW5nbGVRdW90ZSB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgbGV0IHFzO1xuICAgIGlmIChzaW5nbGVRdW90ZSA9PT0gZmFsc2UpXG4gICAgICAgIHFzID0gZG91YmxlUXVvdGVkU3RyaW5nO1xuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBoYXNEb3VibGUgPSB2YWx1ZS5pbmNsdWRlcygnXCInKTtcbiAgICAgICAgY29uc3QgaGFzU2luZ2xlID0gdmFsdWUuaW5jbHVkZXMoXCInXCIpO1xuICAgICAgICBpZiAoaGFzRG91YmxlICYmICFoYXNTaW5nbGUpXG4gICAgICAgICAgICBxcyA9IHNpbmdsZVF1b3RlZFN0cmluZztcbiAgICAgICAgZWxzZSBpZiAoaGFzU2luZ2xlICYmICFoYXNEb3VibGUpXG4gICAgICAgICAgICBxcyA9IGRvdWJsZVF1b3RlZFN0cmluZztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcXMgPSBzaW5nbGVRdW90ZSA/IHNpbmdsZVF1b3RlZFN0cmluZyA6IGRvdWJsZVF1b3RlZFN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHFzKHZhbHVlLCBjdHgpO1xufVxuLy8gVGhlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXZvaWRzIGEgcG9seW5vbWlhbCBzZWFyY2gsXG4vLyBidXQgaXNuJ3Qgc3VwcG9ydGVkIHlldCBvbiBTYWZhcmk6IGh0dHBzOi8vY2FuaXVzZS5jb20vanMtcmVnZXhwLWxvb2tiZWhpbmRcbmxldCBibG9ja0VuZE5ld2xpbmVzO1xudHJ5IHtcbiAgICBibG9ja0VuZE5ld2xpbmVzID0gbmV3IFJlZ0V4cCgnKF58KD88IVxcbikpXFxuKyg/IVxcbnwkKScsICdnJyk7XG59XG5jYXRjaCB7XG4gICAgYmxvY2tFbmROZXdsaW5lcyA9IC9cXG4rKD8hXFxufCQpL2c7XG59XG5mdW5jdGlvbiBibG9ja1N0cmluZyh7IGNvbW1lbnQsIHR5cGUsIHZhbHVlIH0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgIGNvbnN0IHsgYmxvY2tRdW90ZSwgY29tbWVudFN0cmluZywgbGluZVdpZHRoIH0gPSBjdHgub3B0aW9ucztcbiAgICAvLyAxLiBCbG9jayBjYW4ndCBlbmQgaW4gd2hpdGVzcGFjZSB1bmxlc3MgdGhlIGxhc3QgbGluZSBpcyBub24tZW1wdHkuXG4gICAgLy8gMi4gU3RyaW5ncyBjb25zaXN0aW5nIG9mIG9ubHkgd2hpdGVzcGFjZSBhcmUgYmVzdCByZW5kZXJlZCBleHBsaWNpdGx5LlxuICAgIGlmICghYmxvY2tRdW90ZSB8fCAvXFxuW1xcdCBdKyQvLnRlc3QodmFsdWUpIHx8IC9eXFxzKiQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBxdW90ZWRTdHJpbmcodmFsdWUsIGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGluZGVudCA9IGN0eC5pbmRlbnQgfHxcbiAgICAgICAgKGN0eC5mb3JjZUJsb2NrSW5kZW50IHx8IGNvbnRhaW5zRG9jdW1lbnRNYXJrZXIodmFsdWUpID8gJyAgJyA6ICcnKTtcbiAgICBjb25zdCBsaXRlcmFsID0gYmxvY2tRdW90ZSA9PT0gJ2xpdGVyYWwnXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGJsb2NrUXVvdGUgPT09ICdmb2xkZWQnIHx8IHR5cGUgPT09IFNjYWxhci5CTE9DS19GT0xERURcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdHlwZSA9PT0gU2NhbGFyLkJMT0NLX0xJVEVSQUxcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6ICFsaW5lTGVuZ3RoT3ZlckxpbWl0KHZhbHVlLCBsaW5lV2lkdGgsIGluZGVudC5sZW5ndGgpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBsaXRlcmFsID8gJ3xcXG4nIDogJz5cXG4nO1xuICAgIC8vIGRldGVybWluZSBjaG9tcGluZyBmcm9tIHdoaXRlc3BhY2UgYXQgdmFsdWUgZW5kXG4gICAgbGV0IGNob21wO1xuICAgIGxldCBlbmRTdGFydDtcbiAgICBmb3IgKGVuZFN0YXJ0ID0gdmFsdWUubGVuZ3RoOyBlbmRTdGFydCA+IDA7IC0tZW5kU3RhcnQpIHtcbiAgICAgICAgY29uc3QgY2ggPSB2YWx1ZVtlbmRTdGFydCAtIDFdO1xuICAgICAgICBpZiAoY2ggIT09ICdcXG4nICYmIGNoICE9PSAnXFx0JyAmJiBjaCAhPT0gJyAnKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBlbmQgPSB2YWx1ZS5zdWJzdHJpbmcoZW5kU3RhcnQpO1xuICAgIGNvbnN0IGVuZE5sUG9zID0gZW5kLmluZGV4T2YoJ1xcbicpO1xuICAgIGlmIChlbmRObFBvcyA9PT0gLTEpIHtcbiAgICAgICAgY2hvbXAgPSAnLSc7IC8vIHN0cmlwXG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBlbmQgfHwgZW5kTmxQb3MgIT09IGVuZC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNob21wID0gJysnOyAvLyBrZWVwXG4gICAgICAgIGlmIChvbkNob21wS2VlcClcbiAgICAgICAgICAgIG9uQ2hvbXBLZWVwKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaG9tcCA9ICcnOyAvLyBjbGlwXG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAtZW5kLmxlbmd0aCk7XG4gICAgICAgIGlmIChlbmRbZW5kLmxlbmd0aCAtIDFdID09PSAnXFxuJylcbiAgICAgICAgICAgIGVuZCA9IGVuZC5zbGljZSgwLCAtMSk7XG4gICAgICAgIGVuZCA9IGVuZC5yZXBsYWNlKGJsb2NrRW5kTmV3bGluZXMsIGAkJiR7aW5kZW50fWApO1xuICAgIH1cbiAgICAvLyBkZXRlcm1pbmUgaW5kZW50IGluZGljYXRvciBmcm9tIHdoaXRlc3BhY2UgYXQgdmFsdWUgc3RhcnRcbiAgICBsZXQgc3RhcnRXaXRoU3BhY2UgPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRFbmQ7XG4gICAgbGV0IHN0YXJ0TmxQb3MgPSAtMTtcbiAgICBmb3IgKHN0YXJ0RW5kID0gMDsgc3RhcnRFbmQgPCB2YWx1ZS5sZW5ndGg7ICsrc3RhcnRFbmQpIHtcbiAgICAgICAgY29uc3QgY2ggPSB2YWx1ZVtzdGFydEVuZF07XG4gICAgICAgIGlmIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgc3RhcnRXaXRoU3BhY2UgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICBzdGFydE5sUG9zID0gc3RhcnRFbmQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnRObFBvcyA8IHN0YXJ0RW5kID8gc3RhcnRObFBvcyArIDEgOiBzdGFydEVuZCk7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0Lmxlbmd0aCk7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQucmVwbGFjZSgvXFxuKy9nLCBgJCYke2luZGVudH1gKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZW50U2l6ZSA9IGluZGVudCA/ICcyJyA6ICcxJzsgLy8gcm9vdCBpcyBhdCAtMVxuICAgIGxldCBoZWFkZXIgPSAobGl0ZXJhbCA/ICd8JyA6ICc+JykgKyAoc3RhcnRXaXRoU3BhY2UgPyBpbmRlbnRTaXplIDogJycpICsgY2hvbXA7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgaGVhZGVyICs9ICcgJyArIGNvbW1lbnRTdHJpbmcoY29tbWVudC5yZXBsYWNlKC8gP1tcXHJcXG5dKy9nLCAnICcpKTtcbiAgICAgICAgaWYgKG9uQ29tbWVudClcbiAgICAgICAgICAgIG9uQ29tbWVudCgpO1xuICAgIH1cbiAgICBpZiAobGl0ZXJhbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgYCQmJHtpbmRlbnR9YCk7XG4gICAgICAgIHJldHVybiBgJHtoZWFkZXJ9XFxuJHtpbmRlbnR9JHtzdGFydH0ke3ZhbHVlfSR7ZW5kfWA7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnJlcGxhY2UoL1xcbisvZywgJ1xcbiQmJylcbiAgICAgICAgLnJlcGxhY2UoLyg/Ol58XFxuKShbXFx0IF0uKikoPzooW1xcblxcdCBdKilcXG4oPyFbXFxuXFx0IF0pKT8vZywgJyQxJDInKSAvLyBtb3JlLWluZGVudGVkIGxpbmVzIGFyZW4ndCBmb2xkZWRcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgXiBtb3JlLWluZC4gXiBlbXB0eSAgICAgXiBjYXB0dXJlIG5leHQgZW1wdHkgbGluZXMgb25seSBhdCBlbmQgb2YgaW5kZW50XG4gICAgICAgIC5yZXBsYWNlKC9cXG4rL2csIGAkJiR7aW5kZW50fWApO1xuICAgIGNvbnN0IGJvZHkgPSBmb2xkRmxvd0xpbmVzKGAke3N0YXJ0fSR7dmFsdWV9JHtlbmR9YCwgaW5kZW50LCBGT0xEX0JMT0NLLCBnZXRGb2xkT3B0aW9ucyhjdHgsIHRydWUpKTtcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcbiR7aW5kZW50fSR7Ym9keX1gO1xufVxuZnVuY3Rpb24gcGxhaW5TdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICBjb25zdCB7IGFjdHVhbFN0cmluZywgaW1wbGljaXRLZXksIGluZGVudCwgaW5kZW50U3RlcCwgaW5GbG93IH0gPSBjdHg7XG4gICAgaWYgKChpbXBsaWNpdEtleSAmJiB2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHx8XG4gICAgICAgIChpbkZsb3cgJiYgL1tbXFxde30sXS8udGVzdCh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBxdW90ZWRTdHJpbmcodmFsdWUsIGN0eCk7XG4gICAgfVxuICAgIGlmICghdmFsdWUgfHxcbiAgICAgICAgL15bXFxuXFx0ICxbXFxde30jJiohfD4nXCIlQGBdfF5bPy1dJHxeWz8tXVsgXFx0XXxbXFxuOl1bIFxcdF18WyBcXHRdXFxufFtcXG5cXHQgXSN8W1xcblxcdCA6XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIC8vIG5vdCBhbGxvd2VkOlxuICAgICAgICAvLyAtIGVtcHR5IHN0cmluZywgJy0nIG9yICc/J1xuICAgICAgICAvLyAtIHN0YXJ0IHdpdGggYW4gaW5kaWNhdG9yIGNoYXJhY3RlciAoZXhjZXB0IFs/Oi1dKSBvciAvWz8tXSAvXG4gICAgICAgIC8vIC0gJ1xcbiAnLCAnOiAnIG9yICcgXFxuJyBhbnl3aGVyZVxuICAgICAgICAvLyAtICcjJyBub3QgcHJlY2VkZWQgYnkgYSBub24tc3BhY2UgY2hhclxuICAgICAgICAvLyAtIGVuZCB3aXRoICcgJyBvciAnOidcbiAgICAgICAgcmV0dXJuIGltcGxpY2l0S2V5IHx8IGluRmxvdyB8fCAhdmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICAgICAgICAgICA/IHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KVxuICAgICAgICAgICAgOiBibG9ja1N0cmluZyhpdGVtLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbiAgICBpZiAoIWltcGxpY2l0S2V5ICYmXG4gICAgICAgICFpbkZsb3cgJiZcbiAgICAgICAgdHlwZSAhPT0gU2NhbGFyLlBMQUlOICYmXG4gICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICAvLyBXaGVyZSBhbGxvd2VkICYgdHlwZSBub3Qgc2V0IGV4cGxpY2l0bHksIHByZWZlciBibG9jayBzdHlsZSBmb3IgbXVsdGlsaW5lIHN0cmluZ3NcbiAgICAgICAgcmV0dXJuIGJsb2NrU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgfVxuICAgIGlmIChjb250YWluc0RvY3VtZW50TWFya2VyKHZhbHVlKSkge1xuICAgICAgICBpZiAoaW5kZW50ID09PSAnJykge1xuICAgICAgICAgICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGJsb2NrU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW1wbGljaXRLZXkgJiYgaW5kZW50ID09PSBpbmRlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0ciA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgYCQmXFxuJHtpbmRlbnR9YCk7XG4gICAgLy8gVmVyaWZ5IHRoYXQgb3V0cHV0IHdpbGwgYmUgcGFyc2VkIGFzIGEgc3RyaW5nLCBhcyBlLmcuIHBsYWluIG51bWJlcnMgYW5kXG4gICAgLy8gYm9vbGVhbnMgZ2V0IHBhcnNlZCB3aXRoIHRob3NlIHR5cGVzIGluIHYxLjIgKGUuZy4gJzQyJywgJ3RydWUnICYgJzAuOWUtMycpLFxuICAgIC8vIGFuZCBvdGhlcnMgaW4gdjEuMS5cbiAgICBpZiAoYWN0dWFsU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRlc3QgPSAodGFnKSA9PiB0YWcuZGVmYXVsdCAmJiB0YWcudGFnICE9PSAndGFnOnlhbWwub3JnLDIwMDI6c3RyJyAmJiB0YWcudGVzdD8udGVzdChzdHIpO1xuICAgICAgICBjb25zdCB7IGNvbXBhdCwgdGFncyB9ID0gY3R4LmRvYy5zY2hlbWE7XG4gICAgICAgIGlmICh0YWdzLnNvbWUodGVzdCkgfHwgY29tcGF0Py5zb21lKHRlc3QpKVxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIGltcGxpY2l0S2V5XG4gICAgICAgID8gc3RyXG4gICAgICAgIDogZm9sZEZsb3dMaW5lcyhzdHIsIGluZGVudCwgRk9MRF9GTE9XLCBnZXRGb2xkT3B0aW9ucyhjdHgsIGZhbHNlKSk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyBpbXBsaWNpdEtleSwgaW5GbG93IH0gPSBjdHg7XG4gICAgY29uc3Qgc3MgPSB0eXBlb2YgaXRlbS52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBpdGVtXG4gICAgICAgIDogT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyB2YWx1ZTogU3RyaW5nKGl0ZW0udmFsdWUpIH0pO1xuICAgIGxldCB7IHR5cGUgfSA9IGl0ZW07XG4gICAgaWYgKHR5cGUgIT09IFNjYWxhci5RVU9URV9ET1VCTEUpIHtcbiAgICAgICAgLy8gZm9yY2UgZG91YmxlIHF1b3RlcyBvbiBjb250cm9sIGNoYXJhY3RlcnMgJiB1bnBhaXJlZCBzdXJyb2dhdGVzXG4gICAgICAgIGlmICgvW1xceDAwLVxceDA4XFx4MGItXFx4MWZcXHg3Zi1cXHg5ZlxcdXtEODAwfS1cXHV7REZGRn1dL3UudGVzdChzcy52YWx1ZSkpXG4gICAgICAgICAgICB0eXBlID0gU2NhbGFyLlFVT1RFX0RPVUJMRTtcbiAgICB9XG4gICAgY29uc3QgX3N0cmluZ2lmeSA9IChfdHlwZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5CTE9DS19GT0xERUQ6XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5CTE9DS19MSVRFUkFMOlxuICAgICAgICAgICAgICAgIHJldHVybiBpbXBsaWNpdEtleSB8fCBpbkZsb3dcbiAgICAgICAgICAgICAgICAgICAgPyBxdW90ZWRTdHJpbmcoc3MudmFsdWUsIGN0eCkgLy8gYmxvY2tzIGFyZSBub3QgdmFsaWQgaW5zaWRlIGZsb3cgY29udGFpbmVyc1xuICAgICAgICAgICAgICAgICAgICA6IGJsb2NrU3RyaW5nKHNzLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgICAgICAgICAgY2FzZSBTY2FsYXIuUVVPVEVfRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBkb3VibGVRdW90ZWRTdHJpbmcoc3MudmFsdWUsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5RVU9URV9TSU5HTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpbmdsZVF1b3RlZFN0cmluZyhzcy52YWx1ZSwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgU2NhbGFyLlBMQUlOOlxuICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblN0cmluZyhzcywgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCByZXMgPSBfc3RyaW5naWZ5KHR5cGUpO1xuICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBkZWZhdWx0S2V5VHlwZSwgZGVmYXVsdFN0cmluZ1R5cGUgfSA9IGN0eC5vcHRpb25zO1xuICAgICAgICBjb25zdCB0ID0gKGltcGxpY2l0S2V5ICYmIGRlZmF1bHRLZXlUeXBlKSB8fCBkZWZhdWx0U3RyaW5nVHlwZTtcbiAgICAgICAgcmVzID0gX3N0cmluZ2lmeSh0KTtcbiAgICAgICAgaWYgKHJlcyA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGVmYXVsdCBzdHJpbmcgdHlwZSAke3R9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeVN0cmluZyB9O1xuIiwgImltcG9ydCB7IGFuY2hvcklzVmFsaWQgfSBmcm9tICcuLi9kb2MvYW5jaG9ycy5qcyc7XG5pbXBvcnQgeyBpc1BhaXIsIGlzQWxpYXMsIGlzTm9kZSwgaXNTY2FsYXIsIGlzQ29sbGVjdGlvbiB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeUNvbW1lbnQgfSBmcm9tICcuL3N0cmluZ2lmeUNvbW1lbnQuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RyaW5nIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJpbmcuanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdpZnlDb250ZXh0KGRvYywgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBibG9ja1F1b3RlOiB0cnVlLFxuICAgICAgICBjb21tZW50U3RyaW5nOiBzdHJpbmdpZnlDb21tZW50LFxuICAgICAgICBkZWZhdWx0S2V5VHlwZTogbnVsbCxcbiAgICAgICAgZGVmYXVsdFN0cmluZ1R5cGU6ICdQTEFJTicsXG4gICAgICAgIGRpcmVjdGl2ZXM6IG51bGwsXG4gICAgICAgIGRvdWJsZVF1b3RlZEFzSlNPTjogZmFsc2UsXG4gICAgICAgIGRvdWJsZVF1b3RlZE1pbk11bHRpTGluZUxlbmd0aDogNDAsXG4gICAgICAgIGZhbHNlU3RyOiAnZmFsc2UnLFxuICAgICAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IHRydWUsXG4gICAgICAgIGluZGVudFNlcTogdHJ1ZSxcbiAgICAgICAgbGluZVdpZHRoOiA4MCxcbiAgICAgICAgbWluQ29udGVudFdpZHRoOiAyMCxcbiAgICAgICAgbnVsbFN0cjogJ251bGwnLFxuICAgICAgICBzaW1wbGVLZXlzOiBmYWxzZSxcbiAgICAgICAgc2luZ2xlUXVvdGU6IG51bGwsXG4gICAgICAgIHRydWVTdHI6ICd0cnVlJyxcbiAgICAgICAgdmVyaWZ5QWxpYXNPcmRlcjogdHJ1ZVxuICAgIH0sIGRvYy5zY2hlbWEudG9TdHJpbmdPcHRpb25zLCBvcHRpb25zKTtcbiAgICBsZXQgaW5GbG93O1xuICAgIHN3aXRjaCAob3B0LmNvbGxlY3Rpb25TdHlsZSkge1xuICAgICAgICBjYXNlICdibG9jayc6XG4gICAgICAgICAgICBpbkZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmbG93JzpcbiAgICAgICAgICAgIGluRmxvdyA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGluRmxvdyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGFuY2hvcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IG9wdC5mbG93Q29sbGVjdGlvblBhZGRpbmcgPyAnICcgOiAnJyxcbiAgICAgICAgaW5kZW50OiAnJyxcbiAgICAgICAgaW5kZW50U3RlcDogdHlwZW9mIG9wdC5pbmRlbnQgPT09ICdudW1iZXInID8gJyAnLnJlcGVhdChvcHQuaW5kZW50KSA6ICcgICcsXG4gICAgICAgIGluRmxvdyxcbiAgICAgICAgb3B0aW9uczogb3B0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFRhZ09iamVjdCh0YWdzLCBpdGVtKSB7XG4gICAgaWYgKGl0ZW0udGFnKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGFncy5maWx0ZXIodCA9PiB0LnRhZyA9PT0gaXRlbS50YWcpO1xuICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiBtYXRjaC5maW5kKHQgPT4gdC5mb3JtYXQgPT09IGl0ZW0uZm9ybWF0KSA/PyBtYXRjaFswXTtcbiAgICB9XG4gICAgbGV0IHRhZ09iaiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb2JqO1xuICAgIGlmIChpc1NjYWxhcihpdGVtKSkge1xuICAgICAgICBvYmogPSBpdGVtLnZhbHVlO1xuICAgICAgICBsZXQgbWF0Y2ggPSB0YWdzLmZpbHRlcih0ID0+IHQuaWRlbnRpZnk/LihvYmopKTtcbiAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RNYXRjaCA9IG1hdGNoLmZpbHRlcih0ID0+IHQudGVzdCk7XG4gICAgICAgICAgICBpZiAodGVzdE1hdGNoLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZXN0TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgdGFnT2JqID1cbiAgICAgICAgICAgIG1hdGNoLmZpbmQodCA9PiB0LmZvcm1hdCA9PT0gaXRlbS5mb3JtYXQpID8/IG1hdGNoLmZpbmQodCA9PiAhdC5mb3JtYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqID0gaXRlbTtcbiAgICAgICAgdGFnT2JqID0gdGFncy5maW5kKHQgPT4gdC5ub2RlQ2xhc3MgJiYgb2JqIGluc3RhbmNlb2YgdC5ub2RlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoIXRhZ09iaikge1xuICAgICAgICBjb25zdCBuYW1lID0gb2JqPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyB0eXBlb2Ygb2JqO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhZyBub3QgcmVzb2x2ZWQgZm9yICR7bmFtZX0gdmFsdWVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhZ09iajtcbn1cbi8vIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdmFsdWUgc3RyaW5naWZpZXIgdG8gYWxsb3cgZm9yIGNpcmN1bGFyIGFuY2hvciByZWZzXG5mdW5jdGlvbiBzdHJpbmdpZnlQcm9wcyhub2RlLCB0YWdPYmosIHsgYW5jaG9ycywgZG9jIH0pIHtcbiAgICBpZiAoIWRvYy5kaXJlY3RpdmVzKVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgY29uc3QgcHJvcHMgPSBbXTtcbiAgICBjb25zdCBhbmNob3IgPSAoaXNTY2FsYXIobm9kZSkgfHwgaXNDb2xsZWN0aW9uKG5vZGUpKSAmJiBub2RlLmFuY2hvcjtcbiAgICBpZiAoYW5jaG9yICYmIGFuY2hvcklzVmFsaWQoYW5jaG9yKSkge1xuICAgICAgICBhbmNob3JzLmFkZChhbmNob3IpO1xuICAgICAgICBwcm9wcy5wdXNoKGAmJHthbmNob3J9YCk7XG4gICAgfVxuICAgIGNvbnN0IHRhZyA9IG5vZGUudGFnID8gbm9kZS50YWcgOiB0YWdPYmouZGVmYXVsdCA/IG51bGwgOiB0YWdPYmoudGFnO1xuICAgIGlmICh0YWcpXG4gICAgICAgIHByb3BzLnB1c2goZG9jLmRpcmVjdGl2ZXMudGFnU3RyaW5nKHRhZykpO1xuICAgIHJldHVybiBwcm9wcy5qb2luKCcgJyk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgaWYgKGlzUGFpcihpdGVtKSlcbiAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICBpZiAoaXNBbGlhcyhpdGVtKSkge1xuICAgICAgICBpZiAoY3R4LmRvYy5kaXJlY3RpdmVzKVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoY3R4KTtcbiAgICAgICAgaWYgKGN0eC5yZXNvbHZlZEFsaWFzZXM/LmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHN0cmluZ2lmeSBjaXJjdWxhciBzdHJ1Y3R1cmUgd2l0aG91dCBhbGlhcyBub2Rlc2ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN0eC5yZXNvbHZlZEFsaWFzZXMpXG4gICAgICAgICAgICAgICAgY3R4LnJlc29sdmVkQWxpYXNlcy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY3R4LnJlc29sdmVkQWxpYXNlcyA9IG5ldyBTZXQoW2l0ZW1dKTtcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnJlc29sdmUoY3R4LmRvYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRhZ09iaiA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBub2RlID0gaXNOb2RlKGl0ZW0pXG4gICAgICAgID8gaXRlbVxuICAgICAgICA6IGN0eC5kb2MuY3JlYXRlTm9kZShpdGVtLCB7IG9uVGFnT2JqOiBvID0+ICh0YWdPYmogPSBvKSB9KTtcbiAgICBpZiAoIXRhZ09iailcbiAgICAgICAgdGFnT2JqID0gZ2V0VGFnT2JqZWN0KGN0eC5kb2Muc2NoZW1hLnRhZ3MsIG5vZGUpO1xuICAgIGNvbnN0IHByb3BzID0gc3RyaW5naWZ5UHJvcHMobm9kZSwgdGFnT2JqLCBjdHgpO1xuICAgIGlmIChwcm9wcy5sZW5ndGggPiAwKVxuICAgICAgICBjdHguaW5kZW50QXRTdGFydCA9IChjdHguaW5kZW50QXRTdGFydCA/PyAwKSArIHByb3BzLmxlbmd0aCArIDE7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIHRhZ09iai5zdHJpbmdpZnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB0YWdPYmouc3RyaW5naWZ5KG5vZGUsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcClcbiAgICAgICAgOiBpc1NjYWxhcihub2RlKVxuICAgICAgICAgICAgPyBzdHJpbmdpZnlTdHJpbmcobm9kZSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKVxuICAgICAgICAgICAgOiBub2RlLnRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgaWYgKCFwcm9wcylcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICByZXR1cm4gaXNTY2FsYXIobm9kZSkgfHwgc3RyWzBdID09PSAneycgfHwgc3RyWzBdID09PSAnWydcbiAgICAgICAgPyBgJHtwcm9wc30gJHtzdHJ9YFxuICAgICAgICA6IGAke3Byb3BzfVxcbiR7Y3R4LmluZGVudH0ke3N0cn1gO1xufVxuXG5leHBvcnQgeyBjcmVhdGVTdHJpbmdpZnlDb250ZXh0LCBzdHJpbmdpZnkgfTtcbiIsICJpbXBvcnQgeyBpc0NvbGxlY3Rpb24sIGlzTm9kZSwgaXNTY2FsYXIsIGlzU2VxIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmltcG9ydCB7IGxpbmVDb21tZW50LCBpbmRlbnRDb21tZW50IH0gZnJvbSAnLi9zdHJpbmdpZnlDb21tZW50LmpzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5UGFpcih7IGtleSwgdmFsdWUgfSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyBhbGxOdWxsVmFsdWVzLCBkb2MsIGluZGVudCwgaW5kZW50U3RlcCwgb3B0aW9uczogeyBjb21tZW50U3RyaW5nLCBpbmRlbnRTZXEsIHNpbXBsZUtleXMgfSB9ID0gY3R4O1xuICAgIGxldCBrZXlDb21tZW50ID0gKGlzTm9kZShrZXkpICYmIGtleS5jb21tZW50KSB8fCBudWxsO1xuICAgIGlmIChzaW1wbGVLZXlzKSB7XG4gICAgICAgIGlmIChrZXlDb21tZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dpdGggc2ltcGxlIGtleXMsIGtleSBub2RlcyBjYW5ub3QgaGF2ZSBjb21tZW50cycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NvbGxlY3Rpb24oa2V5KSB8fCAoIWlzTm9kZShrZXkpICYmIHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1dpdGggc2ltcGxlIGtleXMsIGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYXMgYSBrZXkgdmFsdWUnO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGV4cGxpY2l0S2V5ID0gIXNpbXBsZUtleXMgJiZcbiAgICAgICAgKCFrZXkgfHxcbiAgICAgICAgICAgIChrZXlDb21tZW50ICYmIHZhbHVlID09IG51bGwgJiYgIWN0eC5pbkZsb3cpIHx8XG4gICAgICAgICAgICBpc0NvbGxlY3Rpb24oa2V5KSB8fFxuICAgICAgICAgICAgKGlzU2NhbGFyKGtleSlcbiAgICAgICAgICAgICAgICA/IGtleS50eXBlID09PSBTY2FsYXIuQkxPQ0tfRk9MREVEIHx8IGtleS50eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTFxuICAgICAgICAgICAgICAgIDogdHlwZW9mIGtleSA9PT0gJ29iamVjdCcpKTtcbiAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgYWxsTnVsbFZhbHVlczogZmFsc2UsXG4gICAgICAgIGltcGxpY2l0S2V5OiAhZXhwbGljaXRLZXkgJiYgKHNpbXBsZUtleXMgfHwgIWFsbE51bGxWYWx1ZXMpLFxuICAgICAgICBpbmRlbnQ6IGluZGVudCArIGluZGVudFN0ZXBcbiAgICB9KTtcbiAgICBsZXQga2V5Q29tbWVudERvbmUgPSBmYWxzZTtcbiAgICBsZXQgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgbGV0IHN0ciA9IHN0cmluZ2lmeShrZXksIGN0eCwgKCkgPT4gKGtleUNvbW1lbnREb25lID0gdHJ1ZSksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgaWYgKCFleHBsaWNpdEtleSAmJiAhY3R4LmluRmxvdyAmJiBzdHIubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICBpZiAoc2ltcGxlS2V5cylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVycycpO1xuICAgICAgICBleHBsaWNpdEtleSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdHguaW5GbG93KSB7XG4gICAgICAgIGlmIChhbGxOdWxsVmFsdWVzIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChrZXlDb21tZW50RG9uZSAmJiBvbkNvbW1lbnQpXG4gICAgICAgICAgICAgICAgb25Db21tZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyID09PSAnJyA/ICc/JyA6IGV4cGxpY2l0S2V5ID8gYD8gJHtzdHJ9YCA6IHN0cjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgoYWxsTnVsbFZhbHVlcyAmJiAhc2ltcGxlS2V5cykgfHwgKHZhbHVlID09IG51bGwgJiYgZXhwbGljaXRLZXkpKSB7XG4gICAgICAgIHN0ciA9IGA/ICR7c3RyfWA7XG4gICAgICAgIGlmIChrZXlDb21tZW50ICYmICFrZXlDb21tZW50RG9uZSkge1xuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyhrZXlDb21tZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hvbXBLZWVwICYmIG9uQ2hvbXBLZWVwKVxuICAgICAgICAgICAgb25DaG9tcEtlZXAoKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgaWYgKGtleUNvbW1lbnREb25lKVxuICAgICAgICBrZXlDb21tZW50ID0gbnVsbDtcbiAgICBpZiAoZXhwbGljaXRLZXkpIHtcbiAgICAgICAgaWYgKGtleUNvbW1lbnQpXG4gICAgICAgICAgICBzdHIgKz0gbGluZUNvbW1lbnQoc3RyLCBjdHguaW5kZW50LCBjb21tZW50U3RyaW5nKGtleUNvbW1lbnQpKTtcbiAgICAgICAgc3RyID0gYD8gJHtzdHJ9XFxuJHtpbmRlbnR9OmA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBgJHtzdHJ9OmA7XG4gICAgICAgIGlmIChrZXlDb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyhrZXlDb21tZW50KSk7XG4gICAgfVxuICAgIGxldCB2c2IsIHZjYiwgdmFsdWVDb21tZW50O1xuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHZzYiA9ICEhdmFsdWUuc3BhY2VCZWZvcmU7XG4gICAgICAgIHZjYiA9IHZhbHVlLmNvbW1lbnRCZWZvcmU7XG4gICAgICAgIHZhbHVlQ29tbWVudCA9IHZhbHVlLmNvbW1lbnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2c2IgPSBmYWxzZTtcbiAgICAgICAgdmNiID0gbnVsbDtcbiAgICAgICAgdmFsdWVDb21tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICB2YWx1ZSA9IGRvYy5jcmVhdGVOb2RlKHZhbHVlKTtcbiAgICB9XG4gICAgY3R4LmltcGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgaWYgKCFleHBsaWNpdEtleSAmJiAha2V5Q29tbWVudCAmJiBpc1NjYWxhcih2YWx1ZSkpXG4gICAgICAgIGN0eC5pbmRlbnRBdFN0YXJ0ID0gc3RyLmxlbmd0aCArIDE7XG4gICAgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgaWYgKCFpbmRlbnRTZXEgJiZcbiAgICAgICAgaW5kZW50U3RlcC5sZW5ndGggPj0gMiAmJlxuICAgICAgICAhY3R4LmluRmxvdyAmJlxuICAgICAgICAhZXhwbGljaXRLZXkgJiZcbiAgICAgICAgaXNTZXEodmFsdWUpICYmXG4gICAgICAgICF2YWx1ZS5mbG93ICYmXG4gICAgICAgICF2YWx1ZS50YWcgJiZcbiAgICAgICAgIXZhbHVlLmFuY2hvcikge1xuICAgICAgICAvLyBJZiBpbmRlbnRTZXEgPT09IGZhbHNlLCBjb25zaWRlciAnLSAnIGFzIHBhcnQgb2YgaW5kZW50YXRpb24gd2hlcmUgcG9zc2libGVcbiAgICAgICAgY3R4LmluZGVudCA9IGN0eC5pbmRlbnQuc3Vic3RyaW5nKDIpO1xuICAgIH1cbiAgICBsZXQgdmFsdWVDb21tZW50RG9uZSA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbHVlU3RyID0gc3RyaW5naWZ5KHZhbHVlLCBjdHgsICgpID0+ICh2YWx1ZUNvbW1lbnREb25lID0gdHJ1ZSksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgbGV0IHdzID0gJyAnO1xuICAgIGlmIChrZXlDb21tZW50IHx8IHZzYiB8fCB2Y2IpIHtcbiAgICAgICAgd3MgPSB2c2IgPyAnXFxuJyA6ICcnO1xuICAgICAgICBpZiAodmNiKSB7XG4gICAgICAgICAgICBjb25zdCBjcyA9IGNvbW1lbnRTdHJpbmcodmNiKTtcbiAgICAgICAgICAgIHdzICs9IGBcXG4ke2luZGVudENvbW1lbnQoY3MsIGN0eC5pbmRlbnQpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlU3RyID09PSAnJyAmJiAhY3R4LmluRmxvdykge1xuICAgICAgICAgICAgaWYgKHdzID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICB3cyA9ICdcXG5cXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd3MgKz0gYFxcbiR7Y3R4LmluZGVudH1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFleHBsaWNpdEtleSAmJiBpc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHZzMCA9IHZhbHVlU3RyWzBdO1xuICAgICAgICBjb25zdCBubDAgPSB2YWx1ZVN0ci5pbmRleE9mKCdcXG4nKTtcbiAgICAgICAgY29uc3QgaGFzTmV3bGluZSA9IG5sMCAhPT0gLTE7XG4gICAgICAgIGNvbnN0IGZsb3cgPSBjdHguaW5GbG93ID8/IHZhbHVlLmZsb3cgPz8gdmFsdWUuaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICBpZiAoaGFzTmV3bGluZSB8fCAhZmxvdykge1xuICAgICAgICAgICAgbGV0IGhhc1Byb3BzTGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUgJiYgKHZzMCA9PT0gJyYnIHx8IHZzMCA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIGxldCBzcDAgPSB2YWx1ZVN0ci5pbmRleE9mKCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHZzMCA9PT0gJyYnICYmXG4gICAgICAgICAgICAgICAgICAgIHNwMCAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc3AwIDwgbmwwICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyW3NwMCArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgc3AwID0gdmFsdWVTdHIuaW5kZXhPZignICcsIHNwMCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3AwID09PSAtMSB8fCBubDAgPCBzcDApXG4gICAgICAgICAgICAgICAgICAgIGhhc1Byb3BzTGluZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1Byb3BzTGluZSlcbiAgICAgICAgICAgICAgICB3cyA9IGBcXG4ke2N0eC5pbmRlbnR9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZVN0ciA9PT0gJycgfHwgdmFsdWVTdHJbMF0gPT09ICdcXG4nKSB7XG4gICAgICAgIHdzID0gJyc7XG4gICAgfVxuICAgIHN0ciArPSB3cyArIHZhbHVlU3RyO1xuICAgIGlmIChjdHguaW5GbG93KSB7XG4gICAgICAgIGlmICh2YWx1ZUNvbW1lbnREb25lICYmIG9uQ29tbWVudClcbiAgICAgICAgICAgIG9uQ29tbWVudCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZUNvbW1lbnQgJiYgIXZhbHVlQ29tbWVudERvbmUpIHtcbiAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyh2YWx1ZUNvbW1lbnQpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hvbXBLZWVwICYmIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIG9uQ2hvbXBLZWVwKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeVBhaXIgfTtcbiIsICJmdW5jdGlvbiBkZWJ1Zyhsb2dMZXZlbCwgLi4ubWVzc2FnZXMpIHtcbiAgICBpZiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycpXG4gICAgICAgIGNvbnNvbGUubG9nKC4uLm1lc3NhZ2VzKTtcbn1cbmZ1bmN0aW9uIHdhcm4obG9nTGV2ZWwsIHdhcm5pbmcpIHtcbiAgICBpZiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycgfHwgbG9nTGV2ZWwgPT09ICd3YXJuJykge1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW1pdFdhcm5pbmcpXG4gICAgICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKHdhcm5pbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBkZWJ1Zywgd2FybiB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc0FsaWFzLCBpc1NlcSwgaXNNYXAgfSBmcm9tICcuLi8uLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG4vLyBJZiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgbWVyZ2Uga2V5IGlzIGEgc2luZ2xlIG1hcHBpbmcgbm9kZSwgZWFjaCBvZlxuLy8gaXRzIGtleS92YWx1ZSBwYWlycyBpcyBpbnNlcnRlZCBpbnRvIHRoZSBjdXJyZW50IG1hcHBpbmcsIHVubGVzcyB0aGUga2V5XG4vLyBhbHJlYWR5IGV4aXN0cyBpbiBpdC4gSWYgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVyZ2Uga2V5IGlzIGFcbi8vIHNlcXVlbmNlLCB0aGVuIHRoaXMgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBtYXBwaW5nIG5vZGVzIGFuZCBlYWNoXG4vLyBvZiB0aGVzZSBub2RlcyBpcyBtZXJnZWQgaW4gdHVybiBhY2NvcmRpbmcgdG8gaXRzIG9yZGVyIGluIHRoZSBzZXF1ZW5jZS5cbi8vIEtleXMgaW4gbWFwcGluZyBub2RlcyBlYXJsaWVyIGluIHRoZSBzZXF1ZW5jZSBvdmVycmlkZSBrZXlzIHNwZWNpZmllZCBpblxuLy8gbGF0ZXIgbWFwcGluZyBub2Rlcy4gLS0gaHR0cDovL3lhbWwub3JnL3R5cGUvbWVyZ2UuaHRtbFxuY29uc3QgTUVSR0VfS0VZID0gJzw8JztcbmNvbnN0IG1lcmdlID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB2YWx1ZSA9PT0gTUVSR0VfS0VZIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnICYmIHZhbHVlLmRlc2NyaXB0aW9uID09PSBNRVJHRV9LRVkpLFxuICAgIGRlZmF1bHQ6ICdrZXknLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJyxcbiAgICB0ZXN0OiAvXjw8JC8sXG4gICAgcmVzb2x2ZTogKCkgPT4gT2JqZWN0LmFzc2lnbihuZXcgU2NhbGFyKFN5bWJvbChNRVJHRV9LRVkpKSwge1xuICAgICAgICBhZGRUb0pTTWFwOiBhZGRNZXJnZVRvSlNNYXBcbiAgICB9KSxcbiAgICBzdHJpbmdpZnk6ICgpID0+IE1FUkdFX0tFWVxufTtcbmNvbnN0IGlzTWVyZ2VLZXkgPSAoY3R4LCBrZXkpID0+IChtZXJnZS5pZGVudGlmeShrZXkpIHx8XG4gICAgKGlzU2NhbGFyKGtleSkgJiZcbiAgICAgICAgKCFrZXkudHlwZSB8fCBrZXkudHlwZSA9PT0gU2NhbGFyLlBMQUlOKSAmJlxuICAgICAgICBtZXJnZS5pZGVudGlmeShrZXkudmFsdWUpKSkgJiZcbiAgICBjdHg/LmRvYy5zY2hlbWEudGFncy5zb21lKHRhZyA9PiB0YWcudGFnID09PSBtZXJnZS50YWcgJiYgdGFnLmRlZmF1bHQpO1xuZnVuY3Rpb24gYWRkTWVyZ2VUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSkge1xuICAgIHZhbHVlID0gY3R4ICYmIGlzQWxpYXModmFsdWUpID8gdmFsdWUucmVzb2x2ZShjdHguZG9jKSA6IHZhbHVlO1xuICAgIGlmIChpc1NlcSh2YWx1ZSkpXG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdmFsdWUuaXRlbXMpXG4gICAgICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCBpdCk7XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdmFsdWUpXG4gICAgICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCBpdCk7XG4gICAgZWxzZVxuICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlKGN0eCwgbWFwLCB2YWx1ZSkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGN0eCAmJiBpc0FsaWFzKHZhbHVlKSA/IHZhbHVlLnJlc29sdmUoY3R4LmRvYykgOiB2YWx1ZTtcbiAgICBpZiAoIWlzTWFwKHNvdXJjZSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWVyZ2Ugc291cmNlcyBtdXN0IGJlIG1hcHMgb3IgbWFwIGFsaWFzZXMnKTtcbiAgICBjb25zdCBzcmNNYXAgPSBzb3VyY2UudG9KU09OKG51bGwsIGN0eCwgTWFwKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzcmNNYXApIHtcbiAgICAgICAgaWYgKG1hcCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgaWYgKCFtYXAuaGFzKGtleSkpXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXAgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIG1hcC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1hcCwga2V5LCB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCB7IGFkZE1lcmdlVG9KU01hcCwgaXNNZXJnZUtleSwgbWVyZ2UgfTtcbiIsICJpbXBvcnQgeyB3YXJuIH0gZnJvbSAnLi4vbG9nLmpzJztcbmltcG9ydCB7IGlzTWVyZ2VLZXksIGFkZE1lcmdlVG9KU01hcCB9IGZyb20gJy4uL3NjaGVtYS95YW1sLTEuMS9tZXJnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdHJpbmdpZnlDb250ZXh0IH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeS5qcyc7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5mdW5jdGlvbiBhZGRQYWlyVG9KU01hcChjdHgsIG1hcCwgeyBrZXksIHZhbHVlIH0pIHtcbiAgICBpZiAoaXNOb2RlKGtleSkgJiYga2V5LmFkZFRvSlNNYXApXG4gICAgICAgIGtleS5hZGRUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSk7XG4gICAgLy8gVE9ETzogU2hvdWxkIGRyb3AgdGhpcyBzcGVjaWFsIGNhc2UgZm9yIGJhcmUgPDwgaGFuZGxpbmdcbiAgICBlbHNlIGlmIChpc01lcmdlS2V5KGN0eCwga2V5KSlcbiAgICAgICAgYWRkTWVyZ2VUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSk7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGpzS2V5ID0gdG9KUyhrZXksICcnLCBjdHgpO1xuICAgICAgICBpZiAobWFwIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBtYXAuc2V0KGpzS2V5LCB0b0pTKHZhbHVlLCBqc0tleSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWFwIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICBtYXAuYWRkKGpzS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0tleSA9IHN0cmluZ2lmeUtleShrZXksIGpzS2V5LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QganNWYWx1ZSA9IHRvSlModmFsdWUsIHN0cmluZ0tleSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChzdHJpbmdLZXkgaW4gbWFwKVxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtYXAsIHN0cmluZ0tleSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToganNWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1hcFtzdHJpbmdLZXldID0ganNWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5S2V5KGtleSwganNLZXksIGN0eCkge1xuICAgIGlmIChqc0tleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIGlmICh0eXBlb2YganNLZXkgIT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gU3RyaW5nKGpzS2V5KTtcbiAgICBpZiAoaXNOb2RlKGtleSkgJiYgY3R4Py5kb2MpIHtcbiAgICAgICAgY29uc3Qgc3RyQ3R4ID0gY3JlYXRlU3RyaW5naWZ5Q29udGV4dChjdHguZG9jLCB7fSk7XG4gICAgICAgIHN0ckN0eC5hbmNob3JzID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgY3R4LmFuY2hvcnMua2V5cygpKVxuICAgICAgICAgICAgc3RyQ3R4LmFuY2hvcnMuYWRkKG5vZGUuYW5jaG9yKTtcbiAgICAgICAgc3RyQ3R4LmluRmxvdyA9IHRydWU7XG4gICAgICAgIHN0ckN0eC5pblN0cmluZ2lmeUtleSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0cktleSA9IGtleS50b1N0cmluZyhzdHJDdHgpO1xuICAgICAgICBpZiAoIWN0eC5tYXBLZXlXYXJuZWQpIHtcbiAgICAgICAgICAgIGxldCBqc29uU3RyID0gSlNPTi5zdHJpbmdpZnkoc3RyS2V5KTtcbiAgICAgICAgICAgIGlmIChqc29uU3RyLmxlbmd0aCA+IDQwKVxuICAgICAgICAgICAgICAgIGpzb25TdHIgPSBqc29uU3RyLnN1YnN0cmluZygwLCAzNikgKyAnLi4uXCInO1xuICAgICAgICAgICAgd2FybihjdHguZG9jLm9wdGlvbnMubG9nTGV2ZWwsIGBLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gSlMgT2JqZWN0IHJlc3RyaWN0aW9uczogJHtqc29uU3RyfS4gU2V0IG1hcEFzTWFwOiB0cnVlIHRvIHVzZSBvYmplY3Qga2V5cy5gKTtcbiAgICAgICAgICAgIGN0eC5tYXBLZXlXYXJuZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJLZXk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc0tleSk7XG59XG5cbmV4cG9ydCB7IGFkZFBhaXJUb0pTTWFwIH07XG4iLCAiaW1wb3J0IHsgY3JlYXRlTm9kZSB9IGZyb20gJy4uL2RvYy9jcmVhdGVOb2RlLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVBhaXIgfSBmcm9tICcuLi9zdHJpbmdpZnkvc3RyaW5naWZ5UGFpci5qcyc7XG5pbXBvcnQgeyBhZGRQYWlyVG9KU01hcCB9IGZyb20gJy4vYWRkUGFpclRvSlNNYXAuanMnO1xuaW1wb3J0IHsgTk9ERV9UWVBFLCBQQUlSLCBpc05vZGUgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuZnVuY3Rpb24gY3JlYXRlUGFpcihrZXksIHZhbHVlLCBjdHgpIHtcbiAgICBjb25zdCBrID0gY3JlYXRlTm9kZShrZXksIHVuZGVmaW5lZCwgY3R4KTtcbiAgICBjb25zdCB2ID0gY3JlYXRlTm9kZSh2YWx1ZSwgdW5kZWZpbmVkLCBjdHgpO1xuICAgIHJldHVybiBuZXcgUGFpcihrLCB2KTtcbn1cbmNsYXNzIFBhaXIge1xuICAgIGNvbnN0cnVjdG9yKGtleSwgdmFsdWUgPSBudWxsKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBOT0RFX1RZUEUsIHsgdmFsdWU6IFBBSVIgfSk7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGNsb25lKHNjaGVtYSkge1xuICAgICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNOb2RlKGtleSkpXG4gICAgICAgICAgICBrZXkgPSBrZXkuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgaWYgKGlzTm9kZSh2YWx1ZSkpXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNsb25lKHNjaGVtYSk7XG4gICAgICAgIHJldHVybiBuZXcgUGFpcihrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgdG9KU09OKF8sIGN0eCkge1xuICAgICAgICBjb25zdCBwYWlyID0gY3R4Py5tYXBBc01hcCA/IG5ldyBNYXAoKSA6IHt9O1xuICAgICAgICByZXR1cm4gYWRkUGFpclRvSlNNYXAoY3R4LCBwYWlyLCB0aGlzKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIHJldHVybiBjdHg/LmRvY1xuICAgICAgICAgICAgPyBzdHJpbmdpZnlQYWlyKHRoaXMsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcClcbiAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodGhpcyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBQYWlyLCBjcmVhdGVQYWlyIH07XG4iLCAiaW1wb3J0IHsgaXNOb2RlLCBpc1BhaXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5pbXBvcnQgeyBsaW5lQ29tbWVudCwgaW5kZW50Q29tbWVudCB9IGZyb20gJy4vc3RyaW5naWZ5Q29tbWVudC5qcyc7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNvbGxlY3Rpb24oY29sbGVjdGlvbiwgY3R4LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZmxvdyA9IGN0eC5pbkZsb3cgPz8gY29sbGVjdGlvbi5mbG93O1xuICAgIGNvbnN0IHN0cmluZ2lmeSA9IGZsb3cgPyBzdHJpbmdpZnlGbG93Q29sbGVjdGlvbiA6IHN0cmluZ2lmeUJsb2NrQ29sbGVjdGlvbjtcbiAgICByZXR1cm4gc3RyaW5naWZ5KGNvbGxlY3Rpb24sIGN0eCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlCbG9ja0NvbGxlY3Rpb24oeyBjb21tZW50LCBpdGVtcyB9LCBjdHgsIHsgYmxvY2tJdGVtUHJlZml4LCBmbG93Q2hhcnMsIGl0ZW1JbmRlbnQsIG9uQ2hvbXBLZWVwLCBvbkNvbW1lbnQgfSkge1xuICAgIGNvbnN0IHsgaW5kZW50LCBvcHRpb25zOiB7IGNvbW1lbnRTdHJpbmcgfSB9ID0gY3R4O1xuICAgIGNvbnN0IGl0ZW1DdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHsgaW5kZW50OiBpdGVtSW5kZW50LCB0eXBlOiBudWxsIH0pO1xuICAgIGxldCBjaG9tcEtlZXAgPSBmYWxzZTsgLy8gZmxhZyBmb3IgdGhlIHByZWNlZGluZyBub2RlJ3Mgc3RhdHVzXG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSBudWxsO1xuICAgICAgICBpZiAoaXNOb2RlKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAoIWNob21wS2VlcCAmJiBpdGVtLnNwYWNlQmVmb3JlKVxuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgICAgICAgYWRkQ29tbWVudEJlZm9yZShjdHgsIGxpbmVzLCBpdGVtLmNvbW1lbnRCZWZvcmUsIGNob21wS2VlcCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5jb21tZW50KVxuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpdGVtLmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNQYWlyKGl0ZW0pKSB7XG4gICAgICAgICAgICBjb25zdCBpayA9IGlzTm9kZShpdGVtLmtleSkgPyBpdGVtLmtleSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaWspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNob21wS2VlcCAmJiBpay5zcGFjZUJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgYWRkQ29tbWVudEJlZm9yZShjdHgsIGxpbmVzLCBpay5jb21tZW50QmVmb3JlLCBjaG9tcEtlZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNob21wS2VlcCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RyID0gc3RyaW5naWZ5KGl0ZW0sIGl0ZW1DdHgsICgpID0+IChjb21tZW50ID0gbnVsbCksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgaXRlbUluZGVudCwgY29tbWVudFN0cmluZyhjb21tZW50KSk7XG4gICAgICAgIGlmIChjaG9tcEtlZXAgJiYgY29tbWVudClcbiAgICAgICAgICAgIGNob21wS2VlcCA9IGZhbHNlO1xuICAgICAgICBsaW5lcy5wdXNoKGJsb2NrSXRlbVByZWZpeCArIHN0cik7XG4gICAgfVxuICAgIGxldCBzdHI7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdHIgPSBmbG93Q2hhcnMuc3RhcnQgKyBmbG93Q2hhcnMuZW5kO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyID0gbGluZXNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIHN0ciArPSBsaW5lID8gYFxcbiR7aW5kZW50fSR7bGluZX1gIDogJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgc3RyICs9ICdcXG4nICsgaW5kZW50Q29tbWVudChjb21tZW50U3RyaW5nKGNvbW1lbnQpLCBpbmRlbnQpO1xuICAgICAgICBpZiAob25Db21tZW50KVxuICAgICAgICAgICAgb25Db21tZW50KCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNob21wS2VlcCAmJiBvbkNob21wS2VlcClcbiAgICAgICAgb25DaG9tcEtlZXAoKTtcbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5Rmxvd0NvbGxlY3Rpb24oeyBpdGVtcyB9LCBjdHgsIHsgZmxvd0NoYXJzLCBpdGVtSW5kZW50IH0pIHtcbiAgICBjb25zdCB7IGluZGVudCwgaW5kZW50U3RlcCwgZmxvd0NvbGxlY3Rpb25QYWRkaW5nOiBmY1BhZGRpbmcsIG9wdGlvbnM6IHsgY29tbWVudFN0cmluZyB9IH0gPSBjdHg7XG4gICAgaXRlbUluZGVudCArPSBpbmRlbnRTdGVwO1xuICAgIGNvbnN0IGl0ZW1DdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgaW5kZW50OiBpdGVtSW5kZW50LFxuICAgICAgICBpbkZsb3c6IHRydWUsXG4gICAgICAgIHR5cGU6IG51bGxcbiAgICB9KTtcbiAgICBsZXQgcmVxTmV3bGluZSA9IGZhbHNlO1xuICAgIGxldCBsaW5lc0F0VmFsdWUgPSAwO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGxldCBjb21tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTm9kZShpdGVtKSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uc3BhY2VCZWZvcmUpXG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICBhZGRDb21tZW50QmVmb3JlKGN0eCwgbGluZXMsIGl0ZW0uY29tbWVudEJlZm9yZSwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY29tbWVudClcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gaXRlbS5jb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGFpcihpdGVtKSkge1xuICAgICAgICAgICAgY29uc3QgaWsgPSBpc05vZGUoaXRlbS5rZXkpID8gaXRlbS5rZXkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlrLnNwYWNlQmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICBhZGRDb21tZW50QmVmb3JlKGN0eCwgbGluZXMsIGlrLmNvbW1lbnRCZWZvcmUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWsuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdiA9IGlzTm9kZShpdGVtLnZhbHVlKSA/IGl0ZW0udmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGl2KSB7XG4gICAgICAgICAgICAgICAgaWYgKGl2LmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpdi5jb21tZW50O1xuICAgICAgICAgICAgICAgIGlmIChpdi5jb21tZW50QmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICByZXFOZXdsaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udmFsdWUgPT0gbnVsbCAmJiBpaz8uY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpay5jb21tZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgIGxldCBzdHIgPSBzdHJpbmdpZnkoaXRlbSwgaXRlbUN0eCwgKCkgPT4gKGNvbW1lbnQgPSBudWxsKSk7XG4gICAgICAgIGlmIChpIDwgaXRlbXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHN0ciArPSAnLCc7XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgaXRlbUluZGVudCwgY29tbWVudFN0cmluZyhjb21tZW50KSk7XG4gICAgICAgIGlmICghcmVxTmV3bGluZSAmJiAobGluZXMubGVuZ3RoID4gbGluZXNBdFZhbHVlIHx8IHN0ci5pbmNsdWRlcygnXFxuJykpKVxuICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgIGxpbmVzLnB1c2goc3RyKTtcbiAgICAgICAgbGluZXNBdFZhbHVlID0gbGluZXMubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGZsb3dDaGFycztcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydCArIGVuZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghcmVxTmV3bGluZSkge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gbGluZXMucmVkdWNlKChzdW0sIGxpbmUpID0+IHN1bSArIGxpbmUubGVuZ3RoICsgMiwgMik7XG4gICAgICAgICAgICByZXFOZXdsaW5lID0gY3R4Lm9wdGlvbnMubGluZVdpZHRoID4gMCAmJiBsZW4gPiBjdHgub3B0aW9ucy5saW5lV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcU5ld2xpbmUpIHtcbiAgICAgICAgICAgIGxldCBzdHIgPSBzdGFydDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcylcbiAgICAgICAgICAgICAgICBzdHIgKz0gbGluZSA/IGBcXG4ke2luZGVudFN0ZXB9JHtpbmRlbnR9JHtsaW5lfWAgOiAnXFxuJztcbiAgICAgICAgICAgIHJldHVybiBgJHtzdHJ9XFxuJHtpbmRlbnR9JHtlbmR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzdGFydH0ke2ZjUGFkZGluZ30ke2xpbmVzLmpvaW4oJyAnKX0ke2ZjUGFkZGluZ30ke2VuZH1gO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkQ29tbWVudEJlZm9yZSh7IGluZGVudCwgb3B0aW9uczogeyBjb21tZW50U3RyaW5nIH0gfSwgbGluZXMsIGNvbW1lbnQsIGNob21wS2VlcCkge1xuICAgIGlmIChjb21tZW50ICYmIGNob21wS2VlcClcbiAgICAgICAgY29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvXlxcbisvLCAnJyk7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWMgPSBpbmRlbnRDb21tZW50KGNvbW1lbnRTdHJpbmcoY29tbWVudCksIGluZGVudCk7XG4gICAgICAgIGxpbmVzLnB1c2goaWMudHJpbVN0YXJ0KCkpOyAvLyBBdm9pZCBkb3VibGUgaW5kZW50IG9uIGZpcnN0IGxpbmVcbiAgICB9XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeUNvbGxlY3Rpb24gfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeUNvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgYWRkUGFpclRvSlNNYXAgfSBmcm9tICcuL2FkZFBhaXJUb0pTTWFwLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgaXNQYWlyLCBpc1NjYWxhciwgTUFQIH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBQYWlyLCBjcmVhdGVQYWlyIH0gZnJvbSAnLi9QYWlyLmpzJztcbmltcG9ydCB7IGlzU2NhbGFyVmFsdWUgfSBmcm9tICcuL1NjYWxhci5qcyc7XG5cbmZ1bmN0aW9uIGZpbmRQYWlyKGl0ZW1zLCBrZXkpIHtcbiAgICBjb25zdCBrID0gaXNTY2FsYXIoa2V5KSA/IGtleS52YWx1ZSA6IGtleTtcbiAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChpc1BhaXIoaXQpKSB7XG4gICAgICAgICAgICBpZiAoaXQua2V5ID09PSBrZXkgfHwgaXQua2V5ID09PSBrKVxuICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgIGlmIChpc1NjYWxhcihpdC5rZXkpICYmIGl0LmtleS52YWx1ZSA9PT0gaylcbiAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNsYXNzIFlBTUxNYXAgZXh0ZW5kcyBDb2xsZWN0aW9uIHtcbiAgICBzdGF0aWMgZ2V0IHRhZ05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGFnOnlhbWwub3JnLDIwMDI6bWFwJztcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHN1cGVyKE1BUCwgc2NoZW1hKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGdlbmVyaWMgY29sbGVjdGlvbiBwYXJzaW5nIG1ldGhvZCB0aGF0IGNhbiBiZSBleHRlbmRlZFxuICAgICAqIHRvIG90aGVyIG5vZGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSBZQU1MTWFwXG4gICAgICovXG4gICAgc3RhdGljIGZyb20oc2NoZW1hLCBvYmosIGN0eCkge1xuICAgICAgICBjb25zdCB7IGtlZXBVbmRlZmluZWQsIHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChvYmosIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlcikgJiYgIXJlcGxhY2VyLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwga2VlcFVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaChjcmVhdGVQYWlyKGtleSwgdmFsdWUsIGN0eCkpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmopXG4gICAgICAgICAgICAgICAgYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSlcbiAgICAgICAgICAgICAgICBhZGQoa2V5LCBvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuc29ydE1hcEVudHJpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1hcC5pdGVtcy5zb3J0KHNjaGVtYS5zb3J0TWFwRW50cmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHZhbHVlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG92ZXJ3cml0ZSAtIElmIG5vdCBzZXQgYHRydWVgLCB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlXG4gICAgICogICBjb2xsZWN0aW9uIHdpbGwgdGhyb3cuIE90aGVyd2lzZSwgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAgICovXG4gICAgYWRkKHBhaXIsIG92ZXJ3cml0ZSkge1xuICAgICAgICBsZXQgX3BhaXI7XG4gICAgICAgIGlmIChpc1BhaXIocGFpcikpXG4gICAgICAgICAgICBfcGFpciA9IHBhaXI7XG4gICAgICAgIGVsc2UgaWYgKCFwYWlyIHx8IHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCAhKCdrZXknIGluIHBhaXIpKSB7XG4gICAgICAgICAgICAvLyBJbiBUeXBlU2NyaXB0LCB0aGlzIG5ldmVyIGhhcHBlbnMuXG4gICAgICAgICAgICBfcGFpciA9IG5ldyBQYWlyKHBhaXIsIHBhaXI/LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBfcGFpciA9IG5ldyBQYWlyKHBhaXIua2V5LCBwYWlyLnZhbHVlKTtcbiAgICAgICAgY29uc3QgcHJldiA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIF9wYWlyLmtleSk7XG4gICAgICAgIGNvbnN0IHNvcnRFbnRyaWVzID0gdGhpcy5zY2hlbWE/LnNvcnRNYXBFbnRyaWVzO1xuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgaWYgKCFvdmVyd3JpdGUpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtfcGFpci5rZXl9IGFscmVhZHkgc2V0YCk7XG4gICAgICAgICAgICAvLyBGb3Igc2NhbGFycywga2VlcCB0aGUgb2xkIG5vZGUgJiBpdHMgY29tbWVudHMgYW5kIGFuY2hvcnNcbiAgICAgICAgICAgIGlmIChpc1NjYWxhcihwcmV2LnZhbHVlKSAmJiBpc1NjYWxhclZhbHVlKF9wYWlyLnZhbHVlKSlcbiAgICAgICAgICAgICAgICBwcmV2LnZhbHVlLnZhbHVlID0gX3BhaXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcHJldi52YWx1ZSA9IF9wYWlyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvcnRFbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBzb3J0RW50cmllcyhfcGFpciwgaXRlbSkgPCAwKTtcbiAgICAgICAgICAgIGlmIChpID09PSAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goX3BhaXIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDAsIF9wYWlyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChfcGFpcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICBjb25zdCBpdCA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICAgIGlmICghaXQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRlbCA9IHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuaW5kZXhPZihpdCksIDEpO1xuICAgICAgICByZXR1cm4gZGVsLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgICAgY29uc3QgaXQgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICBjb25zdCBub2RlID0gaXQ/LnZhbHVlO1xuICAgICAgICByZXR1cm4gKCFrZWVwU2NhbGFyICYmIGlzU2NhbGFyKG5vZGUpID8gbm9kZS52YWx1ZSA6IG5vZGUpID8/IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmFkZChuZXcgUGFpcihrZXksIHZhbHVlKSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjdHggLSBDb252ZXJzaW9uIGNvbnRleHQsIG9yaWdpbmFsbHkgc2V0IGluIERvY3VtZW50I3RvSlMoKVxuICAgICAqIEBwYXJhbSB7Q2xhc3N9IFR5cGUgLSBJZiBzZXQsIGZvcmNlcyB0aGUgcmV0dXJuZWQgY29sbGVjdGlvbiB0eXBlXG4gICAgICogQHJldHVybnMgSW5zdGFuY2Ugb2YgVHlwZSwgTWFwLCBvciBPYmplY3RcbiAgICAgKi9cbiAgICB0b0pTT04oXywgY3R4LCBUeXBlKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IFR5cGUgPyBuZXcgVHlwZSgpIDogY3R4Py5tYXBBc01hcCA/IG5ldyBNYXAoKSA6IHt9O1xuICAgICAgICBpZiAoY3R4Py5vbkNyZWF0ZSlcbiAgICAgICAgICAgIGN0eC5vbkNyZWF0ZShtYXApO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcylcbiAgICAgICAgICAgIGFkZFBhaXJUb0pTTWFwKGN0eCwgbWFwLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIGlmICghY3R4KVxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKCFpc1BhaXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXAgaXRlbXMgbXVzdCBhbGwgYmUgcGFpcnM7IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkoaXRlbSl9IGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eC5hbGxOdWxsVmFsdWVzICYmIHRoaXMuaGFzQWxsTnVsbFZhbHVlcyhmYWxzZSkpXG4gICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHsgYWxsTnVsbFZhbHVlczogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUNvbGxlY3Rpb24odGhpcywgY3R4LCB7XG4gICAgICAgICAgICBibG9ja0l0ZW1QcmVmaXg6ICcnLFxuICAgICAgICAgICAgZmxvd0NoYXJzOiB7IHN0YXJ0OiAneycsIGVuZDogJ30nIH0sXG4gICAgICAgICAgICBpdGVtSW5kZW50OiBjdHguaW5kZW50IHx8ICcnLFxuICAgICAgICAgICAgb25DaG9tcEtlZXAsXG4gICAgICAgICAgICBvbkNvbW1lbnRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBZQU1MTWFwLCBmaW5kUGFpciB9O1xuIiwgImltcG9ydCB7IGlzTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCB9IGZyb20gJy4uLy4uL25vZGVzL1lBTUxNYXAuanMnO1xuXG5jb25zdCBtYXAgPSB7XG4gICAgY29sbGVjdGlvbjogJ21hcCcsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICBub2RlQ2xhc3M6IFlBTUxNYXAsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6bWFwJyxcbiAgICByZXNvbHZlKG1hcCwgb25FcnJvcikge1xuICAgICAgICBpZiAoIWlzTWFwKG1hcCkpXG4gICAgICAgICAgICBvbkVycm9yKCdFeHBlY3RlZCBhIG1hcHBpbmcgZm9yIHRoaXMgdGFnJyk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSxcbiAgICBjcmVhdGVOb2RlOiAoc2NoZW1hLCBvYmosIGN0eCkgPT4gWUFNTE1hcC5mcm9tKHNjaGVtYSwgb2JqLCBjdHgpXG59O1xuXG5leHBvcnQgeyBtYXAgfTtcbiIsICJpbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi4vZG9jL2NyZWF0ZU5vZGUuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5Q29sbGVjdGlvbiB9IGZyb20gJy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgU0VRLCBpc1NjYWxhciB9IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgaXNTY2FsYXJWYWx1ZSB9IGZyb20gJy4vU2NhbGFyLmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5jbGFzcyBZQU1MU2VxIGV4dGVuZHMgQ29sbGVjdGlvbiB7XG4gICAgc3RhdGljIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RhZzp5YW1sLm9yZywyMDAyOnNlcSc7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICBzdXBlcihTRVEsIHNjaGVtYSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB9XG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSB2YWx1ZSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogYGtleWAgbXVzdCBjb250YWluIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBmb3IgdGhpcyB0byBzdWNjZWVkLlxuICAgICAqIEl0IG1heSBiZSB3cmFwcGVkIGluIGEgYFNjYWxhcmAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gd2FzIGZvdW5kIGFuZCByZW1vdmVkLlxuICAgICAqL1xuICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkZWwgPSB0aGlzLml0ZW1zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gZGVsLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXQgPSB0aGlzLml0ZW1zW2lkeF07XG4gICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcihpdCkgPyBpdC52YWx1ZSA6IGl0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGNvbGxlY3Rpb24gaW5jbHVkZXMgYSB2YWx1ZSB3aXRoIHRoZSBrZXkgYGtleWAuXG4gICAgICpcbiAgICAgKiBga2V5YCBtdXN0IGNvbnRhaW4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGZvciB0aGlzIHRvIHN1Y2NlZWQuXG4gICAgICogSXQgbWF5IGJlIHdyYXBwZWQgaW4gYSBgU2NhbGFyYC5cbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGFzSXRlbUluZGV4KGtleSk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaWR4ID09PSAnbnVtYmVyJyAmJiBpZHggPCB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBhIHZhbHVlIGluIHRoaXMgY29sbGVjdGlvbi4gRm9yIGAhIXNldGAsIGB2YWx1ZWAgbmVlZHMgdG8gYmUgYVxuICAgICAqIGJvb2xlYW4gdG8gYWRkL3JlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBzZXQuXG4gICAgICpcbiAgICAgKiBJZiBga2V5YCBkb2VzIG5vdCBjb250YWluIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciwgdGhpcyB3aWxsIHRocm93LlxuICAgICAqIEl0IG1heSBiZSB3cmFwcGVkIGluIGEgYFNjYWxhcmAuXG4gICAgICovXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIGluZGV4LCBub3QgJHtrZXl9LmApO1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5pdGVtc1tpZHhdO1xuICAgICAgICBpZiAoaXNTY2FsYXIocHJldikgJiYgaXNTY2FsYXJWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgICBwcmV2LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b0pTT04oXywgY3R4KSB7XG4gICAgICAgIGNvbnN0IHNlcSA9IFtdO1xuICAgICAgICBpZiAoY3R4Py5vbkNyZWF0ZSlcbiAgICAgICAgICAgIGN0eC5vbkNyZWF0ZShzZXEpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKVxuICAgICAgICAgICAgc2VxLnB1c2godG9KUyhpdGVtLCBTdHJpbmcoaSsrKSwgY3R4KSk7XG4gICAgICAgIHJldHVybiBzZXE7XG4gICAgfVxuICAgIHRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUNvbGxlY3Rpb24odGhpcywgY3R4LCB7XG4gICAgICAgICAgICBibG9ja0l0ZW1QcmVmaXg6ICctICcsXG4gICAgICAgICAgICBmbG93Q2hhcnM6IHsgc3RhcnQ6ICdbJywgZW5kOiAnXScgfSxcbiAgICAgICAgICAgIGl0ZW1JbmRlbnQ6IChjdHguaW5kZW50IHx8ICcnKSArICcgICcsXG4gICAgICAgICAgICBvbkNob21wS2VlcCxcbiAgICAgICAgICAgIG9uQ29tbWVudFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIGZyb20oc2NoZW1hLCBvYmosIGN0eCkge1xuICAgICAgICBjb25zdCB7IHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IHNlcSA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGlmIChvYmogJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChvYmopKSB7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IG9iaiBpbnN0YW5jZW9mIFNldCA/IGl0IDogU3RyaW5nKGkrKyk7XG4gICAgICAgICAgICAgICAgICAgIGl0ID0gcmVwbGFjZXIuY2FsbChvYmosIGtleSwgaXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXEuaXRlbXMucHVzaChjcmVhdGVOb2RlKGl0LCB1bmRlZmluZWQsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXE7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNJdGVtSW5kZXgoa2V5KSB7XG4gICAgbGV0IGlkeCA9IGlzU2NhbGFyKGtleSkgPyBrZXkudmFsdWUgOiBrZXk7XG4gICAgaWYgKGlkeCAmJiB0eXBlb2YgaWR4ID09PSAnc3RyaW5nJylcbiAgICAgICAgaWR4ID0gTnVtYmVyKGlkeCk7XG4gICAgcmV0dXJuIHR5cGVvZiBpZHggPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIoaWR4KSAmJiBpZHggPj0gMFxuICAgICAgICA/IGlkeFxuICAgICAgICA6IG51bGw7XG59XG5cbmV4cG9ydCB7IFlBTUxTZXEgfTtcbiIsICJpbXBvcnQgeyBpc1NlcSB9IGZyb20gJy4uLy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MU2VxLmpzJztcblxuY29uc3Qgc2VxID0ge1xuICAgIGNvbGxlY3Rpb246ICdzZXEnLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgbm9kZUNsYXNzOiBZQU1MU2VxLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsXG4gICAgcmVzb2x2ZShzZXEsIG9uRXJyb3IpIHtcbiAgICAgICAgaWYgKCFpc1NlcShzZXEpKVxuICAgICAgICAgICAgb25FcnJvcignRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWcnKTtcbiAgICAgICAgcmV0dXJuIHNlcTtcbiAgICB9LFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIG9iaiwgY3R4KSA9PiBZQU1MU2VxLmZyb20oc2NoZW1hLCBvYmosIGN0eClcbn07XG5cbmV4cG9ydCB7IHNlcSB9O1xuIiwgImltcG9ydCB7IHN0cmluZ2lmeVN0cmluZyB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlTdHJpbmcuanMnO1xuXG5jb25zdCBzdHJpbmcgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLFxuICAgIHJlc29sdmU6IHN0ciA9PiBzdHIsXG4gICAgc3RyaW5naWZ5KGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKHsgYWN0dWFsU3RyaW5nOiB0cnVlIH0sIGN0eCk7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBzdHJpbmcgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5jb25zdCBudWxsVGFnID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB2YWx1ZSA9PSBudWxsLFxuICAgIGNyZWF0ZU5vZGU6ICgpID0+IG5ldyBTY2FsYXIobnVsbCksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJyxcbiAgICB0ZXN0OiAvXig/On58W05uXXVsbHxOVUxMKT8kLyxcbiAgICByZXNvbHZlOiAoKSA9PiBuZXcgU2NhbGFyKG51bGwpLFxuICAgIHN0cmluZ2lmeTogKHsgc291cmNlIH0sIGN0eCkgPT4gdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgJiYgbnVsbFRhZy50ZXN0LnRlc3Qoc291cmNlKVxuICAgICAgICA/IHNvdXJjZVxuICAgICAgICA6IGN0eC5vcHRpb25zLm51bGxTdHJcbn07XG5cbmV4cG9ydCB7IG51bGxUYWcgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5jb25zdCBib29sVGFnID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLFxuICAgIHRlc3Q6IC9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLFxuICAgIHJlc29sdmU6IHN0ciA9PiBuZXcgU2NhbGFyKHN0clswXSA9PT0gJ3QnIHx8IHN0clswXSA9PT0gJ1QnKSxcbiAgICBzdHJpbmdpZnkoeyBzb3VyY2UsIHZhbHVlIH0sIGN0eCkge1xuICAgICAgICBpZiAoc291cmNlICYmIGJvb2xUYWcudGVzdC50ZXN0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN2ID0gc291cmNlWzBdID09PSAndCcgfHwgc291cmNlWzBdID09PSAnVCc7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHN2KVxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gY3R4Lm9wdGlvbnMudHJ1ZVN0ciA6IGN0eC5vcHRpb25zLmZhbHNlU3RyO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGJvb2xUYWcgfTtcbiIsICJmdW5jdGlvbiBzdHJpbmdpZnlOdW1iZXIoeyBmb3JtYXQsIG1pbkZyYWN0aW9uRGlnaXRzLCB0YWcsIHZhbHVlIH0pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JylcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIWlzRmluaXRlKG51bSkpXG4gICAgICAgIHJldHVybiBpc05hTihudW0pID8gJy5uYW4nIDogbnVtIDwgMCA/ICctLmluZicgOiAnLmluZic7XG4gICAgbGV0IG4gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgaWYgKCFmb3JtYXQgJiZcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgJiZcbiAgICAgICAgKCF0YWcgfHwgdGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnKSAmJlxuICAgICAgICAvXlxcZC8udGVzdChuKSkge1xuICAgICAgICBsZXQgaSA9IG4uaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgIGkgPSBuLmxlbmd0aDtcbiAgICAgICAgICAgIG4gKz0gJy4nO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkID0gbWluRnJhY3Rpb25EaWdpdHMgLSAobi5sZW5ndGggLSBpIC0gMSk7XG4gICAgICAgIHdoaWxlIChkLS0gPiAwKVxuICAgICAgICAgICAgbiArPSAnMCc7XG4gICAgfVxuICAgIHJldHVybiBuO1xufVxuXG5leHBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5TnVtYmVyIH0gZnJvbSAnLi4vLi4vc3RyaW5naWZ5L3N0cmluZ2lmeU51bWJlci5qcyc7XG5cbmNvbnN0IGZsb2F0TmFOID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eKD86Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwubmFufFxcLk5hTnxcXC5OQU4pJC8sXG4gICAgcmVzb2x2ZTogc3RyID0+IHN0ci5zbGljZSgtMykudG9Mb3dlckNhc2UoKSA9PT0gJ25hbidcbiAgICAgICAgPyBOYU5cbiAgICAgICAgOiBzdHJbMF0gPT09ICctJ1xuICAgICAgICAgICAgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICAgIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59O1xuY29uc3QgZmxvYXRFeHAgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gICAgZm9ybWF0OiAnRVhQJyxcbiAgICB0ZXN0OiAvXlstK10/KD86XFwuWzAtOV0rfFswLTldKyg/OlxcLlswLTldKik/KVtlRV1bLStdP1swLTldKyQvLFxuICAgIHJlc29sdmU6IHN0ciA9PiBwYXJzZUZsb2F0KHN0ciksXG4gICAgc3RyaW5naWZ5KG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKG5vZGUudmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKSA/IG51bS50b0V4cG9uZW50aWFsKCkgOiBzdHJpbmdpZnlOdW1iZXIobm9kZSk7XG4gICAgfVxufTtcbmNvbnN0IGZsb2F0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eWy0rXT8oPzpcXC5bMC05XSt8WzAtOV0rXFwuWzAtOV0qKSQvLFxuICAgIHJlc29sdmUoc3RyKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgU2NhbGFyKHBhcnNlRmxvYXQoc3RyKSk7XG4gICAgICAgIGNvbnN0IGRvdCA9IHN0ci5pbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChkb3QgIT09IC0xICYmIHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICcwJylcbiAgICAgICAgICAgIG5vZGUubWluRnJhY3Rpb25EaWdpdHMgPSBzdHIubGVuZ3RoIC0gZG90IC0gMTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeU51bWJlclxufTtcblxuZXhwb3J0IHsgZmxvYXQsIGZsb2F0RXhwLCBmbG9hdE5hTiB9O1xuIiwgImltcG9ydCB7IHN0cmluZ2lmeU51bWJlciB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlOdW1iZXIuanMnO1xuXG5jb25zdCBpbnRJZGVudGlmeSA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbmNvbnN0IGludFJlc29sdmUgPSAoc3RyLCBvZmZzZXQsIHJhZGl4LCB7IGludEFzQmlnSW50IH0pID0+IChpbnRBc0JpZ0ludCA/IEJpZ0ludChzdHIpIDogcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhvZmZzZXQpLCByYWRpeCkpO1xuZnVuY3Rpb24gaW50U3RyaW5naWZ5KG5vZGUsIHJhZGl4LCBwcmVmaXgpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBub2RlO1xuICAgIGlmIChpbnRJZGVudGlmeSh2YWx1ZSkgJiYgdmFsdWUgPj0gMClcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIHZhbHVlLnRvU3RyaW5nKHJhZGl4KTtcbiAgICByZXR1cm4gc3RyaW5naWZ5TnVtYmVyKG5vZGUpO1xufVxuY29uc3QgaW50T2N0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiBpbnRJZGVudGlmeSh2YWx1ZSkgJiYgdmFsdWUgPj0gMCxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gICAgZm9ybWF0OiAnT0NUJyxcbiAgICB0ZXN0OiAvXjBvWzAtN10rJC8sXG4gICAgcmVzb2x2ZTogKHN0ciwgX29uRXJyb3IsIG9wdCkgPT4gaW50UmVzb2x2ZShzdHIsIDIsIDgsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCA4LCAnMG8nKVxufTtcbmNvbnN0IGludCA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMCwgMTAsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5jb25zdCBpbnRIZXggPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IGludElkZW50aWZ5KHZhbHVlKSAmJiB2YWx1ZSA+PSAwLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdIRVgnLFxuICAgIHRlc3Q6IC9eMHhbMC05YS1mQS1GXSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMiwgMTYsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCAxNiwgJzB4Jylcbn07XG5cbmV4cG9ydCB7IGludCwgaW50SGV4LCBpbnRPY3QgfTtcbiIsICJpbXBvcnQgeyBtYXAgfSBmcm9tICcuLi9jb21tb24vbWFwLmpzJztcbmltcG9ydCB7IG51bGxUYWcgfSBmcm9tICcuLi9jb21tb24vbnVsbC5qcyc7XG5pbXBvcnQgeyBzZXEgfSBmcm9tICcuLi9jb21tb24vc2VxLmpzJztcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4uL2NvbW1vbi9zdHJpbmcuanMnO1xuaW1wb3J0IHsgYm9vbFRhZyB9IGZyb20gJy4vYm9vbC5qcyc7XG5pbXBvcnQgeyBmbG9hdE5hTiwgZmxvYXRFeHAsIGZsb2F0IH0gZnJvbSAnLi9mbG9hdC5qcyc7XG5pbXBvcnQgeyBpbnRPY3QsIGludCwgaW50SGV4IH0gZnJvbSAnLi9pbnQuanMnO1xuXG5jb25zdCBzY2hlbWEgPSBbXG4gICAgbWFwLFxuICAgIHNlcSxcbiAgICBzdHJpbmcsXG4gICAgbnVsbFRhZyxcbiAgICBib29sVGFnLFxuICAgIGludE9jdCxcbiAgICBpbnQsXG4gICAgaW50SGV4LFxuICAgIGZsb2F0TmFOLFxuICAgIGZsb2F0RXhwLFxuICAgIGZsb2F0XG5dO1xuXG5leHBvcnQgeyBzY2hlbWEgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vY29tbW9uL21hcC5qcyc7XG5pbXBvcnQgeyBzZXEgfSBmcm9tICcuLi9jb21tb24vc2VxLmpzJztcblxuZnVuY3Rpb24gaW50SWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbmNvbnN0IHN0cmluZ2lmeUpTT04gPSAoeyB2YWx1ZSB9KSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5jb25zdCBqc29uU2NhbGFycyA9IFtcbiAgICB7XG4gICAgICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLFxuICAgICAgICByZXNvbHZlOiBzdHIgPT4gc3RyLFxuICAgICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeUpTT05cbiAgICB9LFxuICAgIHtcbiAgICAgICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlID09IG51bGwsXG4gICAgICAgIGNyZWF0ZU5vZGU6ICgpID0+IG5ldyBTY2FsYXIobnVsbCksXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLFxuICAgICAgICB0ZXN0OiAvXm51bGwkLyxcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4gbnVsbCxcbiAgICAgICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlKU09OXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgICAgIHRlc3Q6IC9edHJ1ZXxmYWxzZSQvLFxuICAgICAgICByZXNvbHZlOiBzdHIgPT4gc3RyID09PSAndHJ1ZScsXG4gICAgICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxuICAgIH0sXG4gICAge1xuICAgICAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gICAgICAgIHRlc3Q6IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvLFxuICAgICAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgeyBpbnRBc0JpZ0ludCB9KSA9PiBpbnRBc0JpZ0ludCA/IEJpZ0ludChzdHIpIDogcGFyc2VJbnQoc3RyLCAxMCksXG4gICAgICAgIHN0cmluZ2lmeTogKHsgdmFsdWUgfSkgPT4gaW50SWRlbnRpZnkodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgIH0sXG4gICAge1xuICAgICAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgICAgICB0ZXN0OiAvXi0/KD86MHxbMS05XVswLTldKikoPzpcXC5bMC05XSopPyg/OltlRV1bLStdP1swLTldKyk/JC8sXG4gICAgICAgIHJlc29sdmU6IHN0ciA9PiBwYXJzZUZsb2F0KHN0ciksXG4gICAgICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxuICAgIH1cbl07XG5jb25zdCBqc29uRXJyb3IgPSB7XG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICcnLFxuICAgIHRlc3Q6IC9eLyxcbiAgICByZXNvbHZlKHN0ciwgb25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGBVbnJlc29sdmVkIHBsYWluIHNjYWxhciAke0pTT04uc3RyaW5naWZ5KHN0cil9YCk7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufTtcbmNvbnN0IHNjaGVtYSA9IFttYXAsIHNlcV0uY29uY2F0KGpzb25TY2FsYXJzLCBqc29uRXJyb3IpO1xuXG5leHBvcnQgeyBzY2hlbWEgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RyaW5nIH0gZnJvbSAnLi4vLi4vc3RyaW5naWZ5L3N0cmluZ2lmeVN0cmluZy5qcyc7XG5cbmNvbnN0IGJpbmFyeSA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAvLyBCdWZmZXIgaW5oZXJpdHMgZnJvbSBVaW50OEFycmF5XG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JyxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQnVmZmVyIGluIG5vZGUgYW5kIGFuIFVpbnQ4QXJyYXkgaW4gYnJvd3NlcnNcbiAgICAgKlxuICAgICAqIFRvIHVzZSB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBhcyBhbiBpbWFnZSwgeW91J2xsIHdhbnQgdG8gZG8gc29tZXRoaW5nIGxpa2U6XG4gICAgICpcbiAgICAgKiAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSlcbiAgICAgKiAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwaG90bycpLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgKi9cbiAgICByZXNvbHZlKHNyYywgb25FcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYywgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhdG9iID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBPbiBJRSAxMSwgYXRvYigpIGNhbid0IGhhbmRsZSBuZXdsaW5lc1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gYXRvYihzcmMucmVwbGFjZSgvW1xcblxccl0vZywgJycpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25FcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYXRvYiBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5naWZ5KHsgY29tbWVudCwgdHlwZSwgdmFsdWUgfSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHZhbHVlOyAvLyBjaGVja2VkIGVhcmxpZXIgYnkgYmluYXJ5LmlkZW50aWZ5KClcbiAgICAgICAgbGV0IHN0cjtcbiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0ciA9XG4gICAgICAgICAgICAgICAgYnVmIGluc3RhbmNlb2YgQnVmZmVyXG4gICAgICAgICAgICAgICAgICAgID8gYnVmLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGJ1Zi5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbGV0IHMgPSAnJztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICAgICAgc3RyID0gYnRvYShzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdyaXRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYnRvYSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHR5cGUgPSBTY2FsYXIuQkxPQ0tfTElURVJBTDtcbiAgICAgICAgaWYgKHR5cGUgIT09IFNjYWxhci5RVU9URV9ET1VCTEUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IE1hdGgubWF4KGN0eC5vcHRpb25zLmxpbmVXaWR0aCAtIGN0eC5pbmRlbnQubGVuZ3RoLCBjdHgub3B0aW9ucy5taW5Db250ZW50V2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGguY2VpbChzdHIubGVuZ3RoIC8gbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG8gPSAwOyBpIDwgbjsgKytpLCBvICs9IGxpbmVXaWR0aCkge1xuICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gc3RyLnN1YnN0cihvLCBsaW5lV2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyID0gbGluZXMuam9pbih0eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTCA/ICdcXG4nIDogJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U3RyaW5nKHsgY29tbWVudCwgdHlwZSwgdmFsdWU6IHN0ciB9LCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGJpbmFyeSB9O1xuIiwgImltcG9ydCB7IGlzU2VxLCBpc1BhaXIsIGlzTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciwgY3JlYXRlUGFpciB9IGZyb20gJy4uLy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MU2VxLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZVBhaXJzKHNlcSwgb25FcnJvcikge1xuICAgIGlmIChpc1NlcShzZXEpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxLml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IHNlcS5pdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChpc1BhaXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBlbHNlIGlmIChpc01hcChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ0VhY2ggcGFpciBtdXN0IGhhdmUgaXRzIG93biBzZXF1ZW5jZSBpbmRpY2F0b3InKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWlyID0gaXRlbS5pdGVtc1swXSB8fCBuZXcgUGFpcihuZXcgU2NhbGFyKG51bGwpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb21tZW50QmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICBwYWlyLmtleS5jb21tZW50QmVmb3JlID0gcGFpci5rZXkuY29tbWVudEJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmNvbW1lbnRCZWZvcmV9XFxuJHtwYWlyLmtleS5jb21tZW50QmVmb3JlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb21tZW50QmVmb3JlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY24gPSBwYWlyLnZhbHVlID8/IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjbi5jb21tZW50ID0gY24uY29tbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmNvbW1lbnR9XFxuJHtjbi5jb21tZW50fWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtID0gcGFpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcS5pdGVtc1tpXSA9IGlzUGFpcihpdGVtKSA/IGl0ZW0gOiBuZXcgUGFpcihpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIG9uRXJyb3IoJ0V4cGVjdGVkIGEgc2VxdWVuY2UgZm9yIHRoaXMgdGFnJyk7XG4gICAgcmV0dXJuIHNlcTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhaXJzKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgIGNvbnN0IHsgcmVwbGFjZXIgfSA9IGN0eDtcbiAgICBjb25zdCBwYWlycyA9IG5ldyBZQU1MU2VxKHNjaGVtYSk7XG4gICAgcGFpcnMudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJztcbiAgICBsZXQgaSA9IDA7XG4gICAgaWYgKGl0ZXJhYmxlICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcmFibGUpKVxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICBpdCA9IHJlcGxhY2VyLmNhbGwoaXRlcmFibGUsIFN0cmluZyhpKyspLCBpdCk7XG4gICAgICAgICAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaXRbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgW2tleSwgdmFsdWVdIHR1cGxlOiAke2l0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXQgJiYgaXQgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXQpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0dXBsZSB3aXRoIG9uZSBrZXksIG5vdCAke2tleXMubGVuZ3RofSBrZXlzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0gaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWlycy5pdGVtcy5wdXNoKGNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG59XG5jb25zdCBwYWlycyA9IHtcbiAgICBjb2xsZWN0aW9uOiAnc2VxJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsXG4gICAgcmVzb2x2ZTogcmVzb2x2ZVBhaXJzLFxuICAgIGNyZWF0ZU5vZGU6IGNyZWF0ZVBhaXJzXG59O1xuXG5leHBvcnQgeyBjcmVhdGVQYWlycywgcGFpcnMsIHJlc29sdmVQYWlycyB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc1BhaXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi4vLi4vbm9kZXMvdG9KUy5qcyc7XG5pbXBvcnQgeyBZQU1MTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvWUFNTE1hcC5qcyc7XG5pbXBvcnQgeyBZQU1MU2VxIH0gZnJvbSAnLi4vLi4vbm9kZXMvWUFNTFNlcS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUGFpcnMsIGNyZWF0ZVBhaXJzIH0gZnJvbSAnLi9wYWlycy5qcyc7XG5cbmNsYXNzIFlBTUxPTWFwIGV4dGVuZHMgWUFNTFNlcSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWRkID0gWUFNTE1hcC5wcm90b3R5cGUuYWRkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZXRlID0gWUFNTE1hcC5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0ID0gWUFNTE1hcC5wcm90b3R5cGUuZ2V0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFzID0gWUFNTE1hcC5wcm90b3R5cGUuaGFzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0ID0gWUFNTE1hcC5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudGFnID0gWUFNTE9NYXAudGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBgY3R4YCBpcyBnaXZlbiwgdGhlIHJldHVybiB0eXBlIGlzIGFjdHVhbGx5IGBNYXA8dW5rbm93biwgdW5rbm93bj5gLFxuICAgICAqIGJ1dCBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHdpZGVuaW5nIHRoZSBzaWduYXR1cmUgb2YgYSBjaGlsZCBtZXRob2QuXG4gICAgICovXG4gICAgdG9KU09OKF8sIGN0eCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b0pTT04oXyk7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKGN0eD8ub25DcmVhdGUpXG4gICAgICAgICAgICBjdHgub25DcmVhdGUobWFwKTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGxldCBrZXksIHZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzUGFpcihwYWlyKSkge1xuICAgICAgICAgICAgICAgIGtleSA9IHRvSlMocGFpci5rZXksICcnLCBjdHgpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9KUyhwYWlyLnZhbHVlLCBrZXksIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXkgPSB0b0pTKHBhaXIsICcnLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoa2V5KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzJyk7XG4gICAgICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgICAgICBjb25zdCBwYWlycyA9IGNyZWF0ZVBhaXJzKHNjaGVtYSwgaXRlcmFibGUsIGN0eCk7XG4gICAgICAgIGNvbnN0IG9tYXAgPSBuZXcgdGhpcygpO1xuICAgICAgICBvbWFwLml0ZW1zID0gcGFpcnMuaXRlbXM7XG4gICAgICAgIHJldHVybiBvbWFwO1xuICAgIH1cbn1cbllBTUxPTWFwLnRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJztcbmNvbnN0IG9tYXAgPSB7XG4gICAgY29sbGVjdGlvbjogJ3NlcScsXG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlIGluc3RhbmNlb2YgTWFwLFxuICAgIG5vZGVDbGFzczogWUFNTE9NYXAsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6b21hcCcsXG4gICAgcmVzb2x2ZShzZXEsIG9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgcGFpcnMgPSByZXNvbHZlUGFpcnMoc2VxLCBvbkVycm9yKTtcbiAgICAgICAgY29uc3Qgc2VlbktleXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IGtleSB9IG9mIHBhaXJzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXNTY2FsYXIoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWVuS2V5cy5pbmNsdWRlcyhrZXkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoYE9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzOiAke2tleS52YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzLnB1c2goa2V5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFlBTUxPTWFwKCksIHBhaXJzKTtcbiAgICB9LFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpID0+IFlBTUxPTWFwLmZyb20oc2NoZW1hLCBpdGVyYWJsZSwgY3R4KVxufTtcblxuZXhwb3J0IHsgWUFNTE9NYXAsIG9tYXAgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5mdW5jdGlvbiBib29sU3RyaW5naWZ5KHsgdmFsdWUsIHNvdXJjZSB9LCBjdHgpIHtcbiAgICBjb25zdCBib29sT2JqID0gdmFsdWUgPyB0cnVlVGFnIDogZmFsc2VUYWc7XG4gICAgaWYgKHNvdXJjZSAmJiBib29sT2JqLnRlc3QudGVzdChzb3VyY2UpKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIHJldHVybiB2YWx1ZSA/IGN0eC5vcHRpb25zLnRydWVTdHIgOiBjdHgub3B0aW9ucy5mYWxzZVN0cjtcbn1cbmNvbnN0IHRydWVUYWcgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlID09PSB0cnVlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgdGVzdDogL14oPzpZfHl8W1l5XWVzfFlFU3xbVHRdcnVlfFRSVUV8W09vXW58T04pJC8sXG4gICAgcmVzb2x2ZTogKCkgPT4gbmV3IFNjYWxhcih0cnVlKSxcbiAgICBzdHJpbmdpZnk6IGJvb2xTdHJpbmdpZnlcbn07XG5jb25zdCBmYWxzZVRhZyA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgPT09IGZhbHNlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgdGVzdDogL14oPzpOfG58W05uXW98Tk98W0ZmXWFsc2V8RkFMU0V8W09vXWZmfE9GRikkLyxcbiAgICByZXNvbHZlOiAoKSA9PiBuZXcgU2NhbGFyKGZhbHNlKSxcbiAgICBzdHJpbmdpZnk6IGJvb2xTdHJpbmdpZnlcbn07XG5cbmV4cG9ydCB7IGZhbHNlVGFnLCB0cnVlVGFnIH07XG4iLCAiaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeU51bWJlciB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlOdW1iZXIuanMnO1xuXG5jb25zdCBmbG9hdE5hTiA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgICB0ZXN0OiAvXig/OlstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLm5hbnxcXC5OYU58XFwuTkFOKSQvLFxuICAgIHJlc29sdmU6IChzdHIpID0+IHN0ci5zbGljZSgtMykudG9Mb3dlckNhc2UoKSA9PT0gJ25hbidcbiAgICAgICAgPyBOYU5cbiAgICAgICAgOiBzdHJbMF0gPT09ICctJ1xuICAgICAgICAgICAgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICAgIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59O1xuY29uc3QgZmxvYXRFeHAgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gICAgZm9ybWF0OiAnRVhQJyxcbiAgICB0ZXN0OiAvXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcXC5bMC05X10qKT9bZUVdWy0rXT9bMC05XSskLyxcbiAgICByZXNvbHZlOiAoc3RyKSA9PiBwYXJzZUZsb2F0KHN0ci5yZXBsYWNlKC9fL2csICcnKSksXG4gICAgc3RyaW5naWZ5KG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKG5vZGUudmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKSA/IG51bS50b0V4cG9uZW50aWFsKCkgOiBzdHJpbmdpZnlOdW1iZXIobm9kZSk7XG4gICAgfVxufTtcbmNvbnN0IGZsb2F0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eWy0rXT8oPzpbMC05XVswLTlfXSopP1xcLlswLTlfXSokLyxcbiAgICByZXNvbHZlKHN0cikge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFNjYWxhcihwYXJzZUZsb2F0KHN0ci5yZXBsYWNlKC9fL2csICcnKSkpO1xuICAgICAgICBjb25zdCBkb3QgPSBzdHIuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoZG90ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZiA9IHN0ci5zdWJzdHJpbmcoZG90ICsgMSkucmVwbGFjZSgvXy9nLCAnJyk7XG4gICAgICAgICAgICBpZiAoZltmLmxlbmd0aCAtIDFdID09PSAnMCcpXG4gICAgICAgICAgICAgICAgbm9kZS5taW5GcmFjdGlvbkRpZ2l0cyA9IGYubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5cbmV4cG9ydCB7IGZsb2F0LCBmbG9hdEV4cCwgZmxvYXROYU4gfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfSBmcm9tICcuLi8uLi9zdHJpbmdpZnkvc3RyaW5naWZ5TnVtYmVyLmpzJztcblxuY29uc3QgaW50SWRlbnRpZnkgPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHwgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG5mdW5jdGlvbiBpbnRSZXNvbHZlKHN0ciwgb2Zmc2V0LCByYWRpeCwgeyBpbnRBc0JpZ0ludCB9KSB7XG4gICAgY29uc3Qgc2lnbiA9IHN0clswXTtcbiAgICBpZiAoc2lnbiA9PT0gJy0nIHx8IHNpZ24gPT09ICcrJylcbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgc3RyID0gc3RyLnN1YnN0cmluZyhvZmZzZXQpLnJlcGxhY2UoL18vZywgJycpO1xuICAgIGlmIChpbnRBc0JpZ0ludCkge1xuICAgICAgICBzd2l0Y2ggKHJhZGl4KSB7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc3RyID0gYDBiJHtzdHJ9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBzdHIgPSBgMG8ke3N0cn1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICBzdHIgPSBgMHgke3N0cn1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSBCaWdJbnQoc3RyKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gPT09ICctJyA/IEJpZ0ludCgtMSkgKiBuIDogbjtcbiAgICB9XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KHN0ciwgcmFkaXgpO1xuICAgIHJldHVybiBzaWduID09PSAnLScgPyAtMSAqIG4gOiBuO1xufVxuZnVuY3Rpb24gaW50U3RyaW5naWZ5KG5vZGUsIHJhZGl4LCBwcmVmaXgpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBub2RlO1xuICAgIGlmIChpbnRJZGVudGlmeSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gdmFsdWUudG9TdHJpbmcocmFkaXgpO1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gJy0nICsgcHJlZml4ICsgc3RyLnN1YnN0cigxKSA6IHByZWZpeCArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ2lmeU51bWJlcihub2RlKTtcbn1cbmNvbnN0IGludEJpbiA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIGZvcm1hdDogJ0JJTicsXG4gICAgdGVzdDogL15bLStdPzBiWzAtMV9dKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCBvcHQpID0+IGludFJlc29sdmUoc3RyLCAyLCAyLCBvcHQpLFxuICAgIHN0cmluZ2lmeTogbm9kZSA9PiBpbnRTdHJpbmdpZnkobm9kZSwgMiwgJzBiJylcbn07XG5jb25zdCBpbnRPY3QgPSB7XG4gICAgaWRlbnRpZnk6IGludElkZW50aWZ5LFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdPQ1QnLFxuICAgIHRlc3Q6IC9eWy0rXT8wWzAtN19dKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCBvcHQpID0+IGludFJlc29sdmUoc3RyLCAxLCA4LCBvcHQpLFxuICAgIHN0cmluZ2lmeTogbm9kZSA9PiBpbnRTdHJpbmdpZnkobm9kZSwgOCwgJzAnKVxufTtcbmNvbnN0IGludCA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XVswLTlfXSokLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMCwgMTAsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5jb25zdCBpbnRIZXggPSB7XG4gICAgaWRlbnRpZnk6IGludElkZW50aWZ5LFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdIRVgnLFxuICAgIHRlc3Q6IC9eWy0rXT8weFswLTlhLWZBLUZfXSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMiwgMTYsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCAxNiwgJzB4Jylcbn07XG5cbmV4cG9ydCB7IGludCwgaW50QmluLCBpbnRIZXgsIGludE9jdCB9O1xuIiwgImltcG9ydCB7IGlzTWFwLCBpc1BhaXIsIGlzU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciwgY3JlYXRlUGFpciB9IGZyb20gJy4uLy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCwgZmluZFBhaXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MTWFwLmpzJztcblxuY2xhc3MgWUFNTFNldCBleHRlbmRzIFlBTUxNYXAge1xuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICBzdXBlcihzY2hlbWEpO1xuICAgICAgICB0aGlzLnRhZyA9IFlBTUxTZXQudGFnO1xuICAgIH1cbiAgICBhZGQoa2V5KSB7XG4gICAgICAgIGxldCBwYWlyO1xuICAgICAgICBpZiAoaXNQYWlyKGtleSkpXG4gICAgICAgICAgICBwYWlyID0ga2V5O1xuICAgICAgICBlbHNlIGlmIChrZXkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAna2V5JyBpbiBrZXkgJiZcbiAgICAgICAgICAgICd2YWx1ZScgaW4ga2V5ICYmXG4gICAgICAgICAgICBrZXkudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICBwYWlyID0gbmV3IFBhaXIoa2V5LmtleSwgbnVsbCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhaXIgPSBuZXcgUGFpcihrZXksIG51bGwpO1xuICAgICAgICBjb25zdCBwcmV2ID0gZmluZFBhaXIodGhpcy5pdGVtcywgcGFpci5rZXkpO1xuICAgICAgICBpZiAoIXByZXYpXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocGFpcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGBrZWVwUGFpcmAgaXMgYHRydWVgLCByZXR1cm5zIHRoZSBQYWlyIG1hdGNoaW5nIGBrZXlgLlxuICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhhdCBQYWlyJ3Mga2V5LlxuICAgICAqL1xuICAgIGdldChrZXksIGtlZXBQYWlyKSB7XG4gICAgICAgIGNvbnN0IHBhaXIgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICByZXR1cm4gIWtlZXBQYWlyICYmIGlzUGFpcihwYWlyKVxuICAgICAgICAgICAgPyBpc1NjYWxhcihwYWlyLmtleSlcbiAgICAgICAgICAgICAgICA/IHBhaXIua2V5LnZhbHVlXG4gICAgICAgICAgICAgICAgOiBwYWlyLmtleVxuICAgICAgICAgICAgOiBwYWlyO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUgZm9yIHNldChrZXksIHZhbHVlKSBpbiBhIFlBTUwgc2V0LCBub3QgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgIGNvbnN0IHByZXYgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICBpZiAocHJldiAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuaW5kZXhPZihwcmV2KSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXByZXYgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChuZXcgUGFpcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oXywgY3R4KSB7XG4gICAgICAgIHJldHVybiBzdXBlci50b0pTT04oXywgY3R4LCBTZXQpO1xuICAgIH1cbiAgICB0b1N0cmluZyhjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApIHtcbiAgICAgICAgaWYgKCFjdHgpXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmhhc0FsbE51bGxWYWx1ZXModHJ1ZSkpXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoT2JqZWN0LmFzc2lnbih7fSwgY3R4LCB7IGFsbE51bGxWYWx1ZXM6IHRydWUgfSksIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzJyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgICAgICBjb25zdCB7IHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXJhYmxlKSlcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXBsYWNlci5jYWxsKGl0ZXJhYmxlLCB2YWx1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldC5pdGVtcy5wdXNoKGNyZWF0ZVBhaXIodmFsdWUsIG51bGwsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0O1xuICAgIH1cbn1cbllBTUxTZXQudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOnNldCc7XG5jb25zdCBzZXQgPSB7XG4gICAgY29sbGVjdGlvbjogJ21hcCcsXG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlIGluc3RhbmNlb2YgU2V0LFxuICAgIG5vZGVDbGFzczogWUFNTFNldCxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzZXQnLFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpID0+IFlBTUxTZXQuZnJvbShzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpLFxuICAgIHJlc29sdmUobWFwLCBvbkVycm9yKSB7XG4gICAgICAgIGlmIChpc01hcChtYXApKSB7XG4gICAgICAgICAgICBpZiAobWFwLmhhc0FsbE51bGxWYWx1ZXModHJ1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFlBTUxTZXQoKSwgbWFwKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvbkVycm9yKCdTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlcycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9uRXJyb3IoJ0V4cGVjdGVkIGEgbWFwcGluZyBmb3IgdGhpcyB0YWcnKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBZQU1MU2V0LCBzZXQgfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfSBmcm9tICcuLi8uLi9zdHJpbmdpZnkvc3RyaW5naWZ5TnVtYmVyLmpzJztcblxuLyoqIEludGVybmFsIHR5cGVzIGhhbmRsZSBiaWdpbnQgYXMgbnVtYmVyLCBiZWNhdXNlIFRTIGNhbid0IGZpZ3VyZSBpdCBvdXQuICovXG5mdW5jdGlvbiBwYXJzZVNleGFnZXNpbWFsKHN0ciwgYXNCaWdJbnQpIHtcbiAgICBjb25zdCBzaWduID0gc3RyWzBdO1xuICAgIGNvbnN0IHBhcnRzID0gc2lnbiA9PT0gJy0nIHx8IHNpZ24gPT09ICcrJyA/IHN0ci5zdWJzdHJpbmcoMSkgOiBzdHI7XG4gICAgY29uc3QgbnVtID0gKG4pID0+IGFzQmlnSW50ID8gQmlnSW50KG4pIDogTnVtYmVyKG4pO1xuICAgIGNvbnN0IHJlcyA9IHBhcnRzXG4gICAgICAgIC5yZXBsYWNlKC9fL2csICcnKVxuICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAucmVkdWNlKChyZXMsIHApID0+IHJlcyAqIG51bSg2MCkgKyBudW0ocCksIG51bSgwKSk7XG4gICAgcmV0dXJuIChzaWduID09PSAnLScgPyBudW0oLTEpICogcmVzIDogcmVzKTtcbn1cbi8qKlxuICogaGhoaDptbTpzcy5zc3NcbiAqXG4gKiBJbnRlcm5hbCB0eXBlcyBoYW5kbGUgYmlnaW50IGFzIG51bWJlciwgYmVjYXVzZSBUUyBjYW4ndCBmaWd1cmUgaXQgb3V0LlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTZXhhZ2VzaW1hbChub2RlKSB7XG4gICAgbGV0IHsgdmFsdWUgfSA9IG5vZGU7XG4gICAgbGV0IG51bSA9IChuKSA9PiBuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKVxuICAgICAgICBudW0gPSBuID0+IEJpZ0ludChuKTtcbiAgICBlbHNlIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeU51bWJlcihub2RlKTtcbiAgICBsZXQgc2lnbiA9ICcnO1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgdmFsdWUgKj0gbnVtKC0xKTtcbiAgICB9XG4gICAgY29uc3QgXzYwID0gbnVtKDYwKTtcbiAgICBjb25zdCBwYXJ0cyA9IFt2YWx1ZSAlIF82MF07IC8vIHNlY29uZHMsIGluY2x1ZGluZyBtc1xuICAgIGlmICh2YWx1ZSA8IDYwKSB7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoMCk7IC8vIGF0IGxlYXN0IG9uZSA6IGlzIHJlcXVpcmVkXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIHBhcnRzWzBdKSAvIF82MDtcbiAgICAgICAgcGFydHMudW5zaGlmdCh2YWx1ZSAlIF82MCk7IC8vIG1pbnV0ZXNcbiAgICAgICAgaWYgKHZhbHVlID49IDYwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIHBhcnRzWzBdKSAvIF82MDtcbiAgICAgICAgICAgIHBhcnRzLnVuc2hpZnQodmFsdWUpOyAvLyBob3Vyc1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoc2lnbiArXG4gICAgICAgIHBhcnRzXG4gICAgICAgICAgICAubWFwKG4gPT4gU3RyaW5nKG4pLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAgICAgICAuam9pbignOicpXG4gICAgICAgICAgICAucmVwbGFjZSgvMDAwMDAwXFxkKiQvLCAnJykgLy8gJSA2MCBtYXkgaW50cm9kdWNlIGVycm9yXG4gICAgKTtcbn1cbmNvbnN0IGludFRpbWUgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHwgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIGZvcm1hdDogJ1RJTUUnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCB7IGludEFzQmlnSW50IH0pID0+IHBhcnNlU2V4YWdlc2ltYWwoc3RyLCBpbnRBc0JpZ0ludCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlTZXhhZ2VzaW1hbFxufTtcbmNvbnN0IGZsb2F0VGltZSA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgICBmb3JtYXQ6ICdUSU1FJyxcbiAgICB0ZXN0OiAvXlstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qJC8sXG4gICAgcmVzb2x2ZTogc3RyID0+IHBhcnNlU2V4YWdlc2ltYWwoc3RyLCBmYWxzZSksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlTZXhhZ2VzaW1hbFxufTtcbmNvbnN0IHRpbWVzdGFtcCA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJyxcbiAgICAvLyBJZiB0aGUgdGltZSB6b25lIGlzIG9taXR0ZWQsIHRoZSB0aW1lc3RhbXAgaXMgYXNzdW1lZCB0byBiZSBzcGVjaWZpZWQgaW4gVVRDLiBUaGUgdGltZSBwYXJ0XG4gICAgLy8gbWF5IGJlIG9taXR0ZWQgYWx0b2dldGhlciwgcmVzdWx0aW5nIGluIGEgZGF0ZSBmb3JtYXQuIEluIHN1Y2ggYSBjYXNlLCB0aGUgdGltZSBwYXJ0IGlzXG4gICAgLy8gYXNzdW1lZCB0byBiZSAwMDowMDowMFogKHN0YXJ0IG9mIGRheSwgVVRDKS5cbiAgICB0ZXN0OiBSZWdFeHAoJ14oWzAtOV17NH0pLShbMC05XXsxLDJ9KS0oWzAtOV17MSwyfSknICsgLy8gWVlZWS1NbS1EZFxuICAgICAgICAnKD86JyArIC8vIHRpbWUgaXMgb3B0aW9uYWxcbiAgICAgICAgJyg/OnR8VHxbIFxcXFx0XSspJyArIC8vIHQgfCBUIHwgd2hpdGVzcGFjZVxuICAgICAgICAnKFswLTldezEsMn0pOihbMC05XXsxLDJ9KTooWzAtOV17MSwyfShcXFxcLlswLTldKyk/KScgKyAvLyBIaDpNbTpTcyguc3MpP1xuICAgICAgICAnKD86WyBcXFxcdF0qKFp8Wy0rXVswMTJdP1swLTldKD86OlswLTldezJ9KT8pKT8nICsgLy8gWiB8ICs1IHwgLTAzOjMwXG4gICAgICAgICcpPyQnKSxcbiAgICByZXNvbHZlKHN0cikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCh0aW1lc3RhbXAudGVzdCk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyEhdGltZXN0YW1wIGV4cGVjdHMgYSBkYXRlLCBzdGFydGluZyB3aXRoIHl5eXktbW0tZGQnKTtcbiAgICAgICAgY29uc3QgWywgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gbWF0Y2gubWFwKE51bWJlcik7XG4gICAgICAgIGNvbnN0IG1pbGxpc2VjID0gbWF0Y2hbN10gPyBOdW1iZXIoKG1hdGNoWzddICsgJzAwJykuc3Vic3RyKDEsIDMpKSA6IDA7XG4gICAgICAgIGxldCBkYXRlID0gRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXksIGhvdXIgfHwgMCwgbWludXRlIHx8IDAsIHNlY29uZCB8fCAwLCBtaWxsaXNlYyk7XG4gICAgICAgIGNvbnN0IHR6ID0gbWF0Y2hbOF07XG4gICAgICAgIGlmICh0eiAmJiB0eiAhPT0gJ1onKSB7XG4gICAgICAgICAgICBsZXQgZCA9IHBhcnNlU2V4YWdlc2ltYWwodHosIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkKSA8IDMwKVxuICAgICAgICAgICAgICAgIGQgKj0gNjA7XG4gICAgICAgICAgICBkYXRlIC09IDYwMDAwICogZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSk7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6ICh7IHZhbHVlIH0pID0+IHZhbHVlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvKChUMDA6MDApPzowMCk/XFwuMDAwWiQvLCAnJylcbn07XG5cbmV4cG9ydCB7IGZsb2F0VGltZSwgaW50VGltZSwgdGltZXN0YW1wIH07XG4iLCAiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vY29tbW9uL21hcC5qcyc7XG5pbXBvcnQgeyBudWxsVGFnIH0gZnJvbSAnLi4vY29tbW9uL251bGwuanMnO1xuaW1wb3J0IHsgc2VxIH0gZnJvbSAnLi4vY29tbW9uL3NlcS5qcyc7XG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tICcuLi9jb21tb24vc3RyaW5nLmpzJztcbmltcG9ydCB7IGJpbmFyeSB9IGZyb20gJy4vYmluYXJ5LmpzJztcbmltcG9ydCB7IHRydWVUYWcsIGZhbHNlVGFnIH0gZnJvbSAnLi9ib29sLmpzJztcbmltcG9ydCB7IGZsb2F0TmFOLCBmbG9hdEV4cCwgZmxvYXQgfSBmcm9tICcuL2Zsb2F0LmpzJztcbmltcG9ydCB7IGludEJpbiwgaW50T2N0LCBpbnQsIGludEhleCB9IGZyb20gJy4vaW50LmpzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi9tZXJnZS5qcyc7XG5pbXBvcnQgeyBvbWFwIH0gZnJvbSAnLi9vbWFwLmpzJztcbmltcG9ydCB7IHBhaXJzIH0gZnJvbSAnLi9wYWlycy5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgeyBpbnRUaW1lLCBmbG9hdFRpbWUsIHRpbWVzdGFtcCB9IGZyb20gJy4vdGltZXN0YW1wLmpzJztcblxuY29uc3Qgc2NoZW1hID0gW1xuICAgIG1hcCxcbiAgICBzZXEsXG4gICAgc3RyaW5nLFxuICAgIG51bGxUYWcsXG4gICAgdHJ1ZVRhZyxcbiAgICBmYWxzZVRhZyxcbiAgICBpbnRCaW4sXG4gICAgaW50T2N0LFxuICAgIGludCxcbiAgICBpbnRIZXgsXG4gICAgZmxvYXROYU4sXG4gICAgZmxvYXRFeHAsXG4gICAgZmxvYXQsXG4gICAgYmluYXJ5LFxuICAgIG1lcmdlLFxuICAgIG9tYXAsXG4gICAgcGFpcnMsXG4gICAgc2V0LFxuICAgIGludFRpbWUsXG4gICAgZmxvYXRUaW1lLFxuICAgIHRpbWVzdGFtcFxuXTtcblxuZXhwb3J0IHsgc2NoZW1hIH07XG4iLCAiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9jb21tb24vbWFwLmpzJztcbmltcG9ydCB7IG51bGxUYWcgfSBmcm9tICcuL2NvbW1vbi9udWxsLmpzJztcbmltcG9ydCB7IHNlcSB9IGZyb20gJy4vY29tbW9uL3NlcS5qcyc7XG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tICcuL2NvbW1vbi9zdHJpbmcuanMnO1xuaW1wb3J0IHsgYm9vbFRhZyB9IGZyb20gJy4vY29yZS9ib29sLmpzJztcbmltcG9ydCB7IGZsb2F0LCBmbG9hdEV4cCwgZmxvYXROYU4gfSBmcm9tICcuL2NvcmUvZmxvYXQuanMnO1xuaW1wb3J0IHsgaW50LCBpbnRIZXgsIGludE9jdCB9IGZyb20gJy4vY29yZS9pbnQuanMnO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi9jb3JlL3NjaGVtYS5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgYXMgc2NoZW1hJDEgfSBmcm9tICcuL2pzb24vc2NoZW1hLmpzJztcbmltcG9ydCB7IGJpbmFyeSB9IGZyb20gJy4veWFtbC0xLjEvYmluYXJ5LmpzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi95YW1sLTEuMS9tZXJnZS5qcyc7XG5pbXBvcnQgeyBvbWFwIH0gZnJvbSAnLi95YW1sLTEuMS9vbWFwLmpzJztcbmltcG9ydCB7IHBhaXJzIH0gZnJvbSAnLi95YW1sLTEuMS9wYWlycy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgYXMgc2NoZW1hJDIgfSBmcm9tICcuL3lhbWwtMS4xL3NjaGVtYS5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3lhbWwtMS4xL3NldC5qcyc7XG5pbXBvcnQgeyB0aW1lc3RhbXAsIGZsb2F0VGltZSwgaW50VGltZSB9IGZyb20gJy4veWFtbC0xLjEvdGltZXN0YW1wLmpzJztcblxuY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXAoW1xuICAgIFsnY29yZScsIHNjaGVtYV0sXG4gICAgWydmYWlsc2FmZScsIFttYXAsIHNlcSwgc3RyaW5nXV0sXG4gICAgWydqc29uJywgc2NoZW1hJDFdLFxuICAgIFsneWFtbDExJywgc2NoZW1hJDJdLFxuICAgIFsneWFtbC0xLjEnLCBzY2hlbWEkMl1cbl0pO1xuY29uc3QgdGFnc0J5TmFtZSA9IHtcbiAgICBiaW5hcnksXG4gICAgYm9vbDogYm9vbFRhZyxcbiAgICBmbG9hdCxcbiAgICBmbG9hdEV4cCxcbiAgICBmbG9hdE5hTixcbiAgICBmbG9hdFRpbWUsXG4gICAgaW50LFxuICAgIGludEhleCxcbiAgICBpbnRPY3QsXG4gICAgaW50VGltZSxcbiAgICBtYXAsXG4gICAgbWVyZ2UsXG4gICAgbnVsbDogbnVsbFRhZyxcbiAgICBvbWFwLFxuICAgIHBhaXJzLFxuICAgIHNlcSxcbiAgICBzZXQsXG4gICAgdGltZXN0YW1wXG59O1xuY29uc3QgY29yZUtub3duVGFncyA9IHtcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JzogYmluYXJ5LFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSc6IG1lcmdlLFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJzogb21hcCxcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnOiBwYWlycyxcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6c2V0Jzogc2V0LFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnOiB0aW1lc3RhbXBcbn07XG5mdW5jdGlvbiBnZXRUYWdzKGN1c3RvbVRhZ3MsIHNjaGVtYU5hbWUsIGFkZE1lcmdlVGFnKSB7XG4gICAgY29uc3Qgc2NoZW1hVGFncyA9IHNjaGVtYXMuZ2V0KHNjaGVtYU5hbWUpO1xuICAgIGlmIChzY2hlbWFUYWdzICYmICFjdXN0b21UYWdzKSB7XG4gICAgICAgIHJldHVybiBhZGRNZXJnZVRhZyAmJiAhc2NoZW1hVGFncy5pbmNsdWRlcyhtZXJnZSlcbiAgICAgICAgICAgID8gc2NoZW1hVGFncy5jb25jYXQobWVyZ2UpXG4gICAgICAgICAgICA6IHNjaGVtYVRhZ3Muc2xpY2UoKTtcbiAgICB9XG4gICAgbGV0IHRhZ3MgPSBzY2hlbWFUYWdzO1xuICAgIGlmICghdGFncykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21UYWdzKSlcbiAgICAgICAgICAgIHRhZ3MgPSBbXTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShzY2hlbWFzLmtleXMoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBrZXkgIT09ICd5YW1sMTEnKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IEpTT04uc3RyaW5naWZ5KGtleSkpXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiOyB1c2Ugb25lIG9mICR7a2V5c30gb3IgZGVmaW5lIGN1c3RvbVRhZ3MgYXJyYXlgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21UYWdzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiBjdXN0b21UYWdzKVxuICAgICAgICAgICAgdGFncyA9IHRhZ3MuY29uY2F0KHRhZyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjdXN0b21UYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRhZ3MgPSBjdXN0b21UYWdzKHRhZ3Muc2xpY2UoKSk7XG4gICAgfVxuICAgIGlmIChhZGRNZXJnZVRhZylcbiAgICAgICAgdGFncyA9IHRhZ3MuY29uY2F0KG1lcmdlKTtcbiAgICByZXR1cm4gdGFncy5yZWR1Y2UoKHRhZ3MsIHRhZykgPT4ge1xuICAgICAgICBjb25zdCB0YWdPYmogPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IHRhZ3NCeU5hbWVbdGFnXSA6IHRhZztcbiAgICAgICAgaWYgKCF0YWdPYmopIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSBKU09OLnN0cmluZ2lmeSh0YWcpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRhZ3NCeU5hbWUpXG4gICAgICAgICAgICAgICAgLm1hcChrZXkgPT4gSlNPTi5zdHJpbmdpZnkoa2V5KSlcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjdXN0b20gdGFnICR7dGFnTmFtZX07IHVzZSBvbmUgb2YgJHtrZXlzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFncy5pbmNsdWRlcyh0YWdPYmopKVxuICAgICAgICAgICAgdGFncy5wdXNoKHRhZ09iaik7XG4gICAgICAgIHJldHVybiB0YWdzO1xuICAgIH0sIFtdKTtcbn1cblxuZXhwb3J0IHsgY29yZUtub3duVGFncywgZ2V0VGFncyB9O1xuIiwgImltcG9ydCB7IE1BUCwgU0NBTEFSLCBTRVEgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuL2NvbW1vbi9tYXAuanMnO1xuaW1wb3J0IHsgc2VxIH0gZnJvbSAnLi9jb21tb24vc2VxLmpzJztcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4vY29tbW9uL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBnZXRUYWdzLCBjb3JlS25vd25UYWdzIH0gZnJvbSAnLi90YWdzLmpzJztcblxuY29uc3Qgc29ydE1hcEVudHJpZXNCeUtleSA9IChhLCBiKSA9PiBhLmtleSA8IGIua2V5ID8gLTEgOiBhLmtleSA+IGIua2V5ID8gMSA6IDA7XG5jbGFzcyBTY2hlbWEge1xuICAgIGNvbnN0cnVjdG9yKHsgY29tcGF0LCBjdXN0b21UYWdzLCBtZXJnZSwgcmVzb2x2ZUtub3duVGFncywgc2NoZW1hLCBzb3J0TWFwRW50cmllcywgdG9TdHJpbmdEZWZhdWx0cyB9KSB7XG4gICAgICAgIHRoaXMuY29tcGF0ID0gQXJyYXkuaXNBcnJheShjb21wYXQpXG4gICAgICAgICAgICA/IGdldFRhZ3MoY29tcGF0LCAnY29tcGF0JylcbiAgICAgICAgICAgIDogY29tcGF0XG4gICAgICAgICAgICAgICAgPyBnZXRUYWdzKG51bGwsIGNvbXBhdClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRoaXMubmFtZSA9ICh0eXBlb2Ygc2NoZW1hID09PSAnc3RyaW5nJyAmJiBzY2hlbWEpIHx8ICdjb3JlJztcbiAgICAgICAgdGhpcy5rbm93blRhZ3MgPSByZXNvbHZlS25vd25UYWdzID8gY29yZUtub3duVGFncyA6IHt9O1xuICAgICAgICB0aGlzLnRhZ3MgPSBnZXRUYWdzKGN1c3RvbVRhZ3MsIHRoaXMubmFtZSwgbWVyZ2UpO1xuICAgICAgICB0aGlzLnRvU3RyaW5nT3B0aW9ucyA9IHRvU3RyaW5nRGVmYXVsdHMgPz8gbnVsbDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE1BUCwgeyB2YWx1ZTogbWFwIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU0NBTEFSLCB7IHZhbHVlOiBzdHJpbmcgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTRVEsIHsgdmFsdWU6IHNlcSB9KTtcbiAgICAgICAgLy8gVXNlZCBieSBjcmVhdGVNYXAoKVxuICAgICAgICB0aGlzLnNvcnRNYXBFbnRyaWVzID1cbiAgICAgICAgICAgIHR5cGVvZiBzb3J0TWFwRW50cmllcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gc29ydE1hcEVudHJpZXNcbiAgICAgICAgICAgICAgICA6IHNvcnRNYXBFbnRyaWVzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gc29ydE1hcEVudHJpZXNCeUtleVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjb3B5ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEucHJvdG90eXBlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7XG4gICAgICAgIGNvcHkudGFncyA9IHRoaXMudGFncy5zbGljZSgpO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFNjaGVtYSB9O1xuIiwgImltcG9ydCB7IGlzTm9kZSB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IGNyZWF0ZVN0cmluZ2lmeUNvbnRleHQsIHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmltcG9ydCB7IGluZGVudENvbW1lbnQsIGxpbmVDb21tZW50IH0gZnJvbSAnLi9zdHJpbmdpZnlDb21tZW50LmpzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5RG9jdW1lbnQoZG9jLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBsZXQgaGFzRGlyZWN0aXZlcyA9IG9wdGlvbnMuZGlyZWN0aXZlcyA9PT0gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzICE9PSBmYWxzZSAmJiBkb2MuZGlyZWN0aXZlcykge1xuICAgICAgICBjb25zdCBkaXIgPSBkb2MuZGlyZWN0aXZlcy50b1N0cmluZyhkb2MpO1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGRpcik7XG4gICAgICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkb2MuZGlyZWN0aXZlcy5kb2NTdGFydClcbiAgICAgICAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoaGFzRGlyZWN0aXZlcylcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJyk7XG4gICAgY29uc3QgY3R4ID0gY3JlYXRlU3RyaW5naWZ5Q29udGV4dChkb2MsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgY29tbWVudFN0cmluZyB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgaWYgKGRvYy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICBsaW5lcy51bnNoaWZ0KCcnKTtcbiAgICAgICAgY29uc3QgY3MgPSBjb21tZW50U3RyaW5nKGRvYy5jb21tZW50QmVmb3JlKTtcbiAgICAgICAgbGluZXMudW5zaGlmdChpbmRlbnRDb21tZW50KGNzLCAnJykpO1xuICAgIH1cbiAgICBsZXQgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgbGV0IGNvbnRlbnRDb21tZW50ID0gbnVsbDtcbiAgICBpZiAoZG9jLmNvbnRlbnRzKSB7XG4gICAgICAgIGlmIChpc05vZGUoZG9jLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgaWYgKGRvYy5jb250ZW50cy5zcGFjZUJlZm9yZSAmJiBoYXNEaXJlY3RpdmVzKVxuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgICAgICAgaWYgKGRvYy5jb250ZW50cy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3MgPSBjb21tZW50U3RyaW5nKGRvYy5jb250ZW50cy5jb21tZW50QmVmb3JlKTtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGluZGVudENvbW1lbnQoY3MsICcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0b3AtbGV2ZWwgYmxvY2sgc2NhbGFycyBuZWVkIHRvIGJlIGluZGVudGVkIGlmIGZvbGxvd2VkIGJ5IGEgY29tbWVudFxuICAgICAgICAgICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSAhIWRvYy5jb21tZW50O1xuICAgICAgICAgICAgY29udGVudENvbW1lbnQgPSBkb2MuY29udGVudHMuY29tbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbkNob21wS2VlcCA9IGNvbnRlbnRDb21tZW50ID8gdW5kZWZpbmVkIDogKCkgPT4gKGNob21wS2VlcCA9IHRydWUpO1xuICAgICAgICBsZXQgYm9keSA9IHN0cmluZ2lmeShkb2MuY29udGVudHMsIGN0eCwgKCkgPT4gKGNvbnRlbnRDb21tZW50ID0gbnVsbCksIG9uQ2hvbXBLZWVwKTtcbiAgICAgICAgaWYgKGNvbnRlbnRDb21tZW50KVxuICAgICAgICAgICAgYm9keSArPSBsaW5lQ29tbWVudChib2R5LCAnJywgY29tbWVudFN0cmluZyhjb250ZW50Q29tbWVudCkpO1xuICAgICAgICBpZiAoKGJvZHlbMF0gPT09ICd8JyB8fCBib2R5WzBdID09PSAnPicpICYmXG4gICAgICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PT0gJy0tLScpIHtcbiAgICAgICAgICAgIC8vIFRvcC1sZXZlbCBibG9jayBzY2FsYXJzIHdpdGggYSBwcmVjZWRpbmcgZG9jIG1hcmtlciBvdWdodCB0byB1c2UgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIGxpbmUgZm9yIHRoZWlyIGhlYWRlci5cbiAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gYC0tLSAke2JvZHl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsaW5lcy5wdXNoKGJvZHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGluZXMucHVzaChzdHJpbmdpZnkoZG9jLmNvbnRlbnRzLCBjdHgpKTtcbiAgICB9XG4gICAgaWYgKGRvYy5kaXJlY3RpdmVzPy5kb2NFbmQpIHtcbiAgICAgICAgaWYgKGRvYy5jb21tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjcyA9IGNvbW1lbnRTdHJpbmcoZG9jLmNvbW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNzLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJy4uLicpO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goaW5kZW50Q29tbWVudChjcywgJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goYC4uLiAke2NzfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBkYyA9IGRvYy5jb21tZW50O1xuICAgICAgICBpZiAoZGMgJiYgY2hvbXBLZWVwKVxuICAgICAgICAgICAgZGMgPSBkYy5yZXBsYWNlKC9eXFxuKy8sICcnKTtcbiAgICAgICAgaWYgKGRjKSB7XG4gICAgICAgICAgICBpZiAoKCFjaG9tcEtlZXAgfHwgY29udGVudENvbW1lbnQpICYmIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdICE9PSAnJylcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goaW5kZW50Q29tbWVudChjb21tZW50U3RyaW5nKGRjKSwgJycpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykgKyAnXFxuJztcbn1cblxuZXhwb3J0IHsgc3RyaW5naWZ5RG9jdW1lbnQgfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzRW1wdHlQYXRoLCBjb2xsZWN0aW9uRnJvbVBhdGggfSBmcm9tICcuLi9ub2Rlcy9Db2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IE5PREVfVFlQRSwgRE9DLCBpc05vZGUsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBQYWlyIH0gZnJvbSAnLi4vbm9kZXMvUGFpci5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi4vbm9kZXMvdG9KUy5qcyc7XG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEvU2NoZW1hLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeURvY3VtZW50IH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeURvY3VtZW50LmpzJztcbmltcG9ydCB7IGFuY2hvck5hbWVzLCBmaW5kTmV3QW5jaG9yLCBjcmVhdGVOb2RlQW5jaG9ycyB9IGZyb20gJy4vYW5jaG9ycy5qcyc7XG5pbXBvcnQgeyBhcHBseVJldml2ZXIgfSBmcm9tICcuL2FwcGx5UmV2aXZlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi9jcmVhdGVOb2RlLmpzJztcbmltcG9ydCB7IERpcmVjdGl2ZXMgfSBmcm9tICcuL2RpcmVjdGl2ZXMuanMnO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gICAgY29uc3RydWN0b3IodmFsdWUsIHJlcGxhY2VyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qKiBBIGNvbW1lbnQgYmVmb3JlIHRoaXMgRG9jdW1lbnQgKi9cbiAgICAgICAgdGhpcy5jb21tZW50QmVmb3JlID0gbnVsbDtcbiAgICAgICAgLyoqIEEgY29tbWVudCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIERvY3VtZW50ICovXG4gICAgICAgIHRoaXMuY29tbWVudCA9IG51bGw7XG4gICAgICAgIC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHBhcnNpbmcuICovXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIC8qKiBXYXJuaW5ncyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4gKi9cbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgTk9ERV9UWVBFLCB7IHZhbHVlOiBET0MgfSk7XG4gICAgICAgIGxldCBfcmVwbGFjZXIgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkocmVwbGFjZXIpKSB7XG4gICAgICAgICAgICBfcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgcmVwbGFjZXIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIHJlcGxhY2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgaW50QXNCaWdJbnQ6IGZhbHNlLFxuICAgICAgICAgICAga2VlcFNvdXJjZVRva2VuczogZmFsc2UsXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3dhcm4nLFxuICAgICAgICAgICAgcHJldHR5RXJyb3JzOiB0cnVlLFxuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgICAgc3RyaW5nS2V5czogZmFsc2UsXG4gICAgICAgICAgICB1bmlxdWVLZXlzOiB0cnVlLFxuICAgICAgICAgICAgdmVyc2lvbjogJzEuMidcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdDtcbiAgICAgICAgbGV0IHsgdmVyc2lvbiB9ID0gb3B0O1xuICAgICAgICBpZiAob3B0aW9ucz8uX2RpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG9wdGlvbnMuX2RpcmVjdGl2ZXMuYXREb2N1bWVudCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcy55YW1sLmV4cGxpY2l0KVxuICAgICAgICAgICAgICAgIHZlcnNpb24gPSB0aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbiB9KTtcbiAgICAgICAgdGhpcy5zZXRTY2hlbWEodmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgIHRoaXMuY29udGVudHMgPVxuICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmNyZWF0ZU5vZGUodmFsdWUsIF9yZXBsYWNlciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGRlZXAgY29weSBvZiB0aGlzIERvY3VtZW50IGFuZCBpdHMgY29udGVudHMuXG4gICAgICpcbiAgICAgKiBDdXN0b20gTm9kZSB2YWx1ZXMgdGhhdCBpbmhlcml0IGZyb20gYE9iamVjdGAgc3RpbGwgcmVmZXIgdG8gdGhlaXIgb3JpZ2luYWwgaW5zdGFuY2VzLlxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjb3B5ID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIFtOT0RFX1RZUEVdOiB7IHZhbHVlOiBET0MgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29weS5jb21tZW50QmVmb3JlID0gdGhpcy5jb21tZW50QmVmb3JlO1xuICAgICAgICBjb3B5LmNvbW1lbnQgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICAgIGNvcHkuZXJyb3JzID0gdGhpcy5lcnJvcnMuc2xpY2UoKTtcbiAgICAgICAgY29weS53YXJuaW5ncyA9IHRoaXMud2FybmluZ3Muc2xpY2UoKTtcbiAgICAgICAgY29weS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgIGNvcHkuZGlyZWN0aXZlcyA9IHRoaXMuZGlyZWN0aXZlcy5jbG9uZSgpO1xuICAgICAgICBjb3B5LnNjaGVtYSA9IHRoaXMuc2NoZW1hLmNsb25lKCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgIGNvcHkuY29udGVudHMgPSBpc05vZGUodGhpcy5jb250ZW50cylcbiAgICAgICAgICAgID8gdGhpcy5jb250ZW50cy5jbG9uZShjb3B5LnNjaGVtYSlcbiAgICAgICAgICAgIDogdGhpcy5jb250ZW50cztcbiAgICAgICAgaWYgKHRoaXMucmFuZ2UpXG4gICAgICAgICAgICBjb3B5LnJhbmdlID0gdGhpcy5yYW5nZS5zbGljZSgpO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG4gICAgLyoqIEFkZHMgYSB2YWx1ZSB0byB0aGUgZG9jdW1lbnQuICovXG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICAgIGlmIChhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpKVxuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5hZGQodmFsdWUpO1xuICAgIH1cbiAgICAvKiogQWRkcyBhIHZhbHVlIHRvIHRoZSBkb2N1bWVudC4gKi9cbiAgICBhZGRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSlcbiAgICAgICAgICAgIHRoaXMuY29udGVudHMuYWRkSW4ocGF0aCwgdmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYEFsaWFzYCBub2RlLCBlbnN1cmluZyB0aGF0IHRoZSB0YXJnZXQgYG5vZGVgIGhhcyB0aGUgcmVxdWlyZWQgYW5jaG9yLlxuICAgICAqXG4gICAgICogSWYgYG5vZGVgIGFscmVhZHkgaGFzIGFuIGFuY2hvciwgYG5hbWVgIGlzIGlnbm9yZWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGUgYG5vZGUuYW5jaG9yYCB2YWx1ZSB3aWxsIGJlIHNldCB0byBgbmFtZWAsXG4gICAgICogb3IgaWYgYW4gYW5jaG9yIHdpdGggdGhhdCBuYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQsXG4gICAgICogYG5hbWVgIHdpbGwgYmUgdXNlZCBhcyBhIHByZWZpeCBmb3IgYSBuZXcgdW5pcXVlIGFuY2hvci5cbiAgICAgKiBJZiBgbmFtZWAgaXMgdW5kZWZpbmVkLCB0aGUgZ2VuZXJhdGVkIGFuY2hvciB3aWxsIHVzZSAnYScgYXMgYSBwcmVmaXguXG4gICAgICovXG4gICAgY3JlYXRlQWxpYXMobm9kZSwgbmFtZSkge1xuICAgICAgICBpZiAoIW5vZGUuYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gYW5jaG9yTmFtZXModGhpcyk7XG4gICAgICAgICAgICBub2RlLmFuY2hvciA9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgICAgICAgICAgIW5hbWUgfHwgcHJldi5oYXMobmFtZSkgPyBmaW5kTmV3QW5jaG9yKG5hbWUgfHwgJ2EnLCBwcmV2KSA6IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyhub2RlLmFuY2hvcik7XG4gICAgfVxuICAgIGNyZWF0ZU5vZGUodmFsdWUsIHJlcGxhY2VyLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBfcmVwbGFjZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbCh7ICcnOiB2YWx1ZSB9LCAnJywgdmFsdWUpO1xuICAgICAgICAgICAgX3JlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVRvU3RyID0gKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB2IGluc3RhbmNlb2YgU3RyaW5nIHx8IHYgaW5zdGFuY2VvZiBOdW1iZXI7XG4gICAgICAgICAgICBjb25zdCBhc1N0ciA9IHJlcGxhY2VyLmZpbHRlcihrZXlUb1N0cikubWFwKFN0cmluZyk7XG4gICAgICAgICAgICBpZiAoYXNTdHIubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZXBsYWNlciA9IHJlcGxhY2VyLmNvbmNhdChhc1N0cik7XG4gICAgICAgICAgICBfcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgcmVwbGFjZXIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIHJlcGxhY2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYWxpYXNEdXBsaWNhdGVPYmplY3RzLCBhbmNob3JQcmVmaXgsIGZsb3csIGtlZXBVbmRlZmluZWQsIG9uVGFnT2JqLCB0YWcgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIGNvbnN0IHsgb25BbmNob3IsIHNldEFuY2hvcnMsIHNvdXJjZU9iamVjdHMgfSA9IGNyZWF0ZU5vZGVBbmNob3JzKHRoaXMsIFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1udWxsaXNoLWNvYWxlc2NpbmdcbiAgICAgICAgYW5jaG9yUHJlZml4IHx8ICdhJyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFsaWFzRHVwbGljYXRlT2JqZWN0czogYWxpYXNEdXBsaWNhdGVPYmplY3RzID8/IHRydWUsXG4gICAgICAgICAgICBrZWVwVW5kZWZpbmVkOiBrZWVwVW5kZWZpbmVkID8/IGZhbHNlLFxuICAgICAgICAgICAgb25BbmNob3IsXG4gICAgICAgICAgICBvblRhZ09iaixcbiAgICAgICAgICAgIHJlcGxhY2VyOiBfcmVwbGFjZXIsXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICAgICAgc291cmNlT2JqZWN0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub2RlID0gY3JlYXRlTm9kZSh2YWx1ZSwgdGFnLCBjdHgpO1xuICAgICAgICBpZiAoZmxvdyAmJiBpc0NvbGxlY3Rpb24obm9kZSkpXG4gICAgICAgICAgICBub2RlLmZsb3cgPSB0cnVlO1xuICAgICAgICBzZXRBbmNob3JzKCk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEga2V5IGFuZCBhIHZhbHVlIGludG8gYSBgUGFpcmAgdXNpbmcgdGhlIGN1cnJlbnQgc2NoZW1hLFxuICAgICAqIHJlY3Vyc2l2ZWx5IHdyYXBwaW5nIGFsbCB2YWx1ZXMgYXMgYFNjYWxhcmAgb3IgYENvbGxlY3Rpb25gIG5vZGVzLlxuICAgICAqL1xuICAgIGNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLmNyZWF0ZU5vZGUoa2V5LCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuY3JlYXRlTm9kZSh2YWx1ZSwgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFpcihrLCB2KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSB3YXMgZm91bmQgYW5kIHJlbW92ZWQuXG4gICAgICovXG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSA/IHRoaXMuY29udGVudHMuZGVsZXRlKGtleSkgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSB3YXMgZm91bmQgYW5kIHJlbW92ZWQuXG4gICAgICovXG4gICAgZGVsZXRlSW4ocGF0aCkge1xuICAgICAgICBpZiAoaXNFbXB0eVBhdGgocGF0aCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQcmVzdW1lZCBpbXBvc3NpYmxlIGlmIFN0cmljdCBleHRlbmRzIGZhbHNlXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpXG4gICAgICAgICAgICA/IHRoaXMuY29udGVudHMuZGVsZXRlSW4ocGF0aClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaXRlbSBhdCBga2V5YCwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLiBCeSBkZWZhdWx0IHVud3JhcHNcbiAgICAgKiBzY2FsYXIgdmFsdWVzIGZyb20gdGhlaXIgc3Vycm91bmRpbmcgbm9kZTsgdG8gZGlzYWJsZSBzZXQgYGtlZXBTY2FsYXJgIHRvXG4gICAgICogYHRydWVgIChjb2xsZWN0aW9ucyBhcmUgYWx3YXlzIHJldHVybmVkIGludGFjdCkuXG4gICAgICovXG4gICAgZ2V0KGtleSwga2VlcFNjYWxhcikge1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpXG4gICAgICAgICAgICA/IHRoaXMuY29udGVudHMuZ2V0KGtleSwga2VlcFNjYWxhcilcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGl0ZW0gYXQgYHBhdGhgLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuIEJ5IGRlZmF1bHQgdW53cmFwc1xuICAgICAqIHNjYWxhciB2YWx1ZXMgZnJvbSB0aGVpciBzdXJyb3VuZGluZyBub2RlOyB0byBkaXNhYmxlIHNldCBga2VlcFNjYWxhcmAgdG9cbiAgICAgKiBgdHJ1ZWAgKGNvbGxlY3Rpb25zIGFyZSBhbHdheXMgcmV0dXJuZWQgaW50YWN0KS5cbiAgICAgKi9cbiAgICBnZXRJbihwYXRoLCBrZWVwU2NhbGFyKSB7XG4gICAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSlcbiAgICAgICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5jb250ZW50cy52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb250ZW50cztcbiAgICAgICAgcmV0dXJuIGlzQ29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRzLmdldEluKHBhdGgsIGtlZXBTY2FsYXIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBkb2N1bWVudCBpbmNsdWRlcyBhIHZhbHVlIHdpdGggdGhlIGtleSBga2V5YC5cbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0NvbGxlY3Rpb24odGhpcy5jb250ZW50cykgPyB0aGlzLmNvbnRlbnRzLmhhcyhrZXkpIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZG9jdW1lbnQgaW5jbHVkZXMgYSB2YWx1ZSBhdCBgcGF0aGAuXG4gICAgICovXG4gICAgaGFzSW4ocGF0aCkge1xuICAgICAgICBpZiAoaXNFbXB0eVBhdGgocGF0aCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50cyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpID8gdGhpcy5jb250ZW50cy5oYXNJbihwYXRoKSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhpcyBkb2N1bWVudC4gRm9yIGAhIXNldGAsIGB2YWx1ZWAgbmVlZHMgdG8gYmUgYVxuICAgICAqIGJvb2xlYW4gdG8gYWRkL3JlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBzZXQuXG4gICAgICovXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBjYW4ndCByZWFsbHkga25vdyB0aGF0IHRoaXMgbWF0Y2hlcyBDb250ZW50cy5cbiAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSBjb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIFtrZXldLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBhIHZhbHVlIGluIHRoaXMgZG9jdW1lbnQuIEZvciBgISFzZXRgLCBgdmFsdWVgIG5lZWRzIHRvIGJlIGFcbiAgICAgKiBib29sZWFuIHRvIGFkZC9yZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgc2V0LlxuICAgICAqL1xuICAgIHNldEluKHBhdGgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBjYW4ndCByZWFsbHkga25vdyB0aGF0IHRoaXMgbWF0Y2hlcyBDb250ZW50cy5cbiAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnRzID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzID0gY29sbGVjdGlvbkZyb21QYXRoKHRoaXMuc2NoZW1hLCBBcnJheS5mcm9tKHBhdGgpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5zZXRJbihwYXRoLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBZQU1MIHZlcnNpb24gYW5kIHNjaGVtYSB1c2VkIGJ5IHRoZSBkb2N1bWVudC5cbiAgICAgKiBBIGBudWxsYCB2ZXJzaW9uIGRpc2FibGVzIHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMsIGV4cGxpY2l0IHRhZ3MsIGFuY2hvcnMsIGFuZCBhbGlhc2VzLlxuICAgICAqIEl0IGFsc28gcmVxdWlyZXMgdGhlIGBzY2hlbWFgIG9wdGlvbiB0byBiZSBnaXZlbiBhcyBhIGBTY2hlbWFgIGluc3RhbmNlIHZhbHVlLlxuICAgICAqXG4gICAgICogT3ZlcnJpZGVzIGFsbCBwcmV2aW91c2x5IHNldCBzY2hlbWEgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBzZXRTY2hlbWEodmVyc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBsZXQgb3B0O1xuICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJzEuMSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbiA9ICcxLjEnO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gbmV3IERpcmVjdGl2ZXMoeyB2ZXJzaW9uOiAnMS4xJyB9KTtcbiAgICAgICAgICAgICAgICBvcHQgPSB7IHJlc29sdmVLbm93blRhZ3M6IGZhbHNlLCBzY2hlbWE6ICd5YW1sLTEuMScgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzEuMic6XG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXJlY3RpdmVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbiB9KTtcbiAgICAgICAgICAgICAgICBvcHQgPSB7IHJlc29sdmVLbm93blRhZ3M6IHRydWUsIHNjaGVtYTogJ2NvcmUnIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGlyZWN0aXZlcztcbiAgICAgICAgICAgICAgICBvcHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gSlNPTi5zdHJpbmdpZnkodmVyc2lvbik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnMS4xJywgJzEuMicgb3IgbnVsbCBhcyBmaXJzdCBhcmd1bWVudCwgYnV0IGZvdW5kOiAke3N2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCB1c2luZyBgaW5zdGFuY2VvZiBTY2hlbWFgIHRvIGFsbG93IGZvciBkdWNrIHR5cGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5zY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnMuc2NoZW1hO1xuICAgICAgICBlbHNlIGlmIChvcHQpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG5ldyBTY2hlbWEoT2JqZWN0LmFzc2lnbihvcHQsIG9wdGlvbnMpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaXRoIGEgbnVsbCBZQU1MIHZlcnNpb24sIHRoZSB7IHNjaGVtYTogU2NoZW1hIH0gb3B0aW9uIGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuICAgIC8vIGpzb24gJiBqc29uQXJnIGFyZSBvbmx5IHVzZWQgZnJvbSB0b0pTT04oKVxuICAgIHRvSlMoeyBqc29uLCBqc29uQXJnLCBtYXBBc01hcCwgbWF4QWxpYXNDb3VudCwgb25BbmNob3IsIHJldml2ZXIgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFuY2hvcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGRvYzogdGhpcyxcbiAgICAgICAgICAgIGtlZXA6ICFqc29uLFxuICAgICAgICAgICAgbWFwQXNNYXA6IG1hcEFzTWFwID09PSB0cnVlLFxuICAgICAgICAgICAgbWFwS2V5V2FybmVkOiBmYWxzZSxcbiAgICAgICAgICAgIG1heEFsaWFzQ291bnQ6IHR5cGVvZiBtYXhBbGlhc0NvdW50ID09PSAnbnVtYmVyJyA/IG1heEFsaWFzQ291bnQgOiAxMDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0gdG9KUyh0aGlzLmNvbnRlbnRzLCBqc29uQXJnID8/ICcnLCBjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQW5jaG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGNvdW50LCByZXMgfSBvZiBjdHguYW5jaG9ycy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICBvbkFuY2hvcihyZXMsIGNvdW50KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGFwcGx5UmV2aXZlcihyZXZpdmVyLCB7ICcnOiByZXMgfSwgJycsIHJlcylcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGBjb250ZW50c2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ganNvbkFyZyBVc2VkIGJ5IGBKU09OLnN0cmluZ2lmeWAgdG8gaW5kaWNhdGUgdGhlIGFycmF5IGluZGV4IG9yXG4gICAgICogICBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHRvSlNPTihqc29uQXJnLCBvbkFuY2hvcikge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTKHsganNvbjogdHJ1ZSwganNvbkFyZywgbWFwQXNNYXA6IGZhbHNlLCBvbkFuY2hvciB9KTtcbiAgICB9XG4gICAgLyoqIEEgWUFNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQuICovXG4gICAgdG9TdHJpbmcob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb2N1bWVudCB3aXRoIGVycm9ycyBjYW5ub3QgYmUgc3RyaW5naWZpZWQnKTtcbiAgICAgICAgaWYgKCdpbmRlbnQnIGluIG9wdGlvbnMgJiZcbiAgICAgICAgICAgICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmluZGVudCkgfHwgTnVtYmVyKG9wdGlvbnMuaW5kZW50KSA8PSAwKSkge1xuICAgICAgICAgICAgY29uc3QgcyA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaW5kZW50KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJpbmRlbnRcIiBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIG5vdCAke3N9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeURvY3VtZW50KHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydENvbGxlY3Rpb24oY29udGVudHMpIHtcbiAgICBpZiAoaXNDb2xsZWN0aW9uKGNvbnRlbnRzKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIFlBTUwgY29sbGVjdGlvbiBhcyBkb2N1bWVudCBjb250ZW50cycpO1xufVxuXG5leHBvcnQgeyBEb2N1bWVudCB9O1xuIiwgImNsYXNzIFlBTUxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBwb3MsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgfVxufVxuY2xhc3MgWUFNTFBhcnNlRXJyb3IgZXh0ZW5kcyBZQU1MRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHBvcywgY29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcignWUFNTFBhcnNlRXJyb3InLCBwb3MsIGNvZGUsIG1lc3NhZ2UpO1xuICAgIH1cbn1cbmNsYXNzIFlBTUxXYXJuaW5nIGV4dGVuZHMgWUFNTEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwb3MsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoJ1lBTUxXYXJuaW5nJywgcG9zLCBjb2RlLCBtZXNzYWdlKTtcbiAgICB9XG59XG5jb25zdCBwcmV0dGlmeUVycm9yID0gKHNyYywgbGMpID0+IChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5wb3NbMF0gPT09IC0xKVxuICAgICAgICByZXR1cm47XG4gICAgZXJyb3IubGluZVBvcyA9IGVycm9yLnBvcy5tYXAocG9zID0+IGxjLmxpbmVQb3MocG9zKSk7XG4gICAgY29uc3QgeyBsaW5lLCBjb2wgfSA9IGVycm9yLmxpbmVQb3NbMF07XG4gICAgZXJyb3IubWVzc2FnZSArPSBgIGF0IGxpbmUgJHtsaW5lfSwgY29sdW1uICR7Y29sfWA7XG4gICAgbGV0IGNpID0gY29sIC0gMTtcbiAgICBsZXQgbGluZVN0ciA9IHNyY1xuICAgICAgICAuc3Vic3RyaW5nKGxjLmxpbmVTdGFydHNbbGluZSAtIDFdLCBsYy5saW5lU3RhcnRzW2xpbmVdKVxuICAgICAgICAucmVwbGFjZSgvW1xcblxccl0rJC8sICcnKTtcbiAgICAvLyBUcmltIHRvIG1heCA4MCBjaGFycywga2VlcGluZyBjb2wgcG9zaXRpb24gbmVhciB0aGUgbWlkZGxlXG4gICAgaWYgKGNpID49IDYwICYmIGxpbmVTdHIubGVuZ3RoID4gODApIHtcbiAgICAgICAgY29uc3QgdHJpbVN0YXJ0ID0gTWF0aC5taW4oY2kgLSAzOSwgbGluZVN0ci5sZW5ndGggLSA3OSk7XG4gICAgICAgIGxpbmVTdHIgPSAnXHUyMDI2JyArIGxpbmVTdHIuc3Vic3RyaW5nKHRyaW1TdGFydCk7XG4gICAgICAgIGNpIC09IHRyaW1TdGFydCAtIDE7XG4gICAgfVxuICAgIGlmIChsaW5lU3RyLmxlbmd0aCA+IDgwKVxuICAgICAgICBsaW5lU3RyID0gbGluZVN0ci5zdWJzdHJpbmcoMCwgNzkpICsgJ1x1MjAyNic7XG4gICAgLy8gSW5jbHVkZSBwcmV2aW91cyBsaW5lIGluIGNvbnRleHQgaWYgcG9pbnRpbmcgYXQgbGluZSBzdGFydFxuICAgIGlmIChsaW5lID4gMSAmJiAvXiAqJC8udGVzdChsaW5lU3RyLnN1YnN0cmluZygwLCBjaSkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCB3b24ndCBtYXRjaCBpZiBzdGFydCBpcyB0cmltbWVkXG4gICAgICAgIGxldCBwcmV2ID0gc3JjLnN1YnN0cmluZyhsYy5saW5lU3RhcnRzW2xpbmUgLSAyXSwgbGMubGluZVN0YXJ0c1tsaW5lIC0gMV0pO1xuICAgICAgICBpZiAocHJldi5sZW5ndGggPiA4MClcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LnN1YnN0cmluZygwLCA3OSkgKyAnXHUyMDI2XFxuJztcbiAgICAgICAgbGluZVN0ciA9IHByZXYgKyBsaW5lU3RyO1xuICAgIH1cbiAgICBpZiAoL1teIF0vLnRlc3QobGluZVN0cikpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMTtcbiAgICAgICAgY29uc3QgZW5kID0gZXJyb3IubGluZVBvc1sxXTtcbiAgICAgICAgaWYgKGVuZCAmJiBlbmQubGluZSA9PT0gbGluZSAmJiBlbmQuY29sID4gY29sKSB7XG4gICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGVuZC5jb2wgLSBjb2wsIDgwIC0gY2kpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludGVyID0gJyAnLnJlcGVhdChjaSkgKyAnXicucmVwZWF0KGNvdW50KTtcbiAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgOlxcblxcbiR7bGluZVN0cn1cXG4ke3BvaW50ZXJ9XFxuYDtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBZQU1MRXJyb3IsIFlBTUxQYXJzZUVycm9yLCBZQU1MV2FybmluZywgcHJldHRpZnlFcnJvciB9O1xuIiwgImZ1bmN0aW9uIHJlc29sdmVQcm9wcyh0b2tlbnMsIHsgZmxvdywgaW5kaWNhdG9yLCBuZXh0LCBvZmZzZXQsIG9uRXJyb3IsIHBhcmVudEluZGVudCwgc3RhcnRPbk5ld2xpbmUgfSkge1xuICAgIGxldCBzcGFjZUJlZm9yZSA9IGZhbHNlO1xuICAgIGxldCBhdE5ld2xpbmUgPSBzdGFydE9uTmV3bGluZTtcbiAgICBsZXQgaGFzU3BhY2UgPSBzdGFydE9uTmV3bGluZTtcbiAgICBsZXQgY29tbWVudCA9ICcnO1xuICAgIGxldCBjb21tZW50U2VwID0gJyc7XG4gICAgbGV0IGhhc05ld2xpbmUgPSBmYWxzZTtcbiAgICBsZXQgcmVxU3BhY2UgPSBmYWxzZTtcbiAgICBsZXQgdGFiID0gbnVsbDtcbiAgICBsZXQgYW5jaG9yID0gbnVsbDtcbiAgICBsZXQgdGFnID0gbnVsbDtcbiAgICBsZXQgbmV3bGluZUFmdGVyUHJvcCA9IG51bGw7XG4gICAgbGV0IGNvbW1hID0gbnVsbDtcbiAgICBsZXQgZm91bmQgPSBudWxsO1xuICAgIGxldCBzdGFydCA9IG51bGw7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgaWYgKHJlcVNwYWNlKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gJ3NwYWNlJyAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgIT09ICduZXdsaW5lJyAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgIT09ICdjb21tYScpXG4gICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbi5vZmZzZXQsICdNSVNTSU5HX0NIQVInLCAnVGFncyBhbmQgYW5jaG9ycyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBuZXh0IHRva2VuIGJ5IHdoaXRlIHNwYWNlJyk7XG4gICAgICAgICAgICByZXFTcGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgIGlmIChhdE5ld2xpbmUgJiYgdG9rZW4udHlwZSAhPT0gJ2NvbW1lbnQnICYmIHRva2VuLnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IodGFiLCAnVEFCX0FTX0lOREVOVCcsICdUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAvLyBBdCB0aGUgZG9jIGxldmVsLCB0YWJzIGF0IGxpbmUgc3RhcnQgbWF5IGJlIHBhcnNlZFxuICAgICAgICAgICAgICAgIC8vIGFzIGxlYWRpbmcgd2hpdGUgc3BhY2UgcmF0aGVyIHRoYW4gaW5kZW50YXRpb24uXG4gICAgICAgICAgICAgICAgLy8gSW4gYSBmbG93IGNvbGxlY3Rpb24sIG9ubHkgdGhlIHBhcnNlciBoYW5kbGVzIGluZGVudC5cbiAgICAgICAgICAgICAgICBpZiAoIWZsb3cgJiZcbiAgICAgICAgICAgICAgICAgICAgKGluZGljYXRvciAhPT0gJ2RvYy1zdGFydCcgfHwgbmV4dD8udHlwZSAhPT0gJ2Zsb3ctY29sbGVjdGlvbicpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnNvdXJjZS5pbmNsdWRlcygnXFx0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiID0gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhc1NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOiB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ01JU1NJTkdfQ0hBUicsICdDb21tZW50cyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyIHRva2VucyBieSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSB0b2tlbi5zb3VyY2Uuc3Vic3RyaW5nKDEpIHx8ICcgJztcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjYjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gY29tbWVudFNlcCArIGNiO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRTZXAgPSAnJztcbiAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGlmIChhdE5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IHRva2VuLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRTZXAgKz0gdG9rZW4uc291cmNlO1xuICAgICAgICAgICAgICAgIGF0TmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaGFzTmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvciB8fCB0YWcpXG4gICAgICAgICAgICAgICAgICAgIG5ld2xpbmVBZnRlclByb3AgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdNVUxUSVBMRV9BTkNIT1JTJywgJ0Egbm9kZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBhbmNob3InKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4uc291cmNlLmVuZHNXaXRoKCc6JykpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4ub2Zmc2V0ICsgdG9rZW4uc291cmNlLmxlbmd0aCAtIDEsICdCQURfQUxJQVMnLCAnQW5jaG9yIGVuZGluZyBpbiA6IGlzIGFtYmlndW91cycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbi5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYXROZXdsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXFTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0YWcnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZylcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ01VTFRJUExFX1RBR1MnLCAnQSBub2RlIGNhbiBoYXZlIGF0IG1vc3Qgb25lIHRhZycpO1xuICAgICAgICAgICAgICAgIHRhZyA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbi5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYXROZXdsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXFTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIGluZGljYXRvcjpcbiAgICAgICAgICAgICAgICAvLyBDb3VsZCBoZXJlIGhhbmRsZSBwcmVjZWRpbmcgY29tbWVudHMgZGlmZmVyZW50bHlcbiAgICAgICAgICAgICAgICBpZiAoYW5jaG9yIHx8IHRhZylcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ0JBRF9QUk9QX09SREVSJywgYEFuY2hvcnMgYW5kIHRhZ3MgbXVzdCBiZSBhZnRlciB0aGUgJHt0b2tlbi5zb3VyY2V9IGluZGljYXRvcmApO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZClcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1VORVhQRUNURURfVE9LRU4nLCBgVW5leHBlY3RlZCAke3Rva2VuLnNvdXJjZX0gaW4gJHtmbG93ID8/ICdjb2xsZWN0aW9uJ31gKTtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGF0TmV3bGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvciA9PT0gJ3NlcS1pdGVtLWluZCcgfHwgaW5kaWNhdG9yID09PSAnZXhwbGljaXQta2V5LWluZCc7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1hJzpcbiAgICAgICAgICAgICAgICBpZiAoZmxvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmbG93fWApO1xuICAgICAgICAgICAgICAgICAgICBjb21tYSA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZSBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gdG9rZW5gKTtcbiAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGVuZCA9IGxhc3QgPyBsYXN0Lm9mZnNldCArIGxhc3Quc291cmNlLmxlbmd0aCA6IG9mZnNldDtcbiAgICBpZiAocmVxU3BhY2UgJiZcbiAgICAgICAgbmV4dCAmJlxuICAgICAgICBuZXh0LnR5cGUgIT09ICdzcGFjZScgJiZcbiAgICAgICAgbmV4dC50eXBlICE9PSAnbmV3bGluZScgJiZcbiAgICAgICAgbmV4dC50eXBlICE9PSAnY29tbWEnICYmXG4gICAgICAgIChuZXh0LnR5cGUgIT09ICdzY2FsYXInIHx8IG5leHQuc291cmNlICE9PSAnJykpIHtcbiAgICAgICAgb25FcnJvcihuZXh0Lm9mZnNldCwgJ01JU1NJTkdfQ0hBUicsICdUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2UnKTtcbiAgICB9XG4gICAgaWYgKHRhYiAmJlxuICAgICAgICAoKGF0TmV3bGluZSAmJiB0YWIuaW5kZW50IDw9IHBhcmVudEluZGVudCkgfHxcbiAgICAgICAgICAgIG5leHQ/LnR5cGUgPT09ICdibG9jay1tYXAnIHx8XG4gICAgICAgICAgICBuZXh0Py50eXBlID09PSAnYmxvY2stc2VxJykpXG4gICAgICAgIG9uRXJyb3IodGFiLCAnVEFCX0FTX0lOREVOVCcsICdUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hLFxuICAgICAgICBmb3VuZCxcbiAgICAgICAgc3BhY2VCZWZvcmUsXG4gICAgICAgIGNvbW1lbnQsXG4gICAgICAgIGhhc05ld2xpbmUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgdGFnLFxuICAgICAgICBuZXdsaW5lQWZ0ZXJQcm9wLFxuICAgICAgICBlbmQsXG4gICAgICAgIHN0YXJ0OiBzdGFydCA/PyBlbmRcbiAgICB9O1xufVxuXG5leHBvcnQgeyByZXNvbHZlUHJvcHMgfTtcbiIsICJmdW5jdGlvbiBjb250YWluc05ld2xpbmUoa2V5KSB7XG4gICAgaWYgKCFrZXkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHN3aXRjaCAoa2V5LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICBjYXNlICdkb3VibGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIGlmIChrZXkuc291cmNlLmluY2x1ZGVzKCdcXG4nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkuZW5kKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2Yga2V5LmVuZClcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0LnR5cGUgPT09ICduZXdsaW5lJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgZm9yIChjb25zdCBpdCBvZiBrZXkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0IG9mIGl0LnN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdCBvZiBpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluc05ld2xpbmUoaXQua2V5KSB8fCBjb250YWluc05ld2xpbmUoaXQudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgY29udGFpbnNOZXdsaW5lIH07XG4iLCAiaW1wb3J0IHsgY29udGFpbnNOZXdsaW5lIH0gZnJvbSAnLi91dGlsLWNvbnRhaW5zLW5ld2xpbmUuanMnO1xuXG5mdW5jdGlvbiBmbG93SW5kZW50Q2hlY2soaW5kZW50LCBmYywgb25FcnJvcikge1xuICAgIGlmIChmYz8udHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgZW5kID0gZmMuZW5kWzBdO1xuICAgICAgICBpZiAoZW5kLmluZGVudCA9PT0gaW5kZW50ICYmXG4gICAgICAgICAgICAoZW5kLnNvdXJjZSA9PT0gJ10nIHx8IGVuZC5zb3VyY2UgPT09ICd9JykgJiZcbiAgICAgICAgICAgIGNvbnRhaW5zTmV3bGluZShmYykpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdGbG93IGVuZCBpbmRpY2F0b3Igc2hvdWxkIGJlIG1vcmUgaW5kZW50ZWQgdGhhbiBwYXJlbnQnO1xuICAgICAgICAgICAgb25FcnJvcihlbmQsICdCQURfSU5ERU5UJywgbXNnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgZmxvd0luZGVudENoZWNrIH07XG4iLCAiaW1wb3J0IHsgaXNTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5cbmZ1bmN0aW9uIG1hcEluY2x1ZGVzKGN0eCwgaXRlbXMsIHNlYXJjaCkge1xuICAgIGNvbnN0IHsgdW5pcXVlS2V5cyB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgaWYgKHVuaXF1ZUtleXMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNFcXVhbCA9IHR5cGVvZiB1bmlxdWVLZXlzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdW5pcXVlS2V5c1xuICAgICAgICA6IChhLCBiKSA9PiBhID09PSBiIHx8IChpc1NjYWxhcihhKSAmJiBpc1NjYWxhcihiKSAmJiBhLnZhbHVlID09PSBiLnZhbHVlKTtcbiAgICByZXR1cm4gaXRlbXMuc29tZShwYWlyID0+IGlzRXF1YWwocGFpci5rZXksIHNlYXJjaCkpO1xufVxuXG5leHBvcnQgeyBtYXBJbmNsdWRlcyB9O1xuIiwgImltcG9ydCB7IFBhaXIgfSBmcm9tICcuLi9ub2Rlcy9QYWlyLmpzJztcbmltcG9ydCB7IFlBTUxNYXAgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MTWFwLmpzJztcbmltcG9ydCB7IHJlc29sdmVQcm9wcyB9IGZyb20gJy4vcmVzb2x2ZS1wcm9wcy5qcyc7XG5pbXBvcnQgeyBjb250YWluc05ld2xpbmUgfSBmcm9tICcuL3V0aWwtY29udGFpbnMtbmV3bGluZS5qcyc7XG5pbXBvcnQgeyBmbG93SW5kZW50Q2hlY2sgfSBmcm9tICcuL3V0aWwtZmxvdy1pbmRlbnQtY2hlY2suanMnO1xuaW1wb3J0IHsgbWFwSW5jbHVkZXMgfSBmcm9tICcuL3V0aWwtbWFwLWluY2x1ZGVzLmpzJztcblxuY29uc3Qgc3RhcnRDb2xNc2cgPSAnQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW4nO1xuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrTWFwKHsgY29tcG9zZU5vZGUsIGNvbXBvc2VFbXB0eU5vZGUgfSwgY3R4LCBibSwgb25FcnJvciwgdGFnKSB7XG4gICAgY29uc3QgTm9kZUNsYXNzID0gdGFnPy5ub2RlQ2xhc3MgPz8gWUFNTE1hcDtcbiAgICBjb25zdCBtYXAgPSBuZXcgTm9kZUNsYXNzKGN0eC5zY2hlbWEpO1xuICAgIGlmIChjdHguYXRSb290KVxuICAgICAgICBjdHguYXRSb290ID0gZmFsc2U7XG4gICAgbGV0IG9mZnNldCA9IGJtLm9mZnNldDtcbiAgICBsZXQgY29tbWVudEVuZCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBjb2xsSXRlbSBvZiBibS5pdGVtcykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBrZXksIHNlcCwgdmFsdWUgfSA9IGNvbGxJdGVtO1xuICAgICAgICAvLyBrZXkgcHJvcGVydGllc1xuICAgICAgICBjb25zdCBrZXlQcm9wcyA9IHJlc29sdmVQcm9wcyhzdGFydCwge1xuICAgICAgICAgICAgaW5kaWNhdG9yOiAnZXhwbGljaXQta2V5LWluZCcsXG4gICAgICAgICAgICBuZXh0OiBrZXkgPz8gc2VwPy5bMF0sXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgICAgcGFyZW50SW5kZW50OiBibS5pbmRlbnQsXG4gICAgICAgICAgICBzdGFydE9uTmV3bGluZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW1wbGljaXRLZXkgPSAha2V5UHJvcHMuZm91bmQ7XG4gICAgICAgIGlmIChpbXBsaWNpdEtleSkge1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gJ2Jsb2NrLXNlcScpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3Iob2Zmc2V0LCAnQkxPQ0tfQVNfSU1QTElDSVRfS0VZJywgJ0EgYmxvY2sgc2VxdWVuY2UgbWF5IG5vdCBiZSB1c2VkIGFzIGFuIGltcGxpY2l0IG1hcCBrZXknKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgnaW5kZW50JyBpbiBrZXkgJiYga2V5LmluZGVudCAhPT0gYm0uaW5kZW50KVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBzdGFydENvbE1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWtleVByb3BzLmFuY2hvciAmJiAha2V5UHJvcHMudGFnICYmICFzZXApIHtcbiAgICAgICAgICAgICAgICBjb21tZW50RW5kID0ga2V5UHJvcHMuZW5kO1xuICAgICAgICAgICAgICAgIGlmIChrZXlQcm9wcy5jb21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5jb21tZW50ICs9ICdcXG4nICsga2V5UHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwLmNvbW1lbnQgPSBrZXlQcm9wcy5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXlQcm9wcy5uZXdsaW5lQWZ0ZXJQcm9wIHx8IGNvbnRhaW5zTmV3bGluZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXkgPz8gc3RhcnRbc3RhcnQubGVuZ3RoIC0gMV0sICdNVUxUSUxJTkVfSU1QTElDSVRfS0VZJywgJ0ltcGxpY2l0IGtleXMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5UHJvcHMuZm91bmQ/LmluZGVudCAhPT0gYm0uaW5kZW50KSB7XG4gICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBzdGFydENvbE1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2V5IHZhbHVlXG4gICAgICAgIGN0eC5hdEtleSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGtleVN0YXJ0ID0ga2V5UHJvcHMuZW5kO1xuICAgICAgICBjb25zdCBrZXlOb2RlID0ga2V5XG4gICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwga2V5LCBrZXlQcm9wcywgb25FcnJvcilcbiAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIGtleVN0YXJ0LCBzdGFydCwgbnVsbCwga2V5UHJvcHMsIG9uRXJyb3IpO1xuICAgICAgICBpZiAoY3R4LnNjaGVtYS5jb21wYXQpXG4gICAgICAgICAgICBmbG93SW5kZW50Q2hlY2soYm0uaW5kZW50LCBrZXksIG9uRXJyb3IpO1xuICAgICAgICBjdHguYXRLZXkgPSBmYWxzZTtcbiAgICAgICAgaWYgKG1hcEluY2x1ZGVzKGN0eCwgbWFwLml0ZW1zLCBrZXlOb2RlKSlcbiAgICAgICAgICAgIG9uRXJyb3Ioa2V5U3RhcnQsICdEVVBMSUNBVEVfS0VZJywgJ01hcCBrZXlzIG11c3QgYmUgdW5pcXVlJyk7XG4gICAgICAgIC8vIHZhbHVlIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdmFsdWVQcm9wcyA9IHJlc29sdmVQcm9wcyhzZXAgPz8gW10sIHtcbiAgICAgICAgICAgIGluZGljYXRvcjogJ21hcC12YWx1ZS1pbmQnLFxuICAgICAgICAgICAgbmV4dDogdmFsdWUsXG4gICAgICAgICAgICBvZmZzZXQ6IGtleU5vZGUucmFuZ2VbMl0sXG4gICAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgICAgcGFyZW50SW5kZW50OiBibS5pbmRlbnQsXG4gICAgICAgICAgICBzdGFydE9uTmV3bGluZTogIWtleSB8fCBrZXkudHlwZSA9PT0gJ2Jsb2NrLXNjYWxhcidcbiAgICAgICAgfSk7XG4gICAgICAgIG9mZnNldCA9IHZhbHVlUHJvcHMuZW5kO1xuICAgICAgICBpZiAodmFsdWVQcm9wcy5mb3VuZCkge1xuICAgICAgICAgICAgaWYgKGltcGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlPy50eXBlID09PSAnYmxvY2stbWFwJyAmJiAhdmFsdWVQcm9wcy5oYXNOZXdsaW5lKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JMT0NLX0FTX0lNUExJQ0lUX0tFWScsICdOZXN0ZWQgbWFwcGluZ3MgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBhY3QgbWFwcGluZ3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMuc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BzLnN0YXJ0IDwgdmFsdWVQcm9wcy5mb3VuZC5vZmZzZXQgLSAxMDI0KVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGtleU5vZGUucmFuZ2UsICdLRVlfT1ZFUl8xMDI0X0NIQVJTJywgJ1RoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgYmxvY2sgbWFwcGluZyBrZXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHZhbHVlIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB2YWx1ZU5vZGUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgdmFsdWVQcm9wcywgb25FcnJvcilcbiAgICAgICAgICAgICAgICA6IGNvbXBvc2VFbXB0eU5vZGUoY3R4LCBvZmZzZXQsIHNlcCwgbnVsbCwgdmFsdWVQcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoY3R4LnNjaGVtYS5jb21wYXQpXG4gICAgICAgICAgICAgICAgZmxvd0luZGVudENoZWNrKGJtLmluZGVudCwgdmFsdWUsIG9uRXJyb3IpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gdmFsdWVOb2RlLnJhbmdlWzJdO1xuICAgICAgICAgICAgY29uc3QgcGFpciA9IG5ldyBQYWlyKGtleU5vZGUsIHZhbHVlTm9kZSk7XG4gICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMua2VlcFNvdXJjZVRva2VucylcbiAgICAgICAgICAgICAgICBwYWlyLnNyY1Rva2VuID0gY29sbEl0ZW07XG4gICAgICAgICAgICBtYXAuaXRlbXMucHVzaChwYWlyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGtleSB3aXRoIG5vIHZhbHVlXG4gICAgICAgICAgICBpZiAoaW1wbGljaXRLZXkpXG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXlOb2RlLnJhbmdlLCAnTUlTU0lOR19DSEFSJywgJ0ltcGxpY2l0IG1hcCBrZXlzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgbWFwIHZhbHVlcycpO1xuICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlOb2RlLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCArPSAnXFxuJyArIHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCA9IHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhaXIgPSBuZXcgUGFpcihrZXlOb2RlKTtcbiAgICAgICAgICAgIGlmIChjdHgub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zKVxuICAgICAgICAgICAgICAgIHBhaXIuc3JjVG9rZW4gPSBjb2xsSXRlbTtcbiAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb21tZW50RW5kICYmIGNvbW1lbnRFbmQgPCBvZmZzZXQpXG4gICAgICAgIG9uRXJyb3IoY29tbWVudEVuZCwgJ0lNUE9TU0lCTEUnLCAnTWFwIGNvbW1lbnQgd2l0aCB0cmFpbGluZyBjb250ZW50Jyk7XG4gICAgbWFwLnJhbmdlID0gW2JtLm9mZnNldCwgb2Zmc2V0LCBjb21tZW50RW5kID8/IG9mZnNldF07XG4gICAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IHsgcmVzb2x2ZUJsb2NrTWFwIH07XG4iLCAiaW1wb3J0IHsgWUFNTFNlcSB9IGZyb20gJy4uL25vZGVzL1lBTUxTZXEuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcbmltcG9ydCB7IGZsb3dJbmRlbnRDaGVjayB9IGZyb20gJy4vdXRpbC1mbG93LWluZGVudC1jaGVjay5qcyc7XG5cbmZ1bmN0aW9uIHJlc29sdmVCbG9ja1NlcSh7IGNvbXBvc2VOb2RlLCBjb21wb3NlRW1wdHlOb2RlIH0sIGN0eCwgYnMsIG9uRXJyb3IsIHRhZykge1xuICAgIGNvbnN0IE5vZGVDbGFzcyA9IHRhZz8ubm9kZUNsYXNzID8/IFlBTUxTZXE7XG4gICAgY29uc3Qgc2VxID0gbmV3IE5vZGVDbGFzcyhjdHguc2NoZW1hKTtcbiAgICBpZiAoY3R4LmF0Um9vdClcbiAgICAgICAgY3R4LmF0Um9vdCA9IGZhbHNlO1xuICAgIGlmIChjdHguYXRLZXkpXG4gICAgICAgIGN0eC5hdEtleSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQgPSBicy5vZmZzZXQ7XG4gICAgbGV0IGNvbW1lbnRFbmQgPSBudWxsO1xuICAgIGZvciAoY29uc3QgeyBzdGFydCwgdmFsdWUgfSBvZiBicy5pdGVtcykge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHJlc29sdmVQcm9wcyhzdGFydCwge1xuICAgICAgICAgICAgaW5kaWNhdG9yOiAnc2VxLWl0ZW0taW5kJyxcbiAgICAgICAgICAgIG5leHQ6IHZhbHVlLFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgIHBhcmVudEluZGVudDogYnMuaW5kZW50LFxuICAgICAgICAgICAgc3RhcnRPbk5ld2xpbmU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcHJvcHMuZm91bmQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5hbmNob3IgfHwgcHJvcHMudGFnIHx8IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnR5cGUgPT09ICdibG9jay1zZXEnKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmVuZCwgJ0JBRF9JTkRFTlQnLCAnQWxsIHNlcXVlbmNlIGl0ZW1zIG11c3Qgc3RhcnQgYXQgdGhlIHNhbWUgY29sdW1uJyk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ01JU1NJTkdfQ0hBUicsICdTZXF1ZW5jZSBpdGVtIHdpdGhvdXQgLSBpbmRpY2F0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRFbmQgPSBwcm9wcy5lbmQ7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIHNlcS5jb21tZW50ID0gcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlID0gdmFsdWVcbiAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgcHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICA6IGNvbXBvc2VFbXB0eU5vZGUoY3R4LCBwcm9wcy5lbmQsIHN0YXJ0LCBudWxsLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgIGlmIChjdHguc2NoZW1hLmNvbXBhdClcbiAgICAgICAgICAgIGZsb3dJbmRlbnRDaGVjayhicy5pbmRlbnQsIHZhbHVlLCBvbkVycm9yKTtcbiAgICAgICAgb2Zmc2V0ID0gbm9kZS5yYW5nZVsyXTtcbiAgICAgICAgc2VxLml0ZW1zLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIHNlcS5yYW5nZSA9IFticy5vZmZzZXQsIG9mZnNldCwgY29tbWVudEVuZCA/PyBvZmZzZXRdO1xuICAgIHJldHVybiBzZXE7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVCbG9ja1NlcSB9O1xuIiwgImZ1bmN0aW9uIHJlc29sdmVFbmQoZW5kLCBvZmZzZXQsIHJlcVNwYWNlLCBvbkVycm9yKSB7XG4gICAgbGV0IGNvbW1lbnQgPSAnJztcbiAgICBpZiAoZW5kKSB7XG4gICAgICAgIGxldCBoYXNTcGFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgc2VwID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgdHlwZSB9ID0gdG9rZW47XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcVNwYWNlICYmICFoYXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdNSVNTSU5HX0NIQVInLCAnQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVycycpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYiA9IHNvdXJjZS5zdWJzdHJpbmcoMSkgfHwgJyAnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY2I7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gc2VwICsgY2I7XG4gICAgICAgICAgICAgICAgICAgIHNlcCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwICs9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3BhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICR7dHlwZX0gYXQgbm9kZSBlbmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGNvbW1lbnQsIG9mZnNldCB9O1xufVxuXG5leHBvcnQgeyByZXNvbHZlRW5kIH07XG4iLCAiaW1wb3J0IHsgaXNQYWlyIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciB9IGZyb20gJy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCB9IGZyb20gJy4uL25vZGVzL1lBTUxNYXAuanMnO1xuaW1wb3J0IHsgWUFNTFNlcSB9IGZyb20gJy4uL25vZGVzL1lBTUxTZXEuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZCB9IGZyb20gJy4vcmVzb2x2ZS1lbmQuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcbmltcG9ydCB7IGNvbnRhaW5zTmV3bGluZSB9IGZyb20gJy4vdXRpbC1jb250YWlucy1uZXdsaW5lLmpzJztcbmltcG9ydCB7IG1hcEluY2x1ZGVzIH0gZnJvbSAnLi91dGlsLW1hcC1pbmNsdWRlcy5qcyc7XG5cbmNvbnN0IGJsb2NrTXNnID0gJ0Jsb2NrIGNvbGxlY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4gZmxvdyBjb2xsZWN0aW9ucyc7XG5jb25zdCBpc0Jsb2NrID0gKHRva2VuKSA9PiB0b2tlbiAmJiAodG9rZW4udHlwZSA9PT0gJ2Jsb2NrLW1hcCcgfHwgdG9rZW4udHlwZSA9PT0gJ2Jsb2NrLXNlcScpO1xuZnVuY3Rpb24gcmVzb2x2ZUZsb3dDb2xsZWN0aW9uKHsgY29tcG9zZU5vZGUsIGNvbXBvc2VFbXB0eU5vZGUgfSwgY3R4LCBmYywgb25FcnJvciwgdGFnKSB7XG4gICAgY29uc3QgaXNNYXAgPSBmYy5zdGFydC5zb3VyY2UgPT09ICd7JztcbiAgICBjb25zdCBmY05hbWUgPSBpc01hcCA/ICdmbG93IG1hcCcgOiAnZmxvdyBzZXF1ZW5jZSc7XG4gICAgY29uc3QgTm9kZUNsYXNzID0gKHRhZz8ubm9kZUNsYXNzID8/IChpc01hcCA/IFlBTUxNYXAgOiBZQU1MU2VxKSk7XG4gICAgY29uc3QgY29sbCA9IG5ldyBOb2RlQ2xhc3MoY3R4LnNjaGVtYSk7XG4gICAgY29sbC5mbG93ID0gdHJ1ZTtcbiAgICBjb25zdCBhdFJvb3QgPSBjdHguYXRSb290O1xuICAgIGlmIChhdFJvb3QpXG4gICAgICAgIGN0eC5hdFJvb3QgPSBmYWxzZTtcbiAgICBpZiAoY3R4LmF0S2V5KVxuICAgICAgICBjdHguYXRLZXkgPSBmYWxzZTtcbiAgICBsZXQgb2Zmc2V0ID0gZmMub2Zmc2V0ICsgZmMuc3RhcnQuc291cmNlLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZjLml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGNvbGxJdGVtID0gZmMuaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGtleSwgc2VwLCB2YWx1ZSB9ID0gY29sbEl0ZW07XG4gICAgICAgIGNvbnN0IHByb3BzID0gcmVzb2x2ZVByb3BzKHN0YXJ0LCB7XG4gICAgICAgICAgICBmbG93OiBmY05hbWUsXG4gICAgICAgICAgICBpbmRpY2F0b3I6ICdleHBsaWNpdC1rZXktaW5kJyxcbiAgICAgICAgICAgIG5leHQ6IGtleSA/PyBzZXA/LlswXSxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIG9uRXJyb3IsXG4gICAgICAgICAgICBwYXJlbnRJbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgIHN0YXJ0T25OZXdsaW5lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFwcm9wcy5mb3VuZCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wcy5hbmNob3IgJiYgIXByb3BzLnRhZyAmJiAhc2VwICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwICYmIHByb3BzLmNvbW1hKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmNvbW1hLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmY05hbWV9YCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGZjLml0ZW1zLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IocHJvcHMuc3RhcnQsICdVTkVYUEVDVEVEX1RPS0VOJywgYFVuZXhwZWN0ZWQgZW1wdHkgaXRlbSBpbiAke2ZjTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbC5jb21tZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5jb21tZW50ICs9ICdcXG4nICsgcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5jb21tZW50ID0gcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJvcHMuZW5kO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc01hcCAmJiBjdHgub3B0aW9ucy5zdHJpY3QgJiYgY29udGFpbnNOZXdsaW5lKGtleSkpXG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXksIC8vIGNoZWNrZWQgYnkgY29udGFpbnNOZXdsaW5lKClcbiAgICAgICAgICAgICAgICAnTVVMVElMSU5FX0lNUExJQ0lUX0tFWScsICdJbXBsaWNpdCBrZXlzIG9mIGZsb3cgc2VxdWVuY2UgcGFpcnMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb21tYSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmNvbW1hLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmY05hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXByb3BzLmNvbW1hKVxuICAgICAgICAgICAgICAgIG9uRXJyb3IocHJvcHMuc3RhcnQsICdNSVNTSU5HX0NIQVInLCBgTWlzc2luZyAsIGJldHdlZW4gJHtmY05hbWV9IGl0ZW1zYCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBwcmV2SXRlbUNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBsb29wOiBmb3IgKGNvbnN0IHN0IG9mIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29tbWEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW1Db21tZW50ID0gc3Quc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbUNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBjb2xsLml0ZW1zW2NvbGwuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1BhaXIocHJldikpXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldi52YWx1ZSA/PyBwcmV2LmtleTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuY29tbWVudCArPSAnXFxuJyArIHByZXZJdGVtQ29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jb21tZW50ID0gcHJldkl0ZW1Db21tZW50O1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5jb21tZW50ID0gcHJvcHMuY29tbWVudC5zdWJzdHJpbmcocHJldkl0ZW1Db21tZW50Lmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTWFwICYmICFzZXAgJiYgIXByb3BzLmZvdW5kKSB7XG4gICAgICAgICAgICAvLyBpdGVtIGlzIGEgdmFsdWUgaW4gYSBzZXFcbiAgICAgICAgICAgIC8vIFx1MjE5MiBrZXkgJiBzZXAgYXJlIGVtcHR5LCBzdGFydCBkb2VzIG5vdCBpbmNsdWRlID8gb3IgOlxuICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwgdmFsdWUsIHByb3BzLCBvbkVycm9yKVxuICAgICAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIHByb3BzLmVuZCwgc2VwLCBudWxsLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBjb2xsLml0ZW1zLnB1c2godmFsdWVOb2RlKTtcbiAgICAgICAgICAgIG9mZnNldCA9IHZhbHVlTm9kZS5yYW5nZVsyXTtcbiAgICAgICAgICAgIGlmIChpc0Jsb2NrKHZhbHVlKSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKHZhbHVlTm9kZS5yYW5nZSwgJ0JMT0NLX0lOX0ZMT1cnLCBibG9ja01zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVtIGlzIGEga2V5K3ZhbHVlIHBhaXJcbiAgICAgICAgICAgIC8vIGtleSB2YWx1ZVxuICAgICAgICAgICAgY3R4LmF0S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGtleVN0YXJ0ID0gcHJvcHMuZW5kO1xuICAgICAgICAgICAgY29uc3Qga2V5Tm9kZSA9IGtleVxuICAgICAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCBrZXksIHByb3BzLCBvbkVycm9yKVxuICAgICAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIGtleVN0YXJ0LCBzdGFydCwgbnVsbCwgcHJvcHMsIG9uRXJyb3IpO1xuICAgICAgICAgICAgaWYgKGlzQmxvY2soa2V5KSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKGtleU5vZGUucmFuZ2UsICdCTE9DS19JTl9GTE9XJywgYmxvY2tNc2cpO1xuICAgICAgICAgICAgY3R4LmF0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB2YWx1ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVByb3BzID0gcmVzb2x2ZVByb3BzKHNlcCA/PyBbXSwge1xuICAgICAgICAgICAgICAgIGZsb3c6IGZjTmFtZSxcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6ICdtYXAtdmFsdWUtaW5kJyxcbiAgICAgICAgICAgICAgICBuZXh0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGtleU5vZGUucmFuZ2VbMl0sXG4gICAgICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgICAgICBwYXJlbnRJbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgICAgICBzdGFydE9uTmV3bGluZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMuZm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTWFwICYmICFwcm9wcy5mb3VuZCAmJiBjdHgub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2Ygc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ID09PSB2YWx1ZVByb3BzLmZvdW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3Ioc3QsICdNVUxUSUxJTkVfSU1QTElDSVRfS0VZJywgJ0ltcGxpY2l0IGtleXMgb2YgZmxvdyBzZXF1ZW5jZSBwYWlycyBuZWVkIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuc3RhcnQgPCB2YWx1ZVByb3BzLmZvdW5kLm9mZnNldCAtIDEwMjQpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHZhbHVlUHJvcHMuZm91bmQsICdLRVlfT1ZFUl8xMDI0X0NIQVJTJywgJ1RoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgZmxvdyBzZXF1ZW5jZSBrZXknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICgnc291cmNlJyBpbiB2YWx1ZSAmJiB2YWx1ZS5zb3VyY2UgJiYgdmFsdWUuc291cmNlWzBdID09PSAnOicpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodmFsdWUsICdNSVNTSU5HX0NIQVInLCBgTWlzc2luZyBzcGFjZSBhZnRlciA6IGluICR7ZmNOYW1lfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih2YWx1ZVByb3BzLnN0YXJ0LCAnTUlTU0lOR19DSEFSJywgYE1pc3NpbmcgLCBvciA6IGJldHdlZW4gJHtmY05hbWV9IGl0ZW1zYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB2YWx1ZSB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwgdmFsdWUsIHZhbHVlUHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVByb3BzLmZvdW5kXG4gICAgICAgICAgICAgICAgICAgID8gY29tcG9zZUVtcHR5Tm9kZShjdHgsIHZhbHVlUHJvcHMuZW5kLCBzZXAsIG51bGwsIHZhbHVlUHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh2YWx1ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9jayh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodmFsdWVOb2RlLnJhbmdlLCAnQkxPQ0tfSU5fRkxPVycsIGJsb2NrTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlUHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlOb2RlLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCArPSAnXFxuJyArIHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCA9IHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhaXIgPSBuZXcgUGFpcihrZXlOb2RlLCB2YWx1ZU5vZGUpO1xuICAgICAgICAgICAgaWYgKGN0eC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMpXG4gICAgICAgICAgICAgICAgcGFpci5zcmNUb2tlbiA9IGNvbGxJdGVtO1xuICAgICAgICAgICAgaWYgKGlzTWFwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwID0gY29sbDtcbiAgICAgICAgICAgICAgICBpZiAobWFwSW5jbHVkZXMoY3R4LCBtYXAuaXRlbXMsIGtleU5vZGUpKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGtleVN0YXJ0LCAnRFVQTElDQVRFX0tFWScsICdNYXAga2V5cyBtdXN0IGJlIHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IFlBTUxNYXAoY3R4LnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgbWFwLmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gKHZhbHVlTm9kZSA/PyBrZXlOb2RlKS5yYW5nZTtcbiAgICAgICAgICAgICAgICBtYXAucmFuZ2UgPSBba2V5Tm9kZS5yYW5nZVswXSwgZW5kUmFuZ2VbMV0sIGVuZFJhbmdlWzJdXTtcbiAgICAgICAgICAgICAgICBjb2xsLml0ZW1zLnB1c2gobWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCA9IHZhbHVlTm9kZSA/IHZhbHVlTm9kZS5yYW5nZVsyXSA6IHZhbHVlUHJvcHMuZW5kO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkRW5kID0gaXNNYXAgPyAnfScgOiAnXSc7XG4gICAgY29uc3QgW2NlLCAuLi5lZV0gPSBmYy5lbmQ7XG4gICAgbGV0IGNlUG9zID0gb2Zmc2V0O1xuICAgIGlmIChjZSAmJiBjZS5zb3VyY2UgPT09IGV4cGVjdGVkRW5kKVxuICAgICAgICBjZVBvcyA9IGNlLm9mZnNldCArIGNlLnNvdXJjZS5sZW5ndGg7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmY05hbWVbMF0udG9VcHBlckNhc2UoKSArIGZjTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIGNvbnN0IG1zZyA9IGF0Um9vdFxuICAgICAgICAgICAgPyBgJHtuYW1lfSBtdXN0IGVuZCB3aXRoIGEgJHtleHBlY3RlZEVuZH1gXG4gICAgICAgICAgICA6IGAke25hbWV9IGluIGJsb2NrIGNvbGxlY3Rpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgaW5kZW50ZWQgYW5kIGVuZCB3aXRoIGEgJHtleHBlY3RlZEVuZH1gO1xuICAgICAgICBvbkVycm9yKG9mZnNldCwgYXRSb290ID8gJ01JU1NJTkdfQ0hBUicgOiAnQkFEX0lOREVOVCcsIG1zZyk7XG4gICAgICAgIGlmIChjZSAmJiBjZS5zb3VyY2UubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgZWUudW5zaGlmdChjZSk7XG4gICAgfVxuICAgIGlmIChlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHJlc29sdmVFbmQoZWUsIGNlUG9zLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgICAgICBpZiAoZW5kLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjb2xsLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgY29sbC5jb21tZW50ICs9ICdcXG4nICsgZW5kLmNvbW1lbnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29sbC5jb21tZW50ID0gZW5kLmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29sbC5yYW5nZSA9IFtmYy5vZmZzZXQsIGNlUG9zLCBlbmQub2Zmc2V0XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbGwucmFuZ2UgPSBbZmMub2Zmc2V0LCBjZVBvcywgY2VQb3NdO1xuICAgIH1cbiAgICByZXR1cm4gY29sbDtcbn1cblxuZXhwb3J0IHsgcmVzb2x2ZUZsb3dDb2xsZWN0aW9uIH07XG4iLCAiaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IFlBTUxNYXAgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MTWFwLmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MU2VxLmpzJztcbmltcG9ydCB7IHJlc29sdmVCbG9ja01hcCB9IGZyb20gJy4vcmVzb2x2ZS1ibG9jay1tYXAuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUJsb2NrU2VxIH0gZnJvbSAnLi9yZXNvbHZlLWJsb2NrLXNlcS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRmxvd0NvbGxlY3Rpb24gfSBmcm9tICcuL3Jlc29sdmUtZmxvdy1jb2xsZWN0aW9uLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZUNvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZ05hbWUsIHRhZykge1xuICAgIGNvbnN0IGNvbGwgPSB0b2tlbi50eXBlID09PSAnYmxvY2stbWFwJ1xuICAgICAgICA/IHJlc29sdmVCbG9ja01hcChDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnKVxuICAgICAgICA6IHRva2VuLnR5cGUgPT09ICdibG9jay1zZXEnXG4gICAgICAgICAgICA/IHJlc29sdmVCbG9ja1NlcShDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnKVxuICAgICAgICAgICAgOiByZXNvbHZlRmxvd0NvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZyk7XG4gICAgY29uc3QgQ29sbCA9IGNvbGwuY29uc3RydWN0b3I7XG4gICAgLy8gSWYgd2UgZ290IGEgdGFnTmFtZSBtYXRjaGluZyB0aGUgY2xhc3MsIG9yIHRoZSB0YWcgbmFtZSBpcyAnIScsXG4gICAgLy8gdGhlbiB1c2UgdGhlIHRhZ05hbWUgZnJvbSB0aGUgbm9kZSBjbGFzcyB1c2VkIHRvIGNyZWF0ZSBpdC5cbiAgICBpZiAodGFnTmFtZSA9PT0gJyEnIHx8IHRhZ05hbWUgPT09IENvbGwudGFnTmFtZSkge1xuICAgICAgICBjb2xsLnRhZyA9IENvbGwudGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbGw7XG4gICAgfVxuICAgIGlmICh0YWdOYW1lKVxuICAgICAgICBjb2xsLnRhZyA9IHRhZ05hbWU7XG4gICAgcmV0dXJuIGNvbGw7XG59XG5mdW5jdGlvbiBjb21wb3NlQ29sbGVjdGlvbihDTiwgY3R4LCB0b2tlbiwgcHJvcHMsIG9uRXJyb3IpIHtcbiAgICBjb25zdCB0YWdUb2tlbiA9IHByb3BzLnRhZztcbiAgICBjb25zdCB0YWdOYW1lID0gIXRhZ1Rva2VuXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGN0eC5kaXJlY3RpdmVzLnRhZ05hbWUodGFnVG9rZW4uc291cmNlLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZykpO1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnYmxvY2stc2VxJykge1xuICAgICAgICBjb25zdCB7IGFuY2hvciwgbmV3bGluZUFmdGVyUHJvcDogbmwgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBsYXN0UHJvcCA9IGFuY2hvciAmJiB0YWdUb2tlblxuICAgICAgICAgICAgPyBhbmNob3Iub2Zmc2V0ID4gdGFnVG9rZW4ub2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBhbmNob3JcbiAgICAgICAgICAgICAgICA6IHRhZ1Rva2VuXG4gICAgICAgICAgICA6IChhbmNob3IgPz8gdGFnVG9rZW4pO1xuICAgICAgICBpZiAobGFzdFByb3AgJiYgKCFubCB8fCBubC5vZmZzZXQgPCBsYXN0UHJvcC5vZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ01pc3NpbmcgbmV3bGluZSBhZnRlciBibG9jayBzZXF1ZW5jZSBwcm9wcyc7XG4gICAgICAgICAgICBvbkVycm9yKGxhc3RQcm9wLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXhwVHlwZSA9IHRva2VuLnR5cGUgPT09ICdibG9jay1tYXAnXG4gICAgICAgID8gJ21hcCdcbiAgICAgICAgOiB0b2tlbi50eXBlID09PSAnYmxvY2stc2VxJ1xuICAgICAgICAgICAgPyAnc2VxJ1xuICAgICAgICAgICAgOiB0b2tlbi5zdGFydC5zb3VyY2UgPT09ICd7J1xuICAgICAgICAgICAgICAgID8gJ21hcCdcbiAgICAgICAgICAgICAgICA6ICdzZXEnO1xuICAgIC8vIHNob3J0Y3V0OiBjaGVjayBpZiBpdCdzIGEgZ2VuZXJpYyBZQU1MTWFwIG9yIFlBTUxTZXFcbiAgICAvLyBiZWZvcmUganVtcGluZyBpbnRvIHRoZSBjdXN0b20gdGFnIGxvZ2ljLlxuICAgIGlmICghdGFnVG9rZW4gfHxcbiAgICAgICAgIXRhZ05hbWUgfHxcbiAgICAgICAgdGFnTmFtZSA9PT0gJyEnIHx8XG4gICAgICAgICh0YWdOYW1lID09PSBZQU1MTWFwLnRhZ05hbWUgJiYgZXhwVHlwZSA9PT0gJ21hcCcpIHx8XG4gICAgICAgICh0YWdOYW1lID09PSBZQU1MU2VxLnRhZ05hbWUgJiYgZXhwVHlwZSA9PT0gJ3NlcScpKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlQ29sbGVjdGlvbihDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnTmFtZSk7XG4gICAgfVxuICAgIGxldCB0YWcgPSBjdHguc2NoZW1hLnRhZ3MuZmluZCh0ID0+IHQudGFnID09PSB0YWdOYW1lICYmIHQuY29sbGVjdGlvbiA9PT0gZXhwVHlwZSk7XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgICAgY29uc3Qga3QgPSBjdHguc2NoZW1hLmtub3duVGFnc1t0YWdOYW1lXTtcbiAgICAgICAgaWYgKGt0ICYmIGt0LmNvbGxlY3Rpb24gPT09IGV4cFR5cGUpIHtcbiAgICAgICAgICAgIGN0eC5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGt0LCB7IGRlZmF1bHQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgIHRhZyA9IGt0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGt0Py5jb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcih0YWdUb2tlbiwgJ0JBRF9DT0xMRUNUSU9OX1RZUEUnLCBgJHtrdC50YWd9IHVzZWQgZm9yICR7ZXhwVHlwZX0gY29sbGVjdGlvbiwgYnV0IGV4cGVjdHMgJHtrdC5jb2xsZWN0aW9ufWAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIGBVbnJlc29sdmVkIHRhZzogJHt0YWdOYW1lfWAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVDb2xsZWN0aW9uKENOLCBjdHgsIHRva2VuLCBvbkVycm9yLCB0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2xsID0gcmVzb2x2ZUNvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZ05hbWUsIHRhZyk7XG4gICAgY29uc3QgcmVzID0gdGFnLnJlc29sdmU/Lihjb2xsLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZyksIGN0eC5vcHRpb25zKSA/PyBjb2xsO1xuICAgIGNvbnN0IG5vZGUgPSBpc05vZGUocmVzKVxuICAgICAgICA/IHJlc1xuICAgICAgICA6IG5ldyBTY2FsYXIocmVzKTtcbiAgICBub2RlLnJhbmdlID0gY29sbC5yYW5nZTtcbiAgICBub2RlLnRhZyA9IHRhZ05hbWU7XG4gICAgaWYgKHRhZz8uZm9ybWF0KVxuICAgICAgICBub2RlLmZvcm1hdCA9IHRhZy5mb3JtYXQ7XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCB7IGNvbXBvc2VDb2xsZWN0aW9uIH07XG4iLCAiaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrU2NhbGFyKGN0eCwgc2NhbGFyLCBvbkVycm9yKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzY2FsYXIub2Zmc2V0O1xuICAgIGNvbnN0IGhlYWRlciA9IHBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoc2NhbGFyLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgIGlmICghaGVhZGVyKVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogJycsIHR5cGU6IG51bGwsIGNvbW1lbnQ6ICcnLCByYW5nZTogW3N0YXJ0LCBzdGFydCwgc3RhcnRdIH07XG4gICAgY29uc3QgdHlwZSA9IGhlYWRlci5tb2RlID09PSAnPicgPyBTY2FsYXIuQkxPQ0tfRk9MREVEIDogU2NhbGFyLkJMT0NLX0xJVEVSQUw7XG4gICAgY29uc3QgbGluZXMgPSBzY2FsYXIuc291cmNlID8gc3BsaXRMaW5lcyhzY2FsYXIuc291cmNlKSA6IFtdO1xuICAgIC8vIGRldGVybWluZSB0aGUgZW5kIG9mIGNvbnRlbnQgJiBzdGFydCBvZiBjaG9tcGluZ1xuICAgIGxldCBjaG9tcFN0YXJ0ID0gbGluZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSBsaW5lcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gbGluZXNbaV1bMV07XG4gICAgICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnXFxyJylcbiAgICAgICAgICAgIGNob21wU3RhcnQgPSBpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gc2hvcnRjdXQgZm9yIGVtcHR5IGNvbnRlbnRzXG4gICAgaWYgKGNob21wU3RhcnQgPT09IDApIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuY2hvbXAgPT09ICcrJyAmJiBsaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICdcXG4nLnJlcGVhdChNYXRoLm1heCgxLCBsaW5lcy5sZW5ndGggLSAxKSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIGxldCBlbmQgPSBzdGFydCArIGhlYWRlci5sZW5ndGg7XG4gICAgICAgIGlmIChzY2FsYXIuc291cmNlKVxuICAgICAgICAgICAgZW5kICs9IHNjYWxhci5zb3VyY2UubGVuZ3RoO1xuICAgICAgICByZXR1cm4geyB2YWx1ZSwgdHlwZSwgY29tbWVudDogaGVhZGVyLmNvbW1lbnQsIHJhbmdlOiBbc3RhcnQsIGVuZCwgZW5kXSB9O1xuICAgIH1cbiAgICAvLyBmaW5kIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCB0byB0cmltIGZyb20gc3RhcnRcbiAgICBsZXQgdHJpbUluZGVudCA9IHNjYWxhci5pbmRlbnQgKyBoZWFkZXIuaW5kZW50O1xuICAgIGxldCBvZmZzZXQgPSBzY2FsYXIub2Zmc2V0ICsgaGVhZGVyLmxlbmd0aDtcbiAgICBsZXQgY29udGVudFN0YXJ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNob21wU3RhcnQ7ICsraSkge1xuICAgICAgICBjb25zdCBbaW5kZW50LCBjb250ZW50XSA9IGxpbmVzW2ldO1xuICAgICAgICBpZiAoY29udGVudCA9PT0gJycgfHwgY29udGVudCA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXIuaW5kZW50ID09PSAwICYmIGluZGVudC5sZW5ndGggPiB0cmltSW5kZW50KVxuICAgICAgICAgICAgICAgIHRyaW1JbmRlbnQgPSBpbmRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGluZGVudC5sZW5ndGggPCB0cmltSW5kZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdCbG9jayBzY2FsYXJzIHdpdGggbW9yZS1pbmRlbnRlZCBsZWFkaW5nIGVtcHR5IGxpbmVzIG11c3QgdXNlIGFuIGV4cGxpY2l0IGluZGVudGF0aW9uIGluZGljYXRvcic7XG4gICAgICAgICAgICAgICAgb25FcnJvcihvZmZzZXQgKyBpbmRlbnQubGVuZ3RoLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGVhZGVyLmluZGVudCA9PT0gMClcbiAgICAgICAgICAgICAgICB0cmltSW5kZW50ID0gaW5kZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRlbnRTdGFydCA9IGk7XG4gICAgICAgICAgICBpZiAodHJpbUluZGVudCA9PT0gMCAmJiAhY3R4LmF0Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQmxvY2sgc2NhbGFyIHZhbHVlcyBpbiBjb2xsZWN0aW9ucyBtdXN0IGJlIGluZGVudGVkJztcbiAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldCArPSBpbmRlbnQubGVuZ3RoICsgY29udGVudC5sZW5ndGggKyAxO1xuICAgIH1cbiAgICAvLyBpbmNsdWRlIHRyYWlsaW5nIG1vcmUtaW5kZW50ZWQgZW1wdHkgbGluZXMgaW4gY29udGVudFxuICAgIGZvciAobGV0IGkgPSBsaW5lcy5sZW5ndGggLSAxOyBpID49IGNob21wU3RhcnQ7IC0taSkge1xuICAgICAgICBpZiAobGluZXNbaV1bMF0ubGVuZ3RoID4gdHJpbUluZGVudClcbiAgICAgICAgICAgIGNob21wU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgbGV0IHNlcCA9ICcnO1xuICAgIGxldCBwcmV2TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgLy8gbGVhZGluZyB3aGl0ZXNwYWNlIGlzIGtlcHQgaW50YWN0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50U3RhcnQ7ICsraSlcbiAgICAgICAgdmFsdWUgKz0gbGluZXNbaV1bMF0uc2xpY2UodHJpbUluZGVudCkgKyAnXFxuJztcbiAgICBmb3IgKGxldCBpID0gY29udGVudFN0YXJ0OyBpIDwgY2hvbXBTdGFydDsgKytpKSB7XG4gICAgICAgIGxldCBbaW5kZW50LCBjb250ZW50XSA9IGxpbmVzW2ldO1xuICAgICAgICBvZmZzZXQgKz0gaW5kZW50Lmxlbmd0aCArIGNvbnRlbnQubGVuZ3RoICsgMTtcbiAgICAgICAgY29uc3QgY3JsZiA9IGNvbnRlbnRbY29udGVudC5sZW5ndGggLSAxXSA9PT0gJ1xccic7XG4gICAgICAgIGlmIChjcmxmKVxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgYWxyZWFkeSBjYXVnaHQgaW4gbGV4ZXIgKi9cbiAgICAgICAgaWYgKGNvbnRlbnQgJiYgaW5kZW50Lmxlbmd0aCA8IHRyaW1JbmRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGhlYWRlci5pbmRlbnRcbiAgICAgICAgICAgICAgICA/ICdleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgOiAnZmlyc3QgbGluZSc7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEJsb2NrIHNjYWxhciBsaW5lcyBtdXN0IG5vdCBiZSBsZXNzIGluZGVudGVkIHRoYW4gdGhlaXIgJHtzcmN9YDtcbiAgICAgICAgICAgIG9uRXJyb3Iob2Zmc2V0IC0gY29udGVudC5sZW5ndGggLSAoY3JsZiA/IDIgOiAxKSwgJ0JBRF9JTkRFTlQnLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTCkge1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgaW5kZW50LnNsaWNlKHRyaW1JbmRlbnQpICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluZGVudC5sZW5ndGggPiB0cmltSW5kZW50IHx8IGNvbnRlbnRbMF0gPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAvLyBtb3JlLWluZGVudGVkIGNvbnRlbnQgd2l0aGluIGEgZm9sZGVkIGJsb2NrXG4gICAgICAgICAgICBpZiAoc2VwID09PSAnICcpXG4gICAgICAgICAgICAgICAgc2VwID0gJ1xcbic7XG4gICAgICAgICAgICBlbHNlIGlmICghcHJldk1vcmVJbmRlbnRlZCAmJiBzZXAgPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG5cXG4nO1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgaW5kZW50LnNsaWNlKHRyaW1JbmRlbnQpICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGVudCA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGxpbmVcbiAgICAgICAgICAgIGlmIChzZXAgPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICdcXG4nO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICcgJztcbiAgICAgICAgICAgIHByZXZNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKGhlYWRlci5jaG9tcCkge1xuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjaG9tcFN0YXJ0OyBpIDwgbGluZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ1xcbicgKyBsaW5lc1tpXVswXS5zbGljZSh0cmltSW5kZW50KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ1xcbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbHVlICs9ICdcXG4nO1xuICAgIH1cbiAgICBjb25zdCBlbmQgPSBzdGFydCArIGhlYWRlci5sZW5ndGggKyBzY2FsYXIuc291cmNlLmxlbmd0aDtcbiAgICByZXR1cm4geyB2YWx1ZSwgdHlwZSwgY29tbWVudDogaGVhZGVyLmNvbW1lbnQsIHJhbmdlOiBbc3RhcnQsIGVuZCwgZW5kXSB9O1xufVxuZnVuY3Rpb24gcGFyc2VCbG9ja1NjYWxhckhlYWRlcih7IG9mZnNldCwgcHJvcHMgfSwgc3RyaWN0LCBvbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmIHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgaWYgKHByb3BzWzBdLnR5cGUgIT09ICdibG9jay1zY2FsYXItaGVhZGVyJykge1xuICAgICAgICBvbkVycm9yKHByb3BzWzBdLCAnSU1QT1NTSUJMRScsICdCbG9jayBzY2FsYXIgaGVhZGVyIG5vdCBmb3VuZCcpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IHByb3BzWzBdO1xuICAgIGNvbnN0IG1vZGUgPSBzb3VyY2VbMF07XG4gICAgbGV0IGluZGVudCA9IDA7XG4gICAgbGV0IGNob21wID0gJyc7XG4gICAgbGV0IGVycm9yID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2ggPSBzb3VyY2VbaV07XG4gICAgICAgIGlmICghY2hvbXAgJiYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykpXG4gICAgICAgICAgICBjaG9tcCA9IGNoO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBOdW1iZXIoY2gpO1xuICAgICAgICAgICAgaWYgKCFpbmRlbnQgJiYgbilcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBuO1xuICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IgPT09IC0xKVxuICAgICAgICAgICAgICAgIGVycm9yID0gb2Zmc2V0ICsgaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IgIT09IC0xKVxuICAgICAgICBvbkVycm9yKGVycm9yLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBCbG9jayBzY2FsYXIgaGVhZGVyIGluY2x1ZGVzIGV4dHJhIGNoYXJhY3RlcnM6ICR7c291cmNlfWApO1xuICAgIGxldCBoYXNTcGFjZSA9IGZhbHNlO1xuICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgbGV0IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwcm9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHByb3BzW2ldO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgbGVuZ3RoICs9IHRva2VuLnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmICFoYXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0NvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMnO1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aCArPSB0b2tlbi5zb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0b2tlbi5zb3VyY2Uuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdVTkVYUEVDVEVEX1RPS0VOJywgdG9rZW4ubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgbGVuZ3RoICs9IHRva2VuLnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5leHBlY3RlZCB0b2tlbiBpbiBibG9jayBzY2FsYXIgaGVhZGVyOiAke3Rva2VuLnR5cGV9YDtcbiAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRzID0gdG9rZW4uc291cmNlO1xuICAgICAgICAgICAgICAgIGlmICh0cyAmJiB0eXBlb2YgdHMgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gdHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGUsIGluZGVudCwgY2hvbXAsIGNvbW1lbnQsIGxlbmd0aCB9O1xufVxuLyoqIEByZXR1cm5zIEFycmF5IG9mIGxpbmVzIHNwbGl0IHVwIGFzIGBbaW5kZW50LCBjb250ZW50XWAgKi9cbmZ1bmN0aW9uIHNwbGl0TGluZXMoc291cmNlKSB7XG4gICAgY29uc3Qgc3BsaXQgPSBzb3VyY2Uuc3BsaXQoL1xcbiggKikvKTtcbiAgICBjb25zdCBmaXJzdCA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IG0gPSBmaXJzdC5tYXRjaCgvXiggKikvKTtcbiAgICBjb25zdCBsaW5lMCA9IG0/LlsxXVxuICAgICAgICA/IFttWzFdLCBmaXJzdC5zbGljZShtWzFdLmxlbmd0aCldXG4gICAgICAgIDogWycnLCBmaXJzdF07XG4gICAgY29uc3QgbGluZXMgPSBbbGluZTBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXQubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIGxpbmVzLnB1c2goW3NwbGl0W2ldLCBzcGxpdFtpICsgMV1dKTtcbiAgICByZXR1cm4gbGluZXM7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVCbG9ja1NjYWxhciB9O1xuIiwgImltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5cbmZ1bmN0aW9uIHJlc29sdmVGbG93U2NhbGFyKHNjYWxhciwgc3RyaWN0LCBvbkVycm9yKSB7XG4gICAgY29uc3QgeyBvZmZzZXQsIHR5cGUsIHNvdXJjZSwgZW5kIH0gPSBzY2FsYXI7XG4gICAgbGV0IF90eXBlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBjb25zdCBfb25FcnJvciA9IChyZWwsIGNvZGUsIG1zZykgPT4gb25FcnJvcihvZmZzZXQgKyByZWwsIGNvZGUsIG1zZyk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICBfdHlwZSA9IFNjYWxhci5QTEFJTjtcbiAgICAgICAgICAgIHZhbHVlID0gcGxhaW5WYWx1ZShzb3VyY2UsIF9vbkVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICBfdHlwZSA9IFNjYWxhci5RVU9URV9TSU5HTEU7XG4gICAgICAgICAgICB2YWx1ZSA9IHNpbmdsZVF1b3RlZFZhbHVlKHNvdXJjZSwgX29uRXJyb3IpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIF90eXBlID0gU2NhbGFyLlFVT1RFX0RPVUJMRTtcbiAgICAgICAgICAgIHZhbHVlID0gZG91YmxlUXVvdGVkVmFsdWUoc291cmNlLCBfb25FcnJvcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIG9uRXJyb3Ioc2NhbGFyLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBFeHBlY3RlZCBhIGZsb3cgc2NhbGFyIHZhbHVlLCBidXQgZm91bmQ6ICR7dHlwZX1gKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgICAgICAgICAgY29tbWVudDogJycsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtvZmZzZXQsIG9mZnNldCArIHNvdXJjZS5sZW5ndGgsIG9mZnNldCArIHNvdXJjZS5sZW5ndGhdXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZUVuZCA9IG9mZnNldCArIHNvdXJjZS5sZW5ndGg7XG4gICAgY29uc3QgcmUgPSByZXNvbHZlRW5kKGVuZCwgdmFsdWVFbmQsIHN0cmljdCwgb25FcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6IF90eXBlLFxuICAgICAgICBjb21tZW50OiByZS5jb21tZW50LFxuICAgICAgICByYW5nZTogW29mZnNldCwgdmFsdWVFbmQsIHJlLm9mZnNldF1cbiAgICB9O1xufVxuZnVuY3Rpb24gcGxhaW5WYWx1ZShzb3VyY2UsIG9uRXJyb3IpIHtcbiAgICBsZXQgYmFkQ2hhciA9ICcnO1xuICAgIHN3aXRjaCAoc291cmNlWzBdKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAgICBiYWRDaGFyID0gJ2EgdGFiIGNoYXJhY3Rlcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgICBiYWRDaGFyID0gJ2Zsb3cgaW5kaWNhdG9yIGNoYXJhY3RlciAsJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIGJhZENoYXIgPSAnZGlyZWN0aXZlIGluZGljYXRvciBjaGFyYWN0ZXIgJSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgIGNhc2UgJz4nOiB7XG4gICAgICAgICAgICBiYWRDaGFyID0gYGJsb2NrIHNjYWxhciBpbmRpY2F0b3IgJHtzb3VyY2VbMF19YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICdgJzoge1xuICAgICAgICAgICAgYmFkQ2hhciA9IGByZXNlcnZlZCBjaGFyYWN0ZXIgJHtzb3VyY2VbMF19YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChiYWRDaGFyKVxuICAgICAgICBvbkVycm9yKDAsICdCQURfU0NBTEFSX1NUQVJUJywgYFBsYWluIHZhbHVlIGNhbm5vdCBzdGFydCB3aXRoICR7YmFkQ2hhcn1gKTtcbiAgICByZXR1cm4gZm9sZExpbmVzKHNvdXJjZSk7XG59XG5mdW5jdGlvbiBzaW5nbGVRdW90ZWRWYWx1ZShzb3VyY2UsIG9uRXJyb3IpIHtcbiAgICBpZiAoc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSAhPT0gXCInXCIgfHwgc291cmNlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgb25FcnJvcihzb3VyY2UubGVuZ3RoLCAnTUlTU0lOR19DSEFSJywgXCJNaXNzaW5nIGNsb3NpbmcgJ3F1b3RlXCIpO1xuICAgIHJldHVybiBmb2xkTGluZXMoc291cmNlLnNsaWNlKDEsIC0xKSkucmVwbGFjZSgvJycvZywgXCInXCIpO1xufVxuZnVuY3Rpb24gZm9sZExpbmVzKHNvdXJjZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBuZWdhdGl2ZSBsb29rYmVoaW5kIGhlcmUgYW5kIGluIHRoZSBgcmVgIFJlZ0V4cCBpcyB0b1xuICAgICAqIHByZXZlbnQgY2F1c2luZyBhIHBvbHlub21pYWwgc2VhcmNoIHRpbWUgaW4gY2VydGFpbiBjYXNlcy5cbiAgICAgKlxuICAgICAqIFRoZSB0cnktY2F0Y2ggaXMgZm9yIFNhZmFyaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoaXMgeWV0OlxuICAgICAqIGh0dHBzOi8vY2FuaXVzZS5jb20vanMtcmVnZXhwLWxvb2tiZWhpbmRcbiAgICAgKi9cbiAgICBsZXQgZmlyc3QsIGxpbmU7XG4gICAgdHJ5IHtcbiAgICAgICAgZmlyc3QgPSBuZXcgUmVnRXhwKCcoLio/KSg/PCFbIFxcdF0pWyBcXHRdKlxccj9cXG4nLCAnc3knKTtcbiAgICAgICAgbGluZSA9IG5ldyBSZWdFeHAoJ1sgXFx0XSooLio/KSg/Oig/PCFbIFxcdF0pWyBcXHRdKik/XFxyP1xcbicsICdzeScpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGZpcnN0ID0gLyguKj8pWyBcXHRdKlxccj9cXG4vc3k7XG4gICAgICAgIGxpbmUgPSAvWyBcXHRdKiguKj8pWyBcXHRdKlxccj9cXG4vc3k7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IGZpcnN0LmV4ZWMoc291cmNlKTtcbiAgICBpZiAoIW1hdGNoKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIGxldCByZXMgPSBtYXRjaFsxXTtcbiAgICBsZXQgc2VwID0gJyAnO1xuICAgIGxldCBwb3MgPSBmaXJzdC5sYXN0SW5kZXg7XG4gICAgbGluZS5sYXN0SW5kZXggPSBwb3M7XG4gICAgd2hpbGUgKChtYXRjaCA9IGxpbmUuZXhlYyhzb3VyY2UpKSkge1xuICAgICAgICBpZiAobWF0Y2hbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoc2VwID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICByZXMgKz0gc2VwO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzICs9IHNlcCArIG1hdGNoWzFdO1xuICAgICAgICAgICAgc2VwID0gJyAnO1xuICAgICAgICB9XG4gICAgICAgIHBvcyA9IGxpbmUubGFzdEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBsYXN0ID0gL1sgXFx0XSooLiopL3N5O1xuICAgIGxhc3QubGFzdEluZGV4ID0gcG9zO1xuICAgIG1hdGNoID0gbGFzdC5leGVjKHNvdXJjZSk7XG4gICAgcmV0dXJuIHJlcyArIHNlcCArIChtYXRjaD8uWzFdID8/ICcnKTtcbn1cbmZ1bmN0aW9uIGRvdWJsZVF1b3RlZFZhbHVlKHNvdXJjZSwgb25FcnJvcikge1xuICAgIGxldCByZXMgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNvdXJjZS5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2ggPSBzb3VyY2VbaV07XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2kgKyAxXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgY29uc3QgeyBmb2xkLCBvZmZzZXQgfSA9IGZvbGROZXdsaW5lKHNvdXJjZSwgaSk7XG4gICAgICAgICAgICByZXMgKz0gZm9sZDtcbiAgICAgICAgICAgIGkgPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgbGV0IG5leHQgPSBzb3VyY2VbKytpXTtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gZXNjYXBlQ29kZXNbbmV4dF07XG4gICAgICAgICAgICBpZiAoY2MpXG4gICAgICAgICAgICAgICAgcmVzICs9IGNjO1xuICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGVzY2FwZWQgbmV3bGluZXMsIGJ1dCBzdGlsbCB0cmltIHRoZSBmb2xsb3dpbmcgbGluZVxuICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbaSArIDFdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ID09PSAnICcgfHwgbmV4dCA9PT0gJ1xcdCcpXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbKytpICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSAnXFxyJyAmJiBzb3VyY2VbaSArIDFdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgZXNjYXBlZCBDUkxGIG5ld2xpbmVzLCBidXQgc3RpbGwgdHJpbSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgICAgICBuZXh0ID0gc291cmNlWysraSArIDFdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ID09PSAnICcgfHwgbmV4dCA9PT0gJ1xcdCcpXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbKytpICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSAneCcgfHwgbmV4dCA9PT0gJ3UnIHx8IG5leHQgPT09ICdVJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHsgeDogMiwgdTogNCwgVTogOCB9W25leHRdO1xuICAgICAgICAgICAgICAgIHJlcyArPSBwYXJzZUNoYXJDb2RlKHNvdXJjZSwgaSArIDEsIGxlbmd0aCwgb25FcnJvcik7XG4gICAgICAgICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBzb3VyY2Uuc3Vic3RyKGkgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICBvbkVycm9yKGkgLSAxLCAnQkFEX0RRX0VTQ0FQRScsIGBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSAke3Jhd31gKTtcbiAgICAgICAgICAgICAgICByZXMgKz0gcmF3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAvLyB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgIGNvbnN0IHdzU3RhcnQgPSBpO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBzb3VyY2VbaSArIDFdO1xuICAgICAgICAgICAgd2hpbGUgKG5leHQgPT09ICcgJyB8fCBuZXh0ID09PSAnXFx0JylcbiAgICAgICAgICAgICAgICBuZXh0ID0gc291cmNlWysraSArIDFdO1xuICAgICAgICAgICAgaWYgKG5leHQgIT09ICdcXG4nICYmICEobmV4dCA9PT0gJ1xccicgJiYgc291cmNlW2kgKyAyXSA9PT0gJ1xcbicpKVxuICAgICAgICAgICAgICAgIHJlcyArPSBpID4gd3NTdGFydCA/IHNvdXJjZS5zbGljZSh3c1N0YXJ0LCBpICsgMSkgOiBjaDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcyArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSAhPT0gJ1wiJyB8fCBzb3VyY2UubGVuZ3RoID09PSAxKVxuICAgICAgICBvbkVycm9yKHNvdXJjZS5sZW5ndGgsICdNSVNTSU5HX0NIQVInLCAnTWlzc2luZyBjbG9zaW5nIFwicXVvdGUnKTtcbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBGb2xkIGEgc2luZ2xlIG5ld2xpbmUgaW50byBhIHNwYWNlLCBtdWx0aXBsZSBuZXdsaW5lcyB0byBOIC0gMSBuZXdsaW5lcy5cbiAqIFByZXN1bWVzIGBzb3VyY2Vbb2Zmc2V0XSA9PT0gJ1xcbidgXG4gKi9cbmZ1bmN0aW9uIGZvbGROZXdsaW5lKHNvdXJjZSwgb2Zmc2V0KSB7XG4gICAgbGV0IGZvbGQgPSAnJztcbiAgICBsZXQgY2ggPSBzb3VyY2Vbb2Zmc2V0ICsgMV07XG4gICAgd2hpbGUgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnIHx8IGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xccicpIHtcbiAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiBzb3VyY2Vbb2Zmc2V0ICsgMl0gIT09ICdcXG4nKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICBmb2xkICs9ICdcXG4nO1xuICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgY2ggPSBzb3VyY2Vbb2Zmc2V0ICsgMV07XG4gICAgfVxuICAgIGlmICghZm9sZClcbiAgICAgICAgZm9sZCA9ICcgJztcbiAgICByZXR1cm4geyBmb2xkLCBvZmZzZXQgfTtcbn1cbmNvbnN0IGVzY2FwZUNvZGVzID0ge1xuICAgICcwJzogJ1xcMCcsIC8vIG51bGwgY2hhcmFjdGVyXG4gICAgYTogJ1xceDA3JywgLy8gYmVsbCBjaGFyYWN0ZXJcbiAgICBiOiAnXFxiJywgLy8gYmFja3NwYWNlXG4gICAgZTogJ1xceDFiJywgLy8gZXNjYXBlIGNoYXJhY3RlclxuICAgIGY6ICdcXGYnLCAvLyBmb3JtIGZlZWRcbiAgICBuOiAnXFxuJywgLy8gbGluZSBmZWVkXG4gICAgcjogJ1xccicsIC8vIGNhcnJpYWdlIHJldHVyblxuICAgIHQ6ICdcXHQnLCAvLyBob3Jpem9udGFsIHRhYlxuICAgIHY6ICdcXHYnLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBOOiAnXFx1MDA4NScsIC8vIFVuaWNvZGUgbmV4dCBsaW5lXG4gICAgXzogJ1xcdTAwYTAnLCAvLyBVbmljb2RlIG5vbi1icmVha2luZyBzcGFjZVxuICAgIEw6ICdcXHUyMDI4JywgLy8gVW5pY29kZSBsaW5lIHNlcGFyYXRvclxuICAgIFA6ICdcXHUyMDI5JywgLy8gVW5pY29kZSBwYXJhZ3JhcGggc2VwYXJhdG9yXG4gICAgJyAnOiAnICcsXG4gICAgJ1wiJzogJ1wiJyxcbiAgICAnLyc6ICcvJyxcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFx0JzogJ1xcdCdcbn07XG5mdW5jdGlvbiBwYXJzZUNoYXJDb2RlKHNvdXJjZSwgb2Zmc2V0LCBsZW5ndGgsIG9uRXJyb3IpIHtcbiAgICBjb25zdCBjYyA9IHNvdXJjZS5zdWJzdHIob2Zmc2V0LCBsZW5ndGgpO1xuICAgIGNvbnN0IG9rID0gY2MubGVuZ3RoID09PSBsZW5ndGggJiYgL15bMC05YS1mQS1GXSskLy50ZXN0KGNjKTtcbiAgICBjb25zdCBjb2RlID0gb2sgPyBwYXJzZUludChjYywgMTYpIDogTmFOO1xuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgICBjb25zdCByYXcgPSBzb3VyY2Uuc3Vic3RyKG9mZnNldCAtIDIsIGxlbmd0aCArIDIpO1xuICAgICAgICBvbkVycm9yKG9mZnNldCAtIDIsICdCQURfRFFfRVNDQVBFJywgYEludmFsaWQgZXNjYXBlIHNlcXVlbmNlICR7cmF3fWApO1xuICAgICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVGbG93U2NhbGFyIH07XG4iLCAiaW1wb3J0IHsgaXNTY2FsYXIsIFNDQUxBUiB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlQmxvY2tTY2FsYXIgfSBmcm9tICcuL3Jlc29sdmUtYmxvY2stc2NhbGFyLmpzJztcbmltcG9ydCB7IHJlc29sdmVGbG93U2NhbGFyIH0gZnJvbSAnLi9yZXNvbHZlLWZsb3ctc2NhbGFyLmpzJztcblxuZnVuY3Rpb24gY29tcG9zZVNjYWxhcihjdHgsIHRva2VuLCB0YWdUb2tlbiwgb25FcnJvcikge1xuICAgIGNvbnN0IHsgdmFsdWUsIHR5cGUsIGNvbW1lbnQsIHJhbmdlIH0gPSB0b2tlbi50eXBlID09PSAnYmxvY2stc2NhbGFyJ1xuICAgICAgICA/IHJlc29sdmVCbG9ja1NjYWxhcihjdHgsIHRva2VuLCBvbkVycm9yKVxuICAgICAgICA6IHJlc29sdmVGbG93U2NhbGFyKHRva2VuLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0YWdUb2tlblxuICAgICAgICA/IGN0eC5kaXJlY3RpdmVzLnRhZ05hbWUodGFnVG9rZW4uc291cmNlLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZykpXG4gICAgICAgIDogbnVsbDtcbiAgICBsZXQgdGFnO1xuICAgIGlmIChjdHgub3B0aW9ucy5zdHJpbmdLZXlzICYmIGN0eC5hdEtleSkge1xuICAgICAgICB0YWcgPSBjdHguc2NoZW1hW1NDQUxBUl07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ05hbWUpXG4gICAgICAgIHRhZyA9IGZpbmRTY2FsYXJUYWdCeU5hbWUoY3R4LnNjaGVtYSwgdmFsdWUsIHRhZ05hbWUsIHRhZ1Rva2VuLCBvbkVycm9yKTtcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnc2NhbGFyJylcbiAgICAgICAgdGFnID0gZmluZFNjYWxhclRhZ0J5VGVzdChjdHgsIHZhbHVlLCB0b2tlbiwgb25FcnJvcik7XG4gICAgZWxzZVxuICAgICAgICB0YWcgPSBjdHguc2NoZW1hW1NDQUxBUl07XG4gICAgbGV0IHNjYWxhcjtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0YWcucmVzb2x2ZSh2YWx1ZSwgbXNnID0+IG9uRXJyb3IodGFnVG9rZW4gPz8gdG9rZW4sICdUQUdfUkVTT0xWRV9GQUlMRUQnLCBtc2cpLCBjdHgub3B0aW9ucyk7XG4gICAgICAgIHNjYWxhciA9IGlzU2NhbGFyKHJlcykgPyByZXMgOiBuZXcgU2NhbGFyKHJlcyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIG9uRXJyb3IodGFnVG9rZW4gPz8gdG9rZW4sICdUQUdfUkVTT0xWRV9GQUlMRUQnLCBtc2cpO1xuICAgICAgICBzY2FsYXIgPSBuZXcgU2NhbGFyKHZhbHVlKTtcbiAgICB9XG4gICAgc2NhbGFyLnJhbmdlID0gcmFuZ2U7XG4gICAgc2NhbGFyLnNvdXJjZSA9IHZhbHVlO1xuICAgIGlmICh0eXBlKVxuICAgICAgICBzY2FsYXIudHlwZSA9IHR5cGU7XG4gICAgaWYgKHRhZ05hbWUpXG4gICAgICAgIHNjYWxhci50YWcgPSB0YWdOYW1lO1xuICAgIGlmICh0YWcuZm9ybWF0KVxuICAgICAgICBzY2FsYXIuZm9ybWF0ID0gdGFnLmZvcm1hdDtcbiAgICBpZiAoY29tbWVudClcbiAgICAgICAgc2NhbGFyLmNvbW1lbnQgPSBjb21tZW50O1xuICAgIHJldHVybiBzY2FsYXI7XG59XG5mdW5jdGlvbiBmaW5kU2NhbGFyVGFnQnlOYW1lKHNjaGVtYSwgdmFsdWUsIHRhZ05hbWUsIHRhZ1Rva2VuLCBvbkVycm9yKSB7XG4gICAgaWYgKHRhZ05hbWUgPT09ICchJylcbiAgICAgICAgcmV0dXJuIHNjaGVtYVtTQ0FMQVJdOyAvLyBub24tc3BlY2lmaWMgdGFnXG4gICAgY29uc3QgbWF0Y2hXaXRoVGVzdCA9IFtdO1xuICAgIGZvciAoY29uc3QgdGFnIG9mIHNjaGVtYS50YWdzKSB7XG4gICAgICAgIGlmICghdGFnLmNvbGxlY3Rpb24gJiYgdGFnLnRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRhZy5kZWZhdWx0ICYmIHRhZy50ZXN0KVxuICAgICAgICAgICAgICAgIG1hdGNoV2l0aFRlc3QucHVzaCh0YWcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB0YWcgb2YgbWF0Y2hXaXRoVGVzdClcbiAgICAgICAgaWYgKHRhZy50ZXN0Py50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgY29uc3Qga3QgPSBzY2hlbWEua25vd25UYWdzW3RhZ05hbWVdO1xuICAgIGlmIChrdCAmJiAha3QuY29sbGVjdGlvbikge1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUga25vd24gdGFnIGlzIGF2YWlsYWJsZSBmb3Igc3RyaW5naWZ5aW5nLFxuICAgICAgICAvLyBidXQgZG9lcyBub3QgZ2V0IHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgICAgc2NoZW1hLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKHt9LCBrdCwgeyBkZWZhdWx0OiBmYWxzZSwgdGVzdDogdW5kZWZpbmVkIH0pKTtcbiAgICAgICAgcmV0dXJuIGt0O1xuICAgIH1cbiAgICBvbkVycm9yKHRhZ1Rva2VuLCAnVEFHX1JFU09MVkVfRkFJTEVEJywgYFVucmVzb2x2ZWQgdGFnOiAke3RhZ05hbWV9YCwgdGFnTmFtZSAhPT0gJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicpO1xuICAgIHJldHVybiBzY2hlbWFbU0NBTEFSXTtcbn1cbmZ1bmN0aW9uIGZpbmRTY2FsYXJUYWdCeVRlc3QoeyBhdEtleSwgZGlyZWN0aXZlcywgc2NoZW1hIH0sIHZhbHVlLCB0b2tlbiwgb25FcnJvcikge1xuICAgIGNvbnN0IHRhZyA9IHNjaGVtYS50YWdzLmZpbmQodGFnID0+ICh0YWcuZGVmYXVsdCA9PT0gdHJ1ZSB8fCAoYXRLZXkgJiYgdGFnLmRlZmF1bHQgPT09ICdrZXknKSkgJiZcbiAgICAgICAgdGFnLnRlc3Q/LnRlc3QodmFsdWUpKSB8fCBzY2hlbWFbU0NBTEFSXTtcbiAgICBpZiAoc2NoZW1hLmNvbXBhdCkge1xuICAgICAgICBjb25zdCBjb21wYXQgPSBzY2hlbWEuY29tcGF0LmZpbmQodGFnID0+IHRhZy5kZWZhdWx0ICYmIHRhZy50ZXN0Py50ZXN0KHZhbHVlKSkgPz9cbiAgICAgICAgICAgIHNjaGVtYVtTQ0FMQVJdO1xuICAgICAgICBpZiAodGFnLnRhZyAhPT0gY29tcGF0LnRhZykge1xuICAgICAgICAgICAgY29uc3QgdHMgPSBkaXJlY3RpdmVzLnRhZ1N0cmluZyh0YWcudGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGNzID0gZGlyZWN0aXZlcy50YWdTdHJpbmcoY29tcGF0LnRhZyk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgVmFsdWUgbWF5IGJlIHBhcnNlZCBhcyBlaXRoZXIgJHt0c30gb3IgJHtjc31gO1xuICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhZztcbn1cblxuZXhwb3J0IHsgY29tcG9zZVNjYWxhciB9O1xuIiwgImZ1bmN0aW9uIGVtcHR5U2NhbGFyUG9zaXRpb24ob2Zmc2V0LCBiZWZvcmUsIHBvcykge1xuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgaWYgKHBvcyA9PT0gbnVsbClcbiAgICAgICAgICAgIHBvcyA9IGJlZm9yZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSBwb3MgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgbGV0IHN0ID0gYmVmb3JlW2ldO1xuICAgICAgICAgICAgc3dpdGNoIChzdC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgLT0gc3Quc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUZWNobmljYWxseSwgYW4gZW1wdHkgc2NhbGFyIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsYXN0IG5vbi1lbXB0eVxuICAgICAgICAgICAgLy8gbm9kZSwgYnV0IGl0J3MgbW9yZSB1c2VmdWwgdG8gcGxhY2UgaXQgYWZ0ZXIgYW55IHdoaXRlc3BhY2UuXG4gICAgICAgICAgICBzdCA9IGJlZm9yZVsrK2ldO1xuICAgICAgICAgICAgd2hpbGUgKHN0Py50eXBlID09PSAnc3BhY2UnKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHN0LnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgc3QgPSBiZWZvcmVbKytpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cbmV4cG9ydCB7IGVtcHR5U2NhbGFyUG9zaXRpb24gfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgY29tcG9zZUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbXBvc2UtY29sbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjb21wb3NlU2NhbGFyIH0gZnJvbSAnLi9jb21wb3NlLXNjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5pbXBvcnQgeyBlbXB0eVNjYWxhclBvc2l0aW9uIH0gZnJvbSAnLi91dGlsLWVtcHR5LXNjYWxhci1wb3NpdGlvbi5qcyc7XG5cbmNvbnN0IENOID0geyBjb21wb3NlTm9kZSwgY29tcG9zZUVtcHR5Tm9kZSB9O1xuZnVuY3Rpb24gY29tcG9zZU5vZGUoY3R4LCB0b2tlbiwgcHJvcHMsIG9uRXJyb3IpIHtcbiAgICBjb25zdCBhdEtleSA9IGN0eC5hdEtleTtcbiAgICBjb25zdCB7IHNwYWNlQmVmb3JlLCBjb21tZW50LCBhbmNob3IsIHRhZyB9ID0gcHJvcHM7XG4gICAgbGV0IG5vZGU7XG4gICAgbGV0IGlzU3JjVG9rZW4gPSB0cnVlO1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICBub2RlID0gY29tcG9zZUFsaWFzKGN0eCwgdG9rZW4sIG9uRXJyb3IpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciB8fCB0YWcpXG4gICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ0FMSUFTX1BST1BTJywgJ0FuIGFsaWFzIG5vZGUgbXVzdCBub3Qgc3BlY2lmeSBhbnkgcHJvcGVydGllcycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICBjYXNlICdibG9jay1zY2FsYXInOlxuICAgICAgICAgICAgbm9kZSA9IGNvbXBvc2VTY2FsYXIoY3R4LCB0b2tlbiwgdGFnLCBvbkVycm9yKTtcbiAgICAgICAgICAgIGlmIChhbmNob3IpXG4gICAgICAgICAgICAgICAgbm9kZS5hbmNob3IgPSBhbmNob3Iuc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICBjYXNlICdibG9jay1zZXEnOlxuICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgbm9kZSA9IGNvbXBvc2VDb2xsZWN0aW9uKENOLCBjdHgsIHRva2VuLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoYW5jaG9yKVxuICAgICAgICAgICAgICAgIG5vZGUuYW5jaG9yID0gYW5jaG9yLnNvdXJjZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRva2VuLnR5cGUgPT09ICdlcnJvcidcbiAgICAgICAgICAgICAgICA/IHRva2VuLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IGBVbnN1cHBvcnRlZCB0b2tlbiAodHlwZTogJHt0b2tlbi50eXBlfSlgO1xuICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1VORVhQRUNURURfVE9LRU4nLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIG5vZGUgPSBjb21wb3NlRW1wdHlOb2RlKGN0eCwgdG9rZW4ub2Zmc2V0LCB1bmRlZmluZWQsIG51bGwsIHByb3BzLCBvbkVycm9yKTtcbiAgICAgICAgICAgIGlzU3JjVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYW5jaG9yICYmIG5vZGUuYW5jaG9yID09PSAnJylcbiAgICAgICAgb25FcnJvcihhbmNob3IsICdCQURfQUxJQVMnLCAnQW5jaG9yIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICBpZiAoYXRLZXkgJiZcbiAgICAgICAgY3R4Lm9wdGlvbnMuc3RyaW5nS2V5cyAmJlxuICAgICAgICAoIWlzU2NhbGFyKG5vZGUpIHx8XG4gICAgICAgICAgICB0eXBlb2Ygbm9kZS52YWx1ZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIChub2RlLnRhZyAmJiBub2RlLnRhZyAhPT0gJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicpKSkge1xuICAgICAgICBjb25zdCBtc2cgPSAnV2l0aCBzdHJpbmdLZXlzLCBhbGwga2V5cyBtdXN0IGJlIHN0cmluZ3MnO1xuICAgICAgICBvbkVycm9yKHRhZyA/PyB0b2tlbiwgJ05PTl9TVFJJTkdfS0VZJywgbXNnKTtcbiAgICB9XG4gICAgaWYgKHNwYWNlQmVmb3JlKVxuICAgICAgICBub2RlLnNwYWNlQmVmb3JlID0gdHJ1ZTtcbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ3NjYWxhcicgJiYgdG9rZW4uc291cmNlID09PSAnJylcbiAgICAgICAgICAgIG5vZGUuY29tbWVudCA9IGNvbW1lbnQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUuY29tbWVudEJlZm9yZSA9IGNvbW1lbnQ7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZSBjaGVja2luZyBtaXNzZXMgbWVhbmluZyBvZiBpc1NyY1Rva2VuXG4gICAgaWYgKGN0eC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMgJiYgaXNTcmNUb2tlbilcbiAgICAgICAgbm9kZS5zcmNUb2tlbiA9IHRva2VuO1xuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gY29tcG9zZUVtcHR5Tm9kZShjdHgsIG9mZnNldCwgYmVmb3JlLCBwb3MsIHsgc3BhY2VCZWZvcmUsIGNvbW1lbnQsIGFuY2hvciwgdGFnLCBlbmQgfSwgb25FcnJvcikge1xuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgICB0eXBlOiAnc2NhbGFyJyxcbiAgICAgICAgb2Zmc2V0OiBlbXB0eVNjYWxhclBvc2l0aW9uKG9mZnNldCwgYmVmb3JlLCBwb3MpLFxuICAgICAgICBpbmRlbnQ6IC0xLFxuICAgICAgICBzb3VyY2U6ICcnXG4gICAgfTtcbiAgICBjb25zdCBub2RlID0gY29tcG9zZVNjYWxhcihjdHgsIHRva2VuLCB0YWcsIG9uRXJyb3IpO1xuICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgbm9kZS5hbmNob3IgPSBhbmNob3Iuc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWYgKG5vZGUuYW5jaG9yID09PSAnJylcbiAgICAgICAgICAgIG9uRXJyb3IoYW5jaG9yLCAnQkFEX0FMSUFTJywgJ0FuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmIChzcGFjZUJlZm9yZSlcbiAgICAgICAgbm9kZS5zcGFjZUJlZm9yZSA9IHRydWU7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgbm9kZS5jb21tZW50ID0gY29tbWVudDtcbiAgICAgICAgbm9kZS5yYW5nZVsyXSA9IGVuZDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBjb21wb3NlQWxpYXMoeyBvcHRpb25zIH0sIHsgb2Zmc2V0LCBzb3VyY2UsIGVuZCB9LCBvbkVycm9yKSB7XG4gICAgY29uc3QgYWxpYXMgPSBuZXcgQWxpYXMoc291cmNlLnN1YnN0cmluZygxKSk7XG4gICAgaWYgKGFsaWFzLnNvdXJjZSA9PT0gJycpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0LCAnQkFEX0FMSUFTJywgJ0FsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICBpZiAoYWxpYXMuc291cmNlLmVuZHNXaXRoKCc6JykpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0ICsgc291cmNlLmxlbmd0aCAtIDEsICdCQURfQUxJQVMnLCAnQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzJywgdHJ1ZSk7XG4gICAgY29uc3QgdmFsdWVFbmQgPSBvZmZzZXQgKyBzb3VyY2UubGVuZ3RoO1xuICAgIGNvbnN0IHJlID0gcmVzb2x2ZUVuZChlbmQsIHZhbHVlRW5kLCBvcHRpb25zLnN0cmljdCwgb25FcnJvcik7XG4gICAgYWxpYXMucmFuZ2UgPSBbb2Zmc2V0LCB2YWx1ZUVuZCwgcmUub2Zmc2V0XTtcbiAgICBpZiAocmUuY29tbWVudClcbiAgICAgICAgYWxpYXMuY29tbWVudCA9IHJlLmNvbW1lbnQ7XG4gICAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgeyBjb21wb3NlRW1wdHlOb2RlLCBjb21wb3NlTm9kZSB9O1xuIiwgImltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnLi4vZG9jL0RvY3VtZW50LmpzJztcbmltcG9ydCB7IGNvbXBvc2VOb2RlLCBjb21wb3NlRW1wdHlOb2RlIH0gZnJvbSAnLi9jb21wb3NlLW5vZGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZCB9IGZyb20gJy4vcmVzb2x2ZS1lbmQuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcblxuZnVuY3Rpb24gY29tcG9zZURvYyhvcHRpb25zLCBkaXJlY3RpdmVzLCB7IG9mZnNldCwgc3RhcnQsIHZhbHVlLCBlbmQgfSwgb25FcnJvcikge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHsgX2RpcmVjdGl2ZXM6IGRpcmVjdGl2ZXMgfSwgb3B0aW9ucyk7XG4gICAgY29uc3QgZG9jID0gbmV3IERvY3VtZW50KHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgICBhdEtleTogZmFsc2UsXG4gICAgICAgIGF0Um9vdDogdHJ1ZSxcbiAgICAgICAgZGlyZWN0aXZlczogZG9jLmRpcmVjdGl2ZXMsXG4gICAgICAgIG9wdGlvbnM6IGRvYy5vcHRpb25zLFxuICAgICAgICBzY2hlbWE6IGRvYy5zY2hlbWFcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0gcmVzb2x2ZVByb3BzKHN0YXJ0LCB7XG4gICAgICAgIGluZGljYXRvcjogJ2RvYy1zdGFydCcsXG4gICAgICAgIG5leHQ6IHZhbHVlID8/IGVuZD8uWzBdLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIG9uRXJyb3IsXG4gICAgICAgIHBhcmVudEluZGVudDogMCxcbiAgICAgICAgc3RhcnRPbk5ld2xpbmU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAocHJvcHMuZm91bmQpIHtcbiAgICAgICAgZG9jLmRpcmVjdGl2ZXMuZG9jU3RhcnQgPSB0cnVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgICh2YWx1ZS50eXBlID09PSAnYmxvY2stbWFwJyB8fCB2YWx1ZS50eXBlID09PSAnYmxvY2stc2VxJykgJiZcbiAgICAgICAgICAgICFwcm9wcy5oYXNOZXdsaW5lKVxuICAgICAgICAgICAgb25FcnJvcihwcm9wcy5lbmQsICdNSVNTSU5HX0NIQVInLCAnQmxvY2sgY29sbGVjdGlvbiBjYW5ub3Qgc3RhcnQgb24gc2FtZSBsaW5lIHdpdGggZGlyZWN0aXZlcy1lbmQgbWFya2VyJyk7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSWYgQ29udGVudHMgaXMgc2V0LCBsZXQncyB0cnVzdCB0aGUgdXNlclxuICAgIGRvYy5jb250ZW50cyA9IHZhbHVlXG4gICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgcHJvcHMsIG9uRXJyb3IpXG4gICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIHByb3BzLmVuZCwgc3RhcnQsIG51bGwsIHByb3BzLCBvbkVycm9yKTtcbiAgICBjb25zdCBjb250ZW50RW5kID0gZG9jLmNvbnRlbnRzLnJhbmdlWzJdO1xuICAgIGNvbnN0IHJlID0gcmVzb2x2ZUVuZChlbmQsIGNvbnRlbnRFbmQsIGZhbHNlLCBvbkVycm9yKTtcbiAgICBpZiAocmUuY29tbWVudClcbiAgICAgICAgZG9jLmNvbW1lbnQgPSByZS5jb21tZW50O1xuICAgIGRvYy5yYW5nZSA9IFtvZmZzZXQsIGNvbnRlbnRFbmQsIHJlLm9mZnNldF07XG4gICAgcmV0dXJuIGRvYztcbn1cblxuZXhwb3J0IHsgY29tcG9zZURvYyB9O1xuIiwgImltcG9ydCB7IERpcmVjdGl2ZXMgfSBmcm9tICcuLi9kb2MvZGlyZWN0aXZlcy5qcyc7XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4uL2RvYy9Eb2N1bWVudC5qcyc7XG5pbXBvcnQgeyBZQU1MV2FybmluZywgWUFNTFBhcnNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgaXNDb2xsZWN0aW9uLCBpc1BhaXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBjb21wb3NlRG9jIH0gZnJvbSAnLi9jb21wb3NlLWRvYy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5cbmZ1bmN0aW9uIGdldEVycm9yUG9zKHNyYykge1xuICAgIGlmICh0eXBlb2Ygc3JjID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIFtzcmMsIHNyYyArIDFdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpXG4gICAgICAgIHJldHVybiBzcmMubGVuZ3RoID09PSAyID8gc3JjIDogW3NyY1swXSwgc3JjWzFdXTtcbiAgICBjb25zdCB7IG9mZnNldCwgc291cmNlIH0gPSBzcmM7XG4gICAgcmV0dXJuIFtvZmZzZXQsIG9mZnNldCArICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHNvdXJjZS5sZW5ndGggOiAxKV07XG59XG5mdW5jdGlvbiBwYXJzZVByZWx1ZGUocHJlbHVkZSkge1xuICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgbGV0IGF0Q29tbWVudCA9IGZhbHNlO1xuICAgIGxldCBhZnRlckVtcHR5TGluZSA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlbHVkZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBwcmVsdWRlW2ldO1xuICAgICAgICBzd2l0Y2ggKHNvdXJjZVswXSkge1xuICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgY29tbWVudCArPVxuICAgICAgICAgICAgICAgICAgICAoY29tbWVudCA9PT0gJycgPyAnJyA6IGFmdGVyRW1wdHlMaW5lID8gJ1xcblxcbicgOiAnXFxuJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZS5zdWJzdHJpbmcoMSkgfHwgJyAnKTtcbiAgICAgICAgICAgICAgICBhdENvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFmdGVyRW1wdHlMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgICAgICBpZiAocHJlbHVkZVtpICsgMV0/LlswXSAhPT0gJyMnKVxuICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICAgICAgYXRDb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIHdyb25nIGFmdGVyIGRvYy1lbmQsIGJ1dCBpbiB0aGF0IGNhc2UgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAgICAgICBpZiAoIWF0Q29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJFbXB0eUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF0Q29tbWVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGNvbW1lbnQsIGFmdGVyRW1wdHlMaW5lIH07XG59XG4vKipcbiAqIENvbXBvc2UgYSBzdHJlYW0gb2YgQ1NUIG5vZGVzIGludG8gYSBzdHJlYW0gb2YgWUFNTCBEb2N1bWVudHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IENvbXBvc2VyLCBQYXJzZXIgfSBmcm9tICd5YW1sJ1xuICpcbiAqIGNvbnN0IHNyYzogc3RyaW5nID0gLi4uXG4gKiBjb25zdCB0b2tlbnMgPSBuZXcgUGFyc2VyKCkucGFyc2Uoc3JjKVxuICogY29uc3QgZG9jcyA9IG5ldyBDb21wb3NlcigpLmNvbXBvc2UodG9rZW5zKVxuICogYGBgXG4gKi9cbmNsYXNzIENvbXBvc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5kb2MgPSBudWxsO1xuICAgICAgICB0aGlzLmF0RGlyZWN0aXZlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgICAgICB0aGlzLm9uRXJyb3IgPSAoc291cmNlLCBjb2RlLCBtZXNzYWdlLCB3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFcnJvclBvcyhzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHdhcm5pbmcpXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKG5ldyBZQU1MV2FybmluZyhwb3MsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBZQU1MUGFyc2VFcnJvcihwb3MsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcxLjInIH0pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBkZWNvcmF0ZShkb2MsIGFmdGVyRG9jKSB7XG4gICAgICAgIGNvbnN0IHsgY29tbWVudCwgYWZ0ZXJFbXB0eUxpbmUgfSA9IHBhcnNlUHJlbHVkZSh0aGlzLnByZWx1ZGUpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHsgZGM6IGRvYy5jb21tZW50LCBwcmVsdWRlLCBjb21tZW50IH0pXG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkYyA9IGRvYy5jb250ZW50cztcbiAgICAgICAgICAgIGlmIChhZnRlckRvYykge1xuICAgICAgICAgICAgICAgIGRvYy5jb21tZW50ID0gZG9jLmNvbW1lbnQgPyBgJHtkb2MuY29tbWVudH1cXG4ke2NvbW1lbnR9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhZnRlckVtcHR5TGluZSB8fCBkb2MuZGlyZWN0aXZlcy5kb2NTdGFydCB8fCAhZGMpIHtcbiAgICAgICAgICAgICAgICBkb2MuY29tbWVudEJlZm9yZSA9IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbGxlY3Rpb24oZGMpICYmICFkYy5mbG93ICYmIGRjLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBkYy5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQYWlyKGl0KSlcbiAgICAgICAgICAgICAgICAgICAgaXQgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSBpdC5jb21tZW50QmVmb3JlO1xuICAgICAgICAgICAgICAgIGl0LmNvbW1lbnRCZWZvcmUgPSBjYiA/IGAke2NvbW1lbnR9XFxuJHtjYn1gIDogY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNiID0gZGMuY29tbWVudEJlZm9yZTtcbiAgICAgICAgICAgICAgICBkYy5jb21tZW50QmVmb3JlID0gY2IgPyBgJHtjb21tZW50fVxcbiR7Y2J9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVyRG9jKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2MuZXJyb3JzLCB0aGlzLmVycm9ycyk7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2Mud2FybmluZ3MsIHRoaXMud2FybmluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9jLmVycm9ycyA9IHRoaXMuZXJyb3JzO1xuICAgICAgICAgICAgZG9jLndhcm5pbmdzID0gdGhpcy53YXJuaW5ncztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHN0cmVhbSBzdGF0dXMgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBNb3N0bHkgdXNlZnVsIGF0IHRoZSBlbmQgb2YgaW5wdXQgZm9yIGFuIGVtcHR5IHN0cmVhbS5cbiAgICAgKi9cbiAgICBzdHJlYW1JbmZvKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWVudDogcGFyc2VQcmVsdWRlKHRoaXMucHJlbHVkZSkuY29tbWVudCxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IHRoaXMuZGlyZWN0aXZlcyxcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogdGhpcy53YXJuaW5nc1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wb3NlIHRva2VucyBpbnRvIGRvY3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JjZURvYyAtIElmIHRoZSBzdHJlYW0gY29udGFpbnMgbm8gZG9jdW1lbnQsIHN0aWxsIGVtaXQgYSBmaW5hbCBkb2N1bWVudCBpbmNsdWRpbmcgYW55IGNvbW1lbnRzIGFuZCBkaXJlY3RpdmVzIHRoYXQgd291bGQgYmUgYXBwbGllZCB0byBhIHN1YnNlcXVlbnQgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGVuZE9mZnNldCAtIFNob3VsZCBiZSBzZXQgaWYgYGZvcmNlRG9jYCBpcyBhbHNvIHNldCwgdG8gc2V0IHRoZSBkb2N1bWVudCByYW5nZSBlbmQgYW5kIHRvIGluZGljYXRlIGVycm9ycyBjb3JyZWN0bHkuXG4gICAgICovXG4gICAgKmNvbXBvc2UodG9rZW5zLCBmb3JjZURvYyA9IGZhbHNlLCBlbmRPZmZzZXQgPSAtMSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2VucylcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLm5leHQodG9rZW4pO1xuICAgICAgICB5aWVsZCogdGhpcy5lbmQoZm9yY2VEb2MsIGVuZE9mZnNldCk7XG4gICAgfVxuICAgIC8qKiBBZHZhbmNlIHRoZSBjb21wb3NlciBieSBvbmUgQ1NUIHRva2VuLiAqL1xuICAgICpuZXh0KHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZGlyZWN0aXZlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMuYWRkKHRva2VuLnNvdXJjZSwgKG9mZnNldCwgbWVzc2FnZSwgd2FybmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFcnJvclBvcyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSArPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihwb3MsICdCQURfRElSRUNUSVZFJywgbWVzc2FnZSwgd2FybmluZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVsdWRlLnB1c2godG9rZW4uc291cmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF0RGlyZWN0aXZlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkb2N1bWVudCc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBjb21wb3NlRG9jKHRoaXMub3B0aW9ucywgdGhpcy5kaXJlY3RpdmVzLCB0b2tlbiwgdGhpcy5vbkVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdERpcmVjdGl2ZXMgJiYgIWRvYy5kaXJlY3RpdmVzLmRvY1N0YXJ0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IodG9rZW4sICdNSVNTSU5HX0NIQVInLCAnTWlzc2luZyBkaXJlY3RpdmVzLWVuZC9kb2Mtc3RhcnQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29yYXRlKGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvYylcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5kb2M7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICAgICAgICAgICAgdGhpcy5hdERpcmVjdGl2ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2J5dGUtb3JkZXItbWFyayc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHRva2VuLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlcnJvcic6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSB0b2tlbi5zb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgPyBgJHt0b2tlbi5tZXNzYWdlfTogJHtKU09OLnN0cmluZ2lmeSh0b2tlbi5zb3VyY2UpfWBcbiAgICAgICAgICAgICAgICAgICAgOiB0b2tlbi5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFlBTUxQYXJzZUVycm9yKGdldEVycm9yUG9zKHRva2VuKSwgJ1VORVhQRUNURURfVE9LRU4nLCBtc2cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0RGlyZWN0aXZlcyB8fCAhdGhpcy5kb2MpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZG9jLWVuZCc6IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVbmV4cGVjdGVkIGRvYy1lbmQgd2l0aG91dCBwcmVjZWRpbmcgZG9jdW1lbnQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBZQU1MUGFyc2VFcnJvcihnZXRFcnJvclBvcyh0b2tlbiksICdVTkVYUEVDVEVEX1RPS0VOJywgbXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gcmVzb2x2ZUVuZCh0b2tlbi5lbmQsIHRva2VuLm9mZnNldCArIHRva2VuLnNvdXJjZS5sZW5ndGgsIHRoaXMuZG9jLm9wdGlvbnMuc3RyaWN0LCB0aGlzLm9uRXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVjb3JhdGUodGhpcy5kb2MsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChlbmQuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYyA9IHRoaXMuZG9jLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jLmNvbW1lbnQgPSBkYyA/IGAke2RjfVxcbiR7ZW5kLmNvbW1lbnR9YCA6IGVuZC5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5yYW5nZVsyXSA9IGVuZC5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IFlBTUxQYXJzZUVycm9yKGdldEVycm9yUG9zKHRva2VuKSwgJ1VORVhQRUNURURfVE9LRU4nLCBgVW5zdXBwb3J0ZWQgdG9rZW4gJHt0b2tlbi50eXBlfWApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byB5aWVsZCBhbnkgcmVtYWluaW5nIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcmNlRG9jIC0gSWYgdGhlIHN0cmVhbSBjb250YWlucyBubyBkb2N1bWVudCwgc3RpbGwgZW1pdCBhIGZpbmFsIGRvY3VtZW50IGluY2x1ZGluZyBhbnkgY29tbWVudHMgYW5kIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBiZSBhcHBsaWVkIHRvIGEgc3Vic2VxdWVudCBkb2N1bWVudC5cbiAgICAgKiBAcGFyYW0gZW5kT2Zmc2V0IC0gU2hvdWxkIGJlIHNldCBpZiBgZm9yY2VEb2NgIGlzIGFsc28gc2V0LCB0byBzZXQgdGhlIGRvY3VtZW50IHJhbmdlIGVuZCBhbmQgdG8gaW5kaWNhdGUgZXJyb3JzIGNvcnJlY3RseS5cbiAgICAgKi9cbiAgICAqZW5kKGZvcmNlRG9jID0gZmFsc2UsIGVuZE9mZnNldCA9IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLmRvYykge1xuICAgICAgICAgICAgdGhpcy5kZWNvcmF0ZSh0aGlzLmRvYywgdHJ1ZSk7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmRvYztcbiAgICAgICAgICAgIHRoaXMuZG9jID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JjZURvYykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyBfZGlyZWN0aXZlczogdGhpcy5kaXJlY3RpdmVzIH0sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jdW1lbnQodW5kZWZpbmVkLCBvcHRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0RGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoZW5kT2Zmc2V0LCAnTUlTU0lOR19DSEFSJywgJ01pc3NpbmcgZGlyZWN0aXZlcy1lbmQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgICAgICAgIGRvYy5yYW5nZSA9IFswLCBlbmRPZmZzZXQsIGVuZE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmRlY29yYXRlKGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgeWllbGQgZG9jO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBDb21wb3NlciB9O1xuIiwgImNvbnN0IEJSRUFLID0gU3ltYm9sKCdicmVhayB2aXNpdCcpO1xuY29uc3QgU0tJUCA9IFN5bWJvbCgnc2tpcCBjaGlsZHJlbicpO1xuY29uc3QgUkVNT1ZFID0gU3ltYm9sKCdyZW1vdmUgaXRlbScpO1xuLyoqXG4gKiBBcHBseSBhIHZpc2l0b3IgdG8gYSBDU1QgZG9jdW1lbnQgb3IgaXRlbS5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0d28gYXJndW1lbnRzIHdoZW4gZW50ZXJpbmcgZWFjaCBpdGVtOlxuICogICAtIGBpdGVtYDogVGhlIGN1cnJlbnQgaXRlbSwgd2hpY2ggaW5jbHVkZWQgdGhlIGZvbGxvd2luZyBtZW1iZXJzOlxuICogICAgIC0gYHN0YXJ0OiBTb3VyY2VUb2tlbltdYCBcdTIwMTMgU291cmNlIHRva2VucyBiZWZvcmUgdGhlIGtleSBvciB2YWx1ZSxcbiAqICAgICAgIHBvc3NpYmx5IGluY2x1ZGluZyBpdHMgYW5jaG9yIG9yIHRhZy5cbiAqICAgICAtIGBrZXk/OiBUb2tlbiB8IG51bGxgIFx1MjAxMyBTZXQgZm9yIHBhaXIgdmFsdWVzLiBNYXkgdGhlbiBiZSBgbnVsbGAsIGlmXG4gKiAgICAgICB0aGUga2V5IGJlZm9yZSB0aGUgYDpgIHNlcGFyYXRvciBpcyBlbXB0eS5cbiAqICAgICAtIGBzZXA/OiBTb3VyY2VUb2tlbltdYCBcdTIwMTMgU291cmNlIHRva2VucyBiZXR3ZWVuIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSxcbiAqICAgICAgIHdoaWNoIHNob3VsZCBpbmNsdWRlIHRoZSBgOmAgbWFwIHZhbHVlIGluZGljYXRvciBpZiBgdmFsdWVgIGlzIHNldC5cbiAqICAgICAtIGB2YWx1ZT86IFRva2VuYCBcdTIwMTMgVGhlIHZhbHVlIG9mIGEgc2VxdWVuY2UgaXRlbSwgb3Igb2YgYSBtYXAgcGFpci5cbiAqICAgLSBgcGF0aGA6IFRoZSBzdGVwcyBmcm9tIHRoZSByb290IHRvIHRoZSBjdXJyZW50IG5vZGUsIGFzIGFuIGFycmF5IG9mXG4gKiAgICAgYFsna2V5JyB8ICd2YWx1ZScsIG51bWJlcl1gIHR1cGxlcy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgdG9rZW4sIGNvbnRpbnVlIHdpdGhcbiAqICAgICAgbmV4dCBzaWJsaW5nXG4gKiAgIC0gYHZpc2l0LkJSRUFLYDogVGVybWluYXRlIHRyYXZlcnNhbCBjb21wbGV0ZWx5XG4gKiAgIC0gYHZpc2l0LlJFTU9WRWA6IFJlbW92ZSB0aGUgY3VycmVudCBpdGVtLCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lXG4gKiAgIC0gYG51bWJlcmA6IFNldCB0aGUgaW5kZXggb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZlxuICogICAgIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB0b2tlbiBoYXMgY2hhbmdlZC5cbiAqICAgLSBgZnVuY3Rpb25gOiBEZWZpbmUgdGhlIG5leHQgdmlzaXRvciBmb3IgdGhpcyBpdGVtLiBBZnRlciB0aGUgb3JpZ2luYWxcbiAqICAgICB2aXNpdG9yIGlzIGNhbGxlZCBvbiBpdGVtIGVudHJ5LCBuZXh0IHZpc2l0b3JzIGFyZSBjYWxsZWQgYWZ0ZXIgaGFuZGxpbmdcbiAqICAgICBhIG5vbi1lbXB0eSBga2V5YCBhbmQgd2hlbiBleGl0aW5nIHRoZSBpdGVtLlxuICovXG5mdW5jdGlvbiB2aXNpdChjc3QsIHZpc2l0b3IpIHtcbiAgICBpZiAoJ3R5cGUnIGluIGNzdCAmJiBjc3QudHlwZSA9PT0gJ2RvY3VtZW50JylcbiAgICAgICAgY3N0ID0geyBzdGFydDogY3N0LnN0YXJ0LCB2YWx1ZTogY3N0LnZhbHVlIH07XG4gICAgX3Zpc2l0KE9iamVjdC5mcmVlemUoW10pLCBjc3QsIHZpc2l0b3IpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdC5CUkVBSyA9IEJSRUFLO1xuLyoqIERvIG5vdCB2aXNpdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgaXRlbSAqL1xudmlzaXQuU0tJUCA9IFNLSVA7XG4vKiogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gKi9cbnZpc2l0LlJFTU9WRSA9IFJFTU9WRTtcbi8qKiBGaW5kIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290ICovXG52aXNpdC5pdGVtQXRQYXRoID0gKGNzdCwgcGF0aCkgPT4ge1xuICAgIGxldCBpdGVtID0gY3N0O1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCBpbmRleF0gb2YgcGF0aCkge1xuICAgICAgICBjb25zdCB0b2sgPSBpdGVtPy5bZmllbGRdO1xuICAgICAgICBpZiAodG9rICYmICdpdGVtcycgaW4gdG9rKSB7XG4gICAgICAgICAgICBpdGVtID0gdG9rLml0ZW1zW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbn07XG4vKipcbiAqIEdldCB0aGUgaW1tZWRpYXRlIHBhcmVudCBjb2xsZWN0aW9uIG9mIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290LlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgY29sbGVjdGlvbiBpcyBub3QgZm91bmQsIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4gaWYgdGhlIGl0ZW0gaXRzZWxmIGV4aXN0cy5cbiAqL1xudmlzaXQucGFyZW50Q29sbGVjdGlvbiA9IChjc3QsIHBhdGgpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB2aXNpdC5pdGVtQXRQYXRoKGNzdCwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIGNvbnN0IGZpZWxkID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdWzBdO1xuICAgIGNvbnN0IGNvbGwgPSBwYXJlbnQ/LltmaWVsZF07XG4gICAgaWYgKGNvbGwgJiYgJ2l0ZW1zJyBpbiBjb2xsKVxuICAgICAgICByZXR1cm4gY29sbDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBjb2xsZWN0aW9uIG5vdCBmb3VuZCcpO1xufTtcbmZ1bmN0aW9uIF92aXNpdChwYXRoLCBpdGVtLCB2aXNpdG9yKSB7XG4gICAgbGV0IGN0cmwgPSB2aXNpdG9yKGl0ZW0sIHBhdGgpO1xuICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ3N5bWJvbCcpXG4gICAgICAgIHJldHVybiBjdHJsO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgWydrZXknLCAndmFsdWUnXSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGl0ZW1bZmllbGRdO1xuICAgICAgICBpZiAodG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gX3Zpc2l0KE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQoW1tmaWVsZCwgaV1dKSksIHRva2VuLml0ZW1zW2ldLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ2Z1bmN0aW9uJyAmJiBmaWVsZCA9PT0gJ2tleScpXG4gICAgICAgICAgICAgICAgY3RybCA9IGN0cmwoaXRlbSwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBjdHJsID09PSAnZnVuY3Rpb24nID8gY3RybChpdGVtLCBwYXRoKSA6IGN0cmw7XG59XG5cbmV4cG9ydCB7IHZpc2l0IH07XG4iLCAiZXhwb3J0IHsgY3JlYXRlU2NhbGFyVG9rZW4sIHJlc29sdmVBc1NjYWxhciwgc2V0U2NhbGFyVmFsdWUgfSBmcm9tICcuL2NzdC1zY2FsYXIuanMnO1xuZXhwb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAnLi9jc3Qtc3RyaW5naWZ5LmpzJztcbmV4cG9ydCB7IHZpc2l0IH0gZnJvbSAnLi9jc3QtdmlzaXQuanMnO1xuXG4vKiogVGhlIGJ5dGUgb3JkZXIgbWFyayAqL1xuY29uc3QgQk9NID0gJ1xcdXtGRUZGfSc7XG4vKiogU3RhcnQgb2YgZG9jLW1vZGUgKi9cbmNvbnN0IERPQ1VNRU5UID0gJ1xceDAyJzsgLy8gQzA6IFN0YXJ0IG9mIFRleHRcbi8qKiBVbmV4cGVjdGVkIGVuZCBvZiBmbG93LW1vZGUgKi9cbmNvbnN0IEZMT1dfRU5EID0gJ1xceDE4JzsgLy8gQzA6IENhbmNlbFxuLyoqIE5leHQgdG9rZW4gaXMgYSBzY2FsYXIgdmFsdWUgKi9cbmNvbnN0IFNDQUxBUiA9ICdcXHgxZic7IC8vIEMwOiBVbml0IFNlcGFyYXRvclxuLyoqIEByZXR1cm5zIGB0cnVlYCBpZiBgdG9rZW5gIGlzIGEgZmxvdyBvciBibG9jayBjb2xsZWN0aW9uICovXG5jb25zdCBpc0NvbGxlY3Rpb24gPSAodG9rZW4pID0+ICEhdG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbjtcbi8qKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYHRva2VuYCBpcyBhIGZsb3cgb3IgYmxvY2sgc2NhbGFyOyBub3QgYW4gYWxpYXMgKi9cbmNvbnN0IGlzU2NhbGFyID0gKHRva2VuKSA9PiAhIXRva2VuICYmXG4gICAgKHRva2VuLnR5cGUgPT09ICdzY2FsYXInIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09ICdzaW5nbGUtcXVvdGVkLXNjYWxhcicgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJyB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSAnYmxvY2stc2NhbGFyJyk7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyoqIEdldCBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIGxleGVyIHRva2VuICovXG5mdW5jdGlvbiBwcmV0dHlUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSBCT006XG4gICAgICAgICAgICByZXR1cm4gJzxCT00+JztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnPERPQz4nO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICc8RkxPV19FTkQ+JztcbiAgICAgICAgY2FzZSBTQ0FMQVI6XG4gICAgICAgICAgICByZXR1cm4gJzxTQ0FMQVI+JztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0b2tlbik7XG4gICAgfVxufVxuLyoqIElkZW50aWZ5IHRoZSB0eXBlIG9mIGEgbGV4ZXIgdG9rZW4uIE1heSByZXR1cm4gYG51bGxgIGZvciB1bmtub3duIHRva2Vucy4gKi9cbmZ1bmN0aW9uIHRva2VuVHlwZShzb3VyY2UpIHtcbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIEJPTTpcbiAgICAgICAgICAgIHJldHVybiAnYnl0ZS1vcmRlci1tYXJrJztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnZG9jLW1vZGUnO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LWVycm9yLWVuZCc7XG4gICAgICAgIGNhc2UgU0NBTEFSOlxuICAgICAgICAgICAgcmV0dXJuICdzY2FsYXInO1xuICAgICAgICBjYXNlICctLS0nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2Mtc3RhcnQnO1xuICAgICAgICBjYXNlICcuLi4nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2MtZW5kJztcbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxyXFxuJzpcbiAgICAgICAgICAgIHJldHVybiAnbmV3bGluZSc7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgcmV0dXJuICdzZXEtaXRlbS1pbmQnO1xuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgIHJldHVybiAnZXhwbGljaXQta2V5LWluZCc7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgICAgcmV0dXJuICdtYXAtdmFsdWUtaW5kJztcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLXN0YXJ0JztcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLWVuZCc7XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1zdGFydCc7XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1lbmQnO1xuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWEnO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNvdXJjZVswXSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgcmV0dXJuICdkaXJlY3RpdmUtbGluZSc7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0dXJuICdhbGlhcyc7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgcmV0dXJuICdhbmNob3InO1xuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICAgIHJldHVybiAndGFnJztcbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgIHJldHVybiAnc2luZ2xlLXF1b3RlZC1zY2FsYXInO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgcmV0dXJuICdibG9jay1zY2FsYXItaGVhZGVyJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7IEJPTSwgRE9DVU1FTlQsIEZMT1dfRU5ELCBTQ0FMQVIsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIsIHByZXR0eVRva2VuLCB0b2tlblR5cGUgfTtcbiIsICJpbXBvcnQgeyBCT00sIERPQ1VNRU5ULCBGTE9XX0VORCwgU0NBTEFSIH0gZnJvbSAnLi9jc3QuanMnO1xuXG4vKlxuU1RBUlQgLT4gc3RyZWFtXG5cbnN0cmVhbVxuICBkaXJlY3RpdmUgLT4gbGluZS1lbmQgLT4gc3RyZWFtXG4gIGluZGVudCArIGxpbmUtZW5kIC0+IHN0cmVhbVxuICBbZWxzZV0gLT4gbGluZS1zdGFydFxuXG5saW5lLWVuZFxuICBjb21tZW50IC0+IGxpbmUtZW5kXG4gIG5ld2xpbmUgLT4gLlxuICBpbnB1dC1lbmQgLT4gRU5EXG5cbmxpbmUtc3RhcnRcbiAgZG9jLXN0YXJ0IC0+IGRvY1xuICBkb2MtZW5kIC0+IHN0cmVhbVxuICBbZWxzZV0gLT4gaW5kZW50IC0+IGJsb2NrLXN0YXJ0XG5cbmJsb2NrLXN0YXJ0XG4gIHNlcS1pdGVtLXN0YXJ0IC0+IGJsb2NrLXN0YXJ0XG4gIGV4cGxpY2l0LWtleS1zdGFydCAtPiBibG9jay1zdGFydFxuICBtYXAtdmFsdWUtc3RhcnQgLT4gYmxvY2stc3RhcnRcbiAgW2Vsc2VdIC0+IGRvY1xuXG5kb2NcbiAgbGluZS1lbmQgLT4gbGluZS1zdGFydFxuICBzcGFjZXMgLT4gZG9jXG4gIGFuY2hvciAtPiBkb2NcbiAgdGFnIC0+IGRvY1xuICBmbG93LXN0YXJ0IC0+IGZsb3cgLT4gZG9jXG4gIGZsb3ctZW5kIC0+IGVycm9yIC0+IGRvY1xuICBzZXEtaXRlbS1zdGFydCAtPiBlcnJvciAtPiBkb2NcbiAgZXhwbGljaXQta2V5LXN0YXJ0IC0+IGVycm9yIC0+IGRvY1xuICBtYXAtdmFsdWUtc3RhcnQgLT4gZG9jXG4gIGFsaWFzIC0+IGRvY1xuICBxdW90ZS1zdGFydCAtPiBxdW90ZWQtc2NhbGFyIC0+IGRvY1xuICBibG9jay1zY2FsYXItaGVhZGVyIC0+IGxpbmUtZW5kIC0+IGJsb2NrLXNjYWxhcihtaW4pIC0+IGxpbmUtc3RhcnRcbiAgW2Vsc2VdIC0+IHBsYWluLXNjYWxhcihmYWxzZSwgbWluKSAtPiBkb2NcblxuZmxvd1xuICBsaW5lLWVuZCAtPiBmbG93XG4gIHNwYWNlcyAtPiBmbG93XG4gIGFuY2hvciAtPiBmbG93XG4gIHRhZyAtPiBmbG93XG4gIGZsb3ctc3RhcnQgLT4gZmxvdyAtPiBmbG93XG4gIGZsb3ctZW5kIC0+IC5cbiAgc2VxLWl0ZW0tc3RhcnQgLT4gZXJyb3IgLT4gZmxvd1xuICBleHBsaWNpdC1rZXktc3RhcnQgLT4gZmxvd1xuICBtYXAtdmFsdWUtc3RhcnQgLT4gZmxvd1xuICBhbGlhcyAtPiBmbG93XG4gIHF1b3RlLXN0YXJ0IC0+IHF1b3RlZC1zY2FsYXIgLT4gZmxvd1xuICBjb21tYSAtPiBmbG93XG4gIFtlbHNlXSAtPiBwbGFpbi1zY2FsYXIodHJ1ZSwgMCkgLT4gZmxvd1xuXG5xdW90ZWQtc2NhbGFyXG4gIHF1b3RlLWVuZCAtPiAuXG4gIFtlbHNlXSAtPiBxdW90ZWQtc2NhbGFyXG5cbmJsb2NrLXNjYWxhcihtaW4pXG4gIG5ld2xpbmUgKyBwZWVrKGluZGVudCA8IG1pbikgLT4gLlxuICBbZWxzZV0gLT4gYmxvY2stc2NhbGFyKG1pbilcblxucGxhaW4tc2NhbGFyKGlzLWZsb3csIG1pbilcbiAgc2NhbGFyLWVuZChpcy1mbG93KSAtPiAuXG4gIHBlZWsobmV3bGluZSArIChpbmRlbnQgPCBtaW4pKSAtPiAuXG4gIFtlbHNlXSAtPiBwbGFpbi1zY2FsYXIobWluKVxuKi9cbmZ1bmN0aW9uIGlzRW1wdHkoY2gpIHtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxyJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmNvbnN0IGhleERpZ2l0cyA9IG5ldyBTZXQoJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnKTtcbmNvbnN0IHRhZ0NoYXJzID0gbmV3IFNldChcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LSM7Lz86QCY9KyRfLiF+KicoKVwiKTtcbmNvbnN0IGZsb3dJbmRpY2F0b3JDaGFycyA9IG5ldyBTZXQoJyxbXXt9Jyk7XG5jb25zdCBpbnZhbGlkQW5jaG9yQ2hhcnMgPSBuZXcgU2V0KCcgLFtde31cXG5cXHJcXHQnKTtcbmNvbnN0IGlzTm90QW5jaG9yQ2hhciA9IChjaCkgPT4gIWNoIHx8IGludmFsaWRBbmNob3JDaGFycy5oYXMoY2gpO1xuLyoqXG4gKiBTcGxpdHMgYW4gaW5wdXQgc3RyaW5nIGludG8gbGV4aWNhbCB0b2tlbnMsIGkuZS4gc21hbGxlciBzdHJpbmdzIHRoYXQgYXJlXG4gKiBlYXNpbHkgaWRlbnRpZmlhYmxlIGJ5IGB0b2tlbnMudG9rZW5UeXBlKClgLlxuICpcbiAqIExleGluZyBzdGFydHMgYWx3YXlzIGluIGEgXCJzdHJlYW1cIiBjb250ZXh0LiBJbmNvbXBsZXRlIGlucHV0IG1heSBiZSBidWZmZXJlZFxuICogdW50aWwgYSBjb21wbGV0ZSB0b2tlbiBjYW4gYmUgZW1pdHRlZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBzbGljZXMgb2YgdGhlIG9yaWdpbmFsIGlucHV0LCB0aGUgZm9sbG93aW5nIGNvbnRyb2wgY2hhcmFjdGVyc1xuICogbWF5IGFsc28gYmUgZW1pdHRlZDpcbiAqXG4gKiAtIGBcXHgwMmAgKFN0YXJ0IG9mIFRleHQpOiBBIGRvY3VtZW50IHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHRva2VuXG4gKiAtIGBcXHgxOGAgKENhbmNlbCk6IFVuZXhwZWN0ZWQgZW5kIG9mIGZsb3ctbW9kZSAoaW5kaWNhdGVzIGFuIGVycm9yKVxuICogLSBgXFx4MWZgIChVbml0IFNlcGFyYXRvcik6IE5leHQgdG9rZW4gaXMgYSBzY2FsYXIgdmFsdWVcbiAqIC0gYFxcdXtGRUZGfWAgKEJ5dGUgb3JkZXIgbWFyayk6IEVtaXR0ZWQgc2VwYXJhdGVseSBvdXRzaWRlIGRvY3VtZW50c1xuICovXG5jbGFzcyBMZXhlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBtYXJrcyB0aGUgZW5kIG9mXG4gICAgICAgICAqIGFsbCBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdEVuZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRXhwbGljaXQgaW5kZW50IHNldCBpbiBibG9jayBzY2FsYXIgaGVhZGVyLCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudFxuICAgICAgICAgKiBtaW5pbXVtIGluZGVudCwgc28gZS5nLiBzZXQgdG8gMSBmcm9tIGEgaGVhZGVyIGB8MitgLiBTZXQgdG8gLTEgaWYgbm90XG4gICAgICAgICAqIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCA9IC0xO1xuICAgICAgICAvKipcbiAgICAgICAgICogQmxvY2sgc2NhbGFycyB0aGF0IGluY2x1ZGUgYSArIChrZWVwKSBjaG9tcGluZyBpbmRpY2F0b3IgaW4gdGhlaXIgaGVhZGVyXG4gICAgICAgICAqIGluY2x1ZGUgdHJhaWxpbmcgZW1wdHkgbGluZXMsIHdoaWNoIGFyZSBvdGhlcndpc2UgZXhjbHVkZWQgZnJvbSB0aGVcbiAgICAgICAgICogc2NhbGFyJ3MgY29udGVudHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2NrU2NhbGFyS2VlcCA9IGZhbHNlO1xuICAgICAgICAvKiogQ3VycmVudCBpbnB1dCAqL1xuICAgICAgICB0aGlzLmJ1ZmZlciA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmxhZyBub3Rpbmcgd2hldGhlciB0aGUgbWFwIHZhbHVlIGluZGljYXRvciA6IGNhbiBpbW1lZGlhdGVseSBmb2xsb3cgdGhpc1xuICAgICAgICAgKiBub2RlIHdpdGhpbiBhIGZsb3cgY29udGV4dC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmxvd0tleSA9IGZhbHNlO1xuICAgICAgICAvKiogQ291bnQgb2Ygc3Vycm91bmRpbmcgZmxvdyBjb2xsZWN0aW9uIGxldmVscy4gKi9cbiAgICAgICAgdGhpcy5mbG93TGV2ZWwgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW11bSBsZXZlbCBvZiBpbmRlbnRhdGlvbiByZXF1aXJlZCBmb3IgbmV4dCBsaW5lcyB0byBiZSBwYXJzZWQgYXMgYVxuICAgICAgICAgKiBwYXJ0IG9mIHRoZSBjdXJyZW50IHNjYWxhciB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IDA7XG4gICAgICAgIC8qKiBJbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGUgY3VycmVudCBsaW5lLiAqL1xuICAgICAgICB0aGlzLmluZGVudFZhbHVlID0gMDtcbiAgICAgICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBuZXh0IFxcbiBjaGFyYWN0ZXIuICovXG4gICAgICAgIHRoaXMubGluZUVuZFBvcyA9IG51bGw7XG4gICAgICAgIC8qKiBTdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBsZXhlciBpZiByZWFjaGluZyB0aGUgZW5kIG9mIGluY3BvbXBsZXRlIGlucHV0ICovXG4gICAgICAgIHRoaXMubmV4dCA9IG51bGw7XG4gICAgICAgIC8qKiBBIHBvaW50ZXIgdG8gYGJ1ZmZlcmA7IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBsZXhlci4gKi9cbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBZQU1MIHRva2VucyBmcm9tIHRoZSBgc291cmNlYCBzdHJpbmcuIElmIGBpbmNvbXBsZXRlYCxcbiAgICAgKiBhIHBhcnQgb2YgdGhlIGxhc3QgbGluZSBtYXkgYmUgbGVmdCBhcyBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgZ2VuZXJhdG9yIG9mIGxleGljYWwgdG9rZW5zXG4gICAgICovXG4gICAgKmxleChzb3VyY2UsIGluY29tcGxldGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzb3VyY2UgaXMgbm90IGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyID8gdGhpcy5idWZmZXIgKyBzb3VyY2UgOiBzb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbmRQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXRFbmQgPSAhaW5jb21wbGV0ZTtcbiAgICAgICAgbGV0IG5leHQgPSB0aGlzLm5leHQgPz8gJ3N0cmVhbSc7XG4gICAgICAgIHdoaWxlIChuZXh0ICYmIChpbmNvbXBsZXRlIHx8IHRoaXMuaGFzQ2hhcnMoMSkpKVxuICAgICAgICAgICAgbmV4dCA9IHlpZWxkKiB0aGlzLnBhcnNlTmV4dChuZXh0KTtcbiAgICB9XG4gICAgYXRMaW5lRW5kKCkge1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmJ1ZmZlcltpXTtcbiAgICAgICAgd2hpbGUgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKVxuICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsrK2ldO1xuICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnIycgfHwgY2ggPT09ICdcXG4nKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbaSArIDFdID09PSAnXFxuJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGFyQXQobikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MgKyBuXTtcbiAgICB9XG4gICAgY29udGludWVTY2FsYXIob2Zmc2V0KSB7XG4gICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW29mZnNldF07XG4gICAgICAgIGlmICh0aGlzLmluZGVudE5leHQgPiAwKSB7XG4gICAgICAgICAgICBsZXQgaW5kZW50ID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpbmRlbnQgKyBvZmZzZXRdO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1ZmZlcltpbmRlbnQgKyBvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJ1xcbicgfHwgKCFuZXh0ICYmICF0aGlzLmF0RW5kKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIGluZGVudCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2ggPT09ICdcXG4nIHx8IGluZGVudCA+PSB0aGlzLmluZGVudE5leHQgfHwgKCFjaCAmJiAhdGhpcy5hdEVuZClcbiAgICAgICAgICAgICAgICA/IG9mZnNldCArIGluZGVudFxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcuJykge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLmJ1ZmZlci5zdWJzdHIob2Zmc2V0LCAzKTtcbiAgICAgICAgICAgIGlmICgoZHQgPT09ICctLS0nIHx8IGR0ID09PSAnLi4uJykgJiYgaXNFbXB0eSh0aGlzLmJ1ZmZlcltvZmZzZXQgKyAzXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICAgIGdldExpbmUoKSB7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLmxpbmVFbmRQb3M7XG4gICAgICAgIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJyB8fCAoZW5kICE9PSAtMSAmJiBlbmQgPCB0aGlzLnBvcykpIHtcbiAgICAgICAgICAgIGVuZCA9IHRoaXMuYnVmZmVyLmluZGV4T2YoJ1xcbicsIHRoaXMucG9zKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVuZFBvcyA9IGVuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0RW5kID8gdGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zKSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlcltlbmQgLSAxXSA9PT0gJ1xccicpXG4gICAgICAgICAgICBlbmQgLT0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcywgZW5kKTtcbiAgICB9XG4gICAgaGFzQ2hhcnMobikge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgKyBuIDw9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICB9XG4gICAgc2V0TmV4dChzdGF0ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgdGhpcy5saW5lRW5kUG9zID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZXh0ID0gc3RhdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwZWVrKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cih0aGlzLnBvcywgbik7XG4gICAgfVxuICAgICpwYXJzZU5leHQobmV4dCkge1xuICAgICAgICBzd2l0Y2ggKG5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmVhbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlU3RyZWFtKCk7XG4gICAgICAgICAgICBjYXNlICdsaW5lLXN0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrLXN0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VCbG9ja1N0YXJ0KCk7XG4gICAgICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZURvY3VtZW50KCk7XG4gICAgICAgICAgICBjYXNlICdmbG93JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VGbG93Q29sbGVjdGlvbigpO1xuICAgICAgICAgICAgY2FzZSAncXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlUXVvdGVkU2NhbGFyKCk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUJsb2NrU2NhbGFyKCk7XG4gICAgICAgICAgICBjYXNlICdwbGFpbi1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZVBsYWluU2NhbGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnBhcnNlU3RyZWFtKCkge1xuICAgICAgICBsZXQgbGluZSA9IHRoaXMuZ2V0TGluZSgpO1xuICAgICAgICBpZiAobGluZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ3N0cmVhbScpO1xuICAgICAgICBpZiAobGluZVswXSA9PT0gQk9NKSB7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVbMF0gPT09ICclJykge1xuICAgICAgICAgICAgbGV0IGRpckVuZCA9IGxpbmUubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IGNzID0gbGluZS5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICB3aGlsZSAoY3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2ggPSBsaW5lW2NzIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpckVuZCA9IGNzIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjcyA9IGxpbmUuaW5kZXhPZignIycsIGNzICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaCA9IGxpbmVbZGlyRW5kIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKVxuICAgICAgICAgICAgICAgICAgICBkaXJFbmQgLT0gMTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbiA9ICh5aWVsZCogdGhpcy5wdXNoQ291bnQoZGlyRW5kKSkgKyAoeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKSk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBuKTsgLy8gcG9zc2libGUgY29tbWVudFxuICAgICAgICAgICAgdGhpcy5wdXNoTmV3bGluZSgpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJlYW0nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF0TGluZUVuZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBzcCA9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBzcCk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoTmV3bGluZSgpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJlYW0nO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIERPQ1VNRU5UO1xuICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICB9XG4gICAgKnBhcnNlTGluZVN0YXJ0KCkge1xuICAgICAgICBjb25zdCBjaCA9IHRoaXMuY2hhckF0KDApO1xuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnbGluZS1zdGFydCcpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJy4nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXRFbmQgJiYgIXRoaXMuaGFzQ2hhcnMoNCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnbGluZS1zdGFydCcpO1xuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMucGVlaygzKTtcbiAgICAgICAgICAgIGlmICgocyA9PT0gJy0tLScgfHwgcyA9PT0gJy4uLicpICYmIGlzRW1wdHkodGhpcy5jaGFyQXQoMykpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaENvdW50KDMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50VmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMgPT09ICctLS0nID8gJ2RvYycgOiAnc3RyZWFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGVudFZhbHVlID0geWllbGQqIHRoaXMucHVzaFNwYWNlcyhmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLmluZGVudE5leHQgPiB0aGlzLmluZGVudFZhbHVlICYmICFpc0VtcHR5KHRoaXMuY2hhckF0KDEpKSlcbiAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IHRoaXMuaW5kZW50VmFsdWU7XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUJsb2NrU3RhcnQoKTtcbiAgICB9XG4gICAgKnBhcnNlQmxvY2tTdGFydCgpIHtcbiAgICAgICAgY29uc3QgW2NoMCwgY2gxXSA9IHRoaXMucGVlaygyKTtcbiAgICAgICAgaWYgKCFjaDEgJiYgIXRoaXMuYXRFbmQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdibG9jay1zdGFydCcpO1xuICAgICAgICBpZiAoKGNoMCA9PT0gJy0nIHx8IGNoMCA9PT0gJz8nIHx8IGNoMCA9PT0gJzonKSAmJiBpc0VtcHR5KGNoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSAoeWllbGQqIHRoaXMucHVzaENvdW50KDEpKSArICh5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IHRoaXMuaW5kZW50VmFsdWUgKyAxO1xuICAgICAgICAgICAgdGhpcy5pbmRlbnRWYWx1ZSArPSBuO1xuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlQmxvY2tTdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZG9jJztcbiAgICB9XG4gICAgKnBhcnNlRG9jdW1lbnQoKSB7XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmdldExpbmUoKTtcbiAgICAgICAgaWYgKGxpbmUgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdkb2MnKTtcbiAgICAgICAgbGV0IG4gPSB5aWVsZCogdGhpcy5wdXNoSW5kaWNhdG9ycygpO1xuICAgICAgICBzd2l0Y2ggKGxpbmVbbl0pIHtcbiAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudChsaW5lLmxlbmd0aCAtIG4pO1xuICAgICAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hOZXdsaW5lKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlTGluZVN0YXJ0KCk7XG4gICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvclxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvYyc7XG4gICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoVW50aWwoaXNOb3RBbmNob3JDaGFyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvYyc7XG4gICAgICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO1xuICAgICAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICBuICs9IHlpZWxkKiB0aGlzLnBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoKTtcbiAgICAgICAgICAgICAgICBuICs9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaENvdW50KGxpbmUubGVuZ3RoIC0gbik7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaE5ld2xpbmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VCbG9ja1NjYWxhcigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VQbGFpblNjYWxhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwYXJzZUZsb3dDb2xsZWN0aW9uKCkge1xuICAgICAgICBsZXQgbmwsIHNwO1xuICAgICAgICBsZXQgaW5kZW50ID0gLTE7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIG5sID0geWllbGQqIHRoaXMucHVzaE5ld2xpbmUoKTtcbiAgICAgICAgICAgIGlmIChubCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcCA9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50VmFsdWUgPSBpbmRlbnQgPSBzcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwICs9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgIH0gd2hpbGUgKG5sICsgc3AgPiAwKTtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuZ2V0TGluZSgpO1xuICAgICAgICBpZiAobGluZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ2Zsb3cnKTtcbiAgICAgICAgaWYgKChpbmRlbnQgIT09IC0xICYmIGluZGVudCA8IHRoaXMuaW5kZW50TmV4dCAmJiBsaW5lWzBdICE9PSAnIycpIHx8XG4gICAgICAgICAgICAoaW5kZW50ID09PSAwICYmXG4gICAgICAgICAgICAgICAgKGxpbmUuc3RhcnRzV2l0aCgnLS0tJykgfHwgbGluZS5zdGFydHNXaXRoKCcuLi4nKSkgJiZcbiAgICAgICAgICAgICAgICBpc0VtcHR5KGxpbmVbM10pKSkge1xuICAgICAgICAgICAgLy8gQWxsb3dpbmcgZm9yIHRoZSB0ZXJtaW5hbCBdIG9yIH0gYXQgdGhlIHNhbWUgKHJhdGhlciB0aGFuIGdyZWF0ZXIpXG4gICAgICAgICAgICAvLyBpbmRlbnQgbGV2ZWwgYXMgdGhlIGluaXRpYWwgWyBvciB7IGlzIHRlY2huaWNhbGx5IGludmFsaWQsIGJ1dFxuICAgICAgICAgICAgLy8gZmFpbGluZyBoZXJlIHdvdWxkIGJlIHN1cnByaXNpbmcgdG8gdXNlcnMuXG4gICAgICAgICAgICBjb25zdCBhdEZsb3dFbmRNYXJrZXIgPSBpbmRlbnQgPT09IHRoaXMuaW5kZW50TmV4dCAtIDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIChsaW5lWzBdID09PSAnXScgfHwgbGluZVswXSA9PT0gJ30nKTtcbiAgICAgICAgICAgIGlmICghYXRGbG93RW5kTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd0xldmVsID0gMDtcbiAgICAgICAgICAgICAgICB5aWVsZCBGTE9XX0VORDtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbiA9IDA7XG4gICAgICAgIHdoaWxlIChsaW5lW25dID09PSAnLCcpIHtcbiAgICAgICAgICAgIG4gKz0geWllbGQqIHRoaXMucHVzaENvdW50KDEpO1xuICAgICAgICAgICAgbiArPSB5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbiArPSB5aWVsZCogdGhpcy5wdXNoSW5kaWNhdG9ycygpO1xuICAgICAgICBzd2l0Y2ggKGxpbmVbbl0pIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmxvdyc7XG4gICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Zsb3cnO1xuICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93TGV2ZWwgKz0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Zsb3cnO1xuICAgICAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCAtPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dMZXZlbCA/ICdmbG93JyA6ICdkb2MnO1xuICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaFVudGlsKGlzTm90QW5jaG9yQ2hhcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VRdW90ZWRTY2FsYXIoKTtcbiAgICAgICAgICAgIGNhc2UgJzonOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuY2hhckF0KDEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dLZXkgfHwgaXNFbXB0eShuZXh0KSB8fCBuZXh0ID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VQbGFpblNjYWxhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwYXJzZVF1b3RlZFNjYWxhcigpIHtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLmNoYXJBdCgwKTtcbiAgICAgICAgbGV0IGVuZCA9IHRoaXMuYnVmZmVyLmluZGV4T2YocXVvdGUsIHRoaXMucG9zICsgMSk7XG4gICAgICAgIGlmIChxdW90ZSA9PT0gXCInXCIpIHtcbiAgICAgICAgICAgIHdoaWxlIChlbmQgIT09IC0xICYmIHRoaXMuYnVmZmVyW2VuZCArIDFdID09PSBcIidcIilcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlci5pbmRleE9mKFwiJ1wiLCBlbmQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZVxuICAgICAgICAgICAgd2hpbGUgKGVuZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgbiA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyW2VuZCAtIDEgLSBuXSA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgICAgICAgICBuICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG4gJSAyID09PSAwKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlci5pbmRleE9mKCdcIicsIGVuZCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgbG9va2luZyBmb3IgbmV3bGluZXMgd2l0aGluIHRoZSBxdW90ZXNcbiAgICAgICAgY29uc3QgcWIgPSB0aGlzLmJ1ZmZlci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgICAgICAgbGV0IG5sID0gcWIuaW5kZXhPZignXFxuJywgdGhpcy5wb3MpO1xuICAgICAgICBpZiAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICB3aGlsZSAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3MgPSB0aGlzLmNvbnRpbnVlU2NhbGFyKG5sICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNzID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgbmwgPSBxYi5pbmRleE9mKCdcXG4nLCBjcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvciBjYXVzZWQgYnkgYW4gdW5leHBlY3RlZCB1bmluZGVudFxuICAgICAgICAgICAgICAgIGVuZCA9IG5sIC0gKHFiW25sIC0gMV0gPT09ICdcXHInID8gMiA6IDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXRFbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgncXVvdGVkLXNjYWxhcicpO1xuICAgICAgICAgICAgZW5kID0gdGhpcy5idWZmZXIubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hUb0luZGV4KGVuZCArIDEsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvd0xldmVsID8gJ2Zsb3cnIDogJ2RvYyc7XG4gICAgfVxuICAgICpwYXJzZUJsb2NrU2NhbGFySGVhZGVyKCkge1xuICAgICAgICB0aGlzLmJsb2NrU2NhbGFySW5kZW50ID0gLTE7XG4gICAgICAgIHRoaXMuYmxvY2tTY2FsYXJLZWVwID0gZmFsc2U7XG4gICAgICAgIGxldCBpID0gdGhpcy5wb3M7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgICAgICBpZiAoY2ggPT09ICcrJylcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrU2NhbGFyS2VlcCA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmIChjaCA+ICcwJyAmJiBjaCA8PSAnOScpXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCA9IE51bWJlcihjaCkgLSAxO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2ggIT09ICctJylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaFVudGlsKGNoID0+IGlzRW1wdHkoY2gpIHx8IGNoID09PSAnIycpO1xuICAgIH1cbiAgICAqcGFyc2VCbG9ja1NjYWxhcigpIHtcbiAgICAgICAgbGV0IG5sID0gdGhpcy5wb3MgLSAxOyAvLyBtYXkgYmUgLTEgaWYgdGhpcy5wb3MgPT09IDBcbiAgICAgICAgbGV0IGluZGVudCA9IDA7XG4gICAgICAgIGxldCBjaDtcbiAgICAgICAgbG9vcDogZm9yIChsZXQgaSA9IHRoaXMucG9zOyAoY2ggPSB0aGlzLmJ1ZmZlcltpXSk7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgICAgICAgbmwgPSBpO1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1ZmZlcltpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCAmJiAhdGhpcy5hdEVuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ2Jsb2NrLXNjYWxhcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IC8vIGZhbGx0aHJvdWdoXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnYmxvY2stc2NhbGFyJyk7XG4gICAgICAgIGlmIChpbmRlbnQgPj0gdGhpcy5pbmRlbnROZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ibG9ja1NjYWxhckluZGVudCA9PT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID0gaW5kZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCArICh0aGlzLmluZGVudE5leHQgPT09IDAgPyAxIDogdGhpcy5pbmRlbnROZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcyA9IHRoaXMuY29udGludWVTY2FsYXIobmwgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY3MgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuYnVmZmVyLmluZGV4T2YoJ1xcbicsIGNzKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKG5sICE9PSAtMSk7XG4gICAgICAgICAgICBpZiAobmwgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdibG9jay1zY2FsYXInKTtcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFpbGluZyBpbnN1ZmZpY2llbnRseSBpbmRlbnRlZCB0YWJzIGFyZSBpbnZhbGlkLlxuICAgICAgICAvLyBUbyBjYXRjaCB0aGF0IGR1cmluZyBwYXJzaW5nLCB3ZSBpbmNsdWRlIHRoZW0gaW4gdGhlIGJsb2NrIHNjYWxhciB2YWx1ZS5cbiAgICAgICAgbGV0IGkgPSBubCArIDE7XG4gICAgICAgIGNoID0gdGhpcy5idWZmZXJbaV07XG4gICAgICAgIHdoaWxlIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsrK2ldO1xuICAgICAgICBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICB3aGlsZSAoY2ggPT09ICdcXHQnIHx8IGNoID09PSAnICcgfHwgY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgICAgICBubCA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmJsb2NrU2NhbGFyS2VlcCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGxldCBpID0gbmwgLSAxO1xuICAgICAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbLS1pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGk7IC8vIERyb3AgdGhlIGxpbmUgaWYgbGFzdCBjaGFyIG5vdCBtb3JlIGluZGVudGVkXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoID09PSAnICcpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbLS1pXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nICYmIGkgPj0gdGhpcy5wb3MgJiYgaSArIDEgKyBpbmRlbnQgPiBsYXN0Q2hhcilcbiAgICAgICAgICAgICAgICAgICAgbmwgPSBpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IHdoaWxlICh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBTQ0FMQVI7XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hUb0luZGV4KG5sICsgMSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUxpbmVTdGFydCgpO1xuICAgIH1cbiAgICAqcGFyc2VQbGFpblNjYWxhcigpIHtcbiAgICAgICAgY29uc3QgaW5GbG93ID0gdGhpcy5mbG93TGV2ZWwgPiAwO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5wb3MgLSAxO1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zIC0gMTtcbiAgICAgICAgbGV0IGNoO1xuICAgICAgICB3aGlsZSAoKGNoID0gdGhpcy5idWZmZXJbKytpXSkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJzonKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuYnVmZmVyW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eShuZXh0KSB8fCAoaW5GbG93ICYmIGZsb3dJbmRpY2F0b3JDaGFycy5oYXMobmV4dCkpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNFbXB0eShjaCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHRoaXMuYnVmZmVyW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0aGlzLmJ1ZmZlcltpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgPT09ICcjJyB8fCAoaW5GbG93ICYmIGZsb3dJbmRpY2F0b3JDaGFycy5oYXMobmV4dCkpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5jb250aW51ZVNjYWxhcihpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcyA9PT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IE1hdGgubWF4KGksIGNzIC0gMik7IC8vIHRvIGFkdmFuY2UsIGJ1dCBzdGlsbCBhY2NvdW50IGZvciAnICMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGluRmxvdyAmJiBmbG93SW5kaWNhdG9yQ2hhcnMuaGFzKGNoKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgncGxhaW4tc2NhbGFyJyk7XG4gICAgICAgIHlpZWxkIFNDQUxBUjtcbiAgICAgICAgeWllbGQqIHRoaXMucHVzaFRvSW5kZXgoZW5kICsgMSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBpbkZsb3cgPyAnZmxvdycgOiAnZG9jJztcbiAgICB9XG4gICAgKnB1c2hDb3VudChuKSB7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5idWZmZXIuc3Vic3RyKHRoaXMucG9zLCBuKTtcbiAgICAgICAgICAgIHRoaXMucG9zICs9IG47XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgKnB1c2hUb0luZGV4KGksIGFsbG93RW1wdHkpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zLCBpKTtcbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHlpZWxkIHM7XG4gICAgICAgICAgICB0aGlzLnBvcyArPSBzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxvd0VtcHR5KVxuICAgICAgICAgICAgeWllbGQgJyc7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAqcHVzaEluZGljYXRvcnMoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoKHlpZWxkKiB0aGlzLnB1c2hUYWcoKSkgK1xuICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKSkgK1xuICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaEluZGljYXRvcnMoKSkpO1xuICAgICAgICAgICAgY2FzZSAnJic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeWllbGQqIHRoaXMucHVzaFVudGlsKGlzTm90QW5jaG9yQ2hhcikpICtcbiAgICAgICAgICAgICAgICAgICAgKHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSkpICtcbiAgICAgICAgICAgICAgICAgICAgKHlpZWxkKiB0aGlzLnB1c2hJbmRpY2F0b3JzKCkpKTtcbiAgICAgICAgICAgIGNhc2UgJy0nOiAvLyB0aGlzIGlzIGFuIGVycm9yXG4gICAgICAgICAgICBjYXNlICc/JzogLy8gdGhpcyBpcyBhbiBlcnJvciBvdXRzaWRlIGZsb3cgY29sbGVjdGlvbnNcbiAgICAgICAgICAgIGNhc2UgJzonOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5GbG93ID0gdGhpcy5mbG93TGV2ZWwgPiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoMSA9IHRoaXMuY2hhckF0KDEpO1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KGNoMSkgfHwgKGluRmxvdyAmJiBmbG93SW5kaWNhdG9yQ2hhcnMuaGFzKGNoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5GbG93KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID0gdGhpcy5pbmRlbnRWYWx1ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZmxvd0tleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvd0tleSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCh5aWVsZCogdGhpcy5wdXNoQ291bnQoMSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaEluZGljYXRvcnMoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgKnB1c2hUYWcoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJBdCgxKSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucG9zICsgMjtcbiAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGNoKSAmJiBjaCAhPT0gJz4nKVxuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpXTtcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wdXNoVG9JbmRleChjaCA9PT0gJz4nID8gaSArIDEgOiBpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucG9zICsgMTtcbiAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NoYXJzLmhhcyhjaCkpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyUnICYmXG4gICAgICAgICAgICAgICAgICAgIGhleERpZ2l0cy5oYXModGhpcy5idWZmZXJbaSArIDFdKSAmJlxuICAgICAgICAgICAgICAgICAgICBoZXhEaWdpdHMuaGFzKHRoaXMuYnVmZmVyW2kgKyAyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsoaSArPSAzKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaFRvSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwdXNoTmV3bGluZSgpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0aGlzLmJ1ZmZlclt0aGlzLnBvc107XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaENvdW50KDEpO1xuICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xccicgJiYgdGhpcy5jaGFyQXQoMSkgPT09ICdcXG4nKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgyKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgICpwdXNoU3BhY2VzKGFsbG93VGFicykge1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zIC0gMTtcbiAgICAgICAgbGV0IGNoO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgIH0gd2hpbGUgKGNoID09PSAnICcgfHwgKGFsbG93VGFicyAmJiBjaCA9PT0gJ1xcdCcpKTtcbiAgICAgICAgY29uc3QgbiA9IGkgLSB0aGlzLnBvcztcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsIG4pO1xuICAgICAgICAgICAgdGhpcy5wb3MgPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgIH1cbiAgICAqcHVzaFVudGlsKHRlc3QpIHtcbiAgICAgICAgbGV0IGkgPSB0aGlzLnBvcztcbiAgICAgICAgbGV0IGNoID0gdGhpcy5idWZmZXJbaV07XG4gICAgICAgIHdoaWxlICghdGVzdChjaCkpXG4gICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wdXNoVG9JbmRleChpLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBMZXhlciB9O1xuIiwgIi8qKlxuICogVHJhY2tzIG5ld2xpbmVzIGR1cmluZyBwYXJzaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgYW4gZWZmaWNpZW50IEFQSSBmb3JcbiAqIGRldGVybWluaW5nIHRoZSBvbmUtaW5kZXhlZCBgeyBsaW5lLCBjb2wgfWAgcG9zaXRpb24gZm9yIGFueSBvZmZzZXRcbiAqIHdpdGhpbiB0aGUgaW5wdXQuXG4gKi9cbmNsYXNzIExpbmVDb3VudGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5saW5lU3RhcnRzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTaG91bGQgYmUgY2FsbGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBjYWxsXG4gICAgICAgICAqIGBsaW5lQ291bnRlci5saW5lU3RhcnRzLnNvcnQoKWAgYmVmb3JlIGNhbGxpbmcgYGxpbmVQb3MoKWAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZE5ld0xpbmUgPSAob2Zmc2V0KSA9PiB0aGlzLmxpbmVTdGFydHMucHVzaChvZmZzZXQpO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIGFuZCByZXR1cm5zIHRoZSAxLWluZGV4ZWQgeyBsaW5lLCBjb2wgfVxuICAgICAgICAgKiBwb3NpdGlvbiBvZiBgb2Zmc2V0YC4gSWYgYGxpbmUgPT09IDBgLCBgYWRkTmV3TGluZWAgaGFzIG5ldmVyIGJlZW5cbiAgICAgICAgICogY2FsbGVkIG9yIGBvZmZzZXRgIGlzIGJlZm9yZSB0aGUgZmlyc3Qga25vd24gbmV3bGluZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGluZVBvcyA9IChvZmZzZXQpID0+IHtcbiAgICAgICAgICAgIGxldCBsb3cgPSAwO1xuICAgICAgICAgICAgbGV0IGhpZ2ggPSB0aGlzLmxpbmVTdGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWQgPSAobG93ICsgaGlnaCkgPj4gMTsgLy8gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmVTdGFydHNbbWlkXSA8IG9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lU3RhcnRzW2xvd10gPT09IG9mZnNldClcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsb3cgKyAxLCBjb2w6IDEgfTtcbiAgICAgICAgICAgIGlmIChsb3cgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29sOiBvZmZzZXQgfTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5saW5lU3RhcnRzW2xvdyAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogbG93LCBjb2w6IG9mZnNldCAtIHN0YXJ0ICsgMSB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTGluZUNvdW50ZXIgfTtcbiIsICJpbXBvcnQgeyB0b2tlblR5cGUgfSBmcm9tICcuL2NzdC5qcyc7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG5mdW5jdGlvbiBpbmNsdWRlc1Rva2VuKGxpc3QsIHR5cGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChsaXN0W2ldLnR5cGUgPT09IHR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlJbmRleChsaXN0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHN3aXRjaCAobGlzdFtpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBpc0Zsb3dUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4/LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFByZXZQcm9wcyhwYXJlbnQpIHtcbiAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuc3RhcnQ7XG4gICAgICAgIGNhc2UgJ2Jsb2NrLW1hcCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ID0gcGFyZW50Lml0ZW1zW3BhcmVudC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHJldHVybiBpdC5zZXAgPz8gaXQuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuaXRlbXNbcGFyZW50Lml0ZW1zLmxlbmd0aCAtIDFdLnN0YXJ0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbi8qKiBOb3RlOiBNYXkgbW9kaWZ5IGlucHV0IGFycmF5ICovXG5mdW5jdGlvbiBnZXRGaXJzdEtleVN0YXJ0UHJvcHMocHJldikge1xuICAgIGlmIChwcmV2Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIGxldCBpID0gcHJldi5sZW5ndGg7XG4gICAgbG9vcDogd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgIHN3aXRjaCAocHJldltpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOlxuICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ3NlcS1pdGVtLWluZCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChwcmV2WysraV0/LnR5cGUgPT09ICdzcGFjZScpIHtcbiAgICAgICAgLyogbG9vcCAqL1xuICAgIH1cbiAgICByZXR1cm4gcHJldi5zcGxpY2UoaSwgcHJldi5sZW5ndGgpO1xufVxuZnVuY3Rpb24gZml4Rmxvd1NlcUl0ZW1zKGZjKSB7XG4gICAgaWYgKGZjLnN0YXJ0LnR5cGUgPT09ICdmbG93LXNlcS1zdGFydCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBmYy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0LnNlcCAmJlxuICAgICAgICAgICAgICAgICFpdC52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnZXhwbGljaXQta2V5LWluZCcpICYmXG4gICAgICAgICAgICAgICAgIWluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0LmtleSlcbiAgICAgICAgICAgICAgICAgICAgaXQudmFsdWUgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGbG93VG9rZW4oaXQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZS5lbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC52YWx1ZS5lbmQsIGl0LnNlcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlLmVuZCA9IGl0LnNlcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC5zdGFydCwgaXQuc2VwKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXQuc2VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBIFlBTUwgY29uY3JldGUgc3ludGF4IHRyZWUgKENTVCkgcGFyc2VyXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNyYzogc3RyaW5nID0gLi4uXG4gKiBmb3IgKGNvbnN0IHRva2VuIG9mIG5ldyBQYXJzZXIoKS5wYXJzZShzcmMpKSB7XG4gKiAgIC8vIHRva2VuOiBUb2tlblxuICogfVxuICogYGBgXG4gKlxuICogVG8gdXNlIHRoZSBwYXJzZXIgd2l0aCBhIHVzZXItcHJvdmlkZWQgbGV4ZXI6XG4gKlxuICogYGBgdHNcbiAqIGZ1bmN0aW9uKiBwYXJzZShzb3VyY2U6IHN0cmluZywgbGV4ZXI6IExleGVyKSB7XG4gKiAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICogICBmb3IgKGNvbnN0IGxleGVtZSBvZiBsZXhlci5sZXgoc291cmNlKSlcbiAqICAgICB5aWVsZCogcGFyc2VyLm5leHQobGV4ZW1lKVxuICogICB5aWVsZCogcGFyc2VyLmVuZCgpXG4gKiB9XG4gKlxuICogY29uc3Qgc3JjOiBzdHJpbmcgPSAuLi5cbiAqIGNvbnN0IGxleGVyID0gbmV3IExleGVyKClcbiAqIGZvciAoY29uc3QgdG9rZW4gb2YgcGFyc2Uoc3JjLCBsZXhlcikpIHtcbiAqICAgLy8gdG9rZW46IFRva2VuXG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gb25OZXdMaW5lIC0gSWYgZGVmaW5lZCwgY2FsbGVkIHNlcGFyYXRlbHkgd2l0aCB0aGUgc3RhcnQgcG9zaXRpb24gb2ZcbiAgICAgKiAgIGVhY2ggbmV3IGxpbmUgKGluIGBwYXJzZSgpYCwgaW5jbHVkaW5nIHRoZSBzdGFydCBvZiBpbnB1dCkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob25OZXdMaW5lKSB7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBzcGFjZSBhbmQgc2VxdWVuY2UgaW5kaWNhdG9ycyBjb3VudCBhcyBpbmRlbnRhdGlvbiAqL1xuICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBuZXh0IHRva2VuIGlzIGEgc2NhbGFyIHZhbHVlICovXG4gICAgICAgIHRoaXMuYXRTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgLyoqIEN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi9cbiAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAvKiogQ3VycmVudCBvZmZzZXQgc2luY2UgdGhlIHN0YXJ0IG9mIHBhcnNpbmcgKi9cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICAvKiogT24gdGhlIHNhbWUgbGluZSB3aXRoIGEgYmxvY2sgbWFwIGtleSAqL1xuICAgICAgICB0aGlzLm9uS2V5TGluZSA9IGZhbHNlO1xuICAgICAgICAvKiogVG9wIGluZGljYXRlcyB0aGUgbm9kZSB0aGF0J3MgY3VycmVudGx5IGJlaW5nIGJ1aWx0ICovXG4gICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgLyoqIFRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdG9rZW4sIHNldCBpbiBwYXJzZSgpICovXG4gICAgICAgIHRoaXMuc291cmNlID0gJyc7XG4gICAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0b2tlbiwgc2V0IGluIHBhcnNlKCkgKi9cbiAgICAgICAgdGhpcy50eXBlID0gJyc7XG4gICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBhZnRlciBgbmV4dCgpYFxuICAgICAgICB0aGlzLmxleGVyID0gbmV3IExleGVyKCk7XG4gICAgICAgIHRoaXMub25OZXdMaW5lID0gb25OZXdMaW5lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBgc291cmNlYCBhcyBhIFlBTUwgc3RyZWFtLlxuICAgICAqIElmIGBpbmNvbXBsZXRlYCwgYSBwYXJ0IG9mIHRoZSBsYXN0IGxpbmUgbWF5IGJlIGxlZnQgYXMgYSBidWZmZXIgZm9yIHRoZSBuZXh0IGNhbGwuXG4gICAgICpcbiAgICAgKiBFcnJvcnMgYXJlIG5vdCB0aHJvd24sIGJ1dCB5aWVsZGVkIGFzIGB7IHR5cGU6ICdlcnJvcicsIG1lc3NhZ2UgfWAgdG9rZW5zLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBnZW5lcmF0b3Igb2YgdG9rZW5zIHJlcHJlc2VudGluZyBlYWNoIGRpcmVjdGl2ZSwgZG9jdW1lbnQsIGFuZCBvdGhlciBzdHJ1Y3R1cmUuXG4gICAgICovXG4gICAgKnBhcnNlKHNvdXJjZSwgaW5jb21wbGV0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSAmJiB0aGlzLm9mZnNldCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKDApO1xuICAgICAgICBmb3IgKGNvbnN0IGxleGVtZSBvZiB0aGlzLmxleGVyLmxleChzb3VyY2UsIGluY29tcGxldGUpKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMubmV4dChsZXhlbWUpO1xuICAgICAgICBpZiAoIWluY29tcGxldGUpXG4gICAgICAgICAgICB5aWVsZCogdGhpcy5lbmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWR2YW5jZSB0aGUgcGFyc2VyIGJ5IHRoZSBgc291cmNlYCBvZiBvbmUgbGV4aWNhbCB0b2tlbi5cbiAgICAgKi9cbiAgICAqbmV4dChzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIGlmICh0aGlzLmF0U2NhbGFyKSB7XG4gICAgICAgICAgICB0aGlzLmF0U2NhbGFyID0gZmFsc2U7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0b2tlblR5cGUoc291cmNlKTtcbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYE5vdCBhIFlBTUwgdG9rZW46ICR7c291cmNlfWA7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoeyB0eXBlOiAnZXJyb3InLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBtZXNzYWdlLCBzb3VyY2UgfSk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzY2FsYXInKSB7XG4gICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hdFNjYWxhciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnc2NhbGFyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0ICsgc291cmNlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lICYmIHNvdXJjZVswXSA9PT0gJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jLW1vZGUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctZXJyb3ItZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byBwdXNoIG91dCBhbnkgcmVtYWluaW5nIGNvbnN0cnVjdGlvbnMgKi9cbiAgICAqZW5kKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiAwKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgfVxuICAgIGdldCBzb3VyY2VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc3QgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0O1xuICAgIH1cbiAgICAqc3RlcCgpIHtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5wZWVrKDEpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZG9jLWVuZCcgJiYgKCF0b3AgfHwgdG9wLnR5cGUgIT09ICdkb2MtZW5kJykpIHtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkb2MtZW5kJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdG9wKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnN0cmVhbSgpO1xuICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2N1bWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmRvY3VtZW50KHRvcCk7XG4gICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5zY2FsYXIodG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmJsb2NrU2NhbGFyKHRvcCk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5ibG9ja01hcCh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuYmxvY2tTZXF1ZW5jZSh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuZmxvd0NvbGxlY3Rpb24odG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1lbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5kb2N1bWVudEVuZCh0b3ApO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgIH1cbiAgICBwZWVrKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSBuXTtcbiAgICB9XG4gICAgKnBvcChlcnJvcikge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGVycm9yID8/IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1RyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFjayc7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdlcnJvcicsIG9mZnNldDogdGhpcy5vZmZzZXQsIHNvdXJjZTogJycsIG1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnBlZWsoMSk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2Jsb2NrLXNjYWxhcicpIHtcbiAgICAgICAgICAgICAgICAvLyBCbG9jayBzY2FsYXJzIHVzZSB0aGVpciBwYXJlbnQgcmF0aGVyIHRoYW4gaGVhZGVyIGluZGVudFxuICAgICAgICAgICAgICAgIHRva2VuLmluZGVudCA9ICdpbmRlbnQnIGluIHRvcCA/IHRvcC5pbmRlbnQgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicgJiYgdG9wLnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIGluZGVudCBmb3IgdG9wLWxldmVsIGZsb3cgY29sbGVjdGlvbnNcbiAgICAgICAgICAgICAgICB0b2tlbi5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdmbG93LWNvbGxlY3Rpb24nKVxuICAgICAgICAgICAgICAgIGZpeEZsb3dTZXFJdGVtcyh0b2tlbik7XG4gICAgICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jdW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICB0b3AudmFsdWUgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2NhbGFyJzpcbiAgICAgICAgICAgICAgICAgICAgdG9wLnByb3BzLnB1c2godG9rZW4pOyAvLyBlcnJvclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiB0b2tlbiwgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9ICFpdC5leHBsaWNpdEtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdCA9IHRvcC5pdGVtc1t0b3AuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCB2YWx1ZTogdG9rZW4gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCBrZXk6IHRva2VuLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC52YWx1ZSA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodG9wLnR5cGUgPT09ICdkb2N1bWVudCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLW1hcCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLXNlcScpICYmXG4gICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09ICdibG9jay1tYXAnIHx8IHRva2VuLnR5cGUgPT09ICdibG9jay1zZXEnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0b2tlbi5pdGVtc1t0b2tlbi5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJlxuICAgICAgICAgICAgICAgICAgICAhbGFzdC5zZXAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWxhc3QudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5zdGFydC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbmROb25FbXB0eUluZGV4KGxhc3Quc3RhcnQpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4uaW5kZW50ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0LnN0YXJ0LmV2ZXJ5KHN0ID0+IHN0LnR5cGUgIT09ICdjb21tZW50JyB8fCBzdC5pbmRlbnQgPCB0b2tlbi5pbmRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wLnR5cGUgPT09ICdkb2N1bWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuZW5kID0gbGFzdC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLml0ZW1zLnB1c2goeyBzdGFydDogbGFzdC5zdGFydCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uaXRlbXMuc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnN0cmVhbSgpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RpcmVjdGl2ZS1saW5lJzpcbiAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdkaXJlY3RpdmUnLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBzb3VyY2U6IHRoaXMuc291cmNlIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnYnl0ZS1vcmRlci1tYXJrJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zb3VyY2VUb2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdkb2MtbW9kZSc6XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkb2Mtc3RhcnQnKVxuICAgICAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZG9jKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCAke3RoaXMudHlwZX0gdG9rZW4gaW4gWUFNTCBzdHJlYW1gLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAqZG9jdW1lbnQoZG9jKSB7XG4gICAgICAgIGlmIChkb2MudmFsdWUpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMubGluZUVuZChkb2MpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZG9jLXN0YXJ0Jzoge1xuICAgICAgICAgICAgICAgIGlmIChmaW5kTm9uRW1wdHlJbmRleChkb2Muc3RhcnQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGRvYy5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FuY2hvcic6XG4gICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShkb2MpO1xuICAgICAgICBpZiAoYnYpXG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgZG9jdW1lbnRgLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnNjYWxhcihzY2FsYXIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21hcC12YWx1ZS1pbmQnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gZ2V0UHJldlByb3BzKHRoaXMucGVlaygyKSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGdldEZpcnN0S2V5U3RhcnRQcm9wcyhwcmV2KTtcbiAgICAgICAgICAgIGxldCBzZXA7XG4gICAgICAgICAgICBpZiAoc2NhbGFyLmVuZCkge1xuICAgICAgICAgICAgICAgIHNlcCA9IHNjYWxhci5lbmQ7XG4gICAgICAgICAgICAgICAgc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxhci5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VwID0gW3RoaXMuc291cmNlVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgbWFwID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogc2NhbGFyLm9mZnNldCxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IHNjYWxhci5pbmRlbnQsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IHNjYWxhciwgc2VwIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdID0gbWFwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLmxpbmVFbmQoc2NhbGFyKTtcbiAgICB9XG4gICAgKmJsb2NrU2NhbGFyKHNjYWxhcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBzY2FsYXIucHJvcHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHNjYWxhci5zb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAvLyBibG9jay1zY2FsYXIgc291cmNlIGluY2x1ZGVzIHRyYWlsaW5nIG5ld2xpbmVcbiAgICAgICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChubCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQgKyBubCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBubCA9IHRoaXMuc291cmNlLmluZGV4T2YoJ1xcbicsIG5sKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmJsb2NrTWFwKG1hcCkge1xuICAgICAgICBjb25zdCBpdCA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGl0LnNlcCBpcyB0cnVlLWlzaCBpZiBwYWlyIGFscmVhZHkgaGFzIGtleSBvciA6IHNlcGFyYXRvclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gJ2VuZCcgaW4gaXQudmFsdWUgPyBpdC52YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBBcnJheS5pc0FycmF5KGVuZCkgPyBlbmRbZW5kLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdD8udHlwZSA9PT0gJ2NvbW1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kPy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0SW5kZW50ZWRDb21tZW50KGl0LnN0YXJ0LCBtYXAuaW5kZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwcmV2Py52YWx1ZT8uZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVuZCwgaXQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGVudCA+PSBtYXAuaW5kZW50KSB7XG4gICAgICAgICAgICBjb25zdCBhdE1hcEluZGVudCA9ICF0aGlzLm9uS2V5TGluZSAmJiB0aGlzLmluZGVudCA9PT0gbWFwLmluZGVudDtcbiAgICAgICAgICAgIGNvbnN0IGF0TmV4dEl0ZW0gPSBhdE1hcEluZGVudCAmJlxuICAgICAgICAgICAgICAgIChpdC5zZXAgfHwgaXQuZXhwbGljaXRLZXkpICYmXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICE9PSAnc2VxLWl0ZW0taW5kJztcbiAgICAgICAgICAgIC8vIEZvciBlbXB0eSBub2RlcywgYXNzaWduIG5ld2xpbmUtc2VwYXJhdGVkIG5vdCBpbmRlbnRlZCBlbXB0eSB0b2tlbnMgdG8gZm9sbG93aW5nIG5vZGVcbiAgICAgICAgICAgIGxldCBzdGFydCA9IFtdO1xuICAgICAgICAgICAgaWYgKGF0TmV4dEl0ZW0gJiYgaXQuc2VwICYmICFpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5sID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdC5zZXAubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBpdC5zZXBbaV07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmwucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdC5pbmRlbnQgPiBtYXAuaW5kZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChubC5sZW5ndGggPj0gMilcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpdC5zZXAuc3BsaWNlKG5sWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V4cGxpY2l0LWtleS1pbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCAmJiAhaXQuZXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5leHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGV4cGxpY2l0S2V5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0sIGV4cGxpY2l0S2V5OiB0cnVlIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnbmV3bGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG93VG9rZW4oaXQua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ25ld2xpbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwID0gaXQuc2VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZSBndWFyZCBpcyB3cm9uZyBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGUgZ3VhcmQgaXMgd3JvbmcgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdC5zZXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5LCBzZXAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYWN0dWFsbHkgYXQgbmV4dCBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc2VwID0gaXQuc2VwLmNvbmNhdChzdGFydCwgdGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUgfHwgYXROZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ21hcC12YWx1ZS1pbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQ6IFtdLCBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZzID0gdGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdE5leHRJdGVtIHx8IGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0LCBrZXk6IGZzLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShtYXApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdE1hcEluZGVudCAmJiBidi50eXBlICE9PSAnYmxvY2stc2VxJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgfVxuICAgICpibG9ja1NlcXVlbmNlKHNlcSkge1xuICAgICAgICBjb25zdCBpdCA9IHNlcS5pdGVtc1tzZXEuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gJ2VuZCcgaW4gaXQudmFsdWUgPyBpdC52YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBBcnJheS5pc0FycmF5KGVuZCkgPyBlbmRbZW5kLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdD8udHlwZSA9PT0gJ2NvbW1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kPy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXEuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHNlcS5pdGVtcy5wdXNoKHsgc3RhcnQ6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQoaXQuc3RhcnQsIHNlcS5pbmRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2VxLml0ZW1zW3NlcS5pdGVtcy5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHByZXY/LnZhbHVlPy5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW5kLCBpdC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxLml0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUgfHwgdGhpcy5pbmRlbnQgPD0gc2VxLmluZGVudClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzZXEtaXRlbS1pbmQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGVudCAhPT0gc2VxLmluZGVudClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlIHx8IGluY2x1ZGVzVG9rZW4oaXQuc3RhcnQsICdzZXEtaXRlbS1pbmQnKSlcbiAgICAgICAgICAgICAgICAgICAgc2VxLml0ZW1zLnB1c2goeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5kZW50ID4gc2VxLmluZGVudCkge1xuICAgICAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShzZXEpO1xuICAgICAgICAgICAgaWYgKGJ2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGJ2KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgIHlpZWxkKiB0aGlzLnN0ZXAoKTtcbiAgICB9XG4gICAgKmZsb3dDb2xsZWN0aW9uKGZjKSB7XG4gICAgICAgIGNvbnN0IGl0ID0gZmMuaXRlbXNbZmMuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdmbG93LWVycm9yLWVuZCcpIHtcbiAgICAgICAgICAgIGxldCB0b3A7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgdG9wID0gdGhpcy5wZWVrKDEpO1xuICAgICAgICAgICAgfSB3aGlsZSAodG9wICYmIHRvcC50eXBlID09PSAnZmxvdy1jb2xsZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmMuZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjb21tYSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXQgfHwgaXQuc2VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjLml0ZW1zLnB1c2goeyBzdGFydDogW10sIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0IHx8IGl0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcyA9IHRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0IHx8IGl0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQuc2VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZzKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IGZzLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctbWFwLWVuZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmxvdy1zZXEtZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgZmMuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ2ID0gdGhpcy5zdGFydEJsb2NrVmFsdWUoZmMpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2Ugc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgICAgIGlmIChidilcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wZWVrKDIpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAnYmxvY2stbWFwJyAmJlxuICAgICAgICAgICAgICAgICgodGhpcy50eXBlID09PSAnbWFwLXZhbHVlLWluZCcgJiYgcGFyZW50LmluZGVudCA9PT0gZmMuaW5kZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy50eXBlID09PSAnbmV3bGluZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFwYXJlbnQuaXRlbXNbcGFyZW50Lml0ZW1zLmxlbmd0aCAtIDFdLnNlcCkpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnbWFwLXZhbHVlLWluZCcgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQudHlwZSAhPT0gJ2Zsb3ctY29sbGVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZ2V0UHJldlByb3BzKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBnZXRGaXJzdEtleVN0YXJ0UHJvcHMocHJldik7XG4gICAgICAgICAgICAgICAgZml4Rmxvd1NlcUl0ZW1zKGZjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXAgPSBmYy5lbmQuc3BsaWNlKDEsIGZjLmVuZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZmMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IGZjLCBzZXAgfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gPSBtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5saW5lRW5kKGZjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmbG93U2NhbGFyKHR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMub25OZXdMaW5lKSB7XG4gICAgICAgICAgICBsZXQgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nKSArIDE7XG4gICAgICAgICAgICB3aGlsZSAobmwgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCArIG5sKTtcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuc291cmNlLmluZGV4T2YoJ1xcbicsIG5sKSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhcnRCbG9ja1ZhbHVlKHBhcmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1zY2FsYXItaGVhZGVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stc2NhbGFyJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFt0aGlzLnNvdXJjZVRva2VuXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdmbG93LW1hcC1zdGFydCc6XG4gICAgICAgICAgICBjYXNlICdmbG93LXNlcS1zdGFydCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Zsb3ctY29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnNvdXJjZVRva2VuLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stc2VxJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGdldFByZXZQcm9wcyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKHByZXYpO1xuICAgICAgICAgICAgICAgIHN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwgZXhwbGljaXRLZXk6IHRydWUgfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGdldFByZXZQcm9wcyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKHByZXYpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhdEluZGVudGVkQ29tbWVudChzdGFydCwgaW5kZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdjb21tZW50JylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaW5kZW50IDw9IGluZGVudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0LmV2ZXJ5KHN0ID0+IHN0LnR5cGUgPT09ICduZXdsaW5lJyB8fCBzdC50eXBlID09PSAnc3BhY2UnKTtcbiAgICB9XG4gICAgKmRvY3VtZW50RW5kKGRvY0VuZCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZG9jLW1vZGUnKSB7XG4gICAgICAgICAgICBpZiAoZG9jRW5kLmVuZClcbiAgICAgICAgICAgICAgICBkb2NFbmQuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jRW5kLmVuZCA9IFt0aGlzLnNvdXJjZVRva2VuXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICduZXdsaW5lJylcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAqbGluZUVuZCh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY29tbWEnOlxuICAgICAgICAgICAgY2FzZSAnZG9jLXN0YXJ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1lbmQnOlxuICAgICAgICAgICAgY2FzZSAnZmxvdy1zZXEtZW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ2Zsb3ctbWFwLWVuZCc6XG4gICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgdmFsdWVzIGFyZSBlcnJvcnNcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4uZW5kKVxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbmQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVuZCA9IFt0aGlzLnNvdXJjZVRva2VuXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmV3bGluZScpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBQYXJzZXIgfTtcbiIsICJpbXBvcnQgeyBDb21wb3NlciB9IGZyb20gJy4vY29tcG9zZS9jb21wb3Nlci5qcyc7XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4vZG9jL0RvY3VtZW50LmpzJztcbmltcG9ydCB7IHByZXR0aWZ5RXJyb3IsIFlBTUxQYXJzZUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgd2FybiB9IGZyb20gJy4vbG9nLmpzJztcbmltcG9ydCB7IGlzRG9jdW1lbnQgfSBmcm9tICcuL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IExpbmVDb3VudGVyIH0gZnJvbSAnLi9wYXJzZS9saW5lLWNvdW50ZXIuanMnO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZS9wYXJzZXIuanMnO1xuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IHByZXR0eUVycm9ycyA9IG9wdGlvbnMucHJldHR5RXJyb3JzICE9PSBmYWxzZTtcbiAgICBjb25zdCBsaW5lQ291bnRlciA9IG9wdGlvbnMubGluZUNvdW50ZXIgfHwgKHByZXR0eUVycm9ycyAmJiBuZXcgTGluZUNvdW50ZXIoKSkgfHwgbnVsbDtcbiAgICByZXR1cm4geyBsaW5lQ291bnRlciwgcHJldHR5RXJyb3JzIH07XG59XG4vKipcbiAqIFBhcnNlIHRoZSBpbnB1dCBhcyBhIHN0cmVhbSBvZiBZQU1MIGRvY3VtZW50cy5cbiAqXG4gKiBEb2N1bWVudHMgc2hvdWxkIGJlIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgYC4uLmAgb3IgYC0tLWAgbWFya2VyIGxpbmVzLlxuICpcbiAqIEByZXR1cm5zIElmIGFuIGVtcHR5IGBkb2NzYCBhcnJheSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBvZiB0eXBlXG4gKiAgIEVtcHR5U3RyZWFtIGFuZCBjb250YWluIGFkZGl0aW9uYWwgc3RyZWFtIGluZm9ybWF0aW9uLiBJblxuICogICBUeXBlU2NyaXB0LCB5b3Ugc2hvdWxkIHVzZSBgJ2VtcHR5JyBpbiBkb2NzYCBhcyBhIHR5cGUgZ3VhcmQgZm9yIGl0LlxuICovXG5mdW5jdGlvbiBwYXJzZUFsbERvY3VtZW50cyhzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbGluZUNvdW50ZXIsIHByZXR0eUVycm9ycyB9ID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIobGluZUNvdW50ZXI/LmFkZE5ld0xpbmUpO1xuICAgIGNvbnN0IGNvbXBvc2VyID0gbmV3IENvbXBvc2VyKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRvY3MgPSBBcnJheS5mcm9tKGNvbXBvc2VyLmNvbXBvc2UocGFyc2VyLnBhcnNlKHNvdXJjZSkpKTtcbiAgICBpZiAocHJldHR5RXJyb3JzICYmIGxpbmVDb3VudGVyKVxuICAgICAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2NzKSB7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLmZvckVhY2gocHJldHRpZnlFcnJvcihzb3VyY2UsIGxpbmVDb3VudGVyKSk7XG4gICAgICAgICAgICBkb2Mud2FybmluZ3MuZm9yRWFjaChwcmV0dGlmeUVycm9yKHNvdXJjZSwgbGluZUNvdW50ZXIpKTtcbiAgICAgICAgfVxuICAgIGlmIChkb2NzLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiBkb2NzO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFtdLCB7IGVtcHR5OiB0cnVlIH0sIGNvbXBvc2VyLnN0cmVhbUluZm8oKSk7XG59XG4vKiogUGFyc2UgYW4gaW5wdXQgc3RyaW5nIGludG8gYSBzaW5nbGUgWUFNTC5Eb2N1bWVudCAqL1xuZnVuY3Rpb24gcGFyc2VEb2N1bWVudChzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbGluZUNvdW50ZXIsIHByZXR0eUVycm9ycyB9ID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIobGluZUNvdW50ZXI/LmFkZE5ld0xpbmUpO1xuICAgIGNvbnN0IGNvbXBvc2VyID0gbmV3IENvbXBvc2VyKG9wdGlvbnMpO1xuICAgIC8vIGBkb2NgIGlzIGFsd2F5cyBzZXQgYnkgY29tcG9zZS5lbmQodHJ1ZSkgYXQgdGhlIHZlcnkgbGF0ZXN0XG4gICAgbGV0IGRvYyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBfZG9jIG9mIGNvbXBvc2VyLmNvbXBvc2UocGFyc2VyLnBhcnNlKHNvdXJjZSksIHRydWUsIHNvdXJjZS5sZW5ndGgpKSB7XG4gICAgICAgIGlmICghZG9jKVxuICAgICAgICAgICAgZG9jID0gX2RvYztcbiAgICAgICAgZWxzZSBpZiAoZG9jLm9wdGlvbnMubG9nTGV2ZWwgIT09ICdzaWxlbnQnKSB7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxQYXJzZUVycm9yKF9kb2MucmFuZ2Uuc2xpY2UoMCwgMiksICdNVUxUSVBMRV9ET0NTJywgJ1NvdXJjZSBjb250YWlucyBtdWx0aXBsZSBkb2N1bWVudHM7IHBsZWFzZSB1c2UgWUFNTC5wYXJzZUFsbERvY3VtZW50cygpJykpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByZXR0eUVycm9ycyAmJiBsaW5lQ291bnRlcikge1xuICAgICAgICBkb2MuZXJyb3JzLmZvckVhY2gocHJldHRpZnlFcnJvcihzb3VyY2UsIGxpbmVDb3VudGVyKSk7XG4gICAgICAgIGRvYy53YXJuaW5ncy5mb3JFYWNoKHByZXR0aWZ5RXJyb3Ioc291cmNlLCBsaW5lQ291bnRlcikpO1xuICAgIH1cbiAgICByZXR1cm4gZG9jO1xufVxuZnVuY3Rpb24gcGFyc2Uoc3JjLCByZXZpdmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IF9yZXZpdmVyID0gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfcmV2aXZlciA9IHJldml2ZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXZpdmVyICYmIHR5cGVvZiByZXZpdmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRpb25zID0gcmV2aXZlcjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gcGFyc2VEb2N1bWVudChzcmMsIG9wdGlvbnMpO1xuICAgIGlmICghZG9jKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBkb2Mud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHdhcm4oZG9jLm9wdGlvbnMubG9nTGV2ZWwsIHdhcm5pbmcpKTtcbiAgICBpZiAoZG9jLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChkb2Mub3B0aW9ucy5sb2dMZXZlbCAhPT0gJ3NpbGVudCcpXG4gICAgICAgICAgICB0aHJvdyBkb2MuZXJyb3JzWzBdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkb2MuZXJyb3JzID0gW107XG4gICAgfVxuICAgIHJldHVybiBkb2MudG9KUyhPYmplY3QuYXNzaWduKHsgcmV2aXZlcjogX3Jldml2ZXIgfSwgb3B0aW9ucykpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgb3B0aW9ucykge1xuICAgIGxldCBfcmVwbGFjZXIgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShyZXBsYWNlcikpIHtcbiAgICAgICAgX3JlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXBsYWNlcikge1xuICAgICAgICBvcHRpb25zID0gcmVwbGFjZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmxlbmd0aDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IGluZGVudCA9IE1hdGgucm91bmQob3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMgPSBpbmRlbnQgPCAxID8gdW5kZWZpbmVkIDogaW5kZW50ID4gOCA/IHsgaW5kZW50OiA4IH0gOiB7IGluZGVudCB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGtlZXBVbmRlZmluZWQgfSA9IG9wdGlvbnMgPz8gcmVwbGFjZXIgPz8ge307XG4gICAgICAgIGlmICgha2VlcFVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc0RvY3VtZW50KHZhbHVlKSAmJiAhX3JlcGxhY2VyKVxuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBEb2N1bWVudCh2YWx1ZSwgX3JlcGxhY2VyLCBvcHRpb25zKS50b1N0cmluZyhvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgcGFyc2UsIHBhcnNlQWxsRG9jdW1lbnRzLCBwYXJzZURvY3VtZW50LCBzdHJpbmdpZnkgfTtcbiIsICJpbXBvcnQgeyBKc29uTGluaywgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IGdldEV4dGVuc2lvbiwgZ2V0RmlsZVRpdGxlIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBDYWNoZWRNZXRhZGF0YSwgRmlsZVN0YXRzLCBGcm9udE1hdHRlckNhY2hlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVlhbWwgfSBmcm9tIFwieWFtbFwiO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEJUcmVlfSBmcm9tIFwic29ydGVkLWJ0cmVlXCI7XG5pbXBvcnQge1xuICAgIElubGluZUZpZWxkLFxuICAgIEpzb25JbmxpbmVGaWVsZCxcbiAgICBhc0lubGluZUZpZWxkLFxuICAgIGV4dHJhY3RGdWxsTGluZUZpZWxkLFxuICAgIGV4dHJhY3RJbmxpbmVGaWVsZHMsXG4gICAganNvbklubGluZUZpZWxkLFxufSBmcm9tIFwiLi9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7XG4gICAgSnNvbk1hcmtkb3duQmxvY2ssXG4gICAgSnNvbk1hcmtkb3duTGlzdEJsb2NrLFxuICAgIEpzb25NYXJrZG93bkxpc3RJdGVtLFxuICAgIEpzb25NYXJrZG93blBhZ2UsXG4gICAgSnNvbk1hcmtkb3duU2VjdGlvbixcbiAgICBKc29uTWFya2Rvd25UYXNrSXRlbSxcbiAgICBKc29uTWFya2Rvd25EYXRhYmxvY2ssXG4gICAgSnNvbk1hcmtkb3duQ29kZWJsb2NrLFxuICAgIEpzb25Gcm9udG1hdHRlckVudHJ5LFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgSnNvbkNvbnZlcnNpb24gfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jb21tb25cIjtcbmltcG9ydCB7IFlhbWxDb252ZXJzaW9uIH0gZnJvbSBcImluZGV4L3R5cGVzL3lhbWxcIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBNYXRjaGVzIHlhbWwgZGF0YWJsb2Nrcywgd2hpY2ggc2hvdyB1cCBhcyBpbmRlcGVuZGVudCBvYmplY3RzIGluIHRoZSBkYXRhY29yZSBpbmRleC4gKi9cbmNvbnN0IFlBTUxfREFUQV9SRUdFWCA9IC9gYGB5YW1sOmRhdGEvaTtcbi8qKiBNYXRjaGVzIHRoZSBzdGFydCBvZiBhbnkgY29kZWJsb2NrIGZlbmNlLiAqL1xuY29uc3QgQ09ERUJMT0NLX0ZFTkNFX1JFR0VYID0gL14oPzpgYGB8fn5+KSguKikkL2ltO1xuLyoqIE1hdGNoZXMgbGlzdCBpdGVtcyAoaW5jbHVkaW5nIGluc2lkZSB0ZXh0IGJsb2NrcykuICovXG5jb25zdCBMSVNUX0lURU1fUkVHRVggPSAvXltcXHM+XSooXFxkK1xcLnxcXGQrXFwpfFxcKnwtfFxcKylcXHMqKFxcWy57MCwxfVxcXSk/XFxzKiguKikkL211O1xuXG4vKipcbiAqIEdpdmVuIHRoZSByYXcgc291cmNlIGFuZCBPYnNpZGlhbiBtZXRhZGF0YSBmb3IgYSBnaXZlbiBtYXJrZG93biBmaWxlLFxuICogcmV0dXJuIGZ1bGwgbWFya2Rvd24gZmlsZSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duSW1wb3J0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtYXJrZG93bjogc3RyaW5nLFxuICAgIG1ldGFkYXRhOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBzdGF0czogRmlsZVN0YXRzXG4pOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICBjb25zdCB7IGxpbmVzLCBtZXRhZGF0YTogcGFnZU1ldGFkYXRhLCBmcm9udG1hdHRlciwgc2VjdGlvbnMgfSA9IG1hcmtkb3duU291cmNlSW1wb3J0KHBhdGgsIG1hcmtkb3duLCBtZXRhZGF0YSk7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlRGF0YShwYXRoLCBzdGF0cywgbGluZXMubGVuZ3RoLCBwYWdlTWV0YWRhdGEsIHNlY3Rpb25zLCBmcm9udG1hdHRlcik7XG5cbiAgICByZXR1cm4gcGFnZS5idWlsZCgpO1xufVxuXG4vKiogSW1wb3J0IG1hcmtkb3duIGZpbGUgbWV0YWRhdGEsIHByb2R1Y2luZyBhbGwgcmVsZXZhbnQgbWFya2Rvd24gZGF0YS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93blNvdXJjZUltcG9ydChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbWFya2Rvd246IHN0cmluZyxcbiAgICBtZXRhZGF0YTogQ2FjaGVkTWV0YWRhdGFcbik6IHtcbiAgICBsaW5lczogc3RyaW5nW107XG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhO1xuICAgIGZyb250bWF0dGVyPzogUmVjb3JkPHN0cmluZywgSnNvbkZyb250bWF0dGVyRW50cnk+O1xuICAgIHNlY3Rpb25zOiBTZWN0aW9uRGF0YVtdO1xufSB7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PiB8IHVuZGVmaW5lZCA9IG1ldGFkYXRhLmZyb250bWF0dGVyXG4gICAgICAgID8gcGFyc2VGcm9udG1hdHRlckJsb2NrKG1ldGFkYXRhLmZyb250bWF0dGVyKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW5lcyA9IG1hcmtkb3duLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgIGNvbnN0IG1hcmtkb3duTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBjb25zdCBzZWN0aW9uQXJyYXk6IFNlY3Rpb25EYXRhW10gPSBbXTtcbiAgICAvLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNlY3Rpb25zIC8vXG4gICAgLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IG1ldGFoZWFkaW5ncyA9IG1ldGFkYXRhLmhlYWRpbmdzID8/IFtdO1xuICAgIG1ldGFoZWFkaW5ncy5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uLnN0YXJ0LmxpbmUgLSBiLnBvc2l0aW9uLnN0YXJ0LmxpbmUpO1xuXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBuZXcgQlRyZWU8bnVtYmVyLCBTZWN0aW9uRGF0YT4odW5kZWZpbmVkLCAoYSwgYikgPT4gYSAtIGIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtZXRhaGVhZGluZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbWV0YWhlYWRpbmdzW2luZGV4XTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeS5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBjb25zdCBlbmQgPSBpbmRleCA9PSBtZXRhaGVhZGluZ3MubGVuZ3RoIC0gMSA/IGxpbmVzLmxlbmd0aCA6IG1ldGFoZWFkaW5nc1tpbmRleCArIDFdLnBvc2l0aW9uLnN0YXJ0LmxpbmU7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uRGF0YShzdGFydCwgZW5kLCBlbnRyeS5oZWFkaW5nLCBlbnRyeS5sZXZlbCwgaW5kZXggKyAxKTtcbiAgICAgICAgc2VjdGlvbnMuc2V0KHN0YXJ0LCBzZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYW4gaW1wbGljaXQgc2VjdGlvbiBmb3IgdGhlIFwiaGVhZGluZ1wiIHNlY3Rpb24gb2YgdGhlIHBhZ2UgaWYgdGhlcmUgaXMgbm90IGFuIGltbWVkaWF0ZSBoZWFkZXIgYnV0IHRoZXJlIGlzXG4gICAgLy8gc29tZSBjb250ZW50IGluIHRoZSBmaWxlLiBJZiB0aGVyZSBhcmUgb3RoZXIgc2VjdGlvbnMsIHRoZW4gZ28gdXAgdG8gdGhhdCwgb3RoZXJ3aXNlLCBnbyBmb3IgdGhlIGVudGlyZSBmaWxlLlxuICAgIGlmIChzZWN0aW9ucy5zaXplID09IDApIHtcbiAgICAgICAgaWYgKCFlbXB0eWxpbmVzKGxpbmVzLCAwLCBsaW5lcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb25EYXRhKDAsIGxpbmVzLmxlbmd0aCwgZ2V0RmlsZVRpdGxlKHBhdGgpLCAxLCAwKTtcbiAgICAgICAgICAgIHNlY3Rpb25zLnNldCgwLCBzZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWN0aW9uLlxuICAgICAgICBjb25zdCBmaXJzdCA9IHNlY3Rpb25zLmdldFBhaXJPck5leHRIaWdoZXIoMCk/LlsxXSEhO1xuXG4gICAgICAgIGlmIChmaXJzdC5zdGFydCA+IDAgJiYgIWVtcHR5bGluZXMobGluZXMsIDAsIGZpcnN0LnN0YXJ0KSkge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uRGF0YSgwLCBmaXJzdC5zdGFydCwgZ2V0RmlsZVRpdGxlKHBhdGgpLCAxLCAwKTtcblxuICAgICAgICAgICAgc2VjdGlvbnMuc2V0KDAsIHNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vXG4gICAgLy8gQmxvY2tzIC8vXG4gICAgLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBBbGwgYmxvY2tzOyB3ZSB3aWxsIGFzc2lnbiB0YWdzIGFuZCBvdGhlciBtZXRhZGF0YSB0byBibG9ja3MgYXMgd2UgZW5jb3VudGVyIHRoZW0uIEF0IHRoZSBlbmQsIG9ubHkgYmxvY2tzIHRoYXRcbiAgICAvLyBoYXZlIGFjdHVhbCBtZXRhZGF0YSB3aWxsIGJlIHN0b3JlZCB0byBzYXZlIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgICBjb25zdCBibG9ja3MgPSBuZXcgQlRyZWU8bnVtYmVyLCBCbG9ja0RhdGE+KHVuZGVmaW5lZCwgKGEsIGIpID0+IGEgLSBiKTtcbiAgICBsZXQgYmxvY2tPcmRpbmFsID0gMTtcbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIG1ldGFkYXRhLnNlY3Rpb25zIHx8IFtdKSB7XG4gICAgICAgIC8vIFNraXAgaGVhZGluZ3MgYmxvY2tzLCB3ZSBoYW5kbGUgdGhlbSBzcGVjaWFsbHkgYXMgc2VjdGlvbnMuXG4gICAgICAgIGlmIChibG9jay50eXBlID09PSBcImhlYWRpbmdcIikgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBibG9jay5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBjb25zdCBlbmQgPSBibG9jay5wb3NpdGlvbi5lbmQubGluZSArIDE7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZSA9IGxpbmVzW3N0YXJ0XTsgLy8gdG8gdXNlIHRvIGNoZWNrIHRoZSBjb2RlYmxvY2sgdHlwZVxuXG4gICAgICAgIGlmIChibG9jay50eXBlID09PSBcImxpc3RcIikge1xuICAgICAgICAgICAgYmxvY2tzLnNldChzdGFydCwgbmV3IExpc3RCbG9ja0RhdGEoc3RhcnQsIGVuZCwgYmxvY2tPcmRpbmFsKyssIGJsb2NrLmlkKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PSBcImNvZGVcIiAmJiBZQU1MX0RBVEFfUkVHRVgudGVzdChzdGFydExpbmUpKSB7XG4gICAgICAgICAgICBjb25zdCB5YW1sOiBzdHJpbmcgPSBsaW5lc1xuICAgICAgICAgICAgICAgIC5zbGljZShzdGFydCArIDEsIGVuZCAtIDEpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx0L2dtLCBcIiAgXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXQ6IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PiA9IHBhcnNlRnJvbnRtYXR0ZXJCbG9jayhwYXJzZVlhbWwoeWFtbCkpO1xuXG4gICAgICAgICAgICBibG9ja3Muc2V0KHN0YXJ0LCBuZXcgRGF0YWJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgc3BsaXQsIGJsb2NrLmlkKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb2RlXCIpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBibG9jayBpcyBmZW5jZWQuXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHN0YXJ0TGluZS5tYXRjaChDT0RFQkxPQ0tfRkVOQ0VfUkVHRVgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5kZW50ZWQtc3R5bGUgY29kZWJsb2NrLlxuICAgICAgICAgICAgICAgIGJsb2Nrcy5zZXQoc3RhcnQsIG5ldyBDb2RlYmxvY2tEYXRhKHN0YXJ0LCBlbmQsIGJsb2NrT3JkaW5hbCsrLCBbXSwgXCJpbmRlbnRcIiwgc3RhcnQsIGVuZCwgYmxvY2suaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsxXSA/IG1hdGNoWzFdLnNwbGl0KFwiLFwiKSA6IFtdO1xuICAgICAgICAgICAgICAgIGJsb2Nrcy5zZXQoXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ29kZWJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgbGFuZ3VhZ2VzLCBcImZlbmNlZFwiLCBzdGFydCArIDEsIGVuZCAtIDEsIGJsb2NrLmlkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBibG9ja3Muc2V0KHN0YXJ0LCBuZXcgQmFzZUJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgYmxvY2sudHlwZSwgYmxvY2suaWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBibG9ja3MgdG8gc2VjdGlvbnMuXG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MudmFsdWVzKCkpIHtcbiAgICAgICAgbG9va3VwKGJsb2NrLnN0YXJ0LCBzZWN0aW9ucyk/LmJsb2NrKGJsb2NrKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIExpc3RzIC8vXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIC8vIEFsbCBsaXN0IGl0ZW1zIGluIGxpc3RzLiBTdGFydCB3aXRoIGEgc2ltcGxlIHRyaXZpYWwgcGFzcy5cbiAgICBjb25zdCBjb250ZW50UmVnZXggPSAvXltcXHRcXGZcXHYgXSpbXFwtK1xcKl1cXHMoXFxbLlxcXVxccyk/LztcbiAgICBjb25zdCBtYXJrZXJSZWdleCA9IC9eKD4/XFxzPykqKFxcdHxcXHMpKi9nO1xuICAgIGNvbnN0IGxpc3RJdGVtcyA9IG5ldyBCVHJlZTxudW1iZXIsIExpc3RJdGVtRGF0YT4odW5kZWZpbmVkLCAoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgZm9yIChjb25zdCBsaXN0IG9mIG1ldGFkYXRhLmxpc3RJdGVtcyB8fCBbXSkge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbbGlzdC5wb3NpdGlvbi5zdGFydC5saW5lXTtcblxuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgZmxhZyB3aGljaCBza2lwcyBpbmRleGluZyBsaXN0IGl0ZW1zLlxuICAgICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goTElTVF9JVEVNX1JFR0VYKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgc3ltYm9sID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB0ZXh0ID0gbWF0Y2hbM107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gbmV3IExpc3RJdGVtRGF0YShcbiAgICAgICAgICAgIGxpc3QucG9zaXRpb24uc3RhcnQubGluZSxcbiAgICAgICAgICAgIGxpc3QucG9zaXRpb24uZW5kLmxpbmUgKyAxLFxuICAgICAgICAgICAgbGlzdC5wYXJlbnQsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBsaXN0LmlkLFxuICAgICAgICAgICAgbGlzdC50YXNrLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICApO1xuICAgICAgICBsaXN0SXRlbXMuc2V0KGl0ZW0uc3RhcnQsIGl0ZW0pO1xuICAgIH1cblxuICAgIC8vIEluIHRoZSBzZWNvbmQgbGlzdCBwYXNzLCBhY3R1YWxseSBjb25zdHJ1Y3QgdGhlIGxpc3QgaGVpcmFyY2h5LlxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0SXRlbXMudmFsdWVzKCkpIHtcbiAgICAgICAgaWYgKGl0ZW0ucGFyZW50TGluZSA8IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGJsb2Nrcy5nZXQoLWl0ZW0ucGFyZW50TGluZSk7XG4gICAgICAgICAgICBpZiAoIWxpc3RCbG9jayB8fCAhKGxpc3RCbG9jay50eXBlID09PSBcImxpc3RcIikpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAobGlzdEJsb2NrIGFzIExpc3RCbG9ja0RhdGEpLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0SXRlbXMuZ2V0KGl0ZW0ucGFyZW50TGluZSk/LmVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8gVGFncyAvL1xuICAgIC8vLy8vLy8vLy9cblxuICAgIC8vIEZvciBlYWNoIHRhZywgYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIGFuZCBibG9jayB0aGF0IGl0IGlzIGEgcGFydCBvZi5cbiAgICBmb3IgKGNvbnN0IHRhZ2RlZiBvZiBtZXRhZGF0YS50YWdzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRhZ2RlZi50YWcuc3RhcnRzV2l0aChcIiNcIikgPyB0YWdkZWYudGFnIDogXCIjXCIgKyB0YWdkZWYudGFnO1xuICAgICAgICBjb25zdCBsaW5lID0gdGFnZGVmLnBvc2l0aW9uLnN0YXJ0LmxpbmU7XG4gICAgICAgIG1hcmtkb3duTWV0YWRhdGEudGFnKHRhZyk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEudGFnKHRhZyk7XG4gICAgICAgIGxvb2t1cChsaW5lLCBibG9ja3MpPy5tZXRhZGF0YS50YWcodGFnKTtcbiAgICAgICAgbG9va3VwKGxpbmUsIGxpc3RJdGVtcyk/Lm1ldGFkYXRhLnRhZyh0YWcpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmcm9udG1hdHRlciB0YWdzLlxuICAgIGlmIChtZXRhZGF0YS5mcm9udG1hdHRlcikge1xuICAgICAgICBmb3IgKGNvbnN0IHJhd3RhZyBvZiBleHRyYWN0VGFncyhtZXRhZGF0YS5mcm9udG1hdHRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHJhd3RhZy5zdGFydHNXaXRoKFwiI1wiKSA/IHJhd3RhZyA6IFwiI1wiICsgcmF3dGFnO1xuICAgICAgICAgICAgbWFya2Rvd25NZXRhZGF0YS50YWcodGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vXG4gICAgLy8gTGlua3MgLy9cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgZm9yIChsZXQgbGlua2RlZiBvZiBtZXRhZGF0YS5saW5rcyA/PyBbXSkge1xuICAgICAgICBjb25zdCBsaW5rID0gTGluay5pbmZlcihsaW5rZGVmLmxpbmspO1xuICAgICAgICBjb25zdCBsaW5lID0gbGlua2RlZi5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBtYXJrZG93bk1ldGFkYXRhLmxpbmsobGluayk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEubGluayhsaW5rKTtcbiAgICAgICAgbG9va3VwKGxpbmUsIGJsb2Nrcyk/Lm1ldGFkYXRhLmxpbmsobGluayk7XG4gICAgICAgIGxvb2t1cChsaW5lLCBsaXN0SXRlbXMpPy5tZXRhZGF0YS5saW5rKGxpbmspO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRnJvbnRtYXR0ZXIgTGlua3MgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLy8gRnJvbnRtYXR0ZXIgbGlua3MgYXJlIG9ubHkgYXNzaWduZWQgdG8gdGhlIHBhZ2UuXG4gICAgZm9yIChjb25zdCBsaW5rZGVmIG9mIG1ldGFkYXRhLmZyb250bWF0dGVyTGlua3MgPz8gW10pIHtcbiAgICAgICAgbWFya2Rvd25NZXRhZGF0YS5saW5rKExpbmsuaW5mZXIobGlua2RlZi5saW5rLCBmYWxzZSwgbGlua2RlZi5kaXNwbGF5VGV4dCkpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbmxpbmUgRmllbGRzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBpdGVyYXRlSW5saW5lRmllbGRzKGxpbmVzKSkge1xuICAgICAgICBjb25zdCBsaW5lID0gZmllbGQucG9zaXRpb24ubGluZTtcbiAgICAgICAgbWFya2Rvd25NZXRhZGF0YS5pbmxpbmVGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgICAgICBsb29rdXAobGluZSwgYmxvY2tzKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgICAgICBsb29rdXAobGluZSwgbGlzdEl0ZW1zKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgIH1cbiAgICBzZWN0aW9uQXJyYXkucHVzaCguLi5zZWN0aW9ucy52YWx1ZXMoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGluZXMsXG4gICAgICAgIGZyb250bWF0dGVyLFxuICAgICAgICBtZXRhZGF0YTogbWFya2Rvd25NZXRhZGF0YSxcbiAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25BcnJheSxcbiAgICB9O1xufVxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQYXJzaW5nIEFpZHMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogQ2hlY2sgaWYgdGhlIGdpdmVuIGxpbmUgcmFuZ2UgaXMgYWxsIGVtcHR5LiBTdGFydCBpcyBpbmNsdXNpdmUsIGVuZCBleGNsdXNpdmUuICovXG5mdW5jdGlvbiBlbXB0eWxpbmVzKGxpbmVzOiBzdHJpbmdbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGVuZDsgaW5kZXgrKykge1xuICAgICAgICBpZiAobGluZXNbaW5kZXhdLnRyaW0oKSAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFlpZWxkcyBhbGwgaW5saW5lIGZpZWxkcyBmb3VuZCBpbiB0aGUgZG9jdW1lbnQgYnkgdHJhdmVyc2luZyBsaW5lIGJ5IGxpbmUgdGhyb3VnaCB0aGUgZG9jdW1lbnQuIFBlcmZvcm1zIHNvbWUgb3B0aW1pemF0aW9uc1xuICogdG8gc2tpcCBleHRyYS1sYXJnZSBsaW5lcywgYW5kIGNhbiBiZSBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlSW5saW5lRmllbGRzKGNvbnRlbnQ6IHN0cmluZ1tdKTogR2VuZXJhdG9yPElubGluZUZpZWxkPiB7XG4gICAgZm9yIChsZXQgbGluZW5vID0gMDsgbGluZW5vIDwgY29udGVudC5sZW5ndGg7IGxpbmVubysrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb250ZW50W2xpbmVub107XG5cbiAgICAgICAgLy8gRmFzdC1iYWlsb3V0IGZvciBsaW5lcyB0aGF0IGFyZSB0b28gbG9uZyBvciBkbyBub3QgY29udGFpbiAnOjonLlxuICAgICAgICBpZiAobGluZS5sZW5ndGggPiAzMjc2OCB8fCAhbGluZS5pbmNsdWRlcyhcIjo6XCIpKSBjb250aW51ZTtcblxuICAgICAgICAvLyBUT0RPOiBSZS1hZGQgc3VwcG9ydCBmb3IgdGhvc2UgY3VzdG9tIGVtb2ppIGZpZWxkcyBvbiB0YXNrcyBhbmQgc2ltaWxhci5cbiAgICAgICAgbGV0IGlubGluZUZpZWxkcyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZSk7XG4gICAgICAgIGlmIChpbmxpbmVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaWZpZWxkIG9mIGlubGluZUZpZWxkcykgeWllbGQgYXNJbmxpbmVGaWVsZChpZmllbGQsIGxpbmVubyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZnVsbExpbmUgPSBleHRyYWN0RnVsbExpbmVGaWVsZChsaW5lKTtcbiAgICAgICAgICAgIGlmIChmdWxsTGluZSkgeWllbGQgYXNJbmxpbmVGaWVsZChmdWxsTGluZSwgbGluZW5vKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFRvcC1sZXZlbCBmdW5jdGlvbiB3aGljaCBtYXBzIGEgWUFNTCBibG9jayAtIGluY2x1ZGluZyBmcm9udG1hdHRlciAtIGludG8gZnJvbnRtYXR0ZXIgZW50cmllcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyb250bWF0dGVyQmxvY2soYmxvY2s6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgSnNvbkZyb250bWF0dGVyRW50cnk+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYmxvY2spKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYmxvY2tba2V5XTtcblxuICAgICAgICByZXN1bHRba2V5LnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihZYW1sQ29udmVyc2lvbi5saXRlcmFsKHZhbHVlKSksXG4gICAgICAgICAgICByYXc6IHZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBGaW5kcyBhbiBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBnaXZlbiBsaW5lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cDxUIGV4dGVuZHMgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PihsaW5lOiBudW1iZXIsIHRyZWU6IEJUcmVlPG51bWJlciwgVD4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0cmVlLmdldFBhaXJPck5leHRMb3dlcihsaW5lKT8uWzFdO1xuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmVuZCA+PSBsaW5lKSByZXR1cm4gdGFyZ2V0O1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEV4dHJhY3QgdGFncyBpbnRlbGxpZ2VudGx5IGZyb20gZnJvbnRtYXR0ZXIuIEhhbmRsZXMgYXJyYXlzLCBudW1iZXJzLCBhbmQgc3RyaW5ncy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGFncyhtZXRhZGF0YTogRnJvbnRNYXR0ZXJDYWNoZSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgdGFnS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5maWx0ZXIoKHQpID0+IHQudG9Mb3dlckNhc2UoKSA9PSBcInRhZ3NcIiB8fCB0LnRvTG93ZXJDYXNlKCkgPT0gXCJ0YWdcIik7XG5cbiAgICByZXR1cm4gdGFnS2V5c1xuICAgICAgICAubWFwKChrKSA9PiBzcGxpdEZyb250bWF0dGVyVGFnT3JBbGlhcyhtZXRhZGF0YVtrXSwgL1ssXFxzXSsvKSlcbiAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcC5jb25jYXQoYyksIFtdKVxuICAgICAgICAubWFwKChzdHIpID0+IChzdHIuc3RhcnRzV2l0aChcIiNcIikgPyBzdHIgOiBcIiNcIiArIHN0cikpO1xufVxuXG4vKiogU3BsaXQgYSBmcm9udG1hdHRlciBsaXN0IGludG8gc2VwYXJhdGUgZWxlbWVudHM7IGhhbmRsZXMgYWN0dWFsIGxpc3RzLCBjb21tYSBzZXBhcmF0ZWQgbGlzdHMsIGFuZCBzaW5nbGUgZWxlbWVudHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMoZGF0YTogYW55LCBvbjogUmVnRXhwKTogc3RyaW5nW10ge1xuICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YSA9PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcigocykgPT4gISFzKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMocywgb24pKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcC5jb25jYXQoYyksIFtdKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSB0byBhIHN0cmluZyB0byBoYW5kbGUgbnVtYmVycyBhbmQgc28gb24uXG4gICAgcmV0dXJuIChcIlwiICsgZGF0YSlcbiAgICAgICAgLnNwbGl0KG9uKVxuICAgICAgICAuZmlsdGVyKCh0KSA9PiAhIXQpXG4gICAgICAgIC5tYXAoKHQpID0+IHQudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+IDApO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnVpbGRlciBVdGlsaXRpZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBDb252aWVuZW50IHNoYXJlZCB1dGlsaXR5IGZvciB0cmFja2luZyBtZXRhZGF0YSAtIGxpbmtzLCB0YWdzLCBhbmQgc28gb24uICovXG5leHBvcnQgY2xhc3MgTWV0YWRhdGEge1xuICAgIHB1YmxpYyB0YWdzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgbGlua3M6IExpbmtbXSA9IFtdO1xuICAgIHB1YmxpYyBpbmxpbmVGaWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPiA9IHt9O1xuXG4gICAgLyoqIEFkZCBhIHRhZyB0byB0aGUgbWV0YWRhdGEuICovXG4gICAgcHVibGljIHRhZyh0YWc6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRhZ3MuYWRkKHRhZyk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhIGxpbmsgdG8gdGhlIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBsaW5rKGxpbms6IExpbmspIHtcbiAgICAgICAgaWYgKHRoaXMubGlua3MuZmluZCgodikgPT4gdi5lcXVhbHMobGluaykpKSByZXR1cm47XG4gICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIGFuIGlubGluZSBmaWVsZCB0byB0aGUgbWV0YWRhdGEuICovXG4gICAgcHVibGljIGlubGluZUZpZWxkKGZpZWxkOiBJbmxpbmVGaWVsZCkge1xuICAgICAgICBjb25zdCBsb3dlciA9IGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5pbmxpbmVGaWVsZHMpLnNvbWUoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT0gbG93ZXIpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5pbmxpbmVGaWVsZHNbbG93ZXJdID0gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIGxpc3Qgb2YgdW5pcXVlIGFkZGVkIHRhZ3MuICovXG4gICAgcHVibGljIGZpbmlzaFRhZ3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBsaXN0IG9mIEpTT04tc2VyaWFsaXplZCBsaW5rcy4gKi9cbiAgICBwdWJsaWMgZmluaXNoTGlua3MoKTogSnNvbkxpbmtbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtzLm1hcCgobGluaykgPT4gbGluay50b09iamVjdCgpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgbGlzdCBvZiBKU09OLXNlcmlhbGl6ZWQgaW5saW5lIGZpZWxkcy4gKi9cbiAgICBwdWJsaWMgZmluaXNoSW5saW5lRmllbGRzKCk6IFJlY29yZDxzdHJpbmcsIEpzb25JbmxpbmVGaWVsZD4ge1xuICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHRoaXMuaW5saW5lRmllbGRzLCBqc29uSW5saW5lRmllbGQpO1xuICAgIH1cbn1cblxuLyoqIENvbnZpZW5lbnQgdXRpbGl0eSBmb3IgY29uc3RydWN0aW5nIHBhZ2Ugb2JqZWN0cy4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlRGF0YSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgc3RhdHM6IEZpbGVTdGF0cyxcbiAgICAgICAgcHVibGljIGxlbmd0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhLFxuICAgICAgICBwdWJsaWMgc2VjdGlvbnM6IFNlY3Rpb25EYXRhW10sXG4gICAgICAgIHB1YmxpYyBmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PlxuICAgICkge31cblxuICAgIHB1YmxpYyBidWlsZCgpOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuc3RhdHMuY3RpbWUsXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuc3RhdHMubXRpbWUsXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy5zdGF0cy5zaXplLFxuICAgICAgICAgICAgJGV4dGVuc2lvbjogZ2V0RXh0ZW5zaW9uKHRoaXMucGF0aCksXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IDAsIGVuZDogdGhpcy5sZW5ndGggfSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLm1hcCgoeCkgPT4geC5idWlsZCgpKSxcbiAgICAgICAgICAgICRmcm9udG1hdHRlcjogdGhpcy5mcm9udG1hdHRlcixcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKiBDb252aWVuZW50IHV0aWxpdHkgZm9yIGNvbnN0cnVjdGluZyBtYXJrZG93biBzZWN0aW9ucy4gKi9cbmV4cG9ydCBjbGFzcyBTZWN0aW9uRGF0YSB7XG4gICAgcHVibGljIGJsb2NrczogQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgbGV2ZWw6IG51bWJlcixcbiAgICAgICAgcHVibGljIG9yZGluYWw6IG51bWJlclxuICAgICkge31cblxuICAgIHB1YmxpYyBibG9jayhibG9jazogQmxvY2tEYXRhKSB7XG4gICAgICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZCgpOiBKc29uTWFya2Rvd25TZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICR0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkbGV2ZWw6IHRoaXMubGV2ZWwsXG4gICAgICAgICAgICAkdGFnczogdGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksXG4gICAgICAgICAgICAkaW5maWVsZHM6IHRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogeyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiB0aGlzLmVuZCB9LFxuICAgICAgICAgICAgJGJsb2NrczogdGhpcy5ibG9ja3MubWFwKChibG9jaykgPT4gYmxvY2suYnVpbGQoKSksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBsaXN0IGJsb2NrcyBzcGVjaWZpY2FsbHkuICovXG5leHBvcnQgY2xhc3MgTGlzdEJsb2NrRGF0YSB7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZyA9IFwibGlzdFwiO1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBwdWJsaWMgaXRlbXM6IExpc3RJdGVtRGF0YVtdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBudW1iZXIsIHB1YmxpYyBlbmQ6IG51bWJlciwgcHVibGljIG9yZGluYWw6IG51bWJlciwgcHVibGljIGJsb2NrSWQ/OiBzdHJpbmcpIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJHR5cGU6IFwibGlzdFwiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYnVpbGQoKSksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBjb2RlYmxvY2tzIHNwZWNpZmljYWxseS4gKi9cbmV4cG9ydCBjbGFzcyBDb2RlYmxvY2tEYXRhIHtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJjb2RlYmxvY2tcIjtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvcmRpbmFsOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBsYW5ndWFnZXM6IHN0cmluZ1tdLFxuICAgICAgICBwdWJsaWMgc3R5bGU6IFwiaW5kZW50XCIgfCBcImZlbmNlZFwiLFxuICAgICAgICBwdWJsaWMgY29udGVudFN0YXJ0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjb250ZW50RW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBibG9ja0lkPzogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25NYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkdHlwZTogXCJjb2RlYmxvY2tcIixcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJHN0eWxlOiB0aGlzLnN0eWxlLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogeyBzdGFydDogdGhpcy5jb250ZW50U3RhcnQsIGVuZDogdGhpcy5jb250ZW50RW5kIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBkYXRhYmxvY2tzIHNwZWNpZmljYWxseS4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYmxvY2tEYXRhIHtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJkYXRhYmxvY2tcIjtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvcmRpbmFsOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT4sXG4gICAgICAgIHB1YmxpYyBibG9ja0lkPzogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25NYXJrZG93bkRhdGFibG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkdHlwZTogXCJkYXRhYmxvY2tcIixcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQmFzZSBibG9jayBtZXRhZGF0YSB1c2VkIGZvciBub24tc3BlY2lmaWMgYmxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VCbG9ja0RhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHN0YXJ0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBlbmQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIG9yZGluYWw6IG51bWJlcixcbiAgICAgICAgcHVibGljIHR5cGU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGJsb2NrSWQ/OiBzdHJpbmdcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duQmxvY2sge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEJsb2NrRGF0YSA9IExpc3RCbG9ja0RhdGEgfCBDb2RlYmxvY2tEYXRhIHwgRGF0YWJsb2NrRGF0YSB8IEJhc2VCbG9ja0RhdGE7XG5cbi8qKiBVdGlsaXR5IGZvciBjb25zdHJ1Y3RpbmcgbWFya2Rvd24gbGlzdCBpdGVtcy4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBwdWJsaWMgZWxlbWVudHM6IExpc3RJdGVtRGF0YVtdID0gW107XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGVuZDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcGFyZW50TGluZTogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgc3ltYm9sPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYmxvY2tJZD86IHN0cmluZyxcbiAgICAgICAgcHVibGljIHN0YXR1cz86IHN0cmluZyxcbiAgICAgICAgcHVibGljIHRleHQ/OiBzdHJpbmdcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBhcmVudExpbmU6IHRoaXMucGFyZW50TGluZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogeyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiB0aGlzLmVuZCB9LFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy5lbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQuYnVpbGQoKSksXG4gICAgICAgICAgICAkdHlwZTogdGhpcy5zdGF0dXMgPyBcInRhc2tcIiA6IFwibGlzdFwiLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksXG4gICAgICAgICAgICAkc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgICRzeW1ib2w6IHRoaXMuc3ltYm9sLFxuICAgICAgICAgICAgJHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgfSBhcyBKc29uTWFya2Rvd25UYXNrSXRlbTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQge1xuICAgIEJpbmFyeU9wLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRXhwcmVzc2lvbnMsXG4gICAgTGFtYmRhRXhwcmVzc2lvbixcbiAgICBMaXN0RXhwcmVzc2lvbixcbiAgICBMaXRlcmFsRXhwcmVzc2lvbixcbiAgICBPYmplY3RFeHByZXNzaW9uLFxuICAgIFZhcmlhYmxlRXhwcmVzc2lvbixcbn0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQge1xuICAgIEluZGV4Q2hpbGRPZixcbiAgICBJbmRleFBhdGgsXG4gICAgSW5kZXhJZCxcbiAgICBJbmRleE5vdCxcbiAgICBJbmRleFBhcmVudE9mLFxuICAgIEluZGV4UXVlcnksXG4gICAgSW5kZXhUYWdnZWQsXG4gICAgSW5kZXhUeXBlZCxcbiAgICBJbmRleExpbmtlZCxcbiAgICBJbmRleEZpZWxkLFxuICAgIEluZGV4RXhwcmVzc2lvbixcbn0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBub3JtYWxpemVEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQYXJzaW5nIFByaW1pdGl2ZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogUHJpbWl0aXZlIHBhcnNpbmcgZm9yIGNvbW1vbmx5IHNlZW4gdHlwZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW1pdGl2ZXNMYW5ndWFnZSB7XG4gICAgbnVtYmVyOiBudW1iZXI7XG4gICAgc3RyaW5nOiBzdHJpbmc7XG4gICAgZXNjYXBlQ2hhcmFjdGVyOiBzdHJpbmc7XG4gICAgYm9vbDogYm9vbGVhbjtcbiAgICB0YWc6IHN0cmluZztcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgbGluazogTGluaztcbiAgICBlbWJlZExpbms6IExpbms7XG4gICAgcm9vdERhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVTaG9ydGhhbmQ6IGtleW9mIHR5cGVvZiBEQVRFX1NIT1JUSEFORFM7XG4gICAgZGF0ZTogRGF0ZVRpbWU7XG4gICAgZGF0ZVBsdXM6IERhdGVUaW1lO1xuICAgIGR1cmF0aW9uVHlwZToga2V5b2YgdHlwZW9mIERVUkFUSU9OX1RZUEVTO1xuICAgIGR1cmF0aW9uOiBEdXJhdGlvbjtcbiAgICByYXdOdWxsOiBzdHJpbmc7XG5cbiAgICBiaW5hcnlQbHVzTWludXM6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU11bERpdjogQmluYXJ5T3A7XG4gICAgYmluYXJ5Q29tcGFyZU9wOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlBbmRPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5T3JPcDogQmluYXJ5T3A7XG5cbiAgICAvLyBMaXRlcmFsIGZpZWxkIHBhcnNpbmcgZm9yIGluZ2VzdGluZyBpbmxpbmUgZmllbGRzIGFuZCBmcm9udG1hdHRlci5cbiAgICBhdG9tSW5saW5lRmllbGQ6IExpdGVyYWw7XG4gICAgaW5saW5lRmllbGRMaXN0OiBMaXRlcmFsW107XG4gICAgaW5saW5lRmllbGQ6IExpdGVyYWw7XG59XG5cbi8qKiBJbXBsZW1lbnRhdGlvbnMgZm9yIG1hbnkgcHJpbWl0aXZlcy4gKi9cbmV4cG9ydCBjb25zdCBQUklNSVRJVkVTID0gUC5jcmVhdGVMYW5ndWFnZTxQcmltaXRpdmVzTGFuZ3VhZ2U+KHtcbiAgICBudW1iZXI6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvLT9bMC05XSsoXFwuWzAtOV0rKT8vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBOdW1iZXIucGFyc2VGbG9hdChzdHIpKVxuICAgICAgICAgICAgLmRlc2MoXCJudW1iZXJcIiksXG5cbiAgICAvLyBBIHF1b3RlLXN1cnJvdW5kZWQgc3RyaW5nIHdoaWNoIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXJzICgnXFwnKS5cbiAgICBzdHJpbmc6IChxKSA9PlxuICAgICAgICBQLnN0cmluZygnXCInKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgUC5hbHQocS5lc2NhcGVDaGFyYWN0ZXIsIFAubm9uZU9mKCdcIlxcXFwnKSlcbiAgICAgICAgICAgICAgICAgICAgLmF0TGVhc3QoMClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hhcnMpID0+IGNoYXJzLmpvaW4oXCJcIikpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc2tpcChQLnN0cmluZygnXCInKSlcbiAgICAgICAgICAgIC5kZXNjKFwic3RyaW5nXCIpLFxuXG4gICAgZXNjYXBlQ2hhcmFjdGVyOiAoXykgPT5cbiAgICAgICAgUC5zdHJpbmcoXCJcXFxcXCIpXG4gICAgICAgICAgICAudGhlbihQLmFueSlcbiAgICAgICAgICAgIC5tYXAoKGVzY2FwZWQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZXNjYXBpbmcgYSBiYWNrc2xhc2ggb3IgYSBxdW90ZSwgcGFzcyBpbiBvbiBpbiBlc2NhcGVkIGZvcm1cbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZCA9PT0gJ1wiJykgcmV0dXJuICdcIic7XG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09IFwiXFxcXFwiKSByZXR1cm4gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gXCJcXFxcXCIgKyBlc2NhcGVkO1xuICAgICAgICAgICAgfSksXG5cbiAgICAvLyBBIGJvb2xlYW4gdHJ1ZS9mYWxzZSB2YWx1ZS5cbiAgICBib29sOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL3RydWV8ZmFsc2V8VHJ1ZXxGYWxzZS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ci50b0xvd2VyQ2FzZSgpID09IFwidHJ1ZVwiKVxuICAgICAgICAgICAgLmRlc2MoXCJib29sZWFuXCIpLFxuXG4gICAgLy8gQSB0YWcgb2YgdGhlIGZvcm0gJyNzdHVmZi9oZWxsby10aGVyZScuXG4gICAgdGFnOiAoXykgPT5cbiAgICAgICAgUC5zZXFNYXAoXG4gICAgICAgICAgICBQLnN0cmluZyhcIiNcIiksXG4gICAgICAgICAgICBQLmFsdChQLnJlZ2V4cCgvW15cXHUyMDAwLVxcdTIwNkZcXHUyRTAwLVxcdTJFN0YnIVwiIyQlJigpKissLjo7PD0+P0BeYHt8fX5cXFtcXF1cXFxcXFxzXS8pLmRlc2MoXCJ0ZXh0XCIpKS5tYW55KCksXG4gICAgICAgICAgICAoc3RhcnQsIHJlc3QpID0+IHN0YXJ0ICsgcmVzdC5qb2luKFwiXCIpXG4gICAgICAgICkuZGVzYyhcInRhZ1wiKSxcblxuICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IuLi4gZW1vamkuXG4gICAgaWRlbnRpZmllcjogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1tcXHB7TGV0dGVyfSRdL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1swLTlcXHB7TGV0dGVyfSRfLV0vdSksIFAucmVnZXhwKEVNT0pJX1JFR0VYKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKGZpcnN0LCByZXN0KSA9PiBmaXJzdCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ2YXJpYWJsZVwiKSxcblxuICAgIC8vIEFuIE9ic2lkaWFuIGxpbmsgb2YgdGhlIGZvcm0gW1s8bGluaz5dXS5cbiAgICBsaW5rOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL1xcW1xcWyhbXlxcW1xcXV0qPylcXF1cXF0vdSwgMSlcbiAgICAgICAgICAgIC5tYXAoKGxpbmtJbm5lcikgPT4gTGluay5wYXJzZUlubmVyKGxpbmtJbm5lcikpXG4gICAgICAgICAgICAuZGVzYyhcImZpbGUgbGlua1wiKSxcblxuICAgIC8vIEFuIGVtYmVkZGFibGUgbGluayB3aGljaCBjYW4gc3RhcnQgd2l0aCAnIScuIFRoaXMgb3ZlcmxhcHMgd2l0aCB0aGUgbm9ybWFsIG5lZ2F0aW9uIG9wZXJhdG9yLCBzbyBpdCBpcyBvbmx5XG4gICAgLy8gcHJvdmlkZWQgZm9yIG1ldGFkYXRhIHBhcnNpbmcuXG4gICAgZW1iZWRMaW5rOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCIhXCIpLmF0TW9zdCgxKSwgcS5saW5rLCAocCwgbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHAubGVuZ3RoID4gMCkgbC5lbWJlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgfSkuZGVzYyhcImZpbGUgbGlua1wiKSxcblxuICAgIC8vIEJpbmFyeSBwbHVzIG9yIG1pbnVzIG9wZXJhdG9yLlxuICAgIGJpbmFyeVBsdXNNaW51czogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCt8LS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ciBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJysnIG9yICctJ1wiKSxcblxuICAgIC8vIEJpbmFyeSB0aW1lcyBvciBkaXZpZGUgb3BlcmF0b3IuXG4gICAgYmluYXJ5TXVsRGl2OiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL1xcKnxcXC98JS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ciBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJyonIG9yICcvJyBvciAnJSdcIiksXG5cbiAgICAvLyBCaW5hcnkgY29tcGFyaXNvbiBvcGVyYXRvci5cbiAgICBiaW5hcnlDb21wYXJlT3A6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvPj18PD18IT18Pnw8fD0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGJvb2xlYW4gY29tYmluYXRpb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5QW5kT3A6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvYW5kfCYvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwiJlwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInYW5kJ1wiKSxcbiAgICBiaW5hcnlPck9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL29yfFxcfC9pKVxuICAgICAgICAgICAgLm1hcCgoX3N0cikgPT4gXCJ8XCIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIidvcidcIiksXG5cbiAgICAvLyBBIGRhdGUgd2hpY2ggY2FuIGJlIFlZWVktTU1bLUREVEhIOm1tOnNzXS5cbiAgICByb290RGF0ZTogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFAucmVnZXhwKC9cXGR7NH0vKSwgUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksICh5ZWFyLCBfLCBtb250aCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiBOdW1iZXIucGFyc2VJbnQoeWVhciksIG1vbnRoOiBOdW1iZXIucGFyc2VJbnQobW9udGgpIH0pO1xuICAgICAgICB9KS5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuICAgIGRhdGVTaG9ydGhhbmQ6IChfKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKERBVEVfU0hPUlRIQU5EUylcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAubWFwKFAuc3RyaW5nKVxuICAgICAgICApIGFzIFAuUGFyc2VyPGtleW9mIHR5cGVvZiBEQVRFX1NIT1JUSEFORFM+LFxuICAgIGRhdGU6IChxKSA9PlxuICAgICAgICBjaGFpbk9wdDxEYXRlVGltZT4oXG4gICAgICAgICAgICBxLnJvb3REYXRlLFxuICAgICAgICAgICAgKHltOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIi1cIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIGRheSkgPT4geW0uc2V0KHsgZGF5OiBOdW1iZXIucGFyc2VJbnQoZGF5KSB9KSksXG4gICAgICAgICAgICAoeW1kOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIlRcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIGhvdXIpID0+IHltZC5zZXQoeyBob3VyOiBOdW1iZXIucGFyc2VJbnQoaG91cikgfSkpLFxuICAgICAgICAgICAgKHltZGg6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiOlwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoXywgbWludXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICB5bWRoLnNldCh7IG1pbnV0ZTogTnVtYmVyLnBhcnNlSW50KG1pbnV0ZSkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIHNlY29uZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaG0uc2V0KHsgc2Vjb25kOiBOdW1iZXIucGFyc2VJbnQoc2Vjb25kKSB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoeW1kaG1zOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLmFsdChcbiAgICAgICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCIuXCIpLCBQLnJlZ2V4cCgvXFxkezN9LyksIChfLCBtaWxsaXNlY29uZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHltZGhtcy5zZXQoeyBtaWxsaXNlY29uZDogTnVtYmVyLnBhcnNlSW50KG1pbGxpc2Vjb25kKSB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBQLnN1Y2NlZWQoeW1kaG1zKSAvLyBwYXNzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkdDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiK1wiKS5vcihQLnN0cmluZyhcIi1cIikpLCBQLnJlZ2V4cCgvXFxkezEsMn0oOlxcZHsyfSk/LyksIChwbSwgaHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkdC5zZXRab25lKFwiVVRDXCIgKyBwbSArIGhyLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJaXCIpLCAoKSA9PiBkdC5zZXRab25lKFwidXRjXCIsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KSksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiW1wiKSwgUC5yZWdleHAoL1swLTlBLVphLXorLVxcL10rL3UpLCBQLnN0cmluZyhcIl1cIiksIChfYSwgem9uZSwgX2IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkdC5zZXRab25lKHpvbmUsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICAuYXNzZXJ0KChkdDogRGF0ZVRpbWUpID0+IGR0LmlzVmFsaWQsIFwidmFsaWQgZGF0ZVwiKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU11cIiksXG5cbiAgICAvLyBBIGRhdGUsIHBsdXMgdmFyaW91cyBzaG9ydGhhbmQgdGltZXMgb2YgZGF5IGl0IGNvdWxkIGJlLlxuICAgIGRhdGVQbHVzOiAocSkgPT5cbiAgICAgICAgUC5hbHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5kYXRlU2hvcnRoYW5kLm1hcCgoZCkgPT4gREFURV9TSE9SVEhBTkRTW2RdKCkpLFxuICAgICAgICAgICAgcS5kYXRlXG4gICAgICAgICkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXSBvciBpbiBzaG9ydGhhbmRcIiksXG5cbiAgICAvLyBBIGR1cmF0aW9uIG9mIHRpbWUuXG4gICAgZHVyYXRpb25UeXBlOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEVVJBVElPTl9UWVBFUylcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAubWFwKFAuc3RyaW5nKVxuICAgICAgICApIGFzIFAuUGFyc2VyPGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUz4sXG4gICAgZHVyYXRpb246IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChxLm51bWJlciwgUC5vcHRXaGl0ZXNwYWNlLCBxLmR1cmF0aW9uVHlwZSwgKGNvdW50LCBfLCB0KSA9PlxuICAgICAgICAgICAgRFVSQVRJT05fVFlQRVNbdF0ubWFwVW5pdHMoKHgpID0+IHggKiBjb3VudClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5MShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLm9yKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAubWFwKChkdXJhdGlvbnMpID0+IGR1cmF0aW9ucy5yZWR1Y2UoKHAsIGMpID0+IHAucGx1cyhjKSkpXG4gICAgICAgICAgICAuZGVzYyhcImR1cmF0aW9uIGxpa2UgNGhyMm1pblwiKSxcblxuICAgIC8vIEEgcmF3IG51bGwgdmFsdWUuXG4gICAgcmF3TnVsbDogKF8pID0+IFAuc3RyaW5nKFwibnVsbFwiKSxcblxuICAgIC8vIElubGluZSBmaWVsZCB2YWx1ZSBwYXJzaW5nLlxuICAgIGF0b21JbmxpbmVGaWVsZDogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbi5tYXAoKGQpID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGQpKSxcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS50YWcsXG4gICAgICAgICAgICBxLmVtYmVkTGluayxcbiAgICAgICAgICAgIHEuYm9vbCxcbiAgICAgICAgICAgIHEubnVtYmVyLFxuICAgICAgICAgICAgcS5yYXdOdWxsXG4gICAgICAgICksXG4gICAgaW5saW5lRmllbGRMaXN0OiAocSkgPT4gcS5hdG9tSW5saW5lRmllbGQuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5sb29rYWhlYWQocS5hdG9tSW5saW5lRmllbGQpKSxcbiAgICBpbmxpbmVGaWVsZDogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgUC5zZXFNYXAocS5hdG9tSW5saW5lRmllbGQsIFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIHEuaW5saW5lRmllbGRMaXN0LCAoZiwgX3MsIGwpID0+XG4gICAgICAgICAgICAgICAgW2ZdLmNvbmNhdChsKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHEuYXRvbUlubGluZUZpZWxkXG4gICAgICAgICksXG59KTtcblxuLyoqIEVtb2ppIHJlZ2V4LCBzdHJwcGluZyBhbnkgcmVnZXggZmxhZ3MgaXQgaGFzLiAqL1xuY29uc3QgRU1PSklfUkVHRVggPSBuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgXCJcIik7XG5cbi8qKiBQcm92aWRlcyBhIGxvb2t1cCB0YWJsZSBmb3IgdW5pdCBkdXJhdGlvbnMgb2YgdGhlIGdpdmVuIHR5cGUuICovXG5leHBvcnQgY29uc3QgRFVSQVRJT05fVFlQRVMgPSB7XG4gICAgeWVhcjogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHllYXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcblxuICAgIG1vbnRoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuICAgIG1vbnRoczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtbzogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG5cbiAgICB3ZWVrOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2Vla3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3azogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdrczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHc6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcblxuICAgIGRheTogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG4gICAgZGF5czogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG4gICAgZDogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG5cbiAgICBob3VyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaG91cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGg6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcblxuICAgIG1pbnV0ZTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWludXRlczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcbiAgICBtaW5zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcbiAgICBtOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcblxuICAgIHNlY29uZDogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2Vjb25kczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbiAgICBzZWNzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbiAgICBzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbn07XG5cbi8qKiBTaG9ydGhhbmQgZm9yIGNvbW1vbiBkYXRlcyAocmVsYXRpdmUgdG8gcmlnaHQgbm93KS4gKi9cbmV4cG9ydCBjb25zdCBEQVRFX1NIT1JUSEFORFMgPSB7XG4gICAgbm93OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLFxuICAgIHRvZGF5OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJkYXlcIiksXG4gICAgeWVzdGVyZGF5OiAoKSA9PlxuICAgICAgICBEYXRlVGltZS5sb2NhbCgpXG4gICAgICAgICAgICAuc3RhcnRPZihcImRheVwiKVxuICAgICAgICAgICAgLm1pbnVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pKSxcbiAgICB0b21vcnJvdzogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pKSxcbiAgICBzb3c6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIndlZWtcIiksXG4gICAgXCJzdGFydC1vZi13ZWVrXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIndlZWtcIiksXG4gICAgZW93OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBcImVuZC1vZi13ZWVrXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ3ZWVrXCIpLFxuICAgIHNveTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwieWVhclwiKSxcbiAgICBcInN0YXJ0LW9mLXllYXJcIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwieWVhclwiKSxcbiAgICBlb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIFwiZW5kLW9mLXllYXJcIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcInllYXJcIiksXG4gICAgc29tOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBcInN0YXJ0LW9mLW1vbnRoXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIm1vbnRoXCIpLFxuICAgIGVvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIm1vbnRoXCIpLFxuICAgIFwiZW5kLW9mLW1vbnRoXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbn07XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEV4cHJlc3Npb24gTGFuZ3VhZ2UgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHR5cGUgUG9zdGZpeEZyYWdtZW50ID1cbiAgICB8IHsgdHlwZTogXCJkb3RcIjsgZXhwcjogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJpbmRleFwiOyBleHByOiBFeHByZXNzaW9uIH1cbiAgICB8IHsgdHlwZTogXCJmdW5jdGlvblwiOyBleHByczogRXhwcmVzc2lvbltdIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwcmVzc2lvbkxhbmd1YWdlIHtcbiAgICB2YXJpYWJsZTogVmFyaWFibGVFeHByZXNzaW9uO1xuICAgIG51bWJlcjogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgYm9vbDogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgc3RyaW5nOiBMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICBkYXRlOiBMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICBkdXJhdGlvbjogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgbGluazogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgbnVsbDogTGl0ZXJhbEV4cHJlc3Npb247XG5cbiAgICBsaXN0OiBMaXN0RXhwcmVzc2lvbjtcbiAgICBvYmplY3Q6IE9iamVjdEV4cHJlc3Npb247XG5cbiAgICBuZWdhdGVkOiBFeHByZXNzaW9uO1xuICAgIGF0b206IEV4cHJlc3Npb247XG4gICAgaW5kZXg6IEV4cHJlc3Npb247XG4gICAgbGFtYmRhOiBMYW1iZGFFeHByZXNzaW9uO1xuXG4gICAgLy8gUG9zdGZpeCBwYXJzZXJzIGZvciBmdW5jdGlvbiBjYWxscyAmIHRoZSBsaWtlLlxuICAgIGRvdFBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcbiAgICBpbmRleFBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcbiAgICBmdW5jdGlvblBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcblxuICAgIC8vIEJpbmFyeSBvcCBwYXJzZXJzLlxuICAgIGJpbmFyeU11bERpdjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlQbHVzTWludXM6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Q29tcGFyZTogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlCb29sZWFuOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeU9wOiBFeHByZXNzaW9uO1xuICAgIHBhcmVuczogRXhwcmVzc2lvbjtcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFBhcnNlIGZvciB0aGUgZGF0YWNvcmUgZXhwcmVzc2lvbiBsYW5ndWFnZSwgd2hpY2ggcHJvdmlkZXMgc2ltcGxlIGFuZCB2YWd1ZWx5IEpTLWxvb2tpbmcgY29tcHV0YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBSRVNTSU9OID0gUC5jcmVhdGVMYW5ndWFnZTxFeHByZXNzaW9uTGFuZ3VhZ2U+KHtcbiAgICAvLyBGaWVsZCBwYXJzaW5nLlxuICAgIHZhcmlhYmxlOiAoXykgPT4gUFJJTUlUSVZFUy5pZGVudGlmaWVyLm1hcChFeHByZXNzaW9ucy52YXJpYWJsZSkuZGVzYyhcInZhcmlhYmxlXCIpLFxuICAgIG51bWJlcjogKF8pID0+IFBSSU1JVElWRVMubnVtYmVyLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwibnVtYmVyXCIpLFxuICAgIHN0cmluZzogKF8pID0+IFBSSU1JVElWRVMuc3RyaW5nLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwic3RyaW5nXCIpLFxuICAgIGJvb2w6IChfKSA9PiBQUklNSVRJVkVTLmJvb2wubWFwKEV4cHJlc3Npb25zLmxpdGVyYWwpLmRlc2MoXCJib29sZWFuXCIpLFxuICAgIGRhdGU6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihcImRhdGVcIiwgUFJJTUlUSVZFUy5kYXRlUGx1cylcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZGF0ZV0pID0+IEV4cHJlc3Npb25zLmxpdGVyYWwoZGF0ZSkpXG4gICAgICAgICAgICAuZGVzYyhcImRhdGVcIiksXG4gICAgZHVyYXRpb246IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihcImR1clwiLCBQUklNSVRJVkVTLmR1cmF0aW9uKVxuICAgICAgICAgICAgLm1hcCgoW19mdW5jLCBkdXJdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGR1cikpXG4gICAgICAgICAgICAuZGVzYyhcImR1cmF0aW9uXCIpLFxuICAgIG51bGw6IChfKSA9PiBQUklNSVRJVkVTLnJhd051bGwubWFwKChfKSA9PiBFeHByZXNzaW9ucy5OVUxMKSxcbiAgICBsaW5rOiAoXykgPT4gUFJJTUlUSVZFUy5saW5rLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKSxcbiAgICBsaXN0OiAocSkgPT5cbiAgICAgICAgcS5leHByZXNzaW9uXG4gICAgICAgICAgICAuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSlcbiAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiW1wiKS5za2lwKFAub3B0V2hpdGVzcGFjZSksIFAub3B0V2hpdGVzcGFjZS50aGVuKFAuc3RyaW5nKFwiXVwiKSkpXG4gICAgICAgICAgICAubWFwKChsKSA9PiBFeHByZXNzaW9ucy5saXN0KGwpKVxuICAgICAgICAgICAgLmRlc2MoXCJsaXN0XCIpLFxuICAgIG9iamVjdDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUFJJTUlUSVZFUy5pZGVudGlmaWVyLm9yKFBSSU1JVElWRVMuc3RyaW5nKSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiOlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAobmFtZSwgX3NlcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgICAgICAuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSlcbiAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwie1wiKS5za2lwKFAub3B0V2hpdGVzcGFjZSksIFAub3B0V2hpdGVzcGFjZS50aGVuKFAuc3RyaW5nKFwifVwiKSkpXG4gICAgICAgICAgICAubWFwKCh2YWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlczogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvbj4gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB2YWxzKSByZXNbZW50cnkubmFtZV0gPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvbnMub2JqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRlc2MoXCJvYmplY3QgKCd7IGE6IDEsIGI6IDIgfScpXCIpLFxuXG4gICAgYXRvbTogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLy8gUGxhY2UgZW1iZWQgbGlua3MgYWJvdmUgbmVnYXRlZCBmaWVsZHMgYXMgdGhleSBhcmUgdGhlIHNwZWNpYWwgcGFyc2VyIGNhc2UgJyFbW3RoaW5nXV0nIGFuZCBhcmUgZ2VuZXJhbGx5IHVuYW1iaWdpb3VzLlxuICAgICAgICAgICAgUFJJTUlUSVZFUy5lbWJlZExpbmsubWFwKChsKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGwpKSxcbiAgICAgICAgICAgIHEubmVnYXRlZCxcbiAgICAgICAgICAgIHEubGluayxcbiAgICAgICAgICAgIHEubGlzdCxcbiAgICAgICAgICAgIHEub2JqZWN0LFxuICAgICAgICAgICAgcS5sYW1iZGEsXG4gICAgICAgICAgICBxLnBhcmVucyxcbiAgICAgICAgICAgIHEuYm9vbCxcbiAgICAgICAgICAgIHEubnVtYmVyLFxuICAgICAgICAgICAgcS5zdHJpbmcsXG4gICAgICAgICAgICBxLmRhdGUsXG4gICAgICAgICAgICBxLmR1cmF0aW9uLFxuICAgICAgICAgICAgcS5udWxsLFxuICAgICAgICAgICAgcS52YXJpYWJsZVxuICAgICAgICApLFxuICAgIGluZGV4OiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5hdG9tLCBQLmFsdChxLmRvdFBvc3RmaXgsIHEuaW5kZXhQb3N0Zml4LCBxLmZ1bmN0aW9uUG9zdGZpeCkubWFueSgpLCAob2JqLCBwb3N0Zml4ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICBmb3IgKGxldCBwb3N0IG9mIHBvc3RmaXhlcykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocG9zdC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkb3RcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmluZGV4KHJlc3VsdCwgRXhwcmVzc2lvbnMubGl0ZXJhbChwb3N0LmV4cHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5kZXhcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmluZGV4KHJlc3VsdCwgcG9zdC5leHByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmZ1bmMocmVzdWx0LCBwb3N0LmV4cHJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgbmVnYXRlZDogKHEpID0+IFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKSwgcS5pbmRleCwgKF8sIGZpZWxkKSA9PiBFeHByZXNzaW9ucy5uZWdhdGUoZmllbGQpKS5kZXNjKFwibmVnYXRlZCBmaWVsZFwiKSxcbiAgICBwYXJlbnM6IChxKSA9PiBxLmV4cHJlc3Npb24udHJpbShQLm9wdFdoaXRlc3BhY2UpLndyYXAoUC5zdHJpbmcoXCIoXCIpLCBQLnN0cmluZyhcIilcIikpLFxuICAgIGxhbWJkYTogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUFJJTUlUSVZFUy5pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAgICAgLndyYXAoUC5zdHJpbmcoXCIoXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSwgUC5zdHJpbmcoXCIpXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSksXG4gICAgICAgICAgICBQLnN0cmluZyhcIj0+XCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIChpZGVudCwgX2lnbm9yZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGlkZW50LCB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuXG4gICAgZG90UG9zdGZpeDogKHEpID0+IFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUFJJTUlUSVZFUy5pZGVudGlmaWVyLCAoXywgZXhwcikgPT4gKHsgdHlwZTogXCJkb3RcIiwgZXhwciB9KSksXG4gICAgaW5kZXhQb3N0Zml4OiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAoXG4gICAgICAgICAgICBQLnN0cmluZyhcIltcIiksXG4gICAgICAgICAgICBQLm9wdFdoaXRlc3BhY2UsXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBQLm9wdFdoaXRlc3BhY2UsXG4gICAgICAgICAgICBQLnN0cmluZyhcIl1cIiksXG4gICAgICAgICAgICAoXywgXzIsIGV4cHIsIF8zLCBfNCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiaW5kZXhcIiwgZXhwciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgIGZ1bmN0aW9uUG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIoXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIpXCIpLFxuICAgICAgICAgICAgKF8sIF8xLCBleHBycywgXzIsIF8zKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBleHBycyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuXG4gICAgLy8gVGhlIHByZWNlZGVuY2UgaGllcmFyY2h5IG9mIG9wZXJhdG9ycyAtIG11bHRpcGx5L2RpdmlkZSwgYWRkL3N1YnRyYWN0LCBjb21wYXJlLCBhbmQgdGhlbiBib29sZWFuIG9wZXJhdGlvbnMuXG4gICAgYmluYXJ5TXVsRGl2OiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuaW5kZXgsIFBSSU1JVElWRVMuYmluYXJ5TXVsRGl2LCBFeHByZXNzaW9ucy5iaW5hcnlPcCksXG4gICAgYmluYXJ5UGx1c01pbnVzOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5TXVsRGl2LCBQUklNSVRJVkVTLmJpbmFyeVBsdXNNaW51cywgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUNvbXBhcmU6IChxKSA9PiBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlQbHVzTWludXMsIFBSSU1JVElWRVMuYmluYXJ5Q29tcGFyZU9wLCBFeHByZXNzaW9ucy5iaW5hcnlPcCksXG4gICAgYmluYXJ5Qm9vbGVhbjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeUNvbXBhcmUsIFBSSU1JVElWRVMuYmluYXJ5QW5kT3Aub3IoUFJJTUlUSVZFUy5iaW5hcnlPck9wKSwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeU9wOiAocSkgPT4gcS5iaW5hcnlCb29sZWFuLFxuXG4gICAgZXhwcmVzc2lvbjogKHEpID0+IHEuYmluYXJ5T3AsXG59KTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFF1ZXJ5IExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogU3VwcG9ydGVkIHR5cGVzIGluIHRoZSBncmFtbWFyIGZvciBpbmRleCBxdWVyaWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWVyeUxhbmd1YWdlIHtcbiAgICBxdWVyeVRhZzogSW5kZXhUYWdnZWQ7XG4gICAgcXVlcnlJZDogSW5kZXhJZDtcbiAgICBxdWVyeVR5cGU6IEluZGV4VHlwZWQ7XG4gICAgcXVlcnlQYXRoOiBJbmRleFBhdGg7XG4gICAgcXVlcnlQYXJlbnRPZjogSW5kZXhQYXJlbnRPZjtcbiAgICBxdWVyeUNoaWxkT2Y6IEluZGV4Q2hpbGRPZjtcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogSW5kZXhMaW5rZWQ7XG4gICAgcXVlcnlMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5RXhpc3RzOiBJbmRleEZpZWxkO1xuICAgIHF1ZXJ5UXVvdGVkRXhwcmVzc2lvbjogSW5kZXhFeHByZXNzaW9uO1xuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogSW5kZXhFeHByZXNzaW9uO1xuICAgIHF1ZXJ5TmVnYXRlOiBJbmRleE5vdDtcbiAgICBxdWVyeVBhcmVuczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeUF0b206IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBbmRzOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5T3JzOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5O1xufVxuXG4vKipcbiAqIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IGxhbmd1YWdlLiBEaWQgSSByZWFsbHkgbmVlZCBhIHF1ZXJ5IGxhbmd1YWdlIGluc3RlYWQgb2YganVzdCBhIGJldHRlciBVST8gUHJvYmFibHkgbm90LlxuICogQnV0IHF1ZXJ5IGxhbmd1YWdlcyBhcmUgZnVuIGZvciB0aGUgd2hvbGUgZmFtaWx5IGFuZCBhdCBzb21lIHBvaW50IHlvdSBnZXQgc28gdXNlZCB0byB3cml0aW5nIHRoZW0gdGhhdFxuICogeW91IGRvbid0IHN0b3AgdG8gdGhpbmsgaWYgeW91ICpuZWVkKiB0byB3cml0ZSB0aGVtIGFueW1vcmUuIEl0J3MgZ29vZCB0eXBpbmcgcHJhY3RpY2UgZm9yIGV2ZXJ5b25lLlxuICovXG5leHBvcnQgY29uc3QgUVVFUlkgPSBQLmNyZWF0ZUxhbmd1YWdlPFF1ZXJ5TGFuZ3VhZ2U+KHtcbiAgICBxdWVyeVRhZzogKF8pID0+IFBSSU1JVElWRVMudGFnLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidGFnZ2VkXCIsIHZhbHVlIH0pKSxcbiAgICBxdWVyeUlkOiAoXykgPT4gY3JlYXRlRnVuY3Rpb24oXCJpZFwiLCBQUklNSVRJVkVTLnN0cmluZykubWFwKChbXywgaWRdKSA9PiAoeyB0eXBlOiBcImlkXCIsIHZhbHVlOiBpZCB9KSksXG4gICAgcXVlcnlUeXBlOiAoXykgPT5cbiAgICAgICAgUC5zdHJpbmcoXCJAXCIpXG4gICAgICAgICAgICAudGhlbihQUklNSVRJVkVTLmlkZW50aWZpZXIpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gKHsgdHlwZTogXCJ0eXBlZFwiLCB2YWx1ZTogdmFsdWUgfSkpLFxuXG4gICAgcXVlcnlQYXRoOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oUC5yZWdleHAoL2U/cGF0aC9pKS5kZXNjKFwiW2VdcGF0aFwiKSwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW2Z1bmMsIHBhdGhdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogcGF0aCxcbiAgICAgICAgICAgIGV4YWN0OiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwiZXBhdGhcIixcbiAgICAgICAgfSkpLFxuXG4gICAgcXVlcnlQYXJlbnRPZjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9wYXJlbnRvZnxzdXBlcnRyZWUvaSkuZGVzYyhcInBhcmVudG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBjaGlsZHJlbl0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcInBhcmVudC1vZlwiLFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdXBlcnRyZWVcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5Q2hpbGRPZjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9jaGlsZG9mfHN1YnRyZWUvaSkuZGVzYyhcImNoaWxkb2ZcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHBhcmVudHNdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJjaGlsZC1vZlwiLFxuICAgICAgICAgICAgcGFyZW50cyxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcInN1YnRyZWVcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5U2ltcGxlTGlua2VkOiAoXykgPT5cbiAgICAgICAgUFJJTUlUSVZFUy5saW5rLm1hcCgobGluaykgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwibGlua2VkXCIsXG4gICAgICAgICAgICBzb3VyY2U6IHsgdHlwZTogXCJsaW5rXCIsIHZhbHVlOiBsaW5rIH0sXG4gICAgICAgICAgICBkaXJlY3Rpb246IFwiaW5jb21pbmdcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5TGlua2VkOiAocSkgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oUC5yZWdleHAoL2xpbmtzdG98bGlua2VkZnJvbXxjb25uZWN0ZWQvaSkuZGVzYyhcImNvbm5lY3RlZFwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgc291cmNlXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwibGlua2VkXCIsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICBkaXJlY3Rpb246XG4gICAgICAgICAgICAgICAgZnVuYy50b0xvd2VyQ2FzZSgpID09IFwibGlua3N0b1wiID8gXCJpbmNvbWluZ1wiIDogZnVuYy50b0xvd2VyQ2FzZSgpID09IFwibGlua2VkZnJvbVwiID8gXCJvdXRnb2luZ1wiIDogXCJib3RoXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUV4aXN0czogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9leGlzdHMvaSkuZGVzYyhcImV4aXN0c1wiKSwgUFJJTUlUSVZFUy5pZGVudGlmaWVyLm9yKFBSSU1JVElWRVMuc3RyaW5nKSkubWFwKFxuICAgICAgICAgICAgKFtfZnVuYywgaWRlbnRdKSA9PiAoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZmllbGRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWRlbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgIHF1ZXJ5UXVvdGVkRXhwcmVzc2lvbjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9leHByL2kpLmRlc2MoXCJleHByXCIpLCBFWFBSRVNTSU9OLmV4cHJlc3Npb24pLm1hcCgoW18sIGV4cHJdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJleHByZXNzaW9uXCIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlSYXdFeHByZXNzaW9uOiAocSkgPT4gRVhQUkVTU0lPTi5iaW5hcnlDb21wYXJlLm1hcCgoZXhwcikgPT4gKHsgdHlwZTogXCJleHByZXNzaW9uXCIsIGV4cHJlc3Npb246IGV4cHIgfSkpLFxuXG4gICAgcXVlcnlQYXJlbnM6IChxKSA9PiBxLnF1ZXJ5LnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBxdWVyeU5lZ2F0ZTogKHEpID0+XG4gICAgICAgIFAuc3RyaW5nKFwiIVwiKVxuICAgICAgICAgICAgLnNraXAoUC5vcHRXaGl0ZXNwYWNlKVxuICAgICAgICAgICAgLnRoZW4ocS5xdWVyeUF0b20pXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm5vdFwiLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHZhbHVlLFxuICAgICAgICAgICAgfSkpLFxuICAgIHF1ZXJ5QXRvbTogKHEpID0+XG4gICAgICAgIFAuYWx0PEluZGV4UXVlcnk+KFxuICAgICAgICAgICAgcS5xdWVyeVBhcmVucyxcbiAgICAgICAgICAgIHEucXVlcnlOZWdhdGUsXG4gICAgICAgICAgICBxLnF1ZXJ5U2ltcGxlTGlua2VkLFxuICAgICAgICAgICAgcS5xdWVyeVRhZyxcbiAgICAgICAgICAgIHEucXVlcnlUeXBlLFxuICAgICAgICAgICAgcS5xdWVyeUlkLFxuICAgICAgICAgICAgcS5xdWVyeUV4aXN0cyxcbiAgICAgICAgICAgIHEucXVlcnlDaGlsZE9mLFxuICAgICAgICAgICAgcS5xdWVyeVBhcmVudE9mLFxuICAgICAgICAgICAgcS5xdWVyeUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlQYXRoLFxuICAgICAgICAgICAgcS5xdWVyeVF1b3RlZEV4cHJlc3Npb24sXG4gICAgICAgICAgICAvLyBFeHByZXNzaW9ucyBhcmUgZXNzZW50aWFsbHkgdGhlIFwiY2F0Y2gtYWxsXCIgb2Ygb3RoZXJ3aXNlIHVucGFyc2VhYmxlIHRlcm1zLCBzbyB0aGV5IHNob3VsZCBnbyBhYnNvbHV0ZSBsYXN0LlxuICAgICAgICAgICAgcS5xdWVyeVJhd0V4cHJlc3Npb25cbiAgICAgICAgKSxcbiAgICBxdWVyeUFuZHM6IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5xdWVyeUF0b20sIFBSSU1JVElWRVMuYmluYXJ5QW5kT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJhbmRcIixcbiAgICAgICAgICAgIGVsZW1lbnRzOiBbbGVmdCwgcmlnaHRdLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlPcnM6IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5xdWVyeUFuZHMsIFBSSU1JVElWRVMuYmluYXJ5T3JPcCwgKGxlZnQsIF9vcCwgcmlnaHQpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcIm9yXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5OiAocSkgPT4gcS5xdWVyeU9ycy50cmltKFAub3B0V2hpdGVzcGFjZSksXG59KTtcblxuLyoqIFJldHVybiBhIG5ldyBwYXJzZXIgd2hpY2ggZXhlY3V0ZXMgdGhlIHVuZGVybHlpbmcgcGFyc2VyIGFuZCByZXR1cm5zIGl0J3MgcmF3IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlUmF3PFQ+KGJhc2U6IFAuUGFyc2VyPFQ+KTogUC5QYXJzZXI8W1QsIHN0cmluZ10+IHtcbiAgICByZXR1cm4gUC5jdXN0b20oKF9zdWNjZXNzLCBfZmFpbHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKGJhc2UgYXMgYW55KS5fKGlucHV0LCBpKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdCwgeyB2YWx1ZTogW3Jlc3VsdC52YWx1ZSwgaW5wdXQuc3Vic3RyaW5nKGksIHJlc3VsdC5pbmRleCldIH0pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG4vKiogQ3JlYXRlIGEgbGVmdC1hc3NvY2lhdGl2ZSBiaW5hcnkgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZ2l2ZW4gc3ViLWVsZW1lbnQgYW5kIHNlcGFyYXRvci4gSGFuZGxlcyB3aGl0ZXNwYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJpbmFyeVBhcnNlcjxULCBVPihcbiAgICBjaGlsZDogUC5QYXJzZXI8VD4sXG4gICAgc2VwOiBQLlBhcnNlcjxVPixcbiAgICBjb21iaW5lOiAoYTogVCwgYjogVSwgYzogVCkgPT4gVFxuKTogUC5QYXJzZXI8VD4ge1xuICAgIHJldHVybiBQLnNlcU1hcChjaGlsZCwgUC5zZXEoUC5vcHRXaGl0ZXNwYWNlLCBzZXAsIFAub3B0V2hpdGVzcGFjZSwgY2hpbGQpLm1hbnkoKSwgKGZpcnN0LCByZXN0KSA9PiB7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gZmlyc3Q7XG5cbiAgICAgICAgbGV0IG5vZGUgPSBjb21iaW5lKGZpcnN0LCByZXN0WzBdWzFdLCByZXN0WzBdWzNdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHJlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBub2RlID0gY29tYmluZShub2RlLCByZXN0W2luZGV4XVsxXSwgcmVzdFtpbmRleF1bM10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhcnNlciB3aGljaCBwYXJzZXMgXFw8ZnVuY3Rpb25cXD4oXFw8YXJnc1xcPikuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uPFQ+KGZ1bmM6IHN0cmluZyB8IFAuUGFyc2VyPHN0cmluZz4sIGFyZ3M6IFAuUGFyc2VyPFQ+KTogUC5QYXJzZXI8W3N0cmluZywgVF0+IHtcbiAgICBjb25zdCByZWFsRnVuYyA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gUC5zdHJpbmcoZnVuYykgOiBmdW5jO1xuICAgIHJldHVybiBQLnNlcU1hcChcbiAgICAgICAgcmVhbEZ1bmMuc2tpcChQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICBhcmdzLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICAgICAgKGYsIGEpID0+IFtmLCBhXVxuICAgICk7XG59XG5cbi8qKiBDaGFpbnMgYSBsaXN0IG9mIHBhcnNlcnM7IHRoZSBmaXJzdCBvbmUgbXVzdCBzdWNjZWVkLCBidXQgZm9sbG93aW5nIG9uZXMgbWF5IGZhaWwgd2l0aG91dCBmYWlsaW5nIHRoZSBvdmVyYWxsIHBhcnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluT3B0PFQ+KGJhc2U6IFAuUGFyc2VyPFQ+LCAuLi5mdW5jczogKChyOiBUKSA9PiBQLlBhcnNlcjxUPilbXSk6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5jdXN0b20oKF9zdWNjZXNzLCBfZmFpbHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKGJhc2UgYXMgYW55KS5fKGlucHV0LCBpKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gKGZ1bmMocmVzdWx0LnZhbHVlIGFzIFQpIGFzIGFueSkuXyhpbnB1dCwgcmVzdWx0LmluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQuc3RhdHVzKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgZXhwcmVzc2lvbnNcbiAqL1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG4vLyBSZS1leHBvcnRzIG9mIHVzZWZ1bCBnZW5lcmljIHR5cGVzLlxuZXhwb3J0IHsgTGluayB9O1xuXG4vKiogU2hvcnRoYW5kIGZvciBhIG1hcHBpbmcgZnJvbSBrZXlzIHRvIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIERhdGFPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuLyoqIFRoZSBsaXRlcmFsIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcXVlcnkgZW5naW5lLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFR5cGUgPVxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwibnVtYmVyXCJcbiAgICB8IFwic3RyaW5nXCJcbiAgICB8IFwiZGF0ZVwiXG4gICAgfCBcImR1cmF0aW9uXCJcbiAgICB8IFwibGlua1wiXG4gICAgfCBcImFycmF5XCJcbiAgICB8IFwib2JqZWN0XCJcbiAgICB8IFwiZnVuY3Rpb25cIlxuICAgIHwgXCJudWxsXCI7XG4vKiogVGhlIHJhdyB2YWx1ZXMgdGhhdCBhIGxpdGVyYWwgY2FuIHRha2Ugb24uICovXG5leHBvcnQgdHlwZSBMaXRlcmFsID1cbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCBEYXRlVGltZVxuICAgIHwgRHVyYXRpb25cbiAgICB8IExpbmtcbiAgICB8IEFycmF5PExpdGVyYWw+XG4gICAgfCBEYXRhT2JqZWN0XG4gICAgfCBGdW5jdGlvblxuICAgIHwgbnVsbDtcblxuLyoqIE1hcHMgdGhlIHN0cmluZyB0eXBlIHRvIGl0J3MgZXh0ZXJuYWwsIEFQSS1mYWNpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgdHlwZSBMaXRlcmFsUmVwcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+ID0gVCBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgPyBib29sZWFuXG4gICAgOiBUIGV4dGVuZHMgXCJudW1iZXJcIlxuICAgID8gbnVtYmVyXG4gICAgOiBUIGV4dGVuZHMgXCJzdHJpbmdcIlxuICAgID8gc3RyaW5nXG4gICAgOiBUIGV4dGVuZHMgXCJkdXJhdGlvblwiXG4gICAgPyBEdXJhdGlvblxuICAgIDogVCBleHRlbmRzIFwiZGF0ZVwiXG4gICAgPyBEYXRlVGltZVxuICAgIDogVCBleHRlbmRzIFwibnVsbFwiXG4gICAgPyBudWxsXG4gICAgOiBUIGV4dGVuZHMgXCJsaW5rXCJcbiAgICA/IExpbmtcbiAgICA6IFQgZXh0ZW5kcyBcImFycmF5XCJcbiAgICA/IEFycmF5PExpdGVyYWw+XG4gICAgOiBUIGV4dGVuZHMgXCJvYmplY3RcIlxuICAgID8gRGF0YU9iamVjdFxuICAgIDogVCBleHRlbmRzIFwiZnVuY3Rpb25cIlxuICAgID8gRnVuY3Rpb25cbiAgICA6IGFueTtcblxuLyoqIEEgd3JhcHBlZCBsaXRlcmFsIHZhbHVlIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBvbi4gKi9cbmV4cG9ydCB0eXBlIFdyYXBwZWRMaXRlcmFsID1cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwic3RyaW5nXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bWJlclwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJib29sZWFuXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImRhdGVcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiZHVyYXRpb25cIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwibGlua1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJhcnJheVwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJvYmplY3RcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiZnVuY3Rpb25cIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwibnVsbFwiPjtcblxuLyoqIENvbWJpbmVzIGEgdGV4dHVhbCB0eXBlIGFuZCB2YWx1ZTsgcHJpbWFyaWx5IHVzZWZ1bCBmb3Igc3dpdGNoaW5nIG9uLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpdGVyYWxXcmFwcGVyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZT4ge1xuICAgIHR5cGU6IFQ7XG4gICAgdmFsdWU6IExpdGVyYWxSZXByPFQ+O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqICBVdGlsaXR5IGxpYnJhcnkgZm9yIGhhbmRsaW5nIGxpdGVyYWwgdmFsdWVzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBMaXRlcmFscyB7XG4gICAgLyoqIFNldHRpbmdzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIGxpdGVyYWwgdmFsdWVzIHRvIHRleHQuICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBUb1N0cmluZ1NldHRpbmdzIHtcbiAgICAgICAgLyoqIFdoYXQgYSBudWxsIHdpbGwgcmVuZGVyIGFzLiAqL1xuICAgICAgICBudWxsUmVwcmVzZW50YXRpb246IHN0cmluZztcblxuICAgICAgICAvKiogRGF0ZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcblxuICAgICAgICAvKiogRGF0ZS10aW1lIGZvcm1hdC4gKi9cbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKiogU2FuZSwgRW5nbGlzaC1iYXNlZCBkZWZhdWx0cyBmb3IgZGF0ZSBmb3JtYXRzLiAqL1xuICAgIGV4cG9ydCBjb25zdCBERUZBVUxUX1RPX1NUUklORzogVG9TdHJpbmdTZXR0aW5ncyA9IHtcbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBcIi1cIixcblxuICAgICAgICBkYXRlRm9ybWF0OiBcIk1NTU0gZGQsIHl5eXlcIixcbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IFwiaDptbSBhIC0gTU1NTSBkZCwgeXl5eVwiLFxuICAgIH07XG5cbiAgICAvKiogQ29udmVydCBhbiBhcmJpdHJhcnkgdmFsdWUgaW50byBhIHJlYXNvbmFibGUsIE1hcmtkb3duLWZyaWVuZGx5IHN0cmluZyBpZiBwb3NzaWJsZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoXG4gICAgICAgIGZpZWxkOiBhbnksXG4gICAgICAgIHNldHRpbmc6IFRvU3RyaW5nU2V0dGluZ3MgPSBERUZBVUxUX1RPX1NUUklORyxcbiAgICAgICAgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIHNldHRpbmcubnVsbFJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiPGZ1bmN0aW9uPlwiO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiW1wiO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3cmFwcGVkLnZhbHVlLm1hcCgoZikgPT4gdG9TdHJpbmcoZiwgc2V0dGluZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICAgICAgICBpZiAocmVjdXJzaXZlKSByZXN1bHQgKz0gXCJdXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBcInsgXCIgK1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh3cmFwcGVkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZSkgPT4gZVswXSArIFwiOiBcIiArIHRvU3RyaW5nKGVbMV0sIHNldHRpbmcsIHRydWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiIH1cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRGF0ZSh3cmFwcGVkLnZhbHVlLCBzZXR0aW5nLmRhdGVGb3JtYXQsIHNldHRpbmcuZGF0ZVRpbWVGb3JtYXQpO1xuICAgICAgICAgICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1pbmltYWxEdXJhdGlvbih3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBXcmFwIGEgbGl0ZXJhbCB2YWx1ZSBzbyB5b3UgY2FuIHN3aXRjaCBvbiBpdCBlYXNpbHkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHdyYXBWYWx1ZSh2YWw6IExpdGVyYWwpOiBXcmFwcGVkTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc051bGwodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJudWxsXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJudW1iZXJcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh2YWwpKSByZXR1cm4geyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImJvb2xlYW5cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0R1cmF0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZHVyYXRpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJkYXRlXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKSByZXR1cm4geyB0eXBlOiBcImFycmF5XCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNMaW5rKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHJldHVybiB7IHR5cGU6IFwib2JqZWN0XCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBSZWN1cnNpdmVseSBtYXAgY29tcGxleCBvYmplY3RzIGF0IHRoZSBsZWF2ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcExlYXZlcyh2YWw6IExpdGVyYWwsIGZ1bmM6ICh0OiBMaXRlcmFsKSA9PiBMaXRlcmFsKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsKSkgcmVzdWx0W2tleV0gPSBtYXBMZWF2ZXModmFsdWUsIGZ1bmMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ6IExpdGVyYWxbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsKSByZXN1bHQucHVzaChtYXBMZWF2ZXModmFsdWUsIGZ1bmMpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYyh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIHR3byBhcmJpdHJhcnkgbGl0ZXJhbHMgYXJlIGVxdWFsLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoZmlyc3Q6IExpdGVyYWwgfCB1bmRlZmluZWQsIHNlY29uZDogTGl0ZXJhbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY29tcGFyZShmaXJzdCwgc2Vjb25kKSA9PSAwO1xuICAgIH1cblxuICAgIC8qKiBDb21wYXJlIHR3byBhcmJpdHJhcnkgSmF2YVNjcmlwdCB2YWx1ZXMuIFByb2R1Y2VzIGEgdG90YWwgb3JkZXJpbmcgb3ZlciBBTlkgcG9zc2libGUgZGF0YWNvcmUgdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoXG4gICAgICAgIHZhbDE6IExpdGVyYWwgfCB1bmRlZmluZWQsXG4gICAgICAgIHZhbDI6IExpdGVyYWwgfCB1bmRlZmluZWQsXG4gICAgICAgIGxpbmtOb3JtYWxpemVyPzogKGxpbms6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmVmZXJlbmNlIGVxdWFsaXR5IC0gc2hvcnQgY2lyY3VpdC5cbiAgICAgICAgaWYgKHZhbDEgPT09IHZhbDIpIHJldHVybiAwO1xuXG4gICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQvbnVsbHMgZmlyc3QuXG4gICAgICAgIGlmICh2YWwxID09PSB1bmRlZmluZWQpIHZhbDEgPSBudWxsO1xuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB2YWwyID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDEgPT09IG51bGwgJiYgdmFsMiA9PT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHZhbDEgPT09IG51bGwpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAodmFsMiA9PT0gbnVsbCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gQSBub24tbnVsbCB2YWx1ZSBub3cgd2hpY2ggd2UgY2FuIHdyYXAgJiBjb21wYXJlIG9uLlxuICAgICAgICBsZXQgd3JhcDEgPSB3cmFwVmFsdWUodmFsMSk7XG4gICAgICAgIGxldCB3cmFwMiA9IHdyYXBWYWx1ZSh2YWwyKTtcblxuICAgICAgICBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCAmJiB3cmFwMiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgICAgICAgZWxzZSBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgICAgICBlbHNlIGlmICh3cmFwMiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcblxuICAgICAgICAvLyBTaG9ydC1jaXJjdWl0IG9uIGRpZmZlcmVudCB0eXBlcyBvciBvbiByZWZlcmVuY2UgZXF1YWxpdHkuXG4gICAgICAgIGlmICh3cmFwMS50eXBlICE9IHdyYXAyLnR5cGUpIHJldHVybiB3cmFwMS50eXBlLmxvY2FsZUNvbXBhcmUod3JhcDIudHlwZSk7XG4gICAgICAgIGlmICh3cmFwMS52YWx1ZSA9PT0gd3JhcDIudmFsdWUpIHJldHVybiAwO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcDEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZS5sb2NhbGVDb21wYXJlKHdyYXAyLnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlIDwgKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh3cmFwMS52YWx1ZSA9PSAod3JhcDIudmFsdWUgYXMgbnVtYmVyKSkgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHdyYXAxLnZhbHVlID8gMSA6IC0xO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICBsZXQgbGluazEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgbGluazIgPSB3cmFwMi52YWx1ZSBhcyBMaW5rO1xuICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemUgPSBsaW5rTm9ybWFsaXplciA/PyAoKHg6IHN0cmluZykgPT4geCk7XG5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjb21wYXJlIGJ5IGZpbGUgbmFtZSBvciBkaXNwbGF5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmsgZXF1YWxpdHkuIENvbXBhcmUgYnkgcGF0aC5cbiAgICAgICAgICAgICAgICBsZXQgcGF0aENvbXBhcmUgPSBub3JtYWxpemUobGluazEucGF0aCkubG9jYWxlQ29tcGFyZShub3JtYWxpemUobGluazIucGF0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChwYXRoQ29tcGFyZSAhPSAwKSByZXR1cm4gcGF0aENvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgdHlwZS5cbiAgICAgICAgICAgICAgICBsZXQgdHlwZUNvbXBhcmUgPSBsaW5rMS50eXBlLmxvY2FsZUNvbXBhcmUobGluazIudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlICE9IDApIHJldHVybiB0eXBlQ29tcGFyZTtcblxuICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tcGFyZSBieSBzdWJwYXRoIGV4aXN0ZW5jZS5cbiAgICAgICAgICAgICAgICBpZiAobGluazEuc3VicGF0aCAmJiAhbGluazIuc3VicGF0aCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmIGxpbmsyLnN1YnBhdGgpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoIWxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgYm90aCBoYXZlIGEgc3VicGF0aCwgY29tcGFyZSBieSBzdWJwYXRoLlxuICAgICAgICAgICAgICAgIHJldHVybiAobGluazEuc3VicGF0aCA/PyBcIlwiKS5sb2NhbGVDb21wYXJlKGxpbmsyLnN1YnBhdGggPz8gXCJcIik7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBEYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSBhcyBEYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBEdXJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSBhcyBEdXJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCBmMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBmMiA9IHdyYXAyLnZhbHVlIGFzIGFueVtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLm1pbihmMS5sZW5ndGgsIGYyLmxlbmd0aCk7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKGYxW2luZGV4XSwgZjJbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgIT0gMCkgcmV0dXJuIGNvbXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmMS5sZW5ndGggLSBmMi5sZW5ndGg7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgbGV0IG8xID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IG8yID0gd3JhcDIudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBsZXQgazEgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8xKSk7XG4gICAgICAgICAgICAgICAgbGV0IGsyID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMikpO1xuICAgICAgICAgICAgICAgIGsxLnNvcnQoKTtcbiAgICAgICAgICAgICAgICBrMi5zb3J0KCk7XG5cbiAgICAgICAgICAgICAgICBsZXQga2V5Q29tcGFyZSA9IGNvbXBhcmUoazEsIGsyKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5Q29tcGFyZSAhPSAwKSByZXR1cm4ga2V5Q29tcGFyZTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmUobzFba2V5XSwgbzJba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRmluZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhY29yZSB0eXBlIGZvciBhbiBhcmJpdHJhcnkgdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHR5cGVPZih2YWw6IGFueSk6IExpdGVyYWxUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHdyYXBWYWx1ZSh2YWwpPy50eXBlO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIFwidHJ1dGh5XCIgKGkuZS4sIGlzIG5vbi1udWxsIGFuZCBoYXMgZGF0YSBpbiBpdCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzVHJ1dGh5KGZpZWxkOiBMaXRlcmFsKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCB3cmFwcGVkID0gd3JhcFZhbHVlKGZpZWxkKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZSAhPSAwO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gISF3cmFwcGVkLnZhbHVlLnBhdGg7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvTWlsbGlzKCkgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmFzKFwic2Vjb25kc1wiKSAhPSAwO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3cmFwcGVkLnZhbHVlKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGVlcCBjb3B5IGEgZmllbGQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQgZXh0ZW5kcyBMaXRlcmFsPihmaWVsZDogVCk6IFQge1xuICAgICAgICBpZiAoZmllbGQgPT09IG51bGwgfHwgZmllbGQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpZWxkO1xuXG4gICAgICAgIGlmIChMaXRlcmFscy5pc0FycmF5KGZpZWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIChbXSBhcyBMaXRlcmFsW10pLmNvbmNhdChmaWVsZC5tYXAoKHYpID0+IGRlZXBDb3B5KHYpKSkgYXMgVDtcbiAgICAgICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc09iamVjdChmaWVsZCkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQpKSByZXN1bHRba2V5XSA9IGRlZXBDb3B5KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgbnVtYmVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcIm51bWJlclwiO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbDogYW55KTogdmFsIGlzIERhdGVUaW1lIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIERhdGVUaW1lO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgZHVyYXRpb24uICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRHVyYXRpb24odmFsOiBhbnkpOiB2YWwgaXMgRHVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCh2YWw6IGFueSk6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWw6IGFueSk6IHZhbCBpcyBhbnlbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsOiBhbnkpOiB2YWwgaXMgYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGxpbmsuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzTGluayh2YWw6IGFueSk6IHZhbCBpcyBMaW5rIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIExpbms7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0IChhbmQgbm90IGFueSBvdGhlciBkYXRhY29yZS1yZWNvZ25pemVkIG9iamVjdC1saWtlIHR5cGUpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWw6IGFueSk6IHZhbCBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZhbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsID09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFpc0FycmF5KHZhbCkgJiZcbiAgICAgICAgICAgICFpc0R1cmF0aW9uKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0RhdGUodmFsKSAmJlxuICAgICAgICAgICAgIWlzTGluayh2YWwpICYmXG4gICAgICAgICAgICAhaXNOdWxsKHZhbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBqYXZhc2NyaXB0IGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbDogYW55KTogdmFsIGlzIEZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbn1cblxuLyoqIEEgZ3JvdXBpbmcgb24gYSB0eXBlIHdoaWNoIHN1cHBvcnRzIHJlY3Vyc2l2ZWx5LW5lc3RlZCBncm91cHMuXG4gKiBAZ3JvdXAgQ29tbW9uIFR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIEdyb3VwRWxlbWVudDxUPiA9IHsga2V5OiBMaXRlcmFsOyByb3dzOiBHcm91cGluZzxUPiB9O1xuLyoqXG4gKiBBIGdyb3VwaW5nLCB3aGljaCBjYW4gYmUgZWl0aGVyOlxuICogLSBhbiBhcnJheSBvZiBlbGVtZW50cyBvZiB0eXBlIGBUYCwgb3JcbiAqIC0gYW4gYXJyYXkgb2Yge0BsaW5rIEdyb3VwZWxlbWVudH1zXG4gKlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cGluZzxUPiA9IFRbXSB8IEdyb3VwRWxlbWVudDxUPltdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgR3JvdXBpbmdzIHtcbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZ3JvdXAgZW50cnkgaXMgYSBzdGFuZGFsb25lIHZhbHVlLCBvciBhIGdyb3VwaW5nIG9mIHN1Yi1lbnRyaWVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRHcm91cDxUPihlbnRyeTogYW55KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+IHtcbiAgICAgICAgcmV0dXJuIExpdGVyYWxzLmlzT2JqZWN0KGVudHJ5KSAmJiBPYmplY3Qua2V5cyhlbnRyeSkubGVuZ3RoID09IDIgJiYgXCJrZXlcIiBpbiBlbnRyeSAmJiBcInJvd3NcIiBpbiBlbnRyeTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gYXJyYXkgaXMgYSBncm91cGluZyBhcnJheS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNHcm91cGluZzxUPihlbnRyeTogR3JvdXBpbmc8VD4pOiBlbnRyeSBpcyBHcm91cEVsZW1lbnQ8VD5bXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmICghaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gYXJyYXkgaXMgYSBsZWFmIGFuZCBoYXMgbm8gc3ViZ3JvdXBpbmdzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xlYWY8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgVFtdIHtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbnRyeSkgaWYgKGlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIENvdW50IHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZWN1cnNpdmUgZ3JvdXBpbmcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiB8IEdyb3VwRWxlbWVudDxUPik6IG51bWJlciB7XG4gICAgICAgIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3VudChlbGVtZW50cy5yb3dzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0dyb3VwaW5nKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBzdWJncm91cCBvZiBlbGVtZW50cykgcmVzdWx0ICs9IGNvdW50KHN1Ymdyb3VwLnJvd3MpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgc2xpY2UgYSBncm91cGluZywgcHJlc2VydmluZyB0aGUgZ3JvdXAgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZWxlbWVudHMgW3N0YXJ0Li4uZW5kKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2xpY2U8VD4oZWxlbWVudHM6IEdyb3VwaW5nPFQ+LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IEdyb3VwaW5nPFQ+IHtcbiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAoaXNMZWFmKGVsZW1lbnRzKSkgcmV0dXJuIGVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGdyb3VwIHRoYXQgY29udGFpbnMgaW5kZXggYHN0YXJ0YC5cbiAgICAgICAgbGV0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHNlZW4gPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbGVtZW50cy5sZW5ndGggJiYgc2VlbiArIGNvdW50KGVsZW1lbnRzW2luZGV4XSkgPD0gc3RhcnQpIHtcbiAgICAgICAgICAgIHNlZW4gKz0gY291bnQoZWxlbWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdGFydCB3YXMgZ3JlYXRlciB0aGFuIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZSBncm91cGluZ3MuXG4gICAgICAgIGlmIChpbmRleCA+PSBlbGVtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IHsga2V5OiBMaXRlcmFsOyByb3dzOiBHcm91cGluZzxUPiB9W10gPSBbXTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gPCBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZWxlbWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gY291bnQoZ3JvdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTdGFydCA9IE1hdGgubWF4KHNlZW4sIHN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRW5kID0gTWF0aC5taW4oZ3JvdXBTaXplICsgc2VlbiwgZW5kKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogZ3JvdXAua2V5LFxuICAgICAgICAgICAgICAgIHJvd3M6IHNsaWNlKGdyb3VwLnJvd3MsIGdyb3VwU3RhcnQgLSBzZWVuLCBncm91cEVuZCAtIHNlZW4pLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlZW4gKz0gZ3JvdXBTaXplO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuLyoqXG4gKiAgRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKiAqL1xuZXhwb3J0IGNsYXNzIFN1Y2Nlc3M8VCwgRT4ge1xuICAgIHB1YmxpYyBzdWNjZXNzZnVsOiB0cnVlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnN1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oZjogKGE6IFQpID0+IFUpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3MoZih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oZjogKGE6IFQpID0+IFJlc3VsdDxVLCBFPik6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBFcnI8VT4oZjogKGU6IEUpID0+IFUpOiBSZXN1bHQ8VCwgVT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgUmVzdWx0PFQsIFU+O1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KHN1Y2M6IChhOiBUKSA9PiBUMiwgX2ZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwKHN1Y2MpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKF92YWx1ZTogVCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KF9tZXNzYWdlPzogKGU6IEUpID0+IHN0cmluZyk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG5cbi8qKiBGdW5jdGlvbmFsIHJldHVybiB0eXBlIGZvciBlcnJvciBoYW5kbGluZy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEZhaWx1cmU8VCwgRT4ge1xuICAgIHB1YmxpYyBzdWNjZXNzZnVsOiBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgZXJyb3I6IEUpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcDxVPihfZjogKGE6IFQpID0+IFUpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxhdE1hcDxVPihfZjogKGE6IFQpID0+IFJlc3VsdDxVLCBFPik6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueSBhcyBGYWlsdXJlPFUsIEU+O1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBFcnI8VT4oZjogKGU6IEUpID0+IFUpOiBSZXN1bHQ8VCwgVT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUoZih0aGlzLmVycm9yKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGJpbWFwPFQyLCBFMj4oX3N1Y2M6IChhOiBUKSA9PiBUMiwgZmFpbDogKGI6IEUpID0+IEUyKTogUmVzdWx0PFQyLCBFMj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBFcnIoZmFpbCkgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2UodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYXN0PFU+KCk6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlVGhyb3cobWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKHRoaXMuZXJyb3IpKTtcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJcIiArIHRoaXMuZXJyb3IpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIG1vbmFkaWMgcmVzdWx0IHR5cGUgd2hpY2ggc3RvcmVzIGVpdGhlciBcInN1Y2Nlc3NcIiBvciBcImZhaWx1cmVcIi4gQW4gYWx0ZXJuYXRpdmUgaGFuZGxpbmcgZXhjZXB0aW9uYWwgYmVoYXZpb3JcbiAqIGJ5IHVzaW5nIHRoZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IFN1Y2Nlc3M8VCwgRT4gfCBGYWlsdXJlPFQsIEU+O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIE1vbmFkaWMgJ1Jlc3VsdCcgdHlwZSB3aGljaCBlbmNhcHN1bGF0ZXMgd2hldGhlciBhIHByb2NlZHVyZSBzdWNjZWVkZWQgb3IgZmFpbGVkLCBhcyB3ZWxsIGFzIGl0J3MgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIFJlc3VsdCB7XG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBzdWNjZXNzIHJlc3VsdCB3cmFwcGluZyB0aGUgZ2l2ZW4gdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VCwgRT4odmFsdWU6IFQpOiBSZXN1bHQ8VCwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3ModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgZmFpbHVyZSB2YWx1ZSB3cmFwcGluZyB0aGUgZ2l2ZW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmU8VCwgRT4oZXJyb3I6IEUpOiBSZXN1bHQ8VCwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUoZXJyb3IpO1xuICAgIH1cblxuICAgIC8qKiBKb2luIHR3byByZXN1bHRzIHdpdGggYSBiaS1mdW5jdGlvbiBhbmQgcmV0dXJuIGEgbmV3IHJlc3VsdC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZmxhdE1hcDI8VDEsIFQyLCBPLCBFPihcbiAgICAgICAgZmlyc3Q6IFJlc3VsdDxUMSwgRT4sXG4gICAgICAgIHNlY29uZDogUmVzdWx0PFQyLCBFPixcbiAgICAgICAgZjogKGE6IFQxLCBiOiBUMikgPT4gUmVzdWx0PE8sIEU+XG4gICAgKTogUmVzdWx0PE8sIEU+IHtcbiAgICAgICAgaWYgKGZpcnN0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmQuc3VjY2Vzc2Z1bCkgcmV0dXJuIGYoZmlyc3QudmFsdWUsIHNlY29uZC52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBmYWlsdXJlKHNlY29uZC5lcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZShmaXJzdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcDI8VDEsIFQyLCBPLCBFPihcbiAgICAgICAgZmlyc3Q6IFJlc3VsdDxUMSwgRT4sXG4gICAgICAgIHNlY29uZDogUmVzdWx0PFQyLCBFPixcbiAgICAgICAgZjogKGE6IFQxLCBiOiBUMikgPT4gT1xuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwMihmaXJzdCwgc2Vjb25kLCAoYSwgYikgPT4gc3VjY2VzcyhmKGEsIGIpKSk7XG4gICAgfVxuXG4gICAgLyoqIE1hcCBhIGZhaWxhYmxlIGZ1bmN0aW9uIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0LCByZXR1cm5pbmcgZWFybHkgb24gZmFpbHVyZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbWFwQWxsPFQsIE8sIEU+KGlucHV0OiBJdGVyYWJsZTxUPiwgZnVuYzogKGlucHV0OiBUKSA9PiBSZXN1bHQ8TywgRT4pOiBSZXN1bHQ8T1tdLCBFPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogT1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpbnB1dCkge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZnVuYyhlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghb3V0cHV0LnN1Y2Nlc3NmdWwpIHJldHVybiBvdXRwdXQuY2FzdCgpO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaChvdXRwdXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqIENhdGNoIGFueSBlcnJvcnMgaW4gYSBjYWxsLCByZXR1cm5pbmcgYSByZXN1bHQgaW5zdGVhZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdHJ5aW5nPFQ+KGNhbGw6ICgpID0+IFQpOiBSZXN1bHQ8VCwgRXJyb3I+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhjYWxsKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgcHJvbWlzZSB3aGljaCBtYXkgdGhyb3cgaW50byBhIHByb21pc2Ugd2hpY2ggcmV0dXJucyBhIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB2YWx1ZSBvciBhbiBlcnJvci4gKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmM8VD4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8UmVzdWx0PFQsIEVycm9yPj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF3YWl0IHByb21pc2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuXG4vKiogU3RhdGljIHNldCBlbGVtZW50IHdoaWNoIG1hdGNoZXMgZXZlcnl0aGluZy4gKi9cbmV4cG9ydCB0eXBlIEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4vKiogU3RhdGljIHNldCBlbGVtZW50IHdoaWNoIG1hdGNoZXMgbm90aGluZy4gKi9cbmV4cG9ydCB0eXBlIE5vdGhpbmcgPSB7IHR5cGU6IFwibm90aGluZ1wiIH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgdGhlIG5lZ2F0aW9uIG9mIGEgc2V0LiAqL1xuZXhwb3J0IHR5cGUgTmVnYXRlZDxUPiA9IHsgdHlwZTogXCJuZWdhdGVkXCI7IHZhbHVlOiBTZXQ8VD4gfTtcbi8qKiBTZXQgd2hpY2ggbWF0Y2hlcyBhbiBhY3R1YWwgc2V0IG9mIHZhbHVlcy4gICovXG5leHBvcnQgdHlwZSBBdG9tPFQ+ID0geyB0eXBlOiBcImF0b21cIjsgdmFsdWU6IFNldDxUPiB9O1xuXG4vKiogQWJzdHJhY3QgZmlsdGVyIHR5cGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyBmaWx0ZXIgb3BlcmF0aW9ucyB0byB0aGUgZGF0YSBzdG9yZS4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlcjxUPiA9IEV2ZXJ5dGhpbmcgfCBOb3RoaW5nIHwgQXRvbTxUPiB8IE5lZ2F0ZWQ8VD47XG5cbi8qKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZWZmaWNpZW50bHkgb3BlcmF0aW5nIG9uIGZpbHRlcnMuICovXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlcnMge1xuICAgIC8qKiBTdGF0aWMgZmlsdGVyIHdoaWNoIG1hdGNoZXMgZXZlcnl0aGluZy4gKi9cbiAgICBleHBvcnQgY29uc3QgRVZFUllUSElORzogRXZlcnl0aGluZyA9IHsgdHlwZTogXCJldmVyeXRoaW5nXCIgfTtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IE5PVEhJTkc6IE5vdGhpbmcgPSB7IHR5cGU6IFwibm90aGluZ1wiIH07XG4gICAgLyoqIEVtcHR5IHNldCBjb25zdGFudC4gKi9cbiAgICBleHBvcnQgY29uc3QgRU1QVFlfU0VUOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGF0b208VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIE5PVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJhdG9tXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgZmlsdGVyIHRoYXQgbWF0Y2hlcyBldmVyeXRoaW5nIG9yIG5vdGhpbmcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQ+KHZhbHVlOiBib29sZWFuKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlKSByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgZWxzZSByZXR1cm4gTk9USElORztcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyIHdoaWNoIGlzIE5PVEhJTkcgaWYgc2V0IGlzIHVuZGVmaW5lZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbnVsbGFibGVBdG9tPFQ+KHNldDogU2V0PFQ+IHwgdW5kZWZpbmVkKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIHNldCAhPT0gdW5kZWZpbmVkID8gYXRvbShzZXQpIDogTk9USElORztcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmVnYXRlZCBhdG9tIGZpbHRlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlZDxUPihzZXQ6IFNldDxUPik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmIChzZXQuc2l6ZSA9PSAwKSByZXR1cm4gRVZFUllUSElORztcblxuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgdmFsdWU6IHNldCB9O1xuICAgIH1cblxuICAgIC8qKiBQcm9kdWNlcyB0aGUgbmVnYXRpb24gb2YgYSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJldmVyeXRoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwibm90aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBFVkVSWVRISU5HO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlZChmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXRvbShmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gZmlsdGVyIGlzIGRlZmluaXRpdmVseSBjdXJyZW50bHkgZW1wdHkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGVtcHR5PFQ+KGZpbHRlcjogRmlsdGVyPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJldmVyeXRoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiYXRvbVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUuc2l6ZSA9PSAwO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXNvbHZlIGEgdG9wLWxldmVsIGZpbHRlciB3aXRoIHRoZSBzZXQgb2YgYWxsIGF2YWlsYWJsZSBvYmplY3RzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNvbHZlPFQ+KGZpbHRlcjogRmlsdGVyPFQ+LCBldmVyeXRoaW5nOiBTZXQ8VD4pOiBTZXQ8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBldmVyeXRoaW5nO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfU0VUO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW50ZXJzZWN0TmVnYXRpb24oZXZlcnl0aGluZywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJbnRlcnNlY3QgYW4gaXRlcmFibGUgb2YgZmlsdGVycy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0PFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxGaWx0ZXI8VD4+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIGxhenlJbnRlcnNlY3QoZWxlbWVudHMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5SW50ZXJzZWN0PEksIFQ+KFxuICAgICAgICBlbGVtZW50czogSXRlcmFibGU8ST4sXG4gICAgICAgIHByb2R1Y2U6IChpbnB1dDogSSkgPT4gRmlsdGVyPFQ+IHwgdW5kZWZpbmVkXG4gICAgKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIGxhenlGYWlsYWJsZUludGVyc2VjdGlvbihlbGVtZW50cywgKHgpID0+IFJlc3VsdC5zdWNjZXNzKHByb2R1Y2UoeCkpKS5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8qKiBJbnRlcnNlY3QgZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIGludGVyc2VjdGlvbiB3b3VsZCBwcm9kdWNlIE5PVEhJTkcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGxhenlGYWlsYWJsZUludGVyc2VjdGlvbjxJLCBULCBFPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IFJlc3VsdDxGaWx0ZXI8VD4gfCB1bmRlZmluZWQsIEU+XG4gICAgKTogUmVzdWx0PEZpbHRlcjxUPiwgRT4ge1xuICAgICAgICBjb25zdCBhdG9tczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgbmVnYXRpb25zOiBTZXQ8VD5bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHByb2R1Y2UoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1heWJlRmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gRW1wdHkgZmlsdGVycyB3aWxsIHByb2R1Y2UgYW4gZW1wdHkgaW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgaWYgKGVtcHR5KGZpbHRlcikpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhOT1RISU5HKTtcbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyBhcmUgcmVkdW5kYW50IGluIEFORHMsIHNraXAgdGhlbS5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBXaWxsIG9ubHkgYmUgbGVmdCB3aXRoIGF0b21zIG9yIG5lZ2F0aW9ucy5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PSBcImF0b21cIikgYXRvbXMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZmlsdGVyLnR5cGUgPT0gXCJuZWdhdGVkXCIpIG5lZ2F0aW9ucy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBzdGFydCB3aXRoIHNvbWV0aGluZyBvZiB0aGUgZm9ybSBhICYmIGIgJiYgIWMgJiYgIWQuXG4gICAgICAgIC8vIElmIG5vIHRlcm1zLCB0aGVuIGV2ZXJ5dGhpbmcgd2FzIEVWRVJZVEhJTkcgc28gcmV0dXJuIHRoYXQuXG4gICAgICAgIC8vIElmIG9ubHkgYXRvbXMsIGp1c3QgaW50ZXJzZWN0IHRoZW0gKGEgJiYgYikuXG4gICAgICAgIC8vIElmIG9ubHkgbmVnYXRpb25zLCB0aGVuIHJld3JpdGUgIWMgJiYgIWQgPT4gIShjIHx8IGQpIGFuZCByZXR1cm4gbmVnYXRlZChjIHx8IGQpLlxuICAgICAgICAvLyBJZiBib3RoLCBjb21wdXRlIHggPSAoYSAmJiBiKSBhbmQgeSA9IChjIHx8IGQpLCBhbmQgdGhlbiBjb21wdXRlIHggJiYgIXkuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEVWRVJZVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoYXRvbShzZXRJbnRlcnNlY3QoYXRvbXMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhuZWdhdGVkKHNldFVuaW9uKG5lZ2F0aW9ucykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oc2V0SW50ZXJzZWN0TmVnYXRpb24oc2V0SW50ZXJzZWN0KGF0b21zKSwgc2V0VW5pb24obmVnYXRpb25zKSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzLCBwcm9kdWNpbmcgYSBzaW5nbGUgcmVzdWx0IGZpbHRlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdW5pb248VD4oZmlsdGVyczogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5VW5pb24oZmlsdGVycywgKHgpID0+IHgpO1xuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgdW5pb24gd291bGQgcHJvZHVjZSBFVkVSWVRISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5VW5pb248SSwgVD4oZWxlbWVudHM6IEl0ZXJhYmxlPEk+LCBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVVbmlvbihlbGVtZW50cywgKHgpID0+IFJlc3VsdC5zdWNjZXNzKHByb2R1Y2UoeCkpKS5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgdW5pb24gd291bGQgcHJvZHVjZSBFVkVSWVRISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVVbmlvbjxJLCBULCBFPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IFJlc3VsdDxGaWx0ZXI8VD4gfCB1bmRlZmluZWQsIEU+XG4gICAgKTogUmVzdWx0PEZpbHRlcjxUPiwgRT4ge1xuICAgICAgICBjb25zdCBhdG9tczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgbmVnYXRpb25zOiBTZXQ8VD5bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHByb2R1Y2UoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1heWJlRmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gRVZFUllUSElORyBmaWx0ZXJzIHdpbGwgcHJvZHVjZSBldmVyeXRoaW5nIGFsd2F5cy5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgYXJlIHJlZHVuZGFudC5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3IgaXMgYSBiaXQgaGFyZGVyIHRoYW4gQU5EIHNpbmNlIHlvdSBjYW4gZW5kIHVwIHdpdGggc2NlbmFyaW9zIGxpa2UgYSB8fCAhYiwgd2hpY2ggYXJlXG4gICAgICAgIC8vIG5vdCBjb21wdXRhYmxlIGRpcmVjdGx5LiBIb3dldmVyLCB3ZSBjYW4gZG8gYm9vbGVhbiBsb2dpYyB0byBhbHdheXMgcHJvZHVjZSBhIHNpbmdsZVxuICAgICAgICAvLyBzZXQuXG4gICAgICAgIC8vIElmIG5vdGhpbmcgPT4gbm90aGluZywgbm8gbm9uLWVtcHR5IGZpbHRlcnMuXG4gICAgICAgIC8vIElmIGF0b21zIGJ1dCBubyBuZWdhdGlvbnMgKGEgfHwgYiB8fCBjKSA9PiBjb21wdXRlIHVuaW9uLlxuICAgICAgICAvLyBJZiBuZWdhdGlvbnMgYnV0IG5vIGF0b21zICghYSB8fCAhYiB8fCAhYykgPT4gcmV3cml0ZSBhcyAhKGEgJiYgYiAmJiBjKS5cbiAgICAgICAgLy8gSWYgYm90aDogKGEgfHwgYiB8fCAhYyB8fCAhZCkgPT4gY29tYmluZSBlYWNoIHBhcnQgaW50byAoYSB8fCBiKSB8fCAoIWMgfHwgIWQpID0+IChhIHx8IGIpIHx8ICEoYyAmJiBkKSA9PiBlIHx8ICFmID0+ICEoIWUgJiYgZikgd2hpY2hcbiAgICAgICAgLy8gY2FuIGJlIGNvbXB1dGVkIHVzaW5nIGludGVyc2VjdGlvbiBsb2dpYy5cblxuICAgICAgICBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID4gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oc2V0VW5pb24oYXRvbXMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLm5lZ2F0ZWQoc2V0SW50ZXJzZWN0KG5lZ2F0aW9ucykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhuZWdhdGVkKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChuZWdhdGlvbnMpLCBzZXRVbmlvbihhdG9tcykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHNldHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyc2VjdDxUPihzZXRzOiBTZXQ8VD5bXSk6IFNldDxUPiB7XG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBlbHNlIGlmIChzZXRzLmxlbmd0aCA9PSAxKSByZXR1cm4gc2V0c1swXTtcblxuICAgICAgICAvLyBTb3J0IGJ5IHNpemUgYW5kIGNvbWJpbmUgc21hbGxlc3QgYW5kIGxhcmdlc3Qgc2V0IHJlcGVhdGVkbHkuXG4gICAgICAgIGxldCBzb3J0ZWQgPSAoW10gYXMgU2V0PFQ+W10pLmNvbmNhdChzZXRzKS5zb3J0KChhLCBiKSA9PiBhLnNpemUgLSBiLnNpemUpO1xuXG4gICAgICAgIHdoaWxlIChzb3J0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxUPigpO1xuICAgICAgICAgICAgY29uc3QgbGFyZ2VzdCA9IHNvcnRlZC5wb3AoKSE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygc29ydGVkWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhcmdlc3QuaGFzKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzb3J0ZWRbMF0gPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc29ydGVkWzBdO1xuICAgIH1cblxuICAgIC8qKiBFZmZpY2llbnRseSBjb21wdXRlIHRoZSB1bmlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRVbmlvbjxUPihzZXRzOiBTZXQ8VD5bXSk6IFNldDxUPiB7XG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBlbHNlIGlmIChzZXRzLmxlbmd0aCA9PSAxKSByZXR1cm4gc2V0c1swXTtcblxuICAgICAgICAvLyBJJ20gbm90IHN1cmUgaWYgdGhlcmUgaXMgYW55IHVzZWZ1bCBvcHRpbWl6YXRpb24gZm9yIHNldCB1bmlvbnMsIHNvIGp1c3QgYWRkIHRoZW0gYWxsIEkgZ3Vlc3MuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBzZXQgb2Ygc2V0cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNldCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBFZmZpY2llbnRseSBjb21wdXRlIGF0b20gJiYgIW5lZ2F0ZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyc2VjdE5lZ2F0aW9uPFQ+KGF0b206IFNldDxUPiwgbmVnYXRlZDogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgaWYgKGF0b20uc2l6ZSA+IG5lZ2F0ZWQuc2l6ZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogV291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29weSwgc2luY2UgSSdtIG5vdCBzdXJlIGl0J3MgYW55IGZhc3RlciB3aXRoIHRoZSBjb3B5LlxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldChhdG9tKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgbmVnYXRlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gLyogYXRvbS5zaXplIDwgbmVnYXRpb24uc2l6ZSAqLyBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgYXRvbSkge1xuICAgICAgICAgICAgICAgIGlmIChuZWdhdGVkLmhhcyhlbGVtZW50KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEZpbHRlcnMgfSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5cbi8qKiBDb21wYXJpc29uIG9wZXJhdG9ycyB3aGljaCB5aWVsZCB0cnVlL2ZhbHNlLiAqL1xuZXhwb3J0IHR5cGUgQ29tcGFyZU9wID0gXCI+XCIgfCBcIj49XCIgfCBcIjw9XCIgfCBcIjxcIiB8IFwiPVwiIHwgXCIhPVwiO1xuLyoqIEFyaXRobWV0aWMgb3BlcmF0b3JzIHdoaWNoIHlpZWxkIG51bWJlcnMgYW5kIG90aGVyIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIEFyaXRobWV0aWNPcCA9IFwiK1wiIHwgXCItXCIgfCBcIipcIiB8IFwiL1wiIHwgXCIlXCIgfCBcIiZcIiB8IFwifFwiO1xuLyoqIEluZGV4IGEgdmFsdWUgaW50byBhbm90aGVyIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgTG9naWNhbE9wID0gXCJpbmRleFwiO1xuLyoqIEFsbCB2YWxpZCBiaW5hcnkgb3BlcmF0b3JzLiAqL1xuZXhwb3J0IHR5cGUgQmluYXJ5T3AgPSBDb21wYXJlT3AgfCBBcml0aG1ldGljT3AgfCBMb2dpY2FsT3A7XG5cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb24gPVxuICAgIHwgTGl0ZXJhbEV4cHJlc3Npb25cbiAgICB8IFZhcmlhYmxlRXhwcmVzc2lvblxuICAgIHwgTGlzdEV4cHJlc3Npb25cbiAgICB8IE9iamVjdEV4cHJlc3Npb25cbiAgICB8IEJpbmFyeU9wRXhwcmVzc2lvblxuICAgIHwgRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgfCBMYW1iZGFFeHByZXNzaW9uXG4gICAgfCBOZWdhdGVkRXhwcmVzc2lvbjtcblxuLyoqIExpdGVyYWwgcmVwcmVzZW50YXRpb24gb2Ygc29tZSBmaWVsZCB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJsaXRlcmFsXCI7XG4gICAgdmFsdWU6IExpdGVyYWw7XG59XG5cbi8qKiBBIHZhcmlhYmxlIGZpZWxkIGZvciBhIHZhcmlhYmxlIHdpdGggYSBnaXZlbiBuYW1lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwidmFyaWFibGVcIjtcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBBIGxpc3QgbGl0ZXJhbCwgd2hpY2ggaXMgYW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIGZpZWxkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGlzdFwiO1xuICAgIHZhbHVlczogRXhwcmVzc2lvbltdO1xufVxuXG4vKiogQW4gb2JqZWN0IGxpdGVyYWwsIHdoaWNoIGlzIGEgbWFwcGluZyBvZiBuYW1lIHRvIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiO1xuICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvbj47XG59XG5cbi8qKiBBIGJpbmFyeSBvcGVyYXRvciBleHByZXNzaW9uIHdoaWNoIGNvbWJpbmVzIHR3byBzdWJub2RlcyBzb21laG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5hcnlPcEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiYmluYXJ5b3BcIjtcbiAgICBsZWZ0OiBFeHByZXNzaW9uO1xuICAgIHJpZ2h0OiBFeHByZXNzaW9uO1xuICAgIG9wOiBCaW5hcnlPcDtcbn1cblxuLyoqIEEgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aGljaCBjYWxscyBhIGZ1bmN0aW9uIG9uIDAgb3IgbW9yZSBhcmd1bWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJmdW5jdGlvblwiO1xuICAgIC8qKiBFaXRoZXIgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBvciBhIEZ1bmN0aW9uIG9iamVjdC4gKi9cbiAgICBmdW5jOiBFeHByZXNzaW9uO1xuICAgIC8qKiBUaGUgbGlzdCBvZiBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gKi9cbiAgICBhcmd1bWVudHM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIGlubGluZSBmdW5jdGlvbiBhY2NlcHRpbmcgb25lIG9yIG1vcmUgYXJndW1lbnRzIGFuZCBwcm9kdWNpbmcgYSB2YWx1ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJsYW1iZGFcIjtcbiAgICAvKiogQW4gb3JkZXJlZCBsaXN0IG9mIG5hbWVkIGFyZ3VtZW50cy4gKi9cbiAgICBhcmd1bWVudHM6IHN0cmluZ1tdO1xuICAgIC8qKiBUaGUgZmllbGQgd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGFyZ3VtZW50cyBpbiBjb250ZXh0LiAqL1xuICAgIHZhbHVlOiBFeHByZXNzaW9uO1xufVxuXG4vKiogQW4gZXhwcmVzc2lvbiB3aGljaCBuZWdhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgZmllbGQuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lZ2F0ZWRFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcIm5lZ2F0ZWRcIjtcblxuICAgIC8qKiBUaGUgY2hpbGQgZmllbGQgdG8gbmVnYXRlLiAqL1xuICAgIGNoaWxkOiBFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEV4cHJlc3Npb25zIHtcbiAgICAvKiogVGhlIGltcGxpY2l0IGZpZWxkIHJlZmVyZW5jaW5nIHRoZSBjdXJyZW50IGZpZWxkLiAqL1xuICAgIGV4cG9ydCBjb25zdCBST1c6IHN0cmluZyA9IFwiJHJvd1wiO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IFZhcmlhYmxlRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwidmFyaWFibGVcIiwgbmFtZSB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlOiBMaXRlcmFsKTogTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxpdGVyYWxcIiwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gYmluYXJ5T3AobGVmdDogRXhwcmVzc2lvbiwgb3A6IEJpbmFyeU9wLCByaWdodDogRXhwcmVzc2lvbik6IEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJpbmFyeW9wXCIsIGxlZnQsIG9wLCByaWdodCB9IGFzIEJpbmFyeU9wRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaW5kZXgob2JqOiBFeHByZXNzaW9uLCBpbmRleDogRXhwcmVzc2lvbik6IEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJpbmFyeW9wXCIsIGxlZnQ6IG9iaiwgcmlnaHQ6IGluZGV4LCBvcDogXCJpbmRleFwiIH07XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnRzIGEgc3RyaW5nIGluIGRvdC1ub3RhdGlvbi1mb3JtYXQgaW50byBhIHZhcmlhYmxlIHdoaWNoIGluZGV4ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4VmFyaWFibGUobmFtZTogc3RyaW5nKTogRXhwcmVzc2lvbiB7XG4gICAgICAgIGxldCBwYXJ0cyA9IG5hbWUuc3BsaXQoXCIuXCIpO1xuICAgICAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uID0gRXhwcmVzc2lvbnMudmFyaWFibGUocGFydHNbMF0pO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGFydHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocGFydHNbaW5kZXhdKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsYW1iZGEoYXJnczogc3RyaW5nW10sIHZhbHVlOiBFeHByZXNzaW9uKTogTGFtYmRhRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwibGFtYmRhXCIsIGFyZ3VtZW50czogYXJncywgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gZnVuYyhmdW5jOiBFeHByZXNzaW9uLCBhcmdzOiBFeHByZXNzaW9uW10pOiBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZ1bmN0aW9uXCIsIGZ1bmMsIGFyZ3VtZW50czogYXJncyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXN0KHZhbHVlczogRXhwcmVzc2lvbltdKTogTGlzdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxpc3RcIiwgdmFsdWVzIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9iamVjdCh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+KTogT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwib2JqZWN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGUoY2hpbGQ6IEV4cHJlc3Npb24pOiBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwibmVnYXRlZFwiLCBjaGlsZCB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhcmVPcChvcDogQmluYXJ5T3ApOiBvcCBpcyBDb21wYXJlT3Age1xuICAgICAgICByZXR1cm4gb3AgPT0gXCI8PVwiIHx8IG9wID09IFwiPFwiIHx8IG9wID09IFwiPlwiIHx8IG9wID09IFwiPj1cIiB8fCBvcCA9PSBcIiE9XCIgfHwgb3AgPT0gXCI9XCI7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYSBzZXQgb2YgYWxsIHVuYm91bmQgdmFyaWFibGVzIChpLmUuLCB2YXJpYWJsZXMgbm90IHByb3ZpZGVkIGJ5IGByb3dgLCBsYW1iZGFzLCBvciBzaW1pbGFyLikgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdW5ib3VuZFZhcmlhYmxlcyhleHByOiBFeHByZXNzaW9uLCBib3VuZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtST1ddKSk6IFNldDxzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlvcFwiOlxuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBgcm93W1wiLi4uLlwiXWAuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBleHByLm9wID09PSBcImluZGV4XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5sZWZ0LnR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC5uYW1lID09IFJPVyAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLnJpZ2h0LnR5cGUgPT0gXCJsaXRlcmFsXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgTGl0ZXJhbHMuaXNTdHJpbmcoZXhwci5yaWdodC52YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5kLmhhcyhleHByLnJpZ2h0LnZhbHVlKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbmV3IFNldChbZXhwci5yaWdodC52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGNoZWNrIGxlZnQgYW5kIHJpZ2h0LlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKFt1bmJvdW5kVmFyaWFibGVzKGV4cHIubGVmdCwgYm91bmQpLCB1bmJvdW5kVmFyaWFibGVzKGV4cHIucmlnaHQsIGJvdW5kKV0pO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oZXhwci5hcmd1bWVudHMubWFwKChhKSA9PiB1bmJvdW5kVmFyaWFibGVzKGEsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0JvdW5kID0gYm91bmQgPz8gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGV4cHIuYXJndW1lbnRzKSBuZXdCb3VuZC5hZGQoYXJnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmJvdW5kVmFyaWFibGVzKGV4cHIudmFsdWUsIG5ld0JvdW5kKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oZXhwci52YWx1ZXMubWFwKCh2KSA9PiB1bmJvdW5kVmFyaWFibGVzKHYsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLmNoaWxkLCBib3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oT2JqZWN0LnZhbHVlcyhleHByLnZhbHVlcykubWFwKCh2KSA9PiB1bmJvdW5kVmFyaWFibGVzKHYsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kICYmIGJvdW5kLmhhcyhleHByLm5hbWUpKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIubmFtZV0pO1xuICAgICAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbmRlciBhbiBleHByZXNzaW9uIGFzIGEgc3RyaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyhleHByOiBFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlvcFwiOlxuICAgICAgICAgICAgICAgIGlmIChleHByLm9wID09PSBcImluZGV4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIubGVmdCl9WyR7dG9TdHJpbmcoZXhwci5yaWdodCl9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIubGVmdCl9ICR7ZXhwci5vcH0gJHt0b1N0cmluZyhleHByLnJpZ2h0KX1gO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIuZnVuYyl9KCR7ZXhwci5hcmd1bWVudHMubWFwKHRvU3RyaW5nKS5qb2luKFwiLCBcIil9KWA7XG4gICAgICAgICAgICBjYXNlIFwibGFtYmRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAoJHtleHByLmFyZ3VtZW50cy5qb2luKFwiLCBcIil9KSA9PiAke3RvU3RyaW5nKGV4cHIudmFsdWUpfWA7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgWyR7ZXhwci52YWx1ZXMubWFwKHRvU3RyaW5nKS5qb2luKFwiLCBcIil9XWA7XG4gICAgICAgICAgICBjYXNlIFwibmVnYXRlZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgISR7dG9TdHJpbmcoZXhwci5jaGlsZCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYHske09iamVjdC5lbnRyaWVzKGV4cHIudmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9OiAke3RvU3RyaW5nKHYpfWApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9fWA7XG4gICAgICAgICAgICBjYXNlIFwidmFyaWFibGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5uYW1lO1xuICAgICAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXCIke3dyYXBwZWQudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpdGVyYWxzLnRvU3RyaW5nKHdyYXBwZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjb25zdCBOVUxMID0gRXhwcmVzc2lvbnMubGl0ZXJhbChudWxsKTtcbn1cbiIsICIvKiogUGFyc2UgaW5saW5lIGZpZWxkcyBhbmQgb3RoZXIgZW1iZWRkZWQgbWV0YWRhdGEgaW4gYSBsaW5lLiAqL1xuXG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBMaXRlcmFsIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tIFwiZW1vamktcmVnZXhcIjtcbmltcG9ydCB7IEpzb25Db252ZXJzaW9uLCBKc29uTGl0ZXJhbCB9IGZyb20gXCJpbmRleC90eXBlcy9qc29uL2NvbW1vblwiO1xuXG4vKiogQSBwYXJzZWQgaW5saW5lIGZpZWxkIGZyb20gYSBzcGVjaWZpYyBsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbElubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIHJhdyBwYXJzZWQga2V5LiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBmaWVsZC4gKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICBzdGFydDogbnVtYmVyO1xuICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuICovXG4gICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgZW5kOiBudW1iZXI7XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBGdWxsIGlubGluZSBmaWVsZCBtZXRhZGF0YSBmb3IgYW4gb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSBhY3R1YWwga2V5IGRlc2NyaWJpbmcgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIHJhdzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFyc2VkIHZhbHVlLiAqL1xuICAgIHZhbHVlOiBMaXRlcmFsO1xuICAgIC8qKiBGdWxsIHBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB3aGVyZSB0aGUgaW5saW5lIGZpZWxkIGlzIGxvY2F0ZWQgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIC8qKiBUaGUgbGluZSBudW1iZXIgdGhlIGlubGluZSBmaWVsZCBhcHBlYXJzIG9uLiAqL1xuICAgICAgICBsaW5lOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICc6OicuICovXG4gICAgICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIEpTT04sIHNlcmlhbGl6YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbmxpbmUgZmllbGQuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25JbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSBhY3R1YWwga2V5IGRlc2NyaWJpbmcgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIHJhdzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFyc2VkIHZhbHVlLiAqL1xuICAgIHZhbHVlOiBKc29uTGl0ZXJhbDtcbiAgICAvKiogRnVsbCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3Igd2hlcmUgdGhlIGlubGluZSBmaWVsZCBpcyBsb2NhdGVkIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBwb3NpdGlvbjoge1xuICAgICAgICAvKiogVGhlIGxpbmUgbnVtYmVyIHRoZSBpbmxpbmUgZmllbGQgYXBwZWFycyBvbi4gKi9cbiAgICAgICAgbGluZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuIEltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnOjonLiAqL1xuICAgICAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBDb252ZXJ0IGFuIGlubGluZSBmaWVsZCB0byBhIEpTT04gZm9ybWF0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25JbmxpbmVGaWVsZChmaWVsZDogSW5saW5lRmllbGQpOiBKc29uSW5saW5lRmllbGQge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCwgeyB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihmaWVsZC52YWx1ZSkgfSk7XG59XG5cbi8qKiBDb252ZXJ0IGEgSlNPTiBpbmxpbmUgZmllbGQgYmFjayB0byBhIHJlZ3VsYXIgZmllbGQuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVJbmxpbmVGaWVsZChmaWVsZDogSnNvbklubGluZUZpZWxkKTogSW5saW5lRmllbGQge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCwgeyB2YWx1ZTogSnNvbkNvbnZlcnNpb24udmFsdWUoZmllbGQudmFsdWUpIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChsb2NhbDogTG9jYWxJbmxpbmVGaWVsZCwgbGluZW5vOiBudW1iZXIpOiBJbmxpbmVGaWVsZDtcbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKGxvY2FsOiBMb2NhbElubGluZUZpZWxkW10sIGxpbmVubzogbnVtYmVyKTogSW5saW5lRmllbGRbXTtcbi8qKiBDb252ZXJ0IGEgbG9jYWwgaW5saW5lIGZpZWxkIGludG8gYSBmdWxsIGlubGluZSBmaWVsZCBieSBwZXJmb3JtaW5nIHBhcnNpbmcgYW5kIGFkZGluZyB0aGUgY29ycmVjdCBsaW5lIG51bWJlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKFxuICAgIGxvY2FsOiBMb2NhbElubGluZUZpZWxkIHwgTG9jYWxJbmxpbmVGaWVsZFtdLFxuICAgIGxpbmVubzogbnVtYmVyXG4pOiBJbmxpbmVGaWVsZCB8IElubGluZUZpZWxkW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxvY2FsKSkge1xuICAgICAgICByZXR1cm4gbG9jYWwubWFwKChmKSA9PiBhc0lubGluZUZpZWxkKGYsIGxpbmVubykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbG9jYWwua2V5LFxuICAgICAgICByYXc6IGxvY2FsLnZhbHVlLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbmxpbmVWYWx1ZShsb2NhbC52YWx1ZSksXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lbm8sXG4gICAgICAgICAgICBzdGFydDogbG9jYWwuc3RhcnQsXG4gICAgICAgICAgICBzdGFydFZhbHVlOiBsb2NhbC5zdGFydFZhbHVlLFxuICAgICAgICAgICAgZW5kOiBsb2NhbC5lbmQsXG4gICAgICAgIH0sXG4gICAgICAgIHdyYXBwaW5nOiBsb2NhbC53cmFwcGluZyxcbiAgICB9O1xufVxuXG4vKiogVGhlIHdyYXBwZXIgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBpbmxpbmUgZmllbGQuICovXG5leHBvcnQgY29uc3QgSU5MSU5FX0ZJRUxEX1dSQVBQRVJTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IE9iamVjdC5mcmVlemUoe1xuICAgIFwiW1wiOiBcIl1cIixcbiAgICBcIihcIjogXCIpXCIsXG59KTtcblxuLyoqXG4gKiBGaW5kIGEgbWF0Y2hpbmcgY2xvc2luZyBicmFja2V0IHRoYXQgb2NjdXJzIGF0IG9yIGFmdGVyIGBzdGFydGAsIHJlc3BlY3RpbmcgbmVzdGluZyBhbmQgZXNjYXBlcy4gSWYgZm91bmQsXG4gKiByZXR1cm5zIHRoZSB2YWx1ZSBjb250YWluZWQgd2l0aGluIGFuZCB0aGUgc3RyaW5nIGluZGV4IGFmdGVyIHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2luZyhcbiAgICBsaW5lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBvcGVuOiBzdHJpbmcsXG4gICAgY2xvc2U6IHN0cmluZ1xuKTogeyB2YWx1ZTogc3RyaW5nOyBlbmRJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBuZXN0aW5nID0gMDtcbiAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgbGluZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGV0IGNoYXIgPSBsaW5lLmNoYXJBdChpbmRleCk7XG5cbiAgICAgICAgLy8gQWxsb3dzIGZvciBkb3VibGUgZXNjYXBlcyBsaWtlICdcXFxcJyB0byBiZSByZW5kZXJlZCBub3JtYWxseS5cbiAgICAgICAgaWYgKGNoYXIgPT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZXNjYXBlZCwgaWdub3JlIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgY29tcHV0aW5nIG5lc3RpbmcsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpdCBpcy5cbiAgICAgICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXIgPT0gb3BlbikgbmVzdGluZysrO1xuICAgICAgICBlbHNlIGlmIChjaGFyID09IGNsb3NlKSBuZXN0aW5nLS07XG5cbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgd2UgYXJlIG9uIGEgY2xvc2UgY2hhcmFjdGVyIGFuZCB0cmhlcmUgaXMgbm8gbW9yZSBuZXN0aW5nLlxuICAgICAgICBpZiAobmVzdGluZyA8IDApIHJldHVybiB7IHZhbHVlOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKSwgZW5kSW5kZXg6IGluZGV4ICsgMSB9O1xuXG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogRmluZCB0aGUgJzo6JyBzZXBhcmF0b3IgaW4gYW4gaW5saW5lIGZpZWxkLiAqL1xuZnVuY3Rpb24gZmluZFNlcGFyYXRvcihsaW5lOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiB7IGtleTogc3RyaW5nOyB2YWx1ZUluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNlcCA9IGxpbmUuaW5kZXhPZihcIjo6XCIsIHN0YXJ0KTtcbiAgICBpZiAoc2VwIDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7IGtleTogbGluZS5zdWJzdHJpbmcoc3RhcnQsIHNlcCkudHJpbSgpLCB2YWx1ZUluZGV4OiBzZXAgKyAyIH07XG59XG5cbi8qKiBUcnkgdG8gY29tcGxldGVseSBwYXJzZSBhbiBpbmxpbmUgZmllbGQgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiBBc3N1bWVzIGBzdGFydGAgaXMgb24gYSB3cmFwcGluZyBjaGFyYWN0ZXIuICovXG5mdW5jdGlvbiBmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZChsaW5lOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBMb2NhbElubGluZUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgb3BlbiA9IGxpbmUuY2hhckF0KHN0YXJ0KTtcblxuICAgIGxldCBrZXkgPSBmaW5kU2VwYXJhdG9yKGxpbmUsIHN0YXJ0ICsgMSk7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gRmFpbCB0aGUgbWF0Y2ggaWYgd2UgZmluZCBhbnkgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKG5vdCBhbGxvd2VkIGluIGtleXMpLlxuICAgIGZvciAobGV0IHNlcCBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpLmNvbmNhdChPYmplY3QudmFsdWVzKElOTElORV9GSUVMRF9XUkFQUEVSUykpKSB7XG4gICAgICAgIGlmIChrZXkua2V5LmluY2x1ZGVzKHNlcCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gZmluZENsb3NpbmcobGluZSwga2V5LnZhbHVlSW5kZXgsIG9wZW4sIElOTElORV9GSUVMRF9XUkFQUEVSU1tvcGVuXSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGtleS5rZXksXG4gICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBzdGFydFZhbHVlOiBrZXkudmFsdWVJbmRleCxcbiAgICAgICAgZW5kOiB2YWx1ZS5lbmRJbmRleCxcbiAgICAgICAgd3JhcHBpbmc6IG9wZW4sXG4gICAgfTtcbn1cblxuLyoqIFBhcnNlIGEgdGV4dHVhbCBpbmxpbmUgZmllbGQgdmFsdWUgaW50byBzb21ldGhpbmcgd2UgY2FuIHdvcmsgd2l0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlubGluZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBMaXRlcmFsIHtcbiAgICAvLyBFbXB0eSBpbmxpbmUgdmFsdWVzIChpLmUuLCBubyB0ZXh0KSBzaG91bGQgbWFwIHRvIG51bGwgdG8gbWF0Y2ggbG9uZy10ZXJtIERhdGF2aWV3IHNlbWFudGljcy5cbiAgICAvLyBOdWxsIGlzIGFsc28gYSBtb3JlIHVuaXZlcnNhbCB0eXBlIHRvIGRlYWwgd2l0aCB0aGFuIHN0cmluZ3MsIHNpbmNlIGFsbCBmdW5jdGlvbnMgYWNjZXB0IG51bGxzLlxuICAgIGlmICh2YWx1ZS50cmltKCkgPT0gXCJcIikgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBUaGUgc3RyaXBwZWQgbGl0ZXJhbCBmaWVsZCBwYXJzZXIgdW5kZXJzdGFuZHMgYWxsIG9mIHRoZSBub24tYXJyYXkvbm9uLW9iamVjdCBmaWVsZHMgYW5kIGNhbiBwYXJzZSB0aGVtIGZvciB1cy5cbiAgICAvLyBJbmxpbmUgZmllbGQgb2JqZWN0cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ7IGlubGluZSBhcnJheSBvYmplY3RzIGhhdmUgdG8gYmUgaGFuZGxlZCBieSB0aGUgcGFyc2VyXG4gICAgLy8gc2VwYXJhdGVseS5cbiAgICBsZXQgaW5saW5lID0gUFJJTUlUSVZFUy5pbmxpbmVGaWVsZC5wYXJzZSh2YWx1ZSk7XG4gICAgaWYgKGlubGluZS5zdGF0dXMpIHJldHVybiBpbmxpbmUudmFsdWU7XG4gICAgZWxzZSByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBFeHRyYWN0cyBpbmxpbmUgZmllbGRzIG9mIHRoZSBmb3JtICdba2V5OjogdmFsdWVdJyBmcm9tIGEgbGluZSBvZiB0ZXh0LiBUaGlzIGlzIGRvbmUgaW4gYSByZWxhdGl2ZWx5XG4gKiBcInJvYnVzdFwiIHdheSB0byBhdm9pZCBmYWlsaW5nIGR1ZSB0byBiYWQgbmVzdGluZyBvciBvdGhlciBpbnRlcmZlcmluZyBNYXJrZG93biBzeW1ib2xzOlxuICpcbiAqIC0gTG9vayBmb3IgYW55IHdyYXBwZXJzICgnWycgYW5kICcoJykgaW4gdGhlIGxpbmUsIHRyeWluZyB0byBwYXJzZSB3aGF0ZXZlciBjb21lcyBhZnRlciBpdCBhcyBhbiBpbmxpbmUga2V5OjouXG4gKiAtIElmIHN1Y2Nlc3NmdWwsIHNjYW4gdW50aWwgeW91IGZpbmQgYSBtYXRjaGluZyBlbmQgYnJhY2tldCwgYW5kIHBhcnNlIHdoYXRldmVyIHJlbWFpbnMgYXMgYW4gaW5saW5lIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElubGluZUZpZWxkcyhsaW5lOiBzdHJpbmcsIGluY2x1ZGVUYXNrRmllbGRzOiBib29sZWFuID0gZmFsc2UpOiBMb2NhbElubGluZUZpZWxkW10ge1xuICAgIGxldCBmaWVsZHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuICAgIGZvciAobGV0IHdyYXBwZXIgb2YgT2JqZWN0LmtleXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKSkge1xuICAgICAgICBsZXQgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyKTtcbiAgICAgICAgd2hpbGUgKGZvdW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZEZpZWxkID0gZmluZFNwZWNpZmljSW5saW5lRmllbGQobGluZSwgZm91bmRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBmb3VuZEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlZEZpZWxkKTtcbiAgICAgICAgICAgIGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlciwgcGFyc2VkRmllbGQuZW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlVGFza0ZpZWxkcykgZmllbGRzID0gZmllbGRzLmNvbmNhdChleHRyYWN0U3BlY2lhbFRhc2tGaWVsZHMobGluZSkpO1xuXG4gICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTtcblxuICAgIGxldCBmaWx0ZXJlZEZpZWxkczogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPT0gMCB8fCBmaWx0ZXJlZEZpZWxkc1tmaWx0ZXJlZEZpZWxkcy5sZW5ndGggLSAxXS5lbmQgPCBmaWVsZHNbaV0uc3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkRmllbGRzLnB1c2goZmllbGRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRGaWVsZHM7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGhhdCBhIHJhdyBmaWVsZCBuYW1lIGhhcyBhIHZhbGlkIGZvcm0uICovXG5jb25zdCBGVUxMX0xJTkVfS0VZX1BBUlQ6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4cChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgXCJ1XCIpKSxcbiAgICBQLnJlZ2V4cCgvWzAtOVxccHtMZXR0ZXJ9XFx3XFxzXy8tXSsvdSlcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocGFydHMpID0+IHBhcnRzLmpvaW4oXCJcIikpO1xuXG5jb25zdCBGVUxMX0xJTkVfS0VZX1BBUlNFUjogUC5QYXJzZXI8c3RyaW5nPiA9IFAucmVnZXhwKC9bXjAtOVxcd1xccHtMZXR0ZXJ9XSovdSlcbiAgICAudGhlbihGVUxMX0xJTkVfS0VZX1BBUlQpXG4gICAgLnNraXAoUC5yZWdleHAoL1tfXFwqfmBdKi91KSk7XG5cbi8qKiBBdHRlbXB0IHRvIGV4dHJhY3QgYSBmdWxsLWxpbmUgZmllbGQgKEtleTo6IFZhbHVlIGNvbnN1bWluZyB0aGUgZW50aXJlIGNvbnRlbnQgbGluZSkuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEZ1bGxMaW5lRmllbGQodGV4dDogc3RyaW5nKTogTG9jYWxJbmxpbmVGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNlcCA9IGZpbmRTZXBhcmF0b3IodGV4dCwgMCk7XG4gICAgaWYgKCFzZXApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHBvc3QtcHJvY2VzcyB0aGUga2V5IHRvIGRyb3AgdW5uZWNlc3Nhcnkgb3BlbmluZyBhbm5vdGF0aW9ucyBhcyB3ZWxsIGFzXG4gICAgLy8gZHJvcCBzdXJyb3VuZGluZyBNYXJrZG93bi5cbiAgICBsZXQgcmVhbEtleSA9IEZVTExfTElORV9LRVlfUEFSU0VSLnBhcnNlKHNlcC5rZXkpO1xuICAgIGlmICghcmVhbEtleS5zdGF0dXMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJlYWxLZXkudmFsdWUsXG4gICAgICAgIHZhbHVlOiB0ZXh0LnN1YnN0cmluZyhzZXAudmFsdWVJbmRleCkudHJpbSgpLFxuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgc3RhcnRWYWx1ZTogc2VwLnZhbHVlSW5kZXgsXG4gICAgICAgIGVuZDogdGV4dC5sZW5ndGgsXG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENSRUFURURfREFURV9SRUdFWCA9IC9cXHV7Mjc5NX1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IERVRV9EQVRFX1JFR0VYID0gLyg/OlxcdXsxRjRDNX18XFx1ezFGNEM2fXxcXHV7MUY1RDN9XFx1e0ZFMEZ9PylcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IERPTkVfREFURV9SRUdFWCA9IC9cXHV7MjcwNX1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IFNDSEVEVUxFRF9EQVRFX1JFR0VYID0gL1tcXHV7MjNGM31cXHV7MjMxQn1dXFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBTVEFSVF9EQVRFX1JFR0VYID0gL1xcdXsxRjZFQn1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuXG5leHBvcnQgY29uc3QgRU1PSklfUkVHRVhFUyA9IFtcbiAgICB7IHJlZ2V4OiBDUkVBVEVEX0RBVEVfUkVHRVgsIGtleTogXCJjcmVhdGVkXCIgfSxcbiAgICB7IHJlZ2V4OiBTVEFSVF9EQVRFX1JFR0VYLCBrZXk6IFwic3RhcnRcIiB9LFxuICAgIHsgcmVnZXg6IFNDSEVEVUxFRF9EQVRFX1JFR0VYLCBrZXk6IFwic2NoZWR1bGVkXCIgfSxcbiAgICB7IHJlZ2V4OiBEVUVfREFURV9SRUdFWCwga2V5OiBcImR1ZVwiIH0sXG4gICAgeyByZWdleDogRE9ORV9EQVRFX1JFR0VYLCBrZXk6IFwiY29tcGxldGlvblwiIH0sXG5dO1xuXG4vKiogUGFyc2Ugc3BlY2lhbCBjb21wbGV0ZWQvZHVlL2RvbmUgdGFzayBmaWVsZHMgd2hpY2ggYXJlIG1hcmtlZCB2aWEgZW1vamkuICovXG5mdW5jdGlvbiBleHRyYWN0U3BlY2lhbFRhc2tGaWVsZHMobGluZTogc3RyaW5nKTogTG9jYWxJbmxpbmVGaWVsZFtdIHtcbiAgICBsZXQgcmVzdWx0czogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG5cbiAgICBmb3IgKGxldCB7IHJlZ2V4LCBrZXkgfSBvZiBFTU9KSV9SRUdFWEVTKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhsaW5lKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgICAgICAgIHN0YXJ0VmFsdWU6IG1hdGNoLmluZGV4ICsgMSxcbiAgICAgICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgsXG4gICAgICAgICAgICB3cmFwcGluZzogXCJlbW9qaS1zaG9ydGhhbmRcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSB2YWx1ZSBvZiBhbiBpbmxpbmUgZmllbGQ7IGlmIHRoZSB2YWx1ZSBpcyAndW5kZWZpbmVkJywgZGVsZXRlcyB0aGUga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldElubGluZUZpZWxkKHNvdXJjZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBleGlzdGluZyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMoc291cmNlKTtcbiAgICBsZXQgZXhpc3RpbmdLZXlzID0gZXhpc3RpbmcuZmlsdGVyKChmKSA9PiBmLmtleSA9PSBrZXkpO1xuXG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzIE9SIHRoZSBrZXkgYWxyZWFkeSBkb2Vzbid0IGV4aXN0LlxuICAgIGlmIChleGlzdGluZ0tleXMubGVuZ3RoID4gMiB8fCAoZXhpc3RpbmdLZXlzLmxlbmd0aCA9PSAwICYmICF2YWx1ZSkpIHJldHVybiBzb3VyY2U7XG4gICAgbGV0IGV4aXN0aW5nS2V5ID0gZXhpc3RpbmdLZXlzWzBdO1xuXG4gICAgbGV0IGFubm90YXRpb24gPSB2YWx1ZSA/IGBbJHtrZXl9OjogJHt2YWx1ZX1dYCA6IFwiXCI7XG4gICAgaWYgKGV4aXN0aW5nS2V5KSB7XG4gICAgICAgIGxldCBwcmVmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIGV4aXN0aW5nS2V5LnN0YXJ0KTtcbiAgICAgICAgbGV0IHN1ZmZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoZXhpc3RpbmdLZXkuZW5kKTtcblxuICAgICAgICBpZiAoYW5ub3RhdGlvbikgcmV0dXJuIGAke3ByZWZpeH0ke2Fubm90YXRpb259JHtzdWZmaXh9YDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7cHJlZml4fSR7c3VmZml4LnRyaW1TdGFydCgpfWA7XG4gICAgfSBlbHNlIGlmIChhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtzb3VyY2UudHJpbUVuZCgpfSAke2Fubm90YXRpb259YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RW1vamlTaG9ydGhhbmRDb21wbGV0aW9uRmllbGQoc291cmNlOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMoc291cmNlLCB0cnVlKTtcbiAgICBjb25zdCBleGlzdGluZ0tleXMgPSBleGlzdGluZy5maWx0ZXIoKGYpID0+IGYua2V5ID09PSBcImNvbXBsZXRpb25cIiAmJiBmLndyYXBwaW5nID09PSBcImVtb2ppLXNob3J0aGFuZFwiKTtcblxuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyBPUiB0aGUga2V5IGFscmVhZHkgZG9lc24ndCBleGlzdC5cbiAgICBpZiAoZXhpc3RpbmdLZXlzLmxlbmd0aCA+IDIgfHwgKGV4aXN0aW5nS2V5cy5sZW5ndGggPT0gMCAmJiAhdmFsdWUpKSByZXR1cm4gc291cmNlO1xuXG4gICAgLyogTm8gd3JhcHBlciwgYWRkIG93biBzcGFjaW5nIGF0IHN0YXJ0ICovXG4gICAgY29uc3QgYW5ub3RhdGlvbiA9IHZhbHVlID8gYCBcdTI3MDUgJHt2YWx1ZX1gIDogXCJcIjtcbiAgICBsZXQgZXhpc3RpbmdLZXkgPSBleGlzdGluZ0tleXNbMF07XG4gICAgaWYgKGV4aXN0aW5nS2V5KSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgZXhpc3RpbmdLZXkuc3RhcnQpO1xuICAgICAgICBjb25zdCBzdWZmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKGV4aXN0aW5nS2V5LmVuZCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXgudHJpbUVuZCgpfSR7YW5ub3RhdGlvbn0ke3N1ZmZpeH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHtzb3VyY2UudHJpbUVuZCgpfSR7YW5ub3RhdGlvbn1gO1xuICAgIH1cbn1cbiIsICIvKiogTWFwIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgYSBuZXcgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcE9iamVjdFZhbHVlczxWLCBVPihvYmplY3Q6IFJlY29yZDxzdHJpbmcsIFY+LCBmdW5jOiAoeDogVikgPT4gVSk6IFJlY29yZDxzdHJpbmcsIFU+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFU+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGZ1bmModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHsgTGluaywgSnNvbkxpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIEpTT04tc2VyaWFsaXplZCBlcXVpdmFsZW50cyBmb3IgbGl0ZXJhbHMuICovXG5leHBvcnQgdHlwZSBKc29uTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgeyAkX3R5cGU6IFwiZGF0ZVwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgICB8IHsgJF90eXBlOiBcImR1cmF0aW9uXCI7IHZhbHVlOiBzdHJpbmcgfVxuICAgIHwgeyAkX3R5cGU6IFwibGlua1wiOyB2YWx1ZTogSnNvbkxpbmsgfVxuICAgIHwgQXJyYXk8SnNvbkxpdGVyYWw+XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgfCBudWxsO1xuXG5leHBvcnQgbmFtZXNwYWNlIEpzb25Db252ZXJzaW9uIHtcbiAgICBleHBvcnQgY29uc3QgTk9PUF9OT1JNQUxJWkVSOiAoaW5wdXQ6IExpdGVyYWwpID0+IExpdGVyYWwgPSAoaW5wdXQpID0+IGlucHV0O1xuXG4gICAgLyoqIENvbnZlcnQgYSBsaXRlcmFsIHZhbHVlIHRvIGEgc2FmZSwgcGVyc2lzdGVudCBKU09OIGVxdWl2YWxlbnQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGpzb24obGl0ZXJhbDogTGl0ZXJhbCk6IEpzb25MaXRlcmFsIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShsaXRlcmFsKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQ/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcChKc29uQ29udmVyc2lvbi5qc29uKTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHdyYXBwZWQudmFsdWUsIEpzb25Db252ZXJzaW9uLmpzb24pO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyAkX3R5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IHRydWUgfSkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImxpbmtcIiwgdmFsdWU6IHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSB9O1xuICAgICAgICAgICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvSVNPKCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgSlNPTiBsaXRlcmFsIHRvIGl0J3MgY29ycmVzcG9uZGluZyBoeWRyYXRlZCB2YWx1ZSwgb3B0aW9uYWxseSBhcHBseWluZ1xuICAgICAqIGEgbm9ybWFsaXphdGlvbiBzdGVwIHRvIHRoZSByZXN1bHRpbmcgdmFsdWUgYW5kIGFueSBsaXRlcmFscyBjb250YWluZWQgd2l0aGluIGl0XG4gICAgICogKHN1Y2ggYXMgaWYgdGhlIGxpdGVyYWwgaXMgYSBsaXN0IG9yIG9iamVjdCkuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKGpzb246IEpzb25MaXRlcmFsLCBub3JtYWxpemVyOiAoaW5wdXQ6IExpdGVyYWwpID0+IExpdGVyYWwgPSBOT09QX05PUk1BTElaRVIpOiBMaXRlcmFsIHtcbiAgICAgICAgaWYgKGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoanNvbi5tYXAoKGlucHV0KSA9PiBKc29uQ29udmVyc2lvbi52YWx1ZShpbnB1dCwgbm9ybWFsaXplcikpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKCEoXCIkX3R5cGVcIiBpbiBqc29uKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKGpzb24sICh2KSA9PiBKc29uQ29udmVyc2lvbi52YWx1ZSh2IGFzIEpzb25MaXRlcmFsLCBub3JtYWxpemVyKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBqc29uW1wiJF90eXBlXCJdO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoRGF0ZVRpbWUuZnJvbUlTTyhqc29uLnZhbHVlLCB7IHNldFpvbmU6IHRydWUgfSkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihEdXJhdGlvbi5mcm9tSVNPKGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QoanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZWQgdHlwZSAnJHt0eXBlfSchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmltaXRpdmUgdHlwZSwgcmV0dXJuIGFzIGlzLlxuICAgICAgICByZXR1cm4gbm9ybWFsaXplcihqc29uIGFzIExpdGVyYWwpO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG4vKiogVXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIGxpdGVyYWwgdHlwZXMgdG8gYW5kIGZyb20gdGhlaXIgWUFNTCBmcm9udG1hdHRlciByZXByZXNlbnRhdGlvbi4gKi9cblxuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIFlBTUwtZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gZm9yIGEgbGl0ZXJhbC4gKi9cbmV4cG9ydCB0eXBlIFlhbWxMaXRlcmFsID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgQXJyYXk8WWFtbExpdGVyYWw+O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBZYW1sQ29udmVyc2lvbiB7XG4gICAgLyoqIENvbnZlcnQgYSBsaXRlcmFsIGludG8gYSB5YW1sIGZyaWVuZGx5IHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB5YW1sKHZhbHVlOiBMaXRlcmFsKTogWWFtbExpdGVyYWwge1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGxpdGVyYWwpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcCh5YW1sKTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudG9JU08oKTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSHVtYW4oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBPYmplY3RWYWx1ZXMod3JhcHBlZC52YWx1ZSwgeWFtbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgY29udmVydCBhIFlBTUwgbGl0ZXJhbCBpbnRvIGEgcmVndWxhciBsaXRlcmFsIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlOiBZYW1sTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgdmFsdWUgYXMgQXJyYXk8YW55Pikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChsaXRlcmFsKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVQYXJzZSA9IERhdGVUaW1lLmZyb21KU0RhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlUGFyc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3QgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGxpdGVyYWwob2JqZWN0W2tleV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IGRhdGVQYXJzZSA9IFBSSU1JVElWRVMuZGF0ZS5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGF0ZVBhcnNlLnN0YXR1cykgcmV0dXJuIGRhdGVQYXJzZS52YWx1ZTtcblxuICAgICAgICAgICAgbGV0IGR1cmF0aW9uUGFyc2UgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChkdXJhdGlvblBhcnNlLnN0YXR1cykgcmV0dXJuIGR1cmF0aW9uUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIGxldCBsaW5rUGFyc2UgPSBQUklNSVRJVkVTLmxpbmsucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGxpbmtQYXJzZS5zdGF0dXMpIHJldHVybiBsaW5rUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2t1cCBpZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSB0eXBlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRmlsZVN0YXRzIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBpdGVyYXRlSW5saW5lRmllbGRzLCBtYXJrZG93blNvdXJjZUltcG9ydCwgTWV0YWRhdGEsIFNlY3Rpb25EYXRhIH0gZnJvbSBcIi4vbWFya2Rvd25cIjtcbmltcG9ydCB7IEpzb25Gcm9udG1hdHRlckVudHJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vbWFya2Rvd25cIjtcbmltcG9ydCB7XG4gICAgQ2FudmFzTWV0YWRhdGFJbmRleCxcbiAgICBKc29uQmFzZUNhbnZhc0NhcmQsXG4gICAgSnNvbkNhbnZhcyxcbiAgICBKc29uQ2FudmFzQ2FyZCxcbiAgICBKc29uQ2FudmFzRmlsZUNhcmQsXG4gICAgSnNvbkNhbnZhc1RleHRDYXJkLFxuICAgIEpzb25DYW52YXNXZWJDYXJkLFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jYW52YXNcIjtcbmltcG9ydCB7IENhbnZhc0ZpbGVEYXRhLCBDYW52YXNMaW5rRGF0YSwgQ2FudmFzVGV4dERhdGEsIENhbnZhc0RhdGEgYXMgSUNhbnZhcyB9IGZyb20gXCJvYnNpZGlhbi9jYW52YXNcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbi8qKiBJbXBvcnQgYSBjYW52YXMgZmlsZSB1c2luZyB0aGUgY2FudmFzIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc0ltcG9ydChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgaW5kZXg6IENhbnZhc01ldGFkYXRhSW5kZXhbXCJzdHJpbmdcIl0sXG4gICAgc3RhdHM6IEZpbGVTdGF0c1xuKTogSnNvbkNhbnZhcyB7XG4gICAgY29uc3QgY2FudmFzID0gbmV3IENhbnZhc0RhdGEocGF0aCwgc3RhdHMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc291cmNlKSBhcyBJQ2FudmFzO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIHBhcnNlZC5ub2Rlcykge1xuICAgICAgICBpZiAoYy50eXBlID09IFwiZ3JvdXBcIikgY29udGludWU7XG4gICAgICAgIGlmIChjLnR5cGUgPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZnJvbnRtYXR0ZXIsIG1ldGFkYXRhLCBsaW5lcywgc2VjdGlvbnMgfSA9IG1hcmtkb3duU291cmNlSW1wb3J0KHBhdGgsIGMudGV4dCwgaW5kZXguY2FjaGVzW2MuaWRdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhcmQgPSBuZXcgQ2FudmFzQ2FyZERhdGEocGF0aCwgYy5pZCwgYywgZnJvbnRtYXR0ZXIpO1xuICAgICAgICAgICAgc2VjdGlvbnMuZm9yRWFjaCgoaSkgPT4gY2FyZC5zZWN0aW9uKGkpKTtcbiAgICAgICAgICAgIGNhbnZhcy5jYXJkKGNhcmQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWcgaW4gbWV0YWRhdGEudGFncykgY2FudmFzLm1ldGFkYXRhLnRhZyh0YWcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIG1ldGFkYXRhLmxpbmtzID8/IFtdKSBjYW52YXMubWV0YWRhdGEubGluayhsaW5rKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgaXRlcmF0ZUlubGluZUZpZWxkcyhsaW5lcykpIGNhbnZhcy5tZXRhZGF0YS5pbmxpbmVGaWVsZChmaWVsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkID0gbmV3IENhbnZhc0NhcmREYXRhKHBhdGgsIGMuaWQsIGMpO1xuICAgICAgICAgICAgY2FudmFzLmNhcmQoY2FyZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzLmJ1aWxkKCk7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyBjYW52YXMgY2FyZC4gKi9cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2FudmFzQ2FyZERhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhdGg6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBub2RlSnNvbjogQ2FudmFzVGV4dERhdGEgfCBDYW52YXNMaW5rRGF0YSB8IENhbnZhc0ZpbGVEYXRhXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25CYXNlQ2FudmFzQ2FyZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkZmlsZTogdGhpcy5wYXRoLFxuICAgICAgICAgICAgJGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy5ub2RlSnNvbi54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMubm9kZUpzb24ueSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAkZGltZW5zaW9uczoge1xuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm5vZGVKc29uLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5ub2RlSnNvbi5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJGNvbG9yOiB0aGlzLm5vZGVKc29uLmNvbG9yLFxuICAgICAgICAgICAgJGxpbms6IExpbmsuZmlsZSh0aGlzLnBhdGgpLndpdGhCbG9jayh0aGlzLmlkKS50b09iamVjdCgpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyoqIE1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGNhcmQgaW4gYSBjYW52YXMgdmlldy4gKi9cbmV4cG9ydCBjbGFzcyBDYW52YXNDYXJkRGF0YSBleHRlbmRzIEFic3RyYWN0Q2FudmFzQ2FyZERhdGEge1xuICAgIHB1YmxpYyBzZWN0aW9uczogU2VjdGlvbkRhdGFbXSA9IFtdO1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhdGg6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBub2RlSnNvbjogQ2FudmFzVGV4dERhdGEgfCBDYW52YXNMaW5rRGF0YSB8IENhbnZhc0ZpbGVEYXRhLFxuICAgICAgICBwdWJsaWMgZnJvbnRtYXR0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT5cbiAgICApIHtcbiAgICAgICAgc3VwZXIocGF0aCwgaWQsIG5vZGVKc29uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uRGF0YSk6IFNlY3Rpb25EYXRhIHtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbkNhbnZhc0NhcmQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMubm9kZUpzb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi4oc3VwZXIuYnVpbGQoKSBhcyBKc29uQmFzZUNhbnZhc0NhcmQpLFxuICAgICAgICAgICAgICAgICAgICAkaW5maWVsZHM6IHRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksXG4gICAgICAgICAgICAgICAgICAgICRmcm9udG1hdHRlcjogdGhpcy5mcm9udG1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLm1hcCgoeCkgPT4geC5idWlsZCgpKSxcbiAgICAgICAgICAgICAgICAgICAgJHRhZ3M6IHRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLFxuICAgICAgICAgICAgICAgICAgICAkbGlua3M6IHRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSxcbiAgICAgICAgICAgICAgICAgICAgJHR5cGU6IFwidGV4dC1jYXJkXCIsXG4gICAgICAgICAgICAgICAgICAgICRjb2xvcjogdGhpcy5ub2RlSnNvbi5jb2xvcixcbiAgICAgICAgICAgICAgICB9IGFzIEpzb25DYW52YXNUZXh0Q2FyZDtcbiAgICAgICAgICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIuYnVpbGQoKSxcbiAgICAgICAgICAgICAgICAgICAgJGxpbmtlZEZpbGU6IHRoaXMubm9kZUpzb24uZmlsZSxcbiAgICAgICAgICAgICAgICB9IGFzIEpzb25DYW52YXNGaWxlQ2FyZDtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIuYnVpbGQoKSxcbiAgICAgICAgICAgICAgICAgICAgJHVybDogdGhpcy5ub2RlSnNvbi51cmwsXG4gICAgICAgICAgICAgICAgfSBhcyBKc29uQ2FudmFzV2ViQ2FyZDtcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIE1ldGFkYXRhIGZvciB0aGUgd2hvbGUgY2FudmFzIHBhZ2UgYXMgYSB3aG9sZS4gKi9cbmV4cG9ydCBjbGFzcyBDYW52YXNEYXRhIHtcbiAgICBwdWJsaWMgY2FyZHM6IENhbnZhc0NhcmREYXRhW10gPSBbXTtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhdGg6IHN0cmluZywgcHVibGljIHN0YXRzOiBGaWxlU3RhdHMpIHt9XG5cbiAgICBwdWJsaWMgY2FyZChkOiBDYW52YXNDYXJkRGF0YSk6IENhbnZhc0NhcmREYXRhIHtcbiAgICAgICAgdGhpcy5jYXJkcy5wdXNoKGQpO1xuICAgICAgICByZXR1cm4gZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbkNhbnZhcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkY2FyZHM6IHRoaXMuY2FyZHMubWFwKCh4KSA9PiB4LmJ1aWxkKCkpLFxuICAgICAgICAgICAgJGN0aW1lOiB0aGlzLnN0YXRzLmN0aW1lLFxuICAgICAgICAgICAgJG10aW1lOiB0aGlzLnN0YXRzLm10aW1lLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksXG4gICAgICAgICAgICAkdGFnczogdGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksXG4gICAgICAgICAgICAkcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgJHNpemU6IHRoaXMuc3RhdHMuc2l6ZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgY2FudmFzSW1wb3J0IH0gZnJvbSBcImluZGV4L2ltcG9ydC9jYW52YXNcIjtcbmltcG9ydCB7IG1hcmtkb3duSW1wb3J0IH0gZnJvbSBcImluZGV4L2ltcG9ydC9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ2FudmFzSW1wb3J0UmVzdWx0LCBJbXBvcnRDb21tYW5kLCBNYXJrZG93bkltcG9ydFJlc3VsdCB9IGZyb20gXCJpbmRleC93ZWItd29ya2VyL21lc3NhZ2VcIjtcblxuLyoqIFdlYiB3b3JrZXIgZW50cnkgcG9pbnQgZm9yIGltcG9ydGluZy4gKi9cbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5kYXRhIGFzIEltcG9ydENvbW1hbmQ7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZG93biA9IG1hcmtkb3duSW1wb3J0KG1lc3NhZ2UucGF0aCwgbWVzc2FnZS5jb250ZW50cywgbWVzc2FnZS5tZXRhZGF0YSwgbWVzc2FnZS5zdGF0KTtcblxuICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwibWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICByZXN1bHQ6IG1hcmtkb3duLFxuICAgICAgICAgICAgfSBhcyBNYXJrZG93bkltcG9ydFJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS50eXBlID09PSBcImNhbnZhc1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSBjYW52YXNJbXBvcnQobWVzc2FnZS5wYXRoLCBtZXNzYWdlLmNvbnRlbnRzLCBtZXNzYWdlLmluZGV4LCBtZXNzYWdlLnN0YXQpO1xuXG4gICAgICAgICAgICBwb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjYW52YXNcIixcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGNhbnZhcyxcbiAgICAgICAgICAgIH0gYXMgQ2FudmFzSW1wb3J0UmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgJGVycm9yOiBcIlVuc3VwcG9ydGVkIGltcG9ydCBtZXRob2QuXCIgfSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBEYXRhY29yZSBJbmRleGVyIGZhaWxlZCB0byBpbmRleCAke2V2ZW50LmRhdGEucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHsgJGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiMGpEQUFBLElBQUFBLEdBQUFDLEdBQUEsQ0FBQUMsR0FBQUMsS0FBQSxFQUFDLFNBQVMsRUFBRUMsRUFBRSxDQUFXLE9BQU9GLElBQWpCLFVBQW9DLE9BQU9DLElBQWpCLFNBQXdCQSxHQUFPLFFBQVFDLEVBQUUsRUFBYyxPQUFPLFFBQW5CLFlBQTJCLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRUEsQ0FBQyxFQUFZLE9BQU9GLElBQWpCLFNBQXlCQSxHQUFRLFVBQVVFLEVBQUUsRUFBRSxFQUFFLFVBQVVBLEVBQUUsQ0FBQyxHQUFlLE9BQU8sTUFBcEIsWUFBeUIsS0FBS0YsR0FBSyxVQUFVLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxJQUFJRSxFQUFFLENBQUMsRUFBRSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsR0FBR0YsRUFBRUUsQ0FBQyxFQUFFLE9BQU9GLEVBQUVFLENBQUMsRUFBRSxRQUFRLElBQUlDLEVBQUVILEVBQUVFLENBQUMsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFQSxDQUFDLEVBQUUsS0FBS0MsRUFBRSxRQUFRQSxFQUFFQSxFQUFFLFFBQVFGLENBQUMsRUFBRUUsRUFBRSxFQUFFLEdBQUdBLEVBQUUsT0FBTyxDQUFDLE9BQU9GLEVBQUUsRUFBRSxFQUFFQSxFQUFFLEVBQUVELEVBQUVDLEVBQUUsRUFBRSxTQUFTRyxFQUFFSixFQUFFRSxFQUFFLENBQUNELEVBQUUsRUFBRUcsRUFBRUosQ0FBQyxHQUFHLE9BQU8sZUFBZUksRUFBRUosRUFBRSxDQUFDLGFBQWEsR0FBRyxXQUFXLEdBQUcsSUFBSUUsQ0FBQyxDQUFDLENBQUMsRUFBRUQsRUFBRSxFQUFFLFNBQVNHLEVBQUUsQ0FBQyxPQUFPLGVBQWVBLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRUgsRUFBRSxFQUFFLFNBQVNHLEVBQUUsQ0FBQyxJQUFJSixFQUFFSSxHQUFHQSxFQUFFLFdBQVcsVUFBVSxDQUFDLE9BQU9BLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPQSxDQUFDLEVBQUUsT0FBT0gsRUFBRSxFQUFFRCxFQUFFLElBQUlBLENBQUMsRUFBRUEsQ0FBQyxFQUFFQyxFQUFFLEVBQUUsU0FBU0csRUFBRUosRUFBRSxDQUFDLE9BQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0ksRUFBRUosQ0FBQyxDQUFDLEVBQUVDLEVBQUUsRUFBRSxHQUFHQSxFQUFFQSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUVELEVBQUVDLEVBQUUsQ0FBQyxhQUFhLFNBQVNDLEVBQUVFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCRixHQUFHLE9BQU8sSUFBSUEsRUFBRUUsQ0FBQyxFQUFFLEtBQUssRUFBRUEsQ0FBQyxDQUFDLElBQUlELEVBQUVELEVBQUUsVUFBVSxTQUFTRyxFQUFFRCxFQUFFSixFQUFFLENBQUMsUUFBUUMsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxJQUFJRCxFQUFFQyxDQUFDLENBQUMsQ0FBQyxTQUFTSyxFQUFFRixFQUFFSixFQUFFQyxFQUFFLENBQUMsT0FBTyxTQUFTRyxFQUFFSixFQUFFLENBQUNLLEVBQUVMLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQUNHLEVBQUVKLEVBQUVDLENBQUMsRUFBRUEsRUFBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQ0gsRUFBRUksRUFBRUosRUFBRUMsRUFBRUMsRUFBRUMsQ0FBQyxDQUFDLEVBQUVGLENBQUMsRUFBRUQsQ0FBQyxDQUFDLFNBQVMsRUFBRUksRUFBRUosRUFBRSxDQUFDLE9BQU9NLEVBQUUsU0FBU04sRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLE9BQU9ILEVBQUUsT0FBTyxDQUFDSSxFQUFFSCxFQUFFQyxFQUFFQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFSCxDQUFDLENBQUMsQ0FBQyxTQUFT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QUMsRUFBRSxFQUFFLFNBQVNKLEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUVJLEVBQUVILENBQUMsQ0FBQyxDQUFDLEVBQUVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBU0MsRUFBRSxDQUFDLEdBQUdLLEVBQUUsRUFBRW1CLEdBQUV4QixDQUFDLEVBQUVBLEVBQUUsSUFBSSxNQUFNLElBQUksTUFBTSx3Q0FBd0NBLEVBQUUsTUFBTUEsRUFBRSxTQUFTLEVBQUUsRUFBRSwwQ0FBMEMsRUFBRSxJQUFJSixHQUFHSSxFQUFFLEdBQUcsS0FBSyxPQUFPQSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU9GLEVBQUUsU0FBU0QsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUV3QixFQUFFMUIsRUFBRUMsQ0FBQyxFQUFFLE9BQU9DLElBQUlDLEVBQUVRLEVBQUVWLEVBQUUsRUFBRUMsQ0FBQyxFQUFFUSxFQUFFVCxFQUFFRixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxTQUFTSSxFQUFFLENBQUMsT0FBT1MsRUFBRSxTQUFTVCxDQUFDLEVBQUUsSUFBSSxTQUFTQSxFQUFFLENBQUMsT0FBTyxPQUFPLEtBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLFNBQVNBLEVBQUVKLEVBQUUsQ0FBQyxPQUFPYSxFQUFFLFNBQVNiLENBQUMsRUFBRSxJQUFJLFNBQVNBLEVBQUUsQ0FBQyxPQUFPQSxFQUFFLFNBQVNJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPVyxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxFQUFFLE9BQU9DLEVBQUUsUUFBUUEsRUFBRSxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsTUFBTUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsRUFBRSxRQUFRQSxFQUFFLENBQUMsRUFBRSxRQUFRQSxFQUFFLENBQUMsRUFBRSxNQUFN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QUFDLEVBQ3hDLE9BQVFBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBQ3pDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBQ3JDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBRXRDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3RDLE1BQU9BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3ZDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3BDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBRW5DLElBQUtBLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBQ3BDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBRWxDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3RDLE1BQU9BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3ZDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3BDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBRW5DLE9BQVFBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzFDLFFBQVNBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzNDLElBQUtBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3ZDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3hDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBRXJDLE9BQVFBLEVB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TSxPQUFRLENBQUMsQ0FDekMsQ0FDSiIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3BhcnNpbW1vbl91bWRfbWluIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidCIsICJyIiwgImUiLCAidSIsICJuIiwgIm8iLCAiaSIsICJmIiwgImMiLCAicyIsICJsIiwgIngiLCAiYiIsICJoIiwgInAiLCAiZCIsICJ2IiwgImciLCAibSIsICJ5IiwgIkUiLCAidyIsICJCIiwgImEiLCAiaiIsICJTIiwgIl8iLCAiTCIsICJPIiwgImsiLCAiUCIsICJxIiwgIkEiLCAiSSIsICJGIiwgIk0iLCAieiIsICJSIiwgIlUiLCAiVyIsICJEIiwgIk4iLCAiRyIsICJDIiwgIkoiLCAiVCIsICJZIiwgIlYiLCAiSCIsICJYIiwgIksiLCAiUSIsICJaIiwgIiQiLCAibm4iLCAidG4iLCAicm4iLCAiYW4iLCAiZW4iLCAidW4iLCAib24iLCAiZm4iLCAiY24iLCAic24iLCAibG4iLCAiaG4iLCAicG4iLCAiZG4iLCAidm4iLCAiZ24iLCAibW4iLCAieW4iLCAicmVxdWlyZV9iX3RyZWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIl9fZXh0ZW5kcyIsICJleHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgImRlZmF1bHRDb21wYXJhdG9yIiwgImEiLCAidGEiLCAidGIiLCAic2ltcGxlQ29tcGFyYXRvciIsICJCVHJlZSIsICJlbnRyaWVzIiwgImNvbXBhcmUiLCAibWF4Tm9kZVNpemUiLCAiRW1wdHlMZWFmIiwgImNhbGxiYWNrIiwgInRoaXNBcmciLCAiX3RoaXMiLCAiayIsICJ2IiwgImluaXRpYWxDb3VudGVyIiwgImxvdyIsICJoaWdoIiwgImtleSIsICJkZWZhdWx0VmFsdWUiLCAidmFsdWUiLCAib3ZlcndyaXRlIiwgInJlc3VsdCIsICJCTm9kZUludGVybmFsIiwgIkRlbGV0ZVJhbmdlIiwgIm51IiwgInBhaXJzIiwgImtleXMiLCAicmV0dXJuVGhpc0lmVW5jaGFuZ2VkIiwgImNoYW5nZWQiLCAiaW5jbHVkZUhpZ2giLCAiZGVsIiwgImkiLCAiRGVsZXRlIiwgInRtcCIsICJpbml0aWFsVmFsdWUiLCAiaXQiLCAiUmV1c2VkQXJyYXkiLCAibmV4dCIsICJsb3dlc3RLZXkiLCAicmV1c2VkQXJyYXkiLCAiaW5mbyIsICJpdGVyYXRvciIsICJub2RlcXVldWUiLCAibm9kZWluZGV4IiwgImxlYWYiLCAic3RhdGUiLCAianVtcCIsICJsZXZlbCIsICJoaWdoZXN0S2V5IiwgInNraXBIaWdoZXN0IiwgIl9hIiwgImNoZWNrIiwgIm5leHRub2RlIiwgIkVtcHR5QXJyYXkiLCAib3RoZXIiLCAib25seVRoaXMiLCAib25seU90aGVyIiwgImRpZmZlcmVudCIsICJfY29tcGFyZSIsICJ0aGlzQ3Vyc29yIiwgIm90aGVyQ3Vyc29yIiwgInRoaXNTdWNjZXNzIiwgIm90aGVyU3VjY2VzcyIsICJwcmV2Q3Vyc29yT3JkZXIiLCAiY3Vyc29yT3JkZXIiLCAidGhpc0xlYWYiLCAidGhpc0ludGVybmFsU3BpbmUiLCAidGhpc0xldmVsSW5kaWNlcyIsICJvdGhlckxlYWYiLCAib3RoZXJJbnRlcm5hbFNwaW5lIiwgIm90aGVyTGV2ZWxJbmRpY2VzIiwgInZhbFRoaXMiLCAidmFsT3RoZXIiLCAib3RoZXJWYWwiLCAibGFzdFRoaXMiLCAibGFzdE90aGVyIiwgIm5vZGVUaGlzIiwgIm5vZGVPdGhlciIsICJjdXJzb3IiLCAiY3Vyc29yRmluaXNoZWQiLCAiY29tcGFyZUtleXMiLCAiY29tcGFyZWQiLCAiY2FuU3RlcCIsICJsZXZlbEluZGljZXMiLCAiY3VycmVudEtleSIsICJ0cmVlIiwgIl9yb290IiwgImhlaWdodCIsICJzdGVwVG9Ob2RlIiwgImludGVybmFsU3BpbmUiLCAibGV2ZWxzTGVuZ3RoIiwgInNwaW5lTGVuZ3RoIiwgIm5vZGVMZXZlbEluZGV4IiwgImxldmVsSW5kZXhXYWxrQmFjayIsICJ2YWx1ZUluZGV4IiwgIm5leHRMZXZlbCIsICJjdXJyZW50TGV2ZWwiLCAibm9kZSIsICJjaGlsZHJlbiIsICJjaGlsZEluZGV4IiwgImN1cnNvckEiLCAiY3Vyc29yQiIsICJoZWlnaHRBIiwgImN1cnJlbnRLZXlBIiwgImxldmVsSW5kaWNlc0EiLCAiaGVpZ2h0QiIsICJjdXJyZW50S2V5QiIsICJsZXZlbEluZGljZXNCIiwgImtleUNvbXBhcmlzb24iLCAiaGVpZ2h0TWluIiwgImRlcHRoQU5vcm1hbGl6ZWQiLCAiZGVwdGhCTm9ybWFsaXplZCIsICJmaXJzdEtleSIsICJuIiwgImZvcmNlIiwgIm1heExlbmd0aCIsICJtaW4iLCAibWF4IiwgInJlc3VsdHMiLCAiQnJlYWsiLCAiYWRkZWQiLCAib25Gb3VuZCIsICJyIiwgInJvb3QiLCAiaXNTaGFyZWQiLCAidCIsICJzaXplIiwgImFzU2V0IiwgImJ0cmVlIiwgIkJOb2RlIiwgInZhbHVlcyIsICJ1bmRlZlZhbHMiLCAiZmFpbFhvciIsICJjbXAiLCAibG8iLCAiaGkiLCAibWlkIiwgImMiLCAibGFzdEluZGV4IiwgImluY2x1c2l2ZSIsICJpbmRleE9yTG93ZXIiLCAiZGVwdGgiLCAiYmFzZUluZGV4IiwgImtMIiwgInZMIiwgIm5ld1JpZ2h0U2libGluZyIsICJ0YXJnZXQiLCAicmhzIiwgImxocyIsICJoYWxmIiwgImVkaXRNb2RlIiwgImNvdW50IiwgImlMb3ciLCAiaUhpZ2giLCAiXyIsICJfc3VwZXIiLCAibGVuZ3RoIiwgImNMIiwgImNoaWxkU2l6ZSIsICJ0b29mZXciLCAiY2hpbGQiLCAibWF4U2l6ZSIsICJvbGRMZW5ndGgiLCAicmhzQ2hpbGRyZW4iLCAiZmFjdCIsICJhcmdzIiwgIl9pIiwgIkx1eG9uRXJyb3IiLCAiSW52YWxpZERhdGVUaW1lRXJyb3IiLCAicmVhc29uIiwgIkludmFsaWRJbnRlcnZhbEVycm9yIiwgIkludmFsaWREdXJhdGlvbkVycm9yIiwgIkNvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIiwgIkludmFsaWRVbml0RXJyb3IiLCAidW5pdCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJab25lSXNBYnN0cmFjdEVycm9yIiwgIm4iLCAicyIsICJsIiwgIkRBVEVfU0hPUlQiLCAiREFURV9NRUQiLCAiREFURV9NRURfV0lUSF9XRUVLREFZIiwgIkRBVEVfRlVMTCIsICJEQVRFX0hVR0UiLCAiVElNRV9TSU1QTEUiLCAiVElNRV9XSVRIX1NFQ09ORFMiLCAiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FX1dJVEhfTE9OR19PRkZTRVQiLCAiVElNRV8yNF9TSU1QTEUiLCAiVElNRV8yNF9XSVRIX1NFQ09ORFMiLCAiVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQiLCAiREFURVRJTUVfU0hPUlQiLCAiREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRCIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgImlzVW5kZWZpbmVkIiwgIm8iLCAiaXNOdW1iZXIiLCAiaXNJbnRlZ2VyIiwgImlzU3RyaW5nIiwgImlzRGF0ZSIsICJoYXNSZWxhdGl2ZSIsICJlIiwgIm1heWJlQXJyYXkiLCAidGhpbmciLCAiYmVzdEJ5IiwgImFyciIsICJieSIsICJjb21wYXJlIiwgImJlc3QiLCAibmV4dCIsICJwYWlyIiwgInBpY2siLCAib2JqIiwgImtleXMiLCAiYSIsICJrIiwgImhhc093blByb3BlcnR5IiwgInByb3AiLCAiaW50ZWdlckJldHdlZW4iLCAiYm90dG9tIiwgInRvcCIsICJmbG9vck1vZCIsICJ4IiwgIm4iLCAicGFkU3RhcnQiLCAiaW5wdXQiLCAiaXNOZWciLCAicGFkZGVkIiwgInBhcnNlSW50ZWdlciIsICJzdHJpbmciLCAicGFyc2VGbG9hdGluZyIsICJwYXJzZU1pbGxpcyIsICJmcmFjdGlvbiIsICJmIiwgInJvdW5kVG8iLCAibnVtYmVyIiwgImRpZ2l0cyIsICJ0b3dhcmRaZXJvIiwgImZhY3RvciIsICJpc0xlYXBZZWFyIiwgInllYXIiLCAiZGF5c0luWWVhciIsICJkYXlzSW5Nb250aCIsICJtb250aCIsICJtb2RNb250aCIsICJtb2RZZWFyIiwgIm9ialRvTG9jYWxUUyIsICJkIiwgIndlZWtzSW5XZWVrWWVhciIsICJ3ZWVrWWVhciIsICJwMSIsICJsYXN0IiwgInAyIiwgInVudHJ1bmNhdGVZZWFyIiwgInBhcnNlWm9uZUluZm8iLCAidHMiLCAib2Zmc2V0Rm9ybWF0IiwgImxvY2FsZSIsICJ0aW1lWm9uZSIsICJkYXRlIiwgImludGxPcHRzIiwgIm1vZGlmaWVkIiwgIl9fc3ByZWFkVmFsdWVzIiwgInBhcnNlZCIsICJtIiwgInNpZ25lZE9mZnNldCIsICJvZmZIb3VyU3RyIiwgIm9mZk1pbnV0ZVN0ciIsICJvZmZIb3VyIiwgIm9mZk1pbiIsICJvZmZNaW5TaWduZWQiLCAiYXNOdW1iZXIiLCAidmFsdWUiLCAibnVtZXJpY1ZhbHVlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm5vcm1hbGl6ZU9iamVjdCIsICJub3JtYWxpemVyIiwgIm5vcm1hbGl6ZWQiLCAidSIsICJ2IiwgImZvcm1hdE9mZnNldCIsICJvZmZzZXQiLCAiZm9ybWF0IiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2lnbiIsICJ0aW1lT2JqZWN0IiwgImlhbmFSZWdleCIsICJtb250aHNMb25nIiwgIm1vbnRoc1Nob3J0IiwgIm1vbnRoc05hcnJvdyIsICJtb250aHMiLCAibGVuZ3RoIiwgIndlZWtkYXlzTG9uZyIsICJ3ZWVrZGF5c1Nob3J0IiwgIndlZWtkYXlzTmFycm93IiwgIndlZWtkYXlzIiwgIm1lcmlkaWVtcyIsICJlcmFzTG9uZyIsICJlcmFzU2hvcnQiLCAiZXJhc05hcnJvdyIsICJlcmFzIiwgIm1lcmlkaWVtRm9yRGF0ZVRpbWUiLCAiZHQiLCAid2Vla2RheUZvckRhdGVUaW1lIiwgIm1vbnRoRm9yRGF0ZVRpbWUiLCAiZXJhRm9yRGF0ZVRpbWUiLCAiZm9ybWF0UmVsYXRpdmVUaW1lIiwgInVuaXQiLCAiY291bnQiLCAibnVtZXJpYyIsICJuYXJyb3ciLCAidW5pdHMiLCAibGFzdGFibGUiLCAiaXNEYXkiLCAiaXNJblBhc3QiLCAiZm10VmFsdWUiLCAic2luZ3VsYXIiLCAibGlsVW5pdHMiLCAiZm10VW5pdCIsICJzdHJpbmdpZnlUb2tlbnMiLCAic3BsaXRzIiwgInRva2VuVG9TdHJpbmciLCAicyIsICJ0b2tlbiIsICJtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzIiwgIkRBVEVfU0hPUlQiLCAiREFURV9NRUQiLCAiREFURV9GVUxMIiwgIkRBVEVfSFVHRSIsICJUSU1FX1NJTVBMRSIsICJUSU1FX1dJVEhfU0VDT05EUyIsICJUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUIiwgIlRJTUVfV0lUSF9MT05HX09GRlNFVCIsICJUSU1FXzI0X1NJTVBMRSIsICJUSU1FXzI0X1dJVEhfU0VDT05EUyIsICJUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUIiwgIlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCIsICJEQVRFVElNRV9TSE9SVCIsICJEQVRFVElNRV9NRUQiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgIkZvcm1hdHRlciIsICJfRm9ybWF0dGVyIiwgImxvY2FsZSIsICJvcHRzIiwgImZtdCIsICJjdXJyZW50IiwgImN1cnJlbnRGdWxsIiwgImJyYWNrZXRlZCIsICJpIiwgImMiLCAiZm9ybWF0T3B0cyIsICJkdCIsICJfX3NwcmVhZFZhbHVlcyIsICJuIiwgInAiLCAicGFkU3RhcnQiLCAia25vd25FbmdsaXNoIiwgInVzZURhdGVUaW1lRm9ybWF0dGVyIiwgInN0cmluZyIsICJleHRyYWN0IiwgImZvcm1hdE9mZnNldCIsICJtZXJpZGllbSIsICJtZXJpZGllbUZvckRhdGVUaW1lIiwgIm1vbnRoIiwgImxlbmd0aCIsICJzdGFuZGFsb25lIiwgIm1vbnRoRm9yRGF0ZVRpbWUiLCAid2Vla2RheSIsICJ3ZWVrZGF5Rm9yRGF0ZVRpbWUiLCAibWF5YmVNYWNybyIsICJlcmEiLCAiZXJhRm9yRGF0ZVRpbWUiLCAiZHVyIiwgInRva2VuVG9GaWVsZCIsICJsaWxkdXIiLCAibWFwcGVkIiwgInRva2VucyIsICJyZWFsVG9rZW5zIiwgImZvdW5kIiwgImxpdGVyYWwiLCAidmFsIiwgImNvbGxhcHNlZCIsICJ0IiwgIkludmFsaWQiLCAicmVhc29uIiwgImV4cGxhbmF0aW9uIiwgIlpvbmUiLCAiWm9uZUlzQWJzdHJhY3RFcnJvciIsICJ0cyIsICJvcHRzIiwgImZvcm1hdCIsICJvdGhlclpvbmUiLCAic2luZ2xldG9uIiwgIlN5c3RlbVpvbmUiLCAiX1N5c3RlbVpvbmUiLCAiWm9uZSIsICJ0cyIsICJmb3JtYXQiLCAibG9jYWxlIiwgInBhcnNlWm9uZUluZm8iLCAiZm9ybWF0T2Zmc2V0IiwgIm90aGVyWm9uZSIsICJkdGZDYWNoZSIsICJtYWtlRFRGIiwgInpvbmUiLCAidHlwZVRvUG9zIiwgImhhY2t5T2Zmc2V0IiwgImR0ZiIsICJkYXRlIiwgImZvcm1hdHRlZCIsICJwYXJzZWQiLCAiZk1vbnRoIiwgImZEYXkiLCAiZlllYXIiLCAiZmFkT3JCYyIsICJmSG91ciIsICJmTWludXRlIiwgImZTZWNvbmQiLCAicGFydHNPZmZzZXQiLCAiZmlsbGVkIiwgImkiLCAidHlwZSIsICJ2YWx1ZSIsICJwb3MiLCAiaXNVbmRlZmluZWQiLCAiaWFuYVpvbmVDYWNoZSIsICJJQU5BWm9uZSIsICJfSUFOQVpvbmUiLCAiWm9uZSIsICJuYW1lIiwgInMiLCAiZSIsICJ0cyIsICJmb3JtYXQiLCAibG9jYWxlIiwgInBhcnNlWm9uZUluZm8iLCAiZm9ybWF0T2Zmc2V0IiwgInllYXIiLCAibW9udGgiLCAiZGF5IiwgImFkT3JCYyIsICJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAiYXNVVEMiLCAib2JqVG9Mb2NhbFRTIiwgImFzVFMiLCAib3ZlciIsICJvdGhlclpvbmUiLCAic2luZ2xldG9uIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJfRml4ZWRPZmZzZXRab25lIiwgIlpvbmUiLCAib2Zmc2V0IiwgInMiLCAiciIsICJzaWduZWRPZmZzZXQiLCAiZm9ybWF0T2Zmc2V0IiwgInRzIiwgImZvcm1hdCIsICJvdGhlclpvbmUiLCAiSW52YWxpZFpvbmUiLCAiWm9uZSIsICJ6b25lTmFtZSIsICJub3JtYWxpemVab25lIiwgImlucHV0IiwgImRlZmF1bHRab25lIiwgIm9mZnNldCIsICJpc1VuZGVmaW5lZCIsICJab25lIiwgImlzU3RyaW5nIiwgImxvd2VyZWQiLCAiRml4ZWRPZmZzZXRab25lIiwgIklBTkFab25lIiwgImlzTnVtYmVyIiwgIkludmFsaWRab25lIiwgIm5vdyIsICJkZWZhdWx0Wm9uZSIsICJkZWZhdWx0TG9jYWxlIiwgImRlZmF1bHROdW1iZXJpbmdTeXN0ZW0iLCAiZGVmYXVsdE91dHB1dENhbGVuZGFyIiwgInRocm93T25JbnZhbGlkIiwgIlNldHRpbmdzIiwgIm4iLCAiem9uZSIsICJub3JtYWxpemVab25lIiwgIlN5c3RlbVpvbmUiLCAibG9jYWxlIiwgIm51bWJlcmluZ1N5c3RlbSIsICJvdXRwdXRDYWxlbmRhciIsICJ0IiwgIkxvY2FsZSIsICJJQU5BWm9uZSIsICJpbnRsTEZDYWNoZSIsICJnZXRDYWNoZWRMRiIsICJsb2NTdHJpbmciLCAib3B0cyIsICJrZXkiLCAiZHRmIiwgImludGxEVENhY2hlIiwgImdldENhY2hlZERURiIsICJpbnRsTnVtQ2FjaGUiLCAiZ2V0Q2FjaGVkSU5GIiwgImluZiIsICJpbnRsUmVsQ2FjaGUiLCAiZ2V0Q2FjaGVkUlRGIiwgIl9hIiwgImJhc2UiLCAiY2FjaGVLZXlPcHRzIiwgIl9fb2JqUmVzdCIsICJzeXNMb2NhbGVDYWNoZSIsICJzeXN0ZW1Mb2NhbGUiLCAicGFyc2VMb2NhbGVTdHJpbmciLCAibG9jYWxlU3RyIiwgInVJbmRleCIsICJvcHRpb25zIiwgInNtYWxsZXIiLCAiZSIsICJudW1iZXJpbmdTeXN0ZW0iLCAiY2FsZW5kYXIiLCAiaW50bENvbmZpZ1N0cmluZyIsICJvdXRwdXRDYWxlbmRhciIsICJtYXBNb250aHMiLCAiZiIsICJtcyIsICJpIiwgImR0IiwgIkRhdGVUaW1lIiwgIm1hcFdlZWtkYXlzIiwgImxpc3RTdHVmZiIsICJsb2MiLCAibGVuZ3RoIiwgImRlZmF1bHRPSyIsICJlbmdsaXNoRm4iLCAiaW50bEZuIiwgIm1vZGUiLCAic3VwcG9ydHNGYXN0TnVtYmVycyIsICJQb2x5TnVtYmVyRm9ybWF0dGVyIiwgImludGwiLCAiZm9yY2VTaW1wbGUiLCAicGFkVG8iLCAiZmxvb3IiLCAib3RoZXJPcHRzIiwgImludGxPcHRzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZpeGVkIiwgInJvdW5kVG8iLCAicGFkU3RhcnQiLCAiUG9seURhdGVGb3JtYXR0ZXIiLCAieiIsICJnbXRPZmZzZXQiLCAib2Zmc2V0WiIsICJJQU5BWm9uZSIsICJQb2x5UmVsRm9ybWF0dGVyIiwgImlzRW5nbGlzaCIsICJoYXNSZWxhdGl2ZSIsICJjb3VudCIsICJ1bml0IiwgImZvcm1hdFJlbGF0aXZlVGltZSIsICJMb2NhbGUiLCAiX0xvY2FsZSIsICJsb2NhbGUiLCAiZGVmYXVsdFRvRU4iLCAic3BlY2lmaWVkTG9jYWxlIiwgIlNldHRpbmdzIiwgImxvY2FsZVIiLCAibnVtYmVyaW5nU3lzdGVtUiIsICJvdXRwdXRDYWxlbmRhclIiLCAibnVtYmVyaW5nIiwgInBhcnNlZExvY2FsZSIsICJwYXJzZWROdW1iZXJpbmdTeXN0ZW0iLCAicGFyc2VkT3V0cHV0Q2FsZW5kYXIiLCAiaXNBY3R1YWxseUVuIiwgImhhc05vV2VpcmRuZXNzIiwgImFsdHMiLCAiX19zcHJlYWRQcm9wcyIsICJmb3JtYXQiLCAibW9udGhzIiwgImZvcm1hdFN0ciIsICJ3ZWVrZGF5cyIsICJtZXJpZGllbXMiLCAiZXJhcyIsICJmaWVsZCIsICJkZiIsICJyZXN1bHRzIiwgIm1hdGNoaW5nIiwgIm0iLCAib3RoZXIiLCAiY29tYmluZVJlZ2V4ZXMiLCAicmVnZXhlcyIsICJmdWxsIiwgImYiLCAiY29tYmluZUV4dHJhY3RvcnMiLCAiZXh0cmFjdG9ycyIsICJtIiwgIm1lcmdlZFZhbHMiLCAibWVyZ2VkWm9uZSIsICJjdXJzb3IiLCAiZXgiLCAidmFsIiwgInpvbmUiLCAibmV4dCIsICJfX3NwcmVhZFZhbHVlcyIsICJwYXJzZSIsICJzIiwgInBhdHRlcm5zIiwgInJlZ2V4IiwgImV4dHJhY3RvciIsICJzaW1wbGVQYXJzZSIsICJrZXlzIiwgIm1hdGNoIiwgInJldCIsICJpIiwgInBhcnNlSW50ZWdlciIsICJvZmZzZXRSZWdleCIsICJpc29FeHRlbmRlZFpvbmUiLCAiaWFuYVJlZ2V4IiwgImlzb1RpbWVCYXNlUmVnZXgiLCAiaXNvVGltZVJlZ2V4IiwgImlzb1RpbWVFeHRlbnNpb25SZWdleCIsICJpc29ZbWRSZWdleCIsICJpc29XZWVrUmVnZXgiLCAiaXNvT3JkaW5hbFJlZ2V4IiwgImV4dHJhY3RJU09XZWVrRGF0YSIsICJleHRyYWN0SVNPT3JkaW5hbERhdGEiLCAic3FsWW1kUmVnZXgiLCAic3FsVGltZVJlZ2V4IiwgInNxbFRpbWVFeHRlbnNpb25SZWdleCIsICJpbnQiLCAicG9zIiwgImZhbGxiYWNrIiwgImlzVW5kZWZpbmVkIiwgImV4dHJhY3RJU09ZbWQiLCAiZXh0cmFjdElTT1RpbWUiLCAicGFyc2VNaWxsaXMiLCAiZXh0cmFjdElTT09mZnNldCIsICJsb2NhbCIsICJmdWxsT2Zmc2V0IiwgInNpZ25lZE9mZnNldCIsICJGaXhlZE9mZnNldFpvbmUiLCAiZXh0cmFjdElBTkFab25lIiwgIklBTkFab25lIiwgImlzb1RpbWVPbmx5IiwgImlzb0R1cmF0aW9uIiwgImV4dHJhY3RJU09EdXJhdGlvbiIsICJ5ZWFyU3RyIiwgIm1vbnRoU3RyIiwgIndlZWtTdHIiLCAiZGF5U3RyIiwgImhvdXJTdHIiLCAibWludXRlU3RyIiwgInNlY29uZFN0ciIsICJtaWxsaXNlY29uZHNTdHIiLCAiaGFzTmVnYXRpdmVQcmVmaXgiLCAibmVnYXRpdmVTZWNvbmRzIiwgIm1heWJlTmVnYXRlIiwgIm51bSIsICJmb3JjZSIsICJwYXJzZUZsb2F0aW5nIiwgIm9ic09mZnNldHMiLCAiZnJvbVN0cmluZ3MiLCAid2Vla2RheVN0ciIsICJyZXN1bHQiLCAidW50cnVuY2F0ZVllYXIiLCAibW9udGhzU2hvcnQiLCAid2Vla2RheXNMb25nIiwgIndlZWtkYXlzU2hvcnQiLCAicmZjMjgyMiIsICJleHRyYWN0UkZDMjgyMiIsICJvYnNPZmZzZXQiLCAibWlsT2Zmc2V0IiwgIm9mZkhvdXJTdHIiLCAib2ZmTWludXRlU3RyIiwgIm9mZnNldCIsICJwcmVwcm9jZXNzUkZDMjgyMiIsICJyZmMxMTIzIiwgInJmYzg1MCIsICJhc2NpaSIsICJleHRyYWN0UkZDMTEyM09yODUwIiwgImV4dHJhY3RBU0NJSSIsICJpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb1RpbWVDb21iaW5lZFJlZ2V4IiwgImV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0IiwgImV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldCIsICJleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lIiwgImV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0IiwgInBhcnNlSVNPRGF0ZSIsICJwYXJzZVJGQzI4MjJEYXRlIiwgInBhcnNlSFRUUERhdGUiLCAicGFyc2VJU09EdXJhdGlvbiIsICJleHRyYWN0SVNPVGltZU9ubHkiLCAicGFyc2VJU09UaW1lT25seSIsICJzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgInNxbFRpbWVDb21iaW5lZFJlZ2V4IiwgImV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUiLCAicGFyc2VTUUwiLCAiSU5WQUxJRCIsICJsb3dPcmRlck1hdHJpeCIsICJjYXN1YWxNYXRyaXgiLCAiX19zcHJlYWRWYWx1ZXMiLCAiZGF5c0luWWVhckFjY3VyYXRlIiwgImRheXNJbk1vbnRoQWNjdXJhdGUiLCAiYWNjdXJhdGVNYXRyaXgiLCAib3JkZXJlZFVuaXRzIiwgInJldmVyc2VVbml0cyIsICJjbG9uZSIsICJkdXIiLCAiYWx0cyIsICJjbGVhciIsICJjb25mIiwgIkR1cmF0aW9uIiwgImFudGlUcnVuYyIsICJjb252ZXJ0IiwgIm1hdHJpeCIsICJmcm9tTWFwIiwgImZyb21Vbml0IiwgInRvTWFwIiwgInRvVW5pdCIsICJjb252IiwgInJhdyIsICJzYW1lU2lnbiIsICJhZGRlZCIsICJub3JtYWxpemVWYWx1ZXMiLCAidmFscyIsICJwcmV2aW91cyIsICJjdXJyZW50IiwgImlzVW5kZWZpbmVkIiwgIl9EdXJhdGlvbiIsICJjb25maWciLCAiYWNjdXJhdGUiLCAiTG9jYWxlIiwgImNvdW50IiwgIm9wdHMiLCAib2JqIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm5vcm1hbGl6ZU9iamVjdCIsICJkdXJhdGlvbkxpa2UiLCAiaXNOdW1iZXIiLCAidGV4dCIsICJwYXJzZWQiLCAicGFyc2VJU09EdXJhdGlvbiIsICJwYXJzZUlTT1RpbWVPbmx5IiwgInJlYXNvbiIsICJleHBsYW5hdGlvbiIsICJpbnZhbGlkIiwgIkludmFsaWQiLCAiU2V0dGluZ3MiLCAiSW52YWxpZER1cmF0aW9uRXJyb3IiLCAidW5pdCIsICJub3JtYWxpemVkIiwgIkludmFsaWRVbml0RXJyb3IiLCAibyIsICJmbXQiLCAiZm10T3B0cyIsICJfX3NwcmVhZFByb3BzIiwgIkZvcm1hdHRlciIsICJsIiwgInZhbCIsICJuIiwgInMiLCAicm91bmRUbyIsICJtaWxsaXMiLCAidmFsdWUiLCAic3RyIiwgImR1cmF0aW9uIiwgInJlc3VsdCIsICJrIiwgImhhc093blByb3BlcnR5IiwgImZuIiwgImFzTnVtYmVyIiwgInZhbHVlcyIsICJtaXhlZCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImNvbnZlcnNpb25BY2N1cmFjeSIsICJsb2MiLCAidW5pdHMiLCAidSIsICJidWlsdCIsICJhY2N1bXVsYXRlZCIsICJsYXN0VW5pdCIsICJvd24iLCAiYWsiLCAiaSIsICJkb3duIiwgImtleSIsICJuZWdhdGVkIiwgIm90aGVyIiwgImVxIiwgInYxIiwgInYyIiwgIklOVkFMSUQiLCAidmFsaWRhdGVTdGFydEVuZCIsICJzdGFydCIsICJlbmQiLCAiSW50ZXJ2YWwiLCAiX0ludGVydmFsIiwgImNvbmZpZyIsICJyZWFzb24iLCAiZXhwbGFuYXRpb24iLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaW52YWxpZCIsICJJbnZhbGlkIiwgIlNldHRpbmdzIiwgIkludmFsaWRJbnRlcnZhbEVycm9yIiwgImJ1aWx0U3RhcnQiLCAiZnJpZW5kbHlEYXRlVGltZSIsICJidWlsdEVuZCIsICJ2YWxpZGF0ZUVycm9yIiwgImR1cmF0aW9uIiwgImR1ciIsICJEdXJhdGlvbiIsICJkdCIsICJ0ZXh0IiwgIm9wdHMiLCAicyIsICJlIiwgInN0YXJ0SXNWYWxpZCIsICJEYXRlVGltZSIsICJlbmRJc1ZhbGlkIiwgIm8iLCAidW5pdCIsICJkYXRlVGltZSIsICJkYXRlVGltZXMiLCAic29ydGVkIiwgImQiLCAicmVzdWx0cyIsICJhZGRlZCIsICJuZXh0IiwgImlkeCIsICJ4IiwgIm51bWJlck9mUGFydHMiLCAib3RoZXIiLCAiaW50ZXJ2YWxzIiwgImZvdW5kIiwgImZpbmFsIiwgImEiLCAiYiIsICJzb2ZhciIsICJjdXJyZW50IiwgIml0ZW0iLCAiY3VycmVudENvdW50IiwgImVuZHMiLCAiaSIsICJmbGF0dGVuZWQiLCAiYXJyIiwgImRhdGVGb3JtYXQiLCAic2VwYXJhdG9yIiwgIm1hcEZuIiwgIkluZm8iLCAiem9uZSIsICJTZXR0aW5ncyIsICJwcm90byIsICJEYXRlVGltZSIsICJJQU5BWm9uZSIsICJpbnB1dCIsICJub3JtYWxpemVab25lIiwgImxlbmd0aCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImxvY09iaiIsICJvdXRwdXRDYWxlbmRhciIsICJMb2NhbGUiLCAiaGFzUmVsYXRpdmUiLCAiZGF5RGlmZiIsICJlYXJsaWVyIiwgImxhdGVyIiwgInV0Y0RheVN0YXJ0IiwgImR0IiwgIm1zIiwgIkR1cmF0aW9uIiwgImhpZ2hPcmRlckRpZmZzIiwgImN1cnNvciIsICJ1bml0cyIsICJkaWZmZXJzIiwgImIiLCAiZGF5cyIsICJyZXN1bHRzIiwgImxvd2VzdE9yZGVyIiwgImhpZ2hXYXRlciIsICJ1bml0IiwgImRpZmZlciIsICJkZWx0YSIsICJkaWZmX2RlZmF1bHQiLCAib3B0cyIsICJyZW1haW5pbmdNaWxsaXMiLCAibG93ZXJPcmRlclVuaXRzIiwgInUiLCAiZHVyYXRpb24iLCAibnVtYmVyaW5nU3lzdGVtcyIsICJudW1iZXJpbmdTeXN0ZW1zVVRGMTYiLCAiaGFuaWRlY0NoYXJzIiwgInBhcnNlRGlnaXRzIiwgInN0ciIsICJ2YWx1ZSIsICJpIiwgImNvZGUiLCAia2V5IiwgIm1pbiIsICJtYXgiLCAiZGlnaXRSZWdleCIsICJudW1iZXJpbmdTeXN0ZW0iLCAiYXBwZW5kIiwgIk1JU1NJTkdfRlRQIiwgImludFVuaXQiLCAicmVnZXgiLCAicG9zdCIsICJpIiwgInMiLCAicGFyc2VEaWdpdHMiLCAiTkJTUCIsICJzcGFjZU9yTkJTUCIsICJzcGFjZU9yTkJTUFJlZ0V4cCIsICJmaXhMaXN0UmVnZXgiLCAic3RyaXBJbnNlbnNpdGl2aXRpZXMiLCAib25lT2YiLCAic3RyaW5ncyIsICJzdGFydEluZGV4IiwgIm9mZnNldCIsICJncm91cHMiLCAiaCIsICJtIiwgInNpZ25lZE9mZnNldCIsICJzaW1wbGUiLCAiZXNjYXBlVG9rZW4iLCAidmFsdWUiLCAidW5pdEZvclRva2VuIiwgInRva2VuIiwgImxvYyIsICJvbmUiLCAiZGlnaXRSZWdleCIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJzaXgiLCAib25lT3JUd28iLCAib25lVG9UaHJlZSIsICJvbmVUb1NpeCIsICJvbmVUb05pbmUiLCAidHdvVG9Gb3VyIiwgImZvdXJUb1NpeCIsICJsaXRlcmFsIiwgInQiLCAidW5pdCIsICJ1bnRydW5jYXRlWWVhciIsICJwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbCIsICJ0b2tlbkZvclBhcnQiLCAicGFydCIsICJsb2NhbGUiLCAiZm9ybWF0T3B0cyIsICJ0eXBlIiwgInN0eWxlIiwgInZhbCIsICJidWlsZFJlZ2V4IiwgInVuaXRzIiwgInUiLCAiZiIsICJtYXRjaCIsICJpbnB1dCIsICJoYW5kbGVycyIsICJtYXRjaGVzIiwgImFsbCIsICJtYXRjaEluZGV4IiwgImhhc093blByb3BlcnR5IiwgImRhdGVUaW1lRnJvbU1hdGNoZXMiLCAidG9GaWVsZCIsICJ6b25lIiwgInNwZWNpZmljT2Zmc2V0IiwgImlzVW5kZWZpbmVkIiwgIklBTkFab25lIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJwYXJzZU1pbGxpcyIsICJyIiwgImsiLCAiZHVtbXlEYXRlVGltZUNhY2hlIiwgImdldER1bW15RGF0ZVRpbWUiLCAiRGF0ZVRpbWUiLCAibWF5YmVFeHBhbmRNYWNyb1Rva2VuIiwgIkZvcm1hdHRlciIsICJ0b2tlbnMiLCAicCIsICJleHBhbmRNYWNyb1Rva2VucyIsICJleHBsYWluRnJvbVRva2VucyIsICJmb3JtYXQiLCAiZGlzcXVhbGlmeWluZ1VuaXQiLCAicmVnZXhTdHJpbmciLCAicmF3TWF0Y2hlcyIsICJyZXN1bHQiLCAiQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IiLCAicGFyc2VGcm9tVG9rZW5zIiwgImludmFsaWRSZWFzb24iLCAibm9uTGVhcExhZGRlciIsICJsZWFwTGFkZGVyIiwgInVuaXRPdXRPZlJhbmdlIiwgInVuaXQiLCAidmFsdWUiLCAiSW52YWxpZCIsICJkYXlPZldlZWsiLCAieWVhciIsICJtb250aCIsICJkYXkiLCAiZCIsICJqcyIsICJjb21wdXRlT3JkaW5hbCIsICJpc0xlYXBZZWFyIiwgInVuY29tcHV0ZU9yZGluYWwiLCAib3JkaW5hbCIsICJ0YWJsZSIsICJtb250aDAiLCAiZ3JlZ29yaWFuVG9XZWVrIiwgImdyZWdPYmoiLCAid2Vla2RheSIsICJ3ZWVrTnVtYmVyIiwgIndlZWtZZWFyIiwgIndlZWtzSW5XZWVrWWVhciIsICJfX3NwcmVhZFZhbHVlcyIsICJ0aW1lT2JqZWN0IiwgIndlZWtUb0dyZWdvcmlhbiIsICJ3ZWVrRGF0YSIsICJ3ZWVrZGF5T2ZKYW40IiwgInllYXJJbkRheXMiLCAiZGF5c0luWWVhciIsICJncmVnb3JpYW5Ub09yZGluYWwiLCAiZ3JlZ0RhdGEiLCAib3JkaW5hbFRvR3JlZ29yaWFuIiwgIm9yZGluYWxEYXRhIiwgImhhc0ludmFsaWRXZWVrRGF0YSIsICJvYmoiLCAidmFsaWRZZWFyIiwgImlzSW50ZWdlciIsICJ2YWxpZFdlZWsiLCAiaW50ZWdlckJldHdlZW4iLCAidmFsaWRXZWVrZGF5IiwgImhhc0ludmFsaWRPcmRpbmFsRGF0YSIsICJ2YWxpZE9yZGluYWwiLCAiaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEiLCAidmFsaWRNb250aCIsICJ2YWxpZERheSIsICJkYXlzSW5Nb250aCIsICJoYXNJbnZhbGlkVGltZURhdGEiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIiwgInZhbGlkSG91ciIsICJ2YWxpZE1pbnV0ZSIsICJ2YWxpZFNlY29uZCIsICJ2YWxpZE1pbGxpc2Vjb25kIiwgIklOVkFMSUQiLCAiTUFYX0RBVEUiLCAidW5zdXBwb3J0ZWRab25lIiwgInpvbmUiLCAiSW52YWxpZCIsICJwb3NzaWJseUNhY2hlZFdlZWtEYXRhIiwgImR0IiwgImdyZWdvcmlhblRvV2VlayIsICJjbG9uZSIsICJpbnN0IiwgImFsdHMiLCAiY3VycmVudCIsICJEYXRlVGltZSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZpeE9mZnNldCIsICJsb2NhbFRTIiwgIm8iLCAidHoiLCAidXRjR3Vlc3MiLCAibzIiLCAibzMiLCAidHNUb09iaiIsICJ0cyIsICJvZmZzZXQiLCAiZCIsICJvYmpUb1RTIiwgIm9iaiIsICJvYmpUb0xvY2FsVFMiLCAiYWRqdXN0VGltZSIsICJkdXIiLCAib1ByZSIsICJ5ZWFyIiwgIm1vbnRoIiwgImMiLCAiZGF5c0luTW9udGgiLCAibWlsbGlzVG9BZGQiLCAiRHVyYXRpb24iLCAicGFyc2VEYXRhVG9EYXRlVGltZSIsICJwYXJzZWQiLCAicGFyc2VkWm9uZSIsICJvcHRzIiwgImZvcm1hdCIsICJ0ZXh0IiwgInNwZWNpZmljT2Zmc2V0IiwgInNldFpvbmUiLCAiaW50ZXJwcmV0YXRpb25ab25lIiwgInRvVGVjaEZvcm1hdCIsICJhbGxvd1oiLCAiRm9ybWF0dGVyIiwgIkxvY2FsZSIsICJ0b0lTT0RhdGUiLCAiZXh0ZW5kZWQiLCAibG9uZ0Zvcm1hdCIsICJwYWRTdGFydCIsICJ0b0lTT1RpbWUiLCAic3VwcHJlc3NTZWNvbmRzIiwgInN1cHByZXNzTWlsbGlzZWNvbmRzIiwgImluY2x1ZGVPZmZzZXQiLCAiZXh0ZW5kZWRab25lIiwgImRlZmF1bHRVbml0VmFsdWVzIiwgImRlZmF1bHRXZWVrVW5pdFZhbHVlcyIsICJkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMiLCAib3JkZXJlZFVuaXRzIiwgIm9yZGVyZWRXZWVrVW5pdHMiLCAib3JkZXJlZE9yZGluYWxVbml0cyIsICJub3JtYWxpemVVbml0IiwgInVuaXQiLCAibm9ybWFsaXplZCIsICJJbnZhbGlkVW5pdEVycm9yIiwgInF1aWNrRFQiLCAibm9ybWFsaXplWm9uZSIsICJTZXR0aW5ncyIsICJsb2MiLCAidHNOb3ciLCAiaXNVbmRlZmluZWQiLCAidSIsICJpbnZhbGlkIiwgImhhc0ludmFsaWRHcmVnb3JpYW5EYXRhIiwgImhhc0ludmFsaWRUaW1lRGF0YSIsICJvZmZzZXRQcm92aXMiLCAiZGlmZlJlbGF0aXZlIiwgInN0YXJ0IiwgImVuZCIsICJyb3VuZCIsICJyb3VuZFRvIiwgImRpZmZlciIsICJjb3VudCIsICJsYXN0T3B0cyIsICJhcmdMaXN0IiwgImFyZ3MiLCAiX0RhdGVUaW1lIiwgImNvbmZpZyIsICJvdCIsICJkYXkiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJkYXRlIiwgIm9wdGlvbnMiLCAiaXNEYXRlIiwgInpvbmVUb1VzZSIsICJtaWxsaXNlY29uZHMiLCAiaXNOdW1iZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic2Vjb25kcyIsICJub3JtYWxpemVPYmplY3QiLCAiY29udGFpbnNPcmRpbmFsIiwgImNvbnRhaW5zR3JlZ29yWWVhciIsICJjb250YWluc0dyZWdvck1EIiwgImNvbnRhaW5zR3JlZ29yIiwgImRlZmluaXRlV2Vla0RlZiIsICJDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciIsICJ1c2VXZWVrRGF0YSIsICJ1bml0cyIsICJkZWZhdWx0VmFsdWVzIiwgIm9iak5vdyIsICJncmVnb3JpYW5Ub09yZGluYWwiLCAiZm91bmRGaXJzdCIsICJ2IiwgImhpZ2hlck9yZGVySW52YWxpZCIsICJoYXNJbnZhbGlkV2Vla0RhdGEiLCAiaGFzSW52YWxpZE9yZGluYWxEYXRhIiwgImdyZWdvcmlhbiIsICJ3ZWVrVG9HcmVnb3JpYW4iLCAib3JkaW5hbFRvR3JlZ29yaWFuIiwgInRzRmluYWwiLCAib2Zmc2V0RmluYWwiLCAidmFscyIsICJwYXJzZUlTT0RhdGUiLCAicGFyc2VSRkMyODIyRGF0ZSIsICJwYXJzZUhUVFBEYXRlIiwgImZtdCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImxvY2FsZVRvVXNlIiwgInBhcnNlRnJvbVRva2VucyIsICJwYXJzZVNRTCIsICJyZWFzb24iLCAiZXhwbGFuYXRpb24iLCAiSW52YWxpZERhdGVUaW1lRXJyb3IiLCAiSW5mbyIsICJpc0xlYXBZZWFyIiwgImRheXNJblllYXIiLCAid2Vla3NJbldlZWtZZWFyIiwgImNhbGVuZGFyIiwgImtlZXBMb2NhbFRpbWUiLCAia2VlcENhbGVuZGFyVGltZSIsICJuZXdUUyIsICJvZmZzZXRHdWVzcyIsICJhc09iaiIsICJvdXRwdXRDYWxlbmRhciIsICJ2YWx1ZXMiLCAic2V0dGluZ1dlZWtTdHVmZiIsICJtaXhlZCIsICJkdXJhdGlvbiIsICJub3JtYWxpemVkVW5pdCIsICJxIiwgImZvcm1hdE9wdHMiLCAiREFURV9TSE9SVCIsICJleHQiLCAiaW5jbHVkZVByZWZpeCIsICJpbmNsdWRlWm9uZSIsICJpbmNsdWRlT2Zmc2V0U3BhY2UiLCAiYmFzZSIsICJvdGhlckRhdGVUaW1lIiwgImR1ck9wdHMiLCAibWF5YmVBcnJheSIsICJvdGhlcklzTGF0ZXIiLCAiZWFybGllciIsICJsYXRlciIsICJkaWZmZWQiLCAiZGlmZl9kZWZhdWx0IiwgIkludGVydmFsIiwgImlucHV0TXMiLCAiYWRqdXN0ZWRUb1pvbmUiLCAib3RoZXIiLCAicGFkZGluZyIsICJkYXRlVGltZXMiLCAiYmVzdEJ5IiwgImkiLCAiZXhwbGFpbkZyb21Ub2tlbnMiLCAiREFURV9NRUQiLCAiREFURV9NRURfV0lUSF9XRUVLREFZIiwgIkRBVEVfRlVMTCIsICJEQVRFX0hVR0UiLCAiVElNRV9TSU1QTEUiLCAiVElNRV9XSVRIX1NFQ09ORFMiLCAiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FX1dJVEhfTE9OR19PRkZTRVQiLCAiVElNRV8yNF9TSU1QTEUiLCAiVElNRV8yNF9XSVRIX1NFQ09ORFMiLCAiVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQiLCAiREFURVRJTUVfU0hPUlQiLCAiREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRCIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgImZyaWVuZGx5RGF0ZVRpbWUiLCAiZGF0ZVRpbWVpc2giLCAiUCIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIm5vcm1hbGl6ZUR1cmF0aW9uIiwgImR1ciIsICJyZW5kZXJNaW5pbWFsRGF0ZSIsICJ0aW1lIiwgImRhdGVGb3JtYXQiLCAiZGF0ZVRpbWVGb3JtYXQiLCAibG9jYWxlIiwgInJlbmRlck1pbmltYWxEdXJhdGlvbiIsICJkdXIiLCAibm9ybWFsaXplRHVyYXRpb24iLCAicmVzdWx0IiwgImdldEZpbGVUaXRsZSIsICJwYXRoIiwgImdldEV4dGVuc2lvbiIsICJIRUFERVJfQ0FOT05JQ0FMSVpFUiIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIl8iLCAicmVzdWx0IiwgIm5vcm1hbGl6ZUhlYWRlckZvckxpbmsiLCAiaGVhZGVyIiwgIkxpbmsiLCAiX0xpbmsiLCAicGF0aCIsICJlbWJlZCIsICJkaXNwbGF5IiwgImxpbmtwYXRoIiwgInNwbGl0IiwgImhlYWRlciIsICJub3JtYWxpemVIZWFkZXJGb3JMaW5rIiwgImJsb2NrSWQiLCAib2JqZWN0IiwgInJhd2xpbmsiLCAibGluayIsICJzcGxpdE9uVW5lc2NhcGVkUGlwZSIsICJmaWVsZHMiLCAiYmxvY2siLCAib3RoZXIiLCAicmVzdWx0IiwgImdldEZpbGVUaXRsZSIsICJfYSIsICJfYiIsICJlc2NhcGVkIiwgInBpcGUiLCAiQUxJQVMiLCAiRE9DIiwgIk1BUCIsICJQQUlSIiwgIlNDQUxBUiIsICJTRVEiLCAiTk9ERV9UWVBFIiwgImlzQWxpYXMiLCAibm9kZSIsICJpc0RvY3VtZW50IiwgImlzTWFwIiwgImlzUGFpciIsICJpc1NjYWxhciIsICJpc1NlcSIsICJpc0NvbGxlY3Rpb24iLCAiaXNOb2RlIiwgImhhc0FuY2hvciIsICJCUkVBSyIsICJTS0lQIiwgIlJFTU9WRSIsICJ2aXNpdCIsICJub2RlIiwgInZpc2l0b3IiLCAidmlzaXRvcl8iLCAiaW5pdFZpc2l0b3IiLCAiaXNEb2N1bWVudCIsICJ2aXNpdF8iLCAia2V5IiwgInBhdGgiLCAiY3RybCIsICJjYWxsVmlzaXRvciIsICJpc05vZGUiLCAiaXNQYWlyIiwgInJlcGxhY2VOb2RlIiwgImlzQ29sbGVjdGlvbiIsICJjaSIsICJjayIsICJjdiIsICJ2aXNpdEFzeW5jIiwgInZpc2l0QXN5bmNfIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgIl9lIiwgImlzTWFwIiwgImlzU2VxIiwgImlzU2NhbGFyIiwgImlzQWxpYXMiLCAicGFyZW50IiwgInB0IiwgImVzY2FwZUNoYXJzIiwgImVzY2FwZVRhZ05hbWUiLCAidG4iLCAiY2giLCAiRGlyZWN0aXZlcyIsICJfRGlyZWN0aXZlcyIsICJ5YW1sIiwgInRhZ3MiLCAiY29weSIsICJyZXMiLCAibGluZSIsICJvbkVycm9yIiwgInBhcnRzIiwgIm5hbWUiLCAiaGFuZGxlIiwgInByZWZpeCIsICJ2ZXJzaW9uIiwgImlzVmFsaWQiLCAic291cmNlIiwgInZlcmJhdGltIiwgInN1ZmZpeCIsICJlcnJvciIsICJ0YWciLCAiZG9jIiwgImxpbmVzIiwgInRhZ0VudHJpZXMiLCAidGFnTmFtZXMiLCAiaXNOb2RlIiwgInZpc2l0IiwgIl9rZXkiLCAibm9kZSIsICJhbmNob3JJc1ZhbGlkIiwgImFuY2hvciIsICJtc2ciLCAiYW5jaG9yTmFtZXMiLCAicm9vdCIsICJhbmNob3JzIiwgInZpc2l0IiwgIl9rZXkiLCAibm9kZSIsICJmaW5kTmV3QW5jaG9yIiwgInByZWZpeCIsICJleGNsdWRlIiwgImkiLCAibmFtZSIsICJjcmVhdGVOb2RlQW5jaG9ycyIsICJkb2MiLCAiYWxpYXNPYmplY3RzIiwgInNvdXJjZU9iamVjdHMiLCAicHJldkFuY2hvcnMiLCAic291cmNlIiwgInJlZiIsICJpc1NjYWxhciIsICJpc0NvbGxlY3Rpb24iLCAiZXJyb3IiLCAiYXBwbHlSZXZpdmVyIiwgInJldml2ZXIiLCAib2JqIiwgImtleSIsICJ2YWwiLCAiaSIsICJsZW4iLCAidjAiLCAidjEiLCAiayIsICJ0b0pTIiwgInZhbHVlIiwgImFyZyIsICJjdHgiLCAidiIsICJpIiwgImhhc0FuY2hvciIsICJkYXRhIiwgInJlcyIsICJOb2RlQmFzZSIsICJ0eXBlIiwgIk5PREVfVFlQRSIsICJjb3B5IiwgImRvYyIsICJtYXBBc01hcCIsICJtYXhBbGlhc0NvdW50IiwgIm9uQW5jaG9yIiwgInJldml2ZXIiLCAiaXNEb2N1bWVudCIsICJjdHgiLCAicmVzIiwgInRvSlMiLCAiY291bnQiLCAiYXBwbHlSZXZpdmVyIiwgIkFsaWFzIiwgIk5vZGVCYXNlIiwgInNvdXJjZSIsICJBTElBUyIsICJkb2MiLCAiZm91bmQiLCAidmlzaXQiLCAiX2tleSIsICJub2RlIiwgIl9hcmciLCAiY3R4IiwgImFuY2hvcnMiLCAibWF4QWxpYXNDb3VudCIsICJtc2ciLCAiZGF0YSIsICJ0b0pTIiwgImdldEFsaWFzQ291bnQiLCAiX29uQ29tbWVudCIsICJfb25DaG9tcEtlZXAiLCAic3JjIiwgImFuY2hvcklzVmFsaWQiLCAiaXNBbGlhcyIsICJhbmNob3IiLCAiaXNDb2xsZWN0aW9uIiwgImNvdW50IiwgIml0ZW0iLCAiYyIsICJpc1BhaXIiLCAia2MiLCAidmMiLCAiaXNTY2FsYXJWYWx1ZSIsICJ2YWx1ZSIsICJTY2FsYXIiLCAiTm9kZUJhc2UiLCAiU0NBTEFSIiwgImFyZyIsICJjdHgiLCAidG9KUyIsICJkZWZhdWx0VGFnUHJlZml4IiwgImZpbmRUYWdPYmplY3QiLCAidmFsdWUiLCAidGFnTmFtZSIsICJ0YWdzIiwgIl9hIiwgIm1hdGNoIiwgInQiLCAidGFnT2JqIiwgImNyZWF0ZU5vZGUiLCAiY3R4IiwgIl9iIiwgIl9jIiwgImlzRG9jdW1lbnQiLCAiaXNOb2RlIiwgImlzUGFpciIsICJtYXAiLCAiTUFQIiwgImFsaWFzRHVwbGljYXRlT2JqZWN0cyIsICJvbkFuY2hvciIsICJvblRhZ09iaiIsICJzY2hlbWEiLCAic291cmNlT2JqZWN0cyIsICJyZWYiLCAiQWxpYXMiLCAibm9kZSIsICJTY2FsYXIiLCAiU0VRIiwgImNvbGxlY3Rpb25Gcm9tUGF0aCIsICJzY2hlbWEiLCAicGF0aCIsICJ2YWx1ZSIsICJ2IiwgImkiLCAiayIsICJhIiwgImNyZWF0ZU5vZGUiLCAiaXNFbXB0eVBhdGgiLCAiQ29sbGVjdGlvbiIsICJOb2RlQmFzZSIsICJ0eXBlIiwgImNvcHkiLCAiaXQiLCAiaXNOb2RlIiwgImlzUGFpciIsICJrZXkiLCAicmVzdCIsICJub2RlIiwgImlzQ29sbGVjdGlvbiIsICJrZWVwU2NhbGFyIiwgImlzU2NhbGFyIiwgImFsbG93U2NhbGFyIiwgIm4iLCAic3RyaW5naWZ5Q29tbWVudCIsICJzdHIiLCAiaW5kZW50Q29tbWVudCIsICJjb21tZW50IiwgImluZGVudCIsICJsaW5lQ29tbWVudCIsICJGT0xEX0ZMT1ciLCAiRk9MRF9CTE9DSyIsICJGT0xEX1FVT1RFRCIsICJmb2xkRmxvd0xpbmVzIiwgInRleHQiLCAiaW5kZW50IiwgIm1vZGUiLCAiaW5kZW50QXRTdGFydCIsICJsaW5lV2lkdGgiLCAibWluQ29udGVudFdpZHRoIiwgIm9uRm9sZCIsICJvbk92ZXJmbG93IiwgImVuZFN0ZXAiLCAiZm9sZHMiLCAiZXNjYXBlZEZvbGRzIiwgImVuZCIsICJzcGxpdCIsICJwcmV2IiwgIm92ZXJmbG93IiwgImkiLCAiZXNjU3RhcnQiLCAiZXNjRW5kIiwgImNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyIsICJjaCIsICJuZXh0IiwgImoiLCAicmVzIiwgImZvbGQiLCAic3RhcnQiLCAiZ2V0Rm9sZE9wdGlvbnMiLCAiY3R4IiwgImlzQmxvY2siLCAiY29udGFpbnNEb2N1bWVudE1hcmtlciIsICJzdHIiLCAibGluZUxlbmd0aE92ZXJMaW1pdCIsICJsaW5lV2lkdGgiLCAiaW5kZW50TGVuZ3RoIiwgImxpbWl0IiwgInN0ckxlbiIsICJzdGFydCIsICJkb3VibGVRdW90ZWRTdHJpbmciLCAidmFsdWUiLCAianNvbiIsICJpbXBsaWNpdEtleSIsICJtaW5NdWx0aUxpbmVMZW5ndGgiLCAiaW5kZW50IiwgImkiLCAiY2giLCAiY29kZSIsICJmb2xkRmxvd0xpbmVzIiwgIkZPTERfUVVPVEVEIiwgInNpbmdsZVF1b3RlZFN0cmluZyIsICJyZXMiLCAiRk9MRF9GTE9XIiwgInF1b3RlZFN0cmluZyIsICJzaW5nbGVRdW90ZSIsICJxcyIsICJoYXNEb3VibGUiLCAiaGFzU2luZ2xlIiwgImJsb2NrRW5kTmV3bGluZXMiLCAiZSIsICJibG9ja1N0cmluZyIsICJjb21tZW50IiwgInR5cGUiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgImJsb2NrUXVvdGUiLCAiY29tbWVudFN0cmluZyIsICJsaXRlcmFsIiwgIlNjYWxhciIsICJjaG9tcCIsICJlbmRTdGFydCIsICJlbmQiLCAiZW5kTmxQb3MiLCAic3RhcnRXaXRoU3BhY2UiLCAic3RhcnRFbmQiLCAic3RhcnRObFBvcyIsICJoZWFkZXIiLCAiYm9keSIsICJGT0xEX0JMT0NLIiwgInBsYWluU3RyaW5nIiwgIml0ZW0iLCAiYWN0dWFsU3RyaW5nIiwgImluZGVudFN0ZXAiLCAiaW5GbG93IiwgInRlc3QiLCAidGFnIiwgIl9hIiwgImNvbXBhdCIsICJ0YWdzIiwgInN0cmluZ2lmeVN0cmluZyIsICJzcyIsICJfc3RyaW5naWZ5IiwgIl90eXBlIiwgImRlZmF1bHRLZXlUeXBlIiwgImRlZmF1bHRTdHJpbmdUeXBlIiwgInQiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJkb2MiLCAib3B0aW9ucyIsICJvcHQiLCAic3RyaW5naWZ5Q29tbWVudCIsICJpbkZsb3ciLCAiZ2V0VGFnT2JqZWN0IiwgInRhZ3MiLCAiaXRlbSIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJtYXRjaCIsICJ0IiwgInRhZ09iaiIsICJvYmoiLCAiaXNTY2FsYXIiLCAidGVzdE1hdGNoIiwgIm5hbWUiLCAic3RyaW5naWZ5UHJvcHMiLCAibm9kZSIsICJhbmNob3JzIiwgInByb3BzIiwgImFuY2hvciIsICJpc0NvbGxlY3Rpb24iLCAiYW5jaG9ySXNWYWxpZCIsICJ0YWciLCAic3RyaW5naWZ5IiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAiaXNQYWlyIiwgImlzQWxpYXMiLCAiaXNOb2RlIiwgIm8iLCAic3RyIiwgInN0cmluZ2lmeVN0cmluZyIsICJzdHJpbmdpZnlQYWlyIiwgImtleSIsICJ2YWx1ZSIsICJjdHgiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgIl9hIiwgIl9iIiwgImFsbE51bGxWYWx1ZXMiLCAiZG9jIiwgImluZGVudCIsICJpbmRlbnRTdGVwIiwgImNvbW1lbnRTdHJpbmciLCAiaW5kZW50U2VxIiwgInNpbXBsZUtleXMiLCAia2V5Q29tbWVudCIsICJpc05vZGUiLCAiaXNDb2xsZWN0aW9uIiwgIm1zZyIsICJleHBsaWNpdEtleSIsICJpc1NjYWxhciIsICJTY2FsYXIiLCAia2V5Q29tbWVudERvbmUiLCAiY2hvbXBLZWVwIiwgInN0ciIsICJzdHJpbmdpZnkiLCAibGluZUNvbW1lbnQiLCAidnNiIiwgInZjYiIsICJ2YWx1ZUNvbW1lbnQiLCAiaXNTZXEiLCAidmFsdWVDb21tZW50RG9uZSIsICJ2YWx1ZVN0ciIsICJ3cyIsICJjcyIsICJpbmRlbnRDb21tZW50IiwgInZzMCIsICJubDAiLCAiaGFzTmV3bGluZSIsICJmbG93IiwgImhhc1Byb3BzTGluZSIsICJzcDAiLCAid2FybiIsICJsb2dMZXZlbCIsICJ3YXJuaW5nIiwgIk1FUkdFX0tFWSIsICJtZXJnZSIsICJ2YWx1ZSIsICJTY2FsYXIiLCAiYWRkTWVyZ2VUb0pTTWFwIiwgImlzTWVyZ2VLZXkiLCAiY3R4IiwgImtleSIsICJpc1NjYWxhciIsICJ0YWciLCAibWFwIiwgImlzQWxpYXMiLCAiaXNTZXEiLCAiaXQiLCAibWVyZ2VWYWx1ZSIsICJzb3VyY2UiLCAiaXNNYXAiLCAic3JjTWFwIiwgImFkZFBhaXJUb0pTTWFwIiwgImN0eCIsICJtYXAiLCAia2V5IiwgInZhbHVlIiwgImlzTm9kZSIsICJpc01lcmdlS2V5IiwgImFkZE1lcmdlVG9KU01hcCIsICJqc0tleSIsICJ0b0pTIiwgInN0cmluZ0tleSIsICJzdHJpbmdpZnlLZXkiLCAianNWYWx1ZSIsICJzdHJDdHgiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJub2RlIiwgInN0cktleSIsICJqc29uU3RyIiwgIndhcm4iLCAiY3JlYXRlUGFpciIsICJrZXkiLCAidmFsdWUiLCAiY3R4IiwgImsiLCAiY3JlYXRlTm9kZSIsICJ2IiwgIlBhaXIiLCAiX1BhaXIiLCAiTk9ERV9UWVBFIiwgIlBBSVIiLCAic2NoZW1hIiwgImlzTm9kZSIsICJfIiwgInBhaXIiLCAiYWRkUGFpclRvSlNNYXAiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgInN0cmluZ2lmeVBhaXIiLCAic3RyaW5naWZ5Q29sbGVjdGlvbiIsICJjb2xsZWN0aW9uIiwgImN0eCIsICJvcHRpb25zIiwgIl9hIiwgInN0cmluZ2lmeUZsb3dDb2xsZWN0aW9uIiwgInN0cmluZ2lmeUJsb2NrQ29sbGVjdGlvbiIsICJjb21tZW50IiwgIml0ZW1zIiwgImJsb2NrSXRlbVByZWZpeCIsICJmbG93Q2hhcnMiLCAiaXRlbUluZGVudCIsICJvbkNob21wS2VlcCIsICJvbkNvbW1lbnQiLCAiaW5kZW50IiwgImNvbW1lbnRTdHJpbmciLCAiaXRlbUN0eCIsICJjaG9tcEtlZXAiLCAibGluZXMiLCAiaSIsICJpdGVtIiwgImlzTm9kZSIsICJhZGRDb21tZW50QmVmb3JlIiwgImlzUGFpciIsICJpayIsICJzdHIiLCAic3RyaW5naWZ5IiwgImxpbmVDb21tZW50IiwgImxpbmUiLCAiaW5kZW50Q29tbWVudCIsICJpbmRlbnRTdGVwIiwgImZjUGFkZGluZyIsICJyZXFOZXdsaW5lIiwgImxpbmVzQXRWYWx1ZSIsICJpdiIsICJzdGFydCIsICJlbmQiLCAibGVuIiwgInN1bSIsICJpYyIsICJmaW5kUGFpciIsICJpdGVtcyIsICJrZXkiLCAiayIsICJpc1NjYWxhciIsICJpdCIsICJpc1BhaXIiLCAiWUFNTE1hcCIsICJDb2xsZWN0aW9uIiwgInNjaGVtYSIsICJNQVAiLCAib2JqIiwgImN0eCIsICJrZWVwVW5kZWZpbmVkIiwgInJlcGxhY2VyIiwgIm1hcCIsICJhZGQiLCAidmFsdWUiLCAiY3JlYXRlUGFpciIsICJwYWlyIiwgIm92ZXJ3cml0ZSIsICJfYSIsICJfcGFpciIsICJQYWlyIiwgInByZXYiLCAic29ydEVudHJpZXMiLCAiaXNTY2FsYXJWYWx1ZSIsICJpIiwgIml0ZW0iLCAia2VlcFNjYWxhciIsICJub2RlIiwgIl8iLCAiVHlwZSIsICJhZGRQYWlyVG9KU01hcCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAic3RyaW5naWZ5Q29sbGVjdGlvbiIsICJtYXAiLCAiWUFNTE1hcCIsICJvbkVycm9yIiwgImlzTWFwIiwgInNjaGVtYSIsICJvYmoiLCAiY3R4IiwgIllBTUxTZXEiLCAiQ29sbGVjdGlvbiIsICJzY2hlbWEiLCAiU0VRIiwgInZhbHVlIiwgImtleSIsICJpZHgiLCAiYXNJdGVtSW5kZXgiLCAia2VlcFNjYWxhciIsICJpdCIsICJpc1NjYWxhciIsICJwcmV2IiwgImlzU2NhbGFyVmFsdWUiLCAiXyIsICJjdHgiLCAic2VxIiwgImkiLCAiaXRlbSIsICJ0b0pTIiwgIm9uQ29tbWVudCIsICJvbkNob21wS2VlcCIsICJzdHJpbmdpZnlDb2xsZWN0aW9uIiwgIm9iaiIsICJyZXBsYWNlciIsICJjcmVhdGVOb2RlIiwgInNlcSIsICJZQU1MU2VxIiwgIm9uRXJyb3IiLCAiaXNTZXEiLCAic2NoZW1hIiwgIm9iaiIsICJjdHgiLCAic3RyaW5nIiwgInZhbHVlIiwgInN0ciIsICJpdGVtIiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAic3RyaW5naWZ5U3RyaW5nIiwgIm51bGxUYWciLCAidmFsdWUiLCAiU2NhbGFyIiwgInNvdXJjZSIsICJjdHgiLCAiYm9vbFRhZyIsICJ2YWx1ZSIsICJzdHIiLCAiU2NhbGFyIiwgInNvdXJjZSIsICJjdHgiLCAic3YiLCAic3RyaW5naWZ5TnVtYmVyIiwgImZvcm1hdCIsICJtaW5GcmFjdGlvbkRpZ2l0cyIsICJ0YWciLCAidmFsdWUiLCAibnVtIiwgIm4iLCAiaSIsICJkIiwgImZsb2F0TmFOIiwgInZhbHVlIiwgInN0ciIsICJzdHJpbmdpZnlOdW1iZXIiLCAiZmxvYXRFeHAiLCAibm9kZSIsICJudW0iLCAiZmxvYXQiLCAiU2NhbGFyIiwgImRvdCIsICJpbnRJZGVudGlmeSIsICJ2YWx1ZSIsICJpbnRSZXNvbHZlIiwgInN0ciIsICJvZmZzZXQiLCAicmFkaXgiLCAiaW50QXNCaWdJbnQiLCAiaW50U3RyaW5naWZ5IiwgIm5vZGUiLCAicHJlZml4IiwgInN0cmluZ2lmeU51bWJlciIsICJpbnRPY3QiLCAiX29uRXJyb3IiLCAib3B0IiwgImludCIsICJpbnRIZXgiLCAic2NoZW1hIiwgIm1hcCIsICJzZXEiLCAic3RyaW5nIiwgIm51bGxUYWciLCAiYm9vbFRhZyIsICJpbnRPY3QiLCAiaW50IiwgImludEhleCIsICJmbG9hdE5hTiIsICJmbG9hdEV4cCIsICJmbG9hdCIsICJpbnRJZGVudGlmeSIsICJ2YWx1ZSIsICJzdHJpbmdpZnlKU09OIiwgImpzb25TY2FsYXJzIiwgInN0ciIsICJTY2FsYXIiLCAiX29uRXJyb3IiLCAiaW50QXNCaWdJbnQiLCAianNvbkVycm9yIiwgIm9uRXJyb3IiLCAic2NoZW1hIiwgIm1hcCIsICJzZXEiLCAiYmluYXJ5IiwgInZhbHVlIiwgInNyYyIsICJvbkVycm9yIiwgInN0ciIsICJidWZmZXIiLCAiaSIsICJjb21tZW50IiwgInR5cGUiLCAiY3R4IiwgIm9uQ29tbWVudCIsICJvbkNob21wS2VlcCIsICJidWYiLCAicyIsICJTY2FsYXIiLCAibGluZVdpZHRoIiwgIm4iLCAibGluZXMiLCAibyIsICJzdHJpbmdpZnlTdHJpbmciLCAicmVzb2x2ZVBhaXJzIiwgInNlcSIsICJvbkVycm9yIiwgIl9hIiwgImlzU2VxIiwgImkiLCAiaXRlbSIsICJpc1BhaXIiLCAiaXNNYXAiLCAicGFpciIsICJQYWlyIiwgIlNjYWxhciIsICJjbiIsICJjcmVhdGVQYWlycyIsICJzY2hlbWEiLCAiaXRlcmFibGUiLCAiY3R4IiwgInJlcGxhY2VyIiwgInBhaXJzIiwgIllBTUxTZXEiLCAiaXQiLCAia2V5IiwgInZhbHVlIiwgImtleXMiLCAiY3JlYXRlUGFpciIsICJZQU1MT01hcCIsICJfWUFNTE9NYXAiLCAiWUFNTFNlcSIsICJZQU1MTWFwIiwgIl8iLCAiY3R4IiwgIm1hcCIsICJwYWlyIiwgImtleSIsICJ2YWx1ZSIsICJpc1BhaXIiLCAidG9KUyIsICJzY2hlbWEiLCAiaXRlcmFibGUiLCAicGFpcnMiLCAiY3JlYXRlUGFpcnMiLCAib21hcCIsICJzZXEiLCAib25FcnJvciIsICJyZXNvbHZlUGFpcnMiLCAic2VlbktleXMiLCAiaXNTY2FsYXIiLCAiYm9vbFN0cmluZ2lmeSIsICJ2YWx1ZSIsICJzb3VyY2UiLCAiY3R4IiwgInRydWVUYWciLCAiZmFsc2VUYWciLCAiU2NhbGFyIiwgImZsb2F0TmFOIiwgInZhbHVlIiwgInN0ciIsICJzdHJpbmdpZnlOdW1iZXIiLCAiZmxvYXRFeHAiLCAibm9kZSIsICJudW0iLCAiZmxvYXQiLCAiU2NhbGFyIiwgImRvdCIsICJmIiwgImludElkZW50aWZ5IiwgInZhbHVlIiwgImludFJlc29sdmUiLCAic3RyIiwgIm9mZnNldCIsICJyYWRpeCIsICJpbnRBc0JpZ0ludCIsICJzaWduIiwgIm4iLCAiaW50U3RyaW5naWZ5IiwgIm5vZGUiLCAicHJlZml4IiwgInN0cmluZ2lmeU51bWJlciIsICJpbnRCaW4iLCAiX29uRXJyb3IiLCAib3B0IiwgImludE9jdCIsICJpbnQiLCAiaW50SGV4IiwgIllBTUxTZXQiLCAiX1lBTUxTZXQiLCAiWUFNTE1hcCIsICJzY2hlbWEiLCAia2V5IiwgInBhaXIiLCAiaXNQYWlyIiwgIlBhaXIiLCAiZmluZFBhaXIiLCAia2VlcFBhaXIiLCAiaXNTY2FsYXIiLCAidmFsdWUiLCAicHJldiIsICJfIiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAiaXRlcmFibGUiLCAicmVwbGFjZXIiLCAic2V0IiwgImNyZWF0ZVBhaXIiLCAibWFwIiwgIm9uRXJyb3IiLCAiaXNNYXAiLCAicGFyc2VTZXhhZ2VzaW1hbCIsICJzdHIiLCAiYXNCaWdJbnQiLCAic2lnbiIsICJwYXJ0cyIsICJudW0iLCAibiIsICJyZXMiLCAicCIsICJzdHJpbmdpZnlTZXhhZ2VzaW1hbCIsICJub2RlIiwgInZhbHVlIiwgInN0cmluZ2lmeU51bWJlciIsICJfNjAiLCAiaW50VGltZSIsICJfb25FcnJvciIsICJpbnRBc0JpZ0ludCIsICJmbG9hdFRpbWUiLCAidGltZXN0YW1wIiwgIm1hdGNoIiwgInllYXIiLCAibW9udGgiLCAiZGF5IiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlYyIsICJkYXRlIiwgInR6IiwgInNjaGVtYSIsICJtYXAiLCAic2VxIiwgInN0cmluZyIsICJudWxsVGFnIiwgInRydWVUYWciLCAiZmFsc2VUYWciLCAiaW50QmluIiwgImludE9jdCIsICJpbnQiLCAiaW50SGV4IiwgImZsb2F0TmFOIiwgImZsb2F0RXhwIiwgImZsb2F0IiwgImJpbmFyeSIsICJtZXJnZSIsICJvbWFwIiwgInBhaXJzIiwgInNldCIsICJpbnRUaW1lIiwgImZsb2F0VGltZSIsICJ0aW1lc3RhbXAiLCAic2NoZW1hcyIsICJzY2hlbWEiLCAibWFwIiwgInNlcSIsICJzdHJpbmciLCAidGFnc0J5TmFtZSIsICJiaW5hcnkiLCAiYm9vbFRhZyIsICJmbG9hdCIsICJmbG9hdEV4cCIsICJmbG9hdE5hTiIsICJmbG9hdFRpbWUiLCAiaW50IiwgImludEhleCIsICJpbnRPY3QiLCAiaW50VGltZSIsICJtZXJnZSIsICJudWxsVGFnIiwgIm9tYXAiLCAicGFpcnMiLCAic2V0IiwgInRpbWVzdGFtcCIsICJjb3JlS25vd25UYWdzIiwgImdldFRhZ3MiLCAiY3VzdG9tVGFncyIsICJzY2hlbWFOYW1lIiwgImFkZE1lcmdlVGFnIiwgInNjaGVtYVRhZ3MiLCAidGFncyIsICJrZXlzIiwgImtleSIsICJ0YWciLCAidGFnT2JqIiwgInRhZ05hbWUiLCAic29ydE1hcEVudHJpZXNCeUtleSIsICJhIiwgImIiLCAiU2NoZW1hIiwgIl9TY2hlbWEiLCAiY29tcGF0IiwgImN1c3RvbVRhZ3MiLCAibWVyZ2UiLCAicmVzb2x2ZUtub3duVGFncyIsICJzY2hlbWEiLCAic29ydE1hcEVudHJpZXMiLCAidG9TdHJpbmdEZWZhdWx0cyIsICJnZXRUYWdzIiwgImNvcmVLbm93blRhZ3MiLCAiTUFQIiwgIm1hcCIsICJTQ0FMQVIiLCAic3RyaW5nIiwgIlNFUSIsICJzZXEiLCAiY29weSIsICJzdHJpbmdpZnlEb2N1bWVudCIsICJkb2MiLCAib3B0aW9ucyIsICJfYSIsICJsaW5lcyIsICJoYXNEaXJlY3RpdmVzIiwgImRpciIsICJjdHgiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJjb21tZW50U3RyaW5nIiwgImNzIiwgImluZGVudENvbW1lbnQiLCAiY2hvbXBLZWVwIiwgImNvbnRlbnRDb21tZW50IiwgImlzTm9kZSIsICJvbkNob21wS2VlcCIsICJib2R5IiwgInN0cmluZ2lmeSIsICJsaW5lQ29tbWVudCIsICJkYyIsICJEb2N1bWVudCIsICJfRG9jdW1lbnQiLCAidmFsdWUiLCAicmVwbGFjZXIiLCAib3B0aW9ucyIsICJOT0RFX1RZUEUiLCAiRE9DIiwgIl9yZXBsYWNlciIsICJvcHQiLCAidmVyc2lvbiIsICJEaXJlY3RpdmVzIiwgImNvcHkiLCAiaXNOb2RlIiwgImFzc2VydENvbGxlY3Rpb24iLCAicGF0aCIsICJub2RlIiwgIm5hbWUiLCAicHJldiIsICJhbmNob3JOYW1lcyIsICJmaW5kTmV3QW5jaG9yIiwgIkFsaWFzIiwgImtleVRvU3RyIiwgInYiLCAiYXNTdHIiLCAiYWxpYXNEdXBsaWNhdGVPYmplY3RzIiwgImFuY2hvclByZWZpeCIsICJmbG93IiwgImtlZXBVbmRlZmluZWQiLCAib25UYWdPYmoiLCAidGFnIiwgIm9uQW5jaG9yIiwgInNldEFuY2hvcnMiLCAic291cmNlT2JqZWN0cyIsICJjcmVhdGVOb2RlQW5jaG9ycyIsICJjdHgiLCAiY3JlYXRlTm9kZSIsICJpc0NvbGxlY3Rpb24iLCAia2V5IiwgImsiLCAiUGFpciIsICJpc0VtcHR5UGF0aCIsICJrZWVwU2NhbGFyIiwgImlzU2NhbGFyIiwgImNvbGxlY3Rpb25Gcm9tUGF0aCIsICJzdiIsICJTY2hlbWEiLCAianNvbiIsICJqc29uQXJnIiwgIm1hcEFzTWFwIiwgIm1heEFsaWFzQ291bnQiLCAicmV2aXZlciIsICJyZXMiLCAidG9KUyIsICJjb3VudCIsICJhcHBseVJldml2ZXIiLCAicyIsICJzdHJpbmdpZnlEb2N1bWVudCIsICJjb250ZW50cyIsICJZQU1MRXJyb3IiLCAibmFtZSIsICJwb3MiLCAiY29kZSIsICJtZXNzYWdlIiwgIllBTUxQYXJzZUVycm9yIiwgIllBTUxXYXJuaW5nIiwgInByZXR0aWZ5RXJyb3IiLCAic3JjIiwgImxjIiwgImVycm9yIiwgImxpbmUiLCAiY29sIiwgImNpIiwgImxpbmVTdHIiLCAidHJpbVN0YXJ0IiwgInByZXYiLCAiY291bnQiLCAiZW5kIiwgInBvaW50ZXIiLCAicmVzb2x2ZVByb3BzIiwgInRva2VucyIsICJmbG93IiwgImluZGljYXRvciIsICJuZXh0IiwgIm9mZnNldCIsICJvbkVycm9yIiwgInBhcmVudEluZGVudCIsICJzdGFydE9uTmV3bGluZSIsICJzcGFjZUJlZm9yZSIsICJhdE5ld2xpbmUiLCAiaGFzU3BhY2UiLCAiY29tbWVudCIsICJjb21tZW50U2VwIiwgImhhc05ld2xpbmUiLCAicmVxU3BhY2UiLCAidGFiIiwgImFuY2hvciIsICJ0YWciLCAibmV3bGluZUFmdGVyUHJvcCIsICJjb21tYSIsICJmb3VuZCIsICJzdGFydCIsICJ0b2tlbiIsICJjYiIsICJsYXN0IiwgImVuZCIsICJjb250YWluc05ld2xpbmUiLCAia2V5IiwgInN0IiwgIml0IiwgImZsb3dJbmRlbnRDaGVjayIsICJpbmRlbnQiLCAiZmMiLCAib25FcnJvciIsICJlbmQiLCAiY29udGFpbnNOZXdsaW5lIiwgIm1hcEluY2x1ZGVzIiwgImN0eCIsICJpdGVtcyIsICJzZWFyY2giLCAidW5pcXVlS2V5cyIsICJpc0VxdWFsIiwgImEiLCAiYiIsICJpc1NjYWxhciIsICJwYWlyIiwgInN0YXJ0Q29sTXNnIiwgInJlc29sdmVCbG9ja01hcCIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJibSIsICJvbkVycm9yIiwgInRhZyIsICJfYSIsICJfYiIsICJOb2RlQ2xhc3MiLCAiWUFNTE1hcCIsICJtYXAiLCAib2Zmc2V0IiwgImNvbW1lbnRFbmQiLCAiY29sbEl0ZW0iLCAic3RhcnQiLCAia2V5IiwgInNlcCIsICJ2YWx1ZSIsICJrZXlQcm9wcyIsICJyZXNvbHZlUHJvcHMiLCAiaW1wbGljaXRLZXkiLCAiY29udGFpbnNOZXdsaW5lIiwgImtleVN0YXJ0IiwgImtleU5vZGUiLCAiZmxvd0luZGVudENoZWNrIiwgIm1hcEluY2x1ZGVzIiwgInZhbHVlUHJvcHMiLCAidmFsdWVOb2RlIiwgInBhaXIiLCAiUGFpciIsICJyZXNvbHZlQmxvY2tTZXEiLCAiY29tcG9zZU5vZGUiLCAiY29tcG9zZUVtcHR5Tm9kZSIsICJjdHgiLCAiYnMiLCAib25FcnJvciIsICJ0YWciLCAiX2EiLCAiTm9kZUNsYXNzIiwgIllBTUxTZXEiLCAic2VxIiwgIm9mZnNldCIsICJjb21tZW50RW5kIiwgInN0YXJ0IiwgInZhbHVlIiwgInByb3BzIiwgInJlc29sdmVQcm9wcyIsICJub2RlIiwgImZsb3dJbmRlbnRDaGVjayIsICJyZXNvbHZlRW5kIiwgImVuZCIsICJvZmZzZXQiLCAicmVxU3BhY2UiLCAib25FcnJvciIsICJjb21tZW50IiwgImhhc1NwYWNlIiwgInNlcCIsICJ0b2tlbiIsICJzb3VyY2UiLCAidHlwZSIsICJjYiIsICJibG9ja01zZyIsICJpc0Jsb2NrIiwgInRva2VuIiwgInJlc29sdmVGbG93Q29sbGVjdGlvbiIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJmYyIsICJvbkVycm9yIiwgInRhZyIsICJfYSIsICJfYiIsICJpc01hcCIsICJmY05hbWUiLCAiTm9kZUNsYXNzIiwgIllBTUxNYXAiLCAiWUFNTFNlcSIsICJjb2xsIiwgImF0Um9vdCIsICJvZmZzZXQiLCAiaSIsICJjb2xsSXRlbSIsICJzdGFydCIsICJrZXkiLCAic2VwIiwgInZhbHVlIiwgInByb3BzIiwgInJlc29sdmVQcm9wcyIsICJjb250YWluc05ld2xpbmUiLCAicHJldkl0ZW1Db21tZW50IiwgImxvb3AiLCAic3QiLCAicHJldiIsICJpc1BhaXIiLCAidmFsdWVOb2RlIiwgImtleVN0YXJ0IiwgImtleU5vZGUiLCAidmFsdWVQcm9wcyIsICJwYWlyIiwgIlBhaXIiLCAibWFwIiwgIm1hcEluY2x1ZGVzIiwgImVuZFJhbmdlIiwgImV4cGVjdGVkRW5kIiwgImNlIiwgImVlIiwgImNlUG9zIiwgIm5hbWUiLCAibXNnIiwgImVuZCIsICJyZXNvbHZlRW5kIiwgInJlc29sdmVDb2xsZWN0aW9uIiwgIkNOIiwgImN0eCIsICJ0b2tlbiIsICJvbkVycm9yIiwgInRhZ05hbWUiLCAidGFnIiwgImNvbGwiLCAicmVzb2x2ZUJsb2NrTWFwIiwgInJlc29sdmVCbG9ja1NlcSIsICJyZXNvbHZlRmxvd0NvbGxlY3Rpb24iLCAiQ29sbCIsICJjb21wb3NlQ29sbGVjdGlvbiIsICJwcm9wcyIsICJfYSIsICJfYiIsICJ0YWdUb2tlbiIsICJtc2ciLCAiYW5jaG9yIiwgIm5sIiwgImxhc3RQcm9wIiwgImV4cFR5cGUiLCAiWUFNTE1hcCIsICJZQU1MU2VxIiwgInQiLCAia3QiLCAicmVzIiwgIm5vZGUiLCAiaXNOb2RlIiwgIlNjYWxhciIsICJyZXNvbHZlQmxvY2tTY2FsYXIiLCAiY3R4IiwgInNjYWxhciIsICJvbkVycm9yIiwgInN0YXJ0IiwgImhlYWRlciIsICJwYXJzZUJsb2NrU2NhbGFySGVhZGVyIiwgInR5cGUiLCAiU2NhbGFyIiwgImxpbmVzIiwgInNwbGl0TGluZXMiLCAiY2hvbXBTdGFydCIsICJpIiwgImNvbnRlbnQiLCAidmFsdWUiLCAiZW5kIiwgInRyaW1JbmRlbnQiLCAib2Zmc2V0IiwgImNvbnRlbnRTdGFydCIsICJpbmRlbnQiLCAic2VwIiwgInByZXZNb3JlSW5kZW50ZWQiLCAiY3JsZiIsICJtZXNzYWdlIiwgInByb3BzIiwgInN0cmljdCIsICJzb3VyY2UiLCAibW9kZSIsICJjaG9tcCIsICJlcnJvciIsICJjaCIsICJuIiwgImhhc1NwYWNlIiwgImNvbW1lbnQiLCAibGVuZ3RoIiwgInRva2VuIiwgInRzIiwgInNwbGl0IiwgImZpcnN0IiwgIm0iLCAicmVzb2x2ZUZsb3dTY2FsYXIiLCAic2NhbGFyIiwgInN0cmljdCIsICJvbkVycm9yIiwgIm9mZnNldCIsICJ0eXBlIiwgInNvdXJjZSIsICJlbmQiLCAiX3R5cGUiLCAidmFsdWUiLCAiX29uRXJyb3IiLCAicmVsIiwgImNvZGUiLCAibXNnIiwgIlNjYWxhciIsICJwbGFpblZhbHVlIiwgInNpbmdsZVF1b3RlZFZhbHVlIiwgImRvdWJsZVF1b3RlZFZhbHVlIiwgInZhbHVlRW5kIiwgInJlIiwgInJlc29sdmVFbmQiLCAiYmFkQ2hhciIsICJmb2xkTGluZXMiLCAiX2EiLCAiZmlyc3QiLCAibGluZSIsICJlIiwgIm1hdGNoIiwgInJlcyIsICJzZXAiLCAicG9zIiwgImxhc3QiLCAiaSIsICJjaCIsICJmb2xkIiwgImZvbGROZXdsaW5lIiwgIm5leHQiLCAiY2MiLCAiZXNjYXBlQ29kZXMiLCAibGVuZ3RoIiwgInBhcnNlQ2hhckNvZGUiLCAicmF3IiwgIndzU3RhcnQiLCAiY29tcG9zZVNjYWxhciIsICJjdHgiLCAidG9rZW4iLCAidGFnVG9rZW4iLCAib25FcnJvciIsICJ2YWx1ZSIsICJ0eXBlIiwgImNvbW1lbnQiLCAicmFuZ2UiLCAicmVzb2x2ZUJsb2NrU2NhbGFyIiwgInJlc29sdmVGbG93U2NhbGFyIiwgInRhZ05hbWUiLCAibXNnIiwgInRhZyIsICJTQ0FMQVIiLCAiZmluZFNjYWxhclRhZ0J5TmFtZSIsICJmaW5kU2NhbGFyVGFnQnlUZXN0IiwgInNjYWxhciIsICJyZXMiLCAiaXNTY2FsYXIiLCAiU2NhbGFyIiwgImVycm9yIiwgInNjaGVtYSIsICJfYSIsICJtYXRjaFdpdGhUZXN0IiwgImt0IiwgImF0S2V5IiwgImRpcmVjdGl2ZXMiLCAiY29tcGF0IiwgInRzIiwgImNzIiwgImVtcHR5U2NhbGFyUG9zaXRpb24iLCAib2Zmc2V0IiwgImJlZm9yZSIsICJwb3MiLCAiaSIsICJzdCIsICJDTiIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJ0b2tlbiIsICJwcm9wcyIsICJvbkVycm9yIiwgImF0S2V5IiwgInNwYWNlQmVmb3JlIiwgImNvbW1lbnQiLCAiYW5jaG9yIiwgInRhZyIsICJub2RlIiwgImlzU3JjVG9rZW4iLCAiY29tcG9zZUFsaWFzIiwgImNvbXBvc2VTY2FsYXIiLCAiY29tcG9zZUNvbGxlY3Rpb24iLCAibWVzc2FnZSIsICJpc1NjYWxhciIsICJvZmZzZXQiLCAiYmVmb3JlIiwgInBvcyIsICJlbmQiLCAiZW1wdHlTY2FsYXJQb3NpdGlvbiIsICJvcHRpb25zIiwgInNvdXJjZSIsICJhbGlhcyIsICJBbGlhcyIsICJ2YWx1ZUVuZCIsICJyZSIsICJyZXNvbHZlRW5kIiwgImNvbXBvc2VEb2MiLCAib3B0aW9ucyIsICJkaXJlY3RpdmVzIiwgIm9mZnNldCIsICJzdGFydCIsICJ2YWx1ZSIsICJlbmQiLCAib25FcnJvciIsICJvcHRzIiwgImRvYyIsICJEb2N1bWVudCIsICJjdHgiLCAicHJvcHMiLCAicmVzb2x2ZVByb3BzIiwgImNvbXBvc2VOb2RlIiwgImNvbXBvc2VFbXB0eU5vZGUiLCAiY29udGVudEVuZCIsICJyZSIsICJyZXNvbHZlRW5kIiwgImdldEVycm9yUG9zIiwgInNyYyIsICJvZmZzZXQiLCAic291cmNlIiwgInBhcnNlUHJlbHVkZSIsICJwcmVsdWRlIiwgIl9hIiwgImNvbW1lbnQiLCAiYXRDb21tZW50IiwgImFmdGVyRW1wdHlMaW5lIiwgIkNvbXBvc2VyIiwgIm9wdGlvbnMiLCAiY29kZSIsICJtZXNzYWdlIiwgIndhcm5pbmciLCAicG9zIiwgIllBTUxXYXJuaW5nIiwgIllBTUxQYXJzZUVycm9yIiwgIkRpcmVjdGl2ZXMiLCAiZG9jIiwgImFmdGVyRG9jIiwgImRjIiwgImlzQ29sbGVjdGlvbiIsICJpdCIsICJpc1BhaXIiLCAiY2IiLCAidG9rZW5zIiwgImZvcmNlRG9jIiwgImVuZE9mZnNldCIsICJ0b2tlbiIsICJfX3lpZWxkU3RhciIsICJjb21wb3NlRG9jIiwgIm1zZyIsICJlcnJvciIsICJlbmQiLCAicmVzb2x2ZUVuZCIsICJvcHRzIiwgIkRvY3VtZW50IiwgIkJSRUFLIiwgIlNLSVAiLCAiUkVNT1ZFIiwgInZpc2l0IiwgImNzdCIsICJ2aXNpdG9yIiwgIl92aXNpdCIsICJwYXRoIiwgIml0ZW0iLCAiZmllbGQiLCAiaW5kZXgiLCAidG9rIiwgInBhcmVudCIsICJjb2xsIiwgImN0cmwiLCAidG9rZW4iLCAiaSIsICJjaSIsICJCT00iLCAiRE9DVU1FTlQiLCAiRkxPV19FTkQiLCAiU0NBTEFSIiwgInRva2VuVHlwZSIsICJzb3VyY2UiLCAiQk9NIiwgIkRPQ1VNRU5UIiwgIkZMT1dfRU5EIiwgIlNDQUxBUiIsICJpc0VtcHR5IiwgImNoIiwgImhleERpZ2l0cyIsICJ0YWdDaGFycyIsICJmbG93SW5kaWNhdG9yQ2hhcnMiLCAiaW52YWxpZEFuY2hvckNoYXJzIiwgImlzTm90QW5jaG9yQ2hhciIsICJMZXhlciIsICJzb3VyY2UiLCAiaW5jb21wbGV0ZSIsICJfYSIsICJuZXh0IiwgIl9feWllbGRTdGFyIiwgImkiLCAibiIsICJvZmZzZXQiLCAiaW5kZW50IiwgImR0IiwgImVuZCIsICJzdGF0ZSIsICJsaW5lIiwgIkJPTSIsICJkaXJFbmQiLCAiY3MiLCAic3AiLCAiRE9DVU1FTlQiLCAicyIsICJjaDAiLCAiY2gxIiwgIm5sIiwgIkZMT1dfRU5EIiwgInF1b3RlIiwgInFiIiwgImxvb3AiLCAibGFzdENoYXIiLCAiU0NBTEFSIiwgImluRmxvdyIsICJhbGxvd0VtcHR5IiwgImFsbG93VGFicyIsICJ0ZXN0IiwgIkxpbmVDb3VudGVyIiwgIm9mZnNldCIsICJsb3ciLCAiaGlnaCIsICJtaWQiLCAic3RhcnQiLCAiaW5jbHVkZXNUb2tlbiIsICJsaXN0IiwgInR5cGUiLCAiaSIsICJmaW5kTm9uRW1wdHlJbmRleCIsICJpc0Zsb3dUb2tlbiIsICJ0b2tlbiIsICJnZXRQcmV2UHJvcHMiLCAicGFyZW50IiwgIl9hIiwgIml0IiwgImdldEZpcnN0S2V5U3RhcnRQcm9wcyIsICJwcmV2IiwgImxvb3AiLCAiZml4Rmxvd1NlcUl0ZW1zIiwgImZjIiwgIlBhcnNlciIsICJvbk5ld0xpbmUiLCAiTGV4ZXIiLCAic291cmNlIiwgImluY29tcGxldGUiLCAibGV4ZW1lIiwgIl9feWllbGRTdGFyIiwgInRva2VuVHlwZSIsICJtZXNzYWdlIiwgInRvcCIsICJuIiwgImVycm9yIiwgImxhc3QiLCAic3QiLCAiZG9jIiwgImJ2IiwgInNjYWxhciIsICJzdGFydCIsICJzZXAiLCAibWFwIiwgIm5sIiwgImVuZCIsICJhdE1hcEluZGVudCIsICJhdE5leHRJdGVtIiwgImtleSIsICJmcyIsICJzZXEiLCAiaW5kZW50IiwgImRvY0VuZCIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJwcmV0dHlFcnJvcnMiLCAiTGluZUNvdW50ZXIiLCAicGFyc2VEb2N1bWVudCIsICJzb3VyY2UiLCAib3B0aW9ucyIsICJsaW5lQ291bnRlciIsICJwcmV0dHlFcnJvcnMiLCAicGFyc2VPcHRpb25zIiwgInBhcnNlciIsICJQYXJzZXIiLCAiY29tcG9zZXIiLCAiQ29tcG9zZXIiLCAiZG9jIiwgIl9kb2MiLCAiWUFNTFBhcnNlRXJyb3IiLCAicHJldHRpZnlFcnJvciIsICJwYXJzZSIsICJzcmMiLCAicmV2aXZlciIsICJfcmV2aXZlciIsICJ3YXJuaW5nIiwgIndhcm4iLCAiaW1wb3J0X3NvcnRlZF9idHJlZSIsICJQIiwgIkxpdGVyYWxzIiwgInRvU3RyaW5nIiwgImZpZWxkIiwgInNldHRpbmciLCAicmVjdXJzaXZlIiwgIndyYXBwZWQiLCAid3JhcFZhbHVlIiwgInJlc3VsdCIsICJmIiwgImUiLCAicmVuZGVyTWluaW1hbERhdGUiLCAicmVuZGVyTWluaW1hbER1cmF0aW9uIiwgInZhbCIsICJpc051bGwiLCAiaXNOdW1iZXIiLCAiaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgImlzRHVyYXRpb24iLCAiaXNEYXRlIiwgImlzQXJyYXkiLCAiaXNMaW5rIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAibWFwTGVhdmVzIiwgImZ1bmMiLCAia2V5IiwgInZhbHVlIiwgImVxdWFscyIsICJmaXJzdCIsICJzZWNvbmQiLCAiY29tcGFyZSIsICJ2YWwxIiwgInZhbDIiLCAibGlua05vcm1hbGl6ZXIiLCAiX2EiLCAiX2IiLCAid3JhcDEiLCAid3JhcDIiLCAibGluazEiLCAibGluazIiLCAibm9ybWFsaXplIiwgIngiLCAicGF0aENvbXBhcmUiLCAidHlwZUNvbXBhcmUiLCAiZjEiLCAiZjIiLCAiaW5kZXgiLCAiY29tcCIsICJvMSIsICJvMiIsICJrMSIsICJrMiIsICJrZXlDb21wYXJlIiwgInR5cGVPZiIsICJpc1RydXRoeSIsICJkZWVwQ29weSIsICJ2IiwgIkRhdGVUaW1lIiwgIkR1cmF0aW9uIiwgIkxpbmsiLCAiR3JvdXBpbmdzIiwgImlzRWxlbWVudEdyb3VwIiwgImVudHJ5IiwgImlzR3JvdXBpbmciLCAiZWxlbWVudCIsICJpc0xlYWYiLCAiY291bnQiLCAiZWxlbWVudHMiLCAic3ViZ3JvdXAiLCAic2xpY2UiLCAic3RhcnQiLCAiZW5kIiwgInNlZW4iLCAiZ3JvdXAiLCAiZ3JvdXBTaXplIiwgImdyb3VwU3RhcnQiLCAiZ3JvdXBFbmQiLCAiU3VjY2VzcyIsICJfU3VjY2VzcyIsICJ2YWx1ZSIsICJmIiwgInN1Y2MiLCAiX2ZhaWwiLCAiX3ZhbHVlIiwgIl9tZXNzYWdlIiwgIkZhaWx1cmUiLCAiX0ZhaWx1cmUiLCAiZXJyb3IiLCAiX2YiLCAiX3N1Y2MiLCAiZmFpbCIsICJtZXNzYWdlIiwgIlJlc3VsdCIsICJzdWNjZXNzIiwgImZhaWx1cmUiLCAiZmxhdE1hcDIiLCAiZmlyc3QiLCAic2Vjb25kIiwgIm1hcDIiLCAiYSIsICJiIiwgIm1hcEFsbCIsICJpbnB1dCIsICJmdW5jIiwgInJlc3VsdCIsICJlbGVtZW50IiwgIm91dHB1dCIsICJ0cnlpbmciLCAiY2FsbCIsICJhc3luYyIsICJwcm9taXNlIiwgIkZpbHRlcnMiLCAiYXRvbSIsICJzZXQiLCAiY29uc3RhbnQiLCAidmFsdWUiLCAibnVsbGFibGVBdG9tIiwgIm5lZ2F0ZWQiLCAibmVnYXRlIiwgImZpbHRlciIsICJlbXB0eSIsICJyZXNvbHZlIiwgImV2ZXJ5dGhpbmciLCAic2V0SW50ZXJzZWN0TmVnYXRpb24iLCAiaW50ZXJzZWN0IiwgImVsZW1lbnRzIiwgImxhenlJbnRlcnNlY3QiLCAieCIsICJwcm9kdWNlIiwgImxhenlGYWlsYWJsZUludGVyc2VjdGlvbiIsICJSZXN1bHQiLCAiYXRvbXMiLCAibmVnYXRpb25zIiwgImVsZW1lbnQiLCAibWF5YmVGaWx0ZXIiLCAic2V0SW50ZXJzZWN0IiwgInNldFVuaW9uIiwgInVuaW9uIiwgImZpbHRlcnMiLCAibGF6eVVuaW9uIiwgImxhenlGYWlsYWJsZVVuaW9uIiwgInNldHMiLCAic29ydGVkIiwgImEiLCAiYiIsICJyZXN1bHQiLCAibGFyZ2VzdCIsICJFeHByZXNzaW9ucyIsICJ2YXJpYWJsZSIsICJuYW1lIiwgImxpdGVyYWwiLCAidmFsdWUiLCAiYmluYXJ5T3AiLCAibGVmdCIsICJvcCIsICJyaWdodCIsICJpbmRleCIsICJvYmoiLCAiaW5kZXhWYXJpYWJsZSIsICJwYXJ0cyIsICJyZXN1bHQiLCAibGFtYmRhIiwgImFyZ3MiLCAiZnVuYyIsICJsaXN0IiwgInZhbHVlcyIsICJvYmplY3QiLCAibmVnYXRlIiwgImNoaWxkIiwgImlzQ29tcGFyZU9wIiwgInVuYm91bmRWYXJpYWJsZXMiLCAiZXhwciIsICJib3VuZCIsICJMaXRlcmFscyIsICJGaWx0ZXJzIiwgImEiLCAibmV3Qm91bmQiLCAiYXJnIiwgInYiLCAidG9TdHJpbmciLCAiayIsICJ3cmFwcGVkIiwgIlBSSU1JVElWRVMiLCAiXyIsICJzdHIiLCAicSIsICJjaGFycyIsICJlc2NhcGVkIiwgInN0YXJ0IiwgInJlc3QiLCAiRU1PSklfUkVHRVgiLCAiZmlyc3QiLCAibGlua0lubmVyIiwgIkxpbmsiLCAicCIsICJsIiwgIl9zdHIiLCAieWVhciIsICJtb250aCIsICJEYXRlVGltZSIsICJEQVRFX1NIT1JUSEFORFMiLCAiYSIsICJiIiwgImNoYWluT3B0IiwgInltIiwgImRheSIsICJ5bWQiLCAiaG91ciIsICJ5bWRoIiwgIm1pbnV0ZSIsICJ5bWRobSIsICJzZWNvbmQiLCAieW1kaG1zIiwgIm1pbGxpc2Vjb25kIiwgImR0IiwgInBtIiwgImhyIiwgIl9hIiwgInpvbmUiLCAiX2IiLCAiZCIsICJEVVJBVElPTl9UWVBFUyIsICJjb3VudCIsICJ0IiwgIngiLCAiZHVyYXRpb25zIiwgImMiLCAibm9ybWFsaXplRHVyYXRpb24iLCAiZiIsICJfcyIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIkR1cmF0aW9uIiwgIkVYUFJFU1NJT04iLCAiRXhwcmVzc2lvbnMiLCAiY3JlYXRlRnVuY3Rpb24iLCAiX2Z1bmMiLCAiZGF0ZSIsICJkdXIiLCAibmFtZSIsICJfc2VwIiwgInZhbHVlIiwgInZhbHMiLCAicmVzIiwgImVudHJ5IiwgIm9iaiIsICJwb3N0Zml4ZXMiLCAicmVzdWx0IiwgInBvc3QiLCAiZmllbGQiLCAiaWRlbnQiLCAiX2lnbm9yZSIsICJleHByIiwgIl8yIiwgIl8zIiwgIl80IiwgIl8xIiwgImV4cHJzIiwgImNyZWF0ZUJpbmFyeVBhcnNlciIsICJRVUVSWSIsICJpZCIsICJmdW5jIiwgInBhdGgiLCAiY2hpbGRyZW4iLCAicGFyZW50cyIsICJsaW5rIiwgInNvdXJjZSIsICJsZWZ0IiwgIl9vcCIsICJyaWdodCIsICJjcmVhdGVCaW5hcnlQYXJzZXIiLCAiY2hpbGQiLCAic2VwIiwgImNvbWJpbmUiLCAiZmlyc3QiLCAicmVzdCIsICJub2RlIiwgImluZGV4IiwgImNyZWF0ZUZ1bmN0aW9uIiwgImZ1bmMiLCAiYXJncyIsICJyZWFsRnVuYyIsICJmIiwgImEiLCAiY2hhaW5PcHQiLCAiYmFzZSIsICJmdW5jcyIsICJfc3VjY2VzcyIsICJfZmFpbHVyZSIsICJpbnB1dCIsICJyZXN1bHQiLCAibmV4dCIsICJQIiwgIm1hcE9iamVjdFZhbHVlcyIsICJvYmplY3QiLCAiZnVuYyIsICJyZXN1bHQiLCAia2V5IiwgInZhbHVlIiwgIkpzb25Db252ZXJzaW9uIiwgImlucHV0IiwgImpzb24iLCAibGl0ZXJhbCIsICJ3cmFwcGVkIiwgIkxpdGVyYWxzIiwgIm1hcE9iamVjdFZhbHVlcyIsICJ2YWx1ZSIsICJub3JtYWxpemVyIiwgInYiLCAidHlwZSIsICJEYXRlVGltZSIsICJEdXJhdGlvbiIsICJMaW5rIiwgImpzb25JbmxpbmVGaWVsZCIsICJmaWVsZCIsICJKc29uQ29udmVyc2lvbiIsICJhc0lubGluZUZpZWxkIiwgImxvY2FsIiwgImxpbmVubyIsICJmIiwgInBhcnNlSW5saW5lVmFsdWUiLCAiSU5MSU5FX0ZJRUxEX1dSQVBQRVJTIiwgImZpbmRDbG9zaW5nIiwgImxpbmUiLCAic3RhcnQiLCAib3BlbiIsICJjbG9zZSIsICJuZXN0aW5nIiwgImVzY2FwZWQiLCAiaW5kZXgiLCAiY2hhciIsICJmaW5kU2VwYXJhdG9yIiwgInNlcCIsICJmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZCIsICJrZXkiLCAidmFsdWUiLCAiaW5saW5lIiwgIlBSSU1JVElWRVMiLCAiZXh0cmFjdElubGluZUZpZWxkcyIsICJpbmNsdWRlVGFza0ZpZWxkcyIsICJmaWVsZHMiLCAid3JhcHBlciIsICJmb3VuZEluZGV4IiwgInBhcnNlZEZpZWxkIiwgImV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyIsICJhIiwgImIiLCAiZmlsdGVyZWRGaWVsZHMiLCAiaSIsICJGVUxMX0xJTkVfS0VZX1BBUlQiLCAiZW1vamlfcmVnZXhfZGVmYXVsdCIsICJwYXJ0cyIsICJGVUxMX0xJTkVfS0VZX1BBUlNFUiIsICJleHRyYWN0RnVsbExpbmVGaWVsZCIsICJ0ZXh0IiwgInJlYWxLZXkiLCAiQ1JFQVRFRF9EQVRFX1JFR0VYIiwgIkRVRV9EQVRFX1JFR0VYIiwgIkRPTkVfREFURV9SRUdFWCIsICJTQ0hFRFVMRURfREFURV9SRUdFWCIsICJTVEFSVF9EQVRFX1JFR0VYIiwgIkVNT0pJX1JFR0VYRVMiLCAicmVzdWx0cyIsICJyZWdleCIsICJtYXRjaCIsICJZYW1sQ29udmVyc2lvbiIsICJ5YW1sIiwgInZhbHVlIiwgIndyYXBwZWQiLCAiTGl0ZXJhbHMiLCAibGl0ZXJhbCIsICJtYXBPYmplY3RWYWx1ZXMiLCAicmVzdWx0IiwgImNoaWxkIiwgIkRhdGVUaW1lIiwgIm9iamVjdCIsICJrZXkiLCAiZGF0ZVBhcnNlIiwgIlBSSU1JVElWRVMiLCAiZHVyYXRpb25QYXJzZSIsICJsaW5rUGFyc2UiLCAiWUFNTF9EQVRBX1JFR0VYIiwgIkNPREVCTE9DS19GRU5DRV9SRUdFWCIsICJMSVNUX0lURU1fUkVHRVgiLCAibWFya2Rvd25JbXBvcnQiLCAicGF0aCIsICJtYXJrZG93biIsICJtZXRhZGF0YSIsICJzdGF0cyIsICJsaW5lcyIsICJwYWdlTWV0YWRhdGEiLCAiZnJvbnRtYXR0ZXIiLCAic2VjdGlvbnMiLCAibWFya2Rvd25Tb3VyY2VJbXBvcnQiLCAiUGFnZURhdGEiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiX2UiLCAiX2YiLCAiX2ciLCAiX2giLCAiX2kiLCAiX2oiLCAiX2siLCAiX2wiLCAiX20iLCAiX24iLCAiX28iLCAiX3AiLCAicGFyc2VGcm9udG1hdHRlckJsb2NrIiwgIm1hcmtkb3duTWV0YWRhdGEiLCAiTWV0YWRhdGEiLCAic2VjdGlvbkFycmF5IiwgIm1ldGFoZWFkaW5ncyIsICJhIiwgImIiLCAiQlRyZWUiLCAiaW5kZXgiLCAiZW50cnkiLCAic3RhcnQiLCAiZW5kIiwgInNlY3Rpb24iLCAiU2VjdGlvbkRhdGEiLCAiZW1wdHlsaW5lcyIsICJnZXRGaWxlVGl0bGUiLCAiZmlyc3QiLCAiYmxvY2tzIiwgImJsb2NrT3JkaW5hbCIsICJibG9jayIsICJzdGFydExpbmUiLCAiTGlzdEJsb2NrRGF0YSIsICJ5YW1sIiwgInNwbGl0IiwgInBhcnNlIiwgIkRhdGFibG9ja0RhdGEiLCAibWF0Y2giLCAiQ29kZWJsb2NrRGF0YSIsICJsYW5ndWFnZXMiLCAiQmFzZUJsb2NrRGF0YSIsICJsb29rdXAiLCAiY29udGVudFJlZ2V4IiwgIm1hcmtlclJlZ2V4IiwgImxpc3RJdGVtcyIsICJsaXN0IiwgInN5bWJvbCIsICJ0ZXh0IiwgIml0ZW0iLCAiTGlzdEl0ZW1EYXRhIiwgImxpc3RCbG9jayIsICJ0YWdkZWYiLCAidGFnIiwgImxpbmUiLCAicmF3dGFnIiwgImV4dHJhY3RUYWdzIiwgImxpbmtkZWYiLCAibGluayIsICJMaW5rIiwgImZpZWxkIiwgIml0ZXJhdGVJbmxpbmVGaWVsZHMiLCAiY29udGVudCIsICJsaW5lbm8iLCAiaW5saW5lRmllbGRzIiwgImV4dHJhY3RJbmxpbmVGaWVsZHMiLCAiaWZpZWxkIiwgImFzSW5saW5lRmllbGQiLCAiZnVsbExpbmUiLCAiZXh0cmFjdEZ1bGxMaW5lRmllbGQiLCAicmVzdWx0IiwgImtleSIsICJ2YWx1ZSIsICJKc29uQ29udmVyc2lvbiIsICJZYW1sQ29udmVyc2lvbiIsICJ0cmVlIiwgInRhcmdldCIsICJrIiwgInNwbGl0RnJvbnRtYXR0ZXJUYWdPckFsaWFzIiwgInAiLCAiYyIsICJzdHIiLCAiZGF0YSIsICJvbiIsICJzIiwgInYiLCAibG93ZXIiLCAibWFwT2JqZWN0VmFsdWVzIiwgImpzb25JbmxpbmVGaWVsZCIsICJsZW5ndGgiLCAiZ2V0RXh0ZW5zaW9uIiwgIngiLCAidGl0bGUiLCAibGV2ZWwiLCAib3JkaW5hbCIsICJibG9ja0lkIiwgInN0eWxlIiwgImNvbnRlbnRTdGFydCIsICJjb250ZW50RW5kIiwgInR5cGUiLCAicGFyZW50TGluZSIsICJzdGF0dXMiLCAiZWxlbWVudCIsICJjYW52YXNJbXBvcnQiLCAicGF0aCIsICJzb3VyY2UiLCAiaW5kZXgiLCAic3RhdHMiLCAiX2EiLCAiY2FudmFzIiwgIkNhbnZhc0RhdGEiLCAicGFyc2VkIiwgImMiLCAiZnJvbnRtYXR0ZXIiLCAibWV0YWRhdGEiLCAibGluZXMiLCAic2VjdGlvbnMiLCAibWFya2Rvd25Tb3VyY2VJbXBvcnQiLCAiY2FyZCIsICJDYW52YXNDYXJkRGF0YSIsICJpIiwgInRhZyIsICJsaW5rIiwgImZpZWxkIiwgIml0ZXJhdGVJbmxpbmVGaWVsZHMiLCAiQWJzdHJhY3RDYW52YXNDYXJkRGF0YSIsICJpZCIsICJub2RlSnNvbiIsICJNZXRhZGF0YSIsICJMaW5rIiwgInNlY3Rpb24iLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJ4IiwgImQiLCAiZXZlbnQiLCAibWVzc2FnZSIsICJtYXJrZG93biIsICJtYXJrZG93bkltcG9ydCIsICJjYW52YXMiLCAiY2FudmFzSW1wb3J0IiwgImVycm9yIl0KfQo=\n');
}
// src/index/web-worker/importer.ts
@@ -50452,8 +52880,7 @@ var FileImporter = class extends import_obsidian6.Component {
*/
import(file) {
let existing = this.outstanding.get(file.path);
- if (existing)
- return existing;
+ if (existing) return existing;
let promise = deferred();
this.outstanding.set(file.path, promise);
this.queue.enqueue([file, promise]);
@@ -50468,11 +52895,9 @@ var FileImporter = class extends import_obsidian6.Component {
}
/** Poll from the queue and execute if there is an available worker. */
async schedule() {
- if (this.queue.size() == 0 || this.shutdown)
- return;
+ if (this.queue.size() == 0 || this.shutdown) return;
const worker = this.availableWorker();
- if (!worker)
- return;
+ if (!worker) return;
const [file, promise] = this.queue.dequeue();
worker.active = [file, promise, Date.now()];
try {
@@ -50513,10 +52938,8 @@ var FileImporter = class extends import_obsidian6.Component {
return;
}
const [file, promise, start] = worker.active;
- if ("$error" in data)
- promise.reject(data["$error"]);
- else
- promise.resolve(data);
+ if ("$error" in data) promise.reject(data["$error"]);
+ else promise.resolve(data);
this.outstanding.delete(file.path);
if (this.workers.size > this.throttle().workers) {
this.workers.delete(worker.id);
@@ -50574,8 +52997,7 @@ var FileImporter = class extends import_obsidian6.Component {
};
function terminate(worker) {
worker.worker.terminate();
- if (worker.active)
- worker.active[1].reject("Terminated");
+ if (worker.active) worker.active[1].reject("Terminated");
worker.active = void 0;
}
@@ -50583,7 +53005,7 @@ function terminate(worker) {
var import_obsidian8 = require("obsidian");
// src/index/types/files.ts
-var _GenericFile = class {
+var _GenericFile = class _GenericFile {
constructor(path, ctime, mtime, size2) {
this.$types = _GenericFile.TYPES;
this.$typename = "File";
@@ -50619,9 +53041,9 @@ var _GenericFile = class {
return Link.file(this.$path);
}
};
+_GenericFile.TYPES = [FILE_TYPE, FIELDBEARING_TYPE, LINKABLE_TYPE];
+_GenericFile.FIELD_DEF = Extractors.intrinsics();
var GenericFile = _GenericFile;
-GenericFile.TYPES = [FILE_TYPE, FIELDBEARING_TYPE, LINKABLE_TYPE];
-GenericFile.FIELD_DEF = Extractors.intrinsics();
// src/index/embed-queue.ts
var import_queue2 = __toESM(require_queue2());
@@ -50642,8 +53064,7 @@ var EmbedQueue = class extends import_obsidian7.Component {
}
/** Read a file asynchronously, controlling concurrency to prevent too many files being loaded simultaneously. */
async read(file) {
- if (this.shutdown)
- return Promise.reject("Embed queue is shutdown.");
+ if (this.shutdown) return Promise.reject("Embed queue is shutdown.");
const promise = deferred();
if (!this.promises.has(file.path)) {
this.queue.push(file);
@@ -50688,7 +53109,7 @@ var EmbedQueue = class extends import_obsidian7.Component {
};
// src/index/types/canvas.ts
-var _Canvas = class {
+var _Canvas = class _Canvas {
constructor(init) {
this.$types = _Canvas.TYPES;
this.$typename = "Canvas";
@@ -50750,12 +53171,12 @@ var _Canvas = class {
});
}
};
-var Canvas = _Canvas;
-Canvas.TYPES = [FILE_TYPE, "canvas", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
-Canvas.FIELD_DEF = Extractors.merge(
+_Canvas.TYPES = [FILE_TYPE, "canvas", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
+_Canvas.FIELD_DEF = Extractors.merge(
Extractors.inlineFields((f4) => f4.$infields),
Extractors.intrinsics()
);
+var Canvas = _Canvas;
var BaseCanvasCard = class {
constructor(init) {
Object.assign(this, init);
@@ -50775,7 +53196,7 @@ var BaseCanvasCard = class {
};
}
};
-var _CanvasTextCard = class extends BaseCanvasCard {
+var _CanvasTextCard = class _CanvasTextCard extends BaseCanvasCard {
constructor(init) {
super(init);
this.$types = _CanvasTextCard.TYPES;
@@ -50795,7 +53216,7 @@ var _CanvasTextCard = class extends BaseCanvasCard {
$links: this.$links,
$tags: this.$tags,
$type: "text-card",
- $sections: this.$sections.map((a3) => a3.json())
+ $sections: this.$sections.map((a4) => a4.json())
});
}
static from(raw, file, normalizer = NOOP_NORMALIZER) {
@@ -50813,14 +53234,14 @@ var _CanvasTextCard = class extends BaseCanvasCard {
});
}
};
-var CanvasTextCard = _CanvasTextCard;
-CanvasTextCard.TYPES = ["canvas-card", "markdown", "canvas-text-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
-CanvasTextCard.FIELD_DEF = Extractors.merge(
+_CanvasTextCard.TYPES = ["canvas-card", "markdown", "canvas-text-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
+_CanvasTextCard.FIELD_DEF = Extractors.merge(
Extractors.intrinsics(),
Extractors.inlineFields((f4) => f4.$infields),
Extractors.frontmatter((f4) => f4.$frontmatter)
);
-var _CanvasFileCard = class extends BaseCanvasCard {
+var CanvasTextCard = _CanvasTextCard;
+var _CanvasFileCard = class _CanvasFileCard extends BaseCanvasCard {
constructor(init) {
super(init);
this.$types = CanvasTextCard.TYPES;
@@ -50843,9 +53264,9 @@ var _CanvasFileCard = class extends BaseCanvasCard {
});
}
};
+_CanvasFileCard.TYPES = ["canvas-card", "markdown", "canvas-file-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
var CanvasFileCard = _CanvasFileCard;
-CanvasFileCard.TYPES = ["canvas-card", "markdown", "canvas-file-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
-var _CanvasWebCard = class extends BaseCanvasCard {
+var _CanvasWebCard = class _CanvasWebCard extends BaseCanvasCard {
constructor(init) {
super(init);
this.$types = CanvasTextCard.TYPES;
@@ -50868,8 +53289,8 @@ var _CanvasWebCard = class extends BaseCanvasCard {
});
}
};
+_CanvasWebCard.TYPES = ["canvas-card", "markdown", "canvas-web-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
var CanvasWebCard = _CanvasWebCard;
-CanvasWebCard.TYPES = ["canvas-card", "markdown", "canvas-web-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE];
// src/index/datacore.ts
var Datacore = class extends import_obsidian8.Component {
@@ -50904,19 +53325,15 @@ var Datacore = class extends import_obsidian8.Component {
this.registerEvent(this.vault.on("rename", this.rename, this));
this.registerEvent(
this.vault.on("create", (file) => {
- if (!(file instanceof import_obsidian8.TFile))
- return;
- if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase()))
- return;
+ if (!(file instanceof import_obsidian8.TFile)) return;
+ if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) return;
this.reload(file);
})
);
this.registerEvent(
this.vault.on("modify", (file) => {
- if (!(file instanceof import_obsidian8.TFile))
- return;
- if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase()))
- return;
+ if (!(file instanceof import_obsidian8.TFile)) return;
+ if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) return;
this.reload(file);
})
);
@@ -50980,10 +53397,8 @@ var Datacore = class extends import_obsidian8.Component {
} else if (result.type === "markdown") {
const parsed = MarkdownPage.from(result.result, (link) => {
const rpath = this.metadataCache.getFirstLinkpathDest(link.path, result.result.$path);
- if (rpath)
- return link.withPath(rpath.path);
- else
- return link;
+ if (rpath) return link.withPath(rpath.path);
+ else return link;
});
this.storeMarkdown(parsed);
this.persister.storeFile(parsed.$path, parsed.json());
@@ -50992,10 +53407,8 @@ var Datacore = class extends import_obsidian8.Component {
} else if (result.type === "canvas") {
const parsed = Canvas.from(result.result, (link) => {
const rpath = this.metadataCache.getFirstLinkpathDest(link.path, result.result.$path);
- if (rpath)
- return link.withPath(rpath.path);
- else
- return link;
+ if (rpath) return link.withPath(rpath.path);
+ else return link;
});
this.storeCanvas(parsed);
this.persister.storeFile(parsed.$path, parsed.json());
@@ -51049,7 +53462,7 @@ var Datacore = class extends import_obsidian8.Component {
this.events.trigger(evt, ...args);
}
};
-var _DatacoreInitializer = class extends import_obsidian8.Component {
+var _DatacoreInitializer = class _DatacoreInitializer extends import_obsidian8.Component {
constructor(core) {
super();
this.core = core;
@@ -51082,12 +53495,12 @@ var _DatacoreInitializer = class extends import_obsidian8.Component {
if (!this.active || this.current.length >= _DatacoreInitializer.BATCH_SIZE) {
return;
}
- const next3 = this.queue.pop();
- if (next3) {
- this.current.push(next3);
- this.init(next3).then((result) => this.handleResult(next3, result)).catch((result) => this.handleResult(next3, result));
+ const next2 = this.queue.pop();
+ if (next2) {
+ this.current.push(next2);
+ this.init(next2).then((result) => this.handleResult(next2, result)).catch((result) => this.handleResult(next2, result));
this.runNext();
- } else if (!next3 && this.current.length == 0) {
+ } else if (!next2 && this.current.length == 0) {
this.active = false;
this.done.resolve({
durationMs: Date.now() - this.start,
@@ -51102,12 +53515,9 @@ var _DatacoreInitializer = class extends import_obsidian8.Component {
handleResult(file, result) {
this.current.remove(file);
this.initialized++;
- if (result.status === "skipped")
- this.skipped++;
- else if (result.status === "imported")
- this.imported++;
- else if (result.status === "cached")
- this.cached++;
+ if (result.status === "skipped") this.skipped++;
+ else if (result.status === "imported") this.imported++;
+ else if (result.status === "cached") this.cached++;
this.runNext();
}
/** Initialize a specific file. */
@@ -51129,9 +53539,9 @@ var _DatacoreInitializer = class extends import_obsidian8.Component {
}
}
};
-var DatacoreInitializer = _DatacoreInitializer;
/** Number of concurrent operations the initializer will perform. */
-DatacoreInitializer.BATCH_SIZE = 8;
+_DatacoreInitializer.BATCH_SIZE = 8;
+var DatacoreInitializer = _DatacoreInitializer;
// src/main.ts
var import_obsidian10 = require("obsidian");
@@ -51160,15 +53570,15 @@ var import_obsidian9 = require("obsidian");
var VIEW_TYPE_DATACOREJS = "datacorejs-view";
var CUSTOM_VIEW_CONTEXT = G(void 0);
function DatacoreViewSettings() {
- const view = P4(CUSTOM_VIEW_CONTEXT);
- const setViewState = q2(
- () => (0, import_obsidian9.debounce)((state2) => view.setState(state2, { history: false }), 500),
+ const view = x2(CUSTOM_VIEW_CONTEXT);
+ const setViewState = T2(
+ () => (0, import_obsidian9.debounce)((state) => view.setState(state, { history: false }), 500),
[view]
);
- const [localState, setLocalState] = p2(view.getState());
- const setState = x2(
- (state2) => {
- const finalState = { ...localState, ...state2 };
+ const [localState, setLocalState] = h2(view.getState());
+ const setState = q2(
+ (state) => {
+ const finalState = { ...localState, ...state };
setLocalState(finalState);
setViewState(finalState);
},
@@ -51229,9 +53639,9 @@ function CurrentFileSelector({
defaultValue,
onChange: onChange3
}) {
- const core = P4(DATACORE_CONTEXT);
+ const core = x2(DATACORE_CONTEXT);
const revision = useIndexUpdates(core, { debounce: 2e3 });
- const options2 = q2(() => {
+ const options2 = T2(() => {
return core.vault.getMarkdownFiles().map((f4) => ({ label: f4.path, value: f4.path }));
}, [revision]);
const defaultOption = defaultValue ? { label: "No file", value: void 0 } : { label: defaultValue, value: defaultValue };
@@ -51297,16 +53707,13 @@ var DatacoreQueryView = class extends import_obsidian9.ItemView {
this.rerender();
}
onunload() {
- if (this.activeView)
- this.removeChild(this.activeView);
+ if (this.activeView) this.removeChild(this.activeView);
}
/** Synchronizes the screen state to properly reflect the current internal state. */
rerender() {
this.leaf.tabHeaderInnerTitleEl.textContent = this.titleEl.textContent = this.getDisplayText();
- if (this.activeViewType == this.internalState.view)
- return;
- if (this.activeView)
- this.removeChild(this.activeView);
+ if (this.activeViewType == this.internalState.view) return;
+ if (this.activeView) this.removeChild(this.activeView);
if (this.internalState.view === "settings") {
this.activeViewType = "settings";
this.activeView = new ReactRenderer(
@@ -51342,8 +53749,8 @@ var DatacoreQueryView = class extends import_obsidian9.ItemView {
return this.internalState;
}
/** Update the state of this view with new metadata. Generally controlled by the settings pane. */
- async setState(state2, _result) {
- this.internalState = state2;
+ async setState(state, _result) {
+ this.internalState = state;
this.rerender();
}
/** Swap the active view. */
@@ -51461,7 +53868,7 @@ var DatacorePlugin = class extends import_obsidian10.Plugin {
}
/** Render datacore indexing status using the index. */
mountIndexState(root, core) {
- B(g(IndexStatusBar, { datacore: core }), root);
+ B(_(IndexStatusBar, { datacore: core }), root);
this.register(() => B(null, root));
}
};
@@ -51489,12 +53896,10 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab {
"500": "500"
};
const current = "" + this.plugin.settings.defaultPageSize;
- if (!(current in OPTIONS))
- OPTIONS[current] = current;
+ if (!(current in OPTIONS)) OPTIONS[current] = current;
dropdown.addOptions(OPTIONS).setValue(current).onChange(async (value) => {
const parsed = parseFloat(value);
- if (isNaN(parsed))
- return;
+ if (isNaN(parsed)) return;
await this.plugin.updateSettings({ defaultPageSize: parsed | 0 });
});
});
@@ -51551,16 +53956,14 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab {
new import_obsidian10.Setting(this.containerEl).setName("Importer Threads").setDesc("The number of importer threads to use for parsing metadata.").addText((text2) => {
text2.setValue("" + this.plugin.settings.importerNumThreads).onChange(async (value) => {
const parsed = parseInt(value);
- if (isNaN(parsed))
- return;
+ if (isNaN(parsed)) return;
await this.plugin.updateSettings({ importerNumThreads: parsed });
});
});
new import_obsidian10.Setting(this.containerEl).setName("Importer Utilization").setDesc("How much CPU time each importer thread should use, as a fraction (0.1 - 1.0).").addText((text2) => {
text2.setValue(this.plugin.settings.importerUtilization.toFixed(2)).onChange(async (value) => {
const parsed = parseFloat(value);
- if (isNaN(parsed))
- return;
+ if (isNaN(parsed)) return;
const limited = Math.max(0.1, Math.min(1, parsed));
await this.plugin.updateSettings({ importerUtilization: limited });
});
@@ -51570,8 +53973,7 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab {
).addText((text2) => {
text2.setValue(this.plugin.settings.maxRecursiveRenderDepth.toString()).onChange(async (value) => {
const parsed = parseInt(value);
- if (isNaN(parsed))
- return;
+ if (isNaN(parsed)) return;
await this.plugin.updateSettings({ maxRecursiveRenderDepth: parsed });
});
});
@@ -51600,6 +54002,16 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab {
//! Provides utilities for executing queries against the storage layer.
/*! Bundled license information:
+react-is/cjs/react-is.production.min.js:
+ (** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *)
+
react-is/cjs/react-is.development.js:
(** @license React v16.13.1
* react-is.development.js
@@ -51633,4 +54045,6 @@ localforage/dist/localforage.js:
* @class
*)
*/
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNpbW1vbi9idWlsZC9wYXJzaW1tb24udW1kLm1pbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc2V0LWFycmF5L3NyYy9zZXQtYXJyYXkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc291cmNlbWFwLWNvZGVjLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS9zcmMvcmVzb2x2ZS11cmkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3Jlc29sdmUudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3N0cmlwLWZpbGVuYW1lLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9zb3VyY2VtYXAtc2VnbWVudC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvc29ydC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYmluYXJ5LXNlYXJjaC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYnktc291cmNlLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9hbnktbWFwLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy90cmFjZS1tYXBwaW5nLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy9zcmMvc291cmNlbWFwLXNlZ21lbnQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nL3NyYy9nZW4tbWFwcGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvdHMtaW50ZXJmYWNlLWNoZWNrZXIvZGlzdC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9saW5lcy1hbmQtY29sdW1ucy9idWlsZC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9zcmMvcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvbWFpbi50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2x1eG9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9lbmdsaXNoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2ludmFsaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3pvbmVzL0lBTkFab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvc2V0dGluZ3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvcmVnZXhQYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kdXJhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4L2luZGV4Lm1qcyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9saW5rLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL3BhcnNlci50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9saXRlcmFsLnRzIiwgIi4uLy4uL3NyYy9hcGkvcmVzdWx0LnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpbHRlcnMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vZXhwcmVzc2lvbi50cyIsICIuLi8uLi9zcmMvdWkvbWFya2Rvd24udHN4IiwgIi4uLy4uL3NyYy91dGlscy9tZWRpYS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9vcHRpb25zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NyZWF0ZS1lbGVtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL3Byb3BzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NyZWF0ZS1jb250ZXh0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9yZW5kZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY2xvbmUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NhdGNoLWVycm9yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3Mvc3JjL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9QdXJlQ29tcG9uZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9tZW1vLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9mb3J3YXJkUmVmLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9DaGlsZHJlbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvc3VzcGVuc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLWxpc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9wb3J0YWxzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9yZW5kZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvanN4LXJ1bnRpbWUvc3JjL3V0aWxzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL3NyYy9pbmRleC5qcyIsICIuLi8uLi9zcmMvYXBpL3VpL2VtYmVkLnRzeCIsICIuLi8uLi9zcmMvdWkvamF2YXNjcmlwdC50c3giLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3Rva2VuaXplci9rZXl3b3Jkcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdG9rZW5pemVyL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvc3RhdGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3V0aWwvY2hhcmNvZGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90cmF2ZXJzZXIvYmFzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdHJhdmVyc2VyL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3V0aWwvd2hpdGVzcGFjZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdXRpbC9pZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvcmVhZFdvcmRUcmVlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvcmVhZFdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3Rva2VuaXplci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS91dGlsL2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0SlNYUHJhZ21hSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL0pTWFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL0NKU0ltcG9ydFByb2Nlc3Nvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9jb21wdXRlU291cmNlTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL0hlbHBlck1hbmFnZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9nZXRJZGVudGlmaWVyTmFtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vTmFtZU1hbmFnZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vT3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9PcHRpb25zLWdlbi10eXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdHJhdmVyc2VyL2x2YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvdHlwZXNjcmlwdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvcGx1Z2lucy9qc3gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9leHByZXNzaW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci9wbHVnaW5zL2Zsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9zdGF0ZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0FzeW5jT3BlcmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL1Rva2VuUHJvY2Vzc29yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0Q2xhc3NJbmZvLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZWxpZGVJbXBvcnRFcXVhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9nZXREZWNsYXJhdGlvbkluZm8uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0V4cG9ydEZyb20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL0NKU0ltcG9ydFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9FU01JbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvRmxvd1RyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9KZXN0SG9pc3RUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9PcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9SZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0lkZW50aWZpZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL1R5cGVTY3JpcHRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvUm9vdFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZm9ybWF0VG9rZW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0VFNJbXBvcnRlZE5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uL3NyYy91dGlscy9qYXZhc2NyaXB0LnRzIiwgIi4uLy4uL3NyYy91aS9ob29rcy50cyIsICIuLi8uLi9zcmMvdWkvbG9hZGluZy1ib3VuZGFyeS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLnRzeCIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvaW5kZXhhYmxlLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kYXRhLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9qc29uL2NvbW1vbi50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvbWFya2Rvd24udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMuZG9tLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9pbmRleC1hMzAxZjUyNi5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9TZWxlY3QtNDlhNjI4MzAuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9yZWFjdC1zZWxlY3QuZXNtLmpzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvYm9vbGVhbi1maWVsZC50c3giLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9wcm9ncmVzcy1maWVsZC50c3giLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9yYXRpbmcudHN4IiwgIi4uLy4uL3NyYy91dGlscy90YXNrLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy95YW1sLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9lZGl0L2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9maWVsZHMudHMiLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9lZGl0YWJsZS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9saXN0LnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3Rhc2sudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvcGFnaW5nLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lL2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvY2FsbG91dC50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYXJkcy50c3giLCAiLi4vLi4vc3JjL2FwaS9kYXRhLWFycmF5LnRzIiwgIi4uLy4uL3NyYy9hcGkvY29lcmNlLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kZWZlcnJlZC50cyIsICIuLi8uLi9zcmMvYXBpL3NjcmlwdC1jYWNoZS50cyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2VkaXRhYmxlLWZpZWxkcy50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90cmVlLXRhYmxlLnRzeCIsICIuLi8uLi9zcmMvYXBpL2xvY2FsLWFwaS50c3giLCAiLi4vLi4vc3JjL2FwaS9hcGkudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvZm9sZGVyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9zdG9yYWdlL2ludmVydGVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mbGF0cXVldWUvaW5kZXguanMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvZmllbGRzLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2JpbmFyeW9wLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2Z1bmN0aW9ucy50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9ldmFsdWF0b3IudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvcXVlcnktZXhlY3V0b3IudHMiLCAiLi4vLi4vc3JjL2luZGV4L2RhdGFzdG9yZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvcGVyc2lzdGVyLnRzIiwgImlubGluZS13b3JrZXI6X19pbmxpbmUtd29ya2VyIiwgIi4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlci50cyIsICIuLi8uLi9zcmMvaW5kZXgvd2ViLXdvcmtlci9pbXBvcnRlci50cyIsICIuLi8uLi9zcmMvaW5kZXgvZGF0YWNvcmUudHMiLCAiLi4vLi4vc3JjL2luZGV4L3R5cGVzL2ZpbGVzLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9lbWJlZC1xdWV1ZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvY2FudmFzLnRzIiwgIi4uLy4uL3NyYy9zZXR0aW5ncy50cyIsICIuLi8uLi9zcmMvdWkvdmlldy1wYWdlLnRzeCIsICIuLi8uLi9zcmMvdWkvaW5kZXgtc3RhdHVzLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIWZ1bmN0aW9uKG4sdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QYXJzaW1tb249dCgpOm4uUGFyc2ltbW9uPXQoKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Z1bmN0aW9uIHIoZSl7aWYodFtlXSlyZXR1cm4gdFtlXS5leHBvcnRzO3ZhciB1PXRbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiBuW2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLHIpLHUubD0hMCx1LmV4cG9ydHN9cmV0dXJuIHIubT1uLHIuYz10LHIuZD1mdW5jdGlvbihuLHQsZSl7ci5vKG4sdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LHIucj1mdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciB0PW4mJm4uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG59O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1ufXZhciB1PWUucHJvdG90eXBlO2Z1bmN0aW9uIG8obix0KXtmb3IodmFyIHI9MDtyPG47cisrKXQocil9ZnVuY3Rpb24gaShuLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7byh0Lmxlbmd0aCxmdW5jdGlvbihyKXtuKHRbcl0scix0KX0pfShmdW5jdGlvbihyLGUsdSl7dD1uKHQscixlLHUpfSxyKSx0fWZ1bmN0aW9uIGEobix0KXtyZXR1cm4gaShmdW5jdGlvbih0LHIsZSx1KXtyZXR1cm4gdC5jb25jYXQoW24ocixlLHUpXSl9LFtdLHQpfWZ1bmN0aW9uIGYobix0KXt2YXIgcj17djowLGJ1Zjp0fTtyZXR1cm4gbyhuLGZ1bmN0aW9uKCl7dmFyIG47cj17djpyLnY8PDF8KG49ci5idWYsblswXT4+NyksYnVmOmZ1bmN0aW9uKG4pe3ZhciB0PWkoZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG4uY29uY2F0KHI9PT1lLmxlbmd0aC0xP0J1ZmZlci5mcm9tKFt0LDBdKS5yZWFkVUludDE2QkUoMCk6ZS5yZWFkVUludDE2QkUocikpfSxbXSxuKTtyZXR1cm4gQnVmZmVyLmZyb20oYShmdW5jdGlvbihuKXtyZXR1cm4objw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfX0pLHJ9ZnVuY3Rpb24gYygpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyIGdsb2JhbCBkb2VzIG5vdCBleGlzdDsgcGxlYXNlIHVzZSB3ZWJwYWNrIGlmIHlvdSBuZWVkIHRvIHBhcnNlIEJ1ZmZlcnMgaW4gdGhlIGJyb3dzZXIuXCIpfWZ1bmN0aW9uIGwobil7cygpO3ZhciB0PWkoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwLG4pO2lmKHQlOCE9MCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYml0cyBbXCIrbi5qb2luKFwiLCBcIikrXCJdIGFkZCB1cCB0byBcIit0K1wiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFwiKTt2YXIgcix1PXQvOCxvPShyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjQ4fSxpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG58fChyKHQpP3Q6bil9LG51bGwsbikpO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8rXCIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LlwiKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKStcIiBieXRlc1wiKTpiKGUsaShmdW5jdGlvbihuLHQpe3ZhciByPWYodCxuLmJ1Zik7cmV0dXJue2NvbGw6bi5jb2xsLmNvbmNhdChyLnYpLGJ1ZjpyLmJ1Zn19LHtjb2xsOltdLGJ1Zjp0LnNsaWNlKHIsZSl9LG4pLmNvbGwpfSl9ZnVuY3Rpb24gaChuLHQpe3JldHVybiBuZXcgZShmdW5jdGlvbihyLGUpe3JldHVybiBzKCksZSt0PnIubGVuZ3RoP3goZSx0K1wiIGJ5dGVzIGZvciBcIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBwKG4sdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mKHI9dCl8fE1hdGguZmxvb3IocikhPT1yfHx0PDB8fHQ+Nil0aHJvdyBuZXcgRXJyb3IobitcIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uXCIpO3ZhciByfWZ1bmN0aW9uIGQobil7cmV0dXJuIHAoXCJ1aW50QkVcIixuKSxoKFwidWludEJFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIHAoXCJ1aW50TEVcIixuKSxoKFwidWludExFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIHAoXCJpbnRCRVwiLG4pLGgoXCJpbnRCRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIHAoXCJpbnRMRVwiLG4pLGgoXCJpbnRMRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09e30udG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiB3KG4pe3JldHVybiBjKCkmJkJ1ZmZlci5pc0J1ZmZlcihuKX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJue3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldDtyZXR1cm4gZS5fc3VwcG9ydHNTZXQ9bixufSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIHI9bmV3IFNldChuKSx1PTA7dTx0Lmxlbmd0aDt1Kyspci5hZGQodFt1XSk7dmFyIG89QXJyYXkuZnJvbShyKTtyZXR1cm4gby5zb3J0KCksb31mb3IodmFyIGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXV09ITA7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspaVt0W2ZdXT0hMDt2YXIgYz1bXTtmb3IodmFyIHMgaW4gaSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmYy5wdXNoKHMpO3JldHVybiBjLnNvcnQoKSxjfShuLmV4cGVjdGVkLHQuZXhwZWN0ZWQpOnQuZXhwZWN0ZWQ7cmV0dXJue3N0YXR1czpuLnN0YXR1cyxpbmRleDpuLmluZGV4LHZhbHVlOm4udmFsdWUsZnVydGhlc3Q6dC5mdXJ0aGVzdCxleHBlY3RlZDpyfX12YXIgaj17fTtmdW5jdGlvbiBTKG4sdCl7aWYodyhuKSlyZXR1cm57b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfShcIlxcblwiPT09bi5jaGFyQXQoaSl8fFwiXFxyXCI9PT1uLmNoYXJBdChpKSYmXCJcXG5cIiE9PW4uY2hhckF0KGkrMSkpJiYodSsrLDA9PT1vJiYobz1pKzEpKSxpLS19dmFyIGE9ZSt1LGY9dC1vO3JldHVybiByW3RdPXtsaW5lOmEsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmErMSxjb2x1bW46ZisxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcihcIm5vdCBhIHBhcnNlcjogXCIrbil9ZnVuY3Rpb24gTChuLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZihcIm51bWJlclwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBudW1iZXI6IFwiK24pfWZ1bmN0aW9uIGsobil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBmdW5jdGlvbjogXCIrbil9ZnVuY3Rpb24gUChuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmc6IFwiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PVwiICBcIjtmdW5jdGlvbiBSKG4sdCl7cmV0dXJuIG5ldyBBcnJheSh0KzEpLmpvaW4obil9ZnVuY3Rpb24gVShuLHQscil7dmFyIGU9dC1uLmxlbmd0aDtyZXR1cm4gZTw9MD9uOlIocixlKStufWZ1bmN0aW9uIFcobix0LHIsZSl7cmV0dXJue2Zyb206bi10PjA/bi10OjAsdG86bityPmU/ZTpuK3J9fWZ1bmN0aW9uIEQobix0KXt2YXIgcixlLHUsbyxmLGM9dC5pbmRleCxzPWMub2Zmc2V0LGw9MTtpZihzPT09bi5sZW5ndGgpcmV0dXJuXCJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXRcIjtpZih3KG4pKXt2YXIgaD1zLXMlSSxwPXMtaCxkPVcoaCxGLE0rSSxuLmxlbmd0aCksdj1hKGZ1bmN0aW9uKG4pe3JldHVybiBhKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4udG9TdHJpbmcoMTYpLDIsXCIwXCIpfSxuKX0sZnVuY3Rpb24obix0KXt2YXIgcj1uLmxlbmd0aCxlPVtdLHU9MDtpZihyPD10KXJldHVybltuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1oL0kscj0zKnAscD49NCYmKHIrPTEpLGw9Mix1PWEoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbihcIiBcIik6bi5zbGljZSgwLDQpLmpvaW4oXCIgXCIpK1wiICBcIituLnNsaWNlKDQpLmpvaW4oXCIgXCIpfSx2KSwoZj0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGY9Mil9ZWxzZXt2YXIgZz1uLnNwbGl0KC9cXHJcXG58W1xcblxcclxcdTIwMjhcXHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxmPW8udG8udG9TdHJpbmcoKS5sZW5ndGh9dmFyIG09ZS1vLmZyb207cmV0dXJuIHcobikmJihmPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoZj0yKSxpKGZ1bmN0aW9uKHQsZSx1KXt2YXIgaSxhPXU9PT1tLGM9YT9cIj4gXCI6ejtyZXR1cm4gaT13KG4pP1UoKDgqKG8uZnJvbSt1KSkudG9TdHJpbmcoMTYpLGYsXCIwXCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksZixcIiBcIiksW10uY29uY2F0KHQsW2MraStcIiB8IFwiK2VdLGE/W3orUihcIiBcIixmKStcIiB8IFwiK1UoXCJcIixyLFwiIFwiKStSKFwiXlwiLGwpXTpbXSl9LFtdLHUpLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gTihuLHQpe3JldHVybltcIlxcblwiLFwiLS0gUEFSU0lORyBGQUlMRUQgXCIrUihcIi1cIiw1MCksXCJcXG5cXG5cIixEKG4sdCksXCJcXG5cXG5cIiwocj10LmV4cGVjdGVkLDE9PT1yLmxlbmd0aD9cIkV4cGVjdGVkOlxcblxcblwiK3JbMF06XCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIrci5qb2luKFwiLCBcIikpLFwiXFxuXCJdLmpvaW4oXCJcIik7dmFyIHJ9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD9cImdcIjpcIlwiLG4uaWdub3JlQ2FzZT9cImlcIjpcIlwiLG4ubXVsdGlsaW5lP1wibVwiOlwiXCIsbi51bmljb2RlP1widVwiOlwiXCIsbi5zdGlja3k/XCJ5XCI6XCJcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoLHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7Zm9yKHZhciB1LG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSs9MSl7aWYoISh1PUIobltpXS5fKHIsZSksdSkpLnN0YXR1cylyZXR1cm4gdTtvW2ldPXUudmFsdWUsZT11LmluZGV4fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcIik7dmFyIHQ9bi5wb3AoKTtyZXR1cm4gayh0KSxDLmFwcGx5KG51bGwsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KG51bGwsbil9KX1mdW5jdGlvbiBUKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIFkoXCJ6ZXJvIGFsdGVybmF0ZXNcIik7Zm9yKHZhciByPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSx1PTA7dTxuLmxlbmd0aDt1Kz0xKWlmKChlPUIoblt1XS5fKHQsciksZSkpLnN0YXR1cylyZXR1cm4gZTtyZXR1cm4gZX0pfWZ1bmN0aW9uIFYobix0KXtyZXR1cm4gSChuLHQpLm9yKFgoW10pKX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIF8obiksXyh0KSxKKG4sdC50aGVuKG4pLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybltuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9XCInXCIrbitcIidcIjtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PWUrbi5sZW5ndGgsbz1yLnNsaWNlKGUsdSk7cmV0dXJuIG89PT1uP2IodSxvKTp4KGUsdCl9KX1mdW5jdGlvbiBRKG4sdCl7IWZ1bmN0aW9uKG4pe2lmKCEobiBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcmVnZXhwOiBcIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKFwiaVwiIT09ZSYmXCJtXCIhPT1lJiZcInVcIiE9PWUmJlwic1wiIT09ZSl0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnIFwiJytlKydcIjogJytuKX19KG4pLGFyZ3VtZW50cy5sZW5ndGg+PTI/Tyh0KTp0PTA7dmFyIHI9ZnVuY3Rpb24obil7cmV0dXJuIFJlZ0V4cChcIl4oPzpcIituLnNvdXJjZStcIilcIixHKG4pKX0obiksdT1cIlwiK247cmV0dXJuIGUoZnVuY3Rpb24obixlKXt2YXIgbz1yLmV4ZWMobi5zbGljZShlKSk7aWYobyl7aWYoMDw9dCYmdDw9by5sZW5ndGgpe3ZhciBpPW9bMF0sYT1vW3RdO3JldHVybiBiKGUraS5sZW5ndGgsYSl9cmV0dXJuIHgoZSxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFwiK28ubGVuZ3RoK1wiKSBpbiBcIit1KX1yZXR1cm4geChlLHUpfSl9ZnVuY3Rpb24gWChuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiBiKHIsbil9KX1mdW5jdGlvbiBZKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHgocixuKX0pfWZ1bmN0aW9uIFoobil7aWYoeShuKSlyZXR1cm4gZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpO3JldHVybiBlLmluZGV4PXIsZS52YWx1ZT1cIlwiLGV9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcihcIm5vdCBhIHN0cmluZywgcmVnZXhwLCBvciBwYXJzZXI6IFwiK24pfWZ1bmN0aW9uICQobil7cmV0dXJuIF8obiksZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpLHU9dC5zbGljZShyLGUuaW5kZXgpO3JldHVybiBlLnN0YXR1cz94KHIsJ25vdCBcIicrdSsnXCInKTpiKHIsbnVsbCl9KX1mdW5jdGlvbiBubihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9TCh0LHIpO3JldHVybiByPHQubGVuZ3RoJiZuKGUpP2IocisxLGUpOngocixcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpfXUucGFyc2U9ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4mJiF3KG4pKXRocm93IG5ldyBFcnJvcihcIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnRcIik7dmFyIHQscj10aGlzLnNraXAoYW4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPVwiUGFyc2ltbW9uRXJyb3JcIixlLnJlc3VsdD10LGV9LHUuYXNzZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24ocil7cmV0dXJuIG4ocik/WChyKTpZKHQpfSl9LHUub3I9ZnVuY3Rpb24obil7cmV0dXJuIFQodGhpcyxuKX0sdS50cmltPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLndyYXAobixuKX0sdS53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEoobix0aGlzLHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdH0pfSx1LnRocnU9ZnVuY3Rpb24obil7cmV0dXJuIG4odGhpcyl9LHUudGhlbj1mdW5jdGlvbihuKXtyZXR1cm4gXyhuKSxDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSl9LHUubWFueT1mdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9W10sdT12b2lkIDA7Oyl7aWYoISh1PUIobi5fKHQsciksdSkpLnN0YXR1cylyZXR1cm4gQihiKHIsZSksdSk7aWYocj09PXUuaW5kZXgpdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXCIpO3I9dS5pbmRleCxlLnB1c2godS52YWx1ZSl9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgYW4gYXJyYXk6IFwiK24pfSh0KSx0Lmxlbmd0aCl7UCh0WzBdKTtmb3IodmFyIHI9dFswXSxlPTE7ZTx0Lmxlbmd0aDtlKyspUCh0W2VdKSxyKz1uK3RbZV07cmV0dXJuIHJ9cmV0dXJuXCJcIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoXCJcIil9LHUudGltZXM9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW4pLE8obiksTyh0KSxlKGZ1bmN0aW9uKGUsdSl7Zm9yKHZhciBvPVtdLGk9dm9pZCAwLGE9dm9pZCAwLGY9MDtmPG47Zis9MSl7aWYoYT1CKGk9ci5fKGUsdSksYSksIWkuc3RhdHVzKXJldHVybiBhO3U9aS5pbmRleCxvLnB1c2goaS52YWx1ZSl9Zm9yKDtmPHQmJihhPUIoaT1yLl8oZSx1KSxhKSxpLnN0YXR1cyk7Zis9MSl1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO3JldHVybiBCKGIodSxvKSxhKX0pfSx1LnJlc3VsdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSx1LmF0TW9zdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50aW1lcygwLG4pfSx1LmF0TGVhc3Q9ZnVuY3Rpb24obil7cmV0dXJuIEoodGhpcy50aW1lcyhuKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBuLmNvbmNhdCh0KX0pfSx1Lm1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihiKHUuaW5kZXgsbih1LnZhbHVlKSksdSk6dX0pfSx1LmNvbnRyYW1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10LnBhcnNlKG4oci5zbGljZShlKSkpO3JldHVybiB1LnN0YXR1cz9iKGUrci5sZW5ndGgsdS52YWx1ZSk6dX0pfSx1LnByb21hcD1mdW5jdGlvbihuLHQpe3JldHVybiBrKG4pLGsodCksdGhpcy5jb250cmFtYXAobikubWFwKHQpfSx1LnNraXA9ZnVuY3Rpb24obil7cmV0dXJuIEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KX0sdS5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbihuLHQscil7cmV0dXJue3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybntuYW1lOm4sdmFsdWU6cixzdGFydDp0LGVuZDplfX0pfSx1LnNlcEJ5PWZ1bmN0aW9uKG4pe3JldHVybiBWKHRoaXMsbil9LHUuc2VwQnkxPWZ1bmN0aW9uKG4pe3JldHVybiBIKHRoaXMsbil9LHUubG9va2FoZWFkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoWihuKSl9LHUubm90Rm9sbG93ZWRCeT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKCQobikpfSx1LmRlc2M9ZnVuY3Rpb24obil7RShuKXx8KG49W25dKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzfHwodS5leHBlY3RlZD1uKSx1fSl9LHUuZmFsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3IoWChuKSl9LHUuYXA9ZnVuY3Rpb24obil7cmV0dXJuIEoobix0aGlzLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9KX0sdS5jaGFpbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0Iobih1LnZhbHVlKS5fKHIsdS5pbmRleCksdSk6dX0pfSx1LmNvbmNhdD11Lm9yLHUuZW1wdHk9cm4sdS5vZj1YLHVbXCJmYW50YXN5LWxhbmQvYXBcIl09dS5hcCx1W1wiZmFudGFzeS1sYW5kL2NoYWluXCJdPXUuY2hhaW4sdVtcImZhbnRhc3ktbGFuZC9jb25jYXRcIl09dS5jb25jYXQsdVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT11LmVtcHR5LHVbXCJmYW50YXN5LWxhbmQvb2ZcIl09dS5vZix1W1wiZmFudGFzeS1sYW5kL21hcFwiXT11Lm1hcDt2YXIgZW49ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKHQsUyhuLHQpKX0pLHVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdD49bi5sZW5ndGg/eCh0LFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpOmIodCsxLEwobix0KSl9KSxvbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIobi5sZW5ndGgsbi5zbGljZSh0KSl9KSxhbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ8bi5sZW5ndGg/eCh0LFwiRU9GXCIpOmIodCxudWxsKX0pLGZuPVEoL1swLTldLykuZGVzYyhcImEgZGlnaXRcIiksY249USgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKSxzbj1RKC9bYS16XS9pKS5kZXNjKFwiYSBsZXR0ZXJcIiksbG49USgvW2Etel0qL2kpLmRlc2MoXCJvcHRpb25hbCBsZXR0ZXJzXCIpLGhuPVEoL1xccyovKS5kZXNjKFwib3B0aW9uYWwgd2hpdGVzcGFjZVwiKSxwbj1RKC9cXHMrLykuZGVzYyhcIndoaXRlc3BhY2VcIiksZG49SyhcIlxcclwiKSx2bj1LKFwiXFxuXCIpLGduPUsoXCJcXHJcXG5cIiksbW49VChnbix2bixkbikuZGVzYyhcIm5ld2xpbmVcIikseW49VChtbixhbik7ZS5hbGw9b24sZS5hbHQ9VCxlLmFueT11bixlLmNyPWRuLGUuY3JlYXRlTGFuZ3VhZ2U9ZnVuY3Rpb24obil7dmFyIHQ9e307Zm9yKHZhciByIGluIG4pKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJmZ1bmN0aW9uKHIpe3Rbcl09dG4oZnVuY3Rpb24oKXtyZXR1cm4gbltyXSh0KX0pfShyKTtyZXR1cm4gdH0sZS5jcmxmPWduLGUuY3VzdG9tPWZ1bmN0aW9uKG4pe3JldHVybiBlKG4oYix4KSl9LGUuZGlnaXQ9Zm4sZS5kaWdpdHM9Y24sZS5lbXB0eT1ybixlLmVuZD15bixlLmVvZj1hbixlLmZhaWw9WSxlLmZvcm1hdEVycm9yPU4sZS5pbmRleD1lbixlLmlzUGFyc2VyPXksZS5sYXp5PXRuLGUubGV0dGVyPXNuLGUubGV0dGVycz1sbixlLmxmPXZuLGUubG9va2FoZWFkPVosZS5tYWtlRmFpbHVyZT14LGUubWFrZVN1Y2Nlc3M9YixlLm5ld2xpbmU9bW4sZS5ub25lT2Y9ZnVuY3Rpb24obil7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk8MH0pLmRlc2MoXCJub25lIG9mICdcIituK1wiJ1wiKX0sZS5ub3RGb2xsb3dlZEJ5PSQsZS5vZj1YLGUub25lT2Y9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4uc3BsaXQoXCJcIikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09XCInXCIrdFtyXStcIidcIjtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT49MH0pLmRlc2ModCl9LGUub3B0V2hpdGVzcGFjZT1obixlLlBhcnNlcj1lLGUucmFuZ2U9ZnVuY3Rpb24obix0KXtyZXR1cm4gbm4oZnVuY3Rpb24ocil7cmV0dXJuIG48PXImJnI8PXR9KS5kZXNjKG4rXCItXCIrdCl9LGUucmVnZXg9USxlLnJlZ2V4cD1RLGUuc2VwQnk9VixlLnNlcEJ5MT1ILGUuc2VxPUMsZS5zZXFNYXA9SixlLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXt9LHI9MCx1PShuPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSksbz11Lmxlbmd0aCxpPTA7aTxvO2krPTEpe3ZhciBhPXVbaV07aWYoIXkoYSkpe2lmKEUoYSkmJjI9PT1hLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFbMF0mJnkoYVsxXSkpe3ZhciBmPWFbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZikpdGhyb3cgbmV3IEVycm9yKFwic2VxT2JqOiBkdXBsaWNhdGUga2V5IFwiK2YpO3RbZl09ITAscisrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuXCIpfX1pZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXCIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgYSxmO2lmKEUodVtpXSk/KGE9dVtpXVswXSxmPXVbaV1bMV0pOihhPW51bGwsZj11W2ldKSwhKHI9QihmLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2EmJihlW2FdPXIudmFsdWUpLHQ9ci5pbmRleH1yZXR1cm4gQihiKHQsZSkscil9KX0sZS5zdHJpbmc9SyxlLnN1Y2NlZWQ9WCxlLnRha2VXaGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPXI7ZTx0Lmxlbmd0aCYmbihMKHQsZSkpOyllKys7cmV0dXJuIGIoZSx0LnNsaWNlKHIsZSkpfSl9LGUudGVzdD1ubixlLndoaXRlc3BhY2U9cG4sZVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT1ybixlW1wiZmFudGFzeS1sYW5kL29mXCJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9YShmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJbXCIrZS5qb2luKFwiLCBcIikrXCJdIHNob3VsZCBiZSBsZW5ndGggMiwgZ290IGxlbmd0aCBcIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIitlWzBdKTtyZXR1cm4gdFtlWzBdXT0hMCxyKyssZX1yZXR1cm4gTyhuKSxbbnVsbCxuXX0sbik7aWYocjwxKXRocm93IG5ldyBFcnJvcihcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1wiK24uam9pbihcIiwgXCIpK1wiXVwiKTt2YXIgdT1hKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSxlKTtyZXR1cm4gbChhKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSxlKSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGwhPT10WzBdJiYoblt0WzBdXT10WzFdKSxufSx7fSxhKGZ1bmN0aW9uKHQscil7cmV0dXJuW3QsbltyXV19LHUpKX0pfSxieXRlOmZ1bmN0aW9uKG4pe2lmKHMoKSxPKG4pLG4+MjU1KXRocm93IG5ldyBFcnJvcihcIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yIChcIituK1wiPTB4XCIrbi50b1N0cmluZygxNikrXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCIpO3ZhciB0PShuPjE1P1wiMHhcIjpcIjB4MFwiKStuLnRvU3RyaW5nKDE2KTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PUwocixlKTtyZXR1cm4gdT09PW4/YihlKzEsdSk6eChlLHQpfSl9LGJ1ZmZlcjpmdW5jdGlvbihuKXtyZXR1cm4gaChcImJ1ZmZlclwiLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gQnVmZmVyLmZyb20obil9KX0sZW5jb2RlZFN0cmluZzpmdW5jdGlvbihuLHQpe3JldHVybiBoKFwic3RyaW5nXCIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6aChcImZsb2F0QkVcIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOmgoXCJmbG9hdExFXCIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdExFKDApfSksZG91YmxlQkU6aChcImRvdWJsZUJFXCIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOmgoXCJkb3VibGVMRVwiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPWV9XSl9KTsiLCAidHlwZSBLZXkgPSBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w7XG5cbi8qKlxuICogU2V0QXJyYXkgYWN0cyBsaWtlIGEgYFNldGAgKGFsbG93aW5nIG9ubHkgb25lIG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgYGtleWApLCBidXQgcHJvdmlkZXMgdGhlXG4gKiBpbmRleCBvZiB0aGUgYGtleWAgaW4gdGhlIGJhY2tpbmcgYXJyYXkuXG4gKlxuICogVGhpcyBpcyBkZXNpZ25lZCB0byBhbGxvdyBzeW5jaHJvbml6aW5nIGEgc2Vjb25kIGFycmF5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBiYWNraW5nIGFycmF5LFxuICogbGlrZSBob3cgaW4gYSBzb3VyY2VtYXAgYHNvdXJjZXNDb250ZW50W2ldYCBpcyB0aGUgc291cmNlIGNvbnRlbnQgYXNzb2NpYXRlZCB3aXRoIGBzb3VyY2VbaV1gLFxuICogYW5kIHRoZXJlIGFyZSBuZXZlciBkdXBsaWNhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgU2V0QXJyYXk8VCBleHRlbmRzIEtleSA9IEtleT4ge1xuICBwcml2YXRlIGRlY2xhcmUgX2luZGV4ZXM6IFJlY29yZDxULCBudW1iZXIgfCB1bmRlZmluZWQ+O1xuICBkZWNsYXJlIGFycmF5OiByZWFkb25seSBUW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5kZXhlcyA9IHsgX19wcm90b19fOiBudWxsIH0gYXMgYW55O1xuICAgIHRoaXMuYXJyYXkgPSBbXTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHVibGljU2V0PFQgZXh0ZW5kcyBLZXk+IHtcbiAgYXJyYXk6IFRbXTtcbiAgX2luZGV4ZXM6IFNldEFycmF5PFQ+WydfaW5kZXhlcyddO1xufVxuXG4vKipcbiAqIFR5cGVzY3JpcHQgZG9lc24ndCBhbGxvdyBmcmllbmQgYWNjZXNzIHRvIHByaXZhdGUgZmllbGRzLCBzbyB0aGlzIGp1c3QgY2FzdHMgdGhlIHNldCBpbnRvIGEgdHlwZVxuICogd2l0aCBwdWJsaWMgYWNjZXNzIG1vZGlmaWVycy5cbiAqL1xuZnVuY3Rpb24gY2FzdDxUIGV4dGVuZHMgS2V5PihzZXQ6IFNldEFycmF5PFQ+KTogUHVibGljU2V0PFQ+IHtcbiAgcmV0dXJuIHNldCBhcyBhbnk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIGBrZXlgIGluIHRoZSBiYWNraW5nIGFycmF5LCBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQ8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNhc3Qoc2V0YXJyKS5faW5kZXhlc1trZXldO1xufVxuXG4vKipcbiAqIFB1dHMgYGtleWAgaW50byB0aGUgYmFja2luZyBhcnJheSwgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4gUmV0dXJuc1xuICogdGhlIGluZGV4IG9mIHRoZSBga2V5YCBpbiB0aGUgYmFja2luZyBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1dDxUIGV4dGVuZHMgS2V5PihzZXRhcnI6IFNldEFycmF5PFQ+LCBrZXk6IFQpOiBudW1iZXIge1xuICAvLyBUaGUga2V5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuIElmIGl0IGlzIHByZXNlbnQsIGl0J3MgYSBudW1iZXIuXG4gIGNvbnN0IGluZGV4ID0gZ2V0KHNldGFyciwga2V5KTtcbiAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHJldHVybiBpbmRleDtcblxuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5LnB1c2goa2V5KTtcbiAgcmV0dXJuIChpbmRleGVzW2tleV0gPSBsZW5ndGggLSAxKTtcbn1cblxuLyoqXG4gKiBQb3BzIHRoZSBsYXN0IGFkZGVkIGl0ZW0gb3V0IG9mIHRoZSBTZXRBcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcDxUIGV4dGVuZHMgS2V5PihzZXRhcnI6IFNldEFycmF5PFQ+KTogdm9pZCB7XG4gIGNvbnN0IHsgYXJyYXksIF9pbmRleGVzOiBpbmRleGVzIH0gPSBjYXN0KHNldGFycik7XG4gIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBsYXN0ID0gYXJyYXkucG9wKCkhO1xuICBpbmRleGVzW2xhc3RdID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGtleSwgaWYgaXQgZXhpc3RzIGluIHRoZSBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmU8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogdm9pZCB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0KHNldGFyciwga2V5KTtcbiAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrID0gYXJyYXlbaV07XG4gICAgYXJyYXlbaSAtIDFdID0gaztcbiAgICBpbmRleGVzW2tdIS0tO1xuICB9XG4gIGluZGV4ZXNba2V5XSA9IHVuZGVmaW5lZDtcbiAgYXJyYXkucG9wKCk7XG59XG4iLCAiZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW251bWJlcl1cbiAgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5leHBvcnQgdHlwZSBTb3VyY2VNYXBMaW5lID0gU291cmNlTWFwU2VnbWVudFtdO1xuZXhwb3J0IHR5cGUgU291cmNlTWFwTWFwcGluZ3MgPSBTb3VyY2VNYXBMaW5lW107XG5cbmNvbnN0IGNvbW1hID0gJywnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBzZW1pY29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcbmNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuY29uc3QgaW50VG9DaGFyID0gbmV3IFVpbnQ4QXJyYXkoNjQpOyAvLyA2NCBwb3NzaWJsZSBjaGFycy5cbmNvbnN0IGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7IC8vIHogaXMgMTIyIGluIEFTQ0lJXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgY29uc3QgYyA9IGNoYXJzLmNoYXJDb2RlQXQoaSk7XG4gIGludFRvQ2hhcltpXSA9IGM7XG4gIGNoYXJUb0ludFtjXSA9IGk7XG59XG5cbi8vIFByb3ZpZGUgYSBmYWxsYmFjayBmb3Igb2xkZXIgZW52aXJvbm1lbnRzLlxuY29uc3QgdGQgPVxuICB0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnXG4gICAgPyAvKiAjX19QVVJFX18gKi8gbmV3IFRleHREZWNvZGVyKClcbiAgICA6IHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnXG4gICAgPyB7XG4gICAgICAgIGRlY29kZShidWY6IFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgZGVjb2RlKGJ1ZjogVWludDhBcnJheSkge1xuICAgICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUobWFwcGluZ3M6IHN0cmluZyk6IFNvdXJjZU1hcE1hcHBpbmdzIHtcbiAgY29uc3Qgc3RhdGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBuZXcgSW50MzJBcnJheSg1KSBhcyBhbnk7XG4gIGNvbnN0IGRlY29kZWQ6IFNvdXJjZU1hcE1hcHBpbmdzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IHNlbWkgPSBpbmRleE9mKG1hcHBpbmdzLCBpbmRleCk7XG4gICAgY29uc3QgbGluZTogU291cmNlTWFwTGluZSA9IFtdO1xuICAgIGxldCBzb3J0ZWQgPSB0cnVlO1xuICAgIGxldCBsYXN0Q29sID0gMDtcbiAgICBzdGF0ZVswXSA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCBzZW1pOyBpKyspIHtcbiAgICAgIGxldCBzZWc6IFNvdXJjZU1hcFNlZ21lbnQ7XG5cbiAgICAgIGkgPSBkZWNvZGVJbnRlZ2VyKG1hcHBpbmdzLCBpLCBzdGF0ZSwgMCk7IC8vIGdlbkNvbHVtblxuICAgICAgY29uc3QgY29sID0gc3RhdGVbMF07XG4gICAgICBpZiAoY29sIDwgbGFzdENvbCkgc29ydGVkID0gZmFsc2U7XG4gICAgICBsYXN0Q29sID0gY29sO1xuXG4gICAgICBpZiAoaGFzTW9yZVZscShtYXBwaW5ncywgaSwgc2VtaSkpIHtcbiAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCAxKTsgLy8gc291cmNlc0luZGV4XG4gICAgICAgIGkgPSBkZWNvZGVJbnRlZ2VyKG1hcHBpbmdzLCBpLCBzdGF0ZSwgMik7IC8vIHNvdXJjZUxpbmVcbiAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCAzKTsgLy8gc291cmNlQ29sdW1uXG5cbiAgICAgICAgaWYgKGhhc01vcmVWbHEobWFwcGluZ3MsIGksIHNlbWkpKSB7XG4gICAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCA0KTsgLy8gbmFtZXNJbmRleFxuICAgICAgICAgIHNlZyA9IFtjb2wsIHN0YXRlWzFdLCBzdGF0ZVsyXSwgc3RhdGVbM10sIHN0YXRlWzRdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbY29sLCBzdGF0ZVsxXSwgc3RhdGVbMl0sIHN0YXRlWzNdXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnID0gW2NvbF07XG4gICAgICB9XG5cbiAgICAgIGxpbmUucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGlmICghc29ydGVkKSBzb3J0KGxpbmUpO1xuICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICBpbmRleCA9IHNlbWkgKyAxO1xuICB9IHdoaWxlIChpbmRleCA8PSBtYXBwaW5ncy5sZW5ndGgpO1xuXG4gIHJldHVybiBkZWNvZGVkO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKG1hcHBpbmdzOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBpZHggPSBtYXBwaW5ncy5pbmRleE9mKCc7JywgaW5kZXgpO1xuICByZXR1cm4gaWR4ID09PSAtMSA/IG1hcHBpbmdzLmxlbmd0aCA6IGlkeDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihtYXBwaW5nczogc3RyaW5nLCBwb3M6IG51bWJlciwgc3RhdGU6IFNvdXJjZU1hcFNlZ21lbnQsIGo6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB2YWx1ZSA9IDA7XG4gIGxldCBzaGlmdCA9IDA7XG4gIGxldCBpbnRlZ2VyID0gMDtcblxuICBkbyB7XG4gICAgY29uc3QgYyA9IG1hcHBpbmdzLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcblxuICBjb25zdCBzaG91bGROZWdhdGUgPSB2YWx1ZSAmIDE7XG4gIHZhbHVlID4+Pj0gMTtcblxuICBpZiAoc2hvdWxkTmVnYXRlKSB7XG4gICAgdmFsdWUgPSAtMHg4MDAwMDAwMCB8IC12YWx1ZTtcbiAgfVxuXG4gIHN0YXRlW2pdICs9IHZhbHVlO1xuICByZXR1cm4gcG9zO1xufVxuXG5mdW5jdGlvbiBoYXNNb3JlVmxxKG1hcHBpbmdzOiBzdHJpbmcsIGk6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKGkgPj0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtYXBwaW5ncy5jaGFyQ29kZUF0KGkpICE9PSBjb21tYTtcbn1cblxuZnVuY3Rpb24gc29ydChsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10pIHtcbiAgbGluZS5zb3J0KHNvcnRDb21wYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYTogU291cmNlTWFwU2VnbWVudCwgYjogU291cmNlTWFwU2VnbWVudCk6IG51bWJlciB7XG4gIHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkZWNvZGVkOiBTb3VyY2VNYXBNYXBwaW5ncyk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogUmVhZG9ubHk8U291cmNlTWFwTWFwcGluZ3M+KTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkZWNvZGVkOiBSZWFkb25seTxTb3VyY2VNYXBNYXBwaW5ncz4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IG5ldyBJbnQzMkFycmF5KDUpIGFzIGFueTtcbiAgY29uc3QgYnVmTGVuZ3RoID0gMTAyNCAqIDE2O1xuICBjb25zdCBzdWJMZW5ndGggPSBidWZMZW5ndGggLSAzNjtcbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmTGVuZ3RoKTtcbiAgY29uc3Qgc3ViID0gYnVmLnN1YmFycmF5KDAsIHN1Ykxlbmd0aCk7XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICBpZiAocG9zID09PSBidWZMZW5ndGgpIHtcbiAgICAgICAgb3V0ICs9IHRkLmRlY29kZShidWYpO1xuICAgICAgICBwb3MgPSAwO1xuICAgICAgfVxuICAgICAgYnVmW3BvcysrXSA9IHNlbWljb2xvbjtcbiAgICB9XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIHN0YXRlWzBdID0gMDtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IGxpbmVbal07XG4gICAgICAvLyBXZSBjYW4gcHVzaCB1cCB0byA1IGludHMsIGVhY2ggaW50IGNhbiB0YWtlIGF0IG1vc3QgNyBjaGFycywgYW5kIHdlXG4gICAgICAvLyBtYXkgcHVzaCBhIGNvbW1hLlxuICAgICAgaWYgKHBvcyA+IHN1Ykxlbmd0aCkge1xuICAgICAgICBvdXQgKz0gdGQuZGVjb2RlKHN1Yik7XG4gICAgICAgIGJ1Zi5jb3B5V2l0aGluKDAsIHN1Ykxlbmd0aCwgcG9zKTtcbiAgICAgICAgcG9zIC09IHN1Ykxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChqID4gMCkgYnVmW3BvcysrXSA9IGNvbW1hO1xuXG4gICAgICBwb3MgPSBlbmNvZGVJbnRlZ2VyKGJ1ZiwgcG9zLCBzdGF0ZSwgc2VnbWVudCwgMCk7IC8vIGdlbkNvbHVtblxuXG4gICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDEpIGNvbnRpbnVlO1xuICAgICAgcG9zID0gZW5jb2RlSW50ZWdlcihidWYsIHBvcywgc3RhdGUsIHNlZ21lbnQsIDEpOyAvLyBzb3VyY2VzSW5kZXhcbiAgICAgIHBvcyA9IGVuY29kZUludGVnZXIoYnVmLCBwb3MsIHN0YXRlLCBzZWdtZW50LCAyKTsgLy8gc291cmNlTGluZVxuICAgICAgcG9zID0gZW5jb2RlSW50ZWdlcihidWYsIHBvcywgc3RhdGUsIHNlZ21lbnQsIDMpOyAvLyBzb3VyY2VDb2x1bW5cblxuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIHBvcyA9IGVuY29kZUludGVnZXIoYnVmLCBwb3MsIHN0YXRlLCBzZWdtZW50LCA0KTsgLy8gbmFtZXNJbmRleFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQgKyB0ZC5kZWNvZGUoYnVmLnN1YmFycmF5KDAsIHBvcykpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVJbnRlZ2VyKFxuICBidWY6IFVpbnQ4QXJyYXksXG4gIHBvczogbnVtYmVyLFxuICBzdGF0ZTogU291cmNlTWFwU2VnbWVudCxcbiAgc2VnbWVudDogU291cmNlTWFwU2VnbWVudCxcbiAgajogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgbmV4dCA9IHNlZ21lbnRbal07XG4gIGxldCBudW0gPSBuZXh0IC0gc3RhdGVbal07XG4gIHN0YXRlW2pdID0gbmV4dDtcblxuICBudW0gPSBudW0gPCAwID8gKC1udW0gPDwgMSkgfCAxIDogbnVtIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IG51bSAmIDBiMDExMTExO1xuICAgIG51bSA+Pj49IDU7XG4gICAgaWYgKG51bSA+IDApIGNsYW1wZWQgfD0gMGIxMDAwMDA7XG4gICAgYnVmW3BvcysrXSA9IGludFRvQ2hhcltjbGFtcGVkXTtcbiAgfSB3aGlsZSAobnVtID4gMCk7XG5cbiAgcmV0dXJuIHBvcztcbn1cbiIsICIvLyBNYXRjaGVzIHRoZSBzY2hlbWUgb2YgYSBVUkwsIGVnIFwiaHR0cDovL1wiXG5jb25zdCBzY2hlbWVSZWdleCA9IC9eW1xcdysuLV0rOlxcL1xcLy87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgcGFydHMgb2YgYSBVUkw6XG4gKiAxLiBTY2hlbWUsIGluY2x1ZGluZyBcIjpcIiwgZ3VhcmFudGVlZC5cbiAqIDIuIFVzZXIvcGFzc3dvcmQsIGluY2x1ZGluZyBcIkBcIiwgb3B0aW9uYWwuXG4gKiAzLiBIb3N0LCBndWFyYW50ZWVkLlxuICogNC4gUG9ydCwgaW5jbHVkaW5nIFwiOlwiLCBvcHRpb25hbC5cbiAqIDUuIFBhdGgsIGluY2x1ZGluZyBcIi9cIiwgb3B0aW9uYWwuXG4gKiA2LiBRdWVyeSwgaW5jbHVkaW5nIFwiP1wiLCBvcHRpb25hbC5cbiAqIDcuIEhhc2gsIGluY2x1ZGluZyBcIiNcIiwgb3B0aW9uYWwuXG4gKi9cbmNvbnN0IHVybFJlZ2V4ID0gL14oW1xcdysuLV0rOilcXC9cXC8oW15ALyM/XSpAKT8oW146LyM/XSopKDpcXGQrKT8oXFwvW14jP10qKT8oXFw/W14jXSopPygjLiopPy87XG5cbi8qKlxuICogRmlsZSBVUkxzIGFyZSB3ZWlyZC4gVGhleSBkb250JyBuZWVkIHRoZSByZWd1bGFyIGAvL2AgaW4gdGhlIHNjaGVtZSwgdGhleSBtYXkgb3IgbWF5IG5vdCBzdGFydFxuICogd2l0aCBhIGxlYWRpbmcgYC9gLCB0aGV5IGNhbiBoYXZlIGEgZG9tYWluIChidXQgb25seSBpZiB0aGV5IGRvbid0IHN0YXJ0IHdpdGggYSBXaW5kb3dzIGRyaXZlKS5cbiAqXG4gKiAxLiBIb3N0LCBvcHRpb25hbC5cbiAqIDIuIFBhdGgsIHdoaWNoIG1heSBpbmNsdWRlIFwiL1wiLCBndWFyYW50ZWVkLlxuICogMy4gUXVlcnksIGluY2x1ZGluZyBcIj9cIiwgb3B0aW9uYWwuXG4gKiA0LiBIYXNoLCBpbmNsdWRpbmcgXCIjXCIsIG9wdGlvbmFsLlxuICovXG5jb25zdCBmaWxlUmVnZXggPSAvXmZpbGU6KD86XFwvXFwvKCg/IVthLXpdOilbXi8jP10qKT8pPyhcXC8/W14jP10qKShcXD9bXiNdKik/KCMuKik/L2k7XG5cbnR5cGUgVXJsID0ge1xuICBzY2hlbWU6IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIHBvcnQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBxdWVyeTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHR5cGU6IFVybFR5cGU7XG59O1xuXG5jb25zdCBlbnVtIFVybFR5cGUge1xuICBFbXB0eSA9IDEsXG4gIEhhc2ggPSAyLFxuICBRdWVyeSA9IDMsXG4gIFJlbGF0aXZlUGF0aCA9IDQsXG4gIEFic29sdXRlUGF0aCA9IDUsXG4gIFNjaGVtZVJlbGF0aXZlID0gNixcbiAgQWJzb2x1dGUgPSA3LFxufVxuXG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNjaGVtZVJlZ2V4LnRlc3QoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBpc1NjaGVtZVJlbGF0aXZlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJy8vJyk7XG59XG5cbmZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJy8nKTtcbn1cblxuZnVuY3Rpb24gaXNGaWxlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJ2ZpbGU6Jyk7XG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmUoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bLj8jXS8udGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQWJzb2x1dGVVcmwoaW5wdXQ6IHN0cmluZyk6IFVybCB7XG4gIGNvbnN0IG1hdGNoID0gdXJsUmVnZXguZXhlYyhpbnB1dCkhO1xuICByZXR1cm4gbWFrZVVybChcbiAgICBtYXRjaFsxXSxcbiAgICBtYXRjaFsyXSB8fCAnJyxcbiAgICBtYXRjaFszXSxcbiAgICBtYXRjaFs0XSB8fCAnJyxcbiAgICBtYXRjaFs1XSB8fCAnLycsXG4gICAgbWF0Y2hbNl0gfHwgJycsXG4gICAgbWF0Y2hbN10gfHwgJycsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsZVVybChpbnB1dDogc3RyaW5nKTogVXJsIHtcbiAgY29uc3QgbWF0Y2ggPSBmaWxlUmVnZXguZXhlYyhpbnB1dCkhO1xuICBjb25zdCBwYXRoID0gbWF0Y2hbMl07XG4gIHJldHVybiBtYWtlVXJsKFxuICAgICdmaWxlOicsXG4gICAgJycsXG4gICAgbWF0Y2hbMV0gfHwgJycsXG4gICAgJycsXG4gICAgaXNBYnNvbHV0ZVBhdGgocGF0aCkgPyBwYXRoIDogJy8nICsgcGF0aCxcbiAgICBtYXRjaFszXSB8fCAnJyxcbiAgICBtYXRjaFs0XSB8fCAnJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gbWFrZVVybChcbiAgc2NoZW1lOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZyxcbiAgaG9zdDogc3RyaW5nLFxuICBwb3J0OiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgcXVlcnk6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuKTogVXJsIHtcbiAgcmV0dXJuIHtcbiAgICBzY2hlbWUsXG4gICAgdXNlcixcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gICAgcGF0aCxcbiAgICBxdWVyeSxcbiAgICBoYXNoLFxuICAgIHR5cGU6IFVybFR5cGUuQWJzb2x1dGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0OiBzdHJpbmcpOiBVcmwge1xuICBpZiAoaXNTY2hlbWVSZWxhdGl2ZVVybChpbnB1dCkpIHtcbiAgICBjb25zdCB1cmwgPSBwYXJzZUFic29sdXRlVXJsKCdodHRwOicgKyBpbnB1dCk7XG4gICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgIHVybC50eXBlID0gVXJsVHlwZS5TY2hlbWVSZWxhdGl2ZTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgaWYgKGlzQWJzb2x1dGVQYXRoKGlucHV0KSkge1xuICAgIGNvbnN0IHVybCA9IHBhcnNlQWJzb2x1dGVVcmwoJ2h0dHA6Ly9mb28uY29tJyArIGlucHV0KTtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLmhvc3QgPSAnJztcbiAgICB1cmwudHlwZSA9IFVybFR5cGUuQWJzb2x1dGVQYXRoO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBpZiAoaXNGaWxlVXJsKGlucHV0KSkgcmV0dXJuIHBhcnNlRmlsZVVybChpbnB1dCk7XG5cbiAgaWYgKGlzQWJzb2x1dGVVcmwoaW5wdXQpKSByZXR1cm4gcGFyc2VBYnNvbHV0ZVVybChpbnB1dCk7XG5cbiAgY29uc3QgdXJsID0gcGFyc2VBYnNvbHV0ZVVybCgnaHR0cDovL2Zvby5jb20vJyArIGlucHV0KTtcbiAgdXJsLnNjaGVtZSA9ICcnO1xuICB1cmwuaG9zdCA9ICcnO1xuICB1cmwudHlwZSA9IGlucHV0XG4gICAgPyBpbnB1dC5zdGFydHNXaXRoKCc/JylcbiAgICAgID8gVXJsVHlwZS5RdWVyeVxuICAgICAgOiBpbnB1dC5zdGFydHNXaXRoKCcjJylcbiAgICAgID8gVXJsVHlwZS5IYXNoXG4gICAgICA6IFVybFR5cGUuUmVsYXRpdmVQYXRoXG4gICAgOiBVcmxUeXBlLkVtcHR5O1xuICByZXR1cm4gdXJsO1xufVxuXG5mdW5jdGlvbiBzdHJpcFBhdGhGaWxlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBJZiBhIHBhdGggZW5kcyB3aXRoIGEgcGFyZW50IGRpcmVjdG9yeSBcIi4uXCIsIHRoZW4gaXQncyBhIHJlbGF0aXZlIHBhdGggd2l0aCBleGNlc3MgcGFyZW50XG4gIC8vIHBhdGhzLiBJdCdzIG5vdCBhIGZpbGUsIHNvIHdlIGNhbid0IHN0cmlwIGl0LlxuICBpZiAocGF0aC5lbmRzV2l0aCgnLy4uJykpIHJldHVybiBwYXRoO1xuICBjb25zdCBpbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaW5kZXggKyAxKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VQYXRocyh1cmw6IFVybCwgYmFzZTogVXJsKSB7XG4gIG5vcm1hbGl6ZVBhdGgoYmFzZSwgYmFzZS50eXBlKTtcblxuICAvLyBJZiB0aGUgcGF0aCBpcyBqdXN0IGEgXCIvXCIsIHRoZW4gaXQgd2FzIGFuIGVtcHR5IHBhdGggdG8gYmVnaW4gd2l0aCAocmVtZW1iZXIsIHdlJ3JlIGEgcmVsYXRpdmVcbiAgLy8gcGF0aCkuXG4gIGlmICh1cmwucGF0aCA9PT0gJy8nKSB7XG4gICAgdXJsLnBhdGggPSBiYXNlLnBhdGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzb2x1dGlvbiBoYXBwZW5zIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHBhdGgncyBkaXJlY3RvcnksIG5vdCB0aGUgZmlsZS5cbiAgICB1cmwucGF0aCA9IHN0cmlwUGF0aEZpbGVuYW1lKGJhc2UucGF0aCkgKyB1cmwucGF0aDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBwYXRoIGNhbiBoYXZlIGVtcHR5IGRpcmVjdG9yaWVzIFwiLy9cIiwgdW5uZWVkZWQgcGFyZW50cyBcImZvby8uLlwiLCBvciBjdXJyZW50IGRpcmVjdG9yeVxuICogXCJmb28vLlwiLiBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0byBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHVybDogVXJsLCB0eXBlOiBVcmxUeXBlKSB7XG4gIGNvbnN0IHJlbCA9IHR5cGUgPD0gVXJsVHlwZS5SZWxhdGl2ZVBhdGg7XG4gIGNvbnN0IHBpZWNlcyA9IHVybC5wYXRoLnNwbGl0KCcvJyk7XG5cbiAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZmlyc3QgcGllY2UgYWx3YXlzLCBzbyB0aGF0IHdlIG91dHB1dCBhIGxlYWRpbmcgc2xhc2guIFRoZSBpdGVtIGF0XG4gIC8vIHBpZWNlc1swXSBpcyBhbiBlbXB0eSBzdHJpbmcuXG4gIGxldCBwb2ludGVyID0gMTtcblxuICAvLyBQb3NpdGl2ZSBpcyB0aGUgbnVtYmVyIG9mIHJlYWwgZGlyZWN0b3JpZXMgd2UndmUgb3V0cHV0LCB1c2VkIGZvciBwb3BwaW5nIGEgcGFyZW50IGRpcmVjdG9yeS5cbiAgLy8gRWcsIFwiZm9vL2Jhci8uLlwiIHdpbGwgaGF2ZSBhIHBvc2l0aXZlIDIsIGFuZCB3ZSBjYW4gZGVjcmVtZW50IHRvIGJlIGxlZnQgd2l0aCBqdXN0IFwiZm9vXCIuXG4gIGxldCBwb3NpdGl2ZSA9IDA7XG5cbiAgLy8gV2UgbmVlZCB0byBrZWVwIGEgdHJhaWxpbmcgc2xhc2ggaWYgd2UgZW5jb3VudGVyIGFuIGVtcHR5IGRpcmVjdG9yeSAoZWcsIHNwbGl0dGluZyBcImZvby9cIiB3aWxsXG4gIC8vIGdlbmVyYXRlIGBbXCJmb29cIiwgXCJcIl1gIHBpZWNlcykuIEFuZCwgaWYgd2UgcG9wIGEgcGFyZW50IGRpcmVjdG9yeS4gQnV0IG9uY2Ugd2UgZW5jb3VudGVyIGFcbiAgLy8gcmVhbCBkaXJlY3RvcnksIHdlIHdvbid0IG5lZWQgdG8gYXBwZW5kLCB1bmxlc3MgdGhlIG90aGVyIGNvbmRpdGlvbnMgaGFwcGVuIGFnYWluLlxuICBsZXQgYWRkVHJhaWxpbmdTbGFzaCA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcGllY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGllY2UgPSBwaWVjZXNbaV07XG5cbiAgICAvLyBBbiBlbXB0eSBkaXJlY3RvcnksIGNvdWxkIGJlIGEgdHJhaWxpbmcgc2xhc2gsIG9yIGp1c3QgYSBkb3VibGUgXCIvL1wiIGluIHRoZSBwYXRoLlxuICAgIGlmICghcGllY2UpIHtcbiAgICAgIGFkZFRyYWlsaW5nU2xhc2ggPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgcmVhbCBkaXJlY3RvcnksIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhcHBlbmQgYW55bW9yZS5cbiAgICBhZGRUcmFpbGluZ1NsYXNoID0gZmFsc2U7XG5cbiAgICAvLyBBIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCB3ZSBjYW4gYWx3YXlzIGRyb3AuXG4gICAgaWYgKHBpZWNlID09PSAnLicpIGNvbnRpbnVlO1xuXG4gICAgLy8gQSBwYXJlbnQgZGlyZWN0b3J5LCB3ZSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlYWwgZGlyZWN0b3JpZXMgd2UgY2FuIHBvcC4gRWxzZSwgd2VcbiAgICAvLyBoYXZlIGFuIGV4Y2VzcyBvZiBwYXJlbnRzLCBhbmQgd2UnbGwgbmVlZCB0byBrZWVwIHRoZSBcIi4uXCIuXG4gICAgaWYgKHBpZWNlID09PSAnLi4nKSB7XG4gICAgICBpZiAocG9zaXRpdmUpIHtcbiAgICAgICAgYWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG4gICAgICAgIHBvc2l0aXZlLS07XG4gICAgICAgIHBvaW50ZXItLTtcbiAgICAgIH0gZWxzZSBpZiAocmVsKSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGEgcmVsYXRpdmVQYXRoLCB0aGVuIHdlIG5lZWQgdG8ga2VlcCB0aGUgZXhjZXNzIHBhcmVudHMuIEVsc2UsIGluIGFuIGFic29sdXRlXG4gICAgICAgIC8vIFVSTCwgcHJvdG9jb2wgcmVsYXRpdmUgVVJMLCBvciBhbiBhYnNvbHV0ZSBwYXRoLCB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgZXhjZXNzLlxuICAgICAgICBwaWVjZXNbcG9pbnRlcisrXSA9IHBpZWNlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYSByZWFsIGRpcmVjdG9yeS4gTW92ZSBpdCB0byB0aGUgbmV4dCBpbnNlcnRpb24gcG9pbnRlciwgd2hpY2ggYWNjb3VudHMgZm9yXG4gICAgLy8gYW55IHBvcHBlZCBvciBkcm9wcGVkIGRpcmVjdG9yaWVzLlxuICAgIHBpZWNlc1twb2ludGVyKytdID0gcGllY2U7XG4gICAgcG9zaXRpdmUrKztcbiAgfVxuXG4gIGxldCBwYXRoID0gJyc7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRlcjsgaSsrKSB7XG4gICAgcGF0aCArPSAnLycgKyBwaWVjZXNbaV07XG4gIH1cbiAgaWYgKCFwYXRoIHx8IChhZGRUcmFpbGluZ1NsYXNoICYmICFwYXRoLmVuZHNXaXRoKCcvLi4nKSkpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuICB1cmwucGF0aCA9IHBhdGg7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSBgaW5wdXRgIFVSTC9wYXRoIHJlbGF0aXZlIHRvIGBiYXNlYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZShpbnB1dDogc3RyaW5nLCBiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoIWlucHV0ICYmICFiYXNlKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgdXJsID0gcGFyc2VVcmwoaW5wdXQpO1xuICBsZXQgaW5wdXRUeXBlID0gdXJsLnR5cGU7XG5cbiAgaWYgKGJhc2UgJiYgaW5wdXRUeXBlICE9PSBVcmxUeXBlLkFic29sdXRlKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IHBhcnNlVXJsKGJhc2UpO1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVVybC50eXBlO1xuXG4gICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAgIGNhc2UgVXJsVHlwZS5FbXB0eTpcbiAgICAgICAgdXJsLmhhc2ggPSBiYXNlVXJsLmhhc2g7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLkhhc2g6XG4gICAgICAgIHVybC5xdWVyeSA9IGJhc2VVcmwucXVlcnk7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLlF1ZXJ5OlxuICAgICAgY2FzZSBVcmxUeXBlLlJlbGF0aXZlUGF0aDpcbiAgICAgICAgbWVyZ2VQYXRocyh1cmwsIGJhc2VVcmwpO1xuICAgICAgLy8gZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgVXJsVHlwZS5BYnNvbHV0ZVBhdGg6XG4gICAgICAgIC8vIFRoZSBob3N0LCB1c2VyLCBhbmQgcG9ydCBhcmUgam9pbmVkLCB5b3UgY2FuJ3QgY29weSBvbmUgd2l0aG91dCB0aGUgb3RoZXJzLlxuICAgICAgICB1cmwudXNlciA9IGJhc2VVcmwudXNlcjtcbiAgICAgICAgdXJsLmhvc3QgPSBiYXNlVXJsLmhvc3Q7XG4gICAgICAgIHVybC5wb3J0ID0gYmFzZVVybC5wb3J0O1xuICAgICAgLy8gZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgVXJsVHlwZS5TY2hlbWVSZWxhdGl2ZTpcbiAgICAgICAgLy8gVGhlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhIHNjaGVtYSBhdCBsZWFzdCwgc28gd2UgbmVlZCB0byBjb3B5IGF0IGxlYXN0IHRoYXQgb3Zlci5cbiAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2VVcmwuc2NoZW1lO1xuICAgIH1cbiAgICBpZiAoYmFzZVR5cGUgPiBpbnB1dFR5cGUpIGlucHV0VHlwZSA9IGJhc2VUeXBlO1xuICB9XG5cbiAgbm9ybWFsaXplUGF0aCh1cmwsIGlucHV0VHlwZSk7XG5cbiAgY29uc3QgcXVlcnlIYXNoID0gdXJsLnF1ZXJ5ICsgdXJsLmhhc2g7XG4gIHN3aXRjaCAoaW5wdXRUeXBlKSB7XG4gICAgLy8gVGhpcyBpcyBpbXBvc3NpYmxlLCBiZWNhdXNlIG9mIHRoZSBlbXB0eSBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICAvLyBjYXNlIFVybFR5cGUuRW1wdHk6XG5cbiAgICBjYXNlIFVybFR5cGUuSGFzaDpcbiAgICBjYXNlIFVybFR5cGUuUXVlcnk6XG4gICAgICByZXR1cm4gcXVlcnlIYXNoO1xuXG4gICAgY2FzZSBVcmxUeXBlLlJlbGF0aXZlUGF0aDoge1xuICAgICAgLy8gVGhlIGZpcnN0IGNoYXIgaXMgYWx3YXlzIGEgXCIvXCIsIGFuZCB3ZSBuZWVkIGl0IHRvIGJlIHJlbGF0aXZlLlxuICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRoLnNsaWNlKDEpO1xuXG4gICAgICBpZiAoIXBhdGgpIHJldHVybiBxdWVyeUhhc2ggfHwgJy4nO1xuXG4gICAgICBpZiAoaXNSZWxhdGl2ZShiYXNlIHx8IGlucHV0KSAmJiAhaXNSZWxhdGl2ZShwYXRoKSkge1xuICAgICAgICAvLyBJZiBiYXNlIHN0YXJ0ZWQgd2l0aCBhIGxlYWRpbmcgXCIuXCIsIG9yIHRoZXJlIGlzIG5vIGJhc2UgYW5kIGlucHV0IHN0YXJ0ZWQgd2l0aCBhIFwiLlwiLFxuICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlbGF0aXZlIHBhdGggc3RhcnRzIHdpdGggYSBcIi5cIi4gV2UgZG9uJ3Qga25vdyBpZlxuICAgICAgICAvLyByZWxhdGl2ZSBzdGFydHMgd2l0aCBhIFwiLi5cIiwgdGhvdWdoLCBzbyBjaGVjayBiZWZvcmUgcHJlcGVuZGluZy5cbiAgICAgICAgcmV0dXJuICcuLycgKyBwYXRoICsgcXVlcnlIYXNoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aCArIHF1ZXJ5SGFzaDtcbiAgICB9XG5cbiAgICBjYXNlIFVybFR5cGUuQWJzb2x1dGVQYXRoOlxuICAgICAgcmV0dXJuIHVybC5wYXRoICsgcXVlcnlIYXNoO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1cmwuc2NoZW1lICsgJy8vJyArIHVybC51c2VyICsgdXJsLmhvc3QgKyB1cmwucG9ydCArIHVybC5wYXRoICsgcXVlcnlIYXNoO1xuICB9XG59XG4iLCAiaW1wb3J0IHJlc29sdmVVcmkgZnJvbSAnQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKGlucHV0OiBzdHJpbmcsIGJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIC8vIFRoZSBiYXNlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgZGlyZWN0b3J5LCBpZiBpdCdzIG5vdCBlbXB0eS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9ibG9iLzhjYjNlZTU3L2xpYi91dGlsLmpzI0wzMjdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvZGE0YWRiYjMvdGhpcmRfcGFydHkvYmxpbmsvcmVuZGVyZXIvZGV2dG9vbHMvZnJvbnRfZW5kL3Nkay9Tb3VyY2VNYXAuanMjTDQwMC1MNDAxXG4gIGlmIChiYXNlICYmICFiYXNlLmVuZHNXaXRoKCcvJykpIGJhc2UgKz0gJy8nO1xuXG4gIHJldHVybiByZXNvbHZlVXJpKGlucHV0LCBiYXNlKTtcbn1cbiIsICIvKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBcIi9cIiwgYnV0IGxlYXZlcyB0aGUgc2xhc2guXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwRmlsZW5hbWUocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghcGF0aCkgcmV0dXJuICcnO1xuICBjb25zdCBpbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaW5kZXggKyAxKTtcbn1cbiIsICJ0eXBlIEdlbmVyYXRlZENvbHVtbiA9IG51bWJlcjtcbnR5cGUgU291cmNlc0luZGV4ID0gbnVtYmVyO1xudHlwZSBTb3VyY2VMaW5lID0gbnVtYmVyO1xudHlwZSBTb3VyY2VDb2x1bW4gPSBudW1iZXI7XG50eXBlIE5hbWVzSW5kZXggPSBudW1iZXI7XG5cbnR5cGUgR2VuZXJhdGVkTGluZSA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW0dlbmVyYXRlZENvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbiwgTmFtZXNJbmRleF07XG5cbmV4cG9ydCB0eXBlIFJldmVyc2VTZWdtZW50ID0gW1NvdXJjZUNvbHVtbiwgR2VuZXJhdGVkTGluZSwgR2VuZXJhdGVkQ29sdW1uXTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTiA9IDA7XG5leHBvcnQgY29uc3QgU09VUkNFU19JTkRFWCA9IDE7XG5leHBvcnQgY29uc3QgU09VUkNFX0xJTkUgPSAyO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT0xVTU4gPSAzO1xuZXhwb3J0IGNvbnN0IE5BTUVTX0lOREVYID0gNDtcblxuZXhwb3J0IGNvbnN0IFJFVl9HRU5FUkFURURfTElORSA9IDE7XG5leHBvcnQgY29uc3QgUkVWX0dFTkVSQVRFRF9DT0xVTU4gPSAyO1xuIiwgImltcG9ydCB7IENPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF5YmVTb3J0KFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIG93bmVkOiBib29sZWFuLFxuKTogU291cmNlTWFwU2VnbWVudFtdW10ge1xuICBjb25zdCB1bnNvcnRlZEluZGV4ID0gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3MsIDApO1xuICBpZiAodW5zb3J0ZWRJbmRleCA9PT0gbWFwcGluZ3MubGVuZ3RoKSByZXR1cm4gbWFwcGluZ3M7XG5cbiAgLy8gSWYgd2Ugb3duIHRoZSBhcnJheSAobWVhbmluZyB3ZSBwYXJzZWQgaXQgZnJvbSBKU09OKSwgdGhlbiB3ZSdyZSBmcmVlIHRvIGRpcmVjdGx5IG11dGF0ZSBpdC4gSWZcbiAgLy8gbm90LCB3ZSBkbyBub3Qgd2FudCB0byBtb2RpZnkgdGhlIGNvbnN1bWVyJ3MgaW5wdXQgYXJyYXkuXG4gIGlmICghb3duZWQpIG1hcHBpbmdzID0gbWFwcGluZ3Muc2xpY2UoKTtcblxuICBmb3IgKGxldCBpID0gdW5zb3J0ZWRJbmRleDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSA9IG5leHRVbnNvcnRlZFNlZ21lbnRMaW5lKG1hcHBpbmdzLCBpICsgMSkpIHtcbiAgICBtYXBwaW5nc1tpXSA9IHNvcnRTZWdtZW50cyhtYXBwaW5nc1tpXSwgb3duZWQpO1xuICB9XG4gIHJldHVybiBtYXBwaW5ncztcbn1cblxuZnVuY3Rpb24gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdLCBzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWlzU29ydGVkKG1hcHBpbmdzW2ldKSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNTb3J0ZWQobGluZTogU291cmNlTWFwU2VnbWVudFtdKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGogPSAxOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgIGlmIChsaW5lW2pdW0NPTFVNTl0gPCBsaW5lW2ogLSAxXVtDT0xVTU5dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzb3J0U2VnbWVudHMobGluZTogU291cmNlTWFwU2VnbWVudFtdLCBvd25lZDogYm9vbGVhbik6IFNvdXJjZU1hcFNlZ21lbnRbXSB7XG4gIGlmICghb3duZWQpIGxpbmUgPSBsaW5lLnNsaWNlKCk7XG4gIHJldHVybiBsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBzb3J0Q29tcGFyYXRvcihhOiBTb3VyY2VNYXBTZWdtZW50LCBiOiBTb3VyY2VNYXBTZWdtZW50KTogbnVtYmVyIHtcbiAgcmV0dXJuIGFbQ09MVU1OXSAtIGJbQ09MVU1OXTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQsIFJldmVyc2VTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgeyBDT0xVTU4gfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuZXhwb3J0IHR5cGUgTWVtb1N0YXRlID0ge1xuICBsYXN0S2V5OiBudW1iZXI7XG4gIGxhc3ROZWVkbGU6IG51bWJlcjtcbiAgbGFzdEluZGV4OiBudW1iZXI7XG59O1xuXG5leHBvcnQgbGV0IGZvdW5kID0gZmFsc2U7XG5cbi8qKlxuICogQSBiaW5hcnkgc2VhcmNoIGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyB0aGUgaW5kZXggaWYgYSBtYXRjaCBpcyBmb3VuZC5cbiAqIElmIG5vIG1hdGNoIGlzIGZvdW5kLCB0aGVuIHRoZSBsZWZ0LWluZGV4ICh0aGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtIHRoYXQgY29tZXMganVzdFxuICogYmVmb3JlIHRoZSBkZXNpcmVkIGluZGV4KSBpcyByZXR1cm5lZC4gVG8gbWFpbnRhaW4gcHJvcGVyIHNvcnQgb3JkZXIsIGEgc3BsaWNlIHdvdWxkIGhhcHBlbiBhdFxuICogdGhlIG5leHQgaW5kZXg6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IGFycmF5ID0gWzEsIDNdO1xuICogY29uc3QgbmVlZGxlID0gMjtcbiAqIGNvbnN0IGluZGV4ID0gYmluYXJ5U2VhcmNoKGFycmF5LCBuZWVkbGUsIChpdGVtLCBuZWVkbGUpID0+IGl0ZW0gLSBuZWVkbGUpO1xuICpcbiAqIGFzc2VydC5lcXVhbChpbmRleCwgMCk7XG4gKiBhcnJheS5zcGxpY2UoaW5kZXggKyAxLCAwLCBuZWVkbGUpO1xuICogYXNzZXJ0LmRlZXBFcXVhbChhcnJheSwgWzEsIDIsIDNdKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5U2VhcmNoKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBoaWdoOiBudW1iZXIsXG4pOiBudW1iZXIge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpO1xuICAgIGNvbnN0IGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblxuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuXG4gICAgaWYgKGNtcCA8IDApIHtcbiAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2ggPSBtaWQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGZvdW5kID0gZmFsc2U7XG4gIHJldHVybiBsb3cgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBwZXJCb3VuZChcbiAgaGF5c3RhY2s6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG5lZWRsZTogbnVtYmVyLFxuICBpbmRleDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaW5kZXggPSBpKyspIHtcbiAgICBpZiAoaGF5c3RhY2tbaV1bQ09MVU1OXSAhPT0gbmVlZGxlKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb3dlckJvdW5kKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGluZGV4ID0gaS0tKSB7XG4gICAgaWYgKGhheXN0YWNrW2ldW0NPTFVNTl0gIT09IG5lZWRsZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVtb2l6ZWRTdGF0ZSgpOiBNZW1vU3RhdGUge1xuICByZXR1cm4ge1xuICAgIGxhc3RLZXk6IC0xLFxuICAgIGxhc3ROZWVkbGU6IC0xLFxuICAgIGxhc3RJbmRleDogLTEsXG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBvdmVybHkgY29tcGxpY2F0ZWQgYmVhc3QgaXMganVzdCB0byByZWNvcmQgdGhlIGxhc3QgdGVzdGVkIGxpbmUvY29sdW1uIGFuZCB0aGUgcmVzdWx0aW5nXG4gKiBpbmRleCwgYWxsb3dpbmcgdXMgdG8gc2tpcCBhIGZldyB0ZXN0cyBpZiBtYXBwaW5ncyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtb2l6ZWRCaW5hcnlTZWFyY2goXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgc3RhdGU6IE1lbW9TdGF0ZSxcbiAga2V5OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGU7XG5cbiAgbGV0IGxvdyA9IDA7XG4gIGxldCBoaWdoID0gaGF5c3RhY2subGVuZ3RoIC0gMTtcbiAgaWYgKGtleSA9PT0gbGFzdEtleSkge1xuICAgIGlmIChuZWVkbGUgPT09IGxhc3ROZWVkbGUpIHtcbiAgICAgIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZTtcbiAgICAgIHJldHVybiBsYXN0SW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRsZSA+PSBsYXN0TmVlZGxlKSB7XG4gICAgICAvLyBsYXN0SW5kZXggbWF5IGJlIC0xIGlmIHRoZSBwcmV2aW91cyBuZWVkbGUgd2FzIG5vdCBmb3VuZC5cbiAgICAgIGxvdyA9IGxhc3RJbmRleCA9PT0gLTEgPyAwIDogbGFzdEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoID0gbGFzdEluZGV4O1xuICAgIH1cbiAgfVxuICBzdGF0ZS5sYXN0S2V5ID0ga2V5O1xuICBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlO1xuXG4gIHJldHVybiAoc3RhdGUubGFzdEluZGV4ID0gYmluYXJ5U2VhcmNoKGhheXN0YWNrLCBuZWVkbGUsIGxvdywgaGlnaCkpO1xufVxuIiwgImltcG9ydCB7IENPTFVNTiwgU09VUkNFU19JTkRFWCwgU09VUkNFX0xJTkUsIFNPVVJDRV9DT0xVTU4gfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB7IG1lbW9pemVkQmluYXJ5U2VhcmNoLCB1cHBlckJvdW5kIH0gZnJvbSAnLi9iaW5hcnktc2VhcmNoJztcblxuaW1wb3J0IHR5cGUgeyBSZXZlcnNlU2VnbWVudCwgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHR5cGUgeyBNZW1vU3RhdGUgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5leHBvcnQgdHlwZSBTb3VyY2UgPSB7XG4gIF9fcHJvdG9fXzogbnVsbDtcbiAgW2xpbmU6IG51bWJlcl06IEV4Y2x1ZGU8UmV2ZXJzZVNlZ21lbnQsIFtudW1iZXJdPltdO1xufTtcblxuLy8gUmVidWlsZHMgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcywgd2l0aCBtYXBwaW5ncyB0aGF0IGFyZSBvcmRlcmVkIGJ5IHNvdXJjZSBsaW5lL2NvbHVtbiBpbnN0ZWFkXG4vLyBvZiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEJ5U291cmNlcyhcbiAgZGVjb2RlZDogcmVhZG9ubHkgU291cmNlTWFwU2VnbWVudFtdW10sXG4gIG1lbW9zOiBNZW1vU3RhdGVbXSxcbik6IFNvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlczogU291cmNlW10gPSBtZW1vcy5tYXAoYnVpbGROdWxsQXJyYXkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcbiAgICAgIGlmIChzZWcubGVuZ3RoID09PSAxKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzZWdbU09VUkNFU19JTkRFWF07XG4gICAgICBjb25zdCBzb3VyY2VMaW5lID0gc2VnW1NPVVJDRV9MSU5FXTtcbiAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbiA9IHNlZ1tTT1VSQ0VfQ09MVU1OXTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU291cmNlID0gc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICBjb25zdCBvcmlnaW5hbExpbmUgPSAob3JpZ2luYWxTb3VyY2Vbc291cmNlTGluZV0gfHw9IFtdKTtcbiAgICAgIGNvbnN0IG1lbW8gPSBtZW1vc1tzb3VyY2VJbmRleF07XG5cbiAgICAgIC8vIFRoZSBiaW5hcnkgc2VhcmNoIGVpdGhlciBmb3VuZCBhIG1hdGNoLCBvciBpdCBmb3VuZCB0aGUgbGVmdC1pbmRleCBqdXN0IGJlZm9yZSB3aGVyZSB0aGVcbiAgICAgIC8vIHNlZ21lbnQgc2hvdWxkIGdvLiBFaXRoZXIgd2F5LCB3ZSB3YW50IHRvIGluc2VydCBhZnRlciB0aGF0LiBBbmQgdGhlcmUgbWF5IGJlIG11bHRpcGxlXG4gICAgICAvLyBnZW5lcmF0ZWQgc2VnbWVudHMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbmFsIGxvY2F0aW9uLCBzbyB0aGVyZSBtYXkgbmVlZCB0byBtb3ZlIHNldmVyYWxcbiAgICAgIC8vIGluZGV4ZXMgYmVmb3JlIHdlIGZpbmQgd2hlcmUgd2UgbmVlZCB0byBpbnNlcnQuXG4gICAgICBsZXQgaW5kZXggPSB1cHBlckJvdW5kKFxuICAgICAgICBvcmlnaW5hbExpbmUsXG4gICAgICAgIHNvdXJjZUNvbHVtbixcbiAgICAgICAgbWVtb2l6ZWRCaW5hcnlTZWFyY2gob3JpZ2luYWxMaW5lLCBzb3VyY2VDb2x1bW4sIG1lbW8sIHNvdXJjZUxpbmUpLFxuICAgICAgKTtcblxuICAgICAgbWVtby5sYXN0SW5kZXggPSArK2luZGV4O1xuICAgICAgaW5zZXJ0KG9yaWdpbmFsTGluZSwgaW5kZXgsIFtzb3VyY2VDb2x1bW4sIGksIHNlZ1tDT0xVTU5dXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydDxUPihhcnJheTogVFtdLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogVCkge1xuICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoOyBpID4gaW5kZXg7IGktLSkge1xuICAgIGFycmF5W2ldID0gYXJyYXlbaSAtIDFdO1xuICB9XG4gIGFycmF5W2luZGV4XSA9IHZhbHVlO1xufVxuXG4vLyBOdWxsIGFycmF5cyBhbGxvdyB1cyB0byB1c2Ugb3JkZXJlZCBpbmRleCBrZXlzIHdpdGhvdXQgYWN0dWFsbHkgYWxsb2NhdGluZyBjb250aWd1b3VzIG1lbW9yeSBsaWtlXG4vLyBhIHJlYWwgYXJyYXkuIFdlIHVzZSBhIG51bGwtcHJvdG90eXBlIG9iamVjdCB0byBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uIGFuZCBkZW9wdGltaXphdGlvbnMuXG4vLyBOdW1lcmljIHByb3BlcnRpZXMgb24gb2JqZWN0cyBhcmUgbWFnaWNhbGx5IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIGVuZ2luZSByZWdhcmRsZXNzIG9mXG4vLyB0aGUgaW5zZXJ0aW9uIG9yZGVyLiBTbywgYnkgc2V0dGluZyBhbnkgbnVtZXJpYyBrZXlzLCBldmVuIG91dCBvZiBvcmRlciwgd2UnbGwgZ2V0IGFzY2VuZGluZ1xuLy8gb3JkZXIgd2hlbiBpdGVyYXRpbmcgd2l0aCBmb3ItaW4uXG5mdW5jdGlvbiBidWlsZE51bGxBcnJheTxUIGV4dGVuZHMgeyBfX3Byb3RvX186IG51bGwgfT4oKTogVCB7XG4gIHJldHVybiB7IF9fcHJvdG9fXzogbnVsbCB9IGFzIFQ7XG59XG4iLCAiaW1wb3J0IHsgVHJhY2VNYXAsIHByZXNvcnRlZERlY29kZWRNYXAsIGRlY29kZWRNYXBwaW5ncyB9IGZyb20gJy4vdHJhY2UtbWFwcGluZyc7XG5pbXBvcnQge1xuICBDT0xVTU4sXG4gIFNPVVJDRVNfSU5ERVgsXG4gIFNPVVJDRV9MSU5FLFxuICBTT1VSQ0VfQ09MVU1OLFxuICBOQU1FU19JTkRFWCxcbn0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRGVjb2RlZFNvdXJjZU1hcCxcbiAgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCxcbiAgU2VjdGlvblhJbnB1dCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxudHlwZSBBbnlNYXAgPSB7XG4gIG5ldyAobWFwOiBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCk6IFRyYWNlTWFwO1xuICAobWFwOiBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCk6IFRyYWNlTWFwO1xufTtcblxuZXhwb3J0IGNvbnN0IEFueU1hcDogQW55TWFwID0gZnVuY3Rpb24gKG1hcCwgbWFwVXJsKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKG1hcCk7XG5cbiAgaWYgKCEoJ3NlY3Rpb25zJyBpbiBwYXJzZWQpKSB7XG4gICAgcmV0dXJuIG5ldyBUcmFjZU1hcChwYXJzZWQgYXMgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCB8IEVuY29kZWRTb3VyY2VNYXBYSW5wdXQsIG1hcFVybCk7XG4gIH1cblxuICBjb25zdCBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10gPSBbXTtcbiAgY29uc3Qgc291cmNlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc291cmNlc0NvbnRlbnQ6IChzdHJpbmcgfCBudWxsKVtdID0gW107XG4gIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpZ25vcmVMaXN0OiBudW1iZXJbXSA9IFtdO1xuXG4gIHJlY3Vyc2UoXG4gICAgcGFyc2VkLFxuICAgIG1hcFVybCxcbiAgICBtYXBwaW5ncyxcbiAgICBzb3VyY2VzLFxuICAgIHNvdXJjZXNDb250ZW50LFxuICAgIG5hbWVzLFxuICAgIGlnbm9yZUxpc3QsXG4gICAgMCxcbiAgICAwLFxuICAgIEluZmluaXR5LFxuICAgIEluZmluaXR5LFxuICApO1xuXG4gIGNvbnN0IGpvaW5lZDogRGVjb2RlZFNvdXJjZU1hcCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6IHBhcnNlZC5maWxlLFxuICAgIG5hbWVzLFxuICAgIHNvdXJjZXMsXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdCxcbiAgfTtcblxuICByZXR1cm4gcHJlc29ydGVkRGVjb2RlZE1hcChqb2luZWQpO1xufSBhcyBBbnlNYXA7XG5cbmZ1bmN0aW9uIHBhcnNlPFQ+KG1hcDogVCk6IEV4Y2x1ZGU8VCwgc3RyaW5nPiB7XG4gIHJldHVybiB0eXBlb2YgbWFwID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UobWFwKSA6IG1hcDtcbn1cblxuZnVuY3Rpb24gcmVjdXJzZShcbiAgaW5wdXQ6IFNlY3Rpb25lZFNvdXJjZU1hcFhJbnB1dCxcbiAgbWFwVXJsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIHNvdXJjZXM6IHN0cmluZ1tdLFxuICBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10sXG4gIG5hbWVzOiBzdHJpbmdbXSxcbiAgaWdub3JlTGlzdDogbnVtYmVyW10sXG4gIGxpbmVPZmZzZXQ6IG51bWJlcixcbiAgY29sdW1uT2Zmc2V0OiBudW1iZXIsXG4gIHN0b3BMaW5lOiBudW1iZXIsXG4gIHN0b3BDb2x1bW46IG51bWJlcixcbikge1xuICBjb25zdCB7IHNlY3Rpb25zIH0gPSBpbnB1dDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHsgbWFwLCBvZmZzZXQgfSA9IHNlY3Rpb25zW2ldO1xuXG4gICAgbGV0IHNsID0gc3RvcExpbmU7XG4gICAgbGV0IHNjID0gc3RvcENvbHVtbjtcbiAgICBpZiAoaSArIDEgPCBzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSBzZWN0aW9uc1tpICsgMV0ub2Zmc2V0O1xuICAgICAgc2wgPSBNYXRoLm1pbihzdG9wTGluZSwgbGluZU9mZnNldCArIG5leHRPZmZzZXQubGluZSk7XG5cbiAgICAgIGlmIChzbCA9PT0gc3RvcExpbmUpIHtcbiAgICAgICAgc2MgPSBNYXRoLm1pbihzdG9wQ29sdW1uLCBjb2x1bW5PZmZzZXQgKyBuZXh0T2Zmc2V0LmNvbHVtbik7XG4gICAgICB9IGVsc2UgaWYgKHNsIDwgc3RvcExpbmUpIHtcbiAgICAgICAgc2MgPSBjb2x1bW5PZmZzZXQgKyBuZXh0T2Zmc2V0LmNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTZWN0aW9uKFxuICAgICAgbWFwLFxuICAgICAgbWFwVXJsLFxuICAgICAgbWFwcGluZ3MsXG4gICAgICBzb3VyY2VzLFxuICAgICAgc291cmNlc0NvbnRlbnQsXG4gICAgICBuYW1lcyxcbiAgICAgIGlnbm9yZUxpc3QsXG4gICAgICBsaW5lT2Zmc2V0ICsgb2Zmc2V0LmxpbmUsXG4gICAgICBjb2x1bW5PZmZzZXQgKyBvZmZzZXQuY29sdW1uLFxuICAgICAgc2wsXG4gICAgICBzYyxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFNlY3Rpb24oXG4gIGlucHV0OiBTZWN0aW9uWElucHV0WydtYXAnXSxcbiAgbWFwVXJsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIHNvdXJjZXM6IHN0cmluZ1tdLFxuICBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10sXG4gIG5hbWVzOiBzdHJpbmdbXSxcbiAgaWdub3JlTGlzdDogbnVtYmVyW10sXG4gIGxpbmVPZmZzZXQ6IG51bWJlcixcbiAgY29sdW1uT2Zmc2V0OiBudW1iZXIsXG4gIHN0b3BMaW5lOiBudW1iZXIsXG4gIHN0b3BDb2x1bW46IG51bWJlcixcbikge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZShpbnB1dCk7XG4gIGlmICgnc2VjdGlvbnMnIGluIHBhcnNlZCkgcmV0dXJuIHJlY3Vyc2UoLi4uKGFyZ3VtZW50cyBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHJlY3Vyc2U+KSk7XG5cbiAgY29uc3QgbWFwID0gbmV3IFRyYWNlTWFwKHBhcnNlZCwgbWFwVXJsKTtcbiAgY29uc3Qgc291cmNlc09mZnNldCA9IHNvdXJjZXMubGVuZ3RoO1xuICBjb25zdCBuYW1lc09mZnNldCA9IG5hbWVzLmxlbmd0aDtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuICBjb25zdCB7IHJlc29sdmVkU291cmNlcywgc291cmNlc0NvbnRlbnQ6IGNvbnRlbnRzLCBpZ25vcmVMaXN0OiBpZ25vcmVzIH0gPSBtYXA7XG5cbiAgYXBwZW5kKHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyk7XG4gIGFwcGVuZChuYW1lcywgbWFwLm5hbWVzKTtcblxuICBpZiAoY29udGVudHMpIGFwcGVuZChzb3VyY2VzQ29udGVudCwgY29udGVudHMpO1xuICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb2x2ZWRTb3VyY2VzLmxlbmd0aDsgaSsrKSBzb3VyY2VzQ29udGVudC5wdXNoKG51bGwpO1xuXG4gIGlmIChpZ25vcmVzKSBmb3IgKGxldCBpID0gMDsgaSA8IGlnbm9yZXMubGVuZ3RoOyBpKyspIGlnbm9yZUxpc3QucHVzaChpZ25vcmVzW2ldICsgc291cmNlc09mZnNldCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZUkgPSBsaW5lT2Zmc2V0ICsgaTtcblxuICAgIC8vIFdlIGNhbiBvbmx5IGFkZCBzbyBtYW55IGxpbmVzIGJlZm9yZSB3ZSBzdGVwIGludG8gdGhlIHJhbmdlIHRoYXQgdGhlIG5leHQgc2VjdGlvbidzIG1hcFxuICAgIC8vIGNvbnRyb2xzLiBXaGVuIHdlIGdldCB0byB0aGUgbGFzdCBsaW5lLCB0aGVuIHdlJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBzZWdtZW50cyB0byBzZWUgaWZcbiAgICAvLyB0aGV5J3ZlIGNyb3NzZWQgaW50byB0aGUgY29sdW1uIHJhbmdlLiBCdXQgaXQgbWF5IG5vdCBoYXZlIGFueSBjb2x1bW5zIHRoYXQgb3ZlcnN0ZXAsIHNvIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byBjaGVjayB0aGF0IHdlIGRvbid0IG92ZXJzdGVwIGxpbmVzLCB0b28uXG4gICAgaWYgKGxpbmVJID4gc3RvcExpbmUpIHJldHVybjtcblxuICAgIC8vIFRoZSBvdXQgbGluZSBtYXkgYWxyZWFkeSBleGlzdCBpbiBtYXBwaW5ncyAoaWYgd2UncmUgY29udGludWluZyB0aGUgbGluZSBzdGFydGVkIGJ5IGFcbiAgICAvLyBwcmV2aW91cyBzZWN0aW9uKS4gT3IsIHdlIG1heSBoYXZlIGp1bXBlZCBhaGVhZCBzZXZlcmFsIGxpbmVzIHRvIHN0YXJ0IHRoaXMgc2VjdGlvbi5cbiAgICBjb25zdCBvdXQgPSBnZXRMaW5lKG1hcHBpbmdzLCBsaW5lSSk7XG4gICAgLy8gT24gdGhlIDB0aCBsb29wLCB0aGUgc2VjdGlvbidzIGNvbHVtbiBvZmZzZXQgc2hpZnRzIHVzIGZvcndhcmQuIE9uIGFsbCBvdGhlciBsaW5lcyAoc2luY2UgdGhlXG4gICAgLy8gbWFwIGNhbiBiZSBtdWx0aXBsZSBsaW5lcyksIGl0IGRvZXNuJ3QuXG4gICAgY29uc3QgY09mZnNldCA9IGkgPT09IDAgPyBjb2x1bW5PZmZzZXQgOiAwO1xuXG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWcgPSBsaW5lW2pdO1xuICAgICAgY29uc3QgY29sdW1uID0gY09mZnNldCArIHNlZ1tDT0xVTU5dO1xuXG4gICAgICAvLyBJZiB0aGlzIHNlZ21lbnQgc3RlcHMgaW50byB0aGUgY29sdW1uIHJhbmdlIHRoYXQgdGhlIG5leHQgc2VjdGlvbidzIG1hcCBjb250cm9scywgd2UgbmVlZFxuICAgICAgLy8gdG8gc3RvcCBlYXJseS5cbiAgICAgIGlmIChsaW5lSSA9PT0gc3RvcExpbmUgJiYgY29sdW1uID49IHN0b3BDb2x1bW4pIHJldHVybjtcblxuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgb3V0LnB1c2goW2NvbHVtbl0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlc0luZGV4ID0gc291cmNlc09mZnNldCArIHNlZ1tTT1VSQ0VTX0lOREVYXTtcbiAgICAgIGNvbnN0IHNvdXJjZUxpbmUgPSBzZWdbU09VUkNFX0xJTkVdO1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc2VnW1NPVVJDRV9DT0xVTU5dO1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIHNlZy5sZW5ndGggPT09IDRcbiAgICAgICAgICA/IFtjb2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uXVxuICAgICAgICAgIDogW2NvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW4sIG5hbWVzT2Zmc2V0ICsgc2VnW05BTUVTX0lOREVYXV0sXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmQ8VD4oYXJyOiBUW10sIG90aGVyOiBUW10pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdGhlci5sZW5ndGg7IGkrKykgYXJyLnB1c2gob3RoZXJbaV0pO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lPFQ+KGFycjogVFtdW10sIGluZGV4OiBudW1iZXIpOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSBhcnJbaV0gPSBbXTtcbiAgcmV0dXJuIGFycltpbmRleF07XG59XG4iLCAiaW1wb3J0IHsgZW5jb2RlLCBkZWNvZGUgfSBmcm9tICdAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICcuL3Jlc29sdmUnO1xuaW1wb3J0IHN0cmlwRmlsZW5hbWUgZnJvbSAnLi9zdHJpcC1maWxlbmFtZSc7XG5pbXBvcnQgbWF5YmVTb3J0IGZyb20gJy4vc29ydCc7XG5pbXBvcnQgYnVpbGRCeVNvdXJjZXMgZnJvbSAnLi9ieS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgbWVtb2l6ZWRTdGF0ZSxcbiAgbWVtb2l6ZWRCaW5hcnlTZWFyY2gsXG4gIHVwcGVyQm91bmQsXG4gIGxvd2VyQm91bmQsXG4gIGZvdW5kIGFzIGJzRm91bmQsXG59IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5pbXBvcnQge1xuICBDT0xVTU4sXG4gIFNPVVJDRVNfSU5ERVgsXG4gIFNPVVJDRV9MSU5FLFxuICBTT1VSQ0VfQ09MVU1OLFxuICBOQU1FU19JTkRFWCxcbiAgUkVWX0dFTkVSQVRFRF9MSU5FLFxuICBSRVZfR0VORVJBVEVEX0NPTFVNTixcbn0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCwgUmV2ZXJzZVNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB0eXBlIHtcbiAgU291cmNlTWFwVjMsXG4gIERlY29kZWRTb3VyY2VNYXAsXG4gIEVuY29kZWRTb3VyY2VNYXAsXG4gIEludmFsaWRPcmlnaW5hbE1hcHBpbmcsXG4gIE9yaWdpbmFsTWFwcGluZyxcbiAgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcsXG4gIEdlbmVyYXRlZE1hcHBpbmcsXG4gIFNvdXJjZU1hcElucHV0LFxuICBOZWVkbGUsXG4gIFNvdXJjZU5lZWRsZSxcbiAgU291cmNlTWFwLFxuICBFYWNoTWFwcGluZyxcbiAgQmlhcyxcbiAgWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU291cmNlIH0gZnJvbSAnLi9ieS1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBNZW1vU3RhdGUgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5leHBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmV4cG9ydCB0eXBlIHtcbiAgU291cmNlTWFwLFxuICBEZWNvZGVkU291cmNlTWFwLFxuICBFbmNvZGVkU291cmNlTWFwLFxuICBTZWN0aW9uLFxuICBTZWN0aW9uZWRTb3VyY2VNYXAsXG4gIFNvdXJjZU1hcFYzLFxuICBCaWFzLFxuICBFYWNoTWFwcGluZyxcbiAgR2VuZXJhdGVkTWFwcGluZyxcbiAgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcsXG4gIEludmFsaWRPcmlnaW5hbE1hcHBpbmcsXG4gIE5lZWRsZSxcbiAgT3JpZ2luYWxNYXBwaW5nLFxuICBPcmlnaW5hbE1hcHBpbmcgYXMgTWFwcGluZyxcbiAgU2VjdGlvbmVkU291cmNlTWFwSW5wdXQsXG4gIFNvdXJjZU1hcElucHV0LFxuICBTb3VyY2VOZWVkbGUsXG4gIFhJbnB1dCxcbiAgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFB1YmxpY01hcCB7XG4gIF9lbmNvZGVkOiBUcmFjZU1hcFsnX2VuY29kZWQnXTtcbiAgX2RlY29kZWQ6IFRyYWNlTWFwWydfZGVjb2RlZCddO1xuICBfZGVjb2RlZE1lbW86IFRyYWNlTWFwWydfZGVjb2RlZE1lbW8nXTtcbiAgX2J5U291cmNlczogVHJhY2VNYXBbJ19ieVNvdXJjZXMnXTtcbiAgX2J5U291cmNlTWVtb3M6IFRyYWNlTWFwWydfYnlTb3VyY2VNZW1vcyddO1xufVxuXG5jb25zdCBMSU5FX0dUUl9aRVJPID0gJ2BsaW5lYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIChsaW5lcyBzdGFydCBhdCBsaW5lIDEpJztcbmNvbnN0IENPTF9HVFJfRVFfWkVSTyA9ICdgY29sdW1uYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIChjb2x1bW5zIHN0YXJ0IGF0IGNvbHVtbiAwKSc7XG5cbmV4cG9ydCBjb25zdCBMRUFTVF9VUFBFUl9CT1VORCA9IC0xO1xuZXhwb3J0IGNvbnN0IEdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblxuZXhwb3J0IHsgQW55TWFwIH0gZnJvbSAnLi9hbnktbWFwJztcblxuZXhwb3J0IGNsYXNzIFRyYWNlTWFwIGltcGxlbWVudHMgU291cmNlTWFwIHtcbiAgZGVjbGFyZSB2ZXJzaW9uOiBTb3VyY2VNYXBWM1sndmVyc2lvbiddO1xuICBkZWNsYXJlIGZpbGU6IFNvdXJjZU1hcFYzWydmaWxlJ107XG4gIGRlY2xhcmUgbmFtZXM6IFNvdXJjZU1hcFYzWyduYW1lcyddO1xuICBkZWNsYXJlIHNvdXJjZVJvb3Q6IFNvdXJjZU1hcFYzWydzb3VyY2VSb290J107XG4gIGRlY2xhcmUgc291cmNlczogU291cmNlTWFwVjNbJ3NvdXJjZXMnXTtcbiAgZGVjbGFyZSBzb3VyY2VzQ29udGVudDogU291cmNlTWFwVjNbJ3NvdXJjZXNDb250ZW50J107XG4gIGRlY2xhcmUgaWdub3JlTGlzdDogU291cmNlTWFwVjNbJ2lnbm9yZUxpc3QnXTtcblxuICBkZWNsYXJlIHJlc29sdmVkU291cmNlczogc3RyaW5nW107XG4gIHByaXZhdGUgZGVjbGFyZSBfZW5jb2RlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgZGVjbGFyZSBfZGVjb2RlZDogU291cmNlTWFwU2VnbWVudFtdW10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZGVjbGFyZSBfZGVjb2RlZE1lbW86IE1lbW9TdGF0ZTtcblxuICBwcml2YXRlIGRlY2xhcmUgX2J5U291cmNlczogU291cmNlW10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZGVjbGFyZSBfYnlTb3VyY2VNZW1vczogTWVtb1N0YXRlW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IobWFwOiBTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIG1hcCA9PT0gJ3N0cmluZyc7XG5cbiAgICBpZiAoIWlzU3RyaW5nICYmIChtYXAgYXMgdW5rbm93biBhcyB7IF9kZWNvZGVkTWVtbzogYW55IH0pLl9kZWNvZGVkTWVtbykgcmV0dXJuIG1hcCBhcyBUcmFjZU1hcDtcblxuICAgIGNvbnN0IHBhcnNlZCA9IChpc1N0cmluZyA/IEpTT04ucGFyc2UobWFwKSA6IG1hcCkgYXMgRGVjb2RlZFNvdXJjZU1hcCB8IEVuY29kZWRTb3VyY2VNYXA7XG5cbiAgICBjb25zdCB7IHZlcnNpb24sIGZpbGUsIG5hbWVzLCBzb3VyY2VSb290LCBzb3VyY2VzLCBzb3VyY2VzQ29udGVudCB9ID0gcGFyc2VkO1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW107XG4gICAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgICB0aGlzLnNvdXJjZXMgPSBzb3VyY2VzO1xuICAgIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgICB0aGlzLmlnbm9yZUxpc3QgPSBwYXJzZWQuaWdub3JlTGlzdCB8fCAocGFyc2VkIGFzIFhJbnB1dCkueF9nb29nbGVfaWdub3JlTGlzdCB8fCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmcm9tID0gcmVzb2x2ZShzb3VyY2VSb290IHx8ICcnLCBzdHJpcEZpbGVuYW1lKG1hcFVybCkpO1xuICAgIHRoaXMucmVzb2x2ZWRTb3VyY2VzID0gc291cmNlcy5tYXAoKHMpID0+IHJlc29sdmUocyB8fCAnJywgZnJvbSkpO1xuXG4gICAgY29uc3QgeyBtYXBwaW5ncyB9ID0gcGFyc2VkO1xuICAgIGlmICh0eXBlb2YgbWFwcGluZ3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9lbmNvZGVkID0gbWFwcGluZ3M7XG4gICAgICB0aGlzLl9kZWNvZGVkID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbmNvZGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGVjb2RlZCA9IG1heWJlU29ydChtYXBwaW5ncywgaXNTdHJpbmcpO1xuICAgIH1cblxuICAgIHRoaXMuX2RlY29kZWRNZW1vID0gbWVtb2l6ZWRTdGF0ZSgpO1xuICAgIHRoaXMuX2J5U291cmNlcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ieVNvdXJjZU1lbW9zID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVHlwZXNjcmlwdCBkb2Vzbid0IGFsbG93IGZyaWVuZCBhY2Nlc3MgdG8gcHJpdmF0ZSBmaWVsZHMsIHNvIHRoaXMganVzdCBjYXN0cyB0aGUgbWFwIGludG8gYSB0eXBlXG4gKiB3aXRoIHB1YmxpYyBhY2Nlc3MgbW9kaWZpZXJzLlxuICovXG5mdW5jdGlvbiBjYXN0KG1hcDogdW5rbm93bik6IFB1YmxpY01hcCB7XG4gIHJldHVybiBtYXAgYXMgYW55O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVuY29kZWQgKFZMUSBzdHJpbmcpIGZvcm0gb2YgdGhlIFNvdXJjZU1hcCdzIG1hcHBpbmdzIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlZE1hcHBpbmdzKG1hcDogVHJhY2VNYXApOiBFbmNvZGVkU291cmNlTWFwWydtYXBwaW5ncyddIHtcbiAgcmV0dXJuIChjYXN0KG1hcCkuX2VuY29kZWQgPz89IGVuY29kZShjYXN0KG1hcCkuX2RlY29kZWQhKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVjb2RlZCAoYXJyYXkgb2YgbGluZXMgb2Ygc2VnbWVudHMpIGZvcm0gb2YgdGhlIFNvdXJjZU1hcCdzIG1hcHBpbmdzIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcDogVHJhY2VNYXApOiBSZWFkb25seTxEZWNvZGVkU291cmNlTWFwWydtYXBwaW5ncyddPiB7XG4gIHJldHVybiAoY2FzdChtYXApLl9kZWNvZGVkIHx8PSBkZWNvZGUoY2FzdChtYXApLl9lbmNvZGVkISkpO1xufVxuXG4vKipcbiAqIEEgbG93LWxldmVsIEFQSSB0byBmaW5kIHRoZSBzZWdtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiAodGhpbmssIGZyb20gYVxuICogc3RhY2sgdHJhY2UpLiBMaW5lIGFuZCBjb2x1bW4gaGVyZSBhcmUgMC1iYXNlZCwgdW5saWtlIGBvcmlnaW5hbFBvc2l0aW9uRm9yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlU2VnbWVudChcbiAgbWFwOiBUcmFjZU1hcCxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbik6IFJlYWRvbmx5PFNvdXJjZU1hcFNlZ21lbnQ+IHwgbnVsbCB7XG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVkTWFwcGluZ3MobWFwKTtcblxuICAvLyBJdCdzIGNvbW1vbiBmb3IgcGFyZW50IHNvdXJjZSBtYXBzIHRvIGhhdmUgcG9pbnRlcnMgdG8gbGluZXMgdGhhdCBoYXZlIG5vXG4gIC8vIG1hcHBpbmcgKGxpa2UgYSBcIi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiKSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBmaWxlLlxuICBpZiAobGluZSA+PSBkZWNvZGVkLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBkZWNvZGVkW2xpbmVdO1xuICBjb25zdCBpbmRleCA9IHRyYWNlU2VnbWVudEludGVybmFsKFxuICAgIHNlZ21lbnRzLFxuICAgIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sXG4gICAgbGluZSxcbiAgICBjb2x1bW4sXG4gICAgR1JFQVRFU1RfTE9XRVJfQk9VTkQsXG4gICk7XG5cbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBzZWdtZW50c1tpbmRleF07XG59XG5cbi8qKlxuICogQSBoaWdoZXItbGV2ZWwgQVBJIHRvIGZpbmQgdGhlIHNvdXJjZS9saW5lL2NvbHVtbiBhc3NvY2lhdGVkIHdpdGggYSBnZW5lcmF0ZWQgbGluZS9jb2x1bW5cbiAqICh0aGluaywgZnJvbSBhIHN0YWNrIHRyYWNlKS4gTGluZSBpcyAxLWJhc2VkLCBidXQgY29sdW1uIGlzIDAtYmFzZWQsIGR1ZSB0byBsZWdhY3kgYmVoYXZpb3IgaW5cbiAqIGBzb3VyY2UtbWFwYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWxQb3NpdGlvbkZvcihcbiAgbWFwOiBUcmFjZU1hcCxcbiAgbmVlZGxlOiBOZWVkbGUsXG4pOiBPcmlnaW5hbE1hcHBpbmcgfCBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nIHtcbiAgbGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG4gIGxpbmUtLTtcbiAgaWYgKGxpbmUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoTElORV9HVFJfWkVSTyk7XG4gIGlmIChjb2x1bW4gPCAwKSB0aHJvdyBuZXcgRXJyb3IoQ09MX0dUUl9FUV9aRVJPKTtcblxuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cbiAgLy8gSXQncyBjb21tb24gZm9yIHBhcmVudCBzb3VyY2UgbWFwcyB0byBoYXZlIHBvaW50ZXJzIHRvIGxpbmVzIHRoYXQgaGF2ZSBub1xuICAvLyBtYXBwaW5nIChsaWtlIGEgXCIvLyMgc291cmNlTWFwcGluZ1VSTD1cIikgYXQgdGhlIGVuZCBvZiB0aGUgY2hpbGQgZmlsZS5cbiAgaWYgKGxpbmUgPj0gZGVjb2RlZC5sZW5ndGgpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV07XG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gICAgc2VnbWVudHMsXG4gICAgY2FzdChtYXApLl9kZWNvZGVkTWVtbyxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBiaWFzIHx8IEdSRUFURVNUX0xPV0VSX0JPVU5ELFxuICApO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaW5kZXhdO1xuICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDEpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgcmV0dXJuIE9NYXBwaW5nKFxuICAgIHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSxcbiAgICBzZWdtZW50W1NPVVJDRV9MSU5FXSArIDEsXG4gICAgc2VnbWVudFtTT1VSQ0VfQ09MVU1OXSxcbiAgICBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwsXG4gICk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBwb3NpdGlvbiBvZiB0aGUgcHJvdmlkZWQgc291cmNlL2xpbmUvY29sdW1uIHNvdXJjZSBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uRm9yKFxuICBtYXA6IFRyYWNlTWFwLFxuICBuZWVkbGU6IFNvdXJjZU5lZWRsZSxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB7XG4gIGNvbnN0IHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgcmV0dXJuIGdlbmVyYXRlZFBvc2l0aW9uKG1hcCwgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfHwgR1JFQVRFU1RfTE9XRVJfQk9VTkQsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHBvc2l0aW9ucyBvZiB0aGUgcHJvdmlkZWQgc291cmNlL2xpbmUvY29sdW1uIHNvdXJjZSBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihtYXA6IFRyYWNlTWFwLCBuZWVkbGU6IFNvdXJjZU5lZWRsZSk6IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGNvbnN0IHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgLy8gU291cmNlTWFwQ29uc3VtZXIgdXNlcyBMRUFTVF9VUFBFUl9CT1VORCBmb3Igc29tZSByZWFzb24sIHNvIHdlIGZvbGxvdyBzdWl0LlxuICByZXR1cm4gZ2VuZXJhdGVkUG9zaXRpb24obWFwLCBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCBMRUFTVF9VUFBFUl9CT1VORCwgdHJ1ZSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgZWFjaCBtYXBwaW5nIGluIGdlbmVyYXRlZCBwb3NpdGlvbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hNYXBwaW5nKG1hcDogVHJhY2VNYXAsIGNiOiAobWFwcGluZzogRWFjaE1hcHBpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuICBjb25zdCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZExpbmUgPSBpICsgMTtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbiA9IHNlZ1swXTtcbiAgICAgIGxldCBzb3VyY2UgPSBudWxsO1xuICAgICAgbGV0IG9yaWdpbmFsTGluZSA9IG51bGw7XG4gICAgICBsZXQgb3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICAgICAgbGV0IG5hbWUgPSBudWxsO1xuICAgICAgaWYgKHNlZy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgc291cmNlID0gcmVzb2x2ZWRTb3VyY2VzW3NlZ1sxXV07XG4gICAgICAgIG9yaWdpbmFsTGluZSA9IHNlZ1syXSArIDE7XG4gICAgICAgIG9yaWdpbmFsQ29sdW1uID0gc2VnWzNdO1xuICAgICAgfVxuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDUpIG5hbWUgPSBuYW1lc1tzZWdbNF1dO1xuXG4gICAgICBjYih7XG4gICAgICAgIGdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBvcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgfSBhcyBFYWNoTWFwcGluZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUluZGV4KG1hcDogVHJhY2VNYXAsIHNvdXJjZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgeyBzb3VyY2VzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgbGV0IGluZGV4ID0gc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG4gIGlmIChpbmRleCA9PT0gLTEpIGluZGV4ID0gcmVzb2x2ZWRTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgcGFydGljdWxhciBzb3VyY2UsIGlmIGl0cyBmb3VuZC4gUmV0dXJucyBudWxsIGlmIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZUNvbnRlbnRGb3IobWFwOiBUcmFjZU1hcCwgc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBzb3VyY2VzQ29udGVudCB9ID0gbWFwO1xuICBpZiAoc291cmNlc0NvbnRlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGluZGV4ID0gc291cmNlSW5kZXgobWFwLCBzb3VyY2UpO1xuICByZXR1cm4gaW5kZXggPT09IC0xID8gbnVsbCA6IHNvdXJjZXNDb250ZW50W2luZGV4XTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBzb3VyY2UgaXMgbWFya2VkIHRvIGlnbm9yZSBieSB0aGUgc291cmNlIG1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWdub3JlZChtYXA6IFRyYWNlTWFwLCBzb3VyY2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGlnbm9yZUxpc3QgfSA9IG1hcDtcbiAgaWYgKGlnbm9yZUxpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbmRleCA9IHNvdXJjZUluZGV4KG1hcCwgc291cmNlKTtcbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/IGZhbHNlIDogaWdub3JlTGlzdC5pbmNsdWRlcyhpbmRleCk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdGhhdCBza2lwcyBzb3J0aW5nIG9mIHRoZSBpbnB1dCBtYXAncyBtYXBwaW5ncyBhcnJheSwgd2hpY2ggY2FuIGJlIGV4cGVuc2l2ZSBmb3IgbGFyZ2VyXG4gKiBtYXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc29ydGVkRGVjb2RlZE1hcChtYXA6IERlY29kZWRTb3VyY2VNYXAsIG1hcFVybD86IHN0cmluZyk6IFRyYWNlTWFwIHtcbiAgY29uc3QgdHJhY2VyID0gbmV3IFRyYWNlTWFwKGNsb25lKG1hcCwgW10pLCBtYXBVcmwpO1xuICBjYXN0KHRyYWNlcikuX2RlY29kZWQgPSBtYXAubWFwcGluZ3M7XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZGVjb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlZE1hcChcbiAgbWFwOiBUcmFjZU1hcCxcbik6IE9taXQ8RGVjb2RlZFNvdXJjZU1hcCwgJ21hcHBpbmdzJz4gJiB7IG1hcHBpbmdzOiByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXSB9IHtcbiAgcmV0dXJuIGNsb25lKG1hcCwgZGVjb2RlZE1hcHBpbmdzKG1hcCkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2VtYXAgb2JqZWN0ICh3aXRoIGVuY29kZWQgbWFwcGluZ3MpIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgbGlicmFyeSB0aGF0IGV4cGVjdHNcbiAqIGEgc291cmNlbWFwLCBvciB0byBKU09OLnN0cmluZ2lmeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZWRNYXAobWFwOiBUcmFjZU1hcCk6IEVuY29kZWRTb3VyY2VNYXAge1xuICByZXR1cm4gY2xvbmUobWFwLCBlbmNvZGVkTWFwcGluZ3MobWFwKSk7XG59XG5cbmZ1bmN0aW9uIGNsb25lPFQgZXh0ZW5kcyBzdHJpbmcgfCByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXT4oXG4gIG1hcDogVHJhY2VNYXAgfCBEZWNvZGVkU291cmNlTWFwLFxuICBtYXBwaW5nczogVCxcbik6IFQgZXh0ZW5kcyBzdHJpbmcgPyBFbmNvZGVkU291cmNlTWFwIDogRGVjb2RlZFNvdXJjZU1hcCB7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogbWFwLnZlcnNpb24sXG4gICAgZmlsZTogbWFwLmZpbGUsXG4gICAgbmFtZXM6IG1hcC5uYW1lcyxcbiAgICBzb3VyY2VSb290OiBtYXAuc291cmNlUm9vdCxcbiAgICBzb3VyY2VzOiBtYXAuc291cmNlcyxcbiAgICBzb3VyY2VzQ29udGVudDogbWFwLnNvdXJjZXNDb250ZW50LFxuICAgIG1hcHBpbmdzLFxuICAgIGlnbm9yZUxpc3Q6IG1hcC5pZ25vcmVMaXN0IHx8IChtYXAgYXMgWElucHV0KS54X2dvb2dsZV9pZ25vcmVMaXN0LFxuICB9IGFzIGFueTtcbn1cblxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlOiBudWxsLCBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwsIG5hbWU6IG51bGwpOiBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nO1xuZnVuY3Rpb24gT01hcHBpbmcoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuKTogT3JpZ2luYWxNYXBwaW5nO1xuZnVuY3Rpb24gT01hcHBpbmcoXG4gIHNvdXJjZTogc3RyaW5nIHwgbnVsbCxcbiAgbGluZTogbnVtYmVyIHwgbnVsbCxcbiAgY29sdW1uOiBudW1iZXIgfCBudWxsLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuKTogT3JpZ2luYWxNYXBwaW5nIHwgSW52YWxpZE9yaWdpbmFsTWFwcGluZyB7XG4gIHJldHVybiB7IHNvdXJjZSwgbGluZSwgY29sdW1uLCBuYW1lIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiBHTWFwcGluZyhsaW5lOiBudWxsLCBjb2x1bW46IG51bGwpOiBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZztcbmZ1bmN0aW9uIEdNYXBwaW5nKGxpbmU6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gR01hcHBpbmcoXG4gIGxpbmU6IG51bWJlciB8IG51bGwsXG4gIGNvbHVtbjogbnVtYmVyIHwgbnVsbCxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB7XG4gIHJldHVybiB7IGxpbmUsIGNvbHVtbiB9IGFzIGFueTtcbn1cblxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBTb3VyY2VNYXBTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IG51bWJlcjtcbmZ1bmN0aW9uIHRyYWNlU2VnbWVudEludGVybmFsKFxuICBzZWdtZW50czogUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbWVtbzogTWVtb1N0YXRlLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuKTogbnVtYmVyO1xuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBudW1iZXIge1xuICBsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcbiAgaWYgKGJzRm91bmQpIHtcbiAgICBpbmRleCA9IChiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCA/IHVwcGVyQm91bmQgOiBsb3dlckJvdW5kKShzZWdtZW50cywgY29sdW1uLCBpbmRleCk7XG4gIH0gZWxzZSBpZiAoYmlhcyA9PT0gTEVBU1RfVVBQRVJfQk9VTkQpIGluZGV4Kys7XG5cbiAgaWYgKGluZGV4ID09PSAtMSB8fCBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoKSByZXR1cm4gLTE7XG4gIHJldHVybiBpbmRleDtcbn1cblxuZnVuY3Rpb24gc2xpY2VHZW5lcmF0ZWRQb3NpdGlvbnMoXG4gIHNlZ21lbnRzOiBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBHZW5lcmF0ZWRNYXBwaW5nW10ge1xuICBsZXQgbWluID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuXG4gIC8vIFdlIGlnbm9yZWQgdGhlIGJpYXMgd2hlbiB0cmFjaW5nIHRoZSBzZWdtZW50IHNvIHRoYXQgd2UncmUgZ3Vhcm5hdGVlZCB0byBmaW5kIHRoZSBmaXJzdCAoaW5cbiAgLy8gaW5zZXJ0aW9uIG9yZGVyKSBzZWdtZW50IHRoYXQgbWF0Y2hlZC4gRXZlbiBpZiB3ZSBkaWQgcmVzcGVjdCB0aGUgYmlhcyB3aGVuIHRyYWNpbmcsIHdlIHdvdWxkXG4gIC8vIHN0aWxsIG5lZWQgdG8gY2FsbCBgbG93ZXJCb3VuZCgpYCB0byBmaW5kIHRoZSBmaXJzdCBzZWdtZW50LCB3aGljaCBpcyBzbG93ZXIgdGhhbiBqdXN0IGxvb2tpbmdcbiAgLy8gZm9yIHRoZSBHUkVBVEVTVF9MT1dFUl9CT1VORCB0byBiZWdpbiB3aXRoLiBUaGUgb25seSBkaWZmZXJlbmNlIHRoYXQgbWF0dGVycyBmb3IgdXMgaXMgd2hlbiB0aGVcbiAgLy8gYmluYXJ5IHNlYXJjaCBkaWRuJ3QgbWF0Y2gsIGluIHdoaWNoIGNhc2UgR1JFQVRFU1RfTE9XRVJfQk9VTkQganVzdCBuZWVkcyB0byBpbmNyZW1lbnQgdG9cbiAgLy8gbWF0Y2ggTEVBU1RfVVBQRVJfQk9VTkQuXG4gIGlmICghYnNGb3VuZCAmJiBiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCkgbWluKys7XG5cbiAgaWYgKG1pbiA9PT0gLTEgfHwgbWluID09PSBzZWdtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAvLyBXZSBtYXkgaGF2ZSBmb3VuZCB0aGUgc2VnbWVudCB0aGF0IHN0YXJ0ZWQgYXQgYW4gZWFybGllciBjb2x1bW4uIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gd2VcbiAgLy8gbmVlZCB0byBzbGljZSBhbGwgZ2VuZXJhdGVkIHNlZ21lbnRzIHRoYXQgbWF0Y2ggX3RoYXRfIGNvbHVtbiwgYmVjYXVzZSBhbGwgc3VjaCBzZWdtZW50cyBzcGFuXG4gIC8vIHRvIG91ciBkZXNpcmVkIGNvbHVtbi5cbiAgY29uc3QgbWF0Y2hlZENvbHVtbiA9IGJzRm91bmQgPyBjb2x1bW4gOiBzZWdtZW50c1ttaW5dW0NPTFVNTl07XG5cbiAgLy8gVGhlIGJpbmFyeSBzZWFyY2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgbG93ZXIgYm91bmQgd2hlbiBhIG1hdGNoIHdhc24ndCBmb3VuZC5cbiAgaWYgKCFic0ZvdW5kKSBtaW4gPSBsb3dlckJvdW5kKHNlZ21lbnRzLCBtYXRjaGVkQ29sdW1uLCBtaW4pO1xuICBjb25zdCBtYXggPSB1cHBlckJvdW5kKHNlZ21lbnRzLCBtYXRjaGVkQ29sdW1uLCBtaW4pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKDsgbWluIDw9IG1heDsgbWluKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbbWluXTtcbiAgICByZXN1bHQucHVzaChHTWFwcGluZyhzZWdtZW50W1JFVl9HRU5FUkFURURfTElORV0gKyAxLCBzZWdtZW50W1JFVl9HRU5FUkFURURfQ09MVU1OXSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uKFxuICBtYXA6IFRyYWNlTWFwLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbiAgYWxsOiBmYWxzZSxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZztcbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uKFxuICBtYXA6IFRyYWNlTWFwLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbiAgYWxsOiB0cnVlLFxuKTogR2VuZXJhdGVkTWFwcGluZ1tdO1xuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IGJvb2xlYW4sXG4pOiBHZW5lcmF0ZWRNYXBwaW5nIHwgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcgfCBHZW5lcmF0ZWRNYXBwaW5nW10ge1xuICBsaW5lLS07XG4gIGlmIChsaW5lIDwgMCkgdGhyb3cgbmV3IEVycm9yKExJTkVfR1RSX1pFUk8pO1xuICBpZiAoY29sdW1uIDwgMCkgdGhyb3cgbmV3IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cbiAgY29uc3QgeyBzb3VyY2VzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgbGV0IHNvdXJjZUluZGV4ID0gc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG4gIGlmIChzb3VyY2VJbmRleCA9PT0gLTEpIHNvdXJjZUluZGV4ID0gcmVzb2x2ZWRTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKHNvdXJjZUluZGV4ID09PSAtMSkgcmV0dXJuIGFsbCA/IFtdIDogR01hcHBpbmcobnVsbCwgbnVsbCk7XG5cbiAgY29uc3QgZ2VuZXJhdGVkID0gKGNhc3QobWFwKS5fYnlTb3VyY2VzIHx8PSBidWlsZEJ5U291cmNlcyhcbiAgICBkZWNvZGVkTWFwcGluZ3MobWFwKSxcbiAgICAoY2FzdChtYXApLl9ieVNvdXJjZU1lbW9zID0gc291cmNlcy5tYXAobWVtb2l6ZWRTdGF0ZSkpLFxuICApKTtcblxuICBjb25zdCBzZWdtZW50cyA9IGdlbmVyYXRlZFtzb3VyY2VJbmRleF1bbGluZV07XG4gIGlmIChzZWdtZW50cyA9PSBudWxsKSByZXR1cm4gYWxsID8gW10gOiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBtZW1vID0gY2FzdChtYXApLl9ieVNvdXJjZU1lbW9zIVtzb3VyY2VJbmRleF07XG5cbiAgaWYgKGFsbCkgcmV0dXJuIHNsaWNlR2VuZXJhdGVkUG9zaXRpb25zKHNlZ21lbnRzLCBtZW1vLCBsaW5lLCBjb2x1bW4sIGJpYXMpO1xuXG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaW5kZXhdO1xuICByZXR1cm4gR01hcHBpbmcoc2VnbWVudFtSRVZfR0VORVJBVEVEX0xJTkVdICsgMSwgc2VnbWVudFtSRVZfR0VORVJBVEVEX0NPTFVNTl0pO1xufVxuIiwgInR5cGUgR2VuZXJhdGVkQ29sdW1uID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNvdXJjZUxpbmUgPSBudW1iZXI7XG50eXBlIFNvdXJjZUNvbHVtbiA9IG51bWJlcjtcbnR5cGUgTmFtZXNJbmRleCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW0dlbmVyYXRlZENvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbiwgTmFtZXNJbmRleF07XG5cbmV4cG9ydCBjb25zdCBDT0xVTU4gPSAwO1xuZXhwb3J0IGNvbnN0IFNPVVJDRVNfSU5ERVggPSAxO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9MSU5FID0gMjtcbmV4cG9ydCBjb25zdCBTT1VSQ0VfQ09MVU1OID0gMztcbmV4cG9ydCBjb25zdCBOQU1FU19JTkRFWCA9IDQ7XG4iLCAiaW1wb3J0IHsgU2V0QXJyYXksIHB1dCwgcmVtb3ZlIH0gZnJvbSAnQGpyaWRnZXdlbGwvc2V0LWFycmF5JztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyc7XG5pbXBvcnQgeyBUcmFjZU1hcCwgZGVjb2RlZE1hcHBpbmdzIH0gZnJvbSAnQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyc7XG5cbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBJbnB1dCB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IERlY29kZWRTb3VyY2VNYXAsIEVuY29kZWRTb3VyY2VNYXAsIFBvcywgTWFwcGluZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSB7IERlY29kZWRTb3VyY2VNYXAsIEVuY29kZWRTb3VyY2VNYXAsIE1hcHBpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgZmlsZT86IHN0cmluZyB8IG51bGw7XG4gIHNvdXJjZVJvb3Q/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgTk9fTkFNRSA9IC0xO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzdGF0ZSB0byBnZW5lcmF0ZSBhIHNvdXJjZW1hcC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbk1hcHBpbmcge1xuICBwcml2YXRlIGRlY2xhcmUgX25hbWVzOiBTZXRBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIGRlY2xhcmUgX3NvdXJjZXM6IFNldEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgZGVjbGFyZSBfc291cmNlc0NvbnRlbnQ6IChzdHJpbmcgfCBudWxsKVtdO1xuICBwcml2YXRlIGRlY2xhcmUgX21hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXTtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9pZ25vcmVMaXN0OiBTZXRBcnJheTxudW1iZXI+O1xuICBkZWNsYXJlIGZpbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgc291cmNlUm9vdDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7IGZpbGUsIHNvdXJjZVJvb3QgfTogT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgU2V0QXJyYXkoKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IFNldEFycmF5KCk7XG4gICAgdGhpcy5fc291cmNlc0NvbnRlbnQgPSBbXTtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgICB0aGlzLl9pZ25vcmVMaXN0ID0gbmV3IFNldEFycmF5KCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFB1YmxpY01hcCB7XG4gIF9uYW1lczogR2VuTWFwcGluZ1snX25hbWVzJ107XG4gIF9zb3VyY2VzOiBHZW5NYXBwaW5nWydfc291cmNlcyddO1xuICBfc291cmNlc0NvbnRlbnQ6IEdlbk1hcHBpbmdbJ19zb3VyY2VzQ29udGVudCddO1xuICBfbWFwcGluZ3M6IEdlbk1hcHBpbmdbJ19tYXBwaW5ncyddO1xuICBfaWdub3JlTGlzdDogR2VuTWFwcGluZ1snX2lnbm9yZUxpc3QnXTtcbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBtYXAgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3QobWFwOiB1bmtub3duKTogUHVibGljTWFwIHtcbiAgcmV0dXJuIG1hcCBhcyBhbnk7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgQVBJIHRvIGFzc29jaWF0ZSBhIGdlbmVyYXRlZCBwb3NpdGlvbiB3aXRoIGFuIG9yaWdpbmFsIHNvdXJjZSBwb3NpdGlvbi4gTGluZSBhbmRcbiAqIGNvbHVtbiBoZXJlIGFyZSAwLWJhc2VkLCB1bmxpa2UgYGFkZE1hcHBpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U/OiBudWxsLFxuICBzb3VyY2VMaW5lPzogbnVsbCxcbiAgc291cmNlQ29sdW1uPzogbnVsbCxcbiAgbmFtZT86IG51bGwsXG4gIGNvbnRlbnQ/OiBudWxsLFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWdtZW50KFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIGdlbkxpbmU6IG51bWJlcixcbiAgZ2VuQ29sdW1uOiBudW1iZXIsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBzb3VyY2VMaW5lOiBudW1iZXIsXG4gIHNvdXJjZUNvbHVtbjogbnVtYmVyLFxuICBuYW1lPzogbnVsbCxcbiAgY29udGVudD86IHN0cmluZyB8IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgY29udGVudD86IHN0cmluZyB8IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlPzogc3RyaW5nIHwgbnVsbCxcbiAgc291cmNlTGluZT86IG51bWJlciB8IG51bGwsXG4gIHNvdXJjZUNvbHVtbj86IG51bWJlciB8IG51bGwsXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQge1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIGZhbHNlLFxuICAgIG1hcCxcbiAgICBnZW5MaW5lLFxuICAgIGdlbkNvbHVtbixcbiAgICBzb3VyY2UsXG4gICAgc291cmNlTGluZSxcbiAgICBzb3VyY2VDb2x1bW4sXG4gICAgbmFtZSxcbiAgICBjb250ZW50LFxuICApO1xufVxuXG4vKipcbiAqIEEgaGlnaC1sZXZlbCBBUEkgdG8gYXNzb2NpYXRlIGEgZ2VuZXJhdGVkIHBvc2l0aW9uIHdpdGggYW4gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uLiBMaW5lIGlzXG4gKiAxLWJhc2VkLCBidXQgY29sdW1uIGlzIDAtYmFzZWQsIGR1ZSB0byBsZWdhY3kgYmVoYXZpb3IgaW4gYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U/OiBudWxsO1xuICAgIG9yaWdpbmFsPzogbnVsbDtcbiAgICBuYW1lPzogbnVsbDtcbiAgICBjb250ZW50PzogbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWw6IFBvcztcbiAgICBuYW1lPzogbnVsbDtcbiAgICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWw6IFBvcztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZyB8IG51bGw7XG4gIH0sXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1hcHBpbmcoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZT86IHN0cmluZyB8IG51bGw7XG4gICAgb3JpZ2luYWw/OiBQb3MgfCBudWxsO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsO1xuICB9LFxuKTogdm9pZCB7XG4gIHJldHVybiBhZGRNYXBwaW5nSW50ZXJuYWwoZmFsc2UsIG1hcCwgbWFwcGluZyBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRNYXBwaW5nSW50ZXJuYWw+WzJdKTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIGBhZGRTZWdtZW50YCwgYnV0IHdpbGwgb25seSBhZGQgdGhlIHNlZ21lbnQgaWYgaXQgZ2VuZXJhdGVzIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiB0aGVcbiAqIHJlc3VsdGluZyBtYXAuIFRoaXMgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgc2VnbWVudHMgYXJlIGFkZGVkICoqaW4gb3JkZXIqKiwgbWVhbmluZyB5b3Ugc2hvdWxkXG4gKiBub3QgYWRkIGEgc2VnbWVudCB3aXRoIGEgbG93ZXIgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHRoYW4gb25lIHRoYXQgY2FtZSBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFkZFNlZ21lbnQ6IHR5cGVvZiBhZGRTZWdtZW50ID0gKFxuICBtYXAsXG4gIGdlbkxpbmUsXG4gIGdlbkNvbHVtbixcbiAgc291cmNlLFxuICBzb3VyY2VMaW5lLFxuICBzb3VyY2VDb2x1bW4sXG4gIG5hbWUsXG4gIGNvbnRlbnQsXG4pID0+IHtcbiAgcmV0dXJuIGFkZFNlZ21lbnRJbnRlcm5hbChcbiAgICB0cnVlLFxuICAgIG1hcCxcbiAgICBnZW5MaW5lLFxuICAgIGdlbkNvbHVtbixcbiAgICBzb3VyY2UsXG4gICAgc291cmNlTGluZSxcbiAgICBzb3VyY2VDb2x1bW4sXG4gICAgbmFtZSxcbiAgICBjb250ZW50LFxuICApO1xufTtcblxuLyoqXG4gKiBTYW1lIGFzIGBhZGRNYXBwaW5nYCwgYnV0IHdpbGwgb25seSBhZGQgdGhlIG1hcHBpbmcgaWYgaXQgZ2VuZXJhdGVzIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiB0aGVcbiAqIHJlc3VsdGluZyBtYXAuIFRoaXMgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgbWFwcGluZ3MgYXJlIGFkZGVkICoqaW4gb3JkZXIqKiwgbWVhbmluZyB5b3Ugc2hvdWxkXG4gKiBub3QgYWRkIGEgbWFwcGluZyB3aXRoIGEgbG93ZXIgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHRoYW4gb25lIHRoYXQgY2FtZSBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFkZE1hcHBpbmc6IHR5cGVvZiBhZGRNYXBwaW5nID0gKG1hcCwgbWFwcGluZykgPT4ge1xuICByZXR1cm4gYWRkTWFwcGluZ0ludGVybmFsKHRydWUsIG1hcCwgbWFwcGluZyBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRNYXBwaW5nSW50ZXJuYWw+WzJdKTtcbn07XG5cbi8qKlxuICogQWRkcy9yZW1vdmVzIHRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgc291cmNlIG1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNvdXJjZUNvbnRlbnQobWFwOiBHZW5NYXBwaW5nLCBzb3VyY2U6IHN0cmluZywgY29udGVudDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBjb25zdCB7IF9zb3VyY2VzOiBzb3VyY2VzLCBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50IH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGluZGV4ID0gcHV0KHNvdXJjZXMsIHNvdXJjZSk7XG4gIHNvdXJjZXNDb250ZW50W2luZGV4XSA9IGNvbnRlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJZ25vcmUobWFwOiBHZW5NYXBwaW5nLCBzb3VyY2U6IHN0cmluZywgaWdub3JlID0gdHJ1ZSkge1xuICBjb25zdCB7IF9zb3VyY2VzOiBzb3VyY2VzLCBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LCBfaWdub3JlTGlzdDogaWdub3JlTGlzdCB9ID0gY2FzdChtYXApO1xuICBjb25zdCBpbmRleCA9IHB1dChzb3VyY2VzLCBzb3VyY2UpO1xuICBpZiAoaW5kZXggPT09IHNvdXJjZXNDb250ZW50Lmxlbmd0aCkgc291cmNlc0NvbnRlbnRbaW5kZXhdID0gbnVsbDtcbiAgaWYgKGlnbm9yZSkgcHV0KGlnbm9yZUxpc3QsIGluZGV4KTtcbiAgZWxzZSByZW1vdmUoaWdub3JlTGlzdCwgaW5kZXgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2VtYXAgb2JqZWN0ICh3aXRoIGRlY29kZWQgbWFwcGluZ3MpIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgbGlicmFyeSB0aGF0IGV4cGVjdHNcbiAqIGEgc291cmNlbWFwLCBvciB0byBKU09OLnN0cmluZ2lmeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjb2RlZE1hcChtYXA6IEdlbk1hcHBpbmcpOiBEZWNvZGVkU291cmNlTWFwIHtcbiAgY29uc3Qge1xuICAgIF9tYXBwaW5nczogbWFwcGluZ3MsXG4gICAgX3NvdXJjZXM6IHNvdXJjZXMsXG4gICAgX3NvdXJjZXNDb250ZW50OiBzb3VyY2VzQ29udGVudCxcbiAgICBfbmFtZXM6IG5hbWVzLFxuICAgIF9pZ25vcmVMaXN0OiBpZ25vcmVMaXN0LFxuICB9ID0gY2FzdChtYXApO1xuICByZW1vdmVFbXB0eUZpbmFsTGluZXMobWFwcGluZ3MpO1xuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogMyxcbiAgICBmaWxlOiBtYXAuZmlsZSB8fCB1bmRlZmluZWQsXG4gICAgbmFtZXM6IG5hbWVzLmFycmF5LFxuICAgIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290IHx8IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBzb3VyY2VzLmFycmF5LFxuICAgIHNvdXJjZXNDb250ZW50LFxuICAgIG1hcHBpbmdzLFxuICAgIGlnbm9yZUxpc3Q6IGlnbm9yZUxpc3QuYXJyYXksXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZW5jb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FbmNvZGVkTWFwKG1hcDogR2VuTWFwcGluZyk6IEVuY29kZWRTb3VyY2VNYXAge1xuICBjb25zdCBkZWNvZGVkID0gdG9EZWNvZGVkTWFwKG1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uZGVjb2RlZCxcbiAgICBtYXBwaW5nczogZW5jb2RlKGRlY29kZWQubWFwcGluZ3MgYXMgU291cmNlTWFwU2VnbWVudFtdW10pLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgR2VuTWFwcGluZywgdXNpbmcgdGhlIGFscmVhZHkgcHJlc2VudCBtYXBwaW5ncyBvZiB0aGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWFwKGlucHV0OiBTb3VyY2VNYXBJbnB1dCk6IEdlbk1hcHBpbmcge1xuICBjb25zdCBtYXAgPSBuZXcgVHJhY2VNYXAoaW5wdXQpO1xuICBjb25zdCBnZW4gPSBuZXcgR2VuTWFwcGluZyh7IGZpbGU6IG1hcC5maWxlLCBzb3VyY2VSb290OiBtYXAuc291cmNlUm9vdCB9KTtcblxuICBwdXRBbGwoY2FzdChnZW4pLl9uYW1lcywgbWFwLm5hbWVzKTtcbiAgcHV0QWxsKGNhc3QoZ2VuKS5fc291cmNlcywgbWFwLnNvdXJjZXMgYXMgc3RyaW5nW10pO1xuICBjYXN0KGdlbikuX3NvdXJjZXNDb250ZW50ID0gbWFwLnNvdXJjZXNDb250ZW50IHx8IG1hcC5zb3VyY2VzLm1hcCgoKSA9PiBudWxsKTtcbiAgY2FzdChnZW4pLl9tYXBwaW5ncyA9IGRlY29kZWRNYXBwaW5ncyhtYXApIGFzIEdlbk1hcHBpbmdbJ19tYXBwaW5ncyddO1xuICBpZiAobWFwLmlnbm9yZUxpc3QpIHB1dEFsbChjYXN0KGdlbikuX2lnbm9yZUxpc3QsIG1hcC5pZ25vcmVMaXN0KTtcblxuICByZXR1cm4gZ2VuO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgaGlnaC1sZXZlbCBtYXBwaW5nIG9iamVjdHMgZm9yIGV2ZXJ5IHJlY29yZGVkIHNlZ21lbnQsIHdoaWNoIGNvdWxkIHRoZW4gYmVcbiAqIHBhc3NlZCB0byB0aGUgYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxNYXBwaW5ncyhtYXA6IEdlbk1hcHBpbmcpOiBNYXBwaW5nW10ge1xuICBjb25zdCBvdXQ6IE1hcHBpbmdbXSA9IFtdO1xuICBjb25zdCB7IF9tYXBwaW5nczogbWFwcGluZ3MsIF9zb3VyY2VzOiBzb3VyY2VzLCBfbmFtZXM6IG5hbWVzIH0gPSBjYXN0KG1hcCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBtYXBwaW5nc1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZCA9IHsgbGluZTogaSArIDEsIGNvbHVtbjogc2VnW0NPTFVNTl0gfTtcbiAgICAgIGxldCBzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBvcmlnaW5hbDogUG9zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlZy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgc291cmNlID0gc291cmNlcy5hcnJheVtzZWdbU09VUkNFU19JTkRFWF1dO1xuICAgICAgICBvcmlnaW5hbCA9IHsgbGluZTogc2VnW1NPVVJDRV9MSU5FXSArIDEsIGNvbHVtbjogc2VnW1NPVVJDRV9DT0xVTU5dIH07XG5cbiAgICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDUpIG5hbWUgPSBuYW1lcy5hcnJheVtzZWdbTkFNRVNfSU5ERVhdXTtcbiAgICAgIH1cblxuICAgICAgb3V0LnB1c2goeyBnZW5lcmF0ZWQsIHNvdXJjZSwgb3JpZ2luYWwsIG5hbWUgfSBhcyBNYXBwaW5nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG4vLyBUaGlzIHNwbGl0IGRlY2xhcmF0aW9uIGlzIG9ubHkgc28gdGhhdCB0ZXJzZXIgY2FuIGVsbWluaWF0ZSB0aGUgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrLlxuZnVuY3Rpb24gYWRkU2VnbWVudEludGVybmFsPFMgZXh0ZW5kcyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgc2tpcGFibGU6IGJvb2xlYW4sXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBTLFxuICBzb3VyY2VMaW5lOiBTIGV4dGVuZHMgc3RyaW5nID8gbnVtYmVyIDogbnVsbCB8IHVuZGVmaW5lZCxcbiAgc291cmNlQ29sdW1uOiBTIGV4dGVuZHMgc3RyaW5nID8gbnVtYmVyIDogbnVsbCB8IHVuZGVmaW5lZCxcbiAgbmFtZTogUyBleHRlbmRzIHN0cmluZyA/IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZW50OiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQsXG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIF9tYXBwaW5nczogbWFwcGluZ3MsXG4gICAgX3NvdXJjZXM6IHNvdXJjZXMsXG4gICAgX3NvdXJjZXNDb250ZW50OiBzb3VyY2VzQ29udGVudCxcbiAgICBfbmFtZXM6IG5hbWVzLFxuICB9ID0gY2FzdChtYXApO1xuICBjb25zdCBsaW5lID0gZ2V0TGluZShtYXBwaW5ncywgZ2VuTGluZSk7XG4gIGNvbnN0IGluZGV4ID0gZ2V0Q29sdW1uSW5kZXgobGluZSwgZ2VuQ29sdW1uKTtcblxuICBpZiAoIXNvdXJjZSkge1xuICAgIGlmIChza2lwYWJsZSAmJiBza2lwU291cmNlbGVzcyhsaW5lLCBpbmRleCkpIHJldHVybjtcbiAgICByZXR1cm4gaW5zZXJ0KGxpbmUsIGluZGV4LCBbZ2VuQ29sdW1uXSk7XG4gIH1cblxuICAvLyBTaWdoLCBUeXBlU2NyaXB0IGNhbid0IGZpZ3VyZSBvdXQgc291cmNlTGluZSBhbmQgc291cmNlQ29sdW1uIGFyZW4ndCBudWxsaXNoIGlmIHNvdXJjZVxuICAvLyBpc24ndCBudWxsaXNoLlxuICBhc3NlcnQ8bnVtYmVyPihzb3VyY2VMaW5lKTtcbiAgYXNzZXJ0PG51bWJlcj4oc291cmNlQ29sdW1uKTtcblxuICBjb25zdCBzb3VyY2VzSW5kZXggPSBwdXQoc291cmNlcywgc291cmNlKTtcbiAgY29uc3QgbmFtZXNJbmRleCA9IG5hbWUgPyBwdXQobmFtZXMsIG5hbWUpIDogTk9fTkFNRTtcbiAgaWYgKHNvdXJjZXNJbmRleCA9PT0gc291cmNlc0NvbnRlbnQubGVuZ3RoKSBzb3VyY2VzQ29udGVudFtzb3VyY2VzSW5kZXhdID0gY29udGVudCA/PyBudWxsO1xuXG4gIGlmIChza2lwYWJsZSAmJiBza2lwU291cmNlKGxpbmUsIGluZGV4LCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNJbmRleCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gaW5zZXJ0KFxuICAgIGxpbmUsXG4gICAgaW5kZXgsXG4gICAgbmFtZVxuICAgICAgPyBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNJbmRleF1cbiAgICAgIDogW2dlbkNvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW5dLFxuICApO1xufVxuXG5mdW5jdGlvbiBhc3NlcnQ8VD4oX3ZhbDogdW5rbm93bik6IGFzc2VydHMgX3ZhbCBpcyBUIHtcbiAgLy8gbm9vcC5cbn1cblxuZnVuY3Rpb24gZ2V0TGluZShtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sIGluZGV4OiBudW1iZXIpOiBTb3VyY2VNYXBTZWdtZW50W10ge1xuICBmb3IgKGxldCBpID0gbWFwcGluZ3MubGVuZ3RoOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICBtYXBwaW5nc1tpXSA9IFtdO1xuICB9XG4gIHJldHVybiBtYXBwaW5nc1tpbmRleF07XG59XG5cbmZ1bmN0aW9uIGdldENvbHVtbkluZGV4KGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSwgZ2VuQ29sdW1uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgaW5kZXggPSBsaW5lLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpbmRleCA9IGktLSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBsaW5lW2ldO1xuICAgIGlmIChnZW5Db2x1bW4gPj0gY3VycmVudFtDT0xVTU5dKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGluc2VydDxUPihhcnJheTogVFtdLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogVCkge1xuICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoOyBpID4gaW5kZXg7IGktLSkge1xuICAgIGFycmF5W2ldID0gYXJyYXlbaSAtIDFdO1xuICB9XG4gIGFycmF5W2luZGV4XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbXB0eUZpbmFsTGluZXMobWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdKSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncztcbiAgbGV0IGxlbiA9IGxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgbGVuID0gaSwgaS0tKSB7XG4gICAgaWYgKG1hcHBpbmdzW2ldLmxlbmd0aCA+IDApIGJyZWFrO1xuICB9XG4gIGlmIChsZW4gPCBsZW5ndGgpIG1hcHBpbmdzLmxlbmd0aCA9IGxlbjtcbn1cblxuZnVuY3Rpb24gcHV0QWxsPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXI+KHNldGFycjogU2V0QXJyYXk8VD4sIGFycmF5OiBUW10pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgcHV0KHNldGFyciwgYXJyYXlbaV0pO1xufVxuXG5mdW5jdGlvbiBza2lwU291cmNlbGVzcyhsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgLy8gVGhlIHN0YXJ0IG9mIGEgbGluZSBpcyBhbHJlYWR5IHNvdXJjZWxlc3MsIHNvIGFkZGluZyBhIHNvdXJjZWxlc3Mgc2VnbWVudCB0byB0aGUgYmVnaW5uaW5nXG4gIC8vIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbi5cbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBwcmV2ID0gbGluZVtpbmRleCAtIDFdO1xuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBpcyBhbHNvIHNvdXJjZWxlc3MsIHRoZW4gYWRkaW5nIGFub3RoZXIgc291cmNlbGVzcyBzZWdtZW50IGRvZXNuJ3RcbiAgLy8gZ2VucmF0ZSBhbnkgbmV3IGluZm9ybWF0aW9uLiBFbHNlLCB0aGlzIHNlZ21lbnQgd2lsbCBlbmQgdGhlIHNvdXJjZS9uYW1lZCBzZWdtZW50IGFuZCBwb2ludCB0b1xuICAvLyBhIHNvdXJjZWxlc3MgcG9zaXRpb24sIHdoaWNoIGlzIHVzZWZ1bC5cbiAgcmV0dXJuIHByZXYubGVuZ3RoID09PSAxO1xufVxuXG5mdW5jdGlvbiBza2lwU291cmNlKFxuICBsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHNvdXJjZXNJbmRleDogbnVtYmVyLFxuICBzb3VyY2VMaW5lOiBudW1iZXIsXG4gIHNvdXJjZUNvbHVtbjogbnVtYmVyLFxuICBuYW1lc0luZGV4OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgLy8gQSBzb3VyY2UvbmFtZWQgc2VnbWVudCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGdpdmVzIHBvc2l0aW9uIGF0IHRoYXQgZ2VuQ29sdW1uXG4gIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG5cbiAgLy8gSWYgdGhlIHByZXZpb3VzIHNlZ21lbnQgaXMgc291cmNlbGVzcywgdGhlbiB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvIGEgc291cmNlLlxuICBpZiAocHJldi5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBtYXBzIHRvIHRoZSBleGFjdCBzYW1lIHNvdXJjZSBwb3NpdGlvbiwgdGhlbiB0aGlzIHNlZ21lbnQgZG9lc24ndFxuICAvLyBwcm92aWRlIGFueSBuZXcgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gIHJldHVybiAoXG4gICAgc291cmNlc0luZGV4ID09PSBwcmV2W1NPVVJDRVNfSU5ERVhdICYmXG4gICAgc291cmNlTGluZSA9PT0gcHJldltTT1VSQ0VfTElORV0gJiZcbiAgICBzb3VyY2VDb2x1bW4gPT09IHByZXZbU09VUkNFX0NPTFVNTl0gJiZcbiAgICBuYW1lc0luZGV4ID09PSAocHJldi5sZW5ndGggPT09IDUgPyBwcmV2W05BTUVTX0lOREVYXSA6IE5PX05BTUUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkZE1hcHBpbmdJbnRlcm5hbDxTIGV4dGVuZHMgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oXG4gIHNraXBhYmxlOiBib29sZWFuLFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IFM7XG4gICAgb3JpZ2luYWw6IFMgZXh0ZW5kcyBzdHJpbmcgPyBQb3MgOiBudWxsIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBjb250ZW50OiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0sXG4pIHtcbiAgY29uc3QgeyBnZW5lcmF0ZWQsIHNvdXJjZSwgb3JpZ2luYWwsIG5hbWUsIGNvbnRlbnQgfSA9IG1hcHBpbmc7XG4gIGlmICghc291cmNlKSB7XG4gICAgcmV0dXJuIGFkZFNlZ21lbnRJbnRlcm5hbChcbiAgICAgIHNraXBhYmxlLFxuICAgICAgbWFwLFxuICAgICAgZ2VuZXJhdGVkLmxpbmUgLSAxLFxuICAgICAgZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICk7XG4gIH1cbiAgYXNzZXJ0PFBvcz4ob3JpZ2luYWwpO1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIHNraXBhYmxlLFxuICAgIG1hcCxcbiAgICBnZW5lcmF0ZWQubGluZSAtIDEsXG4gICAgZ2VuZXJhdGVkLmNvbHVtbixcbiAgICBzb3VyY2UgYXMgc3RyaW5nLFxuICAgIG9yaWdpbmFsLmxpbmUgLSAxLFxuICAgIG9yaWdpbmFsLmNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGV0YWlsQ29udGV4dCA9IGV4cG9ydHMuTm9vcENvbnRleHQgPSBleHBvcnRzLlZFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhyb3duIGJ5IHZhbGlkYXRpb24uIEJlc2lkZXMgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSwgaXQgaW5jbHVkZXMgdGhlIHBhdGggdG8gdGhlXG4gKiBwcm9wZXJ0eSB3aGljaCB0cmlnZ2VyZWQgdGhlIGZhaWx1cmUuXG4gKi9cbnZhciBWRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWRXJyb3IocGF0aCwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrIGZvciBpbmZvIGFib3V0IHRoaXMgd29ya2Fyb3VuZC5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBWRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVkVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5WRXJyb3IgPSBWRXJyb3I7XG4vKipcbiAqIEZhc3QgaW1wbGVtZW50YXRpb24gb2YgSUNvbnRleHQgdXNlZCBmb3IgZmlyc3QtcGFzcyB2YWxpZGF0aW9uLiBJZiB0aGF0IGZhaWxzLCB3ZSBjYW4gdmFsaWRhdGVcbiAqIHVzaW5nIERldGFpbENvbnRleHQgdG8gY29sbGVjdCBlcnJvciBtZXNzYWdlcy4gVGhhdCdzIGZhc3RlciBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZW4gbWVzc2FnZXNcbiAqIG5vcm1hbGx5IHBhc3MgdmFsaWRhdGlvbi5cbiAqL1xudmFyIE5vb3BDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0KCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUuZmFpbCA9IGZ1bmN0aW9uIChyZWxQYXRoLCBtZXNzYWdlLCBzY29yZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgTm9vcENvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIE5vb3BDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodXIpIHsgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5Ob29wQ29udGV4dCA9IE5vb3BDb250ZXh0O1xuLyoqXG4gKiBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJQ29udGV4dCB0aGF0IGNvbGxlY3RzIG1lYW5pbmdmdWxsIGVycm9ycy5cbiAqL1xudmFyIERldGFpbENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGV0YWlsQ29udGV4dCgpIHtcbiAgICAgICAgLy8gU3RhY2sgb2YgcHJvcGVydHkgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgZm9yIHJlcG9ydGluZyBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICB0aGlzLl9wcm9wTmFtZXMgPSBbXCJcIl07XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW251bGxdO1xuICAgICAgICAvLyBTY29yZSBpcyB1c2VkIHRvIGNob29zZSB0aGUgYmVzdCB1bmlvbiBtZW1iZXIgd2hvc2UgRGV0YWlsQ29udGV4dCB0byB1c2UgZm9yIHJlcG9ydGluZy5cbiAgICAgICAgLy8gSGlnaGVyIHNjb3JlIG1lYW5zIGJldHRlciBtYXRjaCAob3IgcmF0aGVyIGxlc3Mgc2V2ZXJlIG1pc21hdGNoKS5cbiAgICAgICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIH1cbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5mYWlsID0gZnVuY3Rpb24gKHJlbFBhdGgsIG1lc3NhZ2UsIHNjb3JlKSB7XG4gICAgICAgIHRoaXMuX3Byb3BOYW1lcy5wdXNoKHJlbFBhdGgpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zY29yZSArPSBzY29yZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxVbmlvblJlc29sdmVyKCk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodW5pb25SZXNvbHZlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgdSA9IHVuaW9uUmVzb2x2ZXI7XG4gICAgICAgIHZhciBiZXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IHUuY29udGV4dHM7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY3R4ID0gX2NbX2ldO1xuICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGN0eC5fc2NvcmUgPj0gYmVzdC5fc2NvcmUpIHtcbiAgICAgICAgICAgICAgICBiZXN0ID0gY3R4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZXN0ICYmIGJlc3QuX3Njb3JlID4gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5fcHJvcE5hbWVzKS5wdXNoLmFwcGx5KF9hLCBiZXN0Ll9wcm9wTmFtZXMpO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5fbWVzc2FnZXMpLnB1c2guYXBwbHkoX2IsIGJlc3QuX21lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICB2YXIgbXNnUGFydHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3Byb3BOYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9wTmFtZXNbaV07XG4gICAgICAgICAgICBwYXRoICs9ICh0eXBlb2YgcCA9PT0gXCJudW1iZXJcIikgPyBcIltcIiArIHAgKyBcIl1cIiA6IChwID8gXCIuXCIgKyBwIDogXCJcIik7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMuX21lc3NhZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICBtc2dQYXJ0cy5wdXNoKHBhdGggKyBcIiBcIiArIG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVkVycm9yKHBhdGgsIG1zZ1BhcnRzLmpvaW4oXCI7IFwiKSk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5nZXRFcnJvckRldGFpbCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHZhciBkZXRhaWxzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9wcm9wTmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcHJvcE5hbWVzW2ldO1xuICAgICAgICAgICAgcGF0aCArPSAodHlwZW9mIHAgPT09IFwibnVtYmVyXCIpID8gXCJbXCIgKyBwICsgXCJdXCIgOiAocCA/IFwiLlwiICsgcCA6IFwiXCIpO1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKHsgcGF0aDogcGF0aCwgbWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGRldGFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzW2ldLm5lc3RlZCA9IFtkZXRhaWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGV0YWlsID0gZGV0YWlsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5EZXRhaWxDb250ZXh0ID0gRGV0YWlsQ29udGV4dDtcbnZhciBEZXRhaWxVbmlvblJlc29sdmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldGFpbFVuaW9uUmVzb2x2ZXIoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB9XG4gICAgRGV0YWlsVW5pb25SZXNvbHZlci5wcm90b3R5cGUuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN0eCA9IG5ldyBEZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbFVuaW9uUmVzb2x2ZXI7XG59KCkpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIG5vZGVzIHVzZWQgdG8gZGVmaW5lIHR5cGVzIGFuZCB2YWxpZGF0aW9ucyBmb3Igb2JqZWN0cyBhbmQgaW50ZXJmYWNlcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGU6bm8tc2hhZG93ZWQtdmFyaWFibGUgcHJlZmVyLWZvci1vZlxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2ljVHlwZXMgPSBleHBvcnRzLkJhc2ljVHlwZSA9IGV4cG9ydHMuVFBhcmFtTGlzdCA9IGV4cG9ydHMuVFBhcmFtID0gZXhwb3J0cy5wYXJhbSA9IGV4cG9ydHMuVEZ1bmMgPSBleHBvcnRzLmZ1bmMgPSBleHBvcnRzLlRQcm9wID0gZXhwb3J0cy5UT3B0aW9uYWwgPSBleHBvcnRzLm9wdCA9IGV4cG9ydHMuVElmYWNlID0gZXhwb3J0cy5pZmFjZSA9IGV4cG9ydHMuVEVudW1MaXRlcmFsID0gZXhwb3J0cy5lbnVtbGl0ID0gZXhwb3J0cy5URW51bVR5cGUgPSBleHBvcnRzLmVudW10eXBlID0gZXhwb3J0cy5USW50ZXJzZWN0aW9uID0gZXhwb3J0cy5pbnRlcnNlY3Rpb24gPSBleHBvcnRzLlRVbmlvbiA9IGV4cG9ydHMudW5pb24gPSBleHBvcnRzLlRUdXBsZSA9IGV4cG9ydHMudHVwbGUgPSBleHBvcnRzLlRBcnJheSA9IGV4cG9ydHMuYXJyYXkgPSBleHBvcnRzLlRMaXRlcmFsID0gZXhwb3J0cy5saXQgPSBleHBvcnRzLlROYW1lID0gZXhwb3J0cy5uYW1lID0gZXhwb3J0cy5UVHlwZSA9IHZvaWQgMDtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqIE5vZGUgdGhhdCByZXByZXNlbnRzIGEgdHlwZS4gKi9cbnZhciBUVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUVHlwZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIFRUeXBlO1xufSgpKTtcbmV4cG9ydHMuVFR5cGUgPSBUVHlwZTtcbi8qKiBQYXJzZXMgYSB0eXBlIHNwZWMgaW50byBhIFRUeXBlIG5vZGUuICovXG5mdW5jdGlvbiBwYXJzZVNwZWModHlwZVNwZWMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHR5cGVTcGVjID09PSBcInN0cmluZ1wiID8gbmFtZSh0eXBlU3BlYykgOiB0eXBlU3BlYztcbn1cbmZ1bmN0aW9uIGdldE5hbWVkVHlwZShzdWl0ZSwgbmFtZSkge1xuICAgIHZhciB0dHlwZSA9IHN1aXRlW25hbWVdO1xuICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB0eXBlIFwiICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0dHlwZTtcbn1cbi8qKlxuICogRGVmaW5lcyBhIHR5cGUgbmFtZSwgZWl0aGVyIGJ1aWx0LWluLCBvciBkZWZpbmVkIGluIHRoaXMgc3VpdGUuIEl0IGNhbiB0eXBpY2FsbHkgYmUgaW5jbHVkZWQgaW5cbiAqIHRoZSBzcGVjcyBhcyBqdXN0IGEgcGxhaW4gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBuYW1lKHZhbHVlKSB7IHJldHVybiBuZXcgVE5hbWUodmFsdWUpOyB9XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xudmFyIFROYW1lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUTmFtZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUTmFtZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IGEgXCIgKyBuYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFROYW1lLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QsIGFsbG93ZWRQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdHR5cGUgPSBnZXROYW1lZFR5cGUoc3VpdGUsIHRoaXMubmFtZSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gdHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0LCBhbGxvd2VkUHJvcHMpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiBCYXNpY1R5cGUgfHwgdHR5cGUgaW5zdGFuY2VvZiBUTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGNvbXBsZXggdHlwZXMsIGFkZCBhbiBhZGRpdGlvbmFsIFwiaXMgbm90IGEgPFR5cGU+XCIgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHsgcmV0dXJuIGNoZWNrZXIodmFsdWUsIGN0eCkgPyB0cnVlIDogY3R4LmZhaWwobnVsbCwgX3RoaXMuX2ZhaWxNc2csIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFROYW1lO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTmFtZSA9IFROYW1lO1xuLyoqXG4gKiBEZWZpbmVzIGEgbGl0ZXJhbCB2YWx1ZSwgZS5nLiBsaXQoJ2hlbGxvJykgb3IgbGl0KDEyMykuXG4gKi9cbmZ1bmN0aW9uIGxpdCh2YWx1ZSkgeyByZXR1cm4gbmV3IFRMaXRlcmFsKHZhbHVlKTsgfVxuZXhwb3J0cy5saXQgPSBsaXQ7XG52YXIgVExpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRMaXRlcmFsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIF90aGlzLm5hbWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIF90aGlzLl9mYWlsTXNnID0gXCJpcyBub3QgXCIgKyBfdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRMaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiAodmFsdWUgPT09IF90aGlzLnZhbHVlKSA/IHRydWUgOiBjdHguZmFpbChudWxsLCBfdGhpcy5fZmFpbE1zZywgLTEpOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRMaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTGl0ZXJhbCA9IFRMaXRlcmFsO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGFycmF5IHR5cGUsIGUuZy4gYXJyYXkoJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiBhcnJheSh0eXBlU3BlYykgeyByZXR1cm4gbmV3IFRBcnJheShwYXJzZVNwZWModHlwZVNwZWMpKTsgfVxuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xudmFyIFRBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEFycmF5LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRBcnJheSh0dHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRBcnJheS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlciA9IHRoaXMudHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIFwiaXMgbm90IGFuIGFycmF5XCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2VyKHZhbHVlW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKGksIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRBcnJheTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVEFycmF5ID0gVEFycmF5O1xuLyoqXG4gKiBEZWZpbmVzIGEgdHVwbGUgdHlwZSwgZS5nLiB0dXBsZSgnc3RyaW5nJywgJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiB0dXBsZSgpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRUdXBsZSh0eXBlU3BlYy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHBhcnNlU3BlYyh0KTsgfSkpO1xufVxuZXhwb3J0cy50dXBsZSA9IHR1cGxlO1xudmFyIFRUdXBsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVFR1cGxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRUdXBsZSh0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRUdXBsZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlcnMgPSB0aGlzLnR0eXBlcy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTsgfSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwobnVsbCwgXCJpcyBub3QgYW4gYXJyYXlcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1DaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2Vyc1tpXSh2YWx1ZVtpXSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChpLCBudWxsLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFjaGVja2VyKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBpdGVtQ2hlY2tlcnMubGVuZ3RoID8gdHJ1ZSA6XG4gICAgICAgICAgICAgICAgY3R4LmZhaWwoaXRlbUNoZWNrZXJzLmxlbmd0aCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRUdXBsZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVFR1cGxlID0gVFR1cGxlO1xuLyoqXG4gKiBEZWZpbmVzIGEgdW5pb24gdHlwZSwgZS5nLiB1bmlvbignbnVtYmVyJywgJ251bGwnKS5cbiAqL1xuZnVuY3Rpb24gdW5pb24oKSB7XG4gICAgdmFyIHR5cGVTcGVjID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdHlwZVNwZWNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUVW5pb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMudW5pb24gPSB1bmlvbjtcbnZhciBUVW5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRVbmlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUVW5pb24odHR5cGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR0eXBlcyA9IHR0eXBlcztcbiAgICAgICAgdmFyIG5hbWVzID0gdHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdCBpbnN0YW5jZW9mIFROYW1lIHx8IHQgaW5zdGFuY2VvZiBUTGl0ZXJhbCA/IHQubmFtZSA6IG51bGw7IH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuOyB9KTtcbiAgICAgICAgdmFyIG90aGVyVHlwZXMgPSB0dHlwZXMubGVuZ3RoIC0gbmFtZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3RoZXJUeXBlcyA+IDApIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG90aGVyVHlwZXMgKyBcIiBtb3JlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vbmUgb2YgXCIgKyBuYW1lcy5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm9uZSBvZiBcIiArIG90aGVyVHlwZXMgKyBcIiB0eXBlc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVFVuaW9uLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1DaGVja2VycyA9IHRoaXMudHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICB2YXIgdXIgPSBjdHgudW5pb25SZXNvbHZlcigpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWUsIHVyLmNyZWF0ZUNvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5yZXNvbHZlVW5pb24odXIpO1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUVW5pb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRVbmlvbiA9IFRVbmlvbjtcbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcnNlY3Rpb24gdHlwZSwgZS5nLiBpbnRlcnNlY3Rpb24oJ251bWJlcicsICdudWxsJykuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdGlvbigpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRJbnRlcnNlY3Rpb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMuaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uO1xudmFyIFRJbnRlcnNlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRJbnRlcnNlY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdGlvbih0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRJbnRlcnNlY3Rpb24ucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgYWxsb3dlZFByb3BzID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy50dHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKTsgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgdmFyIG9rID0gaXRlbUNoZWNrZXJzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVja2VyKSB7IHJldHVybiBjaGVja2VyKHZhbHVlLCBjdHgpOyB9KTtcbiAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIG51bGwsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJbnRlcnNlY3Rpb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRJbnRlcnNlY3Rpb24gPSBUSW50ZXJzZWN0aW9uO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGVudW0gdHlwZSwgZS5nLiBlbnVtKHsnQSc6IDEsICdCJzogMn0pLlxuICovXG5mdW5jdGlvbiBlbnVtdHlwZSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtVHlwZSh2YWx1ZXMpO1xufVxuZXhwb3J0cy5lbnVtdHlwZSA9IGVudW10eXBlO1xudmFyIFRFbnVtVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEVudW1UeXBlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRFbnVtVHlwZShtZW1iZXJzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICAgICAgICBfdGhpcy52YWxpZFZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vdCBhIHZhbGlkIGVudW0gdmFsdWVcIjtcbiAgICAgICAgX3RoaXMudmFsaWRWYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG1lbWJlcnMpLm1hcChmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWVtYmVyc1tuYW1lXTsgfSkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRFbnVtVHlwZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIChfdGhpcy52YWxpZFZhbHVlcy5oYXModmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1UeXBlO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bVR5cGUgPSBURW51bVR5cGU7XG4vKipcbiAqIERlZmluZXMgYSBsaXRlcmFsIGVudW0gdmFsdWUsIHN1Y2ggYXMgRGlyZWN0aW9uLlVwLCBzcGVjaWZpZWQgYXMgZW51bWxpdChcIkRpcmVjdGlvblwiLCBcIlVwXCIpLlxuICovXG5mdW5jdGlvbiBlbnVtbGl0KG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtTGl0ZXJhbChuYW1lLCBwcm9wKTtcbn1cbmV4cG9ydHMuZW51bWxpdCA9IGVudW1saXQ7XG52YXIgVEVudW1MaXRlcmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhURW51bUxpdGVyYWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEVudW1MaXRlcmFsKGVudW1OYW1lLCBwcm9wKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVudW1OYW1lID0gZW51bU5hbWU7XG4gICAgICAgIF90aGlzLnByb3AgPSBwcm9wO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IFwiICsgZW51bU5hbWUgKyBcIi5cIiArIHByb3A7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHR0eXBlID0gZ2V0TmFtZWRUeXBlKHN1aXRlLCB0aGlzLmVudW1OYW1lKTtcbiAgICAgICAgaWYgKCEodHR5cGUgaW5zdGFuY2VvZiBURW51bVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiIHVzZWQgaW4gZW51bWxpdCBpcyBub3QgYW4gZW51bSB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWwgPSB0dHlwZS5tZW1iZXJzW3RoaXMucHJvcF07XG4gICAgICAgIGlmICghdHR5cGUubWVtYmVycy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3ApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHZhbHVlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiLlwiICsgdGhpcy5wcm9wICsgXCIgdXNlZCBpbiBlbnVtbGl0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkgeyByZXR1cm4gKHZhbHVlID09PSB2YWwpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAtMSk7IH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1MaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bUxpdGVyYWwgPSBURW51bUxpdGVyYWw7XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wcyhwcm9wcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3BzW25hbWVdKTsgfSk7XG59XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gcHJvcCBpbnN0YW5jZW9mIFRPcHRpb25hbCA/XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwcm9wLnR0eXBlLCB0cnVlKSA6XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwYXJzZVNwZWMocHJvcCksIGZhbHNlKTtcbn1cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmZhY2UuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiBpbnRlcmZhY2VzIHRoYXQgaXQgZXh0ZW5kcywgYW5kIHRoZVxuICogc2Vjb25kIGlzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGlmYWNlKGJhc2VzLCBwcm9wcykge1xuICAgIHJldHVybiBuZXcgVElmYWNlKGJhc2VzLCBtYWtlSWZhY2VQcm9wcyhwcm9wcykpO1xufVxuZXhwb3J0cy5pZmFjZSA9IGlmYWNlO1xudmFyIFRJZmFjZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVElmYWNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRJZmFjZShiYXNlcywgcHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYmFzZXMgPSBiYXNlcztcbiAgICAgICAgX3RoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgX3RoaXMucHJvcFNldCA9IG5ldyBTZXQocHJvcHMubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm5hbWU7IH0pKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUSWZhY2UucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBiYXNlQ2hlY2tlcnMgPSB0aGlzLmJhc2VzLm1hcChmdW5jdGlvbiAoYikgeyByZXR1cm4gZ2V0TmFtZWRUeXBlKHN1aXRlLCBiKS5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgdmFyIHByb3BDaGVja2VycyA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7IHJldHVybiBwcm9wLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgLy8gQ29uc2lkZXIgYSBwcm9wIHJlcXVpcmVkIGlmIGl0J3Mgbm90IG9wdGlvbmFsIEFORCBkb2VzIG5vdCBhbGxvdyBmb3IgdW5kZWZpbmVkIGFzIGEgdmFsdWUuXG4gICAgICAgIHZhciBpc1Byb3BSZXF1aXJlZCA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gIXByb3AuaXNPcHQgJiYgIXByb3BDaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBvYmplY3RcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2VDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZUNoZWNrZXJzW2ldKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBfdGhpcy5wcm9wc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdmFsdWVbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BSZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9wQ2hlY2tlcnNbaV0odiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgbnVsbCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wU2V0ID0gdGhpcy5wcm9wU2V0O1xuICAgICAgICBpZiAoYWxsb3dlZFByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BTZXQuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgeyByZXR1cm4gYWxsb3dlZFByb3BzLmFkZChwcm9wKTsgfSk7XG4gICAgICAgICAgICBwcm9wU2V0ID0gYWxsb3dlZFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHN0cmljdCBtb2RlLCBjaGVjayBhbHNvIGZvciB1bmtub3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrZXIodmFsdWUsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wU2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwocHJvcCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJZmFjZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVElmYWNlID0gVElmYWNlO1xuLyoqXG4gKiBEZWZpbmVzIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9uIGFuIGludGVyZmFjZS5cbiAqL1xuZnVuY3Rpb24gb3B0KHR5cGVTcGVjKSB7IHJldHVybiBuZXcgVE9wdGlvbmFsKHBhcnNlU3BlYyh0eXBlU3BlYykpOyB9XG5leHBvcnRzLm9wdCA9IG9wdDtcbnZhciBUT3B0aW9uYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRPcHRpb25hbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUT3B0aW9uYWwodHR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUT3B0aW9uYWwucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXIgPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXRlbUNoZWNrZXIodmFsdWUsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVE9wdGlvbmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UT3B0aW9uYWwgPSBUT3B0aW9uYWw7XG4vKipcbiAqIERlZmluZXMgYSBwcm9wZXJ0eSBpbiBhbiBpbnRlcmZhY2UuXG4gKi9cbnZhciBUUHJvcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUUHJvcChuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUHJvcDtcbn0oKSk7XG5leHBvcnRzLlRQcm9wID0gVFByb3A7XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbi4gVGhlIGZpcnN0IGFyZ3VtZW50IGRlY2xhcmVzIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlLCB0aGUgcmVzdCBkZWNsYXJlXG4gKiBpdHMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gZnVuYyhyZXN1bHRTcGVjKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHBhcmFtc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBURnVuYyhuZXcgVFBhcmFtTGlzdChwYXJhbXMpLCBwYXJzZVNwZWMocmVzdWx0U3BlYykpO1xufVxuZXhwb3J0cy5mdW5jID0gZnVuYztcbnZhciBURnVuYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEZ1bmMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEZ1bmMocGFyYW1MaXN0LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1MaXN0ID0gcGFyYW1MaXN0O1xuICAgICAgICBfdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEZ1bmMucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRydWUgOiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhIGZ1bmN0aW9uXCIsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRGdW5jO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URnVuYyA9IFRGdW5jO1xuLyoqXG4gKiBEZWZpbmVzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBwYXJhbShuYW1lLCB0eXBlU3BlYywgaXNPcHQpIHtcbiAgICByZXR1cm4gbmV3IFRQYXJhbShuYW1lLCBwYXJzZVNwZWModHlwZVNwZWMpLCBCb29sZWFuKGlzT3B0KSk7XG59XG5leHBvcnRzLnBhcmFtID0gcGFyYW07XG52YXIgVFBhcmFtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRQYXJhbShuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUGFyYW07XG59KCkpO1xuZXhwb3J0cy5UUGFyYW0gPSBUUGFyYW07XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdC5cbiAqL1xudmFyIFRQYXJhbUxpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRQYXJhbUxpc3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVFBhcmFtTGlzdChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRQYXJhbUxpc3QucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgdmFyIGlzUGFyYW1SZXF1aXJlZCA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0sIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAhcGFyYW0uaXNPcHQgJiYgIWl0ZW1DaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBhcnJheVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5wYXJhbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1SZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKHAubmFtZSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWVbaV0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChwLm5hbWUsIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tlcih2YWx1ZSwgY3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gaXRlbUNoZWNrZXJzLmxlbmd0aCA/IHRydWUgOlxuICAgICAgICAgICAgICAgIGN0eC5mYWlsKGl0ZW1DaGVja2Vycy5sZW5ndGgsIFwiaXMgZXh0cmFuZW91c1wiLCAyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUUGFyYW1MaXN0O1xufShUVHlwZSkpO1xuZXhwb3J0cy5UUGFyYW1MaXN0ID0gVFBhcmFtTGlzdDtcbi8qKlxuICogU2luZ2xlIFRUeXBlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgYmFzaWMgYnVpbHQtaW4gdHlwZXMuXG4gKi9cbnZhciBCYXNpY1R5cGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhc2ljVHlwZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCYXNpY1R5cGUodmFsaWRhdG9yLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQmFzaWNUeXBlLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiBfdGhpcy52YWxpZGF0b3IodmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLm1lc3NhZ2UsIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIEJhc2ljVHlwZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuQmFzaWNUeXBlID0gQmFzaWNUeXBlO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdWl0ZSBvZiBiYXNpYyB0eXBlcy5cbiAqL1xuZXhwb3J0cy5iYXNpY1R5cGVzID0ge1xuICAgIGFueTogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gdHJ1ZTsgfSwgXCJpcyBpbnZhbGlkXCIpLFxuICAgIG51bWJlcjogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTsgfSwgXCJpcyBub3QgYSBudW1iZXJcIiksXG4gICAgb2JqZWN0OiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdik7IH0sIFwiaXMgbm90IGFuIG9iamVjdFwiKSxcbiAgICBib29sZWFuOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKTsgfSwgXCJpcyBub3QgYSBib29sZWFuXCIpLFxuICAgIHN0cmluZzogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKTsgfSwgXCJpcyBub3QgYSBzdHJpbmdcIiksXG4gICAgc3ltYm9sOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwic3ltYm9sXCIpOyB9LCBcImlzIG5vdCBhIHN5bWJvbFwiKSxcbiAgICB2b2lkOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodiA9PSBudWxsKTsgfSwgXCJpcyBub3Qgdm9pZFwiKSxcbiAgICB1bmRlZmluZWQ6IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2ID09PSB1bmRlZmluZWQpOyB9LCBcImlzIG5vdCB1bmRlZmluZWRcIiksXG4gICAgbnVsbDogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHYgPT09IG51bGwpOyB9LCBcImlzIG5vdCBudWxsXCIpLFxuICAgIG5ldmVyOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmYWxzZTsgfSwgXCJpcyB1bmV4cGVjdGVkXCIpLFxuICAgIERhdGU6IG5ldyBCYXNpY1R5cGUoZ2V0SXNOYXRpdmVDaGVja2VyKFwiW29iamVjdCBEYXRlXVwiKSwgXCJpcyBub3QgYSBEYXRlXCIpLFxuICAgIFJlZ0V4cDogbmV3IEJhc2ljVHlwZShnZXRJc05hdGl2ZUNoZWNrZXIoXCJbb2JqZWN0IFJlZ0V4cF1cIiksIFwiaXMgbm90IGEgUmVnRXhwXCIpLFxufTtcbi8vIFRoaXMgYXBwcm9hY2ggZm9yIGNoZWNraW5nIG5hdGl2ZSBvYmplY3QgdHlwZXMgbWlycm9ycyB0aGF0IG9mIGxvZGFzaC4gSXRzIGFkdmFudGFnZSBvdmVyXG4vLyBgaXNpbnN0YW5jZWAgaXMgdGhhdCBpdCBjYW4gc3RpbGwgcmV0dXJuIHRydWUgZm9yIG5hdGl2ZSBvYmplY3RzIGNyZWF0ZWQgaW4gZGlmZmVyZW50IEpTXG4vLyBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxudmFyIG5hdGl2ZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGdldElzTmF0aXZlQ2hlY2tlcih0YWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgJiYgbmF0aXZlVG9TdHJpbmcuY2FsbCh2KSA9PT0gdGFnOyB9O1xufVxuaWYgKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXMuQnVmZmVyID0gbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHYpOyB9LCBcImlzIG5vdCBhIEJ1ZmZlclwiKTtcbn1cbnZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGFycmF5XzEpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXNbYXJyYXlfMS5uYW1lXSA9IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2IGluc3RhbmNlb2YgYXJyYXlfMSk7IH0sIFwiaXMgbm90IGEgXCIgKyBhcnJheV8xLm5hbWUpO1xufTtcbi8vIFN1cHBvcnQgdHlwZWQgYXJyYXlzIG9mIHZhcmlvdXMgZmxhdm9yc1xuZm9yICh2YXIgX2kgPSAwLCBfYSA9IFtJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXksIEFycmF5QnVmZmVyXTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgYXJyYXlfMSA9IF9hW19pXTtcbiAgICBfbG9vcF8xKGFycmF5XzEpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoZWNrZXIgPSBleHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gdm9pZCAwO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqXG4gKiBFeHBvcnQgZnVuY3Rpb25zIHVzZWQgdG8gZGVmaW5lIGludGVyZmFjZXMuXG4gKi9cbnZhciB0eXBlc18yID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUQXJyYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuVEFycmF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVEVudW1UeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRFbnVtVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRFbnVtTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URW51bUxpdGVyYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJURnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URnVuYzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRJZmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5USWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UTGl0ZXJhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlROYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlROYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVE9wdGlvbmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRPcHRpb25hbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRQYXJhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUGFyYW07IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUGFyYW1MaXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRQYXJhbUxpc3Q7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUHJvcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUHJvcDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRUdXBsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRVbmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVW5pb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUSW50ZXJzZWN0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRJbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5hcnJheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW1saXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuZW51bWxpdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW10eXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLmVudW10eXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5mdW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaWZhY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuaWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIubGl0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5uYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3B0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLm9wdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcmFtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLnBhcmFtOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHVwbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIudHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi51bmlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5pbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNpY1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuQmFzaWNUeXBlOyB9IH0pO1xudmFyIHV0aWxfMiA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfMi5WRXJyb3I7IH0gfSk7XG4vKipcbiAqIFRha2VzIG9uZSBvZiBtb3JlIHR5cGUgc3VpdGVzIChlLmcuIGEgbW9kdWxlIGdlbmVyYXRlZCBieSBgdHMtaW50ZXJmYWNlLWJ1aWxkZXJgKSwgYW5kIGNvbWJpbmVzXG4gKiB0aGVtIGludG8gYSBzdWl0ZSBvZiBpbnRlcmZhY2UgY2hlY2tlcnMuIElmIGEgdHlwZSBpcyB1c2VkIGJ5IG5hbWUsIHRoYXQgbmFtZSBzaG91bGQgYmUgcHJlc2VudFxuICogYW1vbmcgdGhlIHBhc3NlZC1pbiB0eXBlIHN1aXRlcy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IG1hcHMgdHlwZSBuYW1lcyB0byBDaGVja2VyIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrZXJzKCkge1xuICAgIHZhciB0eXBlU3VpdGUgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3VpdGVbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZ1bGxTdWl0ZSA9IE9iamVjdC5hc3NpZ24uYXBwbHkoT2JqZWN0LCBfX3NwcmVhZEFycmF5cyhbe30sIHR5cGVzXzEuYmFzaWNUeXBlc10sIHR5cGVTdWl0ZSkpO1xuICAgIHZhciBjaGVja2VycyA9IHt9O1xuICAgIGZvciAodmFyIF9hID0gMCwgdHlwZVN1aXRlXzEgPSB0eXBlU3VpdGU7IF9hIDwgdHlwZVN1aXRlXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBzdWl0ZV8xID0gdHlwZVN1aXRlXzFbX2FdO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gT2JqZWN0LmtleXMoc3VpdGVfMSk7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9jW19iXTtcbiAgICAgICAgICAgIGNoZWNrZXJzW25hbWVdID0gbmV3IENoZWNrZXIoZnVsbFN1aXRlLCBzdWl0ZV8xW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tlcnM7XG59XG5leHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gY3JlYXRlQ2hlY2tlcnM7XG4vKipcbiAqIENoZWNrZXIgaW1wbGVtZW50cyB2YWxpZGF0aW9uIG9mIG9iamVjdHMsIGFuZCBhbHNvIGluY2x1ZGVzIGFjY2Vzc29ycyB0byB2YWxpZGF0ZSBtZXRob2QgY2FsbHMuXG4gKiBDaGVja2VycyBzaG91bGQgYmUgY3JlYXRlZCB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAuXG4gKi9cbnZhciBDaGVja2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8vIENyZWF0ZSBjaGVja2VycyBieSB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAgZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gQ2hlY2tlcihzdWl0ZSwgdHR5cGUsIF9wYXRoKSB7XG4gICAgICAgIGlmIChfcGF0aCA9PT0gdm9pZCAwKSB7IF9wYXRoID0gJ3ZhbHVlJzsgfVxuICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7XG4gICAgICAgIHRoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRJZmFjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHR0eXBlLnByb3BzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gX2FbX2ldO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KHAubmFtZSwgcC50dHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VyUGxhaW4gPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGVja2VyU3RyaWN0ID0gdGhpcy50dHlwZS5nZXRDaGVja2VyKHN1aXRlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwYXRoIHRvIHJlcG9ydCBpbiBlcnJvcnMsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCJ2YWx1ZVwiLiAoRS5nLiBpZiB0aGUgQ2hlY2tlciBpcyBmb3JcbiAgICAgKiBhIFwicGVyc29uXCIgaW50ZXJmYWNlLCBzZXQgcGF0aCB0byBcInBlcnNvblwiIHRvIHJlcG9ydCBlLmcuIFwicGVyc29uLm5hbWUgaXMgbm90IGEgc3RyaW5nXCIuKVxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnNldFJlcG9ydGVkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgY2hlY2tlcidzIHR5cGUsIG9yIHRocm93IEVycm9yLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9kb0NoZWNrKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7IH07XG4gICAgLyoqXG4gICAgICogQSBmYXN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFRoaXMgcmV0dXJuc1xuICAgICAqIHRydWUgb3IgZmFsc2UsIGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGlzIGZhc3QgYm90aCBvbiBzdWNjZXNzIGFuZCBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlclBsYWluKHZhbHVlLCBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBlcnJvciBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGlmIHRoZSBnaXZlbiB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5IHRoaXNcbiAgICAgKiBDaGVja2VyJ3MgdHlwZSwgb3IgbnVsbCBpZiBpdCBkb2VzLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb1ZhbGlkYXRlKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBzYXRpc2ZpZXMgdGhpcyBjaGVja2VyJ3MgdHlwZSBzdHJpY3RseS4gVGhpcyBjaGVja3MgdGhhdCBvYmplY3RzXG4gICAgICogYW5kIHR1cGxlcyBoYXZlIG5vIGV4dHJhIG1lbWJlcnMuIE5vdGUgdGhhdCB0aGlzIHByZXZlbnRzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNvIHVzdWFsbHlcbiAgICAgKiBhIHBsYWluIGNoZWNrKCkgaXMgbW9yZSBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RDaGVjayA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fZG9DaGVjayh0aGlzLmNoZWNrZXJTdHJpY3QsIHZhbHVlKTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZhc3Qgc3RyaWN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFJldHVybnNcbiAgICAgKiB0cnVlIG9yIGZhbHNlLCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBpcyBmYXN0IGJvdGggb24gc3VjY2VzcyBhbmQgb24gZmFpbHVyZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RUZXN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZXJTdHJpY3QodmFsdWUsIG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIG9iamVjdCBkZXNjcmliaW5nIHRoZSBlcnJvcnMgaWYgdGhlIGdpdmVuIHZhbHVlIGRvZXMgbm90IHNhdGlzZnkgdGhpc1xuICAgICAqIENoZWNrZXIncyB0eXBlIHN0cmljdGx5LCBvciBudWxsIGlmIGl0IGRvZXMuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuc3RyaWN0VmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvVmFsaWRhdGUodGhpcy5jaGVja2VyU3RyaWN0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSB0eXBlIHJlcXVpcmVkIGZvciB0aGUgZ2l2ZW5cbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGlzIGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRQcm9wID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5wcm9wcy5nZXQocHJvcCk7XG4gICAgICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlR5cGUgaGFzIG5vIHByb3BlcnR5IFwiICsgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHR0eXBlLCB0aGlzLl9wYXRoICsgXCIuXCIgKyBwcm9wKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY2hlY2tlciBpcyBmb3IgYW4gaW50ZXJmYWNlLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgdGhlIGFyZ3VtZW50LWxpc3QgcmVxdWlyZWQgdG8gY2FsbFxuICAgICAqIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhpcyBpbnRlcmZhY2UuIEUuZy4gaWYgdGhpcyBDaGVja2VyIGlzIGZvciB0aGUgaW50ZXJmYWNlOlxuICAgICAqICAgIGludGVyZmFjZSBGb28ge1xuICAgICAqICAgICAgZmluZChzOiBzdHJpbmcsIHBvcz86IG51bWJlcik6IG51bWJlcjtcbiAgICAgKiAgICB9XG4gICAgICogVGhlbiBtZXRob2RBcmdzKFwiZmluZFwiKS5jaGVjayguLi4pIHdpbGwgc3VjY2VlZCBmb3IgW1wiZm9vXCJdIGFuZCBbXCJmb29cIiwgM10sIGJ1dCBub3QgZm9yIFsxN10uXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUubWV0aG9kQXJncyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnBhcmFtTGlzdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuXG4gICAgICogbWV0aG9kIG9mIHRoaXMgaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLm1ldGhvZFJlc3VsdCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnJlc3VsdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGEgZnVuY3Rpb24sIHJldHVybnMgYSBDaGVja2VyIGZvciBpdHMgYXJndW1lbnQtbGlzdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRBcmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISh0aGlzLnR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdldEFyZ3MoKSBhcHBsaWVkIHRvIG5vbi1mdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENoZWNrZXIodGhpcy5zdWl0ZSwgdGhpcy50dHlwZS5wYXJhbUxpc3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBjaGVja2VyIGlzIGZvciBhIGZ1bmN0aW9uLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghKHRoaXMudHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRGdW5jKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0UmVzdWx0KCkgYXBwbGllZCB0byBub24tZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRoaXMudHR5cGUucmVzdWx0KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgdHlwZSBmb3Igd2hpY2ggdGhpcyBpcyBhIGNoZWNrZXIuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHR5cGU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgY2hlY2soKSBhbmQgc3RyaWN0Q2hlY2soKS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5fZG9DaGVjayA9IGZ1bmN0aW9uIChjaGVja2VyRnVuYywgdmFsdWUpIHtcbiAgICAgICAgdmFyIG5vb3BDdHggPSBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCk7XG4gICAgICAgIGlmICghY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgICAgICBjaGVja2VyRnVuYyh2YWx1ZSwgZGV0YWlsQ3R4KTtcbiAgICAgICAgICAgIHRocm93IGRldGFpbEN0eC5nZXRFcnJvcih0aGlzLl9wYXRoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2RvVmFsaWRhdGUgPSBmdW5jdGlvbiAoY2hlY2tlckZ1bmMsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub29wQ3R4ID0gbmV3IHV0aWxfMS5Ob29wQ29udGV4dCgpO1xuICAgICAgICBpZiAoY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIGNoZWNrZXJGdW5jKHZhbHVlLCBkZXRhaWxDdHgpO1xuICAgICAgICByZXR1cm4gZGV0YWlsQ3R4LmdldEVycm9yRGV0YWlsKHRoaXMuX3BhdGgpO1xuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2dldE1ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0dHlwZSA9IHRoaXMucHJvcHMuZ2V0KG1ldGhvZE5hbWUpO1xuICAgICAgICBpZiAoIXR0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIGhhcyBubyBwcm9wZXJ0eSBcIiArIG1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3BlcnR5IFwiICsgbWV0aG9kTmFtZSArIFwiIGlzIG5vdCBhIG1ldGhvZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHR5cGU7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hlY2tlcjtcbn0oKSk7XG5leHBvcnRzLkNoZWNrZXIgPSBDaGVja2VyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTGluZXNBbmRDb2x1bW5zID0gdm9pZCAwO1xudmFyIExGID0gJ1xcbic7XG52YXIgQ1IgPSAnXFxyJztcbnZhciBMaW5lc0FuZENvbHVtbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGluZXNBbmRDb2x1bW5zKHN0cmluZykge1xuICAgICAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICAgICAgdmFyIG9mZnNldHMgPSBbMF07XG4gICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IHN0cmluZy5sZW5ndGg7KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZ1tvZmZzZXRdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBMRjpcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IExGLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ1I6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDUi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdbb2Zmc2V0XSA9PT0gTEYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBMRi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgIH1cbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxvY2F0aW9uRm9ySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0cyA9IHRoaXMub2Zmc2V0cztcbiAgICAgICAgd2hpbGUgKG9mZnNldHNbbGluZSArIDFdIDw9IGluZGV4KSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IGluZGV4IC0gb2Zmc2V0c1tsaW5lXTtcbiAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICB9O1xuICAgIExpbmVzQW5kQ29sdW1ucy5wcm90b3R5cGUuaW5kZXhGb3JMb2NhdGlvbiA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmUsIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbjtcbiAgICAgICAgaWYgKGxpbmUgPCAwIHx8IGxpbmUgPj0gdGhpcy5vZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA8IDAgfHwgY29sdW1uID4gdGhpcy5sZW5ndGhPZkxpbmUobGluZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbbGluZV0gKyBjb2x1bW47XG4gICAgfTtcbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxlbmd0aE9mTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldHNbbGluZV07XG4gICAgICAgIHZhciBuZXh0T2Zmc2V0ID0gbGluZSA9PT0gdGhpcy5vZmZzZXRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gdGhpcy5zdHJpbmcubGVuZ3RoXG4gICAgICAgICAgICA6IHRoaXMub2Zmc2V0c1tsaW5lICsgMV07XG4gICAgICAgIHJldHVybiBuZXh0T2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH07XG4gICAgcmV0dXJuIExpbmVzQW5kQ29sdW1ucztcbn0oKSk7XG5leHBvcnRzLkxpbmVzQW5kQ29sdW1ucyA9IExpbmVzQW5kQ29sdW1ucztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTGluZXNBbmRDb2x1bW5zO1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gZXhwb3J0cy5hc1NldCA9IGV4cG9ydHMuc2ltcGxlQ29tcGFyYXRvciA9IGV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBDb21wYXJlcyBEZWZhdWx0Q29tcGFyYWJsZXMgdG8gZm9ybSBhIHN0cmljdCBwYXJ0aWFsIG9yZGVyaW5nLlxyXG4gKlxyXG4gKiBIYW5kbGVzICsvLTAgYW5kIE5hTiBsaWtlIE1hcDogTmFOIGlzIGVxdWFsIHRvIE5hTiwgYW5kIC0wIGlzIGVxdWFsIHRvICswLlxyXG4gKlxyXG4gKiBBcnJheXMgYXJlIGNvbXBhcmVkIHVzaW5nICc8JyBhbmQgJz4nLCB3aGljaCBtYXkgY2F1c2UgdW5leHBlY3RlZCBlcXVhbGl0eTpcclxuICogZm9yIGV4YW1wbGUgWzFdIHdpbGwgYmUgY29uc2lkZXJlZCBlcXVhbCB0byBbJzEnXS5cclxuICpcclxuICogVHdvIG9iamVjdHMgd2l0aCBlcXVhbCB2YWx1ZU9mIGNvbXBhcmUgdGhlIHNhbWUsIGJ1dCBjb21wYXJlIHVuZXF1YWwgdG9cclxuICogcHJpbWl0aXZlcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICAvLyBTcGVjaWFsIGNhc2UgZmluaXRlIG51bWJlcnMgZmlyc3QgZm9yIHBlcmZvcm1hbmNlLlxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB0cmljayBvZiB1c2luZyAnYSAtIGInIGFuZCBjaGVja2luZyBmb3IgTmFOIHRvIGRldGVjdCBub24tbnVtYmVyc1xyXG4gICAgLy8gZG9lcyBub3Qgd29yayBpZiB0aGUgc3RyaW5ncyBhcmUgbnVtZXJpYyAoZXg6IFwiNVwiKS4gVGhpcyB3b3VsZCBsZWFkaW5nIG1vc3QgXHJcbiAgICAvLyBjb21wYXJpc29uIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGFwcHJvYWNoIHRvIGZhaWwgdG8gaGF2ZSB0cmFuc2l0aXZpdHkuXHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGEpICYmIE51bWJlci5pc0Zpbml0ZShiKSkge1xyXG4gICAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH1cclxuICAgIC8vIFRoZSBkZWZhdWx0IDwgYW5kID4gb3BlcmF0b3JzIGFyZSBub3QgdG90YWxseSBvcmRlcmVkLiBUbyBhbGxvdyB0eXBlcyB0byBiZSBtaXhlZFxyXG4gICAgLy8gaW4gYSBzaW5nbGUgY29sbGVjdGlvbiwgY29tcGFyZSB0eXBlcyBhbmQgb3JkZXIgdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBieSB0eXBlLlxyXG4gICAgdmFyIHRhID0gdHlwZW9mIGE7XHJcbiAgICB2YXIgdGIgPSB0eXBlb2YgYjtcclxuICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICByZXR1cm4gdGEgPCB0YiA/IC0xIDogMTtcclxuICAgIH1cclxuICAgIGlmICh0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBzdGFuZGFyZGl6ZWQgSmF2YVNjcmlwdCBidWc6IG51bGwgaXMgbm90IGFuIG9iamVjdCwgYnV0IHR5cGVvZiBzYXlzIGl0IGlzXHJcbiAgICAgICAgaWYgKGEgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBiID09PSBudWxsID8gMCA6IC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKGIgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGEgPSBhLnZhbHVlT2YoKTtcclxuICAgICAgICBiID0gYi52YWx1ZU9mKCk7XHJcbiAgICAgICAgdGEgPSB0eXBlb2YgYTtcclxuICAgICAgICB0YiA9IHR5cGVvZiBiO1xyXG4gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgdHdvIHZhbHVlT2YoKXMgcHJvZHVjaW5nIGRpZmZlcmVudCB0eXBlc1xyXG4gICAgICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYSBhbmQgYiBhcmUgbm93IHRoZSBzYW1lIHR5cGUsIGFuZCB3aWxsIGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkgXHJcbiAgICAvLyAod2hpY2ggd2UgYXNzdW1lIGhvbGRzIG51bWJlcnMgb3Igc3RyaW5ncyksIG9yIHNvbWV0aGluZyB1bnN1cHBvcnRlZC5cclxuICAgIGlmIChhIDwgYilcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICBpZiAoYSA+IGIpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIC8vIE9yZGVyIE5hTiBsZXNzIHRoYW4gb3RoZXIgbnVtYmVyc1xyXG4gICAgaWYgKE51bWJlci5pc05hTihhKSlcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGIpID8gMCA6IC0xO1xyXG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzTmFOKGIpKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gVGhpcyBjb3VsZCBiZSB0d28gb2JqZWN0cyAoZS5nLiBbN10gYW5kIFsnNyddKSB0aGF0IGFyZW4ndCBvcmRlcmVkXHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IDAgOiBOdW1iZXIuTmFOO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcclxuO1xyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJhdG9yKGEsIGIpIHtcclxuICAgIHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMDtcclxufVxyXG5leHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBzaW1wbGVDb21wYXJhdG9yO1xyXG47XHJcbi8qKlxyXG4gKiBBIHJlYXNvbmFibHkgZmFzdCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB3aXRoIGEgcG93ZXJmdWwgQVBJLlxyXG4gKiBMYXJnZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQgTWFwLiBCVHJlZSBpcyBhIEIrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUsXHJcbiAqIHNvIHRoZSBjb2xsZWN0aW9uIGlzIHNvcnRlZCBieSBrZXkuXHJcbiAqXHJcbiAqIEIrIHRyZWVzIHRlbmQgdG8gdXNlIG1lbW9yeSBtb3JlIGVmZmljaWVudGx5IHRoYW4gaGFzaHRhYmxlcyBzdWNoIGFzIHRoZVxyXG4gKiBzdGFuZGFyZCBNYXAsIGVzcGVjaWFsbHkgd2hlbiB0aGUgY29sbGVjdGlvbiBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZlxyXG4gKiBpdGVtcy4gSG93ZXZlciwgbWFpbnRhaW5pbmcgdGhlIHNvcnQgb3JkZXIgbWFrZXMgdGhlbSBtb2Rlc3RseSBzbG93ZXI6XHJcbiAqIE8obG9nIHNpemUpIHJhdGhlciB0aGFuIE8oMSkuIFRoaXMgQisgdHJlZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBPKDEpXHJcbiAqIGZhc3QgY2xvbmluZy4gSXQgYWxzbyBzdXBwb3J0cyBmcmVlemUoKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXRcclxuICogYSBCVHJlZSBpcyBub3QgY2hhbmdlZCBhY2NpZGVudGFsbHkuXHJcbiAqXHJcbiAqIENvbmZ1c2luZ2x5LCB0aGUgRVM2IE1hcC5mb3JFYWNoKGMpIG1ldGhvZCBjYWxscyBjKHZhbHVlLGtleSkgaW5zdGVhZCBvZlxyXG4gKiBjKGtleSx2YWx1ZSksIGluIGNvbnRyYXN0IHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBzZXQoKSBhbmQgZW50cmllcygpXHJcbiAqIHdoaWNoIHB1dCB0aGUga2V5IGZpcnN0LiBJIGNhbiBvbmx5IGFzc3VtZSB0aGF0IHRoZSBvcmRlciB3YXMgcmV2ZXJzZWQgb25cclxuICogdGhlIHRoZW9yeSB0aGF0IHVzZXJzIHdvdWxkIHVzdWFsbHkgd2FudCB0byBleGFtaW5lIHZhbHVlcyBhbmQgaWdub3JlIGtleXMuXHJcbiAqIEJUcmVlJ3MgZm9yRWFjaCgpIHRoZXJlZm9yZSB3b3JrcyB0aGUgc2FtZSB3YXksIGJ1dCBhIHNlY29uZCBtZXRob2RcclxuICogYC5mb3JFYWNoUGFpcigoa2V5LHZhbHVlKT0+ey4uLn0pYCBpcyBwcm92aWRlZCB3aGljaCBzZW5kcyB5b3UgdGhlIGtleVxyXG4gKiBmaXJzdCBhbmQgdGhlIHZhbHVlIHNlY29uZDsgdGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgaXQgaXNcclxuICogdGhlIFwibmF0aXZlXCIgZm9yLWVhY2ggbWV0aG9kIGZvciB0aGlzIGNsYXNzLlxyXG4gKlxyXG4gKiBPdXQgb2YgdGhlIGJveCwgQlRyZWUgc3VwcG9ydHMga2V5cyB0aGF0IGFyZSBudW1iZXJzLCBzdHJpbmdzLCBhcnJheXMgb2ZcclxuICogbnVtYmVycy9zdHJpbmdzLCBEYXRlLCBhbmQgb2JqZWN0cyB0aGF0IGhhdmUgYSB2YWx1ZU9mKCkgbWV0aG9kIHJldHVybmluZyBhXHJcbiAqIG51bWJlciBvciBzdHJpbmcuIE90aGVyIGRhdGEgdHlwZXMsIHN1Y2ggYXMgYXJyYXlzIG9mIERhdGUgb3IgY3VzdG9tXHJcbiAqIG9iamVjdHMsIHJlcXVpcmUgYSBjdXN0b20gY29tcGFyYXRvciwgd2hpY2ggeW91IG11c3QgcGFzcyBhcyB0aGUgc2Vjb25kXHJcbiAqIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciAodGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcclxuICogaW5pdGlhbCBpdGVtcykuIFN5bWJvbHMgY2Fubm90IGJlIHVzZWQgYXMga2V5cyBiZWNhdXNlIHRoZXkgYXJlIHVub3JkZXJlZFxyXG4gKiAob25lIFN5bWJvbCBpcyBuZXZlciBcImdyZWF0ZXJcIiBvciBcImxlc3NcIiB0aGFuIGFub3RoZXIpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBHaXZlbiBhIHtuYW1lOiBzdHJpbmcsIGFnZTogbnVtYmVyfSBvYmplY3QsIHlvdSBjYW4gY3JlYXRlIGEgdHJlZSBzb3J0ZWQgYnlcclxuICogbmFtZSBhbmQgdGhlbiBieSBhZ2UgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiAgICAgdmFyIHRyZWUgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCAoYSwgYikgPT4ge1xyXG4gKiAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAxOyAvLyBSZXR1cm4gYSBudW1iZXIgPjAgd2hlbiBhID4gYlxyXG4gKiAgICAgICBlbHNlIGlmIChhLm5hbWUgPCBiLm5hbWUpXHJcbiAqICAgICAgICAgcmV0dXJuIC0xOyAvLyBSZXR1cm4gYSBudW1iZXIgPDAgd2hlbiBhIDwgYlxyXG4gKiAgICAgICBlbHNlIC8vIG5hbWVzIGFyZSBlcXVhbCAob3IgaW5jb21wYXJhYmxlKVxyXG4gKiAgICAgICAgIHJldHVybiBhLmFnZSAtIGIuYWdlOyAvLyBSZXR1cm4gPjAgd2hlbiBhLmFnZSA+IGIuYWdlXHJcbiAqICAgICB9KTtcclxuICpcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6MTd9LCBcImhhcHB5XCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJGcmFuXCIsIGFnZTo0MH0sIFwiYnVzeSAmIHN0cmVzc2VkXCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJCaWxsXCIsIGFnZTo1NX0sIFwicmVjZW50bHkgbGFpZCBvZmZcIik7XHJcbiAqICAgICB0cmVlLmZvckVhY2hQYWlyKChrLCB2KSA9PiB7XHJcbiAqICAgICAgIGNvbnNvbGUubG9nKGBOYW1lOiAke2submFtZX0gQWdlOiAke2suYWdlfSBTdGF0dXM6ICR7dn1gKTtcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIFwicmFuZ2VcIiBtZXRob2RzIChgZm9yRWFjaCwgZm9yUmFuZ2UsIGVkaXRSYW5nZWApIHdpbGwgcmV0dXJuIHRoZSBudW1iZXJcclxuICogb2YgZWxlbWVudHMgdGhhdCB3ZXJlIHNjYW5uZWQuIEluIGFkZGl0aW9uLCB0aGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un1cclxuICogdG8gc3RvcCBlYXJseSBhbmQgcmV0dXJuIFIgZnJvbSB0aGUgb3V0ZXIgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIC0gVE9ETzogVGVzdCBwZXJmb3JtYW5jZSBvZiBwcmVhbGxvY2F0aW5nIHZhbHVlcyBhcnJheSBhdCBtYXggc2l6ZVxyXG4gKiAtIFRPRE86IEFkZCBmYXN0IGluaXRpYWxpemF0aW9uIHdoZW4gYSBzb3J0ZWQgYXJyYXkgaXMgcHJvdmlkZWQgdG8gY29uc3RydWN0b3JcclxuICpcclxuICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3F3ZXJ0aWUvYnRyZWUtdHlwZXNjcmlwdFxyXG4gKlxyXG4gKiBBcmUgeW91IGEgQyMgZGV2ZWxvcGVyPyBZb3UgbWlnaHQgbGlrZSB0aGUgc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMgSSBtYWRlIGZvciBDIzpcclxuICogQkRpY3Rpb25hcnksIEJMaXN0LCBldGMuIFNlZSBodHRwOi8vY29yZS5sb3ljLm5ldC9jb2xsZWN0aW9ucy9cclxuICpcclxuICogQGF1dGhvciBEYXZpZCBQaWVwZ3Jhc3NcclxuICovXHJcbnZhciBCVHJlZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gZW1wdHkgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBjb21wYXJlIEN1c3RvbSBmdW5jdGlvbiB0byBjb21wYXJlIHBhaXJzIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlLlxyXG4gICAgICogICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0Q29tcGFyYXRvciB3aWxsIGJlIHVzZWQgd2hpY2ggaXMgdmFsaWQgYXMgbG9uZyBhcyBLIGV4dGVuZHMgRGVmYXVsdENvbXBhcmFibGUuXHJcbiAgICAgKiBAcGFyYW0gZW50cmllcyBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZVxyXG4gICAgICogQHBhcmFtIG1heE5vZGVTaXplIEJyYW5jaGluZyBmYWN0b3IgKG1heGltdW0gaXRlbXMgb3IgY2hpbGRyZW4gcGVyIG5vZGUpXHJcbiAgICAgKiAgIE11c3QgYmUgaW4gcmFuZ2UgNC4uMjU2LiBJZiB1bmRlZmluZWQgb3IgPDQgdGhlbiBkZWZhdWx0IGlzIHVzZWQ7IGlmID4yNTYgdGhlbiAyNTYuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJUcmVlKGVudHJpZXMsIGNvbXBhcmUsIG1heE5vZGVTaXplKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgICAgICB0aGlzLl9tYXhOb2RlU2l6ZSA9IG1heE5vZGVTaXplID49IDQgPyBNYXRoLm1pbihtYXhOb2RlU2l6ZSwgMjU2KSA6IDMyO1xyXG4gICAgICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJhdG9yO1xyXG4gICAgICAgIGlmIChlbnRyaWVzKVxyXG4gICAgICAgICAgICB0aGlzLnNldFBhaXJzKGVudHJpZXMpO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8vIEVTNiBNYXA8SyxWPiBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWZmIHRoZSB0cmVlIGNvbnRhaW5zIG5vIGtleS12YWx1ZSBwYWlycy4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7IH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBSZWxlYXNlcyB0aGUgdHJlZSBzbyB0aGF0IGl0cyBzaXplIGlzIDAuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRVM2IE1hcCwgdGhlIGFyZ3VtZW50IG9yZGVyIHRvXHJcbiAgICAgKiAgdGhlIGNhbGxiYWNrIGlzIGJhY2t3YXJkczogdmFsdWUgZmlyc3QsIHRoZW4ga2V5LiBDYWxsIGZvckVhY2hQYWlyXHJcbiAgICAgKiAgaW5zdGVhZCB0byByZWNlaXZlIHRoZSBrZXkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICogQHBhcmFtIHRoaXNBcmcgSWYgcHJvdmlkZWQsIHRoaXMgcGFyYW1ldGVyIGlzIGFzc2lnbmVkIGFzIHRoZSBgdGhpc2BcclxuICAgICAqICAgICAgICB2YWx1ZSBmb3IgZWFjaCBjYWxsYmFjay5cclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHRoYXQgd2VyZSBzZW50IHRvIHRoZSBjYWxsYmFjayxcclxuICAgICAqICAgICAgICBvciB0aGUgUiB2YWx1ZSBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzQXJnICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gY2FsbGJhY2sodiwgaywgX3RoaXMpOyB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIFRoZSBjYWxsYmFjayBjYW4gcmV0dXJuIHticmVhazpSfSAod2hlcmUgUiBpcyBhbnkgdmFsdWVcclxuICAgICAqICBleGNlcHQgdW5kZWZpbmVkKSB0byBzdG9wIGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gUiBmcm9tIGZvckVhY2hQYWlyLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4ge2JyZWFrOlJ9IHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUi5cclxuICAgICAqICAgICAgICBUaGUgcmVhc29uIHRoYXQgeW91IG11c3QgcmV0dXJuIHticmVhazpSfSBpbnN0ZWFkIG9mIHNpbXBseSBSXHJcbiAgICAgKiAgICAgICAgaXRzZWxmIGlzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGVkaXRSYW5nZSgpLCB3aGljaCBhbGxvd3NcclxuICAgICAqICAgICAgICBtdWx0aXBsZSBhY3Rpb25zLCBub3QganVzdCBicmVha2luZy5cclxuICAgICAqIEBwYXJhbSBpbml0aWFsQ291bnRlciBUaGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgb2ZcclxuICAgICAqICAgICAgICBgb25Gb3VuZGAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGUgY291bnRlciBpbmNyZWFzZXNcclxuICAgICAqICAgICAgICBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQgdmFsdWU6IDBcclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgc2VudCB0byB0aGUgY2FsbGJhY2sgKHBsdXMgaW5pdGlhbENvdW50ZXIsXHJcbiAgICAgKiAgICAgICAgaWYgeW91IHByb3ZpZGVkIG9uZSkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5lZCB7YnJlYWs6Un0gdGhlblxyXG4gICAgICogICAgICAgIHRoZSBSIHZhbHVlIGlzIHJldHVybmVkIGluc3RlYWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZm9yRWFjaFBhaXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHRoaXMubWluS2V5KCksIGhpZ2ggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGxvdywgaGlnaCwgdHJ1ZSwgY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgcGFpciBpbiB0aGUgdHJlZSBhbmQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgYSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlLCBvciBkZWZhdWx0VmFsdWUgaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdGhpcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9yIG92ZXJ3cml0ZXMgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc29ydCBvcmRlciBvZlxyXG4gICAgICogICAgICAgIGRhdGEgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUga2V5IChvcHRpb25hbClcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcga2V5LXZhbHVlIHBhaXJcclxuICAgICAqICAgICAgICAoZGVmYXVsdDogdHJ1ZSkuIElmIHRoaXMgaXMgZmFsc2UgYW5kIHRoZXJlIGlzIGFuIGV4aXN0aW5nXHJcbiAgICAgKiAgICAgICAga2V5LXZhbHVlIHBhaXIgdGhlbiB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5ldyBrZXktdmFsdWUgcGFpciB3YXMgYWRkZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICogTm90ZTogd2hlbiBvdmVyd3JpdGluZyBhIHByZXZpb3VzIGVudHJ5LCB0aGUga2V5IGlzIHVwZGF0ZWRcclxuICAgICAqIGFzIHdlbGwgYXMgdGhlIHZhbHVlLiBUaGlzIGhhcyBubyBlZmZlY3QgdW5sZXNzIHRoZSBuZXcga2V5XHJcbiAgICAgKiBoYXMgZGF0YSB0aGF0IGRvZXMgbm90IGFmZmVjdCBpdHMgc29ydCBvcmRlci5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fcm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHRoaXMuX3Jvb3QuY2xvbmUoKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcm9vdC5zZXQoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0aGlzKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgLy8gUm9vdCBub2RlIGhhcyBzcGxpdCwgc28gY3JlYXRlIGEgbmV3IHJvb3Qgbm9kZS5cclxuICAgICAgICB0aGlzLl9yb290ID0gbmV3IEJOb2RlSW50ZXJuYWwoW3RoaXMuX3Jvb3QsIHJlc3VsdF0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzIGluIHRoZSBCKyB0cmVlLCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKiBVc2UgZ2V0KCkgZm9yIGJlc3QgcGVyZm9ybWFuY2U7IHVzZSBoYXMoKSBpZiB5b3UgbmVlZCB0b1xyXG4gICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBcInVuZGVmaW5lZCB2YWx1ZVwiIGFuZCBcImtleSBub3QgcHJlc2VudFwiLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZGV0ZWN0XHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGtleSwga2V5LCB0cnVlLCB1bmRlZmluZWQpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZmluZFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHBhaXIgd2FzIGZvdW5kIGFuZCByZW1vdmVkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgRGVsZXRlUmFuZ2UpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LXZhbHVlIHBhaXJzIHNldC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoUGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0UGFpcnMocGFpcnMsIG92ZXJ3cml0ZSkgIT09IDAgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5cyBwcmVzZW50LlxyXG4gICAgICogIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGFkZC4gSWYgYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0cmVlLFxyXG4gICAgICogICAgICAgICBuZWl0aGVyIHRoZSBleGlzdGluZyBrZXkgbm9yIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBtb2RpZmllZC5cclxuICAgICAqICBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBhbGwga2V5cyBhbHJlYWR5XHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcywgYWxsXHJcbiAgICAgKiAgbm9kZShzKSBsZWFkaW5nIHRvIGV4aXN0aW5nIGtleXMgYXJlIGNsb25lZCBldmVuIGlmIHRoZSBjb2xsZWN0aW9uIGlzXHJcbiAgICAgKiAgdWx0aW1hdGVseSB1bmNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhLZXlzID0gZnVuY3Rpb24gKGtleXMsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKSwgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY2hhbmdlZCA9IG51LnNldChrZXlzW2ldLCB1bmRlZmluZWQsIGZhbHNlKSB8fCBjaGFuZ2VkO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5UaGlzSWZVbmNoYW5nZWQgJiYgIWNoYW5nZWQgPyB0aGlzIDogbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LlxyXG4gICAgICogIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIG5vZGUocykgbGVhZGluZ1xyXG4gICAgICogIHRvIHdoZXJlIHRoZSBrZXkgd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBhcmUgY2xvbmVkIGV2ZW4gd2hlbiB0aGUga2V5XHJcbiAgICAgKiAgdHVybnMgb3V0IG5vdCB0byBleGlzdCBhbmQgdGhlIGNvbGxlY3Rpb24gaXMgdW5jaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dCA9IGZ1bmN0aW9uIChrZXksIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhvdXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIG5vbmUgb2YgdGhlIGtleXNcclxuICAgICAqICBleGlzdGVkLiBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZFxyXG4gICAgICogIGV2ZW4gd2hlbiB0aGUga2V5IHR1cm5zIG91dCBub3QgdG8gZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0S2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LmRlbGV0ZUtleXMoa2V5cykgfHwgIXJldHVyblRoaXNJZlVuY2hhbmdlZCA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMgcmVtb3ZlZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChudS5kZWxldGVSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSA9PT0gMCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBwYWlycyByZW1vdmVkIHdoZW5ldmVyIHRoZSBjYWxsYmFja1xyXG4gICAgICogIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuIGB3aGVyZSgpYCBpcyBhIHN5bm9ueW0gZm9yIHRoaXMgbWV0aG9kLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIHZhciBkZWw7XHJcbiAgICAgICAgbnUuZWRpdEFsbChmdW5jdGlvbiAoaywgdiwgaSkge1xyXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKGssIHYsIGkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbCA9IERlbGV0ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWRlbCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBhbGwgdmFsdWVzIGFsdGVyZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5tYXBWYWx1ZXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgdG1wID0ge307XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcC52YWx1ZSA9IGNhbGxiYWNrKHYsIGssIGkpLCB0bXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgIHZhciBpID0gMCwgcCA9IGluaXRpYWxWYWx1ZTtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSwgUmV1c2VkQXJyYXkpLCBuZXh0O1xyXG4gICAgICAgIHdoaWxlICghKG5leHQgPSBpdC5uZXh0KCkpLmRvbmUpXHJcbiAgICAgICAgICAgIHAgPSBjYWxsYmFjayhwLCBuZXh0LnZhbHVlLCBpKyssIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJdGVyYXRvciBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiBvcmRlciAoYXNjZW5kaW5nIG9yZGVyIGlmXHJcbiAgICAgKiAgdGhlIGNvbGxlY3Rpb24ncyBjb21wYXJhdG9yIHVzZXMgYXNjZW5kaW5nIG9yZGVyLCBhcyBpcyB0aGUgZGVmYXVsdC4pXHJcbiAgICAgKiAgQHBhcmFtIGxvd2VzdEtleSBGaXJzdCBrZXkgdG8gYmUgaXRlcmF0ZWQsIG9yIHVuZGVmaW5lZCB0byBzdGFydCBhdFxyXG4gICAgICogICAgICAgICBtaW5LZXkoKS4gSWYgdGhlIHNwZWNpZmllZCBrZXkgZG9lc24ndCBleGlzdCB0aGVuIGl0ZXJhdGlvblxyXG4gICAgICogICAgICAgICBzdGFydHMgYXQgdGhlIG5leHQgaGlnaGVyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uIChsb3dlc3RLZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGluZm8gPSB0aGlzLmZpbmRQYXRoKGxvd2VzdEtleSk7XHJcbiAgICAgICAgaWYgKGluZm8gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSA9IGluZm8ubm9kZXF1ZXVlLCBub2RlaW5kZXggPSBpbmZvLm5vZGVpbmRleCwgbGVhZiA9IGluZm8ubGVhZjtcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgdmFyIGkgPSAobG93ZXN0S2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGxlYWYuaW5kZXhPZihsb3dlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gbGVhZi5rZXlzW2ldLCByZXVzZWRBcnJheVsxXSA9IGxlYWYudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXVzZWRBcnJheSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgbGVhZiBub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gLTE7Oykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbGV2ZWwgPj0gbm9kZXF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBqdW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbm9kZWluZGV4W2xldmVsXSA8IG5vZGVxdWV1ZVtsZXZlbF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZXZlbCA+IDA7IGxldmVsLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtsZXZlbCAtIDFdID0gbm9kZXF1ZXVlW2xldmVsXVtub2RlaW5kZXhbbGV2ZWxdXS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVpbmRleFtsZXZlbCAtIDFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmID0gbm9kZXF1ZXVlWzBdW25vZGVpbmRleFswXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiByZXZlcnNlZCBvcmRlci5cclxuICAgICAqICBAcGFyYW0gaGlnaGVzdEtleSBLZXkgYXQgd2hpY2ggdG8gc3RhcnQgaXRlcmF0aW5nLCBvciB1bmRlZmluZWQgdG9cclxuICAgICAqICAgICAgICAgc3RhcnQgYXQgbWF4S2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGxvd2VyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICogIEBwYXJhbSBza2lwSGlnaGVzdCBJZmYgdGhpcyBmbGFnIGlzIHRydWUgYW5kIHRoZSBoaWdoZXN0S2V5IGV4aXN0cyBpbiB0aGVcclxuICAgICAqICAgICAgICAgY29sbGVjdGlvbiwgdGhlIHBhaXIgbWF0Y2hpbmcgaGlnaGVzdEtleSBpcyBza2lwcGVkLCBub3QgaXRlcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQgPSBmdW5jdGlvbiAoaGlnaGVzdEtleSwgcmV1c2VkQXJyYXksIHNraXBIaWdoZXN0KSB7XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBoaWdoZXN0S2V5ID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICAgICAgc2tpcEhpZ2hlc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKTsgLy8gY29sbGVjdGlvbiBpcyBlbXB0eVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2EgPSB0aGlzLmZpbmRQYXRoKGhpZ2hlc3RLZXkpIHx8IHRoaXMuZmluZFBhdGgodGhpcy5tYXhLZXkoKSksIG5vZGVxdWV1ZSA9IF9hLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gX2Eubm9kZWluZGV4LCBsZWFmID0gX2EubGVhZjtcclxuICAgICAgICBjaGVjayghbm9kZXF1ZXVlWzBdIHx8IGxlYWYgPT09IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dLCBcIndhdCFcIik7XHJcbiAgICAgICAgdmFyIGkgPSBsZWFmLmluZGV4T2YoaGlnaGVzdEtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKCFza2lwSGlnaGVzdCAmJiBpIDwgbGVhZi5rZXlzLmxlbmd0aCAmJiB0aGlzLl9jb21wYXJlKGxlYWYua2V5c1tpXSwgaGlnaGVzdEtleSkgPD0gMClcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHJldXNlZEFycmF5ICE9PSB1bmRlZmluZWQgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBqdW1wOiBmb3IgKDs7KSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1pID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW5vZGVpbmRleFtsZXZlbF0gPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbCAtIDFdLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gbGVhZi5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogVXNlZCBieSBlbnRyaWVzKCkgYW5kIGVudHJpZXNSZXZlcnNlZCgpIHRvIHByZXBhcmUgdG8gc3RhcnQgaXRlcmF0aW5nLlxyXG4gICAgICogSXQgZGV2ZWxvcHMgYSBcIm5vZGUgcXVldWVcIiBmb3IgZWFjaCBub24tbGVhZiBsZXZlbCBvZiB0aGUgdHJlZS5cclxuICAgICAqIExldmVscyBhcmUgbnVtYmVyZWQgXCJib3R0b20tdXBcIiBzbyB0aGF0IGxldmVsIDAgaXMgYSBsaXN0IG9mIGxlYWZcclxuICAgICAqIG5vZGVzIGZyb20gYSBsb3ctbGV2ZWwgbm9uLWxlYWYgbm9kZS4gVGhlIHF1ZXVlIGF0IGEgZ2l2ZW4gbGV2ZWwgTFxyXG4gICAgICogY29uc2lzdHMgb2Ygbm9kZXF1ZXVlW0xdIHdoaWNoIGlzIHRoZSBjaGlsZHJlbiBvZiBhIEJOb2RlSW50ZXJuYWwsXHJcbiAgICAgKiBhbmQgbm9kZWluZGV4W0xdLCB0aGUgY3VycmVudCBpbmRleCB3aXRoaW4gdGhhdCBjaGlsZCBsaXN0LCBzdWNoXHJcbiAgICAgKiBzdWNoIHRoYXQgbm9kZXF1ZXVlW0wtMV0gPT09IG5vZGVxdWV1ZVtMXVtub2RlaW5kZXhbTF1dLmNoaWxkcmVuLlxyXG4gICAgICogKEhvd2V2ZXIgaW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlIG9yZGVyIGlzIHJldmVyc2VkLilcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbmRQYXRoID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXh0bm9kZSA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSwgbm9kZWluZGV4O1xyXG4gICAgICAgIGlmIChuZXh0bm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgbm9kZXF1ZXVlID0gRW1wdHlBcnJheSwgbm9kZWluZGV4ID0gRW1wdHlBcnJheTsgLy8gYXZvaWQgYWxsb2NhdGlvbnNcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IFtdLCBub2RlaW5kZXggPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7ICFuZXh0bm9kZS5pc0xlYWY7IGQrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2RdID0gbmV4dG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBub2RlaW5kZXhbZF0gPSBrZXkgPT09IHVuZGVmaW5lZCA/IDAgOiBuZXh0bm9kZS5pbmRleE9mKGtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZWluZGV4W2RdID49IG5vZGVxdWV1ZVtkXS5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBmaXJzdCBrZXkgPiBtYXhLZXkoKVxyXG4gICAgICAgICAgICAgICAgbmV4dG5vZGUgPSBub2RlcXVldWVbZF1bbm9kZWluZGV4W2RdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlcXVldWUucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICBub2RlaW5kZXgucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBub2RlcXVldWU6IG5vZGVxdWV1ZSwgbm9kZWluZGV4OiBub2RlaW5kZXgsIGxlYWY6IG5leHRub2RlIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgdGhpc2AgYW5kIGBvdGhlcmAuXHJcbiAgICAgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIGRpZmYgaXMgcmV0dXJuZWQgdmlhIGludm9jYXRpb25zIG9mIHN1cHBsaWVkIGhhbmRsZXJzLlxyXG4gICAgICogVGhlIGNvbXB1dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHR3byB0cmVlcyBoYXZlIGxhcmdlIGFtb3VudHNcclxuICAgICAqIG9mIHNoYXJlZCBkYXRhIChvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgY2xvbmVgIG9yIGB3aXRoYCBBUElzKSBhbmQgd2lsbCBhdm9pZFxyXG4gICAgICogYW55IGl0ZXJhdGlvbiBvZiBzaGFyZWQgc3RhdGUuXHJcbiAgICAgKiBUaGUgaGFuZGxlcnMgY2FuIGNhdXNlIGNvbXB1dGF0aW9uIHRvIGVhcmx5IGV4aXQgYnkgcmV0dXJuaW5nIHticmVhazogUn0uXHJcbiAgICAgKiBOZWl0aGVyIG9mIHRoZSBjb2xsZWN0aW9ucyBzaG91bGQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGNvbXBhcmlzb24gcHJvY2VzcyAoaW4geW91ciBjYWxsYmFja3MpLCBhcyB0aGlzIG1ldGhvZCBhc3N1bWVzIHRoZXkgd2lsbCBub3QgYmUgbXV0YXRlZC5cclxuICAgICAqIEBwYXJhbSBvdGhlciBUaGUgdHJlZSB0byBjb21wdXRlIGEgZGlmZiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIG9ubHlUaGlzIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgdGhpc2AuXHJcbiAgICAgKiBAcGFyYW0gb25seU90aGVyIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgb3RoZXJgLlxyXG4gICAgICogQHBhcmFtIGRpZmZlcmVudCBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyB3aXRoIGRpZmZlcmluZyB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kaWZmQWdhaW5zdCA9IGZ1bmN0aW9uIChvdGhlciwgb25seVRoaXMsIG9ubHlPdGhlciwgZGlmZmVyZW50KSB7XHJcbiAgICAgICAgaWYgKG90aGVyLl9jb21wYXJlICE9PSB0aGlzLl9jb21wYXJlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgY29tcGFyYXRvcnMgYXJlIG5vdCB0aGUgc2FtZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkgfHwgb3RoZXIuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5ICYmIG90aGVyLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAvLyBJZiBvbmUgdHJlZSBpcyBlbXB0eSwgZXZlcnl0aGluZyB3aWxsIGJlIGFuIG9ubHlUaGlzL29ubHlPdGhlci5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBvbmx5T3RoZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlciksIG9ubHlPdGhlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBvbmx5VGhpcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogQlRyZWUuc3RlcFRvRW5kKEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEN1cnNvci1iYXNlZCBkaWZmIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxyXG4gICAgICAgIC8vIC0gVW50aWwgbmVpdGhlciBjdXJzb3IgaGFzIG5hdmlnYXRlZCB0byB0aGUgZW5kIG9mIHRoZSB0cmVlLCBkbyB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAtIElmIHRoZSBgdGhpc2AgY3Vyc29yIGlzIFwiYmVoaW5kXCIgdGhlIGBvdGhlcmAgY3Vyc29yIChzdHJpY3RseSA8LCB2aWEgY29tcGFyZSksIGFkdmFuY2UgaXQuXHJcbiAgICAgICAgLy8gIC0gT3RoZXJ3aXNlLCBhZHZhbmNlIHRoZSBgb3RoZXJgIGN1cnNvci5cclxuICAgICAgICAvLyAgLSBBbnkgdGltZSBhIGN1cnNvciBpcyBzdGVwcGVkLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmc6XHJcbiAgICAgICAgLy8gICAgLSBJZiBlaXRoZXIgY3Vyc29yIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyOlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID09PSBvdGhlckN1cnNvciBhbmQgdGhlIHZhbHVlcyBkaWZmZXIsIGl0IGlzIGEgRGlmZmVyZW50LlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID4gb3RoZXJDdXJzb3IgYW5kIG90aGVyQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlPdGhlci5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA8IG90aGVyQ3Vyc29yIGFuZCB0aGlzQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlUaGlzIGFzIGxvbmcgYXMgdGhlIG1vc3QgcmVjZW50IFxyXG4gICAgICAgIC8vICAgICAgICBjdXJzb3Igc3RlcCB3YXMgKm5vdCogb3RoZXJDdXJzb3IgYWR2YW5jaW5nIGZyb20gYSB0aWUuIFRoZSBleHRyYSBjb25kaXRpb24gYXZvaWRzIGVycm9uZW91cyBPbmx5T3RoZXIgY2FsbHMgXHJcbiAgICAgICAgLy8gICAgICAgIHRoYXQgd291bGQgb2NjdXIgZHVlIHRvIG90aGVyQ3Vyc29yIGJlaW5nIHRoZSBcImxlYWRlclwiLlxyXG4gICAgICAgIC8vICAgIC0gT3RoZXJ3aXNlLCBpZiBib3RoIGN1cnNvcnMgcG9pbnQgdG8gbm9kZXMsIGNvbXBhcmUgdGhlbS4gSWYgdGhleSBhcmUgZXF1YWwgYnkgcmVmZXJlbmNlIChzaGFyZWQpLCBza2lwXHJcbiAgICAgICAgLy8gICAgICBib3RoIGN1cnNvcnMgdG8gdGhlIG5leHQgbm9kZSBpbiB0aGUgd2Fsay5cclxuICAgICAgICAvLyAtIE9uY2Ugb25lIGN1cnNvciBoYXMgZmluaXNoZWQgc3RlcHBpbmcsIGFueSByZW1haW5pbmcgc3RlcHMgKGlmIGFueSkgYXJlIHRha2VuIGFuZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGxvZ2dlZFxyXG4gICAgICAgIC8vICAgYXMgT25seU90aGVyIChpZiBvdGhlckN1cnNvciBpcyBzdGVwcGluZykgb3IgT25seVRoaXMgKGlmIHRoaXNDdXJzb3IgaXMgc3RlcHBpbmcpLlxyXG4gICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIGdpdmVzIHRoZSBjcml0aWNhbCBndWFyYW50ZWUgdGhhdCBhbGwgbG9jYXRpb25zIChib3RoIG5vZGVzIGFuZCBrZXkvdmFsdWUgcGFpcnMpIGluIGJvdGggdHJlZXMgdGhhdCBcclxuICAgICAgICAvLyBhcmUgaWRlbnRpY2FsIGJ5IHZhbHVlIChhbmQgcG9zc2libHkgYnkgcmVmZXJlbmNlKSB3aWxsIGJlIHZpc2l0ZWQgKmF0IHRoZSBzYW1lIHRpbWUqIGJ5IHRoZSBjdXJzb3JzLlxyXG4gICAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgcG9zc2liaWxpdHkgb2YgZW1pdHRpbmcgaW5jb3JyZWN0IGRpZmZzLCBhcyB3ZWxsIGFzIGFsbG93aW5nIGZvciBza2lwcGluZyBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIF9jb21wYXJlID0gdGhpcy5fY29tcGFyZTtcclxuICAgICAgICB2YXIgdGhpc0N1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpO1xyXG4gICAgICAgIHZhciBvdGhlckN1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKG90aGVyKTtcclxuICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciBob3cgdGhpc1N0ZXBwZWRMYXN0IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICAgIC8vIFN0ZXAgb3JkZXIgaXMgb25seSB1c2VkIHdoZW4gZWl0aGVyIGN1cnNvciBpcyBhdCBhIGxlYWYsIGFuZCBjdXJzb3JzIGFsd2F5cyBzdGFydCBhdCBhIG5vZGUuXHJcbiAgICAgICAgdmFyIHRoaXNTdWNjZXNzID0gdHJ1ZSwgb3RoZXJTdWNjZXNzID0gdHJ1ZSwgcHJldkN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzU3VjY2VzcyAmJiBvdGhlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICB2YXIgdGhpc0xlYWYgPSB0aGlzQ3Vyc29yLmxlYWYsIHRoaXNJbnRlcm5hbFNwaW5lID0gdGhpc0N1cnNvci5pbnRlcm5hbFNwaW5lLCB0aGlzTGV2ZWxJbmRpY2VzID0gdGhpc0N1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIHZhciBvdGhlckxlYWYgPSBvdGhlckN1cnNvci5sZWFmLCBvdGhlckludGVybmFsU3BpbmUgPSBvdGhlckN1cnNvci5pbnRlcm5hbFNwaW5lLCBvdGhlckxldmVsSW5kaWNlcyA9IG90aGVyQ3Vyc29yLmxldmVsSW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKHRoaXNMZWFmIHx8IG90aGVyTGVhZikge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnNvcnMgd2VyZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBsYXN0IHN0ZXAsIHRoZW4gdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZDdXJzb3JPcmRlciAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgb3RoZXJMZWFmICYmIGRpZmZlcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXF1YWwga2V5cywgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmlzKHZhbFRoaXMsIHZhbE90aGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBkaWZmZXJlbnQodGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzLCB2YWxPdGhlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyc29yT3JkZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGtub3cgdGhhdCBlaXRoZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIG90aGVyQ3Vyc29yIHN0ZXBwZWQgbGFzdCBmcm9tIGEgc3RhcnRpbmcgcG9zaXRpb24gdGhhdCB0cmFpbGVkIHRoaXNDdXJzb3IsIGFuZCBpcyBzdGlsbCBiZWhpbmQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIHRoaXNDdXJzb3Igc3RlcHBlZCBsYXN0IGFuZCBsZWFwZnJvZ2dlZCBvdGhlckN1cnNvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgb2YgdGhlc2UgY2FzZXMgaXMgYW4gXCJvbmx5IG90aGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTGVhZiAmJiBvbmx5T3RoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclZhbCA9IG90aGVyTGVhZi52YWx1ZXNbb3RoZXJMZXZlbEluZGljZXNbb3RoZXJMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlPdGhlcihvdGhlckN1cnNvci5jdXJyZW50S2V5LCBvdGhlclZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9ubHlUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzTGVhZiAmJiBwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb25seVRoaXModGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXNMZWFmICYmICFvdGhlckxlYWYgJiYgY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0VGhpcyA9IHRoaXNJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE90aGVyID0gb3RoZXJJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZVtsYXN0VGhpc11bdGhpc0xldmVsSW5kaWNlc1tsYXN0VGhpc11dO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZVtsYXN0T3RoZXJdW290aGVyTGV2ZWxJbmRpY2VzW2xhc3RPdGhlcl1dO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPdGhlciA9PT0gbm9kZVRoaXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBvdGhlclN1Y2Nlc3MgPSBCVHJlZS5zdGVwKG90aGVyQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSBjdXJzb3JPcmRlcjtcclxuICAgICAgICAgICAgaWYgKGN1cnNvck9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1N1Y2Nlc3MgPSBCVHJlZS5zdGVwKHRoaXNDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXNTdWNjZXNzICYmIG9ubHlUaGlzKVxyXG4gICAgICAgICAgICByZXR1cm4gQlRyZWUuZmluaXNoQ3Vyc29yV2Fsayh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUsIG9ubHlUaGlzKTtcclxuICAgICAgICBpZiAob3RoZXJTdWNjZXNzICYmIG9ubHlPdGhlcilcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsob3RoZXJDdXJzb3IsIHRoaXNDdXJzb3IsIF9jb21wYXJlLCBvbmx5T3RoZXIpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCVHJlZS5maW5pc2hDdXJzb3JXYWxrID0gZnVuY3Rpb24gKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjb21wYXJlZCA9IEJUcmVlLmNvbXBhcmUoY3Vyc29yLCBjdXJzb3JGaW5pc2hlZCwgY29tcGFyZUtleXMpO1xyXG4gICAgICAgIGlmIChjb21wYXJlZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIUJUcmVlLnN0ZXAoY3Vyc29yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmVkIDwgMCkge1xyXG4gICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJjdXJzb3Igd2FsayB0ZXJtaW5hdGVkIGVhcmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQlRyZWUuc3RlcFRvRW5kKGN1cnNvciwgY2FsbGJhY2spO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnN0ZXBUb0VuZCA9IGZ1bmN0aW9uIChjdXJzb3IsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGNhblN0ZXAgPSB0cnVlO1xyXG4gICAgICAgIHdoaWxlIChjYW5TdGVwKSB7XHJcbiAgICAgICAgICAgIHZhciBsZWFmID0gY3Vyc29yLmxlYWYsIGxldmVsSW5kaWNlcyA9IGN1cnNvci5sZXZlbEluZGljZXMsIGN1cnJlbnRLZXkgPSBjdXJzb3IuY3VycmVudEtleTtcclxuICAgICAgICAgICAgaWYgKGxlYWYpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxlYWYudmFsdWVzW2xldmVsSW5kaWNlc1tsZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKGN1cnJlbnRLZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FuU3RlcCA9IEJUcmVlLnN0ZXAoY3Vyc29yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5tYWtlRGlmZkN1cnNvciA9IGZ1bmN0aW9uICh0cmVlKSB7XHJcbiAgICAgICAgdmFyIF9yb290ID0gdHJlZS5fcm9vdCwgaGVpZ2h0ID0gdHJlZS5oZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBoZWlnaHQsIGludGVybmFsU3BpbmU6IFtbX3Jvb3RdXSwgbGV2ZWxJbmRpY2VzOiBbMF0sIGxlYWY6IHVuZGVmaW5lZCwgY3VycmVudEtleTogX3Jvb3QubWF4S2V5KCkgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc3RlcCBpbiB0aGUgd2FsayBvZiBpdHMgdHJlZS5cclxuICAgICAqIEN1cnNvcnMgYXJlIHdhbGtlZCBiYWNrd2FyZHMgaW4gc29ydCBvcmRlciwgYXMgdGhpcyBhbGxvd3MgdGhlbSB0byBsZXZlcmFnZSBtYXhLZXkoKSBpbiBvcmRlciB0byBiZSBjb21wYXJlZCBpbiBPKDEpLlxyXG4gICAgICogQHBhcmFtIGN1cnNvciBUaGUgY3Vyc29yIHRvIHN0ZXBcclxuICAgICAqIEBwYXJhbSBzdGVwVG9Ob2RlIElmIHRydWUsIHRoZSBjdXJzb3Igd2lsbCBiZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBub2RlIChza2lwcGluZyB2YWx1ZXMpXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIHRoZSBzdGVwIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBjdXJzb3IgdG8gbW92ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdHJlZS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUuc3RlcCA9IGZ1bmN0aW9uIChjdXJzb3IsIHN0ZXBUb05vZGUpIHtcclxuICAgICAgICB2YXIgaW50ZXJuYWxTcGluZSA9IGN1cnNvci5pbnRlcm5hbFNwaW5lLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBsZWFmID0gY3Vyc29yLmxlYWY7XHJcbiAgICAgICAgaWYgKHN0ZXBUb05vZGUgPT09IHRydWUgfHwgbGVhZikge1xyXG4gICAgICAgICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gbGV2ZWxJbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gU3RlcCB0byB0aGUgbmV4dCBub2RlIG9ubHkgaWY6XHJcbiAgICAgICAgICAgIC8vIC0gV2UgYXJlIGV4cGxpY2l0bHkgZGlyZWN0ZWQgdG8gdmlhIHN0ZXBUb05vZGUsIG9yXHJcbiAgICAgICAgICAgIC8vIC0gVGhlcmUgYXJlIG5vIGtleS92YWx1ZSBwYWlycyBsZWZ0IHRvIHN0ZXAgdG8gaW4gdGhpcyBsZWFmXHJcbiAgICAgICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwaW5lTGVuZ3RoID0gaW50ZXJuYWxTcGluZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAvLyBSb290IGlzIGxlYWZcclxuICAgICAgICAgICAgICAgIGlmIChzcGluZUxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBXYWxrIGJhY2sgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIG5ldyBzdWJ0cmVlIHRvIGRlc2NlbmQgaW50b1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVMZXZlbEluZGV4ID0gc3BpbmVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxldmVsSW5kZXhXYWxrQmFjayA9IG5vZGVMZXZlbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxldmVsSW5kZXhXYWxrQmFjayA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbGV2ZWxzTGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWYgc3RhdGUgZnJvbSBjdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbGtlZCB1cHdhcmRzIHBhc3QgYW55IGludGVybmFsIG5vZGUsIHNsaWNlIHRoZW0gb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGV4V2Fsa0JhY2sgPCBub2RlTGV2ZWxJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5pbnRlcm5hbFNwaW5lID0gaW50ZXJuYWxTcGluZS5zbGljZSgwLCBsZXZlbEluZGV4V2Fsa0JhY2sgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgaW50ZXJuYWwgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGludGVybmFsU3BpbmVbbGV2ZWxJbmRleFdhbGtCYWNrXVstLWxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsSW5kZXhXYWxrQmFjay0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGlzIGluIHRoZSBmYXIgbGVmdCBsZWFmIG9mIHRoZSB0cmVlLCBubyBtb3JlIG5vZGVzIHRvIGVudW1lcmF0ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgbGVhZiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSAtLWxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbGVhZi5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIEN1cnNvciBkb2VzIG5vdCBwb2ludCB0byBhIHZhbHVlIGluIGEgbGVhZiwgc28gbW92ZSBkb3dud2FyZHNcclxuICAgICAgICAgICAgdmFyIG5leHRMZXZlbCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gbmV4dExldmVsIC0gMTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpbnRlcm5hbFNwaW5lW2N1cnJlbnRMZXZlbF1bbGV2ZWxJbmRpY2VzW2N1cnJlbnRMZXZlbF1dO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEVudGVyaW5nIGludG8gYSBsZWFmLiBTZXQgdGhlIGN1cnNvciB0byBwb2ludCBhdCB0aGUgbGFzdCBrZXkvdmFsdWUgcGFpci5cclxuICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBub2RlLnZhbHVlcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBub2RlLmtleXNbdmFsdWVJbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTcGluZVtuZXh0TGV2ZWxdID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEluZGljZXNbbmV4dExldmVsXSA9IGNoaWxkSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGNoaWxkcmVuW2NoaWxkSW5kZXhdLm1heEtleSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHRoZSB0d28gY3Vyc29ycy4gUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgd2hpY2ggY3Vyc29yIGlzIGFoZWFkIGluIGEgd2Fsay5cclxuICAgICAqIE5vdGUgdGhhdCBjdXJzb3JzIGFyZSBhZHZhbmNlZCBpbiByZXZlcnNlIHNvcnRpbmcgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3Vyc29yQSwgY3Vyc29yQiwgY29tcGFyZUtleXMpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0QSA9IGN1cnNvckEuaGVpZ2h0LCBjdXJyZW50S2V5QSA9IGN1cnNvckEuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQSA9IGN1cnNvckEubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIHZhciBoZWlnaHRCID0gY3Vyc29yQi5oZWlnaHQsIGN1cnJlbnRLZXlCID0gY3Vyc29yQi5jdXJyZW50S2V5LCBsZXZlbEluZGljZXNCID0gY3Vyc29yQi5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgY29tcGFyaXNvbiBvcmRlciwgYXMgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyXHJcbiAgICAgICAgdmFyIGtleUNvbXBhcmlzb24gPSBjb21wYXJlS2V5cyhjdXJyZW50S2V5QiwgY3VycmVudEtleUEpO1xyXG4gICAgICAgIGlmIChrZXlDb21wYXJpc29uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlDb21wYXJpc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOb3JtYWxpemUgZGVwdGggdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBzaG9ydGVzdCB0cmVlLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNvbmN1cnJlbnQgY3Vyc29yIHdhbGtzIG9mIHRyZWVzIG9mIGRpZmZlcmluZyBoZWlnaHRzIGNhbiByZWxpYWJseSBsYW5kIG9uIHNoYXJlZCBub2RlcyBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gICAgICAgIC8vIFRvIGFjY29tcGxpc2ggdGhpcywgYSBjdXJzb3IgdGhhdCBpcyBvbiBhbiBpbnRlcm5hbCBub2RlIGF0IGRlcHRoIEQxIHdpdGggbWF4S2V5IFggaXMgY29uc2lkZXJlZCBcImJlaGluZFwiIGEgY3Vyc29yIG9uIGFuXHJcbiAgICAgICAgLy8gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMiB3aXRoIG1heEtleSBZLCB3aGVuIEQxIDwgRDIuIFRodXMsIGFsd2F5cyB3YWxraW5nIHRoZSBjdXJzb3IgdGhhdCBpcyBcImJlaGluZFwiIHdpbGwgYWxsb3cgdGhlIGN1cnNvclxyXG4gICAgICAgIC8vIGF0IHNoYWxsb3dlciBkZXB0aCAoYnV0IGVxdWFsIG1heEtleSkgdG8gXCJjYXRjaCB1cFwiIGFuZCBsYW5kIG9uIHNoYXJlZCBub2Rlcy5cclxuICAgICAgICB2YXIgaGVpZ2h0TWluID0gaGVpZ2h0QSA8IGhlaWdodEIgPyBoZWlnaHRBIDogaGVpZ2h0QjtcclxuICAgICAgICB2YXIgZGVwdGhBTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0EubGVuZ3RoIC0gKGhlaWdodEEgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHZhciBkZXB0aEJOb3JtYWxpemVkID0gbGV2ZWxJbmRpY2VzQi5sZW5ndGggLSAoaGVpZ2h0QiAtIGhlaWdodE1pbik7XHJcbiAgICAgICAgcmV0dXJuIGRlcHRoQU5vcm1hbGl6ZWQgLSBkZXB0aEJOb3JtYWxpemVkO1xyXG4gICAgfTtcclxuICAgIC8vIEVuZCBvZiBoZWxwZXIgbWV0aG9kcyBmb3IgZGlmZkFnYWluc3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSBrZXlzIG9mIGVhY2ggcGFpciBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIChmaXJzdEtleSkge1xyXG4gICAgICAgIHZhciBpdCA9IHRoaXMuZW50cmllcyhmaXJzdEtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBuID0gaXQubmV4dCgpO1xyXG4gICAgICAgICAgICBpZiAobi52YWx1ZSlcclxuICAgICAgICAgICAgICAgIG4udmFsdWUgPSBuLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSB2YWx1ZXMgb2YgZWFjaCBwYWlyIGluIG9yZGVyIGJ5IGtleS5cclxuICAgICAqICBAcGFyYW0gZmlyc3RLZXk6IE1pbmltdW0ga2V5IHdob3NlIGFzc29jaWF0ZWQgdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVsxXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJtYXhOb2RlU2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbi92YWx1ZXMgYmVmb3JlIG5vZGVzIHdpbGwgc3BsaXQuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhOb2RlU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogR2V0cyB0aGUgbG93ZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTyhsb2cgc2l6ZSkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9yb290Lm1pbktleSgpOyB9O1xyXG4gICAgLyoqIEdldHMgdGhlIGhpZ2hlc3Qga2V5IGluIHRoZSB0cmVlLiBDb21wbGV4aXR5OiBPKDEpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWF4S2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKTsgfTtcclxuICAgIC8qKiBRdWlja2x5IGNsb25lcyB0aGUgdHJlZSBieSBtYXJraW5nIHRoZSByb290IG5vZGUgYXMgc2hhcmVkLlxyXG4gICAgICogIEJvdGggY29waWVzIHJlbWFpbiBlZGl0YWJsZS4gV2hlbiB5b3UgbW9kaWZ5IGVpdGhlciBjb3B5LCBhbnlcclxuICAgICAqICBub2RlcyB0aGF0IGFyZSBzaGFyZWQgKG9yIHBvdGVudGlhbGx5IHNoYXJlZCkgYmV0d2VlbiB0aGUgdHdvXHJcbiAgICAgKiAgY29waWVzIGFyZSBjbG9uZWQgc28gdGhhdCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IG90aGVyIGNvcGllcy5cclxuICAgICAqICBUaGlzIGlzIGtub3duIGFzIGNvcHktb24td3JpdGUgYmVoYXZpb3IsIG9yIFwibGF6eSBjb3B5aW5nXCIuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogUGVyZm9ybXMgYSBncmVlZHkgY2xvbmUsIGltbWVkaWF0ZWx5IGR1cGxpY2F0aW5nIGFueSBub2RlcyB0aGF0IGFyZVxyXG4gICAgICogIG5vdCBjdXJyZW50bHkgbWFya2VkIGFzIHNoYXJlZCwgaW4gb3JkZXIgdG8gYXZvaWQgbWFya2luZyBhbnlcclxuICAgICAqICBhZGRpdGlvbmFsIG5vZGVzIGFzIHNoYXJlZC5cclxuICAgICAqICBAcGFyYW0gZm9yY2UgQ2xvbmUgYWxsIG5vZGVzLCBldmVuIHNoYXJlZCBvbmVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgdGhpcy5fY29tcGFyZSwgdGhpcy5fbWF4Tm9kZVNpemUpO1xyXG4gICAgICAgIHJlc3VsdC5fcm9vdCA9IHRoaXMuX3Jvb3QuZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhbiBhcnJheSBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDdGRkZGRkZGOyB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluS2V5KCksIG1heCA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZShtaW4sIG1heCwgdHJ1ZSwgbWF4TGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIGtleXMsIHNvcnRlZCAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaChrKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIHZhbHVlcywgc29ydGVkIGJ5IGtleSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnZhbHVlc0FycmF5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHsgcmVzdWx0cy5wdXNoKHYpOyB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRyZWUncyBkYXRhIGJhc2VkIG9uIHRvQXJyYXkoKS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkudG9TdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICAvKiogU3RvcmVzIGEga2V5LXZhbHVlIHBhaXIgb25seSBpZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5IHdhcyBhZGRlZFxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRJZk5vdFByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldChrZXksIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lKS5cclxuICAgICAqIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvd2VzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5taW5QYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0SGlnaGVyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgbG93ZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRIaWdoZXJQYWlyKGtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBwICYmIHBbMF07XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiAgSWYga2V5ID09PSB1bmRlZmluZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaGlnaGVzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgZmFsc2UsIHJldXNlZEFycmF5KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUgbmV4dCBrZXkgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0TG93ZXJLZXkodW5kZWZpbmVkKSByZXR1cm5zIHRoZSBoaWdoZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRMb3dlcktleSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMubmV4dExvd2VyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCB0aGlzLl9jb21wYXJlLCB0cnVlLCByZXVzZWRBcnJheSB8fCBbXSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQga2V5IGlmIGl0IGV4aXN0c1xyXG4gICAgICogIG9yIHRoZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBsb3dlciBwYWlyIG90aGVyd2lzZS4gSWYgdGhlcmUgaXMgbm9cclxuICAgICAqICBuZXh0IGxvd2VyIHBhaXIsIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICogKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBFZGl0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEga2V5IGluIHRoZSB0cmVlLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGtleSBleGlzdGVkLCBmYWxzZSBpZiBub3QuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGtleSwga2V5LCB0cnVlLCBmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlIH0pOyB9KSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2Yga2V5cywgc29ydGVkIGJ5IGtleS5cclxuICAgICAqIEVhY2ggcmV0dXJuZWQgcGFpciBpcyBhbHNvIGFuIGFycmF5OiBwYWlyWzBdIGlzIHRoZSBrZXksIHBhaXJbMV0gaXMgdGhlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IGluIHRoZSBhcnJheSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFRoaXMgbWV0aG9kIHJldHVybnMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgaXRzIHBhaXIgd2lsbCBiZSBpbmNsdWRlZFxyXG4gICAgICogICAgICAgIGluIHRoZSBvdXRwdXQgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS4gTm90ZTogaWYgdGhlXHJcbiAgICAgKiAgICAgICAgYGxvd2Aga2V5IGlzIHByZXNlbnQsIGl0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxyXG4gICAgICogQHBhcmFtIG1heExlbmd0aCBMZW5ndGggbGltaXQuIGdldFJhbmdlIHdpbGwgc3RvcCBzY2FubmluZyB0aGUgdHJlZSB3aGVuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBhcnJheSByZWFjaGVzIHRoaXMgc2l6ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocmVzdWx0Lmxlbmd0aCArIGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gdm9pZCAwKSB7IG1heExlbmd0aCA9IDB4M0ZGRkZGRjsgfVxyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKFtrLCB2XSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmxlbmd0aCA+IG1heExlbmd0aCA/IEJyZWFrIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGFsbCBwYWlycyBmcm9tIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXHJcbiAgICAgKiBAcGFyYW0gcGFpcnMgUGFpcnMgdG8gYWRkIHRvIHRoaXMgdHJlZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzLFxyXG4gICAgICogICAgICAgIGxhdGVyIHBhaXJzIGN1cnJlbnRseSBvdmVyd3JpdGUgZWFybGllciBvbmVzIChlLmcuIFtbMCwxXSxbMCw3XV1cclxuICAgICAqICAgICAgICBhc3NvY2lhdGVzIDAgd2l0aCA3LilcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgcGFpcnMgdGhhdCBhbHJlYWR5IGV4aXN0IChpZiBmYWxzZSxcclxuICAgICAqICAgICAgICBwYWlyc1tpXSBpcyBpZ25vcmVkIHdoZW4gdGhlIGtleSBwYWlyc1tpXVswXSBhbHJlYWR5IGV4aXN0cy4pXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHBhaXJzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhwYWlycy5sZW5ndGggKiBsb2coc2l6ZSArIHBhaXJzLmxlbmd0aCkpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycyA9IGZ1bmN0aW9uIChwYWlycywgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgdmFyIGFkZGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXQocGFpcnNbaV1bMF0sIHBhaXJzW2ldWzFdLCBvdmVyd3JpdGUpKVxyXG4gICAgICAgICAgICAgICAgYWRkZWQrKztcclxuICAgICAgICByZXR1cm4gYWRkZWQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIGluIGFzY2VuZGluZyBvcmRlciBieSBrZXkuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIG11c3Qgbm90IGluc2VydCBvciByZW1vdmUgaXRlbXMgaW4gdGhlXHJcbiAgICAgKiBjb2xsZWN0aW9uLiBEb2luZyBzbyBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0byB0aGVcclxuICAgICAqIGNhbGxiYWNrIGFmdGVyd2FyZC5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBzY2FubmVkIHdpbGwgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsb3dgLlxyXG4gICAgICogQHBhcmFtIGhpZ2ggU2Nhbm5pbmcgc3RvcHMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgYG9uRm91bmRgIGlzIGNhbGxlZCBmb3JcclxuICAgICAqICAgICAgICB0aGF0IGZpbmFsIHBhaXIgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgSW5pdGlhbCB0aGlyZCBhcmd1bWVudCBvZiBvbkZvdW5kLiBUaGlzIHZhbHVlXHJcbiAgICAgKiAgICAgICAgaW5jcmVhc2VzIGJ5IG9uZSBlYWNoIHRpbWUgYG9uRm91bmRgIGlzIGNhbGxlZC4gRGVmYXVsdDogMFxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgZm91bmQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG9uRm91bmQsIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLl9yb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGZhbHNlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB2YWx1ZXMgZm9yIGEgc3Vic2VxdWVuY2Ugb2Yga2V5cy5cclxuICAgICAqIE5vdGU6IHRoZSBjYWxsYmFjayBgb25Gb3VuZGAgc2hvdWxkIGlkZWFsbHkgYmUgYSBwdXJlIGZ1bmN0aW9uLlxyXG4gICAgICogICBTcGVjZmljYWxseSwgaXQgbXVzdCBub3QgaW5zZXJ0IGl0ZW1zLCBjYWxsIGNsb25lKCksIG9yIGNoYW5nZVxyXG4gICAgICogICB0aGUgY29sbGVjdGlvbiBleGNlcHQgdmlhIHJldHVybiB2YWx1ZTsgb3V0LW9mLWJhbmQgZWRpdGluZyBtYXlcclxuICAgICAqICAgY2F1c2UgYW4gZXhjZXB0aW9uIG9yIG1heSBjYXVzZSBpbmNvcnJlY3QgZGF0YSB0byBiZSBzZW50IHRvXHJcbiAgICAgKiAgIHRoZSBjYWxsYmFjayAoZHVwbGljYXRlIG9yIG1pc3NlZCBpdGVtcykuIEl0IG11c3Qgbm90IGNhdXNlIGFcclxuICAgICAqICAgY2xvbmUoKSBvZiB0aGUgY29sbGVjdGlvbiwgb3RoZXJ3aXNlIHRoZSBjbG9uZSBjb3VsZCBiZSBtb2RpZmllZFxyXG4gICAgICogICBieSBjaGFuZ2VzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiBge3ZhbHVlOnZ9YCB0byBjaGFuZ2UgdGhlIHZhbHVlIGFzc29jaWF0ZWRcclxuICAgICAqICAgICAgICB3aXRoIHRoZSBjdXJyZW50IGtleSwgYHtkZWxldGU6dHJ1ZX1gIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBwYWlyLFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUiwgb3IgaXQgY2FuIHJldHVybiBub3RoaW5nXHJcbiAgICAgKiAgICAgICAgKHVuZGVmaW5lZCBvciB7fSkgdG8gY2F1c2Ugbm8gZWZmZWN0IGFuZCBjb250aW51ZSBpdGVyYXRpbmcuXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgY2FuIGJlIGNvbWJpbmVkIHdpdGggb25lIG9mIHRoZSBvdGhlciB0d28gY29tbWFuZHMuXHJcbiAgICAgKiAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGBjb3VudGVyYCBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGl0ZXJhdGVkXHJcbiAgICAgKiAgICAgICAgcHJldmlvdXNseTsgaXQgZXF1YWxzIDAgd2hlbiBgb25Gb3VuZGAgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgc2Nhbm5lZCwgb3IgUiBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWRcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5LlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiAgIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2YgaXRlbXMgc2Nhbm5lZCArIGxvZyBzaXplKVxyXG4gICAgICogICBOb3RlOiBpZiB0aGUgdHJlZSBoYXMgYmVlbiBjbG9uZWQgd2l0aCBjbG9uZSgpLCBhbnkgc2hhcmVkXHJcbiAgICAgKiAgIG5vZGVzIGFyZSBjb3BpZWQgYmVmb3JlIGBvbkZvdW5kYCBpcyBjYWxsZWQuIFRoaXMgdGFrZXMgTyhuKSB0aW1lXHJcbiAgICAgKiAgIHdoZXJlIG4gaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBhbW91bnQgb2Ygc2hhcmVkIGRhdGEgc2Nhbm5lZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICBpZiAocm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmNsb25lKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHIgPSByb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHRydWUsIHRoaXMsIGluaXRpYWxDb3VudGVyIHx8IDAsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHZhciBpc1NoYXJlZCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgd2hpbGUgKHJvb3Qua2V5cy5sZW5ndGggPD0gMSAmJiAhcm9vdC5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIGlzU2hhcmVkIHx8IChpc1NoYXJlZCA9IHJvb3QuaXNTaGFyZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmtleXMubGVuZ3RoID09PSAwID8gRW1wdHlMZWFmIDpcclxuICAgICAgICAgICAgICAgICAgICByb290LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIGFueSBhbmNlc3RvciBvZiB0aGUgbmV3IHJvb3Qgd2FzIHNoYXJlZCwgdGhlIG5ldyByb290IG11c3QgYWxzbyBiZSBzaGFyZWRcclxuICAgICAgICAgICAgaWYgKGlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICByb290LmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKiogU2FtZSBhcyBgZWRpdFJhbmdlYCBleGNlcHQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBhbGwgcGFpcnMuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZWRpdEFsbCA9IGZ1bmN0aW9uIChvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcmFuZ2Ugb2Yga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBgaGlnaGAga2V5LCBpZiBwcmVzZW50LCBpcyBkZWxldGVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCB3ZXJlIGRlbGV0ZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplICsgbnVtYmVyIG9mIGl0ZW1zIGRlbGV0ZWQpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kZWxldGVSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIERlbGV0ZVJhbmdlKTtcclxuICAgIH07XHJcbiAgICAvKiogRGVsZXRlcyBhIHNlcmllcyBvZiBrZXlzIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlS2V5cyA9IGZ1bmN0aW9uIChrZXlzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlKGtleXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgcisrO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcclxuICAgICAgICAvKiogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlOiB0aGUgbnVtYmVyIG9mIGludGVybmFsIG5vZGVzIGJldHdlZW4gdGhlXHJcbiAgICAgICAgICogIEJUcmVlIG9iamVjdCBhbmQgaXRzIGxlYWYgbm9kZXMgKHplcm8gaWYgdGhlcmUgYXJlIG5vIGludGVybmFsIG5vZGVzKS4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gLTE7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQrKztcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmlzTGVhZiA/IHVuZGVmaW5lZCA6IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogTWFrZXMgdGhlIG9iamVjdCByZWFkLW9ubHkgdG8gZW5zdXJlIGl0IGlzIG5vdCBhY2NpZGVudGFsbHkgbW9kaWZpZWQuXHJcbiAgICAgKiAgRnJlZXppbmcgZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJtYW5lbnQ7IHVuZnJlZXplKCkgcmV2ZXJzZXMgdGhlIGVmZmVjdC5cclxuICAgICAqICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSByZXBsYWNpbmcgbXV0YXRvciBmdW5jdGlvbnMgd2l0aCBhIGZ1bmN0aW9uXHJcbiAgICAgKiAgdGhhdCB0aHJvd3MgYW4gRXJyb3IuIENvbXBhcmVkIHRvIHVzaW5nIGEgcHJvcGVydHkgKGUuZy4gdGhpcy5pc0Zyb3plbilcclxuICAgICAqICB0aGlzIGltcGxlbWVudGF0aW9uIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBpbiBub24tZnJvemVuIEJUcmVlcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdCA9IHRoaXM7XHJcbiAgICAgICAgLy8gTm90ZTogYWxsIG90aGVyIG11dGF0b3JzIHVsdGltYXRlbHkgY2FsbCBzZXQoKSBvciBlZGl0UmFuZ2UoKSBcclxuICAgICAgICAvLyAgICAgICBzbyB3ZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRob3NlIG90aGVycy5cclxuICAgICAgICB0LmNsZWFyID0gdC5zZXQgPSB0LmVkaXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGVkIHRvIG1vZGlmeSBhIGZyb3plbiBCVHJlZVwiKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8qKiBFbnN1cmVzIG11dGF0aW9ucyBhcmUgYWxsb3dlZCwgcmV2ZXJzaW5nIHRoZSBlZmZlY3Qgb2YgZnJlZXplKCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcIlRoZSBvcGVyYW5kIG9mIGEgJ2RlbGV0ZScgb3BlcmF0b3IgbXVzdCBiZSBvcHRpb25hbC5cIlxyXG4gICAgICAgIC8vICAgICAgICAgICAgKHdyb25nOiBkZWxldGUgZG9lcyBub3QgYWZmZWN0IHRoZSBwcm90b3R5cGUuKVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNsZWFyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5zZXQ7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSYW5nZTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRnJvemVuXCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0cmVlIGFwcGVhcnMgdG8gYmUgZnJvemVuLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgnZWRpdFJhbmdlJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIFNjYW5zIHRoZSB0cmVlIGZvciBzaWducyBvZiBzZXJpb3VzIGJ1Z3MgKGUuZy4gdGhpcy5zaXplIGRvZXNuJ3QgbWF0Y2hcclxuICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMsIGludGVybmFsIG5vZGVzIG5vdCBjYWNoaW5nIG1heCBlbGVtZW50IHByb3Blcmx5Li4uKVxyXG4gICAgICogIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2Ygbm9kZXMpLCBpLmUuIE8oc2l6ZSkuIFRoaXMgbWV0aG9kXHJcbiAgICAgKiAgc2tpcHMgdGhlIG1vc3QgZXhwZW5zaXZlIHRlc3QgLSB3aGV0aGVyIGFsbCBrZXlzIGFyZSBzb3J0ZWQgLSBidXQgaXRcclxuICAgICAqICBkb2VzIGNoZWNrIHRoYXQgbWF4S2V5KCkgb2YgdGhlIGNoaWxkcmVuIG9mIGludGVybmFsIG5vZGVzIGFyZSBzb3J0ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3Jvb3QuY2hlY2tWYWxpZCgwLCB0aGlzLCAwKTtcclxuICAgICAgICBjaGVjayhzaXplID09PSB0aGlzLnNpemUsIFwic2l6ZSBtaXNtYXRjaDogY291bnRlZCBcIiwgc2l6ZSwgXCJidXQgc3RvcmVkXCIsIHRoaXMuc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJUcmVlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCVHJlZTtcclxuLyoqIEEgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBpdHMgYXJndW1lbnQsIHR5cGVkIGFzXHJcbiAqICBgSVNvcnRlZFNldDxLPmAgaWYgdGhlIEJUcmVlIGltcGxlbWVudHMgaXQsIGFzIGl0IGRvZXMgaWYgYFYgZXh0ZW5kcyB1bmRlZmluZWRgLlxyXG4gKiAgSWYgYFZgIGNhbm5vdCBiZSBgdW5kZWZpbmVkYCwgaXQgcmV0dXJucyBgdW5rbm93bmAgaW5zdGVhZC4gT3IgYXQgbGVhc3QsIHRoYXRcclxuICogIHdhcyB0aGUgaW50ZW50aW9uLCBidXQgVHlwZVNjcmlwdCBpcyBhY3Rpbmcgd2VpcmQgYW5kIG1heSByZXR1cm4gYElTb3J0ZWRTZXQ8Sz5gXHJcbiAqICBldmVuIGlmIGBWYCBjYW4ndCBiZSBgdW5kZWZpbmVkYCAoZGlzY3Vzc2lvbjogYnRyZWUtdHlwZXNjcmlwdCBpc3N1ZSAjMTQpICovXHJcbmZ1bmN0aW9uIGFzU2V0KGJ0cmVlKSB7XHJcbiAgICByZXR1cm4gYnRyZWU7XHJcbn1cclxuZXhwb3J0cy5hc1NldCA9IGFzU2V0O1xyXG5pZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcikgLy8gaXRlcmF0b3IgaXMgZXF1aXZhbGVudCB0byBlbnRyaWVzKClcclxuICAgIEJUcmVlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gQlRyZWUucHJvdG90eXBlLmVudHJpZXM7XHJcbkJUcmVlLnByb3RvdHlwZS53aGVyZSA9IEJUcmVlLnByb3RvdHlwZS5maWx0ZXI7XHJcbkJUcmVlLnByb3RvdHlwZS5zZXRSYW5nZSA9IEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycztcclxuQlRyZWUucHJvdG90eXBlLmFkZCA9IEJUcmVlLnByb3RvdHlwZS5zZXQ7IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSVNldFNpbms8Sz5cclxuZnVuY3Rpb24gaXRlcmF0b3IobmV4dCkge1xyXG4gICAgaWYgKG5leHQgPT09IHZvaWQgMCkgeyBuZXh0ID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7IH0pOyB9XHJcbiAgICB2YXIgcmVzdWx0ID0geyBuZXh0OiBuZXh0IH07XHJcbiAgICBpZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcilcclxuICAgICAgICByZXN1bHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qKiBMZWFmIG5vZGUgLyBiYXNlIGNsYXNzLiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQk5vZGUoa2V5cywgdmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGtleXMgPT09IHZvaWQgMCkgeyBrZXlzID0gW107IH1cclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzIHx8IHVuZGVmVmFscztcclxuICAgICAgICB0aGlzLmlzU2hhcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJOb2RlLnByb3RvdHlwZSwgXCJpc0xlYWZcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIFNoYXJlZCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXlzW3RoaXMua2V5cy5sZW5ndGggLSAxXTtcclxuICAgIH07XHJcbiAgICAvLyBJZiBrZXkgbm90IGZvdW5kLCByZXR1cm5zIGleZmFpbFhvciB3aGVyZSBpIGlzIHRoZSBpbnNlcnRpb24gaW5kZXguXHJcbiAgICAvLyBDYWxsZXJzIHRoYXQgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlIHdhcyBhIG1hdGNoIHdpbGwgc2V0IGZhaWxYb3I9MC5cclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKGtleSwgZmFpbFhvciwgY21wKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSBrZXlzLmxlbmd0aCwgbWlkID0gaGkgPj4gMTtcclxuICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xyXG4gICAgICAgICAgICB2YXIgYyA9IGNtcChrZXlzW21pZF0sIGtleSk7XHJcbiAgICAgICAgICAgIGlmIChjIDwgMClcclxuICAgICAgICAgICAgICAgIGxvID0gbWlkICsgMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+IDApIC8vIGtleSA8IGtleXNbbWlkXVxyXG4gICAgICAgICAgICAgICAgaGkgPSBtaWQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGMgaXMgTmFOIG9yIG90aGVyd2lzZSBpbnZhbGlkXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgPj4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1pZCBeIGZhaWxYb3I7XHJcbiAgICAgICAgLy8gVW5yb2xsZWQgdmVyc2lvbjogYmVuY2htYXJrcyBzaG93IHNhbWUgc3BlZWQsIG5vdCB3b3J0aCB1c2luZ1xyXG4gICAgICAgIC8qdmFyIGkgPSAxLCBjOiBudW1iZXIgPSAwLCBzdW0gPSAwO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICBpID0gMztcclxuICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgICAgIGkgPSA3O1xyXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gMTYpIHtcclxuICAgICAgICAgICAgICBpID0gMTU7XHJcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBpID0gMzE7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgaSA9IDEyNztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNjQgOiAtNjQ7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAzMiA6IC0zMjtcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxNiA6IC0xNjtcclxuICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyA4IDogLTg7XHJcbiAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNCA6IC00O1xyXG4gICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDIgOiAtMjtcclxuICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxIDogLTE7XHJcbiAgICAgICAgYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMTtcclxuICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICBpZiAoYyA8IDApIHtcclxuICAgICAgICAgICsraTtcclxuICAgICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN1bSAhPT0gc3VtKSB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoIF4gZmFpbFhvcjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGMgPT09IDAgPyBpIDogaSBeIGZhaWxYb3I7Ki9cclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBtaXNjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1swXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzWzBdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhQYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMua2V5cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2xhc3RJbmRleF07XHJcbiAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlKHRoaXMua2V5cy5zbGljZSgwKSwgdiA9PT0gdW5kZWZWYWxzID8gdiA6IHYuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5ncmVlZHlDbG9uZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2hhcmVkICYmICFmb3JjZSA/IHRoaXMgOiB0aGlzLmNsb25lKCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIHRyZWUuX2NvbXBhcmUpO1xyXG4gICAgICAgIHJldHVybiBpIDwgMCA/IGRlZmF1bHRWYWx1ZSA6IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgY29tcGFyZSk7XHJcbiAgICAgICAgdmFyIGluZGV4T3JMb3dlciA9IGkgPCAwID8gfmkgLSAxIDogKGluY2x1c2l2ZSA/IGkgOiBpIC0gMSk7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIDogKGluY2x1c2l2ZSA/IGkgOiBpICsgMSk7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA8IGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0ga2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgdkwgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2sodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscyA/IGtMIDw9IHZMIDoga0wgPT09IHZMLCBcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcIiwgZGVwdGgsIFwid2l0aCBsZW5ndGhzXCIsIGtMLCB2TCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgY2hlY2sgZm9yIFwibm9kZSB0b28gc21hbGxcIiBiZWNhdXNlIHNvbWV0aW1lcyBhIG5vZGVcclxuICAgICAgICAvLyBjYW4gbGVnaXRpbWF0ZWx5IGhhdmUgc2l6ZSAxLiBUaGlzIG9jY3VycyBpZiB0aGVyZSBpcyBhIGJhdGNoIFxyXG4gICAgICAgIC8vIGRlbGV0aW9uLCBsZWF2aW5nIGEgbm9kZSBvZiBzaXplIDEsIGFuZCB0aGUgc2libGluZ3MgYXJlIGZ1bGwgc29cclxuICAgICAgICAvLyBpdCBjYW4ndCBiZSBtZXJnZWQgd2l0aCBhZGphY2VudCBub2Rlcy4gSG93ZXZlciwgdGhlIHBhcmVudCB3aWxsXHJcbiAgICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIGF2ZXJhZ2Ugbm9kZSBzaXplIGlzIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG1heGltdW0uXHJcbiAgICAgICAgY2hlY2soZGVwdGggPT0gMCB8fCBrTCA+IDAsIFwiZW1wdHkgbGVhZiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGtMO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgLy8ga2V5IGRvZXMgbm90IGV4aXN0IHlldFxyXG4gICAgICAgICAgICBpID0gfmk7XHJcbiAgICAgICAgICAgIHRyZWUuX3NpemUrKztcclxuICAgICAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCB0cmVlLl9tYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBsZWFmIG5vZGUgaXMgZnVsbCBhbmQgbXVzdCBzcGxpdFxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChpID4gdGhpcy5rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGkgLT0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gS2V5IGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB1c3VhbGx5IHRoaXMgaXMgYSBuby1vcCwgYnV0IHNvbWUgdXNlcnMgbWF5IHdpc2ggdG8gZWRpdCB0aGUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnJlaWZ5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmluc2VydEluTGVhZiA9IGZ1bmN0aW9uIChpLCBrZXksIHZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBrZXkpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRlZlZhbHMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpXHJcbiAgICAgICAgICAgICAgICB1bmRlZlZhbHMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHVuZGVmVmFscy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDAsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB2YXIgdiA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHYucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdiA9IHRoaXMucmVpZnlWYWx1ZXMoKTtcclxuICAgICAgICAgICAgdi5wdXNoKHJocy52YWx1ZXMuc2hpZnQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoKHJocy5rZXlzLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAobGhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnVuc2hpZnQodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYudW5zaGlmdChsaHMudmFsdWVzLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICB2YXIgaGFsZiA9IHRoaXMua2V5cy5sZW5ndGggPj4gMSwga2V5cyA9IHRoaXMua2V5cy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyB1bmRlZlZhbHMgOiB0aGlzLnZhbHVlcy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZShrZXlzLCB2YWx1ZXMpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCkge1xyXG4gICAgICAgIHZhciBjbXAgPSB0cmVlLl9jb21wYXJlO1xyXG4gICAgICAgIHZhciBpTG93LCBpSGlnaDtcclxuICAgICAgICBpZiAoaGlnaCA9PT0gbG93KSB7XHJcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhpZ2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgICAgIGlIaWdoID0gKGlMb3cgPSB0aGlzLmluZGV4T2YobG93LCAtMSwgY21wKSkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoaUxvdyA8IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKTtcclxuICAgICAgICAgICAgaUhpZ2ggPSB0aGlzLmluZGV4T2YoaGlnaCwgLTEsIGNtcCk7XHJcbiAgICAgICAgICAgIGlmIChpSGlnaCA8IDApXHJcbiAgICAgICAgICAgICAgICBpSGlnaCA9IH5pSGlnaDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5jbHVkZUhpZ2ggPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICBpSGlnaCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgdmFsdWVzID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKG9uRm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gaUxvdzsgaSA8IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9uRm91bmQoa2V5LCB2YWx1ZXNbaV0sIGNvdW50KyspO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGtleXNbaV0gfHwgdGhpcy5pc1NoYXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlIGlsbGVnYWxseSBjaGFuZ2VkIG9yIGNsb25lZCBpbiBlZGl0UmFuZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZS5fc2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUhpZ2gtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb3VudCArPSBpSGlnaCAtIGlMb3c7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGVudGlyZSBjb250ZW50cyBvZiByaWdodC1oYW5kIHNpYmxpbmcgKHJocyBpcyBsZWZ0IHVuY2hhbmdlZCkgKi9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBfKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHJocy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaC5hcHBseSh0aGlzLnZhbHVlcywgcmhzLnJlaWZ5VmFsdWVzKCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZTtcclxufSgpKTtcclxuLyoqIEludGVybmFsIG5vZGUgKG5vbi1sZWFmIG5vZGUpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG52YXIgQk5vZGVJbnRlcm5hbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhCTm9kZUludGVybmFsLCBfc3VwZXIpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IG1hcmsgYGNoaWxkcmVuYCBhcyBzaGFyZWQsIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyXHJcbiAgICAgKiB0byBlbnN1cmUgY2hpbGRyZW4gYXJlIGVpdGhlciBtYXJrZWQgc2hhcmVkLCBvciBhcmVuJ3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCTm9kZUludGVybmFsKGNoaWxkcmVuLCBrZXlzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAga2V5cyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAga2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGtleXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwoY2hpbGRyZW4sIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHZhciBudSA9IG5ldyBCTm9kZUludGVybmFsKHRoaXMuY2hpbGRyZW4uc2xpY2UoMCksIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgbnUuY2hpbGRyZW5baV0gPSBudS5jaGlsZHJlbltpXS5ncmVlZHlDbG9uZShmb3JjZSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1pbktleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5taW5LZXkoKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5QYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0ubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCB0cmVlLl9jb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBpIDwgY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW5baV0uZ2V0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmIChpID49IGNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmdldFBhaXJPck5leHRMb3dlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLCBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGkgPCBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpICsgMV0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgY0wgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBjaGVjayhrTCA9PT0gY0wsIFwia2V5cy9jaGlsZHJlbiBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcImxlbmd0aHNcIiwga0wsIGNMLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIGNoZWNrKGtMID4gMSB8fCBkZXB0aCA+IDAsIFwiaW50ZXJuYWwgbm9kZSBoYXMgbGVuZ3RoXCIsIGtMLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHZhciBzaXplID0gMCwgYyA9IHRoaXMuY2hpbGRyZW4sIGsgPSB0aGlzLmtleXMsIGNoaWxkU2l6ZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjTDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNpemUgKz0gY1tpXS5jaGVja1ZhbGlkKGRlcHRoICsgMSwgdHJlZSwgYmFzZUluZGV4ICsgc2l6ZSk7XHJcbiAgICAgICAgICAgIGNoaWxkU2l6ZSArPSBjW2ldLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjaGVjayhzaXplID49IGNoaWxkU2l6ZSwgXCJ3dGZcIiwgYmFzZUluZGV4KTsgLy8gbm8gd2F5IHRoaXMgd2lsbCBldmVyIGZhaWxcclxuICAgICAgICAgICAgY2hlY2soaSA9PT0gMCB8fCBjW2kgLSAxXS5jb25zdHJ1Y3RvciA9PT0gY1tpXS5jb25zdHJ1Y3RvciwgXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChjW2ldLm1heEtleSgpICE9IGtbaV0pXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJrZXlzW1wiLCBpLCBcIl0gPVwiLCBrW2ldLCBcImlzIHdyb25nLCBzaG91bGQgYmUgXCIsIGNbaV0ubWF4S2V5KCksIFwiYXQgZGVwdGhcIiwgZGVwdGgsIFwiYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmICghKGkgPT09IDAgfHwgdHJlZS5fY29tcGFyZShrW2kgLSAxXSwga1tpXSkgPCAwKSlcclxuICAgICAgICAgICAgICAgIGNoZWNrKGZhbHNlLCBcInNvcnQgdmlvbGF0aW9uIGF0IGRlcHRoXCIsIGRlcHRoLCBcImluZGV4XCIsIGksIFwia2V5c1wiLCBrW2kgLSAxXSwga1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDIwMjAvMDg6IEJUcmVlIGRvZXNuJ3QgYWx3YXlzIGF2b2lkIGdyb3NzbHkgdW5kZXJzaXplZCBub2RlcyxcclxuICAgICAgICAvLyBidXQgQUZBSUsgc3VjaCBub2RlcyBhcmUgcHJldHR5IGhhcm1sZXNzLCBzbyBhY2NlcHQgdGhlbS5cclxuICAgICAgICB2YXIgdG9vZmV3ID0gY2hpbGRTaXplID09PSAwOyAvLyBjaGlsZFNpemUgPCAodHJlZS5tYXhOb2RlU2l6ZSA+PiAxKSpjTDtcclxuICAgICAgICBpZiAodG9vZmV3IHx8IGNoaWxkU2l6ZSA+IHRyZWUubWF4Tm9kZVNpemUgKiBjTClcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIHRvb2ZldyA/IFwidG9vIGZld1wiIDogXCJ0b28gbWFueVwiLCBcImNoaWxkcmVuIChcIiwgY2hpbGRTaXplLCBzaXplLCBcIikgYXQgZGVwdGhcIiwgZGVwdGgsIFwibWF4Tm9kZVNpemU6XCIsIHRyZWUubWF4Tm9kZVNpemUsIFwiY2hpbGRyZW4ubGVuZ3RoOlwiLCBjTCwgXCJiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHNpemU7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGMgPSB0aGlzLmNoaWxkcmVuLCBtYXggPSB0cmVlLl9tYXhOb2RlU2l6ZSwgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMuaW5kZXhPZihrZXksIDAsIGNtcCksIGMubGVuZ3RoIC0gMSksIGNoaWxkID0gY1tpXTtcclxuICAgICAgICBpZiAoY2hpbGQuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIGNbaV0gPSBjaGlsZCA9IGNoaWxkLmNsb25lKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkLmtleXMubGVuZ3RoID49IG1heCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBpcyBmdWxsOyBpbnNlcnRpbmcgYW55dGhpbmcgZWxzZSB3aWxsIGNhdXNlIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFNoaWZ0aW5nIGFuIGl0ZW0gdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2libGluZyBtYXkgYXZvaWQgYSBzcGxpdC5cclxuICAgICAgICAgICAgLy8gV2UgY2FuIGRvIGEgc2hpZnQgaWYgdGhlIGFkamFjZW50IG5vZGUgaXMgbm90IGZ1bGwgYW5kIGlmIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBjYW4gc3RpbGwgYmUgcGxhY2VkIGluIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgdGhlIHNoaWZ0LlxyXG4gICAgICAgICAgICB2YXIgb3RoZXI7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiAob3RoZXIgPSBjW2kgLSAxXSkua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLmtleXNbMF0sIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpIC0gMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbVJpZ2h0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpIC0gMV0gPSBvdGhlci5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgob3RoZXIgPSBjW2kgKyAxXSkgIT09IHVuZGVmaW5lZCAmJiBvdGhlci5rZXlzLmxlbmd0aCA8IG1heCAmJiBjbXAoY2hpbGQubWF4S2V5KCksIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpICsgMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbUxlZnQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY1tpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGQuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleXNbaV0gPSBjaGlsZC5tYXhLZXkoKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAvLyBUaGUgY2hpbGQgaGFzIHNwbGl0IGFuZCBgcmVzdWx0YCBpcyBhIG5ldyByaWdodCBjaGlsZC4uLiBkb2VzIGl0IGZpdD9cclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA8IG1heCkgeyAvLyB5ZXNcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gbm8sIHdlIG11c3Qgc3BsaXQgYWxzb1xyXG4gICAgICAgICAgICB2YXIgbmV3UmlnaHRTaWJsaW5nID0gdGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLCB0YXJnZXQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoY21wKHJlc3VsdC5tYXhLZXkoKSwgdGhpcy5tYXhLZXkoKSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0Lmluc2VydChpICsgMSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGBjaGlsZGAgYXQgaW5kZXggYGlgLlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZGAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIHRoYXQgZWl0aGVyIGNoaWxkIGlzIG1hcmtlZCBzaGFyZWQsIG9yIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBhbm90aGVyIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChpLCBjaGlsZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGNoaWxkKTtcclxuICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDAsIGNoaWxkLm1heEtleSgpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IHRoaXMgbm9kZS5cclxuICAgICAqIE1vZGlmaWVzIHRoaXMgdG8gcmVtb3ZlIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgaXRlbXMsIHJldHVybmluZyBhIHNlcGFyYXRlIG5vZGUgY29udGFpbmluZyB0aGVtLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+PiAxO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNwbGljZShoYWxmKSwgdGhpcy5rZXlzLnNwbGljZShoYWxmKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2gocmhzLmNoaWxkcmVuLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tTGVmdCA9IGZ1bmN0aW9uIChsaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMudW5zaGlmdChsaHMua2V5cy5wb3AoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGxocy5jaGlsZHJlbi5wb3AoKSk7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBOb3RlOiBgY291bnRgIGlzIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgb25Gb3VuZGAuIFxyXG4gICAgLy8gICAgICAgQSBsZWFmIG5vZGUncyBgZm9yUmFuZ2VgIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgdmFsdWUgZm9yIHRoaXMgY291bnRlcixcclxuICAgIC8vICAgICAgIHVubGVzcyB0aGUgb3BlcmF0aW9uIGlzIHRvIHN0b3AgZWFybHkuXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKSwgaSA9IGlMb3c7XHJcbiAgICAgICAgdmFyIGlIaWdoID0gTWF0aC5taW4oaGlnaCA9PT0gbG93ID8gaUxvdyA6IHRoaXMuaW5kZXhPZihoaWdoLCAwLCBjbXApLCBrZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgIGlmICghZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2VcclxuICAgICAgICAgICAgZm9yICg7IGkgPD0gaUhpZ2g7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGkgPD0gaUhpZ2gpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBpZiBjaGlsZHJlbltpXSBpcyBlbXB0eSB0aGVuIGtleXNbaV09dW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgIFRoaXMgaXMgYW4gaW52YWxpZCBzdGF0ZSwgYnV0IGl0IGlzIGZpeGVkIGJlbG93LlxyXG4gICAgICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZWxldGlvbnMgbWF5IGhhdmUgb2NjdXJyZWQsIHNvIGxvb2sgZm9yIG9wcG9ydHVuaXRpZXMgdG8gbWVyZ2Ugbm9kZXMuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFsZiA9IHRyZWUuX21heE5vZGVTaXplID4+IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaUxvdyA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaUxvdy0tO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gaUhpZ2g7IGkgPj0gaUxvdzsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoIDw9IGhhbGYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeU1lcmdlKGksIHRyZWUuX21heE5vZGVTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gY2hpbGQgaXMgZW1wdHkhIGRlbGV0ZSBpdCFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiBjaGlsZHJlblswXS5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJlbXB0aW5lc3MgYnVnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogTWVyZ2VzIGNoaWxkIGkgd2l0aCBjaGlsZCBpKzEgaWYgdGhlaXIgY29tYmluZWQgc2l6ZSBpcyBub3QgdG9vIGxhcmdlICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50cnlNZXJnZSA9IGZ1bmN0aW9uIChpLCBtYXhTaXplKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSAwICYmIGkgKyAxIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCArIGNoaWxkcmVuW2kgKyAxXS5rZXlzLmxlbmd0aCA8PSBtYXhTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpIC8vIGNsb25lZCBhbHJlYWR5IFVOTEVTUyBpIGlzIG91dHNpZGUgc2NhbiByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLm1lcmdlU2libGluZyhjaGlsZHJlbltpICsgMV0sIG1heFNpemUpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSArIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIGNoaWxkcmVuIGZyb20gYHJoc2AgaW50byB0aGlzLlxyXG4gICAgICogYHJoc2AgbXVzdCBiZSBwYXJ0IG9mIHRoaXMgdHJlZSwgYW5kIGJlIHJlbW92ZWQgZnJvbSBpdCBhZnRlciB0aGlzIGNhbGxcclxuICAgICAqIChvdGhlcndpc2UgaXNTaGFyZWQgZm9yIGl0cyBjaGlsZHJlbiBjb3VsZCBiZSBpbmNvcnJlY3QpLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIC8vIGFzc2VydCAhdGhpcy5pc1NoYXJlZDtcclxuICAgICAgICB2YXIgb2xkTGVuZ3RoID0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsIHJocy5rZXlzKTtcclxuICAgICAgICB2YXIgcmhzQ2hpbGRyZW4gPSByaHMuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4sIHJoc0NoaWxkcmVuKTtcclxuICAgICAgICBpZiAocmhzLmlzU2hhcmVkICYmICF0aGlzLmlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEFsbCBjaGlsZHJlbiBvZiBhIHNoYXJlZCBub2RlIGFyZSBpbXBsaWNpdGx5IHNoYXJlZCwgYW5kIHNpbmNlIHRoZWlyIG5ld1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgaXMgbm90IHNoYXJlZCwgdGhleSBtdXN0IG5vdyBiZSBleHBsaWNpdGx5IG1hcmtlZCBhcyBzaGFyZWQuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmhzQ2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByaHNDaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG91ciBjaGlsZHJlbiBhcmUgdGhlbXNlbHZlcyBhbG1vc3QgZW1wdHkgZHVlIHRvIGEgbWFzcy1kZWxldGUsXHJcbiAgICAgICAgLy8gdGhleSBtYXkgbmVlZCB0byBiZSBtZXJnZWQgdG9vIChidXQgb25seSB0aGUgb2xkTGVuZ3RoLTEgYW5kIGl0c1xyXG4gICAgICAgIC8vIHJpZ2h0IHNpYmxpbmcgc2hvdWxkIG5lZWQgdGhpcykuXHJcbiAgICAgICAgdGhpcy50cnlNZXJnZShvbGRMZW5ndGggLSAxLCBtYXhOb2RlU2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJOb2RlSW50ZXJuYWw7XHJcbn0oQk5vZGUpKTtcclxuLy8gT3B0aW1pemF0aW9uOiB0aGlzIGFycmF5IG9mIGB1bmRlZmluZWRgcyBpcyB1c2VkIGluc3RlYWQgb2YgYSBub3JtYWxcclxuLy8gYXJyYXkgb2YgdmFsdWVzIGluIG5vZGVzIHdoZXJlIGB1bmRlZmluZWRgIGlzIHRoZSBvbmx5IHZhbHVlLlxyXG4vLyBJdHMgbGVuZ3RoIGlzIGV4dGVuZGVkIHRvIG1heCBub2RlIHNpemUgb24gZmlyc3QgdXNlOyBzaW5jZSBpdCBjYW5cclxuLy8gYmUgc2hhcmVkIGJldHdlZW4gdHJlZXMgd2l0aCBkaWZmZXJlbnQgbWF4aW11bXMsIGl0cyBsZW5ndGggY2FuIG9ubHlcclxuLy8gaW5jcmVhc2UsIG5ldmVyIGRlY3JlYXNlLiBJdHMgdHlwZSBzaG91bGQgYmUgdW5kZWZpbmVkW10gYnV0IHN0cmFuZ2VseVxyXG4vLyBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHRoZSBjb21wYXJpc29uIFZbXSA9PT0gdW5kZWZpbmVkW10uIFRvIHByZXZlbnRcclxuLy8gdXNlcnMgZnJvbSBtYWtpbmcgdGhpcyBhcnJheSB0b28gbGFyZ2UsIEJUcmVlIGhhcyBhIG1heGltdW0gbm9kZSBzaXplLlxyXG4vL1xyXG4vLyBGQVE6IHVuZGVmVmFsc1tpXSBpcyBhbHJlYWR5IHVuZGVmaW5lZCwgc28gd2h5IGluY3JlYXNlIHRoZSBhcnJheSBzaXplP1xyXG4vLyBSZWFkaW5nIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhbiBhcnJheSBpcyByZWxhdGl2ZWx5IHNsb3cgYmVjYXVzZSBpdFxyXG4vLyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNjYW5uaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uXHJcbnZhciB1bmRlZlZhbHMgPSBbXTtcclxudmFyIERlbGV0ZSA9IHsgZGVsZXRlOiB0cnVlIH0sIERlbGV0ZVJhbmdlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gRGVsZXRlOyB9O1xyXG52YXIgQnJlYWsgPSB7IGJyZWFrOiB0cnVlIH07XHJcbnZhciBFbXB0eUxlYWYgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG4gPSBuZXcgQk5vZGUoKTtcclxuICAgIG4uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG47XHJcbn0pKCk7XHJcbnZhciBFbXB0eUFycmF5ID0gW107XHJcbnZhciBSZXVzZWRBcnJheSA9IFtdOyAvLyBhc3N1bWVkIHRocmVhZC1sb2NhbFxyXG5mdW5jdGlvbiBjaGVjayhmYWN0KSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmYWN0KSB7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KCdCKyB0cmVlJyk7IC8vIGF0IGJlZ2lubmluZyBvZiBtZXNzYWdlXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFyZ3Muam9pbignICcpKTtcclxuICAgIH1cclxufVxyXG4vKiogQSBCVHJlZSBmcm96ZW4gaW4gdGhlIGVtcHR5IHN0YXRlLiAqL1xyXG5leHBvcnRzLkVtcHR5QlRyZWUgPSAoZnVuY3Rpb24gKCkgeyB2YXIgdCA9IG5ldyBCVHJlZSgpOyB0LmZyZWV6ZSgpOyByZXR1cm4gdDsgfSkoKTtcclxuIiwgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBNSVRcbiAqIEBjb3B5cmlnaHQgMjAyMCBFeWFzIFJhbmpvdXMgPGV5YXMucmFuam91c0BnbWFpbC5jb20+XG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIFF1ZXVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBxdWV1ZS5cbiAgICogQHBhcmFtIHthcnJheX0gW2VsZW1lbnRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG9iamVjdH0gZWxlbWVudFxuICAgKi9cbiAgZW5xdWV1ZShlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xvYmplY3R9IGVsZW1lbnRcbiAgICovXG4gIHB1c2goZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVucXVldWUoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIGRlcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcm9udCgpO1xuICAgIHRoaXMuX29mZnNldCArPSAxO1xuXG4gICAgaWYgKHRoaXMuX29mZnNldCAqIDIgPCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHJldHVybiBmaXJzdDtcblxuICAgIC8vIG9ubHkgcmVtb3ZlIGRlcXVldWVkIGVsZW1lbnRzIHdoZW4gcmVhY2hpbmcgaGFsZiBzaXplXG4gICAgLy8gdG8gZGVjcmVhc2UgbGF0ZW5jeSBvZiBzaGlmdGluZyBlbGVtZW50cy5cbiAgICB0aGlzLl9lbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRzLnNsaWNlKHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIHBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXF1ZXVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZnJvbnQgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgZnJvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpID4gMCA/IHRoaXMuX2VsZW1lbnRzW3RoaXMuX29mZnNldF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJhY2sgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgYmFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPiAwID8gdGhpcy5fZWxlbWVudHNbdGhpcy5fZWxlbWVudHMubGVuZ3RoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLmxlbmd0aCAtIHRoaXMuX29mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSBhcyBhbiBhcnJheS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAqL1xuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5zbGljZSh0aGlzLl9vZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBxdWV1ZS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgUXVldWUodGhpcy5fZWxlbWVudHMuc2xpY2UodGhpcy5fb2Zmc2V0KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHF1ZXVlIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqIEBwdWJsaWNcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge2FycmF5fSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tQXJyYXkoZWxlbWVudHMpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXVlKGVsZW1lbnRzKTtcbiAgfVxufVxuXG5leHBvcnRzLlF1ZXVlID0gUXVldWU7XG4iLCAiY29uc3QgeyBRdWV1ZSB9ID0gcmVxdWlyZSgnLi9zcmMvcXVldWUnKTtcblxuZXhwb3J0cy5RdWV1ZSA9IFF1ZXVlO1xuIiwgImltcG9ydCB7IERhdGFjb3JlQXBpIH0gZnJvbSBcImFwaS9hcGlcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MsIFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBEYXRhY29yZVF1ZXJ5VmlldyBhcyBEYXRhY29yZUpTVmlldywgVklFV19UWVBFX0RBVEFDT1JFSlMgfSBmcm9tIFwidWkvdmlldy1wYWdlXCI7XG5pbXBvcnQgeyBJbmRleFN0YXR1c0JhciB9IGZyb20gXCJ1aS9pbmRleC1zdGF0dXNcIjtcblxuLyoqIFJlYWN0aXZlIGRhdGEgZW5naW5lIGZvciB5b3VyIE9ic2lkaWFuLm1kIHZhdWx0LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIC8qKiBQbHVnaW4td2lkZSBkZWZhdWx0IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBzZXR0aW5nczogU2V0dGluZ3M7XG5cbiAgICAvKiogQ2VudHJhbCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgY29yZTogRGF0YWNvcmU7XG4gICAgLyoqIEV4dGVybmFsbHkgdmlzaWJsZSBBUEkgZm9yIHF1ZXJ5aW5nLiAqL1xuICAgIHB1YmxpYyBhcGk6IERhdGFjb3JlQXBpO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgKGF3YWl0IHRoaXMubG9hZERhdGEoKSkgPz8ge30pO1xuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IEdlbmVyYWxTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvcmUgQVBJIGZvciB1c2FnZSBpbiBhbGwgdmlld3MgYW5kIGRvd25zdHJlYW0gYXBwcy5cbiAgICAgICAgdGhpcy5hZGRDaGlsZCgodGhpcy5jb3JlID0gbmV3IERhdGFjb3JlKHRoaXMuYXBwLCB0aGlzLm1hbmlmZXN0LnZlcnNpb24sIHRoaXMuc2V0dGluZ3MpKSk7XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IERhdGFjb3JlQXBpKHRoaXMuY29yZSk7XG5cbiAgICAgICAgLy8gQWRkIGEgdmlzdWFsIGFpZCBmb3Igd2hhdCBkYXRhY29yZSBpcyBjdXJyZW50bHkgZG9pbmcuXG4gICAgICAgIHRoaXMubW91bnRJbmRleFN0YXRlKHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpLCB0aGlzLmNvcmUpO1xuXG4gICAgICAgIC8vIFByaW1hcnkgdmlzdWFsIGVsZW1lbnRzIChEYXRhY29yZUpTIGFuZCBEYXRhY29yZSBibG9ja3MpLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JlanNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmVqc3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JldHNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmV0c3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBWaWV3czogRGF0YWNvcmVKUyB2aWV3LlxuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlldyhWSUVXX1RZUEVfREFUQUNPUkVKUywgKGxlYWYpID0+IG5ldyBEYXRhY29yZUpTVmlldyhsZWFmLCB0aGlzLmFwaSkpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNvbW1hbmQgZm9yIGNyZWF0aW5nIGEgbmV3IHZpZXcgcGFnZS5cbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgICAgICAgIGlkOiBcImRhdGFjb3JlLWFkZC12aWV3LXBhZ2VcIixcbiAgICAgICAgICAgIG5hbWU6IFwiQ3JlYXRlIFZpZXcgUGFnZVwiLFxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYoXCJ0YWJcIik7XG4gICAgICAgICAgICAgICAgbmV3TGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBWSUVXX1RZUEVfREFUQUNPUkVKUywgYWN0aXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5zZXRBY3RpdmVMZWFmKG5ld0xlYWYsIHsgZm9jdXM6IHRydWUgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciBKUyBoaWdobGlnaHRpbmcgZm9yIGNvZGVibG9ja3MuXG4gICAgICAgIHRoaXMucmVnaXN0ZXIodGhpcy5yZWdpc3RlckNvZGVibG9ja0hpZ2hsaWdodGluZygpKTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIGFzIHNvb24gYXMgdGhlIHdvcmtzcGFjZSBpcyByZWFkeS5cbiAgICAgICAgaWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KGFzeW5jICgpID0+IHRoaXMuY29yZS5pbml0aWFsaXplKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb3JlLmluaXRpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgdGhlIEFQSSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZyb20gYW55IGNvbnRleHQuXG4gICAgICAgIHdpbmRvdy5kYXRhY29yZSA9IHRoaXMuYXBpO1xuXG4gICAgICAgIC8vIGJvbiBhcHBldGl0XG4gICAgICAgIGNvbnNvbGUubG9nKGBEYXRhY29yZTogdmVyc2lvbiAke3RoaXMubWFuaWZlc3QudmVyc2lvbn0gKHJlcXVpcmVzIG9ic2lkaWFuICR7dGhpcy5tYW5pZmVzdC5taW5BcHBWZXJzaW9ufSlgKTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYERhdGFjb3JlOiB2ZXJzaW9uICR7dGhpcy5tYW5pZmVzdC52ZXJzaW9ufSB1bmxvYWRlZC5gKTtcbiAgICB9XG5cbiAgICAvKiogUmVnaXN0ZXIgY29kZWJsb2NrIGhpZ2hsaWdodGluZyBhbmQgcmV0dXJuIGEgY2xvc3VyZSB3aGljaCB1bnJlZ2lzdGVycy4gKi9cbiAgICByZWdpc3RlckNvZGVibG9ja0hpZ2hsaWdodGluZygpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwiamF2YXNjcmlwdFwiKSk7XG4gICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZWpzeFwiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqc3hcIikpO1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqYXZhc2NyaXB0XCIpKTtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JldHN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImpzeFwiKSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZWpzXCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcIm51bGxcIikpO1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcIm51bGxcIikpO1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JldHNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGUgZ2l2ZW4gc2V0dGluZ3MgdG8gbmV3IHZhbHVlcy4gKi9cbiAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxTZXR0aW5ncz4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnNldHRpbmdzLCBzZXR0aW5ncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFJlbmRlciBkYXRhY29yZSBpbmRleGluZyBzdGF0dXMgdXNpbmcgdGhlIGluZGV4LiAqL1xuICAgIHByaXZhdGUgbW91bnRJbmRleFN0YXRlKHJvb3Q6IEhUTUxFbGVtZW50LCBjb3JlOiBEYXRhY29yZSk6IHZvaWQge1xuICAgICAgICByZW5kZXIoY3JlYXRlRWxlbWVudChJbmRleFN0YXR1c0JhciwgeyBkYXRhY29yZTogY29yZSB9KSwgcm9vdCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcigoKSA9PiByZW5kZXIobnVsbCwgcm9vdCkpO1xuICAgIH1cbn1cblxuLyoqIERhdGFjb3JlIFNldHRpbmdzIFRhYi4gKi9cbmNsYXNzIEdlbmVyYWxTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwcml2YXRlIHBsdWdpbjogRGF0YWNvcmVQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJWaWV3c1wiIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2luYXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiSWYgZW5hYmxlZCwgc3BsaXRzIHVwIHZpZXdzIGludG8gcGFnZXMgb2YgcmVzdWx0cyB3aGljaCBjYW4gYmUgdHJhdmVyc2VkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ2aWEgYnV0dG9ucyBhdCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIHZpZXcuIFRoaXMgc3Vic3RhbnRpYWxseSBpbXByb3ZlcyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidGhlIHBlcmZvcm1hbmNlIG9mIGxhcmdlIHZpZXdzLCBhbmQgY2FuIGhlbHAgd2l0aCB2aXN1YWwgY2x1dHRlci4gTm90ZSB0aGF0IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGlzIHNldHRpbmcgY2FuIGFsc28gYmUgc2V0IG9uIGEgcGVyLXZpZXcgYmFzaXMuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0UGFnaW5nRW5hYmxlZCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdFBhZ2luZ0VuYWJsZWQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBQYWdlIFNpemVcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHNob3cgcGVyIHBhZ2UsIGJ5IGRlZmF1bHQuIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBvbiBhIHBlci12aWV3IGJhc2lzLlwiKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IE9QVElPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiMjVcIjogXCIyNVwiLFxuICAgICAgICAgICAgICAgICAgICBcIjUwXCI6IFwiNTBcIixcbiAgICAgICAgICAgICAgICAgICAgXCIxMDBcIjogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgXCIyMDBcIjogXCIyMDBcIixcbiAgICAgICAgICAgICAgICAgICAgXCI1MDBcIjogXCI1MDBcIixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBcIlwiICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVmYXVsdFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgIGlmICghKGN1cnJlbnQgaW4gT1BUSU9OUykpIE9QVElPTlNbY3VycmVudF0gPSBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgLmFkZE9wdGlvbnMoT1BUSU9OUylcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKGN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0UGFnZVNpemU6IHBhcnNlZCB8IDAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiU2Nyb2xsIG9uIFBhZ2UgQ2hhbmdlXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIHRhYmxlIHRoYXQgYXJlIHBhZ2VkIHdpbGwgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gdGhlIHBhZ2UgY2hhbmdlcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGJlIG92ZXJyaWRlbiBvbiBhIHBlci12aWV3IGJhc2lzLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2Nyb2xsT25QYWdlQ2hhbmdlKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBzY3JvbGxPblBhZ2VDaGFuZ2U6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkVuYWJsZSBKYXZhc2NyaXB0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgSmF2YXNjcmlwdCBjb2RlYmxvY2tzIHdpbGwgYmUgZXZhbHVhdGVkLlwiKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUpzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBlbmFibGVKczogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkZvcm1hdHRpbmdcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJFbXB0eSBWYWx1ZXNcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hhdCB0byBzaG93IGZvciB1bnNldC9lbXB0eSBwcm9wZXJ0aWVzLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnJlbmRlck51bGxBcykub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgcmVuZGVyTnVsbEFzOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkRlZmF1bHQgRGF0ZSBGb3JtYXRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiVGhlIGRlZmF1bHQgZm9ybWF0IHRoYXQgZGF0ZXMgYXJlIHJlbmRlcmVkIGluLiBVc2VzIGx1eG9uIGRhdGUgZm9ybWF0dGluZyAoaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9sdXhvbi9ibG9iL21hc3Rlci9kb2NzL2Zvcm1hdHRpbmcubWQjZm9ybWF0dGluZy13aXRoLXRva2Vucy1zdHJpbmdzLWZvci1jdGh1bGh1KS5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZGF0ZSBmb3JtYXQgaXMgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLmZyb21NaWxsaXMoRGF0ZS5ub3coKSkudG9Gb3JtYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGRlZmF1bHREYXRlRm9ybWF0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkRlZmF1bHQgRGF0ZS1UaW1lIGZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlLXRpbWVzIGFyZSByZW5kZXJlZCBpbi4gVXNlcyBsdXhvbiBkYXRlIGZvcm1hdHRpbmcgKGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbHV4b24vYmxvYi9tYXN0ZXIvZG9jcy9mb3JtYXR0aW5nLm1kI2Zvcm1hdHRpbmctd2l0aC10b2tlbnMtc3RyaW5ncy1mb3ItY3RodWxodSkuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0RGF0ZVRpbWVGb3JtYXQpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhEYXRlLm5vdygpKS50b0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiUGVyZm9ybWFuY2UgVHVuaW5nXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiSW5saW5lIEZpZWxkc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBpbmxpbmUgZmllbGRzIHdpbGwgYmUgcGFyc2VkIGluIGFsbCBkb2N1bWVudHMuIEZpbmRpbmcgaW5saW5lIGZpZWxkcyByZXF1aXJlcyBhIGZ1bGwgdGV4dCBzY2FuIHRocm91Z2ggZWFjaCBkb2N1bWVudCwgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIndoaWNoIG5vdGljYWJseSBzbG93cyBkb3duIGluZGV4aW5nIGZvciBsYXJnZSB2YXVsdHMuIERpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBtZWFuIG1ldGFkYXRhIHdpbGwgb25seSBjb21lIGZyb20gdGFncywgbGlua3MsIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiUHJvcGVydGllcyAvIGZyb250bWF0dGVyXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmRleElubGluZUZpZWxkcykub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW5kZXhJbmxpbmVGaWVsZHM6IHZhbHVlIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlcXVlc3QgYSBmdWxsIGluZGV4IGRyb3AgKyByZWluZGV4IGZvciBjb3JyZWN0bmVzcy5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkltcG9ydGVyIFRocmVhZHNcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIG51bWJlciBvZiBpbXBvcnRlciB0aHJlYWRzIHRvIHVzZSBmb3IgcGFyc2luZyBtZXRhZGF0YS5cIilcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZShcIlwiICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1wb3J0ZXJOdW1UaHJlYWRzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW1wb3J0ZXJOdW1UaHJlYWRzOiBwYXJzZWQgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJJbXBvcnRlciBVdGlsaXphdGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJIb3cgbXVjaCBDUFUgdGltZSBlYWNoIGltcG9ydGVyIHRocmVhZCBzaG91bGQgdXNlLCBhcyBhIGZyYWN0aW9uICgwLjEgLSAxLjApLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmltcG9ydGVyVXRpbGl6YXRpb24udG9GaXhlZCgyKSkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ZWQgPSBNYXRoLm1heCgwLjEsIE1hdGgubWluKDEuMCwgcGFyc2VkKSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW1wb3J0ZXJVdGlsaXphdGlvbjogbGltaXRlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIk1heGltdW0gUmVjdXJzaXZlIFJlbmRlciBEZXB0aFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJNYXhpbXVtIGRlcHRoIHRoYXQgb2JqZWN0cyB3aWxsIGJlIHJlbmRlcmVkIHRvIChpLmUuLCBob3cgbWFueSBsZXZlbHMgb2Ygc3VicHJvcGVydGllc1wiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ3aWxsIGJlIHJlbmRlcmVkIGJ5IGRlZmF1bHQpLiBUaGlzIGF2b2lkcyBpbmZpbml0ZSByZWN1cnNpb24gZHVlIHRvIHNlbGYtcmVmZXJlbnRpYWwgb2JqZWN0c1wiICtcbiAgICAgICAgICAgICAgICAgICAgXCJhbmQgZW5zdXJlcyB0aGF0IHJlbmRlcmluZyBvYmplY3RzIGlzIGFjY2VwdGFibHkgcGVyZm9ybWFudC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1heFJlY3Vyc2l2ZVJlbmRlckRlcHRoLnRvU3RyaW5nKCkpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IHBhcnNlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJSZWN1cnNpdmUgc3VidGFzayBjb21wbGV0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgb3Igbm90IHN1YnRhc2tzIHNob3VsZCBiZSBjb21wbGV0ZWQgYWxvbmcgd2l0aCB0aGVpciBwYXJlbnQgaW4gZGF0YWNvcmUgdGFzayB2aWV3c1wiKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodGIpID0+IHtcbiAgICAgICAgICAgICAgICB0Yi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5yZWN1cnNpdmVUYXNrQ29tcGxldGlvbikub25DaGFuZ2UoYXN5bmMgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHJlY3Vyc2l2ZVRhc2tDb21wbGV0aW9uOiB2YWwgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlRhc2tzXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiVGFzayBDb21wbGV0aW9uIFRleHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiTmFtZSBvZiBpbmxpbmUgZmllbGQgaW4gd2hpY2ggdG8gc3RvcmUgdGFzayBjb21wbGV0aW9uIGRhdGUvdGltZVwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhc2tDb21wbGV0aW9uVGV4dCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgdGFza0NvbXBsZXRpb25UZXh0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlVzZSBFbW9qaSBTaG9ydGhhbmQgZm9yIFRhc2sgQ29tcGxldGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBhdXRvbWF0aWMgY29tcGxldGlvbiB3aWxsIHVzZSBhbiBlbW9qaSBzaG9ydGhhbmQgXHUyNzA1IFlZWVktTU0tRERcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaW5zdGVhZCBvZiBbY29tcGxldGlvbjo6IGRhdGVdLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0YikgPT4ge1xuICAgICAgICAgICAgICAgIHRiLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhc2tDb21wbGV0aW9uVXNlRW1vamlTaG9ydGhhbmQpLm9uQ2hhbmdlKGFzeW5jICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyB0YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kOiB2YWwgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IEluZm8gZnJvbSBcIi4vaW5mby5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4vem9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5pbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcblxuY29uc3QgVkVSU0lPTiA9IFwiMi41LjJcIjtcblxuZXhwb3J0IHtcbiAgVkVSU0lPTixcbiAgRGF0ZVRpbWUsXG4gIER1cmF0aW9uLFxuICBJbnRlcnZhbCxcbiAgSW5mbyxcbiAgWm9uZSxcbiAgRml4ZWRPZmZzZXRab25lLFxuICBJQU5BWm9uZSxcbiAgSW52YWxpZFpvbmUsXG4gIFN5c3RlbVpvbmUsXG4gIFNldHRpbmdzLFxufTtcbiIsICIvLyB0aGVzZSBhcmVuJ3QgcmVhbGx5IHByaXZhdGUsIGJ1dCBub3IgYXJlIHRoZXkgcmVhbGx5IHVzZWZ1bCB0byBkb2N1bWVudFxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEx1eG9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEludGVydmFsRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREdXJhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIER1cmF0aW9uOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFVuaXRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bml0KSB7XG4gICAgc3VwZXIoYEludmFsaWQgdW5pdCAke3VuaXR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFpvbmVJc0Fic3RyYWN0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzXCIpO1xuICB9XG59XG4iLCAiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG4gPSBcIm51bWVyaWNcIixcbiAgcyA9IFwic2hvcnRcIixcbiAgbCA9IFwibG9uZ1wiO1xuXG5leHBvcnQgY29uc3QgREFURV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuIiwgIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuLy8gVFlQRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCIgJiYgbyAlIDEgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuXG4vLyBDQVBBQklMSVRJRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlbGF0aXZlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pXG5leHBvcnQgZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikge1xuICBsZXQgZCA9IERhdGUuVVRDKFxuICAgIG9iai55ZWFyLFxuICAgIG9iai5tb250aCAtIDEsXG4gICAgb2JqLmRheSxcbiAgICBvYmouaG91cixcbiAgICBvYmoubWludXRlLFxuICAgIG9iai5zZWNvbmQsXG4gICAgb2JqLm1pbGxpc2Vjb25kXG4gICk7XG5cbiAgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdFxuICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkge1xuICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcikge1xuICBjb25zdCBwMSA9XG4gICAgICAod2Vla1llYXIgK1xuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNCkgLVxuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0MDApKSAlXG4gICAgICA3LFxuICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsXG4gICAgcDIgPSAobGFzdCArIE1hdGguZmxvb3IobGFzdCAvIDQpIC0gTWF0aC5mbG9vcihsYXN0IC8gMTAwKSArIE1hdGguZmxvb3IobGFzdCAvIDQwMCkpICUgNztcbiAgcmV0dXJuIHAxID09PSA0IHx8IHAyID09PSAzID8gNTMgOiA1Mjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXIpIHtcbiAgaWYgKHllYXIgPiA5OSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2UgcmV0dXJuIHllYXIgPiA2MCA/IDE5MDAgKyB5ZWFyIDogMjAwMCArIHllYXI7XG59XG5cbi8vIFBBUlNJTkdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSA9IG51bGwpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKSxcbiAgICBpbnRsT3B0cyA9IHtcbiAgICAgIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICB9O1xuXG4gIGlmICh0aW1lWm9uZSkge1xuICAgIGludGxPcHRzLnRpbWVab25lID0gdGltZVpvbmU7XG4gIH1cblxuICBjb25zdCBtb2RpZmllZCA9IHsgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQsIC4uLmludGxPcHRzIH07XG5cbiAgY29uc3QgcGFyc2VkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBtb2RpZmllZClcbiAgICAuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICAgIC5maW5kKChtKSA9PiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0aW1lem9uZW5hbWVcIik7XG4gIHJldHVybiBwYXJzZWQgPyBwYXJzZWQudmFsdWUgOiBudWxsO1xufVxuXG4vLyBzaWduZWRPZmZzZXQoJy01JywgJzMwJykgLT4gLTMzMFxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpIHtcbiAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7XG5cbiAgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTBcbiAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkge1xuICAgIG9mZkhvdXIgPSAwO1xuICB9XG5cbiAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCxcbiAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjtcbiAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDtcbn1cblxuLy8gQ09FUkNJT05cblxuZXhwb3J0IGZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7XG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09PSBcIlwiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKVxuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCB1bml0IHZhbHVlICR7dmFsdWV9YCk7XG4gIHJldHVybiBudW1lcmljVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcbiAgZm9yIChjb25zdCB1IGluIG9iaikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHUpKSB7XG4gICAgICBjb25zdCB2ID0gb2JqW3VdO1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPZmZzZXQob2Zmc2V0LCBmb3JtYXQpIHtcbiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAvIDYwKSksXG4gICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSxcbiAgICBzaWduID0gb2Zmc2V0ID49IDAgPyBcIitcIiA6IFwiLVwiO1xuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX06JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnN9JHttaW51dGVzID4gMCA/IGA6JHttaW51dGVzfWAgOiBcIlwifWA7XG4gICAgY2FzZSBcInRlY2hpZVwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVmFsdWUgZm9ybWF0ICR7Zm9ybWF0fSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2JqZWN0KG9iaikge1xuICByZXR1cm4gcGljayhvYmosIFtcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSk7XG59XG5cbmV4cG9ydCBjb25zdCBpYW5hUmVnZXggPVxuICAvW0EtWmEtel8rLV17MSwyNTZ9KD86Oj9cXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXC9bQS1aYS16MC05XystXXsxLDI1Nn0pPyk/LztcbiIsICJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGFkU3RhcnQgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VucyhzcGxpdHMsIHRva2VuVG9TdHJpbmcpIHtcbiAgbGV0IHMgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHNwbGl0cykge1xuICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICBzICs9IHRva2VuLnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyArPSB0b2tlblRvU3RyaW5nKHRva2VuLnZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5jb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0ge1xuICBEOiBGb3JtYXRzLkRBVEVfU0hPUlQsXG4gIEREOiBGb3JtYXRzLkRBVEVfTUVELFxuICBEREQ6IEZvcm1hdHMuREFURV9GVUxMLFxuICBEREREOiBGb3JtYXRzLkRBVEVfSFVHRSxcbiAgdDogRm9ybWF0cy5USU1FX1NJTVBMRSxcbiAgdHQ6IEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMsXG4gIHR0dDogRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VULFxuICB0dHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCxcbiAgVDogRm9ybWF0cy5USU1FXzI0X1NJTVBMRSxcbiAgVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX1NFQ09ORFMsXG4gIFRUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VULFxuICBUVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCxcbiAgZjogRm9ybWF0cy5EQVRFVElNRV9TSE9SVCxcbiAgZmY6IEZvcm1hdHMuREFURVRJTUVfTUVELFxuICBmZmY6IEZvcm1hdHMuREFURVRJTUVfRlVMTCxcbiAgZmZmZjogRm9ybWF0cy5EQVRFVElNRV9IVUdFLFxuICBGOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyxcbiAgRkY6IEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyxcbiAgRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTLFxuICBGRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRm9ybWF0KGZtdCkge1xuICAgIGxldCBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRGdWxsID0gXCJcIixcbiAgICAgIGJyYWNrZXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwbGl0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm10Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gZm10LmNoYXJBdChpKTtcbiAgICAgIGlmIChjID09PSBcIidcIikge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBjdXJyZW50RnVsbCA9IFwiXCI7XG4gICAgICAgIGJyYWNrZXRlZCA9ICFicmFja2V0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIGlmIChjID09PSBjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogZmFsc2UsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEZ1bGwgPSBjO1xuICAgICAgICBjdXJyZW50ID0gYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwbGl0cztcbiAgfVxuXG4gIHN0YXRpYyBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7XG4gICAgcmV0dXJuIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHNbdG9rZW5dO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0cztcbiAgICB0aGlzLmxvYyA9IGxvY2FsZTtcbiAgICB0aGlzLnN5c3RlbUxvYyA9IG51bGw7XG4gIH1cblxuICBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykge1xuICAgIGlmICh0aGlzLnN5c3RlbUxvYyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zeXN0ZW1Mb2MgPSB0aGlzLmxvYy5yZWRlZmF1bHRUb1N5c3RlbSgpO1xuICAgIH1cbiAgICBjb25zdCBkZiA9IHRoaXMuc3lzdGVtTG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVQYXJ0cyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXNcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgIC8vIG1zXG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTtcbiAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCwgMik7XG4gICAgICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwKSwgMik7XG4gICAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMDApKTtcbiAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUpO1xuICAgICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7XG4gICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyKTtcbiAgICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7XG4gICAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyKTtcbiAgICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyLCAyKTtcbiAgICAgICAgICAvLyBvZmZzZXRcbiAgICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArNlxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJuYXJyb3dcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDY6MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwic2hvcnRcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwidGVjaGllXCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFU1RcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcInNob3J0XCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcImxvbmdcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgLy8gem9uZVxuICAgICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTtcbiAgICAgICAgICAvLyBtZXJpZGllbXNcbiAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgcmV0dXJuIG1lcmlkaWVtKCk7XG4gICAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIm51bWVyaWNcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSk7XG4gICAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwiMi1kaWdpdFwiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5LCAyKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMSwgZG9lc24ndCBzZWVtIHRvIHdvcmtcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIHllYXJzXG4gICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMjAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpIDogdGhpcy5udW0oZHQueWVhcik7XG4gICAgICAgICAgY2FzZSBcInl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIjItZGlnaXRcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNik7XG4gICAgICAgICAgLy8gZXJhc1xuICAgICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFEXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwic2hvcnRcIik7XG4gICAgICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFubm8gRG9taW5pXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibG9uZ1wiKTtcbiAgICAgICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJuYXJyb3dcIik7XG4gICAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlcik7XG4gICAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlciwgMik7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBleHBsYW5hdGlvbikge1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgfVxuXG4gIHRvTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5leHBsYW5hdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucmVhc29ufTogJHt0aGlzLmV4cGxhbmF0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBab25lSXNBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQGludGVyZmFjZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBab25lIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmVcbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCBvcHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnbmFycm93JywgJ3Nob3J0Jywgb3IgJ3RlY2hpZScuIFJldHVybmluZyAnKzYnLCAnKzA2OjAwJywgb3IgJyswNjAwJyByZXNwZWN0aXZlbHlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gY29tcHV0ZSB0aGUgb2Zmc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCh0cykge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbywgaXNVbmRlZmluZWQsIG9ialRvTG9jYWxUUyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBkdGZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gbWFrZURURih6b25lKSB7XG4gIGlmICghZHRmQ2FjaGVbem9uZV0pIHtcbiAgICBkdGZDYWNoZVt6b25lXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIiwge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiB6b25lLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgc2Vjb25kOiBcIjItZGlnaXRcIixcbiAgICAgIGVyYTogXCJzaG9ydFwiLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBkdGZDYWNoZVt6b25lXTtcbn1cblxuY29uc3QgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBlcmE6IDMsXG4gIGhvdXI6IDQsXG4gIG1pbnV0ZTogNSxcbiAgc2Vjb25kOiA2LFxufTtcblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCBcIlwiKSxcbiAgICBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspIChBRHxCQyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpLFxuICAgIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZDtcbiAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgY29uc3QgZmlsbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gZm9ybWF0dGVkW2ldO1xuICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTtcblxuICAgIGlmICh0eXBlID09PSBcImVyYVwiKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZDtcbn1cblxubGV0IGlhbmFab25lQ2FjaGUgPSB7fTtcbi8qKlxuICogQSB6b25lIGlkZW50aWZpZWQgYnkgYW4gSUFOQSBpZGVudGlmaWVyLCBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJQU5BWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWVcbiAgICogQHJldHVybiB7SUFOQVpvbmV9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKG5hbWUpIHtcbiAgICBpZiAoIWlhbmFab25lQ2FjaGVbbmFtZV0pIHtcbiAgICAgIGlhbmFab25lQ2FjaGVbbmFtZV0gPSBuZXcgSUFOQVpvbmUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgaWFuYVpvbmVDYWNoZSA9IHt9O1xuICAgIGR0ZkNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBzcGVjaWZpZXIuIFRoaXMgb25seSBjaGVja3MgdGhlIHN0cmluZydzIGZvcm1hdCwgbm90IHRoYXQgdGhlIHNwZWNpZmllciBpZGVudGlmaWVzIGEga25vd24gem9uZTsgc2VlIGlzVmFsaWRab25lIGZvciB0aGF0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBzdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIkFtZXJpY2EvTmV3X1lvcmtcIikgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoXCJTcG9ydH5+YmxvcnBcIikgLy89PiBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGZvciBzb21lIHZhbGlkIElBTkEgbmFtZXMuIFVzZSBpc1ZhbGlkWm9uZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaWFuYVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCh0cykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgICBpZiAoaXNOYU4oZGF0ZSkpIHJldHVybiBOYU47XG5cbiAgICBjb25zdCBkdGYgPSBtYWtlRFRGKHRoaXMubmFtZSk7XG4gICAgbGV0IFt5ZWFyLCBtb250aCwgZGF5LCBhZE9yQmMsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IGR0Zi5mb3JtYXRUb1BhcnRzXG4gICAgICA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSlcbiAgICAgIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKTtcblxuICAgIGlmIChhZE9yQmMgPT09IFwiQkNcIikge1xuICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7XG4gICAgfVxuXG4gICAgLy8gYmVjYXVzZSB3ZSdyZSB1c2luZyBob3VyMTIgYW5kIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMjU1NjQmY2FuPTImcT0lMjIyNCUzQTAwJTIyJTIwZGF0ZXRpbWVmb3JtYXRcbiAgICBjb25zdCBhZGp1c3RlZEhvdXIgPSBob3VyID09PSAyNCA/IDAgOiBob3VyO1xuXG4gICAgY29uc3QgYXNVVEMgPSBvYmpUb0xvY2FsVFMoe1xuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5LFxuICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLFxuICAgICAgbWludXRlLFxuICAgICAgc2Vjb25kLFxuICAgICAgbWlsbGlzZWNvbmQ6IDAsXG4gICAgfSk7XG5cbiAgICBsZXQgYXNUUyA9ICtkYXRlO1xuICAgIGNvbnN0IG92ZXIgPSBhc1RTICUgMTAwMDtcbiAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjtcbiAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiaWFuYVwiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgc2lnbmVkT2Zmc2V0IH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IHNpbmdsZXRvbiA9IG51bGw7XG5cbi8qKlxuICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKVxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeGVkT2Zmc2V0Wm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIFVUQ1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBGaXhlZE9mZnNldFpvbmUoMCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXNcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPT09IDAgPyBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2UgOiBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgXCJVVEMrNlwiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2VcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzA2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQy02OjAwXCIpXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNwZWNpZmllcihzKSB7XG4gICAgaWYgKHMpIHtcbiAgICAgIGNvbnN0IHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cXGR7MSwyfSkoPzo6KFxcZHsyfSkpPyk/JC9pKTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRml4ZWRPZmZzZXRab25lKHNpZ25lZE9mZnNldChyWzFdLCByWzJdKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3Iob2Zmc2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy5maXhlZCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImZpeGVkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIGdldCBpYW5hTmFtZSgpIHtcbiAgICBpZiAodGhpcy5maXhlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiRXRjL1VUQ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEV0Yy9HTVQke2Zvcm1hdE9mZnNldCgtdGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgICB9XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiZml4ZWRcIiAmJiBvdGhlclpvbmUuZml4ZWQgPT09IHRoaXMuZml4ZWQ7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbi8qKlxuICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkWm9uZSBleHRlbmRzIFpvbmUge1xuICBjb25zdHJ1Y3Rvcih6b25lTmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqICBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuem9uZU5hbWUgPSB6b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImludmFsaWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuLi96b25lcy9pbnZhbGlkWm9uZS5qc1wiO1xuXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHtcbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFpvbmUpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgY29uc3QgbG93ZXJlZCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyZWQgPT09IFwibG9jYWxcIiB8fCBsb3dlcmVkID09PSBcInN5c3RlbVwiKSByZXR1cm4gZGVmYXVsdFpvbmU7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dC5vZmZzZXQgJiYgdHlwZW9mIGlucHV0Lm9mZnNldCA9PT0gXCJudW1iZXJcIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxubGV0IG5vdyA9ICgpID0+IERhdGUubm93KCksXG4gIGRlZmF1bHRab25lID0gXCJzeXN0ZW1cIixcbiAgZGVmYXVsdExvY2FsZSA9IG51bGwsXG4gIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudWxsLFxuICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLFxuICB0aHJvd09uSW52YWxpZDtcblxuLyoqXG4gKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0IG5vdygpIHtcbiAgICByZXR1cm4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50XG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gRGF0ZS5ub3coKSArIDMwMDAgLy8gcHJldGVuZCBpdCBpcyAzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWVcbiAgICovXG4gIHN0YXRpYyBzZXQgbm93KG4pIHtcbiAgICBub3cgPSBuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVXNlIHRoZSB2YWx1ZSBcInN5c3RlbVwiIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoem9uZSkge1xuICAgIGRlZmF1bHRab25lID0gem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIG9iamVjdCBjdXJyZW50bHkgdXNlZCB0byBjcmVhdGUgRGF0ZVRpbWVzLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRab25lKCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZShsb2NhbGUpIHtcbiAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0obnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcihvdXRwdXRDYWxlbmRhcikge1xuICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgdGhyb3dPbkludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRocm93T25JbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQodCkge1xuICAgIHRocm93T25JbnZhbGlkID0gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldENhY2hlcygpIHtcbiAgICBMb2NhbGUucmVzZXRDYWNoZSgpO1xuICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhZFN0YXJ0LCByb3VuZFRvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vLyB0b2RvIC0gcmVtYXAgY2FjaGluZ1xuXG5sZXQgaW50bExGQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZExGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxMRkNhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxMRkNhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxEVENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bERUQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxEVENhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxOdW1DYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxOdW1DYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBpbnRsUmVsQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFJURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJhc2UsIC4uLmNhY2hlS2V5T3B0cyB9ID0gb3B0czsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9uc1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxSZWxDYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG5mdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7XG4gIGlmIChzeXNMb2NhbGVDYWNoZSkge1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfSBlbHNlIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICBjb25zdCB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZihcIi11LVwiKTtcbiAgaWYgKHVJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gW2xvY2FsZVN0cl07XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIC8vIHJldHVybiB0aGUgc21hbGxlciBvbmUgc28gdGhhdCB3ZSBjYW4gYXBwZW5kIHRoZSBjYWxlbmRhciBhbmQgbnVtYmVyaW5nIG92ZXJyaWRlcyB0byBpdFxuICAgIHJldHVybiBbc21hbGxlciwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhcl07XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50bENvbmZpZ1N0cmluZyhsb2NhbGVTdHIsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpIHtcbiAgaWYgKG91dHB1dENhbGVuZGFyIHx8IG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGxvY2FsZVN0ciArPSBcIi11XCI7XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikge1xuICBjb25zdCBtb2RlID0gbG9jLmxpc3RpbmdNb2RlKGRlZmF1bHRPSyk7XG5cbiAgaWYgKG1vZGUgPT09IFwiZXJyb3JcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiZW5cIikge1xuICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW50bEZuKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNGYXN0TnVtYmVycyhsb2MpIHtcbiAgaWYgKGxvYy5udW1iZXJpbmdTeXN0ZW0gJiYgbG9jLm51bWJlcmluZ1N5c3RlbSAhPT0gXCJsYXRuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvYy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiIHx8XG4gICAgICAhbG9jLmxvY2FsZSB8fFxuICAgICAgbG9jLmxvY2FsZS5zdGFydHNXaXRoKFwiZW5cIikgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvYy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seU51bWJlckZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGludGwsIGZvcmNlU2ltcGxlLCBvcHRzKSB7XG4gICAgdGhpcy5wYWRUbyA9IG9wdHMucGFkVG8gfHwgMDtcbiAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTtcblxuICAgIGNvbnN0IHsgcGFkVG8sIGZsb29yLCAuLi5vdGhlck9wdHMgfSA9IG9wdHM7XG5cbiAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaW50bE9wdHMgPSB7IHVzZUdyb3VwaW5nOiBmYWxzZSwgLi4ub3B0cyB9O1xuICAgICAgaWYgKG9wdHMucGFkVG8gPiAwKSBpbnRsT3B0cy5taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG9wdHMucGFkVG87XG4gICAgICB0aGlzLmluZiA9IGdldENhY2hlZElORihpbnRsLCBpbnRsT3B0cyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0KGkpIHtcbiAgICBpZiAodGhpcy5pbmYpIHtcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiBpO1xuICAgICAgcmV0dXJuIHRoaXMuaW5mLmZvcm1hdChmaXhlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRvIG1hdGNoIHRoZSBicm93c2VyJ3MgbnVtYmVyZm9ybWF0dGVyIGRlZmF1bHRzXG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogcm91bmRUbyhpLCAzKTtcbiAgICAgIHJldHVybiBwYWRTdGFydChmaXhlZCwgdGhpcy5wYWRUbyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5RGF0ZUZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGR0LCBpbnRsLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcblxuICAgIGxldCB6O1xuICAgIGlmIChkdC56b25lLmlzVW5pdmVyc2FsKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBtYWtlIGRvLiBUd28gY2FzZXM6XG4gICAgICAgIC8vIDEuIFRoZSBmb3JtYXQgb3B0aW9ucyB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFdlIGNhbid0IGRvIHRoYXQsIHNvIHRoZSBiZXN0XG4gICAgICAgIC8vIHdlIGNhbiBkbyBpcyBmb3JtYXQgdGhlIGRhdGUgaW4gVVRDLlxuICAgICAgICAvLyAyLiBUaGUgZm9ybWF0IG9wdGlvbnMgZG9uJ3QgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBUaGVuIHdlIGNhbiBhZGp1c3QgdGhlbVxuICAgICAgICAvLyB0aGUgdGltZSBhbmQgdGVsbCB0aGUgZm9ybWF0dGVyIHRvIHNob3cgaXQgdG8gdXMgaW4gVVRDLCBzbyB0aGF0IHRoZSB0aW1lIGlzIHJpZ2h0XG4gICAgICAgIC8vIGFuZCB0aGUgYmFkIHpvbmUgZG9lc24ndCBzaG93IHVwLlxuICAgICAgICB6ID0gXCJVVENcIjtcbiAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwic3lzdGVtXCIpIHtcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgeiA9IGR0LnpvbmUubmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRsT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgaWYgKHopIHtcbiAgICAgIGludGxPcHRzLnRpbWVab25lID0gejtcbiAgICB9XG4gICAgdGhpcy5kdGYgPSBnZXRDYWNoZWREVEYoaW50bCwgaW50bE9wdHMpO1xuICB9XG5cbiAgZm9ybWF0KCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXQodGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQb2x5UmVsRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0geyBzdHlsZTogXCJsb25nXCIsIC4uLm9wdHMgfTtcbiAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7XG4gICAgICB0aGlzLnJ0ZiA9IGdldENhY2hlZFJURihpbnRsLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRW5nbGlzaC5mb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIHRoaXMub3B0cy5udW1lcmljLCB0aGlzLm9wdHMuc3R5bGUgIT09IFwibG9uZ1wiKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KSB7XG4gICAgaWYgKHRoaXMucnRmKSB7XG4gICAgICByZXR1cm4gdGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsZSB7XG4gIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7XG4gICAgLy8gdGhlIHN5c3RlbSBsb2NhbGUgaXMgdXNlZnVsIGZvciBodW1hbiByZWFkYWJsZSBzdHJpbmdzIGJ1dCBhbm5veWluZyBmb3IgcGFyc2luZy9mb3JtYXR0aW5nIGtub3duIGZvcm1hdHNcbiAgICBjb25zdCBsb2NhbGVSID0gc3BlY2lmaWVkTG9jYWxlIHx8IChkZWZhdWx0VG9FTiA/IFwiZW4tVVNcIiA6IHN5c3RlbUxvY2FsZSgpKTtcbiAgICBjb25zdCBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gICAgY29uc3Qgb3V0cHV0Q2FsZW5kYXJSID0gb3V0cHV0Q2FsZW5kYXIgfHwgU2V0dGluZ3MuZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTtcbiAgfVxuXG4gIHN0YXRpYyByZXNldENhY2hlKCkge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbiAgICBpbnRsRFRDYWNoZSA9IHt9O1xuICAgIGludGxOdW1DYWNoZSA9IHt9O1xuICAgIGludGxSZWxDYWNoZSA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3QoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgbnVtYmVyaW5nLCBvdXRwdXRDYWxlbmRhciwgc3BlY2lmaWVkTG9jYWxlKSB7XG4gICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpO1xuXG4gICAgdGhpcy5sb2NhbGUgPSBwYXJzZWRMb2NhbGU7XG4gICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmcgfHwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtIHx8IG51bGw7XG4gICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyIHx8IHBhcnNlZE91dHB1dENhbGVuZGFyIHx8IG51bGw7XG4gICAgdGhpcy5pbnRsID0gaW50bENvbmZpZ1N0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIHRoaXMub3V0cHV0Q2FsZW5kYXIpO1xuXG4gICAgdGhpcy53ZWVrZGF5c0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tZXJpZGllbUNhY2hlID0gbnVsbDtcbiAgICB0aGlzLmVyYUNhY2hlID0ge307XG5cbiAgICB0aGlzLnNwZWNpZmllZExvY2FsZSA9IHNwZWNpZmllZExvY2FsZTtcbiAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gbnVsbDtcbiAgfVxuXG4gIGdldCBmYXN0TnVtYmVycygpIHtcbiAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gc3VwcG9ydHNGYXN0TnVtYmVycyh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZDtcbiAgfVxuXG4gIGxpc3RpbmdNb2RlKCkge1xuICAgIGNvbnN0IGlzQWN0dWFsbHlFbiA9IHRoaXMuaXNFbmdsaXNoKCk7XG4gICAgY29uc3QgaGFzTm9XZWlyZG5lc3MgPVxuICAgICAgKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIikgJiZcbiAgICAgICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IFwiZ3JlZ29yeVwiKTtcbiAgICByZXR1cm4gaXNBY3R1YWxseUVuICYmIGhhc05vV2VpcmRuZXNzID8gXCJlblwiIDogXCJpbnRsXCI7XG4gIH1cblxuICBjbG9uZShhbHRzKSB7XG4gICAgaWYgKCFhbHRzIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKFxuICAgICAgICBhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSxcbiAgICAgICAgYWx0cy5udW1iZXJpbmdTeXN0ZW0gfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGFsdHMub3V0cHV0Q2FsZW5kYXIgfHwgdGhpcy5vdXRwdXRDYWxlbmRhcixcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5tb250aHMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXQgPyB7IG1vbnRoOiBsZW5ndGgsIGRheTogXCJudW1lcmljXCIgfSA6IHsgbW9udGg6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7XG4gICAgICAgIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwTW9udGhzKChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcIm1vbnRoXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIHdlZWtkYXlzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLndlZWtkYXlzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0XG4gICAgICAgICAgPyB7IHdlZWtkYXk6IGxlbmd0aCwgeWVhcjogXCJudW1lcmljXCIsIG1vbnRoOiBcImxvbmdcIiwgZGF5OiBcIm51bWVyaWNcIiB9XG4gICAgICAgICAgOiB7IHdlZWtkYXk6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwid2Vla2RheVwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBtZXJpZGllbXMoZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYoXG4gICAgICB0aGlzLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdE9LLFxuICAgICAgKCkgPT4gRW5nbGlzaC5tZXJpZGllbXMsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvXG4gICAgICAgIC8vIGZvciBBTSBhbmQgUE0uIFRoaXMgaXMgcHJvYmFibHkgd3JvbmcsIGJ1dCBpdCdzIG1ha2VzIHBhcnNpbmcgd2F5IGVhc2llci5cbiAgICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBpbnRsID0geyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH07XG4gICAgICAgICAgdGhpcy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChcbiAgICAgICAgICAgIChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImRheXBlcmlvZFwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBlcmFzKGxlbmd0aCwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2guZXJhcywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IHsgZXJhOiBsZW5ndGggfTtcblxuICAgICAgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzXG4gICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLlxuICAgICAgaWYgKCF0aGlzLmVyYUNhY2hlW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcCgoZHQpID0+XG4gICAgICAgICAgdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImVyYVwiKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lcmFDYWNoZVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgZXh0cmFjdChkdCwgaW50bE9wdHMsIGZpZWxkKSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksXG4gICAgICByZXN1bHRzID0gZGYuZm9ybWF0VG9QYXJ0cygpLFxuICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZCk7XG4gICAgcmV0dXJuIG1hdGNoaW5nID8gbWF0Y2hpbmcudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgbnVtYmVyRm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKVxuICAgIC8vIChpbiBjb250cmFzdCwgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbiBpcyB1c2VkIGhlYXZpbHkpXG4gICAgcmV0dXJuIG5ldyBQb2x5TnVtYmVyRm9ybWF0dGVyKHRoaXMuaW50bCwgb3B0cy5mb3JjZVNpbXBsZSB8fCB0aGlzLmZhc3ROdW1iZXJzLCBvcHRzKTtcbiAgfVxuXG4gIGR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5RGF0ZUZvcm1hdHRlcihkdCwgdGhpcy5pbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICByZWxGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5UmVsRm9ybWF0dGVyKHRoaXMuaW50bCwgdGhpcy5pc0VuZ2xpc2goKSwgb3B0cyk7XG4gIH1cblxuICBsaXN0Rm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBnZXRDYWNoZWRMRih0aGlzLmludGwsIG9wdHMpO1xuICB9XG5cbiAgaXNFbmdsaXNoKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gXCJlblwiIHx8XG4gICAgICB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSBcImVuLXVzXCIgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoXCJlbi11c1wiKVxuICAgICk7XG4gIH1cblxuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2NhbGUgPT09IG90aGVyLmxvY2FsZSAmJlxuICAgICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJlxuICAgICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXJcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgdW50cnVuY2F0ZVllYXIsXG4gIHNpZ25lZE9mZnNldCxcbiAgcGFyc2VJbnRlZ2VyLFxuICBwYXJzZU1pbGxpcyxcbiAgaWFuYVJlZ2V4LFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZ1xufSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vKlxuICogVGhpcyBmaWxlIGhhbmRsZXMgcGFyc2luZyBmb3Igd2VsbC1zcGVjaWZpZWQgZm9ybWF0cy4gSGVyZSdzIGhvdyBpdCB3b3JrczpcbiAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLlxuICogQW4gZXh0cmFjdG9yIGlzIGp1c3QgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgcmVnZXggbWF0Y2ggYXJyYXkgYW5kIHJldHVybnMgYSB7IHllYXI6IC4uLiwgbW9udGg6IC4uLiB9IG9iamVjdFxuICogcGFyc2UoKSBkb2VzIHRoZSB3b3JrIG9mIGV4ZWN1dGluZyB0aGUgcmVnZXggYW5kIGFwcGx5aW5nIHRoZSBleHRyYWN0b3IuIEl0IHRha2VzIG11bHRpcGxlIHJlZ2V4L2V4dHJhY3RvciBwYWlycyB0byB0cnkgaW4gc2VxdWVuY2UuXG4gKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgXCJjdXJzb3JcIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy5cbiAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuXG4gKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiBjb21iaW5lUmVnZXhlcyguLi5yZWdleGVzKSB7XG4gIGNvbnN0IGZ1bGwgPSByZWdleGVzLnJlZHVjZSgoZiwgcikgPT4gZiArIHIuc291cmNlLCBcIlwiKTtcbiAgcmV0dXJuIFJlZ0V4cChgXiR7ZnVsbH0kYCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKC4uLmV4dHJhY3RvcnMpIHtcbiAgcmV0dXJuIG0gPT5cbiAgICBleHRyYWN0b3JzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW21lcmdlZFZhbHMsIG1lcmdlZFpvbmUsIGN1cnNvcl0sIGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3ZhbCwgem9uZSwgbmV4dF0gPSBleChtLCBjdXJzb3IpO1xuICAgICAgICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLCAuLi52YWwgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTtcbiAgICAgICAgfSxcbiAgICAgICAgW3t9LCBudWxsLCAxXVxuICAgICAgKVxuICAgICAgLnNsaWNlKDAsIDIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzLCAuLi5wYXR0ZXJucykge1xuICBpZiAocyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3JlZ2V4LCBleHRyYWN0b3JdIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7XG4gICAgaWYgKG0pIHtcbiAgICAgIHJldHVybiBleHRyYWN0b3IobSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbbnVsbCwgbnVsbF07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHtcbiAgcmV0dXJuIChtYXRjaCwgY3Vyc29yKSA9PiB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXQsIG51bGwsIGN1cnNvciArIGldO1xuICB9O1xufVxuXG4vLyBJU08gYW5kIFNRTCBwYXJzaW5nXG5jb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/KS87XG5jb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcXFxbKCR7aWFuYVJlZ2V4LnNvdXJjZX0pXFxcXF0pPyk/YDtcbmNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlsuLF0oXFxkezEsMzB9KSk/KT8pPy87XG5jb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7XG5jb25zdCBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OlQke2lzb1RpbWVSZWdleC5zb3VyY2V9KT9gKTtcbmNvbnN0IGlzb1ltZFJlZ2V4ID0gLyhbKy1dXFxkezZ9fFxcZHs0fSkoPzotPyhcXGRcXGQpKD86LT8oXFxkXFxkKSk/KT8vO1xuY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcXGR7NH0pLT9XKFxcZFxcZCkoPzotPyhcXGQpKT8vO1xuY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcXGR7NH0pLT8oXFxkezN9KS87XG5jb25zdCBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZShcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtEYXlcIik7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZShcInllYXJcIiwgXCJvcmRpbmFsXCIpO1xuY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lXG5jb25zdCBzcWxUaW1lUmVnZXggPSBSZWdFeHAoXG4gIGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSA/KD86JHtvZmZzZXRSZWdleC5zb3VyY2V9fCgke2lhbmFSZWdleC5zb3VyY2V9KSk/YFxuKTtcbmNvbnN0IHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86ICR7c3FsVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuXG5mdW5jdGlvbiBpbnQobWF0Y2gsIHBvcywgZmFsbGJhY2spIHtcbiAgY29uc3QgbSA9IG1hdGNoW3Bvc107XG4gIHJldHVybiBpc1VuZGVmaW5lZChtKSA/IGZhbGxiYWNrIDogcGFyc2VJbnRlZ2VyKG0pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPWW1kKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB5ZWFyOiBpbnQobWF0Y2gsIGN1cnNvciksXG4gICAgbW9udGg6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMSksXG4gICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksXG4gICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSxcbiAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLFxuICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID0gL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICBzLFxuICAgIHllYXJTdHIsXG4gICAgbW9udGhTdHIsXG4gICAgd2Vla1N0cixcbiAgICBkYXlTdHIsXG4gICAgaG91clN0cixcbiAgICBtaW51dGVTdHIsXG4gICAgc2Vjb25kU3RyLFxuICAgIG1pbGxpc2Vjb25kc1N0clxuICBdID0gbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpXG4gICAgfVxuICBdO1xufVxuXG4vLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmtcbi8vIGFuZCBub3QganVzdCB0aGF0IHdlJ3JlIGluIC0yNDAgKnJpZ2h0IG5vdyouIEJ1dCBzaW5jZSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSB1c2VkIHRoYXQgb2Z0ZW5cbi8vIEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSB0aGF0XG5jb25zdCBvYnNPZmZzZXRzID0ge1xuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpXG4gIH07XG5cbiAgaWYgKHNlY29uZFN0cikgcmVzdWx0LnNlY29uZCA9IHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpO1xuICBpZiAod2Vla2RheVN0cikge1xuICAgIHJlc3VsdC53ZWVrZGF5ID1cbiAgICAgIHdlZWtkYXlTdHIubGVuZ3RoID4gM1xuICAgICAgICA/IEVuZ2xpc2gud2Vla2RheXNMb25nLmluZGV4T2Yod2Vla2RheVN0cikgKyAxXG4gICAgICAgIDogRW5nbGlzaC53ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUkZDIDI4MjIvNTMyMlxuY29uc3QgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxkXFxkKShcXGRcXGQpKSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgICAgLFxuICAgICAgd2Vla2RheVN0cixcbiAgICAgIGRheVN0cixcbiAgICAgIG1vbnRoU3RyLFxuICAgICAgeWVhclN0cixcbiAgICAgIGhvdXJTdHIsXG4gICAgICBtaW51dGVTdHIsXG4gICAgICBzZWNvbmRTdHIsXG4gICAgICBvYnNPZmZzZXQsXG4gICAgICBtaWxPZmZzZXQsXG4gICAgICBvZmZIb3VyU3RyLFxuICAgICAgb2ZmTWludXRlU3RyXG4gICAgXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcblxuICBsZXQgb2Zmc2V0O1xuICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICB9IGVsc2UgaWYgKG1pbE9mZnNldCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIilcbiAgICAudHJpbSgpO1xufVxuXG4vLyBodHRwIGRhdGVcblxuY29uc3QgcmZjMTEyMyA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXGRcXGQpIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxcZHs0fSkgKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkgR01UJC8sXG4gIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBcXGR8XFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSAoXFxkezR9KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMTEyM09yODUwKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIGRheVN0ciwgbW9udGhTdHIsIHllYXJTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBU0NJSShtYXRjaCkge1xuICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgeWVhclN0cl0gPSBtYXRjaCxcbiAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7XG4gIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdO1xufVxuXG5jb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpO1xuXG5jb25zdCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPWW1kLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09XZWVrRGF0YSxcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT09yZGluYWxEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuLypcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLFxuICAgIFtpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZV0sXG4gICAgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykge1xuICByZXR1cm4gcGFyc2UocHJlcHJvY2Vzc1JGQzI4MjIocyksIFtyZmMyODIyLCBleHRyYWN0UkZDMjgyMl0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVFRQRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbcmZjODUwLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbYXNjaWksIGV4dHJhY3RBU0NJSV1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRHVyYXRpb24ocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb0R1cmF0aW9uLCBleHRyYWN0SVNPRHVyYXRpb25dKTtcbn1cblxuY29uc3QgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pO1xufVxuXG5jb25zdCBzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsWW1kUmVnZXgsIHNxbFRpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU1FMKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3NxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbc3FsVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmVdXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIER1cmF0aW9uXCI7XG5cbi8vIHVuaXQgY29udmVyc2lvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBsb3dPcmRlck1hdHJpeCA9IHtcbiAgICB3ZWVrczoge1xuICAgICAgZGF5czogNyxcbiAgICAgIGhvdXJzOiA3ICogMjQsXG4gICAgICBtaW51dGVzOiA3ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgZGF5czoge1xuICAgICAgaG91cnM6IDI0LFxuICAgICAgbWludXRlczogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIGhvdXJzOiB7IG1pbnV0ZXM6IDYwLCBzZWNvbmRzOiA2MCAqIDYwLCBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwIH0sXG4gICAgbWludXRlczogeyBzZWNvbmRzOiA2MCwgbWlsbGlzZWNvbmRzOiA2MCAqIDEwMDAgfSxcbiAgICBzZWNvbmRzOiB7IG1pbGxpc2Vjb25kczogMTAwMCB9LFxuICB9LFxuICBjYXN1YWxNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiA1MixcbiAgICAgIGRheXM6IDM2NSxcbiAgICAgIGhvdXJzOiAzNjUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDM2NSAqIDI0ICogNjAsXG4gICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBxdWFydGVyczoge1xuICAgICAgbW9udGhzOiAzLFxuICAgICAgd2Vla3M6IDEzLFxuICAgICAgZGF5czogOTEsXG4gICAgICBob3VyczogOTEgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDkxICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgIHdlZWtzOiA0LFxuICAgICAgZGF5czogMzAsXG4gICAgICBob3VyczogMzAgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDMwICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcblxuICAgIC4uLmxvd09yZGVyTWF0cml4LFxuICB9LFxuICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCxcbiAgZGF5c0luTW9udGhBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDgwMCxcbiAgYWNjdXJhdGVNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0LFxuICAgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogZGF5c0luWWVhckFjY3VyYXRlIC8gMjgsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LFxuICAgICAgaG91cnM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCkgLyA0LFxuICAgICAgbWludXRlczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjApIC8gNCxcbiAgICAgIHNlY29uZHM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjApIC8gNCxcbiAgICAgIG1pbGxpc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDApIC8gNCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luTW9udGhBY2N1cmF0ZSxcbiAgICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH07XG5cbi8vIHVuaXRzIG9yZGVyZWQgYnkgc2l6ZVxuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1xuICBcInllYXJzXCIsXG4gIFwicXVhcnRlcnNcIixcbiAgXCJtb250aHNcIixcbiAgXCJ3ZWVrc1wiLFxuICBcImRheXNcIixcbiAgXCJob3Vyc1wiLFxuICBcIm1pbnV0ZXNcIixcbiAgXCJzZWNvbmRzXCIsXG4gIFwibWlsbGlzZWNvbmRzXCIsXG5dO1xuXG5jb25zdCByZXZlcnNlVW5pdHMgPSBvcmRlcmVkVW5pdHMuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMgXCJjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBqdXN0IGxpa2UgdGhpcyBvbmUsIGJ1dCB3aXRoIHRoZXNlIGNoYW5nZXNcIlxuZnVuY3Rpb24gY2xvbmUoZHVyLCBhbHRzLCBjbGVhciA9IGZhbHNlKSB7XG4gIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHNcbiAgY29uc3QgY29uZiA9IHtcbiAgICB2YWx1ZXM6IGNsZWFyID8gYWx0cy52YWx1ZXMgOiB7IC4uLmR1ci52YWx1ZXMsIC4uLihhbHRzLnZhbHVlcyB8fCB7fSkgfSxcbiAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLFxuICAgIGNvbnZlcnNpb25BY2N1cmFjeTogYWx0cy5jb252ZXJzaW9uQWNjdXJhY3kgfHwgZHVyLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gYW50aVRydW5jKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTWF0aC5mbG9vcihuKSA6IE1hdGguY2VpbChuKTtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gY29udmVydChtYXRyaXgsIGZyb21NYXAsIGZyb21Vbml0LCB0b01hcCwgdG9Vbml0KSB7XG4gIGNvbnN0IGNvbnYgPSBtYXRyaXhbdG9Vbml0XVtmcm9tVW5pdF0sXG4gICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LFxuICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSxcbiAgICAvLyBvaywgc28gdGhpcyBpcyB3aWxkLCBidXQgc2VlIHRoZSBtYXRyaXggaW4gdGhlIHRlc3RzXG4gICAgYWRkZWQgPVxuICAgICAgIXNhbWVTaWduICYmIHRvTWFwW3RvVW5pdF0gIT09IDAgJiYgTWF0aC5hYnMocmF3KSA8PSAxID8gYW50aVRydW5jKHJhdykgOiBNYXRoLnRydW5jKHJhdyk7XG4gIHRvTWFwW3RvVW5pdF0gKz0gYWRkZWQ7XG4gIGZyb21NYXBbZnJvbVVuaXRdIC09IGFkZGVkICogY29udjtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykge1xuICByZXZlcnNlVW5pdHMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uI2Zyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24jZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGFjY3VyYXRlID8gXCJsb25ndGVybVwiIDogXCJjYXN1YWxcIjtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIER1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IGNvdW50IH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLlxuICAgKiBJZiB0aGlzIG9iamVjdCBpcyBlbXB0eSB0aGVuIGEgemVybyBtaWxsaXNlY29uZHMgZHVyYXRpb24gaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoucXVhcnRlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3Vyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz1bXV0gLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgRHVyYXRpb24uZnJvbU9iamVjdDogYXJndW1lbnQgZXhwZWN0ZWQgdG8gYmUgYW4gb2JqZWN0LCBnb3QgJHtcbiAgICAgICAgICBvYmogPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBvYmpcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7XG4gICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICAgIGNvbnZlcnNpb25BY2N1cmFjeTogb3B0cy5jb252ZXJzaW9uQWNjdXJhY3ksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQVDIzSCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyMyB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1A1WTNNJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDUsIG1vbnRoczogMyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMToyMjozMy40NDQnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDIyLCBzZWNvbmRzOiAzMywgbWlsbGlzZWNvbmRzOiA0NDQgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT1RpbWVPbmx5KHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgZGF0ZXRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRHVyYXRpb25FcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgIHllYXI6IFwieWVhcnNcIixcbiAgICAgIHllYXJzOiBcInllYXJzXCIsXG4gICAgICBxdWFydGVyOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBxdWFydGVyczogXCJxdWFydGVyc1wiLFxuICAgICAgbW9udGg6IFwibW9udGhzXCIsXG4gICAgICBtb250aHM6IFwibW9udGhzXCIsXG4gICAgICB3ZWVrOiBcIndlZWtzXCIsXG4gICAgICB3ZWVrczogXCJ3ZWVrc1wiLFxuICAgICAgZGF5OiBcImRheXNcIixcbiAgICAgIGRheXM6IFwiZGF5c1wiLFxuICAgICAgaG91cjogXCJob3Vyc1wiLFxuICAgICAgaG91cnM6IFwiaG91cnNcIixcbiAgICAgIG1pbnV0ZTogXCJtaW51dGVzXCIsXG4gICAgICBtaW51dGVzOiBcIm1pbnV0ZXNcIixcbiAgICAgIHNlY29uZDogXCJzZWNvbmRzXCIsXG4gICAgICBzZWNvbmRzOiBcInNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdO1xuXG4gICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNEdXJhdGlvbihvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkR1cmF0aW9uKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgIHRoZSBsb2NhbGUgb2YgYSBEdXJhdGlvbiwgc3VjaCAnZW4tR0InXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIER1cmF0aW9uLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIER1cmF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOlxuICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzXG4gICAqICogYHNgIGZvciBzZWNvbmRzXG4gICAqICogYG1gIGZvciBtaW51dGVzXG4gICAqICogYGhgIGZvciBob3Vyc1xuICAgKiAqIGBkYCBmb3IgZGF5c1xuICAgKiAqIGB3YCBmb3Igd2Vla3NcbiAgICogKiBgTWAgZm9yIG1vbnRoc1xuICAgKiAqIGB5YCBmb3IgeWVhcnNcbiAgICogTm90ZXM6XG4gICAqICogQWRkIHBhZGRpbmcgYnkgcmVwZWF0aW5nIHRoZSB0b2tlbiwgZS5nLiBcInl5XCIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgXCJoaGhoXCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzXG4gICAqICogVG9rZW5zIGNhbiBiZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICogKiBUaGUgZHVyYXRpb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHNldCBvZiB1bml0cyBpbiB0aGUgZm9ybWF0IHN0cmluZyB1c2luZyB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30gYW5kIHRoZSBEdXJhdGlvbnMncyBjb252ZXJzaW9uIGFjY3VyYWN5IHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbG9vcj10cnVlXSAtIGZsb29yIG51bWVyaWNhbCB2YWx1ZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieSBkIHNcIikgLy89PiBcIjEgNiAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieXkgZGQgc3NzXCIpIC8vPT4gXCIwMSAwNiAwMDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJNIFNcIikgLy89PiBcIjEyIDUxODQwMjAwMFwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZtdE9wdHMgPSB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC5cbiAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0XG4gICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KVxuICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnXG4gICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiBcImxvbmdcIiB9KSAvLz0+ICcxIGRheSwgNSBob3VycywgYW5kIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogXCJzaG9ydFwiIH0pIC8vPT4gJzEgZGF5LCA1IGhyLCA2IG1pbidcbiAgICogYGBgXG4gICAqL1xuICB0b0h1bWFuKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGwgPSBvcmRlcmVkVW5pdHNcbiAgICAgIC5tYXAoKHVuaXQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZXNbdW5pdF07XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAgICAgLm51bWJlckZvcm1hdHRlcih7IHN0eWxlOiBcInVuaXRcIiwgdW5pdERpc3BsYXk6IFwibG9uZ1wiLCAuLi5vcHRzLCB1bml0OiB1bml0LnNsaWNlKDAsIC0xKSB9KVxuICAgICAgICAgIC5mb3JtYXQodmFsKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChuKSA9PiBuKTtcblxuICAgIHJldHVybiB0aGlzLmxvY1xuICAgICAgLmxpc3RGb3JtYXR0ZXIoeyB0eXBlOiBcImNvbmp1bmN0aW9uXCIsIHN0eWxlOiBvcHRzLmxpc3RTdHlsZSB8fCBcIm5hcnJvd1wiLCAuLi5vcHRzIH0pXG4gICAgICAuZm9ybWF0KGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHRvT2JqZWN0KCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHsgLi4udGhpcy52YWx1ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAzLCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1AzWVQ0NVMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDQsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDRNVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNSB9KS50b0lTTygpIC8vPT4gJ1A1TSdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDUgfSkudG9JU08oKSAvLz0+ICdQVDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiA2IH0pLnRvSVNPKCkgLy89PiAnUFQwLjAwNlMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKCkge1xuICAgIC8vIHdlIGNvdWxkIHVzZSB0aGUgZm9ybWF0dGVyLCBidXQgdGhpcyBpcyBhbiBlYXNpZXIgd2F5IHRvIGdldCB0aGUgbWluaW11bSBzdHJpbmdcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgcyA9IFwiUFwiO1xuICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyBcIllcIjtcbiAgICBpZiAodGhpcy5tb250aHMgIT09IDAgfHwgdGhpcy5xdWFydGVycyAhPT0gMCkgcyArPSB0aGlzLm1vbnRocyArIHRoaXMucXVhcnRlcnMgKiAzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArIFwiV1wiO1xuICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgXCJEXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDAgfHwgdGhpcy5taW51dGVzICE9PSAwIHx8IHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIHMgKz0gXCJUXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHMgKz0gdGhpcy5ob3VycyArIFwiSFwiO1xuICAgIGlmICh0aGlzLm1pbnV0ZXMgIT09IDApIHMgKz0gdGhpcy5taW51dGVzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIC8vIHRoaXMgd2lsbCBoYW5kbGUgXCJmbG9hdGluZyBwb2ludCBtYWRuZXNzXCIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXNcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlblxuICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyBcIlNcIjtcbiAgICBpZiAocyA9PT0gXCJQXCIpIHMgKz0gXCJUMFNcIjtcbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiwgZm9ybWF0dGVkIGFzIGEgdGltZSBvZiBkYXkuXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQsIG5lZ2F0aXZlLCBvciBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMjQgaG91cnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVQcmVmaXg9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgYFRgIHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoKSAvLz0+ICcxMTowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NNaWxsaXNlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDA6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NTZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTEwMDAwLjAwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTtcbiAgICBpZiAobWlsbGlzIDwgMCB8fCBtaWxsaXMgPj0gODY0MDAwMDApIHJldHVybiBudWxsO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsXG4gICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSxcbiAgICAgIGZvcm1hdDogXCJleHRlbmRlZFwiLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNoaWZ0VG8oXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpO1xuXG4gICAgbGV0IGZtdCA9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcImhobW1cIiA6IFwiaGg6bW1cIjtcblxuICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gXCJiYXNpY1wiID8gXCJzc1wiIDogXCI6c3NcIjtcbiAgICAgIGlmICghb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcyB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgICAgZm10ICs9IFwiLlNTU1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdHIgPSB2YWx1ZS50b0Zvcm1hdChmbXQpO1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkge1xuICAgICAgc3RyID0gXCJUXCIgKyBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXMoXCJtaWxsaXNlY29uZHNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdGhpcyBEdXJhdGlvbiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cyh4ID0+IHggKiAyKSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDYwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cygoeCwgdSkgPT4gdSA9PT0gXCJob3VyXCIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1hcFVuaXRzKGZuKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJlc3VsdFtrXSA9IGFzTnVtYmVyKGZuKHRoaXMudmFsdWVzW2tdLCBrKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gM1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW0R1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pXG4gICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSlcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbWl4ZWQgPSB7IC4uLnRoaXMudmFsdWVzLCAuLi5ub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSB9O1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbWl4ZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlIGFuZC9vciBudW1iZXJpbmdTeXN0ZW0uICBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIGR1ci5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNvbnZlcnNpb25BY2N1cmFjeSB9ID0ge30pIHtcbiAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtIH0pLFxuICAgICAgb3B0cyA9IHsgbG9jIH07XG5cbiAgICBpZiAoY29udmVyc2lvbkFjY3VyYWN5KSB7XG4gICAgICBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGNvbnZlcnNpb25BY2N1cmFjeTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlcycgb3IgJ2RheXMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ2RheXMnKSAvLz0+IDM2NVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdtb250aHMnKSAvLz0+IDEyXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe2hvdXJzOiA2MH0pLmFzKCdkYXlzJykgLy89PiAyLjVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgYXModW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnNoaWZ0VG8odW5pdCkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBub3JtYWxpemUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCB2YWxzKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIHBsdXMgYW55dGhpbmcgZnVydGhlciBkb3duIHRoZSBjaGFpbiB0aGF0IHNob3VsZCBiZSByb2xsZWQgdXAgaW4gdG8gdGhpc1xuICAgICAgICBmb3IgKGNvbnN0IGRvd24gaW4gdmFscykge1xuICAgICAgICAgIGlmIChvcmRlcmVkVW5pdHMuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cy5pbmRleE9mKGspKSB7XG4gICAgICAgICAgICBjb252ZXJ0KHRoaXMubWF0cml4LCB2YWxzLCBkb3duLCBidWlsdCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKS5ub3JtYWxpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5lZ2F0aXZlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkubmVnYXRlKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IC0xLCBzZWNvbmRzOiAtMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5lZ2F0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbmVnYXRlZCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbmVnYXRlZCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aHMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGhzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWtzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXlzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlcy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGVzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnNcbiAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEdXJhdGlvbnMgYXJlIGVxdWFsIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdW5pdHMgYW5kIHRoZSBzYW1lIHZhbHVlcyBmb3IgZWFjaCB1bml0LlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7XG4gICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWxcbiAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDtcbiAgICAgIHJldHVybiB2MSA9PT0gdjI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKCFlcSh0aGlzLnZhbHVlc1t1XSwgb3RoZXIudmFsdWVzW3VdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgSW50ZXJ2YWxcIjtcblxuLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZFxuZnVuY3Rpb24gdmFsaWRhdGVTdGFydEVuZChzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQgfHwgIXN0YXJ0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFwiKTtcbiAgfSBlbHNlIGlmICghZW5kIHx8ICFlbmQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIGVuZFwiKTtcbiAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFxuICAgICAgXCJlbmQgYmVmb3JlIHN0YXJ0XCIsXG4gICAgICBgVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9JHtzdGFydC50b0lTTygpfSBhbmQgZW5kPSR7ZW5kLnRvSVNPKCl9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBJbnRlcnZhbDpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYW4gSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZnJvbURhdGVUaW1lc30sIHtAbGluayBJbnRlcnZhbCNhZnRlcn0sIHtAbGluayBJbnRlcnZhbCNiZWZvcmV9LCBvciB7QGxpbmsgSW50ZXJ2YWwjZnJvbUlTT30uXG4gKiAqICoqQWNjZXNzb3JzKiogVXNlIHtAbGluayBJbnRlcnZhbCNzdGFydH0gYW5kIHtAbGluayBJbnRlcnZhbCNlbmR9IHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZC5cbiAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgb3RoZXIgSW50ZXJ2YWxzIG91dCBvZiB0aGlzIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNzZXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRBdH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEJ5fSwge0BsaW5rIEludGVydmFsI2RpdmlkZUVxdWFsbHl9LCB7QGxpbmsgSW50ZXJ2YWwjbWVyZ2V9LCB7QGxpbmsgSW50ZXJ2YWwjeG9yfSwge0BsaW5rIEludGVydmFsI3VuaW9ufSwge0BsaW5rIEludGVydmFsI2ludGVyc2VjdGlvbn0sIG9yIHtAbGluayBJbnRlcnZhbCNkaWZmZXJlbmNlfS5cbiAqICogKipDb21wYXJpc29uKiogVG8gY29tcGFyZSB0aGlzIEludGVydmFsIHRvIGFub3RoZXIgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI2VxdWFsc30sIHtAbGluayBJbnRlcnZhbCNvdmVybGFwc30sIHtAbGluayBJbnRlcnZhbCNhYnV0c1N0YXJ0fSwge0BsaW5rIEludGVydmFsI2FidXRzRW5kfSwge0BsaW5rIEludGVydmFsI2VuZ3VsZnN9XG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVydmFsIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lID0gY29uZmlnLmVuZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSW50ZXJ2YWxFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksXG4gICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlRXJyb3IgPSB2YWxpZGF0ZVN0YXJ0RW5kKGJ1aWx0U3RhcnQsIGJ1aWx0RW5kKTtcblxuICAgIGlmICh2YWxpZGF0ZUVycm9yID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoe1xuICAgICAgICBzdGFydDogYnVpbHRTdGFydCxcbiAgICAgICAgZW5kOiBidWlsdEVuZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYWZ0ZXIoc3RhcnQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBiZWZvcmUoZW5kLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQubWludXMoZHVyKSwgZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy5cbiAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3MsIGVdID0gKHRleHQgfHwgXCJcIikuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmIChzICYmIGUpIHtcbiAgICAgIGxldCBzdGFydCwgc3RhcnRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnQgPSBEYXRlVGltZS5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGFydElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuZCA9IERhdGVUaW1lLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGVuZElzVmFsaWQgPSBlbmQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmFmdGVyKHN0YXJ0LCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNJbnRlcnZhbChvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkludGVydmFsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IHN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnMgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IGVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbiA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgbGVuZ3RoKHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbiguLi5bdW5pdF0pLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC5cbiAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknXG4gICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLFxuICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKSxcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaSA9IDA7XG5cbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLFxuICAgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHNtYWxsZXIgSW50ZXJ2YWxzLCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLlxuICAgKiBMZWZ0IG92ZXIgdGltZSBpcyBncm91cGVkIGludG8gYSBzbWFsbGVyIGludGVydmFsXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgbGVuZ3RoIG9mIGVhY2ggcmVzdWx0aW5nIGludGVydmFsLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QnkoZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoXCJtaWxsaXNlY29uZHNcIikgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaWR4ID0gMSxcbiAgICAgIG5leHQ7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5zdGFydC5wbHVzKGR1ci5tYXBVbml0cygoeCkgPT4geCAqIGlkeCkpO1xuICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZQYXJ0cyAtIFRoZSBudW1iZXIgb2YgSW50ZXJ2YWxzIHRvIGRpdmlkZSB0aGUgSW50ZXJ2YWwgaW50by5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaXZpZGVFcXVhbGx5KG51bWJlck9mUGFydHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgc3BlY2lmaWVkIEludGVydmFsXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBvdmVybGFwcyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmUgPiBvdGhlci5zICYmIHRoaXMucyA8IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c1N0YXJ0KG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK3RoaXMuZSA9PT0gK290aGVyLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c0VuZChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgZW5ndWxmcyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZW5ndWxmcyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5lcXVhbHMob3RoZXIucykgJiYgdGhpcy5lLmVxdWFscyhvdGhlci5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWF4aW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWluaW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHksIG1lYW5pbmcsIHRoZSBpbnRlcnZhbHMgZG9uJ3QgaW50ZXJzZWN0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIGludGVyc2VjdGlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zID4gb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG5cbiAgICBpZiAocyA+PSBlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW5pb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA8IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuXG4gICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJnZShpbnRlcnZhbHMpIHtcbiAgICBjb25zdCBbZm91bmQsIGZpbmFsXSA9IGludGVydmFsc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGEucyAtIGIucylcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbc29mYXIsIGN1cnJlbnRdLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3ZlcmxhcHMoaXRlbSkgfHwgY3VycmVudC5hYnV0c1N0YXJ0KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2Zhci5jb25jYXQoW2N1cnJlbnRdKSwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbW10sIG51bGxdXG4gICAgICApO1xuICAgIGlmIChmaW5hbCkge1xuICAgICAgZm91bmQucHVzaChmaW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHhvcihpbnRlcnZhbHMpIHtcbiAgICBsZXQgc3RhcnQgPSBudWxsLFxuICAgICAgY3VycmVudENvdW50ID0gMDtcbiAgICBjb25zdCByZXN1bHRzID0gW10sXG4gICAgICBlbmRzID0gaW50ZXJ2YWxzLm1hcCgoaSkgPT4gW1xuICAgICAgICB7IHRpbWU6IGkucywgdHlwZTogXCJzXCIgfSxcbiAgICAgICAgeyB0aW1lOiBpLmUsIHR5cGU6IFwiZVwiIH0sXG4gICAgICBdKSxcbiAgICAgIGZsYXR0ZW5lZCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4uZW5kcyksXG4gICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcblxuICAgIGZvciAoY29uc3QgaSBvZiBhcnIpIHtcbiAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09IFwic1wiID8gMSA6IC0xO1xuXG4gICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7XG4gICAgICAgIHN0YXJ0ID0gaS50aW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgc3BhbiBvZiB0aW1lIGluIHRoaXMgSW50ZXJ2YWwgdGhhdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpZmZlcmVuY2UoLi4uaW50ZXJ2YWxzKSB7XG4gICAgcmV0dXJuIEludGVydmFsLnhvcihbdGhpc10uY29uY2F0KGludGVydmFscykpXG4gICAgICAubWFwKChpKSA9PiB0aGlzLmludGVyc2VjdGlvbihpKSlcbiAgICAgIC5maWx0ZXIoKGkpID0+IGkgJiYgIWkuaXNFbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IC0gdGhlIGZvcm1hdCBzdHJpbmcuIFRoaXMgc3RyaW5nIGZvcm1hdHMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZS4gU2VlIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0gZm9yIGRldGFpbHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcgXHUyMDEzICddIC0gYSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCByZXByZXNlbnRhdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiBcdTIwMTMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwgImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vaW1wbC91dGlsLmpzXCI7XG5cbi8qKlxuICogVGhlIEluZm8gY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgZ2VuZXJhbCB0aW1lIGFuZCBkYXRlIHJlbGF0ZWQgZGF0YS4gRm9yIGV4YW1wbGUsIGl0IGhhcyBtZXRob2RzIGZvciBmaW5kaW5nIG91dCBpZiBhIHRpbWUgem9uZSBoYXMgYSBEU1QsIGZvciBsaXN0aW5nIHRoZSBtb250aHMgaW4gYW55IHN1cHBvcnRlZCBsb2NhbGUsIGFuZCBmb3IgZGlzY292ZXJpbmcgd2hpY2ggb2YgTHV4b24gZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5mbyB7XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBoYXNEU1Qoem9uZSA9IFNldHRpbmdzLmRlZmF1bHRab25lKSB7XG4gICAgY29uc3QgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7IG1vbnRoOiAxMiB9KTtcblxuICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7IG1vbnRoOiA2IH0pLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgaXMgYSB2YWxpZCBJQU5BIHNwZWNpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBab25lIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZElBTkFab25lKHpvbmUpIHtcbiAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFpvbmUoem9uZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuXG4gICAqXG4gICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2VcbiAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lXG4gICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0XG4gICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkXG4gICAqIEByZXR1cm4ge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplWm9uZShpbnB1dCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgbW9udGggbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcpWzBdIC8vPT4gJ0phbidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnKVswXSAvLz0+ICcxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAnXHUwNjYxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbG9uZycsIHsgb3V0cHV0Q2FsZW5kYXI6ICdpc2xhbWljJyB9KVswXSAvLz0+ICdSYWJpXHUwMkJCIEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MkJcdTA2NDZcdTA2NEFcdTA2NDYnXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHdlZWtkYXlzKGxlbmd0aCA9IFwibG9uZ1wiLCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLlxuICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgbWVyaWRpZW1zLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoKSAvLz0+IFsgJ0FNJywgJ1BNJyBdXG4gICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKHsgbG9jYWxlOiAnbXknIH0pIC8vPT4gWyAnXHUxMDE0XHUxMDM2XHUxMDE0XHUxMDAwXHUxMDNBJywgJ1x1MTAwQVx1MTAxNFx1MTAzMScgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJpZGllbXMoeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwic2hvcnRcIiBvciBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSlx1MDBFOXN1cy1DaHJpc3QnLCAnYXByXHUwMEU4cyBKXHUwMEU5c3VzLUNocmlzdCcgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBlcmFzKGxlbmd0aCA9IFwic2hvcnRcIiwgeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgXCJncmVnb3J5XCIpLmVyYXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICogU29tZSBmZWF0dXJlcyBvZiBMdXhvbiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgZW52aXJvbm1lbnRzLiBGb3IgZXhhbXBsZSwgb24gb2xkZXIgYnJvd3NlcnMsIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRoZSBjYXNlLlxuICAgKiBLZXlzOlxuICAgKiAqIGByZWxhdGl2ZWA6IHdoZXRoZXIgdGhpcyBlbnZpcm9ubWVudCBzdXBwb3J0cyByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmdcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCkgfTtcbiAgfVxufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikge1xuICBjb25zdCB1dGNEYXlTdGFydCA9IChkdCkgPT4gZHQudG9VVEMoMCwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLFxuICAgIG1zID0gdXRjRGF5U3RhcnQobGF0ZXIpIC0gdXRjRGF5U3RhcnQoZWFybGllcik7XG4gIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKFwiZGF5c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7XG4gIGNvbnN0IGRpZmZlcnMgPSBbXG4gICAgW1wieWVhcnNcIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sXG4gICAgW1wicXVhcnRlcnNcIiwgKGEsIGIpID0+IGIucXVhcnRlciAtIGEucXVhcnRlcl0sXG4gICAgW1wibW9udGhzXCIsIChhLCBiKSA9PiBiLm1vbnRoIC0gYS5tb250aCArIChiLnllYXIgLSBhLnllYXIpICogMTJdLFxuICAgIFtcbiAgICAgIFwid2Vla3NcIixcbiAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkYXlEaWZmKGEsIGIpO1xuICAgICAgICByZXR1cm4gKGRheXMgLSAoZGF5cyAlIDcpKSAvIDc7XG4gICAgICB9LFxuICAgIF0sXG4gICAgW1wiZGF5c1wiLCBkYXlEaWZmXSxcbiAgXTtcblxuICBjb25zdCByZXN1bHRzID0ge307XG4gIGxldCBsb3dlc3RPcmRlciwgaGlnaFdhdGVyO1xuXG4gIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykge1xuICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHtcbiAgICAgIGxvd2VzdE9yZGVyID0gdW5pdDtcblxuICAgICAgbGV0IGRlbHRhID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIH0pO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIC0gMSB9KTtcbiAgICAgICAgZGVsdGEgLT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnNvciA9IGhpZ2hXYXRlcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykge1xuICBsZXQgW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl0gPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpO1xuXG4gIGNvbnN0IHJlbWFpbmluZ01pbGxpcyA9IGxhdGVyIC0gY3Vyc29yO1xuXG4gIGNvbnN0IGxvd2VyT3JkZXJVbml0cyA9IHVuaXRzLmZpbHRlcihcbiAgICAodSkgPT4gW1wiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXS5pbmRleE9mKHUpID49IDBcbiAgKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChoaWdoV2F0ZXIgPCBsYXRlcikge1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbbG93ZXN0T3JkZXJdOiAxIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikge1xuICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7XG5cbiAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMocmVtYWluaW5nTWlsbGlzLCBvcHRzKVxuICAgICAgLnNoaWZ0VG8oLi4ubG93ZXJPcmRlclVuaXRzKVxuICAgICAgLnBsdXMoZHVyYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxufVxuIiwgImNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7XG4gIGFyYWI6IFwiW1xcdTA2NjAtXFx1MDY2OV1cIixcbiAgYXJhYmV4dDogXCJbXFx1MDZGMC1cXHUwNkY5XVwiLFxuICBiYWxpOiBcIltcXHUxQjUwLVxcdTFCNTldXCIsXG4gIGJlbmc6IFwiW1xcdTA5RTYtXFx1MDlFRl1cIixcbiAgZGV2YTogXCJbXFx1MDk2Ni1cXHUwOTZGXVwiLFxuICBmdWxsd2lkZTogXCJbXFx1RkYxMC1cXHVGRjE5XVwiLFxuICBndWpyOiBcIltcXHUwQUU2LVxcdTBBRUZdXCIsXG4gIGhhbmlkZWM6IFwiW1x1MzAwN3xcdTRFMDB8XHU0RThDfFx1NEUwOXxcdTU2REJ8XHU0RTk0fFx1NTE2RHxcdTRFMDN8XHU1MTZCfFx1NEU1RF1cIixcbiAga2htcjogXCJbXFx1MTdFMC1cXHUxN0U5XVwiLFxuICBrbmRhOiBcIltcXHUwQ0U2LVxcdTBDRUZdXCIsXG4gIGxhb286IFwiW1xcdTBFRDAtXFx1MEVEOV1cIixcbiAgbGltYjogXCJbXFx1MTk0Ni1cXHUxOTRGXVwiLFxuICBtbHltOiBcIltcXHUwRDY2LVxcdTBENkZdXCIsXG4gIG1vbmc6IFwiW1xcdTE4MTAtXFx1MTgxOV1cIixcbiAgbXltcjogXCJbXFx1MTA0MC1cXHUxMDQ5XVwiLFxuICBvcnlhOiBcIltcXHUwQjY2LVxcdTBCNkZdXCIsXG4gIHRhbWxkZWM6IFwiW1xcdTBCRTYtXFx1MEJFRl1cIixcbiAgdGVsdTogXCJbXFx1MEM2Ni1cXHUwQzZGXVwiLFxuICB0aGFpOiBcIltcXHUwRTUwLVxcdTBFNTldXCIsXG4gIHRpYnQ6IFwiW1xcdTBGMjAtXFx1MEYyOV1cIixcbiAgbGF0bjogXCJcXFxcZFwiLFxufTtcblxuY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0ge1xuICBhcmFiOiBbMTYzMiwgMTY0MV0sXG4gIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSxcbiAgYmFsaTogWzY5OTIsIDcwMDFdLFxuICBiZW5nOiBbMjUzNCwgMjU0M10sXG4gIGRldmE6IFsyNDA2LCAyNDE1XSxcbiAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLFxuICBndWpyOiBbMjc5MCwgMjc5OV0sXG4gIGtobXI6IFs2MTEyLCA2MTIxXSxcbiAga25kYTogWzMzMDIsIDMzMTFdLFxuICBsYW9vOiBbMzc5MiwgMzgwMV0sXG4gIGxpbWI6IFs2NDcwLCA2NDc5XSxcbiAgbWx5bTogWzM0MzAsIDM0MzldLFxuICBtb25nOiBbNjE2MCwgNjE2OV0sXG4gIG15bXI6IFs0MTYwLCA0MTY5XSxcbiAgb3J5YTogWzI5MTgsIDI5MjddLFxuICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sXG4gIHRlbHU6IFszMTc0LCAzMTgzXSxcbiAgdGhhaTogWzM2NjQsIDM2NzNdLFxuICB0aWJ0OiBbMzg3MiwgMzg4MV0sXG59O1xuXG5jb25zdCBoYW5pZGVjQ2hhcnMgPSBudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMucmVwbGFjZSgvW1xcW3xcXF1dL2csIFwiXCIpLnNwbGl0KFwiXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEaWdpdHMoc3RyKSB7XG4gIGxldCB2YWx1ZSA9IHBhcnNlSW50KHN0ciwgMTApO1xuICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIGlmIChzdHJbaV0uc2VhcmNoKG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYykgIT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9IGhhbmlkZWNDaGFycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBudW1iZXJpbmdTeXN0ZW1zVVRGMTYpIHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gbnVtYmVyaW5nU3lzdGVtc1VURjE2W2tleV07XG4gICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBjb2RlIC0gbWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0UmVnZXgoeyBudW1iZXJpbmdTeXN0ZW0gfSwgYXBwZW5kID0gXCJcIikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW251bWJlcmluZ1N5c3RlbSB8fCBcImxhdG5cIl19JHthcHBlbmR9YCk7XG59XG4iLCAiaW1wb3J0IHsgcGFyc2VNaWxsaXMsIGlzVW5kZWZpbmVkLCB1bnRydW5jYXRlWWVhciwgc2lnbmVkT2Zmc2V0LCBoYXNPd25Qcm9wZXJ0eSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCB7IGRpZ2l0UmVnZXgsIHBhcnNlRGlnaXRzIH0gZnJvbSBcIi4vZGlnaXRzLmpzXCI7XG5pbXBvcnQgeyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuY29uc3QgTUlTU0lOR19GVFAgPSBcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcIjtcblxuZnVuY3Rpb24gaW50VW5pdChyZWdleCwgcG9zdCA9IChpKSA9PiBpKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcG9zdChwYXJzZURpZ2l0cyhzKSkgfTtcbn1cblxuY29uc3QgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtcbmNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gO1xuY29uc3Qgc3BhY2VPck5CU1BSZWdFeHAgPSBuZXcgUmVnRXhwKHNwYWNlT3JOQlNQLCBcImdcIik7XG5cbmZ1bmN0aW9uIGZpeExpc3RSZWdleChzKSB7XG4gIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbFxuICAvLyBtYWtlIHNwYWNlIGFuZCBub24gYnJlYWthYmxlIHNwYWNlIGNoYXJhY3RlcnMgaW50ZXJjaGFuZ2VhYmxlXG4gIHJldHVybiBzLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuP1wiKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpIHtcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXCIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsXG4gICAgLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIFwiIFwiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcFxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7XG4gIGlmIChzdHJpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKFwifFwiKSksXG4gICAgICBkZXNlcjogKFtzXSkgPT5cbiAgICAgICAgc3RyaW5ncy5maW5kSW5kZXgoKGkpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoWywgaCwgbV0pID0+IHNpZ25lZE9mZnNldChoLCBtKSwgZ3JvdXBzIH07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZShyZWdleCkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHMgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHtcbiAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLFxuICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsyfVwiKSxcbiAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInszfVwiKSxcbiAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezR9XCIpLFxuICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns2fVwiKSxcbiAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDJ9XCIpLFxuICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwzfVwiKSxcbiAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDZ9XCIpLFxuICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDl9XCIpLFxuICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcInsyLDR9XCIpLFxuICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns0LDZ9XCIpLFxuICAgIGxpdGVyYWwgPSAodCkgPT4gKHsgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLCBkZXNlcjogKFtzXSkgPT4gcywgbGl0ZXJhbDogdHJ1ZSB9KSxcbiAgICB1bml0YXRlID0gKHQpID0+IHtcbiAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0LnZhbCkge1xuICAgICAgICAvLyBlcmFcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJzaG9ydFwiLCBmYWxzZSksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIC8vIHllYXJzXG4gICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcInl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91clRvU2l4KTtcbiAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHNpeCk7XG4gICAgICAgIC8vIG1vbnRoc1xuICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcImxvbmdcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIG9yZGluYWxzXG4gICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIC8vIHRpbWVcbiAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lVG9OaW5lKTtcbiAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICAvLyBtZXJpZGllbVxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApO1xuICAgICAgICAvLyB3ZWVrWWVhciAoaylcbiAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7XG4gICAgICAgIC8vIHdlZWtOdW1iZXIgKFcpXG4gICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyB3ZWVrZGF5c1xuICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgfTtcblxuICBjb25zdCB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwge1xuICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQLFxuICB9O1xuXG4gIHVuaXQudG9rZW4gPSB0b2tlbjtcblxuICByZXR1cm4gdW5pdDtcbn1cblxuY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7XG4gIHllYXI6IHtcbiAgICBcIjItZGlnaXRcIjogXCJ5eVwiLFxuICAgIG51bWVyaWM6IFwieXl5eXlcIixcbiAgfSxcbiAgbW9udGg6IHtcbiAgICBudW1lcmljOiBcIk1cIixcbiAgICBcIjItZGlnaXRcIjogXCJNTVwiLFxuICAgIHNob3J0OiBcIk1NTVwiLFxuICAgIGxvbmc6IFwiTU1NTVwiLFxuICB9LFxuICBkYXk6IHtcbiAgICBudW1lcmljOiBcImRcIixcbiAgICBcIjItZGlnaXRcIjogXCJkZFwiLFxuICB9LFxuICB3ZWVrZGF5OiB7XG4gICAgc2hvcnQ6IFwiRUVFXCIsXG4gICAgbG9uZzogXCJFRUVFXCIsXG4gIH0sXG4gIGRheXBlcmlvZDogXCJhXCIsXG4gIGRheVBlcmlvZDogXCJhXCIsXG4gIGhvdXI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxufTtcblxuZnVuY3Rpb24gdG9rZW5Gb3JQYXJ0KHBhcnQsIGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBwYXJ0O1xuXG4gIGlmICh0eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiB0cnVlLFxuICAgICAgdmFsOiB2YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdO1xuXG4gIGxldCB2YWwgPSBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbFt0eXBlXTtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICB2YWwgPSB2YWxbc3R5bGVdO1xuICB9XG5cbiAgaWYgKHZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgIHZhbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykge1xuICBjb25zdCByZSA9IHVuaXRzLm1hcCgodSkgPT4gdS5yZWdleCkucmVkdWNlKChmLCByKSA9PiBgJHtmfSgke3Iuc291cmNlfSlgLCBcIlwiKTtcbiAgcmV0dXJuIFtgXiR7cmV9JGAsIHVuaXRzXTtcbn1cblxuZnVuY3Rpb24gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycykge1xuICBjb25zdCBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3QgYWxsID0ge307XG4gICAgbGV0IG1hdGNoSW5kZXggPSAxO1xuICAgIGZvciAoY29uc3QgaSBpbiBoYW5kbGVycykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkge1xuICAgICAgICBjb25zdCBoID0gaGFuZGxlcnNbaV0sXG4gICAgICAgICAgZ3JvdXBzID0gaC5ncm91cHMgPyBoLmdyb3VwcyArIDEgOiAxO1xuICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7XG4gICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbbWF0Y2hlcywgYWxsXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21hdGNoZXMsIHt9XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIHtcbiAgY29uc3QgdG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICBjYXNlIFwic1wiOlxuICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgIHJldHVybiBcIm1pbnV0ZVwiO1xuICAgICAgY2FzZSBcImhcIjpcbiAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgIHJldHVybiBcImRheVwiO1xuICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgcmV0dXJuIFwib3JkaW5hbFwiO1xuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgIHJldHVybiBcIm1vbnRoXCI7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla2RheVwiO1xuICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla051bWJlclwiO1xuICAgICAgY2FzZSBcImtcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla1llYXJcIjtcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBcInF1YXJ0ZXJcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBsZXQgem9uZSA9IG51bGw7XG4gIGxldCBzcGVjaWZpY09mZnNldDtcbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7XG4gICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLlopKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICB6b25lID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZShtYXRjaGVzLlopO1xuICAgIH1cbiAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5xKSkge1xuICAgIG1hdGNoZXMuTSA9IChtYXRjaGVzLnEgLSAxKSAqIDMgKyAxO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7XG4gICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkge1xuICAgICAgbWF0Y2hlcy5oICs9IDEyO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHtcbiAgICAgIG1hdGNoZXMuaCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHtcbiAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55O1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnUpKSB7XG4gICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHMgPSBPYmplY3Qua2V5cyhtYXRjaGVzKS5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICBjb25zdCBmID0gdG9GaWVsZChrKTtcbiAgICBpZiAoZikge1xuICAgICAgcltmXSA9IG1hdGNoZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTtcbn1cblxubGV0IGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7XG4gIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7XG4gICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTtcbiAgfVxuXG4gIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7XG4gIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7XG5cbiAgaWYgKCFmb3JtYXRPcHRzKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7XG5cbiAgY29uc3QgdG9rZW5zID0gcGFydHMubWFwKChwKSA9PiB0b2tlbkZvclBhcnQocCwgbG9jYWxlLCBmb3JtYXRPcHRzKSk7XG5cbiAgaWYgKHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gZXhwYW5kTWFjcm9Ub2tlbnModG9rZW5zLCBsb2NhbGUpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4udG9rZW5zLm1hcCgodCkgPT4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSkpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgdG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSksXG4gICAgdW5pdHMgPSB0b2tlbnMubWFwKCh0KSA9PiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKSksXG4gICAgZGlzcXVhbGlmeWluZ1VuaXQgPSB1bml0cy5maW5kKCh0KSA9PiB0LmludmFsaWRSZWFzb24pO1xuXG4gIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkge1xuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb24gfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbcmVnZXhTdHJpbmcsIGhhbmRsZXJzXSA9IGJ1aWxkUmVnZXgodW5pdHMpLFxuICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKSxcbiAgICAgIFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpLFxuICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcylcbiAgICAgICAgOiBbbnVsbCwgbnVsbCwgdW5kZWZpbmVkXTtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIHJlZ2V4LCByYXdNYXRjaGVzLCBtYXRjaGVzLCByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0IH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgeyByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpO1xuICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb25dO1xufVxuIiwgImltcG9ydCB7XG4gIGludGVnZXJCZXR3ZWVuLFxuICBpc0xlYXBZZWFyLFxuICB0aW1lT2JqZWN0LFxuICBkYXlzSW5ZZWFyLFxuICBkYXlzSW5Nb250aCxcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBpc0ludGVnZXIsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcblxuY29uc3Qgbm9uTGVhcExhZGRlciA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sXG4gIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdO1xuXG5mdW5jdGlvbiB1bml0T3V0T2ZSYW5nZSh1bml0LCB2YWx1ZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXG4gICAgXCJ1bml0IG91dCBvZiByYW5nZVwiLFxuICAgIGB5b3Ugc3BlY2lmaWVkICR7dmFsdWV9IChvZiB0eXBlICR7dHlwZW9mIHZhbHVlfSkgYXMgYSAke3VuaXR9LCB3aGljaCBpcyBpbnZhbGlkYFxuICApO1xufVxuXG5mdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JlZ29yaWFuVG9XZWVrKGdyZWdPYmopIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnT2JqLFxuICAgIG9yZGluYWwgPSBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSxcbiAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxMCkgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEpIHtcbiAgY29uc3QgeyB3ZWVrWWVhciwgd2Vla051bWJlciwgd2Vla2RheSB9ID0gd2Vla0RhdGEsXG4gICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDMsXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRXZWVrRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksXG4gICAgdmFsaWRXZWVrID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtOdW1iZXIsIDEsIHdlZWtzSW5XZWVrWWVhcihvYmoud2Vla1llYXIpKSxcbiAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7XG5cbiAgaWYgKCF2YWxpZFllYXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrWWVhclwiLCBvYmoud2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrXCIsIG9iai53ZWVrKTtcbiAgfSBlbHNlIGlmICghdmFsaWRXZWVrZGF5KSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla2RheVwiLCBvYmoud2Vla2RheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJvcmRpbmFsXCIsIG9iai5vcmRpbmFsKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLFxuICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSxcbiAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibW9udGhcIiwgb2JqLm1vbnRoKTtcbiAgfSBlbHNlIGlmICghdmFsaWREYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJkYXlcIiwgb2JqLmRheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkVGltZURhdGEob2JqKSB7XG4gIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSBvYmo7XG4gIGNvbnN0IHZhbGlkSG91ciA9XG4gICAgICBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHxcbiAgICAgIChob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwKSxcbiAgICB2YWxpZE1pbnV0ZSA9IGludGVnZXJCZXR3ZWVuKG1pbnV0ZSwgMCwgNTkpLFxuICAgIHZhbGlkU2Vjb25kID0gaW50ZWdlckJldHdlZW4oc2Vjb25kLCAwLCA1OSksXG4gICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpO1xuXG4gIGlmICghdmFsaWRIb3VyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwiaG91clwiLCBob3VyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtaW51dGVcIiwgbWludXRlKTtcbiAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaWxsaXNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cbiIsICJpbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNVbmRlZmluZWQsXG4gIG1heWJlQXJyYXksXG4gIGlzRGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGJlc3RCeSxcbiAgZGF5c0luTW9udGgsXG4gIGRheXNJblllYXIsXG4gIGlzTGVhcFllYXIsXG4gIHdlZWtzSW5XZWVrWWVhcixcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxuICBvYmpUb0xvY2FsVFMsXG4gIHBhZFN0YXJ0LFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgZGlmZiBmcm9tIFwiLi9pbXBsL2RpZmYuanNcIjtcbmltcG9ydCB7IHBhcnNlUkZDMjgyMkRhdGUsIHBhcnNlSVNPRGF0ZSwgcGFyc2VIVFRQRGF0ZSwgcGFyc2VTUUwgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUZyb21Ub2tlbnMsIGV4cGxhaW5Gcm9tVG9rZW5zIH0gZnJvbSBcIi4vaW1wbC90b2tlblBhcnNlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3JlZ29yaWFuVG9XZWVrLFxuICB3ZWVrVG9HcmVnb3JpYW4sXG4gIGdyZWdvcmlhblRvT3JkaW5hbCxcbiAgb3JkaW5hbFRvR3JlZ29yaWFuLFxuICBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YSxcbiAgaGFzSW52YWxpZFdlZWtEYXRhLFxuICBoYXNJbnZhbGlkT3JkaW5hbERhdGEsXG4gIGhhc0ludmFsaWRUaW1lRGF0YSxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG5mdW5jdGlvbiBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKGR0KSB7XG4gIGlmIChkdC53ZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LndlZWtEYXRhID0gZ3JlZ29yaWFuVG9XZWVrKGR0LmMpO1xuICB9XG4gIHJldHVybiBkdC53ZWVrRGF0YTtcbn1cblxuLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCBcIm1ha2UgYSBuZXcgb2JqZWN0IHdpdGggdGhlc2UgbW9kaWZpY2F0aW9uc1wiLiBhbGwgXCJzZXR0ZXJzXCIgcmVhbGx5IHVzZSB0aGlzXG4vLyB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWxlIG9ubHkgY2hhbmdpbmcgc29tZSBvZiB0aGUgcHJvcGVydGllc1xuZnVuY3Rpb24gY2xvbmUoaW5zdCwgYWx0cykge1xuICBjb25zdCBjdXJyZW50ID0ge1xuICAgIHRzOiBpbnN0LnRzLFxuICAgIHpvbmU6IGluc3Quem9uZSxcbiAgICBjOiBpbnN0LmMsXG4gICAgbzogaW5zdC5vLFxuICAgIGxvYzogaW5zdC5sb2MsXG4gICAgaW52YWxpZDogaW5zdC5pbnZhbGlkLFxuICB9O1xuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgLi4uY3VycmVudCwgLi4uYWx0cywgb2xkOiBjdXJyZW50IH0pO1xufVxuXG4vLyBmaW5kIHRoZSByaWdodCBvZmZzZXQgYSBnaXZlbiBsb2NhbCB0aW1lLiBUaGUgbyBpbnB1dCBpcyBvdXIgZ3Vlc3MsIHdoaWNoIGRldGVybWluZXMgd2hpY2hcbi8vIG9mZnNldCB3ZSdsbCBwaWNrIGluIGFtYmlndW91cyBjYXNlcyAoZS5nLiB0aGVyZSBhcmUgdHdvIDMgQU1zIGIvYyBGYWxsYmFjayBEU1QpXG5mdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHtcbiAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzXG4gIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwO1xuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGUgem9uZSBtYXRjaGVzIHRoZSBvZmZzZXQgZm9yIHRoaXMgdHNcbiAgY29uc3QgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpO1xuXG4gIC8vIElmIHNvLCBvZmZzZXQgZGlkbid0IGNoYW5nZSBhbmQgd2UncmUgZG9uZVxuICBpZiAobyA9PT0gbzIpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTtcbiAgfVxuXG4gIC8vIElmIG5vdCwgY2hhbmdlIHRoZSB0cyBieSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgb2Zmc2V0XG4gIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwO1xuXG4gIC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZVxuICBjb25zdCBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG4gIGlmIChvMiA9PT0gbzMpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvMl07XG4gIH1cblxuICAvLyBJZiBpdCdzIGRpZmZlcmVudCwgd2UncmUgaW4gYSBob2xlIHRpbWUuIFRoZSBvZmZzZXQgaGFzIGNoYW5nZWQsIGJ1dCB0aGUgd2UgZG9uJ3QgYWRqdXN0IHRoZSB0aW1lXG4gIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldO1xufVxuXG4vLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldFxuZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7XG4gIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDtcblxuICBjb25zdCBkID0gbmV3IERhdGUodHMpO1xuXG4gIHJldHVybiB7XG4gICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLFxuICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgIGRheTogZC5nZXRVVENEYXRlKCksXG4gICAgaG91cjogZC5nZXRVVENIb3VycygpLFxuICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgfTtcbn1cblxuLy8gY29udmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGVwb2NoIHRpbWVzdGFtcFxuZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkge1xuICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpO1xufVxuXG4vLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUc1xuZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHtcbiAgY29uc3Qgb1ByZSA9IGluc3QubyxcbiAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgbW9udGggPSBpbnN0LmMubW9udGggKyBNYXRoLnRydW5jKGR1ci5tb250aHMpICsgTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpICogMyxcbiAgICBjID0ge1xuICAgICAgLi4uaW5zdC5jLFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5OlxuICAgICAgICBNYXRoLm1pbihpbnN0LmMuZGF5LCBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpICtcbiAgICAgICAgTWF0aC50cnVuYyhkdXIuZGF5cykgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci53ZWVrcykgKiA3LFxuICAgIH0sXG4gICAgbWlsbGlzVG9BZGQgPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtcbiAgICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLFxuICAgICAgbW9udGhzOiBkdXIubW9udGhzIC0gTWF0aC50cnVuYyhkdXIubW9udGhzKSxcbiAgICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksXG4gICAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLFxuICAgICAgaG91cnM6IGR1ci5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLFxuICAgICAgc2Vjb25kczogZHVyLnNlY29uZHMsXG4gICAgICBtaWxsaXNlY29uZHM6IGR1ci5taWxsaXNlY29uZHMsXG4gICAgfSkuYXMoXCJtaWxsaXNlY29uZHNcIiksXG4gICAgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyhjKTtcblxuICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpO1xuXG4gIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkge1xuICAgIHRzICs9IG1pbGxpc1RvQWRkO1xuICAgIC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWVcbiAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7XG4gIH1cblxuICByZXR1cm4geyB0cywgbyB9O1xufVxuXG4vLyBoZWxwZXIgdXNlZnVsIGluIHR1cm5pbmcgdGhlIHJlc3VsdHMgb2YgcGFyc2luZyBpbnRvIHJlYWwgZGF0ZXNcbi8vIGJ5IGhhbmRsaW5nIHRoZSB6b25lIG9wdGlvbnNcbmZ1bmN0aW9uIHBhcnNlRGF0YVRvRGF0ZVRpbWUocGFyc2VkLCBwYXJzZWRab25lLCBvcHRzLCBmb3JtYXQsIHRleHQsIHNwZWNpZmljT2Zmc2V0KSB7XG4gIGNvbnN0IHsgc2V0Wm9uZSwgem9uZSB9ID0gb3B0cztcbiAgaWYgKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgICBjICs9IFwiOlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICB9XG5cbiAgaWYgKG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7XG5cbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc01pbGxpc2Vjb25kcykge1xuICAgICAgYyArPSBcIi5cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgIGlmIChvLmlzT2Zmc2V0Rml4ZWQgJiYgby5vZmZzZXQgPT09IDAgJiYgIWV4dGVuZGVkWm9uZSkge1xuICAgICAgYyArPSBcIlpcIjtcbiAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHtcbiAgICAgIGMgKz0gXCItXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gJSA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjICs9IFwiK1wiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAlIDYwKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4dGVuZGVkWm9uZSkge1xuICAgIGMgKz0gXCJbXCIgKyBvLnpvbmUuaWFuYU5hbWUgKyBcIl1cIjtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzXG5jb25zdCBkZWZhdWx0VW5pdFZhbHVlcyA9IHtcbiAgICBtb250aDogMSxcbiAgICBkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7XG4gICAgd2Vla051bWJlcjogMSxcbiAgICB3ZWVrZGF5OiAxLFxuICAgIGhvdXI6IDAsXG4gICAgbWludXRlOiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbiAgfSxcbiAgZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzID0ge1xuICAgIG9yZGluYWw6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9O1xuXG4vLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3NcbmNvbnN0IG9yZGVyZWRVbml0cyA9IFtcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSxcbiAgb3JkZXJlZFdlZWtVbml0cyA9IFtcbiAgICBcIndlZWtZZWFyXCIsXG4gICAgXCJ3ZWVrTnVtYmVyXCIsXG4gICAgXCJ3ZWVrZGF5XCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwibWlsbGlzZWNvbmRcIixcbiAgXSxcbiAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFtcInllYXJcIiwgXCJvcmRpbmFsXCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdO1xuXG4vLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIHllYXI6IFwieWVhclwiLFxuICAgIHllYXJzOiBcInllYXJcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIGhvdXI6IFwiaG91clwiLFxuICAgIGhvdXJzOiBcImhvdXJcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBxdWFydGVyOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGVyczogXCJxdWFydGVyXCIsXG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRcIixcbiAgICB3ZWVrZGF5OiBcIndlZWtkYXlcIixcbiAgICB3ZWVrZGF5czogXCJ3ZWVrZGF5XCIsXG4gICAgd2Vla251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla3NudW1iZXI6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWtudW1iZXJzOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVreWVhcjogXCJ3ZWVrWWVhclwiLFxuICAgIHdlZWt5ZWFyczogXCJ3ZWVrWWVhclwiLFxuICAgIG9yZGluYWw6IFwib3JkaW5hbFwiLFxuICB9W3VuaXQudG9Mb3dlckNhc2UoKV07XG5cbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gdGhpcyBpcyBhIGR1bWJlZCBkb3duIHZlcnNpb24gb2YgZnJvbU9iamVjdCgpIHRoYXQgcnVucyBhYm91dCA2MCUgZmFzdGVyXG4vLyBidXQgZG9lc24ndCBkbyBhbnkgdmFsaWRhdGlvbiwgbWFrZXMgYSBidW5jaCBvZiBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IHVuaXRzXG4vLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLlxuZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHtcbiAgY29uc3Qgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksXG4gICAgdHNOb3cgPSBTZXR0aW5ncy5ub3coKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSB6b25lLm9mZnNldCh0c05vdyk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gdHNOb3c7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOlxuICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC5cbiAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLlxuICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOlxuICpcbiAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS5cbiAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSxcbiAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuXG4gKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS5cbiAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uXG4gKlxuICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWUge1xuICAvKipcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7XG5cbiAgICBsZXQgaW52YWxpZCA9XG4gICAgICBjb25maWcuaW52YWxpZCB8fFxuICAgICAgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbCkgfHxcbiAgICAgICghem9uZS5pc1ZhbGlkID8gdW5zdXBwb3J0ZWRab25lKHpvbmUpIDogbnVsbCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy50cyA9IGlzVW5kZWZpbmVkKGNvbmZpZy50cykgPyBTZXR0aW5ncy5ub3coKSA6IGNvbmZpZy50cztcblxuICAgIGxldCBjID0gbnVsbCxcbiAgICAgIG8gPSBudWxsO1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7XG5cbiAgICAgIGlmICh1bmNoYW5nZWQpIHtcbiAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTtcbiAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbDtcbiAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYztcbiAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fem9uZSA9IHpvbmU7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMud2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1WiB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyB1dGMoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcblxuICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTtcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0cyA9IGlzRGF0ZShkYXRlKSA/IGRhdGUudmFsdWVPZigpIDogTmFOO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcImludmFsaWQgaW5wdXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICB0czogdHMsXG4gICAgICB6b25lOiB6b25lVG9Vc2UsXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgbWlsbGlzZWNvbmRzfSB3aXRoIHZhbHVlICR7bWlsbGlzZWNvbmRzfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHtcbiAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXIgLSBob3VyIG9mIHRoZSBkYXksIDAtMjNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGUgLSBtaW51dGUgb2YgdGhlIGhvdXIsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kIC0gbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgMC05OTlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRzTm93ID0gU2V0dGluZ3Mubm93KCksXG4gICAgICBvZmZzZXRQcm92aXMgPSAhaXNVbmRlZmluZWQob3B0cy5zcGVjaWZpY09mZnNldClcbiAgICAgICAgPyBvcHRzLnNwZWNpZmljT2Zmc2V0XG4gICAgICAgIDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksXG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLFxuICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3cpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJJU08gODYwMVwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBSRkMgMjgyMiBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSB0aGUgb2Zmc2V0IGlzIGFsd2F5cyBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaW5nLCBtZXJlbHkgdGhlIHpvbmUgdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpcyBleHByZXNzZWQgaW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignRnJpLCAyNSBOb3YgMjAxNiAxMzoyMzoxMiArMDYwMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMyBaJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJGQzI4MjIodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VSRkMyODIyRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlJGQyAyODIyXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUhUVFAodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VIVFRQRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIkhUVFBcIiwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBpbnB1dCBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcuXG4gICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIHRoZSBsaW5rIGJlbG93IGZvciB0aGUgZm9ybWF0cylcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KSxcbiAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBgZm9ybWF0ICR7Zm10fWAsIHRleHQsIHNwZWNpZmljT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWVcbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycsIHsgc2V0Wm9uZTogdHJ1ZSB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzA5OjEyOjM0LjM0MicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21TUUwodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VTUUwodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJTUUxcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLy8gSU5GT1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdkYXknKTsgLy89PiA0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbdW5pdF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjpcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwXG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIERhdGVUaW1lLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3V0cHV0IGNhbGVuZGFyIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2lzbGFtaWMnLiBUaGUgb3V0cHV0IGNhbGVuZGFyIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgZ2V0IHpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3pvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgem9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5uYW1lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnllYXIgLy89PiAyMDE3XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnllYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRoICgxLTEyKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubW9udGggOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLmRheSAvLz0+IDI1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91ciBvZiB0aGUgZGF5ICgwLTIzKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWludXRlIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyKS5zZWNvbmQgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQgKDAtOTk5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDEyLCAzMSkud2Vla1llYXIgLy89PiAyMDE1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgd2VlayB5ZWFyICgxLTUyaXNoKS5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla2RheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcilcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm9yZGluYWwgLy89PiAxNDVcbiAgICogQHR5cGUge251bWJlcnxEYXRlVGltZX1cbiAgICovXG4gIGdldCBvcmRpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoU2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdG9iZXInLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCB3ZWVrZGF5LCBzdWNoIGFzICdNb24nLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5U2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyB3ZWVrZGF5LCBzdWNoIGFzICdNb25kYXknLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgVVRDIG9mZnNldCBvZiB0aGlzIERhdGVUaW1lIGluIG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyArdGhpcy5vIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFU1RcIiBvciBcIkVEVFwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVhc3Rlcm4gU3RhbmRhcmQgVGltZVwiIG9yIFwiRWFzdGVybiBEYXlsaWdodCBUaW1lXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVMb25nKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJsb25nXCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc09mZnNldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUuaXNVbml2ZXJzYWwgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkRTVCgpIHtcbiAgICBpZiAodGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogMSwgZGF5OiAxIH0pLm9mZnNldCB8fFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDUgfSkub2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbiBhIGxlYXAgeWVhciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuaXNJbkxlYXBZZWFyIC8vPT4gZmFsc2VcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkxlYXBZZWFyKCkge1xuICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIG1vbnRoXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDIpLmRheXNJbk1vbnRoIC8vPT4gMjlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJbk1vbnRoKCkge1xuICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJblllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMDQpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbldlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksXG4gICAgICBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKHsgLi4uZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIC4uLm5vcm1hbGl6ZWQgfSk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGFydE9mKHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIG8ud2Vla2RheSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcInF1YXJ0ZXJzXCIpIHtcbiAgICAgIGNvbnN0IHEgPSBNYXRoLmNlaWwodGhpcy5tb250aCAvIDMpO1xuICAgICAgby5tb250aCA9IChxIC0gMSkgKiAzICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXQobyk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGVuZCBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ21vbnRoJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd3ZWVrJykudG9JU08oKTsgLy8gPT4gJzIwMTQtMDMtMDlUMjM6NTk6NTkuOTk5LTA1OjAwJywgd2Vla3Mgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2RheScpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMjM6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBlbmRPZih1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB0aGlzLnBsdXMoeyBbdW5pdF06IDEgfSlcbiAgICAgICAgICAuc3RhcnRPZih1bml0KVxuICAgICAgICAgIC5taW51cygxKVxuICAgICAgOiB0aGlzO1xuICB9XG5cbiAgLy8gT1VUUFVUXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZSBmb3JtYXR0aW5nIHRvb2wuIEZvciBhIHRhYmxlIG9mIHRva2VucyBhbmQgdGhlaXIgaW50ZXJwcmV0YXRpb25zLCBzZWUgW2hlcmVdKGh0dHBzOi8vbW9tZW50LmdpdGh1Yi5pby9sdXhvbi8jL2Zvcm1hdHRpbmc/aWQ9dGFibGUtb2YtdG9rZW5zKS5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdmcicpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJywgeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnXCIpIC8vPT4gJzIwIGhvdXJzIGFuZCA1NSBtaW51dGVzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKG9wdHMpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGRhdGUuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBhbmQgYW55IHByZXNldHMgZGVmaW5lZCBieSBMdXhvbiwgc3VjaCBhcyBgRGF0ZVRpbWUuREFURV9GVUxMYCBvciBgRGF0ZVRpbWUuVElNRV9TSU1QTEVgLlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0XG4gICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDQvMjAvMjAxN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBsb2NhbGU6ICdlbi1nYicgfSk7IC8vPT4gJzIwLzA0LzIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5USU1FX1NJTVBMRSk7IC8vPT4gJzExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ2xvbmcnLCBtb250aDogJ2xvbmcnLCBkYXk6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1cnNkYXksIEFwcmlsIDIwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1LCBBcHIgMjAsIDExOjI3IEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gRm9ybWF0cy5EQVRFX1NIT1JULCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgXCJwYXJ0c1wiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHNcbiAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdXG4gICAqL1xuICB0b0xvY2FsZVBhcnRzKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MywgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKHtcbiAgICBmb3JtYXQgPSBcImV4dGVuZGVkXCIsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBleHRlbmRlZFpvbmUgPSBmYWxzZSxcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiO1xuXG4gICAgbGV0IGMgPSB0b0lTT0RhdGUodGhpcywgZXh0KTtcbiAgICBjICs9IFwiVFwiO1xuICAgIGMgKz0gdG9JU09UaW1lKHRoaXMsIGV4dCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKTtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIGRhdGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxOTgyMDUyNSdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKHsgZm9ybWF0ID0gXCJleHRlbmRlZFwiIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1dlZWtEYXRlKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgXCJra2trLSdXJ1dXLWNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUoe1xuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjID0gaW5jbHVkZVByZWZpeCA/IFwiVFwiIDogXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgYyArXG4gICAgICB0b0lTT1RpbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiLFxuICAgICAgICBzdXBwcmVzc1NlY29uZHMsXG4gICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICAgICAgICBpbmNsdWRlT2Zmc2V0LFxuICAgICAgICBleHRlbmRlZFpvbmVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gUkZDIDI4MjItY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgKzAwMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1JGQzI4MjIoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjFcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSFRUUCgpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgXCJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUxEYXRlKCkgLy89PiAnMjAxNC0wNy0xMydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxEYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRvSVNPRGF0ZSh0aGlzLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMVGltZSh7IGluY2x1ZGVPZmZzZXQgPSB0cnVlLCBpbmNsdWRlWm9uZSA9IGZhbHNlLCBpbmNsdWRlT2Zmc2V0U3BhY2UgPSB0cnVlIH0gPSB7fSkge1xuICAgIGxldCBmbXQgPSBcIkhIOm1tOnNzLlNTU1wiO1xuXG4gICAgaWYgKGluY2x1ZGVab25lIHx8IGluY2x1ZGVPZmZzZXQpIHtcbiAgICAgIGlmIChpbmNsdWRlT2Zmc2V0U3BhY2UpIHtcbiAgICAgICAgZm10ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVab25lKSB7XG4gICAgICAgIGZtdCArPSBcInpcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgICAgICBmbXQgKz0gXCJaWlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgZm10LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldFNwYWNlPXRydWVdIC0gaW5jbHVkZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlIG9mZnNldCwgc3VjaCBhcyAnMDU6MTU6MTYuMzQ1IC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuaGFzU2FtZShvdGhlckRULCAnZGF5Jyk7IC8vfj4gdHJ1ZSBpZiBvdGhlckRUIGlzIGluIHRoZSBzYW1lIGN1cnJlbnQgY2FsZW5kYXIgZGF5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNTYW1lKG90aGVyRGF0ZVRpbWUsIHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpO1xuICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pO1xuICAgIHJldHVybiBhZGp1c3RlZFRvWm9uZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBhZGp1c3RlZFRvWm9uZS5lbmRPZih1bml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRGF0ZVRpbWVzIGFyZSBlcXVhbCBpZmYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbWlsbGlzZWNvbmQsIGhhdmUgdGhlIHNhbWUgem9uZSBhbmQgbG9jYXRpb24sIGFuZCBhcmUgYm90aCB2YWxpZC5cbiAgICogVG8gY29tcGFyZSBqdXN0IHRoZSBtaWxsaXNlY29uZCB2YWx1ZXMsIHVzZSBgK2R0MSA9PT0gK2R0MmAuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1ZhbGlkICYmXG4gICAgICBvdGhlci5pc1ZhbGlkICYmXG4gICAgICB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmXG4gICAgICB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmXG4gICAgICB0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRoaXMgdGltZSByZWxhdGl2ZSB0byBub3csIHN1Y2ggYXMgXCJpbiB0d28gZGF5c1wiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXJcbiAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1cImxvbmdcIl0gLSB0aGUgc3R5bGUgb2YgdW5pdHMsIG11c3QgYmUgXCJsb25nXCIsIFwic2hvcnRcIiwgb3IgXCJuYXJyb3dcIlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIG9yIFwic2Vjb25kc1wiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCJpbiAxIGRheVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnRvUmVsYXRpdmUoeyBkYXlzOiAxIH0pIC8vPT4gXCJkZW50cm8gZGUgMSBkXHUwMEVEYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWFcdTAwRjFhbmFcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGVtYWluXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7IHpvbmU6IHRoaXMuem9uZSB9KSwgdGhpcywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYXV0b1wiLFxuICAgICAgdW5pdHM6IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiXSxcbiAgICAgIGNhbGVuZGFyeTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWluKC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtaW4gcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWF4KTtcbiAgfVxuXG4gIC8vIE1JU0NcblxuICAvKipcbiAgICogRXhwbGFpbiBob3cgYSBzdHJpbmcgd291bGQgYmUgcGFyc2VkIGJ5IGZyb21Gb3JtYXQoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGFrZW4gYnkgZnJvbUZvcm1hdCgpXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0RXhwbGFpbiBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEZPUk1BVCBQUkVTRVRTXG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4M1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX1NIT1JUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX01FRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIE9jdCAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX0ZVTEwoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ1R1ZXNkYXksIE9jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9TSU1QTEU7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX0xPTkdfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMycsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFRFQnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRUQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCAxNCBPY3QgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkge1xuICBpZiAoRGF0ZVRpbWUuaXNEYXRlVGltZShkYXRlVGltZWlzaCkpIHtcbiAgICByZXR1cm4gZGF0ZVRpbWVpc2g7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIHR5cGVvZiBkYXRlVGltZWlzaCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KGRhdGVUaW1laXNoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgVW5rbm93biBkYXRldGltZSBhcmd1bWVudDogJHtkYXRlVGltZWlzaH0sIG9mIHR5cGUgJHt0eXBlb2YgZGF0ZVRpbWVpc2h9YFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuXG4vKiogVGVzdC1lbnZpcm9ubWVudC1mcmllbmRseSBmdW5jdGlvbiB3aGljaCBmZXRjaGVzIHRoZSBjdXJyZW50IHN5c3RlbSBsb2NhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJlbi1VU1wiO1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlO1xufVxuXG4vLyBEYXRlL1RpbWUgUmVuZGVyaW5nXG5cbi8qKiBOb3JtYWxpemUgYSBkdXJhdGlvbiB0byBhbGwgb2YgdGhlIHByb3BlciB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEdXJhdGlvbihkdXI6IER1cmF0aW9uKSB7XG4gICAgaWYgKGR1ciA9PT0gdW5kZWZpbmVkIHx8IGR1ciA9PT0gbnVsbCkgcmV0dXJuIGR1cjtcblxuICAgIHJldHVybiBkdXIuc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKS5ub3JtYWxpemUoKTtcbn1cblxuLyoqIFN0cmlwIHRoZSB0aW1lIGNvbXBvbmVudHMgb2YgYSBkYXRlIHRpbWUgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVGltZShkdDogRGF0ZVRpbWUpOiBEYXRlVGltZSB7XG4gICAgaWYgKGR0ID09PSBudWxsIHx8IGR0ID09PSB1bmRlZmluZWQpIHJldHVybiBkdDtcblxuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgeWVhcjogZHQueWVhcixcbiAgICAgICAgbW9udGg6IGR0Lm1vbnRoLFxuICAgICAgICBkYXk6IGR0LmRheSxcbiAgICB9KTtcbn1cblxuLyoqIFRyeSB0byBleHRyYWN0IGEgWVlZWU1NREQgZGF0ZSBmcm9tIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlKHN0cjogc3RyaW5nKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlTWF0Y2ggPSAvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIWRhdGVNYXRjaCkgZGF0ZU1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmIChkYXRlTWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXIgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzFdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gTnVtYmVyLnBhcnNlSW50KGRhdGVNYXRjaFsyXSk7XG4gICAgICAgIGxldCBkYXkgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzNdKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW5kZXIgYSBEYXRlVGltZSBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbERhdGUodGltZTogRGF0ZVRpbWUsIGRhdGVGb3JtYXQ6IHN0cmluZywgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyByZWxldmFudCB0aW1lIHNwZWNpZmllZCwgZmFsbCBiYWNrIHRvIGp1c3QgcmVuZGVyaW5nIHRoZSBkYXRlLlxuICAgIGlmICh0aW1lLnNlY29uZCA9PSAwICYmIHRpbWUubWludXRlID09IDAgJiYgdGltZS5ob3VyID09IDApIHtcbiAgICAgICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVGb3JtYXQsIHsgbG9jYWxlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aW1lLnRvTG9jYWwoKS50b0Zvcm1hdChkYXRlVGltZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG59XG5cbi8qKiBSZW5kZXIgYSBkdXJhdGlvbiBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbER1cmF0aW9uKGR1cjogRHVyYXRpb24pOiBzdHJpbmcge1xuICAgIGR1ciA9IG5vcm1hbGl6ZUR1cmF0aW9uKGR1cik7XG5cbiAgICAvLyBUT0RPOiBMdXhvbiBkb2VzIG5vdCBoYXZlIG11bHRpLWxpbmd1YWwvbG9jYWxlLWF3YXJlIGR1cmF0aW9uIHJlbmRlcmluZy5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBpZiAoZHVyLnllYXJzKSByZXN1bHQgKz0gYCR7ZHVyLnllYXJzfSB5ZWFycywgYDtcbiAgICBpZiAoZHVyLm1vbnRocykgcmVzdWx0ICs9IGAke2R1ci5tb250aHN9IG1vbnRocywgYDtcbiAgICBpZiAoZHVyLndlZWtzKSByZXN1bHQgKz0gYCR7ZHVyLndlZWtzfSB3ZWVrcywgYDtcbiAgICBpZiAoZHVyLmRheXMpIHJlc3VsdCArPSBgJHtkdXIuZGF5c30gZGF5cywgYDtcbiAgICBpZiAoZHVyLmhvdXJzKSByZXN1bHQgKz0gYCR7ZHVyLmhvdXJzfSBob3VycywgYDtcbiAgICBpZiAoZHVyLm1pbnV0ZXMpIHJlc3VsdCArPSBgJHtkdXIubWludXRlc30gbWludXRlcywgYDtcbiAgICBpZiAoZHVyLnNlY29uZHMpIHJlc3VsdCArPSBgJHtNYXRoLnJvdW5kKGR1ci5zZWNvbmRzKX0gc2Vjb25kcywgYDtcbiAgICBpZiAoZHVyLm1pbGxpc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLm1pbGxpc2Vjb25kcyl9IG1zLCBgO1xuXG4gICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIiwgXCIpKSByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBQYXRoIHV0aWxpdGllcy5cblxuLyoqIEdldCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHBhdGggKGkuZS4sIGxpa2UgY29tcHV0aW5nICdwYXRoLy4uJykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50Rm9sZGVyKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbn1cblxuLyoqIEdldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgZmlsZSByZWZlcmVuY2VkIGluIHRoZSBnaXZlbiBwYXRoLCBieSBzdHJpcHBpbmcgdGhlIHBhcmVudCBmb2xkZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguaW5jbHVkZXMoXCIvXCIpID8gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIFwidGl0bGVcIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiL1wiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIubWRcIikpIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG4vKiogR2V0IHRoZSBleHRlbnNpb24gb2YgYSBmaWxlIGZyb20gdGhlIGZpbGUgcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXBhdGguaW5jbHVkZXMoXCIuXCIpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi5cIikgKyAxKTtcbn1cblxuLy8gVGFnIGV4dHJhY3Rpb24uXG5cbi8qKiBQYXJzZSBhbGwgc3VidGFncyBvdXQgb2YgdGhlIGdpdmVuIHRhZy4gSS5lLiwgI2hlbGxvL2kvYW0gd291bGQgeWllbGQgWyNoZWxsby9pL2FtLCAjaGVsbG8vaSwgI2hlbGxvXS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3VidGFncyh0YWdzOiBzdHJpbmcgfCBJdGVyYWJsZTxzdHJpbmc+KTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCB0YWcgb2YgdHlwZW9mIHRhZ3MgPT09IFwic3RyaW5nXCIgPyBbdGFnc10gOiB0YWdzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRhZyk7XG4gICAgICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICB0YWcgPSB0YWcuc3Vic3RyaW5nKDAsIHRhZy5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBTcGxpdCBlYWNoIGJsb2NrIGFuZCBzZWN0aW9uIGxpbmsgaW50byB0aGUgb3JpZ2luYWwgbGluayBhbmQgYSBjb3JyZXNwb25kaW5nIGZpbGUgbGluay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsZUxpbmtzKGVsaW5rczogTGlua1tdKTogTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IExpbmtbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBlbGlua3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGluayk7XG5cbiAgICAgICAgY29uc3QgZmlsZUxpbmsgPSBsaW5rLnRvRmlsZSgpO1xuICAgICAgICBpZiAobGluay50eXBlICE9IFwiZmlsZVwiICYmICFyZXN1bHQuZmluZCgoZXhpc3RpbmcpID0+IGV4aXN0aW5nLmVxdWFscyhmaWxlTGluaykpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChmaWxlTGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBTdHJpbmcgZXNjYXBpbmcgYW5kIGNhbm9uaWNhbGl6YXRpb24uXG5cbi8qKlxuICogRXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9SZWd1bGFyX0V4cHJlc3Npb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuY29uc3QgSEVBREVSX0NBTk9OSUNBTElaRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcIlwiKSksXG4gICAgUC5yZWdleCgvWzAtOVxccHtMZXR0ZXJ9Xy1dKy91KSxcbiAgICBQLndoaXRlc3BhY2UubWFwKChfKSA9PiBcIiBcIiksXG4gICAgUC5hbnkubWFwKChfKSA9PiBcIiBcIilcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbihcIlwiKS5zcGxpdCgvXFxzKy8pLmpvaW4oXCIgXCIpLnRyaW0oKTtcbiAgICB9KTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0ZXh0IGluIGEgaGVhZGVyIHRvIGJlIHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IGxpbmthYmxlIHRvLiBUaGlzIG1pbWljc1xuICogaG93IE9ic2lkaWFuIGRvZXMgaXQncyBub3JtYWxpemF0aW9uLCBjb2xsYXBzaW5nIHJlcGVhdGVkIHNwYWNlcyBhbmQgc3RyaXBwaW5nIG91dCBjb250cm9sIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSEVBREVSX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UoaGVhZGVyKTtcbn1cblxuLy8gRmFzdCBleHRyYWN0aW9uIG9mIGxpbmUgcmFuZ2VzIGZyb20gbGFyZ2UgcGllY2VzIG9mIHRleHQuXG5cbi8qKiBVcGRhdGUgdGhlIGxpbmUgcmFuZ2UgZnJvbSBbc3RhcnQsIGVuZCkgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVJlcGxhY2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZnVuYzogKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbZGF0YSwgb2Zmc2V0XSA9IGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpO1xuICAgIGlmICghb2Zmc2V0KSByZXR1cm4gdGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGRhdGEuc3Vic3RyaW5nKDAsIG9mZnNldC5zdGFydCkgKyBmdW5jKGRhdGEuc3Vic3RyaW5nKG9mZnNldC5zdGFydCwgb2Zmc2V0LmVuZCkpICsgZGF0YS5zdWJzdHJpbmcob2Zmc2V0LmVuZClcbiAgICApO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKSwgYXMgd2VsbCBhcyB0aGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVNwYW4oXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXJcbik6IFtzdHJpbmcsIHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB8IHVuZGVmaW5lZF0ge1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuICAgIGVuZCA9IE1hdGgubWF4KGVuZCwgMCk7XG5cbiAgICBpZiAoc3RhcnQgPj0gZW5kKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICAvLyBTdGFydCBieSBmaW5kaW5nIHRoZSBzdGFydGluZyBsaW5lIG9mZnNldC5cbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCAwLCBzdGFydCk7XG4gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IC0xKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBza2lwTmV3bGluZXModGV4dCwgc3RhcnRPZmZzZXQsIGVuZCAtIHN0YXJ0KTtcbiAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogdGV4dC5sZW5ndGggfV07XG4gICAgZWxzZSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxKSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogZW5kT2Zmc2V0IC0gMSB9XTtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIGxpbmVzIGluIHRoZSByYW5nZSBbc3RhcnQsIGVuZCkuIFN0YXJ0IGlzIGluY2x1c2l2ZSwgZW5kIGlzIGV4Y2x1c2l2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFuZ2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpWzBdO1xufVxuXG4vKiogU2tpcCB7Y291bnR9IHRvdGFsIG5ld2xpbmVzLCByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHtjb3VudH0gbGluZXMgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4gSWYgY291bnQgaXMgMCwgdGhlIGluaXRpYWwgb2Zmc2V0IGlzIHJldHVybmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBOZXdsaW5lcyh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gc3RhcnQ7XG5cbiAgICBsZXQgcG9zaXRpb24gPSBzdGFydDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIHBvc2l0aW9uID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09IC0xKSByZXR1cm4gLTE7XG5cbiAgICAgICAgY291bnQtLTtcbiAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuXHQvLyBodHRwczovL210aHMuYmUvZW1vamlcblx0cmV0dXJuIC9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZEM1xcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E1KT98XFx1MjZGOSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjQzXFx1REY0NS1cXHVERjRBXFx1REY0Qy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGNDQoPzpcXHUyMDBEXFx1RDgzRFxcdURGRUIpP3xcXHVERjRCKD86XFx1MjAwRFxcdUQ4M0RcXHVERkU5KT98XFx1REZDMyg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT98XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkVcXHVEQzcwXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0XFx1REVCNV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0MVxcdURFNDNcXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzA4KD86XFx1MjAwRFxcdTJCMUIpP3xcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMyNig/OlxcdTIwMEQoPzpcXHUyQjFCfFxcdUQ4M0RcXHVERDI1KSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNkYoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REQ3NSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REUyRSg/OlxcdTIwMERcXHVEODNEXFx1RENBOCk/fFxcdURFMzUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQUIpP3xcXHVERTM2KD86XFx1MjAwRFxcdUQ4M0NcXHVERjJCXFx1RkUwRj8pP3xcXHVERTQyKD86XFx1MjAwRFtcXHUyMTk0XFx1MjE5NV1cXHVGRTBGPyk/fFxcdURFQjYoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/KXxcXHVEODNFKD86W1xcdUREMENcXHVERDBGXFx1REQxOC1cXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVcXHVERUMzLVxcdURFQzVcXHVERUYwXFx1REVGMi1cXHVERUY4XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERDI2XFx1REQzNVxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENEXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERTg4XFx1REU5MC1cXHVERUJEXFx1REVCRi1cXHVERUMyXFx1REVDRS1cXHVERURCXFx1REVFMC1cXHVERUU4XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEREQxXFx1MjAwRFxcdUQ4M0VcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT98XFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/KSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IHtcbiAgICBCaW5hcnlPcCxcbiAgICBFeHByZXNzaW9uLFxuICAgIEV4cHJlc3Npb25zLFxuICAgIExhbWJkYUV4cHJlc3Npb24sXG4gICAgTGlzdEV4cHJlc3Npb24sXG4gICAgTGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgT2JqZWN0RXhwcmVzc2lvbixcbiAgICBWYXJpYWJsZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHtcbiAgICBJbmRleENoaWxkT2YsXG4gICAgSW5kZXhQYXRoLFxuICAgIEluZGV4SWQsXG4gICAgSW5kZXhOb3QsXG4gICAgSW5kZXhQYXJlbnRPZixcbiAgICBJbmRleFF1ZXJ5LFxuICAgIEluZGV4VGFnZ2VkLFxuICAgIEluZGV4VHlwZWQsXG4gICAgSW5kZXhMaW5rZWQsXG4gICAgSW5kZXhGaWVsZCxcbiAgICBJbmRleEV4cHJlc3Npb24sXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUGFyc2luZyBQcmltaXRpdmVzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFByaW1pdGl2ZSBwYXJzaW5nIGZvciBjb21tb25seSBzZWVuIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVzTGFuZ3VhZ2Uge1xuICAgIG51bWJlcjogbnVtYmVyO1xuICAgIHN0cmluZzogc3RyaW5nO1xuICAgIGVzY2FwZUNoYXJhY3Rlcjogc3RyaW5nO1xuICAgIGJvb2w6IGJvb2xlYW47XG4gICAgdGFnOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGxpbms6IExpbms7XG4gICAgZW1iZWRMaW5rOiBMaW5rO1xuICAgIHJvb3REYXRlOiBEYXRlVGltZTtcbiAgICBkYXRlU2hvcnRoYW5kOiBrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTO1xuICAgIGRhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVQbHVzOiBEYXRlVGltZTtcbiAgICBkdXJhdGlvblR5cGU6IGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUztcbiAgICBkdXJhdGlvbjogRHVyYXRpb247XG4gICAgcmF3TnVsbDogc3RyaW5nO1xuXG4gICAgYmluYXJ5UGx1c01pbnVzOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlNdWxEaXY6IEJpbmFyeU9wO1xuICAgIGJpbmFyeUNvbXBhcmVPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5QW5kT3A6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU9yT3A6IEJpbmFyeU9wO1xuXG4gICAgLy8gTGl0ZXJhbCBmaWVsZCBwYXJzaW5nIGZvciBpbmdlc3RpbmcgaW5saW5lIGZpZWxkcyBhbmQgZnJvbnRtYXR0ZXIuXG4gICAgYXRvbUlubGluZUZpZWxkOiBMaXRlcmFsO1xuICAgIGlubGluZUZpZWxkTGlzdDogTGl0ZXJhbFtdO1xuICAgIGlubGluZUZpZWxkOiBMaXRlcmFsO1xufVxuXG4vKiogSW1wbGVtZW50YXRpb25zIGZvciBtYW55IHByaW1pdGl2ZXMuICovXG5leHBvcnQgY29uc3QgUFJJTUlUSVZFUyA9IFAuY3JlYXRlTGFuZ3VhZ2U8UHJpbWl0aXZlc0xhbmd1YWdlPih7XG4gICAgbnVtYmVyOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLy0/WzAtOV0rKFxcLlswLTldKyk/LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSlcbiAgICAgICAgICAgIC5kZXNjKFwibnVtYmVyXCIpLFxuXG4gICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1xcJykuXG4gICAgc3RyaW5nOiAocSkgPT5cbiAgICAgICAgUC5zdHJpbmcoJ1wiJylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIFAuYWx0KHEuZXNjYXBlQ2hhcmFjdGVyLCBQLm5vbmVPZignXCJcXFxcJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdExlYXN0KDApXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoYXJzKSA9PiBjaGFycy5qb2luKFwiXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNraXAoUC5zdHJpbmcoJ1wiJykpXG4gICAgICAgICAgICAuZGVzYyhcInN0cmluZ1wiKSxcblxuICAgIGVzY2FwZUNoYXJhY3RlcjogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiXFxcXFwiKVxuICAgICAgICAgICAgLnRoZW4oUC5hbnkpXG4gICAgICAgICAgICAubWFwKChlc2NhcGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICdcIicpIHJldHVybiAnXCInO1xuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09PSBcIlxcXFxcIikgcmV0dXJuIFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXFxcXFwiICsgZXNjYXBlZDtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuXG4gICAgYm9vbDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiYm9vbGVhblwiKSxcblxuICAgIC8vIEEgdGFnIG9mIHRoZSBmb3JtICcjc3R1ZmYvaGVsbG8tdGhlcmUnLlxuICAgIHRhZzogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIjXCIpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1teXFx1MjAwMC1cXHUyMDZGXFx1MkUwMC1cXHUyRTdGJyFcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxbXFxdXFxcXFxcc10vKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ0YWdcIiksXG5cbiAgICAvLyBBIHZhcmlhYmxlIGlkZW50aWZpZXIsIHdoaWNoIGlzIGFscGhhbnVtZXJpYyBhbmQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yLi4uIGVtb2ppLlxuICAgIGlkZW50aWZpZXI6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bXFxwe0xldHRlcn0kXS91KSwgUC5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoXCJ0ZXh0XCIpKSxcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn0kXy1dL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLm1hbnkoKSxcbiAgICAgICAgICAgIChmaXJzdCwgcmVzdCkgPT4gZmlyc3QgKyByZXN0LmpvaW4oXCJcIilcbiAgICAgICAgKS5kZXNjKFwidmFyaWFibGVcIiksXG5cbiAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uXG4gICAgbGluazogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXFtcXFsoW15cXFtcXF1dKj8pXFxdXFxdL3UsIDEpXG4gICAgICAgICAgICAubWFwKChsaW5rSW5uZXIpID0+IExpbmsucGFyc2VJbm5lcihsaW5rSW5uZXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBBbiBlbWJlZGRhYmxlIGxpbmsgd2hpY2ggY2FuIHN0YXJ0IHdpdGggJyEnLiBUaGlzIG92ZXJsYXBzIHdpdGggdGhlIG5vcm1hbCBuZWdhdGlvbiBvcGVyYXRvciwgc28gaXQgaXMgb25seVxuICAgIC8vIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBwYXJzaW5nLlxuICAgIGVtYmVkTGluazogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHtcbiAgICAgICAgICAgIGlmIChwLmxlbmd0aCA+IDApIGwuZW1iZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIH0pLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci5cbiAgICBiaW5hcnlQbHVzTWludXM6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvXFwrfC0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicrJyBvciAnLSdcIiksXG5cbiAgICAvLyBCaW5hcnkgdGltZXMgb3IgZGl2aWRlIG9wZXJhdG9yLlxuICAgIGJpbmFyeU11bERpdjogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCp8XFwvfCUvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicqJyBvciAnLycgb3IgJyUnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5Q29tcGFyZU9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLz49fDw9fCE9fD58PHw9LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gc3RyIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInPj0nIG9yICc8PScgb3IgJyE9JyBvciAnPScgb3IgJz4nIG9yICc8J1wiKSxcblxuICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLlxuICAgIGJpbmFyeUFuZE9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL2FuZHwmL2kpXG4gICAgICAgICAgICAubWFwKChfc3RyKSA9PiBcIiZcIiBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJ2FuZCdcIiksXG4gICAgYmluYXJ5T3JPcDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9vcnxcXHwvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwifFwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInb3InXCIpLFxuXG4gICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uXG4gICAgcm9vdERhdGU6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChQLnJlZ2V4cCgvXFxkezR9LyksIFAuc3RyaW5nKFwiLVwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoeWVhciwgXywgbW9udGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTtcbiAgICAgICAgfSkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVwiKSxcbiAgICBkYXRlU2hvcnRoYW5kOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEQVRFX1NIT1JUSEFORFMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTPixcbiAgICBkYXRlOiAocSkgPT5cbiAgICAgICAgY2hhaW5PcHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5yb290RGF0ZSxcbiAgICAgICAgICAgICh5bTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBkYXkpID0+IHltLnNldCh7IGRheTogTnVtYmVyLnBhcnNlSW50KGRheSkgfSkpLFxuICAgICAgICAgICAgKHltZDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJUXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSxcbiAgICAgICAgICAgICh5bWRoOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh5bWRobTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCI6XCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgIHltZGhtLnNldCh7IHNlY29uZDogTnVtYmVyLnBhcnNlSW50KHNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtczogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUC5yZWdleHAoL1xcZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB5bWRobXMuc2V0KHsgbWlsbGlzZWNvbmQ6IE51bWJlci5wYXJzZUludChtaWxsaXNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zdWNjZWVkKHltZGhtcykgLy8gcGFzc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZHQ6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIitcIikub3IoUC5zdHJpbmcoXCItXCIpKSwgUC5yZWdleHAoL1xcZHsxLDJ9KDpcXGR7Mn0pPy8pLCAocG0sIGhyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZShcIlVUQ1wiICsgcG0gKyBociwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiWlwiKSwgKCkgPT4gZHQuc2V0Wm9uZShcInV0Y1wiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIltcIiksIFAucmVnZXhwKC9bMC05QS1aYS16Ky1cXC9dKy91KSwgUC5zdHJpbmcoXCJdXCIpLCAoX2EsIHpvbmUsIF9iKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLmFzc2VydCgoZHQ6IERhdGVUaW1lKSA9PiBkdC5pc1ZhbGlkLCBcInZhbGlkIGRhdGVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuXG4gICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS5cbiAgICBkYXRlUGx1czogKHEpID0+XG4gICAgICAgIFAuYWx0PERhdGVUaW1lPihcbiAgICAgICAgICAgIHEuZGF0ZVNob3J0aGFuZC5tYXAoKGQpID0+IERBVEVfU0hPUlRIQU5EU1tkXSgpKSxcbiAgICAgICAgICAgIHEuZGF0ZVxuICAgICAgICApLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXCIpLFxuXG4gICAgLy8gQSBkdXJhdGlvbiBvZiB0aW1lLlxuICAgIGR1cmF0aW9uVHlwZTogKF8pID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoRFVSQVRJT05fVFlQRVMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgRFVSQVRJT05fVFlQRVM+LFxuICAgIGR1cmF0aW9uOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5udW1iZXIsIFAub3B0V2hpdGVzcGFjZSwgcS5kdXJhdGlvblR5cGUsIChjb3VudCwgXywgdCkgPT5cbiAgICAgICAgICAgIERVUkFUSU9OX1RZUEVTW3RdLm1hcFVuaXRzKCh4KSA9PiB4ICogY291bnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXBCeTEoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5vcihQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgLm1hcCgoZHVyYXRpb25zKSA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvbiBsaWtlIDRocjJtaW5cIiksXG5cbiAgICAvLyBBIHJhdyBudWxsIHZhbHVlLlxuICAgIHJhd051bGw6IChfKSA9PiBQLnN0cmluZyhcIm51bGxcIiksXG5cbiAgICAvLyBJbmxpbmUgZmllbGQgdmFsdWUgcGFyc2luZy5cbiAgICBhdG9tSW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIHEuZGF0ZSxcbiAgICAgICAgICAgIHEuZHVyYXRpb24ubWFwKChkKSA9PiBub3JtYWxpemVEdXJhdGlvbihkKSksXG4gICAgICAgICAgICBxLnN0cmluZyxcbiAgICAgICAgICAgIHEudGFnLFxuICAgICAgICAgICAgcS5lbWJlZExpbmssXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEucmF3TnVsbFxuICAgICAgICApLFxuICAgIGlubGluZUZpZWxkTGlzdDogKHEpID0+IHEuYXRvbUlubGluZUZpZWxkLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKHEuYXRvbUlubGluZUZpZWxkKSksXG4gICAgaW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIFAuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PlxuICAgICAgICAgICAgICAgIFtmXS5jb25jYXQobClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxLmF0b21JbmxpbmVGaWVsZFxuICAgICAgICApLFxufSk7XG5cbi8qKiBFbW9qaSByZWdleCwgc3RycHBpbmcgYW55IHJlZ2V4IGZsYWdzIGl0IGhhcy4gKi9cbmNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpO1xuXG4vKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqL1xuZXhwb3J0IGNvbnN0IERVUkFUSU9OX1RZUEVTID0ge1xuICAgIHllYXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5ZWFyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHlyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG5cbiAgICBtb250aDogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb250aHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW86IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW9zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuXG4gICAgd2VlazogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdlZWtzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2s6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3a3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3OiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG5cbiAgICBkYXk6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGRheXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuXG4gICAgaG91cjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhvdXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaHI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG5cbiAgICBtaW51dGU6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbnV0ZXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbjogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG5cbiAgICBzZWNvbmQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlY29uZHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlYzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG59O1xuXG4vKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovXG5leHBvcnQgY29uc3QgREFURV9TSE9SVEhBTkRTID0ge1xuICAgIG5vdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKSxcbiAgICB0b2RheTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwiZGF5XCIpLFxuICAgIHllc3RlcmRheTogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5taW51cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgdG9tb3Jyb3c6ICgpID0+XG4gICAgICAgIERhdGVUaW1lLmxvY2FsKClcbiAgICAgICAgICAgIC5zdGFydE9mKFwiZGF5XCIpXG4gICAgICAgICAgICAucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgc293OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIFwic3RhcnQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIGVvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIndlZWtcIiksXG4gICAgXCJlbmQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBzb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgXCJzdGFydC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgZW95OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwieWVhclwiKSxcbiAgICBcImVuZC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIHNvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwibW9udGhcIiksXG4gICAgXCJzdGFydC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBlb206ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbiAgICBcImVuZC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwibW9udGhcIiksXG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBFeHByZXNzaW9uIExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFBvc3RmaXhGcmFnbWVudCA9XG4gICAgfCB7IHR5cGU6IFwiZG90XCI7IGV4cHI6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiaW5kZXhcIjsgZXhwcjogRXhwcmVzc2lvbiB9XG4gICAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgZXhwcnM6IEV4cHJlc3Npb25bXSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cHJlc3Npb25MYW5ndWFnZSB7XG4gICAgdmFyaWFibGU6IFZhcmlhYmxlRXhwcmVzc2lvbjtcbiAgICBudW1iZXI6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGJvb2w6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIHN0cmluZzogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZGF0ZTogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZHVyYXRpb246IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGxpbms6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIG51bGw6IExpdGVyYWxFeHByZXNzaW9uO1xuXG4gICAgbGlzdDogTGlzdEV4cHJlc3Npb247XG4gICAgb2JqZWN0OiBPYmplY3RFeHByZXNzaW9uO1xuXG4gICAgbmVnYXRlZDogRXhwcmVzc2lvbjtcbiAgICBhdG9tOiBFeHByZXNzaW9uO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGxhbWJkYTogTGFtYmRhRXhwcmVzc2lvbjtcblxuICAgIC8vIFBvc3RmaXggcGFyc2VycyBmb3IgZnVuY3Rpb24gY2FsbHMgJiB0aGUgbGlrZS5cbiAgICBkb3RQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgaW5kZXhQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgZnVuY3Rpb25Qb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG5cbiAgICAvLyBCaW5hcnkgb3AgcGFyc2Vycy5cbiAgICBiaW5hcnlNdWxEaXY6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5UGx1c01pbnVzOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeUNvbXBhcmU6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Qm9vbGVhbjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlPcDogRXhwcmVzc2lvbjtcbiAgICBwYXJlbnM6IEV4cHJlc3Npb247XG4gICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBmb3IgdGhlIGRhdGFjb3JlIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIHdoaWNoIHByb3ZpZGVzIHNpbXBsZSBhbmQgdmFndWVseSBKUy1sb29raW5nIGNvbXB1dGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRVhQUkVTU0lPTiA9IFAuY3JlYXRlTGFuZ3VhZ2U8RXhwcmVzc2lvbkxhbmd1YWdlPih7XG4gICAgLy8gRmllbGQgcGFyc2luZy5cbiAgICB2YXJpYWJsZTogKF8pID0+IFBSSU1JVElWRVMuaWRlbnRpZmllci5tYXAoRXhwcmVzc2lvbnMudmFyaWFibGUpLmRlc2MoXCJ2YXJpYWJsZVwiKSxcbiAgICBudW1iZXI6IChfKSA9PiBQUklNSVRJVkVTLm51bWJlci5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcIm51bWJlclwiKSxcbiAgICBzdHJpbmc6IChfKSA9PiBQUklNSVRJVkVTLnN0cmluZy5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcInN0cmluZ1wiKSxcbiAgICBib29sOiAoXykgPT4gUFJJTUlUSVZFUy5ib29sLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwiYm9vbGVhblwiKSxcbiAgICBkYXRlOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkYXRlXCIsIFBSSU1JVElWRVMuZGF0ZVBsdXMpXG4gICAgICAgICAgICAubWFwKChbX2Z1bmMsIGRhdGVdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGRhdGUpKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlXCIpLFxuICAgIGR1cmF0aW9uOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkdXJcIiwgUFJJTUlUSVZFUy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZHVyXSkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChkdXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvblwiKSxcbiAgICBudWxsOiAoXykgPT4gUFJJTUlUSVZFUy5yYXdOdWxsLm1hcCgoXykgPT4gRXhwcmVzc2lvbnMuTlVMTCksXG4gICAgbGluazogKF8pID0+IFBSSU1JVElWRVMubGluay5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCksXG4gICAgbGlzdDogKHEpID0+XG4gICAgICAgIHEuZXhwcmVzc2lvblxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIltcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIl1cIikpKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGlzdChsKSlcbiAgICAgICAgICAgIC5kZXNjKFwibGlzdFwiKSxcbiAgICBvYmplY3Q6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZyksXG4gICAgICAgICAgICBQLnN0cmluZyhcIjpcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgKG5hbWUsIF9zZXAsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIntcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIn1cIikpKVxuICAgICAgICAgICAgLm1hcCgodmFscykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdmFscykgcmVzW2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb25zLm9iamVjdChyZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZXNjKFwib2JqZWN0ICgneyBhOiAxLCBiOiAyIH0nKVwiKSxcblxuICAgIGF0b206IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC8vIFBsYWNlIGVtYmVkIGxpbmtzIGFib3ZlIG5lZ2F0ZWQgZmllbGRzIGFzIHRoZXkgYXJlIHRoZSBzcGVjaWFsIHBhcnNlciBjYXNlICchW1t0aGluZ11dJyBhbmQgYXJlIGdlbmVyYWxseSB1bmFtYmlnaW91cy5cbiAgICAgICAgICAgIFBSSU1JVElWRVMuZW1iZWRMaW5rLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChsKSksXG4gICAgICAgICAgICBxLm5lZ2F0ZWQsXG4gICAgICAgICAgICBxLmxpbmssXG4gICAgICAgICAgICBxLmxpc3QsXG4gICAgICAgICAgICBxLm9iamVjdCxcbiAgICAgICAgICAgIHEubGFtYmRhLFxuICAgICAgICAgICAgcS5wYXJlbnMsXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbixcbiAgICAgICAgICAgIHEubnVsbCxcbiAgICAgICAgICAgIHEudmFyaWFibGVcbiAgICAgICAgKSxcbiAgICBpbmRleDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKHEuYXRvbSwgUC5hbHQocS5kb3RQb3N0Zml4LCBxLmluZGV4UG9zdGZpeCwgcS5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwgKG9iaiwgcG9zdGZpeGVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICAgICAgZm9yIChsZXQgcG9zdCBvZiBwb3N0Zml4ZXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZG90XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocG9zdC5leHByKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIHBvc3QuZXhwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5mdW5jKHJlc3VsdCwgcG9zdC5leHBycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgIG5lZ2F0ZWQ6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIiFcIiksIHEuaW5kZXgsIChfLCBmaWVsZCkgPT4gRXhwcmVzc2lvbnMubmVnYXRlKGZpZWxkKSkuZGVzYyhcIm5lZ2F0ZWQgZmllbGRcIiksXG4gICAgcGFyZW5zOiAocSkgPT4gcS5leHByZXNzaW9uLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBsYW1iZGE6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIC5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiKFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIFAuc3RyaW5nKFwiKVwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCI9PlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAoaWRlbnQsIF9pZ25vcmUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsYW1iZGFcIiwgYXJndW1lbnRzOiBpZGVudCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIGRvdFBvc3RmaXg6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIi5cIiksIFBSSU1JVElWRVMuaWRlbnRpZmllciwgKF8sIGV4cHIpID0+ICh7IHR5cGU6IFwiZG90XCIsIGV4cHIgfSkpLFxuICAgIGluZGV4UG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJbXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJdXCIpLFxuICAgICAgICAgICAgKF8sIF8yLCBleHByLCBfMywgXzQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImluZGV4XCIsIGV4cHIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBmdW5jdGlvblBvc3RmaXg6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKFwiKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbi5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKVwiKSxcbiAgICAgICAgICAgIChfLCBfMSwgZXhwcnMsIF8yLCBfMykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgZXhwcnMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIC8vIFRoZSBwcmVjZWRlbmNlIGhpZXJhcmNoeSBvZiBvcGVyYXRvcnMgLSBtdWx0aXBseS9kaXZpZGUsIGFkZC9zdWJ0cmFjdCwgY29tcGFyZSwgYW5kIHRoZW4gYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgIGJpbmFyeU11bERpdjogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmluZGV4LCBQUklNSVRJVkVTLmJpbmFyeU11bERpdiwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeVBsdXNNaW51czogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdiwgUFJJTUlUSVZFUy5iaW5hcnlQbHVzTWludXMsIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlDb21wYXJlOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5UGx1c01pbnVzLCBQUklNSVRJVkVTLmJpbmFyeUNvbXBhcmVPcCwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUJvb2xlYW46IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlDb21wYXJlLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLm9yKFBSSU1JVElWRVMuYmluYXJ5T3JPcCksIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlPcDogKHEpID0+IHEuYmluYXJ5Qm9vbGVhbixcblxuICAgIGV4cHJlc3Npb246IChxKSA9PiBxLmJpbmFyeU9wLFxufSk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBRdWVyeSBMYW5ndWFnZSAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFN1cHBvcnRlZCB0eXBlcyBpbiB0aGUgZ3JhbW1hciBmb3IgaW5kZXggcXVlcmllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlMYW5ndWFnZSB7XG4gICAgcXVlcnlUYWc6IEluZGV4VGFnZ2VkO1xuICAgIHF1ZXJ5SWQ6IEluZGV4SWQ7XG4gICAgcXVlcnlUeXBlOiBJbmRleFR5cGVkO1xuICAgIHF1ZXJ5UGF0aDogSW5kZXhQYXRoO1xuICAgIHF1ZXJ5UGFyZW50T2Y6IEluZGV4UGFyZW50T2Y7XG4gICAgcXVlcnlDaGlsZE9mOiBJbmRleENoaWxkT2Y7XG4gICAgcXVlcnlTaW1wbGVMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5TGlua2VkOiBJbmRleExpbmtlZDtcbiAgICBxdWVyeUV4aXN0czogSW5kZXhGaWVsZDtcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeVJhd0V4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeU5lZ2F0ZTogSW5kZXhOb3Q7XG4gICAgcXVlcnlQYXJlbnM6IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBdG9tOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5QW5kczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeU9yczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbn1cblxuLyoqXG4gKiBQYXJzZXIgZm9yIHRoZSBxdWVyeSBsYW5ndWFnZS4gRGlkIEkgcmVhbGx5IG5lZWQgYSBxdWVyeSBsYW5ndWFnZSBpbnN0ZWFkIG9mIGp1c3QgYSBiZXR0ZXIgVUk/IFByb2JhYmx5IG5vdC5cbiAqIEJ1dCBxdWVyeSBsYW5ndWFnZXMgYXJlIGZ1biBmb3IgdGhlIHdob2xlIGZhbWlseSBhbmQgYXQgc29tZSBwb2ludCB5b3UgZ2V0IHNvIHVzZWQgdG8gd3JpdGluZyB0aGVtIHRoYXRcbiAqIHlvdSBkb24ndCBzdG9wIHRvIHRoaW5rIGlmIHlvdSAqbmVlZCogdG8gd3JpdGUgdGhlbSBhbnltb3JlLiBJdCdzIGdvb2QgdHlwaW5nIHByYWN0aWNlIGZvciBldmVyeW9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVRVJZID0gUC5jcmVhdGVMYW5ndWFnZTxRdWVyeUxhbmd1YWdlPih7XG4gICAgcXVlcnlUYWc6IChfKSA9PiBQUklNSVRJVkVTLnRhZy5tYXAoKHZhbHVlKSA9PiAoeyB0eXBlOiBcInRhZ2dlZFwiLCB2YWx1ZSB9KSksXG4gICAgcXVlcnlJZDogKF8pID0+IGNyZWF0ZUZ1bmN0aW9uKFwiaWRcIiwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW18sIGlkXSkgPT4gKHsgdHlwZTogXCJpZFwiLCB2YWx1ZTogaWQgfSkpLFxuICAgIHF1ZXJ5VHlwZTogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiQFwiKVxuICAgICAgICAgICAgLnRoZW4oUFJJTUlUSVZFUy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidHlwZWRcIiwgdmFsdWU6IHZhbHVlIH0pKSxcblxuICAgIHF1ZXJ5UGF0aDogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9lP3BhdGgvaSkuZGVzYyhcIltlXXBhdGhcIiksIFBSSU1JVElWRVMuc3RyaW5nKS5tYXAoKFtmdW5jLCBwYXRoXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhdGgsXG4gICAgICAgICAgICBleGFjdDogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcImVwYXRoXCIsXG4gICAgICAgIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW50T2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvcGFyZW50b2Z8c3VwZXJ0cmVlL2kpLmRlc2MoXCJwYXJlbnRvZlwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgY2hpbGRyZW5dKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXJlbnQtb2ZcIixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwic3VwZXJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUNoaWxkT2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXCJjaGlsZG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBwYXJlbnRzXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hpbGQtb2ZcIixcbiAgICAgICAgICAgIHBhcmVudHMsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdWJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogKF8pID0+XG4gICAgICAgIFBSSU1JVElWRVMubGluay5tYXAoKGxpbmspID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlOiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogbGluayB9LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImluY29taW5nXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUxpbmtlZDogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9saW5rc3RvfGxpbmtlZGZyb218Y29ubmVjdGVkL2kpLmRlc2MoXCJjb25uZWN0ZWRcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHNvdXJjZV0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uOlxuICAgICAgICAgICAgICAgIGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtzdG9cIiA/IFwiaW5jb21pbmdcIiA6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtlZGZyb21cIiA/IFwib3V0Z29pbmdcIiA6IFwiYm90aFwiLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlFeGlzdHM6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhpc3RzL2kpLmRlc2MoXCJleGlzdHNcIiksIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZykpLm1hcChcbiAgICAgICAgICAgIChbX2Z1bmMsIGlkZW50XSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlkZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhwci9pKS5kZXNjKFwiZXhwclwiKSwgRVhQUkVTU0lPTi5leHByZXNzaW9uKS5tYXAoKFtfLCBleHByXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogKHEpID0+IEVYUFJFU1NJT04uYmluYXJ5Q29tcGFyZS5tYXAoKGV4cHIpID0+ICh7IHR5cGU6IFwiZXhwcmVzc2lvblwiLCBleHByZXNzaW9uOiBleHByIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW5zOiAocSkgPT4gcS5xdWVyeS50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgcXVlcnlOZWdhdGU6IChxKSA9PlxuICAgICAgICBQLnN0cmluZyhcIiFcIilcbiAgICAgICAgICAgIC5za2lwKFAub3B0V2hpdGVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKHEucXVlcnlBdG9tKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJub3RcIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICBxdWVyeUF0b206IChxKSA9PlxuICAgICAgICBQLmFsdDxJbmRleFF1ZXJ5PihcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnMsXG4gICAgICAgICAgICBxLnF1ZXJ5TmVnYXRlLFxuICAgICAgICAgICAgcS5xdWVyeVNpbXBsZUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlUYWcsXG4gICAgICAgICAgICBxLnF1ZXJ5VHlwZSxcbiAgICAgICAgICAgIHEucXVlcnlJZCxcbiAgICAgICAgICAgIHEucXVlcnlFeGlzdHMsXG4gICAgICAgICAgICBxLnF1ZXJ5Q2hpbGRPZixcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnRPZixcbiAgICAgICAgICAgIHEucXVlcnlMaW5rZWQsXG4gICAgICAgICAgICBxLnF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIHEucXVlcnlRdW90ZWRFeHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gRXhwcmVzc2lvbnMgYXJlIGVzc2VudGlhbGx5IHRoZSBcImNhdGNoLWFsbFwiIG9mIG90aGVyd2lzZSB1bnBhcnNlYWJsZSB0ZXJtcywgc28gdGhleSBzaG91bGQgZ28gYWJzb2x1dGUgbGFzdC5cbiAgICAgICAgICAgIHEucXVlcnlSYXdFeHByZXNzaW9uXG4gICAgICAgICksXG4gICAgcXVlcnlBbmRzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBdG9tLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLCAobGVmdCwgX29wLCByaWdodCkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiYW5kXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5T3JzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBbmRzLCBQUklNSVRJVkVTLmJpbmFyeU9yT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJvclwiLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtsZWZ0LCByaWdodF0sXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeTogKHEpID0+IHEucXVlcnlPcnMudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxufSk7XG5cbi8qKiBSZXR1cm4gYSBuZXcgcGFyc2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSB1bmRlcmx5aW5nIHBhcnNlciBhbmQgcmV0dXJucyBpdCdzIHJhdyBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJhdzxUPihiYXNlOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtULCBzdHJpbmddPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIHsgdmFsdWU6IFtyZXN1bHQudmFsdWUsIGlucHV0LnN1YnN0cmluZyhpLCByZXN1bHQuaW5kZXgpXSB9KTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuLyoqIENyZWF0ZSBhIGxlZnQtYXNzb2NpYXRpdmUgYmluYXJ5IHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGdpdmVuIHN1Yi1lbGVtZW50IGFuZCBzZXBhcmF0b3IuIEhhbmRsZXMgd2hpdGVzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5hcnlQYXJzZXI8VCwgVT4oXG4gICAgY2hpbGQ6IFAuUGFyc2VyPFQ+LFxuICAgIHNlcDogUC5QYXJzZXI8VT4sXG4gICAgY29tYmluZTogKGE6IFQsIGI6IFUsIGM6IFQpID0+IFRcbik6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5zZXFNYXAoY2hpbGQsIFAuc2VxKFAub3B0V2hpdGVzcGFjZSwgc2VwLCBQLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4ge1xuICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkgcmV0dXJuIGZpcnN0O1xuXG4gICAgICAgIGxldCBub2RlID0gY29tYmluZShmaXJzdCwgcmVzdFswXVsxXSwgcmVzdFswXVszXSk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJzZXIgd2hpY2ggcGFyc2VzIFxcPGZ1bmN0aW9uXFw+KFxcPGFyZ3NcXD4pLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbjxUPihmdW5jOiBzdHJpbmcgfCBQLlBhcnNlcjxzdHJpbmc+LCBhcmdzOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtzdHJpbmcsIFRdPiB7XG4gICAgY29uc3QgcmVhbEZ1bmMgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IFAuc3RyaW5nKGZ1bmMpIDogZnVuYztcbiAgICByZXR1cm4gUC5zZXFNYXAoXG4gICAgICAgIHJlYWxGdW5jLnNraXAoUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgYXJncy50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgICAgIChmLCBhKSA9PiBbZiwgYV1cbiAgICApO1xufVxuXG4vKiogQ2hhaW5zIGEgbGlzdCBvZiBwYXJzZXJzOyB0aGUgZmlyc3Qgb25lIG11c3Qgc3VjY2VlZCwgYnV0IGZvbGxvd2luZyBvbmVzIG1heSBmYWlsIHdpdGhvdXQgZmFpbGluZyB0aGUgb3ZlcmFsbCBwYXJzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbk9wdDxUPihiYXNlOiBQLlBhcnNlcjxUPiwgLi4uZnVuY3M6ICgocjogVCkgPT4gUC5QYXJzZXI8VD4pW10pOiBQLlBhcnNlcjxUPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IChmdW5jKHJlc3VsdC52YWx1ZSBhcyBUKSBhcyBhbnkpLl8oaW5wdXQsIHJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGV4cHJlc3Npb25zXG4gKi9cbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IHJlbmRlck1pbmltYWxEYXRlLCByZW5kZXJNaW5pbWFsRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLy8gUmUtZXhwb3J0cyBvZiB1c2VmdWwgZ2VuZXJpYyB0eXBlcy5cbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqIFNob3J0aGFuZCBmb3IgYSBtYXBwaW5nIGZyb20ga2V5cyB0byB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBEYXRhT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgYW55Pjtcbi8qKiBUaGUgbGl0ZXJhbCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHF1ZXJ5IGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIExpdGVyYWxUeXBlID1cbiAgICB8IFwiYm9vbGVhblwiXG4gICAgfCBcIm51bWJlclwiXG4gICAgfCBcInN0cmluZ1wiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJkdXJhdGlvblwiXG4gICAgfCBcImxpbmtcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcImZ1bmN0aW9uXCJcbiAgICB8IFwibnVsbFwiO1xuLyoqIFRoZSByYXcgdmFsdWVzIHRoYXQgYSBsaXRlcmFsIGNhbiB0YWtlIG9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgRGF0ZVRpbWVcbiAgICB8IER1cmF0aW9uXG4gICAgfCBMaW5rXG4gICAgfCBBcnJheTxMaXRlcmFsPlxuICAgIHwgRGF0YU9iamVjdFxuICAgIHwgRnVuY3Rpb25cbiAgICB8IG51bGw7XG5cbi8qKiBNYXBzIHRoZSBzdHJpbmcgdHlwZSB0byBpdCdzIGV4dGVybmFsLCBBUEktZmFjaW5nIHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHI8VCBleHRlbmRzIExpdGVyYWxUeXBlPiA9IFQgZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgID8gYm9vbGVhblxuICAgIDogVCBleHRlbmRzIFwibnVtYmVyXCJcbiAgICA/IG51bWJlclxuICAgIDogVCBleHRlbmRzIFwic3RyaW5nXCJcbiAgICA/IHN0cmluZ1xuICAgIDogVCBleHRlbmRzIFwiZHVyYXRpb25cIlxuICAgID8gRHVyYXRpb25cbiAgICA6IFQgZXh0ZW5kcyBcImRhdGVcIlxuICAgID8gRGF0ZVRpbWVcbiAgICA6IFQgZXh0ZW5kcyBcIm51bGxcIlxuICAgID8gbnVsbFxuICAgIDogVCBleHRlbmRzIFwibGlua1wiXG4gICAgPyBMaW5rXG4gICAgOiBUIGV4dGVuZHMgXCJhcnJheVwiXG4gICAgPyBBcnJheTxMaXRlcmFsPlxuICAgIDogVCBleHRlbmRzIFwib2JqZWN0XCJcbiAgICA/IERhdGFPYmplY3RcbiAgICA6IFQgZXh0ZW5kcyBcImZ1bmN0aW9uXCJcbiAgICA/IEZ1bmN0aW9uXG4gICAgOiBhbnk7XG5cbi8qKiBBIHdyYXBwZWQgbGl0ZXJhbCB2YWx1ZSB3aGljaCBjYW4gYmUgc3dpdGNoZWQgb24uICovXG5leHBvcnQgdHlwZSBXcmFwcGVkTGl0ZXJhbCA9XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcInN0cmluZ1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJudW1iZXJcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYm9vbGVhblwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJkYXRlXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImR1cmF0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImxpbmtcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYXJyYXlcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwib2JqZWN0XCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImZ1bmN0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bGxcIj47XG5cbi8qKiBDb21iaW5lcyBhIHRleHR1YWwgdHlwZSBhbmQgdmFsdWU7IHByaW1hcmlseSB1c2VmdWwgZm9yIHN3aXRjaGluZyBvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsV3JhcHBlcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+IHtcbiAgICB0eXBlOiBUO1xuICAgIHZhbHVlOiBMaXRlcmFsUmVwcjxUPjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgVXRpbGl0eSBsaWJyYXJ5IGZvciBoYW5kbGluZyBsaXRlcmFsIHZhbHVlcy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgTGl0ZXJhbHMge1xuICAgIC8qKiBTZXR0aW5ncyB1c2VkIHdoZW4gZm9ybWF0dGluZyBsaXRlcmFsIHZhbHVlcyB0byB0ZXh0LiAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVG9TdHJpbmdTZXR0aW5ncyB7XG4gICAgICAgIC8qKiBXaGF0IGEgbnVsbCB3aWxsIHJlbmRlciBhcy4gKi9cbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUgZm9ybWF0LiAqL1xuICAgICAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUtdGltZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFNhbmUsIEVuZ2xpc2gtYmFzZWQgZGVmYXVsdHMgZm9yIGRhdGUgZm9ybWF0cy4gKi9cbiAgICBleHBvcnQgY29uc3QgREVGQVVMVF9UT19TVFJJTkc6IFRvU3RyaW5nU2V0dGluZ3MgPSB7XG4gICAgICAgIG51bGxSZXByZXNlbnRhdGlvbjogXCItXCIsXG5cbiAgICAgICAgZGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcbiAgICB9O1xuXG4gICAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlIGludG8gYSByZWFzb25hYmxlLCBNYXJrZG93bi1mcmllbmRseSBzdHJpbmcgaWYgcG9zc2libGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKFxuICAgICAgICBmaWVsZDogYW55LFxuICAgICAgICBzZXR0aW5nOiBUb1N0cmluZ1NldHRpbmdzID0gREVGQVVMVF9UT19TVFJJTkcsXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZy5udWxsUmVwcmVzZW50YXRpb247XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIjxmdW5jdGlvbj5cIjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHJlc3VsdCArPSBcIltcIjtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoKGYpID0+IHRvU3RyaW5nKGYsIHNldHRpbmcsIHRydWUpKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiXVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCJ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGUpID0+IGVbMF0gKyBcIjogXCIgKyB0b1N0cmluZyhlWzFdLCBzZXR0aW5nLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIiB9XCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyTWluaW1hbERhdGUod3JhcHBlZC52YWx1ZSwgc2V0dGluZy5kYXRlRm9ybWF0LCBzZXR0aW5nLmRhdGVUaW1lRm9ybWF0KTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRHVyYXRpb24od3JhcHBlZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwVmFsdWUodmFsOiBMaXRlcmFsKTogV3JhcHBlZExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNOdWxsKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVsbFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJib29sZWFuXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEdXJhdGlvbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJhcnJheVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKSByZXR1cm4geyB0eXBlOiBcImxpbmtcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgbWFwIGNvbXBsZXggb2JqZWN0cyBhdCB0aGUgbGVhdmVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXBMZWF2ZXModmFsOiBMaXRlcmFsLCBmdW5jOiAodDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDogRGF0YU9iamVjdCA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHJlc3VsdFtrZXldID0gbWFwTGVhdmVzKHZhbHVlLCBmdW5jKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBMaXRlcmFsW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbCkgcmVzdWx0LnB1c2gobWFwTGVhdmVzKHZhbHVlLCBmdW5jKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiB0d28gYXJiaXRyYXJ5IGxpdGVyYWxzIGFyZSBlcXVhbC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZXF1YWxzKGZpcnN0OiBMaXRlcmFsIHwgdW5kZWZpbmVkLCBzZWNvbmQ6IExpdGVyYWwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoZmlyc3QsIHNlY29uZCkgPT0gMDtcbiAgICB9XG5cbiAgICAvKiogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdmFsdWVzLiBQcm9kdWNlcyBhIHRvdGFsIG9yZGVyaW5nIG92ZXIgQU5ZIHBvc3NpYmxlIGRhdGFjb3JlIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKFxuICAgICAgICB2YWwxOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICB2YWwyOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICBsaW5rTm9ybWFsaXplcj86IChsaW5rOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICk6IG51bWJlciB7XG4gICAgICAgIC8vIFJlZmVyZW5jZSBlcXVhbGl0eSAtIHNob3J0IGNpcmN1aXQuXG4gICAgICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gMDtcblxuICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkL251bGxzIGZpcnN0LlxuICAgICAgICBpZiAodmFsMSA9PT0gdW5kZWZpbmVkKSB2YWwxID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkgdmFsMiA9IG51bGw7XG4gICAgICAgIGlmICh2YWwxID09PSBudWxsICYmIHZhbDIgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmICh2YWwxID09PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgaWYgKHZhbDIgPT09IG51bGwpIHJldHVybiAxO1xuXG4gICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi5cbiAgICAgICAgbGV0IHdyYXAxID0gd3JhcFZhbHVlKHZhbDEpO1xuICAgICAgICBsZXQgd3JhcDIgPSB3cmFwVmFsdWUodmFsMik7XG5cbiAgICAgICAgaWYgKHdyYXAxID09PSB1bmRlZmluZWQgJiYgd3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHdyYXAxID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAod3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBvbiBkaWZmZXJlbnQgdHlwZXMgb3Igb24gcmVmZXJlbmNlIGVxdWFsaXR5LlxuICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKSByZXR1cm4gd3JhcDEudHlwZS5sb2NhbGVDb21wYXJlKHdyYXAyLnR5cGUpO1xuICAgICAgICBpZiAod3JhcDEudmFsdWUgPT09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXAxLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUubG9jYWxlQ29tcGFyZSh3cmFwMi52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBudW1iZXIpKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB3cmFwMS52YWx1ZSA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsxID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWUgYXMgTGluaztcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplID0gbGlua05vcm1hbGl6ZXIgPz8gKCh4OiBzdHJpbmcpID0+IHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY29tcGFyZSBieSBmaWxlIG5hbWUgb3IgZGlzcGxheSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rIGVxdWFsaXR5LiBDb21wYXJlIGJ5IHBhdGguXG4gICAgICAgICAgICAgICAgbGV0IHBhdGhDb21wYXJlID0gbm9ybWFsaXplKGxpbmsxLnBhdGgpLmxvY2FsZUNvbXBhcmUobm9ybWFsaXplKGxpbmsyLnBhdGgpKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aENvbXBhcmUgIT0gMCkgcmV0dXJuIHBhdGhDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHR5cGUuXG4gICAgICAgICAgICAgICAgbGV0IHR5cGVDb21wYXJlID0gbGluazEudHlwZS5sb2NhbGVDb21wYXJlKGxpbmsyLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZSAhPSAwKSByZXR1cm4gdHlwZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgc3VicGF0aCBleGlzdGVuY2UuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiBsaW5rMi5zdWJwYXRoKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKSByZXR1cm4gMDtcblxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIGJvdGggaGF2ZSBhIHN1YnBhdGgsIGNvbXBhcmUgYnkgc3VicGF0aC5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGxpbmsxLnN1YnBhdGggPz8gXCJcIikubG9jYWxlQ29tcGFyZShsaW5rMi5zdWJwYXRoID8/IFwiXCIpO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBsZXQgZjEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZSBhcyBhbnlbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wID0gY29tcGFyZShmMVtpbmRleF0sIGYyW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpO1xuICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTtcbiAgICAgICAgICAgICAgICBrMS5zb3J0KCk7XG4gICAgICAgICAgICAgICAgazIuc29ydCgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGtleUNvbXBhcmUgPSBjb21wYXJlKGsxLCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKGtleUNvbXBhcmUgIT0gMCkgcmV0dXJuIGtleUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgazEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKG8xW2tleV0sIG8yW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gY29tcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YWNvcmUgdHlwZSBmb3IgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsOiBhbnkpOiBMaXRlcmFsVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB3cmFwVmFsdWUodmFsKT8udHlwZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBcInRydXRoeVwiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShmaWVsZDogTGl0ZXJhbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcyhcInNlY29uZHNcIikgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod3JhcHBlZC52YWx1ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERlZXAgY29weSBhIGZpZWxkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUIGV4dGVuZHMgTGl0ZXJhbD4oZmllbGQ6IFQpOiBUIHtcbiAgICAgICAgaWYgKGZpZWxkID09PSBudWxsIHx8IGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBmaWVsZDtcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAoW10gYXMgTGl0ZXJhbFtdKS5jb25jYXQoZmllbGQubWFwKCh2KSA9PiBkZWVwQ29weSh2KSkpIGFzIFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QoZmllbGQpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkKSkgcmVzdWx0W2tleV0gPSBkZWVwQ29weSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWw6IGFueSk6IHZhbCBpcyBEYXRlVGltZSB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlVGltZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGR1cmF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0R1cmF0aW9uKHZhbDogYW55KTogdmFsIGlzIER1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiB2YWwgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsOiBhbnkpOiB2YWwgaXMgYW55W10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbDogYW55KTogdmFsIGlzIGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xpbmsodmFsOiBhbnkpOiB2YWwgaXMgTGluayB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rO1xuICAgIH1cblxuICAgIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCAoYW5kIG5vdCBhbnkgb3RoZXIgZGF0YWNvcmUtcmVjb2duaXplZCBvYmplY3QtbGlrZSB0eXBlKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsOiBhbnkpOiB2YWwgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhaXNBcnJheSh2YWwpICYmXG4gICAgICAgICAgICAhaXNEdXJhdGlvbih2YWwpICYmXG4gICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0xpbmsodmFsKSAmJlxuICAgICAgICAgICAgIWlzTnVsbCh2YWwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG59XG5cbi8qKiBBIGdyb3VwaW5nIG9uIGEgdHlwZSB3aGljaCBzdXBwb3J0cyByZWN1cnNpdmVseS1uZXN0ZWQgZ3JvdXBzLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cEVsZW1lbnQ8VD4gPSB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfTtcbi8qKlxuICogQSBncm91cGluZywgd2hpY2ggY2FuIGJlIGVpdGhlcjpcbiAqIC0gYW4gYXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSBgVGAsIG9yXG4gKiAtIGFuIGFycmF5IG9mIHtAbGluayBHcm91cGVsZW1lbnR9c1xuICpcbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgR3JvdXBpbmc8VD4gPSBUW10gfCBHcm91cEVsZW1lbnQ8VD5bXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIEdyb3VwaW5ncyB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGdyb3VwIGVudHJ5IGlzIGEgc3RhbmRhbG9uZSB2YWx1ZSwgb3IgYSBncm91cGluZyBvZiBzdWItZW50cmllcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50R3JvdXA8VD4oZW50cnk6IGFueSk6IGVudHJ5IGlzIEdyb3VwRWxlbWVudDxUPiB7XG4gICAgICAgIHJldHVybiBMaXRlcmFscy5pc09iamVjdChlbnRyeSkgJiYgT2JqZWN0LmtleXMoZW50cnkpLmxlbmd0aCA9PSAyICYmIFwia2V5XCIgaW4gZW50cnkgJiYgXCJyb3dzXCIgaW4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgZ3JvdXBpbmcgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBpbmc8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+W10ge1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVudHJ5KSBpZiAoIWlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgbGVhZiBhbmQgaGFzIG5vIHN1Ymdyb3VwaW5ncy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNMZWFmPFQ+KGVudHJ5OiBHcm91cGluZzxUPik6IGVudHJ5IGlzIFRbXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgcmVjdXJzaXZlIGdyb3VwaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihlbGVtZW50czogR3JvdXBpbmc8VD4gfCBHcm91cEVsZW1lbnQ8VD4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcm91cGluZyhlbGVtZW50cykpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgc3ViZ3JvdXAgb2YgZWxlbWVudHMpIHJlc3VsdCArPSBjb3VudChzdWJncm91cC5yb3dzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IHNsaWNlIGEgZ3JvdXBpbmcsIHByZXNlcnZpbmcgdGhlIGdyb3VwIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGVsZW1lbnRzIFtzdGFydC4uLmVuZCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBHcm91cGluZzxUPiB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGlzTGVhZihlbGVtZW50cykpIHJldHVybiBlbGVtZW50cy5zbGljZShzdGFydCwgZW5kKTtcblxuICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBncm91cCB0aGF0IGNvbnRhaW5zIGluZGV4IGBzdGFydGAuXG4gICAgICAgIGxldCBpbmRleCA9IDAsXG4gICAgICAgICAgICBzZWVuID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gKyBjb3VudChlbGVtZW50c1tpbmRleF0pIDw9IHN0YXJ0KSB7XG4gICAgICAgICAgICBzZWVuICs9IGNvdW50KGVsZW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RhcnQgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgZ3JvdXBpbmdzLlxuICAgICAgICBpZiAoaW5kZXggPj0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfVtdID0gW107XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuIDwgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU2l6ZSA9IGNvdW50KGdyb3VwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnQgPSBNYXRoLm1heChzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICBjb25zdCBncm91cEVuZCA9IE1hdGgubWluKGdyb3VwU2l6ZSArIHNlZW4sIGVuZCk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGdyb3VwLmtleSxcbiAgICAgICAgICAgICAgICByb3dzOiBzbGljZShncm91cC5yb3dzLCBncm91cFN0YXJ0IC0gc2VlbiwgZ3JvdXBFbmQgLSBzZWVuKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWVuICs9IGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbi8qKlxuICogIEZ1bmN0aW9uYWwgcmV0dXJuIHR5cGUgZm9yIGVycm9yIGhhbmRsaW5nLlxuICogQGhpZGRlblxuICogKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogdHJ1ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwPFU+KGY6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0TWFwPFU+KGY6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIFJlc3VsdDxULCBVPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmltYXA8VDIsIEUyPihzdWNjOiAoYTogVCkgPT4gVDIsIF9mYWlsOiAoYjogRSkgPT4gRTIpOiBSZXN1bHQ8VDIsIEUyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChzdWNjKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZShfdmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNhc3Q8VT4oKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2VUaHJvdyhfbWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG4vKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGVycm9yOiBFKSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oX2Y6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIEZhaWx1cmU8VSwgRT47XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oX2Y6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGYodGhpcy5lcnJvcikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KF9zdWNjOiAoYTogVCkgPT4gVDIsIGZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXJyKGZhaWwpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKHZhbHVlOiBUKTogVCB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KG1lc3NhZ2U/OiAoZTogRSkgPT4gc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSh0aGlzLmVycm9yKSk7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiXCIgKyB0aGlzLmVycm9yKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBtb25hZGljIHJlc3VsdCB0eXBlIHdoaWNoIHN0b3JlcyBlaXRoZXIgXCJzdWNjZXNzXCIgb3IgXCJmYWlsdXJlXCIuIEFuIGFsdGVybmF0aXZlIGhhbmRsaW5nIGV4Y2VwdGlvbmFsIGJlaGF2aW9yXG4gKiBieSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBTdWNjZXNzPFQsIEU+IHwgRmFpbHVyZTxULCBFPjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBNb25hZGljICdSZXN1bHQnIHR5cGUgd2hpY2ggZW5jYXBzdWxhdGVzIHdoZXRoZXIgYSBwcm9jZWR1cmUgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYXMgd2VsbCBhcyBpdCdzIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgc3VjY2VzcyByZXN1bHQgd3JhcHBpbmcgdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGZhaWx1cmUgdmFsdWUgd3JhcHBpbmcgdGhlIGdpdmVuIGVycm9yLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlPFQsIEU+KGVycm9yOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGVycm9yKTtcbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZsYXRNYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IFJlc3VsdDxPLCBFPlxuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpZiAoc2Vjb25kLnN1Y2Nlc3NmdWwpIHJldHVybiBmKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFpbHVyZShzZWNvbmQuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoZmlyc3QuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEpvaW4gdHdvIHJlc3VsdHMgd2l0aCBhIGJpLWZ1bmN0aW9uIGFuZCByZXR1cm4gYSBuZXcgcmVzdWx0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IE9cbiAgICApOiBSZXN1bHQ8TywgRT4ge1xuICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpO1xuICAgIH1cblxuICAgIC8qKiBNYXAgYSBmYWlsYWJsZSBmdW5jdGlvbiBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCwgcmV0dXJuaW5nIGVhcmx5IG9uIGZhaWx1cmUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcEFsbDxULCBPLCBFPihpbnB1dDogSXRlcmFibGU8VD4sIGZ1bmM6IChpbnB1dDogVCkgPT4gUmVzdWx0PE8sIEU+KTogUmVzdWx0PE9bXSwgRT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IE9bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGZ1bmMoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW91dHB1dC5zdWNjZXNzZnVsKSByZXR1cm4gb3V0cHV0LmNhc3QoKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gob3V0cHV0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKiBDYXRjaCBhbnkgZXJyb3JzIGluIGEgY2FsbCwgcmV0dXJuaW5nIGEgcmVzdWx0IGluc3RlYWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRyeWluZzxUPihjYWxsOiAoKSA9PiBUKTogUmVzdWx0PFQsIEVycm9yPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY2FsbCgpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udmVydCBhIHByb21pc2Ugd2hpY2ggbWF5IHRocm93IGludG8gYSBwcm9taXNlIHdoaWNoIHJldHVybnMgYSByZXN1bHQgb2YgdGhlIHN1Y2Nlc3NmdWwgdmFsdWUgb3IgYW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jPFQ+KHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFJlc3VsdDxULCBFcnJvcj4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyhhd2FpdCBwcm9taXNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG5leHBvcnQgdHlwZSBFdmVyeXRoaW5nID0geyB0eXBlOiBcImV2ZXJ5dGhpbmdcIiB9O1xuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuLyoqIFNldCB3aGljaCBtYXRjaGVzIHRoZSBuZWdhdGlvbiBvZiBhIHNldC4gKi9cbmV4cG9ydCB0eXBlIE5lZ2F0ZWQ8VD4gPSB7IHR5cGU6IFwibmVnYXRlZFwiOyB2YWx1ZTogU2V0PFQ+IH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgYW4gYWN0dWFsIHNldCBvZiB2YWx1ZXMuICAqL1xuZXhwb3J0IHR5cGUgQXRvbTxUPiA9IHsgdHlwZTogXCJhdG9tXCI7IHZhbHVlOiBTZXQ8VD4gfTtcblxuLyoqIEFic3RyYWN0IGZpbHRlciB0eXBlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgZmlsdGVyIG9wZXJhdGlvbnMgdG8gdGhlIGRhdGEgc3RvcmUuICovXG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBFdmVyeXRoaW5nIHwgTm90aGluZyB8IEF0b208VD4gfCBOZWdhdGVkPFQ+O1xuXG4vKiogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVmZmljaWVudGx5IG9wZXJhdGluZyBvbiBmaWx0ZXJzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJzIHtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IEVWRVJZVEhJTkc6IEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4gICAgLyoqIFN0YXRpYyBmaWx0ZXIgd2hpY2ggbWF0Y2hlcyBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuICAgIC8qKiBFbXB0eSBzZXQgY29uc3RhbnQuICovXG4gICAgZXhwb3J0IGNvbnN0IEVNUFRZX1NFVDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhdG9tPFQ+KHNldDogU2V0PFQ+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHNldC5zaXplID09IDApIHJldHVybiBOT1RISU5HO1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYXRvbVwiLCB2YWx1ZTogc2V0IH07XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIGZpbHRlciB0aGF0IG1hdGNoZXMgZXZlcnl0aGluZyBvciBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUPih2YWx1ZTogYm9vbGVhbik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIEVWRVJZVEhJTkc7XG4gICAgICAgIGVsc2UgcmV0dXJuIE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBhdG9tIGZpbHRlciB3aGljaCBpcyBOT1RISU5HIGlmIHNldCBpcyB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlQXRvbTxUPihzZXQ6IFNldDxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBzZXQgIT09IHVuZGVmaW5lZCA/IGF0b20oc2V0KSA6IE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5lZ2F0ZWQgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWQ8VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIEVWRVJZVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJuZWdhdGVkXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogUHJvZHVjZXMgdGhlIG5lZ2F0aW9uIG9mIGEgZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VD4oZmlsdGVyOiBGaWx0ZXI8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBOT1RISU5HO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZWQoZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0b20oZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGZpbHRlciBpcyBkZWZpbml0aXZlbHkgY3VycmVudGx5IGVtcHR5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlLnNpemUgPT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBhIHRvcC1sZXZlbCBmaWx0ZXIgd2l0aCB0aGUgc2V0IG9mIGFsbCBhdmFpbGFibGUgb2JqZWN0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPiwgZXZlcnl0aGluZzogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZXJ5dGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlcnl0aGluZztcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldEludGVyc2VjdE5lZ2F0aW9uKGV2ZXJ5dGhpbmcsIGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGFuIGl0ZXJhYmxlIG9mIGZpbHRlcnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdDxUPihlbGVtZW50czogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5SW50ZXJzZWN0KGVsZW1lbnRzLCAoeCkgPT4geCk7XG4gICAgfVxuXG4gICAgLyoqIEludGVyc2VjdCBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgaW50ZXJzZWN0aW9uIHdvdWxkIHByb2R1Y2UgTk9USElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUludGVyc2VjdDxJLCBUPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgICAgICAvLyBFVkVSWVRISU5HIGZpbHRlcnMgYXJlIHJlZHVuZGFudCBpbiBBTkRzLCBza2lwIHRoZW0uXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugc3RhcnQgd2l0aCBzb21ldGhpbmcgb2YgdGhlIGZvcm0gYSAmJiBiICYmICFjICYmICFkLlxuICAgICAgICAvLyBJZiBubyB0ZXJtcywgdGhlbiBldmVyeXRoaW5nIHdhcyBFVkVSWVRISU5HIHNvIHJldHVybiB0aGF0LlxuICAgICAgICAvLyBJZiBvbmx5IGF0b21zLCBqdXN0IGludGVyc2VjdCB0aGVtIChhICYmIGIpLlxuICAgICAgICAvLyBJZiBvbmx5IG5lZ2F0aW9ucywgdGhlbiByZXdyaXRlICFjICYmICFkID0+ICEoYyB8fCBkKSBhbmQgcmV0dXJuIG5lZ2F0ZWQoYyB8fCBkKS5cbiAgICAgICAgLy8gSWYgYm90aCwgY29tcHV0ZSB4ID0gKGEgJiYgYikgYW5kIHkgPSAoYyB8fCBkKSwgYW5kIHRoZW4gY29tcHV0ZSB4ICYmICF5LlxuXG4gICAgICAgIGlmIChhdG9tcy5sZW5ndGggPT0gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdG9tcy5sZW5ndGggPiAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF0b20oc2V0SW50ZXJzZWN0KGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRVbmlvbihuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChhdG9tcyksIHNldFVuaW9uKG5lZ2F0aW9ucykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycywgcHJvZHVjaW5nIGEgc2luZ2xlIHJlc3VsdCBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuaW9uPFQ+KGZpbHRlcnM6IEl0ZXJhYmxlPEZpbHRlcjxUPj4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eVVuaW9uKGZpbHRlcnMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eVVuaW9uPEksIFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxJPiwgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBGaWx0ZXI8VD4gfCB1bmRlZmluZWQpOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eUZhaWxhYmxlVW5pb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUZhaWxhYmxlVW5pb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyB3aWxsIHByb2R1Y2UgZXZlcnl0aGluZyBhbHdheXMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRVZFUllUSElORyk7XG4gICAgICAgICAgICAvLyBFbXB0eSBmaWx0ZXJzIGFyZSByZWR1bmRhbnQuXG4gICAgICAgICAgICBpZiAoZW1wdHkoZmlsdGVyKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFdpbGwgb25seSBiZSBsZWZ0IHdpdGggYXRvbXMgb3IgbmVnYXRpb25zLlxuICAgICAgICAgICAgaWYgKGZpbHRlci50eXBlID09IFwiYXRvbVwiKSBhdG9tcy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PSBcIm5lZ2F0ZWRcIikgbmVnYXRpb25zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9yIGlzIGEgYml0IGhhcmRlciB0aGFuIEFORCBzaW5jZSB5b3UgY2FuIGVuZCB1cCB3aXRoIHNjZW5hcmlvcyBsaWtlIGEgfHwgIWIsIHdoaWNoIGFyZVxuICAgICAgICAvLyBub3QgY29tcHV0YWJsZSBkaXJlY3RseS4gSG93ZXZlciwgd2UgY2FuIGRvIGJvb2xlYW4gbG9naWMgdG8gYWx3YXlzIHByb2R1Y2UgYSBzaW5nbGVcbiAgICAgICAgLy8gc2V0LlxuICAgICAgICAvLyBJZiBub3RoaW5nID0+IG5vdGhpbmcsIG5vIG5vbi1lbXB0eSBmaWx0ZXJzLlxuICAgICAgICAvLyBJZiBhdG9tcyBidXQgbm8gbmVnYXRpb25zIChhIHx8IGIgfHwgYykgPT4gY29tcHV0ZSB1bmlvbi5cbiAgICAgICAgLy8gSWYgbmVnYXRpb25zIGJ1dCBubyBhdG9tcyAoIWEgfHwgIWIgfHwgIWMpID0+IHJld3JpdGUgYXMgIShhICYmIGIgJiYgYykuXG4gICAgICAgIC8vIElmIGJvdGg6IChhIHx8IGIgfHwgIWMgfHwgIWQpID0+IGNvbWJpbmUgZWFjaCBwYXJ0IGludG8gKGEgfHwgYikgfHwgKCFjIHx8ICFkKSA9PiAoYSB8fCBiKSB8fCAhKGMgJiYgZCkgPT4gZSB8fCAhZiA9PiAhKCFlICYmIGYpIHdoaWNoXG4gICAgICAgIC8vIGNhbiBiZSBjb21wdXRlZCB1c2luZyBpbnRlcnNlY3Rpb24gbG9naWMuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKE5PVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldFVuaW9uKGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5uZWdhdGVkKHNldEludGVyc2VjdChuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRJbnRlcnNlY3ROZWdhdGlvbihzZXRJbnRlcnNlY3QobmVnYXRpb25zKSwgc2V0VW5pb24oYXRvbXMpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVmZmljaWVudGx5IGNvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3Q8VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gU29ydCBieSBzaXplIGFuZCBjb21iaW5lIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNldCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgc29ydGVkID0gKFtdIGFzIFNldDxUPltdKS5jb25jYXQoc2V0cykuc29ydCgoYSwgYikgPT4gYS5zaXplIC0gYi5zaXplKTtcblxuICAgICAgICB3aGlsZSAoc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBzb3J0ZWQucG9wKCkhO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNvcnRlZFswXSkge1xuICAgICAgICAgICAgICAgIGlmIChsYXJnZXN0LmhhcyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGVkWzBdID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFswXTtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgdW5pb24gb2Ygc2V0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0VW5pb248VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSB1c2VmdWwgb3B0aW1pemF0aW9uIGZvciBzZXQgdW5pb25zLCBzbyBqdXN0IGFkZCB0aGVtIGFsbCBJIGd1ZXNzLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2V0IG9mIHNldHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSBhdG9tICYmICFuZWdhdGVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3ROZWdhdGlvbjxUPihhdG9tOiBTZXQ8VD4sIG5lZ2F0ZWQ6IFNldDxUPik6IFNldDxUPiB7XG4gICAgICAgIGlmIChhdG9tLnNpemUgPiBuZWdhdGVkLnNpemUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHksIHNpbmNlIEknbSBub3Qgc3VyZSBpdCdzIGFueSBmYXN0ZXIgd2l0aCB0aGUgY29weS5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoYXRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIG5lZ2F0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IC8qIGF0b20uc2l6ZSA8IG5lZ2F0aW9uLnNpemUgKi8gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGF0b20pIHtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRlZC5oYXMoZWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuXG4vKiogQ29tcGFyaXNvbiBvcGVyYXRvcnMgd2hpY2ggeWllbGQgdHJ1ZS9mYWxzZS4gKi9cbmV4cG9ydCB0eXBlIENvbXBhcmVPcCA9IFwiPlwiIHwgXCI+PVwiIHwgXCI8PVwiIHwgXCI8XCIgfCBcIj1cIiB8IFwiIT1cIjtcbi8qKiBBcml0aG1ldGljIG9wZXJhdG9ycyB3aGljaCB5aWVsZCBudW1iZXJzIGFuZCBvdGhlciB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBBcml0aG1ldGljT3AgPSBcIitcIiB8IFwiLVwiIHwgXCIqXCIgfCBcIi9cIiB8IFwiJVwiIHwgXCImXCIgfCBcInxcIjtcbi8qKiBJbmRleCBhIHZhbHVlIGludG8gYW5vdGhlciB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIExvZ2ljYWxPcCA9IFwiaW5kZXhcIjtcbi8qKiBBbGwgdmFsaWQgYmluYXJ5IG9wZXJhdG9ycy4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wID0gQ29tcGFyZU9wIHwgQXJpdGhtZXRpY09wIHwgTG9naWNhbE9wO1xuXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uID1cbiAgICB8IExpdGVyYWxFeHByZXNzaW9uXG4gICAgfCBWYXJpYWJsZUV4cHJlc3Npb25cbiAgICB8IExpc3RFeHByZXNzaW9uXG4gICAgfCBPYmplY3RFeHByZXNzaW9uXG4gICAgfCBCaW5hcnlPcEV4cHJlc3Npb25cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgTGFtYmRhRXhwcmVzc2lvblxuICAgIHwgTmVnYXRlZEV4cHJlc3Npb247XG5cbi8qKiBMaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIHNvbWUgZmllbGQgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBMaXRlcmFsO1xufVxuXG4vKiogQSB2YXJpYWJsZSBmaWVsZCBmb3IgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcInZhcmlhYmxlXCI7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogQSBsaXN0IGxpdGVyYWwsIHdoaWNoIGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBmaWVsZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImxpc3RcIjtcbiAgICB2YWx1ZXM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIG9iamVjdCBsaXRlcmFsLCB3aGljaCBpcyBhIG1hcHBpbmcgb2YgbmFtZSB0byBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJvYmplY3RcIjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+O1xufVxuXG4vKiogQSBiaW5hcnkgb3BlcmF0b3IgZXhwcmVzc2lvbiB3aGljaCBjb21iaW5lcyB0d28gc3Vibm9kZXMgc29tZWhvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImJpbmFyeW9wXCI7XG4gICAgbGVmdDogRXhwcmVzc2lvbjtcbiAgICByaWdodDogRXhwcmVzc2lvbjtcbiAgICBvcDogQmluYXJ5T3A7XG59XG5cbi8qKiBBIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggY2FsbHMgYSBmdW5jdGlvbiBvbiAwIG9yIG1vcmUgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiZnVuY3Rpb25cIjtcbiAgICAvKiogRWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb3IgYSBGdW5jdGlvbiBvYmplY3QuICovXG4gICAgZnVuYzogRXhwcmVzc2lvbjtcbiAgICAvKiogVGhlIGxpc3Qgb2YgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICovXG4gICAgYXJndW1lbnRzOiBFeHByZXNzaW9uW107XG59XG5cbi8qKiBBbiBpbmxpbmUgZnVuY3Rpb24gYWNjZXB0aW5nIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBhbmQgcHJvZHVjaW5nIGEgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGFtYmRhXCI7XG4gICAgLyoqIEFuIG9yZGVyZWQgbGlzdCBvZiBuYW1lZCBhcmd1bWVudHMuICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmdbXTtcbiAgICAvKiogVGhlIGZpZWxkIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBhcmd1bWVudHMgaW4gY29udGV4dC4gKi9cbiAgICB2YWx1ZTogRXhwcmVzc2lvbjtcbn1cblxuLyoqIEFuIGV4cHJlc3Npb24gd2hpY2ggbmVnYXRlcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJuZWdhdGVkXCI7XG5cbiAgICAvKiogVGhlIGNoaWxkIGZpZWxkIHRvIG5lZ2F0ZS4gKi9cbiAgICBjaGlsZDogRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBFeHByZXNzaW9ucyB7XG4gICAgLyoqIFRoZSBpbXBsaWNpdCBmaWVsZCByZWZlcmVuY2luZyB0aGUgY3VycmVudCBmaWVsZC4gKi9cbiAgICBleHBvcnQgY29uc3QgUk9XOiBzdHJpbmcgPSBcIiRyb3dcIjtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZShuYW1lOiBzdHJpbmcpOiBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQ6IEV4cHJlc3Npb24sIG9wOiBCaW5hcnlPcCwgcmlnaHQ6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0LCBvcCwgcmlnaHQgfSBhcyBCaW5hcnlPcEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4KG9iajogRXhwcmVzc2lvbiwgaW5kZXg6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0OiBvYmosIHJpZ2h0OiBpbmRleCwgb3A6IFwiaW5kZXhcIiB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qtbm90YXRpb24tZm9ybWF0IGludG8gYSB2YXJpYWJsZSB3aGljaCBpbmRleGVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmRleFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IEV4cHJlc3Npb24ge1xuICAgICAgICBsZXQgcGFydHMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiA9IEV4cHJlc3Npb25zLnZhcmlhYmxlKHBhcnRzWzBdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gRXhwcmVzc2lvbnMuaW5kZXgocmVzdWx0LCBFeHByZXNzaW9ucy5saXRlcmFsKHBhcnRzW2luZGV4XSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGFtYmRhKGFyZ3M6IHN0cmluZ1tdLCB2YWx1ZTogRXhwcmVzc2lvbik6IExhbWJkYUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGFyZ3MsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZ1bmMoZnVuYzogRXhwcmVzc2lvbiwgYXJnczogRXhwcmVzc2lvbltdKTogRnVuY3Rpb25FeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBmdW5jLCBhcmd1bWVudHM6IGFyZ3MgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGlzdCh2YWx1ZXM6IEV4cHJlc3Npb25bXSk6IExpc3RFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvYmplY3QodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uPik6IE9iamVjdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlKGNoaWxkOiBFeHByZXNzaW9uKTogTmVnYXRlZEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgY2hpbGQgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNDb21wYXJlT3Aob3A6IEJpbmFyeU9wKTogb3AgaXMgQ29tcGFyZU9wIHtcbiAgICAgICAgcmV0dXJuIG9wID09IFwiPD1cIiB8fCBvcCA9PSBcIjxcIiB8fCBvcCA9PSBcIj5cIiB8fCBvcCA9PSBcIj49XCIgfHwgb3AgPT0gXCIhPVwiIHx8IG9wID09IFwiPVwiO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGEgc2V0IG9mIGFsbCB1bmJvdW5kIHZhcmlhYmxlcyAoaS5lLiwgdmFyaWFibGVzIG5vdCBwcm92aWRlZCBieSBgcm93YCwgbGFtYmRhcywgb3Igc2ltaWxhci4pICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuYm91bmRWYXJpYWJsZXMoZXhwcjogRXhwcmVzc2lvbiwgYm91bmQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbUk9XXSkpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgYHJvd1tcIi4uLi5cIl1gLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXhwci5vcCA9PT0gXCJpbmRleFwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC50eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLmxlZnQubmFtZSA9PSBST1cgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5yaWdodC50eXBlID09IFwibGl0ZXJhbFwiICYmXG4gICAgICAgICAgICAgICAgICAgIExpdGVyYWxzLmlzU3RyaW5nKGV4cHIucmlnaHQudmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZC5oYXMoZXhwci5yaWdodC52YWx1ZSkpIHJldHVybiBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIucmlnaHQudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBjaGVjayBsZWZ0IGFuZCByaWdodC5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5zZXRVbmlvbihbdW5ib3VuZFZhcmlhYmxlcyhleHByLmxlZnQsIGJvdW5kKSwgdW5ib3VuZFZhcmlhYmxlcyhleHByLnJpZ2h0LCBib3VuZCldKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIuYXJndW1lbnRzLm1hcCgoYSkgPT4gdW5ib3VuZFZhcmlhYmxlcyhhLCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZCA9IGJvdW5kID8/IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBleHByLmFyZ3VtZW50cykgbmV3Qm91bmQuYWRkKGFyZyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLnZhbHVlLCBuZXdCb3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIudmFsdWVzLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuYm91bmRWYXJpYWJsZXMoZXhwci5jaGlsZCwgYm91bmQpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKE9iamVjdC52YWx1ZXMoZXhwci52YWx1ZXMpLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJpYWJsZVwiOlxuICAgICAgICAgICAgICAgIGlmIChib3VuZCAmJiBib3VuZC5oYXMoZXhwci5uYW1lKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBuZXcgU2V0KFtleHByLm5hbWVdKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW5kZXIgYW4gZXhwcmVzc2lvbiBhcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vcCA9PT0gXCJpbmRleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfVske3RvU3RyaW5nKGV4cHIucmlnaHQpfV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfSAke2V4cHIub3B9ICR7dG9TdHJpbmcoZXhwci5yaWdodCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmZ1bmMpfSgke2V4cHIuYXJndW1lbnRzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfSlgO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZXhwci5hcmd1bWVudHMuam9pbihcIiwgXCIpfSkgPT4gJHt0b1N0cmluZyhleHByLnZhbHVlKX1gO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske2V4cHIudmFsdWVzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfV1gO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCEke3RvU3RyaW5nKGV4cHIuY2hpbGQpfWA7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyhleHByLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt0b1N0cmluZyh2KX1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfX1gO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubmFtZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShleHByLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHt3cmFwcGVkLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaXRlcmFscy50b1N0cmluZyh3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgTlVMTCA9IEV4cHJlc3Npb25zLmxpdGVyYWwobnVsbCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGNvcmUgcHJlYWN0IC8gcmVuZGVyaW5nIHV0aWxpdGllcyBmb3IgYWxsIHZpZXcgdHlwZXMuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3VycmVudExvY2FsZSwgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlRGltZW5zaW9ucywgaXNJbWFnZUVtYmVkIH0gZnJvbSBcInV0aWxzL21lZGlhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUVycm9yQm91bmRhcnkgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBQcm9wc1dpdGhDaGlsZHJlbiwgbWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCJhcGkvdWkvZW1iZWRcIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Q29tcG9uZW50Pih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBBUFBfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8QXBwPih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBEQVRBQ09SRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxEYXRhY29yZT4odW5kZWZpbmVkISk7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8U2V0dGluZ3M+KHVuZGVmaW5lZCEpO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRfRklMRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxzdHJpbmc+KFwiXCIpO1xuXG4vKiogTW9yZSBjb21wYWN0IHByb3ZpZGVyIGZvciBhbGwgb2YgdGhlIGRhdGFjb3JlIHJlYWN0IGNvbnRleHRzLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERhdGFjb3JlQ29udGV4dFByb3ZpZGVyKHtcbiAgICBjaGlsZHJlbixcbiAgICBhcHAsXG4gICAgY29tcG9uZW50LFxuICAgIGRhdGFjb3JlLFxuICAgIHNldHRpbmdzLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48e1xuICAgIGFwcDogQXBwO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50O1xuICAgIGRhdGFjb3JlOiBEYXRhY29yZTtcbiAgICBzZXR0aW5nczogU2V0dGluZ3M7XG59Pikge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50fT5cbiAgICAgICAgICAgIDxBUFBfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17YXBwfT5cbiAgICAgICAgICAgICAgICA8REFUQUNPUkVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17ZGF0YWNvcmV9PlxuICAgICAgICAgICAgICAgICAgICA8U0VUVElOR1NfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17c2V0dGluZ3N9PntjaGlsZHJlbn08L1NFVFRJTkdTX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9EQVRBQ09SRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgPC9DT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpbmsoeyBsaW5rLCBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGggfTogeyBsaW5rOiBMaW5rIHwgc3RyaW5nOyBzb3VyY2VQYXRoPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB3b3Jrc3BhY2UgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKT8ud29ya3NwYWNlO1xuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBjdXJyZW50UGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IHBhcnNlZCA9IHVzZU1lbW8oKCkgPT4gKExpdGVyYWxzLmlzTGluayhsaW5rKSA/IGxpbmsgOiBMaW5rLmluZmVyKGxpbmspKSwgW2xpbmtdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXd0YWIgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgICAgIHdvcmtzcGFjZT8ub3BlbkxpbmtUZXh0KHBhcnNlZC5vYnNpZGlhbkxpbmsoKSwgc291cmNlUGF0aCwgbmV3dGFiKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3BhcnNlZCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGFcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhcnNlZC5kaXNwbGF5T3JEZWZhdWx0KCl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW50ZXJuYWwtbGlua1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIGRhdGEtaHJlZj17cGFyc2VkLm9ic2lkaWFuTGluaygpfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cGFyc2VkLmRpc3BsYXlPckRlZmF1bHQoKX1cbiAgICAgICAgPC9hPlxuICAgICk7XG59XG5cbi8qKlxuICogQ29waWVzIGhvdyBhbiBPYnNpZGlhbiBsaW5rIGlzIHJlbmRlcmVkIGJ1dCBpcyBhYm91dCBhbiBvcmRlciBvZiBtYWduaXR1ZGUgZmFzdGVyIHRvIHJlbmRlciB0aGFuIHZpYSBtYXJrZG93biByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3QgT2JzaWRpYW5MaW5rID0gbWVtbyhSYXdMaW5rKTtcblxuLyoqQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd01hcmtkb3duKHtcbiAgICBjb250ZW50LFxuICAgIHNvdXJjZVBhdGg6IG1heWJlU291cmNlUGF0aCxcbiAgICBpbmxpbmUgPSB0cnVlLFxuICAgIHN0eWxlLFxuICAgIGNscyxcbiAgICBvbkNsaWNrLFxufToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgIGNscz86IHN0cmluZztcbiAgICBvbkNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBhbnk7XG59KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcblxuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBtYXliZVNvdXJjZVBhdGggPz8gZGVmYXVsdFBhdGg7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgY29udGFpbmVyLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBjb250ZW50LCBjb250YWluZXIuY3VycmVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmN1cnJlbnQgfHwgIWlubGluZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBVbndyYXAgYW55IGNyZWF0ZWQgcGFyYWdyYXBoIGVsZW1lbnRzIGlmIHdlIGFyZSBpbmxpbmUuXG4gICAgICAgICAgICBsZXQgcGFyYWdyYXBoID0gY29udGFpbmVyLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInBcIik7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcGFyYWdyYXBoLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoLnJlcGxhY2VXaXRoKC4uLkFycmF5LmZyb20oY2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGggPSBjb250YWluZXIuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwicFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGF2ZSBlbWJlZHMgYWN0dWFsbHkgbG9hZCBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgYXMgcGxhaW4gdGV4dC5cbiAgICAgICAgICAgIGxldCBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIHdoaWxlIChlbWJlZCkge1xuICAgICAgICAgICAgICAgIGVtYmVkLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgICAgICA8QVBQX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e2FwcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RW1iZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rPXtMaW5rLnBhcnNlSW5uZXIoZW1iZWQuZ2V0QXR0cmlidXRlKFwic3JjXCIpID8/IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj4sXG4gICAgICAgICAgICAgICAgICAgIGVtYmVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbWJlZC5hZGRDbGFzcyhcImlzLWxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgICBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW2NvbnRlbnQsIHNvdXJjZVBhdGgsIGlubGluZSwgY29udGFpbmVyLmN1cnJlbnRdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e2NvbnRhaW5lcn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2Nsc30gb25DbGljaz17b25DbGlja30+PC9zcGFuPjtcbn1cblxuLyoqXG4gKiBIYWNreSBwcmVhY3QgY29tcG9uZW50IHdoaWNoIHdyYXBzIE9ic2lkaWFuJ3MgbWFya2Rvd24gcmVuZGVyZXIgaW50byBhIG5lYXQgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IE1hcmtkb3duID0gbWVtbyhSYXdNYXJrZG93bik7XG5cbi8qKlxuICogQGhpZGRlblxuICogIEludGVsbGlnZW50bHkgcmVuZGVyIGFuIGFyYml0cmFyeSBsaXRlcmFsIHZhbHVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpdCh7XG4gICAgdmFsdWUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxuICAgIGlubGluZSA9IGZhbHNlLFxuICAgIGRlcHRoID0gMCxcbn06IFByb3BzV2l0aENoaWxkcmVuPHtcbiAgICB2YWx1ZTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgZGVwdGg/OiBudW1iZXI7XG59Pikge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBkZWZhdWx0UGF0aDtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYmV5b25kIHRoZSBtYXhpbXVtIHJlbmRlciBkZXB0aC5cbiAgICBpZiAoZGVwdGggPj0gc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgpIHJldHVybiA8RnJhZ21lbnQ+Li4uPC9GcmFnbWVudD47XG5cbiAgICBpZiAoTGl0ZXJhbHMuaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiA8TWFya2Rvd24gaW5saW5lPXtpbmxpbmV9IGNvbnRlbnQ9e3NldHRpbmdzLnJlbmRlck51bGxBc30gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxNYXJrZG93biBpbmxpbmU9e2lubGluZX0gY29udGVudD17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiA8RnJhZ21lbnQ+e1wiXCIgKyB2YWx1ZX08L0ZyYWdtZW50PjtcbiAgICB9IGVsc2UgaWYgKExpdGVyYWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57XCJcIiArIHZhbHVlfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtyZW5kZXJNaW5pbWFsRGF0ZSh2YWx1ZSwgc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQsIHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCwgY3VycmVudExvY2FsZSgpKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0R1cmF0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gPEZyYWdtZW50PntyZW5kZXJNaW5pbWFsRHVyYXRpb24odmFsdWUpfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2YgaW1hZ2UvdmlkZW8vZXRjIGVtYmVkZGluZ3MgdG8gYnlwYXNzIHRoZSBPYnNpZGlhbiBBUEkgbm90IHdvcmtpbmcuXG4gICAgICAgIGlmIChpc0ltYWdlRW1iZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdCh2YWx1ZS5wYXRoLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgICAgIGlmICghcmVhbEZpbGUpIHJldHVybiA8TWFya2Rvd24gY29udGVudD17dmFsdWUubWFya2Rvd24oKX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG5cbiAgICAgICAgICAgIGxldCBkaW1lbnNpb25zID0gZXh0cmFjdEltYWdlRGltZW5zaW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgcmVzb3VyY2VQYXRoID0gYXBwLnZhdWx0LmdldFJlc291cmNlUGF0aChyZWFsRmlsZSk7XG5cbiAgICAgICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IGhlaWdodD17ZGltZW5zaW9uc1sxXX0gLz47XG4gICAgICAgICAgICBlbHNlIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IC8+O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gPGltZyBhbHQ9e3ZhbHVlLnBhdGh9IHNyYz17cmVzb3VyY2VQYXRofSAvPjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbWJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxFbWJlZCBsaW5rPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXtpbmxpbmV9IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPYnNpZGlhbkxpbmsgbGluaz17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD4mbHQ7ZnVuY3Rpb24mZ3Q7PC9GcmFnbWVudD47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtcImRhdGF2aWV3IGRhdGF2aWV3LXVsIGRhdGF2aWV3LXJlc3VsdC1saXN0LXVsXCJ9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cImRhdGF2aWV3LXJlc3VsdC1saXN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDApIHJldHVybiA8RnJhZ21lbnQ+Jmx0O0VtcHR5IExpc3QmZ3Q7PC9GcmFnbWVudD47XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZGF0YXZpZXcgZGF0YXZpZXctcmVzdWx0LWxpc3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5kZXggPT0gMCA/IFwiXCIgOiBcIiwgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIC8vIERvbid0IHJlbmRlciBjbGFzc2VzIGluIGNhc2UgdGhleSBoYXZlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOyBzcG9vcHkuXG4gICAgICAgIGlmICh2YWx1ZT8uY29uc3RydWN0b3I/Lm5hbWUgJiYgdmFsdWU/LmNvbnN0cnVjdG9yPy5uYW1lICE9IFwiT2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O3t2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfSZndDs8L0ZyYWdtZW50PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy11bCBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LXVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy1saSBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX06IDxMaXQgdmFsdWU9e3ZhbHVlfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e2lubGluZX0gZGVwdGg9e2RlcHRoICsgMX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT0gMCkgcmV0dXJuIDxGcmFnbWVudD4mbHQ7RW1wdHkgT2JqZWN0Jmd0OzwvRnJhZ21lbnQ+O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGF2aWV3IGRhdGF2aWV3LXJlc3VsdC1vYmplY3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmRleCA9PSAwID8gXCJcIiA6IFwiLCBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7a2V5fTogPExpdCB2YWx1ZT17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O1VucmVjb2duaXplZDoge0pTT04uc3RyaW5naWZ5KHZhbHVlKX0mZ3Q7PC9GcmFnbWVudD47XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogSW50ZWxsaWdlbnRseSByZW5kZXIgYW4gYXJiaXRyYXJ5IGxpdGVyYWwgdmFsdWUuICovXG5leHBvcnQgY29uc3QgTGl0ID0gbWVtbyhSYXdMaXQpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJlbmRlciBhIHByZXR0eSBjZW50ZXJlZCBlcnJvciBtZXNzYWdlIGluIGEgYm94LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVycm9yTWVzc2FnZSh7XG4gICAgdGl0bGUsXG4gICAgbWVzc2FnZSxcbiAgICBlcnJvcixcbiAgICByZXNldCxcbn06IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlc2V0PzogKCkgPT4gdm9pZDtcbn0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLWJveFwiPlxuICAgICAgICAgICAge3RpdGxlICYmIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci10aXRsZVwiPnt0aXRsZX08L2g0Pn1cbiAgICAgICAgICAgIHttZXNzYWdlICYmIDxwIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLW1lc3NhZ2VcIj57bWVzc2FnZX08L3A+fVxuICAgICAgICAgICAge2Vycm9yICYmIDxwcmUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZXJyb3ItcHJlXCI+e2Vycm9yfTwvcHJlPn1cbiAgICAgICAgICAgIHtyZXNldCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci1yZXRyeVwiIG9uQ2xpY2s9e3Jlc2V0fT5cbiAgICAgICAgICAgICAgICAgICAgUmVydW5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBBIHNpbXBsZSBlcnJvciBib3VuZGFyeSB3aGljaCByZW5kZXJzIGEgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpbXBsZUVycm9yQm91bmRhcnkoe1xuICAgIHRpdGxlLFxuICAgIG1lc3NhZ2UsXG4gICAgY2hpbGRyZW4sXG59OiBQcm9wc1dpdGhDaGlsZHJlbjx7IHRpdGxlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgW2Vycm9yLCByZXNldF0gPSB1c2VFcnJvckJvdW5kYXJ5KCk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgdGl0bGU9e3RpdGxlfSBtZXNzYWdlPXttZXNzYWdlfSBlcnJvcj17ZXJyb3Iuc3RhY2t9IHJlc2V0PXtyZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW59PC9GcmFnbWVudD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbmV4cG9ydCBjb25zdCBJTUFHRV9FWFRFTlNJT05TID0gT2JqZWN0LmZyZWV6ZShcbiAgICBuZXcgU2V0KFtcbiAgICAgICAgXCIudGlmXCIsXG4gICAgICAgIFwiLnRpZmZcIixcbiAgICAgICAgXCIuZ2lmXCIsXG4gICAgICAgIFwiLnBuZ1wiLFxuICAgICAgICBcIi5hcG5nXCIsXG4gICAgICAgIFwiLmF2aWZcIixcbiAgICAgICAgXCIuanBnXCIsXG4gICAgICAgIFwiLmpwZWdcIixcbiAgICAgICAgXCIuamZpZlwiLFxuICAgICAgICBcIi5wamVwZ1wiLFxuICAgICAgICBcIi5wanBcIixcbiAgICAgICAgXCIuc3ZnXCIsXG4gICAgICAgIFwiLndlYnBcIixcbiAgICAgICAgXCIuYm1wXCIsXG4gICAgICAgIFwiLmljb1wiLFxuICAgICAgICBcIi5jdXJcIixcbiAgICBdKVxuKTtcblxuLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGxpbmsgcG9pbnRzIHRvIGFuIGVtYmVkZGVkIGltYWdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2VFbWJlZChsaW5rOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaW5rLnBhdGguY29udGFpbnMoXCIuXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZXh0ZW5zaW9uID0gbGluay5wYXRoLnN1YnN0cmluZyhsaW5rLnBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICByZXR1cm4gbGluay50eXBlID09IFwiZmlsZVwiICYmIGxpbmsuZW1iZWQgJiYgSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKTtcbn1cblxuLyoqIEV4dHJhY3QgdGV4dCBvZiB0aGUgZm9ybSAnV3hIJyBvciAnVycgZnJvbSB0aGUgZGlzcGxheSBvZiBhIGxpbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEltYWdlRGltZW5zaW9ucyhsaW5rOiBMaW5rKTogW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWxpbmsuZGlzcGxheSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBtYXRjaCA9IC9eKFxcZCspeChcXGQrKSQvaXUuZXhlYyhsaW5rLmRpc3BsYXkpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIFtwYXJzZUludChtYXRjaFsxXSksIHBhcnNlSW50KG1hdGNoWzJdKV07XG5cbiAgICBsZXQgbWF0Y2gyID0gL14oXFxkKykvLmV4ZWMobGluay5kaXNwbGF5KTtcbiAgICBpZiAobWF0Y2gyKSByZXR1cm4gW3BhcnNlSW50KG1hdGNoMlsxXSldO1xuXG4gICAgLy8gTm8gbWF0Y2guXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKiogTm9ybWFsIGh5ZHJhdGlvbiB0aGF0IGF0dGFjaGVzIHRvIGEgRE9NIHRyZWUgYnV0IGRvZXMgbm90IGRpZmYgaXQuICovXG5leHBvcnQgY29uc3QgTU9ERV9IWURSQVRFID0gMSA8PCA1O1xuLyoqIFNpZ25pZmllcyB0aGlzIFZOb2RlIHN1c3BlbmRlZCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyICovXG5leHBvcnQgY29uc3QgTU9ERV9TVVNQRU5ERUQgPSAxIDw8IDc7XG4vKiogSW5kaWNhdGVzIHRoYXQgdGhpcyBub2RlIG5lZWRzIHRvIGJlIGluc2VydGVkIHdoaWxlIHBhdGNoaW5nIGNoaWxkcmVuICovXG5leHBvcnQgY29uc3QgSU5TRVJUX1ZOT0RFID0gMSA8PCAxNjtcbi8qKiBJbmRpY2F0ZXMgYSBWTm9kZSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYW5vdGhlciBWTm9kZSBpbiB0aGUgZGlmZiAqL1xuZXhwb3J0IGNvbnN0IE1BVENIRUQgPSAxIDw8IDE3O1xuXG4vKiogUmVzZXQgYWxsIG1vZGUgZmxhZ3MgKi9cbmV4cG9ydCBjb25zdCBSRVNFVF9NT0RFID0gfihNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRCk7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkogPSAvKiogQHR5cGUge2FueX0gKi8gKHt9KTtcbmV4cG9ydCBjb25zdCBFTVBUWV9BUlIgPSBbXTtcbmV4cG9ydCBjb25zdCBJU19OT05fRElNRU5TSU9OQUwgPVxuXHQvYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pO1xuIiwgImltcG9ydCB7IEVNUFRZX0FSUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2hhbmdlIHRoZSB0eXBlIG9mIGBvYmpgIHRvIGJlIGBPICYgUGBcblx0Zm9yIChsZXQgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG5cdHJldHVybiAvKiogQHR5cGUge08gJiBQfSAqLyAob2JqKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjaGlsZCBub2RlIGZyb20gaXRzIHBhcmVudCBpZiBhdHRhY2hlZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yXG4gKiBJRTExIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKClgLiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBpcyBzbWFsbGVyIHRoYW4gaW5jbHVkaW5nIGEgZGVkaWNhdGVkIHBvbHlmaWxsLlxuICogQHBhcmFtIHtwcmVhY3QuQ29udGFpbmVyTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuXHRsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0aWYgKHBhcmVudE5vZGUpIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZSA9IEVNUFRZX0FSUi5zbGljZTtcbiIsICJpbXBvcnQgeyBfY2F0Y2hFcnJvciB9IGZyb20gJy4vZGlmZi9jYXRjaC1lcnJvcic7XG5cbi8qKlxuICogVGhlIGBvcHRpb25gIG9iamVjdCBjYW4gcG90ZW50aWFsbHkgY29udGFpbiBjYWxsYmFjayBmdW5jdGlvbnNcbiAqIHRoYXQgYXJlIGNhbGxlZCBkdXJpbmcgdmFyaW91cyBzdGFnZXMgb2Ygb3VyIHJlbmRlcmVyLiBUaGlzIGlzIHRoZVxuICogZm91bmRhdGlvbiBvbiB3aGljaCBhbGwgb3VyIGFkZG9ucyBsaWtlIGBwcmVhY3QvZGVidWdgLCBgcHJlYWN0L2NvbXBhdGAsXG4gKiBhbmQgYHByZWFjdC9ob29rc2AgYXJlIGJhc2VkIG9uLiBTZWUgdGhlIGBPcHRpb25zYCB0eXBlIGluIGBpbnRlcm5hbC5kLnRzYFxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb24gaG9va3MgKG1vc3QgZWRpdG9ycy9JREVzIGFsbG93IHlvdSB0b1xuICogY3RybCtjbGljayBvciBjbWQrY2xpY2sgb24gbWFjIHRoZSB0eXBlIGRlZmluaXRpb24gYmVsb3cpLlxuICogQHR5cGUge09wdGlvbnN9XG4gKi9cbmNvbnN0IG9wdGlvbnMgPSB7XG5cdF9jYXRjaEVycm9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcHRpb25zO1xuIiwgImltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5cbmxldCB2bm9kZUlkID0gMDtcblxuLyoqXG4gKiBDcmVhdGUgYW4gdmlydHVhbCBub2RlICh1c2VkIGZvciBKU1gpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvciBmb3IgdGhpc1xuICogdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4nKS5Db21wb25lbnRDaGlsZHJlbj59IFtjaGlsZHJlbl0gVGhlIGNoaWxkcmVuIG9mIHRoZVxuICogdmlydHVhbCBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0ge30sXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRpO1xuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jaGlsZHJlbiA9XG5cdFx0XHRhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGNoaWxkcmVuO1xuXHR9XG5cblx0Ly8gSWYgYSBDb21wb25lbnQgVk5vZGUsIGNoZWNrIGZvciBhbmQgYXBwbHkgZGVmYXVsdFByb3BzXG5cdC8vIE5vdGU6IHR5cGUgbWF5IGJlIHVuZGVmaW5lZCBpbiBkZXZlbG9wbWVudCwgbXVzdCBuZXZlciBlcnJvciBoZXJlLlxuXHRpZiAodHlwZW9mIHR5cGUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlLmRlZmF1bHRQcm9wcyAhPSBudWxsKSB7XG5cdFx0Zm9yIChpIGluIHR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdHlwZS5kZWZhdWx0UHJvcHNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG5vcm1hbGl6ZWRQcm9wcywga2V5LCByZWYsIG51bGwpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlICh1c2VkIGludGVybmFsbHkgYnkgUHJlYWN0KVxuICogQHBhcmFtIHtWTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnRcbiAqIENvbnN0cnVjdG9yIGZvciB0aGlzIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBwcm9wcyBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHZpcnR1YWwgbm9kZS5cbiAqIElmIHRoaXMgdmlydHVhbCBub2RlIHJlcHJlc2VudHMgYSB0ZXh0IG5vZGUsIHRoaXMgaXMgdGhlIHRleHQgb2YgdGhlIG5vZGUgKHN0cmluZyBvciBudW1iZXIpLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBrZXkgVGhlIGtleSBmb3IgdGhpcyB2aXJ0dWFsIG5vZGUsIHVzZWQgd2hlblxuICogZGlmZmluZyBpdCBhZ2FpbnN0IGl0cyBjaGlsZHJlblxuICogQHBhcmFtIHtWTm9kZVtcInJlZlwiXX0gcmVmIFRoZSByZWYgcHJvcGVydHkgdGhhdCB3aWxsXG4gKiByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBjcmVhdGVkIGNoaWxkXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCByZWYsIG9yaWdpbmFsKSB7XG5cdC8vIFY4IHNlZW1zIHRvIGJlIGJldHRlciBhdCBkZXRlY3RpbmcgdHlwZSBzaGFwZXMgaWYgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBjYWxsIHNpdGVcblx0Ly8gRG8gbm90IGlubGluZSBpbnRvIGNyZWF0ZUVsZW1lbnQgYW5kIGNvZXJjZVRvVk5vZGUhXG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHMsXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRfY2hpbGRyZW46IG51bGwsXG5cdFx0X3BhcmVudDogbnVsbCxcblx0XHRfZGVwdGg6IDAsXG5cdFx0X2RvbTogbnVsbCxcblx0XHQvLyBfbmV4dERvbSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHVuZGVmaW5lZCBiL2MgaXQgd2lsbCBldmVudHVhbGx5XG5cdFx0Ly8gYmUgc2V0IHRvIGRvbS5uZXh0U2libGluZyB3aGljaCBjYW4gcmV0dXJuIGBudWxsYCBhbmQgaXQgaXMgaW1wb3J0YW50XG5cdFx0Ly8gdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVuaW5pdGlhbGl6ZWQgX25leHREb20gYW5kXG5cdFx0Ly8gYSBfbmV4dERvbSB0aGF0IGhhcyBiZWVuIHNldCB0byBgbnVsbGBcblx0XHRfbmV4dERvbTogdW5kZWZpbmVkLFxuXHRcdF9jb21wb25lbnQ6IG51bGwsXG5cdFx0Y29uc3RydWN0b3I6IHVuZGVmaW5lZCxcblx0XHRfb3JpZ2luYWw6IG9yaWdpbmFsID09IG51bGwgPyArK3Zub2RlSWQgOiBvcmlnaW5hbCxcblx0XHRfaW5kZXg6IC0xLFxuXHRcdF9mbGFnczogMFxuXHR9O1xuXG5cdC8vIE9ubHkgaW52b2tlIHRoZSB2bm9kZSBob29rIGlmIHRoaXMgd2FzICpub3QqIGEgZGlyZWN0IGNvcHk6XG5cdGlmIChvcmlnaW5hbCA9PSBudWxsICYmIG9wdGlvbnMudm5vZGUgIT0gbnVsbCkgb3B0aW9ucy52bm9kZSh2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuXHRyZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGcmFnbWVudChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCBQcmVhY3QgVk5vZGUuXG4gKiBAcGFyYW0geyp9IHZub2RlXG4gKiBAcmV0dXJucyB7dm5vZGUgaXMgVk5vZGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRWxlbWVudCA9IHZub2RlID0+XG5cdHZub2RlICE9IG51bGwgJiYgdm5vZGUuY29uc3RydWN0b3IgPT0gdW5kZWZpbmVkO1xuIiwgImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBkaWZmLCBjb21taXRSb290IH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGNsYXNzLiBQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2hcbiAqIHRyaWdnZXIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgVGhlIGluaXRpYWwgY29tcG9uZW50IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgaW5pdGlhbCBjb250ZXh0IGZyb20gcGFyZW50IGNvbXBvbmVudHMnXG4gKiBnZXRDaGlsZENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHVwZGF0ZSwgY2FsbGJhY2spIHtcblx0Ly8gb25seSBjbG9uZSBzdGF0ZSB3aGVuIGNvcHlpbmcgdG8gbmV4dFN0YXRlIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgcztcblx0aWYgKHRoaXMuX25leHRTdGF0ZSAhPSBudWxsICYmIHRoaXMuX25leHRTdGF0ZSAhPT0gdGhpcy5zdGF0ZSkge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGU7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZSA9IGFzc2lnbih7fSwgdGhpcy5zdGF0ZSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVwZGF0ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gU29tZSBsaWJyYXJpZXMgbGlrZSBgaW1tZXJgIG1hcmsgdGhlIGN1cnJlbnQgc3RhdGUgYXMgcmVhZG9ubHksXG5cdFx0Ly8gcHJldmVudGluZyB1cyBmcm9tIG11dGF0aW5nIGl0LCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LiBTZWUgIzI3MTZcblx0XHR1cGRhdGUgPSB1cGRhdGUoYXNzaWduKHt9LCBzKSwgdGhpcy5wcm9wcyk7XG5cdH1cblxuXHRpZiAodXBkYXRlKSB7XG5cdFx0YXNzaWduKHMsIHVwZGF0ZSk7XG5cdH1cblxuXHQvLyBTa2lwIHVwZGF0ZSBpZiB1cGRhdGVyIGZ1bmN0aW9uIHJldHVybmVkIG51bGxcblx0aWYgKHVwZGF0ZSA9PSBudWxsKSByZXR1cm47XG5cblx0aWYgKHRoaXMuX3Zub2RlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnRcbiAqIEB0aGlzIHtDb21wb25lbnR9XG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzXG4gKiByZS1yZW5kZXJlZFxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHQvLyBTZXQgcmVuZGVyIG1vZGUgc28gdGhhdCB3ZSBjYW4gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgcmVuZGVyIHJlcXVlc3Rcblx0XHQvLyBpcyBjb21pbmcgZnJvbS4gV2UgbmVlZCB0aGlzIGJlY2F1c2UgZm9yY2VVcGRhdGUgc2hvdWxkIG5ldmVyIGNhbGxcblx0XHQvLyBzaG91bGRDb21wb25lbnRVcGRhdGVcblx0XHR0aGlzLl9mb3JjZSA9IHRydWU7XG5cdFx0aWYgKGNhbGxiYWNrKSB0aGlzLl9yZW5kZXJDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gKiBWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgKGVnOiBKU1ggYXR0cmlidXRlcykgcmVjZWl2ZWQgZnJvbSBwYXJlbnRcbiAqIGVsZW1lbnQvY29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgVGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgbmVhcmVzdFxuICogYW5jZXN0b3IncyBgZ2V0Q2hpbGRDb250ZXh0KClgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50Q2hpbGRyZW4gfCB2b2lkfVxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBGcmFnbWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbY2hpbGRJbmRleF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbVNpYmxpbmcodm5vZGUsIGNoaWxkSW5kZXgpIHtcblx0aWYgKGNoaWxkSW5kZXggPT0gbnVsbCkge1xuXHRcdC8vIFVzZSBjaGlsZEluZGV4PT1udWxsIGFzIGEgc2lnbmFsIHRvIHJlc3VtZSB0aGUgc2VhcmNoIGZyb20gdGhlIHZub2RlJ3Mgc2libGluZ1xuXHRcdHJldHVybiB2bm9kZS5fcGFyZW50XG5cdFx0XHQ/IGdldERvbVNpYmxpbmcodm5vZGUuX3BhcmVudCwgdm5vZGUuX2luZGV4ICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgb2xkVk5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IG9sZFZOb2RlLl9kb20sXG5cdFx0Y29tbWl0UXVldWUgPSBbXSxcblx0XHRyZWZRdWV1ZSA9IFtdO1xuXG5cdGlmIChjb21wb25lbnQuX3BhcmVudERvbSkge1xuXHRcdGNvbnN0IG5ld1ZOb2RlID0gYXNzaWduKHt9LCBvbGRWTm9kZSk7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsICsgMTtcblx0XHRpZiAob3B0aW9ucy52bm9kZSkgb3B0aW9ucy52bm9kZShuZXdWTm9kZSk7XG5cblx0XHRkaWZmKFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20ub3duZXJTVkdFbGVtZW50ICE9PSB1bmRlZmluZWQsXG5cdFx0XHRvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUgPyBbb2xkRG9tXSA6IG51bGwsXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSA9PSBudWxsID8gZ2V0RG9tU2libGluZyhvbGRWTm9kZSkgOiBvbGREb20sXG5cdFx0XHQhIShvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsO1xuXHRcdG5ld1ZOb2RlLl9wYXJlbnQuX2NoaWxkcmVuW25ld1ZOb2RlLl9pbmRleF0gPSBuZXdWTm9kZTtcblx0XHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCBuZXdWTm9kZSwgcmVmUXVldWUpO1xuXG5cdFx0aWYgKG5ld1ZOb2RlLl9kb20gIT0gb2xkRG9tKSB7XG5cdFx0XHR1cGRhdGVQYXJlbnREb21Qb2ludGVycyhuZXdWTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUGFyZW50RG9tUG9pbnRlcnModm5vZGUpIHtcblx0aWYgKCh2bm9kZSA9IHZub2RlLl9wYXJlbnQpICE9IG51bGwgJiYgdm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjaGlsZCA9IHZub2RlLl9jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLl9kb20gIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5fZG9tID0gdm5vZGUuX2NvbXBvbmVudC5iYXNlID0gY2hpbGQuX2RvbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXIgcXVldWVcbiAqIEB0eXBlIHtBcnJheTxDb21wb25lbnQ+fVxuICovXG5sZXQgcmVyZW5kZXJRdWV1ZSA9IFtdO1xuXG4vKlxuICogVGhlIHZhbHVlIG9mIGBDb21wb25lbnQuZGVib3VuY2VgIG11c3QgYXN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBwYXNzZWQgaW4gY2FsbGJhY2suIEl0IGlzXG4gKiBpbXBvcnRhbnQgdGhhdCBjb250cmlidXRvcnMgdG8gUHJlYWN0IGNhbiBjb25zaXN0ZW50bHkgcmVhc29uIGFib3V0IHdoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCwgZXRjLlxuICogZG8sIGFuZCB3aGVuIHRoZWlyIGVmZmVjdHMgd2lsbCBiZSBhcHBsaWVkLiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBzb21lIGZ1cnRoZXIgcmVhZGluZyBvbiBkZXNpZ25pbmdcbiAqIGFzeW5jaHJvbm91cyBBUElzLlxuICogKiBbRGVzaWduaW5nIEFQSXMgZm9yIEFzeW5jaHJvbnldKGh0dHBzOi8vYmxvZy5penMubWUvMjAxMy8wOC9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAqICogW0NhbGxiYWNrcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzXShodHRwczovL2Jsb2cub21ldGVyLmNvbS8yMDExLzA3LzI0L2NhbGxiYWNrcy1zeW5jaHJvbm91cy1hbmQtYXN5bmNocm9ub3VzLylcbiAqL1xuXG5sZXQgcHJldkRlYm91bmNlO1xuXG5jb25zdCBkZWZlciA9XG5cdHR5cGVvZiBQcm9taXNlID09ICdmdW5jdGlvbidcblx0XHQ/IFByb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSlcblx0XHQ6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogRW5xdWV1ZSBhIHJlcmVuZGVyIG9mIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYyBUaGUgY29tcG9uZW50IHRvIHJlcmVuZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGMpIHtcblx0aWYgKFxuXHRcdCghYy5fZGlydHkgJiZcblx0XHRcdChjLl9kaXJ0eSA9IHRydWUpICYmXG5cdFx0XHRyZXJlbmRlclF1ZXVlLnB1c2goYykgJiZcblx0XHRcdCFwcm9jZXNzLl9yZXJlbmRlckNvdW50KyspIHx8XG5cdFx0cHJldkRlYm91bmNlICE9PSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nXG5cdCkge1xuXHRcdHByZXZEZWJvdW5jZSA9IG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmc7XG5cdFx0KHByZXZEZWJvdW5jZSB8fCBkZWZlcikocHJvY2Vzcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYVxuICogQHBhcmFtIHtDb21wb25lbnR9IGJcbiAqL1xuY29uc3QgZGVwdGhTb3J0ID0gKGEsIGIpID0+IGEuX3Zub2RlLl9kZXB0aCAtIGIuX3Zub2RlLl9kZXB0aDtcblxuLyoqIEZsdXNoIHRoZSByZW5kZXIgcXVldWUgYnkgcmVyZW5kZXJpbmcgYWxsIHF1ZXVlZCBjb21wb25lbnRzICovXG5mdW5jdGlvbiBwcm9jZXNzKCkge1xuXHRsZXQgYztcblx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdC8vIERvbid0IHVwZGF0ZSBgcmVuZGVyQ291bnRgIHlldC4gS2VlcCBpdHMgdmFsdWUgbm9uLXplcm8gdG8gcHJldmVudCB1bm5lY2Vzc2FyeVxuXHQvLyBwcm9jZXNzKCkgY2FsbHMgZnJvbSBnZXR0aW5nIHNjaGVkdWxlZCB3aGlsZSBgcXVldWVgIGlzIHN0aWxsIGJlaW5nIGNvbnN1bWVkLlxuXHR3aGlsZSAoKGMgPSByZXJlbmRlclF1ZXVlLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKGMuX2RpcnR5KSB7XG5cdFx0XHRsZXQgcmVuZGVyUXVldWVMZW5ndGggPSByZXJlbmRlclF1ZXVlLmxlbmd0aDtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjKTtcblx0XHRcdGlmIChyZXJlbmRlclF1ZXVlLmxlbmd0aCA+IHJlbmRlclF1ZXVlTGVuZ3RoKSB7XG5cdFx0XHRcdC8vIFdoZW4gaS5lLiByZXJlbmRlcmluZyBhIHByb3ZpZGVyIGFkZGl0aW9uYWwgbmV3IGl0ZW1zIGNhbiBiZSBpbmplY3RlZCwgd2Ugd2FudCB0b1xuXHRcdFx0XHQvLyBrZWVwIHRoZSBvcmRlciBmcm9tIHRvcCB0byBib3R0b20gd2l0aCB0aG9zZSBuZXcgaXRlbXMgc28gd2UgY2FuIGhhbmRsZSB0aGVtIGluIGFcblx0XHRcdFx0Ly8gc2luZ2xlIHBhc3Ncblx0XHRcdFx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSAwO1xufVxuXG5wcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbiIsICJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBrZXksIHZhbHVlKSB7XG5cdGlmIChrZXlbMF0gPT09ICctJykge1xuXHRcdHN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRzdHlsZVtrZXldID0gJyc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9ICdudW1iZXInIHx8IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGtleSkpIHtcblx0XHRzdHlsZVtrZXldID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlICsgJ3B4Jztcblx0fVxufVxuXG4vLyBBIGxvZ2ljYWwgY2xvY2sgdG8gc29sdmUgaXNzdWVzIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMzkyNy5cbi8vIFdoZW4gdGhlIERPTSBwZXJmb3JtcyBhbiBldmVudCBpdCBsZWF2ZXMgbWljcm8tdGlja3MgaW4gYmV0d2VlbiBidWJibGluZyB1cCB3aGljaCBtZWFucyB0aGF0XG4vLyBhbiBldmVudCBjYW4gdHJpZ2dlciBvbiBhIG5ld2x5IHJlYXRlZCBET00tbm9kZSB3aGlsZSB0aGUgZXZlbnQgYnViYmxlcyB1cC5cbi8vXG4vLyBPcmlnaW5hbGx5IGluc3BpcmVkIGJ5IFZ1ZVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2Jsb2IvY2FlYjhhNjg4MTFhMWIwZjc5L3BhY2thZ2VzL3J1bnRpbWUtZG9tL3NyYy9tb2R1bGVzL2V2ZW50cy50cyNMOTAtTDEwMSksXG4vLyBidXQgbW9kaWZpZWQgdG8gdXNlIGEgbG9naWNhbCBjbG9jayBpbnN0ZWFkIG9mIERhdGUubm93KCkgaW4gY2FzZSBldmVudCBoYW5kbGVycyBnZXQgYXR0YWNoZWRcbi8vIGFuZCBldmVudHMgZ2V0IGRpc3BhdGNoZWQgZHVyaW5nIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuLy9cbi8vIFRoZSBjbG9jayBpcyBpbmNyZW1lbnRlZCBhZnRlciBlYWNoIG5ldyBldmVudCBkaXNwYXRjaC4gVGhpcyBhbGxvd3MgMSAwMDAgMDAwIG5ldyBldmVudHNcbi8vIHBlciBzZWNvbmQgZm9yIG92ZXIgMjgwIHllYXJzIGJlZm9yZSB0aGUgdmFsdWUgcmVhY2hlcyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAoMioqNTMgLSAxKS5cbmxldCBldmVudENsb2NrID0gMDtcblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIG5vZGUgdG8gbW9kaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvXG4gKiBAcGFyYW0geyp9IG9sZFZhbHVlIFRoZSBvbGQgdmFsdWUgdGhlIHByb3BlcnR5IGhhZFxuICogQHBhcmFtIHtib29sZWFufSBpc1N2ZyBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoZG9tLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUsIGlzU3ZnKSB7XG5cdGxldCB1c2VDYXB0dXJlO1xuXG5cdG86IGlmIChuYW1lID09PSAnc3R5bGUnKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHR5cGVvZiBvbGRWYWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRkb20uc3R5bGUuY3NzVGV4dCA9IG9sZFZhbHVlID0gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbGRWYWx1ZSkge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gb2xkVmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoISh2YWx1ZSAmJiBuYW1lIGluIHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0c2V0U3R5bGUoZG9tLnN0eWxlLCBuYW1lLCAnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gdmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoIW9sZFZhbHVlIHx8IHZhbHVlW25hbWVdICE9PSBvbGRWYWx1ZVtuYW1lXSkge1xuXHRcdFx0XHRcdFx0c2V0U3R5bGUoZG9tLnN0eWxlLCBuYW1lLCB2YWx1ZVtuYW1lXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIEJlbmNobWFyayBmb3IgY29tcGFyaXNvbjogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81NzRjOTU0YmRiOTY1YjlhMDA5NjVhYzZcblx0ZWxzZSBpZiAobmFtZVswXSA9PT0gJ28nICYmIG5hbWVbMV0gPT09ICduJykge1xuXHRcdHVzZUNhcHR1cmUgPVxuXHRcdFx0bmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoLyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksICckMScpKTtcblxuXHRcdC8vIEluZmVyIGNvcnJlY3QgY2FzaW5nIGZvciBET00gYnVpbHQtaW4gZXZlbnRzOlxuXHRcdGlmIChcblx0XHRcdG5hbWUudG9Mb3dlckNhc2UoKSBpbiBkb20gfHxcblx0XHRcdG5hbWUgPT09ICdvbkZvY3VzT3V0JyB8fFxuXHRcdFx0bmFtZSA9PT0gJ29uRm9jdXNJbidcblx0XHQpXG5cdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDIpO1xuXHRcdGVsc2UgbmFtZSA9IG5hbWUuc2xpY2UoMik7XG5cblx0XHRpZiAoIWRvbS5fbGlzdGVuZXJzKSBkb20uX2xpc3RlbmVycyA9IHt9O1xuXHRcdGRvbS5fbGlzdGVuZXJzW25hbWUgKyB1c2VDYXB0dXJlXSA9IHZhbHVlO1xuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpZiAoIW9sZFZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlLl9hdHRhY2hlZCA9IGV2ZW50Q2xvY2s7XG5cdFx0XHRcdGRvbS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdXNlQ2FwdHVyZSA/IGV2ZW50UHJveHlDYXB0dXJlIDogZXZlbnRQcm94eSxcbiAgICAgICAgICB1c2VDYXB0dXJlXG4gICAgICAgICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZS5fYXR0YWNoZWQgPSBvbGRWYWx1ZS5fYXR0YWNoZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR1c2VDYXB0dXJlID8gZXZlbnRQcm94eUNhcHR1cmUgOiBldmVudFByb3h5LFxuXHRcdFx0XHR1c2VDYXB0dXJlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoaXNTdmcpIHtcblx0XHRcdC8vIE5vcm1hbGl6ZSBpbmNvcnJlY3QgcHJvcCB1c2FnZSBmb3IgU1ZHOlxuXHRcdFx0Ly8gLSB4bGluazpocmVmIC8geGxpbmtIcmVmIC0tPiBocmVmICh4bGluazpocmVmIHdhcyByZW1vdmVkIGZyb20gU1ZHIGFuZCBpc24ndCBuZWVkZWQpXG5cdFx0XHQvLyAtIGNsYXNzTmFtZSAtLT4gY2xhc3Ncblx0XHRcdG5hbWUgPSBuYW1lLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywgJ2gnKS5yZXBsYWNlKC9zTmFtZSQvLCAncycpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRuYW1lICE9ICd3aWR0aCcgJiZcblx0XHRcdG5hbWUgIT0gJ2hlaWdodCcgJiZcblx0XHRcdG5hbWUgIT0gJ2hyZWYnICYmXG5cdFx0XHRuYW1lICE9ICdsaXN0JyAmJlxuXHRcdFx0bmFtZSAhPSAnZm9ybScgJiZcblx0XHRcdC8vIERlZmF1bHQgdmFsdWUgaW4gYnJvd3NlcnMgaXMgYC0xYCBhbmQgYW4gZW1wdHkgc3RyaW5nIGlzXG5cdFx0XHQvLyBjYXN0IHRvIGAwYCBpbnN0ZWFkXG5cdFx0XHRuYW1lICE9ICd0YWJJbmRleCcgJiZcblx0XHRcdG5hbWUgIT0gJ2Rvd25sb2FkJyAmJlxuXHRcdFx0bmFtZSAhPSAncm93U3BhbicgJiZcblx0XHRcdG5hbWUgIT0gJ2NvbFNwYW4nICYmXG5cdFx0XHRuYW1lICE9ICdyb2xlJyAmJlxuXHRcdFx0bmFtZSBpbiBkb21cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRvbVtuYW1lXSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xuXHRcdFx0XHQvLyBsYWJlbGxlZCBicmVhayBpcyAxYiBzbWFsbGVyIGhlcmUgdGhhbiBhIHJldHVybiBzdGF0ZW1lbnQgKHNvcnJ5KVxuXHRcdFx0XHRicmVhayBvO1xuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHR9XG5cblx0XHQvLyBhcmlhLSBhbmQgZGF0YS0gYXR0cmlidXRlcyBoYXZlIG5vIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uXG5cdFx0Ly8gQSBgZmFsc2VgIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nXG5cdFx0Ly8gcHJlc2VudCwgc28gd2UgY2FuJ3QgcmVtb3ZlIGl0LiBGb3Igbm9uLWJvb2xlYW4gYXJpYVxuXHRcdC8vIGF0dHJpYnV0ZXMgd2UgY291bGQgdHJlYXQgZmFsc2UgYXMgYSByZW1vdmFsLCBidXQgdGhlXG5cdFx0Ly8gYW1vdW50IG9mIGV4Y2VwdGlvbnMgd291bGQgY29zdCB0b28gbWFueSBieXRlcy4gT24gdG9wIG9mXG5cdFx0Ly8gdGhhdCBvdGhlciBmcmFtZXdvcmtzIGdlbmVyYWxseSBzdHJpbmdpZnkgYGZhbHNlYC5cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gbmV2ZXIgc2VyaWFsaXplIGZ1bmN0aW9ucyBhcyBhdHRyaWJ1dGUgdmFsdWVzXG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSAhPT0gZmFsc2UgfHwgbmFtZVs0XSA9PT0gJy0nKSkge1xuXHRcdFx0ZG9tLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV2ZW50IHByb3h5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSB1c2VDYXB0dXJlIElzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY2FwdHVyZSBwaGFzZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50UHJveHkodXNlQ2FwdHVyZSkge1xuXHQvKipcblx0ICogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRsZXJzXG5cdCAqIEBwYXJhbSB7UHJlYWN0RXZlbnR9IGUgVGhlIGV2ZW50IG9iamVjdCBmcm9tIHRoZSBicm93c2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG5cdFx0XHRjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZS50eXBlICsgdXNlQ2FwdHVyZV07XG5cdFx0XHRpZiAoZS5fZGlzcGF0Y2hlZCA9PSBudWxsKSB7XG5cdFx0XHRcdGUuX2Rpc3BhdGNoZWQgPSBldmVudENsb2NrKys7XG5cblx0XHRcdFx0Ly8gV2hlbiBgZS5fZGlzcGF0Y2hlZGAgaXMgc21hbGxlciB0aGFuIHRoZSB0aW1lIHdoZW4gdGhlIHRhcmdldGVkIGV2ZW50XG5cdFx0XHRcdC8vIGhhbmRsZXIgd2FzIGF0dGFjaGVkIHdlIGtub3cgd2UgaGF2ZSBidWJibGVkIHVwIHRvIGFuIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWRcblx0XHRcdFx0Ly8gZHVyaW5nIHBhdGNoaW5nIHRoZSBET00uXG5cdFx0XHR9IGVsc2UgaWYgKGUuX2Rpc3BhdGNoZWQgPCBldmVudEhhbmRsZXIuX2F0dGFjaGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBldmVudEhhbmRsZXIob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IGV2ZW50UHJveHkgPSBjcmVhdGVFdmVudFByb3h5KGZhbHNlKTtcbmNvbnN0IGV2ZW50UHJveHlDYXB0dXJlID0gY3JlYXRlRXZlbnRQcm94eSh0cnVlKTtcbiIsICJpbXBvcnQgeyBlbnF1ZXVlUmVuZGVyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgbGV0IGkgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNvbnRleHRJZCkge1xuXHRjb250ZXh0SWQgPSAnX19jQycgKyBpKys7XG5cblx0Y29uc3QgY29udGV4dCA9IHtcblx0XHRfaWQ6IGNvbnRleHRJZCxcblx0XHRfZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRDb25zdW1lcihwcm9wcywgY29udGV4dFZhbHVlKSB7XG5cdFx0XHQvLyByZXR1cm4gcHJvcHMuY2hpbGRyZW4oXG5cdFx0XHQvLyBcdGNvbnRleHRbY29udGV4dElkXSA/IGNvbnRleHRbY29udGV4dElkXS5wcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuXHRcdFx0Ly8gKTtcblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbihjb250ZXh0VmFsdWUpO1xuXHRcdH0sXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRQcm92aWRlcihwcm9wcykge1xuXHRcdFx0aWYgKCF0aGlzLmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0XHQvKiogQHR5cGUge0NvbXBvbmVudFtdfSAqL1xuXHRcdFx0XHRsZXQgc3VicyA9IFtdO1xuXHRcdFx0XHRsZXQgY3R4ID0ge307XG5cdFx0XHRcdGN0eFtjb250ZXh0SWRdID0gdGhpcztcblxuXHRcdFx0XHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IGN0eDtcblxuXHRcdFx0XHR0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChfcHJvcHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gX3Byb3BzLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBJIHRoaW5rIHRoZSBmb3JjZWQgdmFsdWUgcHJvcGFnYXRpb24gaGVyZSB3YXMgb25seSBuZWVkZWQgd2hlbiBgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ2Agd2FzIGJlaW5nIGJ5cGFzc2VkOlxuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9jb21taXQvNGQzMzlmYjgwM2JlYTA5ZTlmMTk4YWJmMzhjYTFiZjhlYTRiNzc3MSNkaWZmLTU0NjgyY2UzODA5MzVhNzE3ZTQxYjhiZmM1NDczN2Y2UjM1OFxuXHRcdFx0XHRcdFx0Ly8gSW4gdGhvc2UgY2FzZXMgdGhvdWdoLCBldmVuIHdpdGggdGhlIHZhbHVlIGNvcnJlY3RlZCwgd2UncmUgZG91YmxlLXJlbmRlcmluZyBhbGwgbm9kZXMuXG5cdFx0XHRcdFx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCB0ZWxsIGZvbGtzIG5vdCB0byB1c2UgZm9yY2Utc3luYyBtb2RlLlxuXHRcdFx0XHRcdFx0Ly8gQ3VycmVudGx5LCB1c2luZyBgdXNlQ29udGV4dCgpYCBpbiBhIGNsYXNzIGNvbXBvbmVudCB3aWxsIG92ZXJ3cml0ZSBpdHMgYHRoaXMuY29udGV4dGAgdmFsdWUuXG5cdFx0XHRcdFx0XHQvLyBzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBcdGMuY29udGV4dCA9IF9wcm9wcy52YWx1ZTtcblx0XHRcdFx0XHRcdC8vIFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdC8vIH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBcdGMuY29udGV4dFtjb250ZXh0SWRdID0gX3Byb3BzLnZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gXHRlbnF1ZXVlUmVuZGVyKGMpO1xuXHRcdFx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdFx0XHRzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHRcdGMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnN1YiA9IGMgPT4ge1xuXHRcdFx0XHRcdHN1YnMucHVzaChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGMpLCAxKTtcblx0XHRcdFx0XHRcdGlmIChvbGQpIG9sZC5jYWxsKGMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcblx0XHR9XG5cdH07XG5cblx0Ly8gRGV2dG9vbHMgbmVlZHMgYWNjZXNzIHRvIHRoZSBjb250ZXh0IG9iamVjdCB3aGVuIGl0XG5cdC8vIGVuY291bnRlcnMgYSBQcm92aWRlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydFxuXHQvLyBzZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gdGhlIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcblx0Ly8gb2Ygb24gdGhlIGNvbXBvbmVudCBpdHNlbGYuIFNlZTpcblx0Ly8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbnRleHQuaHRtbCNjb250ZXh0ZGlzcGxheW5hbWVcblxuXHRyZXR1cm4gKGNvbnRleHQuUHJvdmlkZXIuX2NvbnRleHRSZWYgPSBjb250ZXh0LkNvbnN1bWVyLmNvbnRleHRUeXBlID1cblx0XHRjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBkaWZmLCB1bm1vdW50LCBhcHBseVJlZiB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKLCBFTVBUWV9BUlIsIElOU0VSVF9WTk9ERSwgTUFUQ0hFRCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuLyoqXG4gKiBEaWZmIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlIGNoaWxkcmVuIGFyZSBiZWluZ1xuICogZGlmZmVkXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZX0gbmV3UGFyZW50Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlXG4gKiBkaWZmJ2VkIGFnYWluc3Qgb2xkUGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5XG4gKiBnZXRDaGlsZENvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ2hpbGRyZW4oXG5cdHBhcmVudERvbSxcblx0cmVuZGVyUmVzdWx0LFxuXHRuZXdQYXJlbnRWTm9kZSxcblx0b2xkUGFyZW50Vk5vZGUsXG5cdGdsb2JhbENvbnRleHQsXG5cdGlzU3ZnLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IGksXG5cdFx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0XHRvbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdGNoaWxkVk5vZGUsXG5cdFx0LyoqIEB0eXBlIHtQcmVhY3RFbGVtZW50fSAqL1xuXHRcdG5ld0RvbSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0Zmlyc3RDaGlsZERvbTtcblxuXHQvLyBUaGlzIGlzIGEgY29tcHJlc3Npb24gb2Ygb2xkUGFyZW50Vk5vZGUhPW51bGwgJiYgb2xkUGFyZW50Vk5vZGUgIT0gRU1QVFlfT0JKICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbiB8fCBFTVBUWV9BUlJcblx0Ly8gYXMgRU1QVFlfT0JKLl9jaGlsZHJlbiBzaG91bGQgYmUgYHVuZGVmaW5lZGAuXG5cdC8qKiBAdHlwZSB7Vk5vZGVbXX0gKi9cblx0bGV0IG9sZENoaWxkcmVuID0gKG9sZFBhcmVudFZOb2RlICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbikgfHwgRU1QVFlfQVJSO1xuXG5cdGxldCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkobmV3UGFyZW50Vk5vZGUsIHJlbmRlclJlc3VsdCwgb2xkQ2hpbGRyZW4pO1xuXHRvbGREb20gPSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV07XG5cdFx0aWYgKFxuXHRcdFx0Y2hpbGRWTm9kZSA9PSBudWxsIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnYm9vbGVhbicgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdmdW5jdGlvbidcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkgaGFzIGFzc2lnbmVkIF9pbmRleCB0byBiZSB0aGVcblx0XHQvLyBtYXRjaGluZ0luZGV4IGZvciB0aGlzIFZOb2RlJ3Mgb2xkVk5vZGUgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIG9sZFZOb2RlKS5cblx0XHRpZiAoY2hpbGRWTm9kZS5faW5kZXggPT09IC0xKSB7XG5cdFx0XHRvbGRWTm9kZSA9IEVNUFRZX09CSjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltjaGlsZFZOb2RlLl9pbmRleF0gfHwgRU1QVFlfT0JKO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBjaGlsZFZOb2RlLl9pbmRleCB0byBpdHMgZmluYWwgaW5kZXhcblx0XHRjaGlsZFZOb2RlLl9pbmRleCA9IGk7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0aXNTdmcsXG5cdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0b2xkRG9tLFxuXHRcdFx0aXNIeWRyYXRpbmcsXG5cdFx0XHRyZWZRdWV1ZVxuXHRcdCk7XG5cblx0XHQvLyBBZGp1c3QgRE9NIG5vZGVzXG5cdFx0bmV3RG9tID0gY2hpbGRWTm9kZS5fZG9tO1xuXHRcdGlmIChjaGlsZFZOb2RlLnJlZiAmJiBvbGRWTm9kZS5yZWYgIT0gY2hpbGRWTm9kZS5yZWYpIHtcblx0XHRcdGlmIChvbGRWTm9kZS5yZWYpIHtcblx0XHRcdFx0YXBwbHlSZWYob2xkVk5vZGUucmVmLCBudWxsLCBjaGlsZFZOb2RlKTtcblx0XHRcdH1cblx0XHRcdHJlZlF1ZXVlLnB1c2goXG5cdFx0XHRcdGNoaWxkVk5vZGUucmVmLFxuXHRcdFx0XHRjaGlsZFZOb2RlLl9jb21wb25lbnQgfHwgbmV3RG9tLFxuXHRcdFx0XHRjaGlsZFZOb2RlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChmaXJzdENoaWxkRG9tID09IG51bGwgJiYgbmV3RG9tICE9IG51bGwpIHtcblx0XHRcdGZpcnN0Q2hpbGREb20gPSBuZXdEb207XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJiBJTlNFUlRfVk5PREUgfHxcblx0XHRcdG9sZFZOb2RlLl9jaGlsZHJlbiA9PT0gY2hpbGRWTm9kZS5fY2hpbGRyZW5cblx0XHQpIHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3Igb2xEb20gc2hvdWxkIGJlIHByZXNlbnQgb24gYSBET00gbm9kZVxuXHRcdFx0aWYgKG9sZERvbSAmJiAhb2xkRG9tLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdG9sZERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkVk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0XHRjaGlsZFZOb2RlLl9uZXh0RG9tICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIFNpbmNlIEZyYWdtZW50cyBvciBjb21wb25lbnRzIHRoYXQgcmV0dXJuIEZyYWdtZW50IGxpa2UgVk5vZGVzIGNhblxuXHRcdFx0Ly8gY29udGFpbiBtdWx0aXBsZSBET00gbm9kZXMgYXMgdGhlIHNhbWUgbGV2ZWwsIGNvbnRpbnVlIHRoZSBkaWZmIGZyb21cblx0XHRcdC8vIHRoZSBzaWJsaW5nIG9mIGxhc3QgRE9NIGNoaWxkIG9mIHRoaXMgY2hpbGQgVk5vZGVcblx0XHRcdG9sZERvbSA9IGNoaWxkVk5vZGUuX25leHREb207XG5cdFx0fSBlbHNlIGlmIChuZXdEb20pIHtcblx0XHRcdG9sZERvbSA9IG5ld0RvbS5uZXh0U2libGluZztcblx0XHR9XG5cblx0XHQvLyBFYWdlcmx5IGNsZWFudXAgX25leHREb20uIFdlIGRvbid0IG5lZWQgdG8gcGVyc2lzdCB0aGUgdmFsdWUgYmVjYXVzZSBpdFxuXHRcdC8vIGlzIG9ubHkgdXNlZCBieSBgZGlmZkNoaWxkcmVuYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcmVzdW1lIHRoZSBkaWZmXG5cdFx0Ly8gYWZ0ZXIgZGlmZmluZyBDb21wb25lbnRzIGFuZCBGcmFnbWVudHMuIE9uY2Ugd2Ugc3RvcmUgaXQgdGhlIG5leHRET01cblx0XHQvLyBsb2NhbCB2YXIsIHdlIGNhbiBjbGVhbiB1cCB0aGUgcHJvcGVydHkuIEFsc28gcHJldmVudHMgdXMgaGFuZ2luZyBvbiB0b1xuXHRcdC8vIERPTSBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4gdW5tb3VudGVkLlxuXHRcdGNoaWxkVk5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG5cblx0XHQvLyBVbnNldCBkaWZmaW5nIGZsYWdzXG5cdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJj0gfihJTlNFUlRfVk5PREUgfCBNQVRDSEVEKTtcblx0fVxuXG5cdC8vIFRPRE86IFdpdGggbmV3IGNoaWxkIGRpZmZpbmcgYWxnbywgY29uc2lkZXIgYWx0IHdheXMgdG8gZGlmZiBGcmFnbWVudHMuXG5cdC8vIFN1Y2ggYXMgZHJvcHBpbmcgb2xkRG9tIGFuZCBtb3ZpbmcgZnJhZ21lbnRzIGluIHBsYWNlXG5cdC8vXG5cdC8vIEJlY2F1c2UgdGhlIG5ld1BhcmVudFZOb2RlIGlzIEZyYWdtZW50LWxpa2UsIHdlIG5lZWQgdG8gc2V0IGl0J3Ncblx0Ly8gX25leHREb20gcHJvcGVydHkgdG8gdGhlIG5leHRTaWJsaW5nIG9mIGl0cyBsYXN0IGNoaWxkIERPTSBub2RlLlxuXHQvL1xuXHQvLyBgb2xkRG9tYCBjb250YWlucyB0aGUgY29ycmVjdCB2YWx1ZSBoZXJlIGJlY2F1c2UgaWYgdGhlIGxhc3QgY2hpbGRcblx0Ly8gaXMgYSBGcmFnbWVudC1saWtlLCB0aGVuIG9sZERvbSBoYXMgYWxyZWFkeSBiZWVuIHNldCB0byB0aGF0IGNoaWxkJ3MgX25leHREb20uXG5cdC8vIElmIHRoZSBsYXN0IGNoaWxkIGlzIGEgRE9NIFZOb2RlLCB0aGVuIG9sZERvbSB3aWxsIGJlIHNldCB0byB0aGF0IERPTVxuXHQvLyBub2RlJ3MgbmV4dFNpYmxpbmcuXG5cdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gb2xkRG9tO1xuXHRuZXdQYXJlbnRWTm9kZS5fZG9tID0gZmlyc3RDaGlsZERvbTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbikge1xuXHQvKiogQHR5cGUge251bWJlcn0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBjaGlsZFZOb2RlO1xuXHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRsZXQgb2xkVk5vZGU7XG5cblx0Y29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSByZW5kZXJSZXN1bHQubGVuZ3RoO1xuXHRsZXQgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGgsXG5cdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbkxlbmd0aDtcblxuXHRsZXQgc2tldyA9IDA7XG5cblx0bmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBXZSBhcmUgcmV1c2luZyB0aGUgY2hpbGRWTm9kZSB2YXJpYWJsZSB0byBob2xkIGJvdGggdGhlXG5cdFx0Ly8gcHJlIGFuZCBwb3N0IG5vcm1hbGl6ZWQgY2hpbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUgPSByZW5kZXJSZXN1bHRbaV07XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlID09IG51bGwgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdib29sZWFuJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Z1bmN0aW9uJ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgbmV3Vk5vZGUgaXMgYmVpbmcgcmV1c2VkIChlLmcuIDxkaXY+e3JldXNlfXtyZXVzZX08L2Rpdj4pIGluIHRoZSBzYW1lIGRpZmYsXG5cdFx0Ly8gb3Igd2UgYXJlIHJlbmRlcmluZyBhIGNvbXBvbmVudCAoZS5nLiBzZXRTdGF0ZSkgY29weSB0aGUgb2xkVk5vZGVzIHNvIGl0IGNhbiBoYXZlXG5cdFx0Ly8gaXQncyBvd24gRE9NICYgZXRjLiBwb2ludGVyc1xuXHRcdGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ3N0cmluZycgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdudW1iZXInIHx8XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdmFsaWQtdHlwZW9mXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnYmlnaW50JyB8fFxuXHRcdFx0Y2hpbGRWTm9kZS5jb25zdHJ1Y3RvciA9PSBTdHJpbmdcblx0XHQpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRWTm9kZSkpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdHsgY2hpbGRyZW46IGNoaWxkVk5vZGUgfSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGNoaWxkVk5vZGUuY29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCAmJiBjaGlsZFZOb2RlLl9kZXB0aCA+IDApIHtcblx0XHRcdC8vIFZOb2RlIGlzIGFscmVhZHkgaW4gdXNlLCBjbG9uZSBpdC4gVGhpcyBjYW4gaGFwcGVuIGluIHRoZSBmb2xsb3dpbmdcblx0XHRcdC8vIHNjZW5hcmlvOlxuXHRcdFx0Ly8gICBjb25zdCByZXVzZSA9IDxkaXYgLz5cblx0XHRcdC8vICAgPGRpdj57cmV1c2V9PHNwYW4gLz57cmV1c2V9PC9kaXY+XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdGNoaWxkVk5vZGUudHlwZSxcblx0XHRcdFx0Y2hpbGRWTm9kZS5wcm9wcyxcblx0XHRcdFx0Y2hpbGRWTm9kZS5rZXksXG5cdFx0XHRcdGNoaWxkVk5vZGUucmVmID8gY2hpbGRWTm9kZS5yZWYgOiBudWxsLFxuXHRcdFx0XHRjaGlsZFZOb2RlLl9vcmlnaW5hbFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNoaWxkVk5vZGU7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2tld2VkSW5kZXggPSBpICsgc2tldztcblxuXHRcdC8vIEhhbmRsZSB1bm1vdW50aW5nIG51bGwgcGxhY2Vob2xkZXJzLCBpLmUuIFZOb2RlID0+IG51bGwgaW4gdW5rZXllZCBjaGlsZHJlblxuXHRcdGlmIChjaGlsZFZOb2RlID09IG51bGwpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRWTm9kZSAmJlxuXHRcdFx0XHRvbGRWTm9kZS5rZXkgPT0gbnVsbCAmJlxuXHRcdFx0XHRvbGRWTm9kZS5fZG9tICYmXG5cdFx0XHRcdChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMFxuXHRcdFx0KSB7XG5cdFx0XHRcdGlmIChvbGRWTm9kZS5fZG9tID09IG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tKSB7XG5cdFx0XHRcdFx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBnZXREb21TaWJsaW5nKG9sZFZOb2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHVubW91bnQob2xkVk5vZGUsIG9sZFZOb2RlLCBmYWxzZSk7XG5cblx0XHRcdFx0Ly8gRXhwbGljaXRseSBudWxsaWZ5IHRoaXMgcG9zaXRpb24gaW4gb2xkQ2hpbGRyZW4gaW5zdGVhZCBvZiBqdXN0XG5cdFx0XHRcdC8vIHNldHRpbmcgYF9tYXRjaD10cnVlYCB0byBwcmV2ZW50IG90aGVyIHJvdXRpbmVzIChlLmcuXG5cdFx0XHRcdC8vIGBmaW5kTWF0Y2hpbmdJbmRleGAgb3IgYGdldERvbVNpYmxpbmdgKSBmcm9tIHRoaW5raW5nIFZOb2RlcyBvciBET01cblx0XHRcdFx0Ly8gbm9kZXMgaW4gdGhpcyBwb3NpdGlvbiBhcmUgc3RpbGwgYXZhaWxhYmxlIHRvIGJlIHVzZWQgaW4gZGlmZmluZyB3aGVuXG5cdFx0XHRcdC8vIHRoZXkgaGF2ZSBhY3R1YWxseSBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLiBGb3IgZXhhbXBsZSwgYnkgb25seVxuXHRcdFx0XHQvLyBzZXR0aW5nIGBfbWF0Y2g9dHJ1ZWAgaGVyZSwgdGhlIHVubW91bnRpbmcgbG9vcCBsYXRlciB3b3VsZCBhdHRlbXB0XG5cdFx0XHRcdC8vIHRvIHVubW91bnQgdGhpcyBWTm9kZSBhZ2FpbiBzZWVpbmcgYF9tYXRjaD09dHJ1ZWAuICBGdXJ0aGVyLFxuXHRcdFx0XHQvLyBnZXREb21TaWJsaW5nIGRvZXNuJ3Qga25vdyBhYm91dCBfbWF0Y2ggYW5kIHNvIHdvdWxkIGluY29ycmVjdGx5XG5cdFx0XHRcdC8vIGFzc3VtZSBET00gbm9kZXMgaW4gdGhpcyBzdWJ0cmVlIGFyZSBtb3VudGVkIGFuZCB1c2FibGUuXG5cdFx0XHRcdG9sZENoaWxkcmVuW3NrZXdlZEluZGV4XSA9IG51bGw7XG5cdFx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuLS07XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjaGlsZFZOb2RlLl9wYXJlbnQgPSBuZXdQYXJlbnRWTm9kZTtcblx0XHRjaGlsZFZOb2RlLl9kZXB0aCA9IG5ld1BhcmVudFZOb2RlLl9kZXB0aCArIDE7XG5cblx0XHRjb25zdCBtYXRjaGluZ0luZGV4ID0gZmluZE1hdGNoaW5nSW5kZXgoXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkQ2hpbGRyZW4sXG5cdFx0XHRza2V3ZWRJbmRleCxcblx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuXG5cdFx0KTtcblxuXHRcdC8vIFRlbXBvcmFyaWx5IHN0b3JlIHRoZSBtYXRjaGluZ0luZGV4IG9uIHRoZSBfaW5kZXggcHJvcGVydHkgc28gd2UgY2FuIHB1bGxcblx0XHQvLyBvdXQgdGhlIG9sZFZOb2RlIGluIGRpZmZDaGlsZHJlbi4gV2UnbGwgb3ZlcnJpZGUgdGhpcyB0byB0aGUgVk5vZGUnc1xuXHRcdC8vIGZpbmFsIGluZGV4IGFmdGVyIHVzaW5nIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSBvbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUuX2luZGV4ID0gbWF0Y2hpbmdJbmRleDtcblxuXHRcdG9sZFZOb2RlID0gbnVsbDtcblx0XHRpZiAobWF0Y2hpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bbWF0Y2hpbmdJbmRleF07XG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbi0tO1xuXHRcdFx0aWYgKG9sZFZOb2RlKSB7XG5cdFx0XHRcdG9sZFZOb2RlLl9mbGFncyB8PSBNQVRDSEVEO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhlcmUsIHdlIGRlZmluZSBpc01vdW50aW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHNrZXcgZGlmZmluZ1xuXHRcdC8vIGFsZ29yaXRobS4gTm9kZXMgdGhhdCBhcmUgdW5zdXNwZW5kaW5nIGFyZSBjb25zaWRlcmVkIG1vdW50aW5nIGFuZCB3ZSBkZXRlY3Rcblx0XHQvLyB0aGlzIGJ5IGNoZWNraW5nIGlmIG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbFxuXHRcdGNvbnN0IGlzTW91bnRpbmcgPSBvbGRWTm9kZSA9PSBudWxsIHx8IG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbDtcblxuXHRcdGlmIChpc01vdW50aW5nKSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PSAtMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlIGFyZSBtb3VudGluZyBhIERPTSBWTm9kZSwgbWFyayBpdCBmb3IgaW5zZXJ0aW9uXG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkVk5vZGUudHlwZSAhPSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggIT09IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PT0gc2tld2VkSW5kZXggKyAxKSB7XG5cdFx0XHRcdHNrZXcrKztcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA+IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRcdGlmIChyZW1haW5pbmdPbGRDaGlsZHJlbiA+IG5ld0NoaWxkcmVuTGVuZ3RoIC0gc2tld2VkSW5kZXgpIHtcblx0XHRcdFx0XHRza2V3ICs9IG1hdGNoaW5nSW5kZXggLSBza2V3ZWRJbmRleDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRza2V3LS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA8IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IHNrZXdlZEluZGV4IC0gMSkge1xuXHRcdFx0XHRcdHNrZXcgPSBtYXRjaGluZ0luZGV4IC0gc2tld2VkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNrZXcgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNb3ZlIHRoaXMgVk5vZGUncyBET00gaWYgdGhlIG9yaWdpbmFsIGluZGV4IChtYXRjaGluZ0luZGV4KSBkb2Vzbid0XG5cdFx0XHQvLyBtYXRjaCB0aGUgbmV3IHNrZXcgaW5kZXggKGkgKyBuZXcgc2tldylcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ICE9PSBpICsgc2tldykge1xuXHRcdFx0XHRjaGlsZFZOb2RlLl9mbGFncyB8PSBJTlNFUlRfVk5PREU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHJlbWFpbmluZyBvbGRDaGlsZHJlbiBpZiB0aGVyZSBhcmUgYW55LiBMb29wIGZvcndhcmRzIHNvIHRoYXQgYXMgd2Vcblx0Ly8gdW5tb3VudCBET00gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvbGRDaGlsZHJlbiwgd2UgY2FuIGFkanVzdCBvbGREb20gdG9cblx0Ly8gcG9pbnQgdG8gdGhlIG5leHQgY2hpbGQsIHdoaWNoIG5lZWRzIHRvIGJlIHRoZSBmaXJzdCBET00gbm9kZSB0aGF0IHdvbid0IGJlXG5cdC8vIHVubW91bnRlZC5cblx0aWYgKHJlbWFpbmluZ09sZENoaWxkcmVuKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApIHtcblx0XHRcdFx0aWYgKG9sZFZOb2RlLl9kb20gPT0gbmV3UGFyZW50Vk5vZGUuX25leHREb20pIHtcblx0XHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dW5tb3VudChvbGRWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb21cbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpbnNlcnQocGFyZW50Vk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKSB7XG5cdC8vIE5vdGU6IFZOb2RlcyBpbiBuZXN0ZWQgc3VzcGVuZGVkIHRyZWVzIG1heSBiZSBtaXNzaW5nIF9jaGlsZHJlbi5cblxuXHRpZiAodHlwZW9mIHBhcmVudFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGxldCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLl9jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMDsgY2hpbGRyZW4gJiYgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2hpbGRyZW5baV0pIHtcblx0XHRcdFx0Ly8gSWYgd2UgZW50ZXIgdGhpcyBjb2RlIHBhdGggb24gc0NVIGJhaWxvdXQsIHdoZXJlIHdlIGNvcHlcblx0XHRcdFx0Ly8gb2xkVk5vZGUuX2NoaWxkcmVuIHRvIG5ld1ZOb2RlLl9jaGlsZHJlbiwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIG9sZFxuXHRcdFx0XHQvLyBjaGlsZHJlbidzIF9wYXJlbnQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV3Vk5vZGUgKHBhcmVudFZOb2RlXG5cdFx0XHRcdC8vIGhlcmUpLlxuXHRcdFx0XHRjaGlsZHJlbltpXS5fcGFyZW50ID0gcGFyZW50Vk5vZGU7XG5cdFx0XHRcdG9sZERvbSA9IGluc2VydChjaGlsZHJlbltpXSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvbGREb207XG5cdH0gZWxzZSBpZiAocGFyZW50Vk5vZGUuX2RvbSAhPSBvbGREb20pIHtcblx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKHBhcmVudFZOb2RlLl9kb20sIG9sZERvbSB8fCBudWxsKTtcblx0XHRvbGREb20gPSBwYXJlbnRWTm9kZS5fZG9tO1xuXHR9XG5cblx0ZG8ge1xuXHRcdG9sZERvbSA9IG9sZERvbSAmJiBvbGREb20ubmV4dFNpYmxpbmc7XG5cdH0gd2hpbGUgKG9sZERvbSAhPSBudWxsICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCk7XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVufSBjaGlsZHJlbiBUaGUgdW5mbGF0dGVuZWQgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsXG4gKiBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGVbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hpbGRBcnJheShjaGlsZHJlbiwgb3V0KSB7XG5cdG91dCA9IG91dCB8fCBbXTtcblx0aWYgKGNoaWxkcmVuID09IG51bGwgfHwgdHlwZW9mIGNoaWxkcmVuID09ICdib29sZWFuJykge1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4uc29tZShjaGlsZCA9PiB7XG5cdFx0XHR0b0NoaWxkQXJyYXkoY2hpbGQsIG91dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0LnB1c2goY2hpbGRyZW4pO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gY2hpbGRWTm9kZVxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdlZEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtYWluaW5nT2xkQ2hpbGRyZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0luZGV4KFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRDaGlsZHJlbixcblx0c2tld2VkSW5kZXgsXG5cdHJlbWFpbmluZ09sZENoaWxkcmVuXG4pIHtcblx0Y29uc3Qga2V5ID0gY2hpbGRWTm9kZS5rZXk7XG5cdGNvbnN0IHR5cGUgPSBjaGlsZFZOb2RlLnR5cGU7XG5cdGxldCB4ID0gc2tld2VkSW5kZXggLSAxO1xuXHRsZXQgeSA9IHNrZXdlZEluZGV4ICsgMTtcblx0bGV0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXG5cdC8vIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGlmIHRoZXJlIGFyZSBtb3JlIGNoaWxkcmVuXG5cdC8vIChyZW1haW5pbmdPbGRDaGlsZHJlbikgdG8gc2VhcmNoLiBIb3dldmVyLCBpZiB0aGUgb2xkVk5vZGUgd2UganVzdCBsb29rZWRcblx0Ly8gYXQgc2tld2VkSW5kZXggd2FzIG5vdCBhbHJlYWR5IHVzZWQgaW4gdGhpcyBkaWZmLCB0aGVuIHRoZXJlIG11c3QgYmUgYXRcblx0Ly8gbGVhc3QgMSBvdGhlciAoc28gZ3JlYXRlciB0aGFuIDEpIHJlbWFpbmluZ09sZENoaWxkcmVuIHRvIGF0dGVtcHQgdG8gbWF0Y2hcblx0Ly8gYWdhaW5zdC4gU28gdGhlIGZvbGxvd2luZyBjb25kaXRpb24gY2hlY2tzIHRoYXQgZW5zdXJpbmdcblx0Ly8gcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAxIGlmIHRoZSBvbGRWTm9kZSBpcyBub3QgYWxyZWFkeSB1c2VkL21hdGNoZWQuIEVsc2Vcblx0Ly8gaWYgdGhlIG9sZFZOb2RlIHdhcyBudWxsIG9yIG1hdGNoZWQsIHRoZW4gdGhlcmUgY291bGQgbmVlZHMgdG8gYmUgYXQgbGVhc3Rcblx0Ly8gMSAoYWthIGByZW1haW5pbmdPbGRDaGlsZHJlbiA+IDBgKSBjaGlsZHJlbiB0byBmaW5kIGFuZCBjb21wYXJlIGFnYWluc3QuXG5cdGxldCBzaG91bGRTZWFyY2ggPVxuXHRcdHJlbWFpbmluZ09sZENoaWxkcmVuID5cblx0XHQob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgPyAxIDogMCk7XG5cblx0aWYgKFxuXHRcdG9sZFZOb2RlID09PSBudWxsIHx8XG5cdFx0KG9sZFZOb2RlICYmXG5cdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlICYmXG5cdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBza2V3ZWRJbmRleDtcblx0fSBlbHNlIGlmIChzaG91bGRTZWFyY2gpIHtcblx0XHR3aGlsZSAoeCA+PSAwIHx8IHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdGlmICh4ID49IDApIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt4XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHg7XG5cdFx0XHRcdH1cblx0XHRcdFx0eC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoeSA8IG9sZENoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3ldO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b2xkVk5vZGUgJiZcblx0XHRcdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgJiZcblx0XHRcdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4geTtcblx0XHRcdFx0fVxuXHRcdFx0XHR5Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuIiwgImltcG9ydCB7XG5cdEVNUFRZX09CSixcblx0TU9ERV9IWURSQVRFLFxuXHRNT0RFX1NVU1BFTkRFRCxcblx0UkVTRVRfTU9ERVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IGRpZmZDaGlsZHJlbiB9IGZyb20gJy4vY2hpbGRyZW4nO1xuaW1wb3J0IHsgc2V0UHJvcGVydHkgfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7IGFzc2lnbiwgaXNBcnJheSwgcmVtb3ZlTm9kZSwgc2xpY2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgYW5kIGFwcGx5IHByb3BlciBjaGFuZ2VzIHRvIHRoZSBET01cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBwYXJlbnQgb2YgdGhlIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0LiBNb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3ZnIFdoZXRoZXIgb3Igbm90IHRoaXMgZWxlbWVudCBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0aXNTdmcsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IHRtcCxcblx0XHRuZXdUeXBlID0gbmV3Vk5vZGUudHlwZTtcblxuXHQvLyBXaGVuIHBhc3NpbmcgdGhyb3VnaCBjcmVhdGVFbGVtZW50IGl0IGFzc2lnbnMgdGhlIG9iamVjdFxuXHQvLyBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWQuIFRoaXMgdG8gcHJldmVudCBKU09OLWluamVjdGlvbi5cblx0aWYgKG5ld1ZOb2RlLmNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG5cdC8vIElmIHRoZSBwcmV2aW91cyBkaWZmIGJhaWxlZCBvdXQsIHJlc3VtZSBjcmVhdGluZy9oeWRyYXRpbmcuXG5cdGlmIChvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX1NVU1BFTkRFRCkge1xuXHRcdGlzSHlkcmF0aW5nID0gISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKTtcblx0XHRvbGREb20gPSBuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IFtvbGREb21dO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLl9kaWZmKSkgdG1wKG5ld1ZOb2RlKTtcblxuXHRvdXRlcjogaWYgKHR5cGVvZiBuZXdUeXBlID09ICdmdW5jdGlvbicpIHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IGMsIGlzTmV3LCBvbGRQcm9wcywgb2xkU3RhdGUsIHNuYXBzaG90LCBjbGVhclByb2Nlc3NpbmdFeGNlcHRpb247XG5cdFx0XHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblxuXHRcdFx0Ly8gTmVjZXNzYXJ5IGZvciBjcmVhdGVDb250ZXh0IGFwaS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgcGFzc1xuXHRcdFx0Ly8gdGhlIGNvbnRleHQgdmFsdWUgYXMgYHRoaXMuY29udGV4dGAganVzdCBmb3IgdGhpcyBjb21wb25lbnQuXG5cdFx0XHR0bXAgPSBuZXdUeXBlLmNvbnRleHRUeXBlO1xuXHRcdFx0bGV0IHByb3ZpZGVyID0gdG1wICYmIGdsb2JhbENvbnRleHRbdG1wLl9pZF07XG5cdFx0XHRsZXQgY29tcG9uZW50Q29udGV4dCA9IHRtcFxuXHRcdFx0XHQ/IHByb3ZpZGVyXG5cdFx0XHRcdFx0PyBwcm92aWRlci5wcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogdG1wLl9kZWZhdWx0VmFsdWVcblx0XHRcdFx0OiBnbG9iYWxDb250ZXh0O1xuXG5cdFx0XHQvLyBHZXQgY29tcG9uZW50IGFuZCBzZXQgaXQgdG8gYGNgXG5cdFx0XHRpZiAob2xkVk5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0XHRjID0gbmV3Vk5vZGUuX2NvbXBvbmVudCA9IG9sZFZOb2RlLl9jb21wb25lbnQ7XG5cdFx0XHRcdGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wZW5kaW5nRXJyb3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnN0YW50aWF0ZSB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0XHRpZiAoJ3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBCYXNlQ29tcG9uZW50KFxuXHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjLmNvbnN0cnVjdG9yID0gbmV3VHlwZTtcblx0XHRcdFx0XHRjLnJlbmRlciA9IGRvUmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm92aWRlcikgcHJvdmlkZXIuc3ViKGMpO1xuXG5cdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0aWYgKCFjLnN0YXRlKSBjLnN0YXRlID0ge307XG5cdFx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRcdGMuX2dsb2JhbENvbnRleHQgPSBnbG9iYWxDb250ZXh0O1xuXHRcdFx0XHRpc05ldyA9IGMuX2RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludm9rZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcblx0XHRcdGlmIChjLl9uZXh0U3RhdGUgPT0gbnVsbCkge1xuXHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBjLnN0YXRlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoYy5fbmV4dFN0YXRlID09IGMuc3RhdGUpIHtcblx0XHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIGMuX25leHRTdGF0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhc3NpZ24oXG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZFByb3BzID0gYy5wcm9wcztcblx0XHRcdG9sZFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdGMuX3Zub2RlID0gbmV3Vk5vZGU7XG5cblx0XHRcdC8vIEludm9rZSBwcmUtcmVuZGVyIGxpZmVjeWNsZSBtZXRob2RzXG5cdFx0XHRpZiAoaXNOZXcpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxNb3VudCAhPSBudWxsXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnREaWRNb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5jb21wb25lbnREaWRNb3VudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PSBudWxsICYmXG5cdFx0XHRcdFx0bmV3UHJvcHMgIT09IG9sZFByb3BzICYmXG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBjb21wb25lbnRDb250ZXh0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhYy5fZm9yY2UgJiZcblx0XHRcdFx0XHQoKGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuXHRcdFx0XHRcdFx0XHRuZXdQcm9wcyxcblx0XHRcdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0XHQpID09PSBmYWxzZSkgfHxcblx0XHRcdFx0XHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBNb3JlIGluZm8gYWJvdXQgdGhpcyBoZXJlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9Kb3ZpRGVDcm9vY2svYmVjNWYyY2U5MzU0NGQyZTYwNzBlZjhlMDAzNmU0ZThcblx0XHRcdFx0XHRpZiAobmV3Vk5vZGUuX29yaWdpbmFsICE9PSBvbGRWTm9kZS5fb3JpZ2luYWwpIHtcblx0XHRcdFx0XHRcdC8vIFdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGJhaWwgYmVjYXVzZSBvZiBzQ1Ugd2UgaGF2ZSB0byB1cGRhdGVcblx0XHRcdFx0XHRcdC8vIHRoZSBwcm9wcywgc3RhdGUgYW5kIGRpcnR5LXN0YXRlLlxuXHRcdFx0XHRcdFx0Ly8gd2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIHN0cmljdC1lcXVhbGl0eSB3ZSBkb24ndCBhcyB0aGUgY2hpbGQgY291bGQgc3RpbGxcblx0XHRcdFx0XHRcdC8vIGJlIGRpcnRpZWQgc2VlICMzODgzXG5cdFx0XHRcdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRcdFx0XHRjLnN0YXRlID0gYy5fbmV4dFN0YXRlO1xuXHRcdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBvbGRWTm9kZS5fY2hpbGRyZW47XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuLmZvckVhY2godm5vZGUgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHZub2RlKSB2bm9kZS5fcGFyZW50ID0gbmV3Vk5vZGU7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MucHVzaChjLl9zdGF0ZUNhbGxiYWNrc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cblx0XHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhayBvdXRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjLmNvbXBvbmVudFdpbGxVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgYy5fbmV4dFN0YXRlLCBjb21wb25lbnRDb250ZXh0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjLmNvbXBvbmVudERpZFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0Yy5jb21wb25lbnREaWRVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdGMuX3BhcmVudERvbSA9IHBhcmVudERvbTtcblx0XHRcdGMuX2ZvcmNlID0gZmFsc2U7XG5cblx0XHRcdGxldCByZW5kZXJIb29rID0gb3B0aW9ucy5fcmVuZGVyLFxuXHRcdFx0XHRjb3VudCA9IDA7XG5cdFx0XHRpZiAoJ3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0dG1wID0gYy5yZW5kZXIoYy5wcm9wcywgYy5zdGF0ZSwgYy5jb250ZXh0KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNOZXcgJiYgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdHNuYXBzaG90ID0gYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShvbGRQcm9wcywgb2xkU3RhdGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaXNUb3BMZXZlbEZyYWdtZW50ID1cblx0XHRcdFx0dG1wICE9IG51bGwgJiYgdG1wLnR5cGUgPT09IEZyYWdtZW50ICYmIHRtcC5rZXkgPT0gbnVsbDtcblx0XHRcdGxldCByZW5kZXJSZXN1bHQgPSBpc1RvcExldmVsRnJhZ21lbnQgPyB0bXAucHJvcHMuY2hpbGRyZW4gOiB0bXA7XG5cblx0XHRcdGRpZmZDaGlsZHJlbihcblx0XHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0XHRpc0FycmF5KHJlbmRlclJlc3VsdCkgPyByZW5kZXJSZXN1bHQgOiBbcmVuZGVyUmVzdWx0XSxcblx0XHRcdFx0bmV3Vk5vZGUsXG5cdFx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0XHRpc1N2Zyxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Yy5iYXNlID0gbmV3Vk5vZGUuX2RvbTtcblxuXHRcdFx0Ly8gV2Ugc3VjY2Vzc2Z1bGx5IHJlbmRlcmVkIHRoaXMgVk5vZGUsIHVuc2V0IGFueSBzdG9yZWQgaHlkcmF0aW9uL2JhaWxvdXQgc3RhdGU6XG5cdFx0XHRuZXdWTm9kZS5fZmxhZ3MgJj0gUkVTRVRfTU9ERTtcblxuXHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0XHRjLl9wZW5kaW5nRXJyb3IgPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Ly8gaWYgaHlkcmF0aW5nIG9yIGNyZWF0aW5nIGluaXRpYWwgdHJlZSwgYmFpbG91dCBwcmVzZXJ2ZXMgRE9NOlxuXHRcdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZERvbTtcblx0XHRcdFx0bmV3Vk5vZGUuX2ZsYWdzIHw9IGlzSHlkcmF0aW5nXG5cdFx0XHRcdFx0PyBNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRFxuXHRcdFx0XHRcdDogTU9ERV9IWURSQVRFO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltleGNlc3NEb21DaGlsZHJlbi5pbmRleE9mKG9sZERvbSldID0gbnVsbDtcblx0XHRcdFx0Ly8gXiBjb3VsZCBwb3NzaWJseSBiZSBzaW1wbGlmaWVkIHRvOlxuXHRcdFx0XHQvLyBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGggPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgbmV3Vk5vZGUsIG9sZFZOb2RlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPT0gbnVsbCAmJlxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsXG5cdCkge1xuXHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0fSBlbHNlIHtcblx0XHRuZXdWTm9kZS5fZG9tID0gZGlmZkVsZW1lbnROb2Rlcyhcblx0XHRcdG9sZFZOb2RlLl9kb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdGlzU3ZnLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLmRpZmZlZCkpIHRtcChuZXdWTm9kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHNcbiAqIHdoaWNoIGhhdmUgY2FsbGJhY2tzIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ZOb2RlfSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXRSb290KGNvbW1pdFF1ZXVlLCByb290LCByZWZRdWV1ZSkge1xuXHRyb290Ll9uZXh0RG9tID0gdW5kZWZpbmVkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmVmUXVldWUubGVuZ3RoOyBpKyspIHtcblx0XHRhcHBseVJlZihyZWZRdWV1ZVtpXSwgcmVmUXVldWVbKytpXSwgcmVmUXVldWVbKytpXSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5fY29tbWl0KSBvcHRpb25zLl9jb21taXQocm9vdCwgY29tbWl0UXVldWUpO1xuXG5cdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgUmV1c2UgdGhlIGNvbW1pdFF1ZXVlIHZhcmlhYmxlIGhlcmUgc28gdGhlIHR5cGUgY2hhbmdlc1xuXHRcdFx0Y29tbWl0UXVldWUgPSBjLl9yZW5kZXJDYWxsYmFja3M7XG5cdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoY2IgPT4ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFNlZSBhYm92ZSBjb21tZW50IG9uIGNvbW1pdFF1ZXVlXG5cdFx0XHRcdGNiLmNhbGwoYyk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIGMuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgcmVwcmVzZW50aW5nIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSB2aXJ0dWFsIG5vZGVzXG4gKiBiZWluZyBkaWZmZWRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1ZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBkaWZmRWxlbWVudE5vZGVzKFxuXHRkb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0aXNTdmcsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IG9sZFByb3BzID0gb2xkVk5vZGUucHJvcHM7XG5cdGxldCBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzO1xuXHRsZXQgbm9kZVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5ld1ZOb2RlLnR5cGUpO1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG5ld0h0bWw7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG9sZEh0bWw7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50Q2hpbGRyZW59ICovXG5cdGxldCBuZXdDaGlsZHJlbjtcblx0bGV0IHZhbHVlO1xuXHRsZXQgaW5wdXRWYWx1ZTtcblx0bGV0IGNoZWNrZWQ7XG5cblx0Ly8gVHJhY2tzIGVudGVyaW5nIGFuZCBleGl0aW5nIFNWRyBuYW1lc3BhY2Ugd2hlbiBkZXNjZW5kaW5nIHRocm91Z2ggdGhlIHRyZWUuXG5cdGlmIChub2RlVHlwZSA9PT0gJ3N2ZycpIGlzU3ZnID0gdHJ1ZTtcblxuXHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGZvciAoaSA9IDA7IGkgPCBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWUgPSBleGNlc3NEb21DaGlsZHJlbltpXTtcblxuXHRcdFx0Ly8gaWYgbmV3Vk5vZGUgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuIG9yIHRoZSBgZG9tYFxuXHRcdFx0Ly8gYXJndW1lbnQgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuLCByZW1vdmUgaXQgZnJvbVxuXHRcdFx0Ly8gZXhjZXNzRG9tQ2hpbGRyZW4gc28gaXQgaXNuJ3QgbGF0ZXIgcmVtb3ZlZCBpbiBkaWZmQ2hpbGRyZW5cblx0XHRcdGlmIChcblx0XHRcdFx0dmFsdWUgJiZcblx0XHRcdFx0J3NldEF0dHJpYnV0ZScgaW4gdmFsdWUgPT09ICEhbm9kZVR5cGUgJiZcblx0XHRcdFx0KG5vZGVUeXBlID8gdmFsdWUubG9jYWxOYW1lID09PSBub2RlVHlwZSA6IHZhbHVlLm5vZGVUeXBlID09PSAzKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbSA9IHZhbHVlO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChkb20gPT0gbnVsbCkge1xuXHRcdGlmIChub2RlVHlwZSA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHRpZiAoaXNTdmcpIHtcblx0XHRcdGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBub2RlVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZVR5cGUsIG5ld1Byb3BzLmlzICYmIG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHQvLyB3ZSBjcmVhdGVkIGEgbmV3IHBhcmVudCwgc28gbm9uZSBvZiB0aGUgcHJldmlvdXNseSBhdHRhY2hlZCBjaGlsZHJlbiBjYW4gYmUgcmV1c2VkOlxuXHRcdGV4Y2Vzc0RvbUNoaWxkcmVuID0gbnVsbDtcblx0XHQvLyB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbm9kZSwgc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzIGEgbmV3IHN1YnRyZWUgKGluXG5cdFx0Ly8gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBJZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIG5vdCBoeWRyYXRpbmcgYnV0IGFyZSB1c2luZ1xuXHRcdC8vIGV4aXN0aW5nIERPTSAoZS5nLiByZXBsYWNlTm9kZSkgd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTVxuXHRcdC8vIGF0dHJpYnV0ZXMgdG8gZGlmZiB0aGVtXG5cdFx0aWYgKCFpc0h5ZHJhdGluZyAmJiBleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRvbGRQcm9wcyA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLmF0dHJpYnV0ZXNbaV07XG5cdFx0XHRcdG9sZFByb3BzW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIG9sZFByb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG9sZFByb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0b2xkSHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpICE9PSAna2V5JyAmJiAhKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoaSA9PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIG5ld1Byb3BzKSB8fFxuXHRcdFx0XHRcdChpID09ICdjaGVja2VkJyAmJiAnZGVmYXVsdENoZWNrZWQnIGluIG5ld1Byb3BzKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIHZhbHVlLCBpc1N2Zyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgcHJvcHMgYXJlIG5vdCBkaWZmZWQgYXQgYWxsIChpbmNsdWRpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpXG5cdFx0Ly8gQFRPRE8gd2Ugc2hvdWxkIHdhcm4gaW4gZGVidWcgbW9kZSB3aGVuIHByb3BzIGRvbid0IG1hdGNoIGhlcmUuXG5cdFx0Zm9yIChpIGluIG5ld1Byb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG5ld1Byb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0XHRuZXdDaGlsZHJlbiA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0bmV3SHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICd2YWx1ZScpIHtcblx0XHRcdFx0aW5wdXRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdjaGVja2VkJykge1xuXHRcdFx0XHRjaGVja2VkID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpICE9PSAna2V5JyAmJlxuXHRcdFx0XHQoIWlzSHlkcmF0aW5nIHx8IHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRvbGRQcm9wc1tpXSAhPT0gdmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIHZhbHVlLCBvbGRQcm9wc1tpXSwgaXNTdmcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBuZXcgdm5vZGUgZGlkbid0IGhhdmUgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIGRpZmYgaXRzIGNoaWxkcmVuXG5cdFx0aWYgKG5ld0h0bWwpIHtcblx0XHRcdC8vIEF2b2lkIHJlLWFwcGx5aW5nIHRoZSBzYW1lICdfX2h0bWwnIGlmIGl0IGRpZCBub3QgY2hhbmdlZCBiZXR3ZWVuIHJlLXJlbmRlclxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhaXNIeWRyYXRpbmcgJiZcblx0XHRcdFx0KCFvbGRIdG1sIHx8XG5cdFx0XHRcdFx0KG5ld0h0bWwuX19odG1sICE9PSBvbGRIdG1sLl9faHRtbCAmJlxuXHRcdFx0XHRcdFx0bmV3SHRtbC5fX2h0bWwgIT09IGRvbS5pbm5lckhUTUwpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbS5pbm5lckhUTUwgPSBuZXdIdG1sLl9faHRtbDtcblx0XHRcdH1cblxuXHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvbGRIdG1sKSBkb20uaW5uZXJIVE1MID0gJyc7XG5cblx0XHRcdGRpZmZDaGlsZHJlbihcblx0XHRcdFx0ZG9tLFxuXHRcdFx0XHRpc0FycmF5KG5ld0NoaWxkcmVuKSA/IG5ld0NoaWxkcmVuIDogW25ld0NoaWxkcmVuXSxcblx0XHRcdFx0bmV3Vk5vZGUsXG5cdFx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0XHRpc1N2ZyAmJiBub2RlVHlwZSAhPT0gJ2ZvcmVpZ25PYmplY3QnLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuXG5cdFx0XHRcdFx0PyBleGNlc3NEb21DaGlsZHJlblswXVxuXHRcdFx0XHRcdDogb2xkVk5vZGUuX2NoaWxkcmVuICYmIGdldERvbVNpYmxpbmcob2xkVk5vZGUsIDApLFxuXHRcdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdFx0cmVmUXVldWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBub3QgcGFydCBvZiBhbnkgdm5vZGUuXG5cdFx0XHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKGkgPSBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGktLTsgKSB7XG5cdFx0XHRcdFx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuW2ldICE9IG51bGwpIHJlbW92ZU5vZGUoZXhjZXNzRG9tQ2hpbGRyZW5baV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXMgYWJvdmUsIGRvbid0IGRpZmYgcHJvcHMgZHVyaW5nIGh5ZHJhdGlvblxuXHRcdGlmICghaXNIeWRyYXRpbmcpIHtcblx0XHRcdGkgPSAndmFsdWUnO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0Ly8gIzI3NTYgRm9yIHRoZSA8cHJvZ3Jlc3M+LWVsZW1lbnQgdGhlIGluaXRpYWwgdmFsdWUgaXMgMCxcblx0XHRcdFx0Ly8gZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5vdCBiZWluZyBwcmVzZW50LiBXaGVuIHRoZSBhdHRyaWJ1dGVcblx0XHRcdFx0Ly8gaXMgbWlzc2luZyB0aGUgcHJvZ3Jlc3MgYmFyIGlzIHRyZWF0ZWQgYXMgaW5kZXRlcm1pbmF0ZS5cblx0XHRcdFx0Ly8gVG8gZml4IHRoYXQgd2UnbGwgYWx3YXlzIHVwZGF0ZSBpdCB3aGVuIGl0IGlzIDAgZm9yIHByb2dyZXNzIGVsZW1lbnRzXG5cdFx0XHRcdChpbnB1dFZhbHVlICE9PSBkb21baV0gfHxcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgIWlucHV0VmFsdWUpIHx8XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBJRSAxMSB0byBmaXggPHNlbGVjdD4gdmFsdWUgbm90IGJlaW5nIHVwZGF0ZWQuXG5cdFx0XHRcdFx0Ly8gVG8gYXZvaWQgYSBzdGFsZSBzZWxlY3QgdmFsdWUgd2UgbmVlZCB0byBzZXQgdGhlIG9wdGlvbi52YWx1ZVxuXHRcdFx0XHRcdC8vIGFnYWluLCB3aGljaCB0cmlnZ2VycyBJRTExIHRvIHJlLWV2YWx1YXRlIHRoZSBzZWxlY3QgdmFsdWVcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdvcHRpb24nICYmIGlucHV0VmFsdWUgIT09IG9sZFByb3BzW2ldKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGlucHV0VmFsdWUsIG9sZFByb3BzW2ldLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSAnY2hlY2tlZCc7XG5cdFx0XHRpZiAoY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIGNoZWNrZWQgIT09IGRvbVtpXSkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGNoZWNrZWQsIG9sZFByb3BzW2ldLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRvbTtcbn1cblxuLyoqXG4gKiBJbnZva2Ugb3IgdXBkYXRlIGEgcmVmLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBhIGZ1bmN0aW9uIG9yIG9iamVjdCByZWYuXG4gKiBAcGFyYW0ge1JlZjxhbnk+fSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUsIHZub2RlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykgcmVmKHZhbHVlKTtcblx0XHRlbHNlIHJlZi5jdXJyZW50ID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFVubW91bnQgYSB2aXJ0dWFsIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgYXBwbHkgRE9NIGNoYW5nZXNcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gdW5tb3VudFxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGUgVGhlIHBhcmVudCBvZiB0aGUgVk5vZGUgdGhhdCBpbml0aWF0ZWQgdGhlIHVubW91bnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBSZW1vdmVdIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIHBhcmVudCBub2RlIG9mIHRoZVxuICogY3VycmVudCBlbGVtZW50IGlzIGFscmVhZHkgZGV0YWNoZWQgZnJvbSB0aGUgRE9NLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudCh2bm9kZSwgcGFyZW50Vk5vZGUsIHNraXBSZW1vdmUpIHtcblx0bGV0IHI7XG5cdGlmIChvcHRpb25zLnVubW91bnQpIG9wdGlvbnMudW5tb3VudCh2bm9kZSk7XG5cblx0aWYgKChyID0gdm5vZGUucmVmKSkge1xuXHRcdGlmICghci5jdXJyZW50IHx8IHIuY3VycmVudCA9PT0gdm5vZGUuX2RvbSkge1xuXHRcdFx0YXBwbHlSZWYociwgbnVsbCwgcGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jb21wb25lbnQpICE9IG51bGwpIHtcblx0XHRpZiAoci5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHBhcmVudFZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyLmJhc2UgPSByLl9wYXJlbnREb20gPSBudWxsO1xuXHR9XG5cblx0aWYgKChyID0gdm5vZGUuX2NoaWxkcmVuKSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHJbaV0pIHtcblx0XHRcdFx0dW5tb3VudChcblx0XHRcdFx0XHRyW2ldLFxuXHRcdFx0XHRcdHBhcmVudFZOb2RlLFxuXHRcdFx0XHRcdHNraXBSZW1vdmUgfHwgdHlwZW9mIHZub2RlLnR5cGUgIT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICghc2tpcFJlbW92ZSAmJiB2bm9kZS5fZG9tICE9IG51bGwpIHtcblx0XHRyZW1vdmVOb2RlKHZub2RlLl9kb20pO1xuXHR9XG5cblx0Ly8gTXVzdCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYF9uZXh0RG9tYFxuXHQvLyBmb3Igd2hpY2ggYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUuIFNlZSBjb21tZW50IGluIGBjcmVhdGUtZWxlbWVudC5qc2Bcblx0dm5vZGUuX2NvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQgPSB2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb21taXRSb290LCBkaWZmIH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFJlbmRlciBhIFByZWFjdCB2aXJ0dWFsIG5vZGUgaW50byBhIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnQgfCBvYmplY3R9IFtyZXBsYWNlTm9kZV0gT3B0aW9uYWw6IEF0dGVtcHQgdG8gcmUtdXNlIGFuXG4gKiBleGlzdGluZyBET00gdHJlZSByb290ZWQgYXQgYHJlcGxhY2VOb2RlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnREb20sIHJlcGxhY2VOb2RlKSB7XG5cdGlmIChvcHRpb25zLl9yb290KSBvcHRpb25zLl9yb290KHZub2RlLCBwYXJlbnREb20pO1xuXG5cdC8vIFdlIGFidXNlIHRoZSBgcmVwbGFjZU5vZGVgIHBhcmFtZXRlciBpbiBgaHlkcmF0ZSgpYCB0byBzaWduYWwgaWYgd2UgYXJlIGluXG5cdC8vIGh5ZHJhdGlvbiBtb2RlIG9yIG5vdCBieSBwYXNzaW5nIHRoZSBgaHlkcmF0ZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIERPTVxuXHQvLyBlbGVtZW50Li5cblx0bGV0IGlzSHlkcmF0aW5nID0gdHlwZW9mIHJlcGxhY2VOb2RlID09ICdmdW5jdGlvbic7XG5cblx0Ly8gVG8gYmUgYWJsZSB0byBzdXBwb3J0IGNhbGxpbmcgYHJlbmRlcigpYCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZVxuXHQvLyBET00gbm9kZSwgd2UgbmVlZCB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIHRyZWUuIFdlIGRvXG5cdC8vIHRoaXMgYnkgYXNzaWduaW5nIGEgbmV3IGBfY2hpbGRyZW5gIHByb3BlcnR5IHRvIERPTSBub2RlcyB3aGljaCBwb2ludHNcblx0Ly8gdG8gdGhlIGxhc3QgcmVuZGVyZWQgdHJlZS4gQnkgZGVmYXVsdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50LCB3aGljaFxuXHQvLyBtZWFucyB0aGF0IHdlIGFyZSBtb3VudGluZyBhIG5ldyB0cmVlIGZvciB0aGUgZmlyc3QgdGltZS5cblx0bGV0IG9sZFZOb2RlID0gaXNIeWRyYXRpbmdcblx0XHQ/IG51bGxcblx0XHQ6IChyZXBsYWNlTm9kZSAmJiByZXBsYWNlTm9kZS5fY2hpbGRyZW4pIHx8IHBhcmVudERvbS5fY2hpbGRyZW47XG5cblx0dm5vZGUgPSAoKCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZSkgfHwgcGFyZW50RG9tKS5fY2hpbGRyZW4gPVxuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIFt2bm9kZV0pO1xuXG5cdC8vIExpc3Qgb2YgZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZmZpbmcuXG5cdGxldCBjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cdGRpZmYoXG5cdFx0cGFyZW50RG9tLFxuXHRcdC8vIERldGVybWluZSB0aGUgbmV3IHZub2RlIHRyZWUgYW5kIHN0b3JlIGl0IG9uIHRoZSBET00gZWxlbWVudCBvblxuXHRcdC8vIG91ciBjdXN0b20gYF9jaGlsZHJlbmAgcHJvcGVydHkuXG5cdFx0dm5vZGUsXG5cdFx0b2xkVk5vZGUgfHwgRU1QVFlfT0JKLFxuXHRcdEVNUFRZX09CSixcblx0XHRwYXJlbnREb20ub3duZXJTVkdFbGVtZW50ICE9PSB1bmRlZmluZWQsXG5cdFx0IWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlXG5cdFx0XHQ/IFtyZXBsYWNlTm9kZV1cblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdD8gbnVsbFxuXHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZFxuXHRcdFx0PyBzbGljZS5jYWxsKHBhcmVudERvbS5jaGlsZE5vZGVzKVxuXHRcdFx0OiBudWxsLFxuXHRcdGNvbW1pdFF1ZXVlLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyByZXBsYWNlTm9kZVxuXHRcdFx0OiBvbGRWTm9kZVxuXHRcdFx0PyBvbGRWTm9kZS5fZG9tXG5cdFx0XHQ6IHBhcmVudERvbS5maXJzdENoaWxkLFxuXHRcdGlzSHlkcmF0aW5nLFxuXHRcdHJlZlF1ZXVlXG5cdCk7XG5cblx0Ly8gRmx1c2ggYWxsIHF1ZXVlZCBlZmZlY3RzXG5cdGNvbW1pdFJvb3QoY29tbWl0UXVldWUsIHZub2RlLCByZWZRdWV1ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIERPTSBlbGVtZW50IHdpdGggZGF0YSBmcm9tIGEgUHJlYWN0IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZH0gdm5vZGUgVGhlIHZpcnR1YWwgbm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBET00gZWxlbWVudCB0byB1cGRhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudERvbSkge1xuXHRyZW5kZXIodm5vZGUsIHBhcmVudERvbSwgaHlkcmF0ZSk7XG59XG4iLCAiaW1wb3J0IHsgYXNzaWduLCBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVWTm9kZSB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuXG4vKipcbiAqIENsb25lcyB0aGUgZ2l2ZW4gVk5vZGUsIG9wdGlvbmFsbHkgYWRkaW5nIGF0dHJpYnV0ZXMvcHJvcHMgYW5kIHJlcGxhY2luZyBpdHNcbiAqIGNoaWxkcmVuLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWRcbiAqIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KHZub2RlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IGFzc2lnbih7fSwgdm5vZGUucHJvcHMpLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRsZXQgZGVmYXVsdFByb3BzO1xuXG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0ZGVmYXVsdFByb3BzID0gdm5vZGUudHlwZS5kZWZhdWx0UHJvcHM7XG5cdH1cblxuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAocHJvcHNbaV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZShcblx0XHR2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXkgfHwgdm5vZGUua2V5LFxuXHRcdHJlZiB8fCB2bm9kZS5yZWYsXG5cdFx0bnVsbFxuXHQpO1xufVxuIiwgIi8qKlxuICogRmluZCB0aGUgY2xvc2VzdCBlcnJvciBib3VuZGFyeSB0byBhIHRocm93biBlcnJvciBhbmQgY2FsbCBpdFxuICogQHBhcmFtIHtvYmplY3R9IGVycm9yIFRoZSB0aHJvd24gdmFsdWVcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0aGF0IHRocmV3IHRoZSBlcnJvciB0aGF0IHdhcyBjYXVnaHQgKGV4Y2VwdFxuICogZm9yIHVubW91bnRpbmcgd2hlbiB0aGlzIHBhcmFtZXRlciBpcyB0aGUgaGlnaGVzdCBwYXJlbnQgdGhhdCB3YXMgYmVpbmdcbiAqIHVubW91bnRlZClcbiAqIEBwYXJhbSB7Vk5vZGV9IFtvbGRWTm9kZV1cbiAqIEBwYXJhbSB7RXJyb3JJbmZvfSBbZXJyb3JJbmZvXVxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NhdGNoRXJyb3IoZXJyb3IsIHZub2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKSB7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50fSAqL1xuXHRsZXQgY29tcG9uZW50LFxuXHRcdC8qKiBAdHlwZSB7Q29tcG9uZW50VHlwZX0gKi9cblx0XHRjdG9yLFxuXHRcdC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cblx0XHRoYW5kbGVkO1xuXG5cdGZvciAoOyAodm5vZGUgPSB2bm9kZS5fcGFyZW50KTsgKSB7XG5cdFx0aWYgKChjb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50KSAmJiAhY29tcG9uZW50Ll9wcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjdG9yID0gY29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG5cdFx0XHRcdGlmIChjdG9yICYmIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuc2V0U3RhdGUoY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggIT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvIHx8IHt9KTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoaXMgaXMgYW4gZXJyb3IgYm91bmRhcnkuIE1hcmsgaXQgYXMgaGF2aW5nIGJhaWxlZCBvdXQsIGFuZCB3aGV0aGVyIGl0IHdhcyBtaWQtaHlkcmF0aW9uLlxuXHRcdFx0XHRpZiAoaGFuZGxlZCkge1xuXHRcdFx0XHRcdHJldHVybiAoY29tcG9uZW50Ll9wZW5kaW5nRXJyb3IgPSBjb21wb25lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aHJvdyBlcnJvcjtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25zIGFzIF9vcHRpb25zIH0gZnJvbSAncHJlYWN0JztcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEluZGV4O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBjdXJyZW50Q29tcG9uZW50O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBwcmV2aW91c0NvbXBvbmVudDtcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEhvb2sgPSAwO1xuXG4vKiogQHR5cGUge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudD59ICovXG5sZXQgYWZ0ZXJQYWludEVmZmVjdHMgPSBbXTtcblxubGV0IEVNUFRZID0gW107XG5cbi8vIENhc3QgdG8gdXNlIGludGVybmFsIE9wdGlvbnMgdHlwZVxuY29uc3Qgb3B0aW9ucyA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuT3B0aW9uc30gKi8gKF9vcHRpb25zKTtcblxubGV0IG9sZEJlZm9yZURpZmYgPSBvcHRpb25zLl9kaWZmO1xubGV0IG9sZEJlZm9yZVJlbmRlciA9IG9wdGlvbnMuX3JlbmRlcjtcbmxldCBvbGRBZnRlckRpZmYgPSBvcHRpb25zLmRpZmZlZDtcbmxldCBvbGRDb21taXQgPSBvcHRpb25zLl9jb21taXQ7XG5sZXQgb2xkQmVmb3JlVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbmxldCBvbGRSb290ID0gb3B0aW9ucy5fcm9vdDtcblxuY29uc3QgUkFGX1RJTUVPVVQgPSAxMDA7XG5sZXQgcHJldlJhZjtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdGlmIChvbGRCZWZvcmVEaWZmKSBvbGRCZWZvcmVEaWZmKHZub2RlKTtcbn07XG5cbm9wdGlvbnMuX3Jvb3QgPSAodm5vZGUsIHBhcmVudERvbSkgPT4ge1xuXHRpZiAodm5vZGUgJiYgcGFyZW50RG9tLl9jaGlsZHJlbiAmJiBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrKSB7XG5cdFx0dm5vZGUuX21hc2sgPSBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrO1xuXHR9XG5cblx0aWYgKG9sZFJvb3QpIG9sZFJvb3Qodm5vZGUsIHBhcmVudERvbSk7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLl9yZW5kZXIgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGN1cnJlbnRJbmRleCA9IDA7XG5cblx0Y29uc3QgaG9va3MgPSBjdXJyZW50Q29tcG9uZW50Ll9faG9va3M7XG5cdGlmIChob29rcykge1xuXHRcdGlmIChwcmV2aW91c0NvbXBvbmVudCA9PT0gY3VycmVudENvbXBvbmVudCkge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGhvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aG9va0l0ZW0uX3BlbmRpbmdWYWx1ZSA9IEVNUFRZO1xuXHRcdFx0XHRob29rSXRlbS5fbmV4dFZhbHVlID0gaG9va0l0ZW0uX3BlbmRpbmdBcmdzID0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUNsZWFudXApO1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlRWZmZWN0KTtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0Y3VycmVudEluZGV4ID0gMDtcblx0XHR9XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50O1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5kaWZmZWQgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRBZnRlckRpZmYpIG9sZEFmdGVyRGlmZih2bm9kZSk7XG5cblx0Y29uc3QgYyA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjICYmIGMuX19ob29rcykge1xuXHRcdGlmIChjLl9faG9va3MuX3BlbmRpbmdFZmZlY3RzLmxlbmd0aCkgYWZ0ZXJQYWludChhZnRlclBhaW50RWZmZWN0cy5wdXNoKGMpKTtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChob29rSXRlbSA9PiB7XG5cdFx0XHRpZiAoaG9va0l0ZW0uX3BlbmRpbmdBcmdzKSB7XG5cdFx0XHRcdGhvb2tJdGVtLl9hcmdzID0gaG9va0l0ZW0uX3BlbmRpbmdBcmdzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhvb2tJdGVtLl9wZW5kaW5nVmFsdWUgIT09IEVNUFRZKSB7XG5cdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9wZW5kaW5nVmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ0FyZ3MgPSB1bmRlZmluZWQ7XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ1ZhbHVlID0gRU1QVFk7XG5cdFx0fSk7XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRPRE86IEltcHJvdmUgdHlwaW5nIG9mIGNvbW1pdFF1ZXVlIHBhcmFtZXRlclxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlLCBjb21taXRRdWV1ZTogYW55KSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fY29tbWl0ID0gKHZub2RlLCBjb21taXRRdWV1ZSkgPT4ge1xuXHRjb21taXRRdWV1ZS5zb21lKGNvbXBvbmVudCA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZpbHRlcihjYiA9PlxuXHRcdFx0XHRjYi5fdmFsdWUgPyBpbnZva2VFZmZlY3QoY2IpIDogdHJ1ZVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzKSBjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0pO1xuXHRcdFx0Y29tbWl0UXVldWUgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAob2xkQ29tbWl0KSBvbGRDb21taXQodm5vZGUsIGNvbW1pdFF1ZXVlKTtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMudW5tb3VudCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEJlZm9yZVVubW91bnQpIG9sZEJlZm9yZVVubW91bnQodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRsZXQgaGFzRXJyb3JlZDtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChzID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGludm9rZUNsZWFudXAocyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGhhc0Vycm9yZWQgPSBlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGMuX19ob29rcyA9IHVuZGVmaW5lZDtcblx0XHRpZiAoaGFzRXJyb3JlZCkgb3B0aW9ucy5fY2F0Y2hFcnJvcihoYXNFcnJvcmVkLCBjLl92bm9kZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGEgaG9vaydzIHN0YXRlIGZyb20gdGhlIGN1cnJlbnRDb21wb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBnZXRIb29rU3RhdGUoaW5kZXgsIHR5cGUpIHtcblx0aWYgKG9wdGlvbnMuX2hvb2spIHtcblx0XHRvcHRpb25zLl9ob29rKGN1cnJlbnRDb21wb25lbnQsIGluZGV4LCBjdXJyZW50SG9vayB8fCB0eXBlKTtcblx0fVxuXHRjdXJyZW50SG9vayA9IDA7XG5cblx0Ly8gTGFyZ2VseSBpbnNwaXJlZCBieTpcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iL2Y2YmU3MzQ2OGU2ZWM0NmIwZmY1YWEzY2M0YzliYWY3MmEyOTAyNWEvc3JjL2hvb2tzL2NvcmVfaG9va3MubWpzXG5cdC8vICogaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWwta2xlaW4vZnVuY3kuanMvYmxvYi82NTBiZWFhNThjNDNjMzNhNzQ4MjBhM2M5OGIzYzcwNzljZjJlMzMzL3NyYy9yZW5kZXJlci5tanNcblx0Ly8gT3RoZXIgaW1wbGVtZW50YXRpb25zIHRvIGxvb2sgYXQ6XG5cdC8vICogaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL21ub3gwNXFwOFxuXHRjb25zdCBob29rcyA9XG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzIHx8XG5cdFx0KGN1cnJlbnRDb21wb25lbnQuX19ob29rcyA9IHtcblx0XHRcdF9saXN0OiBbXSxcblx0XHRcdF9wZW5kaW5nRWZmZWN0czogW11cblx0XHR9KTtcblxuXHRpZiAoaW5kZXggPj0gaG9va3MuX2xpc3QubGVuZ3RoKSB7XG5cdFx0aG9va3MuX2xpc3QucHVzaCh7IF9wZW5kaW5nVmFsdWU6IEVNUFRZIH0pO1xuXHR9XG5cblx0cmV0dXJuIGhvb2tzLl9saXN0W2luZGV4XTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRGlzcGF0Y2g8aW1wb3J0KCcuL2luZGV4JykuU3RhdGVVcGRhdGVyPFM+Pn0gW2luaXRpYWxTdGF0ZV1cbiAqIEByZXR1cm5zIHtbUywgKHN0YXRlOiBTKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuXHRjdXJyZW50SG9vayA9IDE7XG5cdHJldHVybiB1c2VSZWR1Y2VyKGludm9rZU9yUmV0dXJuLCBpbml0aWFsU3RhdGUpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gU1xuICogQHRlbXBsYXRlIHt1bmtub3dufSBBXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLlJlZHVjZXI8UywgQT59IHJlZHVjZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRGlzcGF0Y2g8aW1wb3J0KCcuL2luZGV4JykuU3RhdGVVcGRhdGVyPFM+Pn0gaW5pdGlhbFN0YXRlXG4gKiBAcGFyYW0geyhpbml0aWFsU3RhdGU6IGFueSkgPT4gdm9pZH0gW2luaXRdXG4gKiBAcmV0dXJucyB7WyBTLCAoc3RhdGU6IFMpID0+IHZvaWQgXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlLCBpbml0KSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuUmVkdWNlckhvb2tTdGF0ZX0gKi9cblx0Y29uc3QgaG9va1N0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAyKTtcblx0aG9va1N0YXRlLl9yZWR1Y2VyID0gcmVkdWNlcjtcblx0aWYgKCFob29rU3RhdGUuX2NvbXBvbmVudCkge1xuXHRcdGhvb2tTdGF0ZS5fdmFsdWUgPSBbXG5cdFx0XHQhaW5pdCA/IGludm9rZU9yUmV0dXJuKHVuZGVmaW5lZCwgaW5pdGlhbFN0YXRlKSA6IGluaXQoaW5pdGlhbFN0YXRlKSxcblxuXHRcdFx0YWN0aW9uID0+IHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gaG9va1N0YXRlLl9uZXh0VmFsdWVcblx0XHRcdFx0XHQ/IGhvb2tTdGF0ZS5fbmV4dFZhbHVlWzBdXG5cdFx0XHRcdFx0OiBob29rU3RhdGUuX3ZhbHVlWzBdO1xuXHRcdFx0XHRjb25zdCBuZXh0VmFsdWUgPSBob29rU3RhdGUuX3JlZHVjZXIoY3VycmVudFZhbHVlLCBhY3Rpb24pO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgIT09IG5leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fbmV4dFZhbHVlID0gW25leHRWYWx1ZSwgaG9va1N0YXRlLl92YWx1ZVsxXV07XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9jb21wb25lbnQuc2V0U3RhdGUoe30pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblxuXHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudDtcblxuXHRcdGlmICghY3VycmVudENvbXBvbmVudC5faGFzU2N1RnJvbUhvb2tzKSB7XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9oYXNTY3VGcm9tSG9va3MgPSB0cnVlO1xuXHRcdFx0bGV0IHByZXZTY3UgPSBjdXJyZW50Q29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZTtcblx0XHRcdGNvbnN0IHByZXZDV1UgPSBjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGU7XG5cblx0XHRcdC8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZvcmNlZCB1cGRhdGUgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgd2lsbFxuXHRcdFx0Ly8gbm90IGJlIGNhbGxlZC4gQnV0IHdlIHVzZSB0aGF0IHRvIHVwZGF0ZSB0aGUgaG9vayB2YWx1ZXMsIHNvIHdlXG5cdFx0XHQvLyBuZWVkIHRvIGNhbGwgaXQuXG5cdFx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiAocCwgcywgYykge1xuXHRcdFx0XHRpZiAodGhpcy5fZm9yY2UpIHtcblx0XHRcdFx0XHRsZXQgdG1wID0gcHJldlNjdTtcblx0XHRcdFx0XHQvLyBDbGVhciB0byBhdm9pZCBvdGhlciBzQ1UgaG9va3MgZnJvbSBiZWluZyBjYWxsZWRcblx0XHRcdFx0XHRwcmV2U2N1ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHVwZGF0ZUhvb2tTdGF0ZShwLCBzLCBjKTtcblx0XHRcdFx0XHRwcmV2U2N1ID0gdG1wO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHByZXZDV1UpIHByZXZDV1UuY2FsbCh0aGlzLCBwLCBzLCBjKTtcblx0XHRcdH07XG5cblx0XHRcdC8vIFRoaXMgU0NVIGhhcyB0aGUgcHVycG9zZSBvZiBiYWlsaW5nIG91dCBhZnRlciByZXBlYXRlZCB1cGRhdGVzXG5cdFx0XHQvLyB0byBzdGF0ZWZ1bCBob29rcy5cblx0XHRcdC8vIHdlIHN0b3JlIHRoZSBuZXh0IHZhbHVlIGluIF9uZXh0VmFsdWVbMF0gYW5kIGtlZXAgZG9pbmcgdGhhdCBmb3IgYWxsXG5cdFx0XHQvLyBzdGF0ZSBzZXR0ZXJzLCBpZiB3ZSBoYXZlIG5leHQgc3RhdGVzIGFuZFxuXHRcdFx0Ly8gYWxsIG5leHQgc3RhdGVzIHdpdGhpbiBhIGNvbXBvbmVudCBlbmQgdXAgYmVpbmcgZXF1YWwgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGVcblx0XHRcdC8vIHdlIGFyZSBzYWZlIHRvIGJhaWwgb3V0IGZvciB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRbXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIl19XG5cdFx0XHQgKi9cblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBXZSBkb24ndCB1c2UgVFMgdG8gZG93bnRyYW5zcGlsZVxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xuXHRcdFx0ZnVuY3Rpb24gdXBkYXRlSG9va1N0YXRlKHAsIHMsIGMpIHtcblx0XHRcdFx0aWYgKCFob29rU3RhdGUuX2NvbXBvbmVudC5fX2hvb2tzKSByZXR1cm4gdHJ1ZTtcblxuXHRcdFx0XHQvKiogQHR5cGUgeyh4OiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGUpID0+IHggaXMgaW1wb3J0KCcuL2ludGVybmFsJykuUmVkdWNlckhvb2tTdGF0ZX0gKi9cblx0XHRcdFx0Y29uc3QgaXNTdGF0ZUhvb2sgPSB4ID0+ICEheC5fY29tcG9uZW50O1xuXHRcdFx0XHRjb25zdCBzdGF0ZUhvb2tzID1cblx0XHRcdFx0XHRob29rU3RhdGUuX2NvbXBvbmVudC5fX2hvb2tzLl9saXN0LmZpbHRlcihpc1N0YXRlSG9vayk7XG5cblx0XHRcdFx0Y29uc3QgYWxsSG9va3NFbXB0eSA9IHN0YXRlSG9va3MuZXZlcnkoeCA9PiAheC5fbmV4dFZhbHVlKTtcblx0XHRcdFx0Ly8gV2hlbiB3ZSBoYXZlIG5vIHVwZGF0ZWQgaG9va3MgaW4gdGhlIGNvbXBvbmVudCB3ZSBpbnZva2UgdGhlIHByZXZpb3VzIFNDVSBvclxuXHRcdFx0XHQvLyB0cmF2ZXJzZSB0aGUgVkRPTSB0cmVlIGZ1cnRoZXIuXG5cdFx0XHRcdGlmIChhbGxIb29rc0VtcHR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZTY3UgPyBwcmV2U2N1LmNhbGwodGhpcywgcCwgcywgYykgOiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGNvbXBvbmVudHMgd2l0aCBhIG5leHRWYWx1ZSBzZXQgdGhhdFxuXHRcdFx0XHQvLyBoYXZlIHZhbHVlcyB0aGF0IGFyZW4ndCBlcXVhbCB0byBvbmUgYW5vdGhlciB0aGlzIHB1c2hlc1xuXHRcdFx0XHQvLyB1cyB0byB1cGRhdGUgZnVydGhlciBkb3duIHRoZSB0cmVlXG5cdFx0XHRcdGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcblx0XHRcdFx0c3RhdGVIb29rcy5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gaG9va0l0ZW0uX3ZhbHVlWzBdO1xuXHRcdFx0XHRcdFx0aG9va0l0ZW0uX3ZhbHVlID0gaG9va0l0ZW0uX25leHRWYWx1ZTtcblx0XHRcdFx0XHRcdGhvb2tJdGVtLl9uZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFZhbHVlICE9PSBob29rSXRlbS5fdmFsdWVbMF0pIHNob3VsZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gc2hvdWxkVXBkYXRlIHx8IGhvb2tTdGF0ZS5fY29tcG9uZW50LnByb3BzICE9PSBwXG5cdFx0XHRcdFx0PyBwcmV2U2N1XG5cdFx0XHRcdFx0XHQ/IHByZXZTY3UuY2FsbCh0aGlzLCBwLCBzLCBjKVxuXHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0OiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudENvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUgPSB1cGRhdGVIb29rU3RhdGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGhvb2tTdGF0ZS5fbmV4dFZhbHVlIHx8IGhvb2tTdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAzKTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5wdXNoKHN0YXRlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0fSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNhbGxiYWNrLCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgNCk7XG5cdGlmICghb3B0aW9ucy5fc2tpcEVmZmVjdHMgJiYgYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gY2FsbGJhY2s7XG5cdFx0c3RhdGUuX3BlbmRpbmdBcmdzID0gYXJncztcblxuXHRcdGN1cnJlbnRDb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcy5wdXNoKHN0YXRlKTtcblx0fVxufVxuXG4vKiogQHR5cGUgeyhpbml0aWFsVmFsdWU6IHVua25vd24pID0+IHVua25vd259ICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuXHRjdXJyZW50SG9vayA9IDU7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+ICh7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9KSwgW10pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7KCkgPT4gb2JqZWN0fSBjcmVhdGVIYW5kbGVcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGVIYW5kbGUsIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA2O1xuXHR1c2VMYXlvdXRFZmZlY3QoXG5cdFx0KCkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRyZWYoY3JlYXRlSGFuZGxlKCkpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4gcmVmKG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChyZWYpIHtcblx0XHRcdFx0cmVmLmN1cnJlbnQgPSBjcmVhdGVIYW5kbGUoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IChyZWYuY3VycmVudCA9IG51bGwpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YXJncyA9PSBudWxsID8gYXJncyA6IGFyZ3MuY29uY2F0KHJlZilcblx0KTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqIEBwYXJhbSB7KCkgPT4gVH0gZmFjdG9yeVxuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHtUfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWVtbyhmYWN0b3J5LCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuTWVtb0hvb2tTdGF0ZTxUPn0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDcpO1xuXHRpZiAoYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3BlbmRpbmdWYWx1ZSA9IGZhY3RvcnkoKTtcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXHRcdHN0YXRlLl9mYWN0b3J5ID0gZmFjdG9yeTtcblx0XHRyZXR1cm4gc3RhdGUuX3BlbmRpbmdWYWx1ZTtcblx0fVxuXG5cdHJldHVybiBzdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA4O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiBjYWxsYmFjaywgYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RDb250ZXh0fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250ZXh0KGNvbnRleHQpIHtcblx0Y29uc3QgcHJvdmlkZXIgPSBjdXJyZW50Q29tcG9uZW50LmNvbnRleHRbY29udGV4dC5faWRdO1xuXHQvLyBXZSBjb3VsZCBza2lwIHRoaXMgY2FsbCBoZXJlLCBidXQgdGhhbiB3ZSdkIG5vdCBjYWxsXG5cdC8vIGBvcHRpb25zLl9ob29rYC4gV2UgbmVlZCB0byBkbyB0aGF0IGluIG9yZGVyIHRvIG1ha2Vcblx0Ly8gdGhlIGRldnRvb2xzIGF3YXJlIG9mIHRoaXMgaG9vay5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db250ZXh0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgOSk7XG5cdC8vIFRoZSBkZXZ0b29scyBuZWVkcyBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgb2JqZWN0IHRvXG5cdC8vIGJlIGFibGUgdG8gcHVsbCBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3ZpZGVyXG5cdC8vIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUuXG5cdHN0YXRlLl9jb250ZXh0ID0gY29udGV4dDtcblx0aWYgKCFwcm92aWRlcikgcmV0dXJuIGNvbnRleHQuX2RlZmF1bHRWYWx1ZTtcblx0Ly8gVGhpcyBpcyBwcm9iYWJseSBub3Qgc2FmZSB0byBjb252ZXJ0IHRvIFwiIVwiXG5cdGlmIChzdGF0ZS5fdmFsdWUgPT0gbnVsbCkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IHRydWU7XG5cdFx0cHJvdmlkZXIuc3ViKGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cdHJldHVybiBwcm92aWRlci5wcm9wcy52YWx1ZTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgY3VzdG9tIGxhYmVsIGZvciBhIGN1c3RvbSBob29rIGZvciB0aGUgZGV2dG9vbHMgcGFuZWxcbiAqIEB0eXBlIHs8VD4odmFsdWU6IFQsIGNiPzogKHZhbHVlOiBUKSA9PiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXIpIHtcblx0aWYgKG9wdGlvbnMudXNlRGVidWdWYWx1ZSkge1xuXHRcdG9wdGlvbnMudXNlRGVidWdWYWx1ZShcblx0XHRcdGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWx1ZSkgOiAvKiogQHR5cGUge2FueX0qLyAodmFsdWUpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KGVycm9yOiB1bmtub3duLCBlcnJvckluZm86IGltcG9ydCgncHJlYWN0JykuRXJyb3JJbmZvKSA9PiB2b2lkfSBjYlxuICogQHJldHVybnMge1t1bmtub3duLCAoKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVycm9yQm91bmRhcnkoY2IpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FcnJvckJvdW5kYXJ5SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTApO1xuXHRjb25zdCBlcnJTdGF0ZSA9IHVzZVN0YXRlKCk7XG5cdHN0YXRlLl92YWx1ZSA9IGNiO1xuXHRpZiAoIWN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2gpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoID0gKGVyciwgZXJyb3JJbmZvKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUuX3ZhbHVlKSBzdGF0ZS5fdmFsdWUoZXJyLCBlcnJvckluZm8pO1xuXHRcdFx0ZXJyU3RhdGVbMV0oZXJyKTtcblx0XHR9O1xuXHR9XG5cdHJldHVybiBbXG5cdFx0ZXJyU3RhdGVbMF0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0ZXJyU3RhdGVbMV0odW5kZWZpbmVkKTtcblx0XHR9XG5cdF07XG59XG5cbi8qKiBAdHlwZSB7KCkgPT4gc3RyaW5nfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLklkSG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTEpO1xuXHRpZiAoIXN0YXRlLl92YWx1ZSkge1xuXHRcdC8vIEdyYWIgZWl0aGVyIHRoZSByb290IG5vZGUgb3IgdGhlIG5lYXJlc3QgYXN5bmMgYm91bmRhcnkgbm9kZS5cblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbC5kJykuVk5vZGV9ICovXG5cdFx0bGV0IHJvb3QgPSBjdXJyZW50Q29tcG9uZW50Ll92bm9kZTtcblx0XHR3aGlsZSAocm9vdCAhPT0gbnVsbCAmJiAhcm9vdC5fbWFzayAmJiByb290Ll9wYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHJvb3QgPSByb290Ll9wYXJlbnQ7XG5cdFx0fVxuXG5cdFx0bGV0IG1hc2sgPSByb290Ll9tYXNrIHx8IChyb290Ll9tYXNrID0gWzAsIDBdKTtcblx0XHRzdGF0ZS5fdmFsdWUgPSAnUCcgKyBtYXNrWzBdICsgJy0nICsgbWFza1sxXSsrO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBBZnRlciBwYWludCBlZmZlY3RzIGNvbnN1bWVyLlxuICovXG5mdW5jdGlvbiBmbHVzaEFmdGVyUGFpbnRFZmZlY3RzKCkge1xuXHRsZXQgY29tcG9uZW50O1xuXHR3aGlsZSAoKGNvbXBvbmVudCA9IGFmdGVyUGFpbnRFZmZlY3RzLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKCFjb21wb25lbnQuX3BhcmVudERvbSB8fCAhY29tcG9uZW50Ll9faG9va3MpIGNvbnRpbnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmxldCBIQVNfUkFGID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PSAnZnVuY3Rpb24nO1xuXG4vKipcbiAqIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgYnJvd3NlciBoYXMgYSBjaGFuY2UgdG8gcGFpbnQgYSBuZXcgZnJhbWUuXG4gKiBEbyB0aGlzIGJ5IGNvbWJpbmluZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKHJBRikgKyBzZXRUaW1lb3V0IHRvIGludm9rZSBhIGNhbGxiYWNrIGFmdGVyXG4gKiB0aGUgbmV4dCBicm93c2VyIGZyYW1lLlxuICpcbiAqIEFsc28sIHNjaGVkdWxlIGEgdGltZW91dCBpbiBwYXJhbGxlbCB0byB0aGUgdGhlIHJBRiB0byBlbnN1cmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWRcbiAqIGV2ZW4gaWYgUkFGIGRvZXNuJ3QgZmlyZSAoZm9yIGV4YW1wbGUgaWYgdGhlIGJyb3dzZXIgdGFiIGlzIG5vdCB2aXNpYmxlKVxuICpcbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYWZ0ZXJOZXh0RnJhbWUoY2FsbGJhY2spIHtcblx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0aWYgKEhBU19SQUYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG5cdFx0c2V0VGltZW91dChjYWxsYmFjayk7XG5cdH07XG5cdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGRvbmUsIFJBRl9USU1FT1VUKTtcblxuXHRsZXQgcmFmO1xuXHRpZiAoSEFTX1JBRikge1xuXHRcdHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb25lKTtcblx0fVxufVxuXG4vLyBOb3RlOiBpZiBzb21lb25lIHVzZWQgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSxcbi8vIHRoZW4gZWZmZWN0cyB3aWxsIEFMV0FZUyBydW4gb24gdGhlIE5FWFQgZnJhbWUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUsIGluY3VycmluZyBhIH4xNm1zIGRlbGF5LlxuLy8gUGVyaGFwcyB0aGlzIGlzIG5vdCBzdWNoIGEgYmlnIGRlYWwuXG4vKipcbiAqIFNjaGVkdWxlIGFmdGVyUGFpbnRFZmZlY3RzIGZsdXNoIGFmdGVyIHRoZSBicm93c2VyIHBhaW50c1xuICogQHBhcmFtIHtudW1iZXJ9IG5ld1F1ZXVlTGVuZ3RoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJQYWludChuZXdRdWV1ZUxlbmd0aCkge1xuXHRpZiAobmV3UXVldWVMZW5ndGggPT09IDEgfHwgcHJldlJhZiAhPT0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRwcmV2UmFmID0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdFx0KHByZXZSYWYgfHwgYWZ0ZXJOZXh0RnJhbWUpKGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VDbGVhbnVwKGhvb2spIHtcblx0Ly8gQSBob29rIGNsZWFudXAgY2FuIGludHJvZHVjZSBhIGNhbGwgdG8gcmVuZGVyIHdoaWNoIGNyZWF0ZXMgYSBuZXcgcm9vdCwgdGhpcyB3aWxsIGNhbGwgb3B0aW9ucy52bm9kZVxuXHQvLyBhbmQgbW92ZSB0aGUgY3VycmVudENvbXBvbmVudCBhd2F5LlxuXHRjb25zdCBjb21wID0gY3VycmVudENvbXBvbmVudDtcblx0bGV0IGNsZWFudXAgPSBob29rLl9jbGVhbnVwO1xuXHRpZiAodHlwZW9mIGNsZWFudXAgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGhvb2suX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cdFx0Y2xlYW51cCgpO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogSW52b2tlIGEgSG9vaydzIGVmZmVjdFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VFZmZlY3QoaG9vaykge1xuXHQvLyBBIGhvb2sgY2FsbCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRob29rLl9jbGVhbnVwID0gaG9vay5fdmFsdWUoKTtcblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3duW119IG9sZEFyZ3NcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBuZXdBcmdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gYXJnc0NoYW5nZWQob2xkQXJncywgbmV3QXJncykge1xuXHRyZXR1cm4gKFxuXHRcdCFvbGRBcmdzIHx8XG5cdFx0b2xkQXJncy5sZW5ndGggIT09IG5ld0FyZ3MubGVuZ3RoIHx8XG5cdFx0bmV3QXJncy5zb21lKChhcmcsIGluZGV4KSA9PiBhcmcgIT09IG9sZEFyZ3NbaW5kZXhdKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7QXJnfSBhcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiBhbnl9IGZcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGludm9rZU9yUmV0dXJuKGFyZywgZikge1xuXHRyZXR1cm4gdHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJyA/IGYoYXJnKSA6IGY7XG59XG4iLCAiLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcblx0cmV0dXJuIC8qKiBAdHlwZSB7TyAmIFB9ICovIChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIGhhdmUgYSBkaWZmZXJlbnQgc2hhcGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhhLCBiKSB7XG5cdGZvciAobGV0IGkgaW4gYSkgaWYgKGkgIT09ICdfX3NvdXJjZScgJiYgIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiBhW2ldICE9PSBiW2ldKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlXG4gKiBAcGFyYW0geyp9IHhcbiAqIEBwYXJhbSB7Kn0geVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4LCB5KSB7XG5cdHJldHVybiAoeCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENvbXBvbmVudCBjbGFzcyB3aXRoIGEgcHJlZGVmaW5lZCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwLCBjKSB7XG5cdHRoaXMucHJvcHMgPSBwO1xuXHR0aGlzLmNvbnRleHQgPSBjO1xufVxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG4vLyBTb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBjaGVjayBpZiB0aGlzIHByb3BlcnR5IGlzIHByZXNlbnRcblB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIE1lbW9pemUgYSBjb21wb25lbnQsIHNvIHRoYXQgaXQgb25seSB1cGRhdGVzIHdoZW4gdGhlIHByb3BzIGFjdHVhbGx5IGhhdmVcbiAqIGNoYW5nZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkga25vd24gYXMgYFJlYWN0LnB1cmVgLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH0gYyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICogQHBhcmFtIHsocHJldjogb2JqZWN0LCBuZXh0OiBvYmplY3QpID0+IGJvb2xlYW59IFtjb21wYXJlcl0gQ3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vKGMsIGNvbXBhcmVyKSB7XG5cdGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShuZXh0UHJvcHMpIHtcblx0XHRsZXQgcmVmID0gdGhpcy5wcm9wcy5yZWY7XG5cdFx0bGV0IHVwZGF0ZVJlZiA9IHJlZiA9PSBuZXh0UHJvcHMucmVmO1xuXHRcdGlmICghdXBkYXRlUmVmICYmIHJlZikge1xuXHRcdFx0cmVmLmNhbGwgPyByZWYobnVsbCkgOiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBhcmVyKSB7XG5cdFx0XHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgbmV4dFByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gIWNvbXBhcmVyKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgIXVwZGF0ZVJlZjtcblx0fVxuXG5cdGZ1bmN0aW9uIE1lbW9lZChwcm9wcykge1xuXHRcdHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gc2hvdWxkVXBkYXRlO1xuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGMsIHByb3BzKTtcblx0fVxuXHRNZW1vZWQuZGlzcGxheU5hbWUgPSAnTWVtbygnICsgKGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lKSArICcpJztcblx0TWVtb2VkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblx0TWVtb2VkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRyZXR1cm4gTWVtb2VkO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi91dGlsJztcblxubGV0IG9sZERpZmZIb29rID0gb3B0aW9ucy5fZGlmZjtcbm9wdGlvbnMuX2RpZmYgPSB2bm9kZSA9PiB7XG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuX2ZvcndhcmRlZCAmJiB2bm9kZS5yZWYpIHtcblx0XHR2bm9kZS5wcm9wcy5yZWYgPSB2bm9kZS5yZWY7XG5cdFx0dm5vZGUucmVmID0gbnVsbDtcblx0fVxuXHRpZiAob2xkRGlmZkhvb2spIG9sZERpZmZIb29rKHZub2RlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9GT1JXQVJEX1NZTUJPTCA9XG5cdCh0eXBlb2YgU3ltYm9sICE9ICd1bmRlZmluZWQnICYmXG5cdFx0U3ltYm9sLmZvciAmJlxuXHRcdFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykpIHx8XG5cdDB4ZjQ3O1xuXG4vKipcbiAqIFBhc3MgcmVmIGRvd24gdG8gYSBjaGlsZC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiBsaWJyYXJpZXMgd2l0aCBIT0NzIHRoYXRcbiAqIHdyYXAgY29tcG9uZW50cy4gVXNpbmcgYGZvcndhcmRSZWZgIHRoZXJlIGlzIGFuIGVhc3kgd2F5IHRvIGdldCBhIHJlZmVyZW5jZVxuICogb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50IGluc3RlYWQgb2Ygb25lIG9mIHRoZSB3cmFwcGVyIGl0c2VsZi5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRm9yd2FyZEZufSBmblxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZFJlZihmbikge1xuXHRmdW5jdGlvbiBGb3J3YXJkZWQocHJvcHMpIHtcblx0XHRsZXQgY2xvbmUgPSBhc3NpZ24oe30sIHByb3BzKTtcblx0XHRkZWxldGUgY2xvbmUucmVmO1xuXHRcdHJldHVybiBmbihjbG9uZSwgcHJvcHMucmVmIHx8IG51bGwpO1xuXHR9XG5cblx0Ly8gbW9ieC1yZWFjdCBjaGVja3MgZm9yIHRoaXMgYmVpbmcgcHJlc2VudFxuXHRGb3J3YXJkZWQuJCR0eXBlb2YgPSBSRUFDVF9GT1JXQVJEX1NZTUJPTDtcblx0Ly8gbW9ieC1yZWFjdCBoZWF2aWx5IHJlbGllcyBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXHQvLyBJdCBleHBlY3RzIGFuIG9iamVjdCBoZXJlIHdpdGggYSBgcmVuZGVyYCBwcm9wZXJ0eSxcblx0Ly8gYW5kIHByb3RvdHlwZS5yZW5kZXIgd2lsbCBmYWlsLiBXaXRob3V0IHRoaXNcblx0Ly8gbW9ieC1yZWFjdCB0aHJvd3MuXG5cdEZvcndhcmRlZC5yZW5kZXIgPSBGb3J3YXJkZWQ7XG5cblx0Rm9yd2FyZGVkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gRm9yd2FyZGVkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRGb3J3YXJkZWQuZGlzcGxheU5hbWUgPSAnRm9yd2FyZFJlZignICsgKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUpICsgJyknO1xuXHRyZXR1cm4gRm9yd2FyZGVkO1xufVxuIiwgImltcG9ydCB7IHRvQ2hpbGRBcnJheSB9IGZyb20gJ3ByZWFjdCc7XG5cbmNvbnN0IG1hcEZuID0gKGNoaWxkcmVuLCBmbikgPT4ge1xuXHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB0b0NoaWxkQXJyYXkodG9DaGlsZEFycmF5KGNoaWxkcmVuKS5tYXAoZm4pKTtcbn07XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5leHBvcnQgY29uc3QgQ2hpbGRyZW4gPSB7XG5cdG1hcDogbWFwRm4sXG5cdGZvckVhY2g6IG1hcEZuLFxuXHRjb3VudChjaGlsZHJlbikge1xuXHRcdHJldHVybiBjaGlsZHJlbiA/IHRvQ2hpbGRBcnJheShjaGlsZHJlbikubGVuZ3RoIDogMDtcblx0fSxcblx0b25seShjaGlsZHJlbikge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChub3JtYWxpemVkLmxlbmd0aCAhPT0gMSkgdGhyb3cgJ0NoaWxkcmVuLm9ubHknO1xuXHRcdHJldHVybiBub3JtYWxpemVkWzBdO1xuXHR9LFxuXHR0b0FycmF5OiB0b0NoaWxkQXJyYXlcbn07XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50LCBvcHRpb25zLCBGcmFnbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuLi8uLi9zcmMvY29uc3RhbnRzJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG9sZENhdGNoRXJyb3IgPSBvcHRpb25zLl9jYXRjaEVycm9yO1xub3B0aW9ucy5fY2F0Y2hFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0aWYgKGVycm9yLnRoZW4pIHtcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0XHRsZXQgY29tcG9uZW50O1xuXHRcdGxldCB2bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0Zm9yICg7ICh2bm9kZSA9IHZub2RlLl9wYXJlbnQpOyApIHtcblx0XHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQpIHtcblx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9kb20gPT0gbnVsbCkge1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBEb24ndCBjYWxsIG9sZENhdGNoRXJyb3IgaWYgd2UgZm91bmQgYSBTdXNwZW5zZVxuXHRcdFx0XHRyZXR1cm4gY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQoZXJyb3IsIG5ld1ZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0b2xkQ2F0Y2hFcnJvcihlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pO1xufTtcblxuY29uc3Qgb2xkVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbm9wdGlvbnMudW5tb3VudCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0Y29uc3QgY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuX29uUmVzb2x2ZSkge1xuXHRcdGNvbXBvbmVudC5fb25SZXNvbHZlKCk7XG5cdH1cblxuXHQvLyBpZiB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGh5ZHJhdGluZ1xuXHQvLyBtb3N0IGxpa2VseSBpdCBpcyBiZWNhdXNlIHRoZSBjb21wb25lbnQgaXMgc3VzcGVuZGVkXG5cdC8vIHdlIHNldCB0aGUgdm5vZGUudHlwZSBhcyBgbnVsbGAgc28gdGhhdCBpdCBpcyBub3QgYSB0eXBlb2YgZnVuY3Rpb25cblx0Ly8gc28gdGhlIHVubW91bnQgd2lsbCByZW1vdmUgdGhlIHZub2RlLl9kb21cblx0aWYgKGNvbXBvbmVudCAmJiB2bm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpIHtcblx0XHR2bm9kZS50eXBlID0gbnVsbDtcblx0fVxuXG5cdGlmIChvbGRVbm1vdW50KSBvbGRVbm1vdW50KHZub2RlKTtcbn07XG5cbmZ1bmN0aW9uIGRldGFjaGVkQ2xvbmUodm5vZGUsIGRldGFjaGVkUGFyZW50LCBwYXJlbnREb20pIHtcblx0aWYgKHZub2RlKSB7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgJiYgdm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzKSB7XG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZm9yRWFjaChlZmZlY3QgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGVmZmVjdC5fY2xlYW51cCA9PSAnZnVuY3Rpb24nKSBlZmZlY3QuX2NsZWFudXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlID0gYXNzaWduKHt9LCB2bm9kZSk7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gcGFyZW50RG9tKSB7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IGRldGFjaGVkUGFyZW50O1xuXHRcdFx0fVxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dm5vZGUuX2NoaWxkcmVuID1cblx0XHRcdHZub2RlLl9jaGlsZHJlbiAmJlxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuLm1hcChjaGlsZCA9PlxuXHRcdFx0XHRkZXRhY2hlZENsb25lKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKVxuXHRcdFx0KTtcblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JpZ2luYWwodm5vZGUsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudCkge1xuXHRpZiAodm5vZGUgJiYgb3JpZ2luYWxQYXJlbnQpIHtcblx0XHR2bm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0cmVtb3ZlT3JpZ2luYWwoY2hpbGQsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudClcblx0XHRcdCk7XG5cblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gZGV0YWNoZWRQYXJlbnQpIHtcblx0XHRcdFx0aWYgKHZub2RlLl9kb20pIHtcblx0XHRcdFx0XHRvcmlnaW5hbFBhcmVudC5hcHBlbmRDaGlsZCh2bm9kZS5fZG9tKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IG9yaWdpbmFsUGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuLy8gaGF2aW5nIGN1c3RvbSBpbmhlcml0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MgaGVyZSBzYXZlcyBhIGxvdCBvZiBieXRlc1xuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlKCkge1xuXHQvLyB3ZSBkbyBub3QgY2FsbCBzdXBlciBoZXJlIHRvIGdvbGYgc29tZSBieXRlcy4uLlxuXHR0aGlzLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50ID0gMDtcblx0dGhpcy5fc3VzcGVuZGVycyA9IG51bGw7XG5cdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG59XG5cbi8vIFRoaW5ncyB3ZSBkbyBoZXJlIHRvIHNhdmUgc29tZSBieXRlcyBidXQgYXJlIG5vdCBwcm9wZXIgSlMgaW5oZXJpdGFuY2U6XG4vLyAtIGNhbGwgYG5ldyBDb21wb25lbnQoKWAgYXMgdGhlIHByb3RvdHlwZVxuLy8gLSBkbyBub3Qgc2V0IGBTdXNwZW5zZS5wcm90b3R5cGUuY29uc3RydWN0b3JgIHRvIGBTdXNwZW5zZWBcblN1c3BlbnNlLnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge1Byb21pc2V9IHByb21pc2UgVGhlIHRocm93biBwcm9taXNlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlPGFueSwgYW55Pn0gc3VzcGVuZGluZ1ZOb2RlIFRoZSBzdXNwZW5kaW5nIGNvbXBvbmVudFxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUuX2NoaWxkRGlkU3VzcGVuZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdXNwZW5kaW5nVk5vZGUpIHtcblx0Y29uc3Qgc3VzcGVuZGluZ0NvbXBvbmVudCA9IHN1c3BlbmRpbmdWTm9kZS5fY29tcG9uZW50O1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9ICovXG5cdGNvbnN0IGMgPSB0aGlzO1xuXG5cdGlmIChjLl9zdXNwZW5kZXJzID09IG51bGwpIHtcblx0XHRjLl9zdXNwZW5kZXJzID0gW107XG5cdH1cblx0Yy5fc3VzcGVuZGVycy5wdXNoKHN1c3BlbmRpbmdDb21wb25lbnQpO1xuXG5cdGNvbnN0IHJlc29sdmUgPSBzdXNwZW5kZWQoYy5fdm5vZGUpO1xuXG5cdGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXHRjb25zdCBvblJlc29sdmVkID0gKCkgPT4ge1xuXHRcdGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuXG5cdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG51bGw7XG5cblx0XHRpZiAocmVzb2x2ZSkge1xuXHRcdFx0cmVzb2x2ZShvblN1c3BlbnNpb25Db21wbGV0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uU3VzcGVuc2lvbkNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG9uUmVzb2x2ZWQ7XG5cblx0Y29uc3Qgb25TdXNwZW5zaW9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKCEtLWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQpIHtcblx0XHRcdC8vIElmIHRoZSBzdXNwZW5zaW9uIHdhcyBkdXJpbmcgaHlkcmF0aW9uIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSB0aGVcblx0XHRcdC8vIHN1c3BlbmRlZCBjaGlsZHJlbiBpbnRvIHRoZSBfY2hpbGRyZW4gYXJyYXlcblx0XHRcdGlmIChjLnN0YXRlLl9zdXNwZW5kZWQpIHtcblx0XHRcdFx0Y29uc3Qgc3VzcGVuZGVkVk5vZGUgPSBjLnN0YXRlLl9zdXNwZW5kZWQ7XG5cdFx0XHRcdGMuX3Zub2RlLl9jaGlsZHJlblswXSA9IHJlbW92ZU9yaWdpbmFsKFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLl9jb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjLnNldFN0YXRlKHsgX3N1c3BlbmRlZDogKGMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGwpIH0pO1xuXG5cdFx0XHRsZXQgc3VzcGVuZGVkO1xuXHRcdFx0d2hpbGUgKChzdXNwZW5kZWQgPSBjLl9zdXNwZW5kZXJzLnBvcCgpKSkge1xuXHRcdFx0XHRzdXNwZW5kZWQuZm9yY2VVcGRhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIFdlIGRvIG5vdCBzZXQgYHN1c3BlbmRlZDogdHJ1ZWAgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHdlIHdhbnQgdGhlIGFjdHVhbCBtYXJrdXBcblx0ICogdG8gcmVtYWluIG9uIHNjcmVlbiBhbmQgaHlkcmF0ZSBpdCB3aGVuIHRoZSBzdXNwZW5zZSBhY3R1YWxseSBnZXRzIHJlc29sdmVkLlxuXHQgKiBXaGlsZSBpbiBub24taHlkcmF0aW9uIGNhc2VzIHRoZSB1c3VhbCBmYWxsYmFjayAtPiBjb21wb25lbnQgZmxvdyB3b3VsZCBvY2NvdXIuXG5cdCAqL1xuXHRpZiAoXG5cdFx0IWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQrKyAmJlxuXHRcdCEoc3VzcGVuZGluZ1ZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSlcblx0KSB7XG5cdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBjLl92bm9kZS5fY2hpbGRyZW5bMF0pIH0pO1xuXHR9XG5cdHByb21pc2UudGhlbihvblJlc29sdmVkLCBvblJlc29sdmVkKTtcbn07XG5cblN1c3BlbnNlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5fc3VzcGVuZGVycyA9IFtdO1xufTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50W1wicHJvcHNcIl19IHByb3BzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlU3RhdGV9IHN0YXRlXG4gKi9cblN1c3BlbnNlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJvcHMsIHN0YXRlKSB7XG5cdGlmICh0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIpIHtcblx0XHQvLyBXaGVuIHRoZSBTdXNwZW5zZSdzIF92bm9kZSB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gY3JlYXRlVk5vZGVcblx0XHQvLyAoaS5lLiBkdWUgdG8gYSBzZXRTdGF0ZSBmdXJ0aGVyIHVwIGluIHRoZSB0cmVlKVxuXHRcdC8vIGl0J3MgX2NoaWxkcmVuIHByb3AgaXMgbnVsbCwgaW4gdGhpcyBjYXNlIHdlIFwiZm9yZ2V0XCIgYWJvdXQgdGhlIHBhcmtlZCB2bm9kZXMgdG8gZGV0YWNoXG5cdFx0aWYgKHRoaXMuX3Zub2RlLl9jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgZGV0YWNoZWRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGNvbnN0IGRldGFjaGVkQ29tcG9uZW50ID0gdGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdLl9jb21wb25lbnQ7XG5cdFx0XHR0aGlzLl92bm9kZS5fY2hpbGRyZW5bMF0gPSBkZXRhY2hlZENsb25lKFxuXHRcdFx0XHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIsXG5cdFx0XHRcdGRldGFjaGVkUGFyZW50LFxuXHRcdFx0XHQoZGV0YWNoZWRDb21wb25lbnQuX29yaWdpbmFsUGFyZW50RG9tID0gZGV0YWNoZWRDb21wb25lbnQuX3BhcmVudERvbSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyID0gbnVsbDtcblx0fVxuXG5cdC8vIFdyYXAgZmFsbGJhY2sgdHJlZSBpbiBhIFZOb2RlIHRoYXQgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcgbWFya2VkIGFzIGFib3J0aW5nIG1pZC1oeWRyYXRpb246XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9ICovXG5cdGNvbnN0IGZhbGxiYWNrID1cblx0XHRzdGF0ZS5fc3VzcGVuZGVkICYmIGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHByb3BzLmZhbGxiYWNrKTtcblx0aWYgKGZhbGxiYWNrKSBmYWxsYmFjay5fZmxhZ3MgJj0gfk1PREVfSFlEUkFURTtcblxuXHRyZXR1cm4gW1xuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHN0YXRlLl9zdXNwZW5kZWQgPyBudWxsIDogcHJvcHMuY2hpbGRyZW4pLFxuXHRcdGZhbGxiYWNrXG5cdF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBhbmQgY2FsbHMgdGhlIHBhcmVudCBjb21wb25lbnQncyBfc3VzcGVuZGVkIG1ldGhvZCwgcGFzc2luZyBpbiB0aGVcbiAqIHN1c3BlbmRlZCB2bm9kZS4gVGhpcyBpcyBhIHdheSBmb3IgYSBwYXJlbnQgKGUuZy4gU3VzcGVuc2VMaXN0KSB0byBnZXQgbm90aWZpZWRcbiAqIHRoYXQgb25lIG9mIGl0cyBjaGlsZHJlbi9kZXNjZW5kYW50cyBzdXNwZW5kZWQuXG4gKlxuICogVGhlIHBhcmVudCBNQVkgcmV0dXJuIGEgY2FsbGJhY2suIFRoZSBjYWxsYmFjayB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGVcbiAqIHN1c3BlbnNpb24gcmVzb2x2ZXMsIG5vdGlmeWluZyB0aGUgcGFyZW50IG9mIHRoZSBmYWN0LlxuICogTW9yZW92ZXIsIHRoZSBjYWxsYmFjayBnZXRzIGZ1bmN0aW9uIGB1bnN1c3BlbmRgIGFzIGEgcGFyYW1ldGVyLiBUaGUgcmVzb2x2ZWRcbiAqIGNoaWxkIGRlc2NlbmRhbnQgd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHVuc3VzcGVuZGVkIHVudGlsIGB1bnN1c3BlbmRgIGdldHMgY2FsbGVkLlxuICogVGhpcyBpcyBhIHdheSBmb3IgdGhlIHBhcmVudCB0byBkZWxheSB1bnN1c3BlbmRpbmcuXG4gKlxuICogSWYgdGhlIHBhcmVudCBkb2VzIG5vdCByZXR1cm4gYSBjYWxsYmFjayB0aGVuIHRoZSByZXNvbHZlZCB2bm9kZVxuICogZ2V0cyB1bnN1c3BlbmRlZCBpbW1lZGlhdGVseSB3aGVuIGl0IHJlc29sdmVzLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlXG4gKiBAcmV0dXJucyB7KCh1bnN1c3BlbmQ6ICgpID0+IHZvaWQpID0+IHZvaWQpP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1c3BlbmRlZCh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQuX2NvbXBvbmVudDtcblx0cmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCh2bm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGxvYWRlcikge1xuXHRsZXQgcHJvbTtcblx0bGV0IGNvbXBvbmVudDtcblx0bGV0IGVycm9yO1xuXG5cdGZ1bmN0aW9uIExhenkocHJvcHMpIHtcblx0XHRpZiAoIXByb20pIHtcblx0XHRcdHByb20gPSBsb2FkZXIoKTtcblx0XHRcdHByb20udGhlbihcblx0XHRcdFx0ZXhwb3J0cyA9PiB7XG5cdFx0XHRcdFx0Y29tcG9uZW50ID0gZXhwb3J0cy5kZWZhdWx0IHx8IGV4cG9ydHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGUgPT4ge1xuXHRcdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblxuXHRcdGlmICghY29tcG9uZW50KSB7XG5cdFx0XHR0aHJvdyBwcm9tO1xuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpO1xuXHR9XG5cblx0TGF6eS5kaXNwbGF5TmFtZSA9ICdMYXp5Jztcblx0TGF6eS5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0cmV0dXJuIExhenk7XG59XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc3VzcGVuZGVkIH0gZnJvbSAnLi9zdXNwZW5zZS5qcyc7XG5cbi8vIEluZGV4ZXMgdG8gbGlua2VkIGxpc3Qgbm9kZXMgKG5vZGVzIGFyZSBzdG9yZWQgYXMgYXJyYXlzIHRvIHNhdmUgYnl0ZXMpLlxuY29uc3QgU1VTUEVOREVEX0NPVU5UID0gMDtcbmNvbnN0IFJFU09MVkVEX0NPVU5UID0gMTtcbmNvbnN0IE5FWFRfTk9ERSA9IDI7XG5cbi8vIEhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXMuXG5leHBvcnQgZnVuY3Rpb24gU3VzcGVuc2VMaXN0KCkge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbnVsbDtcbn1cblxuLy8gTWFyayBvbmUgb2YgY2hpbGQncyBlYXJsaWVyIHN1c3BlbnNpb25zIGFzIHJlc29sdmVkLlxuLy8gU29tZSBwZW5kaW5nIGNhbGxiYWNrcyBtYXkgYmVjb21lIGNhbGxhYmxlIGR1ZSB0byB0aGlzXG4vLyAoZS5nLiB0aGUgbGFzdCBzdXNwZW5kZWQgZGVzY2VuZGFudCBnZXRzIHJlc29sdmVkIHdoZW5cbi8vIHJldmVhbE9yZGVyID09PSAndG9nZXRoZXInKS4gUHJvY2VzcyB0aG9zZSBjYWxsYmFja3MgYXMgd2VsbC5cbmNvbnN0IHJlc29sdmUgPSAobGlzdCwgY2hpbGQsIG5vZGUpID0+IHtcblx0aWYgKCsrbm9kZVtSRVNPTFZFRF9DT1VOVF0gPT09IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdC8vIFRoZSBudW1iZXIgYSBjaGlsZCAob3IgYW55IG9mIGl0cyBkZXNjZW5kYW50cykgaGFzIGJlZW4gc3VzcGVuZGVkXG5cdFx0Ly8gbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGl0J3MgYmVlbiByZXNvbHZlZC4gVGhlcmVmb3JlIHdlXG5cdFx0Ly8gbWFyayB0aGUgY2hpbGQgYXMgY29tcGxldGVseSByZXNvbHZlZCBieSBkZWxldGluZyBpdCBmcm9tIC5fbWFwLlxuXHRcdC8vIFRoaXMgaXMgdXNlZCB0byBmaWd1cmUgb3V0IHdoZW4gKmFsbCogY2hpbGRyZW4gaGF2ZSBiZWVuIGNvbXBsZXRlbHlcblx0XHQvLyByZXNvbHZlZCB3aGVuIHJldmVhbE9yZGVyIGlzICd0b2dldGhlcicuXG5cdFx0bGlzdC5fbWFwLmRlbGV0ZShjaGlsZCk7XG5cdH1cblxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyBmYWxzeSB0aGVuIHdlIGNhbiBkbyBhbiBlYXJseSBleGl0LCBhcyB0aGVcblx0Ly8gY2FsbGJhY2tzIHdvbid0IGdldCBxdWV1ZWQgaW4gdGhlIG5vZGUgYW55d2F5LlxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInIHRoZW4gYWxzbyBkbyBhbiBlYXJseSBleGl0XG5cdC8vIGlmIGFsbCBzdXNwZW5kZWQgZGVzY2VuZGFudHMgaGF2ZSBub3QgeWV0IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChcblx0XHQhbGlzdC5wcm9wcy5yZXZlYWxPcmRlciB8fFxuXHRcdChsaXN0LnByb3BzLnJldmVhbE9yZGVyWzBdID09PSAndCcgJiYgbGlzdC5fbWFwLnNpemUpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFdhbGsgdGhlIGN1cnJlbnRseSBzdXNwZW5kZWQgY2hpbGRyZW4gaW4gb3JkZXIsIGNhbGxpbmcgdGhlaXJcblx0Ly8gc3RvcmVkIGNhbGxiYWNrcyBvbiB0aGUgd2F5LiBTdG9wIGlmIHdlIGVuY291bnRlciBhIGNoaWxkIHRoYXRcblx0Ly8gaGFzIG5vdCBiZWVuIGNvbXBsZXRlbHkgcmVzb2x2ZWQgeWV0LlxuXHRub2RlID0gbGlzdC5fbmV4dDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHR3aGlsZSAobm9kZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRub2RlLnBvcCgpKCk7XG5cdFx0fVxuXHRcdGlmIChub2RlW1JFU09MVkVEX0NPVU5UXSA8IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGxpc3QuX25leHQgPSBub2RlID0gbm9kZVtORVhUX05PREVdO1xuXHR9XG59O1xuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlID0gbmV3IENvbXBvbmVudCgpO1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLl9zdXNwZW5kZWQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0Y29uc3QgbGlzdCA9IHRoaXM7XG5cdGNvbnN0IGRlbGVnYXRlZCA9IHN1c3BlbmRlZChsaXN0Ll92bm9kZSk7XG5cblx0bGV0IG5vZGUgPSBsaXN0Ll9tYXAuZ2V0KGNoaWxkKTtcblx0bm9kZVtTVVNQRU5ERURfQ09VTlRdKys7XG5cblx0cmV0dXJuIHVuc3VzcGVuZCA9PiB7XG5cdFx0Y29uc3Qgd3JhcHBlZFVuc3VzcGVuZCA9ICgpID0+IHtcblx0XHRcdGlmICghbGlzdC5wcm9wcy5yZXZlYWxPcmRlcikge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGNhc2UgdGhlIHVuZGVmaW5lZCAoZmFsc3kpIHJldmVhbE9yZGVyLCBhcyB0aGVyZVxuXHRcdFx0XHQvLyBpcyBubyBuZWVkIHRvIGNvb3JkaW5hdGUgYSBzcGVjaWZpYyBvcmRlciBvciB1bnN1c3BlbmRzLlxuXHRcdFx0XHR1bnN1c3BlbmQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vZGUucHVzaCh1bnN1c3BlbmQpO1xuXHRcdFx0XHRyZXNvbHZlKGxpc3QsIGNoaWxkLCBub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChkZWxlZ2F0ZWQpIHtcblx0XHRcdGRlbGVnYXRlZCh3cmFwcGVkVW5zdXNwZW5kKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcHBlZFVuc3VzcGVuZCgpO1xuXHRcdH1cblx0fTtcbn07XG5cblN1c3BlbnNlTGlzdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgY2hpbGRyZW4gPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXHRpZiAocHJvcHMucmV2ZWFsT3JkZXIgJiYgcHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICdiJykge1xuXHRcdC8vIElmIG9yZGVyID09PSAnYmFja3dhcmRzJyAob3IsIHdlbGwsIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYSAnYicpXG5cdFx0Ly8gdGhlbiBmbGlwIHRoZSBjaGlsZCBsaXN0IGFyb3VuZCBzbyB0aGF0IHRoZSBsYXN0IGNoaWxkIHdpbGwgYmVcblx0XHQvLyB0aGUgZmlyc3QgaW4gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdGNoaWxkcmVuLnJldmVyc2UoKTtcblx0fVxuXHQvLyBCdWlsZCB0aGUgbGlua2VkIGxpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlclxuXHQvLyBzbyB0aGF0IGBfbmV4dGAgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5rZWQgbGlzdCBub2RlIHRvIGJlIHJlc29sdmVkLlxuXHRmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBsaW5rZWQgbGlzdCBub2RlIGFzIGFuIGFycmF5IG9mIGZvcm06XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlXVxuXHRcdC8vIHdoZXJlIHN1c3BlbmRlZF9jb3VudCBhbmQgcmVzb2x2ZWRfY291bnQgYXJlIG51bWVyaWMgY291bnRlcnMgZm9yXG5cdFx0Ly8ga2VlcGluZyB0cmFjayBob3cgbWFueSB0aW1lcyBhIG5vZGUgaGFzIGJlZW4gc3VzcGVuZGVkIGFuZCByZXNvbHZlZC5cblx0XHQvL1xuXHRcdC8vIE5vdGUgdGhhdCBzdXNwZW5kZWRfY291bnQgc3RhcnRzIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHNvIHdlIGNhbiBibG9ja1xuXHRcdC8vIHByb2Nlc3NpbmcgY2FsbGJhY2tzIHVudGlsIGNvbXBvbmVudERpZE1vdW50IGhhcyBiZWVuIGNhbGxlZC4gSW4gYSBzZW5zZVxuXHRcdC8vIG5vZGUgaXMgc3VzcGVuZGVkIGF0IGxlYXN0IHVudGlsIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkIVxuXHRcdC8vXG5cdFx0Ly8gUGVuZGluZyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGU6XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlLCBjYWxsYmFja18wLCBjYWxsYmFja18xLCAuLi5dXG5cdFx0dGhpcy5fbWFwLnNldChjaGlsZHJlbltpXSwgKHRoaXMuX25leHQgPSBbMSwgMCwgdGhpcy5fbmV4dF0pKTtcblx0fVxuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9XG5cdFN1c3BlbnNlTGlzdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZnRlciBtb3VudGluZyBmb3IgdHdvIHJlYXNvbnM6XG5cdFx0Ly8gMS4gQXMgZWFjaCBub2RlW1NVU1BFTkRFRF9DT1VOVF0gc3RhcnRzIGZyb20gMSwgdGhpcyBpdGVyYXRpb24gaW5jcmVhc2VzXG5cdFx0Ly8gICAgZWFjaCBub2RlW1JFTEVBU0VEX0NPVU5UXSBieSAxLCB0aGVyZWZvcmUgYmFsYW5jaW5nIHRoZSBjb3VudGVycy5cblx0XHQvLyAgICBUaGUgbm9kZXMgY2FuIG5vdyBiZSBjb21wbGV0ZWx5IGNvbnN1bWVkIGZyb20gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdC8vIDIuIEhhbmRsZSBub2RlcyB0aGF0IG1pZ2h0IGhhdmUgZ290dGVuIHJlc29sdmVkIGJldHdlZW4gcmVuZGVyIGFuZFxuXHRcdC8vICAgIGNvbXBvbmVudERpZE1vdW50LlxuXHRcdHRoaXMuX21hcC5mb3JFYWNoKChub2RlLCBjaGlsZCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSh0aGlzLCBjaGlsZCwgbm9kZSk7XG5cdFx0fSk7XG5cdH07XG4iLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCByZW5kZXIgfSBmcm9tICdwcmVhY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9zcmMvaW5kZXgnKS5SZW5kZXJhYmxlUHJvcHM8eyBjb250ZXh0OiBhbnkgfT59IHByb3BzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHRQcm92aWRlcihwcm9wcykge1xuXHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IHByb3BzLmNvbnRleHQ7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBQb3J0YWwgY29tcG9uZW50XG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkfSBwcm9wc1xuICpcbiAqIFRPRE86IHVzZSBjcmVhdGVSb290KCkgaW5zdGVhZCBvZiBmYWtlIHJvb3RcbiAqL1xuZnVuY3Rpb24gUG9ydGFsKHByb3BzKSB7XG5cdGNvbnN0IF90aGlzID0gdGhpcztcblx0bGV0IGNvbnRhaW5lciA9IHByb3BzLl9jb250YWluZXI7XG5cblx0X3RoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmVuZGVyKG51bGwsIF90aGlzLl90ZW1wKTtcblx0XHRfdGhpcy5fdGVtcCA9IG51bGw7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cdH07XG5cblx0Ly8gV2hlbiB3ZSBjaGFuZ2UgY29udGFpbmVyIHdlIHNob3VsZCBjbGVhciBvdXIgb2xkIGNvbnRhaW5lciBhbmRcblx0Ly8gaW5kaWNhdGUgYSBuZXcgbW91bnQuXG5cdGlmIChfdGhpcy5fY29udGFpbmVyICYmIF90aGlzLl9jb250YWluZXIgIT09IGNvbnRhaW5lcikge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cblxuXHRpZiAoIV90aGlzLl90ZW1wKSB7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgRE9NIHBhcmVudCBub2RlIHRoYXQgbWFuYWdlcyBhIHN1YnNldCBvZiBgY29udGFpbmVyYCdzIGNoaWxkcmVuOlxuXHRcdF90aGlzLl90ZW1wID0ge1xuXHRcdFx0bm9kZVR5cGU6IDEsXG5cdFx0XHRwYXJlbnROb2RlOiBjb250YWluZXIsXG5cdFx0XHRjaGlsZE5vZGVzOiBbXSxcblx0XHRcdGFwcGVuZENoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG5cdFx0XHR9LFxuXHRcdFx0aW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmUpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRyZW1vdmVDaGlsZChjaGlsZCkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKSA+Pj4gMSwgMSk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBSZW5kZXIgb3VyIHdyYXBwaW5nIGVsZW1lbnQgaW50byB0ZW1wLlxuXHRyZW5kZXIoXG5cdFx0Y3JlYXRlRWxlbWVudChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogX3RoaXMuY29udGV4dCB9LCBwcm9wcy5fdm5vZGUpLFxuXHRcdF90aGlzLl90ZW1wXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFBvcnRhbGAgdG8gY29udGludWUgcmVuZGVyaW5nIHRoZSB2bm9kZSB0cmVlIGF0IGEgZGlmZmVyZW50IERPTSBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgRE9NIG5vZGUgdG8gY29udGludWUgcmVuZGVyaW5nIGluIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9ydGFsKHZub2RlLCBjb250YWluZXIpIHtcblx0Y29uc3QgZWwgPSBjcmVhdGVFbGVtZW50KFBvcnRhbCwgeyBfdm5vZGU6IHZub2RlLCBfY29udGFpbmVyOiBjb250YWluZXIgfSk7XG5cdGVsLmNvbnRhaW5lckluZm8gPSBjb250YWluZXI7XG5cdHJldHVybiBlbDtcbn1cbiIsICJpbXBvcnQge1xuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRoeWRyYXRlIGFzIHByZWFjdEh5ZHJhdGUsXG5cdG9wdGlvbnMsXG5cdHRvQ2hpbGRBcnJheSxcblx0Q29tcG9uZW50XG59IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQge1xuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZSxcblx0dXNlRWZmZWN0LFxuXHR1c2VJZCxcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VNZW1vLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VSZWYsXG5cdHVzZVN0YXRlXG59IGZyb20gJ3ByZWFjdC9ob29rcyc7XG5pbXBvcnQge1xuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHR1c2VUcmFuc2l0aW9uXG59IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG5cdDB4ZWFjNztcblxuY29uc3QgQ0FNRUxfUFJPUFMgPVxuXHQvXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS87XG5jb25zdCBPTl9BTkkgPSAvXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvO1xuY29uc3QgQ0FNRUxfUkVQTEFDRSA9IC9bQS1aMC05XS9nO1xuXG5jb25zdCBJU19ET00gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBJbnB1dCB0eXBlcyBmb3Igd2hpY2ggb25jaGFuZ2Ugc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG8gb25pbnB1dC5cbi8vIHR5cGU9XCJmaWxlfGNoZWNrYm94fHJhZGlvXCIsIHBsdXMgXCJyYW5nZVwiIGluIElFMTEuXG4vLyAoSUUxMSBkb2Vzbid0IHN1cHBvcnQgU3ltYm9sLCB3aGljaCB3ZSB1c2UgaGVyZSB0byB0dXJuIGByYWRgIGludG8gYHJhYCB3aGljaCBtYXRjaGVzIFwicmFuZ2VcIilcbmNvbnN0IG9uQ2hhbmdlSW5wdXRUeXBlID0gdHlwZSA9PlxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT0gJ3N5bWJvbCdcblx0XHQ/IC9maWx8Y2hlfHJhZC9cblx0XHQ6IC9maWx8Y2hlfHJhL1xuXHQpLnRlc3QodHlwZSk7XG5cbi8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYHJlYWN0LXZpcnR1YWxpemVkYCBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGlzLlxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8vIGBVTlNBRkVfKmAgbGlmZWN5Y2xlIGhvb2tzXG4vLyBQcmVhY3Qgb25seSBldmVyIGludm9rZXMgdGhlIHVucHJlZml4ZWQgbWV0aG9kcy5cbi8vIEhlcmUgd2UgcHJvdmlkZSBhIGJhc2UgXCJmYWxsYmFja1wiIGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgYW55IGRlZmluZWQgVU5TQUZFXyBwcmVmaXhlZCBtZXRob2QuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgaXRzIG93biBgY29tcG9uZW50RGlkTW91bnQoKWAgKGluY2x1ZGluZyB2aWEgZGVmaW5lUHJvcGVydHkpLCB1c2UgdGhhdC5cbi8vIC0gSWYgYSBjb21wb25lbnQgZGVmaW5lcyBgVU5TQUZFX2NvbXBvbmVudERpZE1vdW50KClgLCBgY29tcG9uZW50RGlkTW91bnRgIGlzIHRoZSBhbGlhcyBnZXR0ZXIvc2V0dGVyLlxuLy8gLSBJZiBhbnl0aGluZyBhc3NpZ25zIHRvIGFuIGBVTlNBRkVfKmAgcHJvcGVydHksIHRoZSBhc3NpZ25tZW50IGlzIGZvcndhcmRlZCB0byB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJlYWN0anMvcHJlYWN0L2lzc3Vlcy8xOTQxXG5bXG5cdCdjb21wb25lbnRXaWxsTW91bnQnLFxuXHQnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdCdjb21wb25lbnRXaWxsVXBkYXRlJ1xuXS5mb3JFYWNoKGtleSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBrZXksIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbJ1VOU0FGRV8nICsga2V5XTtcblx0XHR9LFxuXHRcdHNldCh2KSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB2XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8qKlxuICogUHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBWTm9kZSB0cmVlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnQgRE9NIG5vZGUgdG8gcmVuZGVyIHZub2RlIHRyZWUgaW50b1xuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50IHwgbnVsbH0gVGhlIHJvb3QgY29tcG9uZW50IHJlZmVyZW5jZSBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0Ly8gUmVhY3QgZGVzdHJveXMgYW55IGV4aXN0aW5nIERPTSBub2Rlcywgc2VlICMxNzI3XG5cdC8vIC4uLmJ1dCBvbmx5IG9uIHRoZSBmaXJzdCByZW5kZXIsIHNlZSAjMTgyOFxuXHRpZiAocGFyZW50Ll9jaGlsZHJlbiA9PSBudWxsKSB7XG5cdFx0cGFyZW50LnRleHRDb250ZW50ID0gJyc7XG5cdH1cblxuXHRwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0cHJlYWN0SHlkcmF0ZSh2bm9kZSwgcGFyZW50KTtcblx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXG5cdHJldHVybiB2bm9kZSA/IHZub2RlLl9jb21wb25lbnQgOiBudWxsO1xufVxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblxuXHRlLnBlcnNpc3QgPSBlbXB0eTtcblx0ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGlzUHJvcGFnYXRpb25TdG9wcGVkO1xuXHRlLmlzRGVmYXVsdFByZXZlbnRlZCA9IGlzRGVmYXVsdFByZXZlbnRlZDtcblx0cmV0dXJuIChlLm5hdGl2ZUV2ZW50ID0gZSk7XG59O1xuXG5mdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKCkge1xuXHRyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcblx0cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZDtcbn1cblxuY29uc3QgY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlID0ge1xuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3M7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZURvbVZOb2RlKHZub2RlKSB7XG5cdGxldCBwcm9wcyA9IHZub2RlLnByb3BzLFxuXHRcdHR5cGUgPSB2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyA9IHt9O1xuXG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIHtcblx0XHRsZXQgdmFsdWUgPSBwcm9wc1tpXTtcblxuXHRcdGlmIChcblx0XHRcdChpID09PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIHByb3BzICYmIHZhbHVlID09IG51bGwpIHx8XG5cdFx0XHQvLyBFbXVsYXRlIFJlYWN0J3MgYmVoYXZpb3Igb2Ygbm90IHJlbmRlcmluZyB0aGUgY29udGVudHMgb2Ygbm9zY3JpcHQgdGFncyBvbiB0aGUgY2xpZW50LlxuXHRcdFx0KElTX0RPTSAmJiBpID09PSAnY2hpbGRyZW4nICYmIHR5cGUgPT09ICdub3NjcmlwdCcpIHx8XG5cdFx0XHRpID09PSAnY2xhc3MnIHx8XG5cdFx0XHRpID09PSAnY2xhc3NOYW1lJ1xuXHRcdCkge1xuXHRcdFx0Ly8gU2tpcCBhcHBseWluZyB2YWx1ZSBpZiBpdCBpcyBudWxsL3VuZGVmaW5lZCBhbmQgd2UgYWxyZWFkeSBzZXRcblx0XHRcdC8vIGEgZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0bGV0IGxvd2VyQ2FzZWQgPSBpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGkgPT09ICdkZWZhdWx0VmFsdWUnICYmICd2YWx1ZScgaW4gcHJvcHMgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgaXMgdHJlYXRlZCBhcyBhIGZhbGxiYWNrIGB2YWx1ZWAgd2hlbiBhIHZhbHVlIHByb3AgaXMgcHJlc2VudCBidXQgbnVsbC91bmRlZmluZWQuXG5cdFx0XHQvLyBgZGVmYXVsdFZhbHVlYCBmb3IgRWxlbWVudHMgd2l0aCBubyB2YWx1ZSBwcm9wIGlzIHRoZSBzYW1lIGFzIHRoZSBET00gZGVmYXVsdFZhbHVlIHByb3BlcnR5LlxuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0fSBlbHNlIGlmIChpID09PSAnZG93bmxvYWQnICYmIHZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHQvLyBDYWxsaW5nIGBzZXRBdHRyaWJ1dGVgIHdpdGggYSB0cnV0aHkgdmFsdWUgd2lsbCBsZWFkIHRvIGl0IGJlaW5nXG5cdFx0XHQvLyBwYXNzZWQgYXMgYSBzdHJpbmdpZmllZCB2YWx1ZSwgZS5nLiBgZG93bmxvYWQ9XCJ0cnVlXCJgLiBSZWFjdFxuXHRcdFx0Ly8gY29udmVydHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQsIG90aGVyd2lzZSB0aGUgYXR0cmlidXRlXG5cdFx0XHQvLyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjYWxsZWRcblx0XHRcdC8vIFwidHJ1ZVwiIHVwb24gZG93bmxvYWRpbmcgaXQuXG5cdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ3RyYW5zbGF0ZScgJiYgdmFsdWUgPT09ICdubycpIHtcblx0XHRcdHZhbHVlID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25kb3VibGVjbGljaycpIHtcblx0XHRcdGkgPSAnb25kYmxjbGljayc7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGxvd2VyQ2FzZWQgPT09ICdvbmNoYW5nZScgJiZcblx0XHRcdCh0eXBlID09PSAnaW5wdXQnIHx8IHR5cGUgPT09ICd0ZXh0YXJlYScpICYmXG5cdFx0XHQhb25DaGFuZ2VJbnB1dFR5cGUocHJvcHMudHlwZSlcblx0XHQpIHtcblx0XHRcdGxvd2VyQ2FzZWQgPSBpID0gJ29uaW5wdXQnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uZm9jdXMnKSB7XG5cdFx0XHRpID0gJ29uZm9jdXNpbic7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25ibHVyJykge1xuXHRcdFx0aSA9ICdvbmZvY3Vzb3V0Jztcblx0XHR9IGVsc2UgaWYgKE9OX0FOSS50ZXN0KGkpKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignLScpID09PSAtMSAmJiBDQU1FTF9QUk9QUy50ZXN0KGkpKSB7XG5cdFx0XHRpID0gaS5yZXBsYWNlKENBTUVMX1JFUExBQ0UsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBzdXBwb3J0IGZvciBvbklucHV0IGFuZCBvbkNoYW5nZSwgc2VlICMzNTYxXG5cdFx0Ly8gaWYgd2UgaGF2ZSBhbiBvbmlucHV0IHByb3AgYWxyZWFkeSBjaGFuZ2UgaXQgdG8gb25pbnB1dENhcHR1cmVcblx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uaW5wdXQnKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0pIHtcblx0XHRcdFx0aSA9ICdvbmlucHV0Q2FwdHVyZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdmFsdWU7XG5cdH1cblxuXHQvLyBBZGQgc3VwcG9ydCBmb3IgYXJyYXkgc2VsZWN0IHZhbHVlczogPHNlbGVjdCBtdWx0aXBsZSB2YWx1ZT17W119IC8+XG5cdGlmIChcblx0XHR0eXBlID09ICdzZWxlY3QnICYmXG5cdFx0bm9ybWFsaXplZFByb3BzLm11bHRpcGxlICYmXG5cdFx0QXJyYXkuaXNBcnJheShub3JtYWxpemVkUHJvcHMudmFsdWUpXG5cdCkge1xuXHRcdC8vIGZvckVhY2goKSBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQsIHdoaWNoIHdlIGFidXNlIGhlcmUgdG8gdW5zZXQgdGhlIHZhbHVlIHByb3AuXG5cdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcblx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHRWYWx1ZSBpbiBzZWxlY3QgdGFnXG5cdGlmICh0eXBlID09ICdzZWxlY3QnICYmIG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGQucHJvcHMuc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgPT0gY2hpbGQucHJvcHMudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJvcHMuY2xhc3MgJiYgIXByb3BzLmNsYXNzTmFtZSkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IHByb3BzLmNsYXNzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcblx0XHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRcdCdjbGFzc05hbWUnLFxuXHRcdFx0Y2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgJiYgIXByb3BzLmNsYXNzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzcyAmJiBwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBub3JtYWxpemVkUHJvcHMuY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXHR9XG5cblx0dm5vZGUucHJvcHMgPSBub3JtYWxpemVkUHJvcHM7XG59XG5cbmxldCBvbGRWTm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0Ly8gb25seSBub3JtYWxpemUgcHJvcHMgb24gRWxlbWVudCBub2Rlc1xuXHRpZiAodHlwZW9mIHZub2RlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aGFuZGxlRG9tVk5vZGUodm5vZGUpO1xuXHR9XG5cblx0dm5vZGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cblx0aWYgKG9sZFZOb2RlSG9vaykgb2xkVk5vZGVIb29rKHZub2RlKTtcbn07XG5cbi8vIE9ubHkgbmVlZGVkIGZvciByZWFjdC1yZWxheVxubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5jb25zdCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5vcHRpb25zLl9yZW5kZXIgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKG9sZEJlZm9yZVJlbmRlcikge1xuXHRcdG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cdH1cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG59O1xuXG5jb25zdCBvbGREaWZmZWQgPSBvcHRpb25zLmRpZmZlZDtcbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGREaWZmZWQpIHtcblx0XHRvbGREaWZmZWQodm5vZGUpO1xuXHR9XG5cblx0Y29uc3QgcHJvcHMgPSB2bm9kZS5wcm9wcztcblx0Y29uc3QgZG9tID0gdm5vZGUuX2RvbTtcblxuXHRpZiAoXG5cdFx0ZG9tICE9IG51bGwgJiZcblx0XHR2bm9kZS50eXBlID09PSAndGV4dGFyZWEnICYmXG5cdFx0J3ZhbHVlJyBpbiBwcm9wcyAmJlxuXHRcdHByb3BzLnZhbHVlICE9PSBkb20udmFsdWVcblx0KSB7XG5cdFx0ZG9tLnZhbHVlID0gcHJvcHMudmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMudmFsdWU7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRoaXMgaXMgYSB2ZXJ5IHZlcnkgcHJpdmF0ZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgUmVhY3QgaXRcbi8vIGlzIHVzZWQgdG8gc29ydC1vZiBkbyBydW50aW1lIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuZXhwb3J0IGNvbnN0IF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0ge1xuXHRSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiB7XG5cdFx0Y3VycmVudDoge1xuXHRcdFx0cmVhZENvbnRleHQoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudENvbXBvbmVudC5fZ2xvYmFsQ29udGV4dFtjb250ZXh0Ll9pZF0ucHJvcHMudmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0dXNlQ2FsbGJhY2ssXG5cdFx0XHR1c2VDb250ZXh0LFxuXHRcdFx0dXNlRGVidWdWYWx1ZSxcblx0XHRcdHVzZURlZmVycmVkVmFsdWUsXG5cdFx0XHR1c2VFZmZlY3QsXG5cdFx0XHR1c2VJZCxcblx0XHRcdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdFx0XHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdFx0XHR1c2VMYXlvdXRFZmZlY3QsXG5cdFx0XHR1c2VNZW1vLFxuXHRcdFx0Ly8gdXNlTXV0YWJsZVNvdXJjZSwgLy8gZXhwZXJpbWVudGFsLW9ubHkgYW5kIHJlcGxhY2VkIGJ5IHVTRVMsIGxpa2VseSBub3Qgd29ydGggc3VwcG9ydGluZ1xuXHRcdFx0dXNlUmVkdWNlcixcblx0XHRcdHVzZVJlZixcblx0XHRcdHVzZVN0YXRlLFxuXHRcdFx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdFx0XHR1c2VUcmFuc2l0aW9uXG5cdFx0fVxuXHR9XG59O1xuIiwgImltcG9ydCB7XG5cdGNyZWF0ZUVsZW1lbnQsXG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsXG5cdGNyZWF0ZVJlZixcblx0Q29tcG9uZW50LFxuXHRjcmVhdGVDb250ZXh0LFxuXHRGcmFnbWVudFxufSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlUmVmLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VNZW1vLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZVxufSBmcm9tICdwcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJy4vUHVyZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi9tZW1vJztcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICcuL2ZvcndhcmRSZWYnO1xuaW1wb3J0IHsgQ2hpbGRyZW4gfSBmcm9tICcuL0NoaWxkcmVuJztcbmltcG9ydCB7IFN1c3BlbnNlLCBsYXp5IH0gZnJvbSAnLi9zdXNwZW5zZSc7XG5pbXBvcnQgeyBTdXNwZW5zZUxpc3QgfSBmcm9tICcuL3N1c3BlbnNlLWxpc3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAnLi9wb3J0YWxzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG5cdGh5ZHJhdGUsXG5cdHJlbmRlcixcblx0UkVBQ1RfRUxFTUVOVF9UWVBFLFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufSBmcm9tICcuL3JlbmRlcic7XG5cbmNvbnN0IHZlcnNpb24gPSAnMTcuMC4yJzsgLy8gdHJpY2sgbGlicmFyaWVzIHRvIHRoaW5rIHdlIGFyZSByZWFjdFxuXG4vKipcbiAqIExlZ2FjeSB2ZXJzaW9uIG9mIGNyZWF0ZUVsZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5KHR5cGUpIHtcblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSB2YWxpZCAocClyZWFjdCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gISFlbGVtZW50ICYmIGVsZW1lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBGcmFnbWVudCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGcmFnbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50LnR5cGUgPT09IEZyYWdtZW50O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBhIE1lbW8gbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTWVtbyhlbGVtZW50KSB7XG5cdHJldHVybiAoXG5cdFx0ISFlbGVtZW50ICYmXG5cdFx0ISFlbGVtZW50LmRpc3BsYXlOYW1lICYmXG5cdFx0KHR5cGVvZiBlbGVtZW50LmRpc3BsYXlOYW1lID09PSAnc3RyaW5nJyB8fFxuXHRcdFx0ZWxlbWVudC5kaXNwbGF5TmFtZSBpbnN0YW5jZW9mIFN0cmluZykgJiZcblx0XHRlbGVtZW50LmRpc3BsYXlOYW1lLnN0YXJ0c1dpdGgoJ01lbW8oJylcblx0KTtcbn1cblxuLyoqXG4gKiBXcmFwIGBjbG9uZUVsZW1lbnRgIHRvIGFib3J0IGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBlbGVtZW50IGFuZCBhcHBseVxuICogYWxsIHZub2RlIG5vcm1hbGl6YXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gZWxlbWVudCBUaGUgdm5vZGUgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBPcHRpb25hbCBjb21wb25lbnQgY2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQpIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdHJldHVybiBwcmVhY3RDbG9uZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjb21wb25lbnQgdHJlZSBmcm9tIHRoZSBET00sIGluY2x1ZGluZyBzdGF0ZSBhbmQgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG5cdGlmIChjb250YWluZXIuX2NoaWxkcmVuKSB7XG5cdFx0cHJlYWN0UmVuZGVyKG51bGwsIGNvbnRhaW5lcik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWF0Y2hpbmcgRE9NIG5vZGUgZm9yIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudCB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudCkge1xuXHRyZXR1cm4gKFxuXHRcdChjb21wb25lbnQgJiZcblx0XHRcdChjb21wb25lbnQuYmFzZSB8fCAoY29tcG9uZW50Lm5vZGVUeXBlID09PSAxICYmIGNvbXBvbmVudCkpKSB8fFxuXHRcdG51bGxcblx0KTtcbn1cblxuLyoqXG4gKiBEZXByZWNhdGVkIHdheSB0byBjb250cm9sIGJhdGNoZWQgcmVuZGVyaW5nIGluc2lkZSB0aGUgcmVjb25jaWxlciwgYnV0IHdlXG4gKiBhbHJlYWR5IHNjaGVkdWxlIGluIGJhdGNoZXMgaW5zaWRlIG91ciByZW5kZXJpbmcgY29kZVxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IHZvaWR9IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHVwZGF0ZWRcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmNvbnN0IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gKGNhbGxiYWNrLCBhcmcpID0+IGNhbGxiYWNrKGFyZyk7XG5cbi8qKlxuICogSW4gUmVhY3QsIGBmbHVzaFN5bmNgIGZsdXNoZXMgdGhlIGVudGlyZSB0cmVlIGFuZCBmb3JjZXMgYSByZXJlbmRlci4gSXQnc1xuICogaW1wbG1lbnRlZCBoZXJlIGFzIGEgbm8tb3AuXG4gKiBAdGVtcGxhdGUgQXJnXG4gKiBAdGVtcGxhdGUgUmVzdWx0XG4gKiBAcGFyYW0geyhhcmc6IEFyZykgPT4gUmVzdWx0fSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBmbHVzaFxuICogQHBhcmFtIHtBcmd9IFthcmddIE9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGZsdXNoU3luYyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIFN0cmljdCBNb2RlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBQcmVhY3QsIHNvIHdlIHByb3ZpZGUgYSBzdGFuZC1pbiBmb3IgaXRcbiAqIHRoYXQganVzdCByZW5kZXJzIGl0cyBjaGlsZHJlbiB3aXRob3V0IGltcG9zaW5nIGFueSByZXN0cmljdGlvbnMuXG4gKi9cbmNvbnN0IFN0cmljdE1vZGUgPSBGcmFnbWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYikge1xuXHRjYigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZSh2YWwpIHtcblx0cmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG5cdHJldHVybiBbZmFsc2UsIHN0YXJ0VHJhbnNpdGlvbl07XG59XG5cbi8vIFRPRE86IGluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGEgVk5vZGUgaXMgZGlmZmVkIGFzIHdlIHdhbnQgdG8gaW5zZXJ0XG4vLyBzdHlsZXMvLi4uIGJlZm9yZSBpdCBhdHRhY2hlc1xuZXhwb3J0IGNvbnN0IHVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcblxuLy8gY29tcGF0IHRvIHJlYWN0LWlzXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5cbi8qKlxuICogVGhpcyBpcyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc3JjL3VzZVN5bmNFeHRlcm5hbFN0b3JlU2hpbUNsaWVudC5qcyNMODRcbiAqIG9uIGEgaGlnaCBsZXZlbCB0aGlzIGN1dHMgb3V0IHRoZSB3YXJuaW5ncywgLi4uIGFuZCBhdHRlbXB0cyBhIHNtYWxsZXIgaW1wbGVtZW50YXRpb25cbiAqIEB0eXBlZGVmIHt7IF92YWx1ZTogYW55OyBfZ2V0U25hcHNob3Q6ICgpID0+IGFueSB9fSBTdG9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuXHRjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIHt7IF9pbnN0YW5jZTogU3RvcmUgfX0gU3RvcmVSZWZcblx0ICogQHR5cGUge1tTdG9yZVJlZiwgKHN0b3JlOiBTdG9yZVJlZikgPT4gdm9pZF19XG5cdCAqL1xuXHRjb25zdCBbeyBfaW5zdGFuY2UgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuXHRcdF9pbnN0YW5jZTogeyBfdmFsdWU6IHZhbHVlLCBfZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH1cblx0fSk7XG5cblx0dXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcblx0XHRfaW5zdGFuY2UuX3ZhbHVlID0gdmFsdWU7XG5cdFx0X2luc3RhbmNlLl9nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuXG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblx0fSwgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgW3N1YnNjcmliZV0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEB0eXBlIHsoaW5zdDogU3RvcmUpID0+IGJvb2xlYW59ICovXG5mdW5jdGlvbiBkaWRTbmFwc2hvdENoYW5nZShpbnN0KSB7XG5cdGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5fZ2V0U25hcHNob3Q7XG5cdGNvbnN0IHByZXZWYWx1ZSA9IGluc3QuX3ZhbHVlO1xuXHR0cnkge1xuXHRcdGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG5cdFx0cmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ICogZnJvbSAncHJlYWN0L2hvb2tzJztcbmV4cG9ydCB7XG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2Vcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuXG4vLyBSZWFjdCBjb3BpZXMgdGhlIG5hbWVkIGV4cG9ydHMgdG8gdGhlIGRlZmF1bHQgb25lLlxuZXhwb3J0IGRlZmF1bHQge1xuXHR1c2VTdGF0ZSxcblx0dXNlSWQsXG5cdHVzZVJlZHVjZXIsXG5cdHVzZUVmZmVjdCxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVRyYW5zaXRpb24sXG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRzdGFydFRyYW5zaXRpb24sXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWUsXG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNFbGVtZW50LFxuXHRpc0ZyYWdtZW50LFxuXHRpc01lbW8sXG5cdGZpbmRET01Ob2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdG1lbW8sXG5cdGZvcndhcmRSZWYsXG5cdGZsdXNoU3luYyxcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuIiwgImNvbnN0IEVOQ09ERURfRU5USVRJRVMgPSAvW1wiJjxdLztcblxuLyoqIEBwYXJhbSB7c3RyaW5nfSBzdHIgKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFbnRpdGllcyhzdHIpIHtcblx0Ly8gU2tpcCBhbGwgd29yayBmb3Igc3RyaW5ncyB3aXRoIG5vIGVudGl0aWVzIG5lZWRpbmcgZW5jb2Rpbmc6XG5cdGlmIChzdHIubGVuZ3RoID09PSAwIHx8IEVOQ09ERURfRU5USVRJRVMudGVzdChzdHIpID09PSBmYWxzZSkgcmV0dXJuIHN0cjtcblxuXHRsZXQgbGFzdCA9IDAsXG5cdFx0aSA9IDAsXG5cdFx0b3V0ID0gJycsXG5cdFx0Y2ggPSAnJztcblxuXHQvLyBTZWVrIGZvcndhcmQgaW4gc3RyIHVudGlsIHRoZSBuZXh0IGVudGl0eSBjaGFyOlxuXHRmb3IgKDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaSkpIHtcblx0XHRcdGNhc2UgMzQ6XG5cdFx0XHRcdGNoID0gJyZxdW90Oyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0Y2ggPSAnJmFtcDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgNjA6XG5cdFx0XHRcdGNoID0gJyZsdDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBBcHBlbmQgc2tpcHBlZC9idWZmZXJlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZW5jb2RlZCBlbnRpdHk6XG5cdFx0aWYgKGkgIT09IGxhc3QpIG91dCArPSBzdHIuc2xpY2UobGFzdCwgaSk7XG5cdFx0b3V0ICs9IGNoO1xuXHRcdC8vIFN0YXJ0IHRoZSBuZXh0IHNlZWsvYnVmZmVyIGFmdGVyIHRoZSBlbnRpdHkncyBvZmZzZXQ6XG5cdFx0bGFzdCA9IGkgKyAxO1xuXHR9XG5cdGlmIChpICE9PSBsYXN0KSBvdXQgKz0gc3RyLnNsaWNlKGxhc3QsIGkpO1xuXHRyZXR1cm4gb3V0O1xufVxuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElTX05PTl9ESU1FTlNJT05BTCB9IGZyb20gJy4uLy4uL3NyYy9jb25zdGFudHMnO1xuXG5sZXQgdm5vZGVJZCA9IDA7XG5cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIFRoaXMgZmlsZSBleHBvcnRzIHZhcmlvdXMgbWV0aG9kcyB0aGF0IGltcGxlbWVudCBCYWJlbCdzIFwiYXV0b21hdGljXCIgSlNYIHJ1bnRpbWUgQVBJOlxuICogLSBqc3godHlwZSwgcHJvcHMsIGtleSlcbiAqIC0ganN4cyh0eXBlLCBwcm9wcywga2V5KVxuICogLSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgX19zb3VyY2UsIF9fc2VsZilcbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgY3JlYXRlVk5vZGUgaGVyZSBpcyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuICogQmVuY2htYXJrczogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81ZjZiNTRhMGI0NjMyMTAwYTdkY2QyYjNcbiAqL1xuXG4vKipcbiAqIEpTWC5FbGVtZW50IGZhY3RvcnkgdXNlZCBieSBCYWJlbCdzIHtydW50aW1lOlwiYXV0b21hdGljXCJ9IEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Vk5vZGVbJ3R5cGUnXX0gdHlwZVxuICogQHBhcmFtIHtWTm9kZVsncHJvcHMnXX0gcHJvcHNcbiAqIEBwYXJhbSB7Vk5vZGVbJ2tleSddfSBba2V5XVxuICogQHBhcmFtIHt1bmtub3dufSBbaXNTdGF0aWNDaGlsZHJlbl1cbiAqIEBwYXJhbSB7dW5rbm93bn0gW19fc291cmNlXVxuICogQHBhcmFtIHt1bmtub3dufSBbX19zZWxmXVxuICovXG5mdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBfX3NvdXJjZSwgX19zZWxmKSB7XG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cdC8vIFdlJ2xsIHdhbnQgdG8gcHJlc2VydmUgYHJlZmAgaW4gcHJvcHMgdG8gZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3Jcblx0Ly8gZm9yd2FyZFJlZiBjb21wb25lbnRzIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGF0IHNob3VsZCBoYXBwZW4gdmlhXG5cdC8vIGEgc2VwYXJhdGUgUFIuXG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBwcm9wcyxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRpZiAoJ3JlZicgaW4gbm9ybWFsaXplZFByb3BzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzID0ge307XG5cdFx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0XHRpZiAoaSA9PSAncmVmJykge1xuXHRcdFx0XHRyZWYgPSBwcm9wc1tpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHByb3BzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBAdHlwZSB7Vk5vZGUgJiB7IF9fc291cmNlOiBhbnk7IF9fc2VsZjogYW55IH19ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHM6IG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogLS12bm9kZUlkLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwLFxuXHRcdF9fc291cmNlLFxuXHRcdF9fc2VsZlxuXHR9O1xuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wcy5cblx0Ly8gTm90ZTogYHR5cGVgIGlzIG9mdGVuIGEgU3RyaW5nLCBhbmQgY2FuIGJlIGB1bmRlZmluZWRgIGluIGRldmVsb3BtZW50LlxuXHRpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgKHJlZiA9IHR5cGUuZGVmYXVsdFByb3BzKSkge1xuXHRcdGZvciAoaSBpbiByZWYpXG5cdFx0XHRpZiAodHlwZW9mIG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcmVmW2ldO1xuXHRcdFx0fVxuXHR9XG5cblx0aWYgKG9wdGlvbnMudm5vZGUpIG9wdGlvbnMudm5vZGUodm5vZGUpO1xuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcGxhdGUgdm5vZGUuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGV4cGVjdGVkIHRvIGJlXG4gKiB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7c3RyaW5nW119IHRlbXBsYXRlc1xuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nIHwgbnVsbCB8IFZOb2RlPn0gZXhwcnNcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZnVuY3Rpb24ganN4VGVtcGxhdGUodGVtcGxhdGVzLCAuLi5leHBycykge1xuXHRjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50LCB7IHRwbDogdGVtcGxhdGVzLCBleHBycyB9KTtcblx0Ly8gQnlwYXNzIHJlbmRlciB0byBzdHJpbmcgdG9wIGxldmVsIEZyYWdtZW50IG9wdGltaXphdGlvblxuXHR2bm9kZS5rZXkgPSB2bm9kZS5fdm5vZGU7XG5cdHJldHVybiB2bm9kZTtcbn1cblxuY29uc3QgSlNfVE9fQ1NTID0ge307XG5jb25zdCBDU1NfUkVHRVggPSAvW0EtWl0vZztcblxuLyoqXG4gKiBTZXJpYWxpemUgYW4gSFRNTCBhdHRyaWJ1dGUgdG8gYSBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMgbm90XG4gKiBleHBlY3RlZCB0byBiZSB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlXG4gKiBKU1ggdHJhbnNmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24ganN4QXR0cihuYW1lLCB2YWx1ZSkge1xuXHRpZiAob3B0aW9ucy5hdHRyKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3B0aW9ucy5hdHRyKG5hbWUsIHZhbHVlKTtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRpZiAobmFtZSA9PT0gJ3JlZicgfHwgbmFtZSA9PT0gJ2tleScpIHJldHVybiAnJztcblx0aWYgKG5hbWUgPT09ICdzdHlsZScgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRmb3IgKGxldCBwcm9wIGluIHZhbHVlKSB7XG5cdFx0XHRsZXQgdmFsID0gdmFsdWVbcHJvcF07XG5cdFx0XHRpZiAodmFsICE9IG51bGwgJiYgdmFsICE9PSAnJykge1xuXHRcdFx0XHRjb25zdCBuYW1lID1cblx0XHRcdFx0XHRwcm9wWzBdID09ICctJ1xuXHRcdFx0XHRcdFx0PyBwcm9wXG5cdFx0XHRcdFx0XHQ6IEpTX1RPX0NTU1twcm9wXSB8fFxuXHRcdFx0XHRcdFx0ICAoSlNfVE9fQ1NTW3Byb3BdID0gcHJvcC5yZXBsYWNlKENTU19SRUdFWCwgJy0kJicpLnRvTG93ZXJDYXNlKCkpO1xuXG5cdFx0XHRcdGxldCBzdWZmaXggPSAnOyc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0XHRcdC8vIEV4Y2x1ZGUgY3VzdG9tLWF0dHJpYnV0ZXNcblx0XHRcdFx0XHQhbmFtZS5zdGFydHNXaXRoKCctLScpICYmXG5cdFx0XHRcdFx0IUlTX05PTl9ESU1FTlNJT05BTC50ZXN0KG5hbWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN1ZmZpeCA9ICdweDsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0ciA9IHN0ciArIG5hbWUgKyAnOicgKyB2YWwgKyBzdWZmaXg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lICsgJz1cIicgKyBzdHIgKyAnXCInO1xuXHR9XG5cblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR2YWx1ZSA9PT0gZmFsc2UgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG5cdCkge1xuXHRcdHJldHVybiAnJztcblx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWU7XG5cblx0cmV0dXJuIG5hbWUgKyAnPVwiJyArIGVuY29kZUVudGl0aWVzKHZhbHVlKSArICdcIic7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgZHluYW1pYyBjaGlsZCBwYXNzZWQgdG8gYGpzeFRlbXBsYXRlYC4gVGhpcyBmdW5jdGlvblxuICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhyb3VnaCBhXG4gKiBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsIHwgVk5vZGUgfCBBcnJheTxzdHJpbmcgfCBudWxsIHwgVk5vZGU+fVxuICovXG5mdW5jdGlvbiBqc3hFc2NhcGUodmFsdWUpIHtcblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gQ2hlY2sgZm9yIFZOb2RlXG5cdFx0aWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YWx1ZVtpXSA9IGpzeEVzY2FwZSh2YWx1ZVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVuY29kZUVudGl0aWVzKCcnICsgdmFsdWUpO1xufVxuXG5leHBvcnQge1xuXHRjcmVhdGVWTm9kZSBhcyBqc3gsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeHMsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeERFVixcblx0RnJhZ21lbnQsXG5cdC8vIHByZWNvbXBpbGVkIEpTWCB0cmFuc2Zvcm1cblx0anN4VGVtcGxhdGUsXG5cdGpzeEF0dHIsXG5cdGpzeEVzY2FwZVxufTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQge1xuICAgIEFQUF9DT05URVhULFxuICAgIENPTVBPTkVOVF9DT05URVhULFxuICAgIENVUlJFTlRfRklMRV9DT05URVhULFxuICAgIERBVEFDT1JFX0NPTlRFWFQsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIE1hcmtkb3duLFxufSBmcm9tIFwiLi4vLi4vdWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUsIGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG5pbXBvcnQgXCIuL2VtYmVkLmNzc1wiO1xuXG4vKiogUmVuZGVycyBhbiBlbWJlZCBpbiB0aGUgY2Fub25pY2FsIE9ic2lkaWFuIHN0eWxlLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWJlZCh7XG4gICAgbGluayxcbiAgICBpbmxpbmUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxufToge1xuICAgIC8qKiBUaGUgbGluayB0aGF0IGlzIGJlaW5nIGVtYmVkZGVkLiAqL1xuICAgIGxpbms6IExpbms7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGVtYmVkIHNob3VsZCBiZSBzaG93biBpbmxpbmUgd2l0aCBsZXNzIHBhZGRpbmcuICovXG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIC8qKiBUaGUgcGF0aCB3aGljaCB0aGUgbGluayB3aWxsIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgY3VycmVudEZpbGUgPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gbWF5YmVTb3VyY2VQYXRoID8/IGN1cnJlbnRGaWxlID8/IFwiXCI7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBsaW5rZWRGaWxlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCBzb3VyY2VQYXRoKSxcbiAgICAgICAgW2xpbmsucGF0aCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWxpbmtlZEZpbGUpIHJldHVybjtcblxuICAgICAgICBjb250YWluZXIuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSBhcHAuZW1iZWRSZWdpc3RyeS5nZXRFbWJlZENyZWF0b3IobGlua2VkRmlsZSk7XG4gICAgICAgIGxldCBlbWJlZENvbXBvbmVudCA9IG5ldyBjcmVhdG9yKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmt0ZXh0OiBsaW5rLnBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICAgICAgICBzaG93SW5saW5lOiBpbmxpbmUsXG4gICAgICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsOiBjb250YWluZXIuY3VycmVudCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rZWRGaWxlLFxuICAgICAgICAgICAgbGluay5zdWJwYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgY29tcG9uZW50LmFkZENoaWxkKGVtYmVkQ29tcG9uZW50KTtcbiAgICAgICAgZW1iZWRDb21wb25lbnQubG9hZEZpbGUobGlua2VkRmlsZSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNvbXBvbmVudC5yZW1vdmVDaGlsZChlbWJlZENvbXBvbmVudCk7XG4gICAgfSwgW2NvbnRhaW5lci5jdXJyZW50LCBsaW5rZWRGaWxlLCBsaW5rLnN1YnBhdGhdKTtcblxuICAgIGlmICghbGlua2VkRmlsZSkge1xuICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtgQ291bGQgbm90IGZpbmQgYSBwYWdlIGF0IGxpbmtlZCBsb2NhdGlvbjogJHtsaW5rLnBhdGh9YH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGMtZW1iZWRcIiByZWY9e2NvbnRhaW5lcn0+PC9kaXY+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBlbWJlZCBvZiBhbiBhcmJpdHJhcnkgc3BhbiBvZiBsaW5lcyBpbiBhIE1hcmtkb3duIGZpbGUuIE9wZXJhdGVzIGJ5IGFzeW5jaHJvbm91c2x5IGxvYWRpbmcgdGhlIGZpbGUgYW5kIHB1bGxpbmdcbiAqIG91dCB0aGUgZ2l2ZW4gW3N0YXJ0LCBlbmQpIGxpbmUgc3Bhbi5cbiAqXG4gKiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGZpbGUgb24gZGlzayB0byBiZSBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgd2hlbiB5b3UgZmlyc3QgbG9hZGVkIHRoZSBbc3RhcnQsIGVuZCkgbGluZSBzcGFuXG4gKiAtIGdlbmVyYWxseSwgZGF0YWNvcmUgd2lsbCBhc3luY2hyb25vdXNseSByZWxvYWQgdGhlc2UgZmlsZXMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGZpeCBpdCdzIGluZGV4LCBidXQgeW91IG1heSBoYXZlIHNvbWVcbiAqIHN0cmFuZ2UgYXJ0aWZhY3RzIG90aGVyd2lzZS5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gTGluZVNwYW5FbWJlZCh7XG4gICAgcGF0aCxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhwbGFpbixcbiAgICBzaG93RXhwbGFpbiA9IHRydWUsXG59OiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgZXhwbGFpbj86IHN0cmluZztcbiAgICBzaG93RXhwbGFpbj86IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgY29udGVudCA9IHVzZUxpbmVTcGFuKHBhdGgsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGV4cGxhaW5lciA9IGV4cGxhaW4gPz8gYCR7Z2V0RmlsZVRpdGxlKHBhdGgpfSAoJHtzdGFydH0gLSAke2VuZH0pYDtcblxuICAgIC8vIFRvIGFsbG93IGZvciB0aGUgZXhwbGFpbmVyIHRvIGJlIGNsaWNrZWQgb24gdG8gbmF2aWdhdGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbnN0IHdvcmtzcGFjZSA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpPy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgb25FeHBsYWluQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB3b3Jrc3BhY2U/Lm9wZW5MaW5rVGV4dChwYXRoLCBwYXRoLCBldmVudC5zaGlmdEtleSksXG4gICAgICAgIFtwYXRoXVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGNvbnRlbnQudHlwZSkge1xuICAgICAgICBjYXNlIFwibG9hZGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YFJlYWRpbmcgJHtwYXRofSAoJHtzdGFydH0gLSAke2VuZH0pYH0gLz47XG4gICAgICAgIGNhc2UgXCJmaWxlLW5vdC1mb3VuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YENvdWxkIG5vdCBmaW5kIGEgZmlsZSBhdCBwYXRoOiAke2NvbnRlbnQucGF0aH1gfSAvPjtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtjb250ZW50Lm1lc3NhZ2V9IC8+O1xuICAgICAgICBjYXNlIFwibG9hZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtc3Bhbi1lbWJlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd0V4cGxhaW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZW1iZWQtc291cmNlXCIgb25DbGljaz17b25FeHBsYWluQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBsYWluZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXtjb250ZW50LmNvbnRlbnR9IGlubGluZT17ZmFsc2V9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFN0YXRlIHRyYWNraW5nIGZvciBsb2FkaW5nIGEgbGluZSBzcGFuIGFzeW5jaHJvbm91c2x5LiAqL1xuZXhwb3J0IHR5cGUgTGluZVNwYW5Db250ZW50ID1cbiAgICB8IHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgIHwgeyB0eXBlOiBcImZpbGUtbm90LWZvdW5kXCI7IHBhdGg6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJsb2FkZWRcIjsgY29udGVudDogc3RyaW5nIH07XG5cbi8qKiBVdGlsaXR5IGhvb2sgd2hpY2ggbG9hZHMgcGF0aFtzdGFydC4uZW5kKSBhcyBsb25nIGFzIHRoZSB0YXJnZXQgZmlsZSBleGlzdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5lU3BhbihwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogTGluZVNwYW5Db250ZW50IHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkYXRhY29yZSA9IHVzZUNvbnRleHQoREFUQUNPUkVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIHVwZGF0ZV0gPSB1c2VSZWR1Y2VyPExpbmVTcGFuQ29udGVudCwgTGluZVNwYW5Db250ZW50PihcbiAgICAgICAgKHN0YXRlLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFuIGVycm9yIHVwZGF0ZSB0aGF0IHdvdWxkIG92ZXJyaWRlIGEgdmFsaWQgY3VycmVudCBzdGF0ZTsgb3RoZXJ3aXNlLCB1cGRhdGUgdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChzdGF0ZS50eXBlID09IFwibG9hZGVkXCIgJiYgZXZlbnQudHlwZSAhPT0gXCJsb2FkZWRcIikgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBjdXJyZW50IHBhdGggdG8gc2VlIGlmIGl0IHBvaW50cyB0byBhIHZhbGlkIGZpbGUuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlKHsgdHlwZTogXCJmaWxlLW5vdC1mb3VuZFwiLCBwYXRoOiBwYXRoIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGZpbGUgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgIGRhdGFjb3JlXG4gICAgICAgICAgICAucmVhZChmaWxlKVxuICAgICAgICAgICAgLnRoZW4oKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoeyB0eXBlOiBcImxvYWRlZFwiLCBjb250ZW50OiBsaW5lUmFuZ2UoY29udGVudCwgc3RhcnQsIGVuZCkgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh7IHR5cGU6IFwiZXJyb3JcIiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0sIFtwYXRoLCBzdGFydCwgZW5kXSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG59XG4iLCAiaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBTaW1wbGVFcnJvckJvdW5kYXJ5LCBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgRGF0YWNvcmVDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJDaGlsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBoLCByZW5kZXIsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVubW91bnRDb21wb25lbnRBdE5vZGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExvYWRpbmdCb3VuZGFyeSwgU2NyaXB0Q29udGFpbmVyIH0gZnJvbSBcIi4vbG9hZGluZy1ib3VuZGFyeVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcblxuLyoqXG4gKiBSZW5kZXJzIGEgc2NyaXB0IGJ5IGV4ZWN1dGluZyBpdCBhbmQgaGFuZGluZyBpdCB0aGUgYXBwcm9wcmlhdGUgUmVhY3QgY29udGV4dCB0byBleGVjdXRlXG4gKiBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVKU1JlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHJpdmF0ZSBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFwaTogRGF0YWNvcmVMb2NhbEFwaSxcbiAgICAgICAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBzY3JpcHQ6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZVxuICAgICkge1xuICAgICAgICBzdXBlcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgc2NyaXB0IHRvIHByb2R1Y2UgZWl0aGVyIGEgcmVuZGVyYWJsZSBKU1ggb2JqZWN0IG9yIGEgZnVuY3Rpb24uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcmltaXRpdmVTY3JpcHQgPSB0cmFuc3BpbGUodGhpcy5zY3JpcHQsIHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRXZhbEluQ29udGV4dChwcmltaXRpdmVTY3JpcHQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGM6IHRoaXMuYXBpLFxuICAgICAgICAgICAgICAgICAgICBoOiBoLFxuICAgICAgICAgICAgICAgICAgICBGcmFnbWVudDogRnJhZ21lbnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgPERhdGFjb3JlQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIGFwcD17dGhpcy5hcGkuYXBwfVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e3RoaXN9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFjb3JlPXt0aGlzLmFwaS5jb3JlfVxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5hcGkuY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17dGhpcy5wYXRofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaW1wbGVFcnJvckJvdW5kYXJ5IG1lc3NhZ2U9XCJUaGUgZGF0YWNvcmUgc2NyaXB0IGZhaWxlZCB0byBleGVjdXRlLlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuYXBpLmNvcmV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NyaXB0Q29udGFpbmVyIGV4ZWN1dG9yPXtyZW5kZXJlcn0gc291cmNlUGF0aD17dGhpcy5wYXRofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTG9hZGluZ0JvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TaW1wbGVFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8L0NVUlJFTlRfRklMRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIkRhdGFjb3JlIGZhaWxlZCB0byByZW5kZXIgdGhlIGNvZGUgYmxvY2suXCIgZXJyb3I9e1wiXCIgKyBleH0gLz4sXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKiogQSB0cml2aWFsIHdyYXBwZXIgd2hpY2ggYWxsb3dzIGEgcmVhY3QgY29tcG9uZW50IHRvIGxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGBNYXJrZG93blJlbmRlckNoaWxkYC4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdFJlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgYXBwOiBBcHAsXG4gICAgICAgIHB1YmxpYyBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgICAgIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBwdWJsaWMgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogVk5vZGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25sb2FkKCk6IHZvaWQge1xuICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICA8RGF0YWNvcmVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICAgICAgICBhcHA9e3RoaXMuYXBwfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD17dGhpc31cbiAgICAgICAgICAgICAgICBkYXRhY29yZT17dGhpcy5kYXRhY29yZX1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5kYXRhY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q1VSUkVOVF9GSUxFX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc291cmNlUGF0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuZGF0YWNvcmV9Pnt0aGlzLmVsZW1lbnR9PC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9DVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5jb250YWluZXIpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgdmFyIENvbnRleHR1YWxLZXl3b3JkOyAoZnVuY3Rpb24gKENvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGNvbnN0IE5PTkUgPSAwOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIk5PTkVcIl0gPSBOT05FXSA9IFwiTk9ORVwiO1xuICBjb25zdCBfYWJzdHJhY3QgPSBOT05FICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWJzdHJhY3RcIl0gPSBfYWJzdHJhY3RdID0gXCJfYWJzdHJhY3RcIjtcbiAgY29uc3QgX2FjY2Vzc29yID0gX2Fic3RyYWN0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWNjZXNzb3JcIl0gPSBfYWNjZXNzb3JdID0gXCJfYWNjZXNzb3JcIjtcbiAgY29uc3QgX2FzID0gX2FjY2Vzc29yICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjtcbiAgY29uc3QgX2Fzc2VydCA9IF9hcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydFwiXSA9IF9hc3NlcnRdID0gXCJfYXNzZXJ0XCI7XG4gIGNvbnN0IF9hc3NlcnRzID0gX2Fzc2VydCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydHNcIl0gPSBfYXNzZXJ0c10gPSBcIl9hc3NlcnRzXCI7XG4gIGNvbnN0IF9hc3luYyA9IF9hc3NlcnRzICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXN5bmNcIl0gPSBfYXN5bmNdID0gXCJfYXN5bmNcIjtcbiAgY29uc3QgX2F3YWl0ID0gX2FzeW5jICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXdhaXRcIl0gPSBfYXdhaXRdID0gXCJfYXdhaXRcIjtcbiAgY29uc3QgX2NoZWNrcyA9IF9hd2FpdCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2NoZWNrc1wiXSA9IF9jaGVja3NdID0gXCJfY2hlY2tzXCI7XG4gIGNvbnN0IF9jb25zdHJ1Y3RvciA9IF9jaGVja3MgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9jb25zdHJ1Y3RvclwiXSA9IF9jb25zdHJ1Y3Rvcl0gPSBcIl9jb25zdHJ1Y3RvclwiO1xuICBjb25zdCBfZGVjbGFyZSA9IF9jb25zdHJ1Y3RvciArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7XG4gIGNvbnN0IF9lbnVtID0gX2RlY2xhcmUgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiO1xuICBjb25zdCBfZXhwb3J0cyA9IF9lbnVtICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZXhwb3J0c1wiXSA9IF9leHBvcnRzXSA9IFwiX2V4cG9ydHNcIjtcbiAgY29uc3QgX2Zyb20gPSBfZXhwb3J0cyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Zyb21cIl0gPSBfZnJvbV0gPSBcIl9mcm9tXCI7XG4gIGNvbnN0IF9nZXQgPSBfZnJvbSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7XG4gIGNvbnN0IF9nbG9iYWwgPSBfZ2V0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZ2xvYmFsXCJdID0gX2dsb2JhbF0gPSBcIl9nbG9iYWxcIjtcbiAgY29uc3QgX2ltcGxlbWVudHMgPSBfZ2xvYmFsICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW1wbGVtZW50c1wiXSA9IF9pbXBsZW1lbnRzXSA9IFwiX2ltcGxlbWVudHNcIjtcbiAgY29uc3QgX2luZmVyID0gX2ltcGxlbWVudHMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9pbmZlclwiXSA9IF9pbmZlcl0gPSBcIl9pbmZlclwiO1xuICBjb25zdCBfaW50ZXJmYWNlID0gX2luZmVyICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW50ZXJmYWNlXCJdID0gX2ludGVyZmFjZV0gPSBcIl9pbnRlcmZhY2VcIjtcbiAgY29uc3QgX2lzID0gX2ludGVyZmFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2lzXCJdID0gX2lzXSA9IFwiX2lzXCI7XG4gIGNvbnN0IF9rZXlvZiA9IF9pcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2tleW9mXCJdID0gX2tleW9mXSA9IFwiX2tleW9mXCI7XG4gIGNvbnN0IF9taXhpbnMgPSBfa2V5b2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9taXhpbnNcIl0gPSBfbWl4aW5zXSA9IFwiX21peGluc1wiO1xuICBjb25zdCBfbW9kdWxlID0gX21peGlucyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX21vZHVsZVwiXSA9IF9tb2R1bGVdID0gXCJfbW9kdWxlXCI7XG4gIGNvbnN0IF9uYW1lc3BhY2UgPSBfbW9kdWxlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfbmFtZXNwYWNlXCJdID0gX25hbWVzcGFjZV0gPSBcIl9uYW1lc3BhY2VcIjtcbiAgY29uc3QgX29mID0gX25hbWVzcGFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX29mXCJdID0gX29mXSA9IFwiX29mXCI7XG4gIGNvbnN0IF9vcGFxdWUgPSBfb2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vcGFxdWVcIl0gPSBfb3BhcXVlXSA9IFwiX29wYXF1ZVwiO1xuICBjb25zdCBfb3V0ID0gX29wYXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX291dFwiXSA9IF9vdXRdID0gXCJfb3V0XCI7XG4gIGNvbnN0IF9vdmVycmlkZSA9IF9vdXQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vdmVycmlkZVwiXSA9IF9vdmVycmlkZV0gPSBcIl9vdmVycmlkZVwiO1xuICBjb25zdCBfcHJpdmF0ZSA9IF9vdmVycmlkZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3ByaXZhdGVcIl0gPSBfcHJpdmF0ZV0gPSBcIl9wcml2YXRlXCI7XG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSBfcHJpdmF0ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3Byb3RlY3RlZFwiXSA9IF9wcm90ZWN0ZWRdID0gXCJfcHJvdGVjdGVkXCI7XG4gIGNvbnN0IF9wcm90byA9IF9wcm90ZWN0ZWQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9wcm90b1wiXSA9IF9wcm90b10gPSBcIl9wcm90b1wiO1xuICBjb25zdCBfcHVibGljID0gX3Byb3RvICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjtcbiAgY29uc3QgX3JlYWRvbmx5ID0gX3B1YmxpYyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3JlYWRvbmx5XCJdID0gX3JlYWRvbmx5XSA9IFwiX3JlYWRvbmx5XCI7XG4gIGNvbnN0IF9yZXF1aXJlID0gX3JlYWRvbmx5ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcmVxdWlyZVwiXSA9IF9yZXF1aXJlXSA9IFwiX3JlcXVpcmVcIjtcbiAgY29uc3QgX3NhdGlzZmllcyA9IF9yZXF1aXJlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc2F0aXNmaWVzXCJdID0gX3NhdGlzZmllc10gPSBcIl9zYXRpc2ZpZXNcIjtcbiAgY29uc3QgX3NldCA9IF9zYXRpc2ZpZXMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiO1xuICBjb25zdCBfc3RhdGljID0gX3NldCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7XG4gIGNvbnN0IF9zeW1ib2wgPSBfc3RhdGljICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc3ltYm9sXCJdID0gX3N5bWJvbF0gPSBcIl9zeW1ib2xcIjtcbiAgY29uc3QgX3R5cGUgPSBfc3ltYm9sICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdHlwZVwiXSA9IF90eXBlXSA9IFwiX3R5cGVcIjtcbiAgY29uc3QgX3VuaXF1ZSA9IF90eXBlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdW5pcXVlXCJdID0gX3VuaXF1ZV0gPSBcIl91bmlxdWVcIjtcbiAgY29uc3QgX3VzaW5nID0gX3VuaXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3VzaW5nXCJdID0gX3VzaW5nXSA9IFwiX3VzaW5nXCI7XG59KShDb250ZXh0dWFsS2V5d29yZCB8fCAoQ29udGV4dHVhbEtleXdvcmQgPSB7fSkpO1xuIiwgIi8vIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdCEgUnVuIFwieWFybiBnZW5lcmF0ZVwiIHRvIHJlLWdlbmVyYXRlIHRoaXMgZmlsZS5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIEVudW0gb2YgYWxsIHRva2VuIHR5cGVzLCB3aXRoIGJpdCBmaWVsZHMgdG8gc2lnbmlmeSBtZWFuaW5nZnVsIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCB2YXIgVG9rZW5UeXBlOyAoZnVuY3Rpb24gKFRva2VuVHlwZSkge1xuICAvLyBQcmVjZWRlbmNlIDAgbWVhbnMgbm90IGFuIG9wZXJhdG9yOyBvdGhlcndpc2UgaXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIgdXAgdG8gMTIuXG4gIGNvbnN0IFBSRUNFREVOQ0VfTUFTSyA9IDB4ZjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIlBSRUNFREVOQ0VfTUFTS1wiXSA9IFBSRUNFREVOQ0VfTUFTS10gPSBcIlBSRUNFREVOQ0VfTUFTS1wiO1xuICBjb25zdCBJU19LRVlXT1JEID0gMSA8PCA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfS0VZV09SRFwiXSA9IElTX0tFWVdPUkRdID0gXCJJU19LRVlXT1JEXCI7XG4gIGNvbnN0IElTX0FTU0lHTiA9IDEgPDwgNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX0FTU0lHTlwiXSA9IElTX0FTU0lHTl0gPSBcIklTX0FTU0lHTlwiO1xuICBjb25zdCBJU19SSUdIVF9BU1NPQ0lBVElWRSA9IDEgPDwgNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1JJR0hUX0FTU09DSUFUSVZFXCJdID0gSVNfUklHSFRfQVNTT0NJQVRJVkVdID0gXCJJU19SSUdIVF9BU1NPQ0lBVElWRVwiO1xuICBjb25zdCBJU19QUkVGSVggPSAxIDw8IDc7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19QUkVGSVhcIl0gPSBJU19QUkVGSVhdID0gXCJJU19QUkVGSVhcIjtcbiAgY29uc3QgSVNfUE9TVEZJWCA9IDEgPDwgODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1BPU1RGSVhcIl0gPSBJU19QT1NURklYXSA9IFwiSVNfUE9TVEZJWFwiO1xuICBjb25zdCBJU19FWFBSRVNTSU9OX1NUQVJUID0gMSA8PCA5OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfRVhQUkVTU0lPTl9TVEFSVFwiXSA9IElTX0VYUFJFU1NJT05fU1RBUlRdID0gXCJJU19FWFBSRVNTSU9OX1NUQVJUXCI7XG5cbiAgY29uc3QgbnVtID0gNTEyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibnVtXCJdID0gbnVtXSA9IFwibnVtXCI7IC8vIG51bSBzdGFydHNFeHByXG4gIGNvbnN0IGJpZ2ludCA9IDE1MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaWdpbnRcIl0gPSBiaWdpbnRdID0gXCJiaWdpbnRcIjsgLy8gYmlnaW50IHN0YXJ0c0V4cHJcbiAgY29uc3QgZGVjaW1hbCA9IDI1NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkZWNpbWFsXCJdID0gZGVjaW1hbF0gPSBcImRlY2ltYWxcIjsgLy8gZGVjaW1hbCBzdGFydHNFeHByXG4gIGNvbnN0IHJlZ2V4cCA9IDM1ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJyZWdleHBcIl0gPSByZWdleHBdID0gXCJyZWdleHBcIjsgLy8gcmVnZXhwIHN0YXJ0c0V4cHJcbiAgY29uc3Qgc3RyaW5nID0gNDYwODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInN0cmluZ1wiXSA9IHN0cmluZ10gPSBcInN0cmluZ1wiOyAvLyBzdHJpbmcgc3RhcnRzRXhwclxuICBjb25zdCBuYW1lID0gNTYzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm5hbWVcIl0gPSBuYW1lXSA9IFwibmFtZVwiOyAvLyBuYW1lIHN0YXJ0c0V4cHJcbiAgY29uc3QgZW9mID0gNjE0NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImVvZlwiXSA9IGVvZl0gPSBcImVvZlwiOyAvLyBlb2ZcbiAgY29uc3QgYnJhY2tldEwgPSA3NjgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2tldExcIl0gPSBicmFja2V0TF0gPSBcImJyYWNrZXRMXCI7IC8vIFsgc3RhcnRzRXhwclxuICBjb25zdCBicmFja2V0UiA9IDgxOTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFja2V0UlwiXSA9IGJyYWNrZXRSXSA9IFwiYnJhY2tldFJcIjsgLy8gXVxuICBjb25zdCBicmFjZUwgPSA5NzI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VMXCJdID0gYnJhY2VMXSA9IFwiYnJhY2VMXCI7IC8vIHsgc3RhcnRzRXhwclxuICBjb25zdCBicmFjZUJhckwgPSAxMDc1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNlQmFyTFwiXSA9IGJyYWNlQmFyTF0gPSBcImJyYWNlQmFyTFwiOyAvLyB7fCBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNlUiA9IDExMjY0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VSXCJdID0gYnJhY2VSXSA9IFwiYnJhY2VSXCI7IC8vIH1cbiAgY29uc3QgYnJhY2VCYXJSID0gMTIyODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZUJhclJcIl0gPSBicmFjZUJhclJdID0gXCJicmFjZUJhclJcIjsgLy8gfH1cbiAgY29uc3QgcGFyZW5MID0gMTM4MjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwYXJlbkxcIl0gPSBwYXJlbkxdID0gXCJwYXJlbkxcIjsgLy8gKCBzdGFydHNFeHByXG4gIGNvbnN0IHBhcmVuUiA9IDE0MzM2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGFyZW5SXCJdID0gcGFyZW5SXSA9IFwicGFyZW5SXCI7IC8vIClcbiAgY29uc3QgY29tbWEgPSAxNTM2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImNvbW1hXCJdID0gY29tbWFdID0gXCJjb21tYVwiOyAvLyAsXG4gIGNvbnN0IHNlbWkgPSAxNjM4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInNlbWlcIl0gPSBzZW1pXSA9IFwic2VtaVwiOyAvLyA7XG4gIGNvbnN0IGNvbG9uID0gMTc0MDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJjb2xvblwiXSA9IGNvbG9uXSA9IFwiY29sb25cIjsgLy8gOlxuICBjb25zdCBkb3VibGVDb2xvbiA9IDE4NDMyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZG91YmxlQ29sb25cIl0gPSBkb3VibGVDb2xvbl0gPSBcImRvdWJsZUNvbG9uXCI7IC8vIDo6XG4gIGNvbnN0IGRvdCA9IDE5NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZG90XCJdID0gZG90XSA9IFwiZG90XCI7IC8vIC5cbiAgY29uc3QgcXVlc3Rpb24gPSAyMDQ4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInF1ZXN0aW9uXCJdID0gcXVlc3Rpb25dID0gXCJxdWVzdGlvblwiOyAvLyA/XG4gIGNvbnN0IHF1ZXN0aW9uRG90ID0gMjE1MDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJxdWVzdGlvbkRvdFwiXSA9IHF1ZXN0aW9uRG90XSA9IFwicXVlc3Rpb25Eb3RcIjsgLy8gPy5cbiAgY29uc3QgYXJyb3cgPSAyMjUyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImFycm93XCJdID0gYXJyb3ddID0gXCJhcnJvd1wiOyAvLyA9PlxuICBjb25zdCB0ZW1wbGF0ZSA9IDIzNTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1widGVtcGxhdGVcIl0gPSB0ZW1wbGF0ZV0gPSBcInRlbXBsYXRlXCI7IC8vIHRlbXBsYXRlXG4gIGNvbnN0IGVsbGlwc2lzID0gMjQ1NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlbGxpcHNpc1wiXSA9IGVsbGlwc2lzXSA9IFwiZWxsaXBzaXNcIjsgLy8gLi4uXG4gIGNvbnN0IGJhY2tRdW90ZSA9IDI1NjAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYmFja1F1b3RlXCJdID0gYmFja1F1b3RlXSA9IFwiYmFja1F1b3RlXCI7IC8vIGBcbiAgY29uc3QgZG9sbGFyQnJhY2VMID0gMjcxMzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb2xsYXJCcmFjZUxcIl0gPSBkb2xsYXJCcmFjZUxdID0gXCJkb2xsYXJCcmFjZUxcIjsgLy8gJHsgc3RhcnRzRXhwclxuICBjb25zdCBhdCA9IDI3NjQ4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYXRcIl0gPSBhdF0gPSBcImF0XCI7IC8vIEBcbiAgY29uc3QgaGFzaCA9IDI5MTg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiaGFzaFwiXSA9IGhhc2hdID0gXCJoYXNoXCI7IC8vICMgc3RhcnRzRXhwclxuICBjb25zdCBlcSA9IDI5NzI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZXFcIl0gPSBlcV0gPSBcImVxXCI7IC8vID0gaXNBc3NpZ25cbiAgY29uc3QgYXNzaWduID0gMzA3NTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJhc3NpZ25cIl0gPSBhc3NpZ25dID0gXCJhc3NpZ25cIjsgLy8gXz0gaXNBc3NpZ25cbiAgY29uc3QgcHJlSW5jRGVjID0gMzI2NDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwcmVJbmNEZWNcIl0gPSBwcmVJbmNEZWNdID0gXCJwcmVJbmNEZWNcIjsgLy8gKysvLS0gcHJlZml4IHBvc3RmaXggc3RhcnRzRXhwclxuICBjb25zdCBwb3N0SW5jRGVjID0gMzM2NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwb3N0SW5jRGVjXCJdID0gcG9zdEluY0RlY10gPSBcInBvc3RJbmNEZWNcIjsgLy8gKysvLS0gcHJlZml4IHBvc3RmaXggc3RhcnRzRXhwclxuICBjb25zdCBiYW5nID0gMzQ0MzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiYW5nXCJdID0gYmFuZ10gPSBcImJhbmdcIjsgLy8gISBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCB0aWxkZSA9IDM1NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1widGlsZGVcIl0gPSB0aWxkZV0gPSBcInRpbGRlXCI7IC8vIH4gcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgcGlwZWxpbmUgPSAzNTg0MTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBpcGVsaW5lXCJdID0gcGlwZWxpbmVdID0gXCJwaXBlbGluZVwiOyAvLyB8PiBwcmVjOjFcbiAgY29uc3QgbnVsbGlzaENvYWxlc2NpbmcgPSAzNjg2NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm51bGxpc2hDb2FsZXNjaW5nXCJdID0gbnVsbGlzaENvYWxlc2NpbmddID0gXCJudWxsaXNoQ29hbGVzY2luZ1wiOyAvLyA/PyBwcmVjOjJcbiAgY29uc3QgbG9naWNhbE9SID0gMzc4OTA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJsb2dpY2FsT1JcIl0gPSBsb2dpY2FsT1JdID0gXCJsb2dpY2FsT1JcIjsgLy8gfHwgcHJlYzoyXG4gIGNvbnN0IGxvZ2ljYWxBTkQgPSAzODkxNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImxvZ2ljYWxBTkRcIl0gPSBsb2dpY2FsQU5EXSA9IFwibG9naWNhbEFORFwiOyAvLyAmJiBwcmVjOjNcbiAgY29uc3QgYml0d2lzZU9SID0gMzk5NDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXR3aXNlT1JcIl0gPSBiaXR3aXNlT1JdID0gXCJiaXR3aXNlT1JcIjsgLy8gfCBwcmVjOjRcbiAgY29uc3QgYml0d2lzZVhPUiA9IDQwOTY1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0d2lzZVhPUlwiXSA9IGJpdHdpc2VYT1JdID0gXCJiaXR3aXNlWE9SXCI7IC8vIF4gcHJlYzo1XG4gIGNvbnN0IGJpdHdpc2VBTkQgPSA0MTk5MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdHdpc2VBTkRcIl0gPSBiaXR3aXNlQU5EXSA9IFwiYml0d2lzZUFORFwiOyAvLyAmIHByZWM6NlxuICBjb25zdCBlcXVhbGl0eSA9IDQzMDE1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZXF1YWxpdHlcIl0gPSBlcXVhbGl0eV0gPSBcImVxdWFsaXR5XCI7IC8vID09LyE9IHByZWM6N1xuICBjb25zdCBsZXNzVGhhbiA9IDQ0MDQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibGVzc1RoYW5cIl0gPSBsZXNzVGhhbl0gPSBcImxlc3NUaGFuXCI7IC8vIDwgcHJlYzo4XG4gIGNvbnN0IGdyZWF0ZXJUaGFuID0gNDUwNjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJncmVhdGVyVGhhblwiXSA9IGdyZWF0ZXJUaGFuXSA9IFwiZ3JlYXRlclRoYW5cIjsgLy8gPiBwcmVjOjhcbiAgY29uc3QgcmVsYXRpb25hbE9yRXF1YWwgPSA0NjA4ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInJlbGF0aW9uYWxPckVxdWFsXCJdID0gcmVsYXRpb25hbE9yRXF1YWxdID0gXCJyZWxhdGlvbmFsT3JFcXVhbFwiOyAvLyA8PS8+PSBwcmVjOjhcbiAgY29uc3QgYml0U2hpZnRMID0gNDcxMTM7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXRTaGlmdExcIl0gPSBiaXRTaGlmdExdID0gXCJiaXRTaGlmdExcIjsgLy8gPDwgcHJlYzo5XG4gIGNvbnN0IGJpdFNoaWZ0UiA9IDQ4MTM3OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0U2hpZnRSXCJdID0gYml0U2hpZnRSXSA9IFwiYml0U2hpZnRSXCI7IC8vID4+Lz4+PiBwcmVjOjlcbiAgY29uc3QgcGx1cyA9IDQ5ODAyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGx1c1wiXSA9IHBsdXNdID0gXCJwbHVzXCI7IC8vICsgcHJlYzoxMCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBtaW51cyA9IDUwODI2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibWludXNcIl0gPSBtaW51c10gPSBcIm1pbnVzXCI7IC8vIC0gcHJlYzoxMCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBtb2R1bG8gPSA1MTcyMzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm1vZHVsb1wiXSA9IG1vZHVsb10gPSBcIm1vZHVsb1wiOyAvLyAlIHByZWM6MTEgc3RhcnRzRXhwclxuICBjb25zdCBzdGFyID0gNTIyMzU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJzdGFyXCJdID0gc3Rhcl0gPSBcInN0YXJcIjsgLy8gKiBwcmVjOjExXG4gIGNvbnN0IHNsYXNoID0gNTMyNTk7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJzbGFzaFwiXSA9IHNsYXNoXSA9IFwic2xhc2hcIjsgLy8gLyBwcmVjOjExXG4gIGNvbnN0IGV4cG9uZW50ID0gNTQzNDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJleHBvbmVudFwiXSA9IGV4cG9uZW50XSA9IFwiZXhwb25lbnRcIjsgLy8gKiogcHJlYzoxMiByaWdodEFzc29jaWF0aXZlXG4gIGNvbnN0IGpzeE5hbWUgPSA1NTI5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeE5hbWVcIl0gPSBqc3hOYW1lXSA9IFwianN4TmFtZVwiOyAvLyBqc3hOYW1lXG4gIGNvbnN0IGpzeFRleHQgPSA1NjMyMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeFRleHRcIl0gPSBqc3hUZXh0XSA9IFwianN4VGV4dFwiOyAvLyBqc3hUZXh0XG4gIGNvbnN0IGpzeEVtcHR5VGV4dCA9IDU3MzQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4RW1wdHlUZXh0XCJdID0ganN4RW1wdHlUZXh0XSA9IFwianN4RW1wdHlUZXh0XCI7IC8vIGpzeEVtcHR5VGV4dFxuICBjb25zdCBqc3hUYWdTdGFydCA9IDU4ODgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4VGFnU3RhcnRcIl0gPSBqc3hUYWdTdGFydF0gPSBcImpzeFRhZ1N0YXJ0XCI7IC8vIGpzeFRhZ1N0YXJ0IHN0YXJ0c0V4cHJcbiAgY29uc3QganN4VGFnRW5kID0gNTkzOTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hUYWdFbmRcIl0gPSBqc3hUYWdFbmRdID0gXCJqc3hUYWdFbmRcIjsgLy8ganN4VGFnRW5kXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJTdGFydCA9IDYwOTI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1widHlwZVBhcmFtZXRlclN0YXJ0XCJdID0gdHlwZVBhcmFtZXRlclN0YXJ0XSA9IFwidHlwZVBhcmFtZXRlclN0YXJ0XCI7IC8vIHR5cGVQYXJhbWV0ZXJTdGFydCBzdGFydHNFeHByXG4gIGNvbnN0IG5vbk51bGxBc3NlcnRpb24gPSA2MTQ0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm5vbk51bGxBc3NlcnRpb25cIl0gPSBub25OdWxsQXNzZXJ0aW9uXSA9IFwibm9uTnVsbEFzc2VydGlvblwiOyAvLyBub25OdWxsQXNzZXJ0aW9uXG4gIGNvbnN0IF9icmVhayA9IDYyNDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2JyZWFrXCJdID0gX2JyZWFrXSA9IFwiX2JyZWFrXCI7IC8vIGJyZWFrIGtleXdvcmRcbiAgY29uc3QgX2Nhc2UgPSA2MzUwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jYXNlXCJdID0gX2Nhc2VdID0gXCJfY2FzZVwiOyAvLyBjYXNlIGtleXdvcmRcbiAgY29uc3QgX2NhdGNoID0gNjQ1Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfY2F0Y2hcIl0gPSBfY2F0Y2hdID0gXCJfY2F0Y2hcIjsgLy8gY2F0Y2gga2V5d29yZFxuICBjb25zdCBfY29udGludWUgPSA2NTU1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jb250aW51ZVwiXSA9IF9jb250aW51ZV0gPSBcIl9jb250aW51ZVwiOyAvLyBjb250aW51ZSBrZXl3b3JkXG4gIGNvbnN0IF9kZWJ1Z2dlciA9IDY2NTc2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlYnVnZ2VyXCJdID0gX2RlYnVnZ2VyXSA9IFwiX2RlYnVnZ2VyXCI7IC8vIGRlYnVnZ2VyIGtleXdvcmRcbiAgY29uc3QgX2RlZmF1bHQgPSA2NzYwMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kZWZhdWx0XCJdID0gX2RlZmF1bHRdID0gXCJfZGVmYXVsdFwiOyAvLyBkZWZhdWx0IGtleXdvcmRcbiAgY29uc3QgX2RvID0gNjg2MjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZG9cIl0gPSBfZG9dID0gXCJfZG9cIjsgLy8gZG8ga2V5d29yZFxuICBjb25zdCBfZWxzZSA9IDY5NjQ4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Vsc2VcIl0gPSBfZWxzZV0gPSBcIl9lbHNlXCI7IC8vIGVsc2Uga2V5d29yZFxuICBjb25zdCBfZmluYWxseSA9IDcwNjcyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ZpbmFsbHlcIl0gPSBfZmluYWxseV0gPSBcIl9maW5hbGx5XCI7IC8vIGZpbmFsbHkga2V5d29yZFxuICBjb25zdCBfZm9yID0gNzE2OTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZm9yXCJdID0gX2Zvcl0gPSBcIl9mb3JcIjsgLy8gZm9yIGtleXdvcmRcbiAgY29uc3QgX2Z1bmN0aW9uID0gNzMyMzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZnVuY3Rpb25cIl0gPSBfZnVuY3Rpb25dID0gXCJfZnVuY3Rpb25cIjsgLy8gZnVuY3Rpb24ga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pZiA9IDczNzQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2lmXCJdID0gX2lmXSA9IFwiX2lmXCI7IC8vIGlmIGtleXdvcmRcbiAgY29uc3QgX3JldHVybiA9IDc0NzY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3JldHVyblwiXSA9IF9yZXR1cm5dID0gXCJfcmV0dXJuXCI7IC8vIHJldHVybiBrZXl3b3JkXG4gIGNvbnN0IF9zd2l0Y2ggPSA3NTc5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zd2l0Y2hcIl0gPSBfc3dpdGNoXSA9IFwiX3N3aXRjaFwiOyAvLyBzd2l0Y2gga2V5d29yZFxuICBjb25zdCBfdGhyb3cgPSA3NzQ1NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90aHJvd1wiXSA9IF90aHJvd10gPSBcIl90aHJvd1wiOyAvLyB0aHJvdyBrZXl3b3JkIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IF90cnkgPSA3Nzg0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90cnlcIl0gPSBfdHJ5XSA9IFwiX3RyeVwiOyAvLyB0cnkga2V5d29yZFxuICBjb25zdCBfdmFyID0gNzg4NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdmFyXCJdID0gX3Zhcl0gPSBcIl92YXJcIjsgLy8gdmFyIGtleXdvcmRcbiAgY29uc3QgX2xldCA9IDc5ODg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2xldFwiXSA9IF9sZXRdID0gXCJfbGV0XCI7IC8vIGxldCBrZXl3b3JkXG4gIGNvbnN0IF9jb25zdCA9IDgwOTEyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NvbnN0XCJdID0gX2NvbnN0XSA9IFwiX2NvbnN0XCI7IC8vIGNvbnN0IGtleXdvcmRcbiAgY29uc3QgX3doaWxlID0gODE5MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfd2hpbGVcIl0gPSBfd2hpbGVdID0gXCJfd2hpbGVcIjsgLy8gd2hpbGUga2V5d29yZFxuICBjb25zdCBfd2l0aCA9IDgyOTYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3dpdGhcIl0gPSBfd2l0aF0gPSBcIl93aXRoXCI7IC8vIHdpdGgga2V5d29yZFxuICBjb25zdCBfbmV3ID0gODQ0OTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbmV3XCJdID0gX25ld10gPSBcIl9uZXdcIjsgLy8gbmV3IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfdGhpcyA9IDg1NTIwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3RoaXNcIl0gPSBfdGhpc10gPSBcIl90aGlzXCI7IC8vIHRoaXMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9zdXBlciA9IDg2NTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N1cGVyXCJdID0gX3N1cGVyXSA9IFwiX3N1cGVyXCI7IC8vIHN1cGVyIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfY2xhc3MgPSA4NzU2ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jbGFzc1wiXSA9IF9jbGFzc10gPSBcIl9jbGFzc1wiOyAvLyBjbGFzcyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2V4dGVuZHMgPSA4ODA4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9leHRlbmRzXCJdID0gX2V4dGVuZHNdID0gXCJfZXh0ZW5kc1wiOyAvLyBleHRlbmRzIGtleXdvcmRcbiAgY29uc3QgX2V4cG9ydCA9IDg5MTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2V4cG9ydFwiXSA9IF9leHBvcnRdID0gXCJfZXhwb3J0XCI7IC8vIGV4cG9ydCBrZXl3b3JkXG4gIGNvbnN0IF9pbXBvcnQgPSA5MDY0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbXBvcnRcIl0gPSBfaW1wb3J0XSA9IFwiX2ltcG9ydFwiOyAvLyBpbXBvcnQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF95aWVsZCA9IDkxNjY0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3lpZWxkXCJdID0gX3lpZWxkXSA9IFwiX3lpZWxkXCI7IC8vIHlpZWxkIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfbnVsbCA9IDkyNjg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX251bGxcIl0gPSBfbnVsbF0gPSBcIl9udWxsXCI7IC8vIG51bGwga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90cnVlID0gOTM3MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdHJ1ZVwiXSA9IF90cnVlXSA9IFwiX3RydWVcIjsgLy8gdHJ1ZSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2ZhbHNlID0gOTQ3MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZmFsc2VcIl0gPSBfZmFsc2VdID0gXCJfZmFsc2VcIjsgLy8gZmFsc2Uga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pbiA9IDk1MjU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2luXCJdID0gX2luXSA9IFwiX2luXCI7IC8vIGluIHByZWM6OCBrZXl3b3JkXG4gIGNvbnN0IF9pbnN0YW5jZW9mID0gOTYyODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaW5zdGFuY2VvZlwiXSA9IF9pbnN0YW5jZW9mXSA9IFwiX2luc3RhbmNlb2ZcIjsgLy8gaW5zdGFuY2VvZiBwcmVjOjgga2V5d29yZFxuICBjb25zdCBfdHlwZW9mID0gOTc5MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdHlwZW9mXCJdID0gX3R5cGVvZl0gPSBcIl90eXBlb2ZcIjsgLy8gdHlwZW9mIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX3ZvaWQgPSA5ODk2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl92b2lkXCJdID0gX3ZvaWRdID0gXCJfdm9pZFwiOyAvLyB2b2lkIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX2RlbGV0ZSA9IDk5OTg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlbGV0ZVwiXSA9IF9kZWxldGVdID0gXCJfZGVsZXRlXCI7IC8vIGRlbGV0ZSBrZXl3b3JkIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IF9hc3luYyA9IDEwMDg4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9hc3luY1wiXSA9IF9hc3luY10gPSBcIl9hc3luY1wiOyAvLyBhc3luYyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2dldCA9IDEwMTkwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9nZXRcIl0gPSBfZ2V0XSA9IFwiX2dldFwiOyAvLyBnZXQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9zZXQgPSAxMDI5Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfc2V0XCJdID0gX3NldF0gPSBcIl9zZXRcIjsgLy8gc2V0IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZGVjbGFyZSA9IDEwMzk1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kZWNsYXJlXCJdID0gX2RlY2xhcmVdID0gXCJfZGVjbGFyZVwiOyAvLyBkZWNsYXJlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfcmVhZG9ubHkgPSAxMDQ5NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcmVhZG9ubHlcIl0gPSBfcmVhZG9ubHldID0gXCJfcmVhZG9ubHlcIjsgLy8gcmVhZG9ubHkga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9hYnN0cmFjdCA9IDEwNjAwMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9hYnN0cmFjdFwiXSA9IF9hYnN0cmFjdF0gPSBcIl9hYnN0cmFjdFwiOyAvLyBhYnN0cmFjdCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3N0YXRpYyA9IDEwNzAyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zdGF0aWNcIl0gPSBfc3RhdGljXSA9IFwiX3N0YXRpY1wiOyAvLyBzdGF0aWMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9wdWJsaWMgPSAxMDc1MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjsgLy8gcHVibGljIGtleXdvcmRcbiAgY29uc3QgX3ByaXZhdGUgPSAxMDg1NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHJpdmF0ZVwiXSA9IF9wcml2YXRlXSA9IFwiX3ByaXZhdGVcIjsgLy8gcHJpdmF0ZSBrZXl3b3JkXG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSAxMDk1ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHJvdGVjdGVkXCJdID0gX3Byb3RlY3RlZF0gPSBcIl9wcm90ZWN0ZWRcIjsgLy8gcHJvdGVjdGVkIGtleXdvcmRcbiAgY29uc3QgX292ZXJyaWRlID0gMTEwNjA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX292ZXJyaWRlXCJdID0gX292ZXJyaWRlXSA9IFwiX292ZXJyaWRlXCI7IC8vIG92ZXJyaWRlIGtleXdvcmRcbiAgY29uc3QgX2FzID0gMTEyMTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2FzXCJdID0gX2FzXSA9IFwiX2FzXCI7IC8vIGFzIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZW51bSA9IDExMzE2ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiOyAvLyBlbnVtIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfdHlwZSA9IDExNDE5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90eXBlXCJdID0gX3R5cGVdID0gXCJfdHlwZVwiOyAvLyB0eXBlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfaW1wbGVtZW50cyA9IDExNTIxNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbXBsZW1lbnRzXCJdID0gX2ltcGxlbWVudHNdID0gXCJfaW1wbGVtZW50c1wiOyAvLyBpbXBsZW1lbnRzIGtleXdvcmQgc3RhcnRzRXhwclxufSkoVG9rZW5UeXBlIHx8IChUb2tlblR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRva2VuVHlwZSh0b2tlblR5cGUpIHtcbiAgc3dpdGNoICh0b2tlblR5cGUpIHtcbiAgICBjYXNlIFRva2VuVHlwZS5udW06XG4gICAgICByZXR1cm4gXCJudW1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaWdpbnQ6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kZWNpbWFsOlxuICAgICAgcmV0dXJuIFwiZGVjaW1hbFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnJlZ2V4cDpcbiAgICAgIHJldHVybiBcInJlZ2V4cFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZzpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm5hbWU6XG4gICAgICByZXR1cm4gXCJuYW1lXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZW9mOlxuICAgICAgcmV0dXJuIFwiZW9mXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2tldEw6XG4gICAgICByZXR1cm4gXCJbXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2tldFI6XG4gICAgICByZXR1cm4gXCJdXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2VMOlxuICAgICAgcmV0dXJuIFwie1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlQmFyTDpcbiAgICAgIHJldHVybiBcInt8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2VSOlxuICAgICAgcmV0dXJuIFwifVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlQmFyUjpcbiAgICAgIHJldHVybiBcInx9XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucGFyZW5MOlxuICAgICAgcmV0dXJuIFwiKFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBhcmVuUjpcbiAgICAgIHJldHVybiBcIilcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5jb21tYTpcbiAgICAgIHJldHVybiBcIixcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zZW1pOlxuICAgICAgcmV0dXJuIFwiO1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmNvbG9uOlxuICAgICAgcmV0dXJuIFwiOlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmRvdWJsZUNvbG9uOlxuICAgICAgcmV0dXJuIFwiOjpcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kb3Q6XG4gICAgICByZXR1cm4gXCIuXCI7XG4gICAgY2FzZSBUb2tlblR5cGUucXVlc3Rpb246XG4gICAgICByZXR1cm4gXCI/XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucXVlc3Rpb25Eb3Q6XG4gICAgICByZXR1cm4gXCI/LlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmFycm93OlxuICAgICAgcmV0dXJuIFwiPT5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS50ZW1wbGF0ZTpcbiAgICAgIHJldHVybiBcInRlbXBsYXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZWxsaXBzaXM6XG4gICAgICByZXR1cm4gXCIuLi5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iYWNrUXVvdGU6XG4gICAgICByZXR1cm4gXCJgXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZG9sbGFyQnJhY2VMOlxuICAgICAgcmV0dXJuIFwiJHtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hdDpcbiAgICAgIHJldHVybiBcIkBcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5oYXNoOlxuICAgICAgcmV0dXJuIFwiI1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVxOlxuICAgICAgcmV0dXJuIFwiPVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmFzc2lnbjpcbiAgICAgIHJldHVybiBcIl89XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucHJlSW5jRGVjOlxuICAgICAgcmV0dXJuIFwiKysvLS1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wb3N0SW5jRGVjOlxuICAgICAgcmV0dXJuIFwiKysvLS1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iYW5nOlxuICAgICAgcmV0dXJuIFwiIVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnRpbGRlOlxuICAgICAgcmV0dXJuIFwiflwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBpcGVsaW5lOlxuICAgICAgcmV0dXJuIFwifD5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5udWxsaXNoQ29hbGVzY2luZzpcbiAgICAgIHJldHVybiBcIj8/XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubG9naWNhbE9SOlxuICAgICAgcmV0dXJuIFwifHxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5sb2dpY2FsQU5EOlxuICAgICAgcmV0dXJuIFwiJiZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXR3aXNlT1I6XG4gICAgICByZXR1cm4gXCJ8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZVhPUjpcbiAgICAgIHJldHVybiBcIl5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXR3aXNlQU5EOlxuICAgICAgcmV0dXJuIFwiJlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVxdWFsaXR5OlxuICAgICAgcmV0dXJuIFwiPT0vIT1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5sZXNzVGhhbjpcbiAgICAgIHJldHVybiBcIjxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5ncmVhdGVyVGhhbjpcbiAgICAgIHJldHVybiBcIj5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5yZWxhdGlvbmFsT3JFcXVhbDpcbiAgICAgIHJldHVybiBcIjw9Lz49XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0U2hpZnRMOlxuICAgICAgcmV0dXJuIFwiPDxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXRTaGlmdFI6XG4gICAgICByZXR1cm4gXCI+Pi8+Pj5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgcmV0dXJuIFwiK1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgcmV0dXJuIFwiLVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm1vZHVsbzpcbiAgICAgIHJldHVybiBcIiVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zdGFyOlxuICAgICAgcmV0dXJuIFwiKlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnNsYXNoOlxuICAgICAgcmV0dXJuIFwiL1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmV4cG9uZW50OlxuICAgICAgcmV0dXJuIFwiKipcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hOYW1lOlxuICAgICAgcmV0dXJuIFwianN4TmFtZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRleHQ6XG4gICAgICByZXR1cm4gXCJqc3hUZXh0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4RW1wdHlUZXh0OlxuICAgICAgcmV0dXJuIFwianN4RW1wdHlUZXh0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4VGFnU3RhcnQ6XG4gICAgICByZXR1cm4gXCJqc3hUYWdTdGFydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRhZ0VuZDpcbiAgICAgIHJldHVybiBcImpzeFRhZ0VuZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnR5cGVQYXJhbWV0ZXJTdGFydDpcbiAgICAgIHJldHVybiBcInR5cGVQYXJhbWV0ZXJTdGFydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm5vbk51bGxBc3NlcnRpb246XG4gICAgICByZXR1cm4gXCJub25OdWxsQXNzZXJ0aW9uXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2JyZWFrOlxuICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2FzZTpcbiAgICAgIHJldHVybiBcImNhc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2F0Y2g6XG4gICAgICByZXR1cm4gXCJjYXRjaFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9jb250aW51ZTpcbiAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlYnVnZ2VyOlxuICAgICAgcmV0dXJuIFwiZGVidWdnZXJcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZGVmYXVsdDpcbiAgICAgIHJldHVybiBcImRlZmF1bHRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZG86XG4gICAgICByZXR1cm4gXCJkb1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9lbHNlOlxuICAgICAgcmV0dXJuIFwiZWxzZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9maW5hbGx5OlxuICAgICAgcmV0dXJuIFwiZmluYWxseVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9mb3I6XG4gICAgICByZXR1cm4gXCJmb3JcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZnVuY3Rpb246XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pZjpcbiAgICAgIHJldHVybiBcImlmXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3JldHVybjpcbiAgICAgIHJldHVybiBcInJldHVyblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zd2l0Y2g6XG4gICAgICByZXR1cm4gXCJzd2l0Y2hcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdGhyb3c6XG4gICAgICByZXR1cm4gXCJ0aHJvd1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90cnk6XG4gICAgICByZXR1cm4gXCJ0cnlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdmFyOlxuICAgICAgcmV0dXJuIFwidmFyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2xldDpcbiAgICAgIHJldHVybiBcImxldFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9jb25zdDpcbiAgICAgIHJldHVybiBcImNvbnN0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3doaWxlOlxuICAgICAgcmV0dXJuIFwid2hpbGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fd2l0aDpcbiAgICAgIHJldHVybiBcIndpdGhcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fbmV3OlxuICAgICAgcmV0dXJuIFwibmV3XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3RoaXM6XG4gICAgICByZXR1cm4gXCJ0aGlzXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3N1cGVyOlxuICAgICAgcmV0dXJuIFwic3VwZXJcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2xhc3M6XG4gICAgICByZXR1cm4gXCJjbGFzc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9leHRlbmRzOlxuICAgICAgcmV0dXJuIFwiZXh0ZW5kc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9leHBvcnQ6XG4gICAgICByZXR1cm4gXCJleHBvcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW1wb3J0OlxuICAgICAgcmV0dXJuIFwiaW1wb3J0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3lpZWxkOlxuICAgICAgcmV0dXJuIFwieWllbGRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fbnVsbDpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHJ1ZTpcbiAgICAgIHJldHVybiBcInRydWVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZmFsc2U6XG4gICAgICByZXR1cm4gXCJmYWxzZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pbjpcbiAgICAgIHJldHVybiBcImluXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2luc3RhbmNlb2Y6XG4gICAgICByZXR1cm4gXCJpbnN0YW5jZW9mXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3R5cGVvZjpcbiAgICAgIHJldHVybiBcInR5cGVvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl92b2lkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWxldGU6XG4gICAgICByZXR1cm4gXCJkZWxldGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fYXN5bmM6XG4gICAgICByZXR1cm4gXCJhc3luY1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9nZXQ6XG4gICAgICByZXR1cm4gXCJnZXRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc2V0OlxuICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlY2xhcmU6XG4gICAgICByZXR1cm4gXCJkZWNsYXJlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3JlYWRvbmx5OlxuICAgICAgcmV0dXJuIFwicmVhZG9ubHlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fYWJzdHJhY3Q6XG4gICAgICByZXR1cm4gXCJhYnN0cmFjdFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zdGF0aWM6XG4gICAgICByZXR1cm4gXCJzdGF0aWNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fcHVibGljOlxuICAgICAgcmV0dXJuIFwicHVibGljXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3ByaXZhdGU6XG4gICAgICByZXR1cm4gXCJwcml2YXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3Byb3RlY3RlZDpcbiAgICAgIHJldHVybiBcInByb3RlY3RlZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9vdmVycmlkZTpcbiAgICAgIHJldHVybiBcIm92ZXJyaWRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2FzOlxuICAgICAgcmV0dXJuIFwiYXNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZW51bTpcbiAgICAgIHJldHVybiBcImVudW1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHlwZTpcbiAgICAgIHJldHVybiBcInR5cGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW1wbGVtZW50czpcbiAgICAgIHJldHVybiBcImltcGxlbWVudHNcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbiIsICJcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuL2tleXdvcmRzXCI7XG5pbXBvcnQgeyBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTY29wZSB7XG4gIFxuICBcbiAgXG5cbiAgY29uc3RydWN0b3Ioc3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBpc0Z1bmN0aW9uU2NvcGUpIHtcbiAgICB0aGlzLnN0YXJ0VG9rZW5JbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICB0aGlzLmVuZFRva2VuSW5kZXggPSBlbmRUb2tlbkluZGV4O1xuICAgIHRoaXMuaXNGdW5jdGlvblNjb3BlID0gaXNGdW5jdGlvblNjb3BlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZVNuYXBzaG90IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHBvdGVudGlhbEFycm93QXQsXG4gICAgIG5vQW5vbkZ1bmN0aW9uVHlwZSxcbiAgICAgaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0LFxuICAgICB0b2tlbnNMZW5ndGgsXG4gICAgIHNjb3Blc0xlbmd0aCxcbiAgICAgcG9zLFxuICAgICB0eXBlLFxuICAgICBjb250ZXh0dWFsS2V5d29yZCxcbiAgICAgc3RhcnQsXG4gICAgIGVuZCxcbiAgICAgaXNUeXBlLFxuICAgICBzY29wZURlcHRoLFxuICAgICBlcnJvcixcbiAgKSB7O3RoaXMucG90ZW50aWFsQXJyb3dBdCA9IHBvdGVudGlhbEFycm93QXQ7dGhpcy5ub0Fub25GdW5jdGlvblR5cGUgPSBub0Fub25GdW5jdGlvblR5cGU7dGhpcy5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBpbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7dGhpcy50b2tlbnNMZW5ndGggPSB0b2tlbnNMZW5ndGg7dGhpcy5zY29wZXNMZW5ndGggPSBzY29wZXNMZW5ndGg7dGhpcy5wb3MgPSBwb3M7dGhpcy50eXBlID0gdHlwZTt0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gY29udGV4dHVhbEtleXdvcmQ7dGhpcy5zdGFydCA9IHN0YXJ0O3RoaXMuZW5kID0gZW5kO3RoaXMuaXNUeXBlID0gaXNUeXBlO3RoaXMuc2NvcGVEZXB0aCA9IHNjb3BlRGVwdGg7dGhpcy5lcnJvciA9IGVycm9yO31cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge2NvbnN0cnVjdG9yKCkgeyBTdGF0ZS5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDIuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0My5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDUuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0Ni5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ3LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDguY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0OS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMC5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMi5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMy5jYWxsKHRoaXMpOyB9XG4gIC8vIFVzZWQgdG8gc2lnbmlmeSB0aGUgc3RhcnQgb2YgYSBwb3RlbnRpYWwgYXJyb3cgZnVuY3Rpb25cbiAgX19pbml0KCkge3RoaXMucG90ZW50aWFsQXJyb3dBdCA9IC0xfVxuXG4gIC8vIFVzZWQgYnkgRmxvdyB0byBoYW5kbGUgYW4gZWRnZSBjYXNlIGludm9sdmluZyBmdW5jdGlvbiB0eXBlIHBhcnNpbmcuXG4gIF9faW5pdDIoKSB7dGhpcy5ub0Fub25GdW5jdGlvblR5cGUgPSBmYWxzZX1cblxuICAvLyBVc2VkIGJ5IFR5cGVTY3JpcHQgdG8gaGFuZGxlIGFtYmlndWl0aWVzIHdoZW4gcGFyc2luZyBjb25kaXRpb25hbCB0eXBlcy5cbiAgX19pbml0MygpIHt0aGlzLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IGZhbHNlfVxuXG4gIC8vIFRva2VuIHN0b3JlLlxuICBfX2luaXQ0KCkge3RoaXMudG9rZW5zID0gW119XG5cbiAgLy8gQXJyYXkgb2YgYWxsIG9ic2VydmVkIHNjb3Blcywgb3JkZXJlZCBieSB0aGVpciBlbmRpbmcgcG9zaXRpb24uXG4gIF9faW5pdDUoKSB7dGhpcy5zY29wZXMgPSBbXX1cblxuICAvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgdG9rZW5pemVyIGluIHRoZSBpbnB1dC5cbiAgX19pbml0NigpIHt0aGlzLnBvcyA9IDB9XG5cbiAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gIF9faW5pdDcoKSB7dGhpcy50eXBlID0gdHQuZW9mfVxuICBfX2luaXQ4KCkge3RoaXMuY29udGV4dHVhbEtleXdvcmQgPSBDb250ZXh0dWFsS2V5d29yZC5OT05FfVxuICBfX2luaXQ5KCkge3RoaXMuc3RhcnQgPSAwfVxuICBfX2luaXQxMCgpIHt0aGlzLmVuZCA9IDB9XG5cbiAgX19pbml0MTEoKSB7dGhpcy5pc1R5cGUgPSBmYWxzZX1cbiAgX19pbml0MTIoKSB7dGhpcy5zY29wZURlcHRoID0gMH1cblxuICAvKipcbiAgICogSWYgdGhlIHBhcnNlciBpcyBpbiBhbiBlcnJvciBzdGF0ZSwgdGhlbiB0aGUgdG9rZW4gaXMgYWx3YXlzIHR0LmVvZiBhbmQgYWxsIGZ1bmN0aW9ucyBjYW5cbiAgICoga2VlcCBleGVjdXRpbmcgYnV0IHNob3VsZCBiZSB3cml0dGVuIHNvIHRoZXkgZG9uJ3QgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCBpbiB0aGlzIHNpdHVhdGlvbi5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCwgY29tYmluZWQgd2l0aCB0aGUgYWJpbGl0eSB0byBzbmFwc2hvdCBhbmQgcmVzdG9yZSBzdGF0ZSwgYWxsb3dzIHVzIHRvIGltcGxlbWVudFxuICAgKiBiYWNrdHJhY2tpbmcgd2l0aG91dCBleGNlcHRpb25zIGFuZCB3aXRob3V0IG5lZWRpbmcgdG8gZXhwbGljaXRseSBwcm9wYWdhdGUgZXJyb3Igc3RhdGVzXG4gICAqIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBfX2luaXQxMygpIHt0aGlzLmVycm9yID0gbnVsbH1cblxuICBzbmFwc2hvdCgpIHtcbiAgICByZXR1cm4gbmV3IFN0YXRlU25hcHNob3QoXG4gICAgICB0aGlzLnBvdGVudGlhbEFycm93QXQsXG4gICAgICB0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSxcbiAgICAgIHRoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0LFxuICAgICAgdGhpcy50b2tlbnMubGVuZ3RoLFxuICAgICAgdGhpcy5zY29wZXMubGVuZ3RoLFxuICAgICAgdGhpcy5wb3MsXG4gICAgICB0aGlzLnR5cGUsXG4gICAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkLFxuICAgICAgdGhpcy5zdGFydCxcbiAgICAgIHRoaXMuZW5kLFxuICAgICAgdGhpcy5pc1R5cGUsXG4gICAgICB0aGlzLnNjb3BlRGVwdGgsXG4gICAgICB0aGlzLmVycm9yLFxuICAgICk7XG4gIH1cblxuICByZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gc25hcHNob3QucG90ZW50aWFsQXJyb3dBdDtcbiAgICB0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IHNuYXBzaG90Lm5vQW5vbkZ1bmN0aW9uVHlwZTtcbiAgICB0aGlzLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHNuYXBzaG90LmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgICB0aGlzLnRva2Vucy5sZW5ndGggPSBzbmFwc2hvdC50b2tlbnNMZW5ndGg7XG4gICAgdGhpcy5zY29wZXMubGVuZ3RoID0gc25hcHNob3Quc2NvcGVzTGVuZ3RoO1xuICAgIHRoaXMucG9zID0gc25hcHNob3QucG9zO1xuICAgIHRoaXMudHlwZSA9IHNuYXBzaG90LnR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IHNuYXBzaG90LmNvbnRleHR1YWxLZXl3b3JkO1xuICAgIHRoaXMuc3RhcnQgPSBzbmFwc2hvdC5zdGFydDtcbiAgICB0aGlzLmVuZCA9IHNuYXBzaG90LmVuZDtcbiAgICB0aGlzLmlzVHlwZSA9IHNuYXBzaG90LmlzVHlwZTtcbiAgICB0aGlzLnNjb3BlRGVwdGggPSBzbmFwc2hvdC5zY29wZURlcHRoO1xuICAgIHRoaXMuZXJyb3IgPSBzbmFwc2hvdC5lcnJvcjtcbiAgfVxufVxuIiwgImV4cG9ydCB2YXIgY2hhckNvZGVzOyAoZnVuY3Rpb24gKGNoYXJDb2Rlcykge1xuICBjb25zdCBiYWNrU3BhY2UgPSA4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYmFja1NwYWNlXCJdID0gYmFja1NwYWNlXSA9IFwiYmFja1NwYWNlXCI7XG4gIGNvbnN0IGxpbmVGZWVkID0gMTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsaW5lRmVlZFwiXSA9IGxpbmVGZWVkXSA9IFwibGluZUZlZWRcIjsgLy8gICdcXG4nXG4gIGNvbnN0IHRhYiA9IDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ0YWJcIl0gPSB0YWJdID0gXCJ0YWJcIjsgLy8gICdcXHQnXG4gIGNvbnN0IGNhcnJpYWdlUmV0dXJuID0gMTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjYXJyaWFnZVJldHVyblwiXSA9IGNhcnJpYWdlUmV0dXJuXSA9IFwiY2FycmlhZ2VSZXR1cm5cIjsgLy8gICdcXHInXG4gIGNvbnN0IHNoaWZ0T3V0ID0gMTQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzaGlmdE91dFwiXSA9IHNoaWZ0T3V0XSA9IFwic2hpZnRPdXRcIjtcbiAgY29uc3Qgc3BhY2UgPSAzMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNwYWNlXCJdID0gc3BhY2VdID0gXCJzcGFjZVwiO1xuICBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSAzMzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImV4Y2xhbWF0aW9uTWFya1wiXSA9IGV4Y2xhbWF0aW9uTWFya10gPSBcImV4Y2xhbWF0aW9uTWFya1wiOyAvLyAgJyEnXG4gIGNvbnN0IHF1b3RhdGlvbk1hcmsgPSAzNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInF1b3RhdGlvbk1hcmtcIl0gPSBxdW90YXRpb25NYXJrXSA9IFwicXVvdGF0aW9uTWFya1wiOyAvLyAgJ1wiJ1xuICBjb25zdCBudW1iZXJTaWduID0gMzU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJudW1iZXJTaWduXCJdID0gbnVtYmVyU2lnbl0gPSBcIm51bWJlclNpZ25cIjsgLy8gICcjJ1xuICBjb25zdCBkb2xsYXJTaWduID0gMzY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkb2xsYXJTaWduXCJdID0gZG9sbGFyU2lnbl0gPSBcImRvbGxhclNpZ25cIjsgLy8gICckJ1xuICBjb25zdCBwZXJjZW50U2lnbiA9IDM3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGVyY2VudFNpZ25cIl0gPSBwZXJjZW50U2lnbl0gPSBcInBlcmNlbnRTaWduXCI7IC8vICAnJSdcbiAgY29uc3QgYW1wZXJzYW5kID0gMzg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhbXBlcnNhbmRcIl0gPSBhbXBlcnNhbmRdID0gXCJhbXBlcnNhbmRcIjsgLy8gICcmJ1xuICBjb25zdCBhcG9zdHJvcGhlID0gMzk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhcG9zdHJvcGhlXCJdID0gYXBvc3Ryb3BoZV0gPSBcImFwb3N0cm9waGVcIjsgLy8gICcnJ1xuICBjb25zdCBsZWZ0UGFyZW50aGVzaXMgPSA0MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxlZnRQYXJlbnRoZXNpc1wiXSA9IGxlZnRQYXJlbnRoZXNpc10gPSBcImxlZnRQYXJlbnRoZXNpc1wiOyAvLyAgJygnXG4gIGNvbnN0IHJpZ2h0UGFyZW50aGVzaXMgPSA0MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInJpZ2h0UGFyZW50aGVzaXNcIl0gPSByaWdodFBhcmVudGhlc2lzXSA9IFwicmlnaHRQYXJlbnRoZXNpc1wiOyAvLyAgJyknXG4gIGNvbnN0IGFzdGVyaXNrID0gNDI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhc3Rlcmlza1wiXSA9IGFzdGVyaXNrXSA9IFwiYXN0ZXJpc2tcIjsgLy8gICcqJ1xuICBjb25zdCBwbHVzU2lnbiA9IDQzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGx1c1NpZ25cIl0gPSBwbHVzU2lnbl0gPSBcInBsdXNTaWduXCI7IC8vICAnKydcbiAgY29uc3QgY29tbWEgPSA0NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNvbW1hXCJdID0gY29tbWFdID0gXCJjb21tYVwiOyAvLyAgJywnXG4gIGNvbnN0IGRhc2ggPSA0NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRhc2hcIl0gPSBkYXNoXSA9IFwiZGFzaFwiOyAvLyAgJy0nXG4gIGNvbnN0IGRvdCA9IDQ2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZG90XCJdID0gZG90XSA9IFwiZG90XCI7IC8vICAnLidcbiAgY29uc3Qgc2xhc2ggPSA0NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNsYXNoXCJdID0gc2xhc2hdID0gXCJzbGFzaFwiOyAvLyAgJy8nXG4gIGNvbnN0IGRpZ2l0MCA9IDQ4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQwXCJdID0gZGlnaXQwXSA9IFwiZGlnaXQwXCI7IC8vICAnMCdcbiAgY29uc3QgZGlnaXQxID0gNDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDFcIl0gPSBkaWdpdDFdID0gXCJkaWdpdDFcIjsgLy8gICcxJ1xuICBjb25zdCBkaWdpdDIgPSA1MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0MlwiXSA9IGRpZ2l0Ml0gPSBcImRpZ2l0MlwiOyAvLyAgJzInXG4gIGNvbnN0IGRpZ2l0MyA9IDUxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQzXCJdID0gZGlnaXQzXSA9IFwiZGlnaXQzXCI7IC8vICAnMydcbiAgY29uc3QgZGlnaXQ0ID0gNTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDRcIl0gPSBkaWdpdDRdID0gXCJkaWdpdDRcIjsgLy8gICc0J1xuICBjb25zdCBkaWdpdDUgPSA1MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0NVwiXSA9IGRpZ2l0NV0gPSBcImRpZ2l0NVwiOyAvLyAgJzUnXG4gIGNvbnN0IGRpZ2l0NiA9IDU0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ2XCJdID0gZGlnaXQ2XSA9IFwiZGlnaXQ2XCI7IC8vICAnNidcbiAgY29uc3QgZGlnaXQ3ID0gNTU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDdcIl0gPSBkaWdpdDddID0gXCJkaWdpdDdcIjsgLy8gICc3J1xuICBjb25zdCBkaWdpdDggPSA1NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0OFwiXSA9IGRpZ2l0OF0gPSBcImRpZ2l0OFwiOyAvLyAgJzgnXG4gIGNvbnN0IGRpZ2l0OSA9IDU3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ5XCJdID0gZGlnaXQ5XSA9IFwiZGlnaXQ5XCI7IC8vICAnOSdcbiAgY29uc3QgY29sb24gPSA1ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNvbG9uXCJdID0gY29sb25dID0gXCJjb2xvblwiOyAvLyAgJzonXG4gIGNvbnN0IHNlbWljb2xvbiA9IDU5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wic2VtaWNvbG9uXCJdID0gc2VtaWNvbG9uXSA9IFwic2VtaWNvbG9uXCI7IC8vICAnOydcbiAgY29uc3QgbGVzc1RoYW4gPSA2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxlc3NUaGFuXCJdID0gbGVzc1RoYW5dID0gXCJsZXNzVGhhblwiOyAvLyAgJzwnXG4gIGNvbnN0IGVxdWFsc1RvID0gNjE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJlcXVhbHNUb1wiXSA9IGVxdWFsc1RvXSA9IFwiZXF1YWxzVG9cIjsgLy8gICc9J1xuICBjb25zdCBncmVhdGVyVGhhbiA9IDYyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZ3JlYXRlclRoYW5cIl0gPSBncmVhdGVyVGhhbl0gPSBcImdyZWF0ZXJUaGFuXCI7IC8vICAnPidcbiAgY29uc3QgcXVlc3Rpb25NYXJrID0gNjM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJxdWVzdGlvbk1hcmtcIl0gPSBxdWVzdGlvbk1hcmtdID0gXCJxdWVzdGlvbk1hcmtcIjsgLy8gICc/J1xuICBjb25zdCBhdFNpZ24gPSA2NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImF0U2lnblwiXSA9IGF0U2lnbl0gPSBcImF0U2lnblwiOyAvLyAgJ0AnXG4gIGNvbnN0IHVwcGVyY2FzZUEgPSA2NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUFcIl0gPSB1cHBlcmNhc2VBXSA9IFwidXBwZXJjYXNlQVwiOyAvLyAgJ0EnXG4gIGNvbnN0IHVwcGVyY2FzZUIgPSA2NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUJcIl0gPSB1cHBlcmNhc2VCXSA9IFwidXBwZXJjYXNlQlwiOyAvLyAgJ0InXG4gIGNvbnN0IHVwcGVyY2FzZUMgPSA2NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUNcIl0gPSB1cHBlcmNhc2VDXSA9IFwidXBwZXJjYXNlQ1wiOyAvLyAgJ0MnXG4gIGNvbnN0IHVwcGVyY2FzZUQgPSA2ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZURcIl0gPSB1cHBlcmNhc2VEXSA9IFwidXBwZXJjYXNlRFwiOyAvLyAgJ0QnXG4gIGNvbnN0IHVwcGVyY2FzZUUgPSA2OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUVcIl0gPSB1cHBlcmNhc2VFXSA9IFwidXBwZXJjYXNlRVwiOyAvLyAgJ0UnXG4gIGNvbnN0IHVwcGVyY2FzZUYgPSA3MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUZcIl0gPSB1cHBlcmNhc2VGXSA9IFwidXBwZXJjYXNlRlwiOyAvLyAgJ0YnXG4gIGNvbnN0IHVwcGVyY2FzZUcgPSA3MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUdcIl0gPSB1cHBlcmNhc2VHXSA9IFwidXBwZXJjYXNlR1wiOyAvLyAgJ0cnXG4gIGNvbnN0IHVwcGVyY2FzZUggPSA3MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUhcIl0gPSB1cHBlcmNhc2VIXSA9IFwidXBwZXJjYXNlSFwiOyAvLyAgJ0gnXG4gIGNvbnN0IHVwcGVyY2FzZUkgPSA3MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUlcIl0gPSB1cHBlcmNhc2VJXSA9IFwidXBwZXJjYXNlSVwiOyAvLyAgJ0knXG4gIGNvbnN0IHVwcGVyY2FzZUogPSA3NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUpcIl0gPSB1cHBlcmNhc2VKXSA9IFwidXBwZXJjYXNlSlwiOyAvLyAgJ0onXG4gIGNvbnN0IHVwcGVyY2FzZUsgPSA3NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUtcIl0gPSB1cHBlcmNhc2VLXSA9IFwidXBwZXJjYXNlS1wiOyAvLyAgJ0snXG4gIGNvbnN0IHVwcGVyY2FzZUwgPSA3NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUxcIl0gPSB1cHBlcmNhc2VMXSA9IFwidXBwZXJjYXNlTFwiOyAvLyAgJ0wnXG4gIGNvbnN0IHVwcGVyY2FzZU0gPSA3NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU1cIl0gPSB1cHBlcmNhc2VNXSA9IFwidXBwZXJjYXNlTVwiOyAvLyAgJ00nXG4gIGNvbnN0IHVwcGVyY2FzZU4gPSA3ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU5cIl0gPSB1cHBlcmNhc2VOXSA9IFwidXBwZXJjYXNlTlwiOyAvLyAgJ04nXG4gIGNvbnN0IHVwcGVyY2FzZU8gPSA3OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU9cIl0gPSB1cHBlcmNhc2VPXSA9IFwidXBwZXJjYXNlT1wiOyAvLyAgJ08nXG4gIGNvbnN0IHVwcGVyY2FzZVAgPSA4MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVBcIl0gPSB1cHBlcmNhc2VQXSA9IFwidXBwZXJjYXNlUFwiOyAvLyAgJ1AnXG4gIGNvbnN0IHVwcGVyY2FzZVEgPSA4MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVFcIl0gPSB1cHBlcmNhc2VRXSA9IFwidXBwZXJjYXNlUVwiOyAvLyAgJ1EnXG4gIGNvbnN0IHVwcGVyY2FzZVIgPSA4MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVJcIl0gPSB1cHBlcmNhc2VSXSA9IFwidXBwZXJjYXNlUlwiOyAvLyAgJ1InXG4gIGNvbnN0IHVwcGVyY2FzZVMgPSA4MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVNcIl0gPSB1cHBlcmNhc2VTXSA9IFwidXBwZXJjYXNlU1wiOyAvLyAgJ1MnXG4gIGNvbnN0IHVwcGVyY2FzZVQgPSA4NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVRcIl0gPSB1cHBlcmNhc2VUXSA9IFwidXBwZXJjYXNlVFwiOyAvLyAgJ1QnXG4gIGNvbnN0IHVwcGVyY2FzZVUgPSA4NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVVcIl0gPSB1cHBlcmNhc2VVXSA9IFwidXBwZXJjYXNlVVwiOyAvLyAgJ1UnXG4gIGNvbnN0IHVwcGVyY2FzZVYgPSA4NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVZcIl0gPSB1cHBlcmNhc2VWXSA9IFwidXBwZXJjYXNlVlwiOyAvLyAgJ1YnXG4gIGNvbnN0IHVwcGVyY2FzZVcgPSA4NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVdcIl0gPSB1cHBlcmNhc2VXXSA9IFwidXBwZXJjYXNlV1wiOyAvLyAgJ1cnXG4gIGNvbnN0IHVwcGVyY2FzZVggPSA4ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVhcIl0gPSB1cHBlcmNhc2VYXSA9IFwidXBwZXJjYXNlWFwiOyAvLyAgJ1gnXG4gIGNvbnN0IHVwcGVyY2FzZVkgPSA4OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVlcIl0gPSB1cHBlcmNhc2VZXSA9IFwidXBwZXJjYXNlWVwiOyAvLyAgJ1knXG4gIGNvbnN0IHVwcGVyY2FzZVogPSA5MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVpcIl0gPSB1cHBlcmNhc2VaXSA9IFwidXBwZXJjYXNlWlwiOyAvLyAgJ1onXG4gIGNvbnN0IGxlZnRTcXVhcmVCcmFja2V0ID0gOTE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0U3F1YXJlQnJhY2tldFwiXSA9IGxlZnRTcXVhcmVCcmFja2V0XSA9IFwibGVmdFNxdWFyZUJyYWNrZXRcIjsgLy8gICdbJ1xuICBjb25zdCBiYWNrc2xhc2ggPSA5MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImJhY2tzbGFzaFwiXSA9IGJhY2tzbGFzaF0gPSBcImJhY2tzbGFzaFwiOyAvLyAgJ1xcICAgICdcbiAgY29uc3QgcmlnaHRTcXVhcmVCcmFja2V0ID0gOTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodFNxdWFyZUJyYWNrZXRcIl0gPSByaWdodFNxdWFyZUJyYWNrZXRdID0gXCJyaWdodFNxdWFyZUJyYWNrZXRcIjsgLy8gICddJ1xuICBjb25zdCBjYXJldCA9IDk0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiY2FyZXRcIl0gPSBjYXJldF0gPSBcImNhcmV0XCI7IC8vICAnXidcbiAgY29uc3QgdW5kZXJzY29yZSA9IDk1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widW5kZXJzY29yZVwiXSA9IHVuZGVyc2NvcmVdID0gXCJ1bmRlcnNjb3JlXCI7IC8vICAnXydcbiAgY29uc3QgZ3JhdmVBY2NlbnQgPSA5NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImdyYXZlQWNjZW50XCJdID0gZ3JhdmVBY2NlbnRdID0gXCJncmF2ZUFjY2VudFwiOyAvLyAgJ2AnXG4gIGNvbnN0IGxvd2VyY2FzZUEgPSA5NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUFcIl0gPSBsb3dlcmNhc2VBXSA9IFwibG93ZXJjYXNlQVwiOyAvLyAgJ2EnXG4gIGNvbnN0IGxvd2VyY2FzZUIgPSA5ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUJcIl0gPSBsb3dlcmNhc2VCXSA9IFwibG93ZXJjYXNlQlwiOyAvLyAgJ2InXG4gIGNvbnN0IGxvd2VyY2FzZUMgPSA5OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUNcIl0gPSBsb3dlcmNhc2VDXSA9IFwibG93ZXJjYXNlQ1wiOyAvLyAgJ2MnXG4gIGNvbnN0IGxvd2VyY2FzZUQgPSAxMDA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VEXCJdID0gbG93ZXJjYXNlRF0gPSBcImxvd2VyY2FzZURcIjsgLy8gICdkJ1xuICBjb25zdCBsb3dlcmNhc2VFID0gMTAxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlRVwiXSA9IGxvd2VyY2FzZUVdID0gXCJsb3dlcmNhc2VFXCI7IC8vICAnZSdcbiAgY29uc3QgbG93ZXJjYXNlRiA9IDEwMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUZcIl0gPSBsb3dlcmNhc2VGXSA9IFwibG93ZXJjYXNlRlwiOyAvLyAgJ2YnXG4gIGNvbnN0IGxvd2VyY2FzZUcgPSAxMDM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VHXCJdID0gbG93ZXJjYXNlR10gPSBcImxvd2VyY2FzZUdcIjsgLy8gICdnJ1xuICBjb25zdCBsb3dlcmNhc2VIID0gMTA0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlSFwiXSA9IGxvd2VyY2FzZUhdID0gXCJsb3dlcmNhc2VIXCI7IC8vICAnaCdcbiAgY29uc3QgbG93ZXJjYXNlSSA9IDEwNTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUlcIl0gPSBsb3dlcmNhc2VJXSA9IFwibG93ZXJjYXNlSVwiOyAvLyAgJ2knXG4gIGNvbnN0IGxvd2VyY2FzZUogPSAxMDY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VKXCJdID0gbG93ZXJjYXNlSl0gPSBcImxvd2VyY2FzZUpcIjsgLy8gICdqJ1xuICBjb25zdCBsb3dlcmNhc2VLID0gMTA3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlS1wiXSA9IGxvd2VyY2FzZUtdID0gXCJsb3dlcmNhc2VLXCI7IC8vICAnaydcbiAgY29uc3QgbG93ZXJjYXNlTCA9IDEwODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUxcIl0gPSBsb3dlcmNhc2VMXSA9IFwibG93ZXJjYXNlTFwiOyAvLyAgJ2wnXG4gIGNvbnN0IGxvd2VyY2FzZU0gPSAxMDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VNXCJdID0gbG93ZXJjYXNlTV0gPSBcImxvd2VyY2FzZU1cIjsgLy8gICdtJ1xuICBjb25zdCBsb3dlcmNhc2VOID0gMTEwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlTlwiXSA9IGxvd2VyY2FzZU5dID0gXCJsb3dlcmNhc2VOXCI7IC8vICAnbidcbiAgY29uc3QgbG93ZXJjYXNlTyA9IDExMTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZU9cIl0gPSBsb3dlcmNhc2VPXSA9IFwibG93ZXJjYXNlT1wiOyAvLyAgJ28nXG4gIGNvbnN0IGxvd2VyY2FzZVAgPSAxMTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VQXCJdID0gbG93ZXJjYXNlUF0gPSBcImxvd2VyY2FzZVBcIjsgLy8gICdwJ1xuICBjb25zdCBsb3dlcmNhc2VRID0gMTEzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlUVwiXSA9IGxvd2VyY2FzZVFdID0gXCJsb3dlcmNhc2VRXCI7IC8vICAncSdcbiAgY29uc3QgbG93ZXJjYXNlUiA9IDExNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVJcIl0gPSBsb3dlcmNhc2VSXSA9IFwibG93ZXJjYXNlUlwiOyAvLyAgJ3InXG4gIGNvbnN0IGxvd2VyY2FzZVMgPSAxMTU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VTXCJdID0gbG93ZXJjYXNlU10gPSBcImxvd2VyY2FzZVNcIjsgLy8gICdzJ1xuICBjb25zdCBsb3dlcmNhc2VUID0gMTE2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlVFwiXSA9IGxvd2VyY2FzZVRdID0gXCJsb3dlcmNhc2VUXCI7IC8vICAndCdcbiAgY29uc3QgbG93ZXJjYXNlVSA9IDExNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVVcIl0gPSBsb3dlcmNhc2VVXSA9IFwibG93ZXJjYXNlVVwiOyAvLyAgJ3UnXG4gIGNvbnN0IGxvd2VyY2FzZVYgPSAxMTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VWXCJdID0gbG93ZXJjYXNlVl0gPSBcImxvd2VyY2FzZVZcIjsgLy8gICd2J1xuICBjb25zdCBsb3dlcmNhc2VXID0gMTE5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlV1wiXSA9IGxvd2VyY2FzZVddID0gXCJsb3dlcmNhc2VXXCI7IC8vICAndydcbiAgY29uc3QgbG93ZXJjYXNlWCA9IDEyMDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVhcIl0gPSBsb3dlcmNhc2VYXSA9IFwibG93ZXJjYXNlWFwiOyAvLyAgJ3gnXG4gIGNvbnN0IGxvd2VyY2FzZVkgPSAxMjE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VZXCJdID0gbG93ZXJjYXNlWV0gPSBcImxvd2VyY2FzZVlcIjsgLy8gICd5J1xuICBjb25zdCBsb3dlcmNhc2VaID0gMTIyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlWlwiXSA9IGxvd2VyY2FzZVpdID0gXCJsb3dlcmNhc2VaXCI7IC8vICAneidcbiAgY29uc3QgbGVmdEN1cmx5QnJhY2UgPSAxMjM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0Q3VybHlCcmFjZVwiXSA9IGxlZnRDdXJseUJyYWNlXSA9IFwibGVmdEN1cmx5QnJhY2VcIjsgLy8gICd7J1xuICBjb25zdCB2ZXJ0aWNhbEJhciA9IDEyNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInZlcnRpY2FsQmFyXCJdID0gdmVydGljYWxCYXJdID0gXCJ2ZXJ0aWNhbEJhclwiOyAvLyAgJ3wnXG4gIGNvbnN0IHJpZ2h0Q3VybHlCcmFjZSA9IDEyNTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInJpZ2h0Q3VybHlCcmFjZVwiXSA9IHJpZ2h0Q3VybHlCcmFjZV0gPSBcInJpZ2h0Q3VybHlCcmFjZVwiOyAvLyAgJ30nXG4gIGNvbnN0IHRpbGRlID0gMTI2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widGlsZGVcIl0gPSB0aWxkZV0gPSBcInRpbGRlXCI7IC8vICAnfidcbiAgY29uc3Qgbm9uQnJlYWtpbmdTcGFjZSA9IDE2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcIm5vbkJyZWFraW5nU3BhY2VcIl0gPSBub25CcmVha2luZ1NwYWNlXSA9IFwibm9uQnJlYWtpbmdTcGFjZVwiO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taXJyZWd1bGFyLXdoaXRlc3BhY2VcbiAgY29uc3Qgb2doYW1TcGFjZU1hcmsgPSA1NzYwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wib2doYW1TcGFjZU1hcmtcIl0gPSBvZ2hhbVNwYWNlTWFya10gPSBcIm9naGFtU3BhY2VNYXJrXCI7IC8vICdcdTE2ODAnXG4gIGNvbnN0IGxpbmVTZXBhcmF0b3IgPSA4MjMyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGluZVNlcGFyYXRvclwiXSA9IGxpbmVTZXBhcmF0b3JdID0gXCJsaW5lU2VwYXJhdG9yXCI7XG4gIGNvbnN0IHBhcmFncmFwaFNlcGFyYXRvciA9IDgyMzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJwYXJhZ3JhcGhTZXBhcmF0b3JcIl0gPSBwYXJhZ3JhcGhTZXBhcmF0b3JdID0gXCJwYXJhZ3JhcGhTZXBhcmF0b3JcIjtcbn0pKGNoYXJDb2RlcyB8fCAoY2hhckNvZGVzID0ge30pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQoY29kZSkge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRilcbiAgKTtcbn1cbiIsICJpbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3Rva2VuaXplci9zdGF0ZVwiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuXG5leHBvcnQgbGV0IGlzSlNYRW5hYmxlZDtcbmV4cG9ydCBsZXQgaXNUeXBlU2NyaXB0RW5hYmxlZDtcbmV4cG9ydCBsZXQgaXNGbG93RW5hYmxlZDtcbmV4cG9ydCBsZXQgc3RhdGU7XG5leHBvcnQgbGV0IGlucHV0O1xuZXhwb3J0IGxldCBuZXh0Q29udGV4dElkO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENvbnRleHRJZCgpIHtcbiAgcmV0dXJuIG5leHRDb250ZXh0SWQrKztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50RXJyb3IoZXJyb3IpIHtcbiAgaWYgKFwicG9zXCIgaW4gZXJyb3IpIHtcbiAgICBjb25zdCBsb2MgPSBsb2NhdGlvbkZvckluZGV4KGVycm9yLnBvcyk7XG4gICAgZXJyb3IubWVzc2FnZSArPSBgICgke2xvYy5saW5lfToke2xvYy5jb2x1bW59KWA7XG4gICAgZXJyb3IubG9jID0gbG9jO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGNsYXNzIExvYyB7XG4gIFxuICBcbiAgY29uc3RydWN0b3IobGluZSwgY29sdW1uKSB7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb25Gb3JJbmRleChwb3MpIHtcbiAgbGV0IGxpbmUgPSAxO1xuICBsZXQgY29sdW1uID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3M7IGkrKykge1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpID09PSBjaGFyQ29kZXMubGluZUZlZWQpIHtcbiAgICAgIGxpbmUrKztcbiAgICAgIGNvbHVtbiA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbisrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvYyhsaW5lLCBjb2x1bW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFBhcnNlcihcbiAgaW5wdXRDb2RlLFxuICBpc0pTWEVuYWJsZWRBcmcsXG4gIGlzVHlwZVNjcmlwdEVuYWJsZWRBcmcsXG4gIGlzRmxvd0VuYWJsZWRBcmcsXG4pIHtcbiAgaW5wdXQgPSBpbnB1dENvZGU7XG4gIHN0YXRlID0gbmV3IFN0YXRlKCk7XG4gIG5leHRDb250ZXh0SWQgPSAxO1xuICBpc0pTWEVuYWJsZWQgPSBpc0pTWEVuYWJsZWRBcmc7XG4gIGlzVHlwZVNjcmlwdEVuYWJsZWQgPSBpc1R5cGVTY3JpcHRFbmFibGVkQXJnO1xuICBpc0Zsb3dFbmFibGVkID0gaXNGbG93RW5hYmxlZEFyZztcbn1cbiIsICJpbXBvcnQge2VhdCwgZmluaXNoVG9rZW4sIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLCBtYXRjaCwgbmV4dFRva2VuU3RhcnR9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcblxuaW1wb3J0IHtmb3JtYXRUb2tlblR5cGUsIFRva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtpbnB1dCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcblxuLy8gIyMgUGFyc2VyIHV0aWxpdGllc1xuXG4vLyBUZXN0cyB3aGV0aGVyIHBhcnNlZCB0b2tlbiBpcyBhIGNvbnRleHR1YWwga2V5d29yZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9va2FoZWFkQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBsID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgcmV0dXJuIGwudHlwZSA9PT0gdHQubmFtZSAmJiBsLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZDtcbn1cblxuLy8gQ29uc3VtZXMgY29udGV4dHVhbCBrZXl3b3JkIGlmIHBvc3NpYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIGVhdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZCAmJiBlYXQodHQubmFtZSk7XG59XG5cbi8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKCFlYXRDb250ZXh0dWFsKGNvbnRleHR1YWxLZXl3b3JkKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGNhbkluc2VydFNlbWljb2xvbigpIHtcbiAgcmV0dXJuIG1hdGNoKHR0LmVvZikgfHwgbWF0Y2godHQuYnJhY2VSKSB8fCBoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgcHJldlRva2VuID0gc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdFRva0VuZCA9IHByZXZUb2tlbiA/IHByZXZUb2tlbi5lbmQgOiAwO1xuICBmb3IgKGxldCBpID0gbGFzdFRva0VuZDsgaSA8IHN0YXRlLnN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjaGFyQ29kZXMubGluZUZlZWQgfHxcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybiB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI4IHx8XG4gICAgICBjb2RlID09PSAweDIwMjlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb2xsb3dpbmdMaW5lQnJlYWsoKSB7XG4gIGNvbnN0IG5leHRTdGFydCA9IG5leHRUb2tlblN0YXJ0KCk7XG4gIGZvciAobGV0IGkgPSBzdGF0ZS5lbmQ7IGkgPCBuZXh0U3RhcnQ7IGkrKykge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gY2hhckNvZGVzLmNhcnJpYWdlUmV0dXJuIHx8XG4gICAgICBjb2RlID09PSAweDIwMjggfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoKSB7XG4gIHJldHVybiBlYXQodHQuc2VtaSkgfHwgY2FuSW5zZXJ0U2VtaWNvbG9uKCk7XG59XG5cbi8vIENvbnN1bWUgYSBzZW1pY29sb24sIG9yLCBmYWlsaW5nIHRoYXQsIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0b1xuLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNvbG9uIGF0IHRoaXMgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gc2VtaWNvbG9uKCkge1xuICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoKSkge1xuICAgIHVuZXhwZWN0ZWQoJ1VuZXhwZWN0ZWQgdG9rZW4sIGV4cGVjdGVkIFwiO1wiJyk7XG4gIH1cbn1cblxuLy8gRXhwZWN0IGEgdG9rZW4gb2YgYSBnaXZlbiB0eXBlLiBJZiBmb3VuZCwgY29uc3VtZSBpdCwgb3RoZXJ3aXNlLFxuLy8gcmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvciBhdCBnaXZlbiBwb3MuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KHR5cGUpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IGVhdCh0eXBlKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgdW5leHBlY3RlZChgVW5leHBlY3RlZCB0b2tlbiwgZXhwZWN0ZWQgXCIke2Zvcm1hdFRva2VuVHlwZSh0eXBlKX1cImApO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNpdGlvbiB0aGUgcGFyc2VyIHRvIGFuIGVycm9yIHN0YXRlLiBBbGwgY29kZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIG5hdHVyYWxseSB1bndpbmQgaW4gdGhpc1xuICogc3RhdGUsIHdoaWNoIGFsbG93cyB1cyB0byBiYWNrdHJhY2sgd2l0aG91dCBleGNlcHRpb25zIGFuZCB3aXRob3V0IGVycm9yIHBsdW1iaW5nIGV2ZXJ5d2hlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmV4cGVjdGVkKG1lc3NhZ2UgPSBcIlVuZXhwZWN0ZWQgdG9rZW5cIiwgcG9zID0gc3RhdGUuc3RhcnQpIHtcbiAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKTtcbiAgZXJyLnBvcyA9IHBvcztcbiAgc3RhdGUuZXJyb3IgPSBlcnI7XG4gIHN0YXRlLnBvcyA9IGlucHV0Lmxlbmd0aDtcbiAgZmluaXNoVG9rZW4odHQuZW9mKTtcbn1cbiIsICJpbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vY2hhcmNvZGVzXCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdoaXRlLXNwYWNlXG5leHBvcnQgY29uc3QgV0hJVEVTUEFDRV9DSEFSUyA9IFtcbiAgMHgwMDA5LFxuICAweDAwMGIsXG4gIDB4MDAwYyxcbiAgY2hhckNvZGVzLnNwYWNlLFxuICBjaGFyQ29kZXMubm9uQnJlYWtpbmdTcGFjZSxcbiAgY2hhckNvZGVzLm9naGFtU3BhY2VNYXJrLFxuICAweDIwMDAsIC8vIEVOIFFVQURcbiAgMHgyMDAxLCAvLyBFTSBRVUFEXG4gIDB4MjAwMiwgLy8gRU4gU1BBQ0VcbiAgMHgyMDAzLCAvLyBFTSBTUEFDRVxuICAweDIwMDQsIC8vIFRIUkVFLVBFUi1FTSBTUEFDRVxuICAweDIwMDUsIC8vIEZPVVItUEVSLUVNIFNQQUNFXG4gIDB4MjAwNiwgLy8gU0lYLVBFUi1FTSBTUEFDRVxuICAweDIwMDcsIC8vIEZJR1VSRSBTUEFDRVxuICAweDIwMDgsIC8vIFBVTkNUVUFUSU9OIFNQQUNFXG4gIDB4MjAwOSwgLy8gVEhJTiBTUEFDRVxuICAweDIwMGEsIC8vIEhBSVIgU1BBQ0VcbiAgMHgyMDJmLCAvLyBOQVJST1cgTk8tQlJFQUsgU1BBQ0VcbiAgMHgyMDVmLCAvLyBNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFXG4gIDB4MzAwMCwgLy8gSURFT0dSQVBISUMgU1BBQ0VcbiAgMHhmZWZmLCAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5dO1xuXG5leHBvcnQgY29uc3Qgc2tpcFdoaXRlU3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qfFxcL1xcKlteXSo/XFwqXFwvKSovZztcblxuZXhwb3J0IGNvbnN0IElTX1dISVRFU1BBQ0UgPSBuZXcgVWludDhBcnJheSg2NTUzNik7XG5mb3IgKGNvbnN0IGNoYXIgb2YgV0hJVEVTUEFDRV9DSEFSUykge1xuICBJU19XSElURVNQQUNFW2NoYXJdID0gMTtcbn1cbiIsICJpbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vY2hhcmNvZGVzXCI7XG5pbXBvcnQge1dISVRFU1BBQ0VfQ0hBUlN9IGZyb20gXCIuL3doaXRlc3BhY2VcIjtcblxuZnVuY3Rpb24gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoY29kZSkge1xuICBpZiAoY29kZSA8IDQ4KSByZXR1cm4gY29kZSA9PT0gMzY7XG4gIGlmIChjb2RlIDwgNTgpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7XG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTU7XG4gIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGNvZGUgPCAxMjgpIHJldHVybiBmYWxzZTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBub24tQVNDSUkgY2hhciBjb2RlLlwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IElTX0lERU5USUZJRVJfQ0hBUiA9IG5ldyBVaW50OEFycmF5KDY1NTM2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMTI4OyBpKyspIHtcbiAgSVNfSURFTlRJRklFUl9DSEFSW2ldID0gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoaSkgPyAxIDogMDtcbn1cbmZvciAobGV0IGkgPSAxMjg7IGkgPCA2NTUzNjsgaSsrKSB7XG4gIElTX0lERU5USUZJRVJfQ0hBUltpXSA9IDE7XG59XG4vLyBBc2lkZSBmcm9tIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzLCBhbGwgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBBU0NJSSBzcGFjZSBhcmUgZWl0aGVyXG4vLyBpZGVudGlmaWVyIGNoYXJhY3RlcnMgb3IgaW52YWxpZC4gU2luY2Ugd2UncmUgbm90IHBlcmZvcm1pbmcgY29kZSB2YWxpZGF0aW9uLCB3ZSBjYW4ganVzdFxuLy8gdHJlYXQgYWxsIGludmFsaWQgY2hhcmFjdGVycyBhcyBpZGVudGlmaWVyIGNoYXJhY3RlcnMuXG5mb3IgKGNvbnN0IHdoaXRlc3BhY2VDaGFyIG9mIFdISVRFU1BBQ0VfQ0hBUlMpIHtcbiAgSVNfSURFTlRJRklFUl9DSEFSW3doaXRlc3BhY2VDaGFyXSA9IDA7XG59XG5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI4XSA9IDA7XG5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI5XSA9IDA7XG5cbmV4cG9ydCBjb25zdCBJU19JREVOVElGSUVSX1NUQVJUID0gSVNfSURFTlRJRklFUl9DSEFSLnNsaWNlKCk7XG5mb3IgKGxldCBudW1DaGFyID0gY2hhckNvZGVzLmRpZ2l0MDsgbnVtQ2hhciA8PSBjaGFyQ29kZXMuZGlnaXQ5OyBudW1DaGFyKyspIHtcbiAgSVNfSURFTlRJRklFUl9TVEFSVFtudW1DaGFyXSA9IDA7XG59XG4iLCAiLy8gR2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0ISBSdW4gXCJ5YXJuIGdlbmVyYXRlXCIgdG8gcmUtZ2VuZXJhdGUgdGhpcyBmaWxlLlxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4va2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBSRUFEX1dPUkRfVFJFRSA9IG5ldyBJbnQzMkFycmF5KFtcbiAgLy8gXCJcIlxuICAtMSwgMjcsIDc4MywgOTE4LCAxNzU1LCAyMzc2LCAyODYyLCAzNDgzLCAtMSwgMzY5OSwgLTEsIDQ2MTcsIDQ3NTIsIDQ4MzMsIDUxMzAsIDU1MDgsIDU5NDAsIC0xLCA2NDgwLCA2OTM5LCA3NzQ5LCA4MTgxLCA4NDUxLCA4NjEzLCAtMSwgODgyOSwgLTEsXG4gIC8vIFwiYVwiXG4gIC0xLCAtMSwgNTQsIDI0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDMyLCAtMSwgLTEsIC0xLCA2NzUsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTA4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYnN0clwiXG4gIC0xLCAxNjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYVwiXG4gIC0xLCAtMSwgLTEsIDE4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYnN0cmFjdFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNcIlxuICAtMSwgLTEsIC0xLCAyNzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNzb3JcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fYWNjZXNzb3IgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2FzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ1OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1OTQsIC0xLFxuICAvLyBcImFzc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDg2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VydFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlcnRzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydHMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzeVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzeW5cIlxuICAtMSwgLTEsIC0xLCA2NDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3luY1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXdcIlxuICAtMSwgNzAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3NTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXdhaXRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZVwiXG4gIC0xLCA4NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZWFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJicmVha1wiXG4gICh0dC5fYnJlYWsgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY1wiXG4gIC0xLCA5NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDExMDcsIC0xLCAtMSwgLTEsIDEyNDIsIC0xLCAtMSwgMTM1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDk3MiwgMTAyNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDk5OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXNlXCJcbiAgKHR0Ll9jYXNlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhdFwiXG4gIC0xLCAtMSwgLTEsIDEwNTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMDgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhdGNoXCJcbiAgKHR0Ll9jYXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVcIlxuICAtMSwgLTEsIC0xLCAxMTYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2hlY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTE4OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMjE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja3NcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fY2hlY2tzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbFwiXG4gIC0xLCAxMjY5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTI5NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMzIzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbGFzc1wiXG4gICh0dC5fY2xhc3MgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0MDQsIDE2MjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdFwiXG4gICh0dC5fY29uc3QgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0NTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNDg1LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc3RydVwiXG4gIC0xLCAtMSwgLTEsIDE1MTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTUzOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNTY2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc3RydWN0b1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE1OTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RvclwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE2NDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTY3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udGludVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTcyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW51ZVwiXG4gICh0dC5fY29udGludWUgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTc4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjM0OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlXCJcbiAgLTEsIC0xLCAxODA5LCAxOTcxLCAtMSwgLTEsIDIxMDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjI0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4MzYsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWJ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4NjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4OTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTkxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWJ1Z2dlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTk0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ2VyXCJcbiAgKHR0Ll9kZWJ1Z2dlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTk4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbFwiXG4gIC0xLCAyMDI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNsYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIwNTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNsYXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIwNzksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFyZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZcIlxuICAtMSwgMjEzMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVmYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxNjAsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxODcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyMTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVmYXVsdFwiXG4gICh0dC5fZGVmYXVsdCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyNjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjI5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxldFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjMyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxldGVcIlxuICAodHQuX2RlbGV0ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkb1wiXG4gICh0dC5fZG8gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI0MDMsIC0xLCAyNDg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTY1LCAtMSwgLTEsXG4gIC8vIFwiZWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjQzMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZWxzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNDU3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVsc2VcIlxuICAodHQuX2Vsc2UgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTExLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZW51XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI1MzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVudW1cIlxuICBDb250ZXh0dWFsS2V5d29yZC5fZW51bSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjU5MiwgLTEsIC0xLCAtMSwgMjcyNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNjE5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXhwb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI2NDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjY3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvcnRcIlxuICAodHQuX2V4cG9ydCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9ydHNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNzU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4dGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3ODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgMjgwOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5kXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI4MzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4dGVuZHNcIlxuICAodHQuX2V4dGVuZHMgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZlwiXG4gIC0xLCAyODg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMTU5LCAtMSwgLTEsIDMyMTMsIC0xLCAtMSwgMzI5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjkxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyOTQzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyOTcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhbHNlXCJcbiAgKHR0Ll9mYWxzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzAyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5cIlxuICAtMSwgMzA1MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmluYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMwNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxMDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzEzMiwgLTEsXG4gIC8vIFwiZmluYWxseVwiXG4gICh0dC5fZmluYWxseSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmb3JcIlxuICAodHQuX2ZvciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmcm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzI2NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJvbVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzMyMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5cIlxuICAtMSwgLTEsIC0xLCAzMzQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnVuY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzM3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM0MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNDI5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnVuY3Rpb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzQ1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlvblwiXG4gICh0dC5fZnVuY3Rpb24gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzU2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNTM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdldFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9nZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzU5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb1wiXG4gIC0xLCAtMSwgMzYxOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnbG9iXCJcbiAgLTEsIDM2NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzY3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JhbFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzUzLCA0MDc3LCAtMSwgLTEsIC0xLCAtMSwgNDU5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaWZcIlxuICAodHQuX2lmIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM3ODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4MDcsIC0xLCAtMSwgMzk5NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4MzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzg2MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAzODg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxlbWVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW50XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5NjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxlbWVudHNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQwMjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvcnRcIlxuICAodHQuX2ltcG9ydCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpblwiXG4gICh0dC5faW4gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQxMDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQxODUsIDQ0MDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5mXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTMxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZmVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTU4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5mZXJcIlxuICBDb250ZXh0dWFsS2V5d29yZC5faW5mZXIgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDIxMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0XCJcbiAgLTEsIDQyMzksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MjY2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhblwiXG4gIC0xLCAtMSwgLTEsIDQyOTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0YW5jXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDM0NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQzNzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0YW5jZW9mXCJcbiAgKHR0Ll9pbnN0YW5jZW9mIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQ1NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQ4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZlwiXG4gIC0xLCA0NTA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhXCJcbiAgLTEsIC0xLCAtMSwgNDUzNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZmFjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NTYzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZmFjZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2lzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NjQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2NzEsIC0xLFxuICAvLyBcImtleVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2OTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrZXlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDcyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtleW9mXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2tleW9mIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0Nzc5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImxlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODA2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImxldFwiXG4gICh0dC5fbGV0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ5OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ4ODcsIC0xLCAtMSxcbiAgLy8gXCJtaXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTE0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibWl4aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDk0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpbnNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbWl4aW5zIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCA1MDIyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MDQ5LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUwNzYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2R1bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTEwMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2R1bGVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuXCJcbiAgLTEsIDUxNTcsIC0xLCAtMSwgLTEsIDUzNzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0MjcsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MTg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyMTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibmFtZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MjM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MjY1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BcIlxuICAtMSwgNTI5MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibmFtZXNwYVwiXG4gIC0xLCAtMSwgLTEsIDUzMTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTM0NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhY2VcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwMCwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZXdcIlxuICAodHQuX25ldyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0NTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NDgxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibnVsbFwiXG4gICh0dC5fbnVsbCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTUzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTU2MiwgLTEsIC0xLCAtMSwgLTEsIDU2OTcsIDU3NTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9mXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX29mIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcFwiXG4gIC0xLCA1NTg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU2MTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3BhcVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU2NDMsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxdWVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTcyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdXRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fb3V0IDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTc3OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU4MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVyclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU4NTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVycmlcIlxuICAtMSwgLTEsIC0xLCAtMSwgNTg4NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpZFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTkxMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVycmlkZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9vdmVycmlkZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5NjcsIC0xLCAtMSwgNjM0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTk5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTI5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYwMjEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByaXZcIlxuICAtMSwgNjA0OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYwNzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByaXZhdGVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByb3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxODMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYzMTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZVwiXG4gIC0xLCAtMSwgLTEsIDYyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdGVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjI2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCA2MjkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZWRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90b1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9wcm90byA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVcIlxuICAtMSwgLTEsIDYzNzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHViXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjM5OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInB1YmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NDI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibGlcIlxuICAtMSwgLTEsIC0xLCA2NDUzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibGljXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjUwNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZVwiXG4gIC0xLCA2NTM0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Njk2LCAtMSwgLTEsIDY4MzEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDY1NjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NTg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY2MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRvbmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY2OSwgLTEsXG4gIC8vIFwicmVhZG9ubHlcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3MjMsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjc1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcXVpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjc3NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcXVpclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjgwNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aXJlXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3JlcXVpcmUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY4NTgsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXR1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjg4NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2OTEyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVyblwiXG4gICh0dC5fcmV0dXJuIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNcIlxuICAtMSwgNjk2NiwgLTEsIC0xLCAtMSwgNzE4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjM2LCA3MzcxLCAtMSwgNzQ3OSwgLTEsIDc2MTQsIC0xLFxuICAvLyBcInNhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2OTkzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwNDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzA3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcxMDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTI4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZmllXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcxNTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZmllc1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zYXRpc2ZpZXMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNldFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0XCJcbiAgLTEsIDcyNjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdGF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzMxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpXCJcbiAgLTEsIC0xLCAtMSwgNzM0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpY1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zdGF0aWMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDczOTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzQyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzQ1MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1cGVyXCJcbiAgKHR0Ll9zdXBlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3dpdFwiXG4gIC0xLCAtMSwgLTEsIDc1NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzU4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y2hcIlxuICAodHQuX3N3aXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3NjQxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1cIlxuICAtMSwgLTEsIDc2NjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3ltYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc2OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1ib1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc3MjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1ib2xcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fc3ltYm9sIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Nzc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MDQ2LCAtMSxcbiAgLy8gXCJ0aFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4MDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3ODMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aGlzXCJcbiAgKHR0Ll90aGlzIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTExLCAtMSwgLTEsIC0xLFxuICAvLyBcInRocm93XCJcbiAgKHR0Ll90aHJvdyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0clwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5NjUsIC0xLCAtMSwgLTEsIDgwMTksIC0xLFxuICAvLyBcInRydVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzk5MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0cnVlXCJcbiAgKHR0Ll90cnVlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRyeVwiXG4gICh0dC5fdHJ5IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDgwNzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODEwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0eXBlXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3R5cGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9mXCJcbiAgKHR0Ll90eXBlb2YgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODIwOCwgLTEsIC0xLCAtMSwgLTEsIDgzNDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODIzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODI2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1bmlxXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODI4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MzE2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXF1ZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl91bmlxdWUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1c2luXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg0MjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaW5nXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ2XCJcbiAgLTEsIDg0NzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidmFyXCJcbiAgKHR0Ll92YXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg1ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZvaWRcIlxuICAodHQuX3ZvaWQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY0MCwgODc0OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY2NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg2OTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aGlsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NzIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaWxlXCJcbiAgKHR0Ll93aGlsZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODc3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg4MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2l0aFwiXG4gICh0dC5fd2l0aCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODg1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODgzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5aWVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg5MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZWxkXCJcbiAgKHR0Ll95aWVsZCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbl0pO1xuIiwgImltcG9ydCB7aW5wdXQsIHN0YXRlfSBmcm9tIFwiLi4vdHJhdmVyc2VyL2Jhc2VcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7SVNfSURFTlRJRklFUl9DSEFSfSBmcm9tIFwiLi4vdXRpbC9pZGVudGlmaWVyXCI7XG5pbXBvcnQge2ZpbmlzaFRva2VufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtSRUFEX1dPUkRfVFJFRX0gZnJvbSBcIi4vcmVhZFdvcmRUcmVlXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBSZWFkIGFuIGlkZW50aWZpZXIsIHByb2R1Y2luZyBlaXRoZXIgYSBuYW1lIHRva2VuIG9yIG1hdGNoaW5nIG9uIG9uZSBvZiB0aGUgZXhpc3Rpbmcga2V5d29yZHMuXG4gKiBGb3IgcGVyZm9ybWFuY2UsIHdlIHByZS1nZW5lcmF0ZSBiaWcgZGVjaXNpb24gdHJlZSB0aGF0IHdlIHRyYXZlcnNlLiBFYWNoIG5vZGUgcmVwcmVzZW50cyBhXG4gKiBwcmVmaXggYW5kIGhhcyAyNyB2YWx1ZXMsIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgdG9rZW4gb3IgY29udGV4dHVhbCB0b2tlbiwgaWYgYW55ICgtMSBpZlxuICogbm90KSwgYW5kIHRoZSBvdGhlciAyNiB2YWx1ZXMgYXJlIHRoZSB0cmFuc2l0aW9ucyB0byBvdGhlciBub2Rlcywgb3IgLTEgdG8gc3RvcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZFdvcmQoKSB7XG4gIGxldCB0cmVlUG9zID0gMDtcbiAgbGV0IGNvZGUgPSAwO1xuICBsZXQgcG9zID0gc3RhdGUucG9zO1xuICB3aGlsZSAocG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgY29kZSA9IGlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoY29kZSA8IGNoYXJDb2Rlcy5sb3dlcmNhc2VBIHx8IGNvZGUgPiBjaGFyQ29kZXMubG93ZXJjYXNlWikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSBSRUFEX1dPUkRfVFJFRVt0cmVlUG9zICsgKGNvZGUgLSBjaGFyQ29kZXMubG93ZXJjYXNlQSkgKyAxXTtcbiAgICBpZiAobmV4dCA9PT0gLTEpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlUG9zID0gbmV4dDtcbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtleXdvcmRWYWx1ZSA9IFJFQURfV09SRF9UUkVFW3RyZWVQb3NdO1xuICBpZiAoa2V5d29yZFZhbHVlID4gLTEgJiYgIUlTX0lERU5USUZJRVJfQ0hBUltjb2RlXSkge1xuICAgIHN0YXRlLnBvcyA9IHBvcztcbiAgICBpZiAoa2V5d29yZFZhbHVlICYgMSkge1xuICAgICAgZmluaXNoVG9rZW4oa2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluaXNoVG9rZW4odHQubmFtZSwga2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKHBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChwb3MpO1xuICAgIGlmIChJU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBwb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKSB7XG4gICAgICAgIHdoaWxlIChwb3MgPCBpbnB1dC5sZW5ndGggJiYgaW5wdXQuY2hhckNvZGVBdChwb3MpICE9PSBjaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlKSB7XG4gICAgICAgICAgcG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgcG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gY2hhckNvZGVzLmF0U2lnbiAmJiBpbnB1dC5jaGFyQ29kZUF0KHBvcyArIDEpID09PSBjaGFyQ29kZXMuYXRTaWduKSB7XG4gICAgICBwb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YXRlLnBvcyA9IHBvcztcbiAgZmluaXNoVG9rZW4odHQubmFtZSk7XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuaW1wb3J0IHtpbnB1dCwgaXNGbG93RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHt1bmV4cGVjdGVkfSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7SVNfSURFTlRJRklFUl9DSEFSLCBJU19JREVOVElGSUVSX1NUQVJUfSBmcm9tIFwiLi4vdXRpbC9pZGVudGlmaWVyXCI7XG5pbXBvcnQge0lTX1dISVRFU1BBQ0UsIHNraXBXaGl0ZVNwYWNlfSBmcm9tIFwiLi4vdXRpbC93aGl0ZXNwYWNlXCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi9rZXl3b3Jkc1wiO1xuaW1wb3J0IHJlYWRXb3JkIGZyb20gXCIuL3JlYWRXb3JkXCI7XG5pbXBvcnQgeyBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCB2YXIgSWRlbnRpZmllclJvbGU7IChmdW5jdGlvbiAoSWRlbnRpZmllclJvbGUpIHtcbiAgY29uc3QgQWNjZXNzID0gMDsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJBY2Nlc3NcIl0gPSBBY2Nlc3NdID0gXCJBY2Nlc3NcIjtcbiAgY29uc3QgRXhwb3J0QWNjZXNzID0gQWNjZXNzICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJFeHBvcnRBY2Nlc3NcIl0gPSBFeHBvcnRBY2Nlc3NdID0gXCJFeHBvcnRBY2Nlc3NcIjtcbiAgY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbiA9IEV4cG9ydEFjY2VzcyArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiVG9wTGV2ZWxEZWNsYXJhdGlvblwiXSA9IFRvcExldmVsRGVjbGFyYXRpb25dID0gXCJUb3BMZXZlbERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gPSBUb3BMZXZlbERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCJdID0gRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbl0gPSBcIkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgQmxvY2tTY29wZWREZWNsYXJhdGlvbiA9IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIkJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIl0gPSBCbG9ja1Njb3BlZERlY2xhcmF0aW9uXSA9IFwiQmxvY2tTY29wZWREZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uID0gQmxvY2tTY29wZWREZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvblwiXSA9IE9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb25dID0gXCJPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gPSBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCJdID0gT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbl0gPSBcIk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiA9IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIl0gPSBPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXSA9IFwiT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmQgPSBPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRcIl0gPSBPYmplY3RTaG9ydGhhbmRdID0gXCJPYmplY3RTaG9ydGhhbmRcIjtcbiAgLy8gQW55IGlkZW50aWZpZXIgYm91bmQgaW4gYW4gaW1wb3J0IHN0YXRlbWVudCwgZS5nLiBib3RoIEEgYW5kIGIgZnJvbVxuICAvLyBgaW1wb3J0IEEsICogYXMgYiBmcm9tICdBJztgXG4gIGNvbnN0IEltcG9ydERlY2xhcmF0aW9uID0gT2JqZWN0U2hvcnRoYW5kICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJJbXBvcnREZWNsYXJhdGlvblwiXSA9IEltcG9ydERlY2xhcmF0aW9uXSA9IFwiSW1wb3J0RGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0S2V5ID0gSW1wb3J0RGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdEtleVwiXSA9IE9iamVjdEtleV0gPSBcIk9iamVjdEtleVwiO1xuICAvLyBUaGUgYGZvb2AgaW4gYGltcG9ydCB7Zm9vIGFzIGJhcn0gZnJvbSBcIi4vYWJjXCI7YC5cbiAgY29uc3QgSW1wb3J0QWNjZXNzID0gT2JqZWN0S2V5ICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJJbXBvcnRBY2Nlc3NcIl0gPSBJbXBvcnRBY2Nlc3NdID0gXCJJbXBvcnRBY2Nlc3NcIjtcbn0pKElkZW50aWZpZXJSb2xlIHx8IChJZGVudGlmaWVyUm9sZSA9IHt9KSk7XG5cbi8qKlxuICogRXh0cmEgaW5mb3JtYXRpb24gb24ganN4VGFnU3RhcnQgdG9rZW5zLCB1c2VkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdGhyZWVcbiAqIGpzeCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgYXV0b21hdGljIHRyYW5zZm9ybS5cbiAqL1xuZXhwb3J0IHZhciBKU1hSb2xlOyAoZnVuY3Rpb24gKEpTWFJvbGUpIHtcbiAgLy8gVGhlIGVsZW1lbnQgaXMgc2VsZi1jbG9zaW5nIG9yIGhhcyBhIGJvZHkgdGhhdCByZXNvbHZlcyB0byBlbXB0eS4gV2VcbiAgLy8gc2hvdWxkbid0IGVtaXQgY2hpbGRyZW4gYXQgYWxsIGluIHRoaXMgY2FzZS5cbiAgY29uc3QgTm9DaGlsZHJlbiA9IDA7IEpTWFJvbGVbSlNYUm9sZVtcIk5vQ2hpbGRyZW5cIl0gPSBOb0NoaWxkcmVuXSA9IFwiTm9DaGlsZHJlblwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYSBzaW5nbGUgZXhwbGljaXQgY2hpbGQsIHdoaWNoIG1pZ2h0IHN0aWxsIGJlIGFuIGFyYml0cmFyeVxuICAvLyBleHByZXNzaW9uIGxpa2UgYW4gYXJyYXkuIFdlIHNob3VsZCBlbWl0IHRoYXQgZXhwcmVzc2lvbiBhcyB0aGUgY2hpbGRyZW4uXG4gIGNvbnN0IE9uZUNoaWxkID0gTm9DaGlsZHJlbiArIDE7IEpTWFJvbGVbSlNYUm9sZVtcIk9uZUNoaWxkXCJdID0gT25lQ2hpbGRdID0gXCJPbmVDaGlsZFwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYXQgbGVhc3QgdHdvIGV4cGxpY2l0bHktc3BlY2lmaWVkIGNoaWxkcmVuIG9yIGhhcyBzcHJlYWRcbiAgLy8gY2hpbGRyZW4sIHNvIGNoaWxkIHBvc2l0aW9ucyBhcmUgYXNzdW1lZCB0byBiZSBcInN0YXRpY1wiLiBXZSBzaG91bGQgd3JhcFxuICAvLyB0aGVzZSBjaGlsZHJlbiBpbiBhbiBhcnJheS5cbiAgY29uc3QgU3RhdGljQ2hpbGRyZW4gPSBPbmVDaGlsZCArIDE7IEpTWFJvbGVbSlNYUm9sZVtcIlN0YXRpY0NoaWxkcmVuXCJdID0gU3RhdGljQ2hpbGRyZW5dID0gXCJTdGF0aWNDaGlsZHJlblwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYSBwcm9wIG5hbWVkIFwia2V5XCIgYWZ0ZXIgYSBwcm9wIHNwcmVhZCwgc28gd2Ugc2hvdWxkIGZhbGxcbiAgLy8gYmFjayB0byB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbi5cbiAgY29uc3QgS2V5QWZ0ZXJQcm9wU3ByZWFkID0gU3RhdGljQ2hpbGRyZW4gKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJLZXlBZnRlclByb3BTcHJlYWRcIl0gPSBLZXlBZnRlclByb3BTcHJlYWRdID0gXCJLZXlBZnRlclByb3BTcHJlYWRcIjtcbn0pKEpTWFJvbGUgfHwgKEpTWFJvbGUgPSB7fSkpO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWNsYXJhdGlvbih0b2tlbikge1xuICBjb25zdCByb2xlID0gdG9rZW4uaWRlbnRpZmllclJvbGU7XG4gIHJldHVybiAoXG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vblRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbikge1xuICBjb25zdCByb2xlID0gdG9rZW4uaWRlbnRpZmllclJvbGU7XG4gIHJldHVybiAoXG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvblxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgLy8gVHJlYXQgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyBhcyBibG9jayBzY29wZSBzaW5jZSB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0ZXIgaGVyZS5cbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIHJldHVybiAoXG4gICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbi8vIE9iamVjdCB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IHRva2Vucy4gTm90ZSB0aGF0IG5vcm1hbGx5LCB0b2tlbnNcbi8vIHNpbXBseSBleGlzdCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBwYXJzZXIgb2JqZWN0LiBUaGlzIGlzIG9ubHlcbi8vIHVzZWQgZm9yIHRoZSBvblRva2VuIGNhbGxiYWNrIGFuZCB0aGUgZXh0ZXJuYWwgdG9rZW5pemVyLlxuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50eXBlID0gc3RhdGUudHlwZTtcbiAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gICAgdGhpcy5zdGFydCA9IHN0YXRlLnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gc3RhdGUuZW5kO1xuICAgIHRoaXMuc2NvcGVEZXB0aCA9IHN0YXRlLnNjb3BlRGVwdGg7XG4gICAgdGhpcy5pc1R5cGUgPSBzdGF0ZS5pc1R5cGU7XG4gICAgdGhpcy5pZGVudGlmaWVyUm9sZSA9IG51bGw7XG4gICAgdGhpcy5qc3hSb2xlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRvd3NHbG9iYWwgPSBmYWxzZTtcbiAgICB0aGlzLmlzQXN5bmNPcGVyYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRleHRJZCA9IG51bGw7XG4gICAgdGhpcy5yaHNFbmRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5pc0V4cHJlc3Npb24gPSBmYWxzZTtcbiAgICB0aGlzLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cyA9IDA7XG4gICAgdGhpcy5udW1OdWxsaXNoQ29hbGVzY2VFbmRzID0gMDtcbiAgICB0aGlzLmlzT3B0aW9uYWxDaGFpblN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc09wdGlvbmFsQ2hhaW5FbmQgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBudWxsO1xuICAgIHRoaXMubnVsbGlzaFN0YXJ0SW5kZXggPSBudWxsO1xuICB9XG5cbiAgXG4gIFxuICBcbiAgXG4gIFxuICBcbiAgXG4gIFxuICAvLyBJbml0aWFsbHkgZmFsc2UgZm9yIGFsbCB0b2tlbnMsIHRoZW4gbWF5IGJlIGNvbXB1dGVkIGluIGEgZm9sbG93LXVwIHN0ZXAgdGhhdCBkb2VzIHNjb3BlXG4gIC8vIGFuYWx5c2lzLlxuICBcbiAgLy8gSW5pdGlhbGx5IGZhbHNlIGZvciBhbGwgdG9rZW5zLCBidXQgbWF5IGJlIHNldCBkdXJpbmcgdHJhbnNmb3JtIHRvIG1hcmsgaXQgYXMgY29udGFpbmluZyBhblxuICAvLyBhd2FpdCBvcGVyYXRpb24uXG4gIFxuICBcbiAgLy8gRm9yIGFzc2lnbm1lbnRzLCB0aGUgaW5kZXggb2YgdGhlIFJIUy4gRm9yIGV4cG9ydCB0b2tlbnMsIHRoZSBlbmQgb2YgdGhlIGV4cG9ydC5cbiAgXG4gIC8vIEZvciBjbGFzcyB0b2tlbnMsIHJlY29yZHMgaWYgdGhlIGNsYXNzIGlzIGEgY2xhc3MgZXhwcmVzc2lvbiBvciBhIGNsYXNzIHN0YXRlbWVudC5cbiAgXG4gIC8vIE51bWJlciBvZiB0aW1lcyB0byBpbnNlcnQgYSBgbnVsbGlzaENvYWxlc2NlKGAgc25pcHBldCBiZWZvcmUgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIE51bWJlciBvZiB0aW1lcyB0byBpbnNlcnQgYSBgKWAgc25pcHBldCBhZnRlciB0aGlzIHRva2VuLlxuICBcbiAgLy8gSWYgdHJ1ZSwgaW5zZXJ0IGFuIGBvcHRpb25hbENoYWluKFtgIHNuaXBwZXQgYmVmb3JlIHRoaXMgdG9rZW4uXG4gIFxuICAvLyBJZiB0cnVlLCBpbnNlcnQgYSBgXSlgIHNuaXBwZXQgYWZ0ZXIgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIFRhZyBmb3IgYC5gLCBgPy5gLCBgW2AsIGA/LltgLCBgKGAsIGFuZCBgPy4oYCB0byBkZW5vdGUgdGhlIFwicm9vdFwiIHRva2VuIGZvciB0aGlzXG4gIC8vIHN1YnNjcmlwdCBjaGFpbi4gVGhpcyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFpbiBpcyBhbiBvcHRpb25hbCBjaGFpbi5cbiAgXG4gIC8vIFRhZyBmb3IgYD8/YCBvcGVyYXRvcnMgdG8gZGVub3RlIHRoZSByb290IHRva2VuIGZvciB0aGlzIG51bGxpc2ggY29hbGVzY2luZyBjYWxsLlxuICBcbn1cblxuLy8gIyMgVG9rZW5pemVyXG5cbi8vIE1vdmUgdG8gdGhlIG5leHQgdG9rZW5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0KCkge1xuICBzdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIG5leHRUb2tlbigpO1xufVxuXG4vLyBDYWxsIGluc3RlYWQgb2YgbmV4dCB3aGVuIGluc2lkZSBhIHRlbXBsYXRlLCBzaW5jZSB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFRlbXBsYXRlVG9rZW4oKSB7XG4gIHN0YXRlLnRva2Vucy5wdXNoKG5ldyBUb2tlbigpKTtcbiAgc3RhdGUuc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHJlYWRUbXBsVG9rZW4oKTtcbn1cblxuLy8gVGhlIHRva2VuaXplciBuZXZlciBwYXJzZXMgcmVnZXhlcyBieSBkZWZhdWx0LiBJbnN0ZWFkLCB0aGUgcGFyc2VyIGlzIHJlc3BvbnNpYmxlIGZvclxuLy8gaW5zdHJ1Y3RpbmcgaXQgdG8gcGFyc2UgYSByZWdleCB3aGVuIHdlIHNlZSBhIHNsYXNoIGF0IHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKSB7XG4gIGlmIChzdGF0ZS50eXBlID09PSB0dC5hc3NpZ24pIHtcbiAgICAtLXN0YXRlLnBvcztcbiAgfVxuICByZWFkUmVnZXhwKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoVHlwZUNvbnRleHQoZXhpc3RpbmdUb2tlbnNJblR5cGUpIHtcbiAgZm9yIChsZXQgaSA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSBleGlzdGluZ1Rva2Vuc0luVHlwZTsgaSA8IHN0YXRlLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHN0YXRlLnRva2Vuc1tpXS5pc1R5cGUgPSB0cnVlO1xuICB9XG4gIGNvbnN0IG9sZElzVHlwZSA9IHN0YXRlLmlzVHlwZTtcbiAgc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgcmV0dXJuIG9sZElzVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSkge1xuICBzdGF0ZS5pc1R5cGUgPSBvbGRJc1R5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXQodHlwZSkge1xuICBpZiAobWF0Y2godHlwZSkpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXRUeXBlVG9rZW4odG9rZW5UeXBlKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHN0YXRlLmlzVHlwZTtcbiAgc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgZWF0KHRva2VuVHlwZSk7XG4gIHN0YXRlLmlzVHlwZSA9IG9sZElzVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKHR5cGUpIHtcbiAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRUeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IHN0YXRlLnR5cGU7XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGNsYXNzIFR5cGVBbmRLZXl3b3JkIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRUeXBlQW5kS2V5d29yZCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBuZXh0KCk7XG4gIGNvbnN0IHR5cGUgPSBzdGF0ZS50eXBlO1xuICBjb25zdCBjb250ZXh0dWFsS2V5d29yZCA9IHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIG5ldyBUeXBlQW5kS2V5d29yZCh0eXBlLCBjb250ZXh0dWFsS2V5d29yZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VG9rZW5TdGFydCgpIHtcbiAgcmV0dXJuIG5leHRUb2tlblN0YXJ0U2luY2Uoc3RhdGUucG9zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRUb2tlblN0YXJ0U2luY2UocG9zKSB7XG4gIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHBvcztcbiAgY29uc3Qgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWMoaW5wdXQpO1xuICByZXR1cm4gcG9zICsgc2tpcFswXS5sZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRDaGFyQ29kZSgpIHtcbiAgcmV0dXJuIGlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnQoKSk7XG59XG5cbi8vIFJlYWQgYSBzaW5nbGUgdG9rZW4sIHVwZGF0aW5nIHRoZSBwYXJzZXIgb2JqZWN0J3MgdG9rZW4tcmVsYXRlZFxuLy8gcHJvcGVydGllcy5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VG9rZW4oKSB7XG4gIHNraXBTcGFjZSgpO1xuICBzdGF0ZS5zdGFydCA9IHN0YXRlLnBvcztcbiAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCB0b2tlbnMgPSBzdGF0ZS50b2tlbnM7XG4gICAgLy8gV2Ugbm9ybWFsbHkgcnVuIHBhc3QgdGhlIGVuZCBhIGJpdCwgYnV0IGlmIHdlJ3JlIHdheSBwYXN0IHRoZSBlbmQsIGF2b2lkIGFuIGluZmluaXRlIGxvb3AuXG4gICAgLy8gQWxzbyBjaGVjayB0aGUgdG9rZW4gcG9zaXRpb25zIHJhdGhlciB0aGFuIHRoZSB0eXBlcyBzaW5jZSBzb21ldGltZXMgd2UgcmV3cml0ZSB0aGUgdG9rZW5cbiAgICAvLyB0eXBlIHRvIHNvbWV0aGluZyBlbHNlLlxuICAgIGlmIChcbiAgICAgIHRva2Vucy5sZW5ndGggPj0gMiAmJlxuICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5zdGFydCA+PSBpbnB1dC5sZW5ndGggJiZcbiAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0uc3RhcnQgPj0gaW5wdXQubGVuZ3RoXG4gICAgKSB7XG4gICAgICB1bmV4cGVjdGVkKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgfVxuICAgIGZpbmlzaFRva2VuKHR0LmVvZik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlYWRUb2tlbihpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcykpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW4oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChcbiAgICBJU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8XG4gICAgY29kZSA9PT0gY2hhckNvZGVzLmJhY2tzbGFzaCB8fFxuICAgIChjb2RlID09PSBjaGFyQ29kZXMuYXRTaWduICYmIGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5hdFNpZ24pXG4gICkge1xuICAgIHJlYWRXb3JkKCk7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwQmxvY2tDb21tZW50KCkge1xuICB3aGlsZSAoXG4gICAgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpICE9PSBjaGFyQ29kZXMuYXN0ZXJpc2sgfHxcbiAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpICE9PSBjaGFyQ29kZXMuc2xhc2hcbiAgKSB7XG4gICAgc3RhdGUucG9zKys7XG4gICAgaWYgKHN0YXRlLnBvcyA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgdW5leHBlY3RlZChcIlVudGVybWluYXRlZCBjb21tZW50XCIsIHN0YXRlLnBvcyAtIDIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5wb3MgKz0gMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNraXBMaW5lQ29tbWVudChzdGFydFNraXApIHtcbiAgbGV0IGNoID0gaW5wdXQuY2hhckNvZGVBdCgoc3RhdGUucG9zICs9IHN0YXJ0U2tpcCkpO1xuICBpZiAoc3RhdGUucG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgd2hpbGUgKFxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5saW5lRmVlZCAmJlxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybiAmJlxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5saW5lU2VwYXJhdG9yICYmXG4gICAgICBjaCAhPT0gY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvciAmJlxuICAgICAgKytzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBhbmQgYWZ0ZXIgZXZlcnkgdG9rZW4uIFNraXBzXG4vLyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBza2lwU3BhY2UoKSB7XG4gIHdoaWxlIChzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlIGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybjpcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgICAgICsrc3RhdGUucG9zO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgY2hhckNvZGVzLmxpbmVGZWVkOlxuICAgICAgY2FzZSBjaGFyQ29kZXMubGluZVNlcGFyYXRvcjpcbiAgICAgIGNhc2UgY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvcjpcbiAgICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgc3dpdGNoIChpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpKSB7XG4gICAgICAgICAgY2FzZSBjaGFyQ29kZXMuYXN0ZXJpc2s6XG4gICAgICAgICAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICAgIHNraXBCbG9ja0NvbW1lbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjaGFyQ29kZXMuc2xhc2g6XG4gICAgICAgICAgICBza2lwTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChJU19XSElURVNQQUNFW2NoXSkge1xuICAgICAgICAgICsrc3RhdGUucG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0cyB2YXJpb3VzIGZpZWxkcywgYW5kIHNraXBzIHRoZSBzcGFjZSBhZnRlciB0aGUgdG9rZW4sIHNvXG4vLyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZmluaXNoVG9rZW4oXG4gIHR5cGUsXG4gIGNvbnRleHR1YWxLZXl3b3JkID0gQ29udGV4dHVhbEtleXdvcmQuTk9ORSxcbikge1xuICBzdGF0ZS5lbmQgPSBzdGF0ZS5wb3M7XG4gIHN0YXRlLnR5cGUgPSB0eXBlO1xuICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xufVxuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuZnVuY3Rpb24gcmVhZFRva2VuX2RvdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBuZXh0Q2hhciA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB7XG4gICAgcmVhZE51bWJlcih0cnVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5kb3QgJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKSA9PT0gY2hhckNvZGVzLmRvdCkge1xuICAgIHN0YXRlLnBvcyArPSAzO1xuICAgIGZpbmlzaFRva2VuKHR0LmVsbGlwc2lzKTtcbiAgfSBlbHNlIHtcbiAgICArK3N0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbih0dC5kb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9zbGFzaCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQuc2xhc2gsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKSB7XG4gIC8vICclKidcbiAgbGV0IHRva2VuVHlwZSA9IGNvZGUgPT09IGNoYXJDb2Rlcy5hc3RlcmlzayA/IHR0LnN0YXIgOiB0dC5tb2R1bG87XG4gIGxldCB3aWR0aCA9IDE7XG4gIGxldCBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSk7XG5cbiAgLy8gRXhwb25lbnRpYXRpb24gb3BlcmF0b3IgKipcbiAgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5hc3RlcmlzayAmJiBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmFzdGVyaXNrKSB7XG4gICAgd2lkdGgrKztcbiAgICBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMik7XG4gICAgdG9rZW5UeXBlID0gdHQuZXhwb25lbnQ7XG4gIH1cblxuICAvLyBNYXRjaCAqPSBvciAlPSwgZGlzYWxsb3dpbmcgKj0+IHdoaWNoIGNhbiBiZSB2YWxpZCBpbiBmbG93LlxuICBpZiAoXG4gICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbyAmJlxuICAgIGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgIT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhblxuICApIHtcbiAgICB3aWR0aCsrO1xuICAgIHRva2VuVHlwZSA9IHR0LmFzc2lnbjtcbiAgfVxuXG4gIGZpbmlzaE9wKHRva2VuVHlwZSwgd2lkdGgpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSkge1xuICAvLyAnfCYnXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKSA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgICAvLyB8fD0gb3IgJiY9XG4gICAgICBmaW5pc2hPcCh0dC5hc3NpZ24sIDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB8fCBvciAmJlxuICAgICAgZmluaXNoT3AoY29kZSA9PT0gY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gdHQubG9naWNhbE9SIDogdHQubG9naWNhbEFORCwgMik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb2RlID09PSBjaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAvLyAnfD4nXG4gICAgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIGZpbmlzaE9wKHR0LnBpcGVsaW5lLCAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlICYmIGlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIC8vICd8fSdcbiAgICAgIGZpbmlzaE9wKHR0LmJyYWNlQmFyUiwgMik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcCh0dC5hc3NpZ24sIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbmlzaE9wKGNvZGUgPT09IGNoYXJDb2Rlcy52ZXJ0aWNhbEJhciA/IHR0LmJpdHdpc2VPUiA6IHR0LmJpdHdpc2VBTkQsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fY2FyZXQoKSB7XG4gIC8vICdeJ1xuICBjb25zdCBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AodHQuYXNzaWduLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcCh0dC5iaXR3aXNlWE9SLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGx1c19taW4oY29kZSkge1xuICAvLyAnKy0nXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICAvLyBUZW50YXRpdmVseSBjYWxsIHRoaXMgYSBwcmVmaXggb3BlcmF0b3IsIGJ1dCBpdCBtaWdodCBiZSBjaGFuZ2VkIHRvIHBvc3RmaXggbGF0ZXIuXG4gICAgZmluaXNoT3AodHQucHJlSW5jRGVjLCAyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMik7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gY2hhckNvZGVzLnBsdXNTaWduKSB7XG4gICAgZmluaXNoT3AodHQucGx1cywgMSk7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQubWludXMsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9sdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxlc3NUaGFuKSB7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgICAgZmluaXNoT3AodHQuYXNzaWduLCAzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gV2Ugc2VlIDw8LCBidXQgbmVlZCB0byBiZSByZWFsbHkgY2FyZWZ1bCBhYm91dCB3aGV0aGVyIHRvIHRyZWF0IGl0IGFzIGFcbiAgICAvLyB0cnVlIGxlZnQtc2hpZnQgb3IgYXMgdHdvIDwgdG9rZW5zLlxuICAgIGlmIChzdGF0ZS5pc1R5cGUpIHtcbiAgICAgIC8vIFdpdGhpbiBhIHR5cGUsIDw8IG1pZ2h0IGNvbWUgdXAgaW4gYSBzbmlwcGV0IGxpa2UgYEFycmF5PDxUPigpID0+IHZvaWQ+YCxcbiAgICAgIC8vIHNvIHRyZWF0IGl0IGFzIHR3byA8IHRva2Vucy4gSW1wb3J0YW50bHksIHRoaXMgc2hvdWxkIG9ubHkgb3ZlcnJpZGUgPDxcbiAgICAgIC8vIHJhdGhlciB0aGFuIG90aGVyIHRva2VucyBsaWtlIDw9IC4gSWYgd2UgdHJlYXRlZCA8PSBhcyA8IGluIGEgdHlwZVxuICAgICAgLy8gY29udGV4dCwgdGhlbiB0aGUgc25pcHBldCBgYSBhcyBUIDw9IDFgIHdvdWxkIGluY29ycmVjdGx5IHN0YXJ0IHBhcnNpbmdcbiAgICAgIC8vIGEgdHlwZSBhcmd1bWVudCBvbiBULiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGBhIGFzIFQgPDwgMWBcbiAgICAgIC8vIGJlY2F1c2UgVHlwZVNjcmlwdCBkaXNhbGxvd3MgdGhhdCBzeW50YXguXG4gICAgICBmaW5pc2hPcCh0dC5sZXNzVGhhbiwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE91dHNpZGUgYSB0eXBlLCB0aGlzIG1pZ2h0IGJlIGEgdHJ1ZSBsZWZ0LXNoaWZ0IG9wZXJhdG9yLCBvciBpdCBtaWdodFxuICAgICAgLy8gc3RpbGwgYmUgdHdvIG9wZW4tdHlwZS1hcmcgdG9rZW5zLCBzdWNoIGFzIGluIGBmPDxUPigpID0+IHZvaWQ+KClgLiBXZVxuICAgICAgLy8gbG9vayBhdCB0aGUgdG9rZW4gd2hpbGUgY29uc2lkZXJpbmcgdGhlIGBmYCwgc28gd2UgZG9uJ3QgeWV0IGtub3cgdGhhdFxuICAgICAgLy8gd2UncmUgaW4gYSB0eXBlIGNvbnRleHQuIEluIHRoaXMgY2FzZSwgd2UgaW5pdGlhbGx5IHRva2VuaXplIGFzIGFcbiAgICAgIC8vIGxlZnQtc2hpZnQgYW5kIGNvcnJlY3QgYWZ0ZXItdGhlLWZhY3QgYXMgbmVjZXNzYXJ5IGluXG4gICAgICAvLyB0c1BhcnNlVHlwZUFyZ3VtZW50c1dpdGhQb3NzaWJsZUJpdHNoaWZ0IC5cbiAgICAgIGZpbmlzaE9wKHR0LmJpdFNoaWZ0TCwgMik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPD1cbiAgICBmaW5pc2hPcCh0dC5yZWxhdGlvbmFsT3JFcXVhbCwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQubGVzc1RoYW4sIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9ndCgpIHtcbiAgaWYgKHN0YXRlLmlzVHlwZSkge1xuICAgIC8vIEF2b2lkIHJpZ2h0LXNoaWZ0IGZvciB0aGluZ3MgbGlrZSBgQXJyYXk8QXJyYXk8c3RyaW5nPj5gIGFuZFxuICAgIC8vIGdyZWF0ZXItdGhhbi1vci1lcXVhbCBmb3IgdGhpbmdzIGxpa2UgYGNvbnN0IGE6IEFycmF5PG51bWJlcj49W107YC5cbiAgICBmaW5pc2hPcCh0dC5ncmVhdGVyVGhhbiwgMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgY29uc3Qgc2l6ZSA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgPT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhbiA/IDMgOiAyO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIHNpemUpID09PSBjaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgc2l6ZSArIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5pc2hPcCh0dC5iaXRTaGlmdFIsIHNpemUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPj1cbiAgICBmaW5pc2hPcCh0dC5yZWxhdGlvbmFsT3JFcXVhbCwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQuZ3JlYXRlclRoYW4sIDEpO1xuICB9XG59XG5cbi8qKlxuICogUmVpbnRlcnByZXQgYSBwb3NzaWJsZSA+IHRva2VuIHdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIGEgdHlwZSB0byBhIG5vbi10eXBlXG4gKiBjb250ZXh0LlxuICpcbiAqIFRoaXMgY29tZXMgdXAgaW4gdHdvIHNpdHVhdGlvbnMgd2hlcmUgPj0gbmVlZHMgdG8gYmUgdHJlYXRlZCBhcyBvbmUgdG9rZW46XG4gKiAtIEFmdGVyIGFuIGBhc2AgZXhwcmVzc2lvbiwgbGlrZSBpbiB0aGUgY29kZSBgYSBhcyBUID49IDFgLlxuICogLSBJbiBhIHR5cGUgYXJndW1lbnQgaW4gYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBlLmcuIGBmKGEgPCBiLCBjID49IGQpYCwgd2VcbiAqICAgbmVlZCB0byBzZWUgdGhlIHRva2VuIGFzID49IHNvIHRoYXQgd2UgZ2V0IGFuIGVycm9yIGFuZCBiYWNrdHJhY2sgdG9cbiAqICAgbm9ybWFsIGV4cHJlc3Npb24gcGFyc2luZy5cbiAqXG4gKiBPdGhlciBzaXR1YXRpb25zIHJlcXVpcmUgPj0gdG8gYmUgc2VlbiBhcyB0d28gdG9rZW5zLCBlLmcuXG4gKiBgY29uc3QgeDogQXJyYXk8VD49W107YCwgc28gaXQncyBpbXBvcnRhbnQgdG8gdHJlYXQgPiBhcyBpdHMgb3duIHRva2VuIGluXG4gKiB0eXBpY2FsIHR5cGUgcGFyc2luZyBzaXR1YXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzY2FuX2d0KCkge1xuICBpZiAoc3RhdGUudHlwZSA9PT0gdHQuZ3JlYXRlclRoYW4pIHtcbiAgICBzdGF0ZS5wb3MgLT0gMTtcbiAgICByZWFkVG9rZW5fZ3QoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fZXFfZXhjbChjb2RlKSB7XG4gIC8vICc9ISdcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmVxdWFsaXR5LCBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDIpID09PSBjaGFyQ29kZXMuZXF1YWxzVG8gPyAzIDogMik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb2RlID09PSBjaGFyQ29kZXMuZXF1YWxzVG8gJiYgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgIC8vICc9PidcbiAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICBmaW5pc2hUb2tlbih0dC5hcnJvdyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZpbmlzaE9wKGNvZGUgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbyA/IHR0LmVxIDogdHQuYmFuZywgMSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9xdWVzdGlvbigpIHtcbiAgLy8gJz8nXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcbiAgY29uc3QgbmV4dENoYXIyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKTtcbiAgaWYgKFxuICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMucXVlc3Rpb25NYXJrICYmXG4gICAgLy8gSW4gRmxvdyAoYnV0IG5vdCBUeXBlU2NyaXB0KSwgPz9zdHJpbmcgaXMgYSB2YWxpZCB0eXBlIHRoYXQgc2hvdWxkIGJlXG4gICAgLy8gdG9rZW5pemVkIGFzIHR3byBpbmRpdmlkdWFsID8gdG9rZW5zLlxuICAgICEoaXNGbG93RW5hYmxlZCAmJiBzdGF0ZS5pc1R5cGUpXG4gICkge1xuICAgIGlmIChuZXh0Q2hhcjIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgICAgLy8gJz8/PSdcbiAgICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICc/PydcbiAgICAgIGZpbmlzaE9wKHR0Lm51bGxpc2hDb2FsZXNjaW5nLCAyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5kb3QgJiZcbiAgICAhKG5leHRDaGFyMiA+PSBjaGFyQ29kZXMuZGlnaXQwICYmIG5leHRDaGFyMiA8PSBjaGFyQ29kZXMuZGlnaXQ5KVxuICApIHtcbiAgICAvLyAnLicgbm90IGZvbGxvd2VkIGJ5IGEgbnVtYmVyXG4gICAgc3RhdGUucG9zICs9IDI7XG4gICAgZmluaXNoVG9rZW4odHQucXVlc3Rpb25Eb3QpO1xuICB9IGVsc2Uge1xuICAgICsrc3RhdGUucG9zO1xuICAgIGZpbmlzaFRva2VuKHR0LnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKSB7XG4gIHN3aXRjaCAoY29kZSkge1xuICAgIGNhc2UgY2hhckNvZGVzLm51bWJlclNpZ246XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0Lmhhc2gpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgLy8gVGhlIGludGVycHJldGF0aW9uIG9mIGEgZG90IGRlcGVuZHMgb24gd2hldGhlciBpdCBpcyBmb2xsb3dlZFxuICAgIC8vIGJ5IGEgZGlnaXQgb3IgYW5vdGhlciB0d28gZG90cy5cblxuICAgIGNhc2UgY2hhckNvZGVzLmRvdDpcbiAgICAgIHJlYWRUb2tlbl9kb3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFB1bmN0dWF0aW9uIHRva2Vucy5cbiAgICBjYXNlIGNoYXJDb2Rlcy5sZWZ0UGFyZW50aGVzaXM6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMucmlnaHRQYXJlbnRoZXNpczpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQucGFyZW5SKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIGNoYXJDb2Rlcy5zZW1pY29sb246XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LnNlbWkpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgY2hhckNvZGVzLmNvbW1hOlxuICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbih0dC5jb21tYSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQ6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNrZXRMKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIGNoYXJDb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQ6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNrZXRSKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlOlxuICAgICAgaWYgKGlzRmxvd0VuYWJsZWQgJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKSA9PT0gY2hhckNvZGVzLnZlcnRpY2FsQmFyKSB7XG4gICAgICAgIGZpbmlzaE9wKHR0LmJyYWNlQmFyTCwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgZmluaXNoVG9rZW4odHQuYnJhY2VMKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnJpZ2h0Q3VybHlCcmFjZTpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQuYnJhY2VSKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmNvbG9uOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5jb2xvbikge1xuICAgICAgICBmaW5pc2hPcCh0dC5kb3VibGVDb2xvbiwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgZmluaXNoVG9rZW4odHQuY29sb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMucXVlc3Rpb25NYXJrOlxuICAgICAgcmVhZFRva2VuX3F1ZXN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMuYXRTaWduOlxuICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbih0dC5hdCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIGNoYXJDb2Rlcy5ncmF2ZUFjY2VudDpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQuYmFja1F1b3RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0MDoge1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICAgICAgLy8gJzB4JywgJzBYJywgJzBvJywgJzBPJywgJzBiJywgJzBCJ1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxvd2VyY2FzZVggfHxcbiAgICAgICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy51cHBlcmNhc2VYIHx8XG4gICAgICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMubG93ZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLnVwcGVyY2FzZU8gfHxcbiAgICAgICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VCIHx8XG4gICAgICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMudXBwZXJjYXNlQlxuICAgICAgKSB7XG4gICAgICAgIHJlYWRSYWRpeE51bWJlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFueXRoaW5nIGVsc2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbFxuICAgIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQxOlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0MjpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDM6XG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQ0OlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0NTpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDY6XG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQ3OlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0ODpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDk6XG4gICAgICByZWFkTnVtYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFF1b3RlcyBwcm9kdWNlIHN0cmluZ3MuXG4gICAgY2FzZSBjaGFyQ29kZXMucXVvdGF0aW9uTWFyazpcbiAgICBjYXNlIGNoYXJDb2Rlcy5hcG9zdHJvcGhlOlxuICAgICAgcmVhZFN0cmluZyhjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIE9wZXJhdG9ycyBhcmUgcGFyc2VkIGlubGluZSBpbiB0aW55IHN0YXRlIG1hY2hpbmVzLiAnPScgKGNoYXJDb2Rlcy5lcXVhbHNUbykgaXNcbiAgICAvLyBvZnRlbiByZWZlcnJlZCB0by4gYGZpbmlzaE9wYCBzaW1wbHkgc2tpcHMgdGhlIGFtb3VudCBvZlxuICAgIC8vIGNoYXJhY3RlcnMgaXQgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhIHRva2VuXG4gICAgLy8gb2YgdGhlIHR5cGUgZ2l2ZW4gYnkgaXRzIGZpcnN0IGFyZ3VtZW50LlxuXG4gICAgY2FzZSBjaGFyQ29kZXMuc2xhc2g6XG4gICAgICByZWFkVG9rZW5fc2xhc2goKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnBlcmNlbnRTaWduOlxuICAgIGNhc2UgY2hhckNvZGVzLmFzdGVyaXNrOlxuICAgICAgcmVhZFRva2VuX211bHRfbW9kdWxvKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMudmVydGljYWxCYXI6XG4gICAgY2FzZSBjaGFyQ29kZXMuYW1wZXJzYW5kOlxuICAgICAgcmVhZFRva2VuX3BpcGVfYW1wKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMuY2FyZXQ6XG4gICAgICByZWFkVG9rZW5fY2FyZXQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnBsdXNTaWduOlxuICAgIGNhc2UgY2hhckNvZGVzLmRhc2g6XG4gICAgICByZWFkVG9rZW5fcGx1c19taW4oY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIGNoYXJDb2Rlcy5sZXNzVGhhbjpcbiAgICAgIHJlYWRUb2tlbl9sdCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICByZWFkVG9rZW5fZ3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmVxdWFsc1RvOlxuICAgIGNhc2UgY2hhckNvZGVzLmV4Y2xhbWF0aW9uTWFyazpcbiAgICAgIHJlYWRUb2tlbl9lcV9leGNsKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMudGlsZGU6XG4gICAgICBmaW5pc2hPcCh0dC50aWxkZSwgMSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICB1bmV4cGVjdGVkKGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpfSdgLCBzdGF0ZS5wb3MpO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hPcCh0eXBlLCBzaXplKSB7XG4gIHN0YXRlLnBvcyArPSBzaXplO1xuICBmaW5pc2hUb2tlbih0eXBlKTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlZ2V4cCgpIHtcbiAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBpbkNsYXNzID0gZmFsc2U7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoc3RhdGUucG9zID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgdW5leHBlY3RlZChcIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIiwgc3RhcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID09PSBjaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgICAgaW5DbGFzcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQgJiYgaW5DbGFzcykge1xuICAgICAgICBpbkNsYXNzID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5zbGFzaCAmJiAhaW5DbGFzcykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSBjb2RlID09PSBjaGFyQ29kZXMuYmFja3NsYXNoO1xuICAgIH1cbiAgICArK3N0YXRlLnBvcztcbiAgfVxuICArK3N0YXRlLnBvcztcbiAgLy8gTmVlZCB0byB1c2UgYHNraXBXb3JkYCBiZWNhdXNlICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaGVyZSAoZG9uJ3QgYXNrKS5cbiAgc2tpcFdvcmQoKTtcblxuICBmaW5pc2hUb2tlbih0dC5yZWdleHApO1xufVxuXG4vKipcbiAqIFJlYWQgYSBkZWNpbWFsIGludGVnZXIuIE5vdGUgdGhhdCB0aGlzIGNhbid0IGJlIHVuaWZpZWQgd2l0aCB0aGUgc2ltaWxhciBjb2RlXG4gKiBpbiByZWFkUmFkaXhOdW1iZXIgKHdoaWNoIGFsc28gaGFuZGxlcyBoZXggZGlnaXRzKSBiZWNhdXNlIFwiZVwiIG5lZWRzIHRvIGJlXG4gKiB0aGUgZW5kIG9mIHRoZSBpbnRlZ2VyIHNvIHRoYXQgd2UgY2FuIHByb3Blcmx5IGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiByZWFkSW50KCkge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gICAgaWYgKChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fCBjb2RlID09PSBjaGFyQ29kZXMudW5kZXJzY29yZSkge1xuICAgICAgc3RhdGUucG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkUmFkaXhOdW1iZXIoKSB7XG4gIHN0YXRlLnBvcyArPSAyOyAvLyAweFxuXG4gIC8vIFdhbGsgdG8gdGhlIGVuZCBvZiB0aGUgbnVtYmVyLCBhbGxvd2luZyBoZXggZGlnaXRzLlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgICAoY29kZSA+PSBjaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5sb3dlcmNhc2VGKSB8fFxuICAgICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRikgfHxcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy51bmRlcnNjb3JlXG4gICAgKSB7XG4gICAgICBzdGF0ZS5wb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxvd2VyY2FzZU4pIHtcbiAgICArK3N0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbih0dC5iaWdpbnQpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaFRva2VuKHR0Lm51bSk7XG4gIH1cbn1cblxuLy8gUmVhZCBhbiBpbnRlZ2VyLCBvY3RhbCBpbnRlZ2VyLCBvciBmbG9hdGluZy1wb2ludCBudW1iZXIuXG5mdW5jdGlvbiByZWFkTnVtYmVyKHN0YXJ0c1dpdGhEb3QpIHtcbiAgbGV0IGlzQmlnSW50ID0gZmFsc2U7XG4gIGxldCBpc0RlY2ltYWwgPSBmYWxzZTtcblxuICBpZiAoIXN0YXJ0c1dpdGhEb3QpIHtcbiAgICByZWFkSW50KCk7XG4gIH1cblxuICBsZXQgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmRvdCkge1xuICAgICsrc3RhdGUucG9zO1xuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLnVwcGVyY2FzZUUgfHwgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VFKSB7XG4gICAgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zKTtcbiAgICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5wbHVzU2lnbiB8fCBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmRhc2gpIHtcbiAgICAgICsrc3RhdGUucG9zO1xuICAgIH1cbiAgICByZWFkSW50KCk7XG4gICAgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VOKSB7XG4gICAgKytzdGF0ZS5wb3M7XG4gICAgaXNCaWdJbnQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMubG93ZXJjYXNlTSkge1xuICAgICsrc3RhdGUucG9zO1xuICAgIGlzRGVjaW1hbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNCaWdJbnQpIHtcbiAgICBmaW5pc2hUb2tlbih0dC5iaWdpbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0RlY2ltYWwpIHtcbiAgICBmaW5pc2hUb2tlbih0dC5kZWNpbWFsKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaW5pc2hUb2tlbih0dC5udW0pO1xufVxuXG5mdW5jdGlvbiByZWFkU3RyaW5nKHF1b3RlKSB7XG4gIHN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaCA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc3RhdGUucG9zKys7XG4gIH1cbiAgc3RhdGUucG9zKys7XG4gIGZpbmlzaFRva2VuKHR0LnN0cmluZyk7XG59XG5cbi8vIFJlYWRzIHRlbXBsYXRlIHN0cmluZyB0b2tlbnMuXG5mdW5jdGlvbiByZWFkVG1wbFRva2VuKCkge1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChcbiAgICAgIGNoID09PSBjaGFyQ29kZXMuZ3JhdmVBY2NlbnQgfHxcbiAgICAgIChjaCA9PT0gY2hhckNvZGVzLmRvbGxhclNpZ24gJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKVxuICAgICkge1xuICAgICAgaWYgKHN0YXRlLnBvcyA9PT0gc3RhdGUuc3RhcnQgJiYgbWF0Y2godHQudGVtcGxhdGUpKSB7XG4gICAgICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmRvbGxhclNpZ24pIHtcbiAgICAgICAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICBmaW5pc2hUb2tlbih0dC5kb2xsYXJCcmFjZUwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgICBmaW5pc2hUb2tlbih0dC5iYWNrUXVvdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluaXNoVG9rZW4odHQudGVtcGxhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MrKztcbiAgfVxufVxuXG4vLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgd29yZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHNuaXBwZXQgYXQgdGhlIGVuZCBvZlxuLy8gcmVhZFdvcmQsIGJ1dCBjYWxsaW5nIHNraXBXb3JkIGZyb20gcmVhZFdvcmQgc2VlbXMgdG8gc2xpZ2h0bHkgaHVydCBwZXJmb3JtYW5jZSBmcm9tIHNvbWUgcm91Z2hcbi8vIG1lYXN1cmVtZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBza2lwV29yZCgpIHtcbiAgd2hpbGUgKHN0YXRlLnBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChJU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBzdGF0ZS5wb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHN0YXRlLnBvcyArPSAyO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICBzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGggJiZcbiAgICAgICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcykgIT09IGNoYXJDb2Rlcy5yaWdodEN1cmx5QnJhY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cbiBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lZCBpbXBvcnQgb3IgbmFtZWQgZXhwb3J0IHNwZWNpZmllci5cbiAqXG4gKiBUaGlzIHN5bnRheCBpcyB0aGUgYGFgIGZyb20gc3RhdGVtZW50cyBsaWtlIHRoZXNlOlxuICogaW1wb3J0IHtBfSBmcm9tIFwiLi9mb29cIjtcbiAqIGV4cG9ydCB7QX07XG4gKiBleHBvcnQge0F9IGZyb20gXCIuL2Zvb1wiO1xuICpcbiAqIEFzIGl0IHR1cm5zIG91dCwgd2UgY2FuIGV4YWN0bHkgY2hhcmFjdGVyaXplIHRoZSBzeW50YXggbWVhbmluZyBieSBzaW1wbHlcbiAqIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdG9rZW5zLCB3aGljaCBjYW4gYmUgZnJvbSAxIHRvIDQ6XG4gKiB7QX1cbiAqIHt0eXBlIEF9XG4gKiB7QSBhcyBCfVxuICoge3R5cGUgQSBhcyBCfVxuICpcbiAqIEluIHRoZSB0eXBlIGNhc2UsIHdlIG5ldmVyIGFjdHVhbGx5IG5lZWQgdGhlIG5hbWVzIGluIHByYWN0aWNlLCBzbyBkb24ndCBnZXRcbiAqIHRoZW0uXG4gKlxuICogVE9ETzogVGhlcmUncyBzb21lIHJlZHVuZGFuY3kgd2l0aCB0aGUgdHlwZSBkZXRlY3Rpb24gaGVyZSBhbmQgdGhlIGlzVHlwZVxuICogZmxhZyB0aGF0J3MgYWxyZWFkeSBwcmVzZW50IG9uIHRva2VucyBpbiBUUyBtb2RlLiBUaGlzIGZ1bmN0aW9uIGNvdWxkXG4gKiBwb3RlbnRpYWxseSBiZSBzaW1wbGlmaWVkIGFuZC9vciBwdXNoZWQgdG8gdGhlIGNhbGwgc2l0ZXMgdG8gYXZvaWQgdGhlIG9iamVjdFxuICogYWxsb2NhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyhcbiAgdG9rZW5zLFxuICBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKSxcbikge1xuICBsZXQgZW5kSW5kZXggPSBpbmRleCArIDE7XG4gIGlmIChpc1NwZWNpZmllckVuZCh0b2tlbnMsIGVuZEluZGV4KSkge1xuICAgIC8vIGltcG9ydCB7QX1cbiAgICBjb25zdCBuYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogZmFsc2UsXG4gICAgICBsZWZ0TmFtZTogbmFtZSxcbiAgICAgIHJpZ2h0TmFtZTogbmFtZSxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgZW5kSW5kZXgrKztcbiAgaWYgKGlzU3BlY2lmaWVyRW5kKHRva2VucywgZW5kSW5kZXgpKSB7XG4gICAgLy8gaW1wb3J0IHt0eXBlIEF9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogdHJ1ZSxcbiAgICAgIGxlZnROYW1lOiBudWxsLFxuICAgICAgcmlnaHROYW1lOiBudWxsLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge0EgYXMgQn1cbiAgICByZXR1cm4ge1xuICAgICAgaXNUeXBlOiBmYWxzZSxcbiAgICAgIGxlZnROYW1lOiB0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSxcbiAgICAgIHJpZ2h0TmFtZTogdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgQSBhcyBCfVxuICAgIHJldHVybiB7XG4gICAgICBpc1R5cGU6IHRydWUsXG4gICAgICBsZWZ0TmFtZTogbnVsbCxcbiAgICAgIHJpZ2h0TmFtZTogbnVsbCxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGltcG9ydC9leHBvcnQgc3BlY2lmaWVyIGF0ICR7aW5kZXh9YCk7XG59XG5cbmZ1bmN0aW9uIGlzU3BlY2lmaWVyRW5kKHRva2VucywgaW5kZXgpIHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgcmV0dXJuIHRva2VuLnR5cGUgPT09IHR0LmJyYWNlUiB8fCB0b2tlbi50eXBlID09PSB0dC5jb21tYTtcbn1cbiIsICIvLyBVc2UgYSBNYXAgcmF0aGVyIHRoYW4gb2JqZWN0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgX19wcm90b19fIGFjY2Vzcy5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNYXAoW1xuICBbXCJxdW90XCIsIFwiXFx1MDAyMlwiXSxcbiAgW1wiYW1wXCIsIFwiJlwiXSxcbiAgW1wiYXBvc1wiLCBcIlxcdTAwMjdcIl0sXG4gIFtcImx0XCIsIFwiPFwiXSxcbiAgW1wiZ3RcIiwgXCI+XCJdLFxuICBbXCJuYnNwXCIsIFwiXFx1MDBBMFwiXSxcbiAgW1wiaWV4Y2xcIiwgXCJcXHUwMEExXCJdLFxuICBbXCJjZW50XCIsIFwiXFx1MDBBMlwiXSxcbiAgW1wicG91bmRcIiwgXCJcXHUwMEEzXCJdLFxuICBbXCJjdXJyZW5cIiwgXCJcXHUwMEE0XCJdLFxuICBbXCJ5ZW5cIiwgXCJcXHUwMEE1XCJdLFxuICBbXCJicnZiYXJcIiwgXCJcXHUwMEE2XCJdLFxuICBbXCJzZWN0XCIsIFwiXFx1MDBBN1wiXSxcbiAgW1widW1sXCIsIFwiXFx1MDBBOFwiXSxcbiAgW1wiY29weVwiLCBcIlxcdTAwQTlcIl0sXG4gIFtcIm9yZGZcIiwgXCJcXHUwMEFBXCJdLFxuICBbXCJsYXF1b1wiLCBcIlxcdTAwQUJcIl0sXG4gIFtcIm5vdFwiLCBcIlxcdTAwQUNcIl0sXG4gIFtcInNoeVwiLCBcIlxcdTAwQURcIl0sXG4gIFtcInJlZ1wiLCBcIlxcdTAwQUVcIl0sXG4gIFtcIm1hY3JcIiwgXCJcXHUwMEFGXCJdLFxuICBbXCJkZWdcIiwgXCJcXHUwMEIwXCJdLFxuICBbXCJwbHVzbW5cIiwgXCJcXHUwMEIxXCJdLFxuICBbXCJzdXAyXCIsIFwiXFx1MDBCMlwiXSxcbiAgW1wic3VwM1wiLCBcIlxcdTAwQjNcIl0sXG4gIFtcImFjdXRlXCIsIFwiXFx1MDBCNFwiXSxcbiAgW1wibWljcm9cIiwgXCJcXHUwMEI1XCJdLFxuICBbXCJwYXJhXCIsIFwiXFx1MDBCNlwiXSxcbiAgW1wibWlkZG90XCIsIFwiXFx1MDBCN1wiXSxcbiAgW1wiY2VkaWxcIiwgXCJcXHUwMEI4XCJdLFxuICBbXCJzdXAxXCIsIFwiXFx1MDBCOVwiXSxcbiAgW1wib3JkbVwiLCBcIlxcdTAwQkFcIl0sXG4gIFtcInJhcXVvXCIsIFwiXFx1MDBCQlwiXSxcbiAgW1wiZnJhYzE0XCIsIFwiXFx1MDBCQ1wiXSxcbiAgW1wiZnJhYzEyXCIsIFwiXFx1MDBCRFwiXSxcbiAgW1wiZnJhYzM0XCIsIFwiXFx1MDBCRVwiXSxcbiAgW1wiaXF1ZXN0XCIsIFwiXFx1MDBCRlwiXSxcbiAgW1wiQWdyYXZlXCIsIFwiXFx1MDBDMFwiXSxcbiAgW1wiQWFjdXRlXCIsIFwiXFx1MDBDMVwiXSxcbiAgW1wiQWNpcmNcIiwgXCJcXHUwMEMyXCJdLFxuICBbXCJBdGlsZGVcIiwgXCJcXHUwMEMzXCJdLFxuICBbXCJBdW1sXCIsIFwiXFx1MDBDNFwiXSxcbiAgW1wiQXJpbmdcIiwgXCJcXHUwMEM1XCJdLFxuICBbXCJBRWxpZ1wiLCBcIlxcdTAwQzZcIl0sXG4gIFtcIkNjZWRpbFwiLCBcIlxcdTAwQzdcIl0sXG4gIFtcIkVncmF2ZVwiLCBcIlxcdTAwQzhcIl0sXG4gIFtcIkVhY3V0ZVwiLCBcIlxcdTAwQzlcIl0sXG4gIFtcIkVjaXJjXCIsIFwiXFx1MDBDQVwiXSxcbiAgW1wiRXVtbFwiLCBcIlxcdTAwQ0JcIl0sXG4gIFtcIklncmF2ZVwiLCBcIlxcdTAwQ0NcIl0sXG4gIFtcIklhY3V0ZVwiLCBcIlxcdTAwQ0RcIl0sXG4gIFtcIkljaXJjXCIsIFwiXFx1MDBDRVwiXSxcbiAgW1wiSXVtbFwiLCBcIlxcdTAwQ0ZcIl0sXG4gIFtcIkVUSFwiLCBcIlxcdTAwRDBcIl0sXG4gIFtcIk50aWxkZVwiLCBcIlxcdTAwRDFcIl0sXG4gIFtcIk9ncmF2ZVwiLCBcIlxcdTAwRDJcIl0sXG4gIFtcIk9hY3V0ZVwiLCBcIlxcdTAwRDNcIl0sXG4gIFtcIk9jaXJjXCIsIFwiXFx1MDBENFwiXSxcbiAgW1wiT3RpbGRlXCIsIFwiXFx1MDBENVwiXSxcbiAgW1wiT3VtbFwiLCBcIlxcdTAwRDZcIl0sXG4gIFtcInRpbWVzXCIsIFwiXFx1MDBEN1wiXSxcbiAgW1wiT3NsYXNoXCIsIFwiXFx1MDBEOFwiXSxcbiAgW1wiVWdyYXZlXCIsIFwiXFx1MDBEOVwiXSxcbiAgW1wiVWFjdXRlXCIsIFwiXFx1MDBEQVwiXSxcbiAgW1wiVWNpcmNcIiwgXCJcXHUwMERCXCJdLFxuICBbXCJVdW1sXCIsIFwiXFx1MDBEQ1wiXSxcbiAgW1wiWWFjdXRlXCIsIFwiXFx1MDBERFwiXSxcbiAgW1wiVEhPUk5cIiwgXCJcXHUwMERFXCJdLFxuICBbXCJzemxpZ1wiLCBcIlxcdTAwREZcIl0sXG4gIFtcImFncmF2ZVwiLCBcIlxcdTAwRTBcIl0sXG4gIFtcImFhY3V0ZVwiLCBcIlxcdTAwRTFcIl0sXG4gIFtcImFjaXJjXCIsIFwiXFx1MDBFMlwiXSxcbiAgW1wiYXRpbGRlXCIsIFwiXFx1MDBFM1wiXSxcbiAgW1wiYXVtbFwiLCBcIlxcdTAwRTRcIl0sXG4gIFtcImFyaW5nXCIsIFwiXFx1MDBFNVwiXSxcbiAgW1wiYWVsaWdcIiwgXCJcXHUwMEU2XCJdLFxuICBbXCJjY2VkaWxcIiwgXCJcXHUwMEU3XCJdLFxuICBbXCJlZ3JhdmVcIiwgXCJcXHUwMEU4XCJdLFxuICBbXCJlYWN1dGVcIiwgXCJcXHUwMEU5XCJdLFxuICBbXCJlY2lyY1wiLCBcIlxcdTAwRUFcIl0sXG4gIFtcImV1bWxcIiwgXCJcXHUwMEVCXCJdLFxuICBbXCJpZ3JhdmVcIiwgXCJcXHUwMEVDXCJdLFxuICBbXCJpYWN1dGVcIiwgXCJcXHUwMEVEXCJdLFxuICBbXCJpY2lyY1wiLCBcIlxcdTAwRUVcIl0sXG4gIFtcIml1bWxcIiwgXCJcXHUwMEVGXCJdLFxuICBbXCJldGhcIiwgXCJcXHUwMEYwXCJdLFxuICBbXCJudGlsZGVcIiwgXCJcXHUwMEYxXCJdLFxuICBbXCJvZ3JhdmVcIiwgXCJcXHUwMEYyXCJdLFxuICBbXCJvYWN1dGVcIiwgXCJcXHUwMEYzXCJdLFxuICBbXCJvY2lyY1wiLCBcIlxcdTAwRjRcIl0sXG4gIFtcIm90aWxkZVwiLCBcIlxcdTAwRjVcIl0sXG4gIFtcIm91bWxcIiwgXCJcXHUwMEY2XCJdLFxuICBbXCJkaXZpZGVcIiwgXCJcXHUwMEY3XCJdLFxuICBbXCJvc2xhc2hcIiwgXCJcXHUwMEY4XCJdLFxuICBbXCJ1Z3JhdmVcIiwgXCJcXHUwMEY5XCJdLFxuICBbXCJ1YWN1dGVcIiwgXCJcXHUwMEZBXCJdLFxuICBbXCJ1Y2lyY1wiLCBcIlxcdTAwRkJcIl0sXG4gIFtcInV1bWxcIiwgXCJcXHUwMEZDXCJdLFxuICBbXCJ5YWN1dGVcIiwgXCJcXHUwMEZEXCJdLFxuICBbXCJ0aG9yblwiLCBcIlxcdTAwRkVcIl0sXG4gIFtcInl1bWxcIiwgXCJcXHUwMEZGXCJdLFxuICBbXCJPRWxpZ1wiLCBcIlxcdTAxNTJcIl0sXG4gIFtcIm9lbGlnXCIsIFwiXFx1MDE1M1wiXSxcbiAgW1wiU2Nhcm9uXCIsIFwiXFx1MDE2MFwiXSxcbiAgW1wic2Nhcm9uXCIsIFwiXFx1MDE2MVwiXSxcbiAgW1wiWXVtbFwiLCBcIlxcdTAxNzhcIl0sXG4gIFtcImZub2ZcIiwgXCJcXHUwMTkyXCJdLFxuICBbXCJjaXJjXCIsIFwiXFx1MDJDNlwiXSxcbiAgW1widGlsZGVcIiwgXCJcXHUwMkRDXCJdLFxuICBbXCJBbHBoYVwiLCBcIlxcdTAzOTFcIl0sXG4gIFtcIkJldGFcIiwgXCJcXHUwMzkyXCJdLFxuICBbXCJHYW1tYVwiLCBcIlxcdTAzOTNcIl0sXG4gIFtcIkRlbHRhXCIsIFwiXFx1MDM5NFwiXSxcbiAgW1wiRXBzaWxvblwiLCBcIlxcdTAzOTVcIl0sXG4gIFtcIlpldGFcIiwgXCJcXHUwMzk2XCJdLFxuICBbXCJFdGFcIiwgXCJcXHUwMzk3XCJdLFxuICBbXCJUaGV0YVwiLCBcIlxcdTAzOThcIl0sXG4gIFtcIklvdGFcIiwgXCJcXHUwMzk5XCJdLFxuICBbXCJLYXBwYVwiLCBcIlxcdTAzOUFcIl0sXG4gIFtcIkxhbWJkYVwiLCBcIlxcdTAzOUJcIl0sXG4gIFtcIk11XCIsIFwiXFx1MDM5Q1wiXSxcbiAgW1wiTnVcIiwgXCJcXHUwMzlEXCJdLFxuICBbXCJYaVwiLCBcIlxcdTAzOUVcIl0sXG4gIFtcIk9taWNyb25cIiwgXCJcXHUwMzlGXCJdLFxuICBbXCJQaVwiLCBcIlxcdTAzQTBcIl0sXG4gIFtcIlJob1wiLCBcIlxcdTAzQTFcIl0sXG4gIFtcIlNpZ21hXCIsIFwiXFx1MDNBM1wiXSxcbiAgW1wiVGF1XCIsIFwiXFx1MDNBNFwiXSxcbiAgW1wiVXBzaWxvblwiLCBcIlxcdTAzQTVcIl0sXG4gIFtcIlBoaVwiLCBcIlxcdTAzQTZcIl0sXG4gIFtcIkNoaVwiLCBcIlxcdTAzQTdcIl0sXG4gIFtcIlBzaVwiLCBcIlxcdTAzQThcIl0sXG4gIFtcIk9tZWdhXCIsIFwiXFx1MDNBOVwiXSxcbiAgW1wiYWxwaGFcIiwgXCJcXHUwM0IxXCJdLFxuICBbXCJiZXRhXCIsIFwiXFx1MDNCMlwiXSxcbiAgW1wiZ2FtbWFcIiwgXCJcXHUwM0IzXCJdLFxuICBbXCJkZWx0YVwiLCBcIlxcdTAzQjRcIl0sXG4gIFtcImVwc2lsb25cIiwgXCJcXHUwM0I1XCJdLFxuICBbXCJ6ZXRhXCIsIFwiXFx1MDNCNlwiXSxcbiAgW1wiZXRhXCIsIFwiXFx1MDNCN1wiXSxcbiAgW1widGhldGFcIiwgXCJcXHUwM0I4XCJdLFxuICBbXCJpb3RhXCIsIFwiXFx1MDNCOVwiXSxcbiAgW1wia2FwcGFcIiwgXCJcXHUwM0JBXCJdLFxuICBbXCJsYW1iZGFcIiwgXCJcXHUwM0JCXCJdLFxuICBbXCJtdVwiLCBcIlxcdTAzQkNcIl0sXG4gIFtcIm51XCIsIFwiXFx1MDNCRFwiXSxcbiAgW1wieGlcIiwgXCJcXHUwM0JFXCJdLFxuICBbXCJvbWljcm9uXCIsIFwiXFx1MDNCRlwiXSxcbiAgW1wicGlcIiwgXCJcXHUwM0MwXCJdLFxuICBbXCJyaG9cIiwgXCJcXHUwM0MxXCJdLFxuICBbXCJzaWdtYWZcIiwgXCJcXHUwM0MyXCJdLFxuICBbXCJzaWdtYVwiLCBcIlxcdTAzQzNcIl0sXG4gIFtcInRhdVwiLCBcIlxcdTAzQzRcIl0sXG4gIFtcInVwc2lsb25cIiwgXCJcXHUwM0M1XCJdLFxuICBbXCJwaGlcIiwgXCJcXHUwM0M2XCJdLFxuICBbXCJjaGlcIiwgXCJcXHUwM0M3XCJdLFxuICBbXCJwc2lcIiwgXCJcXHUwM0M4XCJdLFxuICBbXCJvbWVnYVwiLCBcIlxcdTAzQzlcIl0sXG4gIFtcInRoZXRhc3ltXCIsIFwiXFx1MDNEMVwiXSxcbiAgW1widXBzaWhcIiwgXCJcXHUwM0QyXCJdLFxuICBbXCJwaXZcIiwgXCJcXHUwM0Q2XCJdLFxuICBbXCJlbnNwXCIsIFwiXFx1MjAwMlwiXSxcbiAgW1wiZW1zcFwiLCBcIlxcdTIwMDNcIl0sXG4gIFtcInRoaW5zcFwiLCBcIlxcdTIwMDlcIl0sXG4gIFtcInp3bmpcIiwgXCJcXHUyMDBDXCJdLFxuICBbXCJ6d2pcIiwgXCJcXHUyMDBEXCJdLFxuICBbXCJscm1cIiwgXCJcXHUyMDBFXCJdLFxuICBbXCJybG1cIiwgXCJcXHUyMDBGXCJdLFxuICBbXCJuZGFzaFwiLCBcIlxcdTIwMTNcIl0sXG4gIFtcIm1kYXNoXCIsIFwiXFx1MjAxNFwiXSxcbiAgW1wibHNxdW9cIiwgXCJcXHUyMDE4XCJdLFxuICBbXCJyc3F1b1wiLCBcIlxcdTIwMTlcIl0sXG4gIFtcInNicXVvXCIsIFwiXFx1MjAxQVwiXSxcbiAgW1wibGRxdW9cIiwgXCJcXHUyMDFDXCJdLFxuICBbXCJyZHF1b1wiLCBcIlxcdTIwMURcIl0sXG4gIFtcImJkcXVvXCIsIFwiXFx1MjAxRVwiXSxcbiAgW1wiZGFnZ2VyXCIsIFwiXFx1MjAyMFwiXSxcbiAgW1wiRGFnZ2VyXCIsIFwiXFx1MjAyMVwiXSxcbiAgW1wiYnVsbFwiLCBcIlxcdTIwMjJcIl0sXG4gIFtcImhlbGxpcFwiLCBcIlxcdTIwMjZcIl0sXG4gIFtcInBlcm1pbFwiLCBcIlxcdTIwMzBcIl0sXG4gIFtcInByaW1lXCIsIFwiXFx1MjAzMlwiXSxcbiAgW1wiUHJpbWVcIiwgXCJcXHUyMDMzXCJdLFxuICBbXCJsc2FxdW9cIiwgXCJcXHUyMDM5XCJdLFxuICBbXCJyc2FxdW9cIiwgXCJcXHUyMDNBXCJdLFxuICBbXCJvbGluZVwiLCBcIlxcdTIwM0VcIl0sXG4gIFtcImZyYXNsXCIsIFwiXFx1MjA0NFwiXSxcbiAgW1wiZXVyb1wiLCBcIlxcdTIwQUNcIl0sXG4gIFtcImltYWdlXCIsIFwiXFx1MjExMVwiXSxcbiAgW1wid2VpZXJwXCIsIFwiXFx1MjExOFwiXSxcbiAgW1wicmVhbFwiLCBcIlxcdTIxMUNcIl0sXG4gIFtcInRyYWRlXCIsIFwiXFx1MjEyMlwiXSxcbiAgW1wiYWxlZnN5bVwiLCBcIlxcdTIxMzVcIl0sXG4gIFtcImxhcnJcIiwgXCJcXHUyMTkwXCJdLFxuICBbXCJ1YXJyXCIsIFwiXFx1MjE5MVwiXSxcbiAgW1wicmFyclwiLCBcIlxcdTIxOTJcIl0sXG4gIFtcImRhcnJcIiwgXCJcXHUyMTkzXCJdLFxuICBbXCJoYXJyXCIsIFwiXFx1MjE5NFwiXSxcbiAgW1wiY3JhcnJcIiwgXCJcXHUyMUI1XCJdLFxuICBbXCJsQXJyXCIsIFwiXFx1MjFEMFwiXSxcbiAgW1widUFyclwiLCBcIlxcdTIxRDFcIl0sXG4gIFtcInJBcnJcIiwgXCJcXHUyMUQyXCJdLFxuICBbXCJkQXJyXCIsIFwiXFx1MjFEM1wiXSxcbiAgW1wiaEFyclwiLCBcIlxcdTIxRDRcIl0sXG4gIFtcImZvcmFsbFwiLCBcIlxcdTIyMDBcIl0sXG4gIFtcInBhcnRcIiwgXCJcXHUyMjAyXCJdLFxuICBbXCJleGlzdFwiLCBcIlxcdTIyMDNcIl0sXG4gIFtcImVtcHR5XCIsIFwiXFx1MjIwNVwiXSxcbiAgW1wibmFibGFcIiwgXCJcXHUyMjA3XCJdLFxuICBbXCJpc2luXCIsIFwiXFx1MjIwOFwiXSxcbiAgW1wibm90aW5cIiwgXCJcXHUyMjA5XCJdLFxuICBbXCJuaVwiLCBcIlxcdTIyMEJcIl0sXG4gIFtcInByb2RcIiwgXCJcXHUyMjBGXCJdLFxuICBbXCJzdW1cIiwgXCJcXHUyMjExXCJdLFxuICBbXCJtaW51c1wiLCBcIlxcdTIyMTJcIl0sXG4gIFtcImxvd2FzdFwiLCBcIlxcdTIyMTdcIl0sXG4gIFtcInJhZGljXCIsIFwiXFx1MjIxQVwiXSxcbiAgW1wicHJvcFwiLCBcIlxcdTIyMURcIl0sXG4gIFtcImluZmluXCIsIFwiXFx1MjIxRVwiXSxcbiAgW1wiYW5nXCIsIFwiXFx1MjIyMFwiXSxcbiAgW1wiYW5kXCIsIFwiXFx1MjIyN1wiXSxcbiAgW1wib3JcIiwgXCJcXHUyMjI4XCJdLFxuICBbXCJjYXBcIiwgXCJcXHUyMjI5XCJdLFxuICBbXCJjdXBcIiwgXCJcXHUyMjJBXCJdLFxuICBbXCJpbnRcIiwgXCJcXHUyMjJCXCJdLFxuICBbXCJ0aGVyZTRcIiwgXCJcXHUyMjM0XCJdLFxuICBbXCJzaW1cIiwgXCJcXHUyMjNDXCJdLFxuICBbXCJjb25nXCIsIFwiXFx1MjI0NVwiXSxcbiAgW1wiYXN5bXBcIiwgXCJcXHUyMjQ4XCJdLFxuICBbXCJuZVwiLCBcIlxcdTIyNjBcIl0sXG4gIFtcImVxdWl2XCIsIFwiXFx1MjI2MVwiXSxcbiAgW1wibGVcIiwgXCJcXHUyMjY0XCJdLFxuICBbXCJnZVwiLCBcIlxcdTIyNjVcIl0sXG4gIFtcInN1YlwiLCBcIlxcdTIyODJcIl0sXG4gIFtcInN1cFwiLCBcIlxcdTIyODNcIl0sXG4gIFtcIm5zdWJcIiwgXCJcXHUyMjg0XCJdLFxuICBbXCJzdWJlXCIsIFwiXFx1MjI4NlwiXSxcbiAgW1wic3VwZVwiLCBcIlxcdTIyODdcIl0sXG4gIFtcIm9wbHVzXCIsIFwiXFx1MjI5NVwiXSxcbiAgW1wib3RpbWVzXCIsIFwiXFx1MjI5N1wiXSxcbiAgW1wicGVycFwiLCBcIlxcdTIyQTVcIl0sXG4gIFtcInNkb3RcIiwgXCJcXHUyMkM1XCJdLFxuICBbXCJsY2VpbFwiLCBcIlxcdTIzMDhcIl0sXG4gIFtcInJjZWlsXCIsIFwiXFx1MjMwOVwiXSxcbiAgW1wibGZsb29yXCIsIFwiXFx1MjMwQVwiXSxcbiAgW1wicmZsb29yXCIsIFwiXFx1MjMwQlwiXSxcbiAgW1wibGFuZ1wiLCBcIlxcdTIzMjlcIl0sXG4gIFtcInJhbmdcIiwgXCJcXHUyMzJBXCJdLFxuICBbXCJsb3pcIiwgXCJcXHUyNUNBXCJdLFxuICBbXCJzcGFkZXNcIiwgXCJcXHUyNjYwXCJdLFxuICBbXCJjbHVic1wiLCBcIlxcdTI2NjNcIl0sXG4gIFtcImhlYXJ0c1wiLCBcIlxcdTI2NjVcIl0sXG4gIFtcImRpYW1zXCIsIFwiXFx1MjY2NlwiXSxcbl0pO1xuIiwgIlxuXG5cblxuXG5cblxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpTWFByYWdtYUluZm8ob3B0aW9ucykge1xuICBjb25zdCBbYmFzZSwgc3VmZml4XSA9IHNwbGl0UHJhZ21hKG9wdGlvbnMuanN4UHJhZ21hIHx8IFwiUmVhY3QuY3JlYXRlRWxlbWVudFwiKTtcbiAgY29uc3QgW2ZyYWdtZW50QmFzZSwgZnJhZ21lbnRTdWZmaXhdID0gc3BsaXRQcmFnbWEob3B0aW9ucy5qc3hGcmFnbWVudFByYWdtYSB8fCBcIlJlYWN0LkZyYWdtZW50XCIpO1xuICByZXR1cm4ge2Jhc2UsIHN1ZmZpeCwgZnJhZ21lbnRCYXNlLCBmcmFnbWVudFN1ZmZpeH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0UHJhZ21hKHByYWdtYSkge1xuICBsZXQgZG90SW5kZXggPSBwcmFnbWEuaW5kZXhPZihcIi5cIik7XG4gIGlmIChkb3RJbmRleCA9PT0gLTEpIHtcbiAgICBkb3RJbmRleCA9IHByYWdtYS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIFtwcmFnbWEuc2xpY2UoMCwgZG90SW5kZXgpLCBwcmFnbWEuc2xpY2UoZG90SW5kZXgpXTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCAgY2xhc3MgVHJhbnNmb3JtZXIge1xuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gIFxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRIb2lzdGVkQ29kZSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldFN1ZmZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbiIsICJcblxuXG5pbXBvcnQgWEhUTUxFbnRpdGllcyBmcm9tIFwiLi4vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sXCI7XG5pbXBvcnQge0pTWFJvbGV9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzXCI7XG5cbmltcG9ydCBnZXRKU1hQcmFnbWFJbmZvLCB7fSBmcm9tIFwiLi4vdXRpbC9nZXRKU1hQcmFnbWFJbmZvXCI7XG5cbmltcG9ydCBUcmFuc2Zvcm1lciBmcm9tIFwiLi9UcmFuc2Zvcm1lclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU1hUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgXG4gIFxuICBcblxuICAvLyBTdGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGxpbmUgbnVtYmVyIG9mIGVhY2ggSlNYIHRhZyBpbiBkZXZlbG9wbWVudC5cbiAgX19pbml0KCkge3RoaXMubGFzdExpbmVOdW1iZXIgPSAxfVxuICBfX2luaXQyKCkge3RoaXMubGFzdEluZGV4ID0gMH1cblxuICAvLyBJbiBkZXZlbG9wbWVudCwgdmFyaWFibGUgbmFtZSBob2xkaW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuXG4gIF9faW5pdDMoKSB7dGhpcy5maWxlbmFtZVZhck5hbWUgPSBudWxsfVxuICAvLyBNYXBwaW5nIG9mIGNsYWltZWQgbmFtZXMgZm9yIGltcG9ydHMgaW4gdGhlIGF1dG9tYXRpYyB0cmFuc2Zvcm0sIGUsZy5cbiAgLy8ge2pzeDogXCJfanN4XCJ9LiBUaGlzIGRldGVybWluZXMgd2hpY2ggaW1wb3J0cyB0byBnZW5lcmF0ZSBpbiB0aGUgcHJlZml4LlxuICBfX2luaXQ0KCkge3RoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zID0ge319XG4gIC8vIFdoZW4gYXV0b21hdGljYWxseSBhZGRpbmcgaW1wb3J0cyBpbiBDSlMgbW9kZSwgd2Ugc3RvcmUgdGhlIHZhcmlhYmxlIG5hbWVcbiAgLy8gaG9sZGluZyB0aGUgaW1wb3J0ZWQgQ0pTIG1vZHVsZSBzbyB3ZSBjYW4gcmVxdWlyZSBpdCBpbiB0aGUgcHJlZml4LlxuICBfX2luaXQ1KCkge3RoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zID0ge319XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICBvcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaW1wb3J0UHJvY2Vzc29yID0gaW1wb3J0UHJvY2Vzc29yO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLm9wdGlvbnMgPSBvcHRpb25zO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0NS5jYWxsKHRoaXMpOztcbiAgICB0aGlzLmpzeFByYWdtYUluZm8gPSBnZXRKU1hQcmFnbWFJbmZvKG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lID0gb3B0aW9ucy5qc3hSdW50aW1lID09PSBcImF1dG9tYXRpY1wiO1xuICAgIHRoaXMuanN4SW1wb3J0U291cmNlID0gb3B0aW9ucy5qc3hJbXBvcnRTb3VyY2UgfHwgXCJyZWFjdFwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnU3RhcnQpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NKU1hUYWcoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRQcmVmaXhDb2RlKCkge1xuICAgIGxldCBwcmVmaXggPSBcIlwiO1xuICAgIGlmICh0aGlzLmZpbGVuYW1lVmFyTmFtZSkge1xuICAgICAgcHJlZml4ICs9IGBjb25zdCAke3RoaXMuZmlsZW5hbWVWYXJOYW1lfSA9ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLmZpbGVQYXRoIHx8IFwiXCIpfTtgO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUpIHtcbiAgICAgIGlmICh0aGlzLmltcG9ydFByb2Nlc3Nvcikge1xuICAgICAgICAvLyBDSlMgbW9kZTogZW1pdCByZXF1aXJlIHN0YXRlbWVudHMgZm9yIGFsbCBtb2R1bGVzIHRoYXQgd2VyZSByZWZlcmVuY2VkLlxuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCByZXNvbHZlZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zKSkge1xuICAgICAgICAgIHByZWZpeCArPSBgdmFyICR7cmVzb2x2ZWROYW1lfSA9IHJlcXVpcmUoXCIke3BhdGh9XCIpO2A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVTTSBtb2RlOiBjb25zb2xpZGF0ZSBhbmQgZW1pdCBpbXBvcnQgc3RhdGVtZW50cyBmb3IgcmVmZXJlbmNlZCBuYW1lcy5cbiAgICAgICAgY29uc3Qge2NyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRSZXNvbHV0aW9uLCAuLi5vdGhlclJlc29sdXRpb25zfSA9XG4gICAgICAgICAgdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnM7XG4gICAgICAgIGlmIChjcmVhdGVFbGVtZW50UmVzb2x1dGlvbikge1xuICAgICAgICAgIHByZWZpeCArPSBgaW1wb3J0IHtjcmVhdGVFbGVtZW50IGFzICR7Y3JlYXRlRWxlbWVudFJlc29sdXRpb259fSBmcm9tIFwiJHt0aGlzLmpzeEltcG9ydFNvdXJjZX1cIjtgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltcG9ydFNwZWNpZmllcnMgPSBPYmplY3QuZW50cmllcyhvdGhlclJlc29sdXRpb25zKVxuICAgICAgICAgIC5tYXAoKFtuYW1lLCByZXNvbHZlZE5hbWVdKSA9PiBgJHtuYW1lfSBhcyAke3Jlc29sdmVkTmFtZX1gKVxuICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgIGlmIChpbXBvcnRTcGVjaWZpZXJzKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9XG4gICAgICAgICAgICB0aGlzLmpzeEltcG9ydFNvdXJjZSArICh0aGlzLm9wdGlvbnMucHJvZHVjdGlvbiA/IFwiL2pzeC1ydW50aW1lXCIgOiBcIi9qc3gtZGV2LXJ1bnRpbWVcIik7XG4gICAgICAgICAgcHJlZml4ICs9IGBpbXBvcnQgeyR7aW1wb3J0U3BlY2lmaWVyc319IGZyb20gXCIke2ltcG9ydFBhdGh9XCI7YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgcHJvY2Vzc0pTWFRhZygpIHtcbiAgICBjb25zdCB7anN4Um9sZSwgc3RhcnR9ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgLy8gQ2FsY3VsYXRlIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGF0IHRoZSB2ZXJ5IHN0YXJ0IChpZiBpbiBkZXZlbG9wbWVudFxuICAgIC8vIG1vZGUpIHNvIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgcXVlcmllZCBpbiB0b2tlbiBvcmRlci5cbiAgICBjb25zdCBlbGVtZW50TG9jYXRpb25Db2RlID0gdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24gPyBudWxsIDogdGhpcy5nZXRFbGVtZW50TG9jYXRpb25Db2RlKHN0YXJ0KTtcbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUgJiYganN4Um9sZSAhPT0gSlNYUm9sZS5LZXlBZnRlclByb3BTcHJlYWQpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtVGFnVG9KU1hGdW5jKGVsZW1lbnRMb2NhdGlvbkNvZGUsIGpzeFJvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVRhZ1RvQ3JlYXRlRWxlbWVudChlbGVtZW50TG9jYXRpb25Db2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50TG9jYXRpb25Db2RlKGZpcnN0VG9rZW5TdGFydCkge1xuICAgIGNvbnN0IGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXJGb3JJbmRleChmaXJzdFRva2VuU3RhcnQpO1xuICAgIHJldHVybiBgbGluZU51bWJlcjogJHtsaW5lTnVtYmVyfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaW5lIG51bWJlciBmb3IgdGhpcyBzb3VyY2UgcG9zaXRpb24uIFRoaXMgaXMgY2FsY3VsYXRlZCBsYXppbHkgYW5kXG4gICAqIG11c3QgYmUgY2FsbGVkIGluIGluY3JlYXNpbmcgb3JkZXIgYnkgaW5kZXguXG4gICAqL1xuICBnZXRMaW5lTnVtYmVyRm9ySW5kZXgoaW5kZXgpIHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy50b2tlbnMuY29kZTtcbiAgICB3aGlsZSAodGhpcy5sYXN0SW5kZXggPCBpbmRleCAmJiB0aGlzLmxhc3RJbmRleCA8IGNvZGUubGVuZ3RoKSB7XG4gICAgICBpZiAoY29kZVt0aGlzLmxhc3RJbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgdGhpcy5sYXN0TGluZU51bWJlcisrO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0SW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdExpbmVOdW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgY3VycmVudCBKU1ggZWxlbWVudCB0byBhIGNhbGwgdG8ganN4LCBqc3hzLCBvciBqc3hERVYuIFRoaXMgaXNcbiAgICogdGhlIHByaW1hcnkgdHJhbnNmb3JtYXRpb24gZm9yIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiA8ZGl2IGE9ezF9IGtleT17Mn0+SGVsbG97eH08L2Rpdj5cbiAgICogYmVjb21lc1xuICAgKiBqc3hzKCdkaXYnLCB7YTogMSwgY2hpbGRyZW46IFtcIkhlbGxvXCIsIHhdfSwgMilcbiAgICovXG4gIHRyYW5zZm9ybVRhZ1RvSlNYRnVuYyhlbGVtZW50TG9jYXRpb25Db2RlLCBqc3hSb2xlKSB7XG4gICAgY29uc3QgaXNTdGF0aWMgPSBqc3hSb2xlID09PSBKU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0SlNYRnVuY0ludm9jYXRpb25Db2RlKGlzU3RhdGljKSk7XG5cbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAgIC8vIEZyYWdtZW50IHN5bnRheC5cbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHt0aGlzLmdldEZyYWdtZW50Q29kZSgpfSwge2ApO1xuICAgICAgdGhpcy5wcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiwge1wiKTtcbiAgICAgIGtleUNvZGUgPSB0aGlzLnByb2Nlc3NQcm9wcyh0cnVlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWcsIG5vIGNoaWxkcmVuIHRvIGFkZCwgc28gY2xvc2UgdGhlIHByb3BzLlxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnRW5kKSkge1xuICAgICAgICAvLyBUYWcgd2l0aCBjaGlsZHJlbi5cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgICAvLyBJZiBhIGtleSB3YXMgcHJlc2VudCwgbW92ZSBpdCB0byBpdHMgb3duIGFyZy4gTm90ZSB0aGF0IG1vdmluZyBjb2RlXG4gICAgICAvLyBsaWtlIHRoaXMgd2lsbCBjYXVzZSBsaW5lIG51bWJlcnMgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGhpbiB0aGUgSlNYXG4gICAgICAvLyBlbGVtZW50IGlmIHRoZSBrZXkgZXhwcmVzc2lvbiBoYXMgYSBuZXdsaW5lIGluIGl0LiBUaGlzIGlzIHVuZm9ydHVuYXRlLFxuICAgICAgLy8gYnV0IGhvcGVmdWxseSBzaG91bGQgYmUgcmFyZS5cbiAgICAgIGlmIChrZXlDb2RlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgJHtrZXlDb2RlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wcm9kdWN0aW9uKSB7XG4gICAgICAvLyBJZiB0aGUga2V5IHdhc24ndCBhbHJlYWR5IGFkZGVkLCBhZGQgaXQgbm93IHNvIHdlIGNhbiBjb3JyZWN0bHkgc2V0XG4gICAgICAvLyBwb3NpdGlvbmFsIGFyZ3MgZm9yIGpzeERFVi5cbiAgICAgIGlmIChrZXlDb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIsIHZvaWQgMFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgJHtpc1N0YXRpY30sICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9LCB0aGlzYCk7XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5qc3hUYWdFbmQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCIpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGN1cnJlbnQgSlNYIGVsZW1lbnQgdG8gYSBjcmVhdGVFbGVtZW50IGNhbGwuIEluIHRoZSBjbGFzc2ljXG4gICAqIHJ1bnRpbWUsIHRoaXMgaXMgdGhlIG9ubHkgY2FzZS4gSW4gdGhlIGF1dG9tYXRpYyBydW50aW1lLCB0aGlzIGlzIGNhbGxlZFxuICAgKiBhcyBhIGZhbGxiYWNrIGluIHNvbWUgc2l0dWF0aW9ucy5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPGRpdiBhPXsxfSBrZXk9ezJ9PkhlbGxve3h9PC9kaXY+XG4gICAqIGJlY29tZXNcbiAgICogUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2Jywge2E6IDEsIGtleTogMn0sIFwiSGVsbG9cIiwgeClcbiAgICovXG4gIHRyYW5zZm9ybVRhZ1RvQ3JlYXRlRWxlbWVudChlbGVtZW50TG9jYXRpb25Db2RlKSB7XG4gICAgLy8gRmlyc3QgdGFnIGlzIGFsd2F5cyBqc3hUYWdTdGFydC5cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5nZXRDcmVhdGVFbGVtZW50SW52b2NhdGlvbkNvZGUoKSk7XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCBudWxsYCk7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy5wcm9jZXNzUHJvcHNPYmplY3RXaXRoRGV2SW5mbyhlbGVtZW50TG9jYXRpb25Db2RlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWc7IG5vIGNoaWxkcmVuIHRvIHByb2Nlc3MuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAgICAgLy8gVGFnIHdpdGggY2hpbGRyZW4gYW5kIGEgY2xvc2UtdGFnOyBwcm9jZXNzIHRoZSBjaGlsZHJlbiBhcyBhcmdzLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5qc3hUYWdFbmQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCIpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29kZSBmb3IgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGZvciB0aGlzIGNvbnRleHQ6IGpzeCwganN4cyxcbiAgICogb3IganN4REVWLiBUaGUgZm9sbG93aW5nIG9wZW4tcGFyZW4gaXMgaW5jbHVkZWQgYXMgd2VsbC5cbiAgICpcbiAgICogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgcnVudGltZSwgc28gdGhleSBhcmUgYWx3YXlzXG4gICAqIGF1dG8taW1wb3J0ZWQsIGJ1dCB0aGUgYXV0by1pbXBvcnQgd2lsbCBiZSBlaXRoZXIgQ0pTIG9yIEVTTSBiYXNlZCBvbiB0aGVcbiAgICogdGFyZ2V0IG1vZHVsZSBmb3JtYXQuXG4gICAqL1xuICBnZXRKU1hGdW5jSW52b2NhdGlvbkNvZGUoaXNTdGF0aWMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb2R1Y3Rpb24pIHtcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGFpbUF1dG9JbXBvcnRlZEZ1bmNJbnZvY2F0aW9uKFwianN4c1wiLCBcIi9qc3gtcnVudGltZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hcIiwgXCIvanN4LXJ1bnRpbWVcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hERVZcIiwgXCIvanN4LWRldi1ydW50aW1lXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGZvciB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiwgZS5nLlxuICAgKiBgUmVhY3QuY3JlYXRlRWxlbWVudGAsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIG9wZW4tcGFyZW4uXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgY2xhc3NpYyBydW50aW1lLiBGb3IgdGhlXG4gICAqIGF1dG9tYXRpYyBydW50aW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBmYWxsYmFjayBmdW5jdGlvbiB0b1xuICAgKiBwcmVzZXJ2ZSBiZWhhdmlvciB3aGVuIHRoZXJlIGlzIGEgcHJvcCBzcHJlYWQgZm9sbG93ZWQgYnkgYW4gZXhwbGljaXRcbiAgICoga2V5LiBJbiB0aGF0IGF1dG9tYXRpYyBydW50aW1lIGNhc2UsIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgYXV0b21hdGljYWxseVxuICAgKiBpbXBvcnRlZC5cbiAgICovXG4gIGdldENyZWF0ZUVsZW1lbnRJbnZvY2F0aW9uQ29kZSgpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJjcmVhdGVFbGVtZW50XCIsIFwiXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7anN4UHJhZ21hSW5mb30gPSB0aGlzO1xuICAgICAgY29uc3QgcmVzb2x2ZWRQcmFnbWFCYXNlTmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGpzeFByYWdtYUluZm8uYmFzZSkgfHwganN4UHJhZ21hSW5mby5iYXNlXG4gICAgICAgIDoganN4UHJhZ21hSW5mby5iYXNlO1xuICAgICAgcmV0dXJuIGAke3Jlc29sdmVkUHJhZ21hQmFzZU5hbWV9JHtqc3hQcmFnbWFJbmZvLnN1ZmZpeH0oYDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjb2RlIHRvIHVzZSBhcyB0aGUgY29tcG9uZW50IHdoZW4gY29tcGlsaW5nIGEgc2hvcnRoYW5kXG4gICAqIGZyYWdtZW50LCBlLmcuIGBSZWFjdC5GcmFnbWVudGAuXG4gICAqXG4gICAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGVpdGhlciB0aGUgY2xhc3NpYyBvciBhdXRvbWF0aWMgcnVudGltZSwgYW5kXG4gICAqIHRoZSB2YWx1ZSBzaG91bGQgYmUgYXV0by1pbXBvcnRlZCBmb3IgdGhlIGF1dG9tYXRpYyBydW50aW1lLlxuICAgKi9cbiAgZ2V0RnJhZ21lbnRDb2RlKCkge1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWROYW1lKFxuICAgICAgICBcIkZyYWdtZW50XCIsXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uID8gXCIvanN4LXJ1bnRpbWVcIiA6IFwiL2pzeC1kZXYtcnVudGltZVwiLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge2pzeFByYWdtYUluZm99ID0gdGhpcztcbiAgICAgIGNvbnN0IHJlc29sdmVkRnJhZ21lbnRQcmFnbWFCYXNlTmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGpzeFByYWdtYUluZm8uZnJhZ21lbnRCYXNlKSB8fFxuICAgICAgICAgIGpzeFByYWdtYUluZm8uZnJhZ21lbnRCYXNlXG4gICAgICAgIDoganN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2U7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRGcmFnbWVudFByYWdtYUJhc2VOYW1lICsganN4UHJhZ21hSW5mby5mcmFnbWVudFN1ZmZpeDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGNvZGUgdGhhdCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbi5cbiAgICpcbiAgICogV2hlbiB0aGUgaW1wb3J0cyB0cmFuc2Zvcm0gaXMgZW5hYmxlZCwgdXNlIHRoZSBDSlNJbXBvcnRUcmFuc2Zvcm1lclxuICAgKiBzdHJhdGVneSBvZiB1c2luZyBgLmNhbGwodm9pZCAwLCAuLi5gIHRvIGF2b2lkIHBhc3NpbmcgYSBgdGhpc2AgdmFsdWUgaW4gYVxuICAgKiBzaXR1YXRpb24gdGhhdCB3b3VsZCBvdGhlcndpc2UgbG9vayBsaWtlIGEgbWV0aG9kIGNhbGwuXG4gICAqL1xuICBjbGFpbUF1dG9JbXBvcnRlZEZ1bmNJbnZvY2F0aW9uKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KSB7XG4gICAgY29uc3QgZnVuY0NvZGUgPSB0aGlzLmNsYWltQXV0b0ltcG9ydGVkTmFtZShmdW5jTmFtZSwgaW1wb3J0UGF0aFN1ZmZpeCk7XG4gICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICByZXR1cm4gYCR7ZnVuY0NvZGV9LmNhbGwodm9pZCAwLCBgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7ZnVuY0NvZGV9KGA7XG4gICAgfVxuICB9XG5cbiAgY2xhaW1BdXRvSW1wb3J0ZWROYW1lKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KSB7XG4gICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICAvLyBDSlMgbW9kZTogY2xhaW0gYSBuYW1lIGZvciB0aGUgbW9kdWxlIGFuZCBtYXJrIGl0IGZvciBpbXBvcnQuXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5qc3hJbXBvcnRTb3VyY2UgKyBpbXBvcnRQYXRoU3VmZml4O1xuICAgICAgaWYgKCF0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9uc1twYXRoXSkge1xuICAgICAgICB0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9uc1twYXRoXSA9XG4gICAgICAgICAgdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke3RoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdfS4ke2Z1bmNOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVTTSBtb2RlOiBjbGFpbSBhIG5hbWUgZm9yIHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBpdCB0byB0aGUgbmFtZXMgdGhhdFxuICAgICAgLy8gc2hvdWxkIGJlIGF1dG8taW1wb3J0ZWQgd2hlbiB0aGUgcHJlZml4IGlzIGdlbmVyYXRlZC5cbiAgICAgIGlmICghdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnNbZnVuY05hbWVdKSB7XG4gICAgICAgIHRoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zW2Z1bmNOYW1lXSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcbiAgICAgICAgICBgXyR7ZnVuY05hbWV9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9uc1tmdW5jTmFtZV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGZpcnN0IHBhcnQgb2YgYSB0YWcsIGJlZm9yZSBhbnkgcHJvcHMuXG4gICAqL1xuICBwcm9jZXNzVGFnSW50cm8oKSB7XG4gICAgLy8gV2FsayBmb3J3YXJkIHVudGlsIHdlIHNlZSBvbmUgb2YgdGhlc2UgcGF0dGVybnM6XG4gICAgLy8ganN4TmFtZSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcCwgcHJlY2VkZWQgYnkgYW5vdGhlciBqc3hOYW1lIHRvIGVuZCB0aGUgdGFnIG5hbWUuXG4gICAgLy8ganN4TmFtZSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcCwgcHJlY2VkZWQgYnkgZ3JlYXRlclRoYW4gdG8gZW5kIHRoZSB0eXBlIGFyZ3VtZW50LlxuICAgIC8vIFtvcGVuIGJyYWNlXSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcC5cbiAgICAvLyBbanN4VGFnRW5kXSB0byBlbmQgdGhlIG9wZW4tdGFnLlxuICAgIC8vIFtzbGFzaCwganN4VGFnRW5kXSB0byBlbmQgdGhlIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgbGV0IGludHJvRW5kID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIHdoaWxlIChcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1tpbnRyb0VuZF0uaXNUeXBlIHx8XG4gICAgICAoIXRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbnRyb0VuZCAtIDEsIHR0LmpzeE5hbWUsIHR0LmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQgLSAxLCB0dC5ncmVhdGVyVGhhbiwgdHQuanN4TmFtZSkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbnRyb0VuZCwgdHQuYnJhY2VMKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGludHJvRW5kLCB0dC5qc3hUYWdFbmQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQsIHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKVxuICAgICkge1xuICAgICAgaW50cm9FbmQrKztcbiAgICB9XG4gICAgaWYgKGludHJvRW5kID09PSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhMb3dlckNhc2UodGFnTmFtZSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHt0YWdOYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgaW50cm9FbmQpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9wcywgYWRkIHRoZSBwcm9wcyBhcmd1bWVudCB0b1xuICAgKiBSZWFjdC5jcmVhdGVFbGVtZW50LCBpbmNsdWRpbmcgdGhlIGNvbW1hIGJlZm9yZSBpdC5cbiAgICovXG4gIHByb2Nlc3NQcm9wc09iamVjdFdpdGhEZXZJbmZvKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICBjb25zdCBkZXZQcm9wcyA9IHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uXG4gICAgICA/IFwiXCJcbiAgICAgIDogYF9fc2VsZjogdGhpcywgX19zb3VyY2U6ICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9YDtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeE5hbWUpICYmICF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICBpZiAoZGV2UHJvcHMpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCB7JHtkZXZQcm9wc319YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAsIG51bGxgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCB7YCk7XG4gICAgdGhpcy5wcm9jZXNzUHJvcHMoZmFsc2UpO1xuICAgIGlmIChkZXZQcm9wcykge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7ZGV2UHJvcHN9fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSBjb3JlIHBhcnQgb2YgdGhlIHByb3BzLCBhc3N1bWluZyB0aGF0IGEgeyBoYXMgYWxyZWFkeSBiZWVuXG4gICAqIGluc2VydGVkIGJlZm9yZSB1cyBhbmQgdGhhdCBhIH0gd2lsbCBiZSBpbnNlcnRlZCBhZnRlciB1cy5cbiAgICpcbiAgICogSWYgZXh0cmFjdEtleUNvZGUgaXMgdHJ1ZSAoaS5lLiB3aGVuIHVzaW5nIGFueSBqc3guLi4gZnVuY3Rpb24pLCBhbnkgcHJvcFxuICAgKiBuYW1lZCBcImtleVwiIGhhcyBpdHMgY29kZSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgcmF0aGVyIHRoYW4gYmVpbmcgZW1pdHRlZCB0b1xuICAgKiB0aGUgb3V0cHV0IGNvZGUuIFRoaXMgc2hpZnRzIGxpbmUgbnVtYmVycywgYW5kIGVtaXR0aW5nIHRoZSBjb2RlIGxhdGVyIHdpbGxcbiAgICogY29ycmVjdCBsaW5lIG51bWJlcnMgYWdhaW4uIElmIG5vIGtleSBpcyBmb3VuZCBvciBpZiBleHRyYWN0S2V5Q29kZSBpc1xuICAgKiBmYWxzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG51bGwuXG4gICAqL1xuICBwcm9jZXNzUHJvcHMoZXh0cmFjdEtleUNvZGUpIHtcbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5qc3hOYW1lLCB0dC5lcSkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIga2V5PXt2YWx1ZX0gb3Iga2V5PVwidmFsdWVcIiBwcm9wLlxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgIGlmIChleHRyYWN0S2V5Q29kZSAmJiBwcm9wTmFtZSA9PT0gXCJrZXlcIikge1xuICAgICAgICAgIGlmIChrZXlDb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgcHJvcHMgbGlzdCBoYXMgbXVsdGlwbGUga2V5cy4gRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhcmVcbiAgICAgICAgICAgIC8vIGluY29uc2lzdGVudCBhYm91dCB3aGF0IHRvIGRvIGhlcmU6IGFzIG9mIHRoaXMgd3JpdGluZywgQmFiZWwgYW5kXG4gICAgICAgICAgICAvLyBzd2Mga2VlcCB0aGUgKmxhc3QqIGtleSBhbmQgY29tcGxldGVseSByZW1vdmUgdGhlIHJlc3QsIHdoaWxlXG4gICAgICAgICAgICAvLyBUeXBlU2NyaXB0IHVzZXMgdGhlICpmaXJzdCoga2V5IGFuZCBsZWF2ZXMgdGhlIG90aGVycyBhcyByZWd1bGFyXG4gICAgICAgICAgICAvLyBwcm9wcy4gVGhlIFJlYWN0IHRlYW0gY29sbGFib3JhdGVkIHdpdGggQmFiZWwgb24gdGhlXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLCBzbyBwcmVzdW1hYmx5IHRoZSBCYWJlbCBiZWhhdmlvclxuICAgICAgICAgICAgLy8gaXMgdGhlIG9uZSB0byB1c2UuXG4gICAgICAgICAgICAvLyBTaW5jZSB3ZSB3b24ndCBldmVyIGJlIGVtaXR0aW5nIHRoZSBwcmV2aW91cyBrZXkgY29kZSwgd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gYXQgbGVhc3QgZW1pdCBpdHMgbmV3bGluZXMgaGVyZSBzbyB0aGF0IHRoZSBsaW5lIG51bWJlcnMgbWF0Y2ggdXBcbiAgICAgICAgICAgIC8vIGluIHRoZSBsb25nIHJ1bi5cbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoa2V5Q29kZS5yZXBsYWNlKC9bXlxcbl0vZywgXCJcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBrZXlcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vID1cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy50b2tlbnMuc25hcHNob3QoKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wVmFsdWUoKTtcbiAgICAgICAgICBrZXlDb2RlID0gdGhpcy50b2tlbnMuZGFuZ2Vyb3VzbHlHZXRBbmRSZW1vdmVDb2RlU2luY2VTbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgICAgLy8gRG9uJ3QgYWRkIGEgY29tbWFcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wTmFtZShwcm9wTmFtZSk7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiOiBcIik7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzUHJvcFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4TmFtZSkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0aGFuZCBwcm9wIGxpa2UgPGlucHV0IGRpc2FibGVkIC8+LlxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKTtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIjogdHJ1ZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkge1xuICAgICAgICAvLyBUaGlzIGlzIHByb3Agc3ByZWFkLCBsaWtlIDxkaXYgey4uLmdldFByb3BzKCl9Piwgd2hpY2ggd2UgY2FuIHBhc3NcbiAgICAgICAgLy8gdGhyb3VnaCBmYWlybHkgZGlyZWN0bHkgYXMgYW4gb2JqZWN0IHNwcmVhZC5cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBrZXlDb2RlO1xuICB9XG5cbiAgcHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHtwcm9wTmFtZX0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NQcm9wVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ1N0YXJ0KSkge1xuICAgICAgdGhpcy5wcm9jZXNzSlNYVGFnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmluZ1Byb3BWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTdHJpbmdQcm9wVmFsdWUoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRDb2RlID0gZm9ybWF0SlNYVGV4dFJlcGxhY2VtZW50KHZhbHVlQ29kZSk7XG4gICAgY29uc3QgbGl0ZXJhbENvZGUgPSBmb3JtYXRKU1hTdHJpbmdWYWx1ZUxpdGVyYWwodmFsdWVDb2RlKTtcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obGl0ZXJhbENvZGUgKyByZXBsYWNlbWVudENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0aW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlIHByb3BzIG9iamVjdCBsaXRlcmFsLCBwcm9kdWNlIGFuIGFkZGl0aW9uYWxcbiAgICogcHJvcCBmb3IgdGhlIGNoaWxkcmVuIGFuZCBjbG9zZSB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAqL1xuICBwcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKSB7XG4gICAgaWYgKGpzeFJvbGUgPT09IEpTWFJvbGUuU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgY2hpbGRyZW46IFtcIik7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXX1cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJzZXIgaW5mb3JtYXRpb24gdGVsbHMgdXMgd2hldGhlciB3ZSB3aWxsIHNlZSBhIHJlYWwgY2hpbGQgb3IgaWZcbiAgICAgIC8vIGFsbCByZW1haW5pbmcgY2hpbGRyZW4gKGlmIGFueSkgd2lsbCByZXNvbHZlIHRvIGVtcHR5LiBJZiB0aGVyZSBhcmUgbm9cbiAgICAgIC8vIG5vbi1lbXB0eSBjaGlsZHJlbiwgZG9uJ3QgZW1pdCBhIGNoaWxkcmVuIHByb3AgYXQgYWxsLCBidXQgc3RpbGxcbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gc28gdGhhdCB3ZSBwcm9wZXJseSB0cmFuc2Zvcm0gdGhlIGNvZGUgaW50byBub3RoaW5nLlxuICAgICAgaWYgKGpzeFJvbGUgPT09IEpTWFJvbGUuT25lQ2hpbGQpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiBjaGlsZHJlbjogXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRyZW4oZmFsc2UpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIn1cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBjaGlsZHJlbiBpbnRvIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdoaWNoIHdpbGwgYmUgZWl0aGVyXG4gICAqIGFyZ3VtZW50cyB0byBjcmVhdGVFbGVtZW50IG9yIGFycmF5IGVsZW1lbnRzIG9mIGEgY2hpbGRyZW4gcHJvcC5cbiAgICovXG4gIHByb2Nlc3NDaGlsZHJlbihuZWVkc0luaXRpYWxDb21tYSkge1xuICAgIGxldCBuZWVkc0NvbW1hID0gbmVlZHNJbml0aWFsQ29tbWE7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5qc3hUYWdTdGFydCwgdHQuc2xhc2gpKSB7XG4gICAgICAgIC8vIENsb3NpbmcgdGFnLCBzbyBubyBtb3JlIGNoaWxkcmVuLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGlkRW1pdEVsZW1lbnQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5icmFjZUwsIHR0LmJyYWNlUikpIHtcbiAgICAgICAgICAvLyBFbXB0eSBpbnRlcnBvbGF0aW9ucyBhbmQgY29tbWVudC1vbmx5IGludGVycG9sYXRpb25zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgLy8gYW5kIGRvbid0IGNyZWF0ZSBhbiBleHRyYSBjaGlsZCBhcmcuXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJcIik7XG4gICAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ1N0YXJ0KSkge1xuICAgICAgICAvLyBDaGlsZCBKU1ggZWxlbWVudFxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKG5lZWRzQ29tbWEgPyBcIiwgXCIgOiBcIlwiKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzSlNYVGFnKCk7XG4gICAgICAgIGRpZEVtaXRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGV4dCkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4RW1wdHlUZXh0KSkge1xuICAgICAgICBkaWRFbWl0RWxlbWVudCA9IHRoaXMucHJvY2Vzc0NoaWxkVGV4dEVsZW1lbnQobmVlZHNDb21tYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuIHdoZW4gcHJvY2Vzc2luZyBKU1ggY2hpbGRyZW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRpZEVtaXRFbGVtZW50KSB7XG4gICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIGEgSlNYIHRleHQgZWxlbWVudCBpbnRvIGEgc3RyaW5nIGxpdGVyYWwsIG9yIG5vdGhpbmcgYXQgYWxsIGlmIHRoZSBKU1hcbiAgICogdGV4dCByZXNvbHZlcyB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBzdHJpbmcgbGl0ZXJhbCBpcyBlbWl0dGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRUZXh0RWxlbWVudChuZWVkc0NvbW1hKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYVGV4dExpdGVyYWwodmFsdWVDb2RlKTtcbiAgICBpZiAobGl0ZXJhbENvZGUgPT09ICdcIlwiJykge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50Q29kZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtuZWVkc0NvbW1hID8gXCIsIFwiIDogXCJcIn0ke2xpdGVyYWxDb2RlfSR7cmVwbGFjZW1lbnRDb2RlfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV2U291cmNlKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICByZXR1cm4gYHtmaWxlTmFtZTogJHt0aGlzLmdldEZpbGVuYW1lVmFyTmFtZSgpfSwgJHtlbGVtZW50TG9jYXRpb25Db2RlfX1gO1xuICB9XG5cbiAgZ2V0RmlsZW5hbWVWYXJOYW1lKCkge1xuICAgIGlmICghdGhpcy5maWxlbmFtZVZhck5hbWUpIHtcbiAgICAgIHRoaXMuZmlsZW5hbWVWYXJOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2pzeEZpbGVOYW1lXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWxlbmFtZVZhck5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGVjIGZvciBpZGVudGlmaWVyczogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNwcm9kLUlkZW50aWZpZXJTdGFydC5cbiAqXG4gKiBSZWFsbHkgb25seSB0cmVhdCBhbnl0aGluZyBzdGFydGluZyB3aXRoIGEteiBhcyB0YWcgbmFtZXMuICBgX2AsIGAkYCwgYFx1MDBFOWBcbiAqIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNvbXBvbmVudCBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aExvd2VyQ2FzZShzKSB7XG4gIGNvbnN0IGZpcnN0Q2hhciA9IHMuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGZpcnN0Q2hhciA+PSBjaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBmaXJzdENoYXIgPD0gY2hhckNvZGVzLmxvd2VyY2FzZVo7XG59XG5cbi8qKlxuICogVHVybiB0aGUgZ2l2ZW4ganN4VGV4dCBzdHJpbmcgaW50byBhIEpTIHN0cmluZyBsaXRlcmFsLiBMZWFkaW5nIGFuZCB0cmFpbGluZ1xuICogd2hpdGVzcGFjZSBvbiBsaW5lcyBpcyByZW1vdmVkLCBleGNlcHQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW4tdGFnIGFuZFxuICogYmVmb3JlIHRoZSBjbG9zZS10YWcuIEVtcHR5IGxpbmVzIGFyZSBjb21wbGV0ZWx5IHJlbW92ZWQsIGFuZCBzcGFjZXMgYXJlXG4gKiBhZGRlZCBiZXR3ZWVuIGxpbmVzIGFmdGVyIHRoYXQuXG4gKlxuICogV2UgdXNlIEpTT04uc3RyaW5naWZ5IHRvIGludHJvZHVjZSBlc2NhcGUgY2hhcmFjdGVycyBhcyBuZWNlc3NhcnksIGFuZCB0cmltXG4gKiB0aGUgc3RhcnQgYW5kIGVuZCBvZiBlYWNoIGxpbmUgYW5kIHJlbW92ZSBibGFuayBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYVGV4dExpdGVyYWwodGV4dCkge1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IHdoaXRlc3BhY2UgPSBcIlwiO1xuXG4gIGxldCBpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlID0gZmFsc2U7XG4gIGxldCBzZWVuTm9uV2hpdGVzcGFjZSA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gdGV4dFtpXTtcbiAgICBpZiAoYyA9PT0gXCIgXCIgfHwgYyA9PT0gXCJcXHRcIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgICBpZiAoIWlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgd2hpdGVzcGFjZSArPSBjO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgd2hpdGVzcGFjZSA9IFwiXCI7XG4gICAgICBpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNlZW5Ob25XaGl0ZXNwYWNlICYmIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHdoaXRlc3BhY2U7XG4gICAgICB3aGl0ZXNwYWNlID0gXCJcIjtcbiAgICAgIGlmIChjID09PSBcIiZcIikge1xuICAgICAgICBjb25zdCB7ZW50aXR5LCBuZXdJfSA9IHByb2Nlc3NFbnRpdHkodGV4dCwgaSArIDEpO1xuICAgICAgICBpID0gbmV3SSAtIDE7XG4gICAgICAgIHJlc3VsdCArPSBlbnRpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYztcbiAgICAgIH1cbiAgICAgIHNlZW5Ob25XaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlKSB7XG4gICAgcmVzdWx0ICs9IHdoaXRlc3BhY2U7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XG59XG5cbi8qKlxuICogUHJvZHVjZSB0aGUgY29kZSB0aGF0IHNob3VsZCBiZSBwcmludGVkIGFmdGVyIHRoZSBKU1ggdGV4dCBzdHJpbmcgbGl0ZXJhbCxcbiAqIHdpdGggbW9zdCBjb250ZW50IHJlbW92ZWQsIGJ1dCBhbGwgbmV3bGluZXMgcHJlc2VydmVkIGFuZCBhbGwgc3BhY2luZyBhdCB0aGVcbiAqIGVuZCBwcmVzZXJ2ZWQuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh0ZXh0KSB7XG4gIGxldCBudW1OZXdsaW5lcyA9IDA7XG4gIGxldCBudW1TcGFjZXMgPSAwO1xuICBmb3IgKGNvbnN0IGMgb2YgdGV4dCkge1xuICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICBudW1OZXdsaW5lcysrO1xuICAgICAgbnVtU3BhY2VzID0gMDtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFwiIFwiKSB7XG4gICAgICBudW1TcGFjZXMrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXFxuXCIucmVwZWF0KG51bU5ld2xpbmVzKSArIFwiIFwiLnJlcGVhdChudW1TcGFjZXMpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIHN0cmluZyBpbiB0aGUgdmFsdWUgcG9zaXRpb24gb2YgYSBKU1ggcHJvcC5cbiAqXG4gKiBVc2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgY29udmVydEF0dHJpYnV0ZSBmcm9tXG4gKiBiYWJlbC1oZWxwZXItYnVpbGRlci1yZWFjdC1qc3guXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEpTWFN0cmluZ1ZhbHVlTGl0ZXJhbCh0ZXh0KSB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gdGV4dFtpXTtcbiAgICBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgaWYgKC9cXHMvLnRlc3QodGV4dFtpICsgMV0pKSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiAvXFxzLy50ZXN0KHRleHRbaSArIDFdKSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiXFxuXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBcIiZcIikge1xuICAgICAgY29uc3Qge2VudGl0eSwgbmV3SX0gPSBwcm9jZXNzRW50aXR5KHRleHQsIGkgKyAxKTtcbiAgICAgIHJlc3VsdCArPSBlbnRpdHk7XG4gICAgICBpID0gbmV3SSAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBTdGFydGluZyBhdCBhICYsIHNlZSBpZiB0aGVyZSdzIGFuIEhUTUwgZW50aXR5IChzcGVjaWZpZWQgYnkgbmFtZSwgZGVjaW1hbFxuICogY2hhciBjb2RlLCBvciBoZXggY2hhciBjb2RlKSBhbmQgcmV0dXJuIGl0IGlmIHNvLlxuICpcbiAqIE1vZGlmaWVkIGZyb20ganN4UmVhZFN0cmluZyBpbiBiYWJlbC1wYXJzZXIuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NFbnRpdHkodGV4dCwgaW5kZXhBZnRlckFtcGVyc2FuZCkge1xuICBsZXQgc3RyID0gXCJcIjtcbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IGVudGl0eTtcbiAgbGV0IGkgPSBpbmRleEFmdGVyQW1wZXJzYW5kO1xuXG4gIGlmICh0ZXh0W2ldID09PSBcIiNcIikge1xuICAgIGxldCByYWRpeCA9IDEwO1xuICAgIGkrKztcbiAgICBsZXQgbnVtU3RhcnQ7XG4gICAgaWYgKHRleHRbaV0gPT09IFwieFwiKSB7XG4gICAgICByYWRpeCA9IDE2O1xuICAgICAgaSsrO1xuICAgICAgbnVtU3RhcnQgPSBpO1xuICAgICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiBpc0hleERpZ2l0KHRleHQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBudW1TdGFydCA9IGk7XG4gICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGlzRGVjaW1hbERpZ2l0KHRleHQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGV4dFtpXSA9PT0gXCI7XCIpIHtcbiAgICAgIGNvbnN0IG51bVN0ciA9IHRleHQuc2xpY2UobnVtU3RhcnQsIGkpO1xuICAgICAgaWYgKG51bVN0cikge1xuICAgICAgICBpKys7XG4gICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KG51bVN0ciwgcmFkaXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgIGNvbnN0IGNoID0gdGV4dFtpXTtcbiAgICAgIGkrKztcbiAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgZW50aXR5ID0gWEhUTUxFbnRpdGllcy5nZXQoc3RyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdHIgKz0gY2g7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4ge2VudGl0eTogXCImXCIsIG5ld0k6IGluZGV4QWZ0ZXJBbXBlcnNhbmR9O1xuICB9XG4gIHJldHVybiB7ZW50aXR5LCBuZXdJOiBpfTtcbn1cblxuZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY29kZSkge1xuICByZXR1cm4gY29kZSA+PSBjaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gY2hhckNvZGVzLmRpZ2l0OTtcbn1cblxuZnVuY3Rpb24gaXNIZXhEaWdpdChjb2RlKSB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLmxvd2VyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMubG93ZXJjYXNlRikgfHxcbiAgICAoY29kZSA+PSBjaGFyQ29kZXMudXBwZXJjYXNlQSAmJiBjb2RlIDw9IGNoYXJDb2Rlcy51cHBlcmNhc2VGKVxuICApO1xufVxuIiwgIlxuaW1wb3J0IHtJZGVudGlmaWVyUm9sZX0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5UeXBlLCBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cbmltcG9ydCB7c3RhcnRzV2l0aExvd2VyQ2FzZX0gZnJvbSBcIi4uL3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IGdldEpTWFByYWdtYUluZm8gZnJvbSBcIi4vZ2V0SlNYUHJhZ21hSW5mb1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9uVHlwZUlkZW50aWZpZXJzKHRva2Vucywgb3B0aW9ucykge1xuICBjb25zdCBqc3hQcmFnbWFJbmZvID0gZ2V0SlNYUHJhZ21hSW5mbyhvcHRpb25zKTtcbiAgY29uc3Qgbm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gdHQubmFtZSAmJlxuICAgICAgIXRva2VuLmlzVHlwZSAmJlxuICAgICAgKHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5BY2Nlc3MgfHxcbiAgICAgICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZCB8fFxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzKSAmJlxuICAgICAgIXRva2VuLnNoYWRvd3NHbG9iYWxcbiAgICApIHtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICB9XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IHR0LmpzeFRhZ1N0YXJ0KSB7XG4gICAgICBub25UeXBlSWRlbnRpZmllcnMuYWRkKGpzeFByYWdtYUluZm8uYmFzZSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRva2VuLnR5cGUgPT09IHR0LmpzeFRhZ1N0YXJ0ICYmXG4gICAgICBpICsgMSA8IHRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSB0dC5qc3hUYWdFbmRcbiAgICApIHtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQoanN4UHJhZ21hSW5mby5iYXNlKTtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQoanN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2UpO1xuICAgIH1cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gdHQuanN4TmFtZSAmJiB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICAgIC8vIExvd2VyLWNhc2Ugc2luZ2xlLWNvbXBvbmVudCB0YWcgbmFtZXMgbGlrZSBcImRpdlwiIGRvbid0IGNvdW50LlxuICAgICAgaWYgKCFzdGFydHNXaXRoTG93ZXJDYXNlKGlkZW50aWZpZXJOYW1lKSB8fCB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSBUb2tlblR5cGUuZG90KSB7XG4gICAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vblR5cGVJZGVudGlmaWVycztcbn1cbiIsICJcblxuXG5pbXBvcnQge2lzRGVjbGFyYXRpb259IGZyb20gXCIuL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cbmltcG9ydCBnZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvIGZyb20gXCIuL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mb1wiO1xuaW1wb3J0IHtnZXROb25UeXBlSWRlbnRpZmllcnN9IGZyb20gXCIuL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzXCI7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIHByZXByb2Nlc3NpbmcgYW5kIGJvb2trZWVwaW5nIGltcG9ydCBhbmQgZXhwb3J0IGRlY2xhcmF0aW9ucyB3aXRoaW4gdGhlXG4gKiBmaWxlLlxuICpcbiAqIFR5cGVTY3JpcHQgdXNlcyBhIHNpbXBsZXIgbWVjaGFuaXNtIHRoYXQgZG9lcyBub3QgdXNlIGZ1bmN0aW9ucyBsaWtlIGludGVyb3BSZXF1aXJlRGVmYXVsdCBhbmRcbiAqIGludGVyb3BSZXF1aXJlV2lsZGNhcmQsIHNvIHdlIGFsc28gYWxsb3cgdGhhdCBtb2RlIGZvciBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDSlNJbXBvcnRQcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMubm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpfVxuICAgX19pbml0MigpIHt0aGlzLmltcG9ydEluZm9CeVBhdGggPSBuZXcgTWFwKCl9XG4gICBfX2luaXQzKCkge3RoaXMuaW1wb3J0c1RvUmVwbGFjZSA9IG5ldyBNYXAoKX1cbiAgIF9faW5pdDQoKSB7dGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzID0gbmV3IE1hcCgpfVxuICAgX19pbml0NSgpIHt0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUgPSBuZXcgTWFwKCl9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICB0b2tlbnMsXG4gICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICBvcHRpb25zLFxuICAgICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3A7dGhpcy5vcHRpb25zID0gb3B0aW9uczt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMua2VlcFVudXNlZEltcG9ydHMgPSBrZWVwVW51c2VkSW1wb3J0czt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO0NKU0ltcG9ydFByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ1LmNhbGwodGhpcyk7fVxuXG4gIHByZXByb2Nlc3NUb2tlbnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Ll9pbXBvcnQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaSwgdHQuX2ltcG9ydCwgdHQubmFtZSwgdHQuZXEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzSW1wb3J0QXRJbmRleChpKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Ll9leHBvcnQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaSwgdHQuX2V4cG9ydCwgdHQuZXEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzRXhwb3J0QXRJbmRleChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZUltcG9ydFJlcGxhY2VtZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIFR5cGVTY3JpcHQsIGltcG9ydCBzdGF0ZW1lbnRzIHRoYXQgb25seSBpbXBvcnQgdHlwZXMgc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAqIFRoaXMgaW5jbHVkZXMgYGltcG9ydCB7fSBmcm9tICdmb28nO2AsIGJ1dCBub3QgYGltcG9ydCAnZm9vJztgLlxuICAgKi9cbiAgcHJ1bmVUeXBlT25seUltcG9ydHMoKSB7XG4gICAgdGhpcy5ub25UeXBlSWRlbnRpZmllcnMgPSBnZXROb25UeXBlSWRlbnRpZmllcnModGhpcy50b2tlbnMsIHRoaXMub3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgaW1wb3J0SW5mb10gb2YgdGhpcy5pbXBvcnRJbmZvQnlQYXRoLmVudHJpZXMoKSkge1xuICAgICAgaWYgKFxuICAgICAgICBpbXBvcnRJbmZvLmhhc0JhcmVJbXBvcnQgfHxcbiAgICAgICAgaW1wb3J0SW5mby5oYXNTdGFyRXhwb3J0IHx8XG4gICAgICAgIGltcG9ydEluZm8uZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgaW1wb3J0SW5mby5uYW1lZEV4cG9ydHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZXMgPSBbXG4gICAgICAgIC4uLmltcG9ydEluZm8uZGVmYXVsdE5hbWVzLFxuICAgICAgICAuLi5pbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMsXG4gICAgICAgIC4uLmltcG9ydEluZm8ubmFtZWRJbXBvcnRzLm1hcCgoe2xvY2FsTmFtZX0pID0+IGxvY2FsTmFtZSksXG4gICAgICBdO1xuICAgICAgaWYgKG5hbWVzLmV2ZXJ5KChuYW1lKSA9PiB0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShuYW1lKSkpIHtcbiAgICAgICAgdGhpcy5pbXBvcnRzVG9SZXBsYWNlLnNldChwYXRoLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5ub25UeXBlSWRlbnRpZmllcnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxuXG4gICBnZW5lcmF0ZUltcG9ydFJlcGxhY2VtZW50cygpIHtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbXBvcnRJbmZvXSBvZiB0aGlzLmltcG9ydEluZm9CeVBhdGguZW50cmllcygpKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlZmF1bHROYW1lcyxcbiAgICAgICAgd2lsZGNhcmROYW1lcyxcbiAgICAgICAgbmFtZWRJbXBvcnRzLFxuICAgICAgICBuYW1lZEV4cG9ydHMsXG4gICAgICAgIGV4cG9ydFN0YXJOYW1lcyxcbiAgICAgICAgaGFzU3RhckV4cG9ydCxcbiAgICAgIH0gPSBpbXBvcnRJbmZvO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBuYW1lZEV4cG9ydHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIGV4cG9ydFN0YXJOYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgIWhhc1N0YXJFeHBvcnRcbiAgICAgICkge1xuICAgICAgICAvLyBJbXBvcnQgaXMgbmV2ZXIgdXNlZCwgc28gZG9uJ3QgZXZlbiBhc3NpZ24gYSBuYW1lLlxuICAgICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIGByZXF1aXJlKCcke3BhdGh9Jyk7YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmltYXJ5SW1wb3J0TmFtZSA9IHRoaXMuZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpO1xuICAgICAgbGV0IHNlY29uZGFyeUltcG9ydE5hbWU7XG4gICAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCkge1xuICAgICAgICBzZWNvbmRhcnlJbXBvcnROYW1lID0gcHJpbWFyeUltcG9ydE5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWNvbmRhcnlJbXBvcnROYW1lID1cbiAgICAgICAgICB3aWxkY2FyZE5hbWVzLmxlbmd0aCA+IDAgPyB3aWxkY2FyZE5hbWVzWzBdIDogdGhpcy5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICB9XG4gICAgICBsZXQgcmVxdWlyZUNvZGUgPSBgdmFyICR7cHJpbWFyeUltcG9ydE5hbWV9ID0gcmVxdWlyZSgnJHtwYXRofScpO2A7XG4gICAgICBpZiAod2lsZGNhcmROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3Qgd2lsZGNhcmROYW1lIG9mIHdpbGRjYXJkTmFtZXMpIHtcbiAgICAgICAgICBjb25zdCBtb2R1bGVFeHByID0gdGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcFxuICAgICAgICAgICAgPyBwcmltYXJ5SW1wb3J0TmFtZVxuICAgICAgICAgICAgOiBgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImludGVyb3BSZXF1aXJlV2lsZGNhcmRcIil9KCR7cHJpbWFyeUltcG9ydE5hbWV9KWA7XG4gICAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHt3aWxkY2FyZE5hbWV9ID0gJHttb2R1bGVFeHByfTtgO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV4cG9ydFN0YXJOYW1lcy5sZW5ndGggPiAwICYmIHNlY29uZGFyeUltcG9ydE5hbWUgIT09IHByaW1hcnlJbXBvcnROYW1lKSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgdmFyICR7c2Vjb25kYXJ5SW1wb3J0TmFtZX0gPSAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFxuICAgICAgICAgIFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiLFxuICAgICAgICApfSgke3ByaW1hcnlJbXBvcnROYW1lfSk7YDtcbiAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdE5hbWVzLmxlbmd0aCA+IDAgJiYgc2Vjb25kYXJ5SW1wb3J0TmFtZSAhPT0gcHJpbWFyeUltcG9ydE5hbWUpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHtzZWNvbmRhcnlJbXBvcnROYW1lfSA9ICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJpbnRlcm9wUmVxdWlyZURlZmF1bHRcIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pO2A7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qge2ltcG9ydGVkTmFtZSwgbG9jYWxOYW1lfSBvZiBuYW1lZEV4cG9ydHMpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFxuICAgICAgICAgIFwiY3JlYXRlTmFtZWRFeHBvcnRGcm9tXCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9LCAnJHtsb2NhbE5hbWV9JywgJyR7aW1wb3J0ZWROYW1lfScpO2A7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGV4cG9ydFN0YXJOYW1lIG9mIGV4cG9ydFN0YXJOYW1lcykge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgIGV4cG9ydHMuJHtleHBvcnRTdGFyTmFtZX0gPSAke3NlY29uZGFyeUltcG9ydE5hbWV9O2A7XG4gICAgICB9XG4gICAgICBpZiAoaGFzU3RhckV4cG9ydCkge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJjcmVhdGVTdGFyRXhwb3J0XCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9KTtgO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIHJlcXVpcmVDb2RlKTtcblxuICAgICAgZm9yIChjb25zdCBkZWZhdWx0TmFtZSBvZiBkZWZhdWx0TmFtZXMpIHtcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzLnNldChkZWZhdWx0TmFtZSwgYCR7c2Vjb25kYXJ5SW1wb3J0TmFtZX0uZGVmYXVsdGApO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7aW1wb3J0ZWROYW1lLCBsb2NhbE5hbWV9IG9mIG5hbWVkSW1wb3J0cykge1xuICAgICAgICB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuc2V0KGxvY2FsTmFtZSwgYCR7cHJpbWFyeUltcG9ydE5hbWV9LiR7aW1wb3J0ZWROYW1lfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZyZWVJZGVudGlmaWVyRm9yUGF0aChwYXRoKSB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYmFzZU5hbWUgPSBsYXN0Q29tcG9uZW50LnJlcGxhY2UoL1xcVy9nLCBcIlwiKTtcbiAgICByZXR1cm4gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKGBfJHtiYXNlTmFtZX1gKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzSW1wb3J0QXRJbmRleChpbmRleCkge1xuICAgIGNvbnN0IGRlZmF1bHROYW1lcyA9IFtdO1xuICAgIGNvbnN0IHdpbGRjYXJkTmFtZXMgPSBbXTtcbiAgICBjb25zdCBuYW1lZEltcG9ydHMgPSBbXTtcblxuICAgIGluZGV4Kys7XG4gICAgaWYgKFxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCwgQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuX3R5cGVvZikpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4ICsgMSwgdHQuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4ICsgMSwgQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pXG4gICAgKSB7XG4gICAgICAvLyBpbXBvcnQgdHlwZSBkZWNsYXJhdGlvbiwgc28gbm8gbmVlZCB0byBwcm9jZXNzIGFueXRoaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnBhcmVuTCkpIHtcbiAgICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQubmFtZSkpIHtcbiAgICAgIGRlZmF1bHROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0YXIpKSB7XG4gICAgICAvLyAqIGFzXG4gICAgICBpbmRleCArPSAyO1xuICAgICAgd2lsZGNhcmROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZUwpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCArIDEpO1xuICAgICAgaW5kZXggPSByZXN1bHQubmV3SW5kZXg7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgcmVzdWx0Lm5hbWVkSW1wb3J0cykge1xuICAgICAgICAvLyBUcmVhdCB7ZGVmYXVsdCBhcyBYfSBhcyBhIGRlZmF1bHQgaW1wb3J0IHRvIGVuc3VyZSB1c2FnZSBvZiByZXF1aXJlIGludGVyb3AgaGVscGVyXG4gICAgICAgIGlmIChuYW1lZEltcG9ydC5pbXBvcnRlZE5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgZGVmYXVsdE5hbWVzLnB1c2gobmFtZWRJbXBvcnQubG9jYWxOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lZEltcG9ydHMucHVzaChuYW1lZEltcG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8uZGVmYXVsdE5hbWVzLnB1c2goLi4uZGVmYXVsdE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMucHVzaCguLi53aWxkY2FyZE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLm5hbWVkSW1wb3J0cy5wdXNoKC4uLm5hbWVkSW1wb3J0cyk7XG4gICAgaWYgKGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiYgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiYgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW1wb3J0SW5mby5oYXNCYXJlSW1wb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgcHJlcHJvY2Vzc0V4cG9ydEF0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll92YXIpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9sZXQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc1ZhckV4cG9ydEF0SW5kZXgoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9mdW5jdGlvbikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuX2V4cG9ydCwgdHQuX2NsYXNzKVxuICAgICkge1xuICAgICAgY29uc3QgZXhwb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpO1xuICAgICAgdGhpcy5hZGRFeHBvcnRCaW5kaW5nKGV4cG9ydE5hbWUsIGV4cG9ydE5hbWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCB0dC5fZXhwb3J0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24pKSB7XG4gICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4ICsgMyk7XG4gICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcoZXhwb3J0TmFtZSwgZXhwb3J0TmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0LmJyYWNlTCkpIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0LnN0YXIpKSB7XG4gICAgICB0aGlzLnByZXByb2Nlc3NFeHBvcnRTdGFyQXRJbmRleChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgIHByZXByb2Nlc3NWYXJFeHBvcnRBdEluZGV4KGluZGV4KSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBgZXhwb3J0IGxldCB7eH0gPSB5O2AsIHN0YXJ0aW5nIGF0IHRoZSBvcGVuLWJyYWNlIGluIHRoYXQgY2FzZS5cbiAgICBmb3IgKGxldCBpID0gaW5kZXggKyAyOyA7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuZG9sbGFyQnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuYnJhY2tldEwpXG4gICAgICApIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCB0dC5icmFjZVIpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCB0dC5icmFja2V0UilcbiAgICAgICkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PT0gMCAmJiAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Lm5hbWUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoMSwgdHQuZXEpKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4IC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2ldO1xuICAgICAgICBpZiAoaXNEZWNsYXJhdGlvbih0b2tlbikpIHtcbiAgICAgICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGkpO1xuICAgICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQoZXhwb3J0TmFtZSwgYGV4cG9ydHMuJHtleHBvcnROYW1lfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdGhpcyBleHBvcnQgc3RhdGVtZW50IGp1c3QgaW4gY2FzZSBpdCdzIGFuIGV4cG9ydC4uLmZyb20gc3RhdGVtZW50LlxuICAgKiBJZiBpdCBpcywgY29tYmluZSBpdCBpbnRvIHRoZSBpbXBvcnQgaW5mbyBmb3IgdGhhdCBwYXRoLiBPdGhlcndpc2UsIGp1c3RcbiAgICogYmFpbCBvdXQ7IGl0J2xsIGJlIGhhbmRsZWQgbGF0ZXIuXG4gICAqL1xuICAgcHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIC8vIGV4cG9ydCB7XG4gICAgaW5kZXggKz0gMjtcbiAgICBjb25zdCB7bmV3SW5kZXgsIG5hbWVkSW1wb3J0c30gPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCk7XG4gICAgaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVpbnRlcnByZXQgXCJhIGFzIGJcIiB0byBiZSBsb2NhbC9leHBvcnRlZCByYXRoZXIgdGhhbiBpbXBvcnRlZC9sb2NhbC5cbiAgICAgIGZvciAoY29uc3Qge2ltcG9ydGVkTmFtZTogbG9jYWxOYW1lLCBsb2NhbE5hbWU6IGV4cG9ydGVkTmFtZX0gb2YgbmFtZWRJbXBvcnRzKSB7XG4gICAgICAgIHRoaXMuYWRkRXhwb3J0QmluZGluZyhsb2NhbE5hbWUsIGV4cG9ydGVkTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8ubmFtZWRFeHBvcnRzLnB1c2goLi4ubmFtZWRJbXBvcnRzKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpIHtcbiAgICBsZXQgZXhwb3J0ZWROYW1lID0gbnVsbDtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCB0dC5fZXhwb3J0LCB0dC5zdGFyLCB0dC5fYXMpKSB7XG4gICAgICAvLyBleHBvcnQgKiBhc1xuICAgICAgaW5kZXggKz0gMztcbiAgICAgIGV4cG9ydGVkTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgICAvLyBmb28gZnJvbVxuICAgICAgaW5kZXggKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0ICogZnJvbVxuICAgICAgaW5kZXggKz0gMztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIHN0YXIgZXhwb3J0IHN0YXRlbWVudC5cIik7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnRva2Vucy5zdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpO1xuICAgIGNvbnN0IGltcG9ydEluZm8gPSB0aGlzLmdldEltcG9ydEluZm8ocGF0aCk7XG4gICAgaWYgKGV4cG9ydGVkTmFtZSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0SW5mby5leHBvcnRTdGFyTmFtZXMucHVzaChleHBvcnRlZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbXBvcnRJbmZvLmhhc1N0YXJFeHBvcnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICBnZXROYW1lZEltcG9ydHMoaW5kZXgpIHtcbiAgICBjb25zdCBuYW1lZEltcG9ydHMgPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMsIGluZGV4KTtcbiAgICAgIGluZGV4ID0gc3BlY2lmaWVySW5mby5lbmRJbmRleDtcbiAgICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgICAgbmFtZWRJbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGltcG9ydGVkTmFtZTogc3BlY2lmaWVySW5mby5sZWZ0TmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllckluZm8ucmlnaHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LmJyYWNlUikpIHtcbiAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5jb21tYSkpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtuZXdJbmRleDogaW5kZXgsIG5hbWVkSW1wb3J0c307XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbXV0YWJsZSBpbXBvcnQgaW5mbyBvYmplY3QgZm9yIHRoaXMgcGF0aCwgY3JlYXRpbmcgb25lIGlmIGl0IGRvZXNuJ3RcbiAgICogZXhpc3QgeWV0LlxuICAgKi9cbiAgIGdldEltcG9ydEluZm8ocGF0aCkge1xuICAgIGNvbnN0IGV4aXN0aW5nSW5mbyA9IHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKGV4aXN0aW5nSW5mbykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSW5mbztcbiAgICB9XG4gICAgY29uc3QgbmV3SW5mbyA9IHtcbiAgICAgIGRlZmF1bHROYW1lczogW10sXG4gICAgICB3aWxkY2FyZE5hbWVzOiBbXSxcbiAgICAgIG5hbWVkSW1wb3J0czogW10sXG4gICAgICBuYW1lZEV4cG9ydHM6IFtdLFxuICAgICAgaGFzQmFyZUltcG9ydDogZmFsc2UsXG4gICAgICBleHBvcnRTdGFyTmFtZXM6IFtdLFxuICAgICAgaGFzU3RhckV4cG9ydDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLmltcG9ydEluZm9CeVBhdGguc2V0KHBhdGgsIG5ld0luZm8pO1xuICAgIHJldHVybiBuZXdJbmZvO1xuICB9XG5cbiAgIGFkZEV4cG9ydEJpbmRpbmcobG9jYWxOYW1lLCBleHBvcnRlZE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5oYXMobG9jYWxOYW1lKSkge1xuICAgICAgdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLnNldChsb2NhbE5hbWUsIFtdKTtcbiAgICB9XG4gICAgdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLmdldChsb2NhbE5hbWUpLnB1c2goZXhwb3J0ZWROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGZvciB0aGUgaW1wb3J0IGZvciB0aGlzIHBhdGgsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWZcbiAgICogdGhlIGNvZGUgaGFzIGFscmVhZHkgYmVlbiBcImNsYWltZWRcIiBieSBhIHByZXZpb3VzIGltcG9ydC5cbiAgICovXG4gIGNsYWltSW1wb3J0Q29kZShpbXBvcnRQYXRoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5pbXBvcnRzVG9SZXBsYWNlLmdldChpbXBvcnRQYXRoKTtcbiAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KGltcG9ydFBhdGgsIFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQgfHwgXCJcIjtcbiAgfVxuXG4gIGdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuZ2V0KGlkZW50aWZpZXJOYW1lKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHN0cmluZyBsaWtlIGBleHBvcnRzLmZvbyA9IGV4cG9ydHMuYmFyYC5cbiAgICovXG4gIHJlc29sdmVFeHBvcnRCaW5kaW5nKGFzc2lnbmVkTmFtZSkge1xuICAgIGNvbnN0IGV4cG9ydGVkTmFtZXMgPSB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuZ2V0KGFzc2lnbmVkTmFtZSk7XG4gICAgaWYgKCFleHBvcnRlZE5hbWVzIHx8IGV4cG9ydGVkTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydGVkTmFtZXMubWFwKChleHBvcnRlZE5hbWUpID0+IGBleHBvcnRzLiR7ZXhwb3J0ZWROYW1lfWApLmpvaW4oXCIgPSBcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBpbXBvcnRlZC9leHBvcnRlZCBuYW1lcyB3aGVyZSB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdXNhZ2VzIG9mIHRob3NlXG4gICAqIG5hbWVzIGFyZSBzaGFkb3dlZC5cbiAgICovXG4gIGdldEdsb2JhbE5hbWVzKCkge1xuICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgIC4uLnRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5rZXlzKCksXG4gICAgICAuLi50aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUua2V5cygpLFxuICAgIF0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtHZW5NYXBwaW5nLCBtYXliZUFkZFNlZ21lbnQsIHRvRW5jb2RlZE1hcH0gZnJvbSBcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCI7XG5cblxuXG5pbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzXCI7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc291cmNlIG1hcCBpbmRpY2F0aW5nIHRoYXQgZWFjaCBsaW5lIG1hcHMgZGlyZWN0bHkgdG8gdGhlIG9yaWdpbmFsIGxpbmUsXG4gKiB3aXRoIHRoZSB0b2tlbnMgaW4gdGhlaXIgbmV3IHBvc2l0aW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZVNvdXJjZU1hcChcbiAge2NvZGU6IGdlbmVyYXRlZENvZGUsIG1hcHBpbmdzOiByYXdNYXBwaW5nc30sXG4gIGZpbGVQYXRoLFxuICBvcHRpb25zLFxuICBzb3VyY2UsXG4gIHRva2Vucyxcbikge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gY29tcHV0ZVNvdXJjZUNvbHVtbnMoc291cmNlLCB0b2tlbnMpO1xuICBjb25zdCBtYXAgPSBuZXcgR2VuTWFwcGluZyh7ZmlsZTogb3B0aW9ucy5jb21waWxlZEZpbGVuYW1lfSk7XG4gIGxldCB0b2tlbkluZGV4ID0gMDtcbiAgLy8gY3VycmVudE1hcHBpbmcgaXMgdGhlIG91dHB1dCBzb3VyY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGlucHV0IHRva2VuIGJlaW5nXG4gIC8vIGNvbnNpZGVyZWQuXG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzWzBdO1xuICB3aGlsZSAoY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiB0b2tlbkluZGV4IDwgcmF3TWFwcGluZ3MubGVuZ3RoIC0gMSkge1xuICAgIHRva2VuSW5kZXgrKztcbiAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICB9XG4gIGxldCBsaW5lID0gMDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgMCwgZmlsZVBhdGgsIGxpbmUsIDApO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VuZXJhdGVkQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgY29uc3QgZ2VuQ29sdW1uID0gY3VycmVudE1hcHBpbmcgLSBsaW5lU3RhcnQ7XG4gICAgICBjb25zdCBzb3VyY2VDb2x1bW4gPSBzb3VyY2VDb2x1bW5zW3Rva2VuSW5kZXhdO1xuICAgICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgZ2VuQ29sdW1uLCBmaWxlUGF0aCwgbGluZSwgc291cmNlQ29sdW1uKTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGN1cnJlbnRNYXBwaW5nID09PSBpIHx8IGN1cnJlbnRNYXBwaW5nID09PSB1bmRlZmluZWQpICYmXG4gICAgICAgIHRva2VuSW5kZXggPCByYXdNYXBwaW5ncy5sZW5ndGggLSAxXG4gICAgICApIHtcbiAgICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ2VuZXJhdGVkQ29kZS5jaGFyQ29kZUF0KGkpID09PSBjaGFyQ29kZXMubGluZUZlZWQpIHtcbiAgICAgIGxpbmUrKztcbiAgICAgIGxpbmVTdGFydCA9IGkgKyAxO1xuICAgICAgaWYgKGN1cnJlbnRNYXBwaW5nICE9PSBsaW5lU3RhcnQpIHtcbiAgICAgICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgMCwgZmlsZVBhdGgsIGxpbmUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCB7c291cmNlUm9vdCwgc291cmNlc0NvbnRlbnQsIC4uLnNvdXJjZU1hcH0gPSB0b0VuY29kZWRNYXAobWFwKTtcbiAgcmV0dXJuIHNvdXJjZU1hcCA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG1hcHBpbmcgZWFjaCB0b2tlbiBpbmRleCB0byB0aGUgMC1iYXNlZCBjb2x1bW4gb2YgdGhlIHN0YXJ0XG4gKiBwb3NpdGlvbiBvZiB0aGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VDb2x1bW5zKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuICBsZXQgdG9rZW5JbmRleCA9IDA7XG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHRva2Vuc1t0b2tlbkluZGV4XS5zdGFydDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XSA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgY3VycmVudE1hcHBpbmcgPSB0b2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgfVxuICAgIGlmIChjb2RlLmNoYXJDb2RlQXQoaSkgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgbGluZVN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBzb3VyY2VDb2x1bW5zO1xufVxuIiwgIlxuXG5jb25zdCBIRUxQRVJTID0ge1xuICByZXF1aXJlOiBgXG4gICAgaW1wb3J0IHtjcmVhdGVSZXF1aXJlIGFzIENSRUFURV9SRVFVSVJFX05BTUV9IGZyb20gXCJtb2R1bGVcIjtcbiAgICBjb25zdCByZXF1aXJlID0gQ1JFQVRFX1JFUVVJUkVfTkFNRShpbXBvcnQubWV0YS51cmwpO1xuICBgLFxuICBpbnRlcm9wUmVxdWlyZVdpbGRjYXJkOiBgXG4gICAgZnVuY3Rpb24gaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHtcbiAgICAgIGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBpbnRlcm9wUmVxdWlyZURlZmF1bHQ6IGBcbiAgICBmdW5jdGlvbiBpbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbiAgICB9XG4gIGAsXG4gIGNyZWF0ZU5hbWVkRXhwb3J0RnJvbTogYFxuICAgIGZ1bmN0aW9uIGNyZWF0ZU5hbWVkRXhwb3J0RnJvbShvYmosIGxvY2FsTmFtZSwgaW1wb3J0ZWROYW1lKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbG9jYWxOYW1lLCB7ZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBnZXQ6ICgpID0+IG9ialtpbXBvcnRlZE5hbWVdfSk7XG4gICAgfVxuICBgLFxuICAvLyBOb3RlIHRoYXQgVHlwZVNjcmlwdCBhbmQgQmFiZWwgZG8gdGhpcyBkaWZmZXJlbnRseTsgVHlwZVNjcmlwdCBkb2VzIGEgc2ltcGxlIGV4aXN0ZW5jZVxuICAvLyBjaGVjayBpbiB0aGUgZXhwb3J0cyBvYmplY3QgYW5kIGRvZXMgYSBwbGFpbiBhc3NpZ25tZW50LCB3aGVyZWFzIEJhYmVsIHVzZXNcbiAgLy8gZGVmaW5lUHJvcGVydHkgYW5kIGJ1aWxkcyBhbiBvYmplY3Qgb2YgZXhwbGljaXRseS1leHBvcnRlZCBuYW1lcyBzbyB0aGF0IHN0YXIgZXhwb3J0cyBjYW5cbiAgLy8gYWx3YXlzIHRha2UgbG93ZXIgcHJlY2VkZW5jZS4gRm9yIG5vdywgd2UgZG8gdGhlIGVhc2llciBUeXBlU2NyaXB0IHRoaW5nLlxuICBjcmVhdGVTdGFyRXhwb3J0OiBgXG4gICAgZnVuY3Rpb24gY3JlYXRlU3RhckV4cG9ydChvYmopIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCIpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGdldDogKCkgPT4gb2JqW2tleV19KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICBgLFxuICBudWxsaXNoQ29hbGVzY2U6IGBcbiAgICBmdW5jdGlvbiBudWxsaXNoQ29hbGVzY2UobGhzLCByaHNGbikge1xuICAgICAgaWYgKGxocyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmhzRm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIGFzeW5jTnVsbGlzaENvYWxlc2NlOiBgXG4gICAgYXN5bmMgZnVuY3Rpb24gYXN5bmNOdWxsaXNoQ29hbGVzY2UobGhzLCByaHNGbikge1xuICAgICAgaWYgKGxocyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmhzRm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIG9wdGlvbmFsQ2hhaW46IGBcbiAgICBmdW5jdGlvbiBvcHRpb25hbENoYWluKG9wcykge1xuICAgICAgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgdmFsdWUgPSBvcHNbMF07XG4gICAgICBsZXQgaSA9IDE7XG4gICAgICB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgb3AgPSBvcHNbaV07XG4gICAgICAgIGNvbnN0IGZuID0gb3BzW2kgKyAxXTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykge1xuICAgICAgICAgIGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTtcbiAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykge1xuICAgICAgICAgIHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpO1xuICAgICAgICAgIGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIGAsXG4gIGFzeW5jT3B0aW9uYWxDaGFpbjogYFxuICAgIGFzeW5jIGZ1bmN0aW9uIGFzeW5jT3B0aW9uYWxDaGFpbihvcHMpIHtcbiAgICAgIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IHZhbHVlID0gb3BzWzBdO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldO1xuICAgICAgICBjb25zdCBmbiA9IG9wc1tpICsgMV07XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSBhd2FpdCBmbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGF3YWl0IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICBgLFxuICBvcHRpb25hbENoYWluRGVsZXRlOiBgXG4gICAgZnVuY3Rpb24gb3B0aW9uYWxDaGFpbkRlbGV0ZShvcHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IE9QVElPTkFMX0NIQUlOX05BTUUob3BzKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IHRydWUgOiByZXN1bHQ7XG4gICAgfVxuICBgLFxuICBhc3luY09wdGlvbmFsQ2hhaW5EZWxldGU6IGBcbiAgICBhc3luYyBmdW5jdGlvbiBhc3luY09wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBBU1lOQ19PUFRJT05BTF9DSEFJTl9OQU1FKG9wcyk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuICAgIH1cbiAgYCxcbn07XG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJNYW5hZ2VyIHtcbiAgX19pbml0KCkge3RoaXMuaGVscGVyTmFtZXMgPSB7fX1cbiAgX19pbml0MigpIHt0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lID0gbnVsbH1cbiAgY29uc3RydWN0b3IoIG5hbWVNYW5hZ2VyKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjtIZWxwZXJNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtIZWxwZXJNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7fVxuXG4gIGdldEhlbHBlck5hbWUoYmFzZU5hbWUpIHtcbiAgICBsZXQgaGVscGVyTmFtZSA9IHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdO1xuICAgIGlmIChoZWxwZXJOYW1lKSB7XG4gICAgICByZXR1cm4gaGVscGVyTmFtZTtcbiAgICB9XG4gICAgaGVscGVyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShgXyR7YmFzZU5hbWV9YCk7XG4gICAgdGhpcy5oZWxwZXJOYW1lc1tiYXNlTmFtZV0gPSBoZWxwZXJOYW1lO1xuICAgIHJldHVybiBoZWxwZXJOYW1lO1xuICB9XG5cbiAgZW1pdEhlbHBlcnMoKSB7XG4gICAgbGV0IHJlc3VsdENvZGUgPSBcIlwiO1xuICAgIGlmICh0aGlzLmhlbHBlck5hbWVzLm9wdGlvbmFsQ2hhaW5EZWxldGUpIHtcbiAgICAgIHRoaXMuZ2V0SGVscGVyTmFtZShcIm9wdGlvbmFsQ2hhaW5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlbHBlck5hbWVzLmFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZSkge1xuICAgICAgdGhpcy5nZXRIZWxwZXJOYW1lKFwiYXN5bmNPcHRpb25hbENoYWluXCIpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtiYXNlTmFtZSwgaGVscGVyQ29kZVRlbXBsYXRlXSBvZiBPYmplY3QuZW50cmllcyhIRUxQRVJTKSkge1xuICAgICAgY29uc3QgaGVscGVyTmFtZSA9IHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdO1xuICAgICAgbGV0IGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlVGVtcGxhdGU7XG4gICAgICBpZiAoYmFzZU5hbWUgPT09IFwib3B0aW9uYWxDaGFpbkRlbGV0ZVwiKSB7XG4gICAgICAgIGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlLnJlcGxhY2UoXCJPUFRJT05BTF9DSEFJTl9OQU1FXCIsIHRoaXMuaGVscGVyTmFtZXMub3B0aW9uYWxDaGFpbik7XG4gICAgICB9IGVsc2UgaWYgKGJhc2VOYW1lID09PSBcImFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZVwiKSB7XG4gICAgICAgIGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlLnJlcGxhY2UoXG4gICAgICAgICAgXCJBU1lOQ19PUFRJT05BTF9DSEFJTl9OQU1FXCIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJOYW1lcy5hc3luY09wdGlvbmFsQ2hhaW4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGJhc2VOYW1lID09PSBcInJlcXVpcmVcIikge1xuICAgICAgICBpZiAodGhpcy5jcmVhdGVSZXF1aXJlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY3JlYXRlUmVxdWlyZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKC9DUkVBVEVfUkVRVUlSRV9OQU1FL2csIHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGhlbHBlck5hbWUpIHtcbiAgICAgICAgcmVzdWx0Q29kZSArPSBcIiBcIjtcbiAgICAgICAgcmVzdWx0Q29kZSArPSBoZWxwZXJDb2RlLnJlcGxhY2UoYmFzZU5hbWUsIGhlbHBlck5hbWUpLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdENvZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpc0Jsb2NrU2NvcGVkRGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbixcbiAgaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uLFxufSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5cbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cblxuLyoqXG4gKiBUcmF2ZXJzZSB0aGUgZ2l2ZW4gdG9rZW5zIGFuZCBtb2RpZnkgdGhlbSBpZiBuZWNlc3NhcnkgdG8gaW5kaWNhdGUgdGhhdCBzb21lIG5hbWVzIHNoYWRvdyBnbG9iYWxcbiAqIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBpZiAoIWhhc1NoYWRvd2VkR2xvYmFscyh0b2tlbnMsIGdsb2JhbE5hbWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBtYXJrU2hhZG93ZWRHbG9iYWxzKHRva2Vucywgc2NvcGVzLCBnbG9iYWxOYW1lcyk7XG59XG5cbi8qKlxuICogV2UgY2FuIGRvIGEgZmFzdCB1cC1mcm9udCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZWNsYXJhdGlvbnMgdG8gZ2xvYmFsIG5hbWVzLiBJZiBub3QsXG4gKiB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29tcHV0aW5nIHNjb3BlIGFzc2lnbm1lbnRzLlxuICovXG4vLyBFeHBvcnRlZCBmb3IgdGVzdGluZy5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTaGFkb3dlZEdsb2JhbHModG9rZW5zLCBnbG9iYWxOYW1lcykge1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucy50b2tlbnMpIHtcbiAgICBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSB0dC5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICBpc05vblRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pICYmXG4gICAgICBnbG9iYWxOYW1lcy5oYXModG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWFya1NoYWRvd2VkR2xvYmFscyhcbiAgdG9rZW5zLFxuICBzY29wZXMsXG4gIGdsb2JhbE5hbWVzLFxuKSB7XG4gIGNvbnN0IHNjb3BlU3RhY2sgPSBbXTtcbiAgbGV0IHNjb3BlSW5kZXggPSBzY29wZXMubGVuZ3RoIC0gMTtcbiAgLy8gU2NvcGVzIHdlcmUgZ2VuZXJhdGVkIGF0IGNvbXBsZXRpb24gdGltZSwgc28gdGhleSdyZSBzb3J0ZWQgYnkgZW5kIGluZGV4LCBzbyB3ZSBjYW4gbWFpbnRhaW4gYVxuICAvLyBnb29kIHN0YWNrIGJ5IGdvaW5nIGJhY2t3YXJkcyB0aHJvdWdoIHRoZW0uXG4gIGZvciAobGV0IGkgPSB0b2tlbnMudG9rZW5zLmxlbmd0aCAtIDE7IDsgaS0tKSB7XG4gICAgd2hpbGUgKHNjb3BlU3RhY2subGVuZ3RoID4gMCAmJiBzY29wZVN0YWNrW3Njb3BlU3RhY2subGVuZ3RoIC0gMV0uc3RhcnRUb2tlbkluZGV4ID09PSBpICsgMSkge1xuICAgICAgc2NvcGVTdGFjay5wb3AoKTtcbiAgICB9XG4gICAgd2hpbGUgKHNjb3BlSW5kZXggPj0gMCAmJiBzY29wZXNbc2NvcGVJbmRleF0uZW5kVG9rZW5JbmRleCA9PT0gaSArIDEpIHtcbiAgICAgIHNjb3BlU3RhY2sucHVzaChzY29wZXNbc2NvcGVJbmRleF0pO1xuICAgICAgc2NvcGVJbmRleC0tO1xuICAgIH1cbiAgICAvLyBQcm9jZXNzIHNjb3BlcyBhZnRlciB0aGUgbGFzdCBpdGVyYXRpb24gc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSBwb3AgYWxsIG9mIHRoZW0uXG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgY29uc3QgbmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAxICYmICF0b2tlbi5pc1R5cGUgJiYgdG9rZW4udHlwZSA9PT0gdHQubmFtZSAmJiBnbG9iYWxOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIGlmIChpc0Jsb2NrU2NvcGVkRGVjbGFyYXRpb24odG9rZW4pKSB7XG4gICAgICAgIG1hcmtTaGFkb3dlZEZvclNjb3BlKHNjb3BlU3RhY2tbc2NvcGVTdGFjay5sZW5ndGggLSAxXSwgdG9rZW5zLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uKHRva2VuKSkge1xuICAgICAgICBsZXQgc3RhY2tJbmRleCA9IHNjb3BlU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKHN0YWNrSW5kZXggPiAwICYmICFzY29wZVN0YWNrW3N0YWNrSW5kZXhdLmlzRnVuY3Rpb25TY29wZSkge1xuICAgICAgICAgIHN0YWNrSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhY2tJbmRleCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgcGFyZW50IGZ1bmN0aW9uIHNjb3BlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZVN0YWNrW3N0YWNrSW5kZXhdLCB0b2tlbnMsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZW1wdHkgc2NvcGUgc3RhY2sgYWZ0ZXIgcHJvY2Vzc2luZyBmaWxlLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZSwgdG9rZW5zLCBuYW1lKSB7XG4gIGZvciAobGV0IGkgPSBzY29wZS5zdGFydFRva2VuSW5kZXg7IGkgPCBzY29wZS5lbmRUb2tlbkluZGV4OyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgKHRva2VuLnR5cGUgPT09IHR0Lm5hbWUgfHwgdG9rZW4udHlwZSA9PT0gdHQuanN4TmFtZSkgJiZcbiAgICAgIHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSA9PT0gbmFtZVxuICAgICkge1xuICAgICAgdG9rZW4uc2hhZG93c0dsb2JhbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuLyoqXG4gKiBHZXQgYWxsIGlkZW50aWZpZXIgbmFtZXMgaW4gdGhlIGNvZGUsIGluIG9yZGVyLCBpbmNsdWRpbmcgZHVwbGljYXRlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKGNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXM7XG59XG4iLCAiXG5pbXBvcnQgZ2V0SWRlbnRpZmllck5hbWVzIGZyb20gXCIuL3V0aWwvZ2V0SWRlbnRpZmllck5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVNYW5hZ2VyIHtcbiAgICBfX2luaXQoKSB7dGhpcy51c2VkTmFtZXMgPSBuZXcgU2V0KCl9XG5cbiAgY29uc3RydWN0b3IoY29kZSwgdG9rZW5zKSB7O05hbWVNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IG5ldyBTZXQoZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2VucykpO1xuICB9XG5cbiAgY2xhaW1GcmVlTmFtZShuYW1lKSB7XG4gICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuZmluZEZyZWVOYW1lKG5hbWUpO1xuICAgIHRoaXMudXNlZE5hbWVzLmFkZChuZXdOYW1lKTtcbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuXG4gIGZpbmRGcmVlTmFtZShuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnVzZWROYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBsZXQgc3VmZml4TnVtID0gMjtcbiAgICB3aGlsZSAodGhpcy51c2VkTmFtZXMuaGFzKG5hbWUgKyBTdHJpbmcoc3VmZml4TnVtKSkpIHtcbiAgICAgIHN1ZmZpeE51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZSArIFN0cmluZyhzdWZmaXhOdW0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtjcmVhdGVDaGVja2Vyc30gZnJvbSBcInRzLWludGVyZmFjZS1jaGVja2VyXCI7XG5cbmltcG9ydCBPcHRpb25zR2VuVHlwZXMgZnJvbSBcIi4vT3B0aW9ucy1nZW4tdHlwZXNcIjtcblxuY29uc3Qge09wdGlvbnM6IE9wdGlvbnNDaGVja2VyfSA9IGNyZWF0ZUNoZWNrZXJzKE9wdGlvbnNHZW5UeXBlcyk7XG5cbiBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gIE9wdGlvbnNDaGVja2VyLnN0cmljdENoZWNrKG9wdGlvbnMpO1xufVxuIiwgIi8qKlxuICogVGhpcyBtb2R1bGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGB0cy1pbnRlcmZhY2UtYnVpbGRlcmBcbiAqL1xuaW1wb3J0ICogYXMgdCBmcm9tIFwidHMtaW50ZXJmYWNlLWNoZWNrZXJcIjtcbi8vIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLWtleS1xdW90ZXNcblxuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IHQudW5pb24oXG4gIHQubGl0KFwianN4XCIpLFxuICB0LmxpdChcInR5cGVzY3JpcHRcIiksXG4gIHQubGl0KFwiZmxvd1wiKSxcbiAgdC5saXQoXCJpbXBvcnRzXCIpLFxuICB0LmxpdChcInJlYWN0LWhvdC1sb2FkZXJcIiksXG4gIHQubGl0KFwiamVzdFwiKSxcbik7XG5cbmV4cG9ydCBjb25zdCBTb3VyY2VNYXBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICBjb21waWxlZEZpbGVuYW1lOiBcInN0cmluZ1wiLFxufSk7XG5cbmV4cG9ydCBjb25zdCBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICB0cmFuc2Zvcm1zOiB0LmFycmF5KFwiVHJhbnNmb3JtXCIpLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeFJ1bnRpbWU6IHQub3B0KHQudW5pb24odC5saXQoXCJjbGFzc2ljXCIpLCB0LmxpdChcImF1dG9tYXRpY1wiKSwgdC5saXQoXCJwcmVzZXJ2ZVwiKSkpLFxuICBwcm9kdWN0aW9uOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeEltcG9ydFNvdXJjZTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeFByYWdtYTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeEZyYWdtZW50UHJhZ21hOiB0Lm9wdChcInN0cmluZ1wiKSxcbiAga2VlcFVudXNlZEltcG9ydHM6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgcHJlc2VydmVEeW5hbWljSW1wb3J0OiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGluamVjdENyZWF0ZVJlcXVpcmVGb3JJbXBvcnRSZXF1aXJlOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgc291cmNlTWFwT3B0aW9uczogdC5vcHQoXCJTb3VyY2VNYXBPcHRpb25zXCIpLFxuICBmaWxlUGF0aDogdC5vcHQoXCJzdHJpbmdcIiksXG59KTtcblxuY29uc3QgZXhwb3J0ZWRUeXBlU3VpdGUgPSB7XG4gIFRyYW5zZm9ybSxcbiAgU291cmNlTWFwT3B0aW9ucyxcbiAgT3B0aW9ucyxcbn07XG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZFR5cGVTdWl0ZTtcbiIsICJpbXBvcnQge2Zsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzfSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge3RzUGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcywgdHNQYXJzZU1vZGlmaWVyc30gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZWF0LFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbWF0Y2gsXG4gIG5leHQsXG4gIHBvcFR5cGVDb250ZXh0LFxuICBwdXNoVHlwZUNvbnRleHQsXG59IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlLCBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi90b2tlbml6ZXIvdHlwZXNcIjtcbmltcG9ydCB7aXNGbG93RW5hYmxlZCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7cGFyc2VJZGVudGlmaWVyLCBwYXJzZU1heWJlQXNzaWduLCBwYXJzZU9ian0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHtleHBlY3QsIHVuZXhwZWN0ZWR9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ByZWFkKCkge1xuICBuZXh0KCk7XG4gIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXN0KGlzQmxvY2tTY29wZSkge1xuICBuZXh0KCk7XG4gIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBtYXJrUHJpb3JCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrUHJpb3JCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpIHtcbiAgbGV0IGlkZW50aWZpZXJSb2xlO1xuICBpZiAoc3RhdGUuc2NvcGVEZXB0aCA9PT0gMCkge1xuICAgIGlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbjtcbiAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkJsb2NrU2NvcGVkRGVjbGFyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uO1xuICB9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbn1cblxuLy8gUGFyc2VzIGx2YWx1ZSAoYXNzaWduYWJsZSkgYXRvbS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJpbmRpbmdBdG9tKGlzQmxvY2tTY29wZSkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Ll90aGlzOiB7XG4gICAgICAvLyBJbiBUeXBlU2NyaXB0LCBcInRoaXNcIiBtYXkgYmUgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIsIHNvIGFsbG93IGl0LlxuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgICAgbmV4dCgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIHR0Ll95aWVsZDpcbiAgICBjYXNlIHR0Lm5hbWU6IHtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC5uYW1lO1xuICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhc2UgdHQuYnJhY2tldEw6IHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlQmluZGluZ0xpc3QodHQuYnJhY2tldFIsIGlzQmxvY2tTY29wZSwgdHJ1ZSAvKiBhbGxvd0VtcHR5ICovKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIHBhcnNlT2JqKHRydWUsIGlzQmxvY2tTY29wZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZCgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJpbmRpbmdMaXN0KFxuICBjbG9zZSxcbiAgaXNCbG9ja1Njb3BlLFxuICBhbGxvd0VtcHR5ID0gZmFsc2UsXG4gIGFsbG93TW9kaWZpZXJzID0gZmFsc2UsXG4gIGNvbnRleHRJZCA9IDAsXG4pIHtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICBsZXQgaGFzUmVtb3ZlZENvbW1hID0gZmFsc2U7XG4gIGNvbnN0IGZpcnN0SXRlbVRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuXG4gIHdoaWxlICghZWF0KGNsb3NlKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgICAgIC8vIEFmdGVyIGEgXCJ0aGlzXCIgdHlwZSBpbiBUeXBlU2NyaXB0LCB3ZSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGNvbW1hIChpZiBhbnkpIHRvIGFsc28gYmVcbiAgICAgIC8vIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgIGlmICghaGFzUmVtb3ZlZENvbW1hICYmIHN0YXRlLnRva2Vuc1tmaXJzdEl0ZW1Ub2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgICBoYXNSZW1vdmVkQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dFbXB0eSAmJiBtYXRjaCh0dC5jb21tYSkpIHtcbiAgICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgZnVydGhlciB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICAgIH0gZWxzZSBpZiAoZWF0KGNsb3NlKSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAgIHBhcnNlUmVzdChpc0Jsb2NrU2NvcGUpO1xuICAgICAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICAgICAgLy8gU3VwcG9ydCByZXN0IGVsZW1lbnQgdHJhaWxpbmcgY29tbWFzIGFsbG93ZWQgYnkgVHlwZVNjcmlwdCA8Mi45LlxuICAgICAgZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICBleHBlY3QoY2xvc2UpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGFsbG93TW9kaWZpZXJzLCBpc0Jsb2NrU2NvcGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbmFibGVMaXN0SXRlbShhbGxvd01vZGlmaWVycywgaXNCbG9ja1Njb3BlKSB7XG4gIGlmIChhbGxvd01vZGlmaWVycykge1xuICAgIHRzUGFyc2VNb2RpZmllcnMoW1xuICAgICAgQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9wcm90ZWN0ZWQsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9vdmVycmlkZSxcbiAgICBdKTtcbiAgfVxuXG4gIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSk7XG4gIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgcGFyc2VNYXliZURlZmF1bHQoaXNCbG9ja1Njb3BlLCB0cnVlIC8qIGxlZnRBbHJlYWR5UGFyc2VkICovKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICB9IGVsc2UgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgfVxufVxuXG4vLyBQYXJzZXMgYXNzaWdubWVudCBwYXR0ZXJuIGFyb3VuZCBnaXZlbiBhdG9tIGlmIHBvc3NpYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSwgbGVmdEFscmVhZHlQYXJzZWQgPSBmYWxzZSkge1xuICBpZiAoIWxlZnRBbHJlYWR5UGFyc2VkKSB7XG4gICAgcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpO1xuICB9XG4gIGlmICghZWF0KHR0LmVxKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlcUluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbn1cbiIsICJpbXBvcnQge1xuICBlYXQsXG4gIGZpbmlzaFRva2VuLFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbG9va2FoZWFkVHlwZSxcbiAgbG9va2FoZWFkVHlwZUFuZEtleXdvcmQsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBuZXh0VGVtcGxhdGVUb2tlbixcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcbiAgcmVzY2FuX2d0LFxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lzSlNYRW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtcbiAgYXRQb3NzaWJsZUFzeW5jLFxuICBiYXNlUGFyc2VNYXliZUFzc2lnbixcbiAgYmFzZVBhcnNlU3Vic2NyaXB0LFxuICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLFxuICBwYXJzZUV4cHJBdG9tLFxuICBwYXJzZUV4cHJlc3Npb24sXG4gIHBhcnNlRnVuY3Rpb25Cb2R5LFxuICBwYXJzZUlkZW50aWZpZXIsXG4gIHBhcnNlTGl0ZXJhbCxcbiAgcGFyc2VNYXliZUFzc2lnbixcbiAgcGFyc2VNYXliZVVuYXJ5LFxuICBwYXJzZVByb3BlcnR5TmFtZSxcbiAgcGFyc2VUZW1wbGF0ZSxcblxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7cGFyc2VCaW5kaW5nSWRlbnRpZmllciwgcGFyc2VCaW5kaW5nTGlzdCwgcGFyc2VJbXBvcnRlZElkZW50aWZpZXJ9IGZyb20gXCIuLi90cmF2ZXJzZXIvbHZhbFwiO1xuaW1wb3J0IHtcbiAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMsXG4gIHBhcnNlQmxvY2tCb2R5LFxuICBwYXJzZUNsYXNzLFxuICBwYXJzZUZ1bmN0aW9uLFxuICBwYXJzZUZ1bmN0aW9uUGFyYW1zLFxuICBwYXJzZVN0YXRlbWVudCxcbiAgcGFyc2VWYXJTdGF0ZW1lbnQsXG59IGZyb20gXCIuLi90cmF2ZXJzZXIvc3RhdGVtZW50XCI7XG5pbXBvcnQge1xuICBjYW5JbnNlcnRTZW1pY29sb24sXG4gIGVhdENvbnRleHR1YWwsXG4gIGV4cGVjdCxcbiAgZXhwZWN0Q29udGV4dHVhbCxcbiAgaGFzUHJlY2VkaW5nTGluZUJyZWFrLFxuICBpc0NvbnRleHR1YWwsXG4gIGlzTGluZVRlcm1pbmF0b3IsXG4gIGlzTG9va2FoZWFkQ29udGV4dHVhbCxcbiAgc2VtaWNvbG9uLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcbmltcG9ydCB7bmV4dEpTWFRhZ1Rva2VufSBmcm9tIFwiLi9qc3hcIjtcblxuZnVuY3Rpb24gdHNJc0lkZW50aWZpZXIoKSB7XG4gIC8vIFRPRE86IGFjdHVhbGx5IGEgYml0IG1vcmUgY29tcGxleCBpbiBUeXBlU2NyaXB0LCBidXQgc2hvdWxkbid0IG1hdHRlci5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTUwMDhcbiAgcmV0dXJuIG1hdGNoKHR0Lm5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc0xpdGVyYWxQcm9wZXJ0eU5hbWUoKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2godHQubmFtZSkgfHxcbiAgICBCb29sZWFuKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkgfHxcbiAgICBtYXRjaCh0dC5zdHJpbmcpIHx8XG4gICAgbWF0Y2godHQubnVtKSB8fFxuICAgIG1hdGNoKHR0LmJpZ2ludCkgfHxcbiAgICBtYXRjaCh0dC5kZWNpbWFsKVxuICApO1xufVxuXG5mdW5jdGlvbiB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCkge1xuICAvLyBOb3RlOiBUeXBlU2NyaXB0J3MgaW1wbGVtZW50YXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIGJlY2F1c2VcbiAgLy8gbW9yZSB0aGluZ3MgYXJlIGNvbnNpZGVyZWQgbW9kaWZpZXJzIHRoZXJlLlxuICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgaGFuZGxlcyBtb2RpZmllcnMgbm90IGhhbmRsZWQgYnkgYmFieWxvbiBpdHNlbGYuIEFuZCBcInN0YXRpY1wiLlxuICAvLyBUT0RPOiBXb3VsZCBiZSBuaWNlIHRvIGF2b2lkIGxvb2thaGVhZC4gV2FudCBhIGhhc0xpbmVCcmVha1VwTmV4dCgpIG1ldGhvZC4uLlxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgbmV4dCgpO1xuICBjb25zdCBjYW5Gb2xsb3dNb2RpZmllciA9XG4gICAgKG1hdGNoKHR0LmJyYWNrZXRMKSB8fFxuICAgICAgbWF0Y2godHQuYnJhY2VMKSB8fFxuICAgICAgbWF0Y2godHQuc3RhcikgfHxcbiAgICAgIG1hdGNoKHR0LmVsbGlwc2lzKSB8fFxuICAgICAgbWF0Y2godHQuaGFzaCkgfHxcbiAgICAgIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpKSAmJlxuICAgICFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKTtcblxuICBpZiAoY2FuRm9sbG93TW9kaWZpZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNb2RpZmllcnMoYWxsb3dlZE1vZGlmaWVycykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IG1vZGlmaWVyID0gdHNQYXJzZU1vZGlmaWVyKGFsbG93ZWRNb2RpZmllcnMpO1xuICAgIGlmIChtb2RpZmllciA9PT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbi8qKiBQYXJzZXMgYSBtb2RpZmllciBtYXRjaGluZyBvbmUgdGhlIGdpdmVuIG1vZGlmaWVyIG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNb2RpZmllcihcbiAgYWxsb3dlZE1vZGlmaWVycyxcbikge1xuICBpZiAoIW1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtb2RpZmllciA9IHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICBpZiAoYWxsb3dlZE1vZGlmaWVycy5pbmRleE9mKG1vZGlmaWVyKSAhPT0gLTEgJiYgdHNOZXh0VG9rZW5DYW5Gb2xsb3dNb2RpZmllcigpKSB7XG4gICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHk6XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9yZWFkb25seTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2Fic3RyYWN0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYzpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3N0YXRpYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWM6XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9wdWJsaWM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZTpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3ByaXZhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkOlxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fcHJvdGVjdGVkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlOlxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fb3ZlcnJpZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZTpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2RlY2xhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZUVudGl0eU5hbWUoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICB3aGlsZSAoZWF0KHR0LmRvdCkpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpIHtcbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpIHtcbiAgbmV4dCgpO1xuICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRoaXNUeXBlTm9kZSgpIHtcbiAgbmV4dCgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVF1ZXJ5KCkge1xuICBleHBlY3QodHQuX3R5cGVvZik7XG4gIGlmIChtYXRjaCh0dC5faW1wb3J0KSkge1xuICAgIHRzUGFyc2VJbXBvcnRUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgfVxuICBpZiAoIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpICYmIG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUltcG9ydFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5faW1wb3J0KTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIGV4cGVjdCh0dC5zdHJpbmcpO1xuICBleHBlY3QodHQucGFyZW5SKTtcbiAgaWYgKGVhdCh0dC5kb3QpKSB7XG4gICAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgfVxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcigpIHtcbiAgZWF0KHR0Ll9jb25zdCk7XG4gIGNvbnN0IGhhZEluID0gZWF0KHR0Ll9pbik7XG4gIGNvbnN0IGhhZE91dCA9IGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX291dCk7XG4gIGVhdCh0dC5fY29uc3QpO1xuICBpZiAoKGhhZEluIHx8IGhhZE91dCkgJiYgIW1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgLy8gVGhlIFwiaW5cIiBvciBcIm91dFwiIGtleXdvcmQgbXVzdCBoYXZlIGFjdHVhbGx5IGJlZW4gdGhlIHR5cGUgcGFyYW1ldGVyXG4gICAgLy8gbmFtZSwgc28gc2V0IGl0IGFzIHRoZSBuYW1lLlxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Lm5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH1cblxuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSB8fCBtYXRjaCh0dC50eXBlUGFyYW1ldGVyU3RhcnQpKSB7XG4gICAgbmV4dCgpO1xuICB9IGVsc2Uge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxuXG4gIHdoaWxlICghZWF0KHR0LmdyZWF0ZXJUaGFuKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZVBhcmFtZXRlcigpO1xuICAgIGVhdCh0dC5jb21tYSk7XG4gIH1cbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuLy8gTm90ZTogSW4gVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiB3ZSBtdXN0IHByb3ZpZGUgYHlpZWxkQ29udGV4dGAgYW5kIGBhd2FpdENvbnRleHRgLFxuLy8gYnV0IGhlcmUgaXQncyBhbHdheXMgZmFsc2UsIGJlY2F1c2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHR5cGVzLlxuZnVuY3Rpb24gdHNGaWxsU2lnbmF0dXJlKHJldHVyblRva2VuKSB7XG4gIC8vIEFycm93IGZucyAqbXVzdCogaGF2ZSByZXR1cm4gdG9rZW4gKGA9PmApLiBOb3JtYWwgZnVuY3Rpb25zIGNhbiBvbWl0IGl0LlxuICBjb25zdCByZXR1cm5Ub2tlblJlcXVpcmVkID0gcmV0dXJuVG9rZW4gPT09IHR0LmFycm93O1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIC8vIENyZWF0ZSBhIHNjb3BlIGV2ZW4gdGhvdWdoIHdlJ3JlIGRvaW5nIHR5cGUgcGFyc2luZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHlcbiAgLy8gdHJlYXQgcGFyYW1zIGFzIHRvcC1sZXZlbCBiaW5kaW5ncy5cbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoZmFsc2UgLyogaXNCbG9ja1Njb3BlICovKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICBpZiAocmV0dXJuVG9rZW5SZXF1aXJlZCkge1xuICAgIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbihyZXR1cm5Ub2tlbik7XG4gIH0gZWxzZSBpZiAobWF0Y2gocmV0dXJuVG9rZW4pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlQmluZGluZ0xpc3QodHQucGFyZW5SLCBpc0Jsb2NrU2NvcGUpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpIHtcbiAgaWYgKCFlYXQodHQuY29tbWEpKSB7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVNpZ25hdHVyZU1lbWJlcigpIHtcbiAgdHNGaWxsU2lnbmF0dXJlKHR0LmNvbG9uKTtcbiAgdHNQYXJzZVR5cGVNZW1iZXJTZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gdHNJc1VuYW1iaWd1b3VzbHlJbmRleFNpZ25hdHVyZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBuZXh0KCk7IC8vIFNraXAgJ3snXG4gIGNvbnN0IGlzSW5kZXhTaWduYXR1cmUgPSBlYXQodHQubmFtZSkgJiYgbWF0Y2godHQuY29sb24pO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIGlzSW5kZXhTaWduYXR1cmU7XG59XG5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpIHtcbiAgaWYgKCEobWF0Y2godHQuYnJhY2tldEwpICYmIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG5cbiAgZXhwZWN0KHR0LmJyYWNrZXRMKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIHRzUGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBleHBlY3QodHQuYnJhY2tldFIpO1xuXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuXG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlUHJvcGVydHlPck1ldGhvZFNpZ25hdHVyZShpc1JlYWRvbmx5KSB7XG4gIGVhdCh0dC5xdWVzdGlvbik7XG5cbiAgaWYgKCFpc1JlYWRvbmx5ICYmIChtYXRjaCh0dC5wYXJlbkwpIHx8IG1hdGNoKHR0Lmxlc3NUaGFuKSkpIHtcbiAgICB0c0ZpbGxTaWduYXR1cmUodHQuY29sb24pO1xuICAgIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNUcnlQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gICAgdHNQYXJzZVR5cGVNZW1iZXJTZW1pY29sb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlcigpIHtcbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgLy8gY2FsbCBzaWduYXR1cmVcbiAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtYXRjaCh0dC5fbmV3KSkge1xuICAgIG5leHQoKTtcbiAgICBpZiAobWF0Y2godHQucGFyZW5MKSB8fCBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICAgIC8vIGNvbnN0cnVjdG9yIHNpZ25hdHVyZVxuICAgICAgdHNQYXJzZVNpZ25hdHVyZU1lbWJlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c1BhcnNlUHJvcGVydHlPck1ldGhvZFNpZ25hdHVyZShmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZWFkb25seSA9ICEhdHNQYXJzZU1vZGlmaWVyKFtDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHldKTtcblxuICBjb25zdCBmb3VuZCA9IHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpO1xuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2dldCkgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zZXQpKSAmJlxuICAgIHRzTmV4dFRva2VuQ2FuRm9sbG93TW9kaWZpZXIoKVxuICApIHtcbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyL3NldHRlciBvbiBhIHR5cGUuIFRoZSB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyXG4gICAgLy8gZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQgbmV4dCgpIGZvciB1cywgc28gY29udGludWUgcGFyc2luZyB0aGUgbmFtZS5cbiAgfVxuICBwYXJzZVByb3BlcnR5TmFtZSgtMSAvKiBUeXBlcyBkb24ndCBuZWVkIGNvbnRleHQgSURzLiAqLyk7XG4gIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKHJlYWRvbmx5KTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVMaXRlcmFsKCkge1xuICB0c1BhcnNlT2JqZWN0VHlwZU1lbWJlcnMoKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU9iamVjdFR5cGVNZW1iZXJzKCkge1xuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgd2hpbGUgKCFlYXQodHQuYnJhY2VSKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZU1lbWJlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzTG9va2FoZWFkSXNTdGFydE9mTWFwcGVkVHlwZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBjb25zdCBpc1N0YXJ0T2ZNYXBwZWRUeXBlID0gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCk7XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNTdGFydE9mTWFwcGVkVHlwZTtcbn1cblxuZnVuY3Rpb24gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCkge1xuICBuZXh0KCk7XG4gIGlmIChlYXQodHQucGx1cykgfHwgZWF0KHR0Lm1pbnVzKSkge1xuICAgIHJldHVybiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfVxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSkpIHtcbiAgICBuZXh0KCk7XG4gIH1cbiAgaWYgKCFtYXRjaCh0dC5icmFja2V0TCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbmV4dCgpO1xuICBpZiAoIXRzSXNJZGVudGlmaWVyKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbmV4dCgpO1xuICByZXR1cm4gbWF0Y2godHQuX2luKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU1hcHBlZFR5cGVQYXJhbWV0ZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBleHBlY3QodHQuX2luKTtcbiAgdHNQYXJzZVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU1hcHBlZFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuICBpZiAobWF0Y2godHQucGx1cykgfHwgbWF0Y2godHQubWludXMpKSB7XG4gICAgbmV4dCgpO1xuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfSBlbHNlIHtcbiAgICBlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRMKTtcbiAgdHNQYXJzZU1hcHBlZFR5cGVQYXJhbWV0ZXIoKTtcbiAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbiAgaWYgKG1hdGNoKHR0LnBsdXMpIHx8IG1hdGNoKHR0Lm1pbnVzKSkge1xuICAgIG5leHQoKTtcbiAgICBleHBlY3QodHQucXVlc3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gIH1cbiAgdHNUcnlQYXJzZVR5cGUoKTtcbiAgc2VtaWNvbG9uKCk7XG4gIGV4cGVjdCh0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVUeXBlKCkge1xuICBleHBlY3QodHQuYnJhY2tldEwpO1xuICB3aGlsZSAoIWVhdCh0dC5icmFja2V0UikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgLy8gRG8gbm90IHZhbGlkYXRlIHByZXNlbmNlIG9mIGVpdGhlciBub25lIG9yIG9ubHkgbGFiZWxlZCBlbGVtZW50c1xuICAgIHRzUGFyc2VUdXBsZUVsZW1lbnRUeXBlKCk7XG4gICAgZWF0KHR0LmNvbW1hKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVFbGVtZW50VHlwZSgpIHtcbiAgLy8gcGFyc2VzIGAuLi5Uc1R5cGVbXWBcbiAgaWYgKGVhdCh0dC5lbGxpcHNpcykpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlcyBgVHNUeXBlP2BcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gIH1cblxuICAvLyBUaGUgdHlwZSB3ZSBwYXJzZWQgYWJvdmUgd2FzIGFjdHVhbGx5IGEgbGFiZWxcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICAvLyBMYWJlbGVkIHR1cGxlIHR5cGVzIG11c3QgYWZmaXggdGhlIGxhYmVsIHdpdGggYC4uLmAgb3IgYD9gLCBzbyBubyBuZWVkIHRvIGhhbmRsZSB0aG9zZSBoZXJlXG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlUGFyZW50aGVzaXplZFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICB0c1BhcnNlVHlwZSgpO1xuICBleHBlY3QodHQucGFyZW5SKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKSB7XG4gIC8vIEZpbmlzaCBgLCByZWFkIHF1YXNpXG4gIG5leHRUZW1wbGF0ZVRva2VuKCk7XG4gIC8vIEZpbmlzaCBxdWFzaSwgcmVhZCAke1xuICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICB3aGlsZSAoIW1hdGNoKHR0LmJhY2tRdW90ZSkgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZXhwZWN0KHR0LmRvbGxhckJyYWNlTCk7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgICAvLyBGaW5pc2ggfSwgcmVhZCBxdWFzaVxuICAgIG5leHRUZW1wbGF0ZVRva2VuKCk7XG4gICAgLy8gRmluaXNoIHF1YXNpLCByZWFkIGVpdGhlciAkeyBvciBgXG4gICAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgfVxuICBuZXh0KCk7XG59XG5cbnZhciBGdW5jdGlvblR5cGU7IChmdW5jdGlvbiAoRnVuY3Rpb25UeXBlKSB7XG4gIGNvbnN0IFRTRnVuY3Rpb25UeXBlID0gMDsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTRnVuY3Rpb25UeXBlXCJdID0gVFNGdW5jdGlvblR5cGVdID0gXCJUU0Z1bmN0aW9uVHlwZVwiO1xuICBjb25zdCBUU0NvbnN0cnVjdG9yVHlwZSA9IFRTRnVuY3Rpb25UeXBlICsgMTsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTQ29uc3RydWN0b3JUeXBlXCJdID0gVFNDb25zdHJ1Y3RvclR5cGVdID0gXCJUU0NvbnN0cnVjdG9yVHlwZVwiO1xuICBjb25zdCBUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlID0gVFNDb25zdHJ1Y3RvclR5cGUgKyAxOyBGdW5jdGlvblR5cGVbRnVuY3Rpb25UeXBlW1wiVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZVwiXSA9IFRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGVdID0gXCJUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlXCI7XG59KShGdW5jdGlvblR5cGUgfHwgKEZ1bmN0aW9uVHlwZSA9IHt9KSk7XG5cbmZ1bmN0aW9uIHRzUGFyc2VGdW5jdGlvbk9yQ29uc3RydWN0b3JUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IEZ1bmN0aW9uVHlwZS5UU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlKSB7XG4gICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpO1xuICB9XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUgfHwgdHlwZSA9PT0gRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICBleHBlY3QodHQuX25ldyk7XG4gIH1cbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBmYWxzZTtcbiAgdHNGaWxsU2lnbmF0dXJlKHR0LmFycm93KTtcbiAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTm9uQXJyYXlUeXBlKCkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Lm5hbWU6XG4gICAgICB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3ZvaWQ6XG4gICAgY2FzZSB0dC5fbnVsbDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Lm51bTpcbiAgICBjYXNlIHR0LmJpZ2ludDpcbiAgICBjYXNlIHR0LmRlY2ltYWw6XG4gICAgY2FzZSB0dC5fdHJ1ZTpcbiAgICBjYXNlIHR0Ll9mYWxzZTpcbiAgICAgIHBhcnNlTGl0ZXJhbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQubWludXM6XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZUxpdGVyYWwoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll90aGlzOiB7XG4gICAgICB0c1BhcnNlVGhpc1R5cGVOb2RlKCk7XG4gICAgICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pcykgJiYgIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgICAgIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIHR0Ll90eXBlb2Y6XG4gICAgICB0c1BhcnNlVHlwZVF1ZXJ5KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5faW1wb3J0OlxuICAgICAgdHNQYXJzZUltcG9ydFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIGlmICh0c0xvb2thaGVhZElzU3RhcnRPZk1hcHBlZFR5cGUoKSkge1xuICAgICAgICB0c1BhcnNlTWFwcGVkVHlwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHNQYXJzZVR5cGVMaXRlcmFsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5icmFja2V0TDpcbiAgICAgIHRzUGFyc2VUdXBsZVR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LnBhcmVuTDpcbiAgICAgIHRzUGFyc2VQYXJlbnRoZXNpemVkVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuYmFja1F1b3RlOlxuICAgICAgdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Lm5hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdW5leHBlY3RlZCgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlQXJyYXlUeXBlT3JIaWdoZXIoKSB7XG4gIHRzUGFyc2VOb25BcnJheVR5cGUoKTtcbiAgd2hpbGUgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgaWYgKCFlYXQodHQuYnJhY2tldFIpKSB7XG4gICAgICAvLyBJZiB3ZSBoaXQgXSBpbW1lZGlhdGVseSwgdGhpcyBpcyBhbiBhcnJheSB0eXBlLCBvdGhlcndpc2UgaXQncyBhbiBpbmRleGVkIGFjY2VzcyB0eXBlLlxuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbmZlclR5cGUoKSB7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5fZXh0ZW5kcykpIHtcbiAgICAvLyBJbmZlciB0eXBlIGNvbnN0cmFpbnRzIGludHJvZHVjZSBhbiBhbWJpZ3VpdHkgYWJvdXQgd2hldGhlciB0aGUgXCJleHRlbmRzXCJcbiAgICAvLyBpcyBhIGNvbnN0cmFpbnQgZm9yIHRoaXMgaW5mZXIgdHlwZSBvciBpcyBhbm90aGVyIGNvbmRpdGlvbmFsIHR5cGUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGV4cGVjdCh0dC5fZXh0ZW5kcyk7XG4gICAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIHN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHRydWU7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgaWYgKHN0YXRlLmVycm9yIHx8ICghc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ICYmIG1hdGNoKHR0LnF1ZXN0aW9uKSkpIHtcbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU9wZXJhdG9yT3JIaWdoZXIoKSB7XG4gIGlmIChcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2tleW9mKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdW5pcXVlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpXG4gICkge1xuICAgIG5leHQoKTtcbiAgICB0c1BhcnNlVHlwZU9wZXJhdG9yT3JIaWdoZXIoKTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKSkge1xuICAgIHRzUGFyc2VJbmZlclR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2U7XG4gICAgdHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCk7XG4gICAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcnNlY3Rpb25UeXBlT3JIaWdoZXIoKSB7XG4gIGVhdCh0dC5iaXR3aXNlQU5EKTtcbiAgdHNQYXJzZVR5cGVPcGVyYXRvck9ySGlnaGVyKCk7XG4gIGlmIChtYXRjaCh0dC5iaXR3aXNlQU5EKSkge1xuICAgIHdoaWxlIChlYXQodHQuYml0d2lzZUFORCkpIHtcbiAgICAgIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKSB7XG4gIGVhdCh0dC5iaXR3aXNlT1IpO1xuICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gIGlmIChtYXRjaCh0dC5iaXR3aXNlT1IpKSB7XG4gICAgd2hpbGUgKGVhdCh0dC5iaXR3aXNlT1IpKSB7XG4gICAgICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG1hdGNoKHR0LnBhcmVuTCkgJiYgdHNMb29rYWhlYWRJc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlKCk7XG59XG5cbmZ1bmN0aW9uIHRzU2tpcFBhcmFtZXRlclN0YXJ0KCkge1xuICBpZiAobWF0Y2godHQubmFtZSkgfHwgbWF0Y2godHQuX3RoaXMpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIHRoaXMgaXMgYSBwb3NzaWJsZSBhcnJheS9vYmplY3QgZGVzdHJ1Y3R1cmUsIHdhbGsgdG8gdGhlIG1hdGNoaW5nIGJyYWNrZXQvYnJhY2UuXG4gIC8vIFRoZSBuZXh0IHRva2VuIGFmdGVyIHdpbGwgdGVsbCB1cyBkZWZpbml0aXZlbHkgd2hldGhlciB0aGlzIGlzIGEgZnVuY3Rpb24gcGFyYW0uXG4gIGlmIChtYXRjaCh0dC5icmFjZUwpIHx8IG1hdGNoKHR0LmJyYWNrZXRMKSkge1xuICAgIGxldCBkZXB0aCA9IDE7XG4gICAgbmV4dCgpO1xuICAgIHdoaWxlIChkZXB0aCA+IDAgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgICBpZiAobWF0Y2godHQuYnJhY2VMKSB8fCBtYXRjaCh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2godHQuYnJhY2VSKSB8fCBtYXRjaCh0dC5icmFja2V0UikpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0c0xvb2thaGVhZElzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgY29uc3QgaXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSA9IHRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSgpO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIGlzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGU7XG59XG5cbmZ1bmN0aW9uIHRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSgpIHtcbiAgbmV4dCgpO1xuICBpZiAobWF0Y2godHQucGFyZW5SKSB8fCBtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAvLyAoIClcbiAgICAvLyAoIC4uLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0c1NraXBQYXJhbWV0ZXJTdGFydCgpKSB7XG4gICAgaWYgKG1hdGNoKHR0LmNvbG9uKSB8fCBtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQucXVlc3Rpb24pIHx8IG1hdGNoKHR0LmVxKSkge1xuICAgICAgLy8gKCB4eHggOlxuICAgICAgLy8gKCB4eHggLFxuICAgICAgLy8gKCB4eHggP1xuICAgICAgLy8gKCB4eHggPVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtYXRjaCh0dC5wYXJlblIpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAobWF0Y2godHQuYXJyb3cpKSB7XG4gICAgICAgIC8vICggeHh4ICkgPT5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHJldHVyblRva2VuKTtcbiAgY29uc3QgZmluaXNoZWRSZXR1cm4gPSB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpO1xuICBpZiAoIWZpbmlzaGVkUmV0dXJuKSB7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24odHQuY29sb24pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZSgpIHtcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgZmV3IHNwZWNpYWwgcmV0dXJuIHN5bnRheCBjYXNlczogYHggaXMgVGAsIGBhc3NlcnRzIHhgLCBgYXNzZXJ0cyB4IGlzIFRgLFxuICogYGFzc2VydHMgdGhpcyBpcyBUYC5cbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgd2UgcGFyc2VkIHRoZSByZXR1cm4gdHlwZSwgZmFsc2UgaWYgdGhlcmUncyBzdGlsbCBhIHR5cGUgdG8gYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnRzKSkge1xuICAgIC8vIE5vcm1hbGx5IHRoaXMgaXMgYGFzc2VydHMgeCBpcyBUYCwgYnV0IGF0IHRoaXMgcG9pbnQsIGl0IG1pZ2h0IGJlIGBhc3NlcnRzIGlzIFRgIChhIHVzZXItXG4gICAgLy8gZGVmaW5lZCB0eXBlIGd1YXJkIG9uIHRoZSBgYXNzZXJ0c2AgdmFyaWFibGUpIG9yIGp1c3QgYSB0eXBlIGNhbGxlZCBgYXNzZXJ0c2AuXG4gICAgbmV4dCgpO1xuICAgIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pcykpIHtcbiAgICAgIC8vIElmIHdlIHNlZSBgYXNzZXJ0cyBpc2AsIHRoZW4gdGhpcyBtdXN0IGJlIG9mIHRoZSBmb3JtIGBhc3NlcnRzIGlzIFRgLCBzaW5jZVxuICAgICAgLy8gYGFzc2VydHMgaXMgaXMgVGAgaXNuJ3QgdmFsaWQuXG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0c0lzSWRlbnRpZmllcigpIHx8IG1hdGNoKHR0Ll90aGlzKSkge1xuICAgICAgbmV4dCgpO1xuICAgICAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2lzKSkge1xuICAgICAgICAvLyBJZiB3ZSBzZWUgYGlzYCwgdGhlbiB0aGlzIGlzIGBhc3NlcnRzIHggaXMgVGAuIE90aGVyd2lzZSwgaXQncyBgYXNzZXJ0cyB4YC5cbiAgICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIHR5cGUsIHNvIGJhaWwgb3V0IGFuZCBzdGFydCB0eXBlIHBhcnNpbmcgZnJvbSBzY3JhdGNoLlxuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRzSXNJZGVudGlmaWVyKCkgfHwgbWF0Y2godHQuX3RoaXMpKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgaWRlbnRpZmllciwgd2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBcImlzXCIgYWZ0ZXIgaXQuXG4gICAgbmV4dCgpO1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2lzKSAmJiAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpIHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVndWxhciB0eXBlLCBzbyBiYWlsIG91dCBhbmQgc3RhcnQgdHlwZSBwYXJzaW5nIGZyb20gc2NyYXRjaC5cbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VUeXBlKCkge1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIGlmIChzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgfHwgaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkgfHwgIWVhdCh0dC5fZXh0ZW5kcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZXh0ZW5kcyB0eXBlXG4gIGNvbnN0IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gdHJ1ZTtcbiAgdHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpO1xuICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG5cbiAgZXhwZWN0KHR0LnF1ZXN0aW9uKTtcbiAgLy8gdHJ1ZSB0eXBlXG4gIHRzUGFyc2VUeXBlKCk7XG4gIGV4cGVjdCh0dC5jb2xvbik7XG4gIC8vIGZhbHNlIHR5cGVcbiAgdHNQYXJzZVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gaXNBYnN0cmFjdENvbnN0cnVjdG9yU2lnbmF0dXJlKCkge1xuICByZXR1cm4gaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5fbmV3O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpIHtcbiAgaWYgKHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkpIHtcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNGdW5jdGlvblR5cGUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobWF0Y2godHQuX25ldykpIHtcbiAgICAvLyBBcyBpbiBgbmV3ICgpID0+IERhdGVgXG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTQ29uc3RydWN0b3JUeXBlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoaXNBYnN0cmFjdENvbnN0cnVjdG9yU2lnbmF0dXJlKCkpIHtcbiAgICAvLyBBcyBpbiBgYWJzdHJhY3QgbmV3ICgpID0+IERhdGVgXG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpO1xuICAgIHJldHVybjtcbiAgfVxuICB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VUeXBlQXNzZXJ0aW9uKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gIHRzUGFyc2VUeXBlKCk7XG4gIGV4cGVjdCh0dC5ncmVhdGVyVGhhbik7XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIHBhcnNlTWF5YmVVbmFyeSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCgpIHtcbiAgaWYgKGVhdCh0dC5qc3hUYWdTdGFydCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIHdoaWxlICghbWF0Y2godHQuZ3JlYXRlclRoYW4pICYmICFzdGF0ZS5lcnJvcikge1xuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIGVhdCh0dC5jb21tYSk7XG4gICAgfVxuICAgIC8vIFByb2Nlc3MgPiwgYnV0IHRoZSBvbmUgYWZ0ZXIgbmVlZHMgdG8gYmUgcGFyc2VkIEpTWC1zdHlsZS5cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpIHtcbiAgd2hpbGUgKCFtYXRjaCh0dC5icmFjZUwpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIHRzUGFyc2VFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMoKTtcbiAgICBlYXQodHQuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMoKSB7XG4gIC8vIE5vdGU6IFRTIHVzZXMgcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uT3JIaWdoZXIsXG4gIC8vIHRoZW4gaGFzIGdyYW1tYXIgZXJyb3JzIGxhdGVyIGlmIGl0J3Mgbm90IGFuIEVudGl0eU5hbWUuXG4gIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpIHtcbiAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpO1xuICB9XG4gIHRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKSB7XG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgZXhwZWN0KHR0LmVxKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VFbnVtTWVtYmVyKCkge1xuICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBuYW1lcyBhcmUgZ3JhbW1hciBlcnJvcnMgaW4gYW4gZW51bSwgc28gYWNjZXB0IGp1c3Qgc3RyaW5nIGxpdGVyYWwgb3IgaWRlbnRpZmllci5cbiAgaWYgKG1hdGNoKHR0LnN0cmluZykpIHtcbiAgICBwYXJzZUxpdGVyYWwoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICBpZiAoZWF0KHR0LmVxKSkge1xuICAgIGNvbnN0IGVxSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBwYXJzZUJpbmRpbmdJZGVudGlmaWVyKGZhbHNlKTtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgdHNQYXJzZUVudW1NZW1iZXIoKTtcbiAgICBlYXQodHQuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVCbG9jaygpIHtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHBhcnNlQmxvY2tCb2R5KC8qIGVuZCAqLyB0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpIHtcbiAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIHRzUGFyc2VNb2R1bGVPck5hbWVzcGFjZURlY2xhcmF0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNQYXJzZU1vZHVsZUJsb2NrKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCkge1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpKSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cblxuICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICB9IGVsc2Uge1xuICAgIHNlbWljb2xvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24oKSB7XG4gIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyKCk7XG4gIGV4cGVjdCh0dC5lcSk7XG4gIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzSXNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpIHtcbiAgcmV0dXJuIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fcmVxdWlyZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5wYXJlbkw7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKSB7XG4gIGlmICh0c0lzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UoKSkge1xuICAgIHRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4dGVybmFsTW9kdWxlUmVmZXJlbmNlKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZXF1aXJlKTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIGlmICghbWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxuICBwYXJzZUxpdGVyYWwoKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG59XG5cbi8vIFV0aWxpdGllc1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgYSBzdGF0ZW1lbnQgbWF0Y2hlZC5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VEZWNsYXJlKCkge1xuICBpZiAoaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUudHlwZSkge1xuICAgIGNhc2UgdHQuX2Z1bmN0aW9uOiB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICBuZXh0KCk7XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHByZWNpc2VseSBnZXQgdGhlIGZ1bmN0aW9uIHN0YXJ0IGhlcmUsIHNpbmNlIGl0J3Mgb25seSB1c2VkIHRvIG1hcmtcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBhcyBhIHR5cGUgaWYgaXQncyBib2RpbGVzcywgYW5kIGl0J3MgYWxyZWFkeSBhIHR5cGUgaGVyZS5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSk7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgdHQuX2NsYXNzOiB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICBwYXJzZUNsYXNzKC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIHR0Ll9jb25zdDoge1xuICAgICAgaWYgKG1hdGNoKHR0Ll9jb25zdCkgJiYgaXNMb29rYWhlYWRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICAgIC8vIGBjb25zdCBlbnVtID0gMDtgIG5vdCBhbGxvd2VkIGJlY2F1c2UgXCJlbnVtXCIgaXMgYSBzdHJpY3QgbW9kZSByZXNlcnZlZCB3b3JkLlxuICAgICAgICBleHBlY3QodHQuX2NvbnN0KTtcbiAgICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZW51bSk7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9lbnVtO1xuICAgICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSB0dC5fdmFyOlxuICAgIGNhc2UgdHQuX2xldDoge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQoc3RhdGUudHlwZSAhPT0gdHQuX3Zhcik7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgdHQubmFtZToge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpIHtcbiAgICAgICAgdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0Y2hlZCA9IHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgLyogaXNCZWZvcmVUb2tlbiAqLyB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBOb3RlOiB0aGlzIHdvbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlIGtleXdvcmQgaXMgYWxsb3dlZCBpbiBgc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbmAuXG4vLyBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIGRlY2xhcmF0aW9uLlxuZnVuY3Rpb24gdHNUcnlQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICByZXR1cm4gdHNQYXJzZURlY2xhcmF0aW9uKHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkLCAvKiBpc0JlZm9yZVRva2VuICovIHRydWUpO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIHN0YXRlbWVudC5cbmZ1bmN0aW9uIHRzUGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gIHN3aXRjaCAoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOiB7XG4gICAgICBjb25zdCBkZWNsYXJlVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IHRzVHJ5UGFyc2VEZWNsYXJlKCk7XG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICBzdGF0ZS50b2tlbnNbZGVjbGFyZVRva2VuSW5kZXhdLnR5cGUgPSB0dC5fZGVjbGFyZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZ2xvYmFsOlxuICAgICAgLy8gYGdsb2JhbCB7IH1gICh3aXRoIG5vIGBkZWNsYXJlYCkgbWF5IGFwcGVhciBpbnNpZGUgYW4gYW1iaWVudCBtb2R1bGUgZGVjbGFyYXRpb24uXG4gICAgICAvLyBXb3VsZCBsaWtlIHRvIHVzZSB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24gaGVyZSwgYnV0IGFscmVhZHkgcmFuIHBhc3QgXCJnbG9iYWxcIi5cbiAgICAgIGlmIChtYXRjaCh0dC5icmFjZUwpKSB7XG4gICAgICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0c1BhcnNlRGVjbGFyYXRpb24oY29udGV4dHVhbEtleXdvcmQsIC8qIGlzQmVmb3JlVG9rZW4gKi8gZmFsc2UpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb21tb24gY29kZSBmb3IgcGFyc2luZyBhIGRlY2xhcmF0aW9uLlxuICpcbiAqIGlzQmVmb3JlVG9rZW4gaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgcGFyc2VyIHN0YXRlIGlzIGF0IHRoZSBjb250ZXh0dWFsXG4gKiBrZXl3b3JkIChhbmQgdGhhdCBpdCBpcyBub3QgeWV0IGVtaXR0ZWQpIHJhdGhlciB0aGFuIHJlYWRpbmcgdGhlIHRva2VuIGFmdGVyXG4gKiBpdC4gV2hlbiBpc0JlZm9yZVRva2VuIGlzIHRydWUsIHdlIG1heSBiZSBwcmVjZWRlZCBieSBhbiBgZXhwb3J0YCB0b2tlbiBhbmRcbiAqIHNob3VsZCBpbmNsdWRlIHRoYXQgdG9rZW4gaW4gYSB0eXBlIGNvbnRleHQgd2UgY3JlYXRlLCBlLmcuIHRvIGhhbmRsZVxuICogYGV4cG9ydCBpbnRlcmZhY2VgIG9yIGBleHBvcnQgdHlwZWAuIChUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBhbmQgc2hvdWxkIGJlXG4gKiBjbGVhbmVkIHVwIGF0IHNvbWUgcG9pbnQuKVxuICpcbiAqIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgaXNCZWZvcmVUb2tlbikge1xuICBzd2l0Y2ggKGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3Q6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIG1hdGNoKHR0Ll9jbGFzcykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2Fic3RyYWN0O1xuICAgICAgICBwYXJzZUNsYXNzKC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZW51bTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgbWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gICAgICAgIHRzUGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgbWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgLy8gYG5leHRgIGlzIHRydWUgaW4gXCJleHBvcnRcIiBhbmQgXCJkZWNsYXJlXCIgY29udGV4dHMsIHNvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoYXQgdG9rZW5cbiAgICAgICAgLy8gYXMgd2VsbC5cbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KGlzQmVmb3JlVG9rZW4gPyAyIDogMSk7XG4gICAgICAgIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSkge1xuICAgICAgICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgICAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dChpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICAgIHRzUGFyc2VBbWJpZW50RXh0ZXJuYWxNb2R1bGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSAmJiBtYXRjaCh0dC5uYW1lKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgdHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX3R5cGU6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dChpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSB7XG4gIGlmIChpc0JlZm9yZVRva2VuKSB7XG4gICAgLy8gQmFiZWwgY2hlY2tzIGhhc0ZvbGxvd2luZ0xpbmVCcmVhayBoZXJlIGFuZCByZXR1cm5zIGZhbHNlLCBidXQgdGhpc1xuICAgIC8vIGRvZXNuJ3QgYWN0dWFsbHkgY29tZSB1cCwgZS5nLiBgZXhwb3J0IGludGVyZmFjZWAgY2FuIG5ldmVyIGJlIG9uIGl0cyBvd25cbiAgICAvLyBsaW5lIGluIHZhbGlkIGNvZGUuXG4gICAgbmV4dCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAhaXNMaW5lVGVybWluYXRvcigpO1xuICB9XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYSBnZW5lcmljIGFzeW5jIGFycm93IGZ1bmN0aW9uLlxuZnVuY3Rpb24gdHNUcnlQYXJzZUdlbmVyaWNBc3luY0Fycm93RnVuY3Rpb24oKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcblxuICB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKTtcbiAgZXhwZWN0KHR0LmFycm93KTtcblxuICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwYXJzZUZ1bmN0aW9uQm9keSh0cnVlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogSWYgbmVjZXNzYXJ5LCBoYWNrIHRoZSB0b2tlbml6ZXIgc3RhdGUgc28gdGhhdCB0aGlzIGJpdHNoaWZ0IHdhcyBhY3R1YWxseSBhXG4gKiBsZXNzLXRoYW4gdG9rZW4sIHRoZW4ga2VlcCBwYXJzaW5nLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gc2l0dWF0aW9uc1xuICogd2hlcmUgd2UgcmVzdG9yZSBmcm9tIHNuYXBzaG90IG9uIGVycm9yICh3aGljaCByZXZlcnRzIHRoaXMgY2hhbmdlKSBvclxuICogd2hlcmUgYml0c2hpZnQgd291bGQgYmUgaWxsZWdhbCBhbnl3YXkgKGUuZy4gaW4gYSBjbGFzcyBcImV4dGVuZHNcIiBjbGF1c2UpLlxuICpcbiAqIFRoaXMgaGFjayBpcyB1c2VmdWwgdG8gaGFuZGxlIHNpdHVhdGlvbnMgbGlrZSBmb288PFQ+KCkgPT4gdm9pZD4oKSB3aGVyZVxuICogdGhlcmUgY2FuIGxlZ2l0aW1hdGVseSBiZSB0d28gb3Blbi1hbmdsZS1icmFja2V0cyBpbiBhIHJvdyBpbiBUUy5cbiAqL1xuZnVuY3Rpb24gdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpIHtcbiAgaWYgKHN0YXRlLnR5cGUgPT09IHR0LmJpdFNoaWZ0TCkge1xuICAgIHN0YXRlLnBvcyAtPSAxO1xuICAgIGZpbmlzaFRva2VuKHR0Lmxlc3NUaGFuKTtcbiAgfVxuICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFyZ3VtZW50cygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBleHBlY3QodHQubGVzc1RoYW4pO1xuICB3aGlsZSAoIW1hdGNoKHR0LmdyZWF0ZXJUaGFuKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIGVhdCh0dC5jb21tYSk7XG4gIH1cbiAgaWYgKCFvbGRJc1R5cGUpIHtcbiAgICAvLyBJZiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHByZXNlbnQgaW4gYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBlLmcuXG4gICAgLy8gZjxudW1iZXI+KCksIHRoZW4gdGhlID4gc2lnbiBzaG91bGQgYmUgdG9rZW5pemVkIGFzIGEgbm9uLXR5cGUgdG9rZW4uXG4gICAgLy8gSW4gcGFydGljdWxhciwgZihhIDwgYiwgYyA+PSBkKSBzaG91bGQgcGFyc2UgdGhlID49IGFzIGEgc2luZ2xlIHRva2VuLFxuICAgIC8vIHJlc3VsdGluZyBpbiBhIHN5bnRheCBlcnJvciBhbmQgZmFsbGJhY2sgdG8gdGhlIG5vbi10eXBlLWFyZ3NcbiAgICAvLyBpbnRlcnByZXRhdGlvbi4gSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgZXZlbiB0aG91Z2ggdGhlID4gaXMgdG9rZW5pemVkIGFzIGFcbiAgICAvLyBub24tdHlwZSB0b2tlbiwgaXQgc3RpbGwgbXVzdCBiZSBtYXJrZWQgYXMgYSB0eXBlIHRva2VuIHNvIHRoYXQgaXQgaXNcbiAgICAvLyBlcmFzZWQuXG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICByZXNjYW5fZ3QoKTtcbiAgICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzSXNEZWNsYXJhdGlvblN0YXJ0KCkge1xuICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBzd2l0Y2ggKHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmU6XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9lbnVtOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fdHlwZTpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT1ZFUlJJREVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCkge1xuICAvLyBGb3IgYXJyb3cgZnVuY3Rpb25zLCBgcGFyc2VBcnJvd2AgaGFuZGxlcyB0aGUgcmV0dXJuIHR5cGUgaXRzZWxmLlxuICBpZiAobWF0Y2godHQuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHR0LmNvbG9uKTtcbiAgfVxuXG4gIC8vIFRoZSBvcmlnaW5hbCBjb2RlIGNoZWNrZWQgdGhlIG5vZGUgdHlwZSB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiB0eXBlIGFsbG93cyBhIG1pc3NpbmdcbiAgLy8gYm9keSwgYnV0IHdlIHNraXAgdGhhdCB0byBhdm9pZCBzZW5kaW5nIGFyb3VuZCB0aGUgbm9kZSB0eXBlLiBXZSBpbnN0ZWFkIGp1c3QgdXNlIHRoZVxuICAvLyBhbGxvd0V4cHJlc3Npb25Cb2R5IGJvb2xlYW4gdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGFuIGFycm93IGZ1bmN0aW9uLlxuICBpZiAoIW1hdGNoKHR0LmJyYWNlTCkgJiYgaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgLy8gUmV0cm9hY3RpdmVseSBtYXJrIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhcyBhIHR5cGUuXG4gICAgbGV0IGkgPSBzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoXG4gICAgICBpID49IDAgJiZcbiAgICAgIChzdGF0ZS50b2tlbnNbaV0uc3RhcnQgPj0gZnVuY3Rpb25TdGFydCB8fFxuICAgICAgICBzdGF0ZS50b2tlbnNbaV0udHlwZSA9PT0gdHQuX2RlZmF1bHQgfHxcbiAgICAgICAgc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IHR0Ll9leHBvcnQpXG4gICAgKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaV0uaXNUeXBlID0gdHJ1ZTtcbiAgICAgIGktLTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBlYXQodHQuYmFuZykpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5ub25OdWxsQXNzZXJ0aW9uO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQuYml0U2hpZnRMKSkge1xuICAgIC8vIFRoZXJlIGFyZSBudW1iZXIgb2YgdGhpbmdzIHdlIGFyZSBnb2luZyB0byBcIm1heWJlXCIgcGFyc2UsIGxpa2UgdHlwZSBhcmd1bWVudHMgb25cbiAgICAvLyB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbnMuIElmIGFueSBvZiB0aGVtIGZhaWwsIHdhbGsgaXQgYmFjayBhbmQgY29udGludWUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFub0NhbGxzICYmIGF0UG9zc2libGVBc3luYygpKSB7XG4gICAgICAvLyBBbG1vc3QgY2VydGFpbmx5IHRoaXMgaXMgYSBnZW5lcmljIGFzeW5jIGZ1bmN0aW9uIGBhc3luYyA8VD4oKSA9PiAuLi5cbiAgICAgIC8vIEJ1dCBpdCBtaWdodCBiZSBhIGNhbGwgd2l0aCBhIHR5cGUgYXJndW1lbnQgYGFzeW5jPFQ+KCk7YFxuICAgICAgY29uc3QgYXN5bmNBcnJvd0ZuID0gdHNUcnlQYXJzZUdlbmVyaWNBc3luY0Fycm93RnVuY3Rpb24oKTtcbiAgICAgIGlmIChhc3luY0Fycm93Rm4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50c1dpdGhQb3NzaWJsZUJpdHNoaWZ0KCk7XG4gICAgaWYgKCFub0NhbGxzICYmIGVhdCh0dC5wYXJlbkwpKSB7XG4gICAgICAvLyBXaXRoIGY8VD4oKSwgdGhlIHN1YnNjcmlwdFN0YXJ0SW5kZXggbWFya2VyIGlzIG9uIHRoZSAoIHRva2VuLlxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2godHQuYmFja1F1b3RlKSkge1xuICAgICAgLy8gVGFnZ2VkIHRlbXBsYXRlIHdpdGggYSB0eXBlIGFyZ3VtZW50LlxuICAgICAgcGFyc2VUZW1wbGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBUaGUgcmVtYWluaW5nIHBvc3NpYmxlIGNhc2UgaXMgYW4gaW5zdGFudGlhdGlvbiBleHByZXNzaW9uLCBlLmcuXG4gICAgICAvLyBBcnJheTxudW1iZXI+IC4gQ2hlY2sgZm9yIGEgZmV3IGNhc2VzIHRoYXQgd291bGQgZGlzcXVhbGlmeSBpdCBhbmRcbiAgICAgIC8vIGNhdXNlIHVzIHRvIGJhaWwgb3V0LlxuICAgICAgLy8gYTxiPj5jIGlzIG5vdCAoYTxiPik+YywgYnV0IGE8KGI+PmMpXG4gICAgICBzdGF0ZS50eXBlID09PSB0dC5ncmVhdGVyVGhhbiB8fFxuICAgICAgLy8gYTxiPmMgaXMgKGE8Yik+Y1xuICAgICAgKHN0YXRlLnR5cGUgIT09IHR0LnBhcmVuTCAmJlxuICAgICAgICBCb29sZWFuKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfRVhQUkVTU0lPTl9TVEFSVCkgJiZcbiAgICAgICAgIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKVxuICAgICkge1xuICAgICAgLy8gQmFpbCBvdXQuIFdlIGhhdmUgc29tZXRoaW5nIGxpa2UgYTxiPmMsIHdoaWNoIGlzIG5vdCBhbiBleHByZXNzaW9uIHdpdGhcbiAgICAgIC8vIHR5cGUgYXJndW1lbnRzIGJ1dCBhbiAoYSA8IGIpID4gYyBjb21wYXJpc29uLlxuICAgICAgdW5leHBlY3RlZCgpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgbWF0Y2godHQucXVlc3Rpb25Eb3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubGVzc1RoYW4pIHtcbiAgICAvLyBJZiB3ZSBzZWUgZj8uPCwgdGhlbiB0aGlzIG11c3QgYmUgYW4gb3B0aW9uYWwgY2FsbCB3aXRoIGEgdHlwZSBhcmd1bWVudC5cbiAgICBuZXh0KCk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQgPSB0cnVlO1xuICAgIC8vIFdpdGggZj8uPFQ+KCksIHRoZSBzdWJzY3JpcHRTdGFydEluZGV4IG1hcmtlciBpcyBvbiB0aGUgPy4gdG9rZW4uXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHMoKTtcbiAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gIH1cbiAgYmFzZVBhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnQoKSB7XG4gIGlmIChlYXQodHQuX2ltcG9ydCkpIHtcbiAgICAvLyBPbmUgb2YgdGhlc2UgY2FzZXM6XG4gICAgLy8gZXhwb3J0IGltcG9ydCBBID0gQjtcbiAgICAvLyBleHBvcnQgaW1wb3J0IHR5cGUgQSA9IHJlcXVpcmUoXCJBXCIpO1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIGxvb2thaGVhZFR5cGUoKSAhPT0gdHQuZXEpIHtcbiAgICAgIC8vIEVhdCBhIGB0eXBlYCB0b2tlbiwgdW5sZXNzIGl0J3MgYWN0dWFsbHkgYW4gaWRlbnRpZmllciBuYW1lLlxuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICAvLyBgZXhwb3J0ID0geDtgXG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgLy8gYGV4cG9ydCBhcyBuYW1lc3BhY2UgQTtgXG4gICAgLy8gU2VlIGBwYXJzZU5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uYCBpbiBUeXBlU2NyaXB0J3Mgb3duIHBhcnNlclxuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX25hbWVzcGFjZSk7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICAgIGNvbnN0IG5leHRUeXBlID0gbG9va2FoZWFkVHlwZSgpO1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2Zvb30gZnJvbSAnYSc7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJ2EnOydcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnYSc7J1xuICAgICAgaWYgKG5leHRUeXBlID09PSB0dC5icmFjZUwgfHwgbmV4dFR5cGUgPT09IHR0LnN0YXIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIFRTIGltcG9ydCBzcGVjaWZpZXIsIHdoaWNoIG1heSBiZSBwcmVmaXhlZCB3aXRoIFwidHlwZVwiIGFuZCBtYXkgYmUgb2ZcbiAqIHRoZSBmb3JtIGBmb28gYXMgYmFyYC5cbiAqXG4gKiBUaGUgbnVtYmVyIG9mIGlkZW50aWZpZXItbGlrZSB0b2tlbnMgd2Ugc2VlIGhhcHBlbnMgdG8gYmUgZW5vdWdoIHRvIHVuaXF1ZWx5XG4gKiBpZGVudGlmeSB0aGUgZm9ybSwgc28gc2ltcGx5IGNvdW50IHRoZSBudW1iZXIgb2YgaWRlbnRpZmllcnMgcmF0aGVyIHRoYW5cbiAqIG1hdGNoaW5nIHRoZSB3b3JkcyBgdHlwZWAgb3IgYGFzYC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2VcbiAqIGB0eXBlYCBhbmQgYGFzYCBjb3VsZCBlYWNoIGFjdHVhbGx5IGJlIHBsYWluIGlkZW50aWZpZXJzIHJhdGhlciB0aGFuXG4gKiBrZXl3b3Jkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBpbXBvcnQge2Zvb31cbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgZm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKG1hdGNoKHR0LmNvbW1hKSB8fCBtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb28gYXMgYmFyfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnRBY2Nlc3M7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgLy8gaW1wb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnRBY2Nlc3M7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSA0XS5pc1R5cGUgPSB0cnVlO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDNdLmlzVHlwZSA9IHRydWU7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMl0uaXNUeXBlID0gdHJ1ZTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xufVxuXG4vKipcbiAqIEp1c3QgbGlrZSBuYW1lZCBpbXBvcnQgc3BlY2lmaWVycywgZXhwb3J0IHNwZWNpZmllcnMgY2FuIGhhdmUgZnJvbSAxIHRvIDRcbiAqIHRva2VucywgaW5jbHVzaXZlLCBhbmQgdGhlIG51bWJlciBvZiB0b2tlbnMgZGV0ZXJtaW5lcyB0aGUgcm9sZSBvZiBlYWNoIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZUV4cG9ydFNwZWNpZmllcigpIHtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQuYnJhY2VSKSkge1xuICAgIC8vIGV4cG9ydCB7Zm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge3R5cGUgZm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQuYnJhY2VSKSkge1xuICAgIC8vIGV4cG9ydCB7Zm9vIGFzIGJhcn1cbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDNdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgLy8gZXhwb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gNF0uaXNUeXBlID0gdHJ1ZTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAzXS5pc1R5cGUgPSB0cnVlO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpIHtcbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQuX2NsYXNzKSB7XG4gICAgc3RhdGUudHlwZSA9IHR0Ll9hYnN0cmFjdDtcbiAgICBuZXh0KCk7IC8vIFNraXAgXCJhYnN0cmFjdFwiXG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgLy8gTWFrZSBzdXJlIFwiZXhwb3J0IGRlZmF1bHRcIiBhcmUgY29uc2lkZXJlZCB0eXBlIHRva2VucyBzbyB0aGUgd2hvbGUgdGhpbmcgaXMgcmVtb3ZlZC5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMik7XG4gICAgdHNQYXJzZURlY2xhcmF0aW9uKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UsIHRydWUpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQoKSB7XG4gIGlmIChzdGF0ZS50eXBlID09PSB0dC5fY29uc3QpIHtcbiAgICBjb25zdCBhaGVhZCA9IGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkKCk7XG4gICAgaWYgKGFoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgYWhlYWQuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKSB7XG4gICAgICBleHBlY3QodHQuX2NvbnN0KTtcbiAgICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKGlzU3RhdGljKSB7XG4gIGNvbnN0IG1lbWJlclN0YXJ0SW5kZXhBZnRlclN0YXRpYyA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHRzUGFyc2VNb2RpZmllcnMoW1xuICAgIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCxcbiAgICBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHksXG4gICAgQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUsXG4gICAgQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYyxcbiAgICBDb250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gIF0pO1xuXG4gIGNvbnN0IG1vZGlmaWVyc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3QgZm91bmQgPSB0c1RyeVBhcnNlSW5kZXhTaWduYXR1cmUoKTtcbiAgaWYgKGZvdW5kKSB7XG4gICAgLy8gSW5kZXggc2lnbmF0dXJlcyBhcmUgdHlwZSBkZWNsYXJhdGlvbnMsIHNvIHNldCB0aGUgbW9kaWZpZXIgdG9rZW5zIGFzXG4gICAgLy8gdHlwZSB0b2tlbnMuIE1vc3QgdG9rZW5zIGNvdWxkIGJlIGFzc3VtZWQgdG8gYmUgdHlwZSB0b2tlbnMsIGJ1dCBgc3RhdGljYFxuICAgIC8vIGlzIGFtYmlndW91cyB1bmxlc3Mgd2Ugc2V0IGl0IGV4cGxpY2l0bHkgaGVyZS5cbiAgICBjb25zdCBtZW1iZXJTdGFydEluZGV4ID0gaXNTdGF0aWNcbiAgICAgID8gbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljIC0gMVxuICAgICAgOiBtZW1iZXJTdGFydEluZGV4QWZ0ZXJTdGF0aWM7XG4gICAgZm9yIChsZXQgaSA9IG1lbWJlclN0YXJ0SW5kZXg7IGkgPCBtb2RpZmllcnNFbmRJbmRleDsgaSsrKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaV0uaXNUeXBlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBOb3RlOiBUaGUgcmVhc29uIHdlIGRvIHRoaXMgaW4gYHBhcnNlSWRlbnRpZmllclN0YXRlbWVudGAgYW5kIG5vdCBgcGFyc2VTdGF0ZW1lbnRgXG4vLyBpcyB0aGF0IGUuZy4gYHR5cGUoKWAgaXMgdmFsaWQgSlMsIHNvIHdlIG11c3QgdHJ5IHBhcnNpbmcgdGhhdCBmaXJzdC5cbi8vIElmIGl0J3MgcmVhbGx5IGEgdHlwZSwgd2Ugd2lsbCBwYXJzZSBgdHlwZWAgYXMgdGhlIHN0YXRlbWVudCwgYW5kIGNhbiBjb3JyZWN0IGl0IGhlcmVcbi8vIGJ5IHBhcnNpbmcgdGhlIHJlc3QuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IHRzUGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgLy8gXCJleHBvcnQgZGVjbGFyZVwiIGlzIGVxdWl2YWxlbnQgdG8ganVzdCBcImV4cG9ydFwiLlxuICBjb25zdCBpc0RlY2xhcmUgPSBlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlKTtcbiAgaWYgKGlzRGVjbGFyZSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9kZWNsYXJlO1xuICB9XG5cbiAgbGV0IG1hdGNoZWREZWNsYXJhdGlvbiA9IGZhbHNlO1xuICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBpZiAoaXNEZWNsYXJlKSB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMik7XG4gICAgICBtYXRjaGVkRGVjbGFyYXRpb24gPSB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoZWREZWNsYXJhdGlvbiA9IHRzVHJ5UGFyc2VFeHBvcnREZWNsYXJhdGlvbigpO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoZWREZWNsYXJhdGlvbikge1xuICAgIGlmIChpc0RlY2xhcmUpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgyKTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c0FmdGVyUGFyc2VDbGFzc1N1cGVyKGhhc1N1cGVyKSB7XG4gIGlmIChoYXNTdXBlciAmJiAobWF0Y2godHQubGVzc1RoYW4pIHx8IG1hdGNoKHR0LmJpdFNoaWZ0TCkpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbXBsZW1lbnRzKSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9pbXBsZW1lbnRzO1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICB0c1BhcnNlSGVyaXRhZ2VDbGF1c2UoKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1N0YXJ0UGFyc2VPYmpQcm9wVmFsdWUoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufVxuXG4vLyBgbGV0IHg6IG51bWJlcjtgXG5leHBvcnQgZnVuY3Rpb24gdHNBZnRlclBhcnNlVmFySGVhZCgpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBpZiAoIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgZWF0KHR0LmJhbmcpO1xuICB9XG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG4vLyBwYXJzZSB0aGUgcmV0dXJuIHR5cGUgb2YgYW4gYXN5bmMgYXJyb3cgZnVuY3Rpb24gLSBsZXQgZm9vID0gKGFzeW5jICgpOiBudW1iZXIgPT4ge30pO1xuZXhwb3J0IGZ1bmN0aW9uIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICAvLyBOb3RlOiBXaGVuIHRoZSBKU1ggcGx1Z2luIGlzIG9uLCB0eXBlIGFzc2VydGlvbnMgKGA8VD4geGApIGFyZW4ndCB2YWxpZCBzeW50YXguXG4gIGlmIChpc0pTWEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1gobm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlTWF5YmVBc3NpZ25XaXRoSlNYKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmICghbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgcmV0dXJuIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0byBwYXJzZSBKU1ggaWYgcG9zc2libGUuIEJ1dCBtYXkgYmUgYW4gYXJyb3cgZm4uXG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgbGV0IHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2FzQXJyb3c7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIHRyeSBhcyB0eXBlLXBhcmFtZXRlcml6ZWQgYXJyb3cgZnVuY3Rpb24uXG4gIHN0YXRlLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoIXdhc0Fycm93KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgcmV0dXJuIHdhc0Fycm93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZU1heWJlQXNzaWduV2l0aG91dEpTWChub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoIW1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIHJldHVybiBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH1cblxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIGNvbnN0IHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoIXdhc0Fycm93KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXNBcnJvdztcbiAgfVxuXG4gIC8vIFRyeSBwYXJzaW5nIGEgdHlwZSBjYXN0IGluc3RlYWQgb2YgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIC8vIFRoaXMgd2lsbCBzdGFydCB3aXRoIGEgdHlwZSBhc3NlcnRpb24gKHZpYSBwYXJzZU1heWJlVW5hcnkpLlxuICAvLyBCdXQgZG9uJ3QgZGlyZWN0bHkgY2FsbCBgdHNQYXJzZVR5cGVBc3NlcnRpb25gIGJlY2F1c2Ugd2Ugd2FudCB0byBoYW5kbGUgYW55IGJpbmFyeSBhZnRlciBpdC5cbiAgcmV0dXJuIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VBcnJvdygpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gaG93IHRoZSBUUyBwYXJzZXIgZG9lcyBpdC5cbiAgICAvLyBUUyB1c2VzIGxvb2thaGVhZC4gQmFieWxvbiBwYXJzZXMgaXQgYXMgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gYW5kIGNvbnZlcnRzLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcblxuICAgIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbih0dC5jb2xvbik7XG4gICAgaWYgKGNhbkluc2VydFNlbWljb2xvbigpKSB1bmV4cGVjdGVkKCk7XG4gICAgaWYgKCFtYXRjaCh0dC5hcnJvdykpIHVuZXhwZWN0ZWQoKTtcblxuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlYXQodHQuYXJyb3cpO1xufVxuXG4vLyBBbGxvdyB0eXBlIGFubm90YXRpb25zIGluc2lkZSBvZiBhIHBhcmFtZXRlciBsaXN0LlxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBlYXQodHQucXVlc3Rpb24pO1xuICB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSB8fCBtYXRjaCh0dC5iaXRTaGlmdEwpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGJhc2VQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG59XG4iLCAiaW1wb3J0IHtcbiAgZWF0LFxuICBmaW5pc2hUb2tlbixcbiAgZ2V0VG9rZW5Gcm9tQ29kZSxcbiAgSWRlbnRpZmllclJvbGUsXG4gIEpTWFJvbGUsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBza2lwU3BhY2UsXG4gIFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uLy4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtpbnB1dCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtwYXJzZUV4cHJlc3Npb24sIHBhcnNlTWF5YmVBc3NpZ259IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvZXhwcmVzc2lvblwiO1xuaW1wb3J0IHtleHBlY3QsIHVuZXhwZWN0ZWR9IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvdXRpbFwiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi8uLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtJU19JREVOVElGSUVSX0NIQVIsIElTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi8uLi91dGlsL2lkZW50aWZpZXJcIjtcbmltcG9ydCB7dHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBSZWFkIHRva2VuIHdpdGggSlNYIGNvbnRlbnRzLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGRldGVjdGluZyBqc3hUYWdTdGFydCBhbmQgYWxzbyByZWd1bGFyIHRva2VucyB0aGF0IG1pZ2h0IGJlXG4gKiBwYXJ0IG9mIGFuIGV4cHJlc3Npb24sIHRoaXMgY29kZSBkZXRlY3RzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRleHQgcmFuZ2VzXG4gKiB3aXRoaW4gSlNYIGNoaWxkcmVuLiBJbiBvcmRlciB0byBwcm9wZXJseSBjb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLCB3ZVxuICogZGlzdGluZ3Vpc2gganN4VGV4dCBmcm9tIGpzeEVtcHR5VGV4dCwgd2hpY2ggaXMgYSB0ZXh0IHJhbmdlIHRoYXQgc2ltcGxpZmllc1xuICogdG8gdGhlIGVtcHR5IHN0cmluZyBhZnRlciBKU1ggd2hpdGVzcGFjZSB0cmltbWluZy5cbiAqXG4gKiBJdCB0dXJucyBvdXQgdGhhdCBhIEpTWCB0ZXh0IHJhbmdlIHdpbGwgc2ltcGxpZnkgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhbmRcbiAqIG9ubHkgaWYgYm90aCBvZiB0aGVzZSBjb25kaXRpb25zIGhvbGQ6XG4gKiAtIFRoZSByYW5nZSBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKG9ubHkgY291bnRpbmcgc3BhY2UsXG4gKiAgIHRhYiwgXFxyLCBhbmQgXFxuKS5cbiAqIC0gVGhlIHJhbmdlIGhhcyBhdCBsZWFzdCBvbmUgbmV3bGluZS5cbiAqIFRoaXMgY2FuIGJlIHByb3ZlbiBieSBhbmFseXppbmcgYW55IGltcGxlbWVudGF0aW9uIG9mIHdoaXRlc3BhY2UgdHJpbW1pbmcsXG4gKiBlLmcuIGZvcm1hdEpTWFRleHRMaXRlcmFsIGluIFN1Y3Jhc2Ugb3IgY2xlYW5KU1hFbGVtZW50TGl0ZXJhbENoaWxkIGluIEJhYmVsLlxuICovXG5mdW5jdGlvbiBqc3hSZWFkVG9rZW4oKSB7XG4gIGxldCBzYXdOZXdsaW5lID0gZmFsc2U7XG4gIGxldCBzYXdOb25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgSlNYIGNvbnRlbnRzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmxlc3NUaGFuIHx8IGNoID09PSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UpIHtcbiAgICAgIGlmIChzdGF0ZS5wb3MgPT09IHN0YXRlLnN0YXJ0KSB7XG4gICAgICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmxlc3NUaGFuKSB7XG4gICAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICAgICAgZmluaXNoVG9rZW4odHQuanN4VGFnU3RhcnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBnZXRUb2tlbkZyb21Db2RlKGNoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNhd05ld2xpbmUgJiYgIXNhd05vbldoaXRlc3BhY2UpIHtcbiAgICAgICAgZmluaXNoVG9rZW4odHQuanN4RW1wdHlUZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgcGFydCBvZiBKU1ggdGV4dC5cbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgc2F3TmV3bGluZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjaCAhPT0gY2hhckNvZGVzLnNwYWNlICYmIGNoICE9PSBjaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gJiYgY2ggIT09IGNoYXJDb2Rlcy50YWIpIHtcbiAgICAgIHNhd05vbldoaXRlc3BhY2UgPSB0cnVlO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MrKztcbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hSZWFkU3RyaW5nKHF1b3RlKSB7XG4gIHN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHN0YXRlLnBvcysrO1xuICB9XG4gIGZpbmlzaFRva2VuKHR0LnN0cmluZyk7XG59XG5cbi8vIFJlYWQgYSBKU1ggaWRlbnRpZmllciAodmFsaWQgdGFnIG9yIGF0dHJpYnV0ZSBuYW1lKS5cbi8vXG4vLyBPcHRpbWl6ZWQgdmVyc2lvbiBzaW5jZSBKU1ggaWRlbnRpZmllcnMgY2FuJ3QgY29udGFpblxuLy8gZXNjYXBlIGNoYXJhY3RlcnMgYW5kIHNvIGNhbiBiZSByZWFkIGFzIHNpbmdsZSBzbGljZS5cbi8vIEFsc28gYXNzdW1lcyB0aGF0IGZpcnN0IGNoYXJhY3RlciB3YXMgYWxyZWFkeSBjaGVja2VkXG4vLyBieSBpc0lkZW50aWZpZXJTdGFydCBpbiByZWFkVG9rZW4uXG5cbmZ1bmN0aW9uIGpzeFJlYWRXb3JkKCkge1xuICBsZXQgY2g7XG4gIGRvIHtcbiAgICBpZiAoc3RhdGUucG9zID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICB1bmV4cGVjdGVkKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNoID0gaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvcyk7XG4gIH0gd2hpbGUgKElTX0lERU5USUZJRVJfQ0hBUltjaF0gfHwgY2ggPT09IGNoYXJDb2Rlcy5kYXNoKTtcbiAgZmluaXNoVG9rZW4odHQuanN4TmFtZSk7XG59XG5cbi8vIFBhcnNlIG5leHQgdG9rZW4gYXMgSlNYIGlkZW50aWZpZXJcbmZ1bmN0aW9uIGpzeFBhcnNlSWRlbnRpZmllcigpIHtcbiAgbmV4dEpTWFRhZ1Rva2VuKCk7XG59XG5cbi8vIFBhcnNlIG5hbWVzcGFjZWQgaWRlbnRpZmllci5cbmZ1bmN0aW9uIGpzeFBhcnNlTmFtZXNwYWNlZE5hbWUoaWRlbnRpZmllclJvbGUpIHtcbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmICghZWF0KHR0LmNvbG9uKSkge1xuICAgIC8vIFBsYWluIGlkZW50aWZpZXIsIHNvIHRoaXMgaXMgYW4gYWNjZXNzLlxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUHJvY2VzcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIG5hbWVzcGFjZWQgbmFtZS5cbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbi8vIFBhcnNlcyBlbGVtZW50IG5hbWUgaW4gYW55IGZvcm0gLSBuYW1lc3BhY2VkLCBtZW1iZXJcbi8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50TmFtZSgpIHtcbiAgY29uc3QgZmlyc3RUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShJZGVudGlmaWVyUm9sZS5BY2Nlc3MpO1xuICBsZXQgaGFkRG90ID0gZmFsc2U7XG4gIHdoaWxlIChtYXRjaCh0dC5kb3QpKSB7XG4gICAgaGFkRG90ID0gdHJ1ZTtcbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICBqc3hQYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICAvLyBGb3IgdGFncyBsaWtlIDxkaXY+IHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyIGFuZCBubyBkb3RzLCB0aGUgbmFtZSBpc1xuICAvLyBhY3R1YWxseSAqbm90KiBhbiBpZGVudGlmaWVyIGFjY2Vzcywgc2luY2UgaXQncyByZWZlcnJpbmcgdG8gYSBidWlsdC1pblxuICAvLyB0YWcgbmFtZS4gUmVtb3ZlIHRoZSBpZGVudGlmaWVyIHJvbGUgaW4gdGhpcyBjYXNlIHNvIHRoYXQgaXQncyBub3RcbiAgLy8gYWNjaWRlbnRhbGx5IHRyYW5zZm9ybWVkIGJ5IHRoZSBpbXBvcnRzIHRyYW5zZm9ybSB3aGVuIHByZXNlcnZpbmcgSlNYLlxuICBpZiAoIWhhZERvdCkge1xuICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBzdGF0ZS50b2tlbnNbZmlyc3RUb2tlbkluZGV4XTtcbiAgICBjb25zdCBmaXJzdENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KGZpcnN0VG9rZW4uc3RhcnQpO1xuICAgIGlmIChmaXJzdENoYXIgPj0gY2hhckNvZGVzLmxvd2VyY2FzZUEgJiYgZmlyc3RDaGFyIDw9IGNoYXJDb2Rlcy5sb3dlcmNhc2VaKSB7XG4gICAgICBmaXJzdFRva2VuLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5mdW5jdGlvbiBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LmpzeFRhZ1N0YXJ0OlxuICAgICAganN4UGFyc2VFbGVtZW50KCk7XG4gICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgdHQuc3RyaW5nOlxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZChcIkpTWCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgSlNYIHRleHRcIik7XG4gIH1cbn1cblxuLy8gUGFyc2UgSlNYIHNwcmVhZCBjaGlsZCwgYWZ0ZXIgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB7XG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgY2xvc2luZyB9XG5mdW5jdGlvbiBqc3hQYXJzZVNwcmVhZENoaWxkKCkge1xuICBleHBlY3QodHQuZWxsaXBzaXMpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbn1cblxuLy8gUGFyc2VzIEpTWCBvcGVuaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjxcIi5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIHdhcyBzZWxmLWNsb3NpbmcuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlT3BlbmluZ0VsZW1lbnQoaW5pdGlhbFRva2VuSW5kZXgpIHtcbiAgaWYgKG1hdGNoKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZW4tZnJhZ21lbnQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1RyeVBhcnNlSlNYVHlwZUFyZ3VtZW50KCk7XG4gIH1cbiAgbGV0IGhhc1NlZW5Qcm9wU3ByZWFkID0gZmFsc2U7XG4gIHdoaWxlICghbWF0Y2godHQuc2xhc2gpICYmICFtYXRjaCh0dC5qc3hUYWdFbmQpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChlYXQodHQuYnJhY2VMKSkge1xuICAgICAgaGFzU2VlblByb3BTcHJlYWQgPSB0cnVlO1xuICAgICAgZXhwZWN0KHR0LmVsbGlwc2lzKTtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIC8vIH1cbiAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGhhc1NlZW5Qcm9wU3ByZWFkICYmXG4gICAgICBzdGF0ZS5lbmQgLSBzdGF0ZS5zdGFydCA9PT0gMyAmJlxuICAgICAgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5zdGFydCkgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VLICYmXG4gICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnN0YXJ0ICsgMSkgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VFICYmXG4gICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnN0YXJ0ICsgMikgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VZXG4gICAgKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZDtcbiAgICB9XG4gICAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShJZGVudGlmaWVyUm9sZS5PYmplY3RLZXkpO1xuICAgIGlmIChtYXRjaCh0dC5lcSkpIHtcbiAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAganN4UGFyc2VBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCBpc1NlbGZDbG9zaW5nID0gbWF0Y2godHQuc2xhc2gpO1xuICBpZiAoaXNTZWxmQ2xvc2luZykge1xuICAgIC8vIC9cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgfVxuICByZXR1cm4gaXNTZWxmQ2xvc2luZztcbn1cblxuLy8gUGFyc2VzIEpTWCBjbG9zaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjwvXCIuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlQ2xvc2luZ0VsZW1lbnQoKSB7XG4gIGlmIChtYXRjaCh0dC5qc3hUYWdFbmQpKSB7XG4gICAgLy8gRnJhZ21lbnQgc3ludGF4LCBzbyB3ZSBpbW1lZGlhdGVseSBoYXZlIGEgdGFnIGVuZC5cbiAgICByZXR1cm47XG4gIH1cbiAganN4UGFyc2VFbGVtZW50TmFtZSgpO1xufVxuXG4vLyBQYXJzZXMgZW50aXJlIEpTWCBlbGVtZW50LCBpbmNsdWRpbmcgaXRzIG9wZW5pbmcgdGFnXG4vLyAoc3RhcnRpbmcgYWZ0ZXIgXCI8XCIpLCBhdHRyaWJ1dGVzLCBjb250ZW50cyBhbmQgY2xvc2luZyB0YWcuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlRWxlbWVudEF0KCkge1xuICBjb25zdCBpbml0aWFsVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLk5vQ2hpbGRyZW47XG4gIGxldCBudW1FeHBsaWNpdENoaWxkcmVuID0gMDtcbiAgY29uc3QgaXNTZWxmQ2xvc2luZyA9IGpzeFBhcnNlT3BlbmluZ0VsZW1lbnQoaW5pdGlhbFRva2VuSW5kZXgpO1xuICBpZiAoIWlzU2VsZkNsb3NpbmcpIHtcbiAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAoc3RhdGUudHlwZSkge1xuICAgICAgICBjYXNlIHR0LmpzeFRhZ1N0YXJ0OlxuICAgICAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgICAgIGlmIChtYXRjaCh0dC5zbGFzaCkpIHtcbiAgICAgICAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgICAgICAganN4UGFyc2VDbG9zaW5nRWxlbWVudCgpO1xuICAgICAgICAgICAgLy8gS2V5IGFmdGVyIHByb3Agc3ByZWFkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBudW1iZXIgb2YgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBzd2l0Y2ggdG8gY3JlYXRlRWxlbWVudCwgd2hpY2ggZG9lc24ndCBjYXJlXG4gICAgICAgICAgICAvLyBhYm91dCBudW1iZXIgb2YgY2hpbGRyZW4uXG4gICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlICE9PSBKU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZCkge1xuICAgICAgICAgICAgICBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IEpTWFJvbGUuT25lQ2hpbGQ7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4rKztcbiAgICAgICAgICBqc3hQYXJzZUVsZW1lbnRBdCgpO1xuICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHR0LmpzeFRleHQ6XG4gICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbisrO1xuICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHR0LmpzeEVtcHR5VGV4dDpcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIGlmIChtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAgICAgICAgIGpzeFBhcnNlU3ByZWFkQ2hpbGQoKTtcbiAgICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICAgIC8vIFNwcmVhZCBjaGlsZHJlbiBhcmUgYSBtZWNoYW5pc20gdG8gZXhwbGljaXRseSBtYXJrIGNoaWxkcmVuIGFzXG4gICAgICAgICAgICAvLyBzdGF0aWMsIHNvIGNvdW50IGl0IGFzIDIgY2hpbGRyZW4gdG8gc2F0aXNmeSB0aGUgXCJtb3JlIHRoYW4gb25lXG4gICAgICAgICAgICAvLyBjaGlsZFwiIGNvbmRpdGlvbi5cbiAgICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4gKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgd2Ugc2VlIHt9LCB0aGlzIGlzIGFuIGVtcHR5IHBzZXVkby1leHByZXNzaW9uIHRoYXQgZG9lc24ndFxuICAgICAgICAgICAgLy8gY291bnQgYXMgYSBjaGlsZC5cbiAgICAgICAgICAgIGlmICghbWF0Y2godHQuYnJhY2VSKSkge1xuICAgICAgICAgICAgICBudW1FeHBsaWNpdENoaWxkcmVuKys7XG4gICAgICAgICAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHVuZXhwZWN0ZWQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFBhcnNlcyBlbnRpcmUgSlNYIGVsZW1lbnQgZnJvbSBjdXJyZW50IHBvc2l0aW9uLlxuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGxhc3QgdG9rZW4uXG5leHBvcnQgZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50KCkge1xuICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAganN4UGFyc2VFbGVtZW50QXQoKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3ZlcnJpZGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0SlNYVGFnVG9rZW4oKSB7XG4gIHN0YXRlLnRva2Vucy5wdXNoKG5ldyBUb2tlbigpKTtcbiAgc2tpcFNwYWNlKCk7XG4gIHN0YXRlLnN0YXJ0ID0gc3RhdGUucG9zO1xuICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuXG4gIGlmIChJU19JREVOVElGSUVSX1NUQVJUW2NvZGVdKSB7XG4gICAganN4UmVhZFdvcmQoKTtcbiAgfSBlbHNlIGlmIChjb2RlID09PSBjaGFyQ29kZXMucXVvdGF0aW9uTWFyayB8fCBjb2RlID09PSBjaGFyQ29kZXMuYXBvc3Ryb3BoZSkge1xuICAgIGpzeFJlYWRTdHJpbmcoY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIGp1c3Qgb25lIGNoYXJhY3RlciBlYWNoLlxuICAgICsrc3RhdGUucG9zO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSBjaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRhZ0VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMubGVzc1RoYW46XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRhZ1N0YXJ0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgZmluaXNoVG9rZW4odHQuc2xhc2gpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2hhckNvZGVzLmVxdWFsc1RvOlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5lcSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2U6XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNlTCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMuZG90OlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5kb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2hhckNvZGVzLmNvbG9uOlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5jb2xvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdW5leHBlY3RlZCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0SlNYRXhwclRva2VuKCkge1xuICBzdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIHN0YXRlLnN0YXJ0ID0gc3RhdGUucG9zO1xuICBqc3hSZWFkVG9rZW4oKTtcbn1cbiIsICJpbXBvcnQge2VhdFR5cGVUb2tlbiwgbG9va2FoZWFkVHlwZSwgbWF0Y2h9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lzRmxvd0VuYWJsZWQsIGlzVHlwZVNjcmlwdEVuYWJsZWR9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtiYXNlUGFyc2VDb25kaXRpb25hbH0gZnJvbSBcIi4uL3RyYXZlcnNlci9leHByZXNzaW9uXCI7XG5pbXBvcnQge2Zsb3dQYXJzZVR5cGVBbm5vdGF0aW9ufSBmcm9tIFwiLi9mbG93XCI7XG5pbXBvcnQge3RzUGFyc2VUeXBlQW5ub3RhdGlvbn0gZnJvbSBcIi4vdHlwZXNjcmlwdFwiO1xuXG4vKipcbiAqIENvbW1vbiBwYXJzZXIgY29kZSBmb3IgVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuXG4vLyBBbiBhcHBhcmVudCBjb25kaXRpb25hbCBleHByZXNzaW9uIGNvdWxkIGFjdHVhbGx5IGJlIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbikge1xuICAvLyBJZiB3ZSBzZWUgPzosIHRoaXMgY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBjb25kaXRpb25hbC4gdHlwZWRQYXJzZVBhcmVuSXRlbSB3aWxsIGJlIGNhbGxlZFxuICAvLyBsYXRlciB0byBmaW5pc2ggb2ZmIHRoZSBhcnJvdyBwYXJhbWV0ZXIuIFdlIGFsc28gbmVlZCB0byBoYW5kbGUgYmFyZSA/IHRva2VucyBmb3Igb3B0aW9uYWxcbiAgLy8gcGFyYW1ldGVycyB3aXRob3V0IHR5cGUgYW5ub3RhdGlvbnMsIGkuZS4gPywgYW5kID8pIC5cbiAgaWYgKG1hdGNoKHR0LnF1ZXN0aW9uKSkge1xuICAgIGNvbnN0IG5leHRUeXBlID0gbG9va2FoZWFkVHlwZSgpO1xuICAgIGlmIChuZXh0VHlwZSA9PT0gdHQuY29sb24gfHwgbmV4dFR5cGUgPT09IHR0LmNvbW1hIHx8IG5leHRUeXBlID09PSB0dC5wYXJlblIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYmFzZVBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG59XG5cbi8vIE5vdGU6IFRoZXNlIFwidHlwZSBjYXN0c1wiIGFyZSAqbm90KiB2YWxpZCBUUyBleHByZXNzaW9ucy5cbi8vIEJ1dCB3ZSBwYXJzZSB0aGVtIGhlcmUgYW5kIGNoYW5nZSB0aGVtIHdoZW4gY29tcGxldGluZyB0aGUgYXJyb3cgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gdHlwZWRQYXJzZVBhcmVuSXRlbSgpIHtcbiAgZWF0VHlwZVRva2VuKHR0LnF1ZXN0aW9uKTtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gICAgfVxuICB9XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuLy8gQSByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgb3BlcmF0ZXMgYnkgZGVmaW5pbmcgZnVuY3Rpb25zIGZvciBhbGxcbi8vIHN5bnRhY3RpYyBlbGVtZW50cywgYW5kIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhvc2UsIGVhY2ggZnVuY3Rpb25cbi8vIGFkdmFuY2luZyB0aGUgaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5pbmcgYW4gQVNUIG5vZGUuIFByZWNlZGVuY2Vcbi8vIG9mIGNvbnN0cnVjdHMgKGZvciBleGFtcGxlLCB0aGUgZmFjdCB0aGF0IGAheFsxXWAgbWVhbnMgYCEoeFsxXSlgXG4vLyBpbnN0ZWFkIG9mIGAoIXgpWzFdYCBpcyBoYW5kbGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIHBhcnNlclxuLy8gZnVuY3Rpb24gdGhhdCBwYXJzZXMgdW5hcnkgcHJlZml4IG9wZXJhdG9ycyBpcyBjYWxsZWQgZmlyc3QsIGFuZFxuLy8gaW4gdHVybiBjYWxscyB0aGUgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYFtdYCBzdWJzY3JpcHRzIFx1MjAxNCB0aGF0XG4vLyB3YXksIGl0J2xsIHJlY2VpdmUgdGhlIG5vZGUgZm9yIGB4WzFdYCBhbHJlYWR5IHBhcnNlZCwgYW5kIHdyYXBzXG4vLyAqdGhhdCogaW4gdGhlIHVuYXJ5IG9wZXJhdG9yIG5vZGUuXG4vL1xuLy8gQWNvcm4gdXNlcyBhbiBbb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzZXJdW29wcF0gdG8gaGFuZGxlIGJpbmFyeVxuLy8gb3BlcmF0b3IgcHJlY2VkZW5jZSwgYmVjYXVzZSBpdCBpcyBtdWNoIG1vcmUgY29tcGFjdCB0aGFuIHVzaW5nXG4vLyB0aGUgdGVjaG5pcXVlIG91dGxpbmVkIGFib3ZlLCB3aGljaCB1c2VzIGRpZmZlcmVudCwgbmVzdGluZ1xuLy8gZnVuY3Rpb25zIHRvIHNwZWNpZnkgcHJlY2VkZW5jZSwgZm9yIGFsbCBvZiB0aGUgdGVuIGJpbmFyeVxuLy8gcHJlY2VkZW5jZSBsZXZlbHMgdGhhdCBKYXZhU2NyaXB0IGRlZmluZXMuXG4vL1xuLy8gW29wcF06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BlcmF0b3ItcHJlY2VkZW5jZV9wYXJzZXJcblxuaW1wb3J0IHtcbiAgZmxvd1BhcnNlQXJyb3csXG4gIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCxcbiAgZmxvd1BhcnNlTWF5YmVBc3NpZ24sXG4gIGZsb3dQYXJzZVN1YnNjcmlwdCxcbiAgZmxvd1BhcnNlU3Vic2NyaXB0cyxcbiAgZmxvd1BhcnNlVmFyaWFuY2UsXG4gIGZsb3dTdGFydFBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbixcbiAgZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMsXG4gIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlLFxufSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge2pzeFBhcnNlRWxlbWVudH0gZnJvbSBcIi4uL3BsdWdpbnMvanN4L2luZGV4XCI7XG5pbXBvcnQge3R5cGVkUGFyc2VDb25kaXRpb25hbCwgdHlwZWRQYXJzZVBhcmVuSXRlbX0gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIHRzUGFyc2VBcnJvdyxcbiAgdHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCxcbiAgdHNQYXJzZU1heWJlQXNzaWduLFxuICB0c1BhcnNlU3Vic2NyaXB0LFxuICB0c1BhcnNlVHlwZSxcbiAgdHNQYXJzZVR5cGVBc3NlcnRpb24sXG4gIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24sXG4gIHRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZSxcbn0gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZWF0LFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbG9va2FoZWFkQ2hhckNvZGUsXG4gIGxvb2thaGVhZFR5cGUsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBuZXh0VGVtcGxhdGVUb2tlbixcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcbiAgcmVzY2FuX2d0LFxuICByZXRva2VuaXplU2xhc2hBc1JlZ2V4LFxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Njb3BlfSBmcm9tIFwiLi4vdG9rZW5pemVyL3N0YXRlXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4uL3V0aWwvY2hhcmNvZGVzXCI7XG5pbXBvcnQge0lTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi91dGlsL2lkZW50aWZpZXJcIjtcbmltcG9ydCB7Z2V0TmV4dENvbnRleHRJZCwgaXNGbG93RW5hYmxlZCwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBzdGF0ZX0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHtcbiAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlTWF5YmVEZWZhdWx0LFxuICBwYXJzZVJlc3QsXG4gIHBhcnNlU3ByZWFkLFxufSBmcm9tIFwiLi9sdmFsXCI7XG5pbXBvcnQge1xuICBwYXJzZUJsb2NrLFxuICBwYXJzZUJsb2NrQm9keSxcbiAgcGFyc2VDbGFzcyxcbiAgcGFyc2VEZWNvcmF0b3JzLFxuICBwYXJzZUZ1bmN0aW9uLFxuICBwYXJzZUZ1bmN0aW9uUGFyYW1zLFxufSBmcm9tIFwiLi9zdGF0ZW1lbnRcIjtcbmltcG9ydCB7XG4gIGNhbkluc2VydFNlbWljb2xvbixcbiAgZWF0Q29udGV4dHVhbCxcbiAgZXhwZWN0LFxuICBleHBlY3RDb250ZXh0dWFsLFxuICBoYXNGb2xsb3dpbmdMaW5lQnJlYWssXG4gIGhhc1ByZWNlZGluZ0xpbmVCcmVhayxcbiAgaXNDb250ZXh0dWFsLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdG9wU3RhdGUge1xuICBcbiAgY29uc3RydWN0b3Ioc3RvcCkge1xuICAgIHRoaXMuc3RvcCA9IHN0b3A7XG4gIH1cbn1cblxuLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZ1xuXG4vLyBUaGVzZSBuZXN0LCBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgZXhwcmVzc2lvbiB0eXBlIGF0IHRoZSB0b3AgdG9cbi8vICdhdG9taWMnLCBub25kaXZpc2libGUgZXhwcmVzc2lvbiB0eXBlcyBhdCB0aGUgYm90dG9tLiBNb3N0IG9mXG4vLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVuY3Rpb24gKHMpIGJlbG93IHRoZW0gcGFyc2UsXG4vLyBhbmQsICppZiogdGhlIHN5bnRhY3RpYyBjb25zdHJ1Y3QgdGhleSBoYW5kbGUgaXMgcHJlc2VudCwgd3JhcFxuLy8gdGhlIEFTVCBub2RlIHRoYXQgdGhlIGlubmVyIHBhcnNlciBnYXZlIHRoZW0gaW4gYW5vdGhlciBub2RlLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihub0luID0gZmFsc2UpIHtcbiAgcGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgaWYgKG1hdGNoKHR0LmNvbW1hKSkge1xuICAgIHdoaWxlIChlYXQodHQuY29tbWEpKSB7XG4gICAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIG5vSW4gaXMgdXNlZCB3aGVuIHBhcnNpbmcgYSBmb3IgbG9vcCBzbyB0aGF0IHdlIGRvbid0IGludGVycHJldCBhIGZvbGxvd2luZyBcImluXCIgYXMgdGhlIGJpbmFyeVxuICogb3BlcmF0aW9yLlxuICogaXNXaXRoaW5QYXJlbnMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIHBhcnNpbmcgc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBjb21tYSBleHByZXNzaW9uXG4gKiBvciBtaWdodCBiZSBhbiBhcnJvdyBmdW5jdGlvbiBvciBtaWdodCBiZSBhIEZsb3cgdHlwZSBhc3NlcnRpb24gKHdoaWNoIHJlcXVpcmVzIGV4cGxpY2l0IHBhcmVucykuXG4gKiBJbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGFsbG93IDogYW5kID86IGFmdGVyIHRoZSBpbml0aWFsIFwibGVmdFwiIHBhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1heWJlQXNzaWduKG5vSW4gPSBmYWxzZSwgaXNXaXRoaW5QYXJlbnMgPSBmYWxzZSkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHJldHVybiB0c1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gZmxvd1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH1cbn1cblxuLy8gUGFyc2UgYW4gYXNzaWdubWVudCBleHByZXNzaW9uLiBUaGlzIGluY2x1ZGVzIGFwcGxpY2F0aW9ucyBvZlxuLy8gb3BlcmF0b3JzIGxpa2UgYCs9YC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhwcmVzc2lvbiB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpIHtcbiAgaWYgKG1hdGNoKHR0Ll95aWVsZCkpIHtcbiAgICBwYXJzZVlpZWxkKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubmFtZSkgfHwgbWF0Y2godHQuX3lpZWxkKSkge1xuICAgIHN0YXRlLnBvdGVudGlhbEFycm93QXQgPSBzdGF0ZS5zdGFydDtcbiAgfVxuXG4gIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VNYXliZUNvbmRpdGlvbmFsKG5vSW4pO1xuICBpZiAoaXNXaXRoaW5QYXJlbnMpIHtcbiAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICB9XG4gIGlmIChzdGF0ZS50eXBlICYgVG9rZW5UeXBlLklTX0FTU0lHTikge1xuICAgIG5leHQoKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gd2FzQXJyb3c7XG59XG5cbi8vIFBhcnNlIGEgdGVybmFyeSBjb25kaXRpb25hbCAoYD86YCkgb3BlcmF0b3IuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZnVuY3Rpb24gcGFyc2VNYXliZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUV4cHJPcHMobm9Jbik7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChub0luKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkIHx8IGlzRmxvd0VuYWJsZWQpIHtcbiAgICB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VQYXJzZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgaWYgKGVhdCh0dC5xdWVzdGlvbikpIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICB9XG59XG5cbi8vIFN0YXJ0IHRoZSBwcmVjZWRlbmNlIHBhcnNlci5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvblxuZnVuY3Rpb24gcGFyc2VFeHByT3BzKG5vSW4pIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZU1heWJlVW5hcnkoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCAtMSwgbm9Jbik7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNpbmdcbi8vIGFsZ29yaXRobS4gYGxlZnRgIGlzIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgb3BlcmF0b3IuXG4vLyBgbWluUHJlY2AgcHJvdmlkZXMgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnVuY3Rpb24gdG8gc3RvcCBhbmRcbi8vIGRlZmVyIGZ1cnRoZXIgcGFyc2VyIHRvIG9uZSBvZiBpdHMgY2FsbGVycyB3aGVuIGl0IGVuY291bnRlcnMgYW5cbi8vIG9wZXJhdG9yIHRoYXQgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSBzZXQgaXQgaXMgcGFyc2luZy5cbmZ1bmN0aW9uIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgbWluUHJlYywgbm9Jbikge1xuICBpZiAoXG4gICAgaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICh0dC5faW4gJiBUb2tlblR5cGUuUFJFQ0VERU5DRV9NQVNLKSA+IG1pblByZWMgJiZcbiAgICAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkgJiZcbiAgICAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpIHx8IGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3NhdGlzZmllcykpXG4gICkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgcmVzY2FuX2d0KCk7XG4gICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcmVjID0gc3RhdGUudHlwZSAmIFRva2VuVHlwZS5QUkVDRURFTkNFX01BU0s7XG4gIGlmIChwcmVjID4gMCAmJiAoIW5vSW4gfHwgIW1hdGNoKHR0Ll9pbikpKSB7XG4gICAgaWYgKHByZWMgPiBtaW5QcmVjKSB7XG4gICAgICBjb25zdCBvcCA9IHN0YXRlLnR5cGU7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAob3AgPT09IHR0Lm51bGxpc2hDb2FsZXNjaW5nKSB7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0ubnVsbGlzaFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJoc1N0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICAgIC8vIEV4dGVuZCB0aGUgcmlnaHQgb3BlcmFuZCBvZiB0aGlzIG9wZXJhdG9yIGlmIHBvc3NpYmxlLlxuICAgICAgcGFyc2VFeHByT3AocmhzU3RhcnRUb2tlbkluZGV4LCBvcCAmIFRva2VuVHlwZS5JU19SSUdIVF9BU1NPQ0lBVElWRSA/IHByZWMgLSAxIDogcHJlYywgbm9Jbik7XG4gICAgICBpZiAob3AgPT09IHR0Lm51bGxpc2hDb2FsZXNjaW5nKSB7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cysrO1xuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLm51bU51bGxpc2hDb2FsZXNjZUVuZHMrKztcbiAgICAgIH1cbiAgICAgIC8vIENvbnRpbnVlIHdpdGggYW55IGZ1dHVyZSBvcGVyYXRvciBob2xkaW5nIHRoaXMgZXhwcmVzc2lvbiBhcyB0aGUgbGVmdCBvcGVyYW5kLlxuICAgICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2UgdW5hcnkgb3BlcmF0b3JzLCBib3RoIHByZWZpeCBhbmQgcG9zdGZpeC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1heWJlVW5hcnkoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkICYmICFpc0pTWEVuYWJsZWQgJiYgZWF0KHR0Lmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXNzZXJ0aW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSkgJiZcbiAgICBsb29rYWhlYWRDaGFyQ29kZSgpID09PSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UgJiZcbiAgICAhaGFzRm9sbG93aW5nTGluZUJyZWFrKClcbiAgKSB7XG4gICAgcGFyc2VNb2R1bGVFeHByZXNzaW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzdGF0ZS50eXBlICYgVG9rZW5UeXBlLklTX1BSRUZJWCkge1xuICAgIG5leHQoKTtcbiAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgd2hpbGUgKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfUE9TVEZJWCAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAvLyBUaGUgdG9rZW5pemVyIGNhbGxzIGV2ZXJ5dGhpbmcgYSBwcmVpbmNyZW1lbnQsIHNvIG1ha2UgaXQgYSBwb3N0aW5jcmVtZW50IHdoZW5cbiAgICAvLyB3ZSBzZWUgaXQgaW4gdGhhdCBjb250ZXh0LlxuICAgIGlmIChzdGF0ZS50eXBlID09PSB0dC5wcmVJbmNEZWMpIHtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC5wb3N0SW5jRGVjO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBQYXJzZSBjYWxsLCBkb3QsIGFuZCBgW11gLXN1YnNjcmlwdCBleHByZXNzaW9ucy5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV4cHJTdWJzY3JpcHRzKCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwckF0b20oKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCk7XG4gIC8vIElmIHRoZXJlIHdhcyBhbnkgb3B0aW9uYWwgY2hhaW4gb3BlcmF0aW9uLCB0aGUgc3RhcnQgdG9rZW4gd291bGQgYmUgbWFya2VkXG4gIC8vIGFzIHN1Y2gsIHNvIGFsc28gbWFyayB0aGUgZW5kIG5vdy5cbiAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPiBzdGFydFRva2VuSW5kZXggJiYgc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzT3B0aW9uYWxDaGFpbkVuZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyA9IGZhbHNlKSB7XG4gIGNvbnN0IHN0b3BTdGF0ZSA9IG5ldyBTdG9wU3RhdGUoZmFsc2UpO1xuICBkbyB7XG4gICAgcGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpO1xuICB9IHdoaWxlICghc3RvcFN0YXRlLnN0b3AgJiYgIXN0YXRlLmVycm9yKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1BhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpO1xuICB9XG59XG5cbi8qKiBTZXQgJ3N0YXRlLnN0b3AgPSB0cnVlJyB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBzdG9wIHBhcnNpbmcgc3Vic2NyaXB0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VTdWJzY3JpcHQoXG4gIHN0YXJ0VG9rZW5JbmRleCxcbiAgbm9DYWxscyxcbiAgc3RvcFN0YXRlLFxuKSB7XG4gIGlmICghbm9DYWxscyAmJiBlYXQodHQuZG91YmxlQ29sb24pKSB7XG4gICAgcGFyc2VOb0NhbGxFeHByKCk7XG4gICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgIC8vIFByb3BhZ2F0ZSBzdGFydFRva2VuSW5kZXggc28gdGhhdCBgYTo6Yj8uKClgIHdpbGwga2VlcCBgYWAgYXMgdGhlIGZpcnN0IHRva2VuLiBXZSBtYXkgd2FudFxuICAgIC8vIHRvIHJldmlzaXQgdGhpcyBpbiB0aGUgZnV0dXJlIHdoZW4gZnVsbHkgc3VwcG9ydGluZyBiaW5kIHN5bnRheC5cbiAgICBwYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzKTtcbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5xdWVzdGlvbkRvdCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhcnRUb2tlbkluZGV4XS5pc09wdGlvbmFsQ2hhaW5TdGFydCA9IHRydWU7XG4gICAgaWYgKG5vQ2FsbHMgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5wYXJlbkwpIHtcbiAgICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV4dCgpO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcblxuICAgIGlmIChlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgfSBlbHNlIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZWF0KHR0LmRvdCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgcGFyc2VNYXliZVByaXZhdGVOYW1lKCk7XG4gIH0gZWxzZSBpZiAoZWF0KHR0LmJyYWNrZXRMKSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBleHBlY3QodHQuYnJhY2tldFIpO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIG1hdGNoKHR0LnBhcmVuTCkpIHtcbiAgICBpZiAoYXRQb3NzaWJsZUFzeW5jKCkpIHtcbiAgICAgIC8vIFdlIHNlZSBcImFzeW5jXCIsIGJ1dCBpdCdzIHBvc3NpYmxlIGl0J3MgYSB1c2FnZSBvZiB0aGUgbmFtZSBcImFzeW5jXCIuIFBhcnNlIGFzIGlmIGl0J3MgYVxuICAgICAgLy8gZnVuY3Rpb24gY2FsbCwgYW5kIGlmIHdlIHNlZSBhbiBhcnJvdyBsYXRlciwgYmFja3RyYWNrIGFuZCByZS1wYXJzZSBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICAgICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgY29uc3QgYXN5bmNTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgbmV4dCgpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gZ2V0TmV4dENvbnRleHRJZCgpO1xuXG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG5cbiAgICAgIGlmIChzaG91bGRQYXJzZUFzeW5jQXJyb3coKSkge1xuICAgICAgICAvLyBXZSBoaXQgYW4gYXJyb3csIHNvIGJhY2t0cmFjayBhbmQgc3RhcnQgYWdhaW4gcGFyc2luZyBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICAgICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5zY29wZURlcHRoKys7XG5cbiAgICAgICAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICAgICAgICBwYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oYXN5bmNTdGFydFRva2VuSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gZ2V0TmV4dENvbnRleHRJZCgpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5iYWNrUXVvdGUpKSB7XG4gICAgLy8gVGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb24uXG4gICAgcGFyc2VUZW1wbGF0ZSgpO1xuICB9IGVsc2Uge1xuICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRQb3NzaWJsZUFzeW5jKCkge1xuICAvLyBUaGlzIHdhcyBtYWRlIGxlc3Mgc3RyaWN0IHRoYW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gdG8gYXZvaWQgcGFzc2luZyBhcm91bmQgbm9kZXMsIGJ1dCBpdFxuICAvLyBzaG91bGQgYmUgc2FmZSB0byBoYXZlIHJhcmUgZmFsc2UgcG9zaXRpdmVzIGhlcmUuXG4gIHJldHVybiAoXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgIWNhbkluc2VydFNlbWljb2xvbigpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIWVhdCh0dC5wYXJlblIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQucGFyZW5SKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VBc3luY0Fycm93KCkge1xuICByZXR1cm4gbWF0Y2godHQuY29sb24pIHx8IG1hdGNoKHR0LmFycm93KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKCk7XG4gIH1cbiAgZXhwZWN0KHR0LmFycm93KTtcbiAgcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KTtcbn1cblxuLy8gUGFyc2UgYSBuby1jYWxsIGV4cHJlc3Npb24gKGxpa2UgYXJndW1lbnQgb2YgYG5ld2Agb3IgYDo6YCBvcGVyYXRvcnMpLlxuXG5mdW5jdGlvbiBwYXJzZU5vQ2FsbEV4cHIoKSB7XG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHBhcnNlRXhwckF0b20oKTtcbiAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgdHJ1ZSk7XG59XG5cbi8vIFBhcnNlIGFuIGF0b21pYyBleHByZXNzaW9uIFx1MjAxNCBlaXRoZXIgYSBzaW5nbGUgdG9rZW4gdGhhdCBpcyBhblxuLy8gZXhwcmVzc2lvbiwgYW4gZXhwcmVzc2lvbiBzdGFydGVkIGJ5IGEga2V5d29yZCBsaWtlIGBmdW5jdGlvbmAgb3Jcbi8vIGBuZXdgLCBvciBhbiBleHByZXNzaW9uIHdyYXBwZWQgaW4gcHVuY3R1YXRpb24gbGlrZSBgKClgLCBgW11gLFxuLy8gb3IgYHt9YC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2VkIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXhwckF0b20oKSB7XG4gIGlmIChlYXQodHQubW9kdWxvKSkge1xuICAgIC8vIFY4IGludHJpbnNpYyBleHByZXNzaW9uLiBKdXN0IHBhcnNlIHRoZSBpZGVudGlmaWVyLCBhbmQgdGhlIGZ1bmN0aW9uIGludm9jYXRpb24gaXMgcGFyc2VkXG4gICAgLy8gbmF0dXJhbGx5LlxuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5qc3hUZXh0KSB8fCBtYXRjaCh0dC5qc3hFbXB0eVRleHQpKSB7XG4gICAgcGFyc2VMaXRlcmFsKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSAmJiBpc0pTWEVuYWJsZWQpIHtcbiAgICBzdGF0ZS50eXBlID0gdHQuanN4VGFnU3RhcnQ7XG4gICAganN4UGFyc2VFbGVtZW50KCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbkJlQXJyb3cgPSBzdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID09PSBzdGF0ZS5zdGFydDtcbiAgc3dpdGNoIChzdGF0ZS50eXBlKSB7XG4gICAgY2FzZSB0dC5zbGFzaDpcbiAgICBjYXNlIHR0LmFzc2lnbjpcbiAgICAgIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIHR0Ll9zdXBlcjpcbiAgICBjYXNlIHR0Ll90aGlzOlxuICAgIGNhc2UgdHQucmVnZXhwOlxuICAgIGNhc2UgdHQubnVtOlxuICAgIGNhc2UgdHQuYmlnaW50OlxuICAgIGNhc2UgdHQuZGVjaW1hbDpcbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Ll9udWxsOlxuICAgIGNhc2UgdHQuX3RydWU6XG4gICAgY2FzZSB0dC5fZmFsc2U6XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0Ll9pbXBvcnQ6XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAobWF0Y2godHQuZG90KSkge1xuICAgICAgICAvLyBpbXBvcnQubWV0YVxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5uYW1lO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5uYW1lOiB7XG4gICAgICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgY29uc3QgZnVuY3Rpb25TdGFydCA9IHN0YXRlLnN0YXJ0O1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQpIHtcbiAgICAgICAgcGFyc2VBd2FpdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgICAgIG1hdGNoKHR0Ll9mdW5jdGlvbikgJiZcbiAgICAgICAgIWNhbkluc2VydFNlbWljb2xvbigpXG4gICAgICApIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2FuQmVBcnJvdyAmJlxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgICAgICFjYW5JbnNlcnRTZW1pY29sb24oKSAmJlxuICAgICAgICBtYXRjaCh0dC5uYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gICAgICAgIGV4cGVjdCh0dC5hcnJvdyk7XG4gICAgICAgIC8vIGxldCBmb28gPSBhc3luYyBiYXIgPT4ge307XG4gICAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaCh0dC5fZG8pICYmICFjYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHBhcnNlQmxvY2soKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FuQmVBcnJvdyAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgbWF0Y2godHQuYXJyb3cpKSB7XG4gICAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIoZmFsc2UpO1xuICAgICAgICBleHBlY3QodHQuYXJyb3cpO1xuICAgICAgICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkFjY2VzcztcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIHR0Ll9kbzoge1xuICAgICAgbmV4dCgpO1xuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNhc2UgdHQucGFyZW5MOiB7XG4gICAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oY2FuQmVBcnJvdyk7XG4gICAgICByZXR1cm4gd2FzQXJyb3c7XG4gICAgfVxuXG4gICAgY2FzZSB0dC5icmFja2V0TDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlRXhwckxpc3QodHQuYnJhY2tldFIsIHRydWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICBwYXJzZU9iaihmYWxzZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgICBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5hdDpcbiAgICAgIHBhcnNlRGVjb3JhdG9ycygpO1xuICAgIC8vIEZhbGwgdGhyb3VnaC5cblxuICAgIGNhc2UgdHQuX2NsYXNzOlxuICAgICAgcGFyc2VDbGFzcyhmYWxzZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0Ll9uZXc6XG4gICAgICBwYXJzZU5ldygpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5iYWNrUXVvdGU6XG4gICAgICBwYXJzZVRlbXBsYXRlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0LmRvdWJsZUNvbG9uOiB7XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZU5vQ2FsbEV4cHIoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIHR0Lmhhc2g6IHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsb29rYWhlYWRDaGFyQ29kZSgpO1xuICAgICAgaWYgKElTX0lERU5USUZJRVJfU1RBUlRbY29kZV0gfHwgY29kZSA9PT0gY2hhckNvZGVzLmJhY2tzbGFzaCkge1xuICAgICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIC8vIFNtYXJ0IHBpcGVsaW5lIHRvcGljIHJlZmVyZW5jZS5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpIHtcbiAgZWF0KHR0Lmhhc2gpO1xuICBwYXJzZUlkZW50aWZpZXIoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIC8vIGZ1bmN0aW9uLnNlbnRcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCgpIHtcbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbkV4cHJlc3Npb24oKSB7XG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBleHByZXNzaW9uLlxuZnVuY3Rpb24gcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KSB7XG4gIC8vIEFzc3VtZSB0aGlzIGlzIGEgbm9ybWFsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiwgYnV0IGlmIHdlIHNlZSBhbiBhcnJvdywgd2UnbGwgYmFpbCBhbmRcbiAgLy8gc3RhcnQgb3ZlciBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG5cbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICB3aGlsZSAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKG1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgICAgcGFyc2VSZXN0KGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gICAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlblIpO1xuXG4gIGlmIChjYW5CZUFycm93ICYmIHNob3VsZFBhcnNlQXJyb3coKSkge1xuICAgIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VBcnJvdygpO1xuICAgIGlmICh3YXNBcnJvdykge1xuICAgICAgLy8gSXQgd2FzIGFuIGFycm93IGZ1bmN0aW9uIHRoaXMgd2hvbGUgdGltZSwgc28gc3RhcnQgb3ZlciBhbmQgcGFyc2UgaXQgYXMgcGFyYW1zIHNvIHRoYXQgd2VcbiAgICAgIC8vIGdldCBwcm9wZXIgdG9rZW4gYW5ub3RhdGlvbnMuXG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgIC8vIERvbid0IHNwZWNpZnkgYSBjb250ZXh0IElEIGJlY2F1c2UgYXJyb3cgZnVuY3Rpb25zIGRvbid0IG5lZWQgYSBjb250ZXh0IElELlxuICAgICAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICAgICAgcGFyc2VBcnJvdygpO1xuICAgICAgcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KTtcbiAgICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgICAvLyBOZXZlcm1pbmQhIFRoaXMgbXVzdCBoYXZlIGJlZW4gc29tZXRoaW5nIHRoYXQgbG9va3MgdmVyeSBtdWNoIGxpa2UgYW5cbiAgICAgICAgLy8gYXJyb3cgZnVuY3Rpb24gYnV0IHdoZXJlIGl0cyBcInBhcmFtZXRlciBsaXN0XCIgaXNuJ3QgYWN0dWFsbHkgYSB2YWxpZFxuICAgICAgICAvLyBwYXJhbWV0ZXIgbGlzdC4gRm9yY2Ugbm9uLWFycm93IHBhcnNpbmcuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS9pc3N1ZXMvNjY2IGZvciBhbiBleGFtcGxlLlxuICAgICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VBcnJvdygpIHtcbiAgcmV0dXJuIG1hdGNoKHR0LmNvbG9uKSB8fCAhY2FuSW5zZXJ0U2VtaWNvbG9uKCk7XG59XG5cbi8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgYW4gYXJyb3cgdG9rZW4uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJvdygpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZUFycm93KCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBmbG93UGFyc2VBcnJvdygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlYXQodHQuYXJyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyZW5JdGVtKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCB8fCBpc0Zsb3dFbmFibGVkKSB7XG4gICAgdHlwZWRQYXJzZVBhcmVuSXRlbSgpO1xuICB9XG59XG5cbi8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xpZ2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudCB0b1xuLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwgXHUyMDE0IGF0IGxlYXN0LFxuLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbi8vIGFyZ3VtZW50IHRvIHBhcnNlU3Vic2NyaXB0cyB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIHRoZVxuLy8gYXJndW1lbnQgbGlzdC5cbmZ1bmN0aW9uIHBhcnNlTmV3KCkge1xuICBleHBlY3QodHQuX25ldyk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIC8vIG5ldy50YXJnZXRcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VOZXdDYWxsZWUoKTtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cygpO1xuICB9XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlRXhwckxpc3QodHQucGFyZW5SKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU5ld0NhbGxlZSgpIHtcbiAgcGFyc2VOb0NhbGxFeHByKCk7XG4gIGVhdCh0dC5xdWVzdGlvbkRvdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlKCkge1xuICAvLyBGaW5pc2ggYCwgcmVhZCBxdWFzaVxuICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgJHtcbiAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgd2hpbGUgKCFtYXRjaCh0dC5iYWNrUXVvdGUpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGV4cGVjdCh0dC5kb2xsYXJCcmFjZUwpO1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIC8vIEZpbmlzaCB9LCByZWFkIHF1YXNpXG4gICAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgZWl0aGVyICR7IG9yIGBcbiAgICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICB9XG4gIG5leHQoKTtcbn1cblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT2JqKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlKSB7XG4gIC8vIEF0dGFjaCBhIGNvbnRleHQgSUQgdG8gdGhlIG9iamVjdCBvcGVuIGFuZCBjbG9zZSBicmFjZSBhbmQgZWFjaCBvYmplY3Qga2V5LlxuICBjb25zdCBjb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcblxuICB3aGlsZSAoIWVhdCh0dC5icmFjZVIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXNHZW5lcmF0b3IgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2godHQuZWxsaXBzaXMpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIHBhcnNlU3ByZWFkKCk7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIE1hcmsgcm9sZSB3aGVuIHRoZSBvbmx5IHRoaW5nIGJlaW5nIHNwcmVhZCBvdmVyIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbnMubGVuZ3RoID09PSBwcmV2aW91c0luZGV4ICsgMikge1xuICAgICAgICAgIG1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyKGlzQmxvY2tTY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVhdCh0dC5icmFjZVIpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNQYXR0ZXJuKSB7XG4gICAgICBpc0dlbmVyYXRvciA9IGVhdCh0dC5zdGFyKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUGF0dGVybiAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yKSB1bmV4cGVjdGVkKCk7XG5cbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKFxuICAgICAgICBtYXRjaCh0dC5jb2xvbikgfHxcbiAgICAgICAgbWF0Y2godHQucGFyZW5MKSB8fFxuICAgICAgICBtYXRjaCh0dC5icmFjZVIpIHx8XG4gICAgICAgIG1hdGNoKHR0LmVxKSB8fFxuICAgICAgICBtYXRjaCh0dC5jb21tYSlcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGlzIGEga2V5IGNhbGxlZCBcImFzeW5jXCIgcmF0aGVyIHRoYW4gYW4gYXN5bmMgZnVuY3Rpb24uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgaXNHZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlUHJvcGVydHlOYW1lKGNvbnRleHRJZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlUHJvcGVydHlOYW1lKGNvbnRleHRJZCk7XG4gICAgfVxuXG4gICAgcGFyc2VPYmpQcm9wVmFsdWUoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUsIGNvbnRleHRJZCk7XG4gIH1cblxuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbn1cblxuZnVuY3Rpb24gaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pIHtcbiAgLy8gV2UgZ28gb2ZmIG9mIHRoZSBuZXh0IGFuZCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgdGhlIG5vZGUga2V5IGlzIGFjdHVhbGx5IFwiZ2V0XCIgb3IgXCJzZXRcIi5cbiAgLy8gVGhpcyBsZXRzIHVzIGF2b2lkIGdlbmVyYXRpbmcgYSBub2RlLCBhbmQgc2hvdWxkIG9ubHkgbWFrZSB0aGUgdmFsaWRhdGlvbiB3b3JzZS5cbiAgcmV0dXJuIChcbiAgICAhaXNQYXR0ZXJuICYmXG4gICAgKG1hdGNoKHR0LnN0cmluZykgfHwgLy8gZ2V0IFwic3RyaW5nXCIoKSB7fVxuICAgICAgbWF0Y2godHQubnVtKSB8fCAvLyBnZXQgMSgpIHt9XG4gICAgICBtYXRjaCh0dC5icmFja2V0TCkgfHwgLy8gZ2V0IFtcInN0cmluZ1wiXSgpIHt9XG4gICAgICBtYXRjaCh0dC5uYW1lKSB8fCAvLyBnZXQgZm9vKCkge31cbiAgICAgICEhKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkpIC8vIGdldCBkZWJ1Z2dlcigpIHt9XG4gICk7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhIG1ldGhvZC5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0TWV0aG9kKGlzUGF0dGVybiwgb2JqZWN0Q29udGV4dElkKSB7XG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbW9kaWZpZXJzIGJlY2F1c2Ugb2JqZWN0IG1ldGhvZHMgY2FuJ3QgaGF2ZSBvcHRpb25hbCBib2RpZXMsIHNvXG4gIC8vIHRoZSBzdGFydCB3aWxsIG5ldmVyIGJlIHVzZWQuXG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB1bmV4cGVjdGVkKCk7XG4gICAgcGFyc2VNZXRob2QoZnVuY3Rpb25TdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pKSB7XG4gICAgcGFyc2VQcm9wZXJ0eU5hbWUob2JqZWN0Q29udGV4dElkKTtcbiAgICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZU1heWJlQXNzaWduKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2luY2UgdGhlcmUncyBubyBjb2xvbiwgd2UgYXNzdW1lIHRoaXMgaXMgYW4gb2JqZWN0IHNob3J0aGFuZC5cblxuICAvLyBJZiB3ZSdyZSBpbiBhIGRlc3RydWN0dXJpbmcsIHdlJ3ZlIG5vdyBkaXNjb3ZlcmVkIHRoYXQgdGhlIGtleSB3YXMgYWN0dWFsbHkgYW4gYXNzaWduZWUsIHNvXG4gIC8vIHdlIG5lZWQgdG8gdGFnIGl0IGFzIGEgZGVjbGFyYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2NvcGUuIE90aGVyd2lzZSwgd2UgbWlnaHQgbmVlZCB0b1xuICAvLyB0cmFuc2Zvcm0gaXQgb24gYWNjZXNzLCBzbyBtYXJrIGl0IGFzIGEgbm9ybWFsIG9iamVjdCBzaG9ydGhhbmQuXG4gIGxldCBpZGVudGlmaWVyUm9sZTtcbiAgaWYgKGlzUGF0dGVybikge1xuICAgIGlmIChzdGF0ZS5zY29wZURlcHRoID09PSAwKSB7XG4gICAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICAgIGlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZDtcbiAgfVxuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gaWRlbnRpZmllclJvbGU7XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGtub3cgdGhpcyB0byBiZSBhIHBhdHRlcm4gb3IgaWYgd2UncmUgaW4gYW4gYW1iaWd1b3VzIGNvbnRleHQsIGFsbG93XG4gIC8vIHBhcnNpbmcgYXMgaWYgdGhlcmUncyBhIGRlZmF1bHQgdmFsdWUuXG4gIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqUHJvcFZhbHVlKFxuICBpc1BhdHRlcm4sXG4gIGlzQmxvY2tTY29wZSxcbiAgb2JqZWN0Q29udGV4dElkLFxuKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCk7XG4gIH1cbiAgY29uc3Qgd2FzTWV0aG9kID0gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpO1xuICBpZiAoIXdhc01ldGhvZCkge1xuICAgIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TmFtZShvYmplY3RDb250ZXh0SWQpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VWYXJpYW5jZSgpO1xuICB9XG4gIGlmIChlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1hdGNoKHR0Lm51bSkgfHwgbWF0Y2godHQuc3RyaW5nKSB8fCBtYXRjaCh0dC5iaWdpbnQpIHx8IG1hdGNoKHR0LmRlY2ltYWwpKSB7XG4gICAgICBwYXJzZUV4cHJBdG9tKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpO1xuICAgIH1cblxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5PYmplY3RLZXk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gIH1cbn1cblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGZ1bmNDb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG5cbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBjb25zdCBhbGxvd01vZGlmaWVycyA9IGlzQ29uc3RydWN0b3I7IC8vIEZvciBUeXBlU2NyaXB0IHBhcmFtZXRlciBwcm9wZXJ0aWVzXG4gIHBhcnNlRnVuY3Rpb25QYXJhbXMoYWxsb3dNb2RpZmllcnMsIGZ1bmNDb250ZXh0SWQpO1xuICBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIHRydWUpKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG4vLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uLlxuLy8gSWYgdGhlIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIGFuXG4vLyBhc3NpZ25hYmxlIGxpc3QuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KSB7XG4gIHBhcnNlRnVuY3Rpb25Cb2R5KHRydWUpO1xuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBzdGF0ZS5zY29wZURlcHRoLS07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkID0gMCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jQ29udGV4dElkKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUZ1bmN0aW9uQm9keShmYWxzZSwgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5KGFsbG93RXhwcmVzc2lvbiwgZnVuY0NvbnRleHRJZCA9IDApIHtcbiAgY29uc3QgaXNFeHByZXNzaW9uID0gYWxsb3dFeHByZXNzaW9uICYmICFtYXRjaCh0dC5icmFjZUwpO1xuXG4gIGlmIChpc0V4cHJlc3Npb24pIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VCbG9jayh0cnVlIC8qIGlzRnVuY3Rpb25TY29wZSAqLywgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMsIGFuZCByZXR1cm5zIHRoZW0gYXNcbi8vIGFuIGFycmF5LiBgY2xvc2VgIGlzIHRoZSB0b2tlbiB0eXBlIHRoYXQgZW5kcyB0aGUgbGlzdCwgYW5kXG4vLyBgYWxsb3dFbXB0eWAgY2FuIGJlIHR1cm5lZCBvbiB0byBhbGxvdyBzdWJzZXF1ZW50IGNvbW1hcyB3aXRoXG4vLyBub3RoaW5nIGluIGJldHdlZW4gdGhlbSB0byBiZSBwYXJzZWQgYXMgYG51bGxgICh3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhcnJheSBsaXRlcmFscykuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwckxpc3QoY2xvc2UsIGFsbG93RW1wdHkgPSBmYWxzZSkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIWVhdChjbG9zZSkgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKGVhdChjbG9zZSkpIGJyZWFrO1xuICAgIH1cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KSB7XG4gIGlmIChhbGxvd0VtcHR5ICYmIG1hdGNoKHR0LmNvbW1hKSkge1xuICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgbW9yZSB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICB9IGVsc2UgaWYgKG1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgIHBhcnNlU3ByZWFkKCk7XG4gICAgcGFyc2VQYXJlbkl0ZW0oKTtcbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5xdWVzdGlvbikpIHtcbiAgICAvLyBQYXJ0aWFsIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIHByb3Bvc2FsLlxuICAgIG5leHQoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuXG4vLyBQYXJzZSB0aGUgbmV4dCB0b2tlbiBhcyBhbiBpZGVudGlmaWVyLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSWRlbnRpZmllcigpIHtcbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5uYW1lO1xufVxuXG4vLyBQYXJzZXMgYXdhaXQgZXhwcmVzc2lvbiBpbnNpZGUgYXN5bmMgZnVuY3Rpb24uXG5mdW5jdGlvbiBwYXJzZUF3YWl0KCkge1xuICBwYXJzZU1heWJlVW5hcnkoKTtcbn1cblxuLy8gUGFyc2VzIHlpZWxkIGV4cHJlc3Npb24gaW5zaWRlIGdlbmVyYXRvci5cbmZ1bmN0aW9uIHBhcnNlWWllbGQoKSB7XG4gIG5leHQoKTtcbiAgaWYgKCFtYXRjaCh0dC5zZW1pKSAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICBlYXQodHQuc3Rhcik7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWpzLW1vZHVsZS1ibG9ja3NcbmZ1bmN0aW9uIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpIHtcbiAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlKTtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIC8vIEZvciBub3csIGp1c3QgY2FsbCBwYXJzZUJsb2NrQm9keSB0byBwYXJzZSB0aGUgYmxvY2suIEluIHRoZSBmdXR1cmUgd2hlbiB3ZVxuICAvLyBpbXBsZW1lbnQgZnVsbCBzdXBwb3J0LCB3ZSdsbCB3YW50IHRvIGVtaXQgc2NvcGVzIGFuZCBwb3NzaWJseSBvdGhlclxuICAvLyBpbmZvcm1hdGlvbi5cbiAgcGFyc2VCbG9ja0JvZHkodHQuYnJhY2VSKTtcbn1cbiIsICIvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG5pbXBvcnQge1xuICBlYXQsXG4gIGxvb2thaGVhZFR5cGUsXG4gIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLFxuICBtYXRjaCxcbiAgbmV4dCxcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcblxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lucHV0LCBzdGF0ZX0gZnJvbSBcIi4uL3RyYXZlcnNlci9iYXNlXCI7XG5pbXBvcnQge1xuICBiYXNlUGFyc2VNYXliZUFzc2lnbixcbiAgYmFzZVBhcnNlU3Vic2NyaXB0LFxuICBiYXNlUGFyc2VTdWJzY3JpcHRzLFxuICBwYXJzZUFycm93LFxuICBwYXJzZUFycm93RXhwcmVzc2lvbixcbiAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cyxcbiAgcGFyc2VFeHByQXRvbSxcbiAgcGFyc2VFeHByZXNzaW9uLFxuICBwYXJzZUZ1bmN0aW9uQm9keSxcbiAgcGFyc2VJZGVudGlmaWVyLFxuICBwYXJzZUxpdGVyYWwsXG5cbn0gZnJvbSBcIi4uL3RyYXZlcnNlci9leHByZXNzaW9uXCI7XG5pbXBvcnQge1xuICBiYXNlUGFyc2VFeHBvcnRTdGFyLFxuICBwYXJzZUV4cG9ydCxcbiAgcGFyc2VFeHBvcnRGcm9tLFxuICBwYXJzZUV4cG9ydFNwZWNpZmllcnMsXG4gIHBhcnNlRnVuY3Rpb25QYXJhbXMsXG4gIHBhcnNlSW1wb3J0LFxuICBwYXJzZVN0YXRlbWVudCxcbn0gZnJvbSBcIi4uL3RyYXZlcnNlci9zdGF0ZW1lbnRcIjtcbmltcG9ydCB7XG4gIGNhbkluc2VydFNlbWljb2xvbixcbiAgZWF0Q29udGV4dHVhbCxcbiAgZXhwZWN0LFxuICBleHBlY3RDb250ZXh0dWFsLFxuICBpc0NvbnRleHR1YWwsXG4gIGlzTG9va2FoZWFkQ29udGV4dHVhbCxcbiAgc2VtaWNvbG9uLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcblxuZnVuY3Rpb24gaXNNYXliZURlZmF1bHRJbXBvcnQobG9va2FoZWFkKSB7XG4gIHJldHVybiAoXG4gICAgKGxvb2thaGVhZC50eXBlID09PSB0dC5uYW1lIHx8ICEhKGxvb2thaGVhZC50eXBlICYgVG9rZW5UeXBlLklTX0tFWVdPUkQpKSAmJlxuICAgIGxvb2thaGVhZC5jb250ZXh0dWFsS2V5d29yZCAhPT0gQ29udGV4dHVhbEtleXdvcmQuX2Zyb21cbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHRvaykge1xuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gIGV4cGVjdCh0b2sgfHwgdHQuY29sb24pO1xuICBmbG93UGFyc2VUeXBlKCk7XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVByZWRpY2F0ZSgpIHtcbiAgZXhwZWN0KHR0Lm1vZHVsbyk7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyk7XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVBbmRQcmVkaWNhdGVJbml0aWFsaXNlcigpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBleHBlY3QodHQuY29sb24pO1xuICBpZiAobWF0Y2godHQubW9kdWxvKSkge1xuICAgIGZsb3dQYXJzZVByZWRpY2F0ZSgpO1xuICB9IGVsc2Uge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICBpZiAobWF0Y2godHQubW9kdWxvKSkge1xuICAgICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gICAgfVxuICB9XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVDbGFzcygpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goLyogaXNDbGFzcyAqLyB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUZ1bmN0aW9uKCkge1xuICBuZXh0KCk7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG5cbiAgZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCk7XG5cbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChtYXRjaCh0dC5fY2xhc3MpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUNsYXNzKCk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuX2Z1bmN0aW9uKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVGdW5jdGlvbigpO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Ll92YXIpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCk7XG4gIH0gZWxzZSBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlKSkge1xuICAgIGlmIChlYXQodHQuZG90KSkge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVR5cGVBbGlhcygpO1xuICB9IGVsc2UgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVPcGFxdWVUeXBlKCk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUludGVyZmFjZSgpO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Ll9leHBvcnQpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVWYXJpYWJsZSgpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlTW9kdWxlKCkge1xuICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuICB3aGlsZSAoIW1hdGNoKHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKG1hdGNoKHR0Ll9pbXBvcnQpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZUltcG9ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmV4cGVjdGVkKCk7XG4gICAgfVxuICB9XG4gIGV4cGVjdCh0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIGV4cGVjdCh0dC5fZXhwb3J0KTtcblxuICBpZiAoZWF0KHR0Ll9kZWZhdWx0KSkge1xuICAgIGlmIChtYXRjaCh0dC5fZnVuY3Rpb24pIHx8IG1hdGNoKHR0Ll9jbGFzcykpIHtcbiAgICAgIC8vIGRlY2xhcmUgZXhwb3J0IGRlZmF1bHQgY2xhc3MgLi4uXG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIC4uLlxuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IFt0eXBlXTtcbiAgICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICAgIHNlbWljb2xvbigpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBtYXRjaCh0dC5fdmFyKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB2YXIgLi4uXG4gICAgbWF0Y2godHQuX2Z1bmN0aW9uKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCBmdW5jdGlvbiAuLi5cbiAgICBtYXRjaCh0dC5fY2xhc3MpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IGNsYXNzIC4uLlxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSAvLyBkZWNsYXJlIGV4cG9ydCBvcGFxdWUgLi5cbiAgKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICB9IGVsc2UgaWYgKFxuICAgIG1hdGNoKHR0LnN0YXIpIHx8IC8vIGRlY2xhcmUgZXhwb3J0ICogZnJvbSAnJ1xuICAgIG1hdGNoKHR0LmJyYWNlTCkgfHwgLy8gZGVjbGFyZSBleHBvcnQge30gLi4uXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IGludGVyZmFjZSAuLi5cbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IHR5cGUgLi4uXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIC8vIGRlY2xhcmUgZXhwb3J0IG9wYXF1ZSB0eXBlIC4uLlxuICApIHtcbiAgICBwYXJzZUV4cG9ydCgpO1xuICB9IGVsc2Uge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlTW9kdWxlRXhwb3J0cygpIHtcbiAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyk7XG4gIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzKCkge1xuICBuZXh0KCk7XG4gIGZsb3dQYXJzZVR5cGVBbGlhcygpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VPcGFxdWVUeXBlKHRydWUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlSW50ZXJmYWNlKCkge1xuICBuZXh0KCk7XG4gIGZsb3dQYXJzZUludGVyZmFjZWlzaCgpO1xufVxuXG4vLyBJbnRlcmZhY2VzXG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUludGVyZmFjZWlzaChpc0NsYXNzID0gZmFsc2UpIHtcbiAgZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKTtcblxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlICghaXNDbGFzcyAmJiBlYXQodHQuY29tbWEpKTtcbiAgfVxuXG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21peGlucykpIHtcbiAgICBuZXh0KCk7XG4gICAgZG8ge1xuICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpO1xuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cykpIHtcbiAgICBuZXh0KCk7XG4gICAgZG8ge1xuICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpO1xuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICB9XG5cbiAgZmxvd1BhcnNlT2JqZWN0VHlwZShpc0NsYXNzLCBmYWxzZSwgaXNDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKSB7XG4gIGZsb3dQYXJzZVF1YWxpZmllZFR5cGVJZGVudGlmaWVyKGZhbHNlKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlKCkge1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUeXBlQWxpYXMoKSB7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICB9XG5cbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHR0LmVxKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZGVjbGFyZSkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKTtcbiAgZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKTtcblxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICAvLyBQYXJzZSB0aGUgc3VwZXJ0eXBlXG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIodHQuY29sb24pO1xuICB9XG5cbiAgaWYgKCFkZWNsYXJlKSB7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHR0LmVxKTtcbiAgfVxuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlcigpIHtcbiAgZmxvd1BhcnNlVmFyaWFuY2UoKTtcbiAgZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpO1xuXG4gIGlmIChlYXQodHQuZXEpKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IHRoaXMgY29uZGl0aW9uIGlzIGFscmVhZHkgY2hlY2tlZCBhdCBhbGwgY2FsbCBzaXRlc1xuICBpZiAobWF0Y2godHQubGVzc1RoYW4pIHx8IG1hdGNoKHR0LnR5cGVQYXJhbWV0ZXJTdGFydCkpIHtcbiAgICBuZXh0KCk7XG4gIH0gZWxzZSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgZG8ge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXIoKTtcbiAgICBpZiAoIW1hdGNoKHR0LmdyZWF0ZXJUaGFuKSkge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICB9XG4gIH0gd2hpbGUgKCFtYXRjaCh0dC5ncmVhdGVyVGhhbikgJiYgIXN0YXRlLmVycm9yKTtcbiAgZXhwZWN0KHR0LmdyZWF0ZXJUaGFuKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHR0Lmxlc3NUaGFuKTtcbiAgd2hpbGUgKCFtYXRjaCh0dC5ncmVhdGVyVGhhbikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmICghbWF0Y2godHQuZ3JlYXRlclRoYW4pKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgIH1cbiAgfVxuICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2VUeXBlKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChlYXQodHQuY29tbWEpKTtcbiAgfVxuICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgaWYgKG1hdGNoKHR0Lm51bSkgfHwgbWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW5kZXhlcigpIHtcbiAgLy8gTm90ZTogYnJhY2tldEwgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZFxuICBpZiAobG9va2FoZWFkVHlwZSgpID09PSB0dC5jb2xvbikge1xuICAgIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW50ZXJuYWxTbG90KCkge1xuICAvLyBOb3RlOiBib3RoIGJyYWNrZXRMIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQucGFyZW5MKSkge1xuICAgIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKTtcbiAgfSBlbHNlIHtcbiAgICBlYXQodHQucXVlc3Rpb24pO1xuICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKSB7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICB3aGlsZSAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIW1hdGNoKHR0LmVsbGlwc2lzKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbSgpO1xuICAgIGlmICghbWF0Y2godHQucGFyZW5SKSkge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWF0KHR0LmVsbGlwc2lzKSkge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKCk7XG4gIH1cbiAgZXhwZWN0KHR0LnBhcmVuUik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCkge1xuICBmbG93UGFyc2VPYmplY3RUeXBlTWV0aG9kaXNoKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGUoYWxsb3dTdGF0aWMsIGFsbG93RXhhY3QsIGFsbG93UHJvdG8pIHtcbiAgbGV0IGVuZERlbGltO1xuICBpZiAoYWxsb3dFeGFjdCAmJiBtYXRjaCh0dC5icmFjZUJhckwpKSB7XG4gICAgZXhwZWN0KHR0LmJyYWNlQmFyTCk7XG4gICAgZW5kRGVsaW0gPSB0dC5icmFjZUJhclI7XG4gIH0gZWxzZSB7XG4gICAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gICAgZW5kRGVsaW0gPSB0dC5icmFjZVI7XG4gIH1cblxuICB3aGlsZSAoIW1hdGNoKGVuZERlbGltKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoYWxsb3dQcm90byAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3Byb3RvKSkge1xuICAgICAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZSgpO1xuICAgICAgaWYgKGxvb2thaGVhZCAhPT0gdHQuY29sb24gJiYgbG9va2FoZWFkICE9PSB0dC5xdWVzdGlvbikge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGFsbG93U3RhdGljID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxvd1N0YXRpYyAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykpIHtcbiAgICAgIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgIGlmIChsb29rYWhlYWQgIT09IHR0LmNvbG9uICYmIGxvb2thaGVhZCAhPT0gdHQucXVlc3Rpb24pIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZsb3dQYXJzZVZhcmlhbmNlKCk7XG5cbiAgICBpZiAoZWF0KHR0LmJyYWNrZXRMKSkge1xuICAgICAgaWYgKGVhdCh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZUludGVybmFsU2xvdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZUluZGV4ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2dldCkgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zZXQpKSB7XG4gICAgICAgIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZCA9PT0gdHQubmFtZSB8fCBsb29rYWhlYWQgPT09IHR0LnN0cmluZyB8fCBsb29rYWhlYWQgPT09IHR0Lm51bSkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlUHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBmbG93T2JqZWN0VHlwZVNlbWljb2xvbigpO1xuICB9XG5cbiAgZXhwZWN0KGVuZERlbGltKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZVByb3BlcnR5KCkge1xuICBpZiAobWF0Y2godHQuZWxsaXBzaXMpKSB7XG4gICAgZXhwZWN0KHR0LmVsbGlwc2lzKTtcbiAgICBpZiAoIWVhdCh0dC5jb21tYSkpIHtcbiAgICAgIGVhdCh0dC5zZW1pKTtcbiAgICB9XG4gICAgLy8gRXhwbGljaXQgaW5leGFjdCBvYmplY3Qgc3ludGF4LlxuICAgIGlmIChtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBmbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQucGFyZW5MKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBwcm9wZXJ0eVxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlYXQodHQucXVlc3Rpb24pO1xuICAgICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dPYmplY3RUeXBlU2VtaWNvbG9uKCkge1xuICBpZiAoIWVhdCh0dC5zZW1pKSAmJiAhZWF0KHR0LmNvbW1hKSAmJiAhbWF0Y2godHQuYnJhY2VSKSAmJiAhbWF0Y2godHQuYnJhY2VCYXJSKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcihpbml0aWFsSWRBbHJlYWR5UGFyc2VkKSB7XG4gIGlmICghaW5pdGlhbElkQWxyZWFkeVBhcnNlZCkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG4gIHdoaWxlIChlYXQodHQuZG90KSkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCkge1xuICBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcih0cnVlKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZW9mVHlwZSgpIHtcbiAgZXhwZWN0KHR0Ll90eXBlb2YpO1xuICBmbG93UGFyc2VQcmltYXJ5VHlwZSgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUdXBsZVR5cGUoKSB7XG4gIGV4cGVjdCh0dC5icmFja2V0TCk7XG4gIC8vIFdlIGFsbG93IHRyYWlsaW5nIGNvbW1hc1xuICB3aGlsZSAoc3RhdGUucG9zIDwgaW5wdXQubGVuZ3RoICYmICFtYXRjaCh0dC5icmFja2V0UikpIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgaWYgKG1hdGNoKHR0LmJyYWNrZXRSKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKSB7XG4gIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgaWYgKGxvb2thaGVhZCA9PT0gdHQuY29sb24gfHwgbG9va2FoZWFkID09PSB0dC5xdWVzdGlvbikge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpIHtcbiAgd2hpbGUgKCFtYXRjaCh0dC5wYXJlblIpICYmICFtYXRjaCh0dC5lbGxpcHNpcykgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgICBpZiAoIW1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gICAgfVxuICB9XG4gIGlmIChlYXQodHQuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxufVxuXG4vLyBUaGUgcGFyc2luZyBvZiB0eXBlcyByb3VnaGx5IHBhcmFsbGVscyB0aGUgcGFyc2luZyBvZiBleHByZXNzaW9ucywgYW5kXG4vLyBwcmltYXJ5IHR5cGVzIGFyZSBraW5kIG9mIGxpa2UgcHJpbWFyeSBleHByZXNzaW9ucy4uLnRoZXkncmUgdGhlXG4vLyBwcmltaXRpdmVzIHdpdGggd2hpY2ggb3RoZXIgdHlwZXMgYXJlIGNvbnN0cnVjdGVkLlxuZnVuY3Rpb24gZmxvd1BhcnNlUHJpbWFyeVR5cGUoKSB7XG4gIGxldCBpc0dyb3VwZWRUeXBlID0gZmFsc2U7XG4gIGNvbnN0IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZSA9IHN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Lm5hbWU6IHtcbiAgICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkpIHtcbiAgICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlVHlwZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5icmFjZUJhckw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LmJyYWNrZXRMOlxuICAgICAgZmxvd1BhcnNlVHVwbGVUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Lmxlc3NUaGFuOlxuICAgICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuICAgICAgZXhwZWN0KHR0LnBhcmVuUik7XG4gICAgICBleHBlY3QodHQuYXJyb3cpO1xuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5wYXJlbkw6XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgZ3JvdXBlZCB0eXBlXG4gICAgICBpZiAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIW1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgICAgICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgICAgICBpc0dyb3VwZWRUeXBlID0gdG9rZW4gIT09IHR0LnF1ZXN0aW9uICYmIHRva2VuICE9PSB0dC5jb2xvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0dyb3VwZWRUeXBlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNHcm91cGVkVHlwZSkge1xuICAgICAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBmYWxzZTtcbiAgICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICAgICAgLy8gQSBgLGAgb3IgYSBgKSA9PmAgbWVhbnMgdGhpcyBpcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdHlwZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlIHx8XG4gICAgICAgICAgIShtYXRjaCh0dC5jb21tYSkgfHwgKG1hdGNoKHR0LnBhcmVuUikgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5hcnJvdykpXG4gICAgICAgICkge1xuICAgICAgICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFYXQgYSBjb21tYSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgICBlYXQodHQuY29tbWEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuXG4gICAgICBleHBlY3QodHQucGFyZW5SKTtcbiAgICAgIGV4cGVjdCh0dC5hcnJvdyk7XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Lm1pbnVzOlxuICAgICAgbmV4dCgpO1xuICAgICAgcGFyc2VMaXRlcmFsKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Lm51bTpcbiAgICBjYXNlIHR0Ll90cnVlOlxuICAgIGNhc2UgdHQuX2ZhbHNlOlxuICAgIGNhc2UgdHQuX251bGw6XG4gICAgY2FzZSB0dC5fdGhpczpcbiAgICBjYXNlIHR0Ll92b2lkOlxuICAgIGNhc2UgdHQuc3RhcjpcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc3RhdGUudHlwZSA9PT0gdHQuX3R5cGVvZikge1xuICAgICAgICBmbG93UGFyc2VUeXBlb2ZUeXBlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSAmIFRva2VuVHlwZS5JU19LRVlXT1JEKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAgdW5leHBlY3RlZCgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VQb3N0Zml4VHlwZSgpIHtcbiAgZmxvd1BhcnNlUHJpbWFyeVR5cGUoKTtcbiAgd2hpbGUgKCFjYW5JbnNlcnRTZW1pY29sb24oKSAmJiAobWF0Y2godHQuYnJhY2tldEwpIHx8IG1hdGNoKHR0LnF1ZXN0aW9uRG90KSkpIHtcbiAgICBlYXQodHQucXVlc3Rpb25Eb3QpO1xuICAgIGV4cGVjdCh0dC5icmFja2V0TCk7XG4gICAgaWYgKGVhdCh0dC5icmFja2V0UikpIHtcbiAgICAgIC8vIEFycmF5IHR5cGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5kZXhlZCBhY2Nlc3MgdHlwZVxuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUHJlZml4VHlwZSgpIHtcbiAgaWYgKGVhdCh0dC5xdWVzdGlvbikpIHtcbiAgICBmbG93UGFyc2VQcmVmaXhUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlUG9zdGZpeFR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCkge1xuICBmbG93UGFyc2VQcmVmaXhUeXBlKCk7XG4gIGlmICghc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlICYmIGVhdCh0dC5hcnJvdykpIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpIHtcbiAgZWF0KHR0LmJpdHdpc2VBTkQpO1xuICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIHdoaWxlIChlYXQodHQuYml0d2lzZUFORCkpIHtcbiAgICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVW5pb25UeXBlKCkge1xuICBlYXQodHQuYml0d2lzZU9SKTtcbiAgZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpO1xuICB3aGlsZSAoZWF0KHR0LmJpdHdpc2VPUikpIHtcbiAgICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZSgpIHtcbiAgZmxvd1BhcnNlVW5pb25UeXBlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpIHtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVBbm5vdGF0YWJsZUlkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlVmFyaWFuY2UoKSB7XG4gIGlmIChtYXRjaCh0dC5wbHVzKSB8fCBtYXRjaCh0dC5taW51cykpIHtcbiAgICBuZXh0KCk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE92ZXJyaWRlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGZ1bmNDb250ZXh0SWQpIHtcbiAgLy8gRm9yIGFycm93IGZ1bmN0aW9ucywgYHBhcnNlQXJyb3dgIGhhbmRsZXMgdGhlIHJldHVybiB0eXBlIGl0c2VsZi5cbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbmRQcmVkaWNhdGVJbml0aWFsaXNlcigpO1xuICB9XG5cbiAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlU3Vic2NyaXB0KFxuICBzdGFydFRva2VuSW5kZXgsXG4gIG5vQ2FsbHMsXG4gIHN0b3BTdGF0ZSxcbikge1xuICBpZiAobWF0Y2godHQucXVlc3Rpb25Eb3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubGVzc1RoYW4pIHtcbiAgICBpZiAobm9DYWxscykge1xuICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTtcbiAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIGV4cGVjdCh0dC5wYXJlbkwpO1xuICAgIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoKTtcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGJhc2VQYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cygpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG59XG5cbi8vIGludGVyZmFjZXNcbmV4cG9ydCBmdW5jdGlvbiBmbG93VHJ5UGFyc2VTdGF0ZW1lbnQoKSB7XG4gIGlmIChtYXRjaCh0dC5uYW1lKSAmJiBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgICBuZXh0KCk7XG4gICAgZmxvd1BhcnNlSW50ZXJmYWNlKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pKSB7XG4gICAgZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pKSB7XG4gICAgZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBkZWNsYXJlcywgaW50ZXJmYWNlcyBhbmQgdHlwZSBhbGlhc2VzXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlSWRlbnRpZmllclN0YXRlbWVudChjb250ZXh0dWFsS2V5d29yZCkge1xuICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlKSB7XG4gICAgaWYgKFxuICAgICAgbWF0Y2godHQuX2NsYXNzKSB8fFxuICAgICAgbWF0Y2godHQubmFtZSkgfHxcbiAgICAgIG1hdGNoKHR0Ll9mdW5jdGlvbikgfHxcbiAgICAgIG1hdGNoKHR0Ll92YXIpIHx8XG4gICAgICBtYXRjaCh0dC5fZXhwb3J0KVxuICAgICkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgZmxvd1BhcnNlVHlwZUFsaWFzKCk7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICAgIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZmFsc2UpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9XG4gIH1cbiAgc2VtaWNvbG9uKCk7XG59XG5cbi8vIGV4cG9ydCB0eXBlXG5leHBvcnQgZnVuY3Rpb24gZmxvd1Nob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiAoXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTaG91bGREaXNhbGxvd0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2godHQubmFtZSkgJiZcbiAgICAoc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8XG4gICAgICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSB8fFxuICAgICAgc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUgfHxcbiAgICAgIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICBuZXh0KCk7XG5cbiAgICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUgeyBmb28sIGJhciB9O1xuICAgICAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzKCk7XG4gICAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0IHR5cGUgRm9vID0gQmFyO1xuICAgICAgZmxvd1BhcnNlVHlwZUFsaWFzKCk7XG4gICAgfVxuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIG5leHQoKTtcbiAgICAvLyBleHBvcnQgb3BhcXVlIHR5cGUgRm9vID0gQmFyO1xuICAgIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZmFsc2UpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIG5leHQoKTtcbiAgICBmbG93UGFyc2VJbnRlcmZhY2UoKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyKCkge1xuICByZXR1cm4gbWF0Y2godHQuc3RhcikgfHwgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5zdGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUV4cG9ydFN0YXIoKSB7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgyKTtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH1cbn1cblxuLy8gcGFyc2UgYSB0aGUgc3VwZXIgY2xhc3MgdHlwZSBwYXJhbWV0ZXJzIGFuZCBpbXBsZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gZmxvd0FmdGVyUGFyc2VDbGFzc1N1cGVyKGhhc1N1cGVyKSB7XG4gIGlmIChoYXNTdXBlciAmJiBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgIG5leHQoKTtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5faW1wbGVtZW50cztcbiAgICBkbyB7XG4gICAgICBmbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcigpO1xuICAgICAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH1cbn1cblxuLy8gcGFyc2UgdHlwZSBwYXJhbWV0ZXJzIGZvciBvYmplY3QgbWV0aG9kIHNob3J0aGFuZFxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCkge1xuICAvLyBtZXRob2Qgc2hvcnRoYW5kXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBpZiAoIW1hdGNoKHR0LnBhcmVuTCkpIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZWF0KHR0LnF1ZXN0aW9uKTtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuLy8gcGFyc2UgdHlwZW9mIGFuZCB0eXBlIGltcG9ydHNcbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChtYXRjaCh0dC5fdHlwZW9mKSB8fCBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgY29uc3QgbGggPSBsb29rYWhlYWRUeXBlQW5kS2V5d29yZCgpO1xuICAgIGlmIChpc01heWJlRGVmYXVsdEltcG9ydChsaCkgfHwgbGgudHlwZSA9PT0gdHQuYnJhY2VMIHx8IGxoLnR5cGUgPT09IHR0LnN0YXIpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gcGFyc2UgaW1wb3J0LXR5cGUvdHlwZW9mIHNob3J0aGFuZFxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUltcG9ydFNwZWNpZmllcigpIHtcbiAgY29uc3QgaXNUeXBlS2V5d29yZCA9XG4gICAgc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8IHN0YXRlLnR5cGUgPT09IHR0Ll90eXBlb2Y7XG4gIGlmIChpc1R5cGVLZXl3b3JkKSB7XG4gICAgbmV4dCgpO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpICYmICFpc0xvb2thaGVhZENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGlmIChpc1R5cGVLZXl3b3JkICYmICFtYXRjaCh0dC5uYW1lKSAmJiAhKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgYXMgLGAgb3IgYGltcG9ydCB7dHlwZSBhcyB9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgaW1wb3J0IHt0eXBlIGFzIGZvb2BcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNUeXBlS2V5d29yZCAmJiAobWF0Y2godHQubmFtZSkgfHwgISEoc3RhdGUudHlwZSAmIFRva2VuVHlwZS5JU19LRVlXT1JEKSkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgZm9vYFxuICAgICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBwYXJzZSBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlcnMgLSBmdW5jdGlvbiBmb288VD4oKSB7fVxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIC8vIE9yaWdpbmFsbHkgdGhpcyBjaGVja2VkIGlmIHRoZSBtZXRob2QgaXMgYSBnZXR0ZXIvc2V0dGVyLCBidXQgaWYgaXQgd2FzLCB3ZSdkIGNyYXNoIHNvb25cbiAgLy8gYW55d2F5LCBzbyBkb24ndCB0cnkgdG8gcHJvcGFnYXRlIHRoYXQgaW5mb3JtYXRpb24uXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxufVxuXG4vLyBwYXJzZSBmbG93IHR5cGUgYW5ub3RhdGlvbnMgb24gdmFyaWFibGUgZGVjbGFyYXRvciBoZWFkcyAtIGxldCBmb286IHN0cmluZyA9IGJhclxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dBZnRlclBhcnNlVmFySGVhZCgpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn1cblxuLy8gcGFyc2UgdGhlIHJldHVybiB0eXBlIG9mIGFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIC0gbGV0IGZvbyA9IChhc3luYyAoKTogbnVtYmVyID0+IHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICAgIHN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZTtcbiAgfVxufVxuXG4vLyBXZSBuZWVkIHRvIHN1cHBvcnQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciBhcnJvdyBmdW5jdGlvbnMuIFRoaXNcbi8vIGlzIHRyaWNreS4gVGhlcmUgYXJlIHRocmVlIHNpdHVhdGlvbnMgd2UgbmVlZCB0byBoYW5kbGVcbi8vXG4vLyAxLiBUaGlzIGlzIGVpdGhlciBKU1ggb3IgYW4gYXJyb3cgZnVuY3Rpb24uIFdlJ2xsIHRyeSBKU1ggZmlyc3QuIElmIHRoYXRcbi8vICAgIGZhaWxzLCB3ZSdsbCB0cnkgYW4gYXJyb3cgZnVuY3Rpb24uIElmIHRoYXQgZmFpbHMsIHdlJ2xsIHRocm93IHRoZSBKU1hcbi8vICAgIGVycm9yLlxuLy8gMi4gVGhpcyBpcyBhbiBhcnJvdyBmdW5jdGlvbi4gV2UnbGwgcGFyc2UgdGhlIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLFxuLy8gICAgcGFyc2UgdGhlIHJlc3QsIG1ha2Ugc3VyZSB0aGUgcmVzdCBpcyBhbiBhcnJvdyBmdW5jdGlvbiwgYW5kIGdvIGZyb21cbi8vICAgIHRoZXJlXG4vLyAzLiBUaGlzIGlzIG5laXRoZXIuIEp1c3QgY2FsbCB0aGUgc3VwZXIgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBsZXQgd2FzQXJyb3cgPSBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3YXNBcnJvdztcbiAgICB9XG5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB3YXNBcnJvdyA9IGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgICBpZiAod2FzQXJyb3cpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cblxuICByZXR1cm4gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xufVxuXG4vLyBoYW5kbGUgcmV0dXJuIHR5cGVzIGZvciBhcnJvdyBmdW5jdGlvbnNcbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VBcnJvdygpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcbiAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICBpZiAoY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHVuZXhwZWN0ZWQoKTtcbiAgICBpZiAoIW1hdGNoKHR0LmFycm93KSkgdW5leHBlY3RlZCgpO1xuXG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxuICByZXR1cm4gZWF0KHR0LmFycm93KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKFxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgIG1hdGNoKHR0Lmxlc3NUaGFuKVxuICApIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gICAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKTtcbiAgICBpZiAod2FzQXJyb3cgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9XG5cbiAgYmFzZVBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGFycm93IGZ1bmN0aW9uIGhlcmUuXG5mdW5jdGlvbiBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKSB7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBpZiAoIXBhcnNlQXJyb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBmbG93UGFyc2VFbnVtQm9keSgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtQm9keSgpIHtcbiAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgIG5leHQoKTtcbiAgfVxuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgZmxvd1BhcnNlRW51bU1lbWJlcnMoKTtcbiAgZXhwZWN0KHR0LmJyYWNlUik7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUVudW1NZW1iZXJzKCkge1xuICB3aGlsZSAoIW1hdGNoKHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGVhdCh0dC5lbGxpcHNpcykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBmbG93UGFyc2VFbnVtTWVtYmVyKCk7XG4gICAgaWYgKCFtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtTWVtYmVyKCkge1xuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICAvLyBGbG93IGVudW0gdmFsdWVzIGFyZSBhbHdheXMganVzdCBvbmUgdG9rZW4gKGEgc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gbGl0ZXJhbCkuXG4gICAgbmV4dCgpO1xuICB9XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuaW1wb3J0IHtGaWxlfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7XG4gIGZsb3dBZnRlclBhcnNlQ2xhc3NTdXBlcixcbiAgZmxvd0FmdGVyUGFyc2VWYXJIZWFkLFxuICBmbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbixcbiAgZmxvd1BhcnNlRXhwb3J0U3RhcixcbiAgZmxvd1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCxcbiAgZmxvd1BhcnNlSW1wb3J0U3BlY2lmaWVyLFxuICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbixcbiAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uLFxuICBmbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICBmbG93U2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbixcbiAgZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3RhcixcbiAgZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcyxcbiAgZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzLFxuICBmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbixcbiAgZmxvd1RyeVBhcnNlU3RhdGVtZW50LFxufSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge1xuICB0c0FmdGVyUGFyc2VDbGFzc1N1cGVyLFxuICB0c0FmdGVyUGFyc2VWYXJIZWFkLFxuICB0c0lzRGVjbGFyYXRpb25TdGFydCxcbiAgdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uLFxuICB0c1BhcnNlRXhwb3J0U3BlY2lmaWVyLFxuICB0c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCxcbiAgdHNQYXJzZUltcG9ydEVxdWFsc0RlY2xhcmF0aW9uLFxuICB0c1BhcnNlSW1wb3J0U3BlY2lmaWVyLFxuICB0c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMsXG4gIHRzUGFyc2VNb2RpZmllcnMsXG4gIHRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zLFxuICB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMsXG4gIHRzVHJ5UGFyc2VFeHBvcnQsXG4gIHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbixcbiAgdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQsXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbixcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzLFxufSBmcm9tIFwiLi4vcGx1Z2lucy90eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICBlYXQsXG4gIGVhdFR5cGVUb2tlbixcbiAgSWRlbnRpZmllclJvbGUsXG4gIGxvb2thaGVhZFR5cGUsXG4gIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLFxuICBtYXRjaCxcbiAgbmV4dCxcbiAgbmV4dFRva2VuU3RhcnQsXG4gIG5leHRUb2tlblN0YXJ0U2luY2UsXG4gIHBvcFR5cGVDb250ZXh0LFxuICBwdXNoVHlwZUNvbnRleHQsXG59IGZyb20gXCIuLi90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7U2NvcGV9IGZyb20gXCIuLi90b2tlbml6ZXIvc3RhdGVcIjtcbmltcG9ydCB7IFRva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtnZXROZXh0Q29udGV4dElkLCBpbnB1dCwgaXNGbG93RW5hYmxlZCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMsXG4gIHBhcnNlRXhwckF0b20sXG4gIHBhcnNlRXhwcmVzc2lvbixcbiAgcGFyc2VFeHByU3Vic2NyaXB0cyxcbiAgcGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2gsXG4gIHBhcnNlSWRlbnRpZmllcixcbiAgcGFyc2VNYXliZUFzc2lnbixcbiAgcGFyc2VNZXRob2QsXG4gIHBhcnNlT2JqLFxuICBwYXJzZVBhcmVuRXhwcmVzc2lvbixcbiAgcGFyc2VQcm9wZXJ0eU5hbWUsXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7XG4gIHBhcnNlQmluZGluZ0F0b20sXG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlQmluZGluZ0xpc3QsXG4gIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLFxufSBmcm9tIFwiLi9sdmFsXCI7XG5pbXBvcnQge1xuICBjYW5JbnNlcnRTZW1pY29sb24sXG4gIGVhdENvbnRleHR1YWwsXG4gIGV4cGVjdCxcbiAgZXhwZWN0Q29udGV4dHVhbCxcbiAgaGFzRm9sbG93aW5nTGluZUJyZWFrLFxuICBoYXNQcmVjZWRpbmdMaW5lQnJlYWssXG4gIGlzQ29udGV4dHVhbCxcbiAgaXNMaW5lVGVybWluYXRvcixcbiAgaXNMb29rYWhlYWRDb250ZXh0dWFsLFxuICBzZW1pY29sb24sXG4gIHVuZXhwZWN0ZWQsXG59IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9wTGV2ZWwoKSB7XG4gIHBhcnNlQmxvY2tCb2R5KHR0LmVvZik7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZSgwLCBzdGF0ZS50b2tlbnMubGVuZ3RoLCB0cnVlKSk7XG4gIGlmIChzdGF0ZS5zY29wZURlcHRoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjb3BlIGRlcHRoIGF0IGVuZCBvZiBmaWxlOiAke3N0YXRlLnNjb3BlRGVwdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBGaWxlKHN0YXRlLnRva2Vucywgc3RhdGUuc2NvcGVzKTtcbn1cblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKGZsb3dUcnlQYXJzZVN0YXRlbWVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmIChtYXRjaCh0dC5hdCkpIHtcbiAgICBwYXJzZURlY29yYXRvcnMoKTtcbiAgfVxuICBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAodHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0dHlwZSA9IHN0YXRlLnR5cGU7XG5cbiAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gIC8vIGNvbXBsZXhpdHkuXG5cbiAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgICBjYXNlIHR0Ll9icmVhazpcbiAgICBjYXNlIHR0Ll9jb250aW51ZTpcbiAgICAgIHBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2RlYnVnZ2VyOlxuICAgICAgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2RvOlxuICAgICAgcGFyc2VEb1N0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2ZvcjpcbiAgICAgIHBhcnNlRm9yU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgICBpZiAobG9va2FoZWFkVHlwZSgpID09PSB0dC5kb3QpIGJyZWFrO1xuICAgICAgaWYgKCFkZWNsYXJhdGlvbikgdW5leHBlY3RlZCgpO1xuICAgICAgcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5fY2xhc3M6XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSB1bmV4cGVjdGVkKCk7XG4gICAgICBwYXJzZUNsYXNzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5faWY6XG4gICAgICBwYXJzZUlmU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5fcmV0dXJuOlxuICAgICAgcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll9zd2l0Y2g6XG4gICAgICBwYXJzZVN3aXRjaFN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3Rocm93OlxuICAgICAgcGFyc2VUaHJvd1N0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3RyeTpcbiAgICAgIHBhcnNlVHJ5U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Ll9sZXQ6XG4gICAgY2FzZSB0dC5fY29uc3Q6XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSB1bmV4cGVjdGVkKCk7IC8vIE5PVEU6IGZhbGxzIHRocm91Z2ggdG8gX3ZhclxuXG4gICAgY2FzZSB0dC5fdmFyOlxuICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQoc3RhcnR0eXBlICE9PSB0dC5fdmFyKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgdHQuX3doaWxlOlxuICAgICAgcGFyc2VXaGlsZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuYnJhY2VMOlxuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuc2VtaTpcbiAgICAgIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll9leHBvcnQ6XG4gICAgY2FzZSB0dC5faW1wb3J0OiB7XG4gICAgICBjb25zdCBuZXh0VHlwZSA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgIGlmIChuZXh0VHlwZSA9PT0gdHQucGFyZW5MIHx8IG5leHRUeXBlID09PSB0dC5kb3QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAoc3RhcnR0eXBlID09PSB0dC5faW1wb3J0KSB7XG4gICAgICAgIHBhcnNlSW1wb3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZUV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIHR0Lm5hbWU6XG4gICAgICBpZiAoc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYykge1xuICAgICAgICBjb25zdCBmdW5jdGlvblN0YXJ0ID0gc3RhdGUuc3RhcnQ7XG4gICAgICAgIC8vIHBlZWsgYWhlYWQgYW5kIHNlZSBpZiBuZXh0IHRva2VuIGlzIGEgZnVuY3Rpb25cbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChtYXRjaCh0dC5fZnVuY3Rpb24pICYmICFjYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgICAgIGV4cGVjdCh0dC5fZnVuY3Rpb24pO1xuICAgICAgICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nICYmXG4gICAgICAgICFoYXNGb2xsb3dpbmdMaW5lQnJlYWsoKSAmJlxuICAgICAgICAvLyBTdGF0ZW1lbnRzIGxpa2UgYHVzaW5nWzBdYCBhbmQgYHVzaW5nIGluIGZvb2AgYXJlbid0IGFjdHVhbCB1c2luZ1xuICAgICAgICAvLyBkZWNsYXJhdGlvbnMuXG4gICAgICAgIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c0F3YWl0VXNpbmcoKSkge1xuICAgICAgICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCk7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIElmIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGFcbiAgLy8gYnJhY2UsIGl0J3MgYW4gRXhwcmVzc2lvblN0YXRlbWVudCBvciBMYWJlbGVkU3RhdGVtZW50LiBXZVxuICAvLyBzaW1wbHkgc3RhcnQgcGFyc2luZyBhbiBleHByZXNzaW9uLCBhbmQgYWZ0ZXJ3YXJkcywgaWYgdGhlXG4gIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQgdGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlXG4gIC8vIElkZW50aWZpZXIgbm9kZSwgd2Ugc3dpdGNoIHRvIGludGVycHJldGluZyBpdCBhcyBhIGxhYmVsLlxuICBjb25zdCBpbml0aWFsVG9rZW5zTGVuZ3RoID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIGxldCBzaW1wbGVOYW1lID0gbnVsbDtcbiAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPT09IGluaXRpYWxUb2tlbnNMZW5ndGggKyAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBzaW1wbGVOYW1lID0gdG9rZW4uY29udGV4dHVhbEtleXdvcmQ7XG4gICAgfVxuICB9XG4gIGlmIChzaW1wbGVOYW1lID09IG51bGwpIHtcbiAgICBzZW1pY29sb24oKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIHdhcyBhbiBpZGVudGlmaWVyLCBzbyB3ZSBtaWdodCB3YW50IHRvIGhhbmRsZSBmbG93L3R5cGVzY3JpcHQtc3BlY2lmaWMgY2FzZXMuXG4gICAgcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KHNpbXBsZU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHBvc2l0aW9uZWQgYXQgYW4gYGF3YWl0IHVzaW5nYCBkZWNsYXJhdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBjYW4gaGFwcGVuIGVpdGhlciBpbiBwbGFjZSBvZiBhIHJlZ3VsYXIgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAqIG9yIGluIGEgbG9vcCBib2R5LCBhbmQgaW4gYm90aCBwbGFjZXMsIHRoZXJlIGFyZSBzaW1pbGFyLWxvb2tpbmcgY2FzZXMgd2hlcmVcbiAqIHdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlLlxuICpcbiAqIEV4YW1wbGVzIHJldHVybmluZyB0cnVlOlxuICogYXdhaXQgdXNpbmcgZm9vID0gYmFyKCk7XG4gKiBmb3IgKGF3YWl0IHVzaW5nIGEgb2YgYikge31cbiAqXG4gKiBFeGFtcGxlcyByZXR1cm5pbmcgZmFsc2U6XG4gKiBhd2FpdCB1c2luZ1xuICogYXdhaXQgdXNpbmcgKyAxXG4gKiBhd2FpdCB1c2luZyBpbnN0YW5jZW9mIFRcbiAqIGZvciAoYXdhaXQgdXNpbmc7Oykge31cbiAqXG4gKiBGb3Igbm93LCB3ZSBlYXJseSByZXR1cm4gaWYgd2UgZG9uJ3Qgc2VlIGBhd2FpdGAsIHRoZW4gZG8gYSBzaW1wbGVcbiAqIGJhY2t0cmFja2luZy1iYXNlZCBsb29rYWhlYWQgZm9yIHRoZSBgdXNpbmdgIGFuZCBpZGVudGlmaWVyIHRva2Vucy4gSW4gdGhlXG4gKiBmdXR1cmUsIHRoaXMgY291bGQgYmUgb3B0aW1pemVkIHdpdGggYSBjaGFyYWN0ZXItYmFzZWQgYXBwcm9hY2guXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0c0F3YWl0VXNpbmcoKSB7XG4gIGlmICghaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAvLyBhd2FpdFxuICBuZXh0KCk7XG4gIGlmICghaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl91c2luZykgfHwgaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gdXNpbmdcbiAgbmV4dCgpO1xuICBpZiAoIW1hdGNoKHR0Lm5hbWUpIHx8IGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVjb3JhdG9ycygpIHtcbiAgd2hpbGUgKG1hdGNoKHR0LmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9yKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEZWNvcmF0b3IoKSB7XG4gIG5leHQoKTtcbiAgaWYgKGVhdCh0dC5wYXJlbkwpKSB7XG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgZXhwZWN0KHR0LnBhcmVuUik7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgd2hpbGUgKGVhdCh0dC5kb3QpKSB7XG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgcGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQoKSB7XG4gIG5leHQoKTtcbiAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICBzZW1pY29sb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZURvU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgZXhwZWN0KHR0Ll93aGlsZSk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIGVhdCh0dC5zZW1pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VBbWJpZ3VvdXNGb3JTdGF0ZW1lbnQoKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gIHN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyB0b2tlbiBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb24gKGV4cGxpY2l0IHJlc291cmNlXG4gKiBtYW5hZ2VtZW50KSBhcyBwYXJ0IG9mIGEgbG9vcC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNVc2luZ0luTG9vcCgpIHtcbiAgaWYgKCFpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGlzIG11c3QgYmUgYGZvciAodXNpbmcgb2ZgLCB3aGVyZSBgdXNpbmdgIGlzIHRoZSBuYW1lIG9mIHRoZSBsb29wXG4gIC8vIHZhcmlhYmxlLlxuICBpZiAoaXNMb29rYWhlYWRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIERpc2FtYmlndWF0aW5nIGJldHdlZW4gYSBgZm9yYCBhbmQgYSBgZm9yYC9gaW5gIG9yIGBmb3JgL2BvZmBcbi8vIGxvb3AgaXMgbm9uLXRyaXZpYWwuIEJhc2ljYWxseSwgd2UgaGF2ZSB0byBwYXJzZSB0aGUgaW5pdCBgdmFyYFxuLy8gc3RhdGVtZW50IG9yIGV4cHJlc3Npb24sIGRpc2FsbG93aW5nIHRoZSBgaW5gIG9wZXJhdG9yIChzZWVcbi8vIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGBwYXJzZUV4cHJlc3Npb25gKSwgYW5kIHRoZW4gY2hlY2tcbi8vIHdoZXRoZXIgdGhlIG5leHQgdG9rZW4gaXMgYGluYCBvciBgb2ZgLiBXaGVuIHRoZXJlIGlzIG5vIGluaXRcbi8vIHBhcnQgKHNlbWljb2xvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyksIGl0XG4vLyBpcyBhIHJlZ3VsYXIgYGZvcmAgbG9vcC5cbmZ1bmN0aW9uIHBhcnNlQW1iaWd1b3VzRm9yU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG5cbiAgbGV0IGZvckF3YWl0ID0gZmFsc2U7XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSkge1xuICAgIGZvckF3YWl0ID0gdHJ1ZTtcbiAgICBuZXh0KCk7XG4gIH1cbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG5cbiAgaWYgKG1hdGNoKHR0LnNlbWkpKSB7XG4gICAgaWYgKGZvckF3YWl0KSB7XG4gICAgICB1bmV4cGVjdGVkKCk7XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNBd2FpdFVzaW5nID0gc3RhcnRzQXdhaXRVc2luZygpO1xuICBpZiAoaXNBd2FpdFVzaW5nIHx8IG1hdGNoKHR0Ll92YXIpIHx8IG1hdGNoKHR0Ll9sZXQpIHx8IG1hdGNoKHR0Ll9jb25zdCkgfHwgaXNVc2luZ0luTG9vcCgpKSB7XG4gICAgaWYgKGlzQXdhaXRVc2luZykge1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgcGFyc2VWYXIodHJ1ZSwgc3RhdGUudHlwZSAhPT0gdHQuX3Zhcik7XG4gICAgaWYgKG1hdGNoKHR0Ll9pbikgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICAgIHBhcnNlRm9ySW4oZm9yQXdhaXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXJzZUZvcigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcnNlRXhwcmVzc2lvbih0cnVlKTtcbiAgaWYgKG1hdGNoKHR0Ll9pbikgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICBwYXJzZUZvckluKGZvckF3YWl0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZvckF3YWl0KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG4gIHBhcnNlRm9yKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQoKSB7XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgbmV4dCgpO1xuICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgaWYgKGVhdCh0dC5fZWxzZSkpIHtcbiAgICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7XG4gIG5leHQoKTtcblxuICAvLyBJbiBgcmV0dXJuYCAoYW5kIGBicmVha2AvYGNvbnRpbnVlYCksIHRoZSBrZXl3b3JkcyB3aXRoXG4gIC8vIG9wdGlvbmFsIGFyZ3VtZW50cywgd2UgZWFnZXJseSBsb29rIGZvciBhIHNlbWljb2xvbiBvciB0aGVcbiAgLy8gcG9zc2liaWxpdHkgdG8gaW5zZXJ0IG9uZS5cblxuICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoKSkge1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHNlbWljb2xvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG5cbiAgLy8gRG9uJ3QgYm90aGVyIHZhbGlkYXRpb247IGp1c3QgZ28gdGhyb3VnaCBhbnkgc2VxdWVuY2Ugb2YgY2FzZXMsIGRlZmF1bHRzLCBhbmQgc3RhdGVtZW50cy5cbiAgd2hpbGUgKCFtYXRjaCh0dC5icmFjZVIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChtYXRjaCh0dC5fY2FzZSkgfHwgbWF0Y2godHQuX2RlZmF1bHQpKSB7XG4gICAgICBjb25zdCBpc0Nhc2UgPSBtYXRjaCh0dC5fY2FzZSk7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAoaXNDYXNlKSB7XG4gICAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgfVxuICAgICAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIG5leHQoKTsgLy8gQ2xvc2luZyBicmFjZVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlRXhwcmVzc2lvbigpO1xuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZVBhcmFtKCkge1xuICBwYXJzZUJpbmRpbmdBdG9tKHRydWUgLyogaXNCbG9ja1Njb3BlICovKTtcblxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG5cbiAgcGFyc2VCbG9jaygpO1xuXG4gIGlmIChtYXRjaCh0dC5fY2F0Y2gpKSB7XG4gICAgbmV4dCgpO1xuICAgIGxldCBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBudWxsO1xuICAgIGlmIChtYXRjaCh0dC5wYXJlbkwpKSB7XG4gICAgICBzdGF0ZS5zY29wZURlcHRoKys7XG4gICAgICBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gICAgICBwYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKTtcbiAgICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICAgIH1cbiAgICBwYXJzZUJsb2NrKCk7XG4gICAgaWYgKGNhdGNoQmluZGluZ1N0YXJ0VG9rZW5JbmRleCAhPSBudWxsKSB7XG4gICAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBzY29wZSBmb3IgdGhlIGNhdGNoIGJpbmRpbmcgd2hpY2ggaW5jbHVkZXMgdGhlIGJpbmRpbmcgaXRzZWxmIGFuZCB0aGVcbiAgICAgIC8vIGNhdGNoIGJsb2NrLlxuICAgICAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUoY2F0Y2hCaW5kaW5nU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBmYWxzZSkpO1xuICAgICAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICAgIH1cbiAgfVxuICBpZiAoZWF0KHR0Ll9maW5hbGx5KSkge1xuICAgIHBhcnNlQmxvY2soKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWYXJTdGF0ZW1lbnQoaXNCbG9ja1Njb3BlKSB7XG4gIG5leHQoKTtcbiAgcGFyc2VWYXIoZmFsc2UsIGlzQmxvY2tTY29wZSk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVudCgpIHtcbiAgbmV4dCgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQoKSB7XG4gIHBhcnNlU3RhdGVtZW50KHRydWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RhdGVtZW50IHN0YXJ0aW5nIHdpdGggYW4gaWRlbnRpZmllciBvZiB0aGUgZ2l2ZW4gbmFtZS4gU3ViY2xhc3NlcyBtYXRjaCBvbiB0aGUgbmFtZVxuICogdG8gaGFuZGxlIHN0YXRlbWVudHMgbGlrZSBcImRlY2xhcmVcIi5cbiAqL1xuZnVuY3Rpb24gcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfSBlbHNlIHtcbiAgICBzZW1pY29sb24oKTtcbiAgfVxufVxuXG4vLyBQYXJzZSBhIHNlbWljb2xvbi1lbmNsb3NlZCBibG9jayBvZiBzdGF0ZW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmxvY2soaXNGdW5jdGlvblNjb3BlID0gZmFsc2UsIGNvbnRleHRJZCA9IDApIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgaWYgKGNvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gY29udGV4dElkO1xuICB9XG4gIHBhcnNlQmxvY2tCb2R5KHR0LmJyYWNlUik7XG4gIGlmIChjb250ZXh0SWQpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgfVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgaXNGdW5jdGlvblNjb3BlKSk7XG4gIHN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmxvY2tCb2R5KGVuZCkge1xuICB3aGlsZSAoIWVhdChlbmQpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4vLyBleHByZXNzaW9uLlxuXG5mdW5jdGlvbiBwYXJzZUZvcigpIHtcbiAgZXhwZWN0KHR0LnNlbWkpO1xuICBpZiAoIW1hdGNoKHR0LnNlbWkpKSB7XG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIH1cbiAgZXhwZWN0KHR0LnNlbWkpO1xuICBpZiAoIW1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgfVxuICBleHBlY3QodHQucGFyZW5SKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG4vLyBQYXJzZSBhIGBmb3JgL2BpbmAgYW5kIGBmb3JgL2BvZmAgbG9vcCwgd2hpY2ggYXJlIGFsbW9zdFxuLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG5mdW5jdGlvbiBwYXJzZUZvckluKGZvckF3YWl0KSB7XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0KCk7XG4gIH1cbiAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIGV4cGVjdCh0dC5wYXJlblIpO1xuICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG59XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlVmFyKGlzRm9yLCBpc0Jsb2NrU2NvcGUpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKTtcbiAgICBpZiAoZWF0KHR0LmVxKSkge1xuICAgICAgY29uc3QgZXFJbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihpc0Zvcik7XG4gICAgICBzdGF0ZS50b2tlbnNbZXFJbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoIWVhdCh0dC5jb21tYSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c0FmdGVyUGFyc2VWYXJIZWFkKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dBZnRlclBhcnNlVmFySGVhZCgpO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuLy8gYGlzU3RhdGVtZW50YCBwYXJhbWV0ZXIpLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbihcbiAgZnVuY3Rpb25TdGFydCxcbiAgaXNTdGF0ZW1lbnQsXG4gIG9wdGlvbmFsSWQgPSBmYWxzZSxcbikge1xuICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICBuZXh0KCk7XG4gIH1cblxuICBpZiAoaXNTdGF0ZW1lbnQgJiYgIW9wdGlvbmFsSWQgJiYgIW1hdGNoKHR0Lm5hbWUpICYmICFtYXRjaCh0dC5feWllbGQpKSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG5cbiAgaWYgKG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgLy8gRXhwcmVzc2lvbi1zdHlsZSBmdW5jdGlvbnMgc2hvdWxkIGxpbWl0IHRoZWlyIG5hbWUncyBzY29wZSB0byB0aGUgZnVuY3Rpb24gYm9keSwgc28gd2UgbWFrZVxuICAgIC8vIGEgbmV3IGZ1bmN0aW9uIHNjb3BlIHRvIGVuZm9yY2UgdGhhdC5cbiAgICBpZiAoIWlzU3RhdGVtZW50KSB7XG4gICAgICBuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICAgIH1cbiAgICBwYXJzZUJpbmRpbmdJZGVudGlmaWVyKGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0KTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBibG9jayBzY29wZSBvZiB0aGUgZnVuY3Rpb24gYm9keSwgd2UgbmVlZCBhIHNlcGFyYXRlIGZ1bmN0aW9uLXN0eWxlIHNjb3BlXG4gIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHBhcmFtcy5cbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBzdGF0ZS5zY29wZURlcHRoLS07XG4gIGlmIChuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCB0cnVlKSk7XG4gICAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uUGFyYW1zKFxuICBhbGxvd01vZGlmaWVycyA9IGZhbHNlLFxuICBmdW5jQ29udGV4dElkID0gMCxcbikge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxuICBwYXJzZUJpbmRpbmdMaXN0KFxuICAgIHR0LnBhcmVuUixcbiAgICBmYWxzZSAvKiBpc0Jsb2NrU2NvcGUgKi8sXG4gICAgZmFsc2UgLyogYWxsb3dFbXB0eSAqLyxcbiAgICBhbGxvd01vZGlmaWVycyxcbiAgICBmdW5jQ29udGV4dElkLFxuICApO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxufVxuXG4vLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xhc3MoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICAvLyBQdXQgYSBjb250ZXh0IElEIG9uIHRoZSBjbGFzcyBrZXl3b3JkLCB0aGUgb3Blbi1icmFjZSwgYW5kIHRoZSBjbG9zZS1icmFjZSwgc28gdGhhdCBsYXRlclxuICAvLyBjb2RlIGNhbiBlYXNpbHkgbmF2aWdhdGUgdG8gbWVhbmluZ2Z1bCBwb2ludHMgb24gdGhlIGNsYXNzLlxuICBjb25zdCBjb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG5cbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc0V4cHJlc3Npb24gPSAhaXNTdGF0ZW1lbnQ7XG4gIC8vIExpa2Ugd2l0aCBmdW5jdGlvbnMsIHdlIGRlY2xhcmUgYSBzcGVjaWFsIFwibmFtZSBzY29wZVwiIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBuYW1lIHRvIHRoZSBlbmRcbiAgLy8gb2YgdGhlIGNsYXNzLCBidXQgb25seSB3aXRoIGV4cHJlc3Npb24tc3R5bGUgY2xhc3NlcywgdG8gcmVwcmVzZW50IHRoZSBmYWN0IHRoYXQgdGhlIG5hbWUgaXNcbiAgLy8gYXZhaWxhYmxlIHRvIHRoZSBib2R5IG9mIHRoZSBjbGFzcyBidXQgbm90IGFuIG91dGVyIGRlY2xhcmF0aW9uLlxuICBsZXQgbmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ID0gbnVsbDtcbiAgaWYgKCFpc1N0YXRlbWVudCkge1xuICAgIG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICB9XG4gIHBhcnNlQ2xhc3NJZChpc1N0YXRlbWVudCwgb3B0aW9uYWxJZCk7XG4gIHBhcnNlQ2xhc3NTdXBlcigpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHBhcnNlQ2xhc3NCb2R5KGNvbnRleHRJZCk7XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBzdGF0ZS50b2tlbnNbb3BlbkJyYWNlSW5kZXhdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIGlmIChuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBmYWxzZSkpO1xuICAgIHN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NsYXNzUHJvcGVydHkoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5lcSkgfHwgbWF0Y2godHQuc2VtaSkgfHwgbWF0Y2godHQuYnJhY2VSKSB8fCBtYXRjaCh0dC5iYW5nKSB8fCBtYXRjaCh0dC5jb2xvbik7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NNZXRob2QoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5wYXJlbkwpIHx8IG1hdGNoKHR0Lmxlc3NUaGFuKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoY2xhc3NDb250ZXh0SWQpIHtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFlYXQodHQuYnJhY2VSKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZWF0KHR0LnNlbWkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2godHQuYXQpKSB7XG4gICAgICBwYXJzZURlY29yYXRvcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlclN0YXJ0ID0gc3RhdGUuc3RhcnQ7XG4gICAgcGFyc2VDbGFzc01lbWJlcihtZW1iZXJTdGFydCwgY2xhc3NDb250ZXh0SWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXIobWVtYmVyU3RhcnQsIGNsYXNzQ29udGV4dElkKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZU1vZGlmaWVycyhbXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkLFxuICAgICAgQ29udGV4dHVhbEtleXdvcmQuX3ByaXZhdGUsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gICAgXSk7XG4gIH1cbiAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gIGlmIChtYXRjaCh0dC5uYW1lKSAmJiBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykge1xuICAgIHBhcnNlSWRlbnRpZmllcigpOyAvLyBlYXRzICdzdGF0aWMnXG4gICAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpc0NsYXNzUHJvcGVydHkoKSkge1xuICAgICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBzb21ldGhpbmcgc3RhdGljXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3N0YXRpYztcbiAgICBpc1N0YXRpYyA9IHRydWU7XG5cbiAgICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHN0YXRpYyBibG9jay4gTWFyayB0aGUgd29yZCBcInN0YXRpY1wiIHdpdGggdGhlIGNsYXNzIGNvbnRleHQgSUQgZm9yIGNsYXNzIGVsZW1lbnRcbiAgICAgIC8vIGRldGVjdGlvbiBhbmQgcGFyc2UgYXMgYSByZWd1bGFyIGJsb2NrLlxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjbGFzc0NvbnRleHRJZDtcbiAgICAgIHBhcnNlQmxvY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKG1lbWJlclN0YXJ0LCBpc1N0YXRpYywgY2xhc3NDb250ZXh0SWQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKFxuICBtZW1iZXJTdGFydCxcbiAgaXNTdGF0aWMsXG4gIGNsYXNzQ29udGV4dElkLFxuKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgaWYgKHRzVHJ5UGFyc2VDbGFzc01lbWJlcldpdGhJc1N0YXRpYyhpc1N0YXRpYykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGVhdCh0dC5zdGFyKSkge1xuICAgIC8vIGEgZ2VuZXJhdG9yXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBpZGVudGlmaWVyIG5hbWUgc28gd2UgY2FuIHRlbGwgaWYgaXQncyBhY3R1YWxseSBhIGtleXdvcmQgbGlrZSBcImFzeW5jXCIsIFwiZ2V0XCIsIG9yXG4gIC8vIFwic2V0XCIuXG4gIHBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUoY2xhc3NDb250ZXh0SWQpO1xuICBsZXQgaXNDb25zdHJ1Y3RvciA9IGZhbHNlO1xuICBjb25zdCB0b2tlbiA9IHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV07XG4gIC8vIFdlIGFsbG93IFwiY29uc3RydWN0b3JcIiBhcyBlaXRoZXIgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZy5cbiAgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpIHtcbiAgICBpc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG5cbiAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIGlzQ29uc3RydWN0b3IpO1xuICB9IGVsc2UgaWYgKGlzQ2xhc3NQcm9wZXJ0eSgpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJiAhaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2FzeW5jO1xuICAgIC8vIGFuIGFzeW5jIG1ldGhvZFxuICAgIGNvbnN0IGlzR2VuZXJhdG9yID0gbWF0Y2godHQuc3Rhcik7XG4gICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJhc3luY1wiOiBnZXQgdGhlIHJlYWwgbmFtZS5cbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgZmFsc2UgLyogaXNDb25zdHJ1Y3RvciAqLyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZ2V0IHx8XG4gICAgICB0b2tlbi5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3NldCkgJiZcbiAgICAhKGlzTGluZVRlcm1pbmF0b3IoKSAmJiBtYXRjaCh0dC5zdGFyKSlcbiAgKSB7XG4gICAgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZ2V0KSB7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fc2V0O1xuICAgIH1cbiAgICAvLyBgZ2V0XFxuKmAgaXMgYW4gdW5pbml0aWFsaXplZCBwcm9wZXJ0eSBuYW1lZCAnZ2V0JyBmb2xsb3dlZCBieSBhIGdlbmVyYXRvci5cbiAgICAvLyBhIGdldHRlciBvciBzZXR0ZXJcbiAgICAvLyBUaGUgc28tY2FsbGVkIHBhcnNlZCBuYW1lIHdvdWxkIGhhdmUgYmVlbiBcImdldC9zZXRcIjogZ2V0IHRoZSByZWFsIG5hbWUuXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hY2Nlc3NvciAmJiAhaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgLy8gYW4gdW5pbml0aWFsaXplZCBjbGFzcyBwcm9wZXJ0eSAoZHVlIHRvIEFTSSwgc2luY2Ugd2UgZG9uJ3Qgb3RoZXJ3aXNlIHJlY29nbml6ZSB0aGUgbmV4dCB0b2tlbilcbiAgICBwYXJzZUNsYXNzUHJvcGVydHkoKTtcbiAgfSBlbHNlIHtcbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc01ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgIH1cbiAgfVxuICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKTtcbn1cblxuLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBwcm9wZXJ0eSwgaWYgaXQgaXMgYSBzaW1wbGUgaWRlbnRpZmllci5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKSB7XG4gIHBhcnNlUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zdE1lbWJlck5hbWVNb2RpZmllcnMoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGFzc1Byb3BlcnR5KCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGVhdFR5cGVUb2tlbih0dC5iYW5nKTtcbiAgICB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2godHQuZXEpKSB7XG4gICAgY29uc3QgZXF1YWxzVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgbmV4dCgpO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICBzdGF0ZS50b2tlbnNbZXF1YWxzVG9rZW5JbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICB9XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICBpZiAoXG4gICAgaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICghaXNTdGF0ZW1lbnQgfHwgb3B0aW9uYWxJZCkgJiZcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5uYW1lKSkge1xuICAgIHBhcnNlQmluZGluZ0lkZW50aWZpZXIodHJ1ZSk7XG4gIH1cblxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIHN1cGVyY2xhc3MuXG5mdW5jdGlvbiBwYXJzZUNsYXNzU3VwZXIoKSB7XG4gIGxldCBoYXNTdXBlciA9IGZhbHNlO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgICBoYXNTdXBlciA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaGFzU3VwZXIgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzQWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpO1xuICB9XG59XG5cbi8vIFBhcnNlcyBtb2R1bGUgZXhwb3J0IGRlY2xhcmF0aW9uLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHBvcnQoKSB7XG4gIGNvbnN0IGV4cG9ydEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgaWYgKHRzVHJ5UGFyc2VFeHBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBleHBvcnQgKiBmcm9tICcuLi4nXG4gIGlmIChzaG91bGRQYXJzZUV4cG9ydFN0YXIoKSkge1xuICAgIHBhcnNlRXhwb3J0U3RhcigpO1xuICB9IGVsc2UgaWYgKGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgZnJvbVxuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGlmIChtYXRjaCh0dC5jb21tYSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5zdGFyKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgZXhwZWN0KHR0LnN0YXIpO1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpO1xuICAgICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVyc01heWJlKCk7XG4gICAgfVxuICAgIHBhcnNlRXhwb3J0RnJvbSgpO1xuICB9IGVsc2UgaWYgKGVhdCh0dC5fZGVmYXVsdCkpIHtcbiAgICAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCk7XG4gIH0gZWxzZSBpZiAoc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpKSB7XG4gICAgcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpO1xuICAgIHBhcnNlRXhwb3J0RnJvbSgpO1xuICB9XG4gIHN0YXRlLnRva2Vuc1tleHBvcnRJbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmICh0c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgaWYgKGVhdCh0dC5fZnVuY3Rpb24pKSB7XG4gICAgcGFyc2VGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCB0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJiBsb29rYWhlYWRUeXBlKCkgPT09IHR0Ll9mdW5jdGlvbikge1xuICAgIC8vIGFzeW5jIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXN5bmMpO1xuICAgIGVhdCh0dC5fZnVuY3Rpb24pO1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuX2NsYXNzKSkge1xuICAgIHBhcnNlQ2xhc3ModHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuYXQpKSB7XG4gICAgcGFyc2VEZWNvcmF0b3JzKCk7XG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1BhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZVN0YXRlbWVudCh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkICYmIHRzSXNEZWNsYXJhdGlvblN0YXJ0KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCAmJiBmbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkICE9PSBDb250ZXh0dWFsS2V5d29yZC5fYXN5bmM7XG4gIH1cblxuICBpZiAoIW1hdGNoKHR0Ll9kZWZhdWx0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IF9uZXh0ID0gbmV4dFRva2VuU3RhcnQoKTtcbiAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgY29uc3QgaGFzRnJvbSA9XG4gICAgbG9va2FoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZnJvbTtcbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSB0dC5jb21tYSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIGxvb2thaGVhZCBhZ2FpbiB3aGVuIGBleHBvcnQgZGVmYXVsdCBmcm9tYCBpcyBzZWVuXG4gIGlmIChoYXNGcm9tKSB7XG4gICAgY29uc3QgbmV4dEFmdGVyRnJvbSA9IGlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnRTaW5jZShfbmV4dCArIDQpKTtcbiAgICByZXR1cm4gbmV4dEFmdGVyRnJvbSA9PT0gY2hhckNvZGVzLnF1b3RhdGlvbk1hcmsgfHwgbmV4dEFmdGVyRnJvbSA9PT0gY2hhckNvZGVzLmFwb3N0cm9waGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpIHtcbiAgaWYgKGVhdCh0dC5jb21tYSkpIHtcbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHBvcnRGcm9tKCkge1xuICBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICBwYXJzZUV4cHJBdG9tKCk7XG4gICAgbWF5YmVQYXJzZUltcG9ydEF0dHJpYnV0ZXMoKTtcbiAgfVxuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VFeHBvcnRTdGFyKCkge1xuICBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoKHR0LnN0YXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VFeHBvcnRTdGFyKCk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlRXhwb3J0U3RhcigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VFeHBvcnRTdGFyKCkge1xuICBleHBlY3QodHQuc3Rhcik7XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgcGFyc2VFeHBvcnROYW1lc3BhY2UoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVzcGFjZSgpIHtcbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fYXM7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpO1xuICBwYXJzZUV4cG9ydEZyb20oKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgcmV0dXJuIChcbiAgICAoaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiB0c0lzRGVjbGFyYXRpb25TdGFydCgpKSB8fFxuICAgIChpc0Zsb3dFbmFibGVkICYmIGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkpIHx8XG4gICAgc3RhdGUudHlwZSA9PT0gdHQuX3ZhciB8fFxuICAgIHN0YXRlLnR5cGUgPT09IHR0Ll9jb25zdCB8fFxuICAgIHN0YXRlLnR5cGUgPT09IHR0Ll9sZXQgfHxcbiAgICBzdGF0ZS50eXBlID09PSB0dC5fZnVuY3Rpb24gfHxcbiAgICBzdGF0ZS50eXBlID09PSB0dC5fY2xhc3MgfHxcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB8fFxuICAgIG1hdGNoKHR0LmF0KVxuICApO1xufVxuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgZXhwb3J0cy5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgLy8gZXhwb3J0IHsgeCwgeSBhcyB6IH0gW2Zyb20gJy4uLiddXG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuXG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKGVhdCh0dC5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VFeHBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IHRoZSBgbW9kdWxlYCB0b2tlbiBpbiBhbiBpbXBvcnQsIGRldGVybWluZSBpZiBpdCB3YXMgdHJ1bHkgYW5cbiAqIGltcG9ydCByZWZsZWN0aW9uIHRva2VuIG9yIGp1c3QgbG9va3MgbGlrZSBvbmUuXG4gKlxuICogUmV0dXJucyB0cnVlIGZvcjpcbiAqIGltcG9ydCBtb2R1bGUgZm9vIGZyb20gXCJmb29cIjtcbiAqIGltcG9ydCBtb2R1bGUgZnJvbSBmcm9tIFwiZm9vXCI7XG4gKlxuICogUmV0dXJucyBmYWxzZSBmb3I6XG4gKiBpbXBvcnQgbW9kdWxlIGZyb20gXCJmb29cIjtcbiAqIGltcG9ydCBtb2R1bGUsIHtiYXJ9IGZyb20gXCJmb29cIjtcbiAqL1xuZnVuY3Rpb24gaXNJbXBvcnRSZWZsZWN0aW9uKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSk7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuY29tbWEpKSB7XG4gICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRWF0IHRoZSBcIm1vZHVsZVwiIHRva2VuIGZyb20gdGhlIGltcG9ydCByZWZsZWN0aW9uIHByb3Bvc2FsLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaW1wb3J0LXJlZmxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYXliZUltcG9ydFJlZmxlY3Rpb24oKSB7XG4gIC8vIGlzSW1wb3J0UmVmbGVjdGlvbiBkb2VzIHNuYXBzaG90L3Jlc3RvcmUsIHNvIG9ubHkgcnVuIGl0IGlmIHdlIHNlZSB0aGUgd29yZFxuICAvLyBcIm1vZHVsZVwiLlxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmIGlzSW1wb3J0UmVmbGVjdGlvbigpKSB7XG4gICAgbmV4dCgpO1xuICB9XG59XG5cbi8vIFBhcnNlcyBpbXBvcnQgZGVjbGFyYXRpb24uXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUltcG9ydCgpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgbWF0Y2godHQubmFtZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5lcSkge1xuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkge1xuICAgICAgLy8gT25lIG9mIHRoZXNlIGBpbXBvcnQgdHlwZWAgY2FzZXM6XG4gICAgICAvLyBpbXBvcnQgdHlwZSBUID0gcmVxdWlyZSgnVCcpO1xuICAgICAgLy8gaW1wb3J0IHR5cGUgQSBmcm9tICdBJztcbiAgICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpO1xuICAgICAgaWYgKGxvb2thaGVhZFR5cGUoKSA9PT0gdHQuZXEpIHtcbiAgICAgICAgdHNQYXJzZUltcG9ydEVxdWFsc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgaXMgYW4gYGltcG9ydCB0eXBlLi4uZnJvbWAgc3RhdGVtZW50LCB0aGVuIHdlIGFscmVhZHkgYXRlIHRoZVxuICAgICAgLy8gdHlwZSB0b2tlbiwgc28gcHJvY2VlZCB0byB0aGUgcmVndWxhciBpbXBvcnQgcGFyc2VyLlxuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IHR0LnN0YXIgfHwgbG9va2FoZWFkLnR5cGUgPT09IHR0LmJyYWNlTCkge1xuICAgICAgLy8gT25lIG9mIHRoZXNlIGBpbXBvcnQgdHlwZWAgY2FzZXMsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGVhdCB0aGUgdHlwZSB0b2tlblxuICAgICAgLy8gYW5kIHByb2NlZWQgYXMgbm9ybWFsOlxuICAgICAgLy8gaW1wb3J0IHR5cGUgKiBhcyBBIGZyb20gJ0EnO1xuICAgICAgLy8gaW1wb3J0IHR5cGUge2F9IGZyb20gJ0EnO1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGltcG9ydGluZyB0aGUgbmFtZSBcInR5cGVcIi5cbiAgfVxuXG4gIC8vIGltcG9ydCAnLi4uJ1xuICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlSW1wb3J0UmVmbGVjdGlvbigpO1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pO1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfVxuICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICBzZW1pY29sb24oKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBzaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5uYW1lKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpIHtcbiAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGltcG9ydHMuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzKCk7XG4gIH1cblxuICBsZXQgZmlyc3QgPSB0cnVlO1xuICBpZiAoc2hvdWxkUGFyc2VEZWZhdWx0SW1wb3J0KCkpIHtcbiAgICAvLyBpbXBvcnQgZGVmYXVsdE9iaiwgeyB4LCB5IGFzIHogfSBmcm9tICcuLi4nXG4gICAgcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpO1xuXG4gICAgaWYgKCFlYXQodHQuY29tbWEpKSByZXR1cm47XG4gIH1cblxuICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICBuZXh0KCk7XG4gICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpO1xuXG4gICAgcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlY3QgYW4gYXR0ZW1wdCB0byBkZWVwIGRlc3RydWN0dXJlXG4gICAgICBpZiAoZWF0KHR0LmNvbG9uKSkge1xuICAgICAgICB1bmV4cGVjdGVkKFxuICAgICAgICAgIFwiRVMyMDE1IG5hbWVkIGltcG9ydHMgZG8gbm90IGRlc3RydWN0dXJlLiBVc2UgYW5vdGhlciBzdGF0ZW1lbnQgZm9yIGRlc3RydWN0dXJpbmcgYWZ0ZXIgdGhlIGltcG9ydC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUltcG9ydFNwZWNpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VJbXBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkltcG9ydEFjY2VzcztcbiAgICBuZXh0KCk7XG4gICAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGltcG9ydCBhdHRyaWJ1dGVzIGxpa2UgYHdpdGgge3R5cGU6IFwianNvblwifWAsIG9yIHRoZSBsZWdhY3kgZm9ybVxuICogYGFzc2VydCB7dHlwZTogXCJqc29uXCJ9YC5cbiAqXG4gKiBJbXBvcnQgYXR0cmlidXRlcyB0ZWNobmljYWxseSBoYXZlIHRoZWlyIG93biBzeW50YXgsIGJ1dCBhcmUgYWx3YXlzIHBhcnNlYWJsZVxuICogYXMgYSBwbGFpbiBKUyBvYmplY3QsIHNvIGp1c3QgZG8gdGhhdCBmb3Igc2ltcGxpY2l0eS5cbiAqL1xuZnVuY3Rpb24gbWF5YmVQYXJzZUltcG9ydEF0dHJpYnV0ZXMoKSB7XG4gIGlmIChtYXRjaCh0dC5fd2l0aCkgfHwgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXNzZXJ0KSAmJiAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpKSB7XG4gICAgbmV4dCgpO1xuICAgIHBhcnNlT2JqKGZhbHNlLCBmYWxzZSk7XG4gIH1cbn1cbiIsICJcbmltcG9ydCB7bmV4dFRva2VuLCBza2lwTGluZUNvbW1lbnR9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7aW5wdXQsIHN0YXRlfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge3BhcnNlVG9wTGV2ZWx9IGZyb20gXCIuL3N0YXRlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWxlKCkge1xuICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgaWYgKFxuICAgIHN0YXRlLnBvcyA9PT0gMCAmJlxuICAgIGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IGNoYXJDb2Rlcy5udW1iZXJTaWduICYmXG4gICAgaW5wdXQuY2hhckNvZGVBdCgxKSA9PT0gY2hhckNvZGVzLmV4Y2xhbWF0aW9uTWFya1xuICApIHtcbiAgICBza2lwTGluZUNvbW1lbnQoMik7XG4gIH1cbiAgbmV4dFRva2VuKCk7XG4gIHJldHVybiBwYXJzZVRvcExldmVsKCk7XG59XG4iLCAiXG5cbmltcG9ydCB7YXVnbWVudEVycm9yLCBpbml0UGFyc2VyLCBzdGF0ZX0gZnJvbSBcIi4vdHJhdmVyc2VyL2Jhc2VcIjtcbmltcG9ydCB7cGFyc2VGaWxlfSBmcm9tIFwiLi90cmF2ZXJzZXIvaW5kZXhcIjtcblxuZXhwb3J0IGNsYXNzIEZpbGUge1xuICBcbiAgXG5cbiAgY29uc3RydWN0b3IodG9rZW5zLCBzY29wZXMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoXG4gIGlucHV0LFxuICBpc0pTWEVuYWJsZWQsXG4gIGlzVHlwZVNjcmlwdEVuYWJsZWQsXG4gIGlzRmxvd0VuYWJsZWQsXG4pIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQgJiYgaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21iaW5lIGZsb3cgYW5kIHR5cGVzY3JpcHQgcGx1Z2lucy5cIik7XG4gIH1cbiAgaW5pdFBhcnNlcihpbnB1dCwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VGaWxlKCk7XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHRocm93IGF1Z21lbnRFcnJvcihzdGF0ZS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3Jkc1wiO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBvcHRpb25hbCBjaGFpbiBvciBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0aW9uIGhhcyBhbnkgYXdhaXQgc3RhdGVtZW50cyBpblxuICogaXQuIElmIHNvLCB3ZSdsbCBuZWVkIHRvIHRyYW5zcGlsZSB0byBhbiBhc3luYyBvcGVyYXRpb24uXG4gKlxuICogV2UgY29tcHV0ZSB0aGlzIGJ5IHdhbGtpbmcgdGhlIGxlbmd0aCBvZiB0aGUgb3BlcmF0aW9uIGFuZCByZXR1cm5pbmcgdHJ1ZSBpZiB3ZSBzZWUgYW4gYXdhaXRcbiAqIGtleXdvcmQgdXNlZCBhcyBhIHJlYWwgYXdhaXQgKHJhdGhlciB0aGFuIGFuIG9iamVjdCBrZXkgb3IgcHJvcGVydHkgYWNjZXNzKS4gTmVzdGVkIG9wdGlvbmFsXG4gKiBjaGFpbi9udWxsaXNoIG9wZXJhdGlvbnMgbmVlZCB0byBiZSB0cmFja2VkIGJ1dCBkb24ndCBzaWxlbmNlIGF3YWl0LCBidXQgYSBuZXN0ZWQgYXN5bmMgZnVuY3Rpb25cbiAqIChvciBhbnkgb3RoZXIgbmVzdGVkIHNjb3BlKSB3aWxsIG1ha2UgdGhlIGF3YWl0IG5vdCBjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBc3luY09wZXJhdGlvbih0b2tlbnMpIHtcbiAgbGV0IGluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICBsZXQgZGVwdGggPSAwO1xuICBjb25zdCBzdGFydFRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBkbyB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgIGRlcHRoKys7XG4gICAgfVxuICAgIGlmICh0b2tlbi5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgfVxuICAgIGRlcHRoICs9IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cztcbiAgICBkZXB0aCAtPSB0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VFbmRzO1xuXG4gICAgaWYgKFxuICAgICAgdG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCAmJlxuICAgICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT0gbnVsbCAmJlxuICAgICAgdG9rZW4uc2NvcGVEZXB0aCA9PT0gc3RhcnRUb2tlbi5zY29wZURlcHRoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaW5kZXggKz0gMTtcbiAgfSB3aGlsZSAoZGVwdGggPiAwICYmIGluZGV4IDwgdG9rZW5zLnRva2Vucy5sZW5ndGgpO1xuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiXG5cblxuaW1wb3J0IHsgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQgaXNBc3luY09wZXJhdGlvbiBmcm9tIFwiLi91dGlsL2lzQXN5bmNPcGVyYXRpb25cIjtcblxuXG5cblxuXG5cblxuXG5cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblByb2Nlc3NvciB7XG4gICBfX2luaXQoKSB7dGhpcy5yZXN1bHRDb2RlID0gXCJcIn1cbiAgLy8gQXJyYXkgbWFwcGluZyBpbnB1dCB0b2tlbiBpbmRleCB0byBvcHRpb25hbCBzdHJpbmcgaW5kZXggcG9zaXRpb24gaW4gdGhlXG4gIC8vIG91dHB1dCBjb2RlLlxuICAgX19pbml0MigpIHt0aGlzLnJlc3VsdE1hcHBpbmdzID0gbmV3IEFycmF5KHRoaXMudG9rZW5zLmxlbmd0aCl9XG4gICBfX2luaXQzKCkge3RoaXMudG9rZW5JbmRleCA9IDB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIGNvZGUsXG4gICAgIHRva2VucyxcbiAgICAgaXNGbG93RW5hYmxlZCxcbiAgICAgZGlzYWJsZUVTVHJhbnNmb3JtcyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMuY29kZSA9IGNvZGU7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pc0Zsb3dFbmFibGVkID0gaXNGbG93RW5hYmxlZDt0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMgPSBkaXNhYmxlRVNUcmFuc2Zvcm1zO3RoaXMuaGVscGVyTWFuYWdlciA9IGhlbHBlck1hbmFnZXI7VG9rZW5Qcm9jZXNzb3IucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7VG9rZW5Qcm9jZXNzb3IucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTt9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IHRoZSB0b2tlbiBzdGF0ZSBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXN0b3JlZCBsYXRlciwgdXNlZnVsIGZvclxuICAgKiB0aGluZ3MgbGlrZSBsb29rYWhlYWQuXG4gICAqXG4gICAqIHJlc3VsdE1hcHBpbmdzIGRvIG5vdCBuZWVkIHRvIGJlIGNvcGllZCBzaW5jZSBpbiBhbGwgdXNlIGNhc2VzLCB0aGV5IHdpbGxcbiAgICogYmUgb3ZlcndyaXR0ZW4gYW55d2F5IGFmdGVyIHJlc3RvcmUuXG4gICAqL1xuICBzbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0Q29kZTogdGhpcy5yZXN1bHRDb2RlLFxuICAgICAgdG9rZW5JbmRleDogdGhpcy50b2tlbkluZGV4LFxuICAgIH07XG4gIH1cblxuICByZXN0b3JlVG9TbmFwc2hvdChzbmFwc2hvdCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IHNuYXBzaG90LnJlc3VsdENvZGU7XG4gICAgdGhpcy50b2tlbkluZGV4ID0gc25hcHNob3QudG9rZW5JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgY29kZSBnZW5lcmF0ZWQgc2luY2UgdGhlIHNuYXBzaG90LCBsZWF2aW5nIHRoZVxuICAgKiBjdXJyZW50IHRva2VuIHBvc2l0aW9uIGluLXBsYWNlLiBVbmxpa2UgbW9zdCBUb2tlblByb2Nlc3NvciBvcGVyYXRpb25zLFxuICAgKiB0aGlzIG9wZXJhdGlvbiBjYW4gcmVzdWx0IGluIGlucHV0L291dHB1dCBsaW5lIG51bWJlciBtaXNtYXRjaGVzIGJlY2F1c2VcbiAgICogdGhlIHJlbW92ZWQgY29kZSBtYXkgY29udGFpbiBuZXdsaW5lcywgc28gdGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIHVzZWRcbiAgICogc3BhcmluZ2x5LlxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlHZXRBbmRSZW1vdmVDb2RlU2luY2VTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0Q29kZS5zbGljZShzbmFwc2hvdC5yZXN1bHRDb2RlLmxlbmd0aCk7XG4gICAgdGhpcy5yZXN1bHRDb2RlID0gc25hcHNob3QucmVzdWx0Q29kZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlID0gXCJcIjtcbiAgICB0aGlzLnJlc3VsdE1hcHBpbmdzID0gbmV3IEFycmF5KHRoaXMudG9rZW5zLmxlbmd0aCk7XG4gICAgdGhpcy50b2tlbkluZGV4ID0gMDtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCwgY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vuc1tpbmRleF0uY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkXG4gICAgKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkge1xuICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gcHJvY2VzcyBlc2NhcGVzIHNpbmNlIHRlY2huaWNhbGx5IHlvdSBjYW4gaGF2ZSB1bmljb2RlIGVzY2FwZXMgaW4gdmFyaWFibGVcbiAgICAvLyBuYW1lcy5cbiAgICByZXR1cm4gdGhpcy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleChyZWxhdGl2ZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0aGlzLnRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odGhpcy5jdXJyZW50VG9rZW4oKSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHJhd0NvZGVGb3JUb2tlbih0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMuY3VycmVudFRva2VuKCkpO1xuICB9XG5cbiAgc3RyaW5nVmFsdWVGb3JUb2tlbih0b2tlbikge1xuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB3aGVuIHR3byBpbXBvcnRzIGFyZSB0aGUgc2FtZSBhbmQgdG8gcmVzb2x2ZSBUeXBlU2NyaXB0IGVudW0ga2V5cy5cbiAgICAvLyBJZGVhbGx5IHdlJ2QgcHJvY2VzcyBlc2NhcGVzIHdpdGhpbiB0aGUgc3RyaW5ncywgYnV0IGZvciBub3cgd2UgcHJldHR5IG11Y2ggdGFrZSB0aGUgcmF3XG4gICAgLy8gY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gIH1cblxuICBtYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHQxKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MTtcbiAgfVxuXG4gIG1hdGNoZXMyQXRJbmRleChpbmRleCwgdDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJiB0aGlzLnRva2Vuc1tpbmRleCArIDFdLnR5cGUgPT09IHQyO1xuICB9XG5cbiAgbWF0Y2hlczNBdEluZGV4KGluZGV4LCB0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzMSh0MSkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxO1xuICB9XG5cbiAgbWF0Y2hlczIodDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiYgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMV0udHlwZSA9PT0gdDI7XG4gIH1cblxuICBtYXRjaGVzMyh0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDFdLnR5cGUgPT09IHQyICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzNCh0MSwgdDIsIHQzLCB0NCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0XG4gICAgKTtcbiAgfVxuXG4gIG1hdGNoZXM1KHQxLCB0MiwgdDMsIHQ0LCB0NSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0ICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyA0XS50eXBlID09PSB0NVxuICAgICk7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2VuSW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0eXBlLCBjb250ZXh0SWQpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzMSh0eXBlKSAmJiB0aGlzLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29udGV4dElkO1xuICB9XG5cbiAgcHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKSB7XG4gICAgbGV0IHdoaXRlc3BhY2VBbmRDb21tZW50cyA9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5JbmRleCA+IDAgPyB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggLSAxXS5lbmQgOiAwLFxuICAgICAgdGhpcy50b2tlbkluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoID8gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCA6IHRoaXMuY29kZS5sZW5ndGgsXG4gICAgKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dFbmFibGVkKSB7XG4gICAgICB3aGl0ZXNwYWNlQW5kQ29tbWVudHMgPSB3aGl0ZXNwYWNlQW5kQ29tbWVudHMucmVwbGFjZSgvQGZsb3cvZywgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB3aGl0ZXNwYWNlQW5kQ29tbWVudHM7XG4gIH1cblxuICByZXBsYWNlVG9rZW4obmV3Q29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShuZXdDb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKS5yZXBsYWNlKC9bXlxcclxcbl0vZywgXCJcIik7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVtb3ZlSW5pdGlhbFRva2VuKCkge1xuICAgIHRoaXMucmVwbGFjZVRva2VuKFwiXCIpO1xuICB9XG5cbiAgcmVtb3ZlVG9rZW4oKSB7XG4gICAgdGhpcy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY29kZSB1bnRpbCB0aGUgbmV4dCB9LCBhY2NvdW50aW5nIGZvciBiYWxhbmNlZCBicmFjZXMuXG4gICAqL1xuICByZW1vdmVCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgICAgYnJhY2VEZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlFeHBlY3RlZFRva2VuKHRva2VuVHlwZSkge1xuICAgIGlmICh0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgIT09IHRva2VuVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0b2tlbiAke3Rva2VuVHlwZX1gKTtcbiAgICB9XG4gICAgdGhpcy5jb3B5VG9rZW4oKTtcbiAgfVxuXG4gIGNvcHlUb2tlbigpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5QcmVmaXgoKTtcbiAgICB0aGlzLnJlc3VsdE1hcHBpbmdzW3RoaXMudG9rZW5JbmRleF0gPSB0aGlzLnJlc3VsdENvZGUubGVuZ3RoO1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmNvZGUuc2xpY2UoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnN0YXJ0LFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5lbmQsXG4gICAgKTtcbiAgICB0aGlzLmFwcGVuZFRva2VuU3VmZml4KCk7XG4gICAgdGhpcy50b2tlbkluZGV4Kys7XG4gIH1cblxuICBjb3B5VG9rZW5XaXRoUHJlZml4KHByZWZpeCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSBwcmVmaXg7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5nc1t0aGlzLnRva2VuSW5kZXhdID0gdGhpcy5yZXN1bHRDb2RlLmxlbmd0aDtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5jb2RlLnNsaWNlKFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCxcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uZW5kLFxuICAgICk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgIGFwcGVuZFRva2VuUHJlZml4KCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzIHx8IHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICB0b2tlbi5pc0FzeW5jT3BlcmF0aW9uID0gaXNBc3luY09wZXJhdGlvbih0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0czsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IFwiYXdhaXQgXCI7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNOdWxsaXNoQ29hbGVzY2VcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwibnVsbGlzaENvYWxlc2NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJhd2FpdCBcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2VuSW5kZXggPiAwICYmIHRoaXMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgPT09IHR0Ll9kZWxldGUpIHtcbiAgICAgICAgaWYgKHRva2VuLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJhc3luY09wdGlvbmFsQ2hhaW5EZWxldGVcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwib3B0aW9uYWxDaGFpbkRlbGV0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcIm9wdGlvbmFsQ2hhaW5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCIoW1wiO1xuICAgIH1cbiAgfVxuXG4gICBhcHBlbmRUb2tlblN1ZmZpeCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpbkVuZCAmJiAhdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zKSB7XG4gICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJdKVwiO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kcyAmJiAhdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZUVuZHM7IGkrKykge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCIpKVwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGVuZENvZGUoY29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSBjb2RlO1xuICB9XG5cbiAgY3VycmVudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdO1xuICB9XG5cbiAgY3VycmVudFRva2VuQ29kZSgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgcmVsYXRpdmVJbmRleF07XG4gIH1cblxuICBjdXJyZW50SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuLiBPbmx5IHN1aXRhYmxlIGluIHByZXByb2Nlc3Npbmcgc3RlcHMuIFdoZW5cbiAgICogZ2VuZXJhdGluZyBuZXcgY29kZSwgeW91IHNob3VsZCB1c2UgY29weVRva2VuIG9yIHJlbW92ZVRva2VuLlxuICAgKi9cbiAgbmV4dFRva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2VuSW5kZXggPT09IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIGlucHV0LlwiKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbkluZGV4Kys7XG4gIH1cblxuICBwcmV2aW91c1Rva2VuKCkge1xuICAgIHRoaXMudG9rZW5JbmRleC0tO1xuICB9XG5cbiAgZmluaXNoKCkge1xuICAgIGlmICh0aGlzLnRva2VuSW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gZmluaXNoIHByb2Nlc3NpbmcgdG9rZW5zIGJlZm9yZSByZWFjaGluZyB0aGUgZW5kLlwiKTtcbiAgICB9XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTtcbiAgICByZXR1cm4ge2NvZGU6IHRoaXMucmVzdWx0Q29kZSwgbWFwcGluZ3M6IHRoaXMucmVzdWx0TWFwcGluZ3N9O1xuICB9XG5cbiAgaXNBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkluZGV4ID09PSB0aGlzLnRva2Vucy5sZW5ndGg7XG4gIH1cbn1cbiIsICJcblxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsYXNzIGZpZWxkcyBmb3IgdGhpcyBjbGFzcywgZ2l2ZW4gYSB0b2tlbiBwcm9jZXNzb3IgcG9pbnRpbmcgdG8gdGhlXG4gKiBvcGVuLWJyYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgY2xhc3MuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzSW5mbyhcbiAgcm9vdFRyYW5zZm9ybWVyLFxuICB0b2tlbnMsXG4gIG5hbWVNYW5hZ2VyLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zLFxuKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gdG9rZW5zLnNuYXBzaG90KCk7XG5cbiAgY29uc3QgaGVhZGVySW5mbyA9IHByb2Nlc3NDbGFzc0hlYWRlcih0b2tlbnMpO1xuXG4gIGxldCBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyA9IFtdO1xuICBjb25zdCBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMgPSBbXTtcbiAgY29uc3Qgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyA9IFtdO1xuICBsZXQgY29uc3RydWN0b3JJbnNlcnRQb3MgPSBudWxsO1xuICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgY29uc3QgcmFuZ2VzVG9SZW1vdmUgPSBbXTtcblxuICBjb25zdCBjbGFzc0NvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY2xhc3MgY29udGV4dCBJRCBvbiBjbGFzcyBvcGVuLWJyYWNlLlwiKTtcbiAgfVxuXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNlUiwgY2xhc3NDb250ZXh0SWQpKSB7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAoe2NvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLCBjb25zdHJ1Y3Rvckluc2VydFBvc30gPSBwcm9jZXNzQ29uc3RydWN0b3IodG9rZW5zKSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbnMubWF0Y2hlczEodHQuc2VtaSkpIHtcbiAgICAgIGlmICghZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgICByYW5nZXNUb1JlbW92ZS5wdXNoKHtzdGFydDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLCBlbmQ6IHRva2Vucy5jdXJyZW50SW5kZXgoKSArIDF9KTtcbiAgICAgIH1cbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWl0aGVyIGEgbWV0aG9kIG9yIGEgZmllbGQuIFNraXAgdG8gdGhlIGlkZW50aWZpZXIgcGFydC5cbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBsZXQgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgIGxldCBpc0VTUHJpdmF0ZSA9IGZhbHNlO1xuICAgICAgbGV0IGlzRGVjbGFyZU9yQWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChpc0FjY2Vzc01vZGlmaWVyKHRva2Vucy5jdXJyZW50VG9rZW4oKSkpIHtcbiAgICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMSh0dC5fc3RhdGljKSkge1xuICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0Lmhhc2gpKSB7XG4gICAgICAgICAgaXNFU1ByaXZhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbnMubWF0Y2hlczEodHQuX2RlY2xhcmUpIHx8IHRva2Vucy5tYXRjaGVzMSh0dC5fYWJzdHJhY3QpKSB7XG4gICAgICAgICAgaXNEZWNsYXJlT3JBYnN0cmFjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3RhdGljICYmIHRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzdGF0aWMgYmxvY2ssIHNvIGRvbid0IHByb2Nlc3MgaXQgaW4gYW55IHNwZWNpYWwgd2F5LlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VTUHJpdmF0ZSkge1xuICAgICAgICAvLyBTdWNyYXNlIGRvZXNuJ3QgYXR0ZW1wdCB0byB0cmFuc3BpbGUgcHJpdmF0ZSBmaWVsZHM7IGp1c3QgbGVhdmUgdGhlbSBhcy1pcy5cbiAgICAgICAgc2tpcFRvTmV4dENsYXNzRWxlbWVudCh0b2tlbnMsIGNsYXNzQ29udGV4dElkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmXG4gICAgICAgICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgKHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9ID0gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZVN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBza2lwRmllbGROYW1lKHRva2Vucyk7XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0Lmxlc3NUaGFuKSB8fCB0b2tlbnMubWF0Y2hlczEodHQucGFyZW5MKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kLCBzbyBub3RoaW5nIHRvIHByb2Nlc3MuXG4gICAgICAgIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSB0eXBlIGFubm90YXRpb24gdGhhdCB3ZSBuZWVkIHRvIHNraXAuXG4gICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICB9XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0LmVxKSkge1xuICAgICAgICBjb25zdCBlcXVhbHNJbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbml0aWFsaXplciwgc28gd2UgbmVlZCB0byB3cmFwIGluIGFuIGluaXRpYWxpemVyIG1ldGhvZC5cbiAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmICh2YWx1ZUVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcmhzRW5kSW5kZXggb24gY2xhc3MgZmllbGQgYXNzaWdubWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgdmFsdWVFbmQpIHtcbiAgICAgICAgICByb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXRpYWxpemVyTmFtZTtcbiAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgaW5pdGlhbGl6ZXJOYW1lID0gbmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9faW5pdFN0YXRpY1wiKTtcbiAgICAgICAgICBzdGF0aWNJbml0aWFsaXplck5hbWVzLnB1c2goaW5pdGlhbGl6ZXJOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUgPSBuYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX19pbml0XCIpO1xuICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5wdXNoKGluaXRpYWxpemVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmllbGRzIHN0YXJ0IGF0IHRoZSBuYW1lLCBzbyBgc3RhdGljIHggPSAxO2AgaGFzIGEgZmllbGQgcmFuZ2Ugb2YgYHggPSAxO2AuXG4gICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUsXG4gICAgICAgICAgZXF1YWxzSW5kZXgsXG4gICAgICAgICAgc3RhcnQ6IG5hbWVTdGFydEluZGV4LFxuICAgICAgICAgIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMgfHwgaXNEZWNsYXJlT3JBYnN0cmFjdCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBmaWVsZCBkZWNsYXJhdGlvbiwgbGlrZSBgeDtgLiBXaXRoIHRoZSBjbGFzcyB0cmFuc2Zvcm0gZW5hYmxlZCwgd2UganVzdFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxpbmUgc28gdGhhdCBubyBvdXRwdXQgaXMgcHJvZHVjZWQuIFdpdGggdGhlIGNsYXNzIHRyYW5zZm9ybSBkaXNhYmxlZCwgd2VcbiAgICAgICAgLy8gdXN1YWxseSB3YW50IHRvIHByZXNlcnZlIHRoZSBkZWNsYXJhdGlvbiAoYnV0IHN0aWxsIHN0cmlwIHR5cGVzKSwgYnV0IGlmIHRoZSBgZGVjbGFyZWBcbiAgICAgICAgLy8gb3IgYGFic3RyYWN0YCBrZXl3b3JkIGlzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZSB0byBhdm9pZCBpbml0aWFsaXppbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHN0YXRlbWVudFN0YXJ0SW5kZXgsIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9rZW5zLnJlc3RvcmVUb1NuYXBzaG90KHNuYXBzaG90KTtcbiAgaWYgKGRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAvLyBXaXRoIEVTIHRyYW5zZm9ybXMgZGlzYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gdHJhbnNmb3JtIHJlZ3VsYXIgY2xhc3NcbiAgICAvLyBmaWVsZCBkZWNsYXJhdGlvbnMsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHRyaWNrcyB0b1xuICAgIC8vIHJlZmVyZW5jZSB0aGUgY29uc3RydWN0b3IgZm9yIHN0YXRpYyBpbml0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byB0cmFuc2Zvcm1cbiAgICAvLyBUeXBlU2NyaXB0IGZpZWxkIGluaXRpYWxpemVycyBkZWZpbmVkIGFzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgYW5kIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byByZW1vdmUgYGRlY2xhcmVgIGZpZWxkcy4gRm9yIG5vdywgd2UgcnVuIHRoZSBzYW1lIGNvZGVcbiAgICAvLyBwYXRoIGJ1dCBvbWl0IGFueSBmaWVsZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlIGNsYXNzIGhhZCBubyBmaWVsZFxuICAgIC8vIGRlY2xhcmF0aW9ucy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSBmdWxseSBkcm9wIHRoZSBjbGFzcyBmaWVsZHNcbiAgICAvLyB0cmFuc2Zvcm0sIHdlIGNhbiBzaW1wbGlmeSB0aGlzIGNvZGUgc2lnbmlmaWNhbnRseS5cbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzOiBbXSxcbiAgICAgIHN0YXRpY0luaXRpYWxpemVyTmFtZXM6IFtdLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zLFxuICAgICAgZmllbGRzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1vdmUgdGhlIHRva2VuIHByb2Nlc3NvciB0byB0aGUgbmV4dCBtZXRob2QvZmllbGQgaW4gdGhlIGNsYXNzLlxuICpcbiAqIFRvIGRvIHRoYXQsIHdlIHNlZWsgZm9yd2FyZCB0byB0aGUgbmV4dCBzdGFydCBvZiBhIGNsYXNzIG5hbWUgKGVpdGhlciBhbiBvcGVuXG4gKiBicmFja2V0IG9yIGFuIGlkZW50aWZpZXIsIG9yIHRoZSBjbG9zaW5nIGN1cmx5IGJyYWNlKSwgdGhlbiBzZWVrIGJhY2t3YXJkIHRvXG4gKiBpbmNsdWRlIGFueSBhY2Nlc3MgbW9kaWZpZXJzLlxuICovXG5mdW5jdGlvbiBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpIHtcbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB3aGlsZSAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCAhPT0gY2xhc3NDb250ZXh0SWQpIHtcbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgd2hpbGUgKGlzQWNjZXNzTW9kaWZpZXIodG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKSkpIHtcbiAgICB0b2tlbnMucHJldmlvdXNUb2tlbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDbGFzc0hlYWRlcih0b2tlbnMpIHtcbiAgY29uc3QgY2xhc3NUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgY29uc3QgY29udGV4dElkID0gY2xhc3NUb2tlbi5jb250ZXh0SWQ7XG4gIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNvbnRleHQgSUQgb24gY2xhc3MgdG9rZW4uXCIpO1xuICB9XG4gIGNvbnN0IGlzRXhwcmVzc2lvbiA9IGNsYXNzVG9rZW4uaXNFeHByZXNzaW9uO1xuICBpZiAoaXNFeHByZXNzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpc0V4cHJlc3Npb24gb24gY2xhc3MgdG9rZW4uXCIpO1xuICB9XG4gIGxldCBjbGFzc05hbWUgPSBudWxsO1xuICBsZXQgaGFzU3VwZXJjbGFzcyA9IGZhbHNlO1xuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQubmFtZSkpIHtcbiAgICBjbGFzc05hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgfVxuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VMLCBjb250ZXh0SWQpKSB7XG4gICAgLy8gSWYgdGhpcyBoYXMgYSBzdXBlcmNsYXNzLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhbiBgZXh0ZW5kc2AgdG9rZW4uIElmIGl0IGRvZXNuJ3QgaGF2ZSBhXG4gICAgLy8gc3VwZXJjbGFzcywgb25seSB0eXBlIHBhcmFtZXRlcnMgYW5kIGBpbXBsZW1lbnRzYCBjbGF1c2VzIGNhbiBzaG93IHVwIGhlcmUsIGFsbCBvZiB3aGljaFxuICAgIC8vIGNvbnNpc3Qgb25seSBvZiB0eXBlIHRva2Vucy4gQSBkZWNsYXJhdGlvbiBsaWtlIGBjbGFzcyBBPEIgZXh0ZW5kcyBDPiB7YCBzaG91bGQgKm5vdCogY291bnRcbiAgICAvLyBhcyBoYXZpbmcgYSBzdXBlcmNsYXNzLlxuICAgIGlmICh0b2tlbnMubWF0Y2hlczEodHQuX2V4dGVuZHMpICYmICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICBoYXNTdXBlcmNsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIHJldHVybiB7aXNFeHByZXNzaW9uLCBjbGFzc05hbWUsIGhhc1N1cGVyY2xhc3N9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBhIGNvbnN0cnVjdG9yLCBzdGFydGluZyBhdCB0aGUgXCJjb25zdHJ1Y3RvclwiIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb25zdHJ1Y3Rvcih0b2tlbnMpXG5cblxuIHtcbiAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMgPSBbXTtcblxuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ29udGV4dElkID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgaWYgKGNvbnN0cnVjdG9yQ29udGV4dElkID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjb250ZXh0IElEIG9uIG9wZW4tcGFyZW4gc3RhcnRpbmcgY29uc3RydWN0b3IgcGFyYW1zLlwiKTtcbiAgfVxuICAvLyBBZHZhbmNlIHRocm91Z2ggcGFyYW1ldGVycyBsb29raW5nIGZvciBhY2Nlc3MgbW9kaWZpZXJzLlxuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQucGFyZW5SLCBjb25zdHJ1Y3RvckNvbnRleHRJZCkpIHtcbiAgICBpZiAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29uc3RydWN0b3JDb250ZXh0SWQpIHtcbiAgICAgIC8vIEN1cnJlbnQgdG9rZW4gaXMgYW4gb3BlbiBwYXJlbiBvciBjb21tYSBqdXN0IGJlZm9yZSBhIHBhcmFtLCBzbyBjaGVja1xuICAgICAgLy8gdGhhdCBwYXJhbSBmb3IgYWNjZXNzIG1vZGlmaWVycy5cbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGlmIChpc0FjY2Vzc01vZGlmaWVyKHRva2Vucy5jdXJyZW50VG9rZW4oKSkpIHtcbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gdHQubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgYWZ0ZXIgYWNjZXNzIG1vZGlmaWVycyBpbiBjb25zdHJ1Y3RvciBhcmcuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLnB1c2goYHRoaXMuJHtuYW1lfSA9ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgIH1cbiAgfVxuICAvLyApXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgLy8gQ29uc3RydWN0b3IgdHlwZSBhbm5vdGF0aW9ucyBhcmUgaW52YWxpZCwgYnV0IHNraXAgdGhlbSBhbnl3YXkgc2luY2VcbiAgLy8gdGhleSdyZSBlYXN5IHRvIHNraXAuXG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcblxuICAvLyBBZHZhbmNlIHRocm91Z2ggYm9keSBsb29raW5nIGZvciBhIHN1cGVyIGNhbGwuXG4gIGxldCBmb3VuZFN1cGVyQ2FsbCA9IGZhbHNlO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VSLCBjb25zdHJ1Y3RvckNvbnRleHRJZCkpIHtcbiAgICBpZiAoIWZvdW5kU3VwZXJDYWxsICYmIHRva2Vucy5tYXRjaGVzMih0dC5fc3VwZXIsIHR0LnBhcmVuTCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGNvbnN0IHN1cGVyQ2FsbENvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoc3VwZXJDYWxsQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYSBjb250ZXh0IElEIG9uIHRoZSBzdXBlciBjYWxsXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LnBhcmVuUiwgc3VwZXJDYWxsQ29udGV4dElkKSkge1xuICAgICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgIGZvdW5kU3VwZXJDYWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIC8vIH1cbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuXG4gIHJldHVybiB7Y29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsIGNvbnN0cnVjdG9ySW5zZXJ0UG9zfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbnkgdG9rZW4gdGhhdCBjYW4gZ28gYmVmb3JlIHRoZSBuYW1lIGluIGEgbWV0aG9kL2ZpZWxkLlxuICovXG5mdW5jdGlvbiBpc0FjY2Vzc01vZGlmaWVyKHRva2VuKSB7XG4gIHJldHVybiBbXG4gICAgdHQuX2FzeW5jLFxuICAgIHR0Ll9nZXQsXG4gICAgdHQuX3NldCxcbiAgICB0dC5wbHVzLFxuICAgIHR0Lm1pbnVzLFxuICAgIHR0Ll9yZWFkb25seSxcbiAgICB0dC5fc3RhdGljLFxuICAgIHR0Ll9wdWJsaWMsXG4gICAgdHQuX3ByaXZhdGUsXG4gICAgdHQuX3Byb3RlY3RlZCxcbiAgICB0dC5fb3ZlcnJpZGUsXG4gICAgdHQuX2Fic3RyYWN0LFxuICAgIHR0LnN0YXIsXG4gICAgdHQuX2RlY2xhcmUsXG4gICAgdHQuaGFzaCxcbiAgXS5pbmNsdWRlcyh0b2tlbi50eXBlKTtcbn1cblxuLyoqXG4gKiBUaGUgbmV4dCB0b2tlbiBvciBzZXQgb2YgdG9rZW5zIGlzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGFuIGV4cHJlc3Npb24gaW4gc3F1YXJlIGJyYWNrZXRzLCBmb3JcbiAqIGEgbWV0aG9kIG9yIGZpZWxkIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHNraXBGaWVsZE5hbWUodG9rZW5zKSB7XG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQuYnJhY2tldEwpKSB7XG4gICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCBjbGFzc0NvbnRleHRJZCA9IHN0YXJ0VG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjbGFzcyBjb250ZXh0IElEIG9uIGNvbXB1dGVkIG5hbWUgb3BlbiBicmFja2V0LlwiKTtcbiAgICB9XG4gICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNrZXRSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9IGVsc2Uge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVsaWRlSW1wb3J0RXF1YWxzKHRva2Vucykge1xuICAvLyBpbXBvcnRcbiAgdG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAvLyBuYW1lXG4gIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAvLyA9XG4gIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAvLyBuYW1lIG9yIHJlcXVpcmVcbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vIEhhbmRsZSBlaXRoZXIgYGltcG9ydCBBID0gcmVxdWlyZSgnQScpYCBvciBgaW1wb3J0IEEgPSBCLkMuRGAuXG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQucGFyZW5MKSkge1xuICAgIC8vIChcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAvLyBwYXRoIHN0cmluZ1xuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIC8vIClcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAodG9rZW5zLm1hdGNoZXMxKHR0LmRvdCkpIHtcbiAgICAgIC8vIC5cbiAgICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gbmFtZVxuICAgICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtpc1RvcExldmVsRGVjbGFyYXRpb259IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5cblxuXG5cblxuZXhwb3J0IGNvbnN0IEVNUFRZX0RFQ0xBUkFUSU9OX0lORk8gPSB7XG4gIHR5cGVEZWNsYXJhdGlvbnM6IG5ldyBTZXQoKSxcbiAgdmFsdWVEZWNsYXJhdGlvbnM6IG5ldyBTZXQoKSxcbn07XG5cbi8qKlxuICogR2V0IGFsbCB0b3AtbGV2ZWwgaWRlbnRpZmllcnMgdGhhdCBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gZXhwb3J0ZWQgaW4gVHlwZVNjcmlwdC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYW4gaWRlbnRpZmllciBpcyBkZWNsYXJlZCBhcyBgY29uc3QgeGAsIHRoZW4gYGV4cG9ydCB7eH1gIHNob3VsZCBiZSBwcmVzZXJ2ZWQuXG4gKiAtIElmIGl0J3MgZGVjbGFyZWQgYXMgYHR5cGUgeGAsIHRoZW4gYGV4cG9ydCB7eH1gIHNob3VsZCBiZSByZW1vdmVkLlxuICogLSBJZiBpdCdzIGRlY2xhcmVkIGFzIGJvdGggYGNvbnN0IHhgIGFuZCBgdHlwZSB4YCwgdGhlbiB0aGUgZXhwb3J0IHNob3VsZCBiZSBwcmVzZXJ2ZWQuXG4gKiAtIENsYXNzZXMgYW5kIGVudW1zIHNob3VsZCBiZSBwcmVzZXJ2ZWQgKGV2ZW4gdGhvdWdoIHRoZXkgYWxzbyBpbnRyb2R1Y2UgdHlwZXMpLlxuICogLSBJbXBvcnRlZCBpZGVudGlmaWVycyBzaG91bGQgYmUgcHJlc2VydmVkIHNpbmNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvXG4gKiAgIHJ1bGUgdGhlbSBvdXQuIC0taXNvbGF0ZWRNb2R1bGVzIGRpc2FsbG93cyByZS1leHBvcnRzLCB3aGljaCBjYXRjaGVzIGVycm9ycyBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHZhbHVlRGVjbGFyYXRpb25zID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IHR0Lm5hbWUgJiYgaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSkge1xuICAgICAgaWYgKHRva2VuLmlzVHlwZSkge1xuICAgICAgICB0eXBlRGVjbGFyYXRpb25zLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVEZWNsYXJhdGlvbnMuYWRkKHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7dHlwZURlY2xhcmF0aW9ucywgdmFsdWVEZWNsYXJhdGlvbnN9O1xufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGBleHBvcnQge2AsIGxvb2sgYWhlYWQgYW5kIHJldHVybiBgdHJ1ZWAgaWYgdGhpcyBpcyBhblxuICogYGV4cG9ydCB7Li4ufSBmcm9tYCBzdGF0ZW1lbnQgYW5kIGBmYWxzZWAgaWYgdGhpcyBpcyBhIHBsYWluIG11bHRpLWV4cG9ydC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNFeHBvcnRGcm9tKHRva2Vucykge1xuICBsZXQgY2xvc2VCcmFjZUluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4LCB0dC5icmFjZVIpKSB7XG4gICAgY2xvc2VCcmFjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGNsb3NlQnJhY2VJbmRleCArIDEsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMiwgdHQuc3RyaW5nKVxuICApO1xufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGEgcG90ZW50aWFsIGB3aXRoYCBvciAobGVnYWN5KSBgYXNzZXJ0YCB0b2tlbiwgcmVtb3ZlIHRoZSBpbXBvcnRcbiAqIGF0dHJpYnV0ZXMgaWYgdGhleSBleGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0b2tlbnMpIHtcbiAgaWYgKFxuICAgIHRva2Vucy5tYXRjaGVzMih0dC5fd2l0aCwgdHQuYnJhY2VMKSB8fFxuICAgICh0b2tlbnMubWF0Y2hlczIodHQubmFtZSwgdHQuYnJhY2VMKSAmJiB0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydCkpXG4gICkge1xuICAgIC8vIGFzc2VydFxuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIC8vIHtcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB0b2tlbnMucmVtb3ZlQmFsYW5jZWRDb2RlKCk7XG4gICAgLy8gfVxuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cblxuXG4vKipcbiAqIENvbW1vbiBtZXRob2Qgc2hhcmluZyBjb2RlIGJldHdlZW4gQ0pTIGFuZCBFU00gY2FzZXMsIHNpbmNlIHRoZXkncmUgdGhlIHNhbWUgaGVyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KFxuICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgdG9rZW5zLFxuICBkZWNsYXJhdGlvbkluZm8sXG4pIHtcbiAgaWYgKCFpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkIHx8IGtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydFRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBpZiAoZXhwb3J0VG9rZW4ucmhzRW5kSW5kZXggPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIHJoc0VuZEluZGV4IG9uIGV4cG9ydCB0b2tlbi5cIik7XG4gIH1cbiAgLy8gVGhlIGV4cG9ydCBtdXN0IGJlIG9mIHRoZSBmb3JtIGBleHBvcnQgZGVmYXVsdCBhYCBvciBgZXhwb3J0IGRlZmF1bHQgYTtgLlxuICBjb25zdCBudW1Ub2tlbnMgPSBleHBvcnRUb2tlbi5yaHNFbmRJbmRleCAtIHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgaWYgKFxuICAgIG51bVRva2VucyAhPT0gMyAmJlxuICAgICEobnVtVG9rZW5zID09PSA0ICYmIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoZXhwb3J0VG9rZW4ucmhzRW5kSW5kZXggLSAxLCB0dC5zZW1pKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgyKTtcbiAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gIHJldHVybiAoXG4gICAgZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKGV4cG9ydGVkTmFtZSkgJiZcbiAgICAhZGVjbGFyYXRpb25JbmZvLnZhbHVlRGVjbGFyYXRpb25zLmhhcyhleHBvcnRlZE5hbWUpXG4gICk7XG59XG4iLCAiXG5cblxuaW1wb3J0IHtJZGVudGlmaWVyUm9sZSwgaXNEZWNsYXJhdGlvbiwgaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbn0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGVsaWRlSW1wb3J0RXF1YWxzIGZyb20gXCIuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzXCI7XG5pbXBvcnQgZ2V0RGVjbGFyYXRpb25JbmZvLCB7XG5cbiAgRU1QVFlfREVDTEFSQVRJT05fSU5GTyxcbn0gZnJvbSBcIi4uL3V0aWwvZ2V0RGVjbGFyYXRpb25JbmZvXCI7XG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5pbXBvcnQgaXNFeHBvcnRGcm9tIGZyb20gXCIuLi91dGlsL2lzRXhwb3J0RnJvbVwiO1xuaW1wb3J0IHtyZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXN9IGZyb20gXCIuLi91dGlsL3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlc1wiO1xuaW1wb3J0IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCBmcm9tIFwiLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnRcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuLyoqXG4gKiBDbGFzcyBmb3IgZWRpdGluZyBpbXBvcnQgc3RhdGVtZW50cyB3aGVuIHdlIGFyZSB0cmFuc2Zvcm1pbmcgdG8gY29tbW9uanMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENKU0ltcG9ydFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICAgX19pbml0KCkge3RoaXMuaGFkRXhwb3J0ID0gZmFsc2V9XG4gICBfX2luaXQyKCkge3RoaXMuaGFkTmFtZWRFeHBvcnQgPSBmYWxzZX1cbiAgIF9faW5pdDMoKSB7dGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gZmFsc2V9XG4gIFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3AsXG4gICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gICAgIGlzRmxvd1RyYW5zZm9ybUVuYWJsZWQsXG4gICAgIHByZXNlcnZlRHluYW1pY0ltcG9ydCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyO3RoaXMuaGVscGVyTWFuYWdlciA9IGhlbHBlck1hbmFnZXI7dGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyID0gcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcjt0aGlzLmVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AgPSBlbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wO3RoaXMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3AgPSBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcDt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMuaXNGbG93VHJhbnNmb3JtRW5hYmxlZCA9IGlzRmxvd1RyYW5zZm9ybUVuYWJsZWQ7dGhpcy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQgPSBwcmVzZXJ2ZUR5bmFtaWNJbXBvcnQ7dGhpcy5rZWVwVW51c2VkSW1wb3J0cyA9IGtlZXBVbnVzZWRJbXBvcnRzO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtDSlNJbXBvcnRUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7O1xuICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvID0gaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZFxuICAgICAgPyBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKVxuICAgICAgOiBFTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICB9XG5cbiAgZ2V0UHJlZml4Q29kZSgpIHtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBpZiAodGhpcy5oYWRFeHBvcnQpIHtcbiAgICAgIHByZWZpeCArPSAnT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsnO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wICYmIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCAmJiAhdGhpcy5oYWROYW1lZEV4cG9ydCkge1xuICAgICAgcmV0dXJuIFwiXFxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5faW1wb3J0LCB0dC5uYW1lLCB0dC5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9pbXBvcnQpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2V4cG9ydCkgJiYgIXRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy5oYWRFeHBvcnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V4cG9ydCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQubmFtZSwgdHQucG9zdEluY0RlYykpIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgaWRlbnRpZmllciBtYXRjaGluZyBpZiB0aGlzIGRvZXNuJ3QgYXBwbHkuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzUG9zdEluY0RlYygpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQubmFtZSkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4TmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NpZ25tZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5hc3NpZ24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ29tcGxleEFzc2lnbm1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnByZUluY0RlYykpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NQcmVJbmNEZWMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnRFcXVhbHMoKSB7XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIGlmICh0aGlzLmltcG9ydFByb2Nlc3Nvci5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUoaW1wb3J0TmFtZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgbmFtZSBpcyBvbmx5IHVzZWQgYXMgYSB0eXBlLCBlbGlkZSB0aGUgd2hvbGUgaW1wb3J0LlxuICAgICAgZWxpZGVJbXBvcnRFcXVhbHModGhpcy50b2tlbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGlzOlxuICAgKiBpbXBvcnQgZm9vLCB7YmFyfSBmcm9tICdiYXonO1xuICAgKiBpbnRvXG4gICAqIHZhciBfYmF6ID0gcmVxdWlyZSgnYmF6Jyk7IHZhciBfYmF6MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jheik7XG4gICAqXG4gICAqIFRoZSBpbXBvcnQgY29kZSB3YXMgYWxyZWFkeSBnZW5lcmF0ZWQgaW4gdGhlIGltcG9ydCBwcmVwcm9jZXNzaW5nIHN0ZXAsIHNvXG4gICAqIHdlIGp1c3QgbmVlZCB0byBsb29rIGl0IHVwLlxuICAgKi9cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9pbXBvcnQsIHR0LnBhcmVuTCkpIHtcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlRHluYW1pY0ltcG9ydCkge1xuICAgICAgICAvLyBCYWlsIG91dCwgb25seSBtYWtpbmcgcHJvZ3Jlc3MgZm9yIHRoaXMgb25lIHRva2VuLlxuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWlyZVdyYXBwZXIgPSB0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wXG4gICAgICAgID8gXCJcIlxuICAgICAgICA6IGAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiKX0oYDtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAke3JlcXVpcmVXcmFwcGVyfXJlcXVpcmVgKTtcbiAgICAgIGNvbnN0IGNvbnRleHRJZCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjb250ZXh0IElEIG9uIGR5bmFtaWMgaW1wb3J0IGludm9jYXRpb24uXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0dC5wYXJlblIsIGNvbnRleHRJZCkpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4ocmVxdWlyZVdyYXBwZXIgPyBcIikpKVwiIDogXCIpKVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFbGlkZUltcG9ydCA9IHRoaXMucmVtb3ZlSW1wb3J0QW5kRGV0ZWN0SWZTaG91bGRFbGlkZSgpO1xuICAgIGlmIChzaG91bGRFbGlkZUltcG9ydCkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgfVxuICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFcmFzZSB0aGlzIGltcG9ydCAoc2luY2UgYW55IENKUyBvdXRwdXQgd291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQpLCBhbmRcbiAgICogcmV0dXJuIHRydWUgaWYgdGhpcyBpbXBvcnQgaXMgc2hvdWxkIGJlIGVsaWRlZCBkdWUgdG8gYmVpbmcgYSB0eXBlLW9ubHlcbiAgICogaW1wb3J0LiBTdWNoIGltcG9ydHMgd2lsbCBub3QgYmUgZW1pdHRlZCBhdCBhbGwgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBJbXBvcnQgZWxpc2lvbiBvbmx5IGhhcHBlbnMgd2l0aCB0aGUgVHlwZVNjcmlwdCBvciBGbG93IHRyYW5zZm9ybXMgZW5hYmxlZC5cbiAgICpcbiAgICogVE9ETzogVGhpcyBmdW5jdGlvbiBoYXMgc29tZSBhd2t3YXJkIG92ZXJsYXAgd2l0aFxuICAgKiAgQ0pTSW1wb3J0UHJvY2Vzc29yLnBydW5lVHlwZU9ubHlJbXBvcnRzICwgYW5kIHRoZSB0d28gc2hvdWxkIGJlIHVuaWZpZWQuXG4gICAqICBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgVHlwZVNjcmlwdCBpbXBsaWNpdCBpbXBvcnQgbmFtZSBlbGlzaW9uLCBhbmQgcmVtb3Zlc1xuICAgKiAgYW4gaW1wb3J0IGlmIGFsbCB0eXBpY2FsIGltcG9ydGVkIG5hbWVzICh3aXRob3V0IGB0eXBlYCkgYXJlIHJlbW92ZWQgZHVlXG4gICAqICB0byBiZWluZyB0eXBlLW9ubHkgaW1wb3J0cy4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIEZsb3cgaW1wb3J0IHJlbW92YWwgYW5kXG4gICAqICBwcm9wZXJseSBkaXN0aW5ndWlzaGVzIGBpbXBvcnQgJ2ZvbydgIGZyb20gYGltcG9ydCB7fSBmcm9tICdmb28nYCBmb3IgVFNcbiAgICogIHB1cnBvc2VzLlxuICAgKlxuICAgKiBUaGUgcG9zaXRpb24gc2hvdWxkIGVuZCBhdCB0aGUgaW1wb3J0IHN0cmluZy5cbiAgICovXG4gICByZW1vdmVJbXBvcnRBbmREZXRlY3RJZlNob3VsZEVsaWRlKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIHR0LmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBcImltcG9ydCB0eXBlXCIgc3RhdGVtZW50LCBzbyBleGl0IGVhcmx5LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5uYW1lKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdGFyKSkge1xuICAgICAgLy8gV2UgaGF2ZSBhIGRlZmF1bHQgaW1wb3J0IG9yIG5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXJlIG11c3QgYmUgc29tZVxuICAgICAgLy8gbm9uLXR5cGUgaW1wb3J0LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kTm9uVHlwZUltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBmb3VuZEFueU5hbWVkSW1wb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdHJpbmcpKSB7XG4gICAgICAvLyBDaGVjayBpZiBhbnkgbmFtZWQgaW1wb3J0cyBhcmUgb2YgdGhlIGZvcm0gXCJmb29cIiBvciBcImZvbyBhcyBiYXJcIiwgd2l0aFxuICAgICAgLy8gbm8gbGVhZGluZyBcInR5cGVcIi5cbiAgICAgIGlmIChcbiAgICAgICAgKCFmb3VuZE5vblR5cGVJbXBvcnQgJiYgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpKSB7XG4gICAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0LmNvbW1hKSB8fFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0LmJyYWNlUikgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5jb21tYSkgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5icmFjZVIpXG4gICAgICAgICkge1xuICAgICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBJbiBGbG93LCB1bmxpa2UgVFMsIGBpbXBvcnQge30gZnJvbSAnZm9vJztgIHByZXNlcnZlcyB0aGUgaW1wb3J0LlxuICAgICAgcmV0dXJuIGZvdW5kQW55TmFtZWRJbXBvcnQgJiYgIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICByZW1vdmVSZW1haW5pbmdJbXBvcnQoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdHJpbmcpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGlmICh0b2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPYmplY3RTaG9ydGhhbmQoKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4uaWRlbnRpZmllclJvbGUgIT09IElkZW50aWZpZXJSb2xlLkFjY2Vzcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pLFxuICAgICk7XG4gICAgaWYgKCFyZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUb2xlcmF0ZSBhbnkgbnVtYmVyIG9mIGNsb3NpbmcgcGFyZW5zIHdoaWxlIGxvb2tpbmcgZm9yIGFuIG9wZW5pbmcgcGFyZW5cbiAgICAvLyB0aGF0IGluZGljYXRlcyBhIGZ1bmN0aW9uIGNhbGwuXG4gICAgbGV0IHBvc3NpYmxlT3BlblBhcmVuSW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7XG4gICAgd2hpbGUgKFxuICAgICAgcG9zc2libGVPcGVuUGFyZW5JbmRleCA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiZcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1twb3NzaWJsZU9wZW5QYXJlbkluZGV4XS50eXBlID09PSB0dC5wYXJlblJcbiAgICApIHtcbiAgICAgIHBvc3NpYmxlT3BlblBhcmVuSW5kZXgrKztcbiAgICB9XG4gICAgLy8gQXZvaWQgdHJlYXRpbmcgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzIG1ldGhvZHMgb2YgdGhlaXIgYGV4cG9ydHNgIG9iamVjdFxuICAgIC8vIGJ5IHVzaW5nIGAoMCwgZilgIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgaW4gYSBwYXJlbiBleHByZXNzaW9uLiBFbHNlXG4gICAgLy8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbGAgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBhIGd1YXJhbnRlZWRcbiAgICAvLyBmdW5jdGlvbiBjYWxsLiBXaGVuIHVzaW5nIGBjYWxsYCwgcGFzcyB1bmRlZmluZWQgYXMgdGhlIGNvbnRleHQuXG4gICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1twb3NzaWJsZU9wZW5QYXJlbkluZGV4XS50eXBlID09PSB0dC5wYXJlbkwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkudHlwZSA9PT0gdHQucGFyZW5MICYmXG4gICAgICAgIHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKS50eXBlICE9PSB0dC5fbmV3XG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3JlcGxhY2VtZW50fS5jYWxsKHZvaWQgMCwgYCk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkIHBhcmVuLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAvLyBCYWxhbmNlIG91dCB0aGUgbmV3IHBhcmVuLlxuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuUik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWUgaGVyZTogaHR0cDovLzJhbGl0eS5jb20vMjAxNS8xMi9yZWZlcmVuY2VzLmh0bWxcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtyZXBsYWNlbWVudH0pYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihyZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvY2Vzc09iamVjdFNob3J0aGFuZCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtpZGVudGlmaWVyfTogJHtyZXBsYWNlbWVudH1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb2Nlc3NFeHBvcnQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX2VudW0pIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fY29uc3QsIHR0Ll9lbnVtKVxuICAgICkge1xuICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAvLyBMZXQgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGhhbmRsZSBpdC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0KSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZW51bSkpIHtcbiAgICAgICAgdGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICAgICAgLy8gRmxvdyBleHBvcnQgZGVmYXVsdCBlbnVtcyBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZywgc28gaGFuZGxlIHRoZW1cbiAgICAgICAgLy8gaW4gdGhhdCB0cmFuZm9ybSByYXRoZXIgdGhhbiB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzRXhwb3J0RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5icmFjZUwpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRCaW5kaW5ncygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthfTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthIGFzIGJ9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9IGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJy4vYic7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkge1xuICAgICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAqXG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fYXMpKSB7XG4gICAgICAgICAgLy8gYXNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vIG5zXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHR5cGUgcmUtZXhwb3J0IGAuLi4gfSBmcm9tICcuL1QnYFxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgdHQuc3RyaW5nKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX3ZhcikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9sZXQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fY29uc3QpXG4gICAgKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRWYXIoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fZnVuY3Rpb24pIHx8XG4gICAgICAvLyBleHBvcnQgYXN5bmMgZnVuY3Rpb25cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9leHBvcnQsIHR0Lm5hbWUsIHR0Ll9mdW5jdGlvbilcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX2NsYXNzKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuX2V4cG9ydCwgdHQuX2Fic3RyYWN0LCB0dC5fY2xhc3MpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5hdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydENsYXNzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LnN0YXIpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRTdGFyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGV4cG9ydCBzeW50YXguXCIpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzQXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIC8vIElmIHRoZSBMSFMgaXMgYSB0eXBlIGlkZW50aWZpZXIsIHRoaXMgbXVzdCBiZSBhIGRlY2xhcmF0aW9uIGxpa2UgYGxldCBhOiBiID0gYztgLFxuICAgIC8vIHdpdGggYGJgIGFzIHRoZSBpZGVudGlmaWVyLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhhdCBjYXNlLlxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uaXNUeXBlIHx8IGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCB0dC5kb3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAyICYmIFt0dC5fdmFyLCB0dC5fbGV0LCB0dC5fY29uc3RdLmluY2x1ZGVzKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDJdLnR5cGUpKSB7XG4gICAgICAvLyBEZWNsYXJhdGlvbnMgZG9uJ3QgbmVlZCBhbiBleHRyYSBhc3NpZ25tZW50LiBUaGlzIGRvZXNuJ3QgYXZvaWQgdGhlXG4gICAgICAvLyBhc3NpZ25tZW50IGZvciBjb21tYS1zZXBhcmF0ZWQgZGVjbGFyYXRpb25zLCBidXQgaXQncyBzdGlsbCBjb3JyZWN0XG4gICAgICAvLyBzaW5jZSB0aGUgYXNzaWdubWVudCBpcyBqdXN0IHJlZHVuZGFudC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKSxcbiAgICApO1xuICAgIGlmICghYXNzaWdubWVudFNuaXBwZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7YXNzaWdubWVudFNuaXBwZXR9ID1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHNvbWV0aGluZyBsaWtlIGBhICs9IDNgLCB3aGVyZSBgYWAgbWlnaHQgYmUgYW4gZXhwb3J0ZWQgdmFsdWUuXG4gICAqL1xuICAgcHJvY2Vzc0NvbXBsZXhBc3NpZ25tZW50KCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgY29uc3QgaWRlbnRpZmllclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4IC0gMV07XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCB0dC5kb3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFzc2lnbm1lbnRTbmlwcGV0ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IucmVzb2x2ZUV4cG9ydEJpbmRpbmcoXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbiksXG4gICAgKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCA9ICR7YXNzaWdubWVudFNuaXBwZXR9YCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgKythYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKi9cbiAgIHByb2Nlc3NQcmVJbmNEZWMoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggKyAxXTtcbiAgICBpZiAoaWRlbnRpZmllclRva2VuLnR5cGUgIT09IHR0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIElnbm9yZSB0aGluZ3MgbGlrZSArK2EuYiBhbmQgKythW2JdIGFuZCArK2EoKS5iLlxuICAgIGlmIChcbiAgICAgIGluZGV4ICsgMiA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiZcbiAgICAgICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAyLCB0dC5kb3QpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIHR0LmJyYWNrZXRMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAyLCB0dC5wYXJlbkwpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKTtcbiAgICBjb25zdCBhc3NpZ25tZW50U25pcHBldCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLnJlc29sdmVFeHBvcnRCaW5kaW5nKGlkZW50aWZpZXJOYW1lKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7YXNzaWdubWVudFNuaXBwZXR9ID0gYCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgYSsrYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKiBUaGlzIHN0YXJ0cyBhdCB0aGUgYGFgLCBub3QgYXQgdGhlIGArK2AuXG4gICAqL1xuICAgcHJvY2Vzc1Bvc3RJbmNEZWMoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgIGNvbnN0IG9wZXJhdG9yVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggKyAxXTtcbiAgICBpZiAoaWRlbnRpZmllclRva2VuLnR5cGUgIT09IHR0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAxICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDEsIHR0LmRvdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpZmllck5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhpZGVudGlmaWVyTmFtZSk7XG4gICAgaWYgKCFhc3NpZ25tZW50U25pcHBldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRvckNvZGUgPSB0aGlzLnRva2Vucy5yYXdDb2RlRm9yVG9rZW4ob3BlcmF0b3JUb2tlbik7XG4gICAgLy8gV2UgbWlnaHQgYWxzbyByZXBsYWNlIHRoZSBpZGVudGlmaWVyIHdpdGggc29tZXRoaW5nIGxpa2UgZXhwb3J0cy54LCBzb1xuICAgIC8vIGRvIHRoYXQgcmVwbGFjZW1lbnQgaGVyZSBhcyB3ZWxsLlxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoaWRlbnRpZmllck5hbWUpIHx8IGlkZW50aWZpZXJOYW1lO1xuICAgIGlmIChvcGVyYXRvckNvZGUgPT09IFwiKytcIikge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoJHtiYXNlfSA9ICR7YXNzaWdubWVudFNuaXBwZXR9ID0gJHtiYXNlfSArIDEsICR7YmFzZX0gLSAxKWApO1xuICAgIH0gZWxzZSBpZiAob3BlcmF0b3JDb2RlID09PSBcIi0tXCIpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgKCR7YmFzZX0gPSAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9ICR7YmFzZX0gLSAxLCAke2Jhc2V9ICsgMSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wZXJhdG9yOiAke29wZXJhdG9yQ29kZX1gKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0RGVmYXVsdCgpIHtcbiAgICBsZXQgZXhwb3J0ZWRSdW50aW1lVmFsdWUgPSB0cnVlO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChcbiAgICAgICAgICB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsXG4gICAgICAgICAgQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhwb3J0IGNhc2U6IGNoYW5nZSBpdCB0byBhIHRvcC1sZXZlbCBmdW5jdGlvblxuICAgICAgLy8gZGVjbGFyYXRpb24gZm9sbG93ZWQgYnkgZXhwb3J0cyBzdGF0ZW1lbnQuXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuZGVmYXVsdCA9ICR7bmFtZX07YCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fY2xhc3MsIHR0Lm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNSh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuX2Fic3RyYWN0LCB0dC5fY2xhc3MsIHR0Lm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuYXQpXG4gICAgKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2Fic3RyYWN0KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgZXhwb3J0cy5kZWZhdWx0ID0gJHtuYW1lfTtgKTtcbiAgICAgIC8vIEFmdGVyIHRoaXMgcG9pbnQsIHRoaXMgaXMgYSBwbGFpbiBcImV4cG9ydCBkZWZhdWx0IEVcIiBzdGF0ZW1lbnQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydChcbiAgICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICAgICB0aGlzLmtlZXBVbnVzZWRJbXBvcnRzLFxuICAgICAgICB0aGlzLnRva2VucyxcbiAgICAgICAgdGhpcy5kZWNsYXJhdGlvbkluZm8sXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBJZiB0aGUgZXhwb3J0ZWQgdmFsdWUgaXMganVzdCBhbiBpZGVudGlmaWVyIGFuZCBzaG91bGQgYmUgZWxpZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICAgIC8vIHJ1bGVzLCB0aGVuIHJlbW92ZSBpdCBlbnRpcmVseS4gSXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybSBgZXhwb3J0IGRlZmF1bHQgZWAsXG4gICAgICAvLyB3aGVyZSBgZWAgaXMgYW4gaWRlbnRpZmllci5cbiAgICAgIGV4cG9ydGVkUnVudGltZVZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGFzc2lnbiBFIHRvIGEgdmFyaWFibGUuIENoYW5nZSBcImV4cG9ydCBkZWZhdWx0IEVcIiB0b1xuICAgICAgLy8gXCJsZXQgX2RlZmF1bHQ7IGV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0ID0gRVwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9kZWZhdWx0XCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBsZXQgJHtkZWZhdWx0VmFyTmFtZX07IGV4cG9ydHMuYCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCA9ICR7ZGVmYXVsdFZhck5hbWV9ID1gKTtcbiAgICAgIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5zZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShkZWZhdWx0VmFyTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENoYW5nZSBcImV4cG9ydCBkZWZhdWx0IEVcIiB0byBcImV4cG9ydHMuZGVmYXVsdCA9IEVcIlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiZXhwb3J0cy5cIik7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgPVwiKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydGVkUnVudGltZVZhbHVlKSB7XG4gICAgICB0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICBjb3B5RGVjb3JhdG9ycygpIHtcbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYXQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5wYXJlbkwpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQucGFyZW5SKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0Lm5hbWUpO1xuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuZG90KSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LmRvdCk7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlbkwpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGRlY2xhcmF0aW9uIGxpa2UgYGV4cG9ydCB2YXJgLCBgZXhwb3J0IGxldGAsIG9yIGBleHBvcnQgY29uc3RgLlxuICAgKi9cbiAgIHByb2Nlc3NFeHBvcnRWYXIoKSB7XG4gICAgaWYgKHRoaXMuaXNTaW1wbGVFeHBvcnRWYXIoKSkge1xuICAgICAgdGhpcy5wcm9jZXNzU2ltcGxlRXhwb3J0VmFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc0NvbXBsZXhFeHBvcnRWYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBleHBvcnQgaXMgb2YgdGhlIGZvcm06XG4gICAqIGV4cG9ydCB2YXIvbGV0L2NvbnN0IFt2YXJOYW1lXSA9IFtleHByXTtcbiAgICogSW4gb3RoZXIgd29yZHMsIGRldGVybWluZSBpZiBmdW5jdGlvbiBuYW1lIGluZmVyZW5jZSBtaWdodCBhcHBseS5cbiAgICovXG4gICBpc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICBsZXQgdG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIC8vIGV4cG9ydFxuICAgIHRva2VuSW5kZXgrKztcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdG9rZW5JbmRleCsrO1xuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRva2VuSW5kZXgsIHR0Lm5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRva2VuSW5kZXgrKztcbiAgICB3aGlsZSAodG9rZW5JbmRleCA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiYgdGhpcy50b2tlbnMudG9rZW5zW3Rva2VuSW5kZXhdLmlzVHlwZSkge1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0b2tlbkluZGV4LCB0dC5lcSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGFuIGBleHBvcnQgdmFyYCBkZWNsYXJhdGlvbiBpbml0aWFsaXppbmcgYSBzaW5nbGUgdmFyaWFibGUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGlzOlxuICAgKiBleHBvcnQgY29uc3QgZiA9ICgpID0+IHt9O1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqIGNvbnN0IGYgPSAoKSA9PiB7fTsgZXhwb3J0cy5mID0gZjtcbiAgICpcbiAgICogVGhlIHZhcmlhYmxlIGlzIHVudXNlZCAoZS5nLiBleHBvcnRzLmYgaGFzIHRoZSB0cnVlIHZhbHVlIG9mIHRoZSBleHBvcnQpLlxuICAgKiBXZSBuZWVkIHRvIHByb2R1Y2UgYW4gYXNzaWdubWVudCBvZiB0aGlzIGZvcm0gc28gdGhhdCB0aGUgZnVuY3Rpb24gd2lsbFxuICAgKiBoYXZlIGFuIGluZmVycmVkIG5hbWUgb2YgXCJmXCIsIHdoaWNoIHdvdWxkbid0IGhhcHBlbiBpbiB0aGUgbW9yZSBnZW5lcmFsXG4gICAqIGNhc2UgYmVsb3cuXG4gICAqL1xuICAgcHJvY2Vzc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgY29uc3QgdmFyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgLy8geDogbnVtYmVyICAtPiAgeFxuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuZXEpKSB7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5yaHNFbmRJbmRleDtcbiAgICBpZiAoZW5kSW5kZXggPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgfVxuICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IGVuZEluZGV4KSB7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOyBleHBvcnRzLiR7dmFyTmFtZX0gPSAke3Zhck5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIG5vcm1hbCBkZWNsYXJhdGlvbiBleHBvcnRzLCBpbmNsdWRpbmcgaGFuZGxpbmcgZGVzdHJ1Y3R1cmluZy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXM6XG4gICAqIGV4cG9ydCBjb25zdCB7eDogW2EgPSAyLCBiXSwgY30gPSBkO1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqICh7eDogW2V4cG9ydHMuYSA9IDIsIGV4cG9ydHMuYl0sIGM6IGV4cG9ydHMuY30gPSBkOylcbiAgICovXG4gICBwcm9jZXNzQ29tcGxleEV4cG9ydFZhcigpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IG5lZWRzUGFyZW5zID0gdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKTtcbiAgICBpZiAobmVlZHNQYXJlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIoXCIpO1xuICAgIH1cblxuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5kb2xsYXJCcmFjZUwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRMKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRSKSkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGRlcHRoID09PSAwICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5uYW1lKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmVxKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHZhbHVlcyBtaWdodCBoYXZlIGFzc2lnbm1lbnRzIGluIHRoZSBSSFMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSwgc28gc2tpcCBwYXN0XG4gICAgICAgIC8vIHRoZW0uXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKGlzRGVjbGFyYXRpb24odG9rZW4pKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KG5hbWUpO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHJlcGxhY2VtZW50IGZvciAke25hbWV9IGluIFxcYGV4cG9ydCB2YXJcXGAgc3ludGF4LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbih0b2tlbikpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gYCR7bmFtZX06ICR7cmVwbGFjZW1lbnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1BhcmVucykge1xuICAgICAgLy8gU2VlayB0byB0aGUgZW5kIG9mIHRoZSBSSFMuXG4gICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgICAgaWYgKGVuZEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBlbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIGZvbygpIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogZnVuY3Rpb24gZm9vKCkge30gZXhwb3J0cy5mb28gPSBmb287XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCkge1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7bmFtZX0gPSAke25hbWV9O2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgcGFzdCBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGFuZCByZXR1cm4gdGhhdCBuYW1lLlxuICAgKi9cbiAgIHByb2Nlc3NOYW1lZEZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fZnVuY3Rpb24pKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0Ll9mdW5jdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBhc3luYyBrZXl3b3JkIGluIGZ1bmN0aW9uIGV4cG9ydC5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RhcikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpZGVudGlmaWVyIGZvciBleHBvcnRlZCBmdW5jdGlvbiBuYW1lLlwiKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuUik7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VMKTtcbiAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGNsYXNzIEEge31cbiAgICogaW50byB0aGlzOlxuICAgKiBjbGFzcyBBIHt9IGV4cG9ydHMuQSA9IEE7XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydENsYXNzKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHRoaXMuY29weURlY29yYXRvcnMoKTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2Fic3RyYWN0KSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtuYW1lfSA9ICR7bmFtZX07YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCB7YSwgYiBhcyBjfTtcbiAgICogaW50byB0aGlzOlxuICAgKiBleHBvcnRzLmEgPSBhOyBleHBvcnRzLmMgPSBiO1xuICAgKlxuICAgKiBPUlxuICAgKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IHthLCBiIGFzIGN9IGZyb20gJy4vZm9vJztcbiAgICogaW50byB0aGUgcHJlLWdlbmVyYXRlZCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIHRoZSBJbXBvcnRQcm9jZXNzb3IuXG4gICAqXG4gICAqIEZvciB0aGUgZmlyc3QgY2FzZSwgaWYgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gc2tpcFxuICAgKiBleHBvcnRzIHRoYXQgYXJlIG9ubHkgZGVmaW5lZCBhcyB0eXBlcy5cbiAgICovXG4gICBwcm9jZXNzRXhwb3J0QmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcblxuICAgIGNvbnN0IGlzUmVFeHBvcnQgPSBpc0V4cG9ydEZyb20odGhpcy50b2tlbnMpO1xuXG4gICAgY29uc3QgZXhwb3J0U3RhdGVtZW50cyA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMpO1xuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUV4cG9ydCA9XG4gICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICghaXNSZUV4cG9ydCAmJiB0aGlzLnNob3VsZEVsaWRlRXhwb3J0ZWRJZGVudGlmaWVyKHNwZWNpZmllckluZm8ubGVmdE5hbWUpKTtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlRXhwb3J0KSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHNwZWNpZmllckluZm8ucmlnaHROYW1lO1xuICAgICAgICBpZiAoZXhwb3J0ZWROYW1lID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gc3BlY2lmaWVySW5mby5sZWZ0TmFtZTtcbiAgICAgICAgY29uc3QgbmV3TG9jYWxOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGxvY2FsTmFtZSk7XG4gICAgICAgIGV4cG9ydFN0YXRlbWVudHMucHVzaChgZXhwb3J0cy4ke2V4cG9ydGVkTmFtZX0gPSAke25ld0xvY2FsTmFtZSB8fCBsb2NhbE5hbWV9O2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5jb21tYSwgdHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gZXhwb3J0Li4uZnJvbSwgc28gdGhyb3cgYXdheSB0aGUgbm9ybWFsIG5hbWVkIGV4cG9ydCBjb2RlXG4gICAgICAvLyBhbmQgdXNlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIEltcG9ydFByb2Nlc3Nvci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgbmFtZWQgZXhwb3J0LCBzbyB1c2UgdGhhdC5cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoZXhwb3J0U3RhdGVtZW50cy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0U3RhcigpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnRva2Vucy5zdHJpbmdWYWx1ZSgpO1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXModGhpcy50b2tlbnMpO1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zZW1pKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkRWxpZGVFeHBvcnRlZElkZW50aWZpZXIobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufVxuIiwgIlxuXG5cbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGVsaWRlSW1wb3J0RXF1YWxzIGZyb20gXCIuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzXCI7XG5pbXBvcnQgZ2V0RGVjbGFyYXRpb25JbmZvLCB7XG5cbiAgRU1QVFlfREVDTEFSQVRJT05fSU5GTyxcbn0gZnJvbSBcIi4uL3V0aWwvZ2V0RGVjbGFyYXRpb25JbmZvXCI7XG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5pbXBvcnQge2dldE5vblR5cGVJZGVudGlmaWVyc30gZnJvbSBcIi4uL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzXCI7XG5pbXBvcnQgaXNFeHBvcnRGcm9tIGZyb20gXCIuLi91dGlsL2lzRXhwb3J0RnJvbVwiO1xuaW1wb3J0IHtyZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXN9IGZyb20gXCIuLi91dGlsL3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlc1wiO1xuaW1wb3J0IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCBmcm9tIFwiLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnRcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGVkaXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgd2hlbiB3ZSBhcmUga2VlcGluZyB0aGUgY29kZSBhcyBFU00uIFdlIHN0aWxsIG5lZWQgdG8gcmVtb3ZlXG4gKiB0eXBlLW9ubHkgaW1wb3J0cyBpbiBUeXBlU2NyaXB0IGFuZCBGbG93LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU01JbXBvcnRUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7O1xuICAgIHRoaXMubm9uVHlwZUlkZW50aWZpZXJzID1cbiAgICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiYgIWtlZXBVbnVzZWRJbXBvcnRzXG4gICAgICAgID8gZ2V0Tm9uVHlwZUlkZW50aWZpZXJzKHRva2Vucywgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgU2V0KCk7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPVxuICAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJiAha2VlcFVudXNlZEltcG9ydHNcbiAgICAgICAgPyBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKVxuICAgICAgICA6IEVNUFRZX0RFQ0xBUkFUSU9OX0lORk87XG4gICAgdGhpcy5pbmplY3RDcmVhdGVSZXF1aXJlRm9ySW1wb3J0UmVxdWlyZSA9IEJvb2xlYW4ob3B0aW9ucy5pbmplY3RDcmVhdGVSZXF1aXJlRm9ySW1wb3J0UmVxdWlyZSk7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIC8vIFR5cGVTY3JpcHQgYGltcG9ydCBmb28gPSByZXF1aXJlKCdmb28nKTtgIHNob3VsZCBhbHdheXMganVzdCBiZSB0cmFuc2xhdGVkIHRvIHBsYWluIHJlcXVpcmUuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9pbXBvcnQsIHR0Lm5hbWUsIHR0LmVxKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydEVxdWFscygpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5faW1wb3J0LCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5lcSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdCBpcyBhbHdheXMgZXhhY3RseSA4IHRva2VucyBsb25nLCBzbyByZW1vdmUgdGhlIDcgcmVtYWluaW5nIHRva2Vucy5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LmVxKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwibW9kdWxlLmV4cG9ydHNcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczUodHQuX2V4cG9ydCwgdHQuX2ltcG9ydCwgdHQubmFtZSwgdHQubmFtZSwgdHQuZXEpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCBpbXBvcnQgdHlwZSBUID0gcmVxdWlyZSgnVCcpXG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIC8vIFRoaXMgY29uc3RydWN0IGlzIGFsd2F5cyBleGFjdGx5IDkgdG9rZW5zIGxvbmcsIHNvIHJlbW92ZSB0aGUgOCByZW1haW5pbmcgdG9rZW5zLlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2ltcG9ydCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0KSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V4cG9ydERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LmJyYWNlTCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NOYW1lZEV4cG9ydHMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2EgYXMgYn07XG4gICAgICAvLyBleHBvcnQgdHlwZSB7YX0gZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnLi9iJztcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICpcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9hcykpIHtcbiAgICAgICAgICAvLyBhc1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gbnNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgdHlwZSByZS1leHBvcnQgYC4uLiB9IGZyb20gJy4vVCdgXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCB0dC5zdHJpbmcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRoaXMudG9rZW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAgcHJvY2Vzc0ltcG9ydEVxdWFscygpIHtcbiAgICBjb25zdCBpbXBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgaWYgKHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKGltcG9ydE5hbWUpKSB7XG4gICAgICAvLyBJZiB0aGlzIG5hbWUgaXMgb25seSB1c2VkIGFzIGEgdHlwZSwgZWxpZGUgdGhlIHdob2xlIGltcG9ydC5cbiAgICAgIGVsaWRlSW1wb3J0RXF1YWxzKHRoaXMudG9rZW5zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpIHtcbiAgICAgIC8vIFdlJ3JlIHVzaW5nIHJlcXVpcmUgaW4gYW4gZW52aXJvbm1lbnQgKE5vZGUgRVNNKSB0aGF0IGRvZXNuJ3QgcHJvdmlkZVxuICAgICAgLy8gaXQgYXMgYSBnbG9iYWwsIHNvIGdlbmVyYXRlIGEgaGVscGVyIHRvIGltcG9ydCBpdC5cbiAgICAgIC8vIGltcG9ydCAtPiBjb25zdFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgICAvLyBGb29cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyByZXF1aXJlXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJyZXF1aXJlXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9pbXBvcnQsIHR0LnBhcmVuTCkpIHtcbiAgICAgIC8vIER5bmFtaWMgaW1wb3J0cyBkb24ndCBuZWVkIHRvIGJlIHRyYW5zZm9ybWVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy50b2tlbnMuc25hcHNob3QoKTtcbiAgICBjb25zdCBhbGxJbXBvcnRzUmVtb3ZlZCA9IHRoaXMucmVtb3ZlSW1wb3J0VHlwZUJpbmRpbmdzKCk7XG4gICAgaWYgKGFsbEltcG9ydHNSZW1vdmVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXN0b3JlVG9TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXModGhpcy50b2tlbnMpO1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0eXBlIGJpbmRpbmdzIGZyb20gdGhpcyBpbXBvcnQsIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlIGltcG9ydCBpbnRhY3QuXG4gICAqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgaW1wb3J0IHdhcyBPTkxZIHR5cGVzLCBhbmQgdGh1cyBpcyBlbGlnaWJsZSBmb3IgcmVtb3ZhbC4gVGhpcyB3aWxsIGJhaWwgb3V0XG4gICAqIG9mIHRoZSByZXBsYWNlbWVudCBvcGVyYXRpb24sIHNvIHdlIGNhbiByZXR1cm4gZWFybHkgaGVyZS5cbiAgICovXG4gICByZW1vdmVJbXBvcnRUeXBlQmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuX2ltcG9ydCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgdHQuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIFwiaW1wb3J0IHR5cGVcIiBzdGF0ZW1lbnQsIHNvIGV4aXQgZWFybHkuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHRoZSBcIm1vZHVsZVwiIHRva2VuIGluIGltcG9ydCByZWZsZWN0aW9uLlxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cblxuICAgIGxldCBmb3VuZE5vblR5cGVJbXBvcnQgPSBmYWxzZTtcbiAgICBsZXQgZm91bmRBbnlOYW1lZEltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBuZWVkc0NvbW1hID0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUgZGVmYXVsdCBpbXBvcnQuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUodGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmNvbW1hKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gYSBzdGF0ZW1lbnQgbGlrZTpcbiAgICAgICAgICAvLyBpbXBvcnQgQSwgKiBhcyBCIGZyb20gJy4vQSc7XG4gICAgICAgICAgLy8gb3JcbiAgICAgICAgICAvLyBpbXBvcnQgQSwge2Zvb30gZnJvbSAnLi9BJztcbiAgICAgICAgICAvLyB3aGVyZSB0aGUgYEFgIGlzIGJlaW5nIGtlcHQuIFRoZSBjb21tYSBzaG91bGQgYmUgcmVtb3ZlZCBpZiBhbiBvbmx5XG4gICAgICAgICAgLy8gaWYgdGhlIG5leHQgcGFydCBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBlbGlkZWQsIGJ1dCB0aGF0J3MgaGFyZFxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBJbnN0ZWFkLCBhbHdheXMgcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gYW5kIHNldCBhIGZsYWcgdG8gYWRkIGl0IGJhY2sgaWYgbmVjZXNzYXJ5LlxuICAgICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RhcikpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZSh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleCgyKSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZWVkc0NvbW1hKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm91bmROb25UeXBlSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuc3Rhcik7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0Lm5hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5uYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgIGlmIChuZWVkc0NvbW1hKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIsXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBnZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKHRoaXMudG9rZW5zKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICAgdGhpcy5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUoc3BlY2lmaWVySW5mby5yaWdodE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICByZXR1cm4gIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNGbG93VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgLy8gSW4gRmxvdywgdW5saWtlIFRTLCBgaW1wb3J0IHt9IGZyb20gJ2Zvbyc7YCBwcmVzZXJ2ZXMgdGhlIGltcG9ydC5cbiAgICAgIHJldHVybiBmb3VuZEFueU5hbWVkSW1wb3J0ICYmICFmb3VuZE5vblR5cGVJbXBvcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkICYmXG4gICAgICAhdGhpcy5rZWVwVW51c2VkSW1wb3J0cyAmJlxuICAgICAgIXRoaXMubm9uVHlwZUlkZW50aWZpZXJzLmhhcyhuYW1lKVxuICAgICk7XG4gIH1cblxuICAgcHJvY2Vzc0V4cG9ydERlZmF1bHQoKSB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KFxuICAgICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gICAgICAgIHRoaXMua2VlcFVudXNlZEltcG9ydHMsXG4gICAgICAgIHRoaXMudG9rZW5zLFxuICAgICAgICB0aGlzLmRlY2xhcmF0aW9uSW5mbyxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIC8vIElmIHRoZSBleHBvcnRlZCB2YWx1ZSBpcyBqdXN0IGFuIGlkZW50aWZpZXIgYW5kIHNob3VsZCBiZSBlbGlkZWQgYnkgVHlwZVNjcmlwdFxuICAgICAgLy8gcnVsZXMsIHRoZW4gcmVtb3ZlIGl0IGVudGlyZWx5LiBJdCB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtIGBleHBvcnQgZGVmYXVsdCBlYCxcbiAgICAgIC8vIHdoZXJlIGBlYCBpcyBhbiBpZGVudGlmaWVyLlxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFscmVhZHlIYXNOYW1lID1cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChcbiAgICAgICAgICB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsXG4gICAgICAgICAgQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQodHQuX2V4cG9ydCwgdHQuX2RlZmF1bHQsIHR0Ll9jbGFzcywgdHQubmFtZSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fYWJzdHJhY3QsIHR0Ll9jbGFzcywgdHQubmFtZSk7XG5cbiAgICBpZiAoIWFscmVhZHlIYXNOYW1lICYmIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcikge1xuICAgICAgLy8gVGhpcyBpcyBhIHBsYWluIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHN0YXRlbWVudCBhbmQgd2UgbmVlZCB0byBhc3NpZ24gRSB0byBhIHZhcmlhYmxlLlxuICAgICAgLy8gQ2hhbmdlIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHRvIFwibGV0IF9kZWZhdWx0OyBleHBvcnQgZGVmYXVsdCBfZGVmYXVsdCA9IEVcIlxuICAgICAgY29uc3QgZGVmYXVsdFZhck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfZGVmYXVsdFwiKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgbGV0ICR7ZGVmYXVsdFZhck5hbWV9OyBleHBvcnRgKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7ZGVmYXVsdFZhck5hbWV9ID1gKTtcbiAgICAgIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5zZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShkZWZhdWx0VmFyTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHN0YXRlbWVudCB3aXRoIG9uZSBvZiB0aGVzZSBmb3JtczpcbiAgICogZXhwb3J0IHthLCB0eXBlIGJ9O1xuICAgKiBleHBvcnQge2MsIHR5cGUgZH0gZnJvbSAnZm9vJztcbiAgICpcbiAgICogSW4gYm90aCBjYXNlcywgYW55IGV4cGxpY2l0IHR5cGUgZXhwb3J0cyBzaG91bGQgYmUgcmVtb3ZlZC4gSW4gdGhlIGZpcnN0XG4gICAqIGNhc2UsIHdlIGFsc28gbmVlZCB0byBoYW5kbGUgaW1wbGljaXQgZXhwb3J0IGVsaXNpb24gZm9yIG5hbWVzIGRlY2xhcmVkIGFzXG4gICAqIHR5cGVzLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHdlIG11c3QgTk9UIGRvIGltcGxpY2l0IG5hbWVkIGV4cG9ydCBlbGlzaW9uLFxuICAgKiBidXQgd2UgbXVzdCByZW1vdmUgdGhlIHJ1bnRpbWUgaW1wb3J0IGlmIGFsbCBleHBvcnRzIGFyZSB0eXBlIGV4cG9ydHMuXG4gICAqL1xuICAgcHJvY2Vzc05hbWVkRXhwb3J0cygpIHtcbiAgICBpZiAoIXRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5fZXhwb3J0KTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuXG4gICAgY29uc3QgaXNSZUV4cG9ydCA9IGlzRXhwb3J0RnJvbSh0aGlzLnRva2Vucyk7XG4gICAgbGV0IGZvdW5kTm9uVHlwZUV4cG9ydCA9IGZhbHNlO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMpO1xuICAgICAgaWYgKFxuICAgICAgICBzcGVjaWZpZXJJbmZvLmlzVHlwZSB8fFxuICAgICAgICAoIWlzUmVFeHBvcnQgJiYgdGhpcy5zaG91bGRFbGlkZUV4cG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLmxlZnROYW1lKSlcbiAgICAgICkge1xuICAgICAgICAvLyBUeXBlIGV4cG9ydCwgc28gcmVtb3ZlIGFsbCB0b2tlbnMsIGluY2x1ZGluZyBhbnkgY29tbWEuXG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb24tdHlwZSBleHBvcnQsIHNvIGNvcHkgYWxsIHRva2VucywgaW5jbHVkaW5nIGFueSBjb21tYS5cbiAgICAgICAgZm91bmROb25UeXBlRXhwb3J0ID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZVIpO1xuXG4gICAgaWYgKCF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmIGlzUmVFeHBvcnQgJiYgIWZvdW5kTm9uVHlwZUV4cG9ydCkge1xuICAgICAgLy8gVGhpcyBpcyBhIHR5cGUtb25seSByZS1leHBvcnQsIHNvIHNraXAgZXZhbHVhdGluZyB0aGUgb3RoZXIgbW9kdWxlLiBUZWNobmljYWxseSB0aGlzXG4gICAgICAvLyBsZWF2ZXMgdGhlIHN0YXRlbWVudCBhcyBgZXhwb3J0IHt9YCwgYnV0IHRoYXQncyBvayBzaW5jZSB0aGF0J3MgYSBuby1vcC5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRoaXMudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFU00gZWxpZGVzIGFsbCBpbXBvcnRzIHdpdGggdGhlIHJ1bGUgdGhhdCB3ZSBvbmx5IGVsaWRlIGlmIHdlIHNlZSB0aGF0IGl0J3NcbiAgICogYSB0eXBlIGFuZCBuZXZlciBzZWUgaXQgYXMgYSB2YWx1ZS4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBDSlMsIHdoaWNoXG4gICAqIGVsaWRlcyBpbXBvcnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5rbm93bi5cbiAgICovXG4gICBzaG91bGRFbGlkZUV4cG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd1RyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgcm9vdFRyYW5zZm9ybWVyLFxuICAgICB0b2tlbnMsXG4gICAgIGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkID0gaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZDs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFycm93UGFyYW1FbmQoKSB8fFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlQXN5bmNBcnJvd1dpdGhUeXBlUGFyYW1zKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZVR5cGVSYW5nZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fZW51bSkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc05hbWVkRXhwb3J0RW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuX2VudW0pKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEZWZhdWx0RXhwb3J0RW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBkZWNsYXJhdGlvbiBsaWtlOlxuICAgKiBleHBvcnQgZW51bSBFIC4uLlxuICAgKlxuICAgKiBXaXRoIHRoaXMgaW1wb3J0cyB0cmFuc2Zvcm0sIHRoaXMgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnRzLkUgPSBFO1xuICAgKlxuICAgKiBvdGhlcndpc2UsIGl0IGJlY29tZXM6XG4gICAqIGV4cG9ydCBjb25zdCBFID0gW1tlbnVtXV07XG4gICAqL1xuICBwcm9jZXNzTmFtZWRFeHBvcnRFbnVtKCkge1xuICAgIGlmICh0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIC8vIGV4cG9ydFxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtlbnVtTmFtZX0gPSAke2VudW1OYW1lfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIGRlY2xhcmF0aW9uIGxpa2U6XG4gICAqIGV4cG9ydCBkZWZhdWx0IGVudW0gRVxuICAgKlxuICAgKiBXaXRoIHRoZSBpbXBvcnRzIHRyYW5zZm9ybSwgdGhpcyBiZWNvbWVzOlxuICAgKiBjb25zdCBFID0gW1tlbnVtXV07IGV4cG9ydHMuZGVmYXVsdCA9IEU7XG4gICAqXG4gICAqIG90aGVyd2lzZSwgaXQgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnQgZGVmYXVsdCBFO1xuICAgKi9cbiAgcHJvY2Vzc0RlZmF1bHRFeHBvcnRFbnVtKCkge1xuICAgIC8vIGV4cG9ydFxuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIC8vIGRlZmF1bHRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IGVudW1OYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdFJlbGF0aXZlSW5kZXgoMSk7XG4gICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgIGlmICh0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLmRlZmF1bHQgPSAke2VudW1OYW1lfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydCBkZWZhdWx0ICR7ZW51bU5hbWV9O2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc3BpbGUgZmxvdyBlbnVtcyB0byBpbnZva2UgdGhlIFwiZmxvdy1lbnVtcy1ydW50aW1lXCIgbGlicmFyeS5cbiAgICpcbiAgICogQ3VycmVudGx5LCB0aGUgdHJhbnNwaWxlZCBjb2RlIGFsd2F5cyB1c2VzIGByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpYCxcbiAgICogYnV0IGlmIGZ1dHVyZSBmbGV4aWJpbGl0eSBpcyBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSBhIGNvbmZpZyBvcHRpb24gZm9yXG4gICAqIHRoaXMgc3RyaW5nIChzaW1pbGFyIHRvIGNvbmZpZ3VyYWJsZSBKU1gpLiBFdmVuIHdoZW4gdGFyZ2V0aW5nIEVTTSwgdGhlXG4gICAqIGRlZmF1bHQgYmVoYXZpb3Igb2YgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1mbG93LWVudW1zIGlzIHRvIHVzZSByZXF1aXJlXG4gICAqIHJhdGhlciB0aGFuIGluamVjdGluZyBhbiBpbXBvcnQuXG4gICAqXG4gICAqIEZsb3cgZW51bXMgYXJlIHF1aXRlIGEgYml0IHNpbXBsZXIgdGhhbiBUUyBlbnVtcyBhbmQgaGF2ZSBzb21lIGNvbnZlbmllbnRcbiAgICogY29uc3RyYWludHM6XG4gICAqIC0gRWxlbWVudCBpbml0aWFsaXplcnMgbXVzdCBiZSBlaXRoZXIgYWx3YXlzIHByZXNlbnQgb3IgYWx3YXlzIGFic2VudC4gVGhhdFxuICAgKiAgIG1lYW5zIHRoYXQgd2UgY2FuIHVzZSBmaXhlZCBsb29rYWhlYWQgb24gdGhlIGZpcnN0IGVsZW1lbnQgKGlmIGFueSkgYW5kXG4gICAqICAgYXNzdW1lIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSBsaWtlIHRoYXQuXG4gICAqIC0gVGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhbiBlbGVtZW50IGluaXRpYWxpemVyIG11c3QgYmUgYSBsaXRlcmFsIHZhbHVlLFxuICAgKiAgIG5vdCBhIGNvbXBsZXggZXhwcmVzc2lvbiBhbmQgbm90IHJlZmVyZW5jaW5nIG90aGVyIGVsZW1lbnRzLiBUaGF0IG1lYW5zXG4gICAqICAgd2UgY2FuIHNpbXBseSBjb3B5IGEgc2luZ2xlIHRva2VuLlxuICAgKlxuICAgKiBFbnVtcyBjYW4gYmUgYnJva2VuIHVwIGludG8gdGhyZWUgYmFzaWMgY2FzZXM6XG4gICAqXG4gICAqIE1pcnJvcmVkIGVudW1zOlxuICAgKiBlbnVtIEUge0EsIEJ9XG4gICAqICAgLT5cbiAgICogY29uc3QgRSA9IHJlcXVpcmUoXCJmbG93LWVudW1zLXJ1bnRpbWVcIikuTWlycm9yZWQoW1wiQVwiLCBcIkJcIl0pO1xuICAgKlxuICAgKiBJbml0aWFsaXplciBlbnVtczpcbiAgICogZW51bSBFIHtBID0gMSwgQiA9IDJ9XG4gICAqICAgLT5cbiAgICogY29uc3QgRSA9IHJlcXVpcmUoXCJmbG93LWVudW1zLXJ1bnRpbWVcIikoe0E6IDEsIEI6IDJ9KTtcbiAgICpcbiAgICogU3ltYm9sIGVudW1zOlxuICAgKiBlbnVtIEUgb2Ygc3ltYm9sIHtBLCBCfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpKHtBOiBTeW1ib2woXCJBXCIpLCBCOiBTeW1ib2woXCJCXCIpfSk7XG4gICAqXG4gICAqIFdlIGNhbiBzdGF0aWNhbGx5IGRldGVjdCB3aGljaCBvZiB0aGUgdGhyZWUgY2FzZXMgdGhpcyBpcyBieSBsb29raW5nIGF0IHRoZVxuICAgKiBcIm9mXCIgZGVjbGFyYXRpb24gKGlmIGFueSkgYW5kIHNlZWluZyBpZiB0aGUgZmlyc3QgZWxlbWVudCBoYXMgYW4gaW5pdGlhbGl6ZXIuXG4gICAqIFNpbmNlIHRoZSBvdGhlciB0cmFuc2Zvcm0gZGV0YWlscyBhcmUgc28gc2ltaWxhciBiZXR3ZWVuIHRoZSB0aHJlZSBjYXNlcywgd2VcbiAgICogdXNlIGEgc2luZ2xlIGltcGxlbWVudGF0aW9uIGFuZCB2YXJ5IHRoZSB0cmFuc2Zvcm0gd2l0aGluIHByb2Nlc3NFbnVtRWxlbWVudFxuICAgKiBiYXNlZCBvbiBjYXNlLlxuICAgKi9cbiAgcHJvY2Vzc0VudW0oKSB7XG4gICAgLy8gZW51bSBFIC0+IGNvbnN0IEVcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJjb25zdFwiKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5uYW1lKTtcblxuICAgIGxldCBpc1N5bWJvbEVudW0gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlzU3ltYm9sRW51bSA9IHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zeW1ib2wpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgaGFzSW5pdGlhbGl6ZXJzID0gdGhpcy50b2tlbnMubWF0Y2hlczModHQuYnJhY2VMLCB0dC5uYW1lLCB0dC5lcSk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZSgnID0gcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKScpO1xuXG4gICAgY29uc3QgaXNNaXJyb3JlZCA9ICFpc1N5bWJvbEVudW0gJiYgIWhhc0luaXRpYWxpemVycztcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGlzTWlycm9yZWQgPyBcIi5NaXJyb3JlZChbXCIgOiBcIih7XCIpO1xuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpKSB7XG4gICAgICAvLyAuLi4gaXMgYWxsb3dlZCBhdCB0aGUgZW5kIGFuZCBoYXMgbm8gcnVudGltZSBiZWhhdmlvci5cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5lbGxpcHNpcykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtRWxlbWVudChpc1N5bWJvbEVudW0sIGhhc0luaXRpYWxpemVycyk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihpc01pcnJvcmVkID8gXCJdKTtcIiA6IFwifSk7XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbnVtIGVsZW1lbnQsIHByb2R1Y2luZyBlaXRoZXIgYW4gYXJyYXkgZWxlbWVudCBvciBhblxuICAgKiBvYmplY3QgZWxlbWVudCBiYXNlZCBvbiB3aGF0IHR5cGUgb2YgZW51bSB0aGlzIGlzLlxuICAgKi9cbiAgcHJvY2Vzc0VudW1FbGVtZW50KGlzU3ltYm9sRW51bSwgaGFzSW5pdGlhbGl6ZXJzKSB7XG4gICAgaWYgKGlzU3ltYm9sRW51bSkge1xuICAgICAgLy8gU3ltYm9sIGVudW1zIG5ldmVyIGhhdmUgaW5pdGlhbGl6ZXJzIGFuZCBhcmUgZXhwYW5kZWQgdG8gb2JqZWN0IGVsZW1lbnRzLlxuICAgICAgLy8gQSwgLT4gQTogU3ltYm9sKFwiQVwiKSxcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOiBTeW1ib2woXCIke2VsZW1lbnROYW1lfVwiKWApO1xuICAgIH0gZWxzZSBpZiAoaGFzSW5pdGlhbGl6ZXJzKSB7XG4gICAgICAvLyBJbml0aWFsaXplcnMgYXJlIGV4cGFuZGVkIHRvIG9iamVjdCBlbGVtZW50cy5cbiAgICAgIC8vIEEgPSAxLCAtPiBBOiAxLFxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiOlwiKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbnVtIGVsZW1lbnRzIHdpdGhvdXQgaW5pdGlhbGl6ZXJzIGJlY29tZSBzdHJpbmcgbGl0ZXJhbCBhcnJheSBlbGVtZW50cy5cbiAgICAgIC8vIEEsIC0+IFwiQVwiLFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBcIiR7dGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKX1cImApO1xuICAgIH1cbiAgfVxufVxuIiwgIiBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbihvcHMpIHsgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IGxldCB2YWx1ZSA9IG9wc1swXTsgbGV0IGkgPSAxOyB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHsgY29uc3Qgb3AgPSBvcHNbaV07IGNvbnN0IGZuID0gb3BzW2kgKyAxXTsgaSArPSAyOyBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHsgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlOyB2YWx1ZSA9IGZuKHZhbHVlKTsgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgeyB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTsgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgfSB9IHJldHVybiB2YWx1ZTsgfVxuXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuY29uc3QgSkVTVF9HTE9CQUxfTkFNRSA9IFwiamVzdFwiO1xuY29uc3QgSE9JU1RFRF9NRVRIT0RTID0gW1wibW9ja1wiLCBcInVubW9ja1wiLCBcImVuYWJsZUF1dG9tb2NrXCIsIFwiZGlzYWJsZUF1dG9tb2NrXCJdO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0LCB3aGljaCBob2lzdHMgdXAgc29tZSBqZXN0IG1ldGhvZFxuICogY2FsbHMgYWJvdmUgdGhlIGltcG9ydHMgdG8gYWxsb3cgdGhlbSB0byBvdmVycmlkZSBvdGhlciBpbXBvcnRzLlxuICpcbiAqIFRvIHByZXNlcnZlIGxpbmUgbnVtYmVycywgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW92aW5nIHRoZSBqZXN0Lm1vY2sgY29kZSwgd2VcbiAqIHdyYXAgZWFjaCBpbnZvY2F0aW9uIGluIGEgZnVuY3Rpb24gc3RhdGVtZW50IGFuZCB0aGVuIGNhbGwgdGhlIGZ1bmN0aW9uIGZyb21cbiAqIHRoZSB0b3Agb2YgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEplc3RIb2lzdFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICAgIF9faW5pdCgpIHt0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzID0gW119XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3NvcjtKZXN0SG9pc3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5zY29wZURlcHRoID09PSAwICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5kb3QsIHR0Lm5hbWUsIHR0LnBhcmVuTCkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IEpFU1RfR0xPQkFMX05BTUVcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgb25seSB3b3JrcyBpZiBpbXBvcnRzIHRyYW5zZm9ybSBpcyBhY3RpdmUsIHdoaWNoIGl0IHdpbGwgYmUgZm9yIGplc3QuXG4gICAgICAvLyAgICAgICBCdXQgaWYgamVzdCBhZGRzIG1vZHVsZSBzdXBwb3J0IGFuZCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgaW1wb3J0IHRyYW5zZm9ybSwgdGhpcyBuZWVkcyBmaXhpbmcuXG4gICAgICBpZiAoX29wdGlvbmFsQ2hhaW4oW3RoaXMsICdhY2Nlc3MnLCBfID0+IF8uaW1wb3J0UHJvY2Vzc29yLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5nZXRHbG9iYWxOYW1lcywgJ2NhbGwnLCBfMyA9PiBfMygpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5oYXMsICdjYWxsJywgXzUgPT4gXzUoSkVTVF9HTE9CQUxfTkFNRSldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0SG9pc3RlZENhbGxzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0SG9pc3RlZENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaG9pc3RlZEZ1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIHBsYWNlZCBiZWZvcmUgbW9kdWxlIGludGVyb3AgY29kZSwgYnV0IHRoYXQncyBmaW5lIHNpbmNlXG4gICAgICAvLyBpbXBvcnRzIGFyZW4ndCBhbGxvd2VkIGluIG1vZHVsZSBtb2NrIGZhY3Rvcmllcy5cbiAgICAgIHJldHVybiB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLm1hcCgobmFtZSkgPT4gYCR7bmFtZX0oKTtgKS5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbnkgbWV0aG9kcyBjYWxscyBvbiB0aGUgamVzdC1vYmplY3QgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogQWNjb3JkaW5nIHRvIHRoZSBqZXN0IGRvY3MsIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvZW4vamVzdC1vYmplY3QjamVzdG1vY2ttb2R1bGVuYW1lLWZhY3Rvcnktb3B0aW9ucyxcbiAgICogbW9jaywgdW5tb2NrLCBlbmFibGVBdXRvbW9jaywgZGlzYWJsZUF1dG9tb2NrLCBhcmUgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogV2UgZG8gbm90IGFwcGx5IHRoZSBzYW1lIGNoZWNrcyBvZiB0aGUgYXJndW1lbnRzIGFzIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IGRvZXMuXG4gICAqL1xuICAgZXh0cmFjdEhvaXN0ZWRDYWxscygpIHtcbiAgICAvLyBXZSdyZSBoYW5kbGluZyBhIGNoYWluIG9mIGNhbGxzIHdoZXJlIGBqZXN0YCBtYXkgb3IgbWF5IG5vdCBuZWVkIHRvIGJlIGluc2VydGVkIGZvciBlYWNoIGNhbGxcbiAgICAvLyBpbiB0aGUgY2hhaW4sIHNvIHJlbW92ZSB0aGUgaW5pdGlhbCBgamVzdGAgdG8gbWFrZSB0aGUgbG9vcCBpbXBsZW1lbnRhdGlvbiBjbGVhbmVyLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gVHJhY2sgc29tZSBzdGF0ZSBzbyB0aGF0IG11bHRpcGxlIG5vbi1ob2lzdGVkIGNoYWluZWQgY2FsbHMgaW4gYSByb3cga2VlcCB0aGVpciBjaGFpbmluZ1xuICAgIC8vIHN5bnRheC5cbiAgICBsZXQgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGFpbmVkIGNhbGxzIG9uIHRoZSBqZXN0IG9iamVjdC5cbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczModHQuZG90LCB0dC5uYW1lLCB0dC5wYXJlbkwpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgICBjb25zdCBzaG91bGRIb2lzdCA9IEhPSVNURURfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKTtcbiAgICAgIGlmIChzaG91bGRIb2lzdCkge1xuICAgICAgICAvLyBXZSd2ZSBtYXRjaGVkIGUuZy4gYC5tb2NrKC4uLilgIG9yIHNpbWlsYXIgY2FsbC5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgaW5pdGlhbCBgLmAgd2l0aCBgZnVuY3Rpb24gX19qZXN0SG9pc3QoKXtqZXN0LmBcbiAgICAgICAgY29uc3QgaG9pc3RlZEZ1bmN0aW9uTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9famVzdEhvaXN0XCIpO1xuICAgICAgICB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLnB1c2goaG9pc3RlZEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgZnVuY3Rpb24gJHtob2lzdGVkRnVuY3Rpb25OYW1lfSgpeyR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiO31cIik7XG4gICAgICAgIGZvbGxvd3NOb25Ib2lzdGVkSmVzdENhbGwgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBub24taG9pc3RlZCBtZXRob2QsIHNvIGp1c3QgdHJhbnNmb3JtIHRoZSBjb2RlIGFzIHVzdWFsLlxuICAgICAgICBpZiAoZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBob2lzdCB0aGUgcHJldmlvdXMgY2FsbCwgd2UgY2FuIGxlYXZlIHRoZSBjb2RlIGFzLWlzIHRvIGNoYWluIG9mZiBvZiB0aGVcbiAgICAgICAgICAvLyBwcmV2aW91cyBtZXRob2QgY2FsbC4gSXQncyBpbXBvcnRhbnQgdG8gcHJlc2VydmUgdGhlIGNvZGUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGtub3dcbiAgICAgICAgICAvLyBmb3Igc3VyZSB0aGF0IHRoZSBtZXRob2QgYWN0dWFsbHkgcmV0dXJuZWQgdGhlIGplc3Qgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB3ZSBob2lzdGVkIHRoZSBwcmV2aW91cyBjYWxsLCB3ZSBrbm93IGl0IHJldHVybnMgdGhlIGplc3Qgb2JqZWN0IGJhY2ssIHNvIHdlIGluc2VydFxuICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGBqZXN0YCB0byBjb250aW51ZSB0aGUgY2hhaW4uXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke0pFU1RfR0xPQkFMX05BTUV9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICBmb2xsb3dzTm9uSG9pc3RlZEplc3RDYWxsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICBjb25zdHJ1Y3RvciggdG9rZW5zKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5udW0pKSB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuQ29kZSgpO1xuICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoXCJfXCIpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihjb2RlLnJlcGxhY2UoL18vZywgXCJcIikpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9jYXRjaCwgdHQuYnJhY2VMKSkge1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7dGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiZVwiKX0pYCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbi8qKlxuICogVHJhbnNmb3JtZXIgc3VwcG9ydGluZyB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgYW5kIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRvcnMuXG4gKlxuICogVGVjaCBwbGFuIGhlcmU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS93aWtpL1N1Y3Jhc2UtT3B0aW9uYWwtQ2hhaW5pbmctYW5kLU51bGxpc2gtQ29hbGVzY2luZy1UZWNobmljYWwtUGxhblxuICpcbiAqIFRoZSBwcmVmaXggYW5kIHN1ZmZpeCBjb2RlIHNuaXBwZXRzIGFyZSBoYW5kbGVkIGJ5IFRva2VuUHJvY2Vzc29yLCBhbmQgdGhpcyB0cmFuc2Zvcm1lciBoYW5kbGVzXG4gKiB0aGUgb3BlcmF0b3JzIHRoZW1zZWx2ZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm51bGxpc2hDb2FsZXNjaW5nKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbdG9rZW4ubnVsbGlzaFN0YXJ0SW5kZXhdLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIiwgYXN5bmMgKCkgPT4gKFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIsICgpID0+IChcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9kZWxldGUpKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgxKTtcbiAgICAgIGlmIChuZXh0VG9rZW4uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNoYWluU3RhcnQgPSB0b2tlbi5zdWJzY3JpcHRTdGFydEluZGV4O1xuICAgIGlmIChcbiAgICAgIGNoYWluU3RhcnQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2NoYWluU3RhcnRdLmlzT3B0aW9uYWxDaGFpblN0YXJ0ICYmXG4gICAgICAvLyBTdXBlciBzdWJzY3JpcHRzIGNhbid0IGJlIG9wdGlvbmFsIChzaW5jZSBzdXBlciBpcyBuZXZlciBudWxsL3VuZGVmaW5lZCksIGFuZCB0aGUgc3ludGF4XG4gICAgICAvLyByZWxpZXMgb24gdGhlIHN1YnNjcmlwdCBiZWluZyBpbnRhY3QsIHNvIGxlYXZlIHRoaXMgdG9rZW4gYWxvbmUuXG4gICAgICB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgtMSkudHlwZSAhPT0gdHQuX3N1cGVyXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9cIik7XG4gICAgICBsZXQgYXJyb3dTdGFydFNuaXBwZXQ7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYWluU3RhcnQgPiAwICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChjaGFpblN0YXJ0IC0gMSwgdHQuX2RlbGV0ZSkgJiZcbiAgICAgICAgdGhpcy5pc0xhc3RTdWJzY3JpcHRJbkNoYWluKClcbiAgICAgICkge1xuICAgICAgICAvLyBEZWxldGUgb3BlcmF0aW9ucyBhcmUgc3BlY2lhbDogd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBkZWxldGUga2V5d29yZCwgYW5kIHRvIHN0aWxsXG4gICAgICAgIC8vIHBlcmZvcm0gYSBkZWxldGUsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgZGVsZXRlIGluIHRoZSB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgY2hhaW4sIHdoaWNoXG4gICAgICAgIC8vIGluIGNvcnJlY3QgY29kZSB3aWxsIGFsd2F5cyBiZSBhIHByb3BlcnR5IGFjY2Vzcy5cbiAgICAgICAgYXJyb3dTdGFydFNuaXBwZXQgPSBgJHtwYXJhbX0gPT4gZGVsZXRlICR7cGFyYW19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycm93U3RhcnRTbmlwcGV0ID0gYCR7cGFyYW19ID0+ICR7cGFyYW19YDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICBhcnJvd1N0YXJ0U25pcHBldCA9IGBhc3luYyAke2Fycm93U3RhcnRTbmlwcGV0fWA7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnF1ZXN0aW9uRG90LCB0dC5wYXJlbkwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnF1ZXN0aW9uRG90LCB0dC5sZXNzVGhhbilcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5qdXN0U2tpcHBlZFN1cGVyKCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLmJpbmQodGhpcylcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnb3B0aW9uYWxDYWxsJywgJHthcnJvd1N0YXJ0U25pcHBldH1gKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQucXVlc3Rpb25Eb3QsIHR0LmJyYWNrZXRMKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnF1ZXN0aW9uRG90KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9LmApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5kb3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ2FjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9LmApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnYWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH1bYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgaWYgKHRoaXMuanVzdFNraXBwZWRTdXBlcigpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIi5iaW5kKHRoaXMpXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ2NhbGwnLCAke2Fycm93U3RhcnRTbmlwcGV0fShgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgc3Vic2NyaXB0IG9wZXJhdG9yIGluIG9wdGlvbmFsIGNoYWluLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIHRoZSBsYXN0IG9mIGl0cyBjaGFpbiwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgaXQncyBlbGlnaWJsZVxuICAgKiB0byBoYXZlIGEgZGVsZXRlIG9wIGluc2VydGVkLlxuICAgKlxuICAgKiBXZSBjYW4gZG8gdGhpcyBieSB3YWxraW5nIGZvcndhcmQgdW50aWwgd2UgZGV0ZXJtaW5lIG9uZSB3YXkgb3IgYW5vdGhlci4gRWFjaFxuICAgKiBpc09wdGlvbmFsQ2hhaW5TdGFydCB0b2tlbiBtdXN0IGJlIHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGlzT3B0aW9uYWxDaGFpbkVuZCB0b2tlbiBhZnRlciBpdCBpblxuICAgKiBhIG5lc3Rpbmcgd2F5LCBzbyB3ZSBjYW4gdHJhY2sgZGVwdGggYW5kIHdhbGsgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW4gKHRoZSBwb2ludCB3aGVyZSB0aGVcbiAgICogZGVwdGggZ29lcyBuZWdhdGl2ZSkgYW5kIHNlZSBpZiBhbnkgb3RoZXIgc3Vic2NyaXB0IHRva2VuIGlzIGFmdGVyIHVzIGluIHRoZSBjaGFpbi5cbiAgICovXG4gIGlzTGFzdFN1YnNjcmlwdEluQ2hhaW4oKSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICBmb3IgKGxldCBpID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxOyA7IGkrKykge1xuICAgICAgaWYgKGkgPj0gdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hpbGUgZmluZGluZyB0aGUgZW5kIG9mIHRoZSBhY2Nlc3MgY2hhaW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpXS5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy50b2tlbnNbaV0uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9XG4gICAgICBpZiAoZGVwdGggPCAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHN1YnNjcmlwdCB0b2tlbiBpcyBhIGxhdGVyIG9uZSBpbiB0aGUgc2FtZSBjaGFpbi5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCAmJiB0aGlzLnRva2Vucy50b2tlbnNbaV0uc3Vic2NyaXB0U3RhcnRJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHdlIGFyZSB0aGUgb3Blbi1wYXJlbiBpbiBhbiBleHByZXNzaW9uIGxpa2Ugc3VwZXIuYSgpPy5iLlxuICAgKlxuICAgKiBXZSBjYW4gZG8gdGhpcyBieSB3YWxraW5nIGJhY2t3YXJkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHN1YnNjcmlwdC4gSWYgdGhhdCBzdWJzY3JpcHQgd2FzXG4gICAqIHByZWNlZGVkIGJ5IGEgc3VwZXIsIHRoZW4gd2UgbXVzdCBiZSB0aGUgc3Vic2NyaXB0IGFmdGVyIGl0LCBzbyBpZiB0aGlzIGlzIGEgY2FsbCBleHByZXNzaW9uLFxuICAgKiB3ZSdsbCBuZWVkIHRvIGF0dGFjaCB0aGUgcmlnaHQgY29udGV4dC5cbiAgICovXG4gIGp1c3RTa2lwcGVkU3VwZXIoKSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSAtIDE7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiUmVhY2hlZCB0aGUgc3RhcnQgb2YgdGhlIGNvZGUgd2hpbGUgZmluZGluZyB0aGUgc3RhcnQgb2YgdGhlIGFjY2VzcyBjaGFpbi5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgICBpZiAoZGVwdGggPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBzdWJzY3JpcHQgdG9rZW4gaXMgYSBsYXRlciBvbmUgaW4gdGhlIHNhbWUgY2hhaW4uXG4gICAgICBpZiAoZGVwdGggPT09IDAgJiYgdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5zdWJzY3JpcHRTdGFydEluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdLnR5cGUgPT09IHR0Ll9zdXBlcjtcbiAgICAgIH1cbiAgICAgIGluZGV4LS07XG4gICAgfVxuICB9XG59XG4iLCAiXG5cbmltcG9ydCB7SWRlbnRpZmllclJvbGV9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSwgd2hpY2ggYWRkcyBhXG4gKiBkaXNwbGF5IG5hbWUgdG8gdXNhZ2VzIG9mIFJlYWN0LmNyZWF0ZUNsYXNzIGFuZCBjcmVhdGVSZWFjdENsYXNzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBvcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaW1wb3J0UHJvY2Vzc29yID0gaW1wb3J0UHJvY2Vzc29yO3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IFwiY3JlYXRlUmVhY3RDbGFzc1wiKSB7XG4gICAgICBjb25zdCBuZXdOYW1lID1cbiAgICAgICAgdGhpcy5pbXBvcnRQcm9jZXNzb3IgJiYgdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFwiY3JlYXRlUmVhY3RDbGFzc1wiKTtcbiAgICAgIGlmIChuZXdOYW1lKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgKDAsICR7bmV3TmFtZX0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5uYW1lLCB0dC5kb3QsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpID09PSBcIlJlYWN0XCIgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIpID09PSBcImNyZWF0ZUNsYXNzXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSB0aGlzLmltcG9ydFByb2Nlc3NvclxuICAgICAgICA/IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChcIlJlYWN0XCIpIHx8IFwiUmVhY3RcIlxuICAgICAgICA6IFwiUmVhY3RcIjtcbiAgICAgIGlmIChuZXdOYW1lKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihuZXdOYW1lKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgdG9rZW4gcG9zaXRpb24gYXQgdGhlIG9wZW4tcGFyZW4uXG4gICAqL1xuICAgdHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KSB7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSB0aGlzLmZpbmREaXNwbGF5TmFtZShzdGFydEluZGV4KTtcbiAgICBpZiAoIWRpc3BsYXlOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xhc3NOZWVkc0Rpc3BsYXlOYW1lKCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgZGlzcGxheU5hbWU6ICcke2Rpc3BsYXlOYW1lfScsYCk7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZVIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQucGFyZW5SKTtcbiAgICB9XG4gIH1cblxuICAgZmluZERpc3BsYXlOYW1lKHN0YXJ0SW5kZXgpIHtcbiAgICBpZiAoc3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KHN0YXJ0SW5kZXggLSAyLCB0dC5uYW1lLCB0dC5lcSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gYXNzaWdubWVudCAob3IgZGVjbGFyYXRpb24pIGFuZCB0aGUgTEhTIGlzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGEgbWVtYmVyXG4gICAgICAvLyBleHByZXNzaW9uIGVuZGluZyBpbiBhbiBpZGVudGlmaWVyLCBzbyB1c2UgdGhhdCBpZGVudGlmaWVyIG5hbWUuXG4gICAgICByZXR1cm4gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHN0YXJ0SW5kZXggLSAyKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3RhcnRJbmRleCA+PSAyICYmXG4gICAgICB0aGlzLnRva2Vucy50b2tlbnNbc3RhcnRJbmRleCAtIDJdLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RLZXlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gb2JqZWN0IGxpdGVyYWwgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHN0YXJ0SW5kZXggLSAyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChzdGFydEluZGV4IC0gMiwgdHQuX2V4cG9ydCwgdHQuX2RlZmF1bHQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5TmFtZUZyb21GaWxlbmFtZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gICBnZXREaXNwbGF5TmFtZUZyb21GaWxlbmFtZSgpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMub3B0aW9ucy5maWxlUGF0aCB8fCBcInVua25vd25cIjtcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBmaWxlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGRvdEluZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGNvbnN0IGJhc2VGaWxlbmFtZSA9IGRvdEluZGV4ID09PSAtMSA/IGZpbGVuYW1lIDogZmlsZW5hbWUuc2xpY2UoMCwgZG90SW5kZXgpO1xuICAgIGlmIChiYXNlRmlsZW5hbWUgPT09IFwiaW5kZXhcIiAmJiBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdKSB7XG4gICAgICByZXR1cm4gcGF0aFNlZ21lbnRzW3BhdGhTZWdtZW50cy5sZW5ndGggLSAyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VGaWxlbmFtZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2Ugb25seSB3YW50IHRvIGFkZCBhIGRpc3BsYXkgbmFtZSB3aGVuIHRoaXMgaXMgYSBmdW5jdGlvbiBjYWxsIGNvbnRhaW5pbmdcbiAgICogb25lIGFyZ3VtZW50LCB3aGljaCBpcyBhbiBvYmplY3QgbGl0ZXJhbCB3aXRob3V0IGBkaXNwbGF5TmFtZWAgYXMgYW5cbiAgICogZXhpc3Rpbmcga2V5LlxuICAgKi9cbiAgIGNsYXNzTmVlZHNEaXNwbGF5TmFtZSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnBhcmVuTCwgdHQuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUaGUgYmxvY2sgc3RhcnRzIG9uIHRoZSB7LCBhbmQgd2UgZXhwZWN0IGFueSBkaXNwbGF5TmFtZSBrZXkgdG8gYmUgaW5cbiAgICAvLyB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdG8gaWdub3JlIG90aGVyIG90aGVyIGNvbnRleHRzIHRvIGF2b2lkIG1hdGNoaW5nXG4gICAgLy8gbmVzdGVkIGRpc3BsYXlOYW1lIGtleXMuXG4gICAgY29uc3Qgb2JqZWN0U3RhcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBjb25zdCBvYmplY3RDb250ZXh0SWQgPSB0aGlzLnRva2Vucy50b2tlbnNbb2JqZWN0U3RhcnRJbmRleF0uY29udGV4dElkO1xuICAgIGlmIChvYmplY3RDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY29udGV4dCBJRCBvbiBvYmplY3Qgb3Blbi1icmFjZS5cIik7XG4gICAgfVxuXG4gICAgZm9yICg7IGluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHR0LmJyYWNlUiAmJiB0b2tlbi5jb250ZXh0SWQgPT09IG9iamVjdENvbnRleHRJZCkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXgpID09PSBcImRpc3BsYXlOYW1lXCIgJiZcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5ICYmXG4gICAgICAgIHRva2VuLmNvbnRleHRJZCA9PT0gb2JqZWN0Q29udGV4dElkXG4gICAgICApIHtcbiAgICAgICAgLy8gV2UgZm91bmQgYSBkaXNwbGF5TmFtZSBrZXksIHNvIGJhaWwgb3V0LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHByb2Nlc3NpbmcgUmVhY3QgY2xhc3MuXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciwgd2Uga25vdyB3ZSBoYXZlIGNyZWF0ZUNsYXNzIHdpdGggYW4gb2JqZWN0IHdpdGggbm9cbiAgICAvLyBkaXNwbGF5IG5hbWUsIHNvIHdlIHdhbnQgdG8gcHJvY2VlZCBhcyBsb25nIGFzIHRoYXQgd2FzIHRoZSBvbmx5IGFyZ3VtZW50LlxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnBhcmVuUikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LnBhcmVuUilcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtJZGVudGlmaWVyUm9sZSwgaXNUb3BMZXZlbERlY2xhcmF0aW9ufSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplclwiO1xuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgIF9faW5pdCgpIHt0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lID0gbnVsbH1cblxuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgZmlsZVBhdGgpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTs7XG4gIH1cblxuICBzZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgIHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUgPSBleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnRlck1vZHVsZSA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5lbnRlck1vZHVsZTtcbiAgICAgICAgZW50ZXJNb2R1bGUgJiYgZW50ZXJNb2R1bGUobW9kdWxlKTtcbiAgICAgIH0pKCk7YFxuICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBjb25zdCB0b3BMZXZlbE5hbWVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMudG9rZW5zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0b2tlbi5pc1R5cGUgJiZcbiAgICAgICAgaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSAmJlxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSAhPT0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb25cbiAgICAgICkge1xuICAgICAgICB0b3BMZXZlbE5hbWVzLmFkZCh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzVG9SZWdpc3RlciA9IEFycmF5LmZyb20odG9wTGV2ZWxOYW1lcykubWFwKChuYW1lKSA9PiAoe1xuICAgICAgdmFyaWFibGVOYW1lOiBuYW1lLFxuICAgICAgdW5pcXVlTG9jYWxOYW1lOiBuYW1lLFxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5leHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgICAgbmFtZXNUb1JlZ2lzdGVyLnB1c2goe1xuICAgICAgICB2YXJpYWJsZU5hbWU6IHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUsXG4gICAgICAgIHVuaXF1ZUxvY2FsTmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGBcbjsoZnVuY3Rpb24gKCkge1xuICB2YXIgcmVhY3RIb3RMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1ob3QtbG9hZGVyJykuZGVmYXVsdDtcbiAgdmFyIGxlYXZlTW9kdWxlID0gcmVxdWlyZSgncmVhY3QtaG90LWxvYWRlcicpLmxlYXZlTW9kdWxlO1xuICBpZiAoIXJlYWN0SG90TG9hZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4ke25hbWVzVG9SZWdpc3RlclxuICAubWFwKFxuICAgICh7dmFyaWFibGVOYW1lLCB1bmlxdWVMb2NhbE5hbWV9KSA9PlxuICAgICAgYCAgcmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoJHt2YXJpYWJsZU5hbWV9LCBcIiR7dW5pcXVlTG9jYWxOYW1lfVwiLCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICB0aGlzLmZpbGVQYXRoIHx8IFwiXCIsXG4gICAgICApfSk7YCxcbiAgKVxuICAuam9pbihcIlxcblwiKX1cbiAgbGVhdmVNb2R1bGUobW9kdWxlKTtcbn0pKCk7YDtcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHtJU19JREVOVElGSUVSX0NIQVIsIElTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi9wYXJzZXIvdXRpbC9pZGVudGlmaWVyXCI7XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0xleGljYWxfZ3JhbW1hclxuLy8gSGFyZC1jb2RlIGEgbGlzdCBvZiByZXNlcnZlZCB3b3JkcyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gdXNlIGtleXdvcmRzIG9yIGNvbnRleHR1YWwga2V5d29yZHNcbi8vIGZyb20gdGhlIHBhcnNlciwgc2luY2UgY3VycmVudGx5IHRoZXJlIGFyZSB2YXJpb3VzIGV4Y2VwdGlvbnMsIGxpa2UgYHBhY2thZ2VgIGJlaW5nIHJlc2VydmVkXG4vLyBidXQgdW51c2VkIGFuZCB2YXJpb3VzIGNvbnRleHR1YWwga2V5d29yZHMgYmVpbmcgcmVzZXJ2ZWQuIE5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhhdCBhbGwgY29kZVxuLy8gY29tcGlsZWQgYnkgU3VjcmFzZSBpcyBpbiBhIG1vZHVsZSwgc28gc3RyaWN0IG1vZGUgd29yZHMgYW5kIGF3YWl0IGFyZSBhbGwgY29uc2lkZXJlZCByZXNlcnZlZFxuLy8gaGVyZS5cbmNvbnN0IFJFU0VSVkVEX1dPUkRTID0gbmV3IFNldChbXG4gIC8vIFJlc2VydmVkIGtleXdvcmRzIGFzIG9mIEVDTUFTY3JpcHQgMjAxNVxuICBcImJyZWFrXCIsXG4gIFwiY2FzZVwiLFxuICBcImNhdGNoXCIsXG4gIFwiY2xhc3NcIixcbiAgXCJjb25zdFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwiZGVidWdnZXJcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwiZG9cIixcbiAgXCJlbHNlXCIsXG4gIFwiZXhwb3J0XCIsXG4gIFwiZXh0ZW5kc1wiLFxuICBcImZpbmFsbHlcIixcbiAgXCJmb3JcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImlmXCIsXG4gIFwiaW1wb3J0XCIsXG4gIFwiaW5cIixcbiAgXCJpbnN0YW5jZW9mXCIsXG4gIFwibmV3XCIsXG4gIFwicmV0dXJuXCIsXG4gIFwic3VwZXJcIixcbiAgXCJzd2l0Y2hcIixcbiAgXCJ0aGlzXCIsXG4gIFwidGhyb3dcIixcbiAgXCJ0cnlcIixcbiAgXCJ0eXBlb2ZcIixcbiAgXCJ2YXJcIixcbiAgXCJ2b2lkXCIsXG4gIFwid2hpbGVcIixcbiAgXCJ3aXRoXCIsXG4gIFwieWllbGRcIixcbiAgLy8gRnV0dXJlIHJlc2VydmVkIGtleXdvcmRzXG4gIFwiZW51bVwiLFxuICBcImltcGxlbWVudHNcIixcbiAgXCJpbnRlcmZhY2VcIixcbiAgXCJsZXRcIixcbiAgXCJwYWNrYWdlXCIsXG4gIFwicHJpdmF0ZVwiLFxuICBcInByb3RlY3RlZFwiLFxuICBcInB1YmxpY1wiLFxuICBcInN0YXRpY1wiLFxuICBcImF3YWl0XCIsXG4gIC8vIExpdGVyYWxzIHRoYXQgY2Fubm90IGJlIHVzZWQgYXMgaWRlbnRpZmllcnNcbiAgXCJmYWxzZVwiLFxuICBcIm51bGxcIixcbiAgXCJ0cnVlXCIsXG5dKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYSBsZWdhbCB2YXJpYWJsZSBuYW1lLlxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIHdoZW4gdHJhbnNmb3JtaW5nIFR5cGVTY3JpcHQgZW51bXM7IGlmIGFuIGVudW0ga2V5IGlzIGEgdmFsaWRcbiAqIHZhcmlhYmxlIG5hbWUsIGl0IG1pZ2h0IGJlIHJlZmVyZW5jZWQgbGF0ZXIgaW4gdGhlIGVudW0sIHNvIHdlIG5lZWQgdG9cbiAqIGRlY2xhcmUgYSB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJZGVudGlmaWVyKG5hbWUpIHtcbiAgaWYgKG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghSVNfSURFTlRJRklFUl9TVEFSVFtuYW1lLmNoYXJDb2RlQXQoMCldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghSVNfSURFTlRJRklFUl9DSEFSW25hbWUuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICFSRVNFUlZFRF9XT1JEUy5oYXMobmFtZSk7XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGlzSWRlbnRpZmllciBmcm9tIFwiLi4vdXRpbC9pc0lkZW50aWZpZXJcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFR5cGVTY3JpcHRUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCA9IGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQ7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBcnJvd1BhcmFtRW5kKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9wdWJsaWMpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fcHJvdGVjdGVkKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuX3ByaXZhdGUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fYWJzdHJhY3QpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fcmVhZG9ubHkpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fb3ZlcnJpZGUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5ub25OdWxsQXNzZXJ0aW9uKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fY29uc3QsIHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9lbnVtKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuX2V4cG9ydCwgdHQuX2NvbnN0LCB0dC5fZW51bSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0VudW0odHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvY2Vzc0VudW0oaXNFeHBvcnQgPSBmYWxzZSkge1xuICAgIC8vIFdlIG1pZ2h0IGhhdmUgXCJleHBvcnQgY29uc3QgZW51bVwiLCBzbyBqdXN0IHJlbW92ZSBhbGwgcmVsZXZhbnQgdG9rZW5zLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHdoaWxlICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fY29uc3QpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgaWYgKGlzRXhwb3J0ICYmICF0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJleHBvcnQgXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGB2YXIgJHtlbnVtTmFtZX07IChmdW5jdGlvbiAoJHtlbnVtTmFtZX0pYCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VMKTtcbiAgICB0aGlzLnByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8IChleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX0gPSB7fSkpO2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8ICgke2VudW1OYW1lfSA9IHt9KSk7YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhbiBlbnVtIGludG8gZXF1aXZhbGVudCBKUy4gVGhpcyBoYXMgY29tcGxleGl0eSBpbiBhIGZldyBwbGFjZXM6XG4gICAqIC0gVFMgYWxsb3dzIHN0cmluZyBlbnVtcywgbnVtZXJpYyBlbnVtcywgYW5kIGEgbWl4IG9mIHRoZSB0d28gc3R5bGVzIHdpdGhpbiBhbiBlbnVtLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSByZWZlcmVuY2VkIGluIGxhdGVyIGVudW0gdmFsdWVzLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSBzdHJpbmdzLlxuICAgKiAtIFdoZW4gZW51bSB2YWx1ZXMgYXJlIG9taXR0ZWQsIHRoZXkgc2hvdWxkIGZvbGxvdyBhbiBhdXRvLWluY3JlbWVudCBiZWhhdmlvci5cbiAgICovXG4gIHByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSkge1xuICAgIC8vIENvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHByZXZpb3VzIGVudW0gbWVtYmVyLCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgLy8gZW51bSBtZW1iZXIuXG4gICAgbGV0IHByZXZpb3VzVmFsdWVDb2RlID0gbnVsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCB7bmFtZVN0cmluZ0NvZGUsIHZhcmlhYmxlTmFtZX0gPSB0aGlzLmV4dHJhY3RFbnVtS2V5SW5mbyh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKSk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5lcSwgdHQuc3RyaW5nLCB0dC5jb21tYSkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuZXEsIHR0LnN0cmluZywgdHQuYnJhY2VSKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmluZ0xpdGVyYWxFbnVtTWVtYmVyKGVudW1OYW1lLCBuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuZXEpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cGxpY2l0VmFsdWVFbnVtTWVtYmVyKGVudW1OYW1lLCBuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ltcGxpY2l0VmFsdWVFbnVtTWVtYmVyKFxuICAgICAgICAgIGVudW1OYW1lLFxuICAgICAgICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlQ29kZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHByZXZpb3VzVmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUgPSBgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG5hbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlbnVtIGtleSwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjb2RlIHRvIGVtaXRcbiAgICogYW5kIHdoZXRoZXIgd2Ugc2hvdWxkIGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoaXMgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIFNvbWUgY2FzZXMgdG8ga2VlcCBpbiBtaW5kOlxuICAgKiAtIEVudW0ga2V5cyBjYW4gYmUgaW1wbGljaXRseSByZWZlcmVuY2VkIGxhdGVyLCBlLmcuIGBYID0gMSwgWSA9IFhgLiBJbiBTdWNyYXNlLCB3ZSBpbXBsZW1lbnRcbiAgICogICB0aGlzIGJ5IGRlY2xhcmluZyBhIHZhcmlhYmxlIGBYYCBzbyB0aGF0IGxhdGVyIGV4cHJlc3Npb25zIGNhbiB1c2UgaXQuXG4gICAqIC0gSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGlkZW50aWZpZXIga2V5IHN5bnRheCwgZW51bSBrZXlzIGFyZSBhbGxvd2VkIHRvIGJlIHN0cmluZyBsaXRlcmFscyxcbiAgICogICBlLmcuIGBcImhlbGxvIHdvcmxkXCIgPSAzLGAuIFRlbXBsYXRlIGxpdGVyYWwgc3ludGF4IGlzIE5PVCBhbGxvd2VkLlxuICAgKiAtIEV2ZW4gaWYgdGhlIGVudW0ga2V5IGlzIGRlZmluZWQgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgaXQgbWF5IHN0aWxsIGJlIHJlZmVyZW5jZWQgYnkgaWRlbnRpZmllclxuICAgKiAgIGxhdGVyLCBlLmcuIGBcIlhcIiA9IDEsIFkgPSBYYC4gVGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGEgc3RyaW5nXG4gICAqICAgbGl0ZXJhbCBpcyBpZGVudGlmaWVyLWxpa2UgYW5kIGVtaXQgYSB2YXJpYWJsZSBpZiBzbywgZXZlbiBpZiB0aGUgZGVjbGFyYXRpb24gZGlkIG5vdCB1c2UgYW5cbiAgICogICBpZGVudGlmaWVyLlxuICAgKiAtIFJlc2VydmVkIGtleXdvcmRzIGxpa2UgYGJyZWFrYCBhcmUgdmFsaWQgZW51bSBrZXlzLCBidXQgYXJlIG5vdCB2YWxpZCB0byBiZSByZWZlcmVuY2VkIGxhdGVyXG4gICAqICAgYW5kIHdvdWxkIGJlIGEgc3ludGF4IGVycm9yIGlmIHdlIGVtaXR0ZWQgYSB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBza2lwIHRoZSB2YXJpYWJsZVxuICAgKiAgIGRlY2xhcmF0aW9uIGluIHRob3NlIGNhc2VzLlxuICAgKlxuICAgKiBUaGUgdmFyaWFibGVOYW1lIHJldHVybiB2YWx1ZSBjYXB0dXJlcyB0aGVzZSBudWFuY2VzOiBpZiBub24tbnVsbCwgd2UgY2FuIGFuZCBtdXN0IGVtaXQgYVxuICAgKiB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgYW5kIGlmIG51bGwsIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QuXG4gICAqL1xuICBleHRyYWN0RW51bUtleUluZm8obmFtZVRva2VuKSB7XG4gICAgaWYgKG5hbWVUb2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbihuYW1lVG9rZW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZVN0cmluZ0NvZGU6IGBcIiR7bmFtZX1cImAsXG4gICAgICAgIHZhcmlhYmxlTmFtZTogaXNJZGVudGlmaWVyKG5hbWUpID8gbmFtZSA6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobmFtZVRva2VuLnR5cGUgPT09IHR0LnN0cmluZykge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlRm9yVG9rZW4obmFtZVRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWVTdHJpbmdDb2RlOiB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKG5hbWVUb2tlbi5zdGFydCwgbmFtZVRva2VuLmVuZCksXG4gICAgICAgIHZhcmlhYmxlTmFtZTogaXNJZGVudGlmaWVyKG5hbWUpID8gbmFtZSA6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBuYW1lIG9yIHN0cmluZyBhdCBiZWdpbm5pbmcgb2YgZW51bSBlbGVtZW50LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGVudW0gbWVtYmVyIHdoZXJlIHRoZSBSSFMgaXMganVzdCBhIHN0cmluZyBsaXRlcmFsIChub3Qgb21pdHRlZCwgbm90IGEgbnVtYmVyLCBhbmRcbiAgICogbm90IGEgY29tcGxleCBleHByZXNzaW9uKS4gVGhpcyBpcyB0aGUgdHlwaWNhbCBmb3JtIGZvciBUUyBzdHJpbmcgZW51bXMsIGFuZCBpbiB0aGlzIGNhc2UsIHdlXG4gICAqIGRvICpub3QqIGNyZWF0ZSBhIHJldmVyc2UgbWFwcGluZy5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGtleSB0b2tlbiwgd2hlbiB0aGUgdG9rZW4gcHJvY2Vzc29yIGlzIGF0IHRoZSBlcXVhbHMgc2lnbi5cbiAgICpcbiAgICogRXhhbXBsZSAxOlxuICAgKiBzb21lS2V5ID0gXCJzb21lIHZhbHVlXCJcbiAgICogLT5cbiAgICogY29uc3Qgc29tZUtleSA9IFwic29tZSB2YWx1ZVwiOyBNeUVudW1bXCJzb21lS2V5XCJdID0gc29tZUtleTtcbiAgICpcbiAgICogRXhhbXBsZSAyOlxuICAgKiBcInNvbWUga2V5XCIgPSBcInNvbWUgdmFsdWVcIlxuICAgKiAtPlxuICAgKiBNeUVudW1bXCJzb21lIGtleVwiXSA9IFwic29tZSB2YWx1ZVwiO1xuICAgKi9cbiAgcHJvY2Vzc1N0cmluZ0xpdGVyYWxFbnVtTWVtYmVyKFxuICAgIGVudW1OYW1lLFxuICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgIHZhcmlhYmxlTmFtZSxcbiAgKSB7XG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX1gKTtcbiAgICAgIC8vID1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gdmFsdWUgc3RyaW5nXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYDsgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dID0gJHt2YXJpYWJsZU5hbWV9O2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAke2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV1gKTtcbiAgICAgIC8vID1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gdmFsdWUgc3RyaW5nXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI7XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgaW5pdGlhbGl6ZWQgd2l0aCBhbiBleHByZXNzaW9uIG9uIHRoZSByaWdodC1oYW5kIHNpZGUgKG90aGVyIHRoYW4gYVxuICAgKiBzdHJpbmcgbGl0ZXJhbCkuIEluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBleHByZXNzaW9uIGFuZCBlbWl0IGNvZGUgdGhhdCBzZXRzIHVwXG4gICAqIGEgcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBUaGUgVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG9wZXJhdGlvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZXhwcmVzc2lvbnMgdGhhdCBjYW4gYmVcbiAgICogXCJjb25zdGFudCBmb2xkZWRcIiBhdCBjb21waWxlIHRpbWUgKGkuZS4gY29uc2lzdCBvZiBudW1iZXIgbGl0ZXJhbHMgYW5kIHNpbXBsZSBtYXRoIG9wZXJhdGlvbnNcbiAgICogb24gdGhvc2UgbnVtYmVycykgYW5kIG9uZXMgdGhhdCBhcmUgZHluYW1pYy4gRm9yIGNvbnN0YW50IGV4cHJlc3Npb25zLCBpdCBlbWl0cyB0aGUgcmVzb2x2ZWRcbiAgICogbnVtZXJpYyB2YWx1ZSwgYW5kIGF1dG8taW5jcmVtZW50aW5nIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGF0IGNhc2UuIEV2YWx1YXRpbmcgZXhwcmVzc2lvbnMgYXRcbiAgICogY29tcGlsZSB0aW1lIHdvdWxkIGFkZCBzaWduaWZpY2FudCBjb21wbGV4aXR5IHRvIFN1Y3Jhc2UsIHNvIFN1Y3Jhc2UgaW5zdGVhZCBsZWF2ZXMgdGhlXG4gICAqIGV4cHJlc3Npb24gYXMtaXMsIGFuZCB3aWxsIGxhdGVyIGVtaXQgc29tZXRoaW5nIGxpa2UgYE15RW51bVtcInByZXZpb3VzS2V5XCJdICsgMWAgdG8gaW1wbGVtZW50XG4gICAqIGF1dG8taW5jcmVtZW50aW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBkZWxldGluZyB0aGUga2V5IHRva2VuLCB3aGVuIHRoZSB0b2tlbiBwcm9jZXNzb3IgaXMgYXQgdGhlIGVxdWFscyBzaWduLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkgPSAxICsgMVxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5ID0gMSArIDE7IE15RW51bVtNeUVudW1bXCJzb21lS2V5XCJdID0gc29tZUtleV0gPSBcInNvbWVLZXlcIjtcbiAgICpcbiAgICogRXhhbXBsZSAyOlxuICAgKiBcInNvbWUga2V5XCIgPSAxICsgMVxuICAgKiAtPlxuICAgKiBNeUVudW1bTXlFbnVtW1wic29tZSBrZXlcIl0gPSAxICsgMV0gPSBcInNvbWUga2V5XCI7XG4gICAqL1xuICBwcm9jZXNzRXhwbGljaXRWYWx1ZUVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICApIHtcbiAgICBjb25zdCByaHNFbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgIGlmIChyaHNFbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCByaHNFbmRJbmRleCBvbiBlbnVtIGFzc2lnbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX1gKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgcmhzRW5kSW5kZXgpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBgOyAke2VudW1OYW1lfVske2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhcmlhYmxlTmFtZX1dID0gJHtuYW1lU3RyaW5nQ29kZX07YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XWApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByaHNFbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYF0gPSAke25hbWVTdHJpbmdDb2RlfTtgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGVudW0gbWVtYmVyIHdpdGggbm8gcmlnaHQtaGFuZCBzaWRlIGV4cHJlc3Npb24uIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIGlzIHRoZVxuICAgKiBwcmV2aW91cyB2YWx1ZSBwbHVzIDEsIG9yIDAgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHZhbHVlLiBXZSBzaG91bGQgYWxzbyBhbHdheXMgZW1pdCBhXG4gICAqIHJldmVyc2UgbWFwcGluZy5cbiAgICpcbiAgICogRXhhbXBsZSAxOlxuICAgKiBzb21lS2V5MlxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5MiA9IHNvbWVLZXkxICsgMTsgTXlFbnVtW015RW51bVtcInNvbWVLZXkyXCJdID0gc29tZUtleTJdID0gXCJzb21lS2V5MlwiO1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXkgMlwiXG4gICAqIC0+XG4gICAqIE15RW51bVtNeUVudW1bXCJzb21lIGtleSAyXCJdID0gc29tZUtleTEgKyAxXSA9IFwic29tZSBrZXkgMlwiO1xuICAgKi9cbiAgcHJvY2Vzc0ltcGxpY2l0VmFsdWVFbnVtTWVtYmVyKFxuICAgIGVudW1OYW1lLFxuICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgIHZhcmlhYmxlTmFtZSxcbiAgICBwcmV2aW91c1ZhbHVlQ29kZSxcbiAgKSB7XG4gICAgbGV0IHZhbHVlQ29kZSA9IHByZXZpb3VzVmFsdWVDb2RlICE9IG51bGwgPyBgJHtwcmV2aW91c1ZhbHVlQ29kZX0gKyAxYCA6IFwiMFwiO1xuICAgIGlmICh2YXJpYWJsZU5hbWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgY29uc3QgJHt2YXJpYWJsZU5hbWV9ID0gJHt2YWx1ZUNvZGV9OyBgKTtcbiAgICAgIHZhbHVlQ29kZSA9IHZhcmlhYmxlTmFtZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcbiAgICAgIGAke2VudW1OYW1lfVske2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhbHVlQ29kZX1dID0gJHtuYW1lU3RyaW5nQ29kZX07YCxcbiAgICApO1xuICB9XG59XG4iLCAiXG5cblxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgZ2V0Q2xhc3NJbmZvLCB7fSBmcm9tIFwiLi4vdXRpbC9nZXRDbGFzc0luZm9cIjtcbmltcG9ydCBDSlNJbXBvcnRUcmFuc2Zvcm1lciBmcm9tIFwiLi9DSlNJbXBvcnRUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IEVTTUltcG9ydFRyYW5zZm9ybWVyIGZyb20gXCIuL0VTTUltcG9ydFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgRmxvd1RyYW5zZm9ybWVyIGZyb20gXCIuL0Zsb3dUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IEplc3RIb2lzdFRyYW5zZm9ybWVyIGZyb20gXCIuL0plc3RIb2lzdFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgSlNYVHJhbnNmb3JtZXIgZnJvbSBcIi4vSlNYVHJhbnNmb3JtZXJcIjtcbmltcG9ydCBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIgZnJvbSBcIi4vTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lciBmcm9tIFwiLi9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyXCI7XG5pbXBvcnQgT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lciBmcm9tIFwiLi9PcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyIGZyb20gXCIuL1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IFJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgZnJvbSBcIi4vUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lclwiO1xuXG5pbXBvcnQgVHlwZVNjcmlwdFRyYW5zZm9ybWVyIGZyb20gXCIuL1R5cGVTY3JpcHRUcmFuc2Zvcm1lclwiO1xuXG5cblxuXG5cblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb3RUcmFuc2Zvcm1lciB7XG4gICBfX2luaXQoKSB7dGhpcy50cmFuc2Zvcm1lcnMgPSBbXX1cbiAgXG4gIFxuICAgX19pbml0MigpIHt0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcyA9IFtdfVxuICBcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdWNyYXNlQ29udGV4dCxcbiAgICB0cmFuc2Zvcm1zLFxuICAgIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AsXG4gICAgb3B0aW9ucyxcbiAgKSB7O1Jvb3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Um9vdFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0Lm5hbWVNYW5hZ2VyO1xuICAgIHRoaXMuaGVscGVyTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0LmhlbHBlck1hbmFnZXI7XG4gICAgY29uc3Qge3Rva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3J9ID0gc3VjcmFzZUNvbnRleHQ7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlblByb2Nlc3NvcjtcbiAgICB0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKTtcbiAgICB0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkID0gdHJhbnNmb3Jtcy5pbmNsdWRlcyhcInJlYWN0LWhvdC1sb2FkZXJcIik7XG4gICAgdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gQm9vbGVhbihvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpO1xuXG4gICAgaWYgKCFvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyBPcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyKHRva2VuUHJvY2Vzc29yLCB0aGlzLm5hbWVNYW5hZ2VyKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKG5ldyBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIodG9rZW5Qcm9jZXNzb3IpKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2gobmV3IE9wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIodG9rZW5Qcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIpKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMuanN4UnVudGltZSAhPT0gXCJwcmVzZXJ2ZVwiKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgICAgbmV3IEpTWFRyYW5zZm9ybWVyKHRoaXMsIHRva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIsIG9wdGlvbnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IFJlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgaW1wb3J0UHJvY2Vzc29yLCBvcHRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBudWxsO1xuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwicmVhY3QtaG90LWxvYWRlclwiKSkge1xuICAgICAgaWYgKCFvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbGVQYXRoIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIHJlYWN0LWhvdC1sb2FkZXIgdHJhbnNmb3JtLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBuZXcgUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcih0b2tlblByb2Nlc3Nvciwgb3B0aW9ucy5maWxlUGF0aCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHdheXMgd2FudCB0byBlbmFibGUgdGhlIGltcG9ydHMgdHJhbnNmb3JtZXIsIGV2ZW4gd2hlbiB0aGUgaW1wb3J0IHRyYW5zZm9ybVxuICAgIC8vIGl0c2VsZiBpc24ndCBlbmFibGVkLCBzaW5jZSB3ZSBuZWVkIHRvIGRvIHR5cGUtb25seSBpbXBvcnQgcHJ1bmluZyBmb3IgYm90aCBGbG93IGFuZFxuICAgIC8vIFR5cGVTY3JpcHQuXG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgICBpZiAoaW1wb3J0UHJvY2Vzc29yID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGltcG9ydFByb2Nlc3NvciB3aXRoIGltcG9ydHMgdHJhbnNmb3JtIGVuYWJsZWQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IENKU0ltcG9ydFRyYW5zZm9ybWVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICAgICAgIHRoaXMubmFtZU1hbmFnZXIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJNYW5hZ2VyLFxuICAgICAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIsXG4gICAgICAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3ApLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgRVNNSW1wb3J0VHJhbnNmb3JtZXIoXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgdGhpcy5uYW1lTWFuYWdlcixcbiAgICAgICAgICB0aGlzLmhlbHBlck1hbmFnZXIsXG4gICAgICAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSxcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IEZsb3dUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgdHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgVHlwZVNjcmlwdFRyYW5zZm9ybWVyKHRoaXMsIHRva2VuUHJvY2Vzc29yLCB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImplc3RcIikpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyBKZXN0SG9pc3RUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgdGhpcy5uYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKCkge1xuICAgIHRoaXMudG9rZW5zLnJlc2V0KCk7XG4gICAgdGhpcy5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgY29uc3Qgc2hvdWxkQWRkVXNlU3RyaWN0ID0gdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkO1xuICAgIC8vIFwidXNlIHN0cmljdFwiIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCwgc28gb3ZlcnJpZGUgdGhlIG5vcm1hbCB0cmFuc2Zvcm1lciBvcmRlci5cbiAgICBsZXQgcHJlZml4ID0gc2hvdWxkQWRkVXNlU3RyaWN0ID8gJ1widXNlIHN0cmljdFwiOycgOiBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHByZWZpeCArPSB0cmFuc2Zvcm1lci5nZXRQcmVmaXhDb2RlKCk7XG4gICAgfVxuICAgIHByZWZpeCArPSB0aGlzLmhlbHBlck1hbmFnZXIuZW1pdEhlbHBlcnMoKTtcbiAgICBwcmVmaXggKz0gdGhpcy5nZW5lcmF0ZWRWYXJpYWJsZXMubWFwKCh2KSA9PiBgIHZhciAke3Z9O2ApLmpvaW4oXCJcIik7XG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuICAgICAgcHJlZml4ICs9IHRyYW5zZm9ybWVyLmdldEhvaXN0ZWRDb2RlKCk7XG4gICAgfVxuICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHN1ZmZpeCArPSB0cmFuc2Zvcm1lci5nZXRTdWZmaXhDb2RlKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9rZW5zLmZpbmlzaCgpO1xuICAgIGxldCB7Y29kZX0gPSByZXN1bHQ7XG4gICAgaWYgKGNvZGUuc3RhcnRzV2l0aChcIiMhXCIpKSB7XG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gY29kZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgaWYgKG5ld2xpbmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3bGluZUluZGV4ID0gY29kZS5sZW5ndGg7XG4gICAgICAgIGNvZGUgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IGNvZGUuc2xpY2UoMCwgbmV3bGluZUluZGV4ICsgMSkgKyBwcmVmaXggKyBjb2RlLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpICsgc3VmZml4LFxuICAgICAgICAvLyBUaGUgaGFzaGJhbmcgbGluZSBoYXMgbm8gdG9rZW5zLCBzbyBzaGlmdGluZyB0aGUgdG9rZW5zIHRvIGFjY291bnRcbiAgICAgICAgLy8gZm9yIHByZWZpeCBjYW4gaGFwcGVuIG5vcm1hbGx5LlxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBwcmVmaXggKyBjb2RlICsgc3VmZml4LFxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLmlzQXRFbmQoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuZG9sbGFyQnJhY2VMKSkge1xuICAgICAgICBicmFjZURlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgcGFyZW5EZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5wYXJlblIpKSB7XG4gICAgICAgIGlmIChwYXJlbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVuRGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1Rva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fY2xhc3MpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDbGFzcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG4gICAgICBjb25zdCB3YXNQcm9jZXNzZWQgPSB0cmFuc2Zvcm1lci5wcm9jZXNzKCk7XG4gICAgICBpZiAod2FzUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCBwYXN0IGEgY2xhc3Mgd2l0aCBhIG5hbWUgYW5kIHJldHVybiB0aGF0IG5hbWUuXG4gICAqL1xuICBwcm9jZXNzTmFtZWRDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9jbGFzcywgdHQubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIGV4cG9ydGVkIGNsYXNzIG5hbWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgdGhpcy5wcm9jZXNzQ2xhc3MoKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHByb2Nlc3NDbGFzcygpIHtcbiAgICBjb25zdCBjbGFzc0luZm8gPSBnZXRDbGFzc0luZm8odGhpcywgdGhpcy50b2tlbnMsIHRoaXMubmFtZU1hbmFnZXIsIHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcyk7XG5cbiAgICAvLyBCb3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzIG5lZWQgYSBjbGFzcyBuYW1lIHRvIHVzZSB0byBpbnZva2UgdGhlIGluaXRpYWxpemVyLCBzb1xuICAgIC8vIGFzc2lnbiB0byBvbmUgaWYgbmVjZXNzYXJ5LlxuICAgIGNvbnN0IG5lZWRzQ29tbWFFeHByZXNzaW9uID1cbiAgICAgIChjbGFzc0luZm8uaGVhZGVySW5mby5pc0V4cHJlc3Npb24gfHwgIWNsYXNzSW5mby5oZWFkZXJJbmZvLmNsYXNzTmFtZSkgJiZcbiAgICAgIGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLmxlbmd0aCArIGNsYXNzSW5mby5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGxldCBjbGFzc05hbWUgPSBjbGFzc0luZm8uaGVhZGVySW5mby5jbGFzc05hbWU7XG4gICAgaWYgKG5lZWRzQ29tbWFFeHByZXNzaW9uKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY2xhc3NcIik7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7Y2xhc3NOYW1lfSA9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NUb2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNvbnRleHRJZCA9IGNsYXNzVG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgdG8gaGF2ZSBhIGNvbnRleHQgSUQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5fY2xhc3MpO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNlTCwgY29udGV4dElkKSkge1xuICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NDbGFzc0JvZHkoY2xhc3NJbmZvLCBjbGFzc05hbWUpO1xuXG4gICAgY29uc3Qgc3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzID0gY2xhc3NJbmZvLnN0YXRpY0luaXRpYWxpemVyTmFtZXMubWFwKFxuICAgICAgKG5hbWUpID0+IGAke2NsYXNzTmFtZX0uJHtuYW1lfSgpYCxcbiAgICApO1xuICAgIGlmIChuZWVkc0NvbW1hRXhwcmVzc2lvbikge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcbiAgICAgICAgYCwgJHtzdGF0aWNJbml0aWFsaXplclN0YXRlbWVudHMubWFwKChzKSA9PiBgJHtzfSwgYCkuam9pbihcIlwiKX0ke2NsYXNzTmFtZX0pYCxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChjbGFzc0luZm8uc3RhdGljSW5pdGlhbGl6ZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgJHtzdGF0aWNJbml0aWFsaXplclN0YXRlbWVudHMubWFwKChzKSA9PiBgJHtzfTtgKS5qb2luKFwiIFwiKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2Ugd2FudCB0byBqdXN0IGhhbmRsZSBjbGFzcyBmaWVsZHMgaW4gYWxsIGNvbnRleHRzLCBzaW5jZSBUeXBlU2NyaXB0IHN1cHBvcnRzIHRoZW0uIExhdGVyLFxuICAgKiB3aGVuIHNvbWUgSlMgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgY2xhc3MgZmllbGRzLCB0aGlzIHNob3VsZCBiZSBtYWRlIG9wdGlvbmFsLlxuICAgKi9cbiAgcHJvY2Vzc0NsYXNzQm9keShjbGFzc0luZm8sIGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhlYWRlckluZm8sXG4gICAgICBjb25zdHJ1Y3Rvckluc2VydFBvcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgZmllbGRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfSA9IGNsYXNzSW5mbztcbiAgICBsZXQgZmllbGRJbmRleCA9IDA7XG4gICAgbGV0IHJhbmdlVG9SZW1vdmVJbmRleCA9IDA7XG4gICAgY29uc3QgY2xhc3NDb250ZXh0SWQgPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgaWYgKGNsYXNzQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGNvbnRleHQgSUQgb24gY2xhc3MuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuICAgIGlmICh0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBcIl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSwgY29kZSkge3RoaXNba2V5XSA9IGV2YWwoY29kZSk7fVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkc0NvbnN0cnVjdG9ySW5pdCA9XG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cy5sZW5ndGggKyBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGlmIChjb25zdHJ1Y3Rvckluc2VydFBvcyA9PT0gbnVsbCAmJiBuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlID0gdGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJJbmZvLmhhc1N1cGVyY2xhc3MpIHtcbiAgICAgICAgY29uc3QgYXJnc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJhcmdzXCIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgIGBjb25zdHJ1Y3RvciguLi4ke2FyZ3NOYW1lfSkgeyBzdXBlciguLi4ke2FyZ3NOYW1lfSk7ICR7Y29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlfTsgfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdHJ1Y3RvcigpIHsgJHtjb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvZGV9OyB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIGlmIChmaWVsZEluZGV4IDwgZmllbGRzLmxlbmd0aCAmJiB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gZmllbGRzW2ZpZWxkSW5kZXhdLnN0YXJ0KSB7XG4gICAgICAgIGxldCBuZWVkc0Nsb3NlQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRMKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpc2ApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQubnVtKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpc1tgKTtcbiAgICAgICAgICBuZWVkc0Nsb3NlQnJhY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpcy5gKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBmaWVsZHNbZmllbGRJbmRleF0uZW5kKSB7XG4gICAgICAgICAgaWYgKG5lZWRzQ2xvc2VCcmFjZSAmJiB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gZmllbGRzW2ZpZWxkSW5kZXhdLmVxdWFsc0luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgICAgZmllbGRJbmRleCsrO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcmFuZ2VUb1JlbW92ZUluZGV4IDwgcmFuZ2VzVG9SZW1vdmUubGVuZ3RoICYmXG4gICAgICAgIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID49IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uc3RhcnRcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByYW5nZXNUb1JlbW92ZVtyYW5nZVRvUmVtb3ZlSW5kZXhdLmVuZCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uZW5kKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICByYW5nZVRvUmVtb3ZlSW5kZXgrKztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPT09IGNvbnN0cnVjdG9ySW5zZXJ0UG9zKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICBpZiAobmVlZHNDb25zdHJ1Y3RvckluaXQpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgICAgYDske3RoaXMubWFrZUNvbnN0cnVjdG9ySW5pdENvZGUoXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgICAgICAgICBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICl9O2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgfVxuXG4gIG1ha2VDb25zdHJ1Y3RvckluaXRDb2RlKFxuICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICBjbGFzc05hbWUsXG4gICkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5jb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICAgIC4uLmluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5tYXAoKG5hbWUpID0+IGAke2NsYXNzTmFtZX0ucHJvdG90eXBlLiR7bmFtZX0uY2FsbCh0aGlzKWApLFxuICAgIF0uam9pbihcIjtcIik7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsbHkgaXQncyBvayB0byBzaW1wbHkgcmVtb3ZlIHR5cGUgdG9rZW5zLCBidXQgd2UgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwgd2hlbiBkZWFsaW5nIHdpdGhcbiAgICogYXJyb3cgZnVuY3Rpb24gcmV0dXJuIHR5cGVzIHNpbmNlIHRoZXkgY2FuIGNvbmZ1c2UgdGhlIHBhcnNlci4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50IHRvIG1vdmVcbiAgICogdGhlIGNsb3NlLXBhcmVuIHRvIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFycm93LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvaXNzdWVzLzM5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgcHJvY2Vzc1Bvc3NpYmxlQXJyb3dQYXJhbUVuZCgpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQucGFyZW5SLCB0dC5jb2xvbikgJiYgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkuaXNUeXBlKSB7XG4gICAgICBsZXQgbmV4dE5vblR5cGVJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMTtcbiAgICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMudG9rZW5zW25leHROb25UeXBlSW5kZXhdLmlzVHlwZSkge1xuICAgICAgICBuZXh0Tm9uVHlwZUluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KG5leHROb25UeXBlSW5kZXgsIHR0LmFycm93KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgbmV4dE5vblR5cGVJbmRleCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIikgPT5cIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQW4gYXN5bmMgYXJyb3cgZnVuY3Rpb24gbWlnaHQgYmUgb2YgdGhlIGZvcm06XG4gICAqXG4gICAqIGFzeW5jIDxcbiAgICogICBUXG4gICAqID4oKSA9PiB7fVxuICAgKlxuICAgKiBpbiB3aGljaCBjYXNlLCByZW1vdmluZyB0aGUgdHlwZSBwYXJhbWV0ZXJzIHdpbGwgY2F1c2UgYSBzeW50YXggZXJyb3IuIERldGVjdCB0aGlzIGNhc2UgYW5kXG4gICAqIG1vdmUgdGhlIG9wZW4tcGFyZW4gZWFybGllci5cbiAgICovXG4gIHByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9hc3luYylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSk7XG4gICAgaWYgKG5leHRUb2tlbi50eXBlICE9PSB0dC5sZXNzVGhhbiB8fCAhbmV4dFRva2VuLmlzVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLnRva2Vuc1tuZXh0Tm9uVHlwZUluZGV4XS5pc1R5cGUpIHtcbiAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChuZXh0Tm9uVHlwZUluZGV4LCB0dC5wYXJlbkwpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJhc3luYyAoXCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBuZXh0Tm9uVHlwZUluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gV2UgYXRlIGEgKCB0b2tlbiwgc28gd2UgbmVlZCB0byBwcm9jZXNzIHRoZSB0b2tlbnMgaW4gYmV0d2VlbiBhbmQgdGhlbiB0aGUgKSB0b2tlbiBzbyB0aGF0XG4gICAgICAvLyB3ZSByZW1haW4gYmFsYW5jZWQuXG4gICAgICB0aGlzLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNoaWZ0TWFwcGluZ3MoXG4gICAgbWFwcGluZ3MsXG4gICAgcHJlZml4TGVuZ3RoLFxuICApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBpZiAobWFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcHBpbmdzW2ldID0gbWFwcGluZyArIHByZWZpeExlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9XG59XG4iLCAiaW1wb3J0IExpbmVzQW5kQ29sdW1ucyBmcm9tIFwibGluZXMtYW5kLWNvbHVtbnNcIjtcblxuXG5pbXBvcnQge2Zvcm1hdFRva2VuVHlwZX0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0VG9rZW5zKGNvZGUsIHRva2Vucykge1xuICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgdG9rZW5LZXlzID0gT2JqZWN0LmtleXModG9rZW5zWzBdKS5maWx0ZXIoXG4gICAgKGspID0+IGsgIT09IFwidHlwZVwiICYmIGsgIT09IFwidmFsdWVcIiAmJiBrICE9PSBcInN0YXJ0XCIgJiYgayAhPT0gXCJlbmRcIiAmJiBrICE9PSBcImxvY1wiLFxuICApO1xuICBjb25zdCB0eXBlS2V5cyA9IE9iamVjdC5rZXlzKHRva2Vuc1swXS50eXBlKS5maWx0ZXIoKGspID0+IGsgIT09IFwibGFiZWxcIiAmJiBrICE9PSBcImtleXdvcmRcIik7XG5cbiAgY29uc3QgaGVhZGluZ3MgPSBbXCJMb2NhdGlvblwiLCBcIkxhYmVsXCIsIFwiUmF3XCIsIC4uLnRva2VuS2V5cywgLi4udHlwZUtleXNdO1xuXG4gIGNvbnN0IGxpbmVzID0gbmV3IExpbmVzQW5kQ29sdW1ucyhjb2RlKTtcbiAgY29uc3Qgcm93cyA9IFtoZWFkaW5ncywgLi4udG9rZW5zLm1hcChnZXRUb2tlbkNvbXBvbmVudHMpXTtcbiAgY29uc3QgcGFkZGluZyA9IGhlYWRpbmdzLm1hcCgoKSA9PiAwKTtcbiAgZm9yIChjb25zdCBjb21wb25lbnRzIG9mIHJvd3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhZGRpbmdbaV0gPSBNYXRoLm1heChwYWRkaW5nW2ldLCBjb21wb25lbnRzW2ldLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByb3dzXG4gICAgLm1hcCgoY29tcG9uZW50cykgPT4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaSkgPT4gY29tcG9uZW50LnBhZEVuZChwYWRkaW5nW2ldKSkuam9pbihcIiBcIikpXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgZnVuY3Rpb24gZ2V0VG9rZW5Db21wb25lbnRzKHRva2VuKSB7XG4gICAgY29uc3QgcmF3ID0gY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgICByZXR1cm4gW1xuICAgICAgZm9ybWF0UmFuZ2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCksXG4gICAgICBmb3JtYXRUb2tlblR5cGUodG9rZW4udHlwZSksXG4gICAgICB0cnVuY2F0ZShTdHJpbmcocmF3KSwgMTQpLFxuICAgICAgLy8gQHRzLWlnbm9yZTogSW50ZW50aW9uYWwgZHluYW1pYyBhY2Nlc3MgYnkga2V5LlxuICAgICAgLi4udG9rZW5LZXlzLm1hcCgoa2V5KSA9PiBmb3JtYXRWYWx1ZSh0b2tlbltrZXldLCBrZXkpKSxcbiAgICAgIC8vIEB0cy1pZ25vcmU6IEludGVudGlvbmFsIGR5bmFtaWMgYWNjZXNzIGJ5IGtleS5cbiAgICAgIC4uLnR5cGVLZXlzLm1hcCgoa2V5KSA9PiBmb3JtYXRWYWx1ZSh0b2tlbi50eXBlW2tleV0sIGtleSkpLFxuICAgIF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSwga2V5KSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBgJHtmb3JtYXRQb3Moc3RhcnQpfS0ke2Zvcm1hdFBvcyhlbmQpfWA7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQb3MocG9zKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBsaW5lcy5sb2NhdGlvbkZvckluZGV4KHBvcyk7XG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIFwiVW5rbm93blwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7bG9jYXRpb24ubGluZSArIDF9OiR7bG9jYXRpb24uY29sdW1uICsgMX1gO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW5ndGgpIHtcbiAgaWYgKHMubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke3Muc2xpY2UoMCwgbGVuZ3RoIC0gMyl9Li4uYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5cbi8qKlxuICogU3BlY2lhbCBjYXNlIGNvZGUgdG8gc2NhbiBmb3IgaW1wb3J0ZWQgbmFtZXMgaW4gRVNNIFR5cGVTY3JpcHQuIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyB3ZSBjYW5cbiAqIHByb3Blcmx5IGdldCBnbG9iYWxzIHNvIHdlIGNhbiBjb21wdXRlIHNoYWRvd2VkIGdsb2JhbHMuXG4gKlxuICogVGhpcyBpcyBzaW1pbGFyIHRvIGxvZ2ljIGluIENKU0ltcG9ydFByb2Nlc3NvciwgYnV0IHRyaW1tZWQgZG93biB0byBhdm9pZCBsb2dpYyB3aXRoIENKU1xuICogcmVwbGFjZW1lbnQgYW5kIGZsb3cgdHlwZSBpbXBvcnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUU0ltcG9ydGVkTmFtZXModG9rZW5zKSB7XG4gIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBuZXcgU2V0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuX2ltcG9ydCkgJiZcbiAgICAgICF0b2tlbnMubWF0Y2hlczNBdEluZGV4KGksIHR0Ll9pbXBvcnQsIHR0Lm5hbWUsIHR0LmVxKVxuICAgICkge1xuICAgICAgY29sbGVjdE5hbWVzRm9ySW1wb3J0KHRva2VucywgaSwgaW1wb3J0ZWROYW1lcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbXBvcnRlZE5hbWVzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TmFtZXNGb3JJbXBvcnQoXG4gIHRva2VucyxcbiAgaW5kZXgsXG4gIGltcG9ydGVkTmFtZXMsXG4pIHtcbiAgaW5kZXgrKztcblxuICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQucGFyZW5MKSkge1xuICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0Lm5hbWUpKSB7XG4gICAgaW1wb3J0ZWROYW1lcy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cblxuICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuc3RhcikpIHtcbiAgICAvLyAqIGFzXG4gICAgaW5kZXggKz0gMjtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZUwpKSB7XG4gICAgaW5kZXgrKztcbiAgICBjb2xsZWN0TmFtZXNGb3JOYW1lZEltcG9ydCh0b2tlbnMsIGluZGV4LCBpbXBvcnRlZE5hbWVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0TmFtZXNGb3JOYW1lZEltcG9ydChcbiAgdG9rZW5zLFxuICBpbmRleCxcbiAgaW1wb3J0ZWROYW1lcyxcbikge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odG9rZW5zLCBpbmRleCk7XG4gICAgaW5kZXggPSBzcGVjaWZpZXJJbmZvLmVuZEluZGV4O1xuICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgIGltcG9ydGVkTmFtZXMuYWRkKHNwZWNpZmllckluZm8ucmlnaHROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHRva2Vucy50b2tlbnNbaW5kZXhdKX1gKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgQ0pTSW1wb3J0UHJvY2Vzc29yIGZyb20gXCIuL0NKU0ltcG9ydFByb2Nlc3NvclwiO1xuaW1wb3J0IGNvbXB1dGVTb3VyY2VNYXAsIHt9IGZyb20gXCIuL2NvbXB1dGVTb3VyY2VNYXBcIjtcbmltcG9ydCB7SGVscGVyTWFuYWdlcn0gZnJvbSBcIi4vSGVscGVyTWFuYWdlclwiO1xuaW1wb3J0IGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzIGZyb20gXCIuL2lkZW50aWZ5U2hhZG93ZWRHbG9iYWxzXCI7XG5pbXBvcnQgTmFtZU1hbmFnZXIgZnJvbSBcIi4vTmFtZU1hbmFnZXJcIjtcbmltcG9ydCB7dmFsaWRhdGVPcHRpb25zfSBmcm9tIFwiLi9PcHRpb25zXCI7XG5cbmltcG9ydCB7cGFyc2V9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbXBvcnQgVG9rZW5Qcm9jZXNzb3IgZnJvbSBcIi4vVG9rZW5Qcm9jZXNzb3JcIjtcbmltcG9ydCBSb290VHJhbnNmb3JtZXIgZnJvbSBcIi4vdHJhbnNmb3JtZXJzL1Jvb3RUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IGZvcm1hdFRva2VucyBmcm9tIFwiLi91dGlsL2Zvcm1hdFRva2Vuc1wiO1xuaW1wb3J0IGdldFRTSW1wb3J0ZWROYW1lcyBmcm9tIFwiLi91dGlsL2dldFRTSW1wb3J0ZWROYW1lc1wiO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBcIjMuMzUuMFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKGNvZGUsIG9wdGlvbnMpIHtcbiAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y3Jhc2VDb250ZXh0ID0gZ2V0U3VjcmFzZUNvbnRleHQoY29kZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgUm9vdFRyYW5zZm9ybWVyKFxuICAgICAgc3VjcmFzZUNvbnRleHQsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMsXG4gICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCksXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXJSZXN1bHQgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oKTtcbiAgICBsZXQgcmVzdWx0ID0ge2NvZGU6IHRyYW5zZm9ybWVyUmVzdWx0LmNvZGV9O1xuICAgIGlmIChvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGdlbmVyYXRpbmcgYSBzb3VyY2UgbWFwLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBzb3VyY2VNYXA6IGNvbXB1dGVTb3VyY2VNYXAoXG4gICAgICAgICAgdHJhbnNmb3JtZXJSZXN1bHQsXG4gICAgICAgICAgb3B0aW9ucy5maWxlUGF0aCxcbiAgICAgICAgICBvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMsXG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBzdWNyYXNlQ29udGV4dC50b2tlblByb2Nlc3Nvci50b2tlbnMsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAob3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgZS5tZXNzYWdlID0gYEVycm9yIHRyYW5zZm9ybWluZyAke29wdGlvbnMuZmlsZVBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWNyYXNlIHRva2VucywgbW9zdGx5IHVzZWZ1bCBmb3JcbiAqIGRpYWdub3N0aWMgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRUb2tlbnMoY29kZSwgb3B0aW9ucykge1xuICBjb25zdCB0b2tlbnMgPSBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKS50b2tlblByb2Nlc3Nvci50b2tlbnM7XG4gIHJldHVybiBmb3JtYXRUb2tlbnMoY29kZSwgdG9rZW5zKTtcbn1cblxuLyoqXG4gKiBDYWxsIGludG8gdGhlIHBhcnNlci90b2tlbml6ZXIgYW5kIGRvIHNvbWUgZnVydGhlciBwcmVwcm9jZXNzaW5nOlxuICogLSBDb21lIHVwIHdpdGggYSBzZXQgb2YgdXNlZCBuYW1lcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gbmV3IG5hbWVzLlxuICogLSBQcmVwcm9jZXNzIGFsbCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgc28gd2Uga25vdyB3aGljaCBnbG9iYWxzIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICogLSBDb21wdXRlIHNpdHVhdGlvbnMgd2hlcmUgYW55IG9mIHRob3NlIGdsb2JhbHMgYXJlIHNoYWRvd2VkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2UgcHJlcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgc2tpcHBlZCBiYXNlZCBvbiB3aGF0IGFjdHVhbCB3b3JrIGlzXG4gKiBiZWluZyBkb25lLlxuICovXG5mdW5jdGlvbiBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGlzSlNYRW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKTtcbiAgY29uc3QgaXNUeXBlU2NyaXB0RW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIik7XG4gIGNvbnN0IGlzRmxvd0VuYWJsZWQgPSBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpO1xuICBjb25zdCBkaXNhYmxlRVNUcmFuc2Zvcm1zID0gb3B0aW9ucy5kaXNhYmxlRVNUcmFuc2Zvcm1zID09PSB0cnVlO1xuICBjb25zdCBmaWxlID0gcGFyc2UoY29kZSwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnM7XG4gIGNvbnN0IHNjb3BlcyA9IGZpbGUuc2NvcGVzO1xuXG4gIGNvbnN0IG5hbWVNYW5hZ2VyID0gbmV3IE5hbWVNYW5hZ2VyKGNvZGUsIHRva2Vucyk7XG4gIGNvbnN0IGhlbHBlck1hbmFnZXIgPSBuZXcgSGVscGVyTWFuYWdlcihuYW1lTWFuYWdlcik7XG4gIGNvbnN0IHRva2VuUHJvY2Vzc29yID0gbmV3IFRva2VuUHJvY2Vzc29yKFxuICAgIGNvZGUsXG4gICAgdG9rZW5zLFxuICAgIGlzRmxvd0VuYWJsZWQsXG4gICAgZGlzYWJsZUVTVHJhbnNmb3JtcyxcbiAgICBoZWxwZXJNYW5hZ2VyLFxuICApO1xuICBjb25zdCBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCA9IEJvb2xlYW4ob3B0aW9ucy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCk7XG5cbiAgbGV0IGltcG9ydFByb2Nlc3NvciA9IG51bGw7XG4gIGlmIChvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgaW1wb3J0UHJvY2Vzc29yID0gbmV3IENKU0ltcG9ydFByb2Nlc3NvcihcbiAgICAgIG5hbWVNYW5hZ2VyLFxuICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgQm9vbGVhbihvcHRpb25zLmtlZXBVbnVzZWRJbXBvcnRzKSxcbiAgICAgIGhlbHBlck1hbmFnZXIsXG4gICAgKTtcbiAgICBpbXBvcnRQcm9jZXNzb3IucHJlcHJvY2Vzc1Rva2VucygpO1xuICAgIC8vIFdlIG5lZWQgdG8gbWFyayBzaGFkb3dlZCBnbG9iYWxzIGFmdGVyIHByb2Nlc3NpbmcgaW1wb3J0cyBzbyB3ZSBrbm93IHRoYXQgdGhlIGdsb2JhbHMgYXJlLFxuICAgIC8vIGJ1dCBiZWZvcmUgdHlwZS1vbmx5IGltcG9ydCBwcnVuaW5nLCBzaW5jZSB0aGF0IHJlbGllcyBvbiBzaGFkb3dpbmcgaW5mb3JtYXRpb24uXG4gICAgaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHModG9rZW5Qcm9jZXNzb3IsIHNjb3BlcywgaW1wb3J0UHJvY2Vzc29yLmdldEdsb2JhbE5hbWVzKCkpO1xuICAgIGlmIChvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpICYmICFvcHRpb25zLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICBpbXBvcnRQcm9jZXNzb3IucHJ1bmVUeXBlT25seUltcG9ydHMoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy50cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSAmJiAhb3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgIC8vIFNoYWRvd2VkIGdsb2JhbCBkZXRlY3Rpb24gaXMgbmVlZGVkIGZvciBUUyBpbXBsaWNpdCBlbGlzaW9uIG9mIGltcG9ydGVkIG5hbWVzLlxuICAgIGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzKHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIGdldFRTSW1wb3J0ZWROYW1lcyh0b2tlblByb2Nlc3NvcikpO1xuICB9XG4gIHJldHVybiB7dG9rZW5Qcm9jZXNzb3IsIHNjb3BlcywgbmFtZU1hbmFnZXIsIGltcG9ydFByb2Nlc3NvciwgaGVscGVyTWFuYWdlcn07XG59XG4iLCAiLy8hIFV0aWxpdGllcyBmb3IgcnVubmluZyBqYXZhc2NyaXB0LlxuXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tIFwic3VjcmFzZVwiO1xuXG5leHBvcnQgdHlwZSBTY3JpcHRMYW5ndWFnZSA9IFwianNcIiB8IFwidHNcIiB8IFwianN4XCIgfCBcInRzeFwiO1xuXG4vKiogQ29udmVydHMgYSByYXcgc2NyaXB0IGluIHRoZSBnaXZlbiBsYW5ndWFnZSB0byBwbGFpbiBqYXZhc2NyaXB0LiAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3BpbGUoc2NyaXB0OiBzdHJpbmcsIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgICBjYXNlIFwianNcIjpcbiAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7XG4gICAgICAgIGNhc2UgXCJqc3hcIjpcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oc2NyaXB0LCB7IHRyYW5zZm9ybXM6IFtcImpzeFwiXSwganN4UHJhZ21hOiBcImhcIiwganN4RnJhZ21lbnRQcmFnbWE6IFwiRnJhZ21lbnRcIiB9KS5jb2RlO1xuICAgICAgICBjYXNlIFwidHNcIjpcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oc2NyaXB0LCB7IHRyYW5zZm9ybXM6IFtcInR5cGVzY3JpcHRcIl0gfSkuY29kZTtcbiAgICAgICAgY2FzZSBcInRzeFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zOiBbXCJ0eXBlc2NyaXB0XCIsIFwianN4XCJdLFxuICAgICAgICAgICAgICAgIGpzeFByYWdtYTogXCJoXCIsXG4gICAgICAgICAgICAgICAganN4RnJhZ21lbnRQcmFnbWE6IFwiRnJhZ21lbnRcIixcbiAgICAgICAgICAgIH0pLmNvZGU7XG4gICAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlIGEgc2NyaXB0IHdoZXJlICd0aGlzJyBmb3IgdGhlIHNjcmlwdCBpcyBzZXQgdG8gdGhlIGdpdmVuIGNvbnRleHQuIEFsbG93cyB5b3UgdG8gZGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW5Db250ZXh0KHNjcmlwdDogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICAgIGNvbnN0IHBhaXJzID0gT2JqZWN0LmVudHJpZXModmFyaWFibGVzKTtcbiAgICBjb25zdCBrZXlzID0gcGFpcnMubWFwKChba2V5LCBfXSkgPT4ga2V5KTtcbiAgICBjb25zdCB2YWx1ZXMgPSBwYWlycy5tYXAoKFtfLCB2YWx1ZV0pID0+IHZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oLi4ua2V5cywgc2NyaXB0KSguLi52YWx1ZXMpO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGEgc2NyaXB0IHBvc3NpYmx5IGFzeW5jaHJvbm91c2x5LCBpZiB0aGUgc2NyaXB0IGNvbnRhaW5zIGBhc3luYy9hd2FpdGAgYmxvY2tzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNFdmFsSW5Db250ZXh0KHNjcmlwdDogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChzY3JpcHQuaW5jbHVkZXMoXCJhd2FpdFwiKSkge1xuICAgICAgICByZXR1cm4gZXZhbEluQ29udGV4dChcInJldHVybiAoYXN5bmMgKCkgPT4geyBcIiArIHNjcmlwdCArIFwiIH0pKClcIiwgdmFyaWFibGVzKSBhcyBQcm9taXNlPGFueT47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShldmFsSW5Db250ZXh0KHNjcmlwdCwgdmFyaWFibGVzKSk7XG4gICAgfVxufVxuIiwgIi8qKiBAbW9kdWxlIHVpICovXG5pbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEluZGV4UXVlcnkgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXgtcXVlcnlcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5cbi8qKiBIb29rIHRoYXQgdXBkYXRlcyB0aGUgdmlldyB3aGVuZXZlciB0aGUgcmV2aXNpb24gdXBkYXRlcywgcmV0dXJuaW5nIHRoZSBuZXdlc3QgcmV2aXNpb24uXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZTogRGF0YWNvcmUsIHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBjb25zdCBbcmV2aXNpb24sIHNldFJldmlzaW9uXSA9IHVzZVN0YXRlKGRhdGFjb3JlLmRhdGFzdG9yZS5yZXZpc2lvbik7XG4gICAgY29uc3QgZGVib3VuY2VkUmV2aXNpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHNldHRpbmdzPy5kZWJvdW5jZSAmJiBzZXR0aW5ncy5kZWJvdW5jZSA9PSAwKSByZXR1cm4gc2V0UmV2aXNpb247XG4gICAgICAgIGVsc2UgcmV0dXJuIGRlYm91bmNlKHNldFJldmlzaW9uLCBzZXR0aW5ncz8uZGVib3VuY2UgPz8gNTAwKTtcbiAgICB9LCBbc2V0UmV2aXNpb24sIHNldHRpbmdzPy5kZWJvdW5jZV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gZGF0YWNvcmUub24oXCJ1cGRhdGVcIiwgZGVib3VuY2VkUmV2aXNpb24pO1xuICAgICAgICByZXR1cm4gKCkgPT4gZGF0YWNvcmUub2ZmcmVmKHJlZik7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIHJldmlzaW9uO1xufVxuXG4vKiogQSBob29rIHdoaWNoIHVwZGF0ZXMgd2hlbmV2ZXIgZmlsZSBtZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyBmaWxlIHVwZGF0ZXMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpbGVNZXRhZGF0YShcbiAgICBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9XG4pOiBJbmRleGFibGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4UmV2aXNpb24gPSB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHNldHRpbmdzKTtcblxuICAgIC8vIFRPRE86IEkgdGhpbmsgbG9hZCByZXR1cm5zIGNvbnNpc3RlbnQgb2JqZWN0cyBzbyBpdCBzaG91bGQgYmUgb2theS5cbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiBkYXRhY29yZS5kYXRhc3RvcmUubG9hZChwYXRoKSwgW2luZGV4UmV2aXNpb24sIHBhdGhdKTtcbn1cblxuLyoqIFNldHRpbmdzIHdoaWNoIGNvbnRyb2wgaG93IGF1dG9tYXRpYyBxdWVyeSByZWxvYWRpbmcgc2hvdWxkIHdvcmsuXG4gKiBAZ3JvdXAgQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlUXVlcnlTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCwgZGVib3VuY2UgcmVwZWF0ZWQgcXVlcnkgdXBkYXRlcyBzbyB0aGF0IGFuIHVwZGF0ZSBvbmx5IG9jY3VycyBldmVyeSBcXDxkZWJvdW5jZVxcPiBtaWxsaXNlY29uZHMuIFRoaXNcbiAgICAgKiBkZWZhdWx0cyB0byB0aGUgb3ZlcmFsbCBkZWZhdWx0IGRlYm91bmNlIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGRlYm91bmNlPzogbnVtYmVyO1xufVxuXG4vKiogUGVyZm9ybSBhIGxpdmUsIHN5bmNocm9ub3VzIHF1ZXJ5IHdoaWNoIHVwZGF0ZXMgaXRzIHJlc3VsdHMgd2hlbmV2ZXIgdGhlIGJhY2tpbmcgcXVlcnkgd291bGQgY2hhbmdlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5VXNlRnVsbFF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgLy8gVHJhY2sgaW5kZXggdXBkYXRlcyB3aXRoIGN1c3RvbWl6YWJsZSBkZWJvdW5jaW5nLlxuICAgIGNvbnN0IGluZGV4UmV2aXNpb24gPSB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHNldHRpbmdzKTtcblxuICAgIC8vIFdlIFwiaW50ZXJuXCIgdGhlIHF1ZXJ5LCBtZWFuaW5nIHdlIHJldXNlIHRoZSBvbGRlc3QgdmVyc2lvbiBpZiBpdCBpcyBzZW1hbnRpY2FsbHkgZXF1YWwgYnV0IGp1c3QgYSBkaWZmZXJlbnQgb2JqZWN0LlxuICAgIGNvbnN0IGludGVybmVkUXVlcnkgPSB1c2VJbnRlcm5pbmcocXVlcnksIExpdGVyYWxzLmVxdWFscyk7XG4gICAgLy8gSW50ZXJuIHRoZSBvdXRwdXQgYXMgd2VsbCBzbyByZWFjdCBkaWZmaW5nIFwianVzdCB3b3Jrc1wiIHdpdGggdGhlIHJlc3VsdCBvZiB1c2VRdWVyeS5cbiAgICBjb25zdCBpbnRlcm5lZFJlc3VsdCA9IHVzZVJlZjxSZXN1bHQ8U2VhcmNoUmVzdWx0PEluZGV4YWJsZT4sIHN0cmluZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvLyBPbiBldmVyeSBpbmRleCByZXZpc2lvbiB1cGRhdGUsIHJlLXJ1biB0aGUgcXVlcnkgYW5kIGNoZWNrIGlmIGl0IHByb2R1Y2VkIG1lYW5pbmdmdWxseSBuZXcgdmFsdWVzLlxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0ID0gZGF0YWNvcmUuZGF0YXN0b3JlLnNlYXJjaChxdWVyeSk7XG5cbiAgICAgICAgLy8gU2V0IGZhaWx1cmUgaWYgdGhlIG5ldyByZXF1ZXN0IGlzIGEgZmFpbHVyZS5cbiAgICAgICAgaWYgKCFuZXdSZXN1bHQuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9IFJlc3VsdC5mYWlsdXJlKG5ld1Jlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuZWRSZXN1bHQuY3VycmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJuZWQgc3RhdGUsIHVwZGF0ZSBpdCBhbmQgcmV0dXJuLlxuICAgICAgICBpZiAoaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG5ldyByZXF1ZXN0IGlzIGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSBvbGQgcmVzdWx0IGlzIGRlZmluZWQuIElmIHRoZSBvbGQgcmVzdWx0IHdhcyBhbiBlcnJvciwgdXBkYXRlIGl0LlxuICAgICAgICBjb25zdCBvbGRSZXN1bHQgPSBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICBpZiAoIW9sZFJlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm90aCBhcmUgc3VjY2Vzc2Z1bCwgY2hlY2sgaWYgdGhleSBhcmUgZGlmZmVyZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBvbGRSZXN1bHQudmFsdWUucmV2aXNpb24gIT0gbmV3UmVzdWx0LnZhbHVlLnJldmlzaW9uIHx8XG4gICAgICAgICAgICAhc2FtZU9iamVjdHMob2xkUmVzdWx0LnZhbHVlLnJlc3VsdHMsIG5ld1Jlc3VsdC52YWx1ZS5yZXN1bHRzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAoaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9IFJlc3VsdC5zdWNjZXNzKG5ld1Jlc3VsdC52YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FtZSByZXZpc2lvbiBhbmQgc2FtZSBvYmplY3RzLCB0aGlzIGlzIHRoZSBzYW1lIHF1ZXJ5IHJlc3VsdCwgc28gcmV0dXJuIHRoZSBvbGQgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaW50ZXJuZWRSZXN1bHQuY3VycmVudDtcbiAgICB9LCBbaW50ZXJuZWRRdWVyeSwgaW5kZXhSZXZpc2lvbl0pO1xufVxuXG4vKiogUGVyZm9ybSBhIGxpdmUsIHN5bmNocm9ub3VzIHF1ZXJ5IHdoaWNoIHVwZGF0ZXMgaXRzIHJlc3VsdHMgd2hlbmV2ZXIgdGhlIGJhY2tpbmcgcXVlcnkgd291bGQgY2hhbmdlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRnVsbFF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFNlYXJjaFJlc3VsdDxJbmRleGFibGU+IHtcbiAgICByZXR1cm4gdHJ5VXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLm9yRWxzZVRocm93KChlKSA9PiBcIkZhaWxlZCB0byBzZWFyY2g6IFwiICsgZSk7XG59XG5cbi8qKiBTaW1wbGllciB2ZXJzaW9uIG9mIHVzZUZ1bGxRdWVyeSB3aGljaCBqdXN0IGRpcmVjdGx5IHJldHVybnMgcmVzdWx0cy5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeVVzZVF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFJlc3VsdDxJbmRleGFibGVbXSwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRyeVVzZUZ1bGxRdWVyeShkYXRhY29yZSwgcXVlcnksIHNldHRpbmdzKS5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnJlc3VsdHMpO1xufVxuXG4vKiogU2ltcGxpZXIgdmVyc2lvbiBvZiB1c2VGdWxsUXVlcnkgd2hpY2gganVzdCBkaXJlY3RseSByZXR1cm5zIHJlc3VsdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShkYXRhY29yZTogRGF0YWNvcmUsIHF1ZXJ5OiBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3MpOiBJbmRleGFibGVbXSB7XG4gICAgcmV0dXJuIHVzZUZ1bGxRdWVyeShkYXRhY29yZSwgcXVlcnksIHNldHRpbmdzKS5yZXN1bHRzO1xufVxuXG4vKiogRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHNldHMgb2Ygb2JqZWN0cyBhcmUgdGhlIHNhbWUuIE9ubHkgdXNlcyByZXZpc2lvbiBjb21wYXJpc29uIGZvciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIHNhbWVPYmplY3RzKG9sZDogSW5kZXhhYmxlW10sIGluY29taW5nOiBJbmRleGFibGVbXSkge1xuICAgIGlmIChvbGQubGVuZ3RoICE9IGluY29taW5nLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgb2xkczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAoY29uc3QgaW5kZXhhYmxlIG9mIG9sZCkge1xuICAgICAgICBvbGRzW2luZGV4YWJsZS4kaWRdID0gaW5kZXhhYmxlLiRyZXZpc2lvbiE7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbmRleGFibGUgb2YgaW5jb21pbmcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvbGRzW2luZGV4YWJsZS4kaWRdO1xuICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBpbmRleGFibGUuJHJldmlzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogXCJJbnRlcm5zXCIgdGhlIGluY29taW5nIHZhbHVlLCByZXR1cm5pbmcgdGhlIG9sZGVzdCBlcXVhbCBpbnN0YW5jZS4gVGhpcyBpcyBhIHRyaWNrIHRvIGltcHJvdmUgUmVhY3QgZGlmZmluZ1xuICogIGJlaGF2aW9yLCBhcyB0d28gb2JqZWN0cyB3aGljaCBhcmUgZXF1YWxzIHZpYSBlcXVhbGl0eShhLCBiKSB3aWxsIHJldHVybiB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIGFmdGVyIGJlaW5nXG4gKiAgaW50ZXJuZWQuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbnRlcm5pbmc8VD4odmFsdWU6IFQsIGVxdWFsaXR5OiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IFQge1xuICAgIGNvbnN0IHJlZiA9IHVzZVJlZjxUPigpO1xuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgfHwgIWVxdWFsaXR5KHJlZi5jdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbi8qKiBVc2UgYSBzdGFibGUgY2FsbGJhY2sgd2hpY2ggaGlkZXMgbXV0YWJsZSBzdGF0ZSBiZWhpbmQgYSBzdGFibGUgcmVmZXJlbmNlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhYmxlQ2FsbGJhY2s8VD4oY2FsbGJhY2s6IFQsIGRlcHM6IGFueVtdKTogVCB7XG4gICAgY29uc3QgcmVmID0gdXNlUmVmPFQ+KCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICByZWYuY3VycmVudCA9IGNhbGxiYWNrO1xuICAgIH0sIFtjYWxsYmFjaywgLi4uZGVwc10pO1xuXG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICAgICAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIChyZWYuY3VycmVudCBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICBbcmVmXVxuICAgICkgYXMgVDtcbn1cblxuY29uc3QgTk9fT1BfVVBEQVRFID0gKHg6IGFueSkgPT4ge307XG5cbi8qKiBVc2Ugc3RhdGUgdGhhdCB3aWxsIGRlZmF1bHQgdG8gYW4gZXh0ZXJuYWwgY29udHJvbGxlZCB2YWx1ZSBpZiBzZXQ7IG90aGVyd2lzZSwgd2lsbCB0cmFjayBhbiBpbnRlcm5hbCB2YWx1ZS5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRTdGF0ZTxUPihcbiAgICBpbml0aWFsU3RhdGU6IFQsXG4gICAgb3ZlcnJpZGU/OiBULFxuICAgIHVwZGF0ZT86ICh2YWx1ZTogVCkgPT4gdm9pZFxuKTogW1QsICh2YWx1ZTogVCkgPT4gdm9pZF0ge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUob3ZlcnJpZGUgPz8gaW5pdGlhbFN0YXRlKTtcbiAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhdGUgIT0gb3ZlcnJpZGUpIHNldFN0YXRlKG92ZXJyaWRlKTtcblxuICAgICAgICByZXR1cm4gW292ZXJyaWRlLCB1cGRhdGUgPz8gTk9fT1BfVVBEQVRFXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXRTdGF0ZVdpdGhVcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgICAgICBzZXRTdGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAodXBkYXRlKSB1cGRhdGUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbc2V0U3RhdGUsIHVwZGF0ZV1cbiAgICApO1xuXG4gICAgcmV0dXJuIFtzdGF0ZSwgc2V0U3RhdGVXaXRoVXBkYXRlXTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgUHJvcHNXaXRoQ2hpbGRyZW4sIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlSW5kZXhVcGRhdGVzIH0gZnJvbSBcIi4vaG9va3NcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBWTm9kZSwgY3JlYXRlRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIExpdCB9IGZyb20gXCIuL21hcmtkb3duXCI7XG5cbmltcG9ydCBcIi4vZXJyb3JzLmNzc1wiO1xuXG5mdW5jdGlvbiBMb2FkaW5nUHJvZ3Jlc3MoeyBkYXRhY29yZSB9OiB7IGRhdGFjb3JlOiBEYXRhY29yZSB9KSB7XG4gICAgdXNlSW5kZXhVcGRhdGVzKGRhdGFjb3JlLCB7IGRlYm91bmNlOiAyNTAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8cD5cbiAgICAgICAgICAgIHtkYXRhY29yZS5pbml0aWFsaXplcj8uaW5pdGlhbGl6ZWQgPz8gMH0gLyB7ZGF0YWNvcmUuaW5pdGlhbGl6ZXI/LnRhcmdldFRvdGFsID8/IDB9XG4gICAgICAgIDwvcD5cbiAgICApO1xufVxuXG4vKiogTG9hZGluZyBib3VuZGFyeSB3aGljaCBzaG93cyBhIGxvYWRpbmcgc2NyZWVuIHdoaWxlIERhdGFjb3JlIGlzIGluaXRpYWxpemluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2FkaW5nQm91bmRhcnkoeyBjaGlsZHJlbiwgZGF0YWNvcmUgfTogUHJvcHNXaXRoQ2hpbGRyZW48eyBkYXRhY29yZTogRGF0YWNvcmUgfT4pIHtcbiAgICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGRhdGFjb3JlLmluaXRpYWxpemVkKTtcblxuICAgIC8vIFN5bmNzIHRoZSBib3VuZGFyeSB3aXRoIGRhdGFjb3JlJ3MgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAgLy8gVE9ETzogQWRkIGFuIGV2ZW50IHRvIGRhdGFjb3JlIHdoaWNoIGluZGljYXRlcyB3aGVuIGEgcmVpbmRleCBoYXBwZW5zIChpLmUuLCBpbml0aWFsaXplZFxuICAgIC8vIHJldHVybnMgYmFjayB0byAnZmFsc2UnKS5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWYgPSBkYXRhY29yZS5vbihcImluaXRpYWxpemVkXCIsICgpID0+IHNldEluaXRpYWxpemVkKHRydWUpKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGRhdGFjb3JlLm9mZnJlZihyZWYpO1xuICAgIH0sIFtpbml0aWFsaXplZCwgZGF0YWNvcmVdKTtcblxuICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWxvYWRpbmctYm91bmRhcnlcIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy10aXRsZVwiPkRhdGFjb3JlIGlzIGdldHRpbmcgcmVhZHkuLi48L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nUHJvZ3Jlc3MgZGF0YWNvcmU9e2RhdGFjb3JlfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgdmFuaWxsYSBqYXZhc3JpcHQgZnVuY3Rpb24gbGF6aWx5IG9uZSB0aW1lLiBNYWlubHkgdXNlZnVsIHRvIG9ubHkgcnVuIGEgc2NyaXB0XG4gKiBvbmNlIHRoZSBwYXJlbnQgbG9hZGluZyBib3VuZGFyeSBpcyBhY3R1YWxseSByZWFkeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdENvbnRhaW5lcih7XG4gICAgZXhlY3V0b3IsXG4gICAgc291cmNlUGF0aCxcbn06IHtcbiAgICBleGVjdXRvcjogKCkgPT4gUHJvbWlzZTxMaXRlcmFsIHwgVk5vZGUgfCBGdW5jdGlvbj47XG4gICAgc291cmNlUGF0aDogc3RyaW5nO1xufSkge1xuICAgIGNvbnN0IFtlbGVtZW50LCBzZXRFbGVtZW50XSA9IHVzZVN0YXRlPEpTWC5FbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRFbGVtZW50KHVuZGVmaW5lZCk7XG4gICAgICAgIHNldEVycm9yKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgZXhlY3V0b3IoKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gc2V0RWxlbWVudChtYWtlUmVuZGVyYWJsZUVsZW1lbnQocmVzdWx0LCBzb3VyY2VQYXRoKSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBzZXRFcnJvcihlcnJvcikpO1xuICAgIH0sIFtleGVjdXRvcl0pO1xuXG4gICAgLy8gUHJvcG9nYXRlIGVycm9yIHVwd2FyZHMuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiA8PntlbGVtZW50ID8/IDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIjwgVmlldyBpcyByZW5kZXJpbmcgPlwiIC8+fTwvPjtcbn1cblxuLyoqIE1ha2UgYSByZW5kZXJhYmxlIGVsZW1lbnQgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0OyBpZiB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwb3NzaWJsZSwgdGhyb3cgYW4gZXhjZXB0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSZW5kZXJhYmxlRWxlbWVudChvYmplY3Q6IGFueSwgc291cmNlUGF0aDogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob2JqZWN0LCB7fSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAob2JqZWN0IGFzIGFueVtdKS5tYXAoKHgpID0+IG1ha2VSZW5kZXJhYmxlRWxlbWVudCh4LCBzb3VyY2VQYXRoKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gPExpdCB2YWx1ZT17b2JqZWN0fSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSAvPjtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGRpcmVjdCBBUEktZmFjaW5nIGVsZW1lbnRzLiBUaGlzIGVzc2VudGlhbGx5IHNlcnZlcyBhcyBhIGxheWVyIG9mIGluZGlyZWN0aW9uIHRvIGludGVybmFsIHR5cGVzLCBzbyB0aGF0IHRoZSBpbnRlcm5hbCB0eXBlcyBjYW4gYmVcbiAqIGNoYW5nZWQgd2l0aG91dCBicmVha2luZyB0aGUgQVBJLlxuICpcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyBIVE1MQXR0cmlidXRlcywgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmltcG9ydCBcImFwaS91aS9sYXlvdXQuY3NzXCI7XG5cbi8qKiBDcmVhdGVzIGEgdmVydGljYWwgZmxleGJveCBcInN0YWNrXCIgb2YgZWxlbWVudHMuXG4gKlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN0YWNrKFxuICAgIHByb3BzOiBIVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4gJiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAganVzdGlmeT86IHN0cmluZztcbiAgICAgICAgYWxpZ24/OiBzdHJpbmc7XG4gICAgICAgIHN0eWxlPzogc3RyaW5nO1xuICAgIH1cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBqdXN0aWZ5LCBhbGlnbiwgc3R5bGUsIGNoaWxkcmVuLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCBleHRyYVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBzdHlsZSA9IFwiXCI7XG4gICAgICAgIGlmIChqdXN0aWZ5KSBzdHlsZSArPSBganVzdGlmeS1jb250ZW50OiAke2p1c3RpZnl9O2A7XG4gICAgICAgIGlmIChhbGlnbikgc3R5bGUgKz0gYGFsaWduLWl0ZW1zOiAke2FsaWdufTtgO1xuXG4gICAgICAgIHJldHVybiBzdHlsZS5sZW5ndGggPT0gMCA/IHVuZGVmaW5lZCA6IHN0eWxlO1xuICAgIH0sIFtqdXN0aWZ5LCBhbGlnbl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgPyBjbGFzc05hbWUgKyBcIiBkYy1zdGFja1wiIDogXCJkYy1zdGFja1wifVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlID8gZXh0cmFTdHlsZSArIHN0eWxlIDogZXh0cmFTdHlsZX1cbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaG9yaXpvbnRhbCBmbGV4Ym94IFwiZ3JvdXBpbmdcIiBvZiBlbGVtZW50cy5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gR3JvdXAoXG4gICAgcHJvcHM6IEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiAmIHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAgICAgICBhbGlnbj86IHN0cmluZztcbiAgICAgICAgc3R5bGU/OiBzdHJpbmc7XG4gICAgfVxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGp1c3RpZnksIGFsaWduLCBzdHlsZSwgY2hpbGRyZW4sIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IGV4dHJhU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKGp1c3RpZnkpIHN0eWxlICs9IGBqdXN0aWZ5LWNvbnRlbnQ6ICR7anVzdGlmeX07YDtcbiAgICAgICAgaWYgKGFsaWduKSBzdHlsZSArPSBgYWxpZ24taXRlbXM6ICR7YWxpZ259O2A7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlLmxlbmd0aCA9PSAwID8gdW5kZWZpbmVkIDogc3R5bGU7XG4gICAgfSwgW2p1c3RpZnksIGFsaWduXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSA/IGNsYXNzTmFtZSArIFwiIGRjLWdyb3VwXCIgOiBcImRjLWdyb3VwXCJ9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGUgPyBleHRyYVN0eWxlICsgc3R5bGUgOiBleHRyYVN0eWxlfVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cbiIsICIvKiogQmFzaWMgVUkgY29tcG9uZW50cyB0aGF0IGhhdmUgc2ltcGxlIE9ic2lkaWFuIHRoZW1pbmcuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmltcG9ydCB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgc2V0SWNvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vYmFzaWNzLmNzc1wiO1xuXG4vKiogVmFyaW91cyBpbnRlbnRzIGZvciBidXR0b25zIGFuZCBvdGhlciBpbnRlcmFjdGl2ZSBlbGVtZW50cy4gKi9cbmV4cG9ydCB0eXBlIEludGVudCA9IFwiZXJyb3JcIiB8IFwid2FyblwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIE9taXR0YWJsZSA9IFwidmFsdWVcIiB8IFwiZGVmYXVsdFZhbHVlXCI7XG5leHBvcnQgY29uc3QgSU5URU5UX0NMQVNTRVM6IFJlY29yZDxJbnRlbnQsIHN0cmluZz4gPSB7XG4gICAgZXJyb3I6IFwiZGMtaW50ZW50LWVycm9yXCIsXG4gICAgd2FybjogXCJkYy1pbnRlbnQtd2FyblwiLFxuICAgIGluZm86IFwiZGMtaW50ZW50LWluZm9cIixcbiAgICBzdWNjZXNzOiBcImRjLWludGVudC1zdWNjZXNzXCIsXG59O1xuXG4vKiogV3JhcHBlciBmb3IgYSByZWd1bGFyIEhUTUwgYnV0dG9uIHdpdGggc29tZSBkZWZhdWx0IGNsYXNzZXMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKFxuICAgIHByb3BzOiB7IGNsYXNzTmFtZT86IHN0cmluZzsgaW50ZW50PzogSW50ZW50OyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MQnV0dG9uRWxlbWVudD5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBpbnRlbnQsIGNoaWxkcmVuLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy1idXR0b25cIiwgaW50ZW50ID8gSU5URU5UX0NMQVNTRVNbaW50ZW50XSA6IHVuZGVmaW5lZCwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgKTtcbn1cblxuLyoqIEEgc2ltcGxlIHRleHRib3ggd2hpY2ggYWNjZXB0cyB0ZXh0LlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0Ym94KHByb3BzOiB7IGNsYXNzTmFtZT86IHN0cmluZyB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB0eXBlPXtwcm9wcy50eXBlID8/IFwidGV4dFwifSBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtdGV4dGJveFwiLCBjbGFzc05hbWUpfSB7Li4uZm9yd2FyZGluZ1Byb3BzfSAvPlxuICAgICk7XG59XG5cbi8qKiBBIGNoZWNrYm94IHRoYXQgY2FuIGJlIGNoZWNrZWQgYW5kIHVuY2hlY2tlZC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2JveChcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgb25DaGVja0NoYW5nZT86IChjaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuICAgICAgICBjaGlsZHJlbj86IENvbXBvbmVudENoaWxkcmVuO1xuICAgIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD5cbikge1xuICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgIGNoZWNrZWQ6IGlzQ2hlY2tlZCxcbiAgICAgICAgb25DaGVja0NoYW5nZSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIC4uLmZvcndhcmRpbmdQcm9wc1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBbY2hlY2tlZCwgc2V0Q2hlY2tlZF0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdENoZWNrZWQgPz8gZmFsc2UsIGlzQ2hlY2tlZCwgb25DaGVja0NoYW5nZSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChldmVudDogYW55KSA9PiBzZXRDaGVja2VkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCksIFtzZXRDaGVja2VkXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWNoZWNrYm94XCIsIGRpc2FibGVkID8gXCJkYy1jaGVja2JveC1kaXNhYmxlZFwiIDogdW5kZWZpbmVkLCBjbGFzc05hbWUpfT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9sYWJlbD5cbiAgICApO1xufVxuXG4vKiogV3JhcHBlciBmb3IgYSBzbGlkZXIgKHJhbmdlIGlucHV0KSB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNsaWRlcihcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIG1pbj86IG51bWJlcjtcbiAgICAgICAgbWF4PzogbnVtYmVyO1xuICAgICAgICBzdGVwPzogbnVtYmVyO1xuICAgICAgICB2YWx1ZT86IG51bWJlcjtcbiAgICAgICAgZGVmYXVsdFZhbHVlPzogbnVtYmVyO1xuICAgICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgfSAmIE9taXQ8UmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+LCBPbWl0dGFibGU+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgbWluID0gMCwgbWF4ID0gMTAsIHN0ZXAgPSAxLCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBvblZhbHVlQ2hhbmdlLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzbGlkZXIsIHNldFNsaWRlcl0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdFZhbHVlID8/IDAsIHZhbHVlLCBvblZhbHVlQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldFNsaWRlcihwYXJzZUZsb2F0KGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpKSwgW3NldFNsaWRlcl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17c2xpZGVyLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtc2xpZGVyXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICBtaW49e21pbn1cbiAgICAgICAgICAgIG1heD17bWF4fVxuICAgICAgICAgICAgc3RlcD17c3RlcH1cbiAgICAgICAgICAgIHZhbHVlPXtzbGlkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHN3aXRjaCAodG9nZ2xlKSBjb21wb25lbnQgd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTd2l0Y2goXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICAgIGNoZWNrZWQ/OiBib29sZWFuO1xuICAgICAgICBkZWZhdWx0Q2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIG9uVG9nZ2xlQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGRpc2FibGVkLCBkZWZhdWx0Q2hlY2tlZCwgY2hlY2tlZCwgb25Ub2dnbGVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3RvZ2dsZWQsIHNldFRvZ2dsZWRdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRDaGVja2VkID8/IGZhbHNlLCBjaGVja2VkLCBvblRvZ2dsZUNoYW5nZSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChldmVudDogYW55KSA9PiBzZXRUb2dnbGVkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCksIFtzZXRUb2dnbGVkXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXG4gICAgICAgICAgICAgICAgXCJkYy1zd2l0Y2ggY2hlY2tib3gtY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgdG9nZ2xlZCA/IFwiaXMtZW5hYmxlZFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkID8gXCJkYy1zd2l0Y2gtZGlzYWJsZWRcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGMtc3dpdGNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17dG9nZ2xlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHNlbGVjdCBjb21wb25lbnQgd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhU2VsZWN0KFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgICAgICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgICAgICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTFNlbGVjdEVsZW1lbnQ+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgb3B0aW9ucyA9IFtdLCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBvblZhbHVlQ2hhbmdlLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzZWxlY3RlZFZhbHVlLCBzZXRTZWxlY3RlZFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKHZhbHVlID8/IGRlZmF1bHRWYWx1ZSA/PyBcIlwiKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHNldFNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgIH0sIFt2YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLXNlbGVjdCBkcm9wZG93blwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkVmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZFZhbHVlKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZSAmJiBvblZhbHVlQ2hhbmdlKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSB2YWx1ZT17b3B0aW9uLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICApO1xufVxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgYW4gaWNvblxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEljb24ocHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nOyBpY29uOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBpY29uIH0gPSBwcm9wcztcbiAgICBjb25zdCByZWYgPSBSZWFjdC5jcmVhdGVSZWY8SFRNTFNwYW5FbGVtZW50PigpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBzZXRJY29uKHJlZi5jdXJyZW50LCBpY29uKTtcbiAgICAgICAgfVxuICAgIH0sIFtyZWZdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWljb25cIiwgY2xhc3NOYW1lKX0gZGF0YS1pY29uPXtpY29ufSAvPjtcbn1cblxuLyoqXG4gKiAgQXBwZW5kcyBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gYSBiYXNpYyBmaXhlZCBjbGFzcy5cbiAqXG4gKiBAZ3JvdXAgVXRpbGl0aWVzXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVDbGFzc2VzKGZpeGVkOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pIHtcbiAgICBjb25zdCBub25lbXB0eSA9IHJlc3QuZmlsdGVyKChjKSA9PiBjICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChub25lbXB0eS5sZW5ndGggPT09IDApIHJldHVybiBmaXhlZDtcblxuICAgIHJldHVybiBbZml4ZWQsIC4uLm5vbmVtcHR5XS5qb2luKFwiIFwiKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcblxuLyoqIEFueSBpbmRleGFibGUgZmllbGQsIHdoaWNoIG11c3QgaGF2ZSBhIGZldyBpbmRleC1yZWxldmFudCBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGUge1xuICAgIC8qKiBUaGUgb2JqZWN0IHR5cGVzIHRoYXQgdGhpcyBpbmRleGFibGUgaXMuICovXG4gICAgJHR5cGVzOiBzdHJpbmdbXTtcbiAgICAvKiogVGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0LCBzdWNoIGFzIGBQYWdlYCBvciBgU2VjdGlvbmAuIFVzZWQgaW4gdmlzdWFsaXphdGlvbnMuICovXG4gICAgJHR5cGVuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB1bmlxdWUgaW5kZXggSUQgZm9yIHRoaXMgb2JqZWN0LiAqL1xuICAgICRpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleGFibGUgb2JqZWN0IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzIG9iamVjdC4gT25seSBzZXQgYWZ0ZXIgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBpbmRleGVkLlxuICAgICAqL1xuICAgICRwYXJlbnQ/OiBJbmRleGFibGU7XG4gICAgLyoqIElmIHByZXNlbnQsIHRoZSByZXZpc2lvbiBpbiB0aGUgaW5kZXggb2YgdGhpcyBvYmplY3QuICovXG4gICAgJHJldmlzaW9uPzogbnVtYmVyO1xuICAgIC8qKiBUaGUgZmlsZSB0aGF0IHRoaXMgaW5kZXhhYmxlIHdhcyBkZXJpdmVkIGZyb20sIGlmIGZpbGUtYmFja2VkLiAqL1xuICAgICRmaWxlPzogc3RyaW5nO1xufVxuXG4vKiogTWV0YWRhdGEgZm9yIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBsaW5raW5nLiAqL1xuZXhwb3J0IGNvbnN0IExJTktBQkxFX1RZUEUgPSBcImxpbmthYmxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBMSU5LQUJMRV9UWVBFfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmthYmxlIHtcbiAgICAvKiogQSBsaW5rIHRvIHRoaXMgbGlua2FibGUgb2JqZWN0LiAqL1xuICAgICRsaW5rOiBMaW5rO1xufVxuXG4vKiogR2VuZXJhbCBtZXRhZGF0YSBmb3IgYW55IGZpbGUuICovXG5leHBvcnQgY29uc3QgRklMRV9UWVBFID0gXCJmaWxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBGSUxFX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZSBleHRlbmRzIExpbmthYmxlIHtcbiAgICAvKiogVGhlIHBhdGggdGhpcyBmaWxlIGV4aXN0cyBhdC4gKi9cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlcjtcbiAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICAkZXh0ZW5zaW9uOiBzdHJpbmc7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgdGFnZ2FibGUgb2JqZWN0cy4gKi9cbmV4cG9ydCBjb25zdCBUQUdHQUJMRV9UWVBFID0gXCJ0YWdnYWJsZVwiO1xuLyoqXG4gKiB7QGluaGVyaXREb2MgVEFHR0FCTEVfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdnYWJsZSB7XG4gICAgLyoqIFRoZSBleGFjdCB0YWdzIG9uIHRoaXMgb2JqZWN0LiAoI2EvYi9jIG9yICNmb28vYmFyKS4gKi9cbiAgICAkdGFnczogc3RyaW5nW107XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBjYW4gbGluayB0byBvdGhlciB0aGluZ3MuICovXG5leHBvcnQgY29uc3QgTElOS0JFQVJJTkdfVFlQRSA9IFwibGlua3NcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIExJTktCRUFSSU5HX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2JlYXJpbmcge1xuICAgIC8qKiBUaGUgbGlua3MgaW4gdGhpcyBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xufVxuXG4vKipcbiAqIEFsbCBzdXBwb3J0ZWQgZXh0ZW5zaW9ucy4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgZHluYW1pYyBsb29rdXAgdGFibGUgYW5kIG5vdCBqdXN0XG4gKiBhIGZpeGVkIGxpc3QgYXQgc29tZSBwb2ludCwgZXNwZWNpYWxseSBpZiB3ZSBhZGQgdGhlIGFiaWxpdHkgdG8gdHVybiBpbmRleGluZyBvbi9vZmYuXG4gKi9cbmV4cG9ydCBjb25zdCBJTkRFWEFCTEVfRVhURU5TSU9OUyA9IG5ldyBTZXQoW1wibWRcIiwgXCJtYXJrZG93blwiLCBcImNhbnZhc1wiXSk7XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGFwaVxuICovXG5pbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCIuLi9pbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IElubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7IEZyb250bWF0dGVyRW50cnkgfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmVTcGFuIH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vbWFya2Rvd25cIjtcblxuLyoqIFRoZSBzb3VyY2Ugb2YgYSBmaWVsZCwgdXNlZCB3aGVuIGRldGVybWluaW5nIHdoYXQgZmlsZXMgdG8gb3ZlcndyaXRlIGFuZCBob3cuICovXG5leHBvcnQgdHlwZSBQcm92ZW5hbmNlID1cbiAgICB8IHsgdHlwZTogXCJmcm9udG1hdHRlclwiOyBmaWxlOiBzdHJpbmc7IGtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJpbmxpbmUtZmllbGRcIjsgZmlsZTogc3RyaW5nOyBsaW5lOiBudW1iZXI7IGtleTogc3RyaW5nIH07XG5cbi8qKlxuICogR2VuZXJhbCBkZWZpbml0aW9uIGZvciBhIGZpZWxkLiBQcm92aWRlcyB0aGUgZmllbGQga2V5LCB2YWx1ZSwgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvbiBpdCdzIHNvdXJjZSBhbmQgaG93IGl0IGNhbiBiZSBlZGl0ZWQuXG4gKiBAZ3JvdXAgQ29tbW9uIFR5cGVzXG4gKiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZCB7XG4gICAgLyoqIFRoZSBjYW5vbmljYWwga2V5IG5hbWUgZm9yIHRoZSBmaWVsZCAoaS5lLiwgYXMgaXQgYWN0dWFsbHkgc2hvd3MgdXAgaW4gdGhlIGRhdGEgc3RydWN0dXJlKS4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZmllbGQgYmVmb3JlIHBhcnNpbmcsIGlmIHJlbGV2YW50LiAqL1xuICAgIHJhdz86IHN0cmluZztcbiAgICAvKiogSWYgcHJlc2VudCwgZGVzY3JpYmVzIHdoZXJlIHRoZSBmaWVsZCBjYW1lIGZyb20gaW4gcHJlY2lzZSBkZXRhaWwsIGFsbG93aW5nIHRoZSBmaWVsZCB0byBiZSBlZGl0ZWQuICovXG4gICAgcHJvdmVuYW5jZT86IFByb3ZlbmFuY2U7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBhcmUgYW5ub3RhdGVkIHdpdGggZmllbGRzLiAqL1xuZXhwb3J0IGNvbnN0IEZJRUxEQkVBUklOR19UWVBFID0gXCJmaWVsZHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogUmV0dXJuIGEgbGlzdCBvZiBhbGwgZmllbGRzLiBUaGlzIG1heSBiZSBjb21wdXRlZCBlYWdlcmx5LCBzbyBjYWNoZSB0aGlzIHZhbHVlIGZvciByZXBlYXRlZCBvcGVyYXRpb25zLiAqL1xuICAgIGZpZWxkczogRmllbGRbXTtcblxuICAgIC8qKiBGZXRjaCBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgaWYgaXQgaXMgcHJlc2VudCBvbiB0aGlzIG9iamVjdC4gKi9cbiAgICBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkYmVhcmluZ3Mge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0ZpZWxkYmVhcmluZyhvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBGaWVsZGJlYXJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqZWN0ICE9IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiAmJiBcImZpZWxkXCIgaW4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3RbXCJmaWVsZFwiXSA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEga2V5IGZyb20gYSBnZW5lcmljIG1hcCBvciBmaWVsZGJlYXJpbmcgb2JqZWN0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXQob2JqZWN0OiBGaWVsZGJlYXJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiwga2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRmllbGRiZWFyaW5nKG9iamVjdCkpIHJldHVybiBvYmplY3QuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXRXaXRoRGVmYXVsdDxUIGV4dGVuZHMgeyAkcG9zaXRpb246IExpbmVTcGFuIH0gJiBJbmRleGFibGU+KFxuICAgICAgICBvYmplY3Q6IFQsXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICBkZWZhdWx0VmFsdWU/OiBMaXRlcmFsXG4gICAgKTogRmllbGQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBsaW5lOiBvYmplY3QuJHBvc2l0aW9uLmVuZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIEdlbmVyaWMgZnVuY3Rpb24gd2hpY2ggZXh0cmFjdCBmaWVsZHMuIElmIG5vIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgcmV0dXJuIGFsbCBmaWVsZHM7IG90aGVyd2lzZSxcbiAqIGl0IHNob3VsZCByZXR1cm4gdGhlIGZpZWxkIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogS2V5cyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSB0byBtYXRjaCBPYnNpZGlhbiBzdGFuZGFyZCBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRFeHRyYWN0b3I8VD4gPSAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IEZpZWxkW107XG5cbi8qKiBRdWljayB1dGlsaXRpZXMgZm9yIGdlbmVyYXRpbmcgZmllbGRzIGFuZCBkb2luZyBzZWFyY2hlcyBvdmVyIHRoZW0uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgRXh0cmFjdG9ycyB7XG4gICAgLyoqIENoZWNrIGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IGlzIG5vdCBleGNsdWRlZCBhbmQgaXMgYSBwbGFpbiBwcm9wZXJ0eSAobm90IGEgZnVuY3Rpb24gb3Igb3RoZXIgc3BlY2lhbCBvYmplY3QpLiAqL1xuICAgIGZ1bmN0aW9uIGlzVmFsaWRJbnRyaW5zaWMob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBrZXk6IHN0cmluZywgZXhjbHVkZT86IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIERvbid0IGFsbG93IHJlY3Vyc2lvbiBvbiAnZmllbGRzJyBvciBjYWNoZWQgdmFsdWVzLCBhbmQgc2tpcCBhbnkgaWdub3JlZCBhbmQgbm9uLWludHJpbnNpY3MuXG4gICAgICAgIGlmIChleGNsdWRlPy5oYXMoa2V5KSB8fCAha2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gTm8gZnVuY3Rpb25zLCBvbmx5IHVzZSBhY3R1YWwgdmFsdWVzLlxuICAgICAgICBjb25zdCB2YWx1ZSA9IChvYmplY3QgYXMgYW55KVtrZXldO1xuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGFsbCBrZXlzIG9mIHRoZSBvYmplY3QsIGluY2x1ZGluZyBkZXJpdmVkIGZpZWxkcyBmcm9tIHByb3RvdHlwZXMuICovXG4gICAgZnVuY3Rpb24qIHByb3RvdHlwZUtleXMob2JqZWN0OiBhbnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkgeWllbGQga2V5O1xuXG4gICAgICAgIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICB3aGlsZSAocHJvdG8pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKSkgeWllbGQga2V5O1xuXG4gICAgICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2VuZXJhdGUgYSBsaXN0IG9mIGZpZWxkcyBmb3IgdGhlIGdpdmVuIG9iamVjdCwgcmV0dXJuaW5nIHRoZW0gYXMgYSBsaXN0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbnRyaW5zaWNzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihleGNlcHQ/OiBTZXQ8c3RyaW5nPik6IEZpZWxkRXh0cmFjdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm90b3R5cGVLZXlzKG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSW50cmluc2ljKG9iamVjdCwga2V5LCBleGNlcHQpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKG9iamVjdCBhcyBhbnkpW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIGtleSBpcyBkaXJlY3RseSBwcmVzZW50IGluIG9iamVjdCwganVzdCByZXR1cm4gaXQuXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QgJiYgaXNWYWxpZEludHJpbnNpYyhvYmplY3QsIGtleSwgZXhjZXB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKG9iamVjdCBhcyBhbnkpW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdIGFzIEZpZWxkW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBGaWVsZCBleHRyYWN0b3Igd2hpY2ggZXh0cmFjdHMgZnJvbnRtYXR0ZXIgZmllbGRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmcm9udG1hdHRlcjxUIGV4dGVuZHMgSW5kZXhhYmxlPihcbiAgICAgICAgZnJvbnQ6IChvYmplY3Q6IFQpID0+IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+IHwgdW5kZWZpbmVkXG4gICAgKTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcm9udG1hdHRlciA9IGZyb250KG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIWZyb250bWF0dGVyKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZnJvbnRtYXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZnJvbnRtYXR0ZXJba2V5XTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGVudHJ5LmtleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBlbnRyeS5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7IHR5cGU6IFwiZnJvbnRtYXR0ZXJcIiwgZmlsZTogb2JqZWN0LiRmaWxlISwga2V5OiBlbnRyeS5rZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGZyb250bWF0dGVyKSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmcm9udG1hdHRlcltrZXldO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGVudHJ5LnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHsgdHlwZTogXCJmcm9udG1hdHRlclwiLCBmaWxlOiBvYmplY3QuJGZpbGUhLCBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBGaWVsZCBleHRyYWN0b3Igd2hpY2ggc2hvd3MgYWxsIGlubGluZSBmaWVsZHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlubGluZUZpZWxkczxUIGV4dGVuZHMgSW5kZXhhYmxlPihcbiAgICAgICAgaW5saW5lTWFwOiAob2JqZWN0OiBUKSA9PiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD4gfCB1bmRlZmluZWRcbiAgICApOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IGlubGluZU1hcChvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFtYXApIHJldHVybiBbXTtcblxuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXMobWFwKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBmaWVsZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGZpZWxkLnBvc2l0aW9uLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIFByb3ZlbmFuY2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBtYXApKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IG1hcFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBmaWVsZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGZpZWxkLnBvc2l0aW9uLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIFByb3ZlbmFuY2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogTWVyZ2UgbXVsdGlwbGUgZmllbGQgZXh0cmFjdG9ycyBpbnRvIG9uZTsgaWYgbXVsdGlwbGUgZXh0cmFjdG9ycyBwcm9kdWNlIGlkZW50aWNhbCBrZXlzLCBrZXlzIGZyb20gdGhlIGVhcmxpZXIgZXh0cmFjdG9yIHdpbGwgYmUgcHJlZmVycmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuZHMgRmllbGRiZWFyaW5nPiguLi5leHRyYWN0b3JzOiBGaWVsZEV4dHJhY3RvcjxUPltdKTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiBleHRyYWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZXh0cmFjdG9yKG9iamVjdCwgdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZWQuaGFzKGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuYWRkKGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiBleHRyYWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZXh0cmFjdG9yKG9iamVjdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLmxlbmd0aCA+IDApIHJldHVybiBmaWVsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwgIi8qKiBQYXJzZSBpbmxpbmUgZmllbGRzIGFuZCBvdGhlciBlbWJlZGRlZCBtZXRhZGF0YSBpbiBhIGxpbmUuICovXG5cbmltcG9ydCB7IFBSSU1JVElWRVMgfSBmcm9tIFwiZXhwcmVzc2lvbi9wYXJzZXJcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgKiBhcyBQIGZyb20gXCJwYXJzaW1tb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHsgSnNvbkNvbnZlcnNpb24sIEpzb25MaXRlcmFsIH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vY29tbW9uXCI7XG5cbi8qKiBBIHBhcnNlZCBpbmxpbmUgZmllbGQgZnJvbSBhIHNwZWNpZmljIGxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgcmF3IHBhcnNlZCBrZXkuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGZpZWxkLiAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gKi9cbiAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICBlbmQ6IG51bWJlcjtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIEZ1bGwgaW5saW5lIGZpZWxkIG1ldGFkYXRhIGZvciBhbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIGFjdHVhbCBrZXkgZGVzY3JpYmluZyB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAgcmF3OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUuICovXG4gICAgdmFsdWU6IExpdGVyYWw7XG4gICAgLyoqIEZ1bGwgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHdoZXJlIHRoZSBpbmxpbmUgZmllbGQgaXMgbG9jYXRlZCBpbiB0aGUgZG9jdW1lbnQuICovXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgLyoqIFRoZSBsaW5lIG51bWJlciB0aGUgaW5saW5lIGZpZWxkIGFwcGVhcnMgb24uICovXG4gICAgICAgIGxpbmU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiBJbW1lZGlhdGVseSBhZnRlciB0aGUgJzo6Jy4gKi9cbiAgICAgICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogSlNPTiwgc2VyaWFsaXphYmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlubGluZSBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbklubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIGFjdHVhbCBrZXkgZGVzY3JpYmluZyB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAgcmF3OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUuICovXG4gICAgdmFsdWU6IEpzb25MaXRlcmFsO1xuICAgIC8qKiBGdWxsIHBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB3aGVyZSB0aGUgaW5saW5lIGZpZWxkIGlzIGxvY2F0ZWQgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIC8qKiBUaGUgbGluZSBudW1iZXIgdGhlIGlubGluZSBmaWVsZCBhcHBlYXJzIG9uLiAqL1xuICAgICAgICBsaW5lOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICc6OicuICovXG4gICAgICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIENvbnZlcnQgYW4gaW5saW5lIGZpZWxkIHRvIGEgSlNPTiBmb3JtYXQuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbklubGluZUZpZWxkKGZpZWxkOiBJbmxpbmVGaWVsZCk6IEpzb25JbmxpbmVGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGZpZWxkLCB7IHZhbHVlOiBKc29uQ29udmVyc2lvbi5qc29uKGZpZWxkLnZhbHVlKSB9KTtcbn1cblxuLyoqIENvbnZlcnQgYSBKU09OIGlubGluZSBmaWVsZCBiYWNrIHRvIGEgcmVndWxhciBmaWVsZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUlubGluZUZpZWxkKGZpZWxkOiBKc29uSW5saW5lRmllbGQpOiBJbmxpbmVGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGZpZWxkLCB7IHZhbHVlOiBKc29uQ29udmVyc2lvbi52YWx1ZShmaWVsZC52YWx1ZSkgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKGxvY2FsOiBMb2NhbElubGluZUZpZWxkLCBsaW5lbm86IG51bWJlcik6IElubGluZUZpZWxkO1xuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQobG9jYWw6IExvY2FsSW5saW5lRmllbGRbXSwgbGluZW5vOiBudW1iZXIpOiBJbmxpbmVGaWVsZFtdO1xuLyoqIENvbnZlcnQgYSBsb2NhbCBpbmxpbmUgZmllbGQgaW50byBhIGZ1bGwgaW5saW5lIGZpZWxkIGJ5IHBlcmZvcm1pbmcgcGFyc2luZyBhbmQgYWRkaW5nIHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQoXG4gICAgbG9jYWw6IExvY2FsSW5saW5lRmllbGQgfCBMb2NhbElubGluZUZpZWxkW10sXG4gICAgbGluZW5vOiBudW1iZXJcbik6IElubGluZUZpZWxkIHwgSW5saW5lRmllbGRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobG9jYWwpKSB7XG4gICAgICAgIHJldHVybiBsb2NhbC5tYXAoKGYpID0+IGFzSW5saW5lRmllbGQoZiwgbGluZW5vKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBsb2NhbC5rZXksXG4gICAgICAgIHJhdzogbG9jYWwudmFsdWUsXG4gICAgICAgIHZhbHVlOiBwYXJzZUlubGluZVZhbHVlKGxvY2FsLnZhbHVlKSxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVubyxcbiAgICAgICAgICAgIHN0YXJ0OiBsb2NhbC5zdGFydCxcbiAgICAgICAgICAgIHN0YXJ0VmFsdWU6IGxvY2FsLnN0YXJ0VmFsdWUsXG4gICAgICAgICAgICBlbmQ6IGxvY2FsLmVuZCxcbiAgICAgICAgfSxcbiAgICAgICAgd3JhcHBpbmc6IGxvY2FsLndyYXBwaW5nLFxuICAgIH07XG59XG5cbi8qKiBUaGUgd3JhcHBlciBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIGlubGluZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBJTkxJTkVfRklFTERfV1JBUFBFUlM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgXCJbXCI6IFwiXVwiLFxuICAgIFwiKFwiOiBcIilcIixcbn0pO1xuXG4vKipcbiAqIEZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNrZXQgdGhhdCBvY2N1cnMgYXQgb3IgYWZ0ZXIgYHN0YXJ0YCwgcmVzcGVjdGluZyBuZXN0aW5nIGFuZCBlc2NhcGVzLiBJZiBmb3VuZCxcbiAqIHJldHVybnMgdGhlIHZhbHVlIGNvbnRhaW5lZCB3aXRoaW4gYW5kIHRoZSBzdHJpbmcgaW5kZXggYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nKFxuICAgIGxpbmU6IHN0cmluZyxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIG9wZW46IHN0cmluZyxcbiAgICBjbG9zZTogc3RyaW5nXG4pOiB7IHZhbHVlOiBzdHJpbmc7IGVuZEluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG5lc3RpbmcgPSAwO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBsaW5lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBsZXQgY2hhciA9IGxpbmUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICAvLyBBbGxvd3MgZm9yIGRvdWJsZSBlc2NhcGVzIGxpa2UgJ1xcXFwnIHRvIGJlIHJlbmRlcmVkIG5vcm1hbGx5LlxuICAgICAgICBpZiAoY2hhciA9PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBlc2NhcGVkLCBpZ25vcmUgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBjb21wdXRpbmcgbmVzdGluZywgcmVnYXJkbGVzcyBvZiB3aGF0IGl0IGlzLlxuICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhciA9PSBvcGVuKSBuZXN0aW5nKys7XG4gICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gY2xvc2UpIG5lc3RpbmctLTtcblxuICAgICAgICAvLyBPbmx5IG9jY3VycyBpZiB3ZSBhcmUgb24gYSBjbG9zZSBjaGFyYWN0ZXIgYW5kIHRyaGVyZSBpcyBubyBtb3JlIG5lc3RpbmcuXG4gICAgICAgIGlmIChuZXN0aW5nIDwgMCkgcmV0dXJuIHsgdmFsdWU6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpLCBlbmRJbmRleDogaW5kZXggKyAxIH07XG5cbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBGaW5kIHRoZSAnOjonIHNlcGFyYXRvciBpbiBhbiBpbmxpbmUgZmllbGQuICovXG5mdW5jdGlvbiBmaW5kU2VwYXJhdG9yKGxpbmU6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IHsga2V5OiBzdHJpbmc7IHZhbHVlSW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgc2VwID0gbGluZS5pbmRleE9mKFwiOjpcIiwgc3RhcnQpO1xuICAgIGlmIChzZXAgPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHsga2V5OiBsaW5lLnN1YnN0cmluZyhzdGFydCwgc2VwKS50cmltKCksIHZhbHVlSW5kZXg6IHNlcCArIDIgfTtcbn1cblxuLyoqIFRyeSB0byBjb21wbGV0ZWx5IHBhcnNlIGFuIGlubGluZSBmaWVsZCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEFzc3VtZXMgYHN0YXJ0YCBpcyBvbiBhIHdyYXBwaW5nIGNoYXJhY3Rlci4gKi9cbmZ1bmN0aW9uIGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmU6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IExvY2FsSW5saW5lRmllbGQgfCB1bmRlZmluZWQge1xuICAgIGxldCBvcGVuID0gbGluZS5jaGFyQXQoc3RhcnQpO1xuXG4gICAgbGV0IGtleSA9IGZpbmRTZXBhcmF0b3IobGluZSwgc3RhcnQgKyAxKTtcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBGYWlsIHRoZSBtYXRjaCBpZiB3ZSBmaW5kIGFueSBzZXBhcmF0b3IgY2hhcmFjdGVycyAobm90IGFsbG93ZWQgaW4ga2V5cykuXG4gICAgZm9yIChsZXQgc2VwIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykuY29uY2F0KE9iamVjdC52YWx1ZXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKSkpIHtcbiAgICAgICAgaWYgKGtleS5rZXkuaW5jbHVkZXMoc2VwKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSBmaW5kQ2xvc2luZyhsaW5lLCBrZXkudmFsdWVJbmRleCwgb3BlbiwgSU5MSU5FX0ZJRUxEX1dSQVBQRVJTW29wZW5dKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleToga2V5LmtleSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIHN0YXJ0VmFsdWU6IGtleS52YWx1ZUluZGV4LFxuICAgICAgICBlbmQ6IHZhbHVlLmVuZEluZGV4LFxuICAgICAgICB3cmFwcGluZzogb3BlbixcbiAgICB9O1xufVxuXG4vKiogUGFyc2UgYSB0ZXh0dWFsIGlubGluZSBmaWVsZCB2YWx1ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5saW5lVmFsdWUodmFsdWU6IHN0cmluZyk6IExpdGVyYWwge1xuICAgIC8vIEVtcHR5IGlubGluZSB2YWx1ZXMgKGkuZS4sIG5vIHRleHQpIHNob3VsZCBtYXAgdG8gbnVsbCB0byBtYXRjaCBsb25nLXRlcm0gRGF0YXZpZXcgc2VtYW50aWNzLlxuICAgIC8vIE51bGwgaXMgYWxzbyBhIG1vcmUgdW5pdmVyc2FsIHR5cGUgdG8gZGVhbCB3aXRoIHRoYW4gc3RyaW5ncywgc2luY2UgYWxsIGZ1bmN0aW9ucyBhY2NlcHQgbnVsbHMuXG4gICAgaWYgKHZhbHVlLnRyaW0oKSA9PSBcIlwiKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFRoZSBzdHJpcHBlZCBsaXRlcmFsIGZpZWxkIHBhcnNlciB1bmRlcnN0YW5kcyBhbGwgb2YgdGhlIG5vbi1hcnJheS9ub24tb2JqZWN0IGZpZWxkcyBhbmQgY2FuIHBhcnNlIHRoZW0gZm9yIHVzLlxuICAgIC8vIElubGluZSBmaWVsZCBvYmplY3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgaW5saW5lIGFycmF5IG9iamVjdHMgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJzZXJcbiAgICAvLyBzZXBhcmF0ZWx5LlxuICAgIGxldCBpbmxpbmUgPSBQUklNSVRJVkVTLmlubGluZUZpZWxkLnBhcnNlKHZhbHVlKTtcbiAgICBpZiAoaW5saW5lLnN0YXR1cykgcmV0dXJuIGlubGluZS52YWx1ZTtcbiAgICBlbHNlIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEV4dHJhY3RzIGlubGluZSBmaWVsZHMgb2YgdGhlIGZvcm0gJ1trZXk6OiB2YWx1ZV0nIGZyb20gYSBsaW5lIG9mIHRleHQuIFRoaXMgaXMgZG9uZSBpbiBhIHJlbGF0aXZlbHlcbiAqIFwicm9idXN0XCIgd2F5IHRvIGF2b2lkIGZhaWxpbmcgZHVlIHRvIGJhZCBuZXN0aW5nIG9yIG90aGVyIGludGVyZmVyaW5nIE1hcmtkb3duIHN5bWJvbHM6XG4gKlxuICogLSBMb29rIGZvciBhbnkgd3JhcHBlcnMgKCdbJyBhbmQgJygnKSBpbiB0aGUgbGluZSwgdHJ5aW5nIHRvIHBhcnNlIHdoYXRldmVyIGNvbWVzIGFmdGVyIGl0IGFzIGFuIGlubGluZSBrZXk6Oi5cbiAqIC0gSWYgc3VjY2Vzc2Z1bCwgc2NhbiB1bnRpbCB5b3UgZmluZCBhIG1hdGNoaW5nIGVuZCBicmFja2V0LCBhbmQgcGFyc2Ugd2hhdGV2ZXIgcmVtYWlucyBhcyBhbiBpbmxpbmUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW5saW5lRmllbGRzKGxpbmU6IHN0cmluZywgaW5jbHVkZVRhc2tGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZSk6IExvY2FsSW5saW5lRmllbGRbXSB7XG4gICAgbGV0IGZpZWxkczogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG4gICAgZm9yIChsZXQgd3JhcHBlciBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpKSB7XG4gICAgICAgIGxldCBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIpO1xuICAgICAgICB3aGlsZSAoZm91bmRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkRmllbGQgPSBmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZChsaW5lLCBmb3VuZEluZGV4KTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkRmllbGQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIsIGZvdW5kSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGRzLnB1c2gocGFyc2VkRmllbGQpO1xuICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBwYXJzZWRGaWVsZC5lbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVUYXNrRmllbGRzKSBmaWVsZHMgPSBmaWVsZHMuY29uY2F0KGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lKSk7XG5cbiAgICBmaWVsZHMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgbGV0IGZpbHRlcmVkRmllbGRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA9PSAwIHx8IGZpbHRlcmVkRmllbGRzW2ZpbHRlcmVkRmllbGRzLmxlbmd0aCAtIDFdLmVuZCA8IGZpZWxkc1tpXS5zdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyZWRGaWVsZHMucHVzaChmaWVsZHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZEZpZWxkcztcbn1cblxuLyoqIFZhbGlkYXRlcyB0aGF0IGEgcmF3IGZpZWxkIG5hbWUgaGFzIGEgdmFsaWQgZm9ybS4gKi9cbmNvbnN0IEZVTExfTElORV9LRVlfUEFSVDogUC5QYXJzZXI8c3RyaW5nPiA9IFAuYWx0KFxuICAgIFAucmVnZXhwKG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcInVcIikpLFxuICAgIFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn1cXHdcXHNfLy1dKy91KVxuKVxuICAgIC5tYW55KClcbiAgICAubWFwKChwYXJ0cykgPT4gcGFydHMuam9pbihcIlwiKSk7XG5cbmNvbnN0IEZVTExfTElORV9LRVlfUEFSU0VSOiBQLlBhcnNlcjxzdHJpbmc+ID0gUC5yZWdleHAoL1teMC05XFx3XFxwe0xldHRlcn1dKi91KVxuICAgIC50aGVuKEZVTExfTElORV9LRVlfUEFSVClcbiAgICAuc2tpcChQLnJlZ2V4cCgvW19cXCp+YF0qL3UpKTtcblxuLyoqIEF0dGVtcHQgdG8gZXh0cmFjdCBhIGZ1bGwtbGluZSBmaWVsZCAoS2V5OjogVmFsdWUgY29uc3VtaW5nIHRoZSBlbnRpcmUgY29udGVudCBsaW5lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RnVsbExpbmVGaWVsZCh0ZXh0OiBzdHJpbmcpOiBMb2NhbElubGluZUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgc2VwID0gZmluZFNlcGFyYXRvcih0ZXh0LCAwKTtcbiAgICBpZiAoIXNlcCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIFdlIG5lZWQgdG8gcG9zdC1wcm9jZXNzIHRoZSBrZXkgdG8gZHJvcCB1bm5lY2Vzc2FyeSBvcGVuaW5nIGFubm90YXRpb25zIGFzIHdlbGwgYXNcbiAgICAvLyBkcm9wIHN1cnJvdW5kaW5nIE1hcmtkb3duLlxuICAgIGxldCByZWFsS2V5ID0gRlVMTF9MSU5FX0tFWV9QQVJTRVIucGFyc2Uoc2VwLmtleSk7XG4gICAgaWYgKCFyZWFsS2V5LnN0YXR1cykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleTogcmVhbEtleS52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHRleHQuc3Vic3RyaW5nKHNlcC52YWx1ZUluZGV4KS50cmltKCksXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBzdGFydFZhbHVlOiBzZXAudmFsdWVJbmRleCxcbiAgICAgICAgZW5kOiB0ZXh0Lmxlbmd0aCxcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgQ1JFQVRFRF9EQVRFX1JFR0VYID0gL1xcdXsyNzk1fVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgRFVFX0RBVEVfUkVHRVggPSAvKD86XFx1ezFGNEM1fXxcXHV7MUY0QzZ9fFxcdXsxRjVEM31cXHV7RkUwRn0/KVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgRE9ORV9EQVRFX1JFR0VYID0gL1xcdXsyNzA1fVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgU0NIRURVTEVEX0RBVEVfUkVHRVggPSAvW1xcdXsyM0YzfVxcdXsyMzFCfV1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IFNUQVJUX0RBVEVfUkVHRVggPSAvXFx1ezFGNkVCfVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5cbmV4cG9ydCBjb25zdCBFTU9KSV9SRUdFWEVTID0gW1xuICAgIHsgcmVnZXg6IENSRUFURURfREFURV9SRUdFWCwga2V5OiBcImNyZWF0ZWRcIiB9LFxuICAgIHsgcmVnZXg6IFNUQVJUX0RBVEVfUkVHRVgsIGtleTogXCJzdGFydFwiIH0sXG4gICAgeyByZWdleDogU0NIRURVTEVEX0RBVEVfUkVHRVgsIGtleTogXCJzY2hlZHVsZWRcIiB9LFxuICAgIHsgcmVnZXg6IERVRV9EQVRFX1JFR0VYLCBrZXk6IFwiZHVlXCIgfSxcbiAgICB7IHJlZ2V4OiBET05FX0RBVEVfUkVHRVgsIGtleTogXCJjb21wbGV0aW9uXCIgfSxcbl07XG5cbi8qKiBQYXJzZSBzcGVjaWFsIGNvbXBsZXRlZC9kdWUvZG9uZSB0YXNrIGZpZWxkcyB3aGljaCBhcmUgbWFya2VkIHZpYSBlbW9qaS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lOiBzdHJpbmcpOiBMb2NhbElubGluZUZpZWxkW10ge1xuICAgIGxldCByZXN1bHRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcblxuICAgIGZvciAobGV0IHsgcmVnZXgsIGtleSB9IG9mIEVNT0pJX1JFR0VYRVMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTtcblxuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICAgICAgc3RhcnRWYWx1ZTogbWF0Y2guaW5kZXggKyAxLFxuICAgICAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCxcbiAgICAgICAgICAgIHdyYXBwaW5nOiBcImVtb2ppLXNob3J0aGFuZFwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqIFNldHMgb3IgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGFuIGlubGluZSBmaWVsZDsgaWYgdGhlIHZhbHVlIGlzICd1bmRlZmluZWQnLCBkZWxldGVzIHRoZSBrZXkuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5saW5lRmllbGQoc291cmNlOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGV4aXN0aW5nID0gZXh0cmFjdElubGluZUZpZWxkcyhzb3VyY2UpO1xuICAgIGxldCBleGlzdGluZ0tleXMgPSBleGlzdGluZy5maWx0ZXIoKGYpID0+IGYua2V5ID09IGtleSk7XG5cbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgT1IgdGhlIGtleSBhbHJlYWR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgaWYgKGV4aXN0aW5nS2V5cy5sZW5ndGggPiAyIHx8IChleGlzdGluZ0tleXMubGVuZ3RoID09IDAgJiYgIXZhbHVlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICBsZXQgZXhpc3RpbmdLZXkgPSBleGlzdGluZ0tleXNbMF07XG5cbiAgICBsZXQgYW5ub3RhdGlvbiA9IHZhbHVlID8gYFske2tleX06OiAke3ZhbHVlfV1gIDogXCJcIjtcbiAgICBpZiAoZXhpc3RpbmdLZXkpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgZXhpc3RpbmdLZXkuc3RhcnQpO1xuICAgICAgICBsZXQgc3VmZml4ID0gc291cmNlLnN1YnN0cmluZyhleGlzdGluZ0tleS5lbmQpO1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uKSByZXR1cm4gYCR7cHJlZml4fSR7YW5ub3RhdGlvbn0ke3N1ZmZpeH1gO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtwcmVmaXh9JHtzdWZmaXgudHJpbVN0YXJ0KCl9YDtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke3NvdXJjZS50cmltRW5kKCl9ICR7YW5ub3RhdGlvbn1gO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbW9qaVNob3J0aGFuZENvbXBsZXRpb25GaWVsZChzb3VyY2U6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZXh0cmFjdElubGluZUZpZWxkcyhzb3VyY2UsIHRydWUpO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IGV4aXN0aW5nLmZpbHRlcigoZikgPT4gZi5rZXkgPT09IFwiY29tcGxldGlvblwiICYmIGYud3JhcHBpbmcgPT09IFwiZW1vamktc2hvcnRoYW5kXCIpO1xuXG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzIE9SIHRoZSBrZXkgYWxyZWFkeSBkb2Vzbid0IGV4aXN0LlxuICAgIGlmIChleGlzdGluZ0tleXMubGVuZ3RoID4gMiB8fCAoZXhpc3RpbmdLZXlzLmxlbmd0aCA9PSAwICYmICF2YWx1ZSkpIHJldHVybiBzb3VyY2U7XG5cbiAgICAvKiBObyB3cmFwcGVyLCBhZGQgb3duIHNwYWNpbmcgYXQgc3RhcnQgKi9cbiAgICBjb25zdCBhbm5vdGF0aW9uID0gdmFsdWUgPyBgIFx1MjcwNSAke3ZhbHVlfWAgOiBcIlwiO1xuICAgIGxldCBleGlzdGluZ0tleSA9IGV4aXN0aW5nS2V5c1swXTtcbiAgICBpZiAoZXhpc3RpbmdLZXkpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gc291cmNlLnN1YnN0cmluZygwLCBleGlzdGluZ0tleS5zdGFydCk7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoZXhpc3RpbmdLZXkuZW5kKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeC50cmltRW5kKCl9JHthbm5vdGF0aW9ufSR7c3VmZml4fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke3NvdXJjZS50cmltRW5kKCl9JHthbm5vdGF0aW9ufWA7XG4gICAgfVxufVxuIiwgIi8qKiBNYXAgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBvYmplY3QuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT2JqZWN0VmFsdWVzPFYsIFU+KG9iamVjdDogUmVjb3JkPHN0cmluZywgVj4sIGZ1bmM6ICh4OiBWKSA9PiBVKTogUmVjb3JkPHN0cmluZywgVT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgVT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBMaW5rLCBKc29uTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBtYXBPYmplY3RWYWx1ZXMgfSBmcm9tIFwidXRpbHMvZGF0YVwiO1xuXG4vKiogSlNPTi1zZXJpYWxpemVkIGVxdWl2YWxlbnRzIGZvciBsaXRlcmFscy4gKi9cbmV4cG9ydCB0eXBlIEpzb25MaXRlcmFsID1cbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCB7ICRfdHlwZTogXCJkYXRlXCI7IHZhbHVlOiBzdHJpbmcgfVxuICAgIHwgeyAkX3R5cGU6IFwiZHVyYXRpb25cIjsgdmFsdWU6IHN0cmluZyB9XG4gICAgfCB7ICRfdHlwZTogXCJsaW5rXCI7IHZhbHVlOiBKc29uTGluayB9XG4gICAgfCBBcnJheTxKc29uTGl0ZXJhbD5cbiAgICB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICB8IG51bGw7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSnNvbkNvbnZlcnNpb24ge1xuICAgIGV4cG9ydCBjb25zdCBOT09QX05PUk1BTElaRVI6IChpbnB1dDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCA9IChpbnB1dCkgPT4gaW5wdXQ7XG5cbiAgICAvKiogQ29udmVydCBhIGxpdGVyYWwgdmFsdWUgdG8gYSBzYWZlLCBwZXJzaXN0ZW50IEpTT04gZXF1aXZhbGVudC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24ganNvbihsaXRlcmFsOiBMaXRlcmFsKTogSnNvbkxpdGVyYWwge1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGxpdGVyYWwpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZD8udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFwKEpzb25Db252ZXJzaW9uLmpzb24pO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBPYmplY3RWYWx1ZXMod3JhcHBlZC52YWx1ZSwgSnNvbkNvbnZlcnNpb24uanNvbik7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkYXRlXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvSVNPKHsgZXh0ZW5kZWRab25lOiB0cnVlLCBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pIH07XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJsaW5rXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkdXJhdGlvblwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTygpIH07XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEpTT04gbGl0ZXJhbCB0byBpdCdzIGNvcnJlc3BvbmRpbmcgaHlkcmF0ZWQgdmFsdWUsIG9wdGlvbmFsbHkgYXBwbHlpbmdcbiAgICAgKiBhIG5vcm1hbGl6YXRpb24gc3RlcCB0byB0aGUgcmVzdWx0aW5nIHZhbHVlIGFuZCBhbnkgbGl0ZXJhbHMgY29udGFpbmVkIHdpdGhpbiBpdFxuICAgICAqIChzdWNoIGFzIGlmIHRoZSBsaXRlcmFsIGlzIGEgbGlzdCBvciBvYmplY3QpLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2YWx1ZShqc29uOiBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gTk9PUF9OT1JNQUxJWkVSKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChqc29uID09PSBudWxsIHx8IGpzb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKGpzb24ubWFwKChpbnB1dCkgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUoaW5wdXQsIG5vcm1hbGl6ZXIpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghKFwiJF90eXBlXCIgaW4ganNvbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyhqc29uLCAodikgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUodiBhcyBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcikpO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0ganNvbltcIiRfdHlwZVwiXTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKERhdGVUaW1lLmZyb21JU08oanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihEdXJhdGlvbi5mcm9tSVNPKGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QoanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZWQgdHlwZSAnJHt0eXBlfSchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmltaXRpdmUgdHlwZSwgcmV0dXJuIGFzIGlzLlxuICAgICAgICByZXR1cm4gbm9ybWFsaXplcihqc29uIGFzIExpdGVyYWwpO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IGdldEZpbGVUaXRsZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHtcbiAgICBGSUxFX1RZUEUsXG4gICAgRmlsZSxcbiAgICBJbmRleGFibGUsXG4gICAgTElOS0FCTEVfVFlQRSxcbiAgICBMSU5LQkVBUklOR19UWVBFLFxuICAgIExpbmthYmxlLFxuICAgIExpbmtiZWFyaW5nLFxuICAgIFRBR0dBQkxFX1RZUEUsXG4gICAgVGFnZ2FibGUsXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQge1xuICAgIEV4dHJhY3RvcnMsXG4gICAgRklFTERCRUFSSU5HX1RZUEUsXG4gICAgRmllbGQsXG4gICAgRmllbGRFeHRyYWN0b3IsXG4gICAgRmllbGRiZWFyaW5nLFxuICAgIEZpZWxkYmVhcmluZ3MsXG59IGZyb20gXCIuLi8uLi9leHByZXNzaW9uL2ZpZWxkXCI7XG5pbXBvcnQgeyBJbmxpbmVGaWVsZCwganNvbklubGluZUZpZWxkLCB2YWx1ZUlubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7XG4gICAgTGluZVNwYW4sXG4gICAgSnNvbk1hcmtkb3duUGFnZSxcbiAgICBKc29uTWFya2Rvd25TZWN0aW9uLFxuICAgIEpzb25NYXJrZG93bkJsb2NrLFxuICAgIEpzb25NYXJrZG93bkxpc3RCbG9jayxcbiAgICBKc29uTWFya2Rvd25MaXN0SXRlbSxcbiAgICBKc29uTWFya2Rvd25UYXNrSXRlbSxcbiAgICBKc29uTWFya2Rvd25EYXRhYmxvY2sgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrLFxuICAgIEpzb25NYXJrZG93bkNvZGVibG9jayxcbiAgICBKc29uRnJvbnRtYXR0ZXJFbnRyeSxcbn0gZnJvbSBcIi4vanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcbmltcG9ydCB7IEpzb25Db252ZXJzaW9uIH0gZnJvbSBcIi4vanNvbi9jb21tb25cIjtcblxuLyoqIEEgbWFya2Rvd24gZmlsZSBpbiB0aGUgdmF1bHQ7IHRoZSBzb3VyY2Ugb2YgbW9zdCBtZXRhZGF0YS4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93blBhZ2UgaW1wbGVtZW50cyBGaWxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0eXBlcyB0aGF0IGEgbWFya2Rvd24gZmlsZSBpcy4gKi9cbiAgICBzdGF0aWMgVFlQRVMgPSBbRklMRV9UWVBFLCBcIm1hcmtkb3duXCIsIFwicGFnZVwiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAvLyBVc2Ugc3RhdGljIHR5cGVzIGZvciBhbGwgbWFya2Rvd24gZmlsZXMuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duUGFnZS5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiUGFnZVwiO1xuXG4gICAgLy8gTWFya2Rvd24gZmlsZSBJRHMgYXJlIGFsd2F5cyBqdXN0IHRoZSBmdWxsIHBhdGguXG4gICAgZ2V0ICRpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBhdGg7XG4gICAgfVxuICAgIC8vIFRoZSBmaWxlIG9mIGEgZmlsZSBpcy4uLiBpdCdzIGZpbGUuXG4gICAgZ2V0ICRmaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcGF0aDtcbiAgICB9XG5cbiAgICAvKiogRnJvbnRtYXR0ZXIgdmFsdWVzIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50LiBNYXBzIGxvd2VyIGNhc2UgZnJvbnRtYXR0ZXIga2V5IC0+IGVudHJ5LiAqL1xuICAgICRmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LiBNYXBzIGxvd2VyIGNhc2Uga2V5IG5hbWUgLT4gZnVsbCBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIC8qKiBUaGUgcGF0aCB0aGlzIGZpbGUgZXhpc3RzIGF0LiAqL1xuICAgICRwYXRoOiBzdHJpbmc7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBjcmVhdGVkLiAqL1xuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBtb2RpZmllZC4gKi9cbiAgICAkbXRpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBUaGUgZXh0ZW5zaW9uOyBmb3IgbWFya2Rvd24gZmlsZXMsIGFsbW9zdCBhbHdheXMgJy5tZCcuICovXG4gICAgJGV4dGVuc2lvbjogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBzaXplIG9mIHRoaXMgcGFnZSBpbiBieXRlcy4gKi9cbiAgICAkc2l6ZTogbnVtYmVyID0gMDtcbiAgICAvKiogVGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBmaWxlIChzdGFydCAwLCBlbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4pICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogVGhlIGV4YWN0IHRhZ3MgaW4gdGhlIGZpbGUuICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqXG4gICAgICogQWxsIGNoaWxkIG1hcmtkb3duIHNlY3Rpb25zIG9mIHRoaXMgbWFya2Rvd24gZmlsZS4gVGhlIGluaXRpYWwgc2VjdGlvbiBiZWZvcmUgYW55IGNvbnRlbnQgaXMgc3BlY2lhbCBhbmQgaXNcbiAgICAgKiBuYW1lZCB3aXRoIHRoZSB0aXRsZSBvZiB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICAkc2VjdGlvbnM6IE1hcmtkb3duU2VjdGlvbltdID0gW107XG5cbiAgICAvKiogQ3JlYXRlIGEgbWFya2Rvd24gZmlsZSBmcm9tIHRoZSBnaXZlbiByYXcgdmFsdWVzLiAqL1xuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbk1hcmtkb3duUGFnZSwgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93blBhZ2Uge1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHJhdy4kc2VjdGlvbnMubWFwKChzZWN0KSA9PiBNYXJrZG93blNlY3Rpb24uZnJvbShzZWN0LCByYXcuJHBhdGgsIG5vcm1hbGl6ZXIpKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duUGFnZSh7XG4gICAgICAgICAgICAkcGF0aDogcmF3LiRwYXRoLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiByYXcuJGZyb250bWF0dGVyXG4gICAgICAgICAgICAgICAgPyBtYXBPYmplY3RWYWx1ZXMocmF3LiRmcm9udG1hdHRlciwgKGZtKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUZyb250bWF0dGVyRW50cnkoZm0pLCBub3JtYWxpemVyKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHJhdy4kaW5maWVsZHMsIChmaWVsZCkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChmaWVsZCksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJGN0aW1lKSxcbiAgICAgICAgICAgICRtdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJG10aW1lKSxcbiAgICAgICAgICAgICRleHRlbnNpb246IHJhdy4kZXh0ZW5zaW9uLFxuICAgICAgICAgICAgJHNpemU6IHJhdy4kc2l6ZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiByYXcuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHJhdy4kbGlua3MubWFwKChsaW5rKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsaW5rKSkpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duUGFnZT4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIGdldCAkbGluZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uZW5kO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgZmlsZS4gKi9cbiAgICBnZXQgJG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy4kcGF0aCk7XG4gICAgfVxuXG4gICAgLyoqIEEgbGluayB0byB0aGlzIGZpbGUuICovXG4gICAgZ2V0ICRsaW5rKCkge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKTogRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93blBhZ2UuRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIGZ1bGwgZmllbGQgZGVmaW5pdGlvbiBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duUGFnZS5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQuICovXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgcGFnZSBpbnRvIGl0J3MgcGFydGlhbCByZXByZXNlbnRhdGlvbiBmb3Igc2F2aW5nLiAqL1xuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93blBhZ2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBhdGg6IHRoaXMuJHBhdGgsXG4gICAgICAgICAgICAkZnJvbnRtYXR0ZXI6IHRoaXMuJGZyb250bWF0dGVyID8gbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGZyb250bWF0dGVyLCBqc29uRnJvbnRtYXR0ZXJFbnRyeSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyh0aGlzLiRpbmZpZWxkcywganNvbklubGluZUZpZWxkKSxcbiAgICAgICAgICAgICRjdGltZTogdGhpcy4kY3RpbWUudG9NaWxsaXMoKSxcbiAgICAgICAgICAgICRtdGltZTogdGhpcy4kbXRpbWUudG9NaWxsaXMoKSxcbiAgICAgICAgICAgICRleHRlbnNpb246IHRoaXMuJGV4dGVuc2lvbixcbiAgICAgICAgICAgICRzaXplOiB0aGlzLiRzaXplLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcy5tYXAoKGxpbmspID0+IGxpbmsudG9PYmplY3QoKSksXG4gICAgICAgICAgICAkc2VjdGlvbnM6IHRoaXMuJHNlY3Rpb25zLm1hcCgoc2VjdCkgPT4gc2VjdC5qc29uKCkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25QYWdlPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmZyb250bWF0dGVyKChmKSA9PiBmLiRmcm9udG1hdHRlciksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgTWFya2Rvd25TZWN0aW9uIGltcGxlbWVudHMgSW5kZXhhYmxlLCBUYWdnYWJsZSwgTGlua2FibGUsIExpbmtiZWFyaW5nLCBGaWVsZGJlYXJpbmcge1xuICAgIC8qKiBBbGwgb2YgdGhlIHR5cGVzIHRoYXQgYSBtYXJrZG93biBzZWN0aW9uIGlzLiAqL1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwic2VjdGlvblwiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAvKiogUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHRoaXMgc2VjdGlvbiBpcyBpbi4gKi9cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25TZWN0aW9uLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJTZWN0aW9uXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgaW5kZXggb2YgdGhpcyBzZWN0aW9uIGluIHRoZSBmaWxlLiAqL1xuICAgICRvcmRpbmFsOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgc2VjdGlvbjsgdGhlIHJvb3QgKGltcGxpY2l0KSBzZWN0aW9uIHdpbGwgaGF2ZSB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UuICovXG4gICAgJHRpdGxlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGUgc2VjdGlvbiAoMSAtIDYpLiAqL1xuICAgICRsZXZlbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgc3BhbiBvZiBsaW5lcyBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VjdGlvbi4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBBbGwgdGFncyBvbiB0aGUgZmlsZS4gKi9cbiAgICAkdGFnczogc3RyaW5nW107XG4gICAgLyoqIEFsbCBsaW5rcyBpbiB0aGUgZmlsZS4gKi9cbiAgICAkbGlua3M6IExpbmtbXTtcbiAgICAvKiogQWxsIG9mIHRoZSBtYXJrZG93biBibG9ja3MgaW4gdGhpcyBzZWN0aW9uLiAqL1xuICAgICRibG9ja3M6IE1hcmtkb3duQmxvY2tbXTtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudCwgZnJvbSBrZXkgbmFtZSAtPiBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIC8qKiBDb252ZXJ0IHJhdyBtYXJrZG93biBzZWN0aW9uIGRhdGEgdG8gdGhlIGFwcHJvcHJpYXRlIGNsYXNzLiAqL1xuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbk1hcmtkb3duU2VjdGlvbiwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUik6IE1hcmtkb3duU2VjdGlvbiB7XG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IHJhdy4kYmxvY2tzLm1hcCgoYmxvY2spID0+IE1hcmtkb3duQmxvY2suZnJvbShibG9jaywgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duU2VjdGlvbih7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25TZWN0aW9uLnJlYWRhYmxlSWQoZmlsZSwgcmF3LiR0aXRsZSwgcmF3LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiByYXcuJG9yZGluYWwsXG4gICAgICAgICAgICAkdGl0bGU6IHJhdy4kdGl0bGUsXG4gICAgICAgICAgICAkbGV2ZWw6IHJhdy4kbGV2ZWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHJhdy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiByYXcuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRibG9ja3M6IGJsb2NrcyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHJhdy4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93blNlY3Rpb24+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBzZWN0aW9uLiAqL1xuICAgIGdldCAkbGluZUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwb3NpdGlvbi5lbmQgLSB0aGlzLiRwb3NpdGlvbi5zdGFydDtcbiAgICB9XG5cbiAgICAvKiogQWxpYXMgZm9yIHRpdGxlIHdoaWNoIGFsbG93cyBzZWFyY2hpbmcgb3ZlciBwYWdlcyBhbmQgc2VjdGlvbnMgYnkgJ25hbWUnLiAqL1xuICAgIGdldCAkbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy4kdGl0bGU7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIGxpbmsgdG8gdGhpcyBzZWN0aW9uLiAqL1xuICAgIGdldCAkbGluaygpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMuJGZpbGUsIHRoaXMuJHRpdGxlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCk6IEZpZWxkW10ge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25TZWN0aW9uLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25TZWN0aW9uLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25TZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLiRvcmRpbmFsLFxuICAgICAgICAgICAgJHRpdGxlOiB0aGlzLiR0aXRsZSxcbiAgICAgICAgICAgICRsZXZlbDogdGhpcy4kbGV2ZWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHRoaXMuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLm1hcCgobGluaykgPT4gbGluay50b09iamVjdCgpKSxcbiAgICAgICAgICAgICRibG9ja3M6IHRoaXMuJGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiBibG9jay5qc29uKCkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93blNlY3Rpb24+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgc2VjdGlvbiB1c2luZyB0aGUgZmlyc3QgOCBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSBvcmRpbmFsLiAqL1xuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgdGl0bGU6IHN0cmluZywgb3JkaW5hbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlyc3Q4ID0gdGl0bGUuc3Vic3RyaW5nKDAsIE1hdGgubWluKHRpdGxlLmxlbmd0aCwgOCkpLnJlcGxhY2UoL1teQS1aYS16MC05LV9dKy9naSwgXCItXCIpO1xuXG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9zZWN0aW9uJHtvcmRpbmFsfS8ke2ZpcnN0OH1gO1xuICAgIH1cbn1cblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFsbCBtYXJrZG93biBibG9ja3MuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgTGlua2JlYXJpbmcsIFRhZ2dhYmxlLCBGaWVsZGJlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duQmxvY2suVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkJsb2NrXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgaW5kZXggb2YgdGhpcyBibG9jayBpbiB0aGUgZmlsZS4gKi9cbiAgICAkb3JkaW5hbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgcG9zaXRpb24vZXh0ZW50IG9mIHRoZSBibG9jay4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBBbGwgdGFncyBvbiB0aGUgYmxvY2suICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIE1hcCBvZiBhbGwgZGlzdGluY3QgaW5saW5lIGZpZWxkcyBpbiB0aGUgZG9jdW1lbnQsIGZyb20ga2V5IG5hbWUgLT4gbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG4gICAgLyoqIElmIHByZXNlbnQsIHRoZSBkaXN0aW5jdCBibG9jayBJRCBmb3IgdGhpcyBibG9jay4gKi9cbiAgICAkYmxvY2tJZD86IHN0cmluZztcbiAgICAvKiogVGhlIHR5cGUgb2YgYmxvY2sgLSBwYXJhZ3JhcGgsIGxpc3QsIGFuZCBzbyBvbi4gKi9cbiAgICAkdHlwZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb20ob2JqZWN0OiBKc29uTWFya2Rvd25CbG9jaywgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUik6IE1hcmtkb3duQmxvY2sge1xuICAgICAgICBpZiAob2JqZWN0LiR0eXBlID09PSBcImxpc3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEJsb2NrLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93bkxpc3RCbG9jaywgZmlsZSwgbm9ybWFsaXplcik7XG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LiR0eXBlID09PSBcImRhdGFibG9ja1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWFya2Rvd25EYXRhYmxvY2suZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrLCBmaWxlLCBub3JtYWxpemVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QuJHR5cGUgPT09IFwiY29kZWJsb2NrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5mcm9tKG9iamVjdCBhcyBKc29uTWFya2Rvd25Db2RlYmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93bkJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJHR5cGU6IG9iamVjdC4kdHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25CbG9jaz4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogSWYgdGhpcyBibG9jayBoYXMgYSBibG9jayBJRCwgdGhlIGxpbmsgdG8gdGhpcyBibG9jay4gKi9cbiAgICBnZXQgJGxpbmsoKTogTGluayB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLiRibG9ja0lkKSByZXR1cm4gTGluay5ibG9jayh0aGlzLiRmaWxlLCB0aGlzLiRibG9ja0lkKTtcbiAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25CbG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkb3JkaW5hbDogdGhpcy4kb3JkaW5hbCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MubWFwKChsKSA9PiBsLnRvT2JqZWN0KCkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkYmxvY2tJZDogdGhpcy4kYmxvY2tJZCxcbiAgICAgICAgICAgICR0eXBlOiB0aGlzLiR0eXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duQmxvY2s+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgYmxvY2sgdXNpbmcgdGhlIG9yZGluYWwgb2YgdGhlIGJsb2NrLiAqL1xuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgb3JkaW5hbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2Jsb2NrJHtvcmRpbmFsfWA7XG4gICAgfVxufVxuXG4vKiogU3BlY2lhbCBibG9jayBmb3IgbWFya2Rvd24gbGlzdHMgKG9mIGVpdGhlciBwbGFpbiBsaXN0IGVudHJpZXMgb3IgdGFza3MpLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duTGlzdEJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIFRhZ2dhYmxlLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImJsb2NrLWxpc3RcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25MaXN0QmxvY2suVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkxpc3QgQmxvY2tcIjtcblxuICAgIC8qKiBUaGUgbGlzdCBpdGVtcyBpbnNpZGUgb2YgdGhpcyBibG9jay4gKi9cbiAgICAkZWxlbWVudHM6IE1hcmtkb3duTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBDcmVhdGUgYSBsaXN0IGJsb2NrIGZyb20gYSBzZXJpYWxpemVkIHZhbHVlLiAqL1xuICAgIHN0YXRpYyBmcm9tKFxuICAgICAgICBvYmplY3Q6IEpzb25NYXJrZG93bkxpc3RCbG9jayxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBvYmplY3QuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gTWFya2Rvd25MaXN0SXRlbS5mcm9tKGVsZW0sIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93bkxpc3RCbG9jayh7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIHNoYXJlZCB3aXRoIG90aGVyIGJsb2Nrcywgc2hvdWxkIHByb2JhYmx5IGJlIGZpeGVkLlxuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duQmxvY2sucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJG9yZGluYWwpLFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRpbmZpZWxkcywgKGkpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoaSksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgICAgICAkZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgICAgICAgJHR5cGU6IFwibGlzdFwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25MaXN0QmxvY2sge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBlbGVtLmpzb24oKSksXG4gICAgICAgIH0pIGFzIEpzb25NYXJrZG93bkxpc3RCbG9jaztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93bkxpc3RCbG9jaz4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxufVxuXG4vKiogQSBibG9jayBjb250YWluaW5nIG1hcmtkb3duIGNvZGUuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25Db2RlYmxvY2sgZXh0ZW5kcyBNYXJrZG93bkJsb2NrIGltcGxlbWVudHMgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcsIExpbmtiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImJsb2NrXCIsIFwiY29kZWJsb2NrXCIsIFRBR0dBQkxFX1RZUEUsIExJTktCRUFSSU5HX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93bkNvZGVibG9jay5UWVBFUztcbiAgICAkbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgICAkY29udGVudFBvc2l0aW9uOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07XG4gICAgJHN0eWxlOiBcImZlbmNlZFwiIHwgXCJpbmRlbnRcIjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duQ29kZWJsb2NrPikge1xuICAgICAgICBzdXBlcihpbml0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25Db2RlYmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25Db2RlYmxvY2soe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duQ29kZWJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkb3JkaW5hbDogb2JqZWN0LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHR5cGVuYW1lOiBcIkNvZGVibG9ja1wiLFxuICAgICAgICAgICAgJHR5cGU6IFwiY29kZWJsb2NrXCIsXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJGxhbmd1YWdlczogb2JqZWN0LiRsYW5ndWFnZXMsXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsaW5rKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsaW5rKSkpLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIHZhbHVlSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogb2JqZWN0LiRjb250ZW50UG9zaXRpb24sXG4gICAgICAgICAgICAkc3R5bGU6IG9iamVjdC4kc3R5bGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5TVUJfRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duQ29kZWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duQ29kZWJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkbGFuZ3VhZ2VzOiB0aGlzLiRsYW5ndWFnZXMsXG4gICAgICAgICAgICAkY29udGVudFBvc2l0aW9uOiB0aGlzLiRjb250ZW50UG9zaXRpb24sXG4gICAgICAgICAgICAkc3R5bGU6IHRoaXMuJHN0eWxlLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25Db2RlYmxvY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vY29kZWJsb2NrJHtsaW5lfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIFNVQl9GSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duQ29kZWJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2U8TWFya2Rvd25Db2RlYmxvY2s+KFxuICAgICAgICBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRlxuICAgICk7XG59XG5cbi8qKiBBIGRhdGEtYW5ub3RhdGVkIFlBTUwgY29kZWJsb2NrLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duRGF0YWJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImRhdGFibG9ja1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25EYXRhYmxvY2suVFlQRVM7XG4gICAgJGRhdGE6IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25EYXRhYmxvY2s+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKFxuICAgICAgICBvYmplY3Q6IEpzb25NYXJrZG93bkRhdGFibG9jayxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duRGF0YWJsb2NrIHtcbiAgICAgICAgLy8gRGF0YWJsb2NrcyBhcmUgYmFzZWQgb24gd2hhdCBpcyBlc3NlbnRpYWxseSBqdXN0IGZyb250bWF0dGVyOyB3ZSBjYW4gYXBwbHlcbiAgICAgICAgLy8gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBsb2dpYyB0byB0aGVtLlxuICAgICAgICBjb25zdCBub3JtZGF0YSA9IG5vcm1hbGl6ZUxpbmtzKG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGRhdGEsIHZhbHVlRnJvbnRtYXR0ZXJFbnRyeSksIG5vcm1hbGl6ZXIpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IGdhdGhlckxpbmtzKG5vcm1kYXRhKTtcbiAgICAgICAgY29uc3QgdGFncyA9IGdhdGhlclRhZ3Mobm9ybWRhdGEpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25EYXRhYmxvY2soe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duRGF0YWJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkaW5maWVsZHM6IHt9LFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICRkYXRhOiBub3JtZGF0YSxcbiAgICAgICAgICAgICRsaW5rczogbGlua3MsXG4gICAgICAgICAgICAkdHlwZW5hbWU6IFwiRGF0YWJsb2NrXCIsXG4gICAgICAgICAgICAkdGFnczogdGFncyxcbiAgICAgICAgICAgICR0eXBlOiBcImRhdGFibG9ja1wiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25EYXRhYmxvY2suU1VCX0ZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25EYXRhYmxvY2sge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRkYXRhOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kZGF0YSwganNvbkZyb250bWF0dGVyRW50cnkpLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25EYXRhYmxvY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vZGF0YWJsb2NrJHtsaW5lfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIFNVQl9GSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duRGF0YWJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2U8TWFya2Rvd25EYXRhYmxvY2s+KFxuICAgICAgICBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRixcbiAgICAgICAgRXh0cmFjdG9ycy5mcm9udG1hdHRlcigoZikgPT4gZi4kZGF0YSlcbiAgICApO1xufVxuXG4vKiogQSBzcGVjaWZpYyBsaXN0IGl0ZW0gaW4gYSBsaXN0LiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duTGlzdEl0ZW0gaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImxpc3QtaXRlbVwiLCBMSU5LQkVBUklOR19UWVBFLCBUQUdHQUJMRV9UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25MaXN0SXRlbS5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiTGlzdCBJdGVtXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgcG9zaXRpb24gb2YgdGhlIGxpc3QgaXRlbSBpbiB0aGUgZmlsZS4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBDaGlsZCBlbGVtZW50cyBvZiB0aGlzIGxpc3QgaXRlbS4gKi9cbiAgICAkZWxlbWVudHM6IE1hcmtkb3duTGlzdEl0ZW1bXTtcbiAgICAvKiogVGhlIHR5cGUgb2YgbGlzdCBpdGVtIHRoYXQgdGhpcyBlbGVtZW50IGlzLiAqL1xuICAgICR0eXBlOiBzdHJpbmc7XG4gICAgLyoqIEV4YWN0IHRhZ3Mgb24gdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LCBmcm9tIGtleSBuYW1lIC0+IG1ldGFkYXRhLiAqL1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIFRoZSBibG9jayBJRCBvZiB0aGlzIGxpc3QgaXRlbSBpZiBwcmVzZW50LiAqL1xuICAgICRibG9ja0lkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBsaW5lIG51bWJlciBvZiB0aGUgcGFyZW50IG9mIHRoaXMgbGlzdCBpdGVtLlxuICAgICAqIElmIGEgcG9zaXRpdmUgbnVtYmVyLCB0aGVuIHRoaXMgbGlzdCBlbGVtZW50IGlzIGEgY2hpbGRcbiAgICAgKiBvZiB0aGUgbGlzdCBlbGVtZW50IGF0IHRoYXQgbGluZS5cbiAgICAgKlxuICAgICAqIElmIGEgbmVnYXRpdmUgbnVtYmVyLCB0aGVuIHRoaXMgbGlzdCBlbGVtZW50IGlzIGEgcm9vdCBlbGVtZW50XG4gICAgICogb2YgYSBsaXN0IHN0YXJ0aW5nIGF0IHRoYXQgbGluZSAobmVnYXRlZCkuIEkuZS4sIC03IG1lYW5zXG4gICAgICogdGhpcyBpcyBhIHJvb3QgZWxlbWVudCBvZiB0aGUgbGlzdCBzdGFydGluZyBhdCBsaW5lIDcuXG4gICAgICovXG4gICAgJHBhcmVudExpbmU6IG51bWJlcjtcbiAgICAvKiogVGhlIG1hcmtlciB1c2VkIHRvIHN0YXJ0IHRoZSBsaXN0IGl0ZW0gKHN1Y2ggYXMgLSBvciArIG9yICopLiBPbiBhIG1hbGZvcm1lZCB0YXNrLCBtYXkgYmUgdW5kZWZpbmVkLiAqL1xuICAgICRzeW1ib2w/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBsaXN0IGl0ZW0uICovXG4gICAgJHRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKiogQ3JlYXRlIGEgbGlzdCBpdGVtIGZyb20gYSBzZXJpYWxpemVkIG9iamVjdC4gKi9cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25MaXN0SXRlbSxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICBpZiAob2JqZWN0LiR0eXBlID09PSBcInRhc2tcIikgcmV0dXJuIE1hcmtkb3duVGFza0l0ZW0uZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duVGFza0l0ZW0sIGZpbGUsIG5vcm1hbGl6ZXIpO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gb2JqZWN0LiRlbGVtZW50cy5tYXAoKGVsZW0pID0+IE1hcmtkb3duTGlzdEl0ZW0uZnJvbShlbGVtLCBmaWxlLCBub3JtYWxpemVyKSk7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25MaXN0SXRlbSh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25MaXN0SXRlbS5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgICAgICR0eXBlOiBvYmplY3QuJHR5cGUsXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRpbmZpZWxkcywgKGkpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoaSksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRsaW5rczogb2JqZWN0LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJHBhcmVudExpbmU6IG9iamVjdC4kcGFyZW50TGluZSxcbiAgICAgICAgICAgICR0ZXh0OiBvYmplY3QuJHRleHQsXG4gICAgICAgICAgICAkc3ltYm9sOiBvYmplY3QuJHN5bWJvbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25MaXN0SXRlbT4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBsaW5lIHRoYXQgdGhpcyBsaXN0IGl0ZW0gc3RhcnRzIG9uLiAqL1xuICAgIGdldCAkbGluZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uc3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgZ2V0ICRsaW5lQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLmVuZCAtIHRoaXMuJHBvc2l0aW9uLnN0YXJ0ICsgMTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYW5lZCB0ZXh0IHRoYXQgaXMgZ2FyYXVudGVlZCB0byBiZSBub24tbnVsbCBhbmQgaGFzIGluZGVuYXRpb24gYW5kIGlubGluZSBmaWVsZHMgcmVtb3ZlZC4gKi9cbiAgICBnZXQgJGNsZWFudGV4dCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiR0ZXh0KSByZXR1cm4gXCJcIjtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy4kdGV4dFxuICAgICAgICAgICAgICAgIC8vIEVsaW1pbmF0ZSBba2V5OjogdmFsdWVdIGFubm90YXRpb25zLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oLio/KShbXFxbXFwoXVteOihcXFtdKzo6XFxzKi4qP1tcXF1cXCldXFxzKikkL2dtLCBcIiQxXCIpXG4gICAgICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25MaXN0SXRlbS5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25MaXN0SXRlbS5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBlbGVtLmpzb24oKSksXG4gICAgICAgICAgICAkdHlwZTogdGhpcy4kdHlwZSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuJGJsb2NrSWQsXG4gICAgICAgICAgICAkcGFyZW50TGluZTogdGhpcy4kcGFyZW50TGluZSxcbiAgICAgICAgICAgICRzeW1ib2w6IHRoaXMuJHN5bWJvbCxcbiAgICAgICAgICAgICR0ZXh0OiB0aGlzLiR0ZXh0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25MaXN0SXRlbT4gPSBFeHRyYWN0b3JzLm1lcmdlKFxuICAgICAgICBFeHRyYWN0b3JzLmludHJpbnNpY3MoKSxcbiAgICAgICAgRXh0cmFjdG9ycy5pbmxpbmVGaWVsZHMoKGYpID0+IGYuJGluZmllbGRzKVxuICAgICk7XG5cbiAgICAvKiogR2VuZXJhdGUgYSByZWFkYWJsZSBJRCBmb3IgdGhpcyBpdGVtIHVzaW5nIHRoZSBsaW5lIG51bWJlci4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9saXN0JHtsaW5lfWA7XG4gICAgfVxufVxuXG4vKiogQSBzcGVjaWZpYyB0YXNrIGluc2lkZSBvZiBhIG1hcmtkb3duIGxpc3QuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25UYXNrSXRlbSBleHRlbmRzIE1hcmtkb3duTGlzdEl0ZW0gaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImxpc3QtaXRlbVwiLCBcInRhc2tcIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duVGFza0l0ZW0uVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIlRhc2tcIjtcblxuICAgIC8qKiBUaGUgdGV4dCBpbnNpZGUgb2YgdGhlIHRhc2sgaXRlbS4gKi9cbiAgICAkc3RhdHVzOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20ob2JqZWN0OiBKc29uTWFya2Rvd25UYXNrSXRlbSwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplcik6IE1hcmtkb3duVGFza0l0ZW0ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG9iamVjdC4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBNYXJrZG93bkxpc3RJdGVtLmZyb20oZWxlbSwgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duVGFza0l0ZW0oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duTGlzdEl0ZW0ucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJHBvc2l0aW9uLnN0YXJ0KSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgICAkdHlwZTogb2JqZWN0LiR0eXBlLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRwYXJlbnRMaW5lOiBvYmplY3QuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkc3RhdHVzOiBvYmplY3QuJHN0YXR1cyxcbiAgICAgICAgICAgICRzeW1ib2w6IG9iamVjdC4kc3ltYm9sLFxuICAgICAgICAgICAgJHRleHQ6IG9iamVjdC4kdGV4dCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25UYXNrSXRlbT4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRzdGF0dXM6IHRoaXMuJHN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gdGFzayBpcyBjb21wbGV0ZWQuICovXG4gICAgcHVibGljIGdldCAkY29tcGxldGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RhdHVzID09PSBcInhcIiB8fCB0aGlzLiRzdGF0dXMgPT09IFwiWFwiO1xuICAgIH1cbn1cblxuLyoqIEFuIGVudHJ5IGluIHRoZSBmcm9udG1hdHRlcjsgaW5jbHVkZXMgdGhlIHJhdyB2YWx1ZSwgcGFyc2VkIHZhbHVlLCBhbmQgcmF3IGtleSAoYmVmb3JlIGxvd2VyLWNhc2luZykuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyRW50cnkge1xuICAgIC8qKiBUaGUgYWN0dWFsIHN0cmluZyBpbiBmcm9udG1hdHRlciB3aXRoIGV4YWN0IGNhc2luZy4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZSBvZiB0aGUgZnJvbnRtYXR0ZXIgZW50cnkgKGRhdGUsIGR1cmF0aW9uLCBldGMuKS4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZnJvbnRtYXR0ZXIgZW50cnkgYmVmb3JlIHBhcnNpbmc7IGdlbmVyYWxseSBhIHN0cmluZyBvciBudW1iZXIuICovXG4gICAgcmF3OiBzdHJpbmc7XG59XG5cbi8qKiBDb252ZXJ0IGEgcmVndWxhciBmcm9udG1hdHRlciBlbnRyeSBpbnRvIGEgSlNPTiBmcm9udG1hdHRlciBlbnRyeS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25Gcm9udG1hdHRlckVudHJ5KHJhdzogRnJvbnRtYXR0ZXJFbnRyeSk6IEpzb25Gcm9udG1hdHRlckVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJhdy5rZXksXG4gICAgICAgIHZhbHVlOiBKc29uQ29udmVyc2lvbi5qc29uKHJhdy52YWx1ZSksXG4gICAgICAgIHJhdzogcmF3LnJhdyxcbiAgICB9O1xufVxuXG4vKiogQ29udmVydCBhIGpzb24gZnJvbnRtYXR0ZXIgZW50cnkgdG8gYSByZWd1bGFyIGZyb250bWF0dGVyIGVudHJ5LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9udG1hdHRlckVudHJ5KHJhdzogSnNvbkZyb250bWF0dGVyRW50cnkpOiBGcm9udG1hdHRlckVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJhdy5rZXksXG4gICAgICAgIHZhbHVlOiBKc29uQ29udmVyc2lvbi52YWx1ZShyYXcudmFsdWUpLFxuICAgICAgICByYXc6IHJhdy5yYXcsXG4gICAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBsaW5rcyBkZWVwbHkgaW4gdGhlIG9iamVjdC5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxpbmtzPFQgZXh0ZW5kcyBMaXRlcmFsPihpbnB1dDogVCwgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIpOiBUIHtcbiAgICByZXR1cm4gTGl0ZXJhbHMubWFwTGVhdmVzKGlucHV0LCAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzTGluayh2YWx1ZSkpIHJldHVybiBub3JtYWxpemVyKHZhbHVlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gdmFsdWU7XG4gICAgfSkgYXMgVDtcbn1cblxuLyoqIFJlY3Vyc2l2ZWx5IGdhdGhlciBsaW5rcyBmcm9tIGEgbGl0ZXJhbCBvYmplY3QuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJMaW5rcyhpbnB1dDogTGl0ZXJhbCk6IExpbmtbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBMaW5rW10gPSBbXTtcblxuICAgIExpdGVyYWxzLm1hcExlYXZlcyhpbnB1dCwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0xpbmsodmFsdWUpKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEdhdGhlciB0YWdzIGZyb20gYSBkYXRhYmxvY2suXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJUYWdzKGRhdGE6IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+KTogc3RyaW5nW10ge1xuICAgIGZ1bmN0aW9uIHJlY3Vyc2UoaW5wdXQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzU3RyaW5nKGlucHV0KSkgcmV0dXJuIFtpbnB1dC5zdGFydHNXaXRoKFwiI1wiKSA/IGlucHV0IDogXCIjXCIgKyBpbnB1dF07XG4gICAgICAgIGVsc2UgaWYgKExpdGVyYWxzLmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQuZmxhdE1hcChyZWN1cnNlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHRhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKFwidGFnXCIgaW4gZGF0YSkgdGFncyA9IHRhZ3MuY29uY2F0KHJlY3Vyc2UoZGF0YVtcInRhZ3NcIl0pKTtcbiAgICBpZiAoXCJ0YWdzXCIgaW4gZGF0YSkgdGFncyA9IHRhZ3MuY29uY2F0KHJlY3Vyc2UoZGF0YVtcInRhZ3NcIl0pKTtcblxuICAgIHJldHVybiB0YWdzO1xufVxuXG4vKiogQSBsaW5rIG5vcm1hbGl6ZXIgd2hpY2ggdGFrZXMgaW4gYSByYXcgbGluayBhbmQgcHJvZHVjZXMgYSBub3JtYWxpemVkIGxpbmsuICovXG5leHBvcnQgdHlwZSBMaW5rTm9ybWFsaXplciA9IChsaW5rOiBMaW5rKSA9PiBMaW5rO1xuZXhwb3J0IGNvbnN0IE5PT1BfTk9STUFMSVpFUjogTGlua05vcm1hbGl6ZXIgPSAoeCkgPT4geDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59IiwgImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCAiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRJbnB1dFZhbHVlXCIsIFwiZGVmYXVsdE1lbnVJc09wZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFZhbHVlXCIsIFwibWVudUlzT3BlblwiLCBcIm9uQ2hhbmdlXCIsIFwib25JbnB1dENoYW5nZVwiLCBcIm9uTWVudUNsb3NlXCIsIFwib25NZW51T3BlblwiLCBcInZhbHVlXCJdO1xuZnVuY3Rpb24gdXNlU3RhdGVNYW5hZ2VyKF9yZWYpIHtcbiAgdmFyIF9yZWYkZGVmYXVsdElucHV0VmFsdSA9IF9yZWYuZGVmYXVsdElucHV0VmFsdWUsXG4gICAgZGVmYXVsdElucHV0VmFsdWUgPSBfcmVmJGRlZmF1bHRJbnB1dFZhbHUgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRkZWZhdWx0SW5wdXRWYWx1LFxuICAgIF9yZWYkZGVmYXVsdE1lbnVJc09wZSA9IF9yZWYuZGVmYXVsdE1lbnVJc09wZW4sXG4gICAgZGVmYXVsdE1lbnVJc09wZW4gPSBfcmVmJGRlZmF1bHRNZW51SXNPcGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkZWZhdWx0TWVudUlzT3BlLFxuICAgIF9yZWYkZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWUsXG4gICAgZGVmYXVsdFZhbHVlID0gX3JlZiRkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGRlZmF1bHRWYWx1ZSxcbiAgICBwcm9wc0lucHV0VmFsdWUgPSBfcmVmLmlucHV0VmFsdWUsXG4gICAgcHJvcHNNZW51SXNPcGVuID0gX3JlZi5tZW51SXNPcGVuLFxuICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIHByb3BzT25JbnB1dENoYW5nZSA9IF9yZWYub25JbnB1dENoYW5nZSxcbiAgICBwcm9wc09uTWVudUNsb3NlID0gX3JlZi5vbk1lbnVDbG9zZSxcbiAgICBwcm9wc09uTWVudU9wZW4gPSBfcmVmLm9uTWVudU9wZW4sXG4gICAgcHJvcHNWYWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgcmVzdFNlbGVjdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IGRlZmF1bHRJbnB1dFZhbHVlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzdGF0ZUlucHV0VmFsdWUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUocHJvcHNNZW51SXNPcGVuICE9PSB1bmRlZmluZWQgPyBwcm9wc01lbnVJc09wZW4gOiBkZWZhdWx0TWVudUlzT3BlbiksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHN0YXRlTWVudUlzT3BlbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0U3RhdGVNZW51SXNPcGVuID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShwcm9wc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wc1ZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgc3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0U3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHNPbkNoYW5nZSh2YWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuICAgIHNldFN0YXRlVmFsdWUodmFsdWUpO1xuICB9LCBbcHJvcHNPbkNoYW5nZV0pO1xuICB2YXIgb25JbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIHZhciBuZXdWYWx1ZTtcbiAgICBpZiAodHlwZW9mIHByb3BzT25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV3VmFsdWUgPSBwcm9wc09uSW5wdXRDaGFuZ2UodmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cbiAgICBzZXRTdGF0ZUlucHV0VmFsdWUobmV3VmFsdWUgIT09IHVuZGVmaW5lZCA/IG5ld1ZhbHVlIDogdmFsdWUpO1xuICB9LCBbcHJvcHNPbklucHV0Q2hhbmdlXSk7XG4gIHZhciBvbk1lbnVPcGVuID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbk1lbnVPcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wc09uTWVudU9wZW4oKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKHRydWUpO1xuICB9LCBbcHJvcHNPbk1lbnVPcGVuXSk7XG4gIHZhciBvbk1lbnVDbG9zZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzT25NZW51Q2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzT25NZW51Q2xvc2UoKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKGZhbHNlKTtcbiAgfSwgW3Byb3BzT25NZW51Q2xvc2VdKTtcbiAgdmFyIGlucHV0VmFsdWUgPSBwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IHN0YXRlSW5wdXRWYWx1ZTtcbiAgdmFyIG1lbnVJc09wZW4gPSBwcm9wc01lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IHByb3BzTWVudUlzT3BlbiA6IHN0YXRlTWVudUlzT3BlbjtcbiAgdmFyIHZhbHVlID0gcHJvcHNWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNWYWx1ZSA6IHN0YXRlVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RTZWxlY3RQcm9wcyksIHt9LCB7XG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICBtZW51SXNPcGVuOiBtZW51SXNPcGVuLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlOiBvbklucHV0Q2hhbmdlLFxuICAgIG9uTWVudUNsb3NlOiBvbk1lbnVDbG9zZSxcbiAgICBvbk1lbnVPcGVuOiBvbk1lbnVPcGVuLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlU3RhdGVNYW5hZ2VyIGFzIHUgfTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5pbXBvcnQgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tIFwiLi9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgdmFyIFN1cGVyID0gZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICByZXN1bHQ7XG4gICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgIHZhciBOZXdUYXJnZXQgPSBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gIH07XG59IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwgIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7XG4gIGlmICghcmF3KSB7XG4gICAgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7XG4gICAgcmF3OiB7XG4gICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpXG4gICAgfVxuICB9KSk7XG59IiwgIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJmdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICAvLyBCcm93c2VycyB3aXRob3V0IGBTaGFkb3dSb290YCBzdXBwb3J0LlxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5wYWdlWE9mZnNldCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQucGFnZVlPZmZzZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgd2luLmZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyh3aW4uZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIGZsaXAgYXMgZmxpcCQxLCBzaXplIGFzIHNpemUkMSwgaGlkZSBhcyBoaWRlJDEsIGFycm93IGFzIGFycm93JDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldERvY3VtZW50RWxlbWVudCwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIC4uLmNsaXBwaW5nQW5jZXN0b3IsXG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnlcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbGV0IHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgd2hpbGUgKHN2Z09mZnNldFBhcmVudCAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQoc3ZnT2Zmc2V0UGFyZW50KSAmJiAhaXNTdGF0aWNQb3NpdGlvbmVkKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN2Z09mZnNldFBhcmVudDtcbiAgICAgIH1cbiAgICAgIHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoc3ZnT2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSAmJiAhaXNDb250YWluaW5nQmxvY2sob2Zmc2V0UGFyZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luO1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICBjb25zdCBmbG9hdGluZ0RpbWVuc2lvbnMgPSBhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZyk7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBmbG9hdGluZ0RpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGZsb2F0aW5nRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1JUTChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBjbGlwcGVkLCB0aGUgcmF0aW8gaXMgMC4gVGhyb3R0bGUgdGhlIHJlZnJlc2hcbiAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgdXBkYXRlcy5cbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgKG5leHRSZWZSZWN0LnggIT09IHByZXZSZWZSZWN0LnggfHwgbmV4dFJlZlJlY3QueSAhPT0gcHJldlJlZlJlY3QueSB8fCBuZXh0UmVmUmVjdC53aWR0aCAhPT0gcHJldlJlZlJlY3Qud2lkdGggfHwgbmV4dFJlZlJlY3QuaGVpZ2h0ICE9PSBwcmV2UmVmUmVjdC5oZWlnaHQpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgaW5kZXggPSAgdXNlTGF5b3V0RWZmZWN0IDtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCAiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcywgY3NzIGFzIGNzcyQyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXknO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdGFnZ2VkVGVtcGxhdGVMaXRlcmFsJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tICd1c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0JztcblxudmFyIF9leGNsdWRlZCQ0ID0gW1wiY2xhc3NOYW1lXCIsIFwiY2xlYXJWYWx1ZVwiLCBcImN4XCIsIFwiZ2V0U3R5bGVzXCIsIFwiZ2V0Q2xhc3NOYW1lc1wiLCBcImdldFZhbHVlXCIsIFwiaGFzVmFsdWVcIiwgXCJpc011bHRpXCIsIFwiaXNSdGxcIiwgXCJvcHRpb25zXCIsIFwic2VsZWN0T3B0aW9uXCIsIFwic2VsZWN0UHJvcHNcIiwgXCJzZXRWYWx1ZVwiLCBcInRoZW1lXCJdO1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOTyBPUFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsYXNzIE5hbWUgUHJlZml4ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29tcG9uZW50IHN0YXRlIGZvciBzdHlsaW5nIHdpdGggY2xhc3MgbmFtZXMuXG5cbiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0cmluZ3MgT1IgYSBzdHJpbmcvb2JqZWN0IHBhaXI6XG4gLSBjbGFzc05hbWUoWydjb21wJywgJ2NvbXAtYXJnJywgJ2NvbXAtYXJnLTInXSlcbiAgIEByZXR1cm5zICdyZWFjdC1zZWxlY3RfX2NvbXAgcmVhY3Qtc2VsZWN0X19jb21wLWFyZyByZWFjdC1zZWxlY3RfX2NvbXAtYXJnLTInXG4gLSBjbGFzc05hbWUoJ2NvbXAnLCB7IHNvbWU6IHRydWUsIHN0YXRlOiBmYWxzZSB9KVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtLXNvbWUnXG4qL1xuZnVuY3Rpb24gYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH0gZWxzZSBpZiAobmFtZVswXSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHByZWZpeCArIG5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdfXycgKyBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBjbGFzc05hbWVzKHByZWZpeCwgc3RhdGUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZUxpc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGNsYXNzTmFtZUxpc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIHZhciBhcnIgPSBbXS5jb25jYXQoY2xhc3NOYW1lTGlzdCk7XG4gIGlmIChzdGF0ZSAmJiBwcmVmaXgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHN0YXRlW2tleV0pIHtcbiAgICAgICAgYXJyLnB1c2goXCJcIi5jb25jYXQoYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBrZXkpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBTdHJpbmcoaSkudHJpbSgpO1xuICB9KS5qb2luKCcgJyk7XG59XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsZWFuIFZhbHVlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuVmFsdWUgPSBmdW5jdGlvbiBjbGVhblZhbHVlKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkgcmV0dXJuIFt2YWx1ZV07XG4gIHJldHVybiBbXTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gQ29tbW9uIFByb3BzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuQ29tbW9uUHJvcHMgPSBmdW5jdGlvbiBjbGVhbkNvbW1vblByb3BzKHByb3BzKSB7XG4gIC8vY2xhc3NOYW1lXG4gIHByb3BzLmNsYXNzTmFtZTtcbiAgICBwcm9wcy5jbGVhclZhbHVlO1xuICAgIHByb3BzLmN4O1xuICAgIHByb3BzLmdldFN0eWxlcztcbiAgICBwcm9wcy5nZXRDbGFzc05hbWVzO1xuICAgIHByb3BzLmdldFZhbHVlO1xuICAgIHByb3BzLmhhc1ZhbHVlO1xuICAgIHByb3BzLmlzTXVsdGk7XG4gICAgcHJvcHMuaXNSdGw7XG4gICAgcHJvcHMub3B0aW9ucztcbiAgICBwcm9wcy5zZWxlY3RPcHRpb247XG4gICAgcHJvcHMuc2VsZWN0UHJvcHM7XG4gICAgcHJvcHMuc2V0VmFsdWU7XG4gICAgcHJvcHMudGhlbWU7XG4gICAgdmFyIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCQ0KTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGlubmVyUHJvcHMpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgU3R5bGUgUHJvcHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZ2V0U3R5bGVQcm9wcyA9IGZ1bmN0aW9uIGdldFN0eWxlUHJvcHMocHJvcHMsIG5hbWUsIGNsYXNzTmFtZXNTdGF0ZSkge1xuICB2YXIgY3ggPSBwcm9wcy5jeCxcbiAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgZ2V0Q2xhc3NOYW1lcyA9IHByb3BzLmdldENsYXNzTmFtZXMsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICByZXR1cm4ge1xuICAgIGNzczogZ2V0U3R5bGVzKG5hbWUsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZXNTdGF0ZSAhPT0gbnVsbCAmJiBjbGFzc05hbWVzU3RhdGUgIT09IHZvaWQgMCA/IGNsYXNzTmFtZXNTdGF0ZSA6IHt9LCBnZXRDbGFzc05hbWVzKG5hbWUsIHByb3BzKSwgY2xhc3NOYW1lKVxuICB9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIYW5kbGUgSW5wdXQgQ2hhbmdlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSwgb25JbnB1dENoYW5nZSkge1xuICBpZiAob25JbnB1dENoYW5nZSkge1xuICAgIHZhciBfbmV3VmFsdWUgPSBvbklucHV0Q2hhbmdlKGlucHV0VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIGlmICh0eXBlb2YgX25ld1ZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIF9uZXdWYWx1ZTtcbiAgfVxuICByZXR1cm4gaW5wdXRWYWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY3JvbGwgSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzRG9jdW1lbnRFbGVtZW50KGVsKSB7XG4gIHJldHVybiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudC5ib2R5LCB3aW5kb3ddLmluZGV4T2YoZWwpID4gLTE7XG59XG5cbi8vIE5vcm1hbGl6ZWQgU2Nyb2xsIFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRIZWlnaHQoZWwpIHtcbiAgaWYgKGlzRG9jdW1lbnRFbGVtZW50KGVsKSkge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIGVsLmNsaWVudEhlaWdodDtcbn1cblxuLy8gTm9ybWFsaXplZCBzY3JvbGxUbyAmIHNjcm9sbFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcChlbCkge1xuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgfVxuICByZXR1cm4gZWwuc2Nyb2xsVG9wO1xufVxuZnVuY3Rpb24gc2Nyb2xsVG8oZWwsIHRvcCkge1xuICAvLyB3aXRoIGEgc2Nyb2xsIGRpc3RhbmNlLCB3ZSBwZXJmb3JtIHNjcm9sbCBvbiB0aGUgZWxlbWVudFxuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsLnNjcm9sbFRvcCA9IHRvcDtcbn1cblxuLy8gR2V0IFNjcm9sbCBQYXJlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnO1xuICB2YXIgb3ZlcmZsb3dSeCA9IC8oYXV0b3xzY3JvbGwpLztcbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBmb3IgKHZhciBwYXJlbnQgPSBlbGVtZW50OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDspIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSeC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLy8gQW5pbWF0ZWQgU2Nyb2xsIFRvXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gIEBwYXJhbSB0OiB0aW1lIChlbGFwc2VkKVxuICBAcGFyYW0gYjogaW5pdGlhbCB2YWx1ZVxuICBAcGFyYW0gYzogYW1vdW50IG9mIGNoYW5nZVxuICBAcGFyYW0gZDogZHVyYXRpb25cbiovXG5mdW5jdGlvbiBlYXNlT3V0Q3ViaWModCwgYiwgYywgZCkge1xuICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogdCArIDEpICsgYjtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVkU2Nyb2xsVG8oZWxlbWVudCwgdG8pIHtcbiAgdmFyIGR1cmF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAyMDA7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbm9vcDtcbiAgdmFyIHN0YXJ0ID0gZ2V0U2Nyb2xsVG9wKGVsZW1lbnQpO1xuICB2YXIgY2hhbmdlID0gdG8gLSBzdGFydDtcbiAgdmFyIGluY3JlbWVudCA9IDEwO1xuICB2YXIgY3VycmVudFRpbWUgPSAwO1xuICBmdW5jdGlvbiBhbmltYXRlU2Nyb2xsKCkge1xuICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICB2YXIgdmFsID0gZWFzZU91dEN1YmljKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbik7XG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdmFsKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlU2Nyb2xsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGFuaW1hdGVTY3JvbGwoKTtcbn1cblxuLy8gU2Nyb2xsIEludG8gVmlld1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG1lbnVFbCwgZm9jdXNlZEVsKSB7XG4gIHZhciBtZW51UmVjdCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGZvY3VzZWRSZWN0ID0gZm9jdXNlZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgb3ZlclNjcm9sbCA9IGZvY3VzZWRFbC5vZmZzZXRIZWlnaHQgLyAzO1xuICBpZiAoZm9jdXNlZFJlY3QuYm90dG9tICsgb3ZlclNjcm9sbCA+IG1lbnVSZWN0LmJvdHRvbSkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5taW4oZm9jdXNlZEVsLm9mZnNldFRvcCArIGZvY3VzZWRFbC5jbGllbnRIZWlnaHQgLSBtZW51RWwub2Zmc2V0SGVpZ2h0ICsgb3ZlclNjcm9sbCwgbWVudUVsLnNjcm9sbEhlaWdodCkpO1xuICB9IGVsc2UgaWYgKGZvY3VzZWRSZWN0LnRvcCAtIG92ZXJTY3JvbGwgPCBtZW51UmVjdC50b3ApIHtcbiAgICBzY3JvbGxUbyhtZW51RWwsIE1hdGgubWF4KGZvY3VzZWRFbC5vZmZzZXRUb3AgLSBvdmVyU2Nyb2xsLCAwKSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgYm91bmRpbmcgY2xpZW50IG9iamVjdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIGNhbm5vdCBnZXQga2V5cyB1c2luZyBhcnJheSBub3RhdGlvbiB3aXRoIERPTVJlY3RcbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50T2JqKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvdWNoIENhcGFiaWxpdHkgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc1RvdWNoQ2FwYWJsZSgpIHtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudC5jcmVhdGVFdmVudCgnVG91Y2hFdmVudCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTW9iaWxlIERldmljZSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzTW9iaWxlRGV2aWNlKCkge1xuICB0cnkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXNzaXZlIEV2ZW50IERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JhZmdyYXBoL2RldGVjdC1pdC9ibG9iL21haW4vc3JjL2luZGV4LnRzI0wxOS1MMzZcbnZhciBwYXNzaXZlT3B0aW9uQWNjZXNzZWQgPSBmYWxzZTtcbnZhciBvcHRpb25zID0ge1xuICBnZXQgcGFzc2l2ZSgpIHtcbiAgICByZXR1cm4gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkID0gdHJ1ZTtcbiAgfVxufTtcbi8vIGNoZWNrIGZvciBTU1JcbnZhciB3ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbmlmICh3LmFkZEV2ZW50TGlzdGVuZXIgJiYgdy5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gIHcuYWRkRXZlbnRMaXN0ZW5lcigncCcsIG5vb3AsIG9wdGlvbnMpO1xuICB3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3AnLCBub29wLCBmYWxzZSk7XG59XG52YXIgc3VwcG9ydHNQYXNzaXZlRXZlbnRzID0gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkO1xuZnVuY3Rpb24gbm90TnVsbGlzaChpdGVtKSB7XG4gIHJldHVybiBpdGVtICE9IG51bGw7XG59XG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xufVxuZnVuY3Rpb24gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG11bHRpVmFsdWUsIHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBpc011bHRpID8gbXVsdGlWYWx1ZSA6IHNpbmdsZVZhbHVlO1xufVxuZnVuY3Rpb24gc2luZ2xlVmFsdWVBc1ZhbHVlKHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBzaW5nbGVWYWx1ZTtcbn1cbmZ1bmN0aW9uIG11bHRpVmFsdWVBc1ZhbHVlKG11bHRpVmFsdWUpIHtcbiAgcmV0dXJuIG11bHRpVmFsdWU7XG59XG52YXIgcmVtb3ZlUHJvcHMgPSBmdW5jdGlvbiByZW1vdmVQcm9wcyhwcm9wc09iaikge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHByb3BlcnRpZXNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgdmFyIHByb3BzTWFwID0gT2JqZWN0LmVudHJpZXMocHJvcHNPYmopLmZpbHRlcihmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAga2V5ID0gX3JlZjJbMF07XG4gICAgcmV0dXJuICFwcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSk7XG4gIH0pO1xuICByZXR1cm4gcHJvcHNNYXAucmVkdWNlKGZ1bmN0aW9uIChuZXdQcm9wcywgX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBrZXkgPSBfcmVmNFswXSxcbiAgICAgIHZhbCA9IF9yZWY0WzFdO1xuICAgIG5ld1Byb3BzW2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIG5ld1Byb3BzO1xuICB9LCB7fSk7XG59O1xuXG52YXIgX2V4Y2x1ZGVkJDMgPSBbXCJjaGlsZHJlblwiLCBcImlubmVyUHJvcHNcIl0sXG4gIF9leGNsdWRlZDIkMSA9IFtcImNoaWxkcmVuXCIsIFwiaW5uZXJQcm9wc1wiXTtcbmZ1bmN0aW9uIGdldE1lbnVQbGFjZW1lbnQoX3JlZikge1xuICB2YXIgcHJlZmVycmVkTWF4SGVpZ2h0ID0gX3JlZi5tYXhIZWlnaHQsXG4gICAgbWVudUVsID0gX3JlZi5tZW51RWwsXG4gICAgbWluSGVpZ2h0ID0gX3JlZi5taW5IZWlnaHQsXG4gICAgcHJlZmVycmVkUGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQsXG4gICAgc2hvdWxkU2Nyb2xsID0gX3JlZi5zaG91bGRTY3JvbGwsXG4gICAgaXNGaXhlZFBvc2l0aW9uID0gX3JlZi5pc0ZpeGVkUG9zaXRpb24sXG4gICAgY29udHJvbEhlaWdodCA9IF9yZWYuY29udHJvbEhlaWdodDtcbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChtZW51RWwpO1xuICB2YXIgZGVmYXVsdFN0YXRlID0ge1xuICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgfTtcblxuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZywgcmV0dXJuIGRlZmF1bHQgc3RhdGVcbiAgaWYgKCFtZW51RWwgfHwgIW1lbnVFbC5vZmZzZXRQYXJlbnQpIHJldHVybiBkZWZhdWx0U3RhdGU7XG5cbiAgLy8gd2UgY2FuJ3QgdHJ1c3QgYHNjcm9sbFBhcmVudC5zY3JvbGxIZWlnaHRgIC0tPiBpdCBtYXkgaW5jcmVhc2Ugd2hlblxuICAvLyB0aGUgbWVudSBpcyByZW5kZXJlZFxuICB2YXIgX3Njcm9sbFBhcmVudCRnZXRCb3VuID0gc2Nyb2xsUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIHNjcm9sbEhlaWdodCA9IF9zY3JvbGxQYXJlbnQkZ2V0Qm91bi5oZWlnaHQ7XG4gIHZhciBfbWVudUVsJGdldEJvdW5kaW5nQ2wgPSBtZW51RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgbWVudUJvdHRvbSA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5ib3R0b20sXG4gICAgbWVudUhlaWdodCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5oZWlnaHQsXG4gICAgbWVudVRvcCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC50b3A7XG4gIHZhciBfbWVudUVsJG9mZnNldFBhcmVudCQgPSBtZW51RWwub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIGNvbnRhaW5lclRvcCA9IF9tZW51RWwkb2Zmc2V0UGFyZW50JC50b3A7XG4gIHZhciB2aWV3SGVpZ2h0ID0gaXNGaXhlZFBvc2l0aW9uID8gd2luZG93LmlubmVySGVpZ2h0IDogbm9ybWFsaXplZEhlaWdodChzY3JvbGxQYXJlbnQpO1xuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsVG9wKHNjcm9sbFBhcmVudCk7XG4gIHZhciBtYXJnaW5Cb3R0b20gPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luQm90dG9tLCAxMCk7XG4gIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luVG9wLCAxMCk7XG4gIHZhciB2aWV3U3BhY2VBYm92ZSA9IGNvbnRhaW5lclRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHZpZXdTcGFjZUJlbG93ID0gdmlld0hlaWdodCAtIG1lbnVUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUFib3ZlID0gdmlld1NwYWNlQWJvdmUgKyBzY3JvbGxUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUJlbG93ID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbERvd24gPSBtZW51Qm90dG9tIC0gdmlld0hlaWdodCArIHNjcm9sbFRvcCArIG1hcmdpbkJvdHRvbTtcbiAgdmFyIHNjcm9sbFVwID0gc2Nyb2xsVG9wICsgbWVudVRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHNjcm9sbER1cmF0aW9uID0gMTYwO1xuICBzd2l0Y2ggKHByZWZlcnJlZFBsYWNlbWVudCkge1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAvLyAxOiB0aGUgbWVudSB3aWxsIGZpdCwgZG8gbm90aGluZ1xuICAgICAgaWYgKHZpZXdTcGFjZUJlbG93ID49IG1lbnVIZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDI6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBzY3JvbGxlZFxuICAgICAgaWYgKHNjcm9sbFNwYWNlQmVsb3cgPj0gbWVudUhlaWdodCAmJiAhaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBhbmltYXRlZFNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93biwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQmVsb3cgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuICAgICAgICB2YXIgY29uc3RyYWluZWRIZWlnaHQgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbSA6IHNjcm9sbFNwYWNlQmVsb3cgLSBtYXJnaW5Cb3R0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IGNvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIEZvcmtlZCBiZXZpb3VyIHdoZW4gdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIGJlbG93XG5cbiAgICAgIC8vIEFVVE86IGZsaXAgdGhlIG1lbnUsIHJlbmRlciBhYm92ZVxuICAgICAgaWYgKHByZWZlcnJlZFBsYWNlbWVudCA9PT0gJ2F1dG8nIHx8IGlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAvLyBtYXkgbmVlZCB0byBiZSBjb25zdHJhaW5lZCBhZnRlciBmbGlwcGluZ1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gcHJlZmVycmVkTWF4SGVpZ2h0O1xuICAgICAgICB2YXIgc3BhY2VBYm92ZSA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIDogc2Nyb2xsU3BhY2VBYm92ZTtcbiAgICAgICAgaWYgKHNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gTWF0aC5taW4oc3BhY2VBYm92ZSAtIG1hcmdpbkJvdHRvbSAtIGNvbnRyb2xIZWlnaHQsIHByZWZlcnJlZE1heEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEJPVFRPTTogYWxsb3cgYnJvd3NlciB0byBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgYW5kIGltbWVkaWF0ZWx5IHNldCBzY3JvbGxcbiAgICAgIGlmIChwcmVmZXJyZWRQbGFjZW1lbnQgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQWJvdmUgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgdmFyIF9jb25zdHJhaW5lZEhlaWdodDIgPSBwcmVmZXJyZWRNYXhIZWlnaHQ7XG5cbiAgICAgICAgLy8gd2Ugd2FudCB0byBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUgdG8gdGhlIHVzZXIsXG4gICAgICAgIC8vIHNvIGdpdmUgdGhlbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgYmVsb3cgcmF0aGVyIHRoYW4gdGhlIG1pbkhlaWdodC5cbiAgICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICAgIF9jb25zdHJhaW5lZEhlaWdodDIgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VBYm92ZSAtIG1hcmdpblRvcCA6IHNjcm9sbFNwYWNlQWJvdmUgLSBtYXJnaW5Ub3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IF9jb25zdHJhaW5lZEhlaWdodDJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gbm90IGVub3VnaCBzcGFjZSwgdGhlIGJyb3dzZXIgV0lMTCBOT1QgaW5jcmVhc2Ugc2Nyb2xsYWJsZSBhcmVhIHdoZW5cbiAgICAgIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IHJlbmRlcmVkIGFib3ZlIHRoZSB2aWV3cG9ydCAob25seSBiZWxvdykuXG4gICAgICAvLyBGbGlwIHRoZSBtZW51LCByZW5kZXIgYmVsb3dcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBsYWNlbWVudCBwcm92aWRlZCBcXFwiXCIuY29uY2F0KHByZWZlcnJlZFBsYWNlbWVudCwgXCJcXFwiLlwiKSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcbn1cblxuLy8gTWVudSBDb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpIHtcbiAgdmFyIHBsYWNlbWVudFRvQ1NTUHJvcCA9IHtcbiAgICBib3R0b206ICd0b3AnLFxuICAgIHRvcDogJ2JvdHRvbSdcbiAgfTtcbiAgcmV0dXJuIHBsYWNlbWVudCA/IHBsYWNlbWVudFRvQ1NTUHJvcFtwbGFjZW1lbnRdIDogJ2JvdHRvbSc7XG59XG52YXIgY29lcmNlUGxhY2VtZW50ID0gZnVuY3Rpb24gY29lcmNlUGxhY2VtZW50KHApIHtcbiAgcmV0dXJuIHAgPT09ICdhdXRvJyA/ICdib3R0b20nIDogcDtcbn07XG52YXIgbWVudUNTUyA9IGZ1bmN0aW9uIG1lbnVDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfb2JqZWN0U3ByZWFkMjtcbiAgdmFyIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYyJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKChfb2JqZWN0U3ByZWFkMiA9IHtcbiAgICBsYWJlbDogJ21lbnUnXG4gIH0sIF9kZWZpbmVQcm9wZXJ0eShfb2JqZWN0U3ByZWFkMiwgYWxpZ25Ub0NvbnRyb2wocGxhY2VtZW50KSwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInBvc2l0aW9uXCIsICdhYnNvbHV0ZScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwid2lkdGhcIiwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInpJbmRleFwiLCAxKSwgX29iamVjdFNwcmVhZDIpLCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICAgIGJveFNoYWRvdzogJzAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKScsXG4gICAgbWFyZ2luQm90dG9tOiBzcGFjaW5nLm1lbnVHdXR0ZXIsXG4gICAgbWFyZ2luVG9wOiBzcGFjaW5nLm1lbnVHdXR0ZXJcbiAgfSk7XG59O1xudmFyIFBvcnRhbFBsYWNlbWVudENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChudWxsKTtcblxuLy8gTk9URTogaW50ZXJuYWwgb25seVxudmFyIE1lbnVQbGFjZXIgPSBmdW5jdGlvbiBNZW51UGxhY2VyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG1pbk1lbnVIZWlnaHQgPSBwcm9wcy5taW5NZW51SGVpZ2h0LFxuICAgIG1heE1lbnVIZWlnaHQgPSBwcm9wcy5tYXhNZW51SGVpZ2h0LFxuICAgIG1lbnVQbGFjZW1lbnQgPSBwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgIG1lbnVQb3NpdGlvbiA9IHByb3BzLm1lbnVQb3NpdGlvbixcbiAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBwcm9wcy5tZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcsXG4gICAgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgdmFyIF9yZWYzID0gdXNlQ29udGV4dChQb3J0YWxQbGFjZW1lbnRDb250ZXh0KSB8fCB7fSxcbiAgICBzZXRQb3J0YWxQbGFjZW1lbnQgPSBfcmVmMy5zZXRQb3J0YWxQbGFjZW1lbnQ7XG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShtYXhNZW51SGVpZ2h0KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBtYXhIZWlnaHQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE1heEhlaWdodCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHBsYWNlbWVudCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGxhY2VtZW50ID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGNvbnRyb2xIZWlnaHQgPSB0aGVtZS5zcGFjaW5nLmNvbnRyb2xIZWlnaHQ7XG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lbnVFbCA9IHJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudUVsKSByZXR1cm47XG5cbiAgICAvLyBETyBOT1Qgc2Nyb2xsIGlmIHBvc2l0aW9uIGlzIGZpeGVkXG4gICAgdmFyIGlzRml4ZWRQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gbWVudVNob3VsZFNjcm9sbEludG9WaWV3ICYmICFpc0ZpeGVkUG9zaXRpb247XG4gICAgdmFyIHN0YXRlID0gZ2V0TWVudVBsYWNlbWVudCh7XG4gICAgICBtYXhIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICBtZW51RWw6IG1lbnVFbCxcbiAgICAgIG1pbkhlaWdodDogbWluTWVudUhlaWdodCxcbiAgICAgIHBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsLFxuICAgICAgaXNGaXhlZFBvc2l0aW9uOiBpc0ZpeGVkUG9zaXRpb24sXG4gICAgICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0XG4gICAgfSk7XG4gICAgc2V0TWF4SGVpZ2h0KHN0YXRlLm1heEhlaWdodCk7XG4gICAgc2V0UGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gICAgc2V0UG9ydGFsUGxhY2VtZW50ID09PSBudWxsIHx8IHNldFBvcnRhbFBsYWNlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2V0UG9ydGFsUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIH0sIFttYXhNZW51SGVpZ2h0LCBtZW51UGxhY2VtZW50LCBtZW51UG9zaXRpb24sIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldywgbWluTWVudUhlaWdodCwgc2V0UG9ydGFsUGxhY2VtZW50LCBjb250cm9sSGVpZ2h0XSk7XG4gIHJldHVybiBjaGlsZHJlbih7XG4gICAgcmVmOiByZWYsXG4gICAgcGxhY2VyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQgfHwgY29lcmNlUGxhY2VtZW50KG1lbnVQbGFjZW1lbnQpLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICB9KVxuICB9KTtcbn07XG52YXIgTWVudSA9IGZ1bmN0aW9uIE1lbnUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnUnLCB7XG4gICAgbWVudTogdHJ1ZVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgTWVudSQxID0gTWVudTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IExpc3Rcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudUxpc3RDU1MgPSBmdW5jdGlvbiBtZW51TGlzdENTUyhfcmVmNCwgdW5zdHlsZWQpIHtcbiAgdmFyIG1heEhlaWdodCA9IF9yZWY0Lm1heEhlaWdodCxcbiAgICBiYXNlVW5pdCA9IF9yZWY0LnRoZW1lLnNwYWNpbmcuYmFzZVVuaXQ7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAvLyByZXF1aXJlZCBmb3Igb2Zmc2V0W0hlaWdodCwgVG9wXSA+IGtleWJvYXJkIHNjcm9sbFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogYmFzZVVuaXQsXG4gICAgcGFkZGluZ1RvcDogYmFzZVVuaXRcbiAgfSk7XG59O1xudmFyIE1lbnVMaXN0ID0gZnVuY3Rpb24gTWVudUxpc3QocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnVMaXN0Jywge1xuICAgICdtZW51LWxpc3QnOiB0cnVlLFxuICAgICdtZW51LWxpc3QtLWlzLW11bHRpJzogaXNNdWx0aVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBOb3RpY2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vdGljZUNTUyA9IGZ1bmN0aW9uIG5vdGljZUNTUyhfcmVmNSwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgIGNvbG9ycyA9IF9yZWY1JHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChiYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChiYXNlVW5pdCAqIDMsIFwicHhcIilcbiAgfSk7XG59O1xudmFyIG5vT3B0aW9uc01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgbG9hZGluZ01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgTm9PcHRpb25zTWVzc2FnZSA9IGZ1bmN0aW9uIE5vT3B0aW9uc01lc3NhZ2UoX3JlZjYpIHtcbiAgdmFyIF9yZWY2JGNoaWxkcmVuID0gX3JlZjYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNiRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ05vIG9wdGlvbnMnIDogX3JlZjYkY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY2LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY2LCBfZXhjbHVkZWQkMyk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzXG4gIH0pLCAnbm9PcHRpb25zTWVzc2FnZScsIHtcbiAgICAnbWVudS1ub3RpY2UnOiB0cnVlLFxuICAgICdtZW51LW5vdGljZS0tbm8tb3B0aW9ucyc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIExvYWRpbmdNZXNzYWdlID0gZnVuY3Rpb24gTG9hZGluZ01lc3NhZ2UoX3JlZjcpIHtcbiAgdmFyIF9yZWY3JGNoaWxkcmVuID0gX3JlZjcuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNyRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ0xvYWRpbmcuLi4nIDogX3JlZjckY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY3LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBfZXhjbHVkZWQyJDEpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wczogaW5uZXJQcm9wc1xuICB9KSwgJ2xvYWRpbmdNZXNzYWdlJywge1xuICAgICdtZW51LW5vdGljZSc6IHRydWUsXG4gICAgJ21lbnUtbm90aWNlLS1sb2FkaW5nJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBQb3J0YWxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudVBvcnRhbENTUyA9IGZ1bmN0aW9uIG1lbnVQb3J0YWxDU1MoX3JlZjgpIHtcbiAgdmFyIHJlY3QgPSBfcmVmOC5yZWN0LFxuICAgIG9mZnNldCA9IF9yZWY4Lm9mZnNldCxcbiAgICBwb3NpdGlvbiA9IF9yZWY4LnBvc2l0aW9uO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgdG9wOiBvZmZzZXQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgekluZGV4OiAxXG4gIH07XG59O1xudmFyIE1lbnVQb3J0YWwgPSBmdW5jdGlvbiBNZW51UG9ydGFsKHByb3BzKSB7XG4gIHZhciBhcHBlbmRUbyA9IHByb3BzLmFwcGVuZFRvLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY29udHJvbEVsZW1lbnQgPSBwcm9wcy5jb250cm9sRWxlbWVudCxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBtZW51UGxhY2VtZW50ID0gcHJvcHMubWVudVBsYWNlbWVudCxcbiAgICBtZW51UG9zaXRpb24gPSBwcm9wcy5tZW51UG9zaXRpb247XG4gIHZhciBtZW51UG9ydGFsUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgY2xlYW51cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCkpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBwbGFjZW1lbnQgPSBfdXNlU3RhdGU2WzBdLFxuICAgIHNldFBvcnRhbFBsYWNlbWVudCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBwb3J0YWxQbGFjZW1lbnRDb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFBvcnRhbFBsYWNlbWVudDogc2V0UG9ydGFsUGxhY2VtZW50XG4gICAgfTtcbiAgfSwgW10pO1xuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICBjb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRDb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb250cm9sRWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRPYmooY29udHJvbEVsZW1lbnQpO1xuICAgIHZhciBzY3JvbGxEaXN0YW5jZSA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IDAgOiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgdmFyIG9mZnNldCA9IHJlY3RbcGxhY2VtZW50XSArIHNjcm9sbERpc3RhbmNlO1xuICAgIGlmIChvZmZzZXQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0KSB8fCByZWN0LmxlZnQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC5sZWZ0KSB8fCByZWN0LndpZHRoICE9PSAoY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGgpKSB7XG4gICAgICBzZXRDb21wdXRlZFBvc2l0aW9uKHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHJlY3Q6IHJlY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRyb2xFbGVtZW50LCBtZW51UG9zaXRpb24sIHBsYWNlbWVudCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLm9mZnNldCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3QubGVmdCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGhdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB1cGRhdGVDb21wdXRlZFBvc2l0aW9uKCk7XG4gIH0sIFt1cGRhdGVDb21wdXRlZFBvc2l0aW9uXSk7XG4gIHZhciBydW5BdXRvVXBkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgY2xlYW51cFJlZi5jdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbGVhbnVwUmVmLmN1cnJlbnQoKTtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChjb250cm9sRWxlbWVudCAmJiBtZW51UG9ydGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IGF1dG9VcGRhdGUoY29udHJvbEVsZW1lbnQsIG1lbnVQb3J0YWxSZWYuY3VycmVudCwgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbiwge1xuICAgICAgICBlbGVtZW50UmVzaXplOiAnUmVzaXplT2JzZXJ2ZXInIGluIHdpbmRvd1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udHJvbEVsZW1lbnQsIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb25dKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBydW5BdXRvVXBkYXRlKCk7XG4gIH0sIFtydW5BdXRvVXBkYXRlXSk7XG4gIHZhciBzZXRNZW51UG9ydGFsRWxlbWVudCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChtZW51UG9ydGFsRWxlbWVudCkge1xuICAgIG1lbnVQb3J0YWxSZWYuY3VycmVudCA9IG1lbnVQb3J0YWxFbGVtZW50O1xuICAgIHJ1bkF1dG9VcGRhdGUoKTtcbiAgfSwgW3J1bkF1dG9VcGRhdGVdKTtcblxuICAvLyBiYWlsIGVhcmx5IGlmIHJlcXVpcmVkIGVsZW1lbnRzIGFyZW4ndCBwcmVzZW50XG4gIGlmICghYXBwZW5kVG8gJiYgbWVudVBvc2l0aW9uICE9PSAnZml4ZWQnIHx8ICFjb21wdXRlZFBvc2l0aW9uKSByZXR1cm4gbnVsbDtcblxuICAvLyBzYW1lIHdyYXBwZXIgZWxlbWVudCB3aGV0aGVyIGZpeGVkIG9yIHBvcnRhbGxlZFxuICB2YXIgbWVudVdyYXBwZXIgPSBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogc2V0TWVudVBvcnRhbEVsZW1lbnRcbiAgfSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBvZmZzZXQ6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0LFxuICAgIHBvc2l0aW9uOiBtZW51UG9zaXRpb24sXG4gICAgcmVjdDogY29tcHV0ZWRQb3NpdGlvbi5yZWN0XG4gIH0pLCAnbWVudVBvcnRhbCcsIHtcbiAgICAnbWVudS1wb3J0YWwnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xuICByZXR1cm4ganN4KFBvcnRhbFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcG9ydGFsUGxhY2VtZW50Q29udGV4dFxuICB9LCBhcHBlbmRUbyA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwobWVudVdyYXBwZXIsIGFwcGVuZFRvKSA6IG1lbnVXcmFwcGVyKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUm9vdCBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY29udGFpbmVyQ1NTID0gZnVuY3Rpb24gY29udGFpbmVyQ1NTKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBfcmVmLmlzUnRsO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnY29udGFpbmVyJyxcbiAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiB1bmRlZmluZWQsXG4gICAgcG9pbnRlckV2ZW50czogaXNEaXNhYmxlZCA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAvLyBjYW5jZWwgbW91c2UgZXZlbnRzIHdoZW4gZGlzYWJsZWRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xufTtcbnZhciBTZWxlY3RDb250YWluZXIgPSBmdW5jdGlvbiBTZWxlY3RDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBwcm9wcy5pc1J0bDtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NvbnRhaW5lcicsIHtcbiAgICAnLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJy0taXMtcnRsJzogaXNSdGxcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZhbHVlIENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciB2YWx1ZUNvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIHZhbHVlQ29udGFpbmVyQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgc3BhY2luZyA9IF9yZWYyLnRoZW1lLnNwYWNpbmcsXG4gICAgaXNNdWx0aSA9IF9yZWYyLmlzTXVsdGksXG4gICAgaGFzVmFsdWUgPSBfcmVmMi5oYXNWYWx1ZSxcbiAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfcmVmMi5zZWxlY3RQcm9wcy5jb250cm9sU2hvdWxkUmVuZGVyVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiBpc011bHRpICYmIGhhc1ZhbHVlICYmIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA/ICdmbGV4JyA6ICdncmlkJyxcbiAgICBmbGV4OiAxLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAvIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweFwiKVxuICB9KTtcbn07XG52YXIgVmFsdWVDb250YWluZXIgPSBmdW5jdGlvbiBWYWx1ZUNvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICBoYXNWYWx1ZSA9IHByb3BzLmhhc1ZhbHVlO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAndmFsdWVDb250YWluZXInLCB7XG4gICAgJ3ZhbHVlLWNvbnRhaW5lcic6IHRydWUsXG4gICAgJ3ZhbHVlLWNvbnRhaW5lci0taXMtbXVsdGknOiBpc011bHRpLFxuICAgICd2YWx1ZS1jb250YWluZXItLWhhcy12YWx1ZSc6IGhhc1ZhbHVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbmRpY2F0b3IgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGluZGljYXRvcnNDb250YWluZXJDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTKCkge1xuICByZXR1cm4ge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH07XG59O1xudmFyIEluZGljYXRvcnNDb250YWluZXIgPSBmdW5jdGlvbiBJbmRpY2F0b3JzQ29udGFpbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yc0NvbnRhaW5lcicsIHtcbiAgICBpbmRpY2F0b3JzOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcbnZhciBfZXhjbHVkZWQkMiA9IFtcInNpemVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpbm5lclByb3BzXCIsIFwiaXNSdGxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjhtbWtjZ1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowXCJcbn0gOiB7XG4gIG5hbWU6IFwidGo1YmRlLVN2Z1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowO2xhYmVsOlN2ZztcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1NTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVmhZM1JPYjJSbElIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRMQ0JyWlhsbWNtRnRaWE1nZlNCbWNtOXRJQ2RBWlcxdmRHbHZiaTl5WldGamRDYzdYRzVjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsTEZ4dUlDQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd3NYRzRnSUVkeWIzVndRbUZ6WlN4Y2JuMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIc2daMlYwVTNSNWJHVlFjbTl3Y3lCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRWxqYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ1UzWm5JRDBnS0h0Y2JpQWdjMmw2WlN4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VNklHNTFiV0psY2lCOUtTQTlQaUFvWEc0Z0lEeHpkbWRjYmlBZ0lDQm9aV2xuYUhROWUzTnBlbVY5WEc0Z0lDQWdkMmxrZEdnOWUzTnBlbVY5WEc0Z0lDQWdkbWxsZDBKdmVEMWNJakFnTUNBeU1DQXlNRndpWEc0Z0lDQWdZWEpwWVMxb2FXUmtaVzQ5WENKMGNuVmxYQ0pjYmlBZ0lDQm1iMk4xYzJGaWJHVTlYQ0ptWVd4elpWd2lYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHWnBiR3c2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdJQ0FnSUhOMGNtOXJaVG9nSjJOMWNuSmxiblJEYjJ4dmNpY3NYRzRnSUNBZ0lDQnpkSEp2YTJWWGFXUjBhRG9nTUN4Y2JpQWdJQ0I5ZlZ4dUlDQWdJSHN1TGk1d2NtOXdjMzFjYmlBZ0x6NWNiaWs3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRU55YjNOelNXTnZibEJ5YjNCeklEMGdTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVDg2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUdOdmJuTjBJRU55YjNOelNXTnZiaUE5SUNod2NtOXdjem9nUTNKdmMzTkpZMjl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0IwZVhCbElFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNZ1BTQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjNOMlp5ZGRJQ1lnZXlCemFYcGxQem9nYm5WdFltVnlJSDA3WEc1bGVIQnZjblFnWTI5dWMzUWdSRzkzYmtOb1pYWnliMjRnUFNBb2NISnZjSE02SUVSdmQyNURhR1YyY205dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVFF1TlRFMklEY3VOVFE0WXpBdU5ETTJMVEF1TkRRMklERXVNRFF6TFRBdU5EZ3hJREV1TlRjMklEQnNNeTQ1TURnZ015NDNORGNnTXk0NU1EZ3RNeTQzTkRkak1DNDFNek10TUM0ME9ERWdNUzR4TkRFdE1DNDBORFlnTVM0MU56UWdNQ0F3TGpRek5pQXdMalEwTlNBd0xqUXdPQ0F4TGpFNU55QXdJREV1TmpFMUxUQXVOREEySURBdU5ERTRMVFF1TmprMUlEUXVOVEF5TFRRdU5qazFJRFF1TlRBeUxUQXVNakUzSURBdU1qSXpMVEF1TlRBeUlEQXVNek0xTFRBdU56ZzNJREF1TXpNMWN5MHdMalUzTFRBdU1URXlMVEF1TnpnNUxUQXVNek0xWXpBZ01DMDBMakk0TnkwMExqQTROQzAwTGpZNU5TMDBMalV3TW5NdE1DNDBNell0TVM0eE55QXdMVEV1TmpFMWVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVKMWRIUnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThYRzRnSUU5d2RHbHZiaUE5SUhWdWEyNXZkMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1SUQwZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGlBOUlFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtJR1Y0ZEdWdVpITWdRMjl0Ylc5dVVISnZjSE5CYm1SRGJHRnpjMDVoYldVOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRnZTF4dUlDQXZLaW9nVkdobElHTm9hV3hrY21WdUlIUnZJR0psSUhKbGJtUmxjbVZrSUdsdWMybGtaU0IwYUdVZ2FXNWthV05oZEc5eUxpQXFMMXh1SUNCamFHbHNaSEpsYmo4NklGSmxZV04wVG05a1pUdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWpiMjV6ZENCaVlYTmxRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUcGNiaUFnSUNCOElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaUFnSUNCOElFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkcGJtUnBZMkYwYjNKRGIyNTBZV2x1WlhJbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUhSeVlXNXphWFJwYjI0NklDZGpiMnh2Y2lBeE5UQnRjeWNzWEc0Z0lDNHVMaWgxYm5OMGVXeGxaRnh1SUNBZ0lEOGdlMzFjYmlBZ0lDQTZJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQWdJQ2M2YUc5MlpYSW5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzT0RBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRRd0xGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHUnliM0JrYjNkdVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVjbTl3Wkc5M2JrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMlJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNka2NtOXdaRzkzYmkxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVSdmQyNURhR1YyY205dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRiR1ZoY2tsdVpHbGpZWFJ2Y2xCeWIzQnpQRnh1SUNCUGNIUnBiMjRnUFNCMWJtdHViM2R1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYmlBOUlHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo0Z1BTQkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaUJsZUhSbGJtUnpJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbFBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErSUh0Y2JpQWdMeW9xSUZSb1pTQmphR2xzWkhKbGJpQjBieUJpWlNCeVpXNWtaWEpsWkNCcGJuTnBaR1VnZEdobElHbHVaR2xqWVhSdmNpNGdLaTljYmlBZ1kyaHBiR1J5Wlc0L09pQlNaV0ZqZEU1dlpHVTdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1Wlhod2IzSjBJR052Ym5OMElHTnNaV0Z5U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRGJHVmhja2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMk5zWldGeVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RqYkdWaGNpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFTnliM056U1dOdmJpQXZQbjFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVMeThnVTJWd1lYSmhkRzl5WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJR2x6UkdsellXSnNaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVc1dVpYSlFjbTl3Y3o4NklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNCaGJpZGRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5FYVhOaFlteGxaQ3hjYmlBZ0lDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUNBZ2MzQmhZMmx1WnpvZ2V5QmlZWE5sVlc1cGRDQjlMRnh1SUNBZ0lDQWdZMjlzYjNKekxGeHVJQ0FnSUgwc1hHNGdJSDA2SUVsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0xGeHVJQ0IxYm5OMGVXeGxaRG9nWW05dmJHVmhibHh1S1RvZ1ExTlRUMkpxWldOMFYybDBhRXhoWW1Wc0lEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5eGNiaUFnWVd4cFoyNVRaV3htT2lBbmMzUnlaWFJqYUNjc1hHNGdJSGRwWkhSb09pQXhMRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dhWE5FYVhOaFlteGxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNNVEFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCdFlYSm5hVzVDYjNSMGIyMDZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ2JXRnlaMmx1Vkc5d09pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCd2NtOXdjem9nU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLSEJ5YjNCekxDQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNBbmFXNWthV05oZEc5eUxYTmxjR0Z5WVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lITnBlbVVzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0FnSUhOd1lXTnBibWM2SUhzZ1ltRnpaVlZ1YVhRZ2ZTeGNiaUFnSUNCOUxGeHVJQ0I5T2lCTWIyRmthVzVuU1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkc2IyRmthVzVuU1c1a2FXTmhkRzl5Snl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0IwY21GdWMybDBhVzl1T2lBblkyOXNiM0lnTVRVd2JYTW5MRnh1SUNCaGJHbG5ibE5sYkdZNklDZGpaVzUwWlhJbkxGeHVJQ0JtYjI1MFUybDZaVG9nYzJsNlpTeGNiaUFnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnYldGeVoybHVVbWxuYUhRNklITnBlbVVzWEc0Z0lIUmxlSFJCYkdsbmJqb2dKMk5sYm5SbGNpY3NYRzRnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2R0YVdSa2JHVW5MRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR052Ykc5eU9pQnBjMFp2WTNWelpXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJEWXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ0lDQWdJQ0FnY0dGa1pHbHVaem9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEViM1JRY205d2N5QjdYRzRnSUdSbGJHRjVPaUJ1ZFcxaVpYSTdYRzRnSUc5bVpuTmxkRG9nWW05dmJHVmhianRjYm4xY2JtTnZibk4wSUV4dllXUnBibWRFYjNRZ1BTQW9leUJrWld4aGVTd2diMlptYzJWMElIMDZJRXh2WVdScGJtZEViM1JRY205d2N5a2dQVDRnS0Z4dUlDQThjM0JoYmx4dUlDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dU9pQmdKSHRzYjJGa2FXNW5SRzkwUVc1cGJXRjBhVzl1YzMwZ01YTWdaV0Z6WlMxcGJpMXZkWFFnSkh0a1pXeGhlWDF0Y3lCcGJtWnBibWwwWlR0Z0xGeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6RmxiU2NzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHMWhjbWRwYmt4bFpuUTZJRzltWm5ObGRDQS9JQ2N4WlcwbklEb2dkVzVrWldacGJtVmtMRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NV1Z0Snl4Y2JpQWdJQ0FnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2QwYjNBbkxGeHVJQ0FnSUNBZ2QybGtkR2c2SUNjeFpXMG5MRnh1SUNBZ0lIMTlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhORWFYTmhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdMeW9xSUZObGRDQnphWHBsSUc5bUlIUm9aU0JqYjI1MFlXbHVaWEl1SUNvdlhHNGdJSE5wZW1VNklHNTFiV0psY2p0Y2JuMWNibVY0Y0c5eWRDQmpiMjV6ZENCTWIyRmthVzVuU1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0h0Y2JpQWdhVzV1WlhKUWNtOXdjeXhjYmlBZ2FYTlNkR3dzWEc0Z0lITnBlbVVnUFNBMExGeHVJQ0F1TGk1eVpYTjBVSEp2Y0hOY2JuMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaWtnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0I3SUM0dUxuSmxjM1JRY205d2N5d2dhVzV1WlhKUWNtOXdjeXdnYVhOU2RHd3NJSE5wZW1VZ2ZTeGNiaUFnSUNBZ0lDQWdKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXNWthV05oZEc5eU9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNBZ0lDZHNiMkZrYVc1bkxXbHVaR2xqWVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCa1pXeGhlVDE3TUgwZ2IyWm1jMlYwUFh0cGMxSjBiSDBnTHo1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHUmxiR0Y1UFhzeE5qQjlJRzltWm5ObGRDQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllek15TUgwZ2IyWm1jMlYwUFhzaGFYTlNkR3g5SUM4K1hHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1SWwxOSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgU3ZnID0gZnVuY3Rpb24gU3ZnKF9yZWYpIHtcbiAgdmFyIHNpemUgPSBfcmVmLnNpemUsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkJDIpO1xuICByZXR1cm4ganN4KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjAgMjBcIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIGNzczogX3JlZjJcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgQ3Jvc3NJY29uID0gZnVuY3Rpb24gQ3Jvc3NJY29uKHByb3BzKSB7XG4gIHJldHVybiBqc3goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogMjBcbiAgfSwgcHJvcHMpLCBqc3goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4zNDggMTQuODQ5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwbC0yLjY1MS0zLjAzMC0yLjY1MSAzLjAyOWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMC0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOSAwLTEuNjk3bDIuNzU4LTMuMTUtMi43NTktMy4xNTJjLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI4IDAtMS42OTdzMS4yMjgtMC40NjkgMS42OTcgMGwyLjY1MiAzLjAzMSAyLjY1MS0zLjAzMWMwLjQ2OS0wLjQ2OSAxLjIyOC0wLjQ2OSAxLjY5NyAwczAuNDY5IDEuMjI5IDAgMS42OTdsLTIuNzU4IDMuMTUyIDIuNzU4IDMuMTVjMC40NjkgMC40NjkgMC40NjkgMS4yMjkgMCAxLjY5OHpcIlxuICB9KSk7XG59O1xudmFyIERvd25DaGV2cm9uID0gZnVuY3Rpb24gRG93bkNoZXZyb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiXG4gIH0pKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGJhc2VDU1MgPSBmdW5jdGlvbiBiYXNlQ1NTKF9yZWYzLCB1bnN0eWxlZCkge1xuICB2YXIgaXNGb2N1c2VkID0gX3JlZjMuaXNGb2N1c2VkLFxuICAgIF9yZWYzJHRoZW1lID0gX3JlZjMudGhlbWUsXG4gICAgYmFzZVVuaXQgPSBfcmVmMyR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgJzpob3Zlcic6IHtcbiAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MFxuICAgIH1cbiAgfSk7XG59O1xudmFyIGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbnZhciBEcm9wZG93bkluZGljYXRvciA9IGZ1bmN0aW9uIERyb3Bkb3duSW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnZHJvcGRvd25JbmRpY2F0b3InLCB7XG4gICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4gfHwganN4KERvd25DaGV2cm9uLCBudWxsKSk7XG59O1xudmFyIGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbnZhciBDbGVhckluZGljYXRvciA9IGZ1bmN0aW9uIENsZWFySW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY2xlYXJJbmRpY2F0b3InLCB7XG4gICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4gfHwganN4KENyb3NzSWNvbiwgbnVsbCkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gZnVuY3Rpb24gaW5kaWNhdG9yU2VwYXJhdG9yQ1NTKF9yZWY0LCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWY0LmlzRGlzYWJsZWQsXG4gICAgX3JlZjQkdGhlbWUgPSBfcmVmNC50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWY0JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjQkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JTZXBhcmF0b3InLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIHdpZHRoOiAxXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDJcbiAgfSk7XG59O1xudmFyIEluZGljYXRvclNlcGFyYXRvciA9IGZ1bmN0aW9uIEluZGljYXRvclNlcGFyYXRvcihwcm9wcykge1xuICB2YXIgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBpbm5lclByb3BzLCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICdpbmRpY2F0b3Itc2VwYXJhdG9yJzogdHJ1ZVxuICB9KSkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGxvYWRpbmdEb3RBbmltYXRpb25zID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XFxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XFxuXCJdKSkpO1xudmFyIGxvYWRpbmdJbmRpY2F0b3JDU1MgPSBmdW5jdGlvbiBsb2FkaW5nSW5kaWNhdG9yQ1NTKF9yZWY1LCB1bnN0eWxlZCkge1xuICB2YXIgaXNGb2N1c2VkID0gX3JlZjUuaXNGb2N1c2VkLFxuICAgIHNpemUgPSBfcmVmNS5zaXplLFxuICAgIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgY29sb3JzID0gX3JlZjUkdGhlbWUuY29sb3JzLFxuICAgIGJhc2VVbml0ID0gX3JlZjUkdGhlbWUuc3BhY2luZy5iYXNlVW5pdDtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnbG9hZGluZ0luZGljYXRvcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogc2l6ZSxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIG1hcmdpblJpZ2h0OiBzaXplLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgcGFkZGluZzogYmFzZVVuaXQgKiAyXG4gIH0pO1xufTtcbnZhciBMb2FkaW5nRG90ID0gZnVuY3Rpb24gTG9hZGluZ0RvdChfcmVmNikge1xuICB2YXIgZGVsYXkgPSBfcmVmNi5kZWxheSxcbiAgICBvZmZzZXQgPSBfcmVmNi5vZmZzZXQ7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9jc3MkMih7XG4gICAgICBhbmltYXRpb246IFwiXCIuY29uY2F0KGxvYWRpbmdEb3RBbmltYXRpb25zLCBcIiAxcyBlYXNlLWluLW91dCBcIikuY29uY2F0KGRlbGF5LCBcIm1zIGluZmluaXRlO1wiKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxZW0nLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtJyA6IHVuZGVmaW5lZCxcbiAgICAgIGhlaWdodDogJzFlbScsXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJyxcbiAgICAgIHdpZHRoOiAnMWVtJ1xuICAgIH0sIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpMb2FkaW5nRG90O1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WkdsallYUnZjbk11ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXMVJTU0lzSW1acGJHVWlPaUpwYm1ScFkyRjBiM0p6TG5SemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2lCQWFuTjRJR3B6ZUNBcUwxeHVhVzF3YjNKMElIc2dVbVZoWTNST2IyUmxJSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dhbk40TENCclpYbG1jbUZ0WlhNZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1Y2JtbHRjRzl5ZENCN1hHNGdJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbExGeHVJQ0JEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dzWEc0Z0lFZHliM1Z3UW1GelpTeGNibjBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHNnWjJWMFUzUjViR1ZRY205d2N5QjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVsamIyNXpYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdVM1puSUQwZ0tIdGNiaUFnYzJsNlpTeGNiaUFnTGk0dWNISnZjSE5jYm4wNklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNabkoxMGdKaUI3SUhOcGVtVTZJRzUxYldKbGNpQjlLU0E5UGlBb1hHNGdJRHh6ZG1kY2JpQWdJQ0JvWldsbmFIUTllM05wZW1WOVhHNGdJQ0FnZDJsa2RHZzllM05wZW1WOVhHNGdJQ0FnZG1sbGQwSnZlRDFjSWpBZ01DQXlNQ0F5TUZ3aVhHNGdJQ0FnWVhKcFlTMW9hV1JrWlc0OVhDSjBjblZsWENKY2JpQWdJQ0JtYjJOMWMyRmliR1U5WENKbVlXeHpaVndpWEc0Z0lDQWdZM056UFh0N1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmFXNXNhVzVsTFdKc2IyTnJKeXhjYmlBZ0lDQWdJR1pwYkd3NklDZGpkWEp5Wlc1MFEyOXNiM0luTEZ4dUlDQWdJQ0FnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnSUNBZ0lITjBjbTlyWlRvZ0oyTjFjbkpsYm5SRGIyeHZjaWNzWEc0Z0lDQWdJQ0J6ZEhKdmEyVlhhV1IwYURvZ01DeGNiaUFnSUNCOWZWeHVJQ0FnSUhzdUxpNXdjbTl3YzMxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUVOeWIzTnpTV052YmxCeWIzQnpJRDBnU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpkbWNuWFNBbUlIc2djMmw2WlQ4NklHNTFiV0psY2lCOU8xeHVaWGh3YjNKMElHTnZibk4wSUVOeWIzTnpTV052YmlBOUlDaHdjbTl3Y3pvZ1EzSnZjM05KWTI5dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVEUwTGpNME9DQXhOQzQ0TkRsakxUQXVORFk1SURBdU5EWTVMVEV1TWpJNUlEQXVORFk1TFRFdU5qazNJREJzTFRJdU5qVXhMVE11TURNd0xUSXVOalV4SURNdU1ESTVZeTB3TGpRMk9TQXdMalEyT1MweExqSXlPU0F3TGpRMk9TMHhMalk1TnlBd0xUQXVORFk1TFRBdU5EWTVMVEF1TkRZNUxURXVNakk1SURBdE1TNDJPVGRzTWk0M05UZ3RNeTR4TlMweUxqYzFPUzB6TGpFMU1tTXRNQzQwTmprdE1DNDBOamt0TUM0ME5qa3RNUzR5TWpnZ01DMHhMalk1TjNNeExqSXlPQzB3TGpRMk9TQXhMalk1TnlBd2JESXVOalV5SURNdU1ETXhJREl1TmpVeExUTXVNRE14WXpBdU5EWTVMVEF1TkRZNUlERXVNakk0TFRBdU5EWTVJREV1TmprM0lEQnpNQzQwTmprZ01TNHlNamtnTUNBeExqWTVOMnd0TWk0M05UZ2dNeTR4TlRJZ01pNDNOVGdnTXk0eE5XTXdMalEyT1NBd0xqUTJPU0F3TGpRMk9TQXhMakl5T1NBd0lERXVOams0ZWx3aUlDOCtYRzRnSUR3dlUzWm5QbHh1S1R0Y2JtVjRjRzl5ZENCMGVYQmxJRVJ2ZDI1RGFHVjJjbTl1VUhKdmNITWdQU0JLVTFndVNXNTBjbWx1YzJsalJXeGxiV1Z1ZEhOYkozTjJaeWRkSUNZZ2V5QnphWHBsUHpvZ2JuVnRZbVZ5SUgwN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnUkc5M2JrTm9aWFp5YjI0Z1BTQW9jSEp2Y0hNNklFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNcElEMCtJQ2hjYmlBZ1BGTjJaeUJ6YVhwbFBYc3lNSDBnZXk0dUxuQnliM0J6ZlQ1Y2JpQWdJQ0E4Y0dGMGFDQmtQVndpVFRRdU5URTJJRGN1TlRRNFl6QXVORE0yTFRBdU5EUTJJREV1TURRekxUQXVORGd4SURFdU5UYzJJREJzTXk0NU1EZ2dNeTQzTkRjZ015NDVNRGd0TXk0M05EZGpNQzQxTXpNdE1DNDBPREVnTVM0eE5ERXRNQzQwTkRZZ01TNDFOelFnTUNBd0xqUXpOaUF3TGpRME5TQXdMalF3T0NBeExqRTVOeUF3SURFdU5qRTFMVEF1TkRBMklEQXVOREU0TFRRdU5qazFJRFF1TlRBeUxUUXVOamsxSURRdU5UQXlMVEF1TWpFM0lEQXVNakl6TFRBdU5UQXlJREF1TXpNMUxUQXVOemczSURBdU16TTFjeTB3TGpVM0xUQXVNVEV5TFRBdU56ZzVMVEF1TXpNMVl6QWdNQzAwTGpJNE55MDBMakE0TkMwMExqWTVOUzAwTGpVd01uTXRNQzQwTXpZdE1TNHhOeUF3TFRFdU5qRTFlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QkVjbTl3Wkc5M2JpQW1JRU5zWldGeUlFSjFkSFJ2Ym5OY2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04WEc0Z0lFOXdkR2x2YmlBOUlIVnVhMjV2ZDI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUlEMGdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBpQTlJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrSUdWNGRHVnVaSE1nUTI5dGJXOXVVSEp2Y0hOQmJtUkRiR0Z6YzA1aGJXVThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0Z2UxeHVJQ0F2S2lvZ1ZHaGxJR05vYVd4a2NtVnVJSFJ2SUdKbElISmxibVJsY21Wa0lHbHVjMmxrWlNCMGFHVWdhVzVrYVdOaGRHOXlMaUFxTDF4dUlDQmphR2xzWkhKbGJqODZJRkpsWVdOMFRtOWtaVHRjYmlBZ0x5b3FJRkJ5YjNCeklIUm9ZWFFnZDJsc2JDQmlaU0J3WVhOelpXUWdiMjRnZEc4Z2RHaGxJR05vYVd4a2NtVnVMaUFxTDF4dUlDQnBibTVsY2xCeWIzQnpPaUJLVTFndVNXNTBjbWx1YzJsalJXeGxiV1Z1ZEhOYkoyUnBkaWRkTzF4dUlDQXZLaW9nVkdobElHWnZZM1Z6WldRZ2MzUmhkR1VnYjJZZ2RHaGxJSE5sYkdWamRDNGdLaTljYmlBZ2FYTkdiMk4xYzJWa09pQmliMjlzWldGdU8xeHVJQ0JwYzBScGMyRmliR1ZrT2lCaWIyOXNaV0Z1TzF4dWZWeHVYRzVqYjI1emRDQmlZWE5sUTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lIUm9aVzFsT2lCN1hHNGdJQ0FnSUNCemNHRmphVzVuT2lCN0lHSmhjMlZWYm1sMElIMHNYRzRnSUNBZ0lDQmpiMnh2Y25Nc1hHNGdJQ0FnZlN4Y2JpQWdmVHBjYmlBZ0lDQjhJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlBZ0lDQjhJRU5zWldGeVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENHNYRzRnSUhWdWMzUjViR1ZrT2lCaWIyOXNaV0Z1WEc0cE9pQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd2dQVDRnS0h0Y2JpQWdiR0ZpWld3NklDZHBibVJwWTJGMGIzSkRiMjUwWVdsdVpYSW5MRnh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lIUnlZVzV6YVhScGIyNDZJQ2RqYjJ4dmNpQXhOVEJ0Y3ljc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTmpBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQndZV1JrYVc1bk9pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0FnSUNjNmFHOTJaWEluT2lCN1hHNGdJQ0FnSUNBZ0lDQWdZMjlzYjNJNklHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc09EQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJEUXdMRnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZlNrc1hHNTlLVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1J5YjNCa2IzZHVTVzVrYVdOaGRHOXlRMU5USUQwZ1ltRnpaVU5UVXp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JFY205d1pHOTNia2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQnBibTVsY2xCeWIzQnpJSDBnUFNCd2NtOXdjenRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4WkdsMlhHNGdJQ0FnSUNCN0xpNHVaMlYwVTNSNWJHVlFjbTl3Y3lod2NtOXdjeXdnSjJSeWIzQmtiM2R1U1c1a2FXTmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDZGtjbTl3Wkc5M2JpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFUnZkMjVEYUdWMmNtOXVJQzgrZlZ4dUlDQWdJRHd2WkdsMlBseHVJQ0FwTzF4dWZUdGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEYkdWaGNrbHVaR2xqWVhSdmNsQnliM0J6UEZ4dUlDQlBjSFJwYjI0Z1BTQjFibXR1YjNkdUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpQTlJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNGdQU0JIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGlCbGVIUmxibVJ6SUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0lIdGNiaUFnTHlvcUlGUm9aU0JqYUdsc1pISmxiaUIwYnlCaVpTQnlaVzVrWlhKbFpDQnBibk5wWkdVZ2RHaGxJR2x1WkdsallYUnZjaTRnS2k5Y2JpQWdZMmhwYkdSeVpXNC9PaUJTWldGamRFNXZaR1U3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJR05zWldGeVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkRiR1ZoY2tsdVpHbGpZWFJ2Y2lBOUlEeGNiaUFnVDNCMGFXOXVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGloY2JpQWdjSEp2Y0hNNklFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQnBibTVsY2xCeWIzQnpJSDBnUFNCd2NtOXdjenRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4WkdsMlhHNGdJQ0FnSUNCN0xpNHVaMlYwVTNSNWJHVlFjbTl3Y3lod2NtOXdjeXdnSjJOc1pXRnlTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNkamJHVmhjaTFwYm1ScFkyRjBiM0luT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNCN1kyaHBiR1J5Wlc0Z2ZId2dQRU55YjNOelNXTnZiaUF2UG4xY2JpQWdJQ0E4TDJScGRqNWNiaUFnS1R0Y2JuMDdYRzVjYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1THk4Z1UyVndZWEpoZEc5eVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkpibVJwWTJGMGIzSlRaWEJoY21GMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUdselJHbHpZV0pzWldRNklHSnZiMnhsWVc0N1hHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYmlBZ2FXNXVaWEpRY205d2N6ODZJRXBUV0M1SmJuUnlhVzV6YVdORmJHVnRaVzUwYzFzbmMzQmhiaWRkTzF4dWZWeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FXNWthV05oZEc5eVUyVndZWEpoZEc5eVExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhORWFYTmhZbXhsWkN4Y2JpQWdJQ0IwYUdWdFpUb2dlMXh1SUNBZ0lDQWdjM0JoWTJsdVp6b2dleUJpWVhObFZXNXBkQ0I5TEZ4dUlDQWdJQ0FnWTI5c2IzSnpMRnh1SUNBZ0lIMHNYRzRnSUgwNklFbHVaR2xqWVhSdmNsTmxjR0Z5WVhSdmNsQnliM0J6UEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStMRnh1SUNCMWJuTjBlV3hsWkRvZ1ltOXZiR1ZoYmx4dUtUb2dRMU5UVDJKcVpXTjBWMmwwYUV4aFltVnNJRDArSUNoN1hHNGdJR3hoWW1Wc09pQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXhjYmlBZ1lXeHBaMjVUWld4bU9pQW5jM1J5WlhSamFDY3NYRzRnSUhkcFpIUm9PaUF4TEZ4dUlDQXVMaTRvZFc1emRIbHNaV1JjYmlBZ0lDQS9JSHQ5WEc0Z0lDQWdPaUI3WEc0Z0lDQWdJQ0FnSUdKaFkydG5jbTkxYm1SRGIyeHZjam9nYVhORWFYTmhZbXhsWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTVRBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQnRZWEpuYVc1Q2IzUjBiMjA2SUdKaGMyVlZibWwwSUNvZ01peGNiaUFnSUNBZ0lDQWdiV0Z5WjJsdVZHOXdPaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJQ0FnSUNCOUtTeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQndjbTl3Y3pvZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4emNHRnVYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0FnSUhzdUxpNW5aWFJUZEhsc1pWQnliM0J6S0hCeWIzQnpMQ0FuYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQW5hVzVrYVdOaGRHOXlMWE5sY0dGeVlYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQjlLWDFjYmlBZ0lDQXZQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5Qk1iMkZrYVc1blhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ2JHOWhaR2x1WjBSdmRFRnVhVzFoZEdsdmJuTWdQU0JyWlhsbWNtRnRaWE5nWEc0Z0lEQWxMQ0E0TUNVc0lERXdNQ1VnZXlCdmNHRmphWFI1T2lBd095QjlYRzRnSURRd0pTQjdJRzl3WVdOcGRIazZJREU3SUgxY2JtQTdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnNiMkZrYVc1blNXNWthV05oZEc5eVExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhOR2IyTjFjMlZrTEZ4dUlDQWdJSE5wZW1Vc1hHNGdJQ0FnZEdobGJXVTZJSHRjYmlBZ0lDQWdJR052Ykc5eWN5eGNiaUFnSUNBZ0lITndZV05wYm1jNklIc2dZbUZ6WlZWdWFYUWdmU3hjYmlBZ0lDQjlMRnh1SUNCOU9pQk1iMkZrYVc1blNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENHNYRzRnSUhWdWMzUjViR1ZrT2lCaWIyOXNaV0Z1WEc0cE9pQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd2dQVDRnS0h0Y2JpQWdiR0ZpWld3NklDZHNiMkZrYVc1blNXNWthV05oZEc5eUp5eGNiaUFnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNCMGNtRnVjMmwwYVc5dU9pQW5ZMjlzYjNJZ01UVXdiWE1uTEZ4dUlDQmhiR2xuYmxObGJHWTZJQ2RqWlc1MFpYSW5MRnh1SUNCbWIyNTBVMmw2WlRvZ2MybDZaU3hjYmlBZ2JHbHVaVWhsYVdkb2REb2dNU3hjYmlBZ2JXRnlaMmx1VW1sbmFIUTZJSE5wZW1Vc1hHNGdJSFJsZUhSQmJHbG5iam9nSjJObGJuUmxjaWNzWEc0Z0lIWmxjblJwWTJGc1FXeHBaMjQ2SUNkdGFXUmtiR1VuTEZ4dUlDQXVMaTRvZFc1emRIbHNaV1JjYmlBZ0lDQS9JSHQ5WEc0Z0lDQWdPaUI3WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJwYzBadlkzVnpaV1FnUHlCamIyeHZjbk11Ym1WMWRISmhiRFl3SURvZ1kyOXNiM0p6TG01bGRYUnlZV3d5TUN4Y2JpQWdJQ0FnSUNBZ2NHRmtaR2x1WnpvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1YVc1MFpYSm1ZV05sSUV4dllXUnBibWRFYjNSUWNtOXdjeUI3WEc0Z0lHUmxiR0Y1T2lCdWRXMWlaWEk3WEc0Z0lHOW1abk5sZERvZ1ltOXZiR1ZoYmp0Y2JuMWNibU52Ym5OMElFeHZZV1JwYm1kRWIzUWdQU0FvZXlCa1pXeGhlU3dnYjJabWMyVjBJSDA2SUV4dllXUnBibWRFYjNSUWNtOXdjeWtnUFQ0Z0tGeHVJQ0E4YzNCaGJseHVJQ0FnSUdOemN6MTdlMXh1SUNBZ0lDQWdZVzVwYldGMGFXOXVPaUJnSkh0c2IyRmthVzVuUkc5MFFXNXBiV0YwYVc5dWMzMGdNWE1nWldGelpTMXBiaTF2ZFhRZ0pIdGtaV3hoZVgxdGN5QnBibVpwYm1sMFpUdGdMRnh1SUNBZ0lDQWdZbUZqYTJkeWIzVnVaRU52Ykc5eU9pQW5ZM1Z5Y21WdWRFTnZiRzl5Snl4Y2JpQWdJQ0FnSUdKdmNtUmxjbEpoWkdsMWN6b2dKekZsYlNjc1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmFXNXNhVzVsTFdKc2IyTnJKeXhjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUc5bVpuTmxkQ0EvSUNjeFpXMG5JRG9nZFc1a1pXWnBibVZrTEZ4dUlDQWdJQ0FnYUdWcFoyaDBPaUFuTVdWdEp5eGNiaUFnSUNBZ0lIWmxjblJwWTJGc1FXeHBaMjQ2SUNkMGIzQW5MRnh1SUNBZ0lDQWdkMmxrZEdnNklDY3haVzBuTEZ4dUlDQWdJSDE5WEc0Z0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFeHZZV1JwYm1kSmJtUnBZMkYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWRrYVhZblhUdGNiaUFnTHlvcUlGUm9aU0JtYjJOMWMyVmtJSE4wWVhSbElHOW1JSFJvWlNCelpXeGxZM1F1SUNvdlhHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYmlBZ2FYTkVhWE5oWW14bFpEb2dZbTl2YkdWaGJqdGNiaUFnTHlvcUlGTmxkQ0J6YVhwbElHOW1JSFJvWlNCamIyNTBZV2x1WlhJdUlDb3ZYRzRnSUhOcGVtVTZJRzUxYldKbGNqdGNibjFjYm1WNGNHOXlkQ0JqYjI1emRDQk1iMkZrYVc1blNXNWthV05oZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tIdGNiaUFnYVc1dVpYSlFjbTl3Y3l4Y2JpQWdhWE5TZEd3c1hHNGdJSE5wZW1VZ1BTQTBMRnh1SUNBdUxpNXlaWE4wVUhKdmNITmNibjA2SUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlrZ1BUNGdlMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhaY2JpQWdJQ0FnSUhzdUxpNW5aWFJUZEhsc1pWQnliM0J6S0Z4dUlDQWdJQ0FnSUNCN0lDNHVMbkpsYzNSUWNtOXdjeXdnYVc1dVpYSlFjbTl3Y3l3Z2FYTlNkR3dzSUhOcGVtVWdmU3hjYmlBZ0lDQWdJQ0FnSjJ4dllXUnBibWRKYm1ScFkyRjBiM0luTEZ4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdhVzVrYVdOaGRHOXlPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ2RzYjJGa2FXNW5MV2x1WkdsallYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNBOFRHOWhaR2x1WjBSdmRDQmtaV3hoZVQxN01IMGdiMlptYzJWMFBYdHBjMUowYkgwZ0x6NWNiaUFnSUNBZ0lEeE1iMkZrYVc1blJHOTBJR1JsYkdGNVBYc3hOakI5SUc5bVpuTmxkQ0F2UGx4dUlDQWdJQ0FnUEV4dllXUnBibWRFYjNRZ1pHVnNZWGs5ZXpNeU1IMGdiMlptYzJWMFBYc2hhWE5TZEd4OUlDOCtYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDazdYRzU5TzF4dUlsMTkgKi9cIilcbiAgfSk7XG59O1xudmFyIExvYWRpbmdJbmRpY2F0b3IgPSBmdW5jdGlvbiBMb2FkaW5nSW5kaWNhdG9yKF9yZWY3KSB7XG4gIHZhciBpbm5lclByb3BzID0gX3JlZjcuaW5uZXJQcm9wcyxcbiAgICBpc1J0bCA9IF9yZWY3LmlzUnRsLFxuICAgIF9yZWY3JHNpemUgPSBfcmVmNy5zaXplLFxuICAgIHNpemUgPSBfcmVmNyRzaXplID09PSB2b2lkIDAgPyA0IDogX3JlZjckc2l6ZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjcsIF9leGNsdWRlZDIpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgIGlzUnRsOiBpc1J0bCxcbiAgICBzaXplOiBzaXplXG4gIH0pLCAnbG9hZGluZ0luZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgZGVsYXk6IDAsXG4gICAgb2Zmc2V0OiBpc1J0bFxuICB9KSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMTYwLFxuICAgIG9mZnNldDogdHJ1ZVxuICB9KSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMzIwLFxuICAgIG9mZnNldDogIWlzUnRsXG4gIH0pKTtcbn07XG5cbnZhciBjc3MkMSA9IGZ1bmN0aW9uIGNzcyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdjb250cm9sJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIG1pbkhlaWdodDogc3BhY2luZy5jb250cm9sSGVpZ2h0LFxuICAgIG91dGxpbmU6ICcwICFpbXBvcnRhbnQnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMTAwbXMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWw1IDogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlckNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBib3hTaGFkb3c6IGlzRm9jdXNlZCA/IFwiMCAwIDAgMXB4IFwiLmNvbmNhdChjb2xvcnMucHJpbWFyeSkgOiB1bmRlZmluZWQsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBib3JkZXJDb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMubmV1dHJhbDMwXG4gICAgfVxuICB9KTtcbn07XG52YXIgQ29udHJvbCA9IGZ1bmN0aW9uIENvbnRyb2wocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW47XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NvbnRyb2wnLCB7XG4gICAgY29udHJvbDogdHJ1ZSxcbiAgICAnY29udHJvbC0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdjb250cm9sLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdjb250cm9sLS1tZW51LWlzLW9wZW4nOiBtZW51SXNPcGVuXG4gIH0pLCBpbm5lclByb3BzLCB7XG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IGlzRGlzYWJsZWQgfHwgdW5kZWZpbmVkXG4gIH0pLCBjaGlsZHJlbik7XG59O1xudmFyIENvbnRyb2wkMSA9IENvbnRyb2w7XG5cbnZhciBfZXhjbHVkZWQkMSA9IFtcImRhdGFcIl07XG52YXIgZ3JvdXBDU1MgPSBmdW5jdGlvbiBncm91cENTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgc3BhY2luZyA9IF9yZWYudGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogc3BhY2luZy5iYXNlVW5pdCAqIDIsXG4gICAgcGFkZGluZ1RvcDogc3BhY2luZy5iYXNlVW5pdCAqIDJcbiAgfTtcbn07XG52YXIgR3JvdXAgPSBmdW5jdGlvbiBHcm91cChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBjeCA9IHByb3BzLmN4LFxuICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzID0gcHJvcHMuZ2V0Q2xhc3NOYW1lcyxcbiAgICBIZWFkaW5nID0gcHJvcHMuSGVhZGluZyxcbiAgICBoZWFkaW5nUHJvcHMgPSBwcm9wcy5oZWFkaW5nUHJvcHMsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICB0aGVtZSA9IHByb3BzLnRoZW1lLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdncm91cCcsIHtcbiAgICBncm91cDogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGpzeChIZWFkaW5nLCBfZXh0ZW5kcyh7fSwgaGVhZGluZ1Byb3BzLCB7XG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzLFxuICAgIHRoZW1lOiB0aGVtZSxcbiAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzOiBnZXRDbGFzc05hbWVzLFxuICAgIGN4OiBjeFxuICB9KSwgbGFiZWwpLCBqc3goXCJkaXZcIiwgbnVsbCwgY2hpbGRyZW4pKTtcbn07XG52YXIgZ3JvdXBIZWFkaW5nQ1NTID0gZnVuY3Rpb24gZ3JvdXBIZWFkaW5nQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnMsXG4gICAgc3BhY2luZyA9IF9yZWYyJHRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2dyb3VwJyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsNDAsXG4gICAgZm9udFNpemU6ICc3NSUnLFxuICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICBtYXJnaW5Cb3R0b206ICcwLjI1ZW0nLFxuICAgIHBhZGRpbmdMZWZ0OiBzcGFjaW5nLmJhc2VVbml0ICogMyxcbiAgICBwYWRkaW5nUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG4gIH0pO1xufTtcbnZhciBHcm91cEhlYWRpbmcgPSBmdW5jdGlvbiBHcm91cEhlYWRpbmcocHJvcHMpIHtcbiAgdmFyIF9jbGVhbkNvbW1vblByb3BzID0gY2xlYW5Db21tb25Qcm9wcyhwcm9wcyk7XG4gICAgX2NsZWFuQ29tbW9uUHJvcHMuZGF0YTtcbiAgICB2YXIgaW5uZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY2xlYW5Db21tb25Qcm9wcywgX2V4Y2x1ZGVkJDEpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnZ3JvdXBIZWFkaW5nJywge1xuICAgICdncm91cC1oZWFkaW5nJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcykpO1xufTtcbnZhciBHcm91cCQxID0gR3JvdXA7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpbm5lclJlZlwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0hpZGRlblwiLCBcImlucHV0Q2xhc3NOYW1lXCJdO1xudmFyIGlucHV0Q1NTID0gZnVuY3Rpb24gaW5wdXRDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIHZpc2liaWxpdHk6IGlzRGlzYWJsZWQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyxcbiAgICAvLyBmb3JjZSBjc3MgdG8gcmVjb21wdXRlIHdoZW4gdmFsdWUgY2hhbmdlIGR1ZSB0byBAZW1vdGlvbiBidWcuXG4gICAgLy8gV2UgY2FuIHJlbW92ZSBpdCB3aGVuZXZlciB0aGUgYnVnIGlzIGZpeGVkLlxuICAgIHRyYW5zZm9ybTogdmFsdWUgPyAndHJhbnNsYXRlWigwKScgOiAnJ1xuICB9LCBjb250YWluZXJTdHlsZSksIHVuc3R5bGVkID8ge30gOiB7XG4gICAgbWFyZ2luOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBwYWRkaW5nQm90dG9tOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBwYWRkaW5nVG9wOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MFxuICB9KTtcbn07XG52YXIgc3BhY2luZ1N0eWxlID0ge1xuICBncmlkQXJlYTogJzEgLyAyJyxcbiAgZm9udDogJ2luaGVyaXQnLFxuICBtaW5XaWR0aDogJzJweCcsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICBvdXRsaW5lOiAwLFxuICBwYWRkaW5nOiAwXG59O1xudmFyIGNvbnRhaW5lclN0eWxlID0ge1xuICBmbGV4OiAnMSAxIGF1dG8nLFxuICBkaXNwbGF5OiAnaW5saW5lLWdyaWQnLFxuICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMCBtaW4tY29udGVudCcsXG4gICcmOmFmdGVyJzogX29iamVjdFNwcmVhZCh7XG4gICAgY29udGVudDogJ2F0dHIoZGF0YS12YWx1ZSkgXCIgXCInLFxuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gIH0sIHNwYWNpbmdTdHlsZSlcbn07XG52YXIgaW5wdXRTdHlsZSA9IGZ1bmN0aW9uIGlucHV0U3R5bGUoaXNIaWRkZW4pIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnaW5wdXQnLFxuICAgIGNvbG9yOiAnaW5oZXJpdCcsXG4gICAgYmFja2dyb3VuZDogMCxcbiAgICBvcGFjaXR5OiBpc0hpZGRlbiA/IDAgOiAxLFxuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSwgc3BhY2luZ1N0eWxlKTtcbn07XG52YXIgSW5wdXQgPSBmdW5jdGlvbiBJbnB1dChwcm9wcykge1xuICB2YXIgY3ggPSBwcm9wcy5jeCxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICB2YXIgX2NsZWFuQ29tbW9uUHJvcHMgPSBjbGVhbkNvbW1vblByb3BzKHByb3BzKSxcbiAgICBpbm5lclJlZiA9IF9jbGVhbkNvbW1vblByb3BzLmlubmVyUmVmLFxuICAgIGlzRGlzYWJsZWQgPSBfY2xlYW5Db21tb25Qcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzSGlkZGVuID0gX2NsZWFuQ29tbW9uUHJvcHMuaXNIaWRkZW4sXG4gICAgaW5wdXRDbGFzc05hbWUgPSBfY2xlYW5Db21tb25Qcm9wcy5pbnB1dENsYXNzTmFtZSxcbiAgICBpbm5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9jbGVhbkNvbW1vblByb3BzLCBfZXhjbHVkZWQpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5wdXQnLCB7XG4gICAgJ2lucHV0LWNvbnRhaW5lcic6IHRydWVcbiAgfSksIHtcbiAgICBcImRhdGEtdmFsdWVcIjogdmFsdWUgfHwgJydcbiAgfSksIGpzeChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGlucHV0OiB0cnVlXG4gICAgfSwgaW5wdXRDbGFzc05hbWUpLFxuICAgIHJlZjogaW5uZXJSZWYsXG4gICAgc3R5bGU6IGlucHV0U3R5bGUoaXNIaWRkZW4pLFxuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gIH0sIGlubmVyUHJvcHMpKSk7XG59O1xudmFyIElucHV0JDEgPSBJbnB1dDtcblxudmFyIG11bHRpVmFsdWVDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdtdWx0aVZhbHVlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgbWluV2lkdGg6IDBcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5uZXV0cmFsMTAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIG1hcmdpbjogc3BhY2luZy5iYXNlVW5pdCAvIDJcbiAgfSk7XG59O1xudmFyIG11bHRpVmFsdWVMYWJlbENTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVMYWJlbENTUyhfcmVmMiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjIkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycyxcbiAgICBjcm9wV2l0aEVsbGlwc2lzID0gX3JlZjIuY3JvcFdpdGhFbGxpcHNpcztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6IGNyb3BXaXRoRWxsaXBzaXMgfHwgY3JvcFdpdGhFbGxpcHNpcyA9PT0gdW5kZWZpbmVkID8gJ2VsbGlwc2lzJyA6IHVuZGVmaW5lZCxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzIC8gMixcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBmb250U2l6ZTogJzg1JScsXG4gICAgcGFkZGluZzogMyxcbiAgICBwYWRkaW5nTGVmdDogNlxuICB9KTtcbn07XG52YXIgbXVsdGlWYWx1ZVJlbW92ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVSZW1vdmVDU1MoX3JlZjMsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmMyR0aGVtZSA9IF9yZWYzLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmMyR0aGVtZS5zcGFjaW5nLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYzJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBjb2xvcnMgPSBfcmVmMyR0aGVtZS5jb2xvcnMsXG4gICAgaXNGb2N1c2VkID0gX3JlZjMuaXNGb2N1c2VkO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLmRhbmdlckxpZ2h0IDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdMZWZ0OiBzcGFjaW5nLmJhc2VVbml0LFxuICAgIHBhZGRpbmdSaWdodDogc3BhY2luZy5iYXNlVW5pdCxcbiAgICAnOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuZGFuZ2VyTGlnaHQsXG4gICAgICBjb2xvcjogY29sb3JzLmRhbmdlclxuICAgIH1cbiAgfSk7XG59O1xudmFyIE11bHRpVmFsdWVHZW5lcmljID0gZnVuY3Rpb24gTXVsdGlWYWx1ZUdlbmVyaWMoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY0LmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgaW5uZXJQcm9wcywgY2hpbGRyZW4pO1xufTtcbnZhciBNdWx0aVZhbHVlQ29udGFpbmVyID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG52YXIgTXVsdGlWYWx1ZUxhYmVsID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG5mdW5jdGlvbiBNdWx0aVZhbHVlUmVtb3ZlKF9yZWY1KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBfcmVmNS5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcImJ1dHRvblwiXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goQ3Jvc3NJY29uLCB7XG4gICAgc2l6ZTogMTRcbiAgfSkpO1xufVxudmFyIE11bHRpVmFsdWUgPSBmdW5jdGlvbiBNdWx0aVZhbHVlKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGNvbXBvbmVudHMgPSBwcm9wcy5jb21wb25lbnRzLFxuICAgIGRhdGEgPSBwcm9wcy5kYXRhLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIHJlbW92ZVByb3BzID0gcHJvcHMucmVtb3ZlUHJvcHMsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcztcbiAgdmFyIENvbnRhaW5lciA9IGNvbXBvbmVudHMuQ29udGFpbmVyLFxuICAgIExhYmVsID0gY29tcG9uZW50cy5MYWJlbCxcbiAgICBSZW1vdmUgPSBjb21wb25lbnRzLlJlbW92ZTtcbiAgcmV0dXJuIGpzeChDb250YWluZXIsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWUnLCB7XG4gICAgICAnbXVsdGktdmFsdWUnOiB0cnVlLFxuICAgICAgJ211bHRpLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgICB9KSksIGlubmVyUHJvcHMpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9LCBqc3goTGFiZWwsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdtdWx0aVZhbHVlTGFiZWwnLCB7XG4gICAgICAnbXVsdGktdmFsdWVfX2xhYmVsJzogdHJ1ZVxuICAgIH0pKSxcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgfSwgY2hpbGRyZW4pLCBqc3goUmVtb3ZlLCB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBpbm5lclByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdtdWx0aVZhbHVlUmVtb3ZlJywge1xuICAgICAgJ211bHRpLXZhbHVlX19yZW1vdmUnOiB0cnVlXG4gICAgfSkpLCB7fSwge1xuICAgICAgJ2FyaWEtbGFiZWwnOiBcIlJlbW92ZSBcIi5jb25jYXQoY2hpbGRyZW4gfHwgJ29wdGlvbicpXG4gICAgfSwgcmVtb3ZlUHJvcHMpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9KSk7XG59O1xudmFyIE11bHRpVmFsdWUkMSA9IE11bHRpVmFsdWU7XG5cbnZhciBvcHRpb25DU1MgPSBmdW5jdGlvbiBvcHRpb25DU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdvcHRpb24nLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMCknXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1NlbGVjdGVkID8gY29sb3JzLnByaW1hcnkgOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeTI1IDogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMjAgOiBpc1NlbGVjdGVkID8gY29sb3JzLm5ldXRyYWwwIDogJ2luaGVyaXQnLFxuICAgIHBhZGRpbmc6IFwiXCIuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4IFwiKS5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDMsIFwicHhcIiksXG4gICAgLy8gcHJvdmlkZSBzb21lIGFmZm9yZGFuY2Ugb24gdG91Y2ggZGV2aWNlc1xuICAgICc6YWN0aXZlJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAhaXNEaXNhYmxlZCA/IGlzU2VsZWN0ZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5wcmltYXJ5NTAgOiB1bmRlZmluZWRcbiAgICB9XG4gIH0pO1xufTtcbnZhciBPcHRpb24gPSBmdW5jdGlvbiBPcHRpb24ocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdvcHRpb24nLCB7XG4gICAgb3B0aW9uOiB0cnVlLFxuICAgICdvcHRpb24tLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnb3B0aW9uLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdvcHRpb24tLWlzLXNlbGVjdGVkJzogaXNTZWxlY3RlZFxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWYsXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IGlzRGlzYWJsZWRcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgT3B0aW9uJDEgPSBPcHRpb247XG5cbnZhciBwbGFjZWhvbGRlckNTUyA9IGZ1bmN0aW9uIHBsYWNlaG9sZGVyQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdwbGFjZWhvbGRlcicsXG4gICAgZ3JpZEFyZWE6ICcxIC8gMSAvIDIgLyAzJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDUwLFxuICAgIG1hcmdpbkxlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1hcmdpblJpZ2h0OiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiBQbGFjZWhvbGRlcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ3BsYWNlaG9sZGVyJywge1xuICAgIHBsYWNlaG9sZGVyOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBQbGFjZWhvbGRlciQxID0gUGxhY2Vob2xkZXI7XG5cbnZhciBjc3MgPSBmdW5jdGlvbiBjc3MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnc2luZ2xlVmFsdWUnLFxuICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDQwIDogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBtYXJnaW5MZWZ0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXJnaW5SaWdodDogc3BhY2luZy5iYXNlVW5pdCAvIDJcbiAgfSk7XG59O1xudmFyIFNpbmdsZVZhbHVlID0gZnVuY3Rpb24gU2luZ2xlVmFsdWUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdzaW5nbGVWYWx1ZScsIHtcbiAgICAnc2luZ2xlLXZhbHVlJzogdHJ1ZSxcbiAgICAnc2luZ2xlLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIFNpbmdsZVZhbHVlJDEgPSBTaW5nbGVWYWx1ZTtcblxudmFyIGNvbXBvbmVudHMgPSB7XG4gIENsZWFySW5kaWNhdG9yOiBDbGVhckluZGljYXRvcixcbiAgQ29udHJvbDogQ29udHJvbCQxLFxuICBEcm9wZG93bkluZGljYXRvcjogRHJvcGRvd25JbmRpY2F0b3IsXG4gIERvd25DaGV2cm9uOiBEb3duQ2hldnJvbixcbiAgQ3Jvc3NJY29uOiBDcm9zc0ljb24sXG4gIEdyb3VwOiBHcm91cCQxLFxuICBHcm91cEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgSW5kaWNhdG9yc0NvbnRhaW5lcjogSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgSW5kaWNhdG9yU2VwYXJhdG9yOiBJbmRpY2F0b3JTZXBhcmF0b3IsXG4gIElucHV0OiBJbnB1dCQxLFxuICBMb2FkaW5nSW5kaWNhdG9yOiBMb2FkaW5nSW5kaWNhdG9yLFxuICBNZW51OiBNZW51JDEsXG4gIE1lbnVMaXN0OiBNZW51TGlzdCxcbiAgTWVudVBvcnRhbDogTWVudVBvcnRhbCxcbiAgTG9hZGluZ01lc3NhZ2U6IExvYWRpbmdNZXNzYWdlLFxuICBOb09wdGlvbnNNZXNzYWdlOiBOb09wdGlvbnNNZXNzYWdlLFxuICBNdWx0aVZhbHVlOiBNdWx0aVZhbHVlJDEsXG4gIE11bHRpVmFsdWVDb250YWluZXI6IE11bHRpVmFsdWVDb250YWluZXIsXG4gIE11bHRpVmFsdWVMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICBNdWx0aVZhbHVlUmVtb3ZlOiBNdWx0aVZhbHVlUmVtb3ZlLFxuICBPcHRpb246IE9wdGlvbiQxLFxuICBQbGFjZWhvbGRlcjogUGxhY2Vob2xkZXIkMSxcbiAgU2VsZWN0Q29udGFpbmVyOiBTZWxlY3RDb250YWluZXIsXG4gIFNpbmdsZVZhbHVlOiBTaW5nbGVWYWx1ZSQxLFxuICBWYWx1ZUNvbnRhaW5lcjogVmFsdWVDb250YWluZXJcbn07XG52YXIgZGVmYXVsdENvbXBvbmVudHMgPSBmdW5jdGlvbiBkZWZhdWx0Q29tcG9uZW50cyhwcm9wcykge1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb21wb25lbnRzKSwgcHJvcHMuY29tcG9uZW50cyk7XG59O1xuXG5leHBvcnQgeyBpc01vYmlsZURldmljZSBhcyBBLCBtdWx0aVZhbHVlQXNWYWx1ZSBhcyBCLCBzaW5nbGVWYWx1ZUFzVmFsdWUgYXMgQywgdmFsdWVUZXJuYXJ5IGFzIEQsIGNsYXNzTmFtZXMgYXMgRSwgZGVmYXVsdENvbXBvbmVudHMgYXMgRiwgaXNEb2N1bWVudEVsZW1lbnQgYXMgRywgY2xlYW5WYWx1ZSBhcyBILCBzY3JvbGxJbnRvVmlldyBhcyBJLCBub29wIGFzIEosIG5vdE51bGxpc2ggYXMgSywgaGFuZGxlSW5wdXRDaGFuZ2UgYXMgTCwgTWVudVBsYWNlciBhcyBNLCBjbGVhckluZGljYXRvckNTUyBhcyBhLCBjb250YWluZXJDU1MgYXMgYiwgY29tcG9uZW50cyBhcyBjLCBjc3MkMSBhcyBkLCBkcm9wZG93bkluZGljYXRvckNTUyBhcyBlLCBncm91cEhlYWRpbmdDU1MgYXMgZiwgZ3JvdXBDU1MgYXMgZywgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTIGFzIGgsIGluZGljYXRvcnNDb250YWluZXJDU1MgYXMgaSwgaW5wdXRDU1MgYXMgaiwgbG9hZGluZ01lc3NhZ2VDU1MgYXMgaywgbG9hZGluZ0luZGljYXRvckNTUyBhcyBsLCBtZW51Q1NTIGFzIG0sIG1lbnVMaXN0Q1NTIGFzIG4sIG1lbnVQb3J0YWxDU1MgYXMgbywgbXVsdGlWYWx1ZUNTUyBhcyBwLCBtdWx0aVZhbHVlTGFiZWxDU1MgYXMgcSwgcmVtb3ZlUHJvcHMgYXMgciwgc3VwcG9ydHNQYXNzaXZlRXZlbnRzIGFzIHMsIG11bHRpVmFsdWVSZW1vdmVDU1MgYXMgdCwgbm9PcHRpb25zTWVzc2FnZUNTUyBhcyB1LCBvcHRpb25DU1MgYXMgdiwgcGxhY2Vob2xkZXJDU1MgYXMgdywgY3NzIGFzIHgsIHZhbHVlQ29udGFpbmVyQ1NTIGFzIHksIGlzVG91Y2hDYXBhYmxlIGFzIHogfTtcbiIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBjYWNoZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhY2hlICYmIGNhY2hlLmxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgY2FjaGUubGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUubGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWNoZSA9IHtcbiAgICAgICAgICAgIGxhc3RSZXN1bHQ6IGxhc3RSZXN1bHQsXG4gICAgICAgICAgICBsYXN0QXJnczogbmV3QXJncyxcbiAgICAgICAgICAgIGxhc3RUaGlzOiB0aGlzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgbWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgY2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgeyBtZW1vaXplT25lIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXInO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vLCBGcmFnbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByIGFzIHJlbW92ZVByb3BzLCBzIGFzIHN1cHBvcnRzUGFzc2l2ZUV2ZW50cywgYSBhcyBjbGVhckluZGljYXRvckNTUywgYiBhcyBjb250YWluZXJDU1MsIGQgYXMgY3NzJDEsIGUgYXMgZHJvcGRvd25JbmRpY2F0b3JDU1MsIGcgYXMgZ3JvdXBDU1MsIGYgYXMgZ3JvdXBIZWFkaW5nQ1NTLCBpIGFzIGluZGljYXRvcnNDb250YWluZXJDU1MsIGggYXMgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLCBqIGFzIGlucHV0Q1NTLCBsIGFzIGxvYWRpbmdJbmRpY2F0b3JDU1MsIGsgYXMgbG9hZGluZ01lc3NhZ2VDU1MsIG0gYXMgbWVudUNTUywgbiBhcyBtZW51TGlzdENTUywgbyBhcyBtZW51UG9ydGFsQ1NTLCBwIGFzIG11bHRpVmFsdWVDU1MsIHEgYXMgbXVsdGlWYWx1ZUxhYmVsQ1NTLCB0IGFzIG11bHRpVmFsdWVSZW1vdmVDU1MsIHUgYXMgbm9PcHRpb25zTWVzc2FnZUNTUywgdiBhcyBvcHRpb25DU1MsIHcgYXMgcGxhY2Vob2xkZXJDU1MsIHggYXMgY3NzJDIsIHkgYXMgdmFsdWVDb250YWluZXJDU1MsIHogYXMgaXNUb3VjaENhcGFibGUsIEEgYXMgaXNNb2JpbGVEZXZpY2UsIEIgYXMgbXVsdGlWYWx1ZUFzVmFsdWUsIEMgYXMgc2luZ2xlVmFsdWVBc1ZhbHVlLCBEIGFzIHZhbHVlVGVybmFyeSwgRSBhcyBjbGFzc05hbWVzLCBGIGFzIGRlZmF1bHRDb21wb25lbnRzLCBHIGFzIGlzRG9jdW1lbnRFbGVtZW50LCBIIGFzIGNsZWFuVmFsdWUsIEkgYXMgc2Nyb2xsSW50b1ZpZXcsIEogYXMgbm9vcCwgTSBhcyBNZW51UGxhY2VyLCBLIGFzIG5vdE51bGxpc2ggfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgeyBqc3gsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI3cGcwY2otYTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcFwiXG59IDoge1xuICBuYW1lOiBcIjFmNDNhdnotYTExeVRleHQtQTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpBMTF5VGV4dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrRXhNWGxVWlhoMExuUnplQ0pkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZOU1NJc0ltWnBiR1VpT2lKQk1URjVWR1Y0ZEM1MGMzZ2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lvZ1FHcHplQ0JxYzNnZ0tpOWNibWx0Y0c5eWRDQjdJR3B6ZUNCOUlHWnliMjBnSjBCbGJXOTBhVzl1TDNKbFlXTjBKenRjYmx4dUx5OGdRWE56YVhOMGFYWmxJSFJsZUhRZ2RHOGdaR1Z6WTNKcFltVWdkbWx6ZFdGc0lHVnNaVzFsYm5SekxpQklhV1JrWlc0Z1ptOXlJSE5wWjJoMFpXUWdkWE5sY25NdVhHNWpiMjV6ZENCQk1URjVWR1Y0ZENBOUlDaHdjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWR6Y0dGdUoxMHBJRDArSUNoY2JpQWdQSE53WVc1Y2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHeGhZbVZzT2lBbllURXhlVlJsZUhRbkxGeHVJQ0FnSUNBZ2VrbHVaR1Y0T2lBNU9UazVMRnh1SUNBZ0lDQWdZbTl5WkdWeU9pQXdMRnh1SUNBZ0lDQWdZMnhwY0RvZ0ozSmxZM1FvTVhCNExDQXhjSGdzSURGd2VDd2dNWEI0S1Njc1hHNGdJQ0FnSUNCb1pXbG5hSFE2SURFc1hHNGdJQ0FnSUNCM2FXUjBhRG9nTVN4Y2JpQWdJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUNBZ2IzWmxjbVpzYjNjNklDZG9hV1JrWlc0bkxGeHVJQ0FnSUNBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnSUNBZ0lIZG9hWFJsVTNCaFkyVTZJQ2R1YjNkeVlYQW5MRnh1SUNBZ0lIMTlYRzRnSUNBZ2V5NHVMbkJ5YjNCemZWeHVJQ0F2UGx4dUtUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdRVEV4ZVZSbGVIUTdYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMlxufTtcbnZhciBBMTF5VGV4dCA9IGZ1bmN0aW9uIEExMXlUZXh0KHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IF9yZWZcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgQTExeVRleHQkMSA9IEExMXlUZXh0O1xuXG52YXIgZGVmYXVsdEFyaWFMaXZlTWVzc2FnZXMgPSB7XG4gIGd1aWRhbmNlOiBmdW5jdGlvbiBndWlkYW5jZShwcm9wcykge1xuICAgIHZhciBpc1NlYXJjaGFibGUgPSBwcm9wcy5pc1NlYXJjaGFibGUsXG4gICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgIHRhYlNlbGVjdHNWYWx1ZSA9IHByb3BzLnRhYlNlbGVjdHNWYWx1ZSxcbiAgICAgIGNvbnRleHQgPSBwcm9wcy5jb250ZXh0LFxuICAgICAgaXNJbml0aWFsRm9jdXMgPSBwcm9wcy5pc0luaXRpYWxGb2N1cztcbiAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgICByZXR1cm4gXCJVc2UgVXAgYW5kIERvd24gdG8gY2hvb3NlIG9wdGlvbnMsIHByZXNzIEVudGVyIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uLCBwcmVzcyBFc2NhcGUgdG8gZXhpdCB0aGUgbWVudVwiLmNvbmNhdCh0YWJTZWxlY3RzVmFsdWUgPyAnLCBwcmVzcyBUYWIgdG8gc2VsZWN0IHRoZSBvcHRpb24gYW5kIGV4aXQgdGhlIG1lbnUnIDogJycsIFwiLlwiKTtcbiAgICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgcmV0dXJuIGlzSW5pdGlhbEZvY3VzID8gXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtbGFiZWwnXSB8fCAnU2VsZWN0JywgXCIgaXMgZm9jdXNlZCBcIikuY29uY2F0KGlzU2VhcmNoYWJsZSA/ICcsdHlwZSB0byByZWZpbmUgbGlzdCcgOiAnJywgXCIsIHByZXNzIERvd24gdG8gb3BlbiB0aGUgbWVudSwgXCIpLmNvbmNhdChpc011bHRpID8gJyBwcmVzcyBsZWZ0IHRvIGZvY3VzIHNlbGVjdGVkIHZhbHVlcycgOiAnJykgOiAnJztcbiAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuICdVc2UgbGVmdCBhbmQgcmlnaHQgdG8gdG9nZ2xlIGJldHdlZW4gZm9jdXNlZCB2YWx1ZXMsIHByZXNzIEJhY2tzcGFjZSB0byByZW1vdmUgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHZhbHVlJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sXG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcm9wcykge1xuICAgIHZhciBhY3Rpb24gPSBwcm9wcy5hY3Rpb24sXG4gICAgICBfcHJvcHMkbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGxhYmVsID0gX3Byb3BzJGxhYmVsID09PSB2b2lkIDAgPyAnJyA6IF9wcm9wcyRsYWJlbCxcbiAgICAgIGxhYmVscyA9IHByb3BzLmxhYmVscyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkO1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdkZXNlbGVjdC1vcHRpb24nOlxuICAgICAgY2FzZSAncG9wLXZhbHVlJzpcbiAgICAgIGNhc2UgJ3JlbW92ZS12YWx1ZSc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiLCBkZXNlbGVjdGVkLlwiKTtcbiAgICAgIGNhc2UgJ2NsZWFyJzpcbiAgICAgICAgcmV0dXJuICdBbGwgc2VsZWN0ZWQgb3B0aW9ucyBoYXZlIGJlZW4gY2xlYXJlZC4nO1xuICAgICAgY2FzZSAnaW5pdGlhbC1pbnB1dC1mb2N1cyc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvblwiLmNvbmNhdChsYWJlbHMubGVuZ3RoID4gMSA/ICdzJyA6ICcnLCBcIiBcIikuY29uY2F0KGxhYmVscy5qb2luKCcsJyksIFwiLCBzZWxlY3RlZC5cIik7XG4gICAgICBjYXNlICdzZWxlY3Qtb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIGlzRGlzYWJsZWQgPyBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiIGlzIGRpc2FibGVkLiBTZWxlY3QgYW5vdGhlciBvcHRpb24uXCIpIDogXCJvcHRpb24gXCIuY29uY2F0KGxhYmVsLCBcIiwgc2VsZWN0ZWQuXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSxcbiAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhwcm9wcykge1xuICAgIHZhciBjb250ZXh0ID0gcHJvcHMuY29udGV4dCxcbiAgICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICBfcHJvcHMkbGFiZWwyID0gcHJvcHMubGFiZWwsXG4gICAgICBsYWJlbCA9IF9wcm9wcyRsYWJlbDIgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGxhYmVsMixcbiAgICAgIHNlbGVjdFZhbHVlID0gcHJvcHMuc2VsZWN0VmFsdWUsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgICAgaXNBcHBsZURldmljZSA9IHByb3BzLmlzQXBwbGVEZXZpY2U7XG4gICAgdmFyIGdldEFycmF5SW5kZXggPSBmdW5jdGlvbiBnZXRBcnJheUluZGV4KGFyciwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFyciAmJiBhcnIubGVuZ3RoID8gXCJcIi5jb25jYXQoYXJyLmluZGV4T2YoaXRlbSkgKyAxLCBcIiBvZiBcIikuY29uY2F0KGFyci5sZW5ndGgpIDogJyc7XG4gICAgfTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ3ZhbHVlJyAmJiBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIFwidmFsdWUgXCIuY29uY2F0KGxhYmVsLCBcIiBmb2N1c2VkLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgoc2VsZWN0VmFsdWUsIGZvY3VzZWQpLCBcIi5cIik7XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09PSAnbWVudScgJiYgaXNBcHBsZURldmljZSkge1xuICAgICAgdmFyIGRpc2FibGVkID0gaXNEaXNhYmxlZCA/ICcgZGlzYWJsZWQnIDogJyc7XG4gICAgICB2YXIgc3RhdHVzID0gXCJcIi5jb25jYXQoaXNTZWxlY3RlZCA/ICcgc2VsZWN0ZWQnIDogJycpLmNvbmNhdChkaXNhYmxlZCk7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQobGFiZWwpLmNvbmNhdChzdGF0dXMsIFwiLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgob3B0aW9ucywgZm9jdXNlZCksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9LFxuICBvbkZpbHRlcjogZnVuY3Rpb24gb25GaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgICByZXN1bHRzTWVzc2FnZSA9IHByb3BzLnJlc3VsdHNNZXNzYWdlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTWVzc2FnZSkuY29uY2F0KGlucHV0VmFsdWUgPyAnIGZvciBzZWFyY2ggdGVybSAnICsgaW5wdXRWYWx1ZSA6ICcnLCBcIi5cIik7XG4gIH1cbn07XG5cbnZhciBMaXZlUmVnaW9uID0gZnVuY3Rpb24gTGl2ZVJlZ2lvbihwcm9wcykge1xuICB2YXIgYXJpYVNlbGVjdGlvbiA9IHByb3BzLmFyaWFTZWxlY3Rpb24sXG4gICAgZm9jdXNlZE9wdGlvbiA9IHByb3BzLmZvY3VzZWRPcHRpb24sXG4gICAgZm9jdXNlZFZhbHVlID0gcHJvcHMuZm9jdXNlZFZhbHVlLFxuICAgIGZvY3VzYWJsZU9wdGlvbnMgPSBwcm9wcy5mb2N1c2FibGVPcHRpb25zLFxuICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICBzZWxlY3RWYWx1ZSA9IHByb3BzLnNlbGVjdFZhbHVlLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHMsXG4gICAgaWQgPSBwcm9wcy5pZCxcbiAgICBpc0FwcGxlRGV2aWNlID0gcHJvcHMuaXNBcHBsZURldmljZTtcbiAgdmFyIGFyaWFMaXZlTWVzc2FnZXMgPSBzZWxlY3RQcm9wcy5hcmlhTGl2ZU1lc3NhZ2VzLFxuICAgIGdldE9wdGlvbkxhYmVsID0gc2VsZWN0UHJvcHMuZ2V0T3B0aW9uTGFiZWwsXG4gICAgaW5wdXRWYWx1ZSA9IHNlbGVjdFByb3BzLmlucHV0VmFsdWUsXG4gICAgaXNNdWx0aSA9IHNlbGVjdFByb3BzLmlzTXVsdGksXG4gICAgaXNPcHRpb25EaXNhYmxlZCA9IHNlbGVjdFByb3BzLmlzT3B0aW9uRGlzYWJsZWQsXG4gICAgaXNTZWFyY2hhYmxlID0gc2VsZWN0UHJvcHMuaXNTZWFyY2hhYmxlLFxuICAgIG1lbnVJc09wZW4gPSBzZWxlY3RQcm9wcy5tZW51SXNPcGVuLFxuICAgIG9wdGlvbnMgPSBzZWxlY3RQcm9wcy5vcHRpb25zLFxuICAgIHNjcmVlblJlYWRlclN0YXR1cyA9IHNlbGVjdFByb3BzLnNjcmVlblJlYWRlclN0YXR1cyxcbiAgICB0YWJTZWxlY3RzVmFsdWUgPSBzZWxlY3RQcm9wcy50YWJTZWxlY3RzVmFsdWUsXG4gICAgaXNMb2FkaW5nID0gc2VsZWN0UHJvcHMuaXNMb2FkaW5nO1xuICB2YXIgYXJpYUxhYmVsID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIGFyaWFMaXZlID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGl2ZSddO1xuXG4gIC8vIFVwZGF0ZSBhcmlhIGxpdmUgbWVzc2FnZSBjb25maWd1cmF0aW9uIHdoZW4gcHJvcCBjaGFuZ2VzXG4gIHZhciBtZXNzYWdlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRBcmlhTGl2ZU1lc3NhZ2VzKSwgYXJpYUxpdmVNZXNzYWdlcyB8fCB7fSk7XG4gIH0sIFthcmlhTGl2ZU1lc3NhZ2VzXSk7XG5cbiAgLy8gVXBkYXRlIGFyaWEgbGl2ZSBzZWxlY3RlZCBvcHRpb24gd2hlbiBwcm9wIGNoYW5nZXNcbiAgdmFyIGFyaWFTZWxlY3RlZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGFyaWFTZWxlY3Rpb24gJiYgbWVzc2FnZXMub25DaGFuZ2UpIHtcbiAgICAgIHZhciBvcHRpb24gPSBhcmlhU2VsZWN0aW9uLm9wdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gYXJpYVNlbGVjdGlvbi5vcHRpb25zLFxuICAgICAgICByZW1vdmVkVmFsdWUgPSBhcmlhU2VsZWN0aW9uLnJlbW92ZWRWYWx1ZSxcbiAgICAgICAgcmVtb3ZlZFZhbHVlcyA9IGFyaWFTZWxlY3Rpb24ucmVtb3ZlZFZhbHVlcyxcbiAgICAgICAgdmFsdWUgPSBhcmlhU2VsZWN0aW9uLnZhbHVlO1xuICAgICAgLy8gc2VsZWN0LW9wdGlvbiB3aGVuICFpc011bHRpIGRvZXMgbm90IHJldHVybiBvcHRpb24gc28gd2UgYXNzdW1lIHNlbGVjdGVkIG9wdGlvbiBpcyB2YWx1ZVxuICAgICAgdmFyIGFzT3B0aW9uID0gZnVuY3Rpb24gYXNPcHRpb24odmFsKSB7XG4gICAgICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0gZnJvbSB0aGUgYWN0aW9uIHRoZW4gZ2V0IGl0cyBsYWJlbFxuICAgICAgdmFyIHNlbGVjdGVkID0gcmVtb3ZlZFZhbHVlIHx8IG9wdGlvbiB8fCBhc09wdGlvbih2YWx1ZSk7XG4gICAgICB2YXIgbGFiZWwgPSBzZWxlY3RlZCA/IGdldE9wdGlvbkxhYmVsKHNlbGVjdGVkKSA6ICcnO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaXRlbXMgZnJvbSB0aGUgYWN0aW9uIHRoZW4gcmV0dXJuIGFuIGFycmF5IG9mIGxhYmVsc1xuICAgICAgdmFyIG11bHRpU2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnMgfHwgcmVtb3ZlZFZhbHVlcyB8fCB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFiZWxzID0gbXVsdGlTZWxlY3RlZCA/IG11bHRpU2VsZWN0ZWQubWFwKGdldE9wdGlvbkxhYmVsKSA6IFtdO1xuICAgICAgdmFyIG9uQ2hhbmdlUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgLy8gbXVsdGlTZWxlY3RlZCBpdGVtcyBhcmUgdXN1YWxseSBpdGVtcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNlbGVjdGVkXG4gICAgICAgIC8vIG9yIHNldCBieSB0aGUgdXNlciBhcyBhIGRlZmF1bHQgdmFsdWUgc28gd2UgYXNzdW1lIHRoZXkgYXJlIG5vdCBkaXNhYmxlZFxuICAgICAgICBpc0Rpc2FibGVkOiBzZWxlY3RlZCAmJiBpc09wdGlvbkRpc2FibGVkKHNlbGVjdGVkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgbGFiZWxzOiBsYWJlbHNcbiAgICAgIH0sIGFyaWFTZWxlY3Rpb24pO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzLm9uQ2hhbmdlKG9uQ2hhbmdlUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSwgW2FyaWFTZWxlY3Rpb24sIG1lc3NhZ2VzLCBpc09wdGlvbkRpc2FibGVkLCBzZWxlY3RWYWx1ZSwgZ2V0T3B0aW9uTGFiZWxdKTtcbiAgdmFyIGFyaWFGb2N1c2VkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZvY3VzTXNnID0gJyc7XG4gICAgdmFyIGZvY3VzZWQgPSBmb2N1c2VkT3B0aW9uIHx8IGZvY3VzZWRWYWx1ZTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9ICEhKGZvY3VzZWRPcHRpb24gJiYgc2VsZWN0VmFsdWUgJiYgc2VsZWN0VmFsdWUuaW5jbHVkZXMoZm9jdXNlZE9wdGlvbikpO1xuICAgIGlmIChmb2N1c2VkICYmIG1lc3NhZ2VzLm9uRm9jdXMpIHtcbiAgICAgIHZhciBvbkZvY3VzUHJvcHMgPSB7XG4gICAgICAgIGZvY3VzZWQ6IGZvY3VzZWQsXG4gICAgICAgIGxhYmVsOiBnZXRPcHRpb25MYWJlbChmb2N1c2VkKSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNPcHRpb25EaXNhYmxlZChmb2N1c2VkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgIG9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGNvbnRleHQ6IGZvY3VzZWQgPT09IGZvY3VzZWRPcHRpb24gPyAnbWVudScgOiAndmFsdWUnLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IGlzQXBwbGVEZXZpY2VcbiAgICAgIH07XG4gICAgICBmb2N1c01zZyA9IG1lc3NhZ2VzLm9uRm9jdXMob25Gb2N1c1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvY3VzTXNnO1xuICB9LCBbZm9jdXNlZE9wdGlvbiwgZm9jdXNlZFZhbHVlLCBnZXRPcHRpb25MYWJlbCwgaXNPcHRpb25EaXNhYmxlZCwgbWVzc2FnZXMsIGZvY3VzYWJsZU9wdGlvbnMsIHNlbGVjdFZhbHVlLCBpc0FwcGxlRGV2aWNlXSk7XG4gIHZhciBhcmlhUmVzdWx0cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHRzTXNnID0gJyc7XG4gICAgaWYgKG1lbnVJc09wZW4gJiYgb3B0aW9ucy5sZW5ndGggJiYgIWlzTG9hZGluZyAmJiBtZXNzYWdlcy5vbkZpbHRlcikge1xuICAgICAgdmFyIHJlc3VsdHNNZXNzYWdlID0gc2NyZWVuUmVhZGVyU3RhdHVzKHtcbiAgICAgICAgY291bnQ6IGZvY3VzYWJsZU9wdGlvbnMubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdHNNc2cgPSBtZXNzYWdlcy5vbkZpbHRlcih7XG4gICAgICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgIHJlc3VsdHNNZXNzYWdlOiByZXN1bHRzTWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzTXNnO1xuICB9LCBbZm9jdXNhYmxlT3B0aW9ucywgaW5wdXRWYWx1ZSwgbWVudUlzT3BlbiwgbWVzc2FnZXMsIG9wdGlvbnMsIHNjcmVlblJlYWRlclN0YXR1cywgaXNMb2FkaW5nXSk7XG4gIHZhciBpc0luaXRpYWxGb2N1cyA9IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnO1xuICB2YXIgYXJpYUd1aWRhbmNlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGd1aWRhbmNlTXNnID0gJyc7XG4gICAgaWYgKG1lc3NhZ2VzLmd1aWRhbmNlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGZvY3VzZWRWYWx1ZSA/ICd2YWx1ZScgOiBtZW51SXNPcGVuID8gJ21lbnUnIDogJ2lucHV0JztcbiAgICAgIGd1aWRhbmNlTXNnID0gbWVzc2FnZXMuZ3VpZGFuY2Uoe1xuICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgaXNEaXNhYmxlZDogZm9jdXNlZE9wdGlvbiAmJiBpc09wdGlvbkRpc2FibGVkKGZvY3VzZWRPcHRpb24sIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgaXNNdWx0aTogaXNNdWx0aSxcbiAgICAgICAgaXNTZWFyY2hhYmxlOiBpc1NlYXJjaGFibGUsXG4gICAgICAgIHRhYlNlbGVjdHNWYWx1ZTogdGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBpc0luaXRpYWxGb2N1czogaXNJbml0aWFsRm9jdXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ3VpZGFuY2VNc2c7XG4gIH0sIFthcmlhTGFiZWwsIGZvY3VzZWRPcHRpb24sIGZvY3VzZWRWYWx1ZSwgaXNNdWx0aSwgaXNPcHRpb25EaXNhYmxlZCwgaXNTZWFyY2hhYmxlLCBtZW51SXNPcGVuLCBtZXNzYWdlcywgc2VsZWN0VmFsdWUsIHRhYlNlbGVjdHNWYWx1ZSwgaXNJbml0aWFsRm9jdXNdKTtcbiAgdmFyIFNjcmVlblJlYWRlclRleHQgPSBqc3goRnJhZ21lbnQsIG51bGwsIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtc2VsZWN0aW9uXCJcbiAgfSwgYXJpYVNlbGVjdGVkKSwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1mb2N1c2VkXCJcbiAgfSwgYXJpYUZvY3VzZWQpLCBqc3goXCJzcGFuXCIsIHtcbiAgICBpZDogXCJhcmlhLXJlc3VsdHNcIlxuICB9LCBhcmlhUmVzdWx0cyksIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtZ3VpZGFuY2VcIlxuICB9LCBhcmlhR3VpZGFuY2UpKTtcbiAgcmV0dXJuIGpzeChGcmFnbWVudCwgbnVsbCwganN4KEExMXlUZXh0JDEsIHtcbiAgICBpZDogaWRcbiAgfSwgaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCksIGpzeChBMTF5VGV4dCQxLCB7XG4gICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgXCJhcmlhLWF0b21pY1wiOiBcImZhbHNlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcImxvZ1wiXG4gIH0sIGlzRm9jdXNlZCAmJiAhaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCkpO1xufTtcbnZhciBMaXZlUmVnaW9uJDEgPSBMaXZlUmVnaW9uO1xuXG52YXIgZGlhY3JpdGljcyA9IFt7XG4gIGJhc2U6ICdBJyxcbiAgbGV0dGVyczogXCJBXFx1MjRCNlxcdUZGMjFcXHhDMFxceEMxXFx4QzJcXHUxRUE2XFx1MUVBNFxcdTFFQUFcXHUxRUE4XFx4QzNcXHUwMTAwXFx1MDEwMlxcdTFFQjBcXHUxRUFFXFx1MUVCNFxcdTFFQjJcXHUwMjI2XFx1MDFFMFxceEM0XFx1MDFERVxcdTFFQTJcXHhDNVxcdTAxRkFcXHUwMUNEXFx1MDIwMFxcdTAyMDJcXHUxRUEwXFx1MUVBQ1xcdTFFQjZcXHUxRTAwXFx1MDEwNFxcdTAyM0FcXHUyQzZGXCJcbn0sIHtcbiAgYmFzZTogJ0FBJyxcbiAgbGV0dGVyczogXCJcXHVBNzMyXCJcbn0sIHtcbiAgYmFzZTogJ0FFJyxcbiAgbGV0dGVyczogXCJcXHhDNlxcdTAxRkNcXHUwMUUyXCJcbn0sIHtcbiAgYmFzZTogJ0FPJyxcbiAgbGV0dGVyczogXCJcXHVBNzM0XCJcbn0sIHtcbiAgYmFzZTogJ0FVJyxcbiAgbGV0dGVyczogXCJcXHVBNzM2XCJcbn0sIHtcbiAgYmFzZTogJ0FWJyxcbiAgbGV0dGVyczogXCJcXHVBNzM4XFx1QTczQVwiXG59LCB7XG4gIGJhc2U6ICdBWScsXG4gIGxldHRlcnM6IFwiXFx1QTczQ1wiXG59LCB7XG4gIGJhc2U6ICdCJyxcbiAgbGV0dGVyczogXCJCXFx1MjRCN1xcdUZGMjJcXHUxRTAyXFx1MUUwNFxcdTFFMDZcXHUwMjQzXFx1MDE4MlxcdTAxODFcIlxufSwge1xuICBiYXNlOiAnQycsXG4gIGxldHRlcnM6IFwiQ1xcdTI0QjhcXHVGRjIzXFx1MDEwNlxcdTAxMDhcXHUwMTBBXFx1MDEwQ1xceEM3XFx1MUUwOFxcdTAxODdcXHUwMjNCXFx1QTczRVwiXG59LCB7XG4gIGJhc2U6ICdEJyxcbiAgbGV0dGVyczogXCJEXFx1MjRCOVxcdUZGMjRcXHUxRTBBXFx1MDEwRVxcdTFFMENcXHUxRTEwXFx1MUUxMlxcdTFFMEVcXHUwMTEwXFx1MDE4QlxcdTAxOEFcXHUwMTg5XFx1QTc3OVwiXG59LCB7XG4gIGJhc2U6ICdEWicsXG4gIGxldHRlcnM6IFwiXFx1MDFGMVxcdTAxQzRcIlxufSwge1xuICBiYXNlOiAnRHonLFxuICBsZXR0ZXJzOiBcIlxcdTAxRjJcXHUwMUM1XCJcbn0sIHtcbiAgYmFzZTogJ0UnLFxuICBsZXR0ZXJzOiBcIkVcXHUyNEJBXFx1RkYyNVxceEM4XFx4QzlcXHhDQVxcdTFFQzBcXHUxRUJFXFx1MUVDNFxcdTFFQzJcXHUxRUJDXFx1MDExMlxcdTFFMTRcXHUxRTE2XFx1MDExNFxcdTAxMTZcXHhDQlxcdTFFQkFcXHUwMTFBXFx1MDIwNFxcdTAyMDZcXHUxRUI4XFx1MUVDNlxcdTAyMjhcXHUxRTFDXFx1MDExOFxcdTFFMThcXHUxRTFBXFx1MDE5MFxcdTAxOEVcIlxufSwge1xuICBiYXNlOiAnRicsXG4gIGxldHRlcnM6IFwiRlxcdTI0QkJcXHVGRjI2XFx1MUUxRVxcdTAxOTFcXHVBNzdCXCJcbn0sIHtcbiAgYmFzZTogJ0cnLFxuICBsZXR0ZXJzOiBcIkdcXHUyNEJDXFx1RkYyN1xcdTAxRjRcXHUwMTFDXFx1MUUyMFxcdTAxMUVcXHUwMTIwXFx1MDFFNlxcdTAxMjJcXHUwMUU0XFx1MDE5M1xcdUE3QTBcXHVBNzdEXFx1QTc3RVwiXG59LCB7XG4gIGJhc2U6ICdIJyxcbiAgbGV0dGVyczogXCJIXFx1MjRCRFxcdUZGMjhcXHUwMTI0XFx1MUUyMlxcdTFFMjZcXHUwMjFFXFx1MUUyNFxcdTFFMjhcXHUxRTJBXFx1MDEyNlxcdTJDNjdcXHUyQzc1XFx1QTc4RFwiXG59LCB7XG4gIGJhc2U6ICdJJyxcbiAgbGV0dGVyczogXCJJXFx1MjRCRVxcdUZGMjlcXHhDQ1xceENEXFx4Q0VcXHUwMTI4XFx1MDEyQVxcdTAxMkNcXHUwMTMwXFx4Q0ZcXHUxRTJFXFx1MUVDOFxcdTAxQ0ZcXHUwMjA4XFx1MDIwQVxcdTFFQ0FcXHUwMTJFXFx1MUUyQ1xcdTAxOTdcIlxufSwge1xuICBiYXNlOiAnSicsXG4gIGxldHRlcnM6IFwiSlxcdTI0QkZcXHVGRjJBXFx1MDEzNFxcdTAyNDhcIlxufSwge1xuICBiYXNlOiAnSycsXG4gIGxldHRlcnM6IFwiS1xcdTI0QzBcXHVGRjJCXFx1MUUzMFxcdTAxRThcXHUxRTMyXFx1MDEzNlxcdTFFMzRcXHUwMTk4XFx1MkM2OVxcdUE3NDBcXHVBNzQyXFx1QTc0NFxcdUE3QTJcIlxufSwge1xuICBiYXNlOiAnTCcsXG4gIGxldHRlcnM6IFwiTFxcdTI0QzFcXHVGRjJDXFx1MDEzRlxcdTAxMzlcXHUwMTNEXFx1MUUzNlxcdTFFMzhcXHUwMTNCXFx1MUUzQ1xcdTFFM0FcXHUwMTQxXFx1MDIzRFxcdTJDNjJcXHUyQzYwXFx1QTc0OFxcdUE3NDZcXHVBNzgwXCJcbn0sIHtcbiAgYmFzZTogJ0xKJyxcbiAgbGV0dGVyczogXCJcXHUwMUM3XCJcbn0sIHtcbiAgYmFzZTogJ0xqJyxcbiAgbGV0dGVyczogXCJcXHUwMUM4XCJcbn0sIHtcbiAgYmFzZTogJ00nLFxuICBsZXR0ZXJzOiBcIk1cXHUyNEMyXFx1RkYyRFxcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTJDNkVcXHUwMTlDXCJcbn0sIHtcbiAgYmFzZTogJ04nLFxuICBsZXR0ZXJzOiBcIk5cXHUyNEMzXFx1RkYyRVxcdTAxRjhcXHUwMTQzXFx4RDFcXHUxRTQ0XFx1MDE0N1xcdTFFNDZcXHUwMTQ1XFx1MUU0QVxcdTFFNDhcXHUwMjIwXFx1MDE5RFxcdUE3OTBcXHVBN0E0XCJcbn0sIHtcbiAgYmFzZTogJ05KJyxcbiAgbGV0dGVyczogXCJcXHUwMUNBXCJcbn0sIHtcbiAgYmFzZTogJ05qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNCXCJcbn0sIHtcbiAgYmFzZTogJ08nLFxuICBsZXR0ZXJzOiBcIk9cXHUyNEM0XFx1RkYyRlxceEQyXFx4RDNcXHhENFxcdTFFRDJcXHUxRUQwXFx1MUVENlxcdTFFRDRcXHhENVxcdTFFNENcXHUwMjJDXFx1MUU0RVxcdTAxNENcXHUxRTUwXFx1MUU1MlxcdTAxNEVcXHUwMjJFXFx1MDIzMFxceEQ2XFx1MDIyQVxcdTFFQ0VcXHUwMTUwXFx1MDFEMVxcdTAyMENcXHUwMjBFXFx1MDFBMFxcdTFFRENcXHUxRURBXFx1MUVFMFxcdTFFREVcXHUxRUUyXFx1MUVDQ1xcdTFFRDhcXHUwMUVBXFx1MDFFQ1xceEQ4XFx1MDFGRVxcdTAxODZcXHUwMTlGXFx1QTc0QVxcdUE3NENcIlxufSwge1xuICBiYXNlOiAnT0knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTJcIlxufSwge1xuICBiYXNlOiAnT08nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEVcIlxufSwge1xuICBiYXNlOiAnT1UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjJcIlxufSwge1xuICBiYXNlOiAnUCcsXG4gIGxldHRlcnM6IFwiUFxcdTI0QzVcXHVGRjMwXFx1MUU1NFxcdTFFNTZcXHUwMUE0XFx1MkM2M1xcdUE3NTBcXHVBNzUyXFx1QTc1NFwiXG59LCB7XG4gIGJhc2U6ICdRJyxcbiAgbGV0dGVyczogXCJRXFx1MjRDNlxcdUZGMzFcXHVBNzU2XFx1QTc1OFxcdTAyNEFcIlxufSwge1xuICBiYXNlOiAnUicsXG4gIGxldHRlcnM6IFwiUlxcdTI0QzdcXHVGRjMyXFx1MDE1NFxcdTFFNThcXHUwMTU4XFx1MDIxMFxcdTAyMTJcXHUxRTVBXFx1MUU1Q1xcdTAxNTZcXHUxRTVFXFx1MDI0Q1xcdTJDNjRcXHVBNzVBXFx1QTdBNlxcdUE3ODJcIlxufSwge1xuICBiYXNlOiAnUycsXG4gIGxldHRlcnM6IFwiU1xcdTI0QzhcXHVGRjMzXFx1MUU5RVxcdTAxNUFcXHUxRTY0XFx1MDE1Q1xcdTFFNjBcXHUwMTYwXFx1MUU2NlxcdTFFNjJcXHUxRTY4XFx1MDIxOFxcdTAxNUVcXHUyQzdFXFx1QTdBOFxcdUE3ODRcIlxufSwge1xuICBiYXNlOiAnVCcsXG4gIGxldHRlcnM6IFwiVFxcdTI0QzlcXHVGRjM0XFx1MUU2QVxcdTAxNjRcXHUxRTZDXFx1MDIxQVxcdTAxNjJcXHUxRTcwXFx1MUU2RVxcdTAxNjZcXHUwMUFDXFx1MDFBRVxcdTAyM0VcXHVBNzg2XCJcbn0sIHtcbiAgYmFzZTogJ1RaJyxcbiAgbGV0dGVyczogXCJcXHVBNzI4XCJcbn0sIHtcbiAgYmFzZTogJ1UnLFxuICBsZXR0ZXJzOiBcIlVcXHUyNENBXFx1RkYzNVxceEQ5XFx4REFcXHhEQlxcdTAxNjhcXHUxRTc4XFx1MDE2QVxcdTFFN0FcXHUwMTZDXFx4RENcXHUwMURCXFx1MDFEN1xcdTAxRDVcXHUwMUQ5XFx1MUVFNlxcdTAxNkVcXHUwMTcwXFx1MDFEM1xcdTAyMTRcXHUwMjE2XFx1MDFBRlxcdTFFRUFcXHUxRUU4XFx1MUVFRVxcdTFFRUNcXHUxRUYwXFx1MUVFNFxcdTFFNzJcXHUwMTcyXFx1MUU3NlxcdTFFNzRcXHUwMjQ0XCJcbn0sIHtcbiAgYmFzZTogJ1YnLFxuICBsZXR0ZXJzOiBcIlZcXHUyNENCXFx1RkYzNlxcdTFFN0NcXHUxRTdFXFx1MDFCMlxcdUE3NUVcXHUwMjQ1XCJcbn0sIHtcbiAgYmFzZTogJ1ZZJyxcbiAgbGV0dGVyczogXCJcXHVBNzYwXCJcbn0sIHtcbiAgYmFzZTogJ1cnLFxuICBsZXR0ZXJzOiBcIldcXHUyNENDXFx1RkYzN1xcdTFFODBcXHUxRTgyXFx1MDE3NFxcdTFFODZcXHUxRTg0XFx1MUU4OFxcdTJDNzJcIlxufSwge1xuICBiYXNlOiAnWCcsXG4gIGxldHRlcnM6IFwiWFxcdTI0Q0RcXHVGRjM4XFx1MUU4QVxcdTFFOENcIlxufSwge1xuICBiYXNlOiAnWScsXG4gIGxldHRlcnM6IFwiWVxcdTI0Q0VcXHVGRjM5XFx1MUVGMlxceEREXFx1MDE3NlxcdTFFRjhcXHUwMjMyXFx1MUU4RVxcdTAxNzhcXHUxRUY2XFx1MUVGNFxcdTAxQjNcXHUwMjRFXFx1MUVGRVwiXG59LCB7XG4gIGJhc2U6ICdaJyxcbiAgbGV0dGVyczogXCJaXFx1MjRDRlxcdUZGM0FcXHUwMTc5XFx1MUU5MFxcdTAxN0JcXHUwMTdEXFx1MUU5MlxcdTFFOTRcXHUwMUI1XFx1MDIyNFxcdTJDN0ZcXHUyQzZCXFx1QTc2MlwiXG59LCB7XG4gIGJhc2U6ICdhJyxcbiAgbGV0dGVyczogXCJhXFx1MjREMFxcdUZGNDFcXHUxRTlBXFx4RTBcXHhFMVxceEUyXFx1MUVBN1xcdTFFQTVcXHUxRUFCXFx1MUVBOVxceEUzXFx1MDEwMVxcdTAxMDNcXHUxRUIxXFx1MUVBRlxcdTFFQjVcXHUxRUIzXFx1MDIyN1xcdTAxRTFcXHhFNFxcdTAxREZcXHUxRUEzXFx4RTVcXHUwMUZCXFx1MDFDRVxcdTAyMDFcXHUwMjAzXFx1MUVBMVxcdTFFQURcXHUxRUI3XFx1MUUwMVxcdTAxMDVcXHUyQzY1XFx1MDI1MFwiXG59LCB7XG4gIGJhc2U6ICdhYScsXG4gIGxldHRlcnM6IFwiXFx1QTczM1wiXG59LCB7XG4gIGJhc2U6ICdhZScsXG4gIGxldHRlcnM6IFwiXFx4RTZcXHUwMUZEXFx1MDFFM1wiXG59LCB7XG4gIGJhc2U6ICdhbycsXG4gIGxldHRlcnM6IFwiXFx1QTczNVwiXG59LCB7XG4gIGJhc2U6ICdhdScsXG4gIGxldHRlcnM6IFwiXFx1QTczN1wiXG59LCB7XG4gIGJhc2U6ICdhdicsXG4gIGxldHRlcnM6IFwiXFx1QTczOVxcdUE3M0JcIlxufSwge1xuICBiYXNlOiAnYXknLFxuICBsZXR0ZXJzOiBcIlxcdUE3M0RcIlxufSwge1xuICBiYXNlOiAnYicsXG4gIGxldHRlcnM6IFwiYlxcdTI0RDFcXHVGRjQyXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MDE4MFxcdTAxODNcXHUwMjUzXCJcbn0sIHtcbiAgYmFzZTogJ2MnLFxuICBsZXR0ZXJzOiBcImNcXHUyNEQyXFx1RkY0M1xcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHhFN1xcdTFFMDlcXHUwMTg4XFx1MDIzQ1xcdUE3M0ZcXHUyMTg0XCJcbn0sIHtcbiAgYmFzZTogJ2QnLFxuICBsZXR0ZXJzOiBcImRcXHUyNEQzXFx1RkY0NFxcdTFFMEJcXHUwMTBGXFx1MUUwRFxcdTFFMTFcXHUxRTEzXFx1MUUwRlxcdTAxMTFcXHUwMThDXFx1MDI1NlxcdTAyNTdcXHVBNzdBXCJcbn0sIHtcbiAgYmFzZTogJ2R6JyxcbiAgbGV0dGVyczogXCJcXHUwMUYzXFx1MDFDNlwiXG59LCB7XG4gIGJhc2U6ICdlJyxcbiAgbGV0dGVyczogXCJlXFx1MjRENFxcdUZGNDVcXHhFOFxceEU5XFx4RUFcXHUxRUMxXFx1MUVCRlxcdTFFQzVcXHUxRUMzXFx1MUVCRFxcdTAxMTNcXHUxRTE1XFx1MUUxN1xcdTAxMTVcXHUwMTE3XFx4RUJcXHUxRUJCXFx1MDExQlxcdTAyMDVcXHUwMjA3XFx1MUVCOVxcdTFFQzdcXHUwMjI5XFx1MUUxRFxcdTAxMTlcXHUxRTE5XFx1MUUxQlxcdTAyNDdcXHUwMjVCXFx1MDFERFwiXG59LCB7XG4gIGJhc2U6ICdmJyxcbiAgbGV0dGVyczogXCJmXFx1MjRENVxcdUZGNDZcXHUxRTFGXFx1MDE5MlxcdUE3N0NcIlxufSwge1xuICBiYXNlOiAnZycsXG4gIGxldHRlcnM6IFwiZ1xcdTI0RDZcXHVGRjQ3XFx1MDFGNVxcdTAxMURcXHUxRTIxXFx1MDExRlxcdTAxMjFcXHUwMUU3XFx1MDEyM1xcdTAxRTVcXHUwMjYwXFx1QTdBMVxcdTFENzlcXHVBNzdGXCJcbn0sIHtcbiAgYmFzZTogJ2gnLFxuICBsZXR0ZXJzOiBcImhcXHUyNEQ3XFx1RkY0OFxcdTAxMjVcXHUxRTIzXFx1MUUyN1xcdTAyMUZcXHUxRTI1XFx1MUUyOVxcdTFFMkJcXHUxRTk2XFx1MDEyN1xcdTJDNjhcXHUyQzc2XFx1MDI2NVwiXG59LCB7XG4gIGJhc2U6ICdodicsXG4gIGxldHRlcnM6IFwiXFx1MDE5NVwiXG59LCB7XG4gIGJhc2U6ICdpJyxcbiAgbGV0dGVyczogXCJpXFx1MjREOFxcdUZGNDlcXHhFQ1xceEVEXFx4RUVcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHhFRlxcdTFFMkZcXHUxRUM5XFx1MDFEMFxcdTAyMDlcXHUwMjBCXFx1MUVDQlxcdTAxMkZcXHUxRTJEXFx1MDI2OFxcdTAxMzFcIlxufSwge1xuICBiYXNlOiAnaicsXG4gIGxldHRlcnM6IFwialxcdTI0RDlcXHVGRjRBXFx1MDEzNVxcdTAxRjBcXHUwMjQ5XCJcbn0sIHtcbiAgYmFzZTogJ2snLFxuICBsZXR0ZXJzOiBcImtcXHUyNERBXFx1RkY0QlxcdTFFMzFcXHUwMUU5XFx1MUUzM1xcdTAxMzdcXHUxRTM1XFx1MDE5OVxcdTJDNkFcXHVBNzQxXFx1QTc0M1xcdUE3NDVcXHVBN0EzXCJcbn0sIHtcbiAgYmFzZTogJ2wnLFxuICBsZXR0ZXJzOiBcImxcXHUyNERCXFx1RkY0Q1xcdTAxNDBcXHUwMTNBXFx1MDEzRVxcdTFFMzdcXHUxRTM5XFx1MDEzQ1xcdTFFM0RcXHUxRTNCXFx1MDE3RlxcdTAxNDJcXHUwMTlBXFx1MDI2QlxcdTJDNjFcXHVBNzQ5XFx1QTc4MVxcdUE3NDdcIlxufSwge1xuICBiYXNlOiAnbGonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzlcIlxufSwge1xuICBiYXNlOiAnbScsXG4gIGxldHRlcnM6IFwibVxcdTI0RENcXHVGRjREXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MDI3MVxcdTAyNkZcIlxufSwge1xuICBiYXNlOiAnbicsXG4gIGxldHRlcnM6IFwiblxcdTI0RERcXHVGRjRFXFx1MDFGOVxcdTAxNDRcXHhGMVxcdTFFNDVcXHUwMTQ4XFx1MUU0N1xcdTAxNDZcXHUxRTRCXFx1MUU0OVxcdTAxOUVcXHUwMjcyXFx1MDE0OVxcdUE3OTFcXHVBN0E1XCJcbn0sIHtcbiAgYmFzZTogJ25qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNDXCJcbn0sIHtcbiAgYmFzZTogJ28nLFxuICBsZXR0ZXJzOiBcIm9cXHUyNERFXFx1RkY0RlxceEYyXFx4RjNcXHhGNFxcdTFFRDNcXHUxRUQxXFx1MUVEN1xcdTFFRDVcXHhGNVxcdTFFNERcXHUwMjJEXFx1MUU0RlxcdTAxNERcXHUxRTUxXFx1MUU1M1xcdTAxNEZcXHUwMjJGXFx1MDIzMVxceEY2XFx1MDIyQlxcdTFFQ0ZcXHUwMTUxXFx1MDFEMlxcdTAyMERcXHUwMjBGXFx1MDFBMVxcdTFFRERcXHUxRURCXFx1MUVFMVxcdTFFREZcXHUxRUUzXFx1MUVDRFxcdTFFRDlcXHUwMUVCXFx1MDFFRFxceEY4XFx1MDFGRlxcdTAyNTRcXHVBNzRCXFx1QTc0RFxcdTAyNzVcIlxufSwge1xuICBiYXNlOiAnb2knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTNcIlxufSwge1xuICBiYXNlOiAnb3UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjNcIlxufSwge1xuICBiYXNlOiAnb28nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEZcIlxufSwge1xuICBiYXNlOiAncCcsXG4gIGxldHRlcnM6IFwicFxcdTI0REZcXHVGRjUwXFx1MUU1NVxcdTFFNTdcXHUwMUE1XFx1MUQ3RFxcdUE3NTFcXHVBNzUzXFx1QTc1NVwiXG59LCB7XG4gIGJhc2U6ICdxJyxcbiAgbGV0dGVyczogXCJxXFx1MjRFMFxcdUZGNTFcXHUwMjRCXFx1QTc1N1xcdUE3NTlcIlxufSwge1xuICBiYXNlOiAncicsXG4gIGxldHRlcnM6IFwiclxcdTI0RTFcXHVGRjUyXFx1MDE1NVxcdTFFNTlcXHUwMTU5XFx1MDIxMVxcdTAyMTNcXHUxRTVCXFx1MUU1RFxcdTAxNTdcXHUxRTVGXFx1MDI0RFxcdTAyN0RcXHVBNzVCXFx1QTdBN1xcdUE3ODNcIlxufSwge1xuICBiYXNlOiAncycsXG4gIGxldHRlcnM6IFwic1xcdTI0RTJcXHVGRjUzXFx4REZcXHUwMTVCXFx1MUU2NVxcdTAxNURcXHUxRTYxXFx1MDE2MVxcdTFFNjdcXHUxRTYzXFx1MUU2OVxcdTAyMTlcXHUwMTVGXFx1MDIzRlxcdUE3QTlcXHVBNzg1XFx1MUU5QlwiXG59LCB7XG4gIGJhc2U6ICd0JyxcbiAgbGV0dGVyczogXCJ0XFx1MjRFM1xcdUZGNTRcXHUxRTZCXFx1MUU5N1xcdTAxNjVcXHUxRTZEXFx1MDIxQlxcdTAxNjNcXHUxRTcxXFx1MUU2RlxcdTAxNjdcXHUwMUFEXFx1MDI4OFxcdTJDNjZcXHVBNzg3XCJcbn0sIHtcbiAgYmFzZTogJ3R6JyxcbiAgbGV0dGVyczogXCJcXHVBNzI5XCJcbn0sIHtcbiAgYmFzZTogJ3UnLFxuICBsZXR0ZXJzOiBcInVcXHUyNEU0XFx1RkY1NVxceEY5XFx4RkFcXHhGQlxcdTAxNjlcXHUxRTc5XFx1MDE2QlxcdTFFN0JcXHUwMTZEXFx4RkNcXHUwMURDXFx1MDFEOFxcdTAxRDZcXHUwMURBXFx1MUVFN1xcdTAxNkZcXHUwMTcxXFx1MDFENFxcdTAyMTVcXHUwMjE3XFx1MDFCMFxcdTFFRUJcXHUxRUU5XFx1MUVFRlxcdTFFRURcXHUxRUYxXFx1MUVFNVxcdTFFNzNcXHUwMTczXFx1MUU3N1xcdTFFNzVcXHUwMjg5XCJcbn0sIHtcbiAgYmFzZTogJ3YnLFxuICBsZXR0ZXJzOiBcInZcXHUyNEU1XFx1RkY1NlxcdTFFN0RcXHUxRTdGXFx1MDI4QlxcdUE3NUZcXHUwMjhDXCJcbn0sIHtcbiAgYmFzZTogJ3Z5JyxcbiAgbGV0dGVyczogXCJcXHVBNzYxXCJcbn0sIHtcbiAgYmFzZTogJ3cnLFxuICBsZXR0ZXJzOiBcIndcXHUyNEU2XFx1RkY1N1xcdTFFODFcXHUxRTgzXFx1MDE3NVxcdTFFODdcXHUxRTg1XFx1MUU5OFxcdTFFODlcXHUyQzczXCJcbn0sIHtcbiAgYmFzZTogJ3gnLFxuICBsZXR0ZXJzOiBcInhcXHUyNEU3XFx1RkY1OFxcdTFFOEJcXHUxRThEXCJcbn0sIHtcbiAgYmFzZTogJ3knLFxuICBsZXR0ZXJzOiBcInlcXHUyNEU4XFx1RkY1OVxcdTFFRjNcXHhGRFxcdTAxNzdcXHUxRUY5XFx1MDIzM1xcdTFFOEZcXHhGRlxcdTFFRjdcXHUxRTk5XFx1MUVGNVxcdTAxQjRcXHUwMjRGXFx1MUVGRlwiXG59LCB7XG4gIGJhc2U6ICd6JyxcbiAgbGV0dGVyczogXCJ6XFx1MjRFOVxcdUZGNUFcXHUwMTdBXFx1MUU5MVxcdTAxN0NcXHUwMTdFXFx1MUU5M1xcdTFFOTVcXHUwMUI2XFx1MDIyNVxcdTAyNDBcXHUyQzZDXFx1QTc2M1wiXG59XTtcbnZhciBhbnlEaWFjcml0aWMgPSBuZXcgUmVnRXhwKCdbJyArIGRpYWNyaXRpY3MubWFwKGZ1bmN0aW9uIChkKSB7XG4gIHJldHVybiBkLmxldHRlcnM7XG59KS5qb2luKCcnKSArICddJywgJ2cnKTtcbnZhciBkaWFjcml0aWNUb0Jhc2UgPSB7fTtcbmZvciAodmFyIGkgPSAwOyBpIDwgZGlhY3JpdGljcy5sZW5ndGg7IGkrKykge1xuICB2YXIgZGlhY3JpdGljID0gZGlhY3JpdGljc1tpXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBkaWFjcml0aWMubGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgIGRpYWNyaXRpY1RvQmFzZVtkaWFjcml0aWMubGV0dGVyc1tqXV0gPSBkaWFjcml0aWMuYmFzZTtcbiAgfVxufVxudmFyIHN0cmlwRGlhY3JpdGljcyA9IGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGFueURpYWNyaXRpYywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGRpYWNyaXRpY1RvQmFzZVttYXRjaF07XG4gIH0pO1xufTtcblxudmFyIG1lbW9pemVkU3RyaXBEaWFjcml0aWNzRm9ySW5wdXQgPSBtZW1vaXplT25lKHN0cmlwRGlhY3JpdGljcyk7XG52YXIgdHJpbVN0cmluZyA9IGZ1bmN0aW9uIHRyaW1TdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufTtcbnZhciBkZWZhdWx0U3RyaW5naWZ5ID0gZnVuY3Rpb24gZGVmYXVsdFN0cmluZ2lmeShvcHRpb24pIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbi5sYWJlbCwgXCIgXCIpLmNvbmNhdChvcHRpb24udmFsdWUpO1xufTtcbnZhciBjcmVhdGVGaWx0ZXIgPSBmdW5jdGlvbiBjcmVhdGVGaWx0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAob3B0aW9uLCByYXdJbnB1dCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmIChvcHRpb24uZGF0YS5fX2lzTmV3X18pIHJldHVybiB0cnVlO1xuICAgIHZhciBfaWdub3JlQ2FzZSRpZ25vcmVBY2MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQWNjZW50czogdHJ1ZSxcbiAgICAgICAgc3RyaW5naWZ5OiBkZWZhdWx0U3RyaW5naWZ5LFxuICAgICAgICB0cmltOiB0cnVlLFxuICAgICAgICBtYXRjaEZyb206ICdhbnknXG4gICAgICB9LCBjb25maWcpLFxuICAgICAgaWdub3JlQ2FzZSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVDYXNlLFxuICAgICAgaWdub3JlQWNjZW50cyA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVBY2NlbnRzLFxuICAgICAgc3RyaW5naWZ5ID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLnN0cmluZ2lmeSxcbiAgICAgIHRyaW0gPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2MudHJpbSxcbiAgICAgIG1hdGNoRnJvbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5tYXRjaEZyb207XG4gICAgdmFyIGlucHV0ID0gdHJpbSA/IHRyaW1TdHJpbmcocmF3SW5wdXQpIDogcmF3SW5wdXQ7XG4gICAgdmFyIGNhbmRpZGF0ZSA9IHRyaW0gPyB0cmltU3RyaW5nKHN0cmluZ2lmeShvcHRpb24pKSA6IHN0cmluZ2lmeShvcHRpb24pO1xuICAgIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKGlnbm9yZUFjY2VudHMpIHtcbiAgICAgIGlucHV0ID0gbWVtb2l6ZWRTdHJpcERpYWNyaXRpY3NGb3JJbnB1dChpbnB1dCk7XG4gICAgICBjYW5kaWRhdGUgPSBzdHJpcERpYWNyaXRpY3MoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoRnJvbSA9PT0gJ3N0YXJ0JyA/IGNhbmRpZGF0ZS5zdWJzdHIoMCwgaW5wdXQubGVuZ3RoKSA9PT0gaW5wdXQgOiBjYW5kaWRhdGUuaW5kZXhPZihpbnB1dCkgPiAtMTtcbiAgfTtcbn07XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpbm5lclJlZlwiXTtcbmZ1bmN0aW9uIER1bW15SW5wdXQoX3JlZikge1xuICB2YXIgaW5uZXJSZWYgPSBfcmVmLmlubmVyUmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIC8vIFJlbW92ZSBhbmltYXRpb24gcHJvcHMgbm90IG1lYW50IGZvciBIVE1MIGVsZW1lbnRzXG4gIHZhciBmaWx0ZXJlZFByb3BzID0gcmVtb3ZlUHJvcHMocHJvcHMsICdvbkV4aXRlZCcsICdpbicsICdlbnRlcicsICdleGl0JywgJ2FwcGVhcicpO1xuICByZXR1cm4ganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgZmlsdGVyZWRQcm9wcywge1xuICAgIGNzczogLyojX19QVVJFX18qL2Nzcyh7XG4gICAgICBsYWJlbDogJ2R1bW15SW5wdXQnLFxuICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgIGJhY2tncm91bmQ6IDAsXG4gICAgICBib3JkZXI6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgb3V0bGluZTogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgd2lkdGg6IDEsXG4gICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKC4wMSknXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkR1bW15SW5wdXQ7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrUjFiVzE1U1c1d2RYUXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1RTSXNJbVpwYkdVaU9pSkVkVzF0ZVVsdWNIVjBMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVm1JSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dhbk40SUgwZ1puSnZiU0FuUUdWdGIzUnBiMjR2Y21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnY21WdGIzWmxVSEp2Y0hNZ2ZTQm1jbTl0SUNjdUxpOTFkR2xzY3ljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlFUjFiVzE1U1c1d2RYUW9lMXh1SUNCcGJtNWxjbEpsWml4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25hVzV3ZFhRblhTQW1JSHRjYmlBZ2NtVmhaRzl1YkhrZ2FXNXVaWEpTWldZNklGSmxaanhJVkUxTVNXNXdkWFJGYkdWdFpXNTBQanRjYm4wcElIdGNiaUFnTHk4Z1VtVnRiM1psSUdGdWFXMWhkR2x2YmlCd2NtOXdjeUJ1YjNRZ2JXVmhiblFnWm05eUlFaFVUVXdnWld4bGJXVnVkSE5jYmlBZ1kyOXVjM1FnWm1sc2RHVnlaV1JRY205d2N5QTlJSEpsYlc5MlpWQnliM0J6S0Z4dUlDQWdJSEJ5YjNCekxGeHVJQ0FnSUNkdmJrVjRhWFJsWkNjc1hHNGdJQ0FnSjJsdUp5eGNiaUFnSUNBblpXNTBaWEluTEZ4dUlDQWdJQ2RsZUdsMEp5eGNiaUFnSUNBbllYQndaV0Z5SjF4dUlDQXBPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdsdWNIVjBYRzRnSUNBZ0lDQnlaV1k5ZTJsdWJtVnlVbVZtZlZ4dUlDQWdJQ0FnZXk0dUxtWnBiSFJsY21Wa1VISnZjSE45WEc0Z0lDQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lDQWdiR0ZpWld3NklDZGtkVzF0ZVVsdWNIVjBKeXhjYmlBZ0lDQWdJQ0FnTHk4Z1oyVjBJSEpwWkNCdlppQmhibmtnWkdWbVlYVnNkQ0J6ZEhsc1pYTmNiaUFnSUNBZ0lDQWdZbUZqYTJkeWIzVnVaRG9nTUN4Y2JpQWdJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhSb2FYTWdhR2xrWlhNZ2RHaGxJR1pzWVhOb2FXNW5JR04xY25OdmNseHVJQ0FnSUNBZ0lDQmpZWEpsZEVOdmJHOXlPaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUNBZ0lDQm1iMjUwVTJsNlpUb2dKMmx1YUdWeWFYUW5MRnh1SUNBZ0lDQWdJQ0JuY21sa1FYSmxZVG9nSnpFZ0x5QXhJQzhnTWlBdklETW5MRnh1SUNBZ0lDQWdJQ0J2ZFhSc2FXNWxPaUF3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhkcGRHaHZkWFFnWUhkcFpIUm9ZQ0JpY205M2MyVnljeUIzYjI0bmRDQmhiR3h2ZHlCbWIyTjFjMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dNU3hjYmx4dUlDQWdJQ0FnSUNBdkx5QnlaVzF2ZG1VZ1kzVnljMjl5SUc5dUlHUmxjMnQwYjNCY2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUNkMGNtRnVjM0JoY21WdWRDY3NYRzVjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnRiM1psSUdOMWNuTnZjaUJ2YmlCdGIySnBiR1VnZDJocGJITjBJRzFoYVc1MFlXbHVhVzVuSUZ3aWMyTnliMnhzSUdsdWRHOGdkbWxsZDF3aUlHSmxhR0YyYVc5MWNseHVJQ0FnSUNBZ0lDQnNaV1owT2lBdE1UQXdMRnh1SUNBZ0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnSUNCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnSUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUFuYzJOaGJHVW9MakF4S1Njc1hHNGdJQ0FnSUNCOWZWeHVJQ0FnSUM4K1hHNGdJQ2s3WEc1OVhHNGlYWDA9ICovXCIpXG4gIH0pKTtcbn1cblxudmFyIGNhbmNlbFNjcm9sbCA9IGZ1bmN0aW9uIGNhbmNlbFNjcm9sbChldmVudCkge1xuICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuZnVuY3Rpb24gdXNlU2Nyb2xsQ2FwdHVyZShfcmVmKSB7XG4gIHZhciBpc0VuYWJsZWQgPSBfcmVmLmlzRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSA9IF9yZWYub25Cb3R0b21BcnJpdmUsXG4gICAgb25Cb3R0b21MZWF2ZSA9IF9yZWYub25Cb3R0b21MZWF2ZSxcbiAgICBvblRvcEFycml2ZSA9IF9yZWYub25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSA9IF9yZWYub25Ub3BMZWF2ZTtcbiAgdmFyIGlzQm90dG9tID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlzVG9wID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIHRvdWNoU3RhcnQgPSB1c2VSZWYoMCk7XG4gIHZhciBzY3JvbGxUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBoYW5kbGVFdmVudERlbHRhID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBkZWx0YSkge1xuICAgIGlmIChzY3JvbGxUYXJnZXQuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudCxcbiAgICAgIHNjcm9sbFRvcCA9IF9zY3JvbGxUYXJnZXQkY3VycmVudC5zY3JvbGxUb3AsXG4gICAgICBzY3JvbGxIZWlnaHQgPSBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgY2xpZW50SGVpZ2h0ID0gX3Njcm9sbFRhcmdldCRjdXJyZW50LmNsaWVudEhlaWdodDtcbiAgICB2YXIgdGFyZ2V0ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wO1xuICAgIHZhciBzaG91bGRDYW5jZWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGJvdHRvbS90b3AgZmxhZ3NcbiAgICBpZiAoYXZhaWxhYmxlU2Nyb2xsID4gZGVsdGEgJiYgaXNCb3R0b20uY3VycmVudCkge1xuICAgICAgaWYgKG9uQm90dG9tTGVhdmUpIG9uQm90dG9tTGVhdmUoZXZlbnQpO1xuICAgICAgaXNCb3R0b20uY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGlzVG9wLmN1cnJlbnQpIHtcbiAgICAgIGlmIChvblRvcExlYXZlKSBvblRvcExlYXZlKGV2ZW50KTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBib3R0b20gbGltaXRcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSB7XG4gICAgICBpZiAob25Cb3R0b21BcnJpdmUgJiYgIWlzQm90dG9tLmN1cnJlbnQpIHtcbiAgICAgICAgb25Cb3R0b21BcnJpdmUoZXZlbnQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHNjcm9sbEhlaWdodDtcbiAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICBpc0JvdHRvbS5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gdG9wIGxpbWl0XG4gICAgfSBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmIC1kZWx0YSA+IHNjcm9sbFRvcCkge1xuICAgICAgaWYgKG9uVG9wQXJyaXZlICYmICFpc1RvcC5jdXJyZW50KSB7XG4gICAgICAgIG9uVG9wQXJyaXZlKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSAwO1xuICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGNhbmNlbCBzY3JvbGxcbiAgICBpZiAoc2hvdWxkQ2FuY2VsU2Nyb2xsKSB7XG4gICAgICBjYW5jZWxTY3JvbGwoZXZlbnQpO1xuICAgIH1cbiAgfSwgW29uQm90dG9tQXJyaXZlLCBvbkJvdHRvbUxlYXZlLCBvblRvcEFycml2ZSwgb25Ub3BMZWF2ZV0pO1xuICB2YXIgb25XaGVlbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGV2ZW50LmRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBvblRvdWNoU3RhcnQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBzZXQgdG91Y2ggc3RhcnQgc28gd2UgY2FuIGNhbGN1bGF0ZSB0b3VjaG1vdmUgZGVsdGFcbiAgICB0b3VjaFN0YXJ0LmN1cnJlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICB9LCBbXSk7XG4gIHZhciBvblRvdWNoTW92ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkZWx0YVkgPSB0b3VjaFN0YXJ0LmN1cnJlbnQgLSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBzdGFydExpc3RlbmluZyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbCkge1xuICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gZWxlbWVudCBpcyBhdmFpbGFibGUgdG8gYXR0YWNoIHRvXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIHZhciBub3RQYXNzaXZlID0gc3VwcG9ydHNQYXNzaXZlRXZlbnRzID8ge1xuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9IDogZmFsc2U7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsLCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwgbm90UGFzc2l2ZSk7XG4gIH0sIFtvblRvdWNoTW92ZSwgb25Ub3VjaFN0YXJ0LCBvbldoZWVsXSk7XG4gIHZhciBzdG9wTGlzdGVuaW5nID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsKSB7XG4gICAgLy8gYmFpbCBlYXJseSBpZiBubyBlbGVtZW50IGlzIGF2YWlsYWJsZSB0byBkZXRhY2ggZnJvbVxuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIGZhbHNlKTtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgfSwgW29uVG91Y2hNb3ZlLCBvblRvdWNoU3RhcnQsIG9uV2hlZWxdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHZhciBlbGVtZW50ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgc3RhcnRMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgfTtcbiAgfSwgW2lzRW5hYmxlZCwgc3RhcnRMaXN0ZW5pbmcsIHN0b3BMaXN0ZW5pbmddKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG52YXIgU1RZTEVfS0VZUyA9IFsnYm94U2l6aW5nJywgJ2hlaWdodCcsICdvdmVyZmxvdycsICdwYWRkaW5nUmlnaHQnLCAncG9zaXRpb24nXTtcbnZhciBMT0NLX1NUWUxFUyA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIGFjY291bnQgZm9yIHBvc3NpYmxlIGRlY2xhcmF0aW9uIGB3aWR0aDogMTAwJTtgIG9uIGJvZHlcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn07XG5mdW5jdGlvbiBwcmV2ZW50VG91Y2hNb3ZlKGUpIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gYWxsb3dUb3VjaE1vdmUoZSkge1xuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gcHJldmVudEluZXJ0aWFTY3JvbGwoKSB7XG4gIHZhciB0b3AgPSB0aGlzLnNjcm9sbFRvcDtcbiAgdmFyIHRvdGFsU2Nyb2xsID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG4gIHZhciBjdXJyZW50U2Nyb2xsID0gdG9wICsgdGhpcy5vZmZzZXRIZWlnaHQ7XG4gIGlmICh0b3AgPT09IDApIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDE7XG4gIH0gZWxzZSBpZiAoY3VycmVudFNjcm9sbCA9PT0gdG90YWxTY3JvbGwpIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRvcCAtIDE7XG4gIH1cbn1cblxuLy8gYG9udG91Y2hzdGFydGAgY2hlY2sgd29ya3Mgb24gbW9zdCBicm93c2Vyc1xuLy8gYG1heFRvdWNoUG9pbnRzYCB3b3JrcyBvbiBJRTEwLzExIGFuZCBTdXJmYWNlXG5mdW5jdGlvbiBpc1RvdWNoRGV2aWNlKCkge1xuICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cztcbn1cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xudmFyIGFjdGl2ZVNjcm9sbExvY2tzID0gMDtcbnZhciBsaXN0ZW5lck9wdGlvbnMgPSB7XG4gIGNhcHR1cmU6IGZhbHNlLFxuICBwYXNzaXZlOiBmYWxzZVxufTtcbmZ1bmN0aW9uIHVzZVNjcm9sbExvY2soX3JlZikge1xuICB2YXIgaXNFbmFibGVkID0gX3JlZi5pc0VuYWJsZWQsXG4gICAgX3JlZiRhY2NvdW50Rm9yU2Nyb2xsID0gX3JlZi5hY2NvdW50Rm9yU2Nyb2xsYmFycyxcbiAgICBhY2NvdW50Rm9yU2Nyb2xsYmFycyA9IF9yZWYkYWNjb3VudEZvclNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWNjb3VudEZvclNjcm9sbDtcbiAgdmFyIG9yaWdpbmFsU3R5bGVzID0gdXNlUmVmKHt9KTtcbiAgdmFyIHNjcm9sbFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGFkZFNjcm9sbExvY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuO1xuICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciB0YXJnZXRTdHlsZSA9IHRhcmdldCAmJiB0YXJnZXQuc3R5bGU7XG4gICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzKSB7XG4gICAgICAvLyBzdG9yZSBhbnkgc3R5bGVzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgYm9keVxuICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRhcmdldFN0eWxlICYmIHRhcmdldFN0eWxlW2tleV07XG4gICAgICAgIG9yaWdpbmFsU3R5bGVzLmN1cnJlbnRba2V5XSA9IHZhbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBsb2NrIHN0eWxlcyBhbmQgcGFkZGluZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzY3JvbGwgbG9ja1xuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIHZhciBjdXJyZW50UGFkZGluZyA9IHBhcnNlSW50KG9yaWdpbmFsU3R5bGVzLmN1cnJlbnQucGFkZGluZ1JpZ2h0LCAxMCkgfHwgMDtcbiAgICAgIHZhciBjbGllbnRXaWR0aCA9IGRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDogMDtcbiAgICAgIHZhciBhZGp1c3RlZFBhZGRpbmcgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNsaWVudFdpZHRoICsgY3VycmVudFBhZGRpbmcgfHwgMDtcbiAgICAgIE9iamVjdC5rZXlzKExPQ0tfU1RZTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IExPQ0tfU1RZTEVTW2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgIHRhcmdldFN0eWxlLnBhZGRpbmdSaWdodCA9IFwiXCIuY29uY2F0KGFkanVzdGVkUGFkZGluZywgXCJweFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhY2NvdW50IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIC8vIE1vYmlsZSBTYWZhcmkgaWdub3JlcyB7IG92ZXJmbG93OiBoaWRkZW4gfSBkZWNsYXJhdGlvbiBvbiB0aGUgYm9keS5cbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuXG4gICAgICAvLyBBbGxvdyBzY3JvbGwgb24gcHJvdmlkZWQgdGFyZ2V0XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzICs9IDE7XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB2YXIgcmVtb3ZlU2Nyb2xsTG9jayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTtcblxuICAgIC8vIHNhZmVseSBkZWNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzID0gTWF0aC5tYXgoYWN0aXZlU2Nyb2xsTG9ja3MgLSAxLCAwKTtcblxuICAgIC8vIHJlYXBwbHkgb3JpZ2luYWwgYm9keSBzdHlsZXMsIGlmIGFueVxuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIFNUWUxFX0tFWVMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBvcmlnaW5hbFN0eWxlcy5jdXJyZW50W2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0b3VjaCBsaXN0ZW5lcnNcbiAgICBpZiAodGFyZ2V0ICYmIGlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnRUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudDtcbiAgICBhZGRTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIH07XG4gIH0sIFtpc0VuYWJsZWQsIGFkZFNjcm9sbExvY2ssIHJlbW92ZVNjcm9sbExvY2tdKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQxKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbnZhciBibHVyU2VsZWN0SW5wdXQgPSBmdW5jdGlvbiBibHVyU2VsZWN0SW5wdXQoZXZlbnQpIHtcbiAgdmFyIGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gIHJldHVybiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG59O1xudmFyIF9yZWYyJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtmZGIwZVwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjBcIlxufSA6IHtcbiAgbmFtZTogXCJicDhjdWEtU2Nyb2xsTWFuYWdlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjA7bGFiZWw6U2Nyb2xsTWFuYWdlcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmpjbTlzYkUxaGJtRm5aWEl1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXOUVWU0lzSW1acGJHVWlPaUpUWTNKdmJHeE5ZVzVoWjJWeUxuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnYW5ONElIMGdabkp2YlNBblFHVnRiM1JwYjI0dmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ1JuSmhaMjFsYm5Rc0lGSmxZV04wUld4bGJXVnVkQ3dnVW1WbVEyRnNiR0poWTJzc0lFMXZkWE5sUlhabGJuUWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2RYTmxVMk55YjJ4c1EyRndkSFZ5WlNCbWNtOXRJQ2N1TDNWelpWTmpjbTlzYkVOaGNIUjFjbVVuTzF4dWFXMXdiM0owSUhWelpWTmpjbTlzYkV4dlkyc2dabkp2YlNBbkxpOTFjMlZUWTNKdmJHeE1iMk5ySnp0Y2JseHVhVzUwWlhKbVlXTmxJRkJ5YjNCeklIdGNiaUFnY21WaFpHOXViSGtnWTJocGJHUnlaVzQ2SUNoeVpXWTZJRkpsWmtOaGJHeGlZV05yUEVoVVRVeEZiR1Z0Wlc1MFBpa2dQVDRnVW1WaFkzUkZiR1Z0Wlc1ME8xeHVJQ0J5WldGa2IyNXNlU0JzYjJOclJXNWhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdjbVZoWkc5dWJIa2dZMkZ3ZEhWeVpVVnVZV0pzWldRNklHSnZiMnhsWVc0N1hHNGdJSEpsWVdSdmJteDVJRzl1UW05MGRHOXRRWEp5YVhabFB6b2dLR1YyWlc1ME9pQlhhR1ZsYkVWMlpXNTBJSHdnVkc5MVkyaEZkbVZ1ZENrZ1BUNGdkbTlwWkR0Y2JpQWdjbVZoWkc5dWJIa2diMjVDYjNSMGIyMU1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc0Z0lISmxZV1J2Ym14NUlHOXVWRzl3UVhKeWFYWmxQem9nS0dWMlpXNTBPaUJYYUdWbGJFVjJaVzUwSUh3Z1ZHOTFZMmhGZG1WdWRDa2dQVDRnZG05cFpEdGNiaUFnY21WaFpHOXViSGtnYjI1VWIzQk1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc1OVhHNWNibU52Ym5OMElHSnNkWEpUWld4bFkzUkpibkIxZENBOUlDaGxkbVZ1ZERvZ1RXOTFjMlZGZG1WdWREeElWRTFNUkdsMlJXeGxiV1Z1ZEQ0cElEMCtJSHRjYmlBZ1kyOXVjM1FnWld4bGJXVnVkQ0E5SUdWMlpXNTBMblJoY21kbGRDQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQmxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQW1KbHh1SUNBZ0lDaGxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQmhjeUJJVkUxTVJXeGxiV1Z1ZENrdVlteDFjaWdwWEc0Z0lDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCVFkzSnZiR3hOWVc1aFoyVnlLSHRjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR3h2WTJ0RmJtRmliR1ZrTEZ4dUlDQmpZWEIwZFhKbFJXNWhZbXhsWkNBOUlIUnlkV1VzWEc0Z0lHOXVRbTkwZEc5dFFYSnlhWFpsTEZ4dUlDQnZia0p2ZEhSdmJVeGxZWFpsTEZ4dUlDQnZibFJ2Y0VGeWNtbDJaU3hjYmlBZ2IyNVViM0JNWldGMlpTeGNibjA2SUZCeWIzQnpLU0I3WEc0Z0lHTnZibk4wSUhObGRGTmpjbTlzYkVOaGNIUjFjbVZVWVhKblpYUWdQU0IxYzJWVFkzSnZiR3hEWVhCMGRYSmxLSHRjYmlBZ0lDQnBjMFZ1WVdKc1pXUTZJR05oY0hSMWNtVkZibUZpYkdWa0xGeHVJQ0FnSUc5dVFtOTBkRzl0UVhKeWFYWmxMRnh1SUNBZ0lHOXVRbTkwZEc5dFRHVmhkbVVzWEc0Z0lDQWdiMjVVYjNCQmNuSnBkbVVzWEc0Z0lDQWdiMjVVYjNCTVpXRjJaU3hjYmlBZ2ZTazdYRzRnSUdOdmJuTjBJSE5sZEZOamNtOXNiRXh2WTJ0VVlYSm5aWFFnUFNCMWMyVlRZM0p2Ykd4TWIyTnJLSHNnYVhORmJtRmliR1ZrT2lCc2IyTnJSVzVoWW14bFpDQjlLVHRjYmx4dUlDQmpiMjV6ZENCMFlYSm5aWFJTWldZNklGSmxaa05oYkd4aVlXTnJQRWhVVFV4RmJHVnRaVzUwUGlBOUlDaGxiR1Z0Wlc1MEtTQTlQaUI3WEc0Z0lDQWdjMlYwVTJOeWIyeHNRMkZ3ZEhWeVpWUmhjbWRsZENobGJHVnRaVzUwS1R0Y2JpQWdJQ0J6WlhSVFkzSnZiR3hNYjJOclZHRnlaMlYwS0dWc1pXMWxiblFwTzF4dUlDQjlPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEVaeVlXZHRaVzUwUGx4dUlDQWdJQ0FnZTJ4dlkydEZibUZpYkdWa0lDWW1JQ2hjYmlBZ0lDQWdJQ0FnUEdScGRseHVJQ0FnSUNBZ0lDQWdJRzl1UTJ4cFkyczllMkpzZFhKVFpXeGxZM1JKYm5CMWRIMWNiaUFnSUNBZ0lDQWdJQ0JqYzNNOWUzc2djRzl6YVhScGIyNDZJQ2RtYVhobFpDY3NJR3hsWm5RNklEQXNJR0p2ZEhSdmJUb2dNQ3dnY21sbmFIUTZJREFzSUhSdmNEb2dNQ0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpaDBZWEpuWlhSU1pXWXBmVnh1SUNBZ0lEd3ZSbkpoWjIxbGJuUStYRzRnSUNrN1hHNTlYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMVxufTtcbmZ1bmN0aW9uIFNjcm9sbE1hbmFnZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGxvY2tFbmFibGVkID0gX3JlZi5sb2NrRW5hYmxlZCxcbiAgICBfcmVmJGNhcHR1cmVFbmFibGVkID0gX3JlZi5jYXB0dXJlRW5hYmxlZCxcbiAgICBjYXB0dXJlRW5hYmxlZCA9IF9yZWYkY2FwdHVyZUVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlID0gX3JlZi5vbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlID0gX3JlZi5vbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlID0gX3JlZi5vblRvcEFycml2ZSxcbiAgICBvblRvcExlYXZlID0gX3JlZi5vblRvcExlYXZlO1xuICB2YXIgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldCA9IHVzZVNjcm9sbENhcHR1cmUoe1xuICAgIGlzRW5hYmxlZDogY2FwdHVyZUVuYWJsZWQsXG4gICAgb25Cb3R0b21BcnJpdmU6IG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmU6IG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmU6IG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmU6IG9uVG9wTGVhdmVcbiAgfSk7XG4gIHZhciBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7XG4gICAgaXNFbmFibGVkOiBsb2NrRW5hYmxlZFxuICB9KTtcbiAgdmFyIHRhcmdldFJlZiA9IGZ1bmN0aW9uIHRhcmdldFJlZihlbGVtZW50KSB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuICByZXR1cm4ganN4KEZyYWdtZW50LCBudWxsLCBsb2NrRW5hYmxlZCAmJiBqc3goXCJkaXZcIiwge1xuICAgIG9uQ2xpY2s6IGJsdXJTZWxlY3RJbnB1dCxcbiAgICBjc3M6IF9yZWYyJDFcbiAgfSksIGNoaWxkcmVuKHRhcmdldFJlZikpO1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWEwcm80bi1yZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCVcIlxufSA6IHtcbiAgbmFtZTogXCI1a2t4YjItcmVxdWlyZWRJbnB1dC1SZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCU7bGFiZWw6UmVxdWlyZWRJbnB1dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsSmxjWFZwY21Wa1NXNXdkWFF1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXTkpJaXdpWm1sc1pTSTZJbEpsY1hWcGNtVmtTVzV3ZFhRdWRITjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcUlFQnFjM2dnYW5ONElDb3ZYRzVwYlhCdmNuUWdleUJHYjJOMWMwVjJaVzUwU0dGdVpHeGxjaXdnUm5WdVkzUnBiMjVEYjIxd2IyNWxiblFnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1Y2JtTnZibk4wSUZKbGNYVnBjbVZrU1c1d2RYUTZJRVoxYm1OMGFXOXVRMjl0Y0c5dVpXNTBQSHRjYmlBZ2NtVmhaRzl1YkhrZ2JtRnRaVDg2SUhOMGNtbHVaenRjYmlBZ2NtVmhaRzl1YkhrZ2IyNUdiMk4xY3pvZ1JtOWpkWE5GZG1WdWRFaGhibVJzWlhJOFNGUk5URWx1Y0hWMFJXeGxiV1Z1ZEQ0N1hHNTlQaUE5SUNoN0lHNWhiV1VzSUc5dVJtOWpkWE1nZlNrZ1BUNGdLRnh1SUNBOGFXNXdkWFJjYmlBZ0lDQnlaWEYxYVhKbFpGeHVJQ0FnSUc1aGJXVTllMjVoYldWOVhHNGdJQ0FnZEdGaVNXNWtaWGc5ZXkweGZWeHVJQ0FnSUdGeWFXRXRhR2xrWkdWdVBWd2lkSEoxWlZ3aVhHNGdJQ0FnYjI1R2IyTjFjejE3YjI1R2IyTjFjMzFjYmlBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUd4aFltVnNPaUFuY21WeGRXbHlaV1JKYm5CMWRDY3NYRzRnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdjRzlwYm5SbGNrVjJaVzUwY3pvZ0oyNXZibVVuTEZ4dUlDQWdJQ0FnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJQ0FnSUNCaWIzUjBiMjA2SURBc1hHNGdJQ0FnSUNCc1pXWjBPaUF3TEZ4dUlDQWdJQ0FnY21sbmFIUTZJREFzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUgxOVhHNGdJQ0FnTHk4Z1VISmxkbVZ1ZENCZ1UzZHBkR05vYVc1bklHWnliMjBnZFc1amIyNTBjbTlzYkdWa0lIUnZJR052Ym5SeWIyeHNaV1JnSUdWeWNtOXlYRzRnSUNBZ2RtRnNkV1U5WENKY0lseHVJQ0FnSUc5dVEyaGhibWRsUFhzb0tTQTlQaUI3ZlgxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElGSmxjWFZwY21Wa1NXNXdkWFE3WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIFJlcXVpcmVkSW5wdXQgPSBmdW5jdGlvbiBSZXF1aXJlZElucHV0KF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cztcbiAgcmV0dXJuIGpzeChcImlucHV0XCIsIHtcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgY3NzOiBfcmVmMlxuICAgIC8vIFByZXZlbnQgYFN3aXRjaGluZyBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkYCBlcnJvclxuICAgICxcbiAgICB2YWx1ZTogXCJcIixcbiAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoKSB7fVxuICB9KTtcbn07XG52YXIgUmVxdWlyZWRJbnB1dCQxID0gUmVxdWlyZWRJbnB1dDtcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ1c2VyLWFnZW50LWRhdGEtdHlwZXNcIiAvPlxuXG5mdW5jdGlvbiB0ZXN0UGxhdGZvcm0ocmUpIHtcbiAgdmFyIF93aW5kb3ckbmF2aWdhdG9yJHVzZTtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgIT0gbnVsbCA/IHJlLnRlc3QoKChfd2luZG93JG5hdmlnYXRvciR1c2UgPSB3aW5kb3cubmF2aWdhdG9yWyd1c2VyQWdlbnREYXRhJ10pID09PSBudWxsIHx8IF93aW5kb3ckbmF2aWdhdG9yJHVzZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3dpbmRvdyRuYXZpZ2F0b3IkdXNlLnBsYXRmb3JtKSB8fCB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSA6IGZhbHNlO1xufVxuZnVuY3Rpb24gaXNJUGhvbmUoKSB7XG4gIHJldHVybiB0ZXN0UGxhdGZvcm0oL15pUGhvbmUvaSk7XG59XG5mdW5jdGlvbiBpc01hYygpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXk1hYy9pKTtcbn1cbmZ1bmN0aW9uIGlzSVBhZCgpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXmlQYWQvaSkgfHxcbiAgLy8gaVBhZE9TIDEzIGxpZXMgYW5kIHNheXMgaXQncyBhIE1hYywgYnV0IHdlIGNhbiBkaXN0aW5ndWlzaCBieSBkZXRlY3RpbmcgdG91Y2ggc3VwcG9ydC5cbiAgaXNNYWMoKSAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxO1xufVxuZnVuY3Rpb24gaXNJT1MoKSB7XG4gIHJldHVybiBpc0lQaG9uZSgpIHx8IGlzSVBhZCgpO1xufVxuZnVuY3Rpb24gaXNBcHBsZURldmljZSgpIHtcbiAgcmV0dXJuIGlzTWFjKCkgfHwgaXNJT1MoKTtcbn1cblxudmFyIGZvcm1hdEdyb3VwTGFiZWwgPSBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwkMSA9IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25WYWx1ZSQxID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gIHJldHVybiBvcHRpb24udmFsdWU7XG59O1xudmFyIGlzT3B0aW9uRGlzYWJsZWQgPSBmdW5jdGlvbiBpc09wdGlvbkRpc2FibGVkKG9wdGlvbikge1xuICByZXR1cm4gISFvcHRpb24uaXNEaXNhYmxlZDtcbn07XG5cbnZhciBkZWZhdWx0U3R5bGVzID0ge1xuICBjbGVhckluZGljYXRvcjogY2xlYXJJbmRpY2F0b3JDU1MsXG4gIGNvbnRhaW5lcjogY29udGFpbmVyQ1NTLFxuICBjb250cm9sOiBjc3MkMSxcbiAgZHJvcGRvd25JbmRpY2F0b3I6IGRyb3Bkb3duSW5kaWNhdG9yQ1NTLFxuICBncm91cDogZ3JvdXBDU1MsXG4gIGdyb3VwSGVhZGluZzogZ3JvdXBIZWFkaW5nQ1NTLFxuICBpbmRpY2F0b3JzQ29udGFpbmVyOiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLFxuICBpbmRpY2F0b3JTZXBhcmF0b3I6IGluZGljYXRvclNlcGFyYXRvckNTUyxcbiAgaW5wdXQ6IGlucHV0Q1NTLFxuICBsb2FkaW5nSW5kaWNhdG9yOiBsb2FkaW5nSW5kaWNhdG9yQ1NTLFxuICBsb2FkaW5nTWVzc2FnZTogbG9hZGluZ01lc3NhZ2VDU1MsXG4gIG1lbnU6IG1lbnVDU1MsXG4gIG1lbnVMaXN0OiBtZW51TGlzdENTUyxcbiAgbWVudVBvcnRhbDogbWVudVBvcnRhbENTUyxcbiAgbXVsdGlWYWx1ZTogbXVsdGlWYWx1ZUNTUyxcbiAgbXVsdGlWYWx1ZUxhYmVsOiBtdWx0aVZhbHVlTGFiZWxDU1MsXG4gIG11bHRpVmFsdWVSZW1vdmU6IG11bHRpVmFsdWVSZW1vdmVDU1MsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IG5vT3B0aW9uc01lc3NhZ2VDU1MsXG4gIG9wdGlvbjogb3B0aW9uQ1NTLFxuICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJDU1MsXG4gIHNpbmdsZVZhbHVlOiBjc3MkMixcbiAgdmFsdWVDb250YWluZXI6IHZhbHVlQ29udGFpbmVyQ1NTXG59O1xuLy8gTWVyZ2UgVXRpbGl0eVxuLy8gQWxsb3dzIGNvbnN1bWVycyB0byBleHRlbmQgYSBiYXNlIFNlbGVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGVzXG5cbmZ1bmN0aW9uIG1lcmdlU3R5bGVzKHNvdXJjZSkge1xuICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgLy8gaW5pdGlhbGl6ZSB3aXRoIHNvdXJjZSBzdHlsZXNcbiAgdmFyIHN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZSk7XG5cbiAgLy8gbWFzc2FnZSBpbiB0YXJnZXQgc3R5bGVzXG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5QXNTdHJpbmcpIHtcbiAgICB2YXIga2V5ID0ga2V5QXNTdHJpbmc7XG4gICAgaWYgKHNvdXJjZVtrZXldKSB7XG4gICAgICBzdHlsZXNba2V5XSA9IGZ1bmN0aW9uIChyc0NzcywgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldKHNvdXJjZVtrZXldKHJzQ3NzLCBwcm9wcyksIHByb3BzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc1trZXldID0gdGFyZ2V0W2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0eWxlcztcbn1cblxudmFyIGNvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMyNjg0RkYnLFxuICBwcmltYXJ5NzU6ICcjNEM5QUZGJyxcbiAgcHJpbWFyeTUwOiAnI0IyRDRGRicsXG4gIHByaW1hcnkyNTogJyNERUVCRkYnLFxuICBkYW5nZXI6ICcjREUzNTBCJyxcbiAgZGFuZ2VyTGlnaHQ6ICcjRkZCREFEJyxcbiAgbmV1dHJhbDA6ICdoc2woMCwgMCUsIDEwMCUpJyxcbiAgbmV1dHJhbDU6ICdoc2woMCwgMCUsIDk1JSknLFxuICBuZXV0cmFsMTA6ICdoc2woMCwgMCUsIDkwJSknLFxuICBuZXV0cmFsMjA6ICdoc2woMCwgMCUsIDgwJSknLFxuICBuZXV0cmFsMzA6ICdoc2woMCwgMCUsIDcwJSknLFxuICBuZXV0cmFsNDA6ICdoc2woMCwgMCUsIDYwJSknLFxuICBuZXV0cmFsNTA6ICdoc2woMCwgMCUsIDUwJSknLFxuICBuZXV0cmFsNjA6ICdoc2woMCwgMCUsIDQwJSknLFxuICBuZXV0cmFsNzA6ICdoc2woMCwgMCUsIDMwJSknLFxuICBuZXV0cmFsODA6ICdoc2woMCwgMCUsIDIwJSknLFxuICBuZXV0cmFsOTA6ICdoc2woMCwgMCUsIDEwJSknXG59O1xudmFyIGJvcmRlclJhZGl1cyA9IDQ7XG4vLyBVc2VkIHRvIGNhbGN1bGF0ZSBjb25zaXN0ZW50IG1hcmdpbi9wYWRkaW5nIG9uIGVsZW1lbnRzXG52YXIgYmFzZVVuaXQgPSA0O1xuLy8gVGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBjb250cm9sXG52YXIgY29udHJvbEhlaWdodCA9IDM4O1xuLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBjb250cm9sIGFuZCBtZW51ICovXG52YXIgbWVudUd1dHRlciA9IGJhc2VVbml0ICogMjtcbnZhciBzcGFjaW5nID0ge1xuICBiYXNlVW5pdDogYmFzZVVuaXQsXG4gIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHQsXG4gIG1lbnVHdXR0ZXI6IG1lbnVHdXR0ZXJcbn07XG52YXIgZGVmYXVsdFRoZW1lID0ge1xuICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgY29sb3JzOiBjb2xvcnMsXG4gIHNwYWNpbmc6IHNwYWNpbmdcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gICdhcmlhLWxpdmUnOiAncG9saXRlJyxcbiAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlOiB0cnVlLFxuICBibHVySW5wdXRPblNlbGVjdDogaXNUb3VjaENhcGFibGUoKSxcbiAgY2FwdHVyZU1lbnVTY3JvbGw6ICFpc1RvdWNoQ2FwYWJsZSgpLFxuICBjbGFzc05hbWVzOiB7fSxcbiAgY2xvc2VNZW51T25TZWxlY3Q6IHRydWUsXG4gIGNsb3NlTWVudU9uU2Nyb2xsOiBmYWxzZSxcbiAgY29tcG9uZW50czoge30sXG4gIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTogdHJ1ZSxcbiAgZXNjYXBlQ2xlYXJzVmFsdWU6IGZhbHNlLFxuICBmaWx0ZXJPcHRpb246IGNyZWF0ZUZpbHRlcigpLFxuICBmb3JtYXRHcm91cExhYmVsOiBmb3JtYXRHcm91cExhYmVsLFxuICBnZXRPcHRpb25MYWJlbDogZ2V0T3B0aW9uTGFiZWwkMSxcbiAgZ2V0T3B0aW9uVmFsdWU6IGdldE9wdGlvblZhbHVlJDEsXG4gIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpc011bHRpOiBmYWxzZSxcbiAgaXNSdGw6IGZhbHNlLFxuICBpc1NlYXJjaGFibGU6IHRydWUsXG4gIGlzT3B0aW9uRGlzYWJsZWQ6IGlzT3B0aW9uRGlzYWJsZWQsXG4gIGxvYWRpbmdNZXNzYWdlOiBmdW5jdGlvbiBsb2FkaW5nTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gJ0xvYWRpbmcuLi4nO1xuICB9LFxuICBtYXhNZW51SGVpZ2h0OiAzMDAsXG4gIG1pbk1lbnVIZWlnaHQ6IDE0MCxcbiAgbWVudUlzT3BlbjogZmFsc2UsXG4gIG1lbnVQbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtZW51UG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG1lbnVTaG91bGRCbG9ja1Njcm9sbDogZmFsc2UsXG4gIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldzogIWlzTW9iaWxlRGV2aWNlKCksXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGZ1bmN0aW9uIG5vT3B0aW9uc01lc3NhZ2UoKSB7XG4gICAgcmV0dXJuICdObyBvcHRpb25zJztcbiAgfSxcbiAgb3Blbk1lbnVPbkZvY3VzOiBmYWxzZSxcbiAgb3Blbk1lbnVPbkNsaWNrOiB0cnVlLFxuICBvcHRpb25zOiBbXSxcbiAgcGFnZVNpemU6IDUsXG4gIHBsYWNlaG9sZGVyOiAnU2VsZWN0Li4uJyxcbiAgc2NyZWVuUmVhZGVyU3RhdHVzOiBmdW5jdGlvbiBzY3JlZW5SZWFkZXJTdGF0dXMoX3JlZikge1xuICAgIHZhciBjb3VudCA9IF9yZWYuY291bnQ7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGNvdW50LCBcIiByZXN1bHRcIikuY29uY2F0KGNvdW50ICE9PSAxID8gJ3MnIDogJycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgfSxcbiAgc3R5bGVzOiB7fSxcbiAgdGFiSW5kZXg6IDAsXG4gIHRhYlNlbGVjdHNWYWx1ZTogdHJ1ZSxcbiAgdW5zdHlsZWQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgaW5kZXgpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNPcHRpb25EaXNhYmxlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gIHZhciBpc1NlbGVjdGVkID0gX2lzT3B0aW9uU2VsZWN0ZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB2YXIgbGFiZWwgPSBnZXRPcHRpb25MYWJlbChwcm9wcywgb3B0aW9uKTtcbiAgdmFyIHZhbHVlID0gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIG9wdGlvbik7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29wdGlvbicsXG4gICAgZGF0YTogb3B0aW9uLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5vcHRpb25zLm1hcChmdW5jdGlvbiAoZ3JvdXBPck9wdGlvbiwgZ3JvdXBPck9wdGlvbkluZGV4KSB7XG4gICAgaWYgKCdvcHRpb25zJyBpbiBncm91cE9yT3B0aW9uKSB7XG4gICAgICB2YXIgY2F0ZWdvcml6ZWRPcHRpb25zID0gZ3JvdXBPck9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uLCBvcHRpb25JbmRleCkge1xuICAgICAgICByZXR1cm4gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgb3B0aW9uSW5kZXgpO1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChjYXRlZ29yaXplZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUocHJvcHMsIGNhdGVnb3JpemVkT3B0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNhdGVnb3JpemVkT3B0aW9ucy5sZW5ndGggPiAwID8ge1xuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICBkYXRhOiBncm91cE9yT3B0aW9uLFxuICAgICAgICBvcHRpb25zOiBjYXRlZ29yaXplZE9wdGlvbnMsXG4gICAgICAgIGluZGV4OiBncm91cE9yT3B0aW9uSW5kZXhcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBjYXRlZ29yaXplZE9wdGlvbiA9IHRvQ2F0ZWdvcml6ZWRPcHRpb24ocHJvcHMsIGdyb3VwT3JPcHRpb24sIHNlbGVjdFZhbHVlLCBncm91cE9yT3B0aW9uSW5kZXgpO1xuICAgIHJldHVybiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pID8gY2F0ZWdvcml6ZWRPcHRpb24gOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihub3ROdWxsaXNoKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoY2F0ZWdvcml6ZWRPcHRpb25zKSB7XG4gIHJldHVybiBjYXRlZ29yaXplZE9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zQWNjdW11bGF0b3IsIGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gICAgaWYgKGNhdGVnb3JpemVkT3B0aW9uLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoLmFwcGx5KG9wdGlvbnNBY2N1bXVsYXRvciwgX3RvQ29uc3VtYWJsZUFycmF5KGNhdGVnb3JpemVkT3B0aW9uLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5kYXRhO1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2goY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoY2F0ZWdvcml6ZWRPcHRpb25zLCBvcHRpb25JZCkge1xuICByZXR1cm4gY2F0ZWdvcml6ZWRPcHRpb25zLnJlZHVjZShmdW5jdGlvbiAob3B0aW9uc0FjY3VtdWxhdG9yLCBjYXRlZ29yaXplZE9wdGlvbikge1xuICAgIGlmIChjYXRlZ29yaXplZE9wdGlvbi50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaC5hcHBseShvcHRpb25zQWNjdW11bGF0b3IsIF90b0NvbnN1bWFibGVBcnJheShjYXRlZ29yaXplZE9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogb3B0aW9uLmRhdGEsXG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4LCBcIi1cIikuY29uY2F0KG9wdGlvbi5pbmRleClcbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgZGF0YTogY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIHtcbiAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSk7XG59XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgdmFyIF9wcm9wcyRpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpbnB1dFZhbHVlID0gX3Byb3BzJGlucHV0VmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGlucHV0VmFsdWU7XG4gIHZhciBkYXRhID0gY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICBpc1NlbGVjdGVkID0gY2F0ZWdvcml6ZWRPcHRpb24uaXNTZWxlY3RlZCxcbiAgICBsYWJlbCA9IGNhdGVnb3JpemVkT3B0aW9uLmxhYmVsLFxuICAgIHZhbHVlID0gY2F0ZWdvcml6ZWRPcHRpb24udmFsdWU7XG4gIHJldHVybiAoIXNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHx8ICFpc1NlbGVjdGVkKSAmJiBfZmlsdGVyT3B0aW9uKHByb3BzLCB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkYXRhOiBkYXRhXG4gIH0sIGlucHV0VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRWYWx1ZShzdGF0ZSwgbmV4dFNlbGVjdFZhbHVlKSB7XG4gIHZhciBmb2N1c2VkVmFsdWUgPSBzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgbGFzdFNlbGVjdFZhbHVlID0gc3RhdGUuc2VsZWN0VmFsdWU7XG4gIHZhciBsYXN0Rm9jdXNlZEluZGV4ID0gbGFzdFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgaWYgKGxhc3RGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgIHZhciBuZXh0Rm9jdXNlZEluZGV4ID0gbmV4dFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgICBpZiAobmV4dEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZCB2YWx1ZSBpcyBzdGlsbCBpbiB0aGUgc2VsZWN0VmFsdWUsIHJldHVybiBpdFxuICAgICAgcmV0dXJuIGZvY3VzZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGxhc3RGb2N1c2VkSW5kZXggPCBuZXh0U2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZFZhbHVlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBuZXh0IHNlbGVjdFZhbHVlIGFycmF5IGJ5XG4gICAgICAvLyByZWZlcmVuY2UsIHNvIHJldHVybiB0aGUgbmV3IHZhbHVlIGF0IHRoZSBzYW1lIGluZGV4XG4gICAgICByZXR1cm4gbmV4dFNlbGVjdFZhbHVlW2xhc3RGb2N1c2VkSW5kZXhdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c2VkT3B0aW9uKHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBsYXN0Rm9jdXNlZE9wdGlvbiA9IHN0YXRlLmZvY3VzZWRPcHRpb247XG4gIHJldHVybiBsYXN0Rm9jdXNlZE9wdGlvbiAmJiBvcHRpb25zLmluZGV4T2YobGFzdEZvY3VzZWRPcHRpb24pID4gLTEgPyBsYXN0Rm9jdXNlZE9wdGlvbiA6IG9wdGlvbnNbMF07XG59XG52YXIgZ2V0Rm9jdXNlZE9wdGlvbklkID0gZnVuY3Rpb24gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKSB7XG4gIHZhciBfZm9jdXNhYmxlT3B0aW9uc1dpdGg7XG4gIHZhciBmb2N1c2VkT3B0aW9uSWQgPSAoX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID0gZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5kYXRhID09PSBmb2N1c2VkT3B0aW9uO1xuICB9KSkgPT09IG51bGwgfHwgX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZm9jdXNhYmxlT3B0aW9uc1dpdGguaWQ7XG4gIHJldHVybiBmb2N1c2VkT3B0aW9uSWQgfHwgbnVsbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwgPSBmdW5jdGlvbiBnZXRPcHRpb25MYWJlbChwcm9wcywgZGF0YSkge1xuICByZXR1cm4gcHJvcHMuZ2V0T3B0aW9uTGFiZWwoZGF0YSk7XG59O1xudmFyIGdldE9wdGlvblZhbHVlID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGRhdGEpIHtcbiAgcmV0dXJuIHByb3BzLmdldE9wdGlvblZhbHVlKGRhdGEpO1xufTtcbmZ1bmN0aW9uIF9pc09wdGlvbkRpc2FibGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcHMuaXNPcHRpb25EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIF9pc09wdGlvblNlbGVjdGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIGlmIChzZWxlY3RWYWx1ZS5pbmRleE9mKG9wdGlvbikgPiAtMSkgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgcHJvcHMuaXNPcHRpb25TZWxlY3RlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9wcy5pc09wdGlvblNlbGVjdGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB9XG4gIHZhciBjYW5kaWRhdGUgPSBnZXRPcHRpb25WYWx1ZShwcm9wcywgb3B0aW9uKTtcbiAgcmV0dXJuIHNlbGVjdFZhbHVlLnNvbWUoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGkpID09PSBjYW5kaWRhdGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gX2ZpbHRlck9wdGlvbihwcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5maWx0ZXJPcHRpb24gPyBwcm9wcy5maWx0ZXJPcHRpb24ob3B0aW9uLCBpbnB1dFZhbHVlKSA6IHRydWU7XG59XG52YXIgc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uIHNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHtcbiAgdmFyIGhpZGVTZWxlY3RlZE9wdGlvbnMgPSBwcm9wcy5oaWRlU2VsZWN0ZWRPcHRpb25zLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICBpZiAoaGlkZVNlbGVjdGVkT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gaXNNdWx0aTtcbiAgcmV0dXJuIGhpZGVTZWxlY3RlZE9wdGlvbnM7XG59O1xudmFyIGluc3RhbmNlSWQgPSAxO1xudmFyIFNlbGVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VsZWN0LCBfQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTZWxlY3QpO1xuICAvLyBNaXNjLiBJbnN0YW5jZSBQcm9wZXJ0aWVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRPRE9cblxuICAvLyBSZWZzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBmdW5jdGlvbiBTZWxlY3QoX3Byb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3QpO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgX3Byb3BzKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFyaWFTZWxlY3Rpb246IG51bGwsXG4gICAgICBmb2N1c2VkT3B0aW9uOiBudWxsLFxuICAgICAgZm9jdXNlZE9wdGlvbklkOiBudWxsLFxuICAgICAgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHM6IFtdLFxuICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgaW5wdXRJc0hpZGRlbjogZmFsc2UsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0VmFsdWU6IFtdLFxuICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlLFxuICAgICAgcHJldldhc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiB1bmRlZmluZWQsXG4gICAgICBwcmV2UHJvcHM6IHVuZGVmaW5lZCxcbiAgICAgIGluc3RhbmNlUHJlZml4OiAnJ1xuICAgIH07XG4gICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgX3RoaXMuY29tbW9uUHJvcHMgPSB2b2lkIDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWCA9IDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWSA9IDA7XG4gICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICBfdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9IGZhbHNlO1xuICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gdm9pZCAwO1xuICAgIF90aGlzLmlzQXBwbGVEZXZpY2UgPSBpc0FwcGxlRGV2aWNlKCk7XG4gICAgX3RoaXMuY29udHJvbFJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0Q29udHJvbFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbnRyb2xSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1c2VkT3B0aW9uUmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRGb2N1c2VkT3B0aW9uUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuZm9jdXNlZE9wdGlvblJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLm1lbnVMaXN0UmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRNZW51TGlzdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLm1lbnVMaXN0UmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMuaW5wdXRSZWYgPSBudWxsO1xuICAgIF90aGlzLmdldElucHV0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1cyA9IF90aGlzLmZvY3VzSW5wdXQ7XG4gICAgX3RoaXMuYmx1ciA9IF90aGlzLmJsdXJJbnB1dDtcbiAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wcy5uYW1lO1xuICAgICAgYWN0aW9uTWV0YS5uYW1lID0gbmFtZTtcbiAgICAgIF90aGlzLmFyaWFPbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfTtcbiAgICBfdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uLCBvcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgY2xvc2VNZW51T25TZWxlY3QgPSBfdGhpcyRwcm9wczIuY2xvc2VNZW51T25TZWxlY3QsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczIuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMi5pbnB1dFZhbHVlO1xuICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdzZXQtdmFsdWUnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoY2xvc2VNZW51T25TZWxlY3QpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogIWlzTXVsdGlcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICB9XG4gICAgICAvLyB3aGVuIHRoZSBzZWxlY3QgdmFsdWUgc2hvdWxkIGNoYW5nZSwgd2Ugc2hvdWxkIHJlc2V0IGZvY3VzZWRWYWx1ZVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgb3B0aW9uOiBvcHRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2VsZWN0T3B0aW9uID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGJsdXJJbnB1dE9uU2VsZWN0ID0gX3RoaXMkcHJvcHMzLmJsdXJJbnB1dE9uU2VsZWN0LFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMzLmlzTXVsdGksXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczMubmFtZTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGRlc2VsZWN0ZWQgPSBpc011bHRpICYmIF90aGlzLmlzT3B0aW9uU2VsZWN0ZWQobmV3VmFsdWUsIHNlbGVjdFZhbHVlKTtcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gX3RoaXMuaXNPcHRpb25EaXNhYmxlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpO1xuICAgICAgaWYgKGRlc2VsZWN0ZWQpIHtcbiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmdldE9wdGlvblZhbHVlKGkpICE9PSBjYW5kaWRhdGU7XG4gICAgICAgIH0pKSwgJ2Rlc2VsZWN0LW9wdGlvbicsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gU2VsZWN0IG9wdGlvbiBpZiBvcHRpb24gaXMgbm90IGRpc2FibGVkXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzZWxlY3RWYWx1ZSksIFtuZXdWYWx1ZV0pKSwgJ3NlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUoc2luZ2xlVmFsdWVBc1ZhbHVlKG5ld1ZhbHVlKSwgJ3NlbGVjdC1vcHRpb24nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYXJpYU9uQ2hhbmdlKHNpbmdsZVZhbHVlQXNWYWx1ZShuZXdWYWx1ZSksIHtcbiAgICAgICAgICBhY3Rpb246ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICBvcHRpb246IG5ld1ZhbHVlLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChibHVySW5wdXRPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLnJlbW92ZVZhbHVlID0gZnVuY3Rpb24gKHJlbW92ZWRWYWx1ZSkge1xuICAgICAgdmFyIGlzTXVsdGkgPSBfdGhpcy5wcm9wcy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUocmVtb3ZlZFZhbHVlKTtcbiAgICAgIHZhciBuZXdWYWx1ZUFycmF5ID0gc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRPcHRpb25WYWx1ZShpKSAhPT0gY2FuZGlkYXRlO1xuICAgICAgfSk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbmV3VmFsdWVBcnJheSwgbmV3VmFsdWVBcnJheVswXSB8fCBudWxsKTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlbW92ZS12YWx1ZScsXG4gICAgICAgIHJlbW92ZWRWYWx1ZTogcmVtb3ZlZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLmNsZWFyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHZhbHVlVGVybmFyeShfdGhpcy5wcm9wcy5pc011bHRpLCBbXSwgbnVsbCksIHtcbiAgICAgICAgYWN0aW9uOiAnY2xlYXInLFxuICAgICAgICByZW1vdmVkVmFsdWVzOiBzZWxlY3RWYWx1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5wb3BWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc011bHRpID0gX3RoaXMucHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGxhc3RTZWxlY3RlZFZhbHVlID0gc2VsZWN0VmFsdWVbc2VsZWN0VmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbmV3VmFsdWVBcnJheSA9IHNlbGVjdFZhbHVlLnNsaWNlKDAsIHNlbGVjdFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG5ld1ZhbHVlQXJyYXksIG5ld1ZhbHVlQXJyYXlbMF0gfHwgbnVsbCk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdwb3AtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzZWRPcHRpb25JZCA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9jdXNlZE9wdGlvbklkKF90aGlzLnN0YXRlLmZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMucHJvcHMsIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlKSwgX3RoaXMuZ2V0RWxlbWVudElkKCdvcHRpb24nKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICB9O1xuICAgIF90aGlzLmN4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseSh2b2lkIDAsIFtfdGhpcy5wcm9wcy5jbGFzc05hbWVQcmVmaXhdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gZ2V0T3B0aW9uTGFiZWwoX3RoaXMucHJvcHMsIGRhdGEpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKF90aGlzLnByb3BzLCBkYXRhKTtcbiAgICB9O1xuICAgIF90aGlzLmdldFN0eWxlcyA9IGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgdW5zdHlsZWQgPSBfdGhpcy5wcm9wcy51bnN0eWxlZDtcbiAgICAgIHZhciBiYXNlID0gZGVmYXVsdFN0eWxlc1trZXldKHByb3BzLCB1bnN0eWxlZCk7XG4gICAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHZhciBjdXN0b20gPSBfdGhpcy5wcm9wcy5zdHlsZXNba2V5XTtcbiAgICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgICB9O1xuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAoa2V5LCBwcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGNsYXNzTmFtZSwgX3RoaXMkcHJvcHMkY2xhc3NOYW1lMjtcbiAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkY2xhc3NOYW1lID0gKF90aGlzJHByb3BzJGNsYXNzTmFtZTIgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzKVtrZXldKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJGNsYXNzTmFtZS5jYWxsKF90aGlzJHByb3BzJGNsYXNzTmFtZTIsIHByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoX3RoaXMuc3RhdGUuaW5zdGFuY2VQcmVmaXgsIFwiLVwiKS5jb25jYXQoZWxlbWVudCk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDb21wb25lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnRzKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLnByb3BzLCBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDYXRlZ29yaXplZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubWVudUlzT3BlbiA/IF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuID8gX3RoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmFyaWFPbkNoYW5nZSA9IGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhcmlhU2VsZWN0aW9uOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSwgYWN0aW9uTWV0YSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25NZW51TW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uTWVudU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBFdmVudCBjYXB0dXJlZCBieSBkcm9wZG93biBpbmRpY2F0b3JcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcGVuTWVudU9uQ2xpY2sgPSBfdGhpcy5wcm9wcy5vcGVuTWVudU9uQ2xpY2s7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNC5pc011bHRpLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM0Lm1lbnVJc09wZW47XG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiAhaXNNdWx0aVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRG9jdW1lbnRFbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwoZXZlbnQpKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBfdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjIudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMgJiYgdG91Y2hlcy5pdGVtKDApO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gdG91Y2guY2xpZW50WDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWYzLnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzICYmIHRvdWNoZXMuaXRlbSgwKTtcbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlbHRhWCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBfdGhpcy5pbml0aWFsVG91Y2hYKTtcbiAgICAgIHZhciBkZWx0YVkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gX3RoaXMuaW5pdGlhbFRvdWNoWSk7XG4gICAgICB2YXIgbW92ZVRocmVzaG9sZCA9IDU7XG4gICAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IGRlbHRhWCA+IG1vdmVUaHJlc2hvbGQgfHwgZGVsdGFZID4gbW92ZVRocmVzaG9sZDtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICAvLyBjbG9zZSB0aGUgbWVudSBpZiB0aGUgdXNlciB0YXBzIG91dHNpZGVcbiAgICAgIC8vIHdlJ3JlIGNoZWNraW5nIG9uIGV2ZW50LnRhcmdldCBoZXJlIGluc3RlYWQgb2YgZXZlbnQuY3VycmVudFRhcmdldCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFzc2VydCBpbmZvcm1hdGlvblxuICAgICAgLy8gb24gZXZlbnRzIG9uIGNoaWxkIGVsZW1lbnRzLCBub3QgdGhlIGRvY3VtZW50ICh3aGljaCB3ZSd2ZSBhdHRhY2hlZCB0aGlzIGhhbmRsZXIgdG8pLlxuICAgICAgaWYgKF90aGlzLmNvbnRyb2xSZWYgJiYgIV90aGlzLmNvbnRyb2xSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiBfdGhpcy5tZW51TGlzdFJlZiAmJiAhX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgbW92ZSB2YXJzXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuICAgICAgX3RoaXMub25Db250cm9sTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1jaGFuZ2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogcHJldklucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLm9uTWVudU9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMub3BlbkFmdGVyRm9jdXMgfHwgX3RoaXMucHJvcHMub3Blbk1lbnVPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgaWYgKF90aGlzLm1lbnVMaXN0UmVmICYmIF90aGlzLm1lbnVMaXN0UmVmLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIF90aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnaW5wdXQtYmx1cicsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBwcmV2SW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25PcHRpb25Ib3ZlciA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciB8fCBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID09PSBmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25zID0gX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb25JbmRleCA9IG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiBmb2N1c2VkT3B0aW9uSW5kZXggPiAtMSA/IF90aGlzLmdldEZvY3VzZWRPcHRpb25JZChmb2N1c2VkT3B0aW9uKSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLm9uVmFsdWVJbnB1dEZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBfdGhpcy5mb2N1cygpO1xuICAgIH07XG4gICAgX3RoaXMub25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczUuaXNNdWx0aSxcbiAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlID0gX3RoaXMkcHJvcHM1LmJhY2tzcGFjZVJlbW92ZXNWYWx1ZSxcbiAgICAgICAgZXNjYXBlQ2xlYXJzVmFsdWUgPSBfdGhpcyRwcm9wczUuZXNjYXBlQ2xlYXJzVmFsdWUsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczUuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczUuaXNDbGVhcmFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNS5tZW51SXNPcGVuLFxuICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczUub25LZXlEb3duLFxuICAgICAgICB0YWJTZWxlY3RzVmFsdWUgPSBfdGhpcyRwcm9wczUudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBvcGVuTWVudU9uRm9jdXMgPSBfdGhpcyRwcm9wczUub3Blbk1lbnVPbkZvY3VzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHR5cGVvZiBvbktleURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmxvY2sgb3B0aW9uIGhvdmVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGhhcyBqdXN0IHByZXNzZWQgYSBrZXlcbiAgICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSB0cnVlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzVmFsdWUoJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgnbmV4dCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgaWYgKGZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFiYWNrc3BhY2VSZW1vdmVzVmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICAgIF90aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8ICFtZW51SXNPcGVuIHx8ICF0YWJTZWxlY3RzVmFsdWUgfHwgIWZvY3VzZWRPcHRpb24gfHxcbiAgICAgICAgICAvLyBkb24ndCBjYXB0dXJlIHRoZSBldmVudCBpZiB0aGUgbWVudSBvcGVucyBvbiBmb2N1cyBhbmQgdGhlIGZvY3VzZWRcbiAgICAgICAgICAvLyBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZDsgaXQgYnJlYWtzIHRoZSBmbG93IG9mIG5hdmlnYXRpb25cbiAgICAgICAgICBvcGVuTWVudU9uRm9jdXMgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChmb2N1c2VkT3B0aW9uLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBrZXlkb3duIGV2ZW50IGZyb20gYW4gSW5wdXQgTWV0aG9kIEVkaXRvcihJTUUpXG4gICAgICAgICAgICAvLyByZWYuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy8jZGV0ZXJtaW5lLWtleWRvd24ta2V5dXAta2V5Q29kZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0NvbXBvc2luZykgcmV0dXJuO1xuICAgICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZScsXG4gICAgICAgICAgICAgIHByZXZJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NsZWFyYWJsZSAmJiBlc2NhcGVDbGVhcnNWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCd1cCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnbGFzdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2Rvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdldXAnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdlZG93bicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZmlyc3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignbGFzdCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBfdGhpcy5zdGF0ZS5pbnN0YW5jZVByZWZpeCA9ICdyZWFjdC1zZWxlY3QtJyArIChfdGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCk7XG4gICAgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKF9wcm9wcy52YWx1ZSk7XG4gICAgLy8gU2V0IGZvY3VzZWRPcHRpb24gaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gaW5pdCAoZS5nLiBkZWZhdWx0TWVudUlzT3BlbilcbiAgICBpZiAoX3Byb3BzLm1lbnVJc09wZW4gJiYgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMgPSBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zV2l0aElkcygpO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSBfdGhpcy5idWlsZEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIHZhciBvcHRpb25JbmRleCA9IGZvY3VzYWJsZU9wdGlvbnMuaW5kZXhPZihfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZVswXSk7XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiA9IGZvY3VzYWJsZU9wdGlvbnNbb3B0aW9uSW5kZXhdO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2FibGVPcHRpb25zW29wdGlvbkluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfY3JlYXRlQ2xhc3MoU2VsZWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbigpO1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgLy8gTGlzdGVuIHRvIGFsbCBzY3JvbGwgZXZlbnRzLCBhbmQgZmlsdGVyIHRoZW0gb3V0IGluc2lkZSBvZiAnb25TY3JvbGwnXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGwgZm9jdXNlZE9wdGlvbiBpbnRvIHZpZXcgaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gbW91bnQgKGUuZy4gZGVmYXVsdE1lbnVJc09wZW4pXG4gICAgICBpZiAodGhpcy5wcm9wcy5tZW51SXNPcGVuICYmIHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiAmJiB0aGlzLm1lbnVMaXN0UmVmICYmIHRoaXMuZm9jdXNlZE9wdGlvblJlZikge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczYuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNi5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKFxuICAgICAgLy8gZW5zdXJlIGZvY3VzIGlzIHJlc3RvcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBjb250cm9sIGJlY29tZXMgZW5hYmxlZFxuICAgICAgaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkIHx8XG4gICAgICAvLyBlbnN1cmUgZm9jdXMgaXMgb24gdGhlIElucHV0IHdoZW4gdGhlIG1lbnUgb3BlbnNcbiAgICAgIGlzRm9jdXNlZCAmJiBtZW51SXNPcGVuICYmICFwcmV2UHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZvY3VzZWQgJiYgaXNEaXNhYmxlZCAmJiAhcHJldlByb3BzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGJsdXJyZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlZCB3aGlsZSBmb2N1c2VkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH0sIHRoaXMub25NZW51Q2xvc2UpO1xuICAgICAgfSBlbHNlIGlmICghaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkICYmIHRoaXMuaW5wdXRSZWYgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGZvY3VzZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbWF0aWNhbGx5IHJlLWVuYWJsZWQgd2hpbGUgZm9jdXNlZCAoRmlyZWZveClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2Nyb2xsIHRoZSBmb2N1c2VkIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAodGhpcy5tZW51TGlzdFJlZiAmJiB0aGlzLmZvY3VzZWRPcHRpb25SZWYgJiYgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbnN1bWVyIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51T3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lbnVPcGVuKCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVPcGVuKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uTWVudUNsb3NlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ21lbnUtY2xvc2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25JbnB1dENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1ldGhvZHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRSZWYpIHJldHVybjtcbiAgICAgIHRoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1cklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgfVxuXG4gICAgLy8gYWxpYXNlZCBmb3IgY29uc3VtZXJzXG4gIH0sIHtcbiAgICBrZXk6IFwib3Blbk1lbnVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3Blbk1lbnUoZm9jdXNPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlbGVjdFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTIuaXNGb2N1c2VkO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIG9wZW5BdEluZGV4ID0gZm9jdXNPcHRpb24gPT09ICdmaXJzdCcgPyAwIDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBmb2N1c2FibGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0VmFsdWVbMF0pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgb3BlbkF0SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgc2Nyb2xsIGlmIHRoZSBtZW51IGlzbid0IGFscmVhZHkgb3BlblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9ICEoaXNGb2N1c2VkICYmIHRoaXMubWVudUxpc3RSZWYpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0sXG4gICAgICAgIGZvY3VzZWRPcHRpb25JZDogdGhpcy5nZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0pXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25NZW51T3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNWYWx1ZShkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGUzLmZvY3VzZWRWYWx1ZTtcblxuICAgICAgLy8gT25seSBtdWx0aXNlbGVjdHMgc3VwcG9ydCB2YWx1ZSBmb2N1c2luZ1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gICAgICBpZiAoIWZvY3VzZWRWYWx1ZSkge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBzZWxlY3RWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IC0xO1xuICAgICAgaWYgKCFzZWxlY3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBjeWNsZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kXG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaWYgbm90aGluZyBpcyBmb2N1c2VkLCBmb2N1cyB0aGUgbGFzdCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gbGFzdEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA+IC0xICYmIGZvY3VzZWRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbjogbmV4dEZvY3VzICE9PSAtMSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBzZWxlY3RWYWx1ZVtuZXh0Rm9jdXNdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNPcHRpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmlyc3QnO1xuICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcbiAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBuZXh0Rm9jdXMgPSAwOyAvLyBoYW5kbGVzICdmaXJzdCdcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG4gICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCA+IDAgPyBmb2N1c2VkSW5kZXggLSAxIDogb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSAoZm9jdXNlZEluZGV4ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZXVwJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA8IDApIG5leHRGb2N1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA+IG9wdGlvbnMubGVuZ3RoIC0gMSkgbmV4dEZvY3VzID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBvcHRpb25zW25leHRGb2N1c10sXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmdldEZvY3VzZWRPcHRpb25JZChvcHRpb25zW25leHRGb2N1c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGhlbWVcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVtZSgpIHtcbiAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB0aGVtZSBpZiB0aGVyZSBhcmUgbm8gY3VzdG9taXNhdGlvbnMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMudGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0aGVtZSBwcm9wIGlzIGEgZnVuY3Rpb24sIGFzc3VtZSB0aGUgZnVuY3Rpb25cbiAgICAgIC8vIGtub3dzIGhvdyB0byBtZXJnZSB0aGUgcGFzc2VkLWluIGRlZmF1bHQgdGhlbWUgd2l0aFxuICAgICAgLy8gaXRzIG93biBtb2RpZmljYXRpb25zLlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgcGxhaW4gdGhlbWUgb2JqZWN0IHdhcyBwYXNzZWQgaW4sXG4gICAgICAvLyBvdmVybGF5IGl0IHdpdGggdGhlIGRlZmF1bHQgdGhlbWUuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0VGhlbWUpLCB0aGlzLnByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tbW9uUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tbW9uUHJvcHMoKSB7XG4gICAgICB2YXIgY2xlYXJWYWx1ZSA9IHRoaXMuY2xlYXJWYWx1ZSxcbiAgICAgICAgY3ggPSB0aGlzLmN4LFxuICAgICAgICBnZXRTdHlsZXMgPSB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWUgPSB0aGlzLmdldFZhbHVlLFxuICAgICAgICBzZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbixcbiAgICAgICAgc2V0VmFsdWUgPSB0aGlzLnNldFZhbHVlLFxuICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICB2YXIgaXNNdWx0aSA9IHByb3BzLmlzTXVsdGksXG4gICAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGwsXG4gICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXNWYWx1ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJWYWx1ZTogY2xlYXJWYWx1ZSxcbiAgICAgICAgY3g6IGN4LFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lczogZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgICAgICBoYXNWYWx1ZTogaGFzVmFsdWUsXG4gICAgICAgIGlzTXVsdGk6IGlzTXVsdGksXG4gICAgICAgIGlzUnRsOiBpc1J0bCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICAgIHNlbGVjdFByb3BzOiBwcm9wcyxcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICB0aGVtZTogdGhpcy5nZXRUaGVtZSgpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNWYWx1ZSgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCkubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NsZWFyYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NsZWFyYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzNy5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNy5pc011bHRpO1xuXG4gICAgICAvLyBzaW5nbGUgc2VsZWN0LCBieSBkZWZhdWx0LCBJUyBOT1QgY2xlYXJhYmxlXG4gICAgICAvLyBtdWx0aSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIGNsZWFyYWJsZVxuICAgICAgaWYgKGlzQ2xlYXJhYmxlID09PSB1bmRlZmluZWQpIHJldHVybiBpc011bHRpO1xuICAgICAgcmV0dXJuIGlzQ2xlYXJhYmxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvbkRpc2FibGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvbkRpc2FibGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvblNlbGVjdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvblNlbGVjdGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9maWx0ZXJPcHRpb24odGhpcy5wcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0T3B0aW9uTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwgY29udGV4dCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfaW5wdXRWYWx1ZSA9IHRoaXMucHJvcHMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdmFyIF9zZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIGlucHV0VmFsdWU6IF9pbnB1dFZhbHVlLFxuICAgICAgICAgIHNlbGVjdFZhbHVlOiBfc2VsZWN0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0R3JvdXBMYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdEdyb3VwTGFiZWwoZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTW91c2UgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29tcG9zaXRpb24gSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVG91Y2ggSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5wdXRcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSZW5kZXJlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBmdW5jdGlvbiByZW5kZXJJbnB1dCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzOC5pc1NlYXJjaGFibGUsXG4gICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wczguaW5wdXRJZCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOC5pbnB1dFZhbHVlLFxuICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzOC50YWJJbmRleCxcbiAgICAgICAgZm9ybSA9IF90aGlzJHByb3BzOC5mb3JtLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM4Lm1lbnVJc09wZW4sXG4gICAgICAgIHJlcXVpcmVkID0gX3RoaXMkcHJvcHM4LnJlcXVpcmVkO1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgSW5wdXQgPSBfdGhpcyRnZXRDb21wb25lbnRzLklucHV0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW4gPSBfdGhpcyRzdGF0ZTQuaW5wdXRJc0hpZGRlbixcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IF90aGlzJHN0YXRlNC5hcmlhU2VsZWN0aW9uO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpZCA9IGlucHV0SWQgfHwgdGhpcy5nZXRFbGVtZW50SWQoJ2lucHV0Jyk7XG5cbiAgICAgIC8vIGFyaWEgYXR0cmlidXRlcyBtYWtlcyB0aGUgSlNYIFwibm9pc3lcIiwgc2VwYXJhdGVkIGZvciBjbGFyaXR5XG4gICAgICB2YXIgYXJpYUF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBtZW51SXNPcGVuLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IHRoaXMucHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ10sXG4gICAgICAgICdhcmlhLWludmFsaWQnOiB0aGlzLnByb3BzWydhcmlhLWludmFsaWQnXSxcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgJ2FyaWEtcmVxdWlyZWQnOiByZXF1aXJlZCxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IHRoaXMuaXNBcHBsZURldmljZSA/IHVuZGVmaW5lZCA6IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkIHx8ICcnXG4gICAgICB9LCBtZW51SXNPcGVuICYmIHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICB9KSwgIWlzU2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICdhcmlhLXJlYWRvbmx5JzogdHJ1ZVxuICAgICAgfSksIHRoaXMuaGFzVmFsdWUoKSA/IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnICYmIHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKVxuICAgICAgfSA6IHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgncGxhY2Vob2xkZXInKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzU2VhcmNoYWJsZSkge1xuICAgICAgICAvLyB1c2UgYSBkdW1teSBpbnB1dCB0byBtYWludGFpbiBmb2N1cy9ibHVyIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KER1bW15SW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBub29wLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBpbnB1dE1vZGU6IFwibm9uZVwiLFxuICAgICAgICAgIGZvcm06IGZvcm0sXG4gICAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgICAgfSwgYXJpYUF0dHJpYnV0ZXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm5vbmVcIixcbiAgICAgICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29ycmVjdDogXCJvZmZcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNIaWRkZW46IGlucHV0SXNIaWRkZW4sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICB9LCBhcmlhQXR0cmlidXRlcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQbGFjZWhvbGRlck9yVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czIgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgTXVsdGlWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWUsXG4gICAgICAgIE11bHRpVmFsdWVDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICBNdWx0aVZhbHVlTGFiZWwgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgIE11bHRpVmFsdWVSZW1vdmUgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlUmVtb3ZlLFxuICAgICAgICBTaW5nbGVWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLlNpbmdsZVZhbHVlLFxuICAgICAgICBQbGFjZWhvbGRlciA9IF90aGlzJGdldENvbXBvbmVudHMyLlBsYWNlaG9sZGVyO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfdGhpcyRwcm9wczkuY29udHJvbFNob3VsZFJlbmRlclZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM5LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczkuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOS5pbnB1dFZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOS5wbGFjZWhvbGRlcjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNS5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU1LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU1LmlzRm9jdXNlZDtcbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpIHx8ICFjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGxhY2Vob2xkZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGtleTogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0RWxlbWVudElkKCdwbGFjZWhvbGRlcicpXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgICAgICAgIHZhciBpc09wdGlvbkZvY3VzZWQgPSBvcHQgPT09IGZvY3VzZWRWYWx1ZTtcbiAgICAgICAgICB2YXIga2V5ID0gXCJcIi5jb25jYXQoX3RoaXMzLmdldE9wdGlvbkxhYmVsKG9wdCksIFwiLVwiKS5jb25jYXQoX3RoaXMzLmdldE9wdGlvblZhbHVlKG9wdCkpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNdWx0aVZhbHVlLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgICAgICBMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgICAgICBSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IGlzT3B0aW9uRm9jdXNlZCxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHJlbW92ZVByb3BzOiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblRvdWNoRW5kOiBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiBvcHRcbiAgICAgICAgICB9KSwgX3RoaXMzLmZvcm1hdE9wdGlvbkxhYmVsKG9wdCwgJ3ZhbHVlJykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIHNpbmdsZVZhbHVlID0gc2VsZWN0VmFsdWVbMF07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBkYXRhOiBzaW5nbGVWYWx1ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMuZm9ybWF0T3B0aW9uTGFiZWwoc2luZ2xlVmFsdWUsICd2YWx1ZScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgQ2xlYXJJbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzMy5DbGVhckluZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczEwLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTAuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCF0aGlzLmlzQ2xlYXJhYmxlKCkgfHwgIUNsZWFySW5kaWNhdG9yIHx8IGlzRGlzYWJsZWQgfHwgIXRoaXMuaGFzVmFsdWUoKSB8fCBpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDbGVhckluZGljYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ0luZGljYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNCA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBMb2FkaW5nSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czQuTG9hZGluZ0luZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczExLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCFMb2FkaW5nSW5kaWNhdG9yIHx8ICFpc0xvYWRpbmcpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckluZGljYXRvclNlcGFyYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNSA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBEcm9wZG93bkluZGljYXRvciA9IF90aGlzJGdldENvbXBvbmVudHM1LkRyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICBJbmRpY2F0b3JTZXBhcmF0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNS5JbmRpY2F0b3JTZXBhcmF0b3I7XG5cbiAgICAgIC8vIHNlcGFyYXRvciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCB0aGUgZHJvcGRvd24gaW5kaWNhdG9yXG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yIHx8ICFJbmRpY2F0b3JTZXBhcmF0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvclNlcGFyYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM2ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czYuRHJvcGRvd25JbmRpY2F0b3I7XG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJNZW51KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czcgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgR3JvdXAgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Hcm91cCxcbiAgICAgICAgR3JvdXBIZWFkaW5nID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuR3JvdXBIZWFkaW5nLFxuICAgICAgICBNZW51ID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTWVudSxcbiAgICAgICAgTWVudUxpc3QgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5NZW51TGlzdCxcbiAgICAgICAgTWVudVBvcnRhbCA9IF90aGlzJGdldENvbXBvbmVudHM3Lk1lbnVQb3J0YWwsXG4gICAgICAgIExvYWRpbmdNZXNzYWdlID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIE5vT3B0aW9uc01lc3NhZ2UgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Ob09wdGlvbnNNZXNzYWdlLFxuICAgICAgICBPcHRpb24gPSBfdGhpcyRnZXRDb21wb25lbnRzNy5PcHRpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNhcHR1cmVNZW51U2Nyb2xsID0gX3RoaXMkcHJvcHMxMi5jYXB0dXJlTWVudVNjcm9sbCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTIuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMi5pc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMxMi5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgbWluTWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTIubWVudUlzT3BlbixcbiAgICAgICAgbWVudVBsYWNlbWVudCA9IF90aGlzJHByb3BzMTIubWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uID0gX3RoaXMkcHJvcHMxMi5tZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVQb3J0YWxUYXJnZXQgPSBfdGhpcyRwcm9wczEyLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbCA9IF90aGlzJHByb3BzMTIubWVudVNob3VsZEJsb2NrU2Nyb2xsLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBfdGhpcyRwcm9wczEyLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICAgICAgbm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJHByb3BzMTIubm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgb25NZW51U2Nyb2xsVG9Ub3AgPSBfdGhpcyRwcm9wczEyLm9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbSA9IF90aGlzJHByb3BzMTIub25NZW51U2Nyb2xsVG9Cb3R0b207XG4gICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUT0RPOiBJbnRlcm5hbCBPcHRpb24gVHlwZSBoZXJlXG4gICAgICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCBpZCkge1xuICAgICAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgICAgICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgaXNGb2N1c2VkID0gZm9jdXNlZE9wdGlvbiA9PT0gZGF0YTtcbiAgICAgICAgdmFyIG9uSG92ZXIgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQub25PcHRpb25Ib3ZlcihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2VsZWN0ID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnNlbGVjdE9wdGlvbihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wdGlvbklkID0gXCJcIi5jb25jYXQoX3RoaXM0LmdldEVsZW1lbnRJZCgnb3B0aW9uJyksIFwiLVwiKS5jb25jYXQoaWQpO1xuICAgICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgb25DbGljazogb25TZWxlY3QsXG4gICAgICAgICAgb25Nb3VzZU1vdmU6IG9uSG92ZXIsXG4gICAgICAgICAgb25Nb3VzZU92ZXI6IG9uSG92ZXIsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogX3RoaXM0LmlzQXBwbGVEZXZpY2UgPyB1bmRlZmluZWQgOiBpc1NlbGVjdGVkIC8vIGlzIG5vdCBzdXBwb3J0ZWQgb24gQXBwbGUgZGV2aWNlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPcHRpb24sIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAga2V5OiBvcHRpb25JZCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJSZWY6IGlzRm9jdXNlZCA/IF90aGlzNC5nZXRGb2N1c2VkT3B0aW9uUmVmIDogdW5kZWZpbmVkXG4gICAgICAgIH0pLCBfdGhpczQuZm9ybWF0T3B0aW9uTGFiZWwocHJvcHMuZGF0YSwgJ21lbnUnKSk7XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVVSTtcbiAgICAgIGlmICh0aGlzLmhhc09wdGlvbnMoKSkge1xuICAgICAgICBtZW51VUkgPSB0aGlzLmdldENhdGVnb3JpemVkT3B0aW9ucygpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHZhciBfZGF0YSA9IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgZ3JvdXBJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgICAgICB2YXIgZ3JvdXBJZCA9IFwiXCIuY29uY2F0KF90aGlzNC5nZXRFbGVtZW50SWQoJ2dyb3VwJyksIFwiLVwiKS5jb25jYXQoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB2YXIgaGVhZGluZ0lkID0gXCJcIi5jb25jYXQoZ3JvdXBJZCwgXCItaGVhZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgICAgIGtleTogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgZGF0YTogX2RhdGEsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICAgIEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgICAgICAgICAgICAgaGVhZGluZ1Byb3BzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGhlYWRpbmdJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IF90aGlzNC5mb3JtYXRHcm91cExhYmVsKGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIH0pLCBpdGVtLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihvcHRpb24sIFwiXCIuY29uY2F0KGdyb3VwSW5kZXgsIFwiLVwiKS5jb25jYXQob3B0aW9uLmluZGV4KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdvcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGl0ZW0sIFwiXCIuY29uY2F0KGl0ZW0uaW5kZXgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nTWVzc2FnZSwgY29tbW9uUHJvcHMsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9tZXNzYWdlID0gbm9PcHRpb25zTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9tZXNzYWdlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgbWVudVVJID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9PcHRpb25zTWVzc2FnZSwgY29tbW9uUHJvcHMsIF9tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHZhciBtZW51UGxhY2VtZW50UHJvcHMgPSB7XG4gICAgICAgIG1pbk1lbnVIZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIG1heE1lbnVIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVQbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVQb3NpdGlvbjogbWVudVBvc2l0aW9uLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IG1lbnVTaG91bGRTY3JvbGxJbnRvVmlld1xuICAgICAgfTtcbiAgICAgIHZhciBtZW51RWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQbGFjZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgbWVudVBsYWNlbWVudFByb3BzKSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciByZWYgPSBfcmVmNC5yZWYsXG4gICAgICAgICAgX3JlZjQkcGxhY2VyUHJvcHMgPSBfcmVmNC5wbGFjZXJQcm9wcyxcbiAgICAgICAgICBwbGFjZW1lbnQgPSBfcmVmNCRwbGFjZXJQcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjQkcGxhY2VyUHJvcHMubWF4SGVpZ2h0O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMsIHtcbiAgICAgICAgICBpbm5lclJlZjogcmVmLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBfdGhpczQub25NZW51TW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6IF90aGlzNC5vbk1lbnVNb3VzZU1vdmVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxNYW5hZ2VyLCB7XG4gICAgICAgICAgY2FwdHVyZUVuYWJsZWQ6IGNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICAgIG9uVG9wQXJyaXZlOiBvbk1lbnVTY3JvbGxUb1RvcCxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZTogb25NZW51U2Nyb2xsVG9Cb3R0b20sXG4gICAgICAgICAgbG9ja0VuYWJsZWQ6IG1lbnVTaG91bGRCbG9ja1Njcm9sbFxuICAgICAgICB9LCBmdW5jdGlvbiAoc2Nyb2xsVGFyZ2V0UmVmKSB7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVMaXN0LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGlubmVyUmVmOiBmdW5jdGlvbiBpbm5lclJlZihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICBfdGhpczQuZ2V0TWVudUxpc3RSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICBzY3JvbGxUYXJnZXRSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBjb21tb25Qcm9wcy5pc011bHRpLFxuICAgICAgICAgICAgICBpZDogX3RoaXM0LmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb25cbiAgICAgICAgICB9KSwgbWVudVVJKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvc2l0aW9uaW5nIGJlaGF2aW91ciBpcyBhbG1vc3QgaWRlbnRpY2FsIGZvciBwb3J0YWxsZWQgYW5kIGZpeGVkLFxuICAgICAgLy8gc28gd2UgdXNlIHRoZSBzYW1lIGNvbXBvbmVudC4gdGhlIGFjdHVhbCBwb3J0YWxsaW5nIGxvZ2ljIGlzIGZvcmtlZFxuICAgICAgLy8gd2l0aGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gYG1lbnVQb3NpdGlvbmBcbiAgICAgIHJldHVybiBtZW51UG9ydGFsVGFyZ2V0IHx8IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQb3J0YWwsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBhcHBlbmRUbzogbWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IHRoaXMuY29udHJvbFJlZixcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb25cbiAgICAgIH0pLCBtZW51RWxlbWVudCkgOiBtZW51RWxlbWVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRm9ybUZpZWxkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvcm1GaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTMgPSB0aGlzLnByb3BzLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczEzLmRlbGltaXRlcixcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTMuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMTMuaXNNdWx0aSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMTMubmFtZSxcbiAgICAgICAgcmVxdWlyZWQgPSBfdGhpcyRwcm9wczEzLnJlcXVpcmVkO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhdGhpcy5oYXNWYWx1ZSgpICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXF1aXJlZElucHV0JDEsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25WYWx1ZUlucHV0Rm9jdXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5hbWUgfHwgaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM1LmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gc2VsZWN0VmFsdWUubGVuZ3RoID4gMCA/IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGtleTogXCJpLVwiLmNvbmNhdChpKSxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNS5nZXRPcHRpb25WYWx1ZShvcHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBzZWxlY3RWYWx1ZVswXSA/IHRoaXMuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0VmFsdWVbMF0pIDogJyc7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGl2ZVJlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMaXZlUmVnaW9uKCkge1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTYgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gX3RoaXMkc3RhdGU2LmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU2LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU2LmlzRm9jdXNlZCxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTYuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpdmVSZWdpb24kMSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlkOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbjogYXJpYVNlbGVjdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGZvY3VzYWJsZU9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IHRoaXMuaXNBcHBsZURldmljZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM4ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIENvbnRyb2wgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5Db250cm9sLFxuICAgICAgICBJbmRpY2F0b3JzQ29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgICAgICAgU2VsZWN0Q29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguU2VsZWN0Q29udGFpbmVyLFxuICAgICAgICBWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGdldENvbXBvbmVudHM4LlZhbHVlQ29udGFpbmVyO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTQgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczE0LmNsYXNzTmFtZSxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczE0LmlkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNC5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMxNC5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcyA9IHRoaXMuZ2V0Q29tbW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJMaXZlUmVnaW9uKCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRDb250cm9sUmVmLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Db250cm9sTW91c2VEb3duLFxuICAgICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Db250cm9sVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW5cbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUNvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpLCB0aGlzLnJlbmRlcklucHV0KCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmRpY2F0b3JzQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCksIHRoaXMucmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCksIHRoaXMucmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSkpLCB0aGlzLnJlbmRlck1lbnUoKSwgdGhpcy5yZW5kZXJGb3JtRmllbGQoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBzdGF0ZS5wcmV2UHJvcHMsXG4gICAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gc3RhdGUuY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IHN0YXRlLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IHN0YXRlLmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGlzRm9jdXNlZCA9IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgICAgcHJldldhc0ZvY3VzZWQgPSBzdGF0ZS5wcmV2V2FzRm9jdXNlZCxcbiAgICAgICAgaW5zdGFuY2VQcmVmaXggPSBzdGF0ZS5pbnN0YW5jZVByZWZpeDtcbiAgICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICAgICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW4sXG4gICAgICAgIGlucHV0VmFsdWUgPSBwcm9wcy5pbnB1dFZhbHVlLFxuICAgICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IGNsZWFuVmFsdWUodmFsdWUpO1xuICAgICAgdmFyIG5ld01lbnVPcHRpb25zU3RhdGUgPSB7fTtcbiAgICAgIGlmIChwcmV2UHJvcHMgJiYgKHZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUgfHwgb3B0aW9ucyAhPT0gcHJldlByb3BzLm9wdGlvbnMgfHwgbWVudUlzT3BlbiAhPT0gcHJldlByb3BzLm1lbnVJc09wZW4gfHwgaW5wdXRWYWx1ZSAhPT0gcHJldlByb3BzLmlucHV0VmFsdWUpKSB7XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zID0gbWVudUlzT3BlbiA/IGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIDogW107XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IG1lbnVJc09wZW4gPyBidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSksIFwiXCIuY29uY2F0KGluc3RhbmNlUHJlZml4LCBcIi1vcHRpb25cIikpIDogW107XG4gICAgICAgIHZhciBmb2N1c2VkVmFsdWUgPSBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZSA/IGdldE5leHRGb2N1c2VkVmFsdWUoc3RhdGUsIHNlbGVjdFZhbHVlKSA6IG51bGw7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gZ2V0TmV4dEZvY3VzZWRPcHRpb24oc3RhdGUsIGZvY3VzYWJsZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgbmV3TWVudU9wdGlvbnNTdGF0ZSA9IHtcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBmb2N1c2FibGVPcHRpb25zV2l0aElkczogZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21lIHVwZGF0ZXMgc2hvdWxkIHRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGlucHV0IHZpc2liaWxpdHlcbiAgICAgIHZhciBuZXdJbnB1dElzSGlkZGVuU3RhdGUgPSBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgIT0gbnVsbCAmJiBwcm9wcyAhPT0gcHJldlByb3BzID8ge1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogdW5kZWZpbmVkXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbmV3QXJpYVNlbGVjdGlvbiA9IGFyaWFTZWxlY3Rpb247XG4gICAgICB2YXIgaGFzS2VwdEZvY3VzID0gaXNGb2N1c2VkICYmIHByZXZXYXNGb2N1c2VkO1xuICAgICAgaWYgKGlzRm9jdXNlZCAmJiAhaGFzS2VwdEZvY3VzKSB7XG4gICAgICAgIC8vIElmIGB2YWx1ZWAgb3IgYGRlZmF1bHRWYWx1ZWAgcHJvcHMgYXJlIG5vdCBlbXB0eSB0aGVuIGFubm91bmNlIHRoZW1cbiAgICAgICAgLy8gd2hlbiB0aGUgU2VsZWN0IGlzIGluaXRpYWxseSBmb2N1c2VkXG4gICAgICAgIG5ld0FyaWFTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlVGVybmFyeShpc011bHRpLCBzZWxlY3RWYWx1ZSwgc2VsZWN0VmFsdWVbMF0gfHwgbnVsbCksXG4gICAgICAgICAgb3B0aW9uczogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgYWN0aW9uOiAnaW5pdGlhbC1pbnB1dC1mb2N1cydcbiAgICAgICAgfTtcbiAgICAgICAgaGFzS2VwdEZvY3VzID0gIXByZXZXYXNGb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgJ2luaXRpYWwtaW5wdXQtZm9jdXMnIGFjdGlvbiBoYXMgYmVlbiBzZXQgYWxyZWFkeVxuICAgICAgLy8gdGhlbiByZXNldCB0aGUgYXJpYVNlbGVjdGlvbiB0byBudWxsXG4gICAgICBpZiAoKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cycpIHtcbiAgICAgICAgbmV3QXJpYVNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG5ld01lbnVPcHRpb25zU3RhdGUpLCBuZXdJbnB1dElzSGlkZGVuU3RhdGUpLCB7fSwge1xuICAgICAgICBwcmV2UHJvcHM6IHByb3BzLFxuICAgICAgICBhcmlhU2VsZWN0aW9uOiBuZXdBcmlhU2VsZWN0aW9uLFxuICAgICAgICBwcmV2V2FzRm9jdXNlZDogaGFzS2VwdEZvY3VzXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlbGVjdDtcbn0oQ29tcG9uZW50KTtcblNlbGVjdC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbmV4cG9ydCB7IFNlbGVjdCBhcyBTLCBkZWZhdWx0UHJvcHMgYXMgYSwgZ2V0T3B0aW9uTGFiZWwkMSBhcyBiLCBjcmVhdGVGaWx0ZXIgYXMgYywgZGVmYXVsdFRoZW1lIGFzIGQsIGdldE9wdGlvblZhbHVlJDEgYXMgZywgbWVyZ2VTdHlsZXMgYXMgbSB9O1xuIiwgImltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmV4cG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTIGFzIFNlbGVjdCB9IGZyb20gJy4vU2VsZWN0LTQ5YTYyODMwLmVzbS5qcyc7XG5leHBvcnQgeyBjIGFzIGNyZWF0ZUZpbHRlciwgZCBhcyBkZWZhdWx0VGhlbWUsIG0gYXMgbWVyZ2VTdHlsZXMgfSBmcm9tICcuL1NlbGVjdC00OWE2MjgzMC5lc20uanMnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5leHBvcnQgeyBjIGFzIGNvbXBvbmVudHMgfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgJ21lbW9pemUtb25lJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCAndXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5cbnZhciBTdGF0ZU1hbmFnZWRTZWxlY3QgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgYmFzZVNlbGVjdFByb3BzID0gdXNlU3RhdGVNYW5hZ2VyKHByb3BzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGJhc2VTZWxlY3RQcm9wcykpO1xufSk7XG52YXIgU3RhdGVNYW5hZ2VkU2VsZWN0JDEgPSBTdGF0ZU1hbmFnZWRTZWxlY3Q7XG5cbnZhciBOb25jZVByb3ZpZGVyID0gKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBub25jZSA9IF9yZWYubm9uY2UsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNhY2hlS2V5ID0gX3JlZi5jYWNoZUtleTtcbiAgdmFyIGVtb3Rpb25DYWNoZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVDYWNoZSh7XG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgbm9uY2U6IG5vbmNlXG4gICAgfSk7XG4gIH0sIFtjYWNoZUtleSwgbm9uY2VdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZW1vdGlvbkNhY2hlXG4gIH0sIGNoaWxkcmVuKTtcbn0pO1xuXG5leHBvcnQgeyBOb25jZVByb3ZpZGVyLCBTdGF0ZU1hbmFnZWRTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IHVzZUVkaXRhYmxlRGlzcGF0Y2ggfSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgVGFyZ2V0ZWRFdmVudCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIGEgYm9vbGVhbiAodHJ1ZS9mYWxzZSkgdmFsdWUuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQm9vbGVhbkVkaXRhYmxlKHByb3BzOiBGaWVsZENvbnRyb2xQcm9wczxib29sZWFuPikge1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxib29sZWFuPih7XG4gICAgICAgIGNvbnRlbnQ6IHByb3BzLnZhbHVlID8/IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogcHJvcHMudXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZXZ0OiBUYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+ICYgTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gIWV2dC5jdXJyZW50VGFyZ2V0Lmhhc0NsYXNzKFwiaXMtZW5hYmxlZFwiKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWUgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29tbWl0XCIsIG5ld1ZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbc3RhdGUuY29udGVudCwgc3RhdGUsIHByb3BzLnZhbHVlXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2hhbmdlfSBjbGFzc05hbWU9e2BjaGVja2JveC1jb250YWluZXIke3N0YXRlLmNvbnRlbnQgPyBcIiBpcy1lbmFibGVkXCIgOiBcIlwifWB9PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEVkaXRhYmxlLCBFZGl0YWJsZUFjdGlvbiwgRWRpdGFibGVTdGF0ZSB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vZmllbGRzLmNzc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIG11bHRpLXN0ZXAgcHJvZ3Jlc3MuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvZ3Jlc3NFZGl0YWJsZShcbiAgICBwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+ICYge1xuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgc3RlcDogbnVtYmVyO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248bnVtYmVyPj47XG4gICAgfVxuKSB7XG4gICAgY29uc3QgdmFsID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHZhbC5jdXJyZW50IH0pO1xuICAgIH0sIFt2YWwuY3VycmVudF0pO1xuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBwcm9wcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1pdFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbC5jdXJyZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZUNCID0gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZmluYWxpemUoKTtcbiAgICAgICAgICAgIHZhbC5jdXJyZW50ID0gcGFyc2VGbG9hdChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdmFsLmN1cnJlbnQsIHByb3BzLnNvdXJjZVBhdGhdXG4gICAgKTtcbiAgICBjb25zdCByZWFkT25seSA9IDxwcm9ncmVzcyB2YWx1ZT17dmFsLmN1cnJlbnR9IG1pbj17cHJvcHMubWlufSBtYXg9e3Byb3BzLm1heH0gc3RlcD17cHJvcHMuc3RlcH0gLz47XG5cbiAgICBjb25zdCBlZGl0b3IgPSAoXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJkYXRhY29yZS1wcm9ncmVzcy1lZGl0YWJsZVwiIHZhbHVlPXt2YWwuY3VycmVudH0gb25DaGFuZ2U9e2NoYW5nZUNCfSAvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCI+XG4gICAgICAgICAgICA8RWRpdGFibGU8bnVtYmVyPlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtwcm9wcy5kaXNwYXRjaH1cbiAgICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgICBzdGF0ZT17eyAuLi5wcm9wcywgY29udGVudDogdmFsLmN1cnJlbnQsIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nIH19XG4gICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVhZE9ubHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgdXNlRWRpdGFibGVEaXNwYXRjaCB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcblxuaW1wb3J0IFwiLi9maWVsZHMuY3NzXCI7XG5cbi8qKiBFZGl0YWJsZSBmaWVsZCBmb3IgYSBzdGFyLWJhc2VkIHJhdGluZyBmaWVsZC5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYXRpbmdFZGl0YWJsZSh7IHZhbHVlLCB1cGRhdGVyLCBjb25maWc6IGNvbmZpZywgZGVmYXVsdFZhbHVlIH06IEZpZWxkQ29udHJvbFByb3BzPG51bWJlciB8IHN0cmluZz4pIHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyIHwgc3RyaW5nPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlID8/IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLmNvbnRlbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmNvbnRlbnQuY29udGFpbnMoXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0ID0gc3RhdGUuY29udGVudC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHNwbGl0WzBdKSAvIHBhcnNlSW50KHNwbGl0WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oc3RhdGUuY29udGVudCwgNSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSwgW3N0YXRlLmNvbnRlbnRdKTtcblxuICAgIGNvbnN0IHN0YXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCByOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjb25maWc/Lm1heCA/PyA1KTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2xpY2tDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jb250ZW50LmNvbnRhaW5zKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBgJHtpICsgMX0vNWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5jb250ZW50ID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBNYXRoLm1pbihpICsgMSwgY29uZmlnPy5tYXggPz8gNSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbW1pdFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICB9LCBbc3RhdGUsIHBhcnNlZFZhbHVlLCBpXSk7XG4gICAgICAgICAgICBsZXQgY2xhc3NlcyA9IFtcImRhdGFjb3JlLXJhdGluZy1zdGFyXCJdO1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGkgPCBwYXJzZWRWYWx1ZSA/IFwiZmlsbGVkXCIgOiBcImVtcHR5XCIpO1xuICAgICAgICAgICAgci5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9e2NsaWNrQ2J9IGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICYjOTczMztcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH0sIFtwYXJzZWRWYWx1ZSwgc3RhdGVdKTtcblxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJkYXRhY29yZS1yYXRpbmdcIj57c3RhcnN9PC9zcGFuPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgc2V0RW1vamlTaG9ydGhhbmRDb21wbGV0aW9uRmllbGQsIHNldElubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IE1hcmtkb3duUGFnZSwgTWFya2Rvd25TZWN0aW9uLCBNYXJrZG93bkJsb2NrLCBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRG90RmllbGQocmF3OiBzdHJpbmcsIG9iajogYW55KSB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBpZiAocmF3LmNvbnRhaW5zKFwiLlwiKSlcbiAgICAgICAgcmV0dXJuIHJhdy5zcGxpdChcIi5cIikucmVkdWNlKCh0aWYsIGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGlmID09IFwib2JqZWN0XCIpIHJldHVybiB0aWZbY107XG4gICAgICAgICAgICBlbHNlIHJldHVybiB0aWY7XG4gICAgICAgIH0sIG9iaiB8fCB7fSk7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqW3Jhd107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZChpbnB1dDogSW5kZXhhYmxlLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFya2Rvd25QYWdlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duU2VjdGlvbikge1xuICAgICAgICByZXR1cm4gaW5wdXQuZmllbGQoZmllbGQpPy52YWx1ZSA/PyBudWxsO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBNYXJrZG93bkJsb2NrKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmZpZWxkKGZpZWxkKT8udmFsdWUgPz8gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufSAvKiogVHJpbSBlbXB0eSBlbmRpbmcgbGluZXMuICovXG5mdW5jdGlvbiB0cmltRW5kaW5nTGluZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFydHMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuL3UpO1xuICAgIGxldCB0cmltID0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAodHJpbSA+IDAgJiYgcGFydHNbdHJpbV0udHJpbSgpID09IFwiXCIpIHRyaW0tLTtcblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xufVxuLyoqIFNldCB0aGUgdGFzayBjb21wbGV0aW9uIGtleSBvbiBjaGVjay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYXNrQ29tcGxldGlvbihcbiAgICB0YXNrOiBNYXJrZG93blRhc2tJdGVtLFxuICAgIG9yaWdpbmFsVGV4dDogc3RyaW5nLFxuICAgIHVzZUVtb2ppU2hvcnRoYW5kOiBib29sZWFuLFxuICAgIGNvbXBsZXRpb25LZXk6IHN0cmluZyxcbiAgICBjb21wbGV0aW9uRGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIGNvbXBsZXRlOiBib29sZWFuXG4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGJsb2NrSWRSZWdleCA9IC9cXF5bYS16MC05XFwtXSsvaTtcblxuICAgIGlmICghY29tcGxldGUgJiYgIXVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrLiRpbmZpZWxkc1tjb21wbGV0aW9uS2V5XTtcbiAgICAgICAgcmV0dXJuIHRyaW1FbmRpbmdMaW5lcyhzZXRJbmxpbmVGaWVsZChvcmlnaW5hbFRleHQudHJpbUVuZCgpLCBjb21wbGV0aW9uS2V5KSkudHJpbUVuZCgpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG9yaWdpbmFsVGV4dC5zcGxpdCgvXFxyP1xcbi91KTtcbiAgICBjb25zdCBtYXRjaGVzID0gYmxvY2tJZFJlZ2V4LmV4ZWMocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgbGV0IHByb2Nlc3NlZFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5zcGxpdChibG9ja0lkUmVnZXgpLmpvaW4oXCJcIik7IC8vIGxhc3QgcGFydCB3aXRob3V0IGJsb2NrIGlkXG4gICAgaWYgKHVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIHByb2Nlc3NlZFBhcnQgPSBzZXRFbW9qaVNob3J0aGFuZENvbXBsZXRpb25GaWVsZChcbiAgICAgICAgICAgIHByb2Nlc3NlZFBhcnQsXG4gICAgICAgICAgICBjb21wbGV0ZSA/IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwieXl5eS1NTS1kZFwiKSA6IFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzZWRQYXJ0ID0gc2V0SW5saW5lRmllbGQocHJvY2Vzc2VkUGFydCwgY29tcGxldGlvbktleSwgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpKTtcbiAgICAgICAgdGFzay4kaW5maWVsZHNbY29tcGxldGlvbktleV0gPSB7XG4gICAgICAgICAgICByYXc6IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KGNvbXBsZXRpb25EYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBEYXRlVGltZS5ub3coKSxcbiAgICAgICAgICAgIGtleTogY29tcGxldGlvbktleSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgbGluZTogdGFzay4kbGluZSxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlOiAwLFxuICAgICAgICAgICAgICAgIGVuZDogRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm9jZXNzZWRQYXJ0ID0gYCR7cHJvY2Vzc2VkUGFydC50cmltRW5kKCl9JHttYXRjaGVzPy5sZW5ndGggPyBcIiBcIiArIG1hdGNoZXNbMF0udHJpbSgpIDogXCJcIn1gLnRyaW1FbmQoKTsgLy8gYWRkIGJhY2sgYmxvY2sgaWRcbiAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IHByb2Nlc3NlZFBhcnQudHJpbVN0YXJ0KCk7XG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IExJU1RfSVRFTV9SRUdFWCA9IC9eW1xccz5dKihcXGQrXFwufFxcZCtcXCl8XFwqfC18XFwrKVxccyooXFxbLnswLDF9XFxdKT9cXHMqKC4qKSQvbXU7XG5cbi8qKiBSZXdyaXRlIGEgdGFzayB3aXRoIHRoZSBnaXZlbiBjb21wbGV0aW9uIHN0YXR1cyBhbmQgbmV3IHRleHQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV3cml0ZVRhc2soXG4gICAgdmF1bHQ6IFZhdWx0LFxuICAgIGNvcmU6IERhdGFjb3JlLFxuICAgIHRhc2s6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtLFxuICAgIGRlc2lyZWRTdGF0dXM6IHN0cmluZyxcbiAgICBkZXNpcmVkVGV4dD86IHN0cmluZ1xuKSB7XG4gICAgaWYgKFxuICAgICAgICB0YXNrIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSAmJlxuICAgICAgICBkZXNpcmVkU3RhdHVzID09IHRhc2suJHN0YXR1cyAmJlxuICAgICAgICAoZGVzaXJlZFRleHQgPT0gdW5kZWZpbmVkIHx8IGRlc2lyZWRUZXh0ID09IHRhc2suJHRleHQpXG4gICAgKVxuICAgICAgICByZXR1cm47XG4gICAgZGVzaXJlZFN0YXR1cyA9IGRlc2lyZWRTdGF0dXMgPT0gXCJcIiA/IFwiIFwiIDogZGVzaXJlZFN0YXR1cztcblxuICAgIGxldCByYXdGaWxldGV4dCA9IGF3YWl0IHZhdWx0LmFkYXB0ZXIucmVhZCh0YXNrLiRmaWxlKTtcbiAgICBsZXQgaGFzUk4gPSByYXdGaWxldGV4dC5jb250YWlucyhcIlxcclwiKTtcbiAgICBsZXQgZmlsZXRleHQgPSByYXdGaWxldGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vdSk7XG5cbiAgICBpZiAoZmlsZXRleHQubGVuZ3RoIDwgdGFzay4kbGluZSkgcmV0dXJuO1xuICAgIGxldCBtYXRjaCA9IExJU1RfSVRFTV9SRUdFWC5leGVjKGZpbGV0ZXh0W3Rhc2suJGxpbmVdKTtcbiAgICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdPy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IHRhc2tUZXh0UGFydHMgPSB0YXNrLiR0ZXh0IS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBpZiAodGFza1RleHRQYXJ0c1swXS50cmltKCkgIT0gbWF0Y2hbM10udHJpbSgpKSByZXR1cm47XG5cbiAgICAvLyBXZSBoYXZlIGEgcG9zaXRpdmUgbWF0Y2ggaGVyZSBhdCB0aGlzIHBvaW50LCBzbyBnbyBhaGVhZCBhbmQgZG8gdGhlIHJld3JpdGUgb2YgdGhlIHN0YXR1cy5cbiAgICBjb25zdCBzdGF0dXNQYXJ0ID0gdGFzayBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBgWyR7ZGVzaXJlZFN0YXR1c31dYCA6IFwiXCI7XG4gICAgbGV0IGluaXRpYWxTcGFjaW5nID0gL15bXFxzPl0qL3UuZXhlYyhmaWxldGV4dFt0YXNrLiRsaW5lXSkhIVswXTtcbiAgICBpZiAoZGVzaXJlZFRleHQpIHtcbiAgICAgICAgbGV0IGRlc2lyZWRQYXJ0cyA9IGRlc2lyZWRUZXh0LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICAgIGxldCBuZXdUZXh0TGluZXM6IHN0cmluZ1tdID0gW2Ake2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7ZGVzaXJlZFBhcnRzWzBdfWBdLmNvbmNhdChcbiAgICAgICAgICAgIGRlc2lyZWRQYXJ0cy5zbGljZSgxKS5tYXAoKGwpID0+IGluaXRpYWxTcGFjaW5nICsgXCJcXHRcIiArIGwudHJpbVN0YXJ0KCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZmlsZXRleHQuc3BsaWNlKHRhc2suJGxpbmUsIHRhc2suJHRleHQhLnNwbGl0KFwiXFxuXCIpLmxlbmd0aCwgLi4ubmV3VGV4dExpbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmaWxldGV4dFt0YXNrLiRsaW5lXSA9IGAke2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7dGFza1RleHRQYXJ0c1swXS50cmltKCl9YDtcbiAgICB9XG5cbiAgICBsZXQgbmV3VGV4dCA9IGZpbGV0ZXh0LmpvaW4oaGFzUk4gPyBcIlxcclxcblwiIDogXCJcXG5cIik7XG4gICAgYXdhaXQgdmF1bHQuYWRhcHRlci53cml0ZSh0YXNrLiRmaWxlLCBuZXdUZXh0KTtcbiAgICBjb25zdCB0ZmlsZSA9IHZhdWx0LmdldEZpbGVCeVBhdGgodGFzay4kZmlsZSk7XG4gICAgaWYgKHRmaWxlKSBjb3JlLnJlbG9hZCh0ZmlsZSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGxldGVUYXNrKGNvbXBsZXRlZDogYm9vbGVhbiwgdGFzazogTWFya2Rvd25UYXNrSXRlbSwgdmF1bHQ6IFZhdWx0LCBjb3JlOiBEYXRhY29yZSkge1xuICAgIGNvbnN0IHRhc2tzVG9Db21wbGV0ZSA9IFt0YXNrXTtcbiAgICBpZiAoY29yZS5zZXR0aW5ncy5yZWN1cnNpdmVUYXNrQ29tcGxldGlvbikge1xuICAgICAgICBjb25zdCBmb3JFYWNoID0gKHg6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0pIHRhc2tzVG9Db21wbGV0ZS5wdXNoKHgpO1xuICAgICAgICAgICAgeC4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGFzay4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0IG9mIHRhc2tzVG9Db21wbGV0ZSkge1xuICAgICAgICBsZXQgbmV3VGV4dCA9IHNldFRhc2tDb21wbGV0aW9uKFxuICAgICAgICAgICAgdCxcbiAgICAgICAgICAgIHQuJHRleHQhLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblRleHQsXG4gICAgICAgICAgICBjb3JlLnNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0LFxuICAgICAgICAgICAgY29tcGxldGVkXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHJld3JpdGVUYXNrKHZhdWx0LCBjb3JlLCB0LCBjb21wbGV0ZWQgPyBcInhcIiA6IFwiIFwiLCBuZXdUZXh0KTtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGluZGV4YWJsZXNcbiAqL1xuLyoqIFV0aWxpdGllcyBmb3IgY29udmVydGluZyBsaXRlcmFsIHR5cGVzIHRvIGFuZCBmcm9tIHRoZWlyIFlBTUwgZnJvbnRtYXR0ZXIgcmVwcmVzZW50YXRpb24uICovXG5cbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUFJJTUlUSVZFUyB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBZQU1MLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIGZvciBhIGxpdGVyYWwuICovXG5leHBvcnQgdHlwZSBZYW1sTGl0ZXJhbCA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IEFycmF5PFlhbWxMaXRlcmFsPjtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgWWFtbENvbnZlcnNpb24ge1xuICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCBpbnRvIGEgeWFtbCBmcmllbmRseSByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24geWFtbCh2YWx1ZTogTGl0ZXJhbCk6IFlhbWxMaXRlcmFsIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShsaXRlcmFsKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAoeWFtbCk7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSVNPKCk7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b0h1bWFuKCk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHdyYXBwZWQudmFsdWUsIHlhbWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgYSBZQU1MIGxpdGVyYWwgaW50byBhIHJlZ3VsYXIgbGl0ZXJhbCB2YWx1ZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogWWFtbExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHZhbHVlIGFzIEFycmF5PGFueT4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGl0ZXJhbChjaGlsZCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBEYXRlVGltZS5mcm9tSlNEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVBhcnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBsaXRlcmFsKG9iamVjdFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBQUklNSVRJVkVTLmRhdGUucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRhdGVQYXJzZS5zdGF0dXMpIHJldHVybiBkYXRlUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIGxldCBkdXJhdGlvblBhcnNlID0gUFJJTUlUSVZFUy5kdXJhdGlvbi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb25QYXJzZS5zdGF0dXMpIHJldHVybiBkdXJhdGlvblBhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICBsZXQgbGlua1BhcnNlID0gUFJJTUlUSVZFUy5saW5rLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChsaW5rUGFyc2Uuc3RhdHVzKSByZXR1cm4gbGlua1BhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrdXAgaWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgdHlwZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgIi8qKiBDZW50cmFsIHV0aWxpdGllcyBmb3IgZWRpdGluZyBmaWVsZHMgYnkgc2V0dGluZyBuZXcgdmFsdWVzIGluIGZpbGVzLCBhbmQgdHJhY2tpbmcgb3V0c3RhbmRpbmcgZWRpdHMuICovXG5cbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBQcm92ZW5hbmNlIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBZYW1sQ29udmVyc2lvbiB9IGZyb20gXCJpbmRleC90eXBlcy95YW1sXCI7XG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBsaW5lUmVwbGFjZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG4vKiogRWRpdCBhIGZpZWxkIGJ5IGl0J3MgcHJvdmVuYW5jZSAoaS5lLiwgc291cmNlKTsgcmV0dXJucyBhIHByb21pc2Ugd2hpY2ggY2FuIGJlIGF3YWl0ZWQgdG8gd2FpdCBmb3IgdGhlIGZpbGUgd3JpdGUgdG8gY29tcGxldGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdFByb3ZlbmFuY2UoYXBwOiBBcHAsIHByb3ZlbmFuY2U6IFByb3ZlbmFuY2UsIHZhbHVlOiBMaXRlcmFsKTogUHJvbWlzZTxSZXN1bHQ8bnVsbCwgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwcm92ZW5hbmNlLmZpbGUpO1xuICAgIGlmICghZmlsZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke3Byb3ZlbmFuY2UuZmlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBUT0RPOiBJZiB3ZSBldmVyIHN1cHBvcnQgY3VzdG9tIHR5cGVzLCB3ZSdsbCB3YW50IHRvIGNoYW5nZSB0aGlzIHN3aXRjaCBpbnRvIHNvbWUga2luZCBvZiBkeW5hbWljIGxvb2t1cC5cbiAgICBzd2l0Y2ggKHByb3ZlbmFuY2UudHlwZSkge1xuICAgICAgICBjYXNlIFwiZnJvbnRtYXR0ZXJcIjpcbiAgICAgICAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgcHJvdmVuYW5jZS5rZXkgaW4gZnJvbnRtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyW3Byb3ZlbmFuY2Uua2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcm9udG1hdHRlcltwcm92ZW5hbmNlLmtleV0gPSBZYW1sQ29udmVyc2lvbi55YW1sKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobnVsbCk7XG4gICAgICAgIGNhc2UgXCJpbmxpbmUtZmllbGRcIjpcbiAgICAgICAgICAgIHJldHVybiBlZGl0SW5saW5lRmllbGQoYXBwLCBmaWxlLCBwcm92ZW5hbmNlLmxpbmUsIHByb3ZlbmFuY2Uua2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuXG4vKiogQ29tcGxldGUgd29ya2Zsb3cgZm9yIGVkaXRpbmcgYW4gaW5saW5lIGZpZWxkLiAgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0SW5saW5lRmllbGQoXG4gICAgYXBwOiBBcHAsXG4gICAgZmlsZTogVEZpbGUsXG4gICAgbGluZTogbnVtYmVyLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBMaXRlcmFsXG4pOiBQcm9taXNlPFJlc3VsdDxudWxsLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgIGlmICghY29udGVudCkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke2ZpbGUucGF0aH0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBGaW5kIHRoZSBleHRlbnQgb2YgdGhlIGdpdmVuIGxpbmUgKDAtaW5kZXhlZCksIGV4dHJhY3QgaXQgYW5kIHVwZGF0ZS5cbiAgICBjb25zdCB1cGRhdGVkID0gbGluZVJlcGxhY2UoY29udGVudCwgbGluZSwgbGluZSArIDEsIChsaW5lKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgc3RyaW5naWYtaWNhdGlvbiBvZiB0aGUgdmFsdWUgaXMgbm90IGNvcnJlY3QgYW5kIHdpbGwgbm90IHdvcmtcbiAgICAgICAgLy8gZm9yIGFycmF5cyBvciBvYmplY3RzLCBidXQgd2lsbCBzZXJ2ZSBwdXJwb3NlIGZvciBub3cuLi5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBzZXRJbmxpbmVGaWVsZChsaW5lLCBrZXksIHVuZGVmaW5lZCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHNldElubGluZUZpZWxkKGxpbmUsIGtleSwgXCJcIiArIFlhbWxDb252ZXJzaW9uLnlhbWwodmFsdWUpKTtcbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVkID09IGNvbnRlbnQpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgdXBkYXRlZCk7XG4gICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKG51bGwpO1xufVxuIiwgImltcG9ydCB7IEZpZWxkIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEFQUF9DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCIuL3Rhc2tcIjtcbmltcG9ydCB7IEVkaXRhYmxlQWN0aW9uIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IGVkaXRQcm92ZW5hbmNlIH0gZnJvbSBcImluZGV4L2VkaXQvZmllbGRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNldEZpZWxkPFQgZXh0ZW5kcyBMaXRlcmFsPihmaWVsZDogRmllbGQsIG9uQ2hhbmdlPzogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgIGVkaXRQcm92ZW5hbmNlKGFwcCwgZmllbGQucHJvdmVuYW5jZSEsIG5ld1ZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbZmllbGQsIG9uQ2hhbmdlXVxuICAgICk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VGFza1RleHQoYXBwOiBBcHAsIGNvcmU6IERhdGFjb3JlLCB0ZXh0OiBzdHJpbmcsIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0pIHtcbiAgICBsZXQgd2l0aEZpZWxkcyA9IGAke3RleHR9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICB9XG4gICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBpdGVtLiRzdGF0dXMsIHdpdGhGaWVsZHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpbmFsaXplcjxUPihuZXdWYWx1ZTogVCwgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPFQ+Pikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSB1aVxuICovXG5pbXBvcnQgeyBGcmFnbWVudCwgRnVuY3Rpb25Db21wb25lbnQsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIFJlZHVjZXIsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENoYW5nZUV2ZW50LCB1c2VSZWR1Y2VyIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCBTZWxlY3QsIHsgQWN0aW9uTWV0YSB9IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcIi4uL2hvb2tzXCI7XG5pbXBvcnQgeyBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgTGl0LCBNYXJrZG93biwgU0VUVElOR1NfQ09OVEVYVCB9IGZyb20gXCIuLi9tYXJrZG93blwiO1xuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbFR5cGUsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IEJhc2VGaWVsZFByb3BzLCBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgQm9vbGVhbkVkaXRhYmxlIH0gZnJvbSBcIi4vYm9vbGVhbi1maWVsZFwiO1xuaW1wb3J0IHsgUHJvZ3Jlc3NFZGl0YWJsZSB9IGZyb20gXCIuL3Byb2dyZXNzLWZpZWxkXCI7XG5pbXBvcnQgeyBSYXRpbmdFZGl0YWJsZSB9IGZyb20gXCIuL3JhdGluZ1wiO1xuaW1wb3J0IHsgdXNlRmluYWxpemVyIH0gZnJvbSBcInV0aWxzL2ZpZWxkc1wiO1xuXG5pbXBvcnQgXCIuL2ZpZWxkcy5jc3NcIjtcblxuLyoqIENvcmUgc3RhdGUgZm9yIHRyYWNraW5nIGFuIGVkaXRhYmxlIG9iamVjdC5cbiAqIEBncm91cCBTdGF0ZXNcbiAqIEB0eXBlUGFyYW0gVCAtIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBiZWluZyBlZGl0ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gKi9cbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCAoYXJiaXRyYXJ5KSBjb250ZW50IG9mIHRoZSBlZGl0YWJsZS4gKi9cbiAgICBjb250ZW50OiBUO1xuICAgIC8qKiBDYWxsYmFjayB3aGVuZXZlciB0aGUgZWRpdGFibGUgdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICB1cGRhdGVyOiAodmFsOiBUKSA9PiB1bmtub3duO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgaXMgYmVpbmcgcmVuZGVyZWQgaW5saW5lIGluIGEgcGFyYWdyYXBoIG9yIG5vdC4gKi9cbiAgICBpbmxpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBncm91cCBQcm9wc1xuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGJlaW5nIGVkaXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRhYmxlUHJvcHM8VD4ge1xuICAgIC8qKiBTb3VyY2UgZmlsZSBmcm9tIHdoaWNoIHRoZSBlZGl0YWJsZSB2YWx1ZSBvcmlnaW5hdGVzLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgLyoqIEJhY2t1cCBkZWZhdWx0IHJlbmRlcmVyIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBkZWZhdWx0UmVuZGVyPzogVk5vZGU7XG4gICAgLyoqIE5vZGUgd2hpY2ggcG9pbnRzIHRvIHRoZSBhY3R1YWwgZWRpdG9yLiAqL1xuICAgIGVkaXRvcjogUmVhY3QuUmVhY3ROb2RlO1xuICAgIC8qKiBEaXNwYXRjaGVyIGZvciBjb250cm9sbGluZyB0aGUgZWRpdCBzdGF0ZSwgdHJhY2tpbmcgdXBkYXRlcywgY29tbWl0cywgYW5kIHNvIG9uLiAqL1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxUPj47XG4gICAgLyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBlZGl0b3IuICovXG4gICAgc3RhdGU6IEVkaXRhYmxlU3RhdGU8VD47XG59XG5cbnR5cGUgRWRpdGFibGVFbGVtZW50UHJvcHM8VCwgUD4gPSBFZGl0YWJsZVN0YXRlPFQ+ICYgUDtcbmV4cG9ydCB0eXBlIEVkaXRhYmxlRWxlbWVudDxULCBQID0gYW55PiA9IEZ1bmN0aW9uQ29tcG9uZW50PEVkaXRhYmxlRWxlbWVudFByb3BzPFQsIFA+ICYgUD47XG5cbi8qKlxuICogIEFjdGlvbnMgd2hpY2ggdXBkYXRlL2NoYW5nZSB0aGUgc3RhdGUgb2YgYW4gZWRpdGFibGUuXG4gKlxuICogQGludGVybmFsXG4gKiAqL1xuZXhwb3J0IHR5cGUgRWRpdGFibGVBY3Rpb248VD4gPVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCI7XG4gICAgICAgICAgLy8gb2xkVmFsdWU6IGFueSxcbiAgICAgICAgICBuZXdWYWx1ZTogVDtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiO1xuICAgICAgICAgIG5ld1ZhbHVlOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCI7XG4gICAgICAgICAgbmV3VmFsdWU6IFQ7XG4gICAgICB9O1xuXG4vKiogRGVmYXVsdCByZWR1Y2VyIGZvciBhcHBseWluZyBhY3Rpb25zIHRvIHRoZSBlZGl0YWJsZSBzdGF0ZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRhYmxlUmVkdWNlcjxUPihcbiAgICB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTogRWRpdGFibGVTdGF0ZTxUPixcbiAgICBhY3Rpb246IEVkaXRhYmxlQWN0aW9uPFQ+XG4pOiBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJjb21taXRcIjpcbiAgICAgICAgICAgIHVwZGF0ZXIoYWN0aW9uLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIHVwZGF0ZXIsIGNvbnRlbnQ6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiZWRpdGluZy10b2dnbGVkXCI6XG4gICAgICAgICAgICAhYWN0aW9uLm5ld1ZhbHVlICYmIHVwZGF0ZXIoY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50LCBpc0VkaXRpbmc6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiY29udGVudC1jaGFuZ2VkXCI6XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50OiBhY3Rpb24ubmV3VmFsdWUgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBhbiBlZGl0YWJsZSBmaWVsZC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRWRpdGFibGVEaXNwYXRjaDxUPihcbiAgICBpbml0aWFsOiBFZGl0YWJsZVN0YXRlPFQ+IHwgKCgpID0+IEVkaXRhYmxlU3RhdGU8VD4pXG4pOiBbRWRpdGFibGVTdGF0ZTxUPiwgRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248VD4+XSB7XG4gICAgY29uc3QgaW5pdCA9IHVzZU1lbW8oKCkgPT4gKHR5cGVvZiBpbml0aWFsID09IFwiZnVuY3Rpb25cIiA/IGluaXRpYWwoKSA6IGluaXRpYWwpLCBbaW5pdGlhbF0pO1xuICAgIHJldHVybiB1c2VSZWR1Y2VyKGVkaXRhYmxlUmVkdWNlciBhcyBSZWR1Y2VyPEVkaXRhYmxlU3RhdGU8VD4sIEVkaXRhYmxlQWN0aW9uPFQ+PiwgaW5pdCwgKHMpID0+IGluaXQpO1xufVxuLyoqXG4gKiBhIGhpZ2hlci1vcmRlci1jb21wb25lbnQgZm9yIGVkaXRpbmcgZmllbGRzLlxuICogQHBhcmFtIHByb3BzXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gRWRpdGFibGU8VD4oeyBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyLCBlZGl0b3IsIGRpc3BhdGNoLCBzdGF0ZSB9OiBFZGl0YWJsZVByb3BzPFQ+KSB7XG4gICAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLmlzRWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UmVuZGVyKSByZXR1cm4gZGVmYXVsdFJlbmRlcjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIDxMaXQgdmFsdWU9e3N0YXRlLmNvbnRlbnQgYXMgTGl0ZXJhbH0gaW5saW5lPXt0cnVlfSBzb3VyY2VQYXRoPVwiXCIgLz47XG4gICAgICAgIH1cbiAgICB9LCBbc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50LCBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCAmJiBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50LCBzdGF0ZS5pc0VkaXRpbmddKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlLW91dGVyXCIgcmVmPXtjdXJyZW50UmVmfT5cbiAgICAgICAgICAgIHtlbGVtZW50fVxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZWRFZGl0YWJsZTxULCBQID0gdW5rbm93bj4oe1xuICAgIGRlZmF1bHRSZW5kZXIsXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgb25VcGRhdGUsXG4gICAgY29udGVudCxcbiAgICBwcm9wcyxcbiAgICBzb3VyY2VQYXRoLFxufTogT21pdDxFZGl0YWJsZVByb3BzPFQ+LCBcImRpc3BhdGNoXCIgfCBcInN0YXRlXCIgfCBcImVkaXRvclwiPiAmIHtcbiAgICBvblVwZGF0ZTogKHY6IFQpID0+IHVua25vd247XG4gICAgY29udGVudDogVDtcbiAgICBlZGl0b3I6IEVkaXRhYmxlRWxlbWVudDxULCBQPjtcbiAgICBwcm9wczogUDtcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VFZGl0YWJsZURpc3BhdGNoPFQ+KCgpID0+ICh7XG4gICAgICAgIHVwZGF0ZXI6IG9uVXBkYXRlLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgIH0pKTtcbiAgICByZXR1cm4gPEVkaXRvciBkaXNwYXRjaD17ZGlzcGF0Y2h9IHsuLi5wcm9wc30gey4uLnN0YXRlfSAvPjtcbn1cblxuLyoqIEEgc2luZ2xlIHNlbGVjdGFibGUgdmFsdWUuXG4gKi9cbnR5cGUgU2VsZWN0YWJsZUJhc2UgPSBzdHJpbmcgfCBudW1iZXI7XG4vKiogQSB0eXBlIGZvciBlaXRoZXIgbXVsdGktIG9yIHNpbmdsZS1zZWxlY3QgdmFsdWVzLiAqL1xudHlwZSBTZWxlY3RhYmxlVHlwZSA9IFNlbGVjdGFibGVCYXNlIHwgU2VsZWN0YWJsZUJhc2VbXTtcblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW9uIGZyb20gYSBsaXN0IG9mIG9wdGlvbnMuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0YWJsZUVkaXRhYmxlKHtcbiAgICBpc0VkaXRpbmcsXG4gICAgY29udGVudCxcbiAgICB1cGRhdGVyLFxuICAgIGNvbmZpZyxcbiAgICBkaXNwYXRjaCxcbn06IEVkaXRhYmxlU3RhdGU8U2VsZWN0YWJsZVR5cGU+ICZcbiAgICBCYXNlRmllbGRQcm9wczxTZWxlY3RhYmxlVHlwZT4gJiB7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxTZWxlY3RhYmxlVHlwZT4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IGFueSwgYWN0aW9uTWV0YTogQWN0aW9uTWV0YTxTZWxlY3RhYmxlVHlwZT4pID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLm1hcCgoeCkgPT4geC52YWx1ZSkgYXMgU2VsZWN0YWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLnZhbHVlIGFzIFNlbGVjdGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbY29uZmlnLCBjb250ZW50LCB1cGRhdGVyLCBpc0VkaXRpbmddXG4gICAgKTtcblxuICAgIGNvbnN0IGVkaXRvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICB1bnN0eWxlZFxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2NvbmZpZz8ubXVsdGkgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgb3B0aW9ucz17Y29uZmlnPy5vcHRpb25zID8/IFtdfVxuICAgICAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICBjb25maWc/Lm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdKSBhcyBhbnlbXSkuY29udGFpbnMoeC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB8fCBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAocHJvcHM6IGFueSkgPT4gXCJwcm9tcHQtaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDb250YWluZXI6IChwcm9wczogYW55KSA9PiBcInN1Z2dlc3Rpb24taXRlbSB2YWx1ZS1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgICAgICBtZW51OiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRlbnQgc3VnZ2VzdGlvbi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiAocHJvcHM6IGFueSkgPT4gYHN1Z2dlc3Rpb24taXRlbSR7cHJvcHMuaXNTZWxlY3RlZCA/IFwiIGlzLXNlbGVjdGVkXCIgOiBcIlwifWAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSwgW2NvbnRlbnQsIHVwZGF0ZXIsIGlzRWRpdGluZywgY29uZmlnXSk7XG5cbiAgICByZXR1cm4gPEVkaXRhYmxlIGVkaXRvcj17ZWRpdG9yfSBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXt7IGlzRWRpdGluZywgY29udGVudCwgdXBkYXRlciB9fSAvPjtcbn1cblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW5nIGEgZGF0ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEYXRlRWRpdGFibGUoe1xuICAgIGRpc3BhdGNoLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgLi4ucmVzdFxufTogRWRpdGFibGVTdGF0ZTxEYXRlVGltZSB8IHN0cmluZyB8IG51bGw+ICYge1xuICAgIHNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPj47XG59KSB7XG4gICAgLyoqIHRoZSBleHRyYSBkaXNwYXRjaCBpcyBfanVzdF8gaW4gY2FzZS4uLiAqL1xuICAgIGNvbnN0IFtzdGF0ZSwgb10gPSB1c2VFZGl0YWJsZURpc3BhdGNoPERhdGVUaW1lIHwgc3RyaW5nIHwgbnVsbD4oKCkgPT4gKHtcbiAgICAgICAgaXNFZGl0aW5nOiByZXN0LmlzRWRpdGluZyxcbiAgICAgICAgY29udGVudDogcmVzdC5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiByZXN0LnVwZGF0ZXIsXG4gICAgICAgIGlubGluZTogcmVzdC5pbmxpbmUgPz8gZmFsc2UsXG4gICAgfSkpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKGV2dDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgbGV0IHYgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGV2dC5jdXJyZW50VGFyZ2V0LnZhbHVlKSk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogXCJjb21taXRcIixcbiAgICAgICAgICAgIG5ld1ZhbHVlOiAhIXYgPyBEYXRlVGltZS5mcm9tSlNEYXRlKHYpLnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBvKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QganNEYXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5jb250ZW50IGluc3RhbmNlb2YgRGF0ZVRpbWVcbiAgICAgICAgICAgID8gc3RhdGUuY29udGVudFxuICAgICAgICAgICAgOiB0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiICYmICEhc3RhdGUuY29udGVudFxuICAgICAgICAgICAgPyBEYXRlVGltZS5mcm9tSlNEYXRlKG5ldyBEYXRlKERhdGUucGFyc2Uoc3RhdGUuY29udGVudCkpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBlZGl0b3JOb2RlID0gPGlucHV0IHR5cGU9XCJkYXRlXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSB2YWx1ZT17anNEYXRlPy50b0Zvcm1hdChcInl5eXktTU0tZGRcIil9IC8+O1xuICAgIHJldHVybiA8RWRpdGFibGU8RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPiBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXtyZXN0fSBlZGl0b3I9e2VkaXRvck5vZGV9IC8+O1xufVxuXG4vKiogQW4gZWRpdG9yIHdoaWNoIGFsbG93cyBzZWxlY3RpbmcgYSBudW1uZXJpYyB2YWx1ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBOdW1iZXJFZGl0YWJsZShwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+KSB7XG4gICAgY29uc3QgY2ZjID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyPigoKSA9PiAoe1xuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgfSkpO1xuICAgIGNvbnN0IHZhbHVlID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUuY3VycmVudCA9IHBhcnNlRmxvYXQoKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZmluYWxpemUgPSB1c2VGaW5hbGl6ZXIodmFsdWUuY3VycmVudCwgZGlzcGF0Y2gpO1xuICAgIGNvbnN0IG9uSW5wdXQgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgYXN5bmMgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmluYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZGJsQ2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt2YWx1ZS5jdXJyZW50LCBzdGF0ZS51cGRhdGVyLCBzdGF0ZS5pc0VkaXRpbmcsIHN0YXRlLmNvbnRlbnRdXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYWRvbmx5RWwgPSA8TGl0IGlubGluZT17ZmFsc2V9IHNvdXJjZVBhdGg9e2NmY30gdmFsdWU9e3ZhbHVlLmN1cnJlbnQgYXMgTGl0ZXJhbH0gLz47XG4gICAgY29uc3QgZWRpdG9yID0gPGlucHV0IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlXCIgdHlwZT1cIm51bWJlclwiIG9uQ2hhbmdlPXtvbkNoYW5nZUNifSBvbktleVVwPXtvbklucHV0fSAvPjtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPG51bWJlcj4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuLyoqIEVkaXRvciB3aGljaCBzdXBwb3J0cyBtdWx0aS1saW5lIHRleHQgZWRpdGluZzsgbm90ZSB0aGlzIGlzIGEgdmVyeSBzaW1wbGUgaW5wdXQgYW5kIGRvZXMgbm90IHN1cHBvcnQgbW9zdCBtYXJrZG93biBtZXRhZGF0YS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0RWRpdGFibGUocHJvcHM6IEVkaXRhYmxlU3RhdGU8c3RyaW5nPiAmIHsgbWFya2Rvd24/OiBib29sZWFuOyBzb3VyY2VQYXRoOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGNmYyA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxzdHJpbmc+KCgpID0+ICh7XG4gICAgICAgIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHByb3BzLmlubGluZSA/PyBmYWxzZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0ZXh0ID0gdXNlUmVmKFwiLVwiKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB0ZXh0LmN1cnJlbnQgPSBzdGF0ZS5jb250ZW50O1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtwcm9wcy5jb250ZW50LCBzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBmaW5hbGl6ZSA9IHVzZUZpbmFsaXplcihzdGF0ZS5jb250ZW50LCBkaXNwYXRjaCk7XG4gICAgY29uc3Qgb25JbnB1dCA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlubGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmaW5hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuY29udGVudCwgc3RhdGUuaXNFZGl0aW5nXVxuICAgICk7XG5cbiAgICBjb25zdCBkYmxDbGljayA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZWRpdGluZy10b2dnbGVkXCIsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50XVxuICAgICk7XG4gICAgY29uc3QgcmVhZG9ubHlFbCA9IChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAge3Byb3BzLm1hcmtkb3duID8gKFxuICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXt0ZXh0LmN1cnJlbnQgYXMgc3RyaW5nfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gaW5saW5lPXtmYWxzZX0gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExpdCBpbmxpbmU9e2ZhbHNlfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gdmFsdWU9e3RleHQuY3VycmVudCBhcyBMaXRlcmFsfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICAgIGNvbnN0IGVkaXRvciA9IChcbiAgICAgICAgPFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSBvbklucHV0PXtvbklucHV0fSBpbmxpbmU9e3Byb3BzLmlubGluZX0gZGlzcGF0Y2g9e2Rpc3BhdGNofSB0ZXh0PXt0ZXh0LmN1cnJlbnR9IC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPHN0cmluZz4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSh7XG4gICAgaW5saW5lLFxuICAgIHRleHQsXG4gICAgZGlzcGF0Y2gsXG4gICAgb25JbnB1dCxcbn06IHtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBkaXNwYXRjaD86IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPHN0cmluZz4+O1xuICAgIG9uSW5wdXQ/OiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdW5rbm93bjtcbn0pIHtcbiAgICBjb25zdCBbdHh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlKHRleHQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoICYmIGRpc3BhdGNoKHsgbmV3VmFsdWU6IHR4dCwgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiB9KTtcbiAgICB9LCBbdHh0XSk7XG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgc2V0VGV4dCgoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdGV4dCwgZGlzcGF0Y2hdXG4gICAgKTtcblxuICAgIHJldHVybiAhaW5saW5lID8gKFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZWRpdGFibGVcIiBvbkNoYW5nZT17b25DaGFuZ2VDYn0gb25LZXlVcD17b25JbnB1dH0+XG4gICAgICAgICAgICB7dHh0fVxuICAgICAgICA8L3RleHRhcmVhPlxuICAgICkgOiAoXG4gICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJkYXRhY29yZS1lZGl0YWJsZVwiIHR5cGU9XCJ0ZXh0XCIgb25DaGFuZ2U9e29uQ2hhbmdlQ2J9IG9uS2V5VXA9e29uSW5wdXR9IC8+XG4gICAgKTtcbn1cbi8qKiBBbiBlZGl0YWJsZSBsaXN0IG9mIGl0ZW1zLlxuICpcbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFZGl0YWJsZUxpc3RGaWVsZCh7XG4gICAgcHJvcHMsXG4gICAgZmllbGQsXG4gICAgcGFyZW50LFxuICAgIHR5cGUsXG4gICAgZGlzcGF0Y2gsXG4gICAgcmVuZGVyQXMsXG4gICAgY29uZmlnLFxufTogeyBwcm9wczogRWRpdGFibGVTdGF0ZTxMaXRlcmFsPiB9ICYgRmllbGRDb250cm9sUHJvcHM8TGl0ZXJhbD4gJiB7XG4gICAgICAgIHBhcmVudDogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW07XG4gICAgICAgIHR5cGU6IExpdGVyYWxUeXBlO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248TGl0ZXJhbD4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBzdWJFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZW5kZXJBcykge1xuICAgICAgICAgICAgY2FzZSBcInByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gXCJudW1iZXJcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFByb2dyZXNzRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PXtjb25maWc/Lm1heCB8fCAxMDB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoPXtwYXJlbnQuJGZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPXtjb25maWc/LnN0ZXAgfHwgMC4xfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPXtjb25maWc/Lm1pbiB8fCAwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcInJhdGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxSYXRpbmdFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17Y29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmNvbnRlbnQgYXMgc3RyaW5nIHwgbnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3Byb3BzLmNvbnRlbnQgYXMgU2VsZWN0YWJsZVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXNdKTtcbiAgICBjb25zdCBlZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3BhcmVudC4kZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBEYXRlVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nIHwgRGF0ZVRpbWUgfCBudWxsKSA9PiBhbnl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJvb2xlYW5FZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuY29udGVudCBhcyBib29sZWFufVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzdWJFZGl0b3IgPz8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0RWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtwcm9wcy5jb250ZW50IGFzIHN0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlciBhcyAodmFsOiBzdHJpbmcpID0+IHVua25vd259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDw+e3N1YkVkaXRvciA/PyA8TnVtYmVyRWRpdGFibGUgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9IHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXJ9IC8+fTwvPjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHRFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nPXtwcm9wcy5pc0VkaXRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtMaXRlcmFscy50b1N0cmluZyhwcm9wcy5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nKSA9PiB1bmtub3dufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXMsIHN1YkVkaXRvcl0pO1xuXG4gICAgY29uc3QgZGJsY2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGV2dDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIXByb3BzLmlzRWRpdGluZyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3Byb3BzLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmllbGQtdGl0bGVcIiBvbkRibENsaWNrPXtkYmxjbGlja30+XG4gICAgICAgICAgICAgICAge2ZpZWxkLmtleX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZpZWxkLXZhbHVlXCIgdGFiSW5kZXg9ezB9PlxuICAgICAgICAgICAgICAgIHtlZGl0b3J9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgQ1VSUkVOVF9GSUxFX0NPTlRFWFQsIERBVEFDT1JFX0NPTlRFWFQsIExpdCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuXG5pbXBvcnQgeyBWTm9kZSwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgQmFzZUZpZWxkUHJvcHMgfSBmcm9tIFwidWkvZmllbGRzL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgICBDb250cm9sbGVkRWRpdGFibGUsXG4gICAgRWRpdGFibGUsXG4gICAgRWRpdGFibGVFbGVtZW50LFxuICAgIEVkaXRhYmxlU3RhdGUsXG4gICAgVGV4dEVkaXRhYmxlLFxuICAgIHVzZUVkaXRhYmxlRGlzcGF0Y2gsXG59IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCJ1dGlscy90YXNrXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5cbi8qKlxuICogU3RhdGUgZm9yIGEge0BsaW5rIExpc3RWaWV3fVxuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgbGlzdFxuICogQGdyb3VwIFN0YXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTdGF0ZTxUPiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCAob2wpLCB1bm9yZGVyZWQgKHVsKSwgb3IgaGF2ZSBubyBzcGVjaWFsIG1hcmt1cCAobm9uZSkuXG4gICAgICpcbiAgICAgKiBMaXN0cyB3aXRoIG5vIHNwZWNpYWwgbWFya3VwIGp1c3QgaGF2ZSBlYWNoIGVsZW1lbnQgcmVuZGVyZWQgZGlyZWN0bHkgYXMtaXMgd2l0aG91dCBhbnkgd3JhcHBpbmdcbiAgICAgKiBpbnNpZGUgb2YgYSBzaW5nbGUgZGl2LlxuICAgICAqXG4gICAgICovXG4gICAgdHlwZT86IFwib3JkZXJlZFwiIHwgXCJ1bm9yZGVyZWRcIiB8IFwibm9uZVwiO1xuXG4gICAgLyoqIFRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QuICovXG4gICAgcm93cz86IFRbXTtcblxuICAgIC8qKiBDb250cm9scyB3aGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkIGZvciB0aGlzIGVsZW1lbnQuIElmIHRydWUsIHVzZXMgZGVmYXVsdCBwYWdlIHNpemUuIElmIGEgbnVtYmVyLCBwYWdpbmcgaXMgZW5hYmxlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIHNpemUuICovXG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gdG8gdXNlIGZvciByZW5kZXJpbmcgZWFjaCBlbGVtZW50LiBDYW4gcHJvZHVjZSBlaXRoZXIgSlNYIG9yIGEgcGxhaW4gdmFsdWUgd2hpY2ggd2lsbCBiZVxuICAgICAqIHJlbmRlcmVkIGFzIGEgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICByZW5kZXJlcj86IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGUgfCBMaXRlcmFsO1xuXG4gICAgLyoqIGZpZWxkcyB0byBkaXNwbGF5IHVuZGVyIGVhY2ggaXRlbSBpbiB0aGlzIHRhc2sgbGlzdCAqL1xuICAgIGRpc3BsYXllZEZpZWxkcz86IChCYXNlRmllbGRQcm9wczxMaXRlcmFsPiAmIHsga2V5OiBzdHJpbmcgfSlbXTtcbn1cblxuLyoqXG4gKlxuICogQSBzaW1wbGUgYW5kIHJlc3BvbnNpdmUgbGlzdCB2aWV3LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExpc3RWaWV3PFQ+KHN0YXRlOiBMaXN0U3RhdGU8VD4pIHtcbiAgICAvLyBjb25zdCBzZXR0aW5ncyA9IHVzZUNvbnRleHQoU0VUVElOR1NfQ09OVEVYVCk7XG5cbiAgICBjb25zdCB0eXBlID0gc3RhdGUudHlwZSA/PyBcInVub3JkZXJlZFwiO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gc3RhdGUucm93cyA/PyBbXTtcbiAgICBjb25zdCByZW5kZXJlciA9IHN0YXRlLnJlbmRlcmVyID8/IGlkZW50aXR5O1xuXG4gICAgaWYgKHR5cGUgPT0gXCJub25lXCIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LW5vbmVcIj5cbiAgICAgICAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLXVud3JhcHBlZC1saXN0LWl0ZW1cIiBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwib3JkZXJlZFwiKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8b2wgY2xhc3NOYW1lPXtcImRhdGFjb3JlLWxpc3QgZGF0YWNvcmUtbGlzdC1vcmRlcmVkXCJ9PlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L29sPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LXVub3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIE5vLW9wIGVsZW1lbnQgcmVuZGVyZXIuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5PFQ+KGVsZW1lbnQ6IFQpOiBUIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRW5zdXJlcyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHJlbmRlcmFibGUgcmVhY3Qgbm9kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbGVtZW50PFQ+KGVsZW1lbnQ6IFQpOiBWTm9kZSB7XG4gICAgaWYgKGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9IC8+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRGVmYXVsdCBsaXN0IGVsZW1lbnQgd2hpY2gganVzdCB0cmllcyB0byByZW5kZXIgdGhlIHZhbHVlIGFzIGEgbGl0ZXJhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0TGlzdEVsZW1lbnQ8VD4oeyBlbGVtZW50IH06IHsgZWxlbWVudDogVCB9KSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgcmV0dXJuIDxMaXQgaW5saW5lPXt0cnVlfSB2YWx1ZT17ZWxlbWVudCBhcyBMaXRlcmFsfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVkaXRhYmxlTGlzdEVsZW1lbnQ8VD4oe1xuICAgIGVsZW1lbnQ6IGl0ZW0sXG4gICAgZWRpdG9yLFxuICAgIG9uVXBkYXRlLFxuICAgIGZpbGUsXG4gICAgZWRpdG9yUHJvcHMsXG59OiB7XG4gICAgZWRpdG9yOiAodmFsdWU6IFQpID0+IEVkaXRhYmxlRWxlbWVudDxUPjtcbiAgICBlbGVtZW50OiBUO1xuICAgIGZpbGU6IHN0cmluZztcbiAgICBvblVwZGF0ZTogKHZhbHVlOiBUKSA9PiB1bmtub3duO1xuICAgIGVkaXRvclByb3BzOiB1bmtub3duO1xufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250cm9sbGVkRWRpdGFibGU8VD5cbiAgICAgICAgICAgIHByb3BzPXtlZGl0b3JQcm9wc31cbiAgICAgICAgICAgIHNvdXJjZVBhdGg9e2ZpbGV9XG4gICAgICAgICAgICBjb250ZW50PXtpdGVtfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3IoaXRlbSl9XG4gICAgICAgICAgICBvblVwZGF0ZT17b25VcGRhdGV9XG4gICAgICAgICAgICBkZWZhdWx0UmVuZGVyPXs8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2l0ZW19IC8+fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cblxuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgRWRpdGFibGVMaXN0RWxlbWVudCwgTGlzdFN0YXRlIH0gZnJvbSBcImFwaS91aS92aWV3cy9saXN0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgREFUQUNPUkVfQ09OVEVYVCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuaW1wb3J0IHsgSlNYSW50ZXJuYWwgfSBmcm9tIFwicHJlYWN0L3NyYy9qc3hcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBjb21wbGV0ZVRhc2ssIHJld3JpdGVUYXNrIH0gZnJvbSBcInV0aWxzL3Rhc2tcIjtcbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHtcbiAgICBFZGl0YWJsZUFjdGlvbixcbiAgICBFZGl0YWJsZUxpc3RGaWVsZCxcbiAgICBFZGl0YWJsZVN0YXRlLFxuICAgIFRleHRFZGl0YWJsZSxcbiAgICB1c2VFZGl0YWJsZURpc3BhdGNoLFxufSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gXCJleHByZXNzaW9uL2ZpZWxkXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IFwic3R5bGVzL2xpc3RzLmNzc1wiO1xuXG4vKipcbiAqIFByb3BzIHBhc3NlZCB0byB0aGUgdGFzayBsaXN0IGNvbXBvbmVudC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tQcm9wcyBleHRlbmRzIExpc3RTdGF0ZTxNYXJrZG93blRhc2tJdGVtIHwgTWFya2Rvd25MaXN0SXRlbT4ge1xuICAgIC8qKiB0YXNrIHN0YXRlcyB0byBjeWNsZSB0aHJvdWdoLCBpZiBzcGVjaWZpZWQgKi9cbiAgICBhZGRpdGlvbmFsU3RhdGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxpc3Qgb2YgdGFza3MuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUYXNrTGlzdCh7XG4gICAgcm93czogaXRlbXMsXG4gICAgYWRkaXRpb25hbFN0YXRlczogc3RhdGVzLFxuICAgIHJlbmRlcmVyOiBsaXN0UmVuZGVyZXIgPSAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgPEVkaXRhYmxlTGlzdEVsZW1lbnQ8c3RyaW5nPlxuICAgICAgICAgICAgb25VcGRhdGU9e3VzZUxpc3RJdGVtRWRpdGluZyhpdGVtKX1cbiAgICAgICAgICAgIGVsZW1lbnQ9e2l0ZW0uJGNsZWFudGV4dCF9XG4gICAgICAgICAgICBmaWxlPXtpdGVtLiRmaWxlfVxuICAgICAgICAgICAgZWRpdG9yUHJvcHM9e3sgbWFya2Rvd246IHRydWUsIHNvdXJjZVBhdGg6IGl0ZW0uJGZpbGUgfX1cbiAgICAgICAgICAgIGVkaXRvcj17KGl0KSA9PiBUZXh0RWRpdGFibGV9XG4gICAgICAgIC8+XG4gICAgKSxcbiAgICAuLi5yZXN0XG59OiBUYXNrUHJvcHMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZGF0YWNvcmUgY29udGFpbnMtdGFzay1saXN0XCI+XG4gICAgICAgICAgICAgICAge2l0ZW1zPy5tYXAoKGl0ZW0sIGluZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFzayBzdGF0ZT17eyAuLi5yZXN0LCBhZGRpdGlvbmFsU3RhdGVzOiBzdGF0ZXMgfX0gaXRlbT17aXRlbX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGlzdFJlbmRlcmVyKGl0ZW0sIGluZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW0tZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUZpZWxkcyBkaXNwbGF5ZWRGaWVsZHM9e3Jlc3QuZGlzcGxheWVkRmllbGRzfSBpdGVtPXtpdGVtfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICApO1xuICAgIH0sIFtpdGVtcywgc3RhdGVzXSk7XG4gICAgcmV0dXJuIDxGcmFnbWVudD57ISFpdGVtcyAmJiBjb250ZW50fTwvRnJhZ21lbnQ+O1xufVxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGl0ZW0gaW4gYSB0YXNrIGxpc3RpbmcuXG4gKiBAcGFyYW0gcHJvcHMgLSB0aGUgY29tcG9uZW50J3MgcHJvcHNcbiAqIEBwYXJhbSBwcm9wcy5pdGVtIC0gdGhlIGN1cnJlbnQgdGFzayBiZWluZyByZW5kZXJlZFxuICogQHBhcmFtIHByb3BzLnN0YXRlIC0gdGhlIHtAbGluayBUYXNrUHJvcHN9IG9mIHRoZSB7QGxpbmsgVGFza0xpc3R9IGluIHdoaWNoIHRoaXMgVGFzayBhcHBlYXJzXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gVGFzayh7IGl0ZW0sIHN0YXRlOiBwcm9wcyB9OiB7IGl0ZW06IE1hcmtkb3duVGFza0l0ZW07IHN0YXRlOiBUYXNrUHJvcHMgfSkge1xuICAgIGNvbnN0IGFwcCA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpO1xuICAgIGNvbnN0IGNvcmUgPSB1c2VDb250ZXh0KERBVEFDT1JFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHsgc2V0dGluZ3MgfSA9IGNvcmU7XG4gICAgY29uc3Qgc3RhdGVzID0gW1wiIFwiLCAuLi4ocHJvcHMuYWRkaXRpb25hbFN0YXRlcyB8fCBbXSksIFwieFwiXTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsU3RhdGVzICYmIHByb3BzLmFkZGl0aW9uYWxTdGF0ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBjdXJJbmRleCA9IHN0YXRlcy5maW5kSW5kZXgoKGEpID0+IGEgPT09IGl0ZW0uJHN0YXR1cyk7XG4gICAgICAgICAgICBjdXJJbmRleCsrO1xuICAgICAgICAgICAgaWYgKGN1ckluZGV4ID49IHN0YXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGVzW2N1ckluZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLiRjb21wbGV0ZWQgPyBcIiBcIiA6IFwieFwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8c3RyaW5nPihpdGVtLiRzdGF0dXMpO1xuICAgIGNvbnN0IGNvbXBsZXRlZFJlZiA9IHVzZVJlZjxEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxMaXRlcmFsPj4+KG51bGwpO1xuICAgIGNvbnN0IG9uQ2hlY2tlZCA9IHVzZVN0YWJsZUNhbGxiYWNrKGFzeW5jIChldnQ6IEpTWEludGVybmFsLlRhcmdldGVkTW91c2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCBjb21wbGV0ZWQgPSBldnQuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgICAgICBsZXQgbmV3U3RhdHVzOiBzdHJpbmc7XG4gICAgICAgIGlmIChldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIG5ld1N0YXR1cyA9IG5leHRTdGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdHVzID0gY29tcGxldGVkID8gXCJ4XCIgOiBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0dXMobmV3U3RhdHVzKTtcbiAgICAgICAgYXdhaXQgY29tcGxldGVUYXNrKGNvbXBsZXRlZCwgaXRlbSwgYXBwLnZhdWx0LCBjb3JlKTtcbiAgICAgICAgY29uc3QgbnYgPSBjb21wbGV0ZWQgPyBEYXRlVGltZS5ub3coKS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsO1xuICAgICAgICBjb21wbGV0ZWRSZWYuY3VycmVudCAmJiBjb21wbGV0ZWRSZWYuY3VycmVudCh7IHR5cGU6IFwiY29tbWl0XCIsIG5ld1ZhbHVlOiBudiB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjaGVja2VkID0gdXNlTWVtbygoKSA9PiBpdGVtLiRzdGF0dXMgIT09IFwiIFwiLCBbaXRlbS4kc3RhdHVzXSk7XG4gICAgY29uc3QgZVN0YXRlOiBFZGl0YWJsZVN0YXRlPHN0cmluZz4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwZGF0ZXI6IHVzZUxpc3RJdGVtRWRpdGluZyhpdGVtKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uJGNsZWFudGV4dCxcbiAgICAgICAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9IGFzIEVkaXRhYmxlU3RhdGU8c3RyaW5nPjtcbiAgICB9LCBbaXRlbS4kY2xlYW50ZXh0LCBpdGVtLiR0ZXh0XSk7XG4gICAgY29uc3QgdGhlRWxlbWVudCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IDxUZXh0RWRpdGFibGUgc291cmNlUGF0aD17aXRlbS4kZmlsZX0gey4uLmVTdGF0ZX0gLz4sXG4gICAgICAgIFtlU3RhdGUuY29udGVudCwgaXRlbSwgcHJvcHMucm93c11cbiAgICApO1xuXG4gICAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IGl0ZW0uJGVsZW1lbnRzLmxlbmd0aCA+IDA7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0Q29sbGFwc2VkKCFjb2xsYXBzZWQpO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBjbGFzc05hbWU9e1wiZGF0YWNvcmUgdGFzay1saXN0LWl0ZW1cIiArIChjaGVja2VkID8gXCIgaXMtY2hlY2tlZFwiIDogXCJcIil9IGRhdGEtdGFzaz17c3RhdHVzfT5cbiAgICAgICAgICAgIDxDb2xsYXBzZUluZGljYXRvclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldENvbGxhcHNlZCgoYykgPT4gIWMpfVxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuPXtoYXNDaGlsZHJlbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZGF0YWNvcmUgdGFzay1saXN0LWl0ZW0tY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPXtjaGVja2VkfSBvbkNsaWNrPXtvbkNoZWNrZWR9IC8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoZUVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtRmllbGRzIGRpc3BsYXllZEZpZWxkcz17cHJvcHMuZGlzcGxheWVkRmllbGRzfSBpdGVtPXtpdGVtfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2hhc0NoaWxkcmVuICYmICFjb2xsYXBzZWQgJiYgPFRhc2tMaXN0IHsuLi5wcm9wc30gcm93cz17aXRlbS4kZWxlbWVudHN9IC8+fVxuICAgICAgICA8L2xpPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIENvbGxhcHNlSW5kaWNhdG9yKHtcbiAgICBjb2xsYXBzZWQsXG4gICAgb25DbGljayxcbiAgICBoYXNDaGlsZHJlbixcbn06IHtcbiAgICBjb2xsYXBzZWQ6IGJvb2xlYW47XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbjtcbn0pIHtcbiAgICBjb25zdCB0b2dnbGVDbmFtZXMgPSBbXCJkYXRhY29yZS1jb2xsYXBzZXJcIl07XG4gICAgaWYgKGNvbGxhcHNlZCkgdG9nZ2xlQ25hbWVzLnB1c2goXCJpcy1jb2xsYXBzZWRcIik7XG4gICAgaWYgKCFoYXNDaGlsZHJlbikgdG9nZ2xlQ25hbWVzLnB1c2goXCJuby1jaGlsZHJlblwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2xpY2t9IGNsYXNzTmFtZT17dG9nZ2xlQ25hbWVzLmpvaW4oXCIgXCIpfSBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmctaWNvbiByaWdodC10cmlhbmdsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhMMTIgMTdMMjEgOFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVkaXRhYmxlIHNldCBvZiBmaWVsZHMgYmVsb3cgYSB0YXNrIG9yIGxpc3QgaXRlbS5cbiAqIEBoaWRkZW5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMaXN0SXRlbUZpZWxkcyh7XG4gICAgZGlzcGxheWVkRmllbGRzOiBkaXNwbGF5ZWRGaWVsZHNQcm9wLFxuICAgIGl0ZW0sXG59OiB7XG4gICAgZGlzcGxheWVkRmllbGRzPzogVGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdO1xuICAgIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtO1xufSkge1xuICAgIGNvbnN0IGFwcCA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpO1xuICAgIGNvbnN0IGNvcmUgPSB1c2VDb250ZXh0KERBVEFDT1JFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHsgc2V0dGluZ3MgfSA9IGNvcmU7XG4gICAgY29uc3QgZGlzcGxheWVkRmllbGRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwbGF5ZWRGaWVsZHNQcm9wICE9IHVuZGVmaW5lZCkgcmV0dXJuIGRpc3BsYXllZEZpZWxkc1Byb3A7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbS4kaW5maWVsZHMpLm1hcCgoZikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZi5rZXksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IExpdGVyYWxzLnR5cGVPZihmLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckFzOiBcInJhd1wiLFxuICAgICAgICAgICAgICAgIH0gYXMgTm9uTnVsbGFibGU8VGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdPlswXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW2Rpc3BsYXllZEZpZWxkc1Byb3AsIGl0ZW0uJGluZmllbGRzLCBpdGVtXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtkaXNwbGF5ZWRGaWVsZHMubWFwKChpZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZmllbGQua2V5ID0gaWZpZWxkLmtleS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGxldCBkZWZWYWwgPSB0eXBlb2YgaWZpZWxkLmRlZmF1bHRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIgPyBpZmllbGQuZGVmYXVsdFZhbHVlKCkgOiBpZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBkZWZGaWVsZDogRmllbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRlZlZhbCxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBMaXRlcmFscy50b1N0cmluZyhkZWZWYWwpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWVdID0gdXNlU3RhdGU8TGl0ZXJhbD4oaXRlbS4kaW5maWVsZHNbaWZpZWxkPy5rZXldPy52YWx1ZSB8fCBkZWZGaWVsZC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGF0ZTIsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8TGl0ZXJhbD4oe1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVyOiB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gKHY6IExpdGVyYWwpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgaW5zdGFuY2VvZiBEYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2LnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTGl0ZXJhbHMudG9TdHJpbmcodilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBpdGVtLiR0ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoRmllbGRzICYmIGl0ZW0uJHRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldKSBpdGVtLiRpbmZpZWxkc1tpZmllbGQua2V5XS52YWx1ZSA9IGRhdGVTdHJpbmcodmFsKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIGluIGl0ZW0uJGluZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRmllbGRzID0gc2V0SW5saW5lRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKGl0ZW0uJGluZmllbGRzW2ZpZWxkXT8udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHMgPSBzZXRJbmxpbmVGaWVsZChpdGVtLiR0ZXh0LCBpZmllbGQua2V5LCBkYXRlU3RyaW5nKHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlVGFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC52YXVsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBpdGVtLiRzdGF0dXMgOiBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW0uJGluZmllbGRzXVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpZmllbGQua2V5ID09IHNldHRpbmdzLnRhc2tDb21wbGV0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgaHVoP1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRSZWYuY3VycmVudCA9IGRpc3BhdGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVMaXN0RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzPXtzdGF0ZTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtpZmllbGQudHlwZSB8fCBMaXRlcmFscy53cmFwVmFsdWUoZmllbGRWYWx1ZSkhLnR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXtpdGVtLiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2l0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldIHx8IGRlZkZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtpZmllbGQuY29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXtpdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17c3RhdGUyLnVwZGF0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmllbGRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckFzPXtpZmllbGQucmVuZGVyQXN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiB1c2VMaXN0SXRlbUVkaXRpbmcoaXRlbTogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCBzdGF0dXMgPSB1c2VNZW1vKCgpID0+IChpdGVtIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSA/IGl0ZW0uJHN0YXR1cyA6IFwiIFwiKSwgW2l0ZW1dKTtcbiAgICByZXR1cm4gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIGFzeW5jICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBgJHt2YWx9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBzdGF0dXMsIHdpdGhGaWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbc3RhdHVzLCBpdGVtXVxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCBcIi4vcGFnaW5nLmNzc1wiO1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwgUmVmT2JqZWN0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTRVRUSU5HU19DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5cbi8qKiAwLWluZGV4ZWQgcGFnZSBjb250cm9sLiBgcGFnZWAgc2hvdWxkIGJlIHRoZSBjdXJyZW50IDAtaW5kZXhlZCBwYWdlLCB3aGlsZSBgdG90YWxQYWdlc2AgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gUmF3Q29udHJvbGxlZFBhZ2VyKHtcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgdG90YWxQYWdlcyxcbn06IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgc2V0UGFnZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG59KSB7XG4gICAgLy8gQ2xhbXAgcGFnZSB0byBiZSB3aXRoaW4gdGhlIGFjdHVhbCBib3VuZHMgb2YgcGFnZXMuXG4gICAgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIHRvdGFsUGFnZXMpO1xuXG4gICAgY29uc3QgcmVhbFBhZ2UgPSBjbGFtcChwYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSk7XG4gICAgY29uc3QgdmlzaWJsZVBhZ2VzID0gdXNlTWVtbygoKSA9PiBzcGxpdFBhZ2VzKHJlYWxQYWdlLCB0b3RhbFBhZ2VzKSwgW3JlYWxQYWdlLCB0b3RhbFBhZ2VzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sXCI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYy1wYWdpbmctY29udHJvbC1wYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGFnZSAhPSAwICYmIHNldFBhZ2UocGFnZSAtIDEpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFnZSA9PSAwfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUuNSAxOWwtNy03IDctN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge3Zpc2libGVQYWdlcy5tYXAoKHBhZ2VzLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7aSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2UgZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlKHJlYWxQYWdlICsgKGlzTGVmdFNlcGVyYXRvcihyZWFsUGFnZSwgdmlzaWJsZVBhZ2VzLmxlbmd0aCwgaSkgPyAtNSA6IDUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUtcmVuZGVyaW5nPVwiZ2VvbWV0cmljUHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYy1wYWdpbmctY29udHJvbC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxOVwiIGN5PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgcj1cIjFcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjVcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLXJlbmRlcmluZz1cImdlb21ldHJpY1ByZWNpc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPXtgZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC0ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlLCB2aXNpYmxlUGFnZXMubGVuZ3RoLCBpKSA/IFwibGVmdFwiIDogXCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxN2w1LTUtNS01XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTdsNS01LTUtNVwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7cGFnZXMubWFwKChwKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGMtcGFnaW5nLWNvbnRyb2wtcGFnZSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID09PSByZWFsUGFnZSA/IFwiIGRjLXBhZ2luZy1jb250cm9sLXBhZ2UtYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHNldFBhZ2UocCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3AgKyAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwYWdlICE9PSB0b3RhbFBhZ2VzIC0gMSAmJiBzZXRQYWdlKHBhZ2UgKyAxKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhZ2UgPT09IHRvdGFsUGFnZXMgLSAxfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC41IDVsNyA3LTcgN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKiogMC1pbmRleGVkIHBhZ2UgY29udHJvbC4gYHBhZ2VgIHNob3VsZCBiZSB0aGUgY3VycmVudCAwLWluZGV4ZWQgcGFlZywgd2hpbGUgYG1heFBhZ2VgIGlzIHRoZSBtYXhpbXVtIHBhZ2UgKGluY2x1c2l2ZSkuICovXG5leHBvcnQgY29uc3QgQ29udHJvbGxlZFBhZ2VyID0gUmVhY3QubWVtbyhSYXdDb250cm9sbGVkUGFnZXIpO1xuXG4vKiogSG9vayB3aGljaCBwcm92aWRlcyBhdXRvbWF0aWMgcGFnZSByZWZsb3cgYW5kIHBhZ2Ugc3RhdGUgbWFuYWdlbWVudC5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUGFnaW5nKHtcbiAgICBpbml0aWFsUGFnZSA9IDAsXG4gICAgcGFnZVNpemUsXG4gICAgZWxlbWVudHMsXG59OiB7XG4gICAgaW5pdGlhbFBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGVsZW1lbnRzOiBudW1iZXI7XG59KTogW251bWJlciwgbnVtYmVyLCAocGFnZTogbnVtYmVyKSA9PiB2b2lkXSB7XG4gICAgLy8gV2UgdHJhY2sgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2hlbiBwYWdlIHNpemUgY2hhbmdlcyB3ZSBjYW4ganVzdCBhdXRvbWF0aWNhbGx5IHJlY29tcHV0ZSB0aGUgcGFnZSB3ZSBhcmUgb24gd2l0aG91dCBhbnkgc3RhdGUuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChlbGVtZW50cyAvIHBhZ2VTaXplKSk7XG4gICAgY29uc3QgW3BhZ2VTdGFydCwgc2V0UGFnZVN0YXJ0XSA9IHVzZVN0YXRlKCgpID0+IGNsYW1wKGluaXRpYWxQYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSkpO1xuXG4gICAgY29uc3Qgc2V0Qm91bmRlZFBhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHBhZ2U6IG51bWJlcikgPT4gc2V0UGFnZVN0YXJ0KGNsYW1wKHBhZ2UsIDAsIHRvdGFsUGFnZXMgLSAxKSAqIHBhZ2VTaXplKSxcbiAgICAgICAgW3BhZ2VTaXplLCB0b3RhbFBhZ2VzXVxuICAgICk7XG5cbiAgICBjb25zdCBwYWdlID0gY2xhbXAoTWF0aC5mbG9vcihwYWdlU3RhcnQgLyBwYWdlU2l6ZSksIDAsIHRvdGFsUGFnZXMgLSAxKTtcbiAgICByZXR1cm4gW3BhZ2UsIHRvdGFsUGFnZXMsIHNldEJvdW5kZWRQYWdlXTtcbn1cblxuLyoqIFByb3ZpZGVzIHVzZWZ1bCBtZXRhZGF0YSBhYm91dCBwYWdpbmcuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmcge1xuICAgIC8qKiBXaGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkLiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIHZpZXcgc2hvdWxkIHNjcm9sbCB3aGVuIHRoZSBwYWdlIGNoYW5nZXMuICovXG4gICAgc2Nyb2xsOiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICAvKiogVGhlIHNpemUgb2YgZWFjaCBwYWdlLiAqL1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgZm9yIHRoaXMgZGF0YS4gKi9cbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gICAgLyoqIFVwZGF0ZSB0aGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHNldFBhZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ2VudHJhbCBwYWdpbmcgaG9vayB3aGljaCBleHRyYWN0cyBwYWdlIG1ldGFkYXRhIG91dCBvZiBEYXRhY29yZSBzZXR0aW5ncywgaGFuZGxlcyBwYWdlIG92ZXJmbG93LCBjdXJyZW50IHBhZ2Ugc3RhdGUsIGFuZCB1cGRhdGluZyB0aGUgcGFnZVxuICogaWYgdGhlIGVsZW1lbnRzIGNoYW5nZS4gSWYgYSBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBhbHNvIHN1cHBvcnRzIHNjcm9sbGluZyB0aGUgY29udGFpbmVyIHZpZXcgb24gcGFnZSBjaGFuZ2VzLlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRhY29yZVBhZ2luZyh7XG4gICAgaW5pdGlhbFBhZ2UgPSAwLFxuICAgIHBhZ2luZyxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2UsXG4gICAgZWxlbWVudHMsXG4gICAgY29udGFpbmVyLFxufToge1xuICAgIGluaXRpYWxQYWdlOiBudW1iZXI7XG4gICAgcGFnaW5nOiBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHNjcm9sbE9uUGFnZUNoYW5nZT86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgZWxlbWVudHM6IG51bWJlcjtcbiAgICBjb250YWluZXI/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xufSk6IFBhZ2luZyB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB1c2VDb250ZXh0KFNFVFRJTkdTX0NPTlRFWFQpO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiID8gcGFnaW5nIDogc2V0dGluZ3MuZGVmYXVsdFBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luZ0VuYWJsZWQgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiIHx8IHBhZ2luZyA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzaG91bGRTY3JvbGwgPVxuICAgICAgICAodHlwZW9mIHNjcm9sbE9uUGFnZUNoYW5nZSA9PT0gXCJudW1iZXJcIiAmJiBzY3JvbGxPblBhZ2VDaGFuZ2UgPj0gcGFnZVNpemUpIHx8XG4gICAgICAgICEhKHNjcm9sbE9uUGFnZUNoYW5nZSA/PyBzZXR0aW5ncy5zY3JvbGxPblBhZ2VDaGFuZ2UpO1xuXG4gICAgY29uc3QgW3BhZ2UsIHRvdGFsUGFnZXMsIHJhd1NldFBhZ2VdID0gdXNlUGFnaW5nKHsgaW5pdGlhbFBhZ2UsIHBhZ2VTaXplLCBlbGVtZW50cyB9KTtcblxuICAgIC8vIEhhbmRsZSBhdXRvLXNjcm9sbCBpZiBhIGNvbnRhaW5lciBpcyBwcm92aWRlZC5cbiAgICBjb25zdCBzZXRQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChuZXdQYWdlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChwYWdlICE9IG5ld1BhZ2UgJiYgY29udGFpbmVyICYmIHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICBibG9jazogXCJzdGFydFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6IFwibmVhcmVzdFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYXdTZXRQYWdlKG5ld1BhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBbcGFnZSwgY29udGFpbmVyLCBzaG91bGRTY3JvbGwsIHJhd1NldFBhZ2VdXG4gICAgKTtcblxuICAgIHJldHVybiB7IGVuYWJsZWQ6IHBhZ2luZ0VuYWJsZWQsIHNjcm9sbDogc2hvdWxkU2Nyb2xsLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxQYWdlcywgc2V0UGFnZSB9O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY2xhbXAoaW5wdXQ6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoaW5wdXQgPCBtaW4pIHJldHVybiBtaW47XG4gICAgaWYgKGlucHV0ID4gbWF4KSByZXR1cm4gbWF4O1xuICAgIHJldHVybiBpbnB1dDtcbn1cblxuLyoqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGZpbmRpbmcgdGhlIHNwZWNpZmljIHBhZ2UgbnVtYmVycyB0byByZW5kZXIuIEFsd2F5cyBhaW1zIHRvIHJlbmRlciA5IG9yIDEwIHBhZ2UgbnVtYmVycyB3aXRoIGEgc2VwYXJhdG9yLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzcGxpdFBhZ2VzKHBhZ2U6IG51bWJlciwgdG90YWxQYWdlczogbnVtYmVyKTogbnVtYmVyW11bXSB7XG4gICAgLy8gSWYgbGVzcyB0aGFuIDEyIHBhZ2VzLCBzaG93IGFsbCBvZiB0aGVtLlxuICAgIGlmICh0b3RhbFBhZ2VzIDwgMTIpIHJldHVybiBbQXJyYXkuZnJvbSh7IGxlbmd0aDogdG90YWxQYWdlcyB9LCAoXywgaSkgPT4gaSldO1xuXG4gICAgLy8gV2UgaGF2ZSBhdCBsZWFzdCAxMiBwYWdlcyAoMCAuLiAxMCBpbmNsdXNpdmUpLiBPdXIgZ29hbCBpcyB0byBoYXZlIDkgdG90YWwgdmlzaWJsZSBlbGVtZW50cywgc28gc3BsaXQgYmFzZWQgb24gdGhhdC5cbiAgICAvLyA1IHN1cnJvdW5kaW5nIHtwYWdlfSwgMCwgMSwgbWF4UGFnZSAtIDEsIG1heFBhZ2UuXG4gICAgaWYgKHBhZ2UgPCA1KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDddLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG4gICAgZWxzZSBpZiAocGFnZSA+IHRvdGFsUGFnZXMgLSA2KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDFdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA4LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA3LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA2LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA1LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA0LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAzLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAyLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAxLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgXTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbMCwgMV0sXG4gICAgICAgICAgICBbcGFnZSAtIDIsIHBhZ2UgLSAxLCBwYWdlLCBwYWdlICsgMSwgcGFnZSArIDJdLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlOiBudW1iZXIsIHZpc2libGVQYWdlc0xlbmd0aDogbnVtYmVyLCBzZXBlcmF0b3JJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgd2UgaGF2ZSAyIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgcmVhbFBhZ2UuXG4gICAgLy8gSWYgd2UgaGF2ZSAzIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgaW5kZXguXG4gICAgaWYgKHZpc2libGVQYWdlc0xlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAocmVhbFBhZ2UgPCA1KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzZXBlcmF0b3JJbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAidmFyIHByZWZpeCA9IFwiZmFzXCI7XG52YXIgZmEwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzAnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjMwXCIsIFwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MFYzMjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMFYxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NlYzMjBjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NlYxOTJjMC01My00My05Ni05Ni05NnpcIl1cbn07XG52YXIgZmExID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzEnLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcIjMxXCIsIFwiTTE2MCA2NGMwLTExLjgtNi41LTIyLjYtMTYuOS0yOC4ycy0yMy01LTMyLjggMS42bC05NiA2NEMtLjUgMTExLjItNC40IDEzMSA1LjQgMTQ1LjhzMjkuNyAxOC43IDQ0LjQgOC45TDk2IDEyMy44VjQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNjBWNjR6XCJdXG59O1xudmFyIGZhMiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICcyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzMlwiLCBcIk0xNDIuOSA5NmMtMjEuNSAwLTQyLjIgOC41LTU3LjQgMjMuOEw1NC42IDE1MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MC4yIDc0LjVDNjcuNSA0Ny4zIDEwNC40IDMyIDE0Mi45IDMyQzIyMyAzMiAyODggOTcgMjg4IDE3Ny4xYzAgMzguNS0xNS4zIDc1LjQtNDIuNSAxMDIuNkwxMDkuMyA0MTZIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUwyMDAuMiAyMzQuNWMxNS4yLTE1LjIgMjMuOC0zNS45IDIzLjgtNTcuNGMwLTQ0LjgtMzYuMy04MS4xLTgxLjEtODEuMXpcIl1cbn07XG52YXIgZmEzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzMnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjMzXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIMjcyYzEzLjIgMCAyNSA4LjEgMjkuOCAyMC40czEuNSAyNi4zLTguMiAzNS4yTDE2Mi4zIDIwOEgxODRjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZzLTYwLjkgMTM2LTEzNiAxMzZIMTA1LjRDNjMgNDgwIDI0LjIgNDU2IDUuMyA0MTguMWwtMS45LTMuOGMtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDEuOSAzLjhjOC4xIDE2LjMgMjQuOCAyNi41IDQyLjkgMjYuNUgxODRjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJIODBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC40cy0xLjUtMjYuMyA4LjItMzUuMkwxODkuNyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYTQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiMzRcIiwgXCJNMTg5IDc3LjZjNy41LTE2IC43LTM1LjEtMTUuMy00Mi42cy0zNS4xLS43LTQyLjYgMTUuM0wzIDMyMi40Yy00LjcgOS45LTMuOSAyMS41IDEuOSAzMC44UzIxIDM2OCAzMiAzNjhIMjU2djgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzY4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMFYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzA0SDgyLjRMMTg5IDc3LjZ6XCJdXG59O1xudmFyIGZhNSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICc1JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzNVwiLCBcIk0zMi41IDU4LjNDMzUuMyA0My4xIDQ4LjUgMzIgNjQgMzJIMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDkwLjdMNzAuMyAyMDhIMTg0Yzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2cy02MC45IDEzNi0xMzYgMTM2SDEwMC41Yy0zOS40IDAtNzUuNC0yMi4zLTkzLTU3LjVsLTQuMS04LjJjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2w0LjEgOC4yYzYuOCAxMy42IDIwLjYgMjIuMSAzNS44IDIyLjFIMTg0YzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcySDMyYy05LjUgMC0xOC41LTQuMi0yNC42LTExLjVzLTguNi0xNi45LTYuOS0yNi4ybDMyLTE3NnpcIl1cbn07XG52YXIgZmE2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjM2XCIsIFwiTTIzMi40IDg0LjdjMTEuNC0xMy41IDkuNy0zMy43LTMuOC00NS4xcy0zMy43LTkuNy00NS4xIDMuOEwzOC42IDIxNC43QzE0LjcgMjQyLjkgMS4xIDI3OC40IC4xIDMxNS4yYzAgMS40LS4xIDIuOS0uMSA0LjNjMCAuMiAwIC4zIDAgLjVjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBzMTYwLTcxLjYgMTYwLTE2MGMwLTg1LjUtNjcuMS0xNTUuNC0xNTEuNS0xNTkuOGw2My45LTc1LjZ6TTI1NiAzMjBBOTYgOTYgMCAxIDEgNjQgMzIwYTk2IDk2IDAgMSAxIDE5MiAwelwiXVxufTtcbnZhciBmYTcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzdcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkgyODhjMTEuNSAwIDIyIDYuMSAyNy43IDE2LjFzNS43IDIyLjItLjEgMzIuMWwtMjI0IDM4NGMtOC45IDE1LjMtMjguNSAyMC40LTQzLjggMTEuNXMtMjAuNC0yOC41LTExLjUtNDMuOEwyMzIuMyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYTggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnOCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzhcIiwgXCJNMzA0IDE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgxNDRDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDM0LjYgMTMuNyA2NiAzNiA4OUMyMC41IDI3Mi4zIDAgMzA5LjggMCAzNTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhoNjRjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDNjMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhIMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0SDEyOGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGgxNS45YzAgMCAuMSAwIC4xIDBoMzJjMCAwIC4xIDAgLjEgMHptMC02NGMwIDAgMCAwIDAgMEgxNDRjMCAwIDAgMCAwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC42IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnOScsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzlcIiwgXCJNNjQgMTkyYTk2IDk2IDAgMSAwIDE5MiAwQTk2IDk2IDAgMSAwIDY0IDE5MnptODcuNSAxNTkuOEM2Ny4xIDM0Ny40IDAgMjc3LjUgMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwYzAgMi42LS4xIDUuMy0uMiA3LjljLTEuNyAzNS43LTE1LjIgNzAtMzguNCA5Ny40bC0xNDUgMTcxLjRjLTExLjQgMTMuNS0zMS42IDE1LjItNDUuMSAzLjhzLTE1LjItMzEuNi0zLjgtNDUuMWw2My45LTc1LjZ6XCJdXG59O1xudmFyIGZhRmlsbERyaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsbC1kcmlwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTc2XCIsIFwiTTQxLjQgOS40QzUzLjktMy4xIDc0LjEtMy4xIDg2LjYgOS40TDE2OCA5MC43bDUzLjEtNTMuMWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMNDc0LjMgMTg5LjFjMjguMSAyOC4xIDI4LjEgNzMuNyAwIDEwMS44TDI4My45IDQ4MS40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBMMzAuNiAzNjMuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44TDEyMi43IDEzNiA0MS40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zem0xNzYgMjIxLjNMMTY4IDE4MS4zIDc1LjkgMjczLjRjLTQuMiA0LjItNyA5LjMtOC40IDE0LjZIMzg2LjdsNDIuMy00Mi4zYzMuMS0zLjEgMy4xLTguMiAwLTExLjNMMjc3LjcgODIuOWMtMy4xLTMuMS04LjItMy4xLTExLjMgMEwyMTMuMyAxMzZsNDkuNCA0OS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwek01MTIgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTI1LjIgMzIuNi03OS42IDUxLjItMTA4LjdjNi05LjQgMTkuNS05LjQgMjUuNSAwQzU0My40IDM2OC40IDU3NiA0MjIuOCA1NzYgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYUFycm93c1RvQ2lyY2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1jaXJjbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmRcIiwgXCJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxNjAgMTE0LjdWOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY5NmMwIDQuMy0uOSA4LjUtMi40IDEyLjJjLTEuNiAzLjctMy44IDcuMy02LjkgMTAuM2wtLjEgLjFjLTMuMSAzLTYuNiA1LjMtMTAuMyA2LjljLTMuOCAxLjYtNy45IDIuNC0xMi4yIDIuNEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgxOC43TDkuNCA1NC42Qy0zLjEgNDIuMS0zLjEgMjEuOSA5LjQgOS40ek0yNTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTE0LjcgMzUySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2IDBsLjEgMGM4LjggMCAxNi43IDMuNiAyMi41IDkuM2wuMSAuMWMzIDMuMSA1LjMgNi42IDYuOSAxMC4zYzEuNiAzLjggMi40IDcuOSAyLjQgMTIuMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzOTcuM0w1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxMTQuNyAzNTJ6TTQxNiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjE4LjdMNTg1LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMNTI1LjMgMTYwSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NDhjLTguOCAwLTE2LjgtMy42LTIyLjYtOS4zbC0uMS0uMWMtMy0zLjEtNS4zLTYuNi02LjktMTAuM3MtMi40LTcuOC0yLjQtMTIuMmwwLS4xdjBWOTZ6TTUyNS4zIDM1Mkw2MzAuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEw0ODAgMzk3LjNWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyMHYwYzAgMCAwLS4xIDAtLjFjMC00LjMgLjktOC40IDIuNC0xMi4yYzEuNi0zLjggMy45LTcuMyA2LjktMTAuNGM1LjgtNS44IDEzLjctOS4zIDIyLjUtOS40YzAgMCAuMSAwIC4xIDBoMCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1MjUuM3pcIl1cbn07XG52YXIgZmFDaXJjbGVDaGV2cm9uUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNoZXZyb24tY2lyY2xlLXJpZ2h0XCJdLCBcImYxMzhcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMEEyNTYgMjU2IDAgMSAwIDAgMjU2ek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3elwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVSaWdodCA9IGZhQ2lyY2xlQ2hldnJvblJpZ2h0O1xudmFyIGZhQXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTk0Nl0sIFwiNDBcIiwgXCJNMjU2IDY0QzE1MCA2NCA2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ2MzJjMCA1My00MyA5Ni05NiA5NmMtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjlDMzIwIDM3MS4xIDI4OS41IDM4NCAyNTYgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjFjNS43LTUgMTMuMS04LjEgMjEuMy04LjFjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2ODAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xudmFyIGZhVHJhc2hDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhc2gtY2FuJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsIFwidHJhc2gtYWx0XCJdLCBcImYyZWRcIiwgXCJNMTM1LjIgMTcuN0MxNDAuNiA2LjggMTUxLjcgMCAxNjMuOCAwSDI4NC4yYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdMMzIwIDMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmg5Nmw3LjItMTQuM3pNMzIgMTI4SDQxNlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptOTYgNjRjLTguOCAwLTE2IDcuMi0xNiAxNlY0MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNnptOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhVHJhc2hBbHQgPSBmYVRyYXNoQ2FuO1xudmFyIGZhVGV4dEhlaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZXh0LWhlaWdodCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjAzNFwiLCBcIk02NCAxMjhWOTZoNjRsMCAzMjBIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmwwLTMyMGg2NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE2MCA0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTUwMi42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGgzMlYzNTJINDE2Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEg1MTJWMTYwaDMyYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0elwiXVxufTtcbnZhciBmYVVzZXJYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLXRpbWVzXCJdLCBcImYyMzVcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNDcxIDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG52YXIgZmFVc2VyVGltZXMgPSBmYVVzZXJYbWFyaztcbnZhciBmYVN0ZXRob3Njb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0ZXRob3Njb3BlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NjU4XSwgXCJmMGYxXCIsIFwiTTE0Mi40IDIxLjljNS42IDE2LjgtMy41IDM0LjktMjAuMiA0MC41TDk2IDcxLjFWMTkyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZWNzEuMWwtMjYuMS04LjdjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwyNi4xIDguN0MzMzQuNCAxOS4xIDM1MiA0My41IDM1MiA3MS4xVjE5MmMwIDc3LjItNTQuNiAxNDEuNi0xMjcuMyAxNTYuN0MyMzEgNDA0LjYgMjc4LjQgNDQ4IDMzNiA0NDhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJWMjY1LjNjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjNjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zVjMzNmMwIDk3LjItNzguOCAxNzYtMTc2IDE3NmMtOTIuOSAwLTE2OC45LTcxLjktMTc1LjUtMTYzLjFDODcuMiAzMzQuMiAzMiAyNjkuNiAzMiAxOTJWNzEuMWMwLTI3LjUgMTcuNi01MiA0My44LTYwLjdsMjYuMS04LjdjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4yek00ODAgMjI0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFNZXNzYWdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lc3NhZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNvbW1lbnQtYWx0XCJdLCBcImYyN2FcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0aDk2djgwYzAgNi4xIDMuNCAxMS42IDguOCAxNC4zczExLjkgMi4xIDE2LjgtMS41TDMwOS4zIDQxNkg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6XCJdXG59O1xudmFyIGZhQ29tbWVudEFsdCA9IGZhTWVzc2FnZTtcbnZhciBmYUluZm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5mbycsXG4gIGljb246IFsxOTIsIDUxMiwgW10sIFwiZjEyOVwiLCBcIk00OCA4MGE0OCA0OCAwIDEgMSA5NiAwQTQ4IDQ4IDAgMSAxIDQ4IDgwek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINjRWMjU2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29tcHJlc3MtYWx0XCJdLCBcImY0MjJcIiwgXCJNNDM5IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0LjhIMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFY3MmMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzlMNDM5IDd6TTcyIDI3MkgyMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRWNDQwYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNyA0NzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3TDU1IDMxM2MtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnMxMi41LTE0LjggMjIuMi0xNC44elwiXVxufTtcbnZhciBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjtcbnZhciBmYUV4cGxvc2lvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdleHBsb3Npb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZTlcIiwgXCJNNDk5LjYgMTEuM2M2LjctMTAuNyAyMC41LTE0LjUgMzEuNy04LjVzMTUuOCAxOS41IDEwLjYgMzFMNDA0LjggMzM4LjZjMi4yIDIuMyA0LjMgNC43IDYuMyA3LjFsOTcuMi01NC43YzEwLjUtNS45IDIzLjYtMy4xIDMwLjkgNi40czYuMyAyMy0yLjIgMzEuNWwtODcgODdIMzc4LjVjLTEzLjItMzcuMy00OC43LTY0LTkwLjUtNjRzLTc3LjQgMjYuNy05MC41IDY0SDExNy44TDQyLjMgMzYzLjdjLTkuNy02LjctMTMuMS0xOS42LTcuOS0zMC4zczE3LjQtMTUuOSAyOC43LTEyLjRsOTcuMiAzMC40YzMtMy45IDYuMS03LjcgOS40LTExLjNMMTA3LjQgMjM2LjNjLTYuMS0xMC4xLTMuOS0yMy4xIDUuMS0zMC43czIyLjItNy41IDMxLjEgLjFMMjQ2IDI5My42YzEuNS0uNCAzLS44IDQuNS0xLjFsMTMuNi0xNDIuN2MxLjItMTIuMyAxMS41LTIxLjcgMjMuOS0yMS43czIyLjcgOS40IDIzLjkgMjEuN2wxMy41IDE0MS45TDQ5OS42IDExLjN6TTY0IDQ0OHYwSDUxMnYwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY0ek0yODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFGaWxlTGluZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1saW5lcycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgXCJmaWxlLWFsdFwiLCBcImZpbGUtdGV4dFwiXSwgXCJmMTVjXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTEyIDI1NkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFGaWxlQWx0ID0gZmFGaWxlTGluZXM7XG52YXIgZmFGaWxlVGV4dCA9IGZhRmlsZUxpbmVzO1xudmFyIGZhV2F2ZVNxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YXZlLXNxdWFyZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjgzZVwiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQxNmg5NlYyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDUxMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NkgxOTJWMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2VjY0elwiXVxufTtcbnZhciBmYVJpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmluZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcwYlwiLCBcIk02NCAyMDhjMCA3LjggNC40IDE4LjcgMTcuMSAzMC4zQzEyNi41IDIxNC4xIDE4OC45IDIwMCAyNTYgMjAwczEyOS41IDE0LjEgMTc0LjkgMzguM0M0NDMuNiAyMjYuNyA0NDggMjE1LjggNDQ4IDIwOGMwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjZDMzY0LjkgMTM5LjggMzE0IDEyOCAyNTYgMTI4cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuN0MxNjYuMyAyODAuMiAyMDguOCAyODggMjU2IDI4OHM4OS43LTcuOCAxMjIuOS0yMC4zQzM0NS4zIDI1NS42IDMwMyAyNDggMjU2IDI0OHpNMCAyMDhjMC00OS42IDM5LjQtODUuOCA4My4zLTEwNy44QzEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44djk2YzAgNDkuNi0zOS40IDg1LjgtODMuMyAxMDcuOEMzODIuOSA0MzQuNyAzMjEuNyA0NDggMjU2IDQ0OHMtMTI2LjktMTMuMy0xNzIuNy0zNi4yQzM5LjQgMzg5LjggMCAzNTMuNiAwIDMwNFYyMDh6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdVbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkOVwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek0yMzcuMyA3MS4xbDM0LjcgNTJWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyVjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY4MGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTExMiA4MHY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjgwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFEaWNlVGhyZWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS10aHJlZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NThdLCBcImY1MjdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjggNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNhbGVuZGFyRGF5cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1kYXlzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYWxlbmRhci1hbHRcIl0sIFwiZjA3M1wiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHY0OEgwVjExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NEg5NlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJINDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTkyem02NCA4MHYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzM2ek02NCA0MDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY0MDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWNDAwYzAtOC44LTcuMi0xNi0xNi0xNkgyMDh6bTExMiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjQwMGMwLTguOC03LjItMTYtMTYtMTZIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQ2FsZW5kYXJBbHQgPSBmYUNhbGVuZGFyRGF5cztcbnZhciBmYUFuY2hvckNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuY2hvci1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YWFcIiwgXCJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTIxLjEgODBDMzY3IDE1OC44IDM4NCAxMjkuNCAzODQgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAzMy40IDE3IDYyLjggNDIuOSA4MEgyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJWNDQ4SDIwOGMtNTMgMC05Ni00My05Ni05NnYtNi4xbDcgN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMOTcgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw3IDMxOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctN1YzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoODAgODBjOC4yIDAgMTYuMy0uNiAyNC4yLTEuOGMtMjIuMi0xNi4yLTQwLjQtMzcuNS01My02Mi4ySDMyMFYzNjggMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jaXJjbGUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDFcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjIzMi4yYy0zOS4xIDMyLjMtNjQgODEuMS02NCAxMzUuOGMwIDQ5LjUgMjAuNCA5NC4yIDUzLjMgMTI2LjJDMzY0LjUgNTA1LjEgMzUxLjEgNTEyIDMzNiA1MTJIMjQwVjQzMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTgwIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkg4MHptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2em0xMTItMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjcyek02NCAxMTJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgxNzZ6bTgwIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnptOTYgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0MC43LTY3LjNjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42TDUyMS40IDM1Mkg0MzJjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODkuNGwtMjguNyAyOC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYtNTZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTU2LTU2Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpcIl1cbn07XG52YXIgZmFWb2xsZXliYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbGxleWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTIsIFwidm9sbGV5YmFsbC1iYWxsXCJdLCBcImY0NWZcIiwgXCJNNTExLjggMjY3LjRjLTI2LjEgOC43LTUzLjQgMTMuOC04MSAxNS4xYzkuMi0xMDUuMy0zMS41LTIwNC4yLTEwMy4yLTI3Mi40QzQzNC4xIDQxLjEgNTEyIDEzOS41IDUxMiAyNTZjMCAzLjgtLjEgNy42LS4yIDExLjR6bS0zLjkgMzQuN2MtNS44IDMyLTE3LjYgNjItMzQuMiA4OC43Yy05Ny41IDQ4LjUtMjE3LjcgNDIuNi0zMTEuOS0yNC41YzIzLjctMzYuMiA1NS40LTY3LjcgOTQuNS05MS44Yzc5LjkgNDMuMiAxNzAuMSA1MC44IDI1MS42IDI3LjZ6bS0yMzYtNTUuNWMtMi41LTkwLjktNDEuMS0xNzIuNy0xMDEuOS0yMzEuN0MxOTYuOCA1LjIgMjI1LjggMCAyNTYgMGMyLjcgMCA1LjMgMCA3LjkgLjFjOTAuOCA2MC4yIDE0NS43IDE2Ny4yIDEzNC43IDI4Mi4zYy00My4xLTIuNC04Ni40LTE0LjEtMTI2LjgtMzUuOXpNMTM4IDI4LjhjMjAuNiAxOC4zIDM4LjcgMzkuNCA1My43IDYyLjZDOTUuOSAxMzYuMSAzMC42IDIyMC44IDcuMyAzMTYuOUMyLjUgMjk3LjQgMCAyNzcgMCAyNTZDMCAxNTcuMiA1NiA3MS41IDEzOCAyOC44em02OS42IDkwLjVjMTkuNSAzOC42IDMxIDgxLjkgMzIuMyAxMjcuN0MxNjIuNSAyOTQuNiAxMTAuOSAzNjguOSA5MC4yIDQ1MUM2NiA0MzAuNCA0NS42IDQwNS40IDMwLjQgMzc3LjJjNi43LTEwOC43IDcxLjktMjA5LjkgMTc3LjEtMjU3Ljl6TTI1NiA1MTJjLTUwLjcgMC05OC0xNC43LTEzNy44LTQwLjJjNS42LTI3IDE0LjgtNTMuMSAyNy40LTc3LjdDMjMyLjIgNDU0LjYgMzM4LjEgNDY4LjggNDMzIDQ0MWMtNDYgNDQtMTA4LjMgNzEtMTc3IDcxelwiXVxufTtcbnZhciBmYVZvbGxleWJhbGxCYWxsID0gZmFWb2xsZXliYWxsO1xudmFyIGZhQXJyb3dzVXBUb0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3dzLXVwLXRvLWxpbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YzJcIiwgXCJNMzIgOTZsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2ek05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMjM3LjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NnptMzIwIDQ1LjNjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBMNDE2IDIzNy4zIDQxNiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3pcIl1cbn07XG52YXIgZmFTb3J0RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb3J0LWRvd24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInNvcnQtZGVzY1wiXSwgXCJmMGRkXCIsIFwiTTE4Mi42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlzMTYuNi0xOS44IDI5LjYtMTkuOEgyODhjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtMTI4IDEyOHpcIl1cbn07XG52YXIgZmFTb3J0RGVzYyA9IGZhU29ydERvd247XG52YXIgZmFDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1pbnVzLWNpcmNsZVwiXSwgXCJmMDU2XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xODQgMjMySDMyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhTWludXNDaXJjbGUgPSBmYUNpcmNsZU1pbnVzO1xudmFyIGZhRG9vck9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9vci1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTJiXCIsIFwiTTMyMCAzMmMwLTkuOS00LjUtMTkuMi0xMi4zLTI1LjJTMjg5LjgtMS40IDI4MC4yIDFsLTE3OS45IDQ1Qzc5IDUxLjMgNjQgNzAuNSA2NCA5Mi41VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NiAyODhoMzJWNDgwIDMyek0yNTYgMjU2YzAgMTcuNy0xMC43IDMyLTI0IDMycy0yNC0xNC4zLTI0LTMyczEwLjctMzIgMjQtMzJzMjQgMTQuMyAyNCAzMnptOTYtMTI4aDk2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MTJWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM1MnY2NHpcIl1cbn07XG52YXIgZmFSaWdodEZyb21CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpZ2h0LWZyb20tYnJhY2tldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2lnbi1vdXQtYWx0XCJdLCBcImYyZjVcIiwgXCJNMzc3LjkgMTA1LjlMNTAwLjcgMjI4LjdjNy4yIDcuMiAxMS4zIDE3LjEgMTEuMyAyNy4zcy00LjEgMjAuMS0xMS4zIDI3LjNMMzc3LjkgNDA2LjFjLTYuNCA2LjQtMTUgOS45LTI0IDkuOWMtMTguNyAwLTMzLjktMTUuMi0zMy45LTMzLjlsMC02Mi4xLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjIuMWMwLTE4LjcgMTUuMi0zMy45IDMzLjktMzMuOWM5IDAgMTcuNiAzLjYgMjQgOS45ek0xNjAgOTZMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXVxufTtcbnZhciBmYVNpZ25PdXRBbHQgPSBmYVJpZ2h0RnJvbUJyYWNrZXQ7XG52YXIgZmFBdG9tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F0b20nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODgzXSwgXCJmNWQyXCIsIFwiTTI1NiAzOTguOGMtMTEuOCA1LjEtMjMuNCA5LjctMzQuOSAxMy41YzE2LjcgMzMuOCAzMSAzNS43IDM0LjkgMzUuN3MxOC4xLTEuOSAzNC45LTM1LjdjLTExLjQtMy45LTIzLjEtOC40LTM0LjktMTMuNXpNNDQ2IDI1NmMzMyA0NS4yIDQ0LjMgOTAuOSAyMy42IDEyOGMtMjAuMiAzNi4zLTYyLjUgNDkuMy0xMTUuMiA0My4yYy0yMiA1Mi4xLTU1LjYgODQuOC05OC40IDg0LjhzLTc2LjQtMzIuNy05OC40LTg0LjhjLTUyLjcgNi4xLTk1LTYuOC0xMTUuMi00My4yQzIxLjcgMzQ2LjkgMzMgMzAxLjIgNjYgMjU2Yy0zMy00NS4yLTQ0LjMtOTAuOS0yMy42LTEyOGMyMC4yLTM2LjMgNjIuNS00OS4zIDExNS4yLTQzLjJDMTc5LjYgMzIuNyAyMTMuMiAwIDI1NiAwczc2LjQgMzIuNyA5OC40IDg0LjhjNTIuNy02LjEgOTUgNi44IDExNS4yIDQzLjJjMjAuNyAzNy4xIDkuNCA4Mi44LTIzLjYgMTI4em0tNjUuOCA2Ny40Yy0xLjcgMTQuMi0zLjkgMjgtNi43IDQxLjJjMzEuOCAxLjQgMzguNi04LjcgNDAuMi0xMS43YzIuMy00LjIgNy0xNy45LTExLjktNDguMWMtNi44IDYuMy0xNCAxMi41LTIxLjYgMTguNnptLTYuNy0xNzUuOWMyLjggMTMuMSA1IDI2LjkgNi43IDQxLjJjNy42IDYuMSAxNC44IDEyLjMgMjEuNiAxOC42YzE4LjktMzAuMiAxNC4yLTQ0IDExLjktNDguMWMtMS42LTIuOS04LjQtMTMtNDAuMi0xMS43ek0yOTAuOSA5OS43QzI3NC4xIDY1LjkgMjU5LjkgNjQgMjU2IDY0cy0xOC4xIDEuOS0zNC45IDM1LjdjMTEuNCAzLjkgMjMuMSA4LjQgMzQuOSAxMy41YzExLjgtNS4xIDIzLjQtOS43IDM0LjktMTMuNXptLTE1OSA4OC45YzEuNy0xNC4zIDMuOS0yOCA2LjctNDEuMmMtMzEuOC0xLjQtMzguNiA4LjctNDAuMiAxMS43Yy0yLjMgNC4yLTcgMTcuOSAxMS45IDQ4LjFjNi44LTYuMyAxNC0xMi41IDIxLjYtMTguNnpNMTEwLjIgMzA0LjhDOTEuNCAzMzUgOTYgMzQ4LjcgOTguMyAzNTIuOWMxLjYgMi45IDguNCAxMyA0MC4yIDExLjdjLTIuOC0xMy4xLTUtMjYuOS02LjctNDEuMmMtNy42LTYuMS0xNC44LTEyLjMtMjEuNi0xOC42ek0zMzYgMjU2YTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHptLTgwLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFTb2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvYXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCBcImUwNmVcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzIwIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNDE2IDMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTYwYzAgMjcuNi0xMS43IDUyLjUtMzAuNCA3MC4xQzQyMi4xIDI3NS43IDQ0OCAzMTAuOCA0NDggMzUyYzAgNTMtNDMgOTYtOTYgOTZIMTYwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2aDg4LjRjLTE1LjItMTctMjQuNC0zOS40LTI0LjQtNjRIOTZjLTUzIDAtOTYgNDMtOTYgOTZWNDE2YzAgNTMgNDMgOTYgOTYgOTZINDE2YzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRIMzUyYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDMyMCAxNjB6XCJdXG59O1xudmFyIGZhSWNvbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNvbnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhlYXJ0LW11c2ljLWNhbWVyYS1ib2x0XCJdLCBcImY4NmRcIiwgXCJNNTAwLjMgNy4zQzUwNy43IDEzLjMgNTEyIDIyLjQgNTEyIDMyVjE3NmMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjcxTDM1MiA5MC4yVjIwOGMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjY0YzAtMTUuMyAxMC44LTI4LjQgMjUuNy0zMS40bDE2MC0zMmM5LjQtMS45IDE5LjEgLjYgMjYuNiA2LjZ6TTc0LjcgMzA0bDExLjgtMTcuOGM1LjktOC45IDE1LjktMTQuMiAyNi42LTE0LjJoNjEuN2MxMC43IDAgMjAuNyA1LjMgMjYuNiAxNC4yTDIxMy4zIDMwNEgyNDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNTJjMC0yNi41IDIxLjUtNDggNDgtNDhINzQuN3pNMTkyIDQwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NzguNyAyNzguM0w0NDAuMyAzNjhINDk2YzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjItMTIuNC01LjMtMTkuMkwzOTEuNyA0MDBIMzM2Yy02LjcgMC0xMi42LTQuMS0xNS0xMC40cy0uNi0xMy4zIDQuNC0xNy43bDEyOC0xMTJjNS42LTQuOSAxMy45LTUuMyAxOS45LS45czguMiAxMi40IDUuMyAxOS4yem0tMzM5LTU5LjJjLTYuNSA2LjUtMTcgNi41LTIzIDBMMTkuOSAxMTkuMmMtMjgtMjktMjYuNS03Ni45IDUtMTAzLjljMjctMjMuNSA2OC40LTE5IDkzLjQgNi41bDEwIDEwLjUgOS41LTEwLjVjMjUtMjUuNSA2NS45LTMwIDkzLjktNi41YzMxIDI3IDMyLjUgNzQuOSA0LjUgMTAzLjlsLTk2LjQgOTkuOXpcIl1cbn07XG52YXIgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCA9IGZhSWNvbnM7XG52YXIgZmFNaWNyb3Bob25lTGluZXNTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLWxpbmVzLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJtaWNyb3Bob25lLWFsdC1zbGFzaFwiXSwgXCJmNTM5XCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNCAxNmMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFYyNTZIMzU4LjlsLTM0LjUtMjdjMi45LTMuMSA3LTUgMTEuNi01aDgwVjE5MkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTI4SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xek0zNTguMiAzNzguMkMzNDYuMSAzODIgMzMzLjMgMzg0IDMyMCAzODRjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4di04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZ2NDBjMCA4OS4xIDY2LjIgMTYyLjcgMTUyIDE3NC40VjQ2NEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNzIgNzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzQ0VjQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMmwtNDMuMS0zMy45elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVBbHRTbGFzaCA9IGZhTWljcm9waG9uZUxpbmVzU2xhc2g7XG52YXIgZmFCcmlkZ2VDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGM5XCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYVB1bXBNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3B1bXAtbWVkaWNhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2YVwiLCBcIk0xMjggMzJ2OTZIMjU2Vjk2aDYwLjFjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40SDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMTcuNCAxNjBjLTMzLjMgMC02MSAyNS41LTYzLjggNTguN0wzNSA0NDIuN0MzMS45IDQ4MCA2MS4zIDUxMiA5OC44IDUxMkgyODUuMmMzNy40IDAgNjYuOS0zMiA2My44LTY5LjNsLTE4LjctMjI0Yy0yLjgtMzMuMi0zMC41LTU4LjctNjMuOC01OC43SDExNy40ek0yMTYgMjgwdjMyaDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIxNnYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNjBIMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDMyVjI4MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZpbmdlcnByaW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbmdlcnByaW50JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTc3XCIsIFwiTTQ4IDI1NkM0OCAxNDEuMSAxNDEuMSA0OCAyNTYgNDhjNjMuMSAwIDExOS42IDI4LjEgMTU3LjggNzIuNWM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44QzQwMy4zIDM0LjYgMzMzLjcgMCAyNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyNTZ6bTQ1OC41LTUyLjljLTIuNy0xMy0xNS41LTIxLjMtMjguNC0xOC41cy0yMS4zIDE1LjUtMTguNSAyOC40YzIuOSAxMy45IDQuNSAyOC4zIDQuNSA0My4xdjQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjU2YzAtMTguMS0xLjktMzUuOC01LjUtNTIuOXpNMjU2IDgwYy0xOSAwLTM3LjQgMy01NC41IDguNmMtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOWM3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOWMxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHYyNC45YzAgMjUuMi0xLjUgNTAuMy00LjQgNzUuM2MtMS43IDE0LjYgOS40IDI3LjggMjQuMiAyNy44YzExLjggMCAyMS45LTguNiAyMy4zLTIwLjNjMy4zLTI3LjQgNS01NSA1LTgyLjdWMjU2YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2ek0xNTAuNyAxNDguN2MtOS4xLTEwLjYtMjUuMy0xMS40LTMzLjktLjRDOTMuNyAxNzggODAgMjE1LjQgODAgMjU2djI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45QzY4LjggMzY4LjQgODAuMSAzODQgOTYuMSAzODRjMTAuNSAwIDE5LjktNyAyMi4yLTE3LjNjNi40LTI4LjEgOS43LTU2LjggOS43LTg1LjhWMjU2YzAtMjcuMiA4LjUtNTIuNCAyMi45LTczLjFjNy4yLTEwLjQgOC0yNC42LS4yLTM0LjJ6TTI1NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZ2MjQuOWMwIDM1LjktNC42IDcxLjUtMTMuOCAxMDYuMWMtMy44IDE0LjMgNi43IDI5IDIxLjUgMjljOS41IDAgMTcuOS02LjIgMjAuNC0xNS40YzEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdWMjU2YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJ2MjQuOWMwIDM2LjMtMy41IDcyLjQtMTAuNCAxMDcuOWMtMi43IDEzLjkgNy43IDI3LjIgMjEuOCAyNy4yYzEwLjIgMCAxOS03IDIxLTE3YzcuNy0zOC44IDExLjYtNzguMyAxMS42LTExOC4xVjI1NmMwLTUzLTQzLTk2LTk2LTk2em0yNCA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlWMjU2elwiXVxufTtcbnZhciBmYUhhbmRQb2ludFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYTRcIiwgXCJNNDgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMDggMCAwLTY0IDIwOCAwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bTY0LTY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTI4OCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMHptLTg4LTk2bC42IDBjLTUuNCA5LjQtOC42IDIwLjMtOC42IDMyYzAgMTMuMiA0IDI1LjQgMTAuOCAzNS42QzE3Ny45IDM2NC4zIDE2MCAzODguMSAxNjAgNDE2YzAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyelwiXVxufTtcbnZhciBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNlYXJjaC1sb2NhdGlvblwiXSwgXCJmNjg5XCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNmM2IDcuMyAxNi44IDcuMyAyMi43IDBjMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhU2VhcmNoTG9jYXRpb24gPSBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uO1xudmFyIGZhRm9yd2FyZFN0ZXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZC1zdGVwJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJzdGVwLWZvcndhcmRcIl0sIFwiZjA1MVwiLCBcIk01Mi41IDQ0MC42Yy05LjUgNy45LTIyLjggOS43LTM0LjEgNC40UzAgNDI4LjQgMCA0MTZWOTZDMCA4My42IDcuMiA3Mi4zIDE4LjQgNjdzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MEwyNTYgMjQxVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI3MWwtMTEuNSA5LjYtMTkyIDE2MHpcIl1cbn07XG52YXIgZmFTdGVwRm9yd2FyZCA9IGZhRm9yd2FyZFN0ZXA7XG52YXIgZmFGYWNlU21pbGVCZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utc21pbGUtYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgXCJzbWlsZS1iZWFtXCJdLCBcImY1YjhcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnptNTMuNS05Ni43bDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhU21pbGVCZWFtID0gZmFGYWNlU21pbGVCZWFtO1xudmFyIGZhRmxhZ0NoZWNrZXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFnLWNoZWNrZXJlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzkzN10sIFwiZjExZVwiLCBcIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMyVjQ4bDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNWM0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMVYzNDUuOGMwIDEzLjMtOC4zIDI1LjMtMjAuOCAzMGwtMzQuNyAxM2MtNDYuMiAxNy4zLTk3LjYgMTQuNi0xNDEuNy03LjRjLTM3LjktMTktODEuMy0yMy43LTEyMi41LTEzLjRMNjQgMzg0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQwMCAzMzQgNjQgMzJDMCAxNC4zIDE0LjMgMCAzMiAwek02NCAxODcuMWw2NC0xMy45djY1LjVMNjQgMjUyLjZWMzE4bDQ4LjgtMTIuMmM1LjEtMS4zIDEwLjEtMi40IDE1LjItMy4zVjIzOC43bDM4LjktOC40YzguMy0xLjggMTYuNy0yLjUgMjUuMS0yLjFsMC02NGMxMy42IC40IDI3LjIgMi42IDQwLjQgNi40bDIzLjYgNi45djY2LjdsLTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOHY3MS40YzIxLjggMS45IDQzLjMgNi43IDY0IDE0LjRWMjQ0LjJsMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40VjE5NGMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEydi02MmMtMTMtMy44LTI1LjgtOC44LTM4LjItMTVjLTguMi00LjEtMTYuOS03LTI1LjgtOC44djcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42TDEyOCAxNzMuMlY5OEw2NCAxMTR2NzMuMXpNMzIwIDMzNS43YzE2LjggMS41IDMzLjktLjcgNTAtNi44bDE0LTUuMlYyNTEuOWwtNy45IDEuOGMtMTguNCA0LjMtMzcuMyA1LjctNTYuMSA0LjV2NzcuNHptNjQtMTQ5LjRWMTE1LjRjLTIwLjkgNi4xLTQyLjQgOS4xLTY0IDkuMVYxOTRjMTMuOSAxLjQgMjggLjUgNDEuNy0yLjZsMjIuMy01LjJ6XCJdXG59O1xudmFyIGZhRm9vdGJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9vdGJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDQsIFwiZm9vdGJhbGwtYmFsbFwiXSwgXCJmNDRlXCIsIFwiTTI0Ny41IDI1LjRjLTEzLjUgMy4zLTI2LjQgNy4yLTM4LjYgMTEuN0MxNDIuOSA2MS42IDk2LjcgMTAzLjYgNjYgMTUzLjZjLTE4LjMgMjkuOC0zMC45IDYyLjMtMzkuMiA5NS40TDI2NC41IDQ4Ni42YzEzLjUtMy4zIDI2LjQtNy4yIDM4LjYtMTEuN2M2Ni0yNC41IDExMi4yLTY2LjUgMTQyLjktMTE2LjVjMTguMy0yOS44IDMwLjktNjIuMyAzOS4xLTk1LjNMMjQ3LjUgMjUuNHpNNDk1LjIgMjA1LjNjNi4xLTU2LjggMS40LTExMi4yLTcuNy0xNTYuNGMtMi43LTEyLjktMTMtMjIuOS0yNi4xLTI1LjFjLTU4LjItOS43LTEwOS45LTEyLTE1NS42LTcuOUw0OTUuMiAyMDUuM3pNMjA2LjEgNDk2TDE2LjggMzA2LjdjLTYuMSA1Ni44LTEuNCAxMTIuMiA3LjcgMTU2LjRjMi43IDEyLjkgMTMgMjIuOSAyNi4xIDI1LjFjNTguMiA5LjcgMTA5LjkgMTIgMTU1LjYgNy45em01NC42LTMzMS4zYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFGb290YmFsbEJhbGwgPSBmYUZvb3RiYWxsO1xudmFyIGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2Y1wiLCBcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNEwxNjYuMyA5Nkg0OEMyMS41IDk2IDAgMTE3LjUgMCAxNDRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMyMHYwSDI1NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjMgMGguNWMzLjQtMzcuNyAxOC43LTcyLjEgNDIuMi05OS4xQzM1MC4yIDI2MCAzMzUuNiAyNjQgMzIwIDI2NGMtNDguNiAwLTg4LTM5LjQtODgtODhzMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMTguMy01LjYgMzUuMy0xNS4xIDQ5LjRjMjktMjEgNjQuNi0zMy40IDEwMy4xLTMzLjRjNTkuNSAwIDExMi4xIDI5LjYgMTQ0IDc0LjhWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ3My43TDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFDcm9wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3AnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMjVcIiwgXCJNNDQ4IDEwOS4zbDU0LjYtNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw0MDIuNyA2NCAxNjAgNjR2NjRsMTc4LjcgMEwxMjggMzM4LjdWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgMTQuMyA2NCAzMlY2NEgzMkMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJINjRWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MlYzODRIMTczLjNMMzg0IDE3My4zIDM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDQ4bDAtMjc0Ljd6XCJdXG59O1xudmFyIGZhQW5nbGVzRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZXMtZG93bicsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYW5nbGUtZG91YmxlLWRvd25cIl0sIFwiZjEwM1wiLCBcIk0yNDYuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjI0IDQwMi43IDM2MS40IDI2NS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjB6bTE2MC0zNTJsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDIyNCAyMTAuNyAzNjEuNCA3My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVEb3duID0gZmFBbmdsZXNEb3duO1xudmFyIGZhVXNlcnNSZWN0YW5nbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtcmVjdGFuZ2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTk0XCIsIFwiTTk2IDBDNDMgMCAwIDQzIDAgOTZWNDE2YzAgNTMgNDMgOTYgOTYgOTZINTQ0YzUzIDAgOTYtNDMgOTYtOTZWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWOTZ6bTE1OS44IDgwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTk2IDMwOS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43aDU2LjFjOC0zNC4xIDMyLjgtNjEuNyA2NS4yLTczLjZjLTcuNS00LjEtMTYuMi02LjQtMjUuMy02LjRIMTQ5LjNDMTE5LjkgMjU2IDk2IDI3OS45IDk2IDMwOS4zek00NjEuMiAzMzZoNTYuMWMxNC43IDAgMjYuNy0xMS45IDI2LjctMjYuN2MwLTI5LjUtMjMuOS01My4zLTUzLjMtNTMuM0g0MjEuM2MtOS4yIDAtMTcuOCAyLjMtMjUuMyA2LjRjMzIuNCAxMS45IDU3LjIgMzkuNSA2NS4yIDczLjZ6TTM3MiAyODljLTMuOS0uNy03LjktMS0xMi0xSDI4MGMtNC4xIDAtOC4xIC4zLTEyIDFjLTI2IDQuNC00Ny4zIDIyLjctNTUuOSA0N2MtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNGMtOC42LTI0LjMtMjkuOS00Mi42LTU1LjktNDd6TTUxMiAxNzZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMzIwIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFQZW9wbGVSb29mID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1yb29mJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTM3XCIsIFwiTTMzNS41IDRsMjg4IDE2MGMxNS40IDguNiAyMSAyOC4xIDEyLjQgNDMuNXMtMjguMSAyMS00My41IDEyLjRMMzIwIDY4LjYgNDcuNSAyMjBjLTE1LjQgOC42LTM0LjkgMy00My41LTEyLjRzLTMtMzQuOSAxMi40LTQzLjVMMzA0LjUgNGM5LjctNS40IDIxLjQtNS40IDMxLjEgMHpNMzIwIDE2MGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6TTE0NCAyNTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0zMTIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjI2LjkgNDkxLjRMMjAwIDQ0MS41VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0MS41TDYxLjEgNDkxLjRjLTYuMyAxMS43LTIwLjggMTYtMzIuNSA5LjhzLTE2LTIwLjgtOS44LTMyLjVsMzcuOS03MC4zYzE1LjMtMjguNSA0NS4xLTQ2LjMgNzcuNS00Ni4zaDE5LjVjMTYuMyAwIDMxLjkgNC41IDQ1LjQgMTIuNmwzMy42LTYyLjNjMTUuMy0yOC41IDQ1LjEtNDYuMyA3Ny41LTQ2LjNoMTkuNWMzMi40IDAgNjIuMSAxNy44IDc3LjUgNDYuM2wzMy42IDYyLjNjMTMuNS04LjEgMjkuMS0xMi42IDQ1LjQtMTIuNmgxOS41YzMyLjQgMCA2Mi4xIDE3LjggNzcuNSA0Ni4zbDM3LjkgNzAuM2M2LjMgMTEuNyAxLjkgMjYuMi05LjggMzIuNXMtMjYuMiAxLjktMzIuNS05LjhMNTUyIDQ0MS41VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0MS41bC0yNi45IDQ5LjljLTYuMyAxMS43LTIwLjggMTYtMzIuNSA5LjhzLTE2LTIwLjgtOS44LTMyLjVsMzYuMy02Ny41Yy0xLjctMS43LTMuMi0zLjYtNC4zLTUuOEwzNzYgMzQ1LjVWNDAwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzQ1LjVsLTI2LjkgNDkuOWMtMS4yIDIuMi0yLjYgNC4xLTQuMyA1LjhsMzYuMyA2Ny41YzYuMyAxMS43IDEuOSAyNi4yLTkuOCAzMi41cy0yNi4yIDEuOS0zMi41LTkuOHpcIl1cbn07XG52YXIgZmFQZW9wbGVMaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1saW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTM0XCIsIFwiTTM2MCA3MmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwek0xNDQgMjA4YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpNNDk2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6TTIwMCAzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNi4zLTY3LjVjMS43LTEuNyAzLjItMy42IDQuMy01LjhMMjY0IDIxNy41VjI3MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMTcuNWwyNi45IDQ5LjljMS4yIDIuMiAyLjYgNC4xIDQuMyA1LjhsLTM2LjMgNjcuNWMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMNDQwIDMxMy41VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDQ4Ni4yYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDMxMC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42SDEzNC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM0wxOC45IDM0MC42Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw4OCAzMTMuNVYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzEzLjV6XCJdXG59O1xudmFyIGZhQmVlck11Z0VtcHR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JlZXItbXVnLWVtcHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiZWVyXCJdLCBcImYwZmNcIiwgXCJNMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2aDUxLjJjNDIuNCAwIDc2LjggMzQuNCA3Ni44IDc2LjhWMjc0LjljMCAzMC40LTE3LjkgNTcuOS00NS42IDcwLjJMMzg0IDM4MS43VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTM4NCAzMTEuNmw1Ni40LTI1LjFjNC42LTIuMSA3LjYtNi42IDcuNi0xMS43VjE3Mi44YzAtNy4xLTUuNy0xMi44LTEyLjgtMTIuOEgzODRWMzExLjZ6TTE2MCAxNDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzY4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMTQ0em02NCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE0NHptNjQgMGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlYzNjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxNDR6XCJdXG59O1xudmFyIGZhQmVlciA9IGZhQmVlck11Z0VtcHR5O1xudmFyIGZhRGlhZ3JhbVByZWRlY2Vzc29yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tcHJlZGVjZXNzb3InLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NzdcIiwgXCJNNDQ4IDQxNmwwLTY0TDY0IDM1MmwwIDY0IDM4NCAwem0wIDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0yODggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDIyNGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxNDQgMCAxNiAwIDE0NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTYgMzguMSAwYzIxLjQgMCAzMi4xIDI1LjkgMTcgNDFMNDMzIDIzOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzI5IDE2OWMtMTUuMS0xNS4xLTQuNC00MSAxNy00MWwzOC4xIDAgMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTgwIDAgMCA2NHpcIl1cbn07XG52YXIgZmFBcnJvd1VwTG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1sb25nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJsb25nLWFycm93LXVwXCJdLCBcImYxNzZcIiwgXCJNMjE0LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTA5LjNsNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhTG9uZ0Fycm93VXAgPSBmYUFycm93VXBMb25nO1xudmFyIGZhRmlyZUZsYW1lU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtZmxhbWUtc2ltcGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJidXJuXCJdLCBcImY0NmFcIiwgXCJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42QzAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41YzAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6XCJdXG59O1xudmFyIGZhQnVybiA9IGZhRmlyZUZsYW1lU2ltcGxlO1xudmFyIGZhUGVyc29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbicsXG4gIGljb246IFszMjAsIDUxMiwgWzEyOTQ4NSwgXCJtYWxlXCJdLCBcImYxODNcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw1OC4zIDk3YzkuMSAxNS4xIDQuMiAzNC44LTEwLjkgNDMuOXMtMzQuOCA0LjItNDMuOS0xMC45TDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpcIl1cbn07XG52YXIgZmFNYWxlID0gZmFQZXJzb247XG52YXIgZmFMYXB0b3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTg3XSwgXCJmMTA5XCIsIFwiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZWMzUyaDY0Vjk2SDUxMlYzNTJoNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTI4ek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMkMwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwSDU2My4yYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44YzAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJIMTkuMnpcIl1cbn07XG52YXIgZmFGaWxlQ3N2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY3N2JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmRkXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjMwNEgxNzZjLTM1LjMgMC02NCAyOC43LTY0IDY0VjUxMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4ek0yMDAgMzUyaDE2YzIyLjEgMCA0MCAxNy45IDQwIDQwdjhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ2LThjMC00LjQtMy42LTgtOC04SDIwMGMtNC40IDAtOCAzLjYtOCA4djgwYzAgNC40IDMuNiA4IDggOGgxNmM0LjQgMCA4LTMuNiA4LTh2LThjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY4YzAgMjIuMS0xNy45IDQwLTQwIDQwSDIwMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBWMzkyYzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMzMuMSAwSDM2OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzMzMuMWMtNy4yIDAtMTMuMSA1LjktMTMuMSAxMy4xYzAgNS4yIDMgOS45IDcuOCAxMmwzNy40IDE2LjZjMTYuMyA3LjIgMjYuOCAyMy40IDI2LjggNDEuMmMwIDI0LjktMjAuMiA0NS4xLTQ1LjEgNDUuMUgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoNDIuOWM3LjIgMCAxMy4xLTUuOSAxMy4xLTEzLjFjMC01LjItMy05LjktNy44LTEybC0zNy40LTE2LjZjLTE2LjMtNy4yLTI2LjgtMjMuNC0yNi44LTQxLjJjMC0yNC45IDIwLjItNDUuMSA0NS4xLTQ1LjF6bTk4LjkgMGM4LjggMCAxNiA3LjIgMTYgMTZ2MzEuNmMwIDIzIDUuNSA0NS42IDE2IDY2YzEwLjUtMjAuMyAxNi00Mi45IDE2LTY2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMxLjZjMCAzNC43LTEwLjMgNjguNy0yOS42IDk3LjZsLTUuMSA3LjdjLTMgNC41LTggNy4xLTEzLjMgNy4xcy0xMC4zLTIuNy0xMy4zLTcuMWwtNS4xLTcuN2MtMTkuMy0yOC45LTI5LjYtNjIuOS0yOS42LTk3LjZWMzY4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFNZW5vcmFoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lbm9yYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2NzZcIiwgXCJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0VjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDIwLjggNy40em05NiAwQzExOC44IDIuOSAxMjMuMSAwIDEyOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMUwxMTYuOCA3LjR6bTc3LjggNDIuNEwyMTIuOCA3LjRDMjE0LjggMi45IDIxOS4xIDAgMjI0IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDMwOC44IDcuNHptNzcuOCA0Mi40TDQwNC44IDcuNEM0MDYuOCAyLjkgNDExLjEgMCA0MTYgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTUwMC44IDcuNEM1MDIuOCAyLjkgNTA3LjEgMCA1MTIgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMXpNMzIgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzIwSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyODhjMCA1My00MyA5Ni05NiA5NkgzNTJ2NjRINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjM4NEg5NmMtNTMgMC05Ni00My05Ni05NlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIOTZWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NiAzMkgxOTJWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIMzg0VjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJINDgwVjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVHJ1Y2tQbGFuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1wbGFuZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4ZlwiLCBcIk0yMDAgMGMtMzAuNiAwLTU2IDU0LjctNTYgODYuMVYxOTIuNUw3LjggMjc0LjNDMi45IDI3Ny4yIDAgMjgyLjQgMCAyODh2NjRjMCA1LjEgMi40IDkuOCA2LjQgMTIuOHM5LjMgMy45IDE0LjEgMi41bDEyMy40LTM3djgxLjJsLTUwIDQwYy0zLjggMy02IDcuNi02IDEyLjV2MzJjMCA1LjEgMi41IDEwIDYuNiAxM3M5LjUgMy44IDE0LjQgMi4yTDIwMCA0ODAuOSAyOTAuNCA1MTFjLTEuNi00LjctMi40LTkuOC0yLjQtMTVWNDYzLjRjLTE4LjItMTAuNS0zMC43LTI5LjctMzEuOS01MS44bC0uMS0uMVY0MDggMzI1LjUgMTg0bDAtMS4xIDAgMFY4Ni4xQzI1NiA1NC43IDIzMS41IDAgMjAwIDB6bTg4IDE3NlY0MDBjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zVjQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDhINTQ0djQwYzAgMTMuMyAxMC43IDI0IDI0IDI0aDE2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjQ0NS4zYzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM1YxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzM2Yy0yNi41IDAtNDggMjEuNS00OCA0OHptNzkuOCA3OC43YzMuMy04LjcgMTEuMi0xNC43IDIwLjUtMTQuN0g1MzkuN2M5LjIgMCAxNy4yIDYgMjAuNSAxNC43TDU3NiAzMDRIMzUybDE1LjgtNDkuM3pNNTY4IDM1MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTMzNiAzNzZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFSZWNvcmRWaW55bCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWNvcmQtdmlueWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4ZDlcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjI0YTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDEgMCAwIDI1NnptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhRmFjZUdyaW5TdGFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tc3RhcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsIFwiZ3Jpbi1zdGFyc1wiXSwgXCJmNTg3XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptNDA3LjQgNzUuNWM1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTE2MCAxMjBjLTMuMSAwLTUuOSAxLjgtNy4yIDQuNmwtMTYuNiAzNC43LTM4LjEgNWMtMy4xIC40LTUuNiAyLjUtNi42IDUuNXMtLjEgNi4yIDIuMSA4LjNsMjcuOSAyNi41LTcgMzcuOGMtLjYgMyAuNyA2LjEgMy4yIDcuOXM1LjggMiA4LjUgLjZMMTYwIDIzMi41bDMzLjggMTguM2MyLjcgMS41IDYgMS4zIDguNS0uNnMzLjctNC45IDMuMi03LjlsLTctMzcuOEwyMjYuNCAxNzhjMi4yLTIuMSAzLjEtNS4zIDIuMS04LjNzLTMuNS01LjEtNi42LTUuNWwtMzguMS01LTE2LjYtMzQuN2MtMS4zLTIuOC00LjEtNC42LTcuMi00LjZ6bTE5MiAwYy0zLjEgMC01LjkgMS44LTcuMiA0LjZsLTE2LjYgMzQuNy0zOC4xIDVjLTMuMSAuNC01LjYgMi41LTYuNiA1LjVzLS4xIDYuMiAyLjEgOC4zbDI3LjkgMjYuNS03IDM3LjhjLS42IDMgLjcgNi4xIDMuMiA3LjlzNS44IDIgOC41IC42TDM1MiAyMzIuNWwzMy44IDE4LjNjMi43IDEuNSA2IDEuMyA4LjUtLjZzMy43LTQuOSAzLjItNy45bC03LTM3LjhMNDE4LjQgMTc4YzIuMi0yLjEgMy4xLTUuMyAyLjEtOC4zcy0zLjUtNS4xLTYuNi01LjVsLTM4LjEtNS0xNi42LTM0LjdjLTEuMy0yLjgtNC4xLTQuNi03LjItNC42elwiXVxufTtcbnZhciBmYUdyaW5TdGFycyA9IGZhRmFjZUdyaW5TdGFycztcbnZhciBmYUJvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9uZycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjU1Y1wiLCBcIk0xNjAgMjA4LjVjMCAyOS4xLTE1LjYgNTMuOS0zNy4yIDY3LjhjLTE3LjIgMTEuMS0zMS41IDI2LjEtNDEuNyA0My43SDMwMi45Yy0xMC4yLTE3LjYtMjQuNS0zMi42LTQxLjctNDMuN2MtMjEuNi0xMy45LTM3LjItMzguNy0zNy4yLTY3LjhWNjRIMTYwVjIwOC41ek0yODggNjRWMjA4LjVjMCA1LjcgMy4xIDEwLjkgNy45IDE0YzExLjIgNy4yIDIxLjUgMTUuNSAzMC45IDI0LjhMMzY2LjEgMjA4bC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyNCAyNCAyNCAyNGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zQzM3NCAzMTQuMSAzODQgMzQ3LjkgMzg0IDM4NGMwIDM5LjQtMTEuOSA3Ni4xLTMyLjIgMTA2LjVjLTkuNiAxNC40LTI2LjUgMjEuNS00My44IDIxLjVINzYuMWMtMTcuMyAwLTM0LjItNy4xLTQzLjgtMjEuNUMxMS45IDQ2MC4xIDAgNDIzLjQgMCAzODRjMC02Ny44IDM1LjEtMTI3LjMgODguMS0xNjEuNWM0LjgtMy4xIDcuOS04LjMgNy45LTE0VjY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMlM3OC4zIDAgOTYgMGgxNkgyNzJoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdXG59O1xudmFyIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGFnaGV0dGktbW9uc3Rlci1mbHlpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInBhc3RhZmFyaWFuaXNtXCJdLCBcImY2N2JcIiwgXCJNMjA4IDY0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDBjMCAxNi4yLTYgMzEuMS0xNiA0Mi4zbDE1LjYgMzEuMmMxOC43LTYgMzkuOS05LjUgNjQuNC05LjVzNDUuOCAzLjUgNjQuNCA5LjVMNDAwIDEwNi4zQzM5MCA5NS4xIDM4NCA4MC4yIDM4NCA2NGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xLjcgMC0zLjQtLjEtNS4xLS4yTDQyNy44IDE1OGMyMS4xIDEzLjYgMzcuNyAzMC4yIDUxLjQgNDYuNGM3LjEgOC4zIDEzLjUgMTYuNiAxOS4zIDI0bDEuNCAxLjhjNi4zIDguMSAxMS42IDE0LjggMTYuNyAyMC40QzUyNy4zIDI2Mi4zIDUzMi43IDI2NCA1MzYgMjY0YzIuNSAwIDQuMy0uNiA3LjEtMy4zYzMuNy0zLjUgNy4xLTguOCAxMi41LTE3LjRsLjYtLjljNC42LTcuNCAxMS0xNy42IDE5LjQtMjUuN2M5LjctOS4zIDIyLjktMTYuNyA0MC40LTE2LjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIuNSAwLTQuMyAuNi03LjEgMy4zYy0zLjcgMy41LTcuMSA4LjgtMTIuNSAxNy40bC0uNiAuOWMtNC42IDcuNC0xMSAxNy42LTE5LjQgMjUuN2MtOS43IDkuMy0yMi45IDE2LjctNDAuNCAxNi43Yy0xOC41IDAtMzIuOS04LjUtNDQuMy0xOC42Yy0zLjEgNC02LjYgOC4zLTEwLjUgMTIuN2MxLjQgNC4zIDIuOCA4LjUgNCAxMi41Yy45IDMgMS44IDUuOCAyLjYgOC42YzMgOS44IDUuNSAxOC4yIDguNiAyNS45YzMuOSA5LjggNy40IDE1LjQgMTAuOCAxOC41YzIuNiAyLjQgNS45IDQuMyAxMi44IDQuM2M4LjcgMCAxNi45LTQuMiAzMy43LTEzLjJjMTUtOCAzNS43LTE4LjggNjIuMy0xOC44YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMy40IDAtMjQuNyA1LjItMzkuNyAxMy4yYy0xIC42LTIuMSAxLjEtMy4yIDEuN0M1NTkuOSA0MTQgNTQxLjQgNDI0IDUyMCA0MjRjLTE4LjQgMC0zMy42LTYuMS00NS41LTE3LjJjLTExLjEtMTAuMy0xNy45LTIzLjctMjIuNy0zNmMtMy42LTktNi43LTE5LjEtOS41LTI4LjVjLTE2LjQgMTIuMy0zNi4xIDIzLjYtNTguOSAzMS4zYzMuNiAxMC44IDguNCAyMy41IDE0LjQgMzYuMmM3LjUgMTUuOSAxNi4yIDMwLjQgMjUuOCA0MC41QzQzMyA0NjAuNSA0NDEuMiA0NjQgNDQ4IDQ2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjUuMiAwLTQ1LTEzLjUtNTkuNS0yOC44Yy0xNC41LTE1LjQtMjUuNy0zNC45LTM0LjItNTNjLTgtMTctMTQuMS0zMy44LTE4LjMtNDYuOWMtNS4yIC40LTEwLjYgLjYtMTYgLjZzLTEwLjgtLjItMTYtLjZjLTQuMiAxMy0xMC4zIDI5LjktMTguMyA0Ni45Yy04LjUgMTguMS0xOS44IDM3LjYtMzQuMiA1M0MyMzcgNDk4LjUgMjE3LjIgNTEyIDE5MiA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjNi44IDAgMTUtMy41IDI0LjUtMTMuN2M5LjUtMTAuMSAxOC4zLTI0LjYgMjUuOC00MC41YzUuOS0xMi42IDEwLjctMjUuNCAxNC40LTM2LjJjLTIyLjgtNy43LTQyLjUtMTktNTguOS0zMS4zYy0yLjkgOS40LTYgMTkuNS05LjUgMjguNWMtNC44IDEyLjItMTEuNiAyNS42LTIyLjcgMzZDMTUzLjYgNDE3LjkgMTM4LjQgNDI0IDEyMCA0MjRjLTIxLjQgMC0zOS45LTEwLTUzLjEtMTcuMWwwIDBjLTEuMS0uNi0yLjItMS4yLTMuMi0xLjdjLTE1LTgtMjYuMy0xMy4yLTM5LjctMTMuMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyNi42IDAgNDcuMyAxMC44IDYyLjMgMTguOGMxNi44IDkgMjUgMTMuMiAzMy43IDEzLjJjNi44IDAgMTAuMi0xLjkgMTIuOC00LjNjMy40LTMuMiA3LTguOCAxMC44LTE4LjVjMy03LjcgNS42LTE2LjEgOC42LTI1LjljLjgtMi43IDEuNy01LjYgMi42LTguNmMxLjItNCAyLjYtOC4yIDQtMTIuNWMtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuN0MxMzYuOSAzMDMuNSAxMjIuNSAzMTIgMTA0IDMxMmMtMTcuNSAwLTMwLjctNy40LTQwLjQtMTYuN2MtOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjRjLTIuOC0yLjctNC42LTMuMy03LjEtMy4zYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzE3LjUgMCAzMC43IDcuNCA0MC40IDE2LjdjOC40IDguMSAxNC44IDE4LjMgMTkuNCAyNS43bC42IC45YzUuNCA4LjYgOC44IDEzLjkgMTIuNSAxNy40YzIuOCAyLjcgNC42IDMuMyA3LjEgMy4zYzMuMyAwIDguNy0xLjcgMTkuNC0xMy40YzUuMS01LjYgMTAuNC0xMi4zIDE2LjctMjAuNGwxLjQtMS44YzUuOC03LjQgMTIuMi0xNS43IDE5LjMtMjRjMTMuOC0xNi4yIDMwLjMtMzIuOCA1MS40LTQ2LjRsLTE1LjEtMzAuMmMtMS43IC4xLTMuNCAuMi01LjEgLjJjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG52YXIgZmFQYXN0YWZhcmlhbmlzbSA9IGZhU3BhZ2hldHRpTW9uc3RlckZseWluZztcbnZhciBmYUFycm93RG93blVwQWNyb3NzTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1kb3duLXVwLWFjcm9zcy1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGFmXCIsIFwiTTEzNy40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5MiA0MDIuN1YyODhINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ0OFYxMDkuM2w0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzODQgMTA5LjNWMjI0SDE5MiAxMjggMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZWNDAyLjdMODYuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZ6TTEyOCAxOTJoNjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMTkyek00NDggMzIwSDM4NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjB6XCJdXG59O1xudmFyIGZhU3Bvb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Bvb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDgsIDYxODczLCBcInV0ZW5zaWwtc3Bvb25cIl0sIFwiZjJlNVwiLCBcIk0yNDUuOCAyMjAuOWMtMTQuNS0xNy42LTIxLjgtMzkuMi0yMS44LTYwLjhDMjI0IDgwIDMyMCAwIDQxNiAwYzUzIDAgOTYgNDMgOTYgOTZjMCA5Ni04MCAxOTItMTYwLjIgMTkyYy0yMS42IDAtNDMuMi03LjMtNjAuOC0yMS44TDU0LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0NS44IDIyMC45elwiXVxufTtcbnZhciBmYVV0ZW5zaWxTcG9vbiA9IGZhU3Bvb247XG52YXIgZmFKYXJXaGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqYXItd2hlYXQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImU1MTdcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEgyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyek0wIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjB6bTExMiAwSDY5LjhjLTMuMiAwLTUuOCAyLjYtNS44IDUuOEM2NCAxOTggOTAgMjI0IDEyMi4yIDIyNEgxNDRoMzIgMjEuOGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44SDIwOGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3ptNDggMTE3LjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN0g2OS44Yy0zLjIgMC01LjggMi42LTUuOCA1LjhDNjQgMjk0IDkwIDMyMCAxMjIuMiAzMjBIMTQ0aDMyIDIxLjhjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yYzAtMy4yLTIuNi01LjgtNS44LTUuOEgyMDhjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43ek0xMTIgMzUySDY5LjhjLTMuMiAwLTUuOCAyLjYtNS44IDUuOEM2NCAzOTAgOTAgNDE2IDEyMi4yIDQxNkgxNDR2MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY0MTZoMjEuOGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44SDIwOGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3pcIl1cbn07XG52YXIgZmFFbnZlbG9wZXNCdWxrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3Blcy1idWxrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJtYWlsLWJ1bGtcIl0sIFwiZjY3NFwiLCBcIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJWMjI0aDk2VjE5MmMwLTM1LjMgMjguNy02NCA2NC02NEg0ODBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMTI4ek0yNTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMmg5NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZINTc2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgyNTZ6bTI0MCA2NGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MTNMMTg3LjEgNDE1LjljMS40IDEgMy4xIDEuNiA0LjkgMS42czMuNS0uNiA0LjktMS42TDM1MiAzMDFWMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0em0yODggODQuOEwyMTYgNDQxLjZjLTYuOSA1LjEtMTUuMyA3LjktMjQgNy45cy0xNy0yLjgtMjQtNy45TDMyIDM0MC44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzQwLjh6XCJdXG59O1xudmFyIGZhTWFpbEJ1bGsgPSBmYUVudmVsb3Blc0J1bGs7XG52YXIgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZWJcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2lyY2xlSCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtaCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk0MDUsIFwiaG9zcGl0YWwtc3ltYm9sXCJdLCBcImY0N2VcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM2OCAxNTJWMjU2IDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMTkybDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4MEgzMjBWMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdXG59O1xudmFyIGZhSG9zcGl0YWxTeW1ib2wgPSBmYUNpcmNsZUg7XG52YXIgZmFQYWdlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWdlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sIFwiZjgxNVwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6bTY0IDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04MCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIODB6bTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIxNnpcIl1cbn07XG52YXIgZmFBZGRyZXNzQm9vayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhZGRyZXNzLWJvb2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgXCJjb250YWN0LWJvb2tcIl0sIFwiZjJiOVwiLCBcIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIwOCAyODhoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tMzItOTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek01MTIgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY4MHpNNDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzM2elwiXVxufTtcbnZhciBmYUNvbnRhY3RCb29rID0gZmFBZGRyZXNzQm9vaztcbnZhciBmYVN0cmlrZXRocm91Z2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjBjY1wiLCBcIk0xNjEuMyAxNDRjMy4yLTE3LjIgMTQtMzAuMSAzMy43LTM4LjZjMjEuMS05IDUxLjgtMTIuMyA4OC42LTYuNWMxMS45IDEuOSA0OC44IDkuMSA2MC4xIDEyYzE3LjEgNC41IDM0LjYtNS42IDM5LjItMjIuN3MtNS42LTM0LjYtMjIuNy0zOS4yYy0xNC4zLTMuOC01My42LTExLjQtNjYuNi0xMy40Yy00NC43LTctODguMy00LjItMTIzLjcgMTAuOWMtMzYuNSAxNS42LTY0LjQgNDQuOC03MS44IDg3LjNjLS4xIC42LS4yIDEuMS0uMiAxLjdjLTIuOCAyMy45IC41IDQ1LjYgMTAuMSA2NC42YzQuNSA5IDEwLjIgMTYuOSAxNi43IDIzLjlIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI3MC4xYy0uMSAwLS4zLS4xLS40LS4xbC0xLjEtLjNjLTM2LTEwLjgtNjUuMi0xOS42LTg1LjItMzMuMWMtOS4zLTYuMy0xNS0xMi42LTE4LjItMTkuMWMtMy4xLTYuMS01LjItMTQuNi0zLjgtMjcuNHpNMzQ4LjkgMzM3LjJjMi43IDYuNSA0LjQgMTUuOCAxLjkgMzAuMWMtMyAxNy42LTEzLjggMzAuOC0zMy45IDM5LjRjLTIxLjEgOS01MS43IDEyLjMtODguNSA2LjVjLTE4LTIuOS00OS4xLTEzLjUtNzQuNC0yMi4xYy01LjYtMS45LTExLTMuNy0xNS45LTUuNGMtMTYuOC01LjYtMzQuOSAzLjUtNDAuNSAyMC4zczMuNSAzNC45IDIwLjMgNDAuNWMzLjYgMS4yIDcuOSAyLjcgMTIuNyA0LjNsMCAwIDAgMGMyNC45IDguNSA2My42IDIxLjcgODcuNiAyNS42bDAgMCAuMiAwYzQ0LjcgNyA4OC4zIDQuMiAxMjMuNy0xMC45YzM2LjUtMTUuNiA2NC40LTQ0LjggNzEuOC04Ny4zYzMuNi0yMSAyLjctNDAuNC0zLjEtNTguMUgzMzUuMWM3IDUuNiAxMS40IDExLjIgMTMuOSAxNy4yelwiXVxufTtcbnZhciBmYUsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaycsXG4gIGljb246IFszMjAsIDUxMiwgWzEwN10sIFwiNGJcIiwgXCJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43bC0xNTUuMiAxNjBMNjQgMjQ5VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjMyOCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNDFsNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3pcIl1cbn07XG52YXIgZmFMYW5kbWFya0ZsYWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmstZmxhZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUxY1wiLCBcIk0yNzIgMGg4MGM4LjggMCAxNiA3LjIgMTYgMTZWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MnYzMkg0NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjQwVjE2YzAtOC44IDcuMi0xNiAxNi0xNmgxNnpNNjQgMjI0aDY0VjQxNmg0MFYyMjRoNjRWNDE2aDQ4VjIyNGg2NFY0MTZoNDBWMjI0aDY0VjQyMC4zYy42IC4zIDEuMiAuNyAxLjggMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEySDMyYy0xNC4xIDAtMjYuNS05LjItMzAuNi0yMi43czEuMS0yOC4xIDEyLjktMzUuOWw0OC0zMmMuNi0uNCAxLjItLjcgMS44LTEuMVYyMjR6XCJdXG59O1xudmFyIGZhUGVuY2lsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlbmNpbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCBcInBlbmNpbC1hbHRcIl0sIFwiZjMwM1wiLCBcIk00MTAuMyAyMzFsMTEuMy0xMS4zLTMzLjktMzMuOS02Mi4xLTYyLjFMMjkxLjcgODkuOGwtMTEuMyAxMS4zLTIyLjYgMjIuNkw1OC42IDMyMi45Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODAuN2MtMi41IDguNC0uMiAxNy41IDYuMSAyMy43czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMMzg3LjcgMjUzLjcgNDEwLjMgMjMxek0xNjAgMzk5LjRsLTkuMSAyMi43Yy00IDMuMS04LjUgNS40LTEzLjMgNi45TDU5LjQgNDUybDIzLTc4LjFjMS40LTQuOSAzLjgtOS40IDYuOS0xMy4zbDIyLjctOS4xdjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMnpNMzYyLjcgMTguN0wzNDguMyAzMy4yIDMyNS43IDU1LjggMzE0LjMgNjcuMWwzMy45IDMzLjkgNjIuMSA2Mi4xIDMzLjkgMzMuOSAxMS4zLTExLjMgMjIuNi0yMi42IDE0LjUtMTQuNWMyNS0yNSAyNS02NS41IDAtOTAuNUw0NTMuMyAxOC43Yy0yNS0yNS02NS41LTI1LTkwLjUgMHptLTQ3LjQgMTY4bC0xNDQgMTQ0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDE0NC0xNDRjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbnZhciBmYVBlbmNpbEFsdCA9IGZhUGVuY2lsO1xudmFyIGZhQmFja3dhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFja3dhcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5MTk0XSwgXCJmMDRhXCIsIFwiTTQ1OS41IDQ0MC42YzkuNSA3LjkgMjIuOCA5LjcgMzQuMSA0LjRzMTguNC0xNi42IDE4LjQtMjlWOTZjMC0xMi40LTcuMi0yMy43LTE4LjQtMjlzLTI0LjUtMy42LTM0LjEgNC40TDI4OCAyMTQuM1YyNTZ2NDEuN0w0NTkuNSA0NDAuNnpNMjU2IDM1MlYyNTYgMTI4IDk2YzAtMTIuNC03LjItMjMuNy0xOC40LTI5cy0yNC41LTMuNi0zNC4xIDQuNGwtMTkyIDE2MEM0LjIgMjM3LjUgMCAyNDYuNSAwIDI1NnM0LjIgMTguNSAxMS41IDI0LjZsMTkyIDE2MGM5LjUgNy45IDIyLjggOS43IDM0LjEgNC40czE4LjQtMTYuNiAxOC40LTI5VjM1MnpcIl1cbn07XG52YXIgZmFDYXJldFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LXJpZ2h0JyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbXSwgXCJmMGRhXCIsIFwiTTI0Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNmwwIDI1NmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDEyOC0xMjh6XCJdXG59O1xudmFyIGZhQ29tbWVudHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgXCJmMDg2XCIsIFwiTTIwOCAzNTJjMTE0LjkgMCAyMDgtNzguOCAyMDgtMTc2UzMyMi45IDAgMjA4IDBTMCA3OC44IDAgMTc2YzAgMzguNiAxNC43IDc0LjMgMzkuNiAxMDMuNGMtMy41IDkuNC04LjcgMTcuNy0xNC4yIDI0LjdjLTQuOCA2LjItOS43IDExLTEzLjMgMTQuM2MtMS44IDEuNi0zLjMgMi45LTQuMyAzLjdjLS41IC40LS45IC43LTEuMSAuOGwtLjIgLjIgMCAwIDAgMEMxIDMyNy4yLTEuNCAzMzQuNCAuOCAzNDAuOVM5LjEgMzUyIDE2IDM1MmMyMS44IDAgNDMuOC01LjYgNjIuMS0xMi41YzkuMi0zLjUgMTcuOC03LjQgMjUuMy0xMS40QzEzNC4xIDM0My4zIDE2OS44IDM1MiAyMDggMzUyek00NDggMTc2YzAgMTEyLjMtOTkuMSAxOTYuOS0yMTYuNSAyMDdDMjU1LjggNDU3LjQgMzM2LjQgNTEyIDQzMiA1MTJjMzguMiAwIDczLjktOC43IDEwNC43LTIzLjljNy41IDQgMTYgNy45IDI1LjIgMTEuNGMxOC4zIDYuOSA0MC4zIDEyLjUgNjIuMSAxMi41YzYuOSAwIDEzLjEtNC41IDE1LjItMTEuMWMyLjEtNi42LS4yLTEzLjgtNS44LTE3LjlsMCAwIDAgMC0uMi0uMmMtLjItLjItLjYtLjQtMS4xLS44Yy0xLS44LTIuNS0yLTQuMy0zLjdjLTMuNi0zLjMtOC41LTguMS0xMy4zLTE0LjNjLTUuNS03LTEwLjctMTUuNC0xNC4yLTI0LjdjMjQuOS0yOSAzOS42LTY0LjcgMzkuNi0xMDMuNGMwLTkyLjgtODQuOS0xNjguOS0xOTIuNi0xNzUuNWMuNCA1LjEgLjYgMTAuMyAuNiAxNS41elwiXVxufTtcbnZhciBmYVBhc3RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bhc3RlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJmaWxlLWNsaXBib2FyZFwiXSwgXCJmMGVhXCIsIFwiTTE2MCAwYy0yMy43IDAtNDQuNCAxMi45LTU1LjQgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MFY0MDBjMCAyNi41IDIxLjUgNDggNDggNDhIMTkyVjE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGg0OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgyMTUuNEMyMDQuNCAxMi45IDE4My43IDAgMTYwIDB6TTI3MiAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQ0OHYxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQzLjljMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtNjcuOS02Ny45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUgzMjAgMjcyek0xNjAgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUZpbGVDbGlwYm9hcmQgPSBmYVBhc3RlO1xudmFyIGZhQ29kZVB1bGxSZXF1ZXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUtcHVsbC1yZXF1ZXN0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMTNjXCIsIFwiTTMwNS44IDIuMUMzMTQuNCA1LjkgMzIwIDE0LjUgMzIwIDI0VjY0aDE2YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4VjM1OC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM1YxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzIwdjQwYzAgOS41LTUuNiAxOC4xLTE0LjIgMjEuOXMtMTguOCAyLjMtMjUuOC00LjFsLTgwLTcyYy01LjEtNC42LTcuOS0xMS03LjktMTcuOHMyLjktMTMuMyA3LjktMTcuOGw4MC03MmM3LTYuMyAxNy4yLTcuOSAyNS44LTQuMXpNMTA0IDgwQTI0IDI0IDAgMSAwIDU2IDgwYTI0IDI0IDAgMSAwIDQ4IDB6bTggNzMuM1YzNTguN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMTUzLjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwQzAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjN6TTEwNCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMzI4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG52YXIgZmFDbGlwYm9hcmRMaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1saXN0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDZkXCIsIFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjgyLjVDMjY5LjQgMjYuNyAyMzMuOCAwIDE5MiAwem0wIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNzIgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEwNC0xNkgzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek03MiAzNjhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptODggMGMwLTguOCA3LjItMTYgMTYtMTZIMzA0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYVRydWNrUmFtcEJveCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1yYW1wLWJveCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widHJ1Y2stbG9hZGluZ1wiXSwgXCJmNGRlXCIsIFwiTTY0MCAwVjQwMGMwIDYxLjktNTAuMSAxMTItMTEyIDExMmMtNjEgMC0xMTAuNS00OC43LTExMi0xMDkuM0w0OC40IDUwMi45Yy0xNy4xIDQuNi0zNC42LTUuNC0zOS4zLTIyLjVzNS40LTM0LjYgMjIuNS0zOS4zTDM1MiAzNTMuOFY2NGMwLTM1LjMgMjguNy02NCA2NC02NEg2NDB6TTU3NiA0MDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMjMuMSAyMDcuN2MtNC42LTE3LjEgNS42LTM0LjYgMjIuNi0zOS4ybDQ2LjQtMTIuNCAyMC43IDc3LjNjMi4zIDguNSAxMS4xIDEzLjYgMTkuNiAxMS4zbDMwLjktOC4zYzguNS0yLjMgMTMuNi0xMS4xIDExLjMtMTkuNmwtMjAuNy03Ny4zIDQ2LjQtMTIuNGMxNy4xLTQuNiAzNC42IDUuNiAzOS4yIDIyLjZsNDEuNCAxNTQuNWM0LjYgMTcuMS01LjYgMzQuNi0yMi42IDM5LjJMMTAzLjcgMzg0LjljLTE3LjEgNC42LTM0LjYtNS42LTM5LjItMjIuNkwyMy4xIDIwNy43elwiXVxufTtcbnZhciBmYVRydWNrTG9hZGluZyA9IGZhVHJ1Y2tSYW1wQm94O1xudmFyIGZhVXNlckNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0ZmNcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNjI1IDE3N0w0OTcgMzA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0N0w1OTEgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG52YXIgZmFWaWFsVmlydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlhbC12aXJ1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU5N1wiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZWMzg0YzAgNTMgNDMgOTYgOTYgOTZjMjguNiAwIDU0LjItMTIuNSA3MS44LTMyLjNjLjEtMTQuMiA1LjYtMjguMyAxNi40LTM5LjFjLjItLjIgLjEtLjYtLjItLjZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2czI1LjEtNTYgNTYtNTZjLjMgMCAuNC0uNCAuMi0uNmMtMjEuOS0yMS45LTIxLjktNTcuMyAwLTc5LjJjMi40LTIuNCA1LTQuNiA3LjgtNi41Vjk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MCA5NiAzMnpNOTYgMTkyVjk2aDY0djk2SDk2ek0yMTYgMzc2YzI4LjggMCA0My4yIDM0LjggMjIuOSA1NS4yYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMjAuNC0yMC40IDU1LjItNS45IDU1LjIgMjIuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjguOCAzNC44LTQzLjIgNTUuMi0yMi45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUM0NDQuOCA0MTAuOCA0NTkuMiAzNzYgNDg4IDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjguOCAwLTQzLjItMzQuOC0yMi45LTU1LjJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEM0MTAuOCAyNTkuMiAzNzYgMjQ0LjggMzc2IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDI4LjgtMzQuOCA0My4yLTU1LjIgMjIuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWMyMC40IDIwLjQgNS45IDU1LjItMjIuOSA1NS4yYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0xMDQtODhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em00MCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYVNoZWV0UGxhc3RpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGVldC1wbGFzdGljJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTcxXCIsIFwiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDIyNFYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzg0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMCAwIDI4LjcgMCA2NFY0NDh6TTE3MS4zIDc1LjNsLTk2IDk2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDk2LTk2YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnptOTYgMzJsLTE2MCAxNjBjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMTYwLTE2MGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTM4NCAzODRIMjU2VjUxMkwzODQgMzg0elwiXVxufTtcbnZhciBmYUJsb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmxvZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc4MVwiLCBcIk0xOTIgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyQzUxMiAxMjguOSAzODMuMSAwIDIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtMTA2LTg2LTE5Mi0xOTItMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNOTYgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4UzAgMTE3LjUgMCAxNDRWMzY4YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRIMTI4djk2aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjE0NHpcIl1cbn07XG52YXIgZmFVc2VyTmluamEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1uaW5qYScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sIFwiZjUwNFwiLCBcIk0yMjQgMjU2Yy01Ny4yIDAtMTA1LjYtMzcuNS0xMjItODkuM2MtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjhjLTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xYy04LjEgLjgtMTQuNi01LjctMTMuOC0xMy44YzEuNC0xNC43IDYuMy0zNy44IDIyLjEtNTMuNmM1LjgtNS44IDEyLjYtMTAuMSAxOS42LTEzLjRjLTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNEMzNy40IDgyLjcgMzIuNiA1OS43IDMxLjEgNDQuOWMtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOGMxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjFjNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjFDMTMxLjQgMjguMiAxNzQuNCAwIDIyNCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4ek0wIDQ4Mi4zQzAgMzk5LjUgNTYuNCAzMzAgMTMyLjggMzA5LjljNi0xLjYgMTIuMiAuOSAxNS45IDUuOGw2Mi41IDgzLjNjNi40IDguNSAxOS4yIDguNSAyNS42IDBsNjIuNS04My4zYzMuNy00LjkgOS45LTcuNCAxNS45LTUuOEMzOTEuNiAzMzAgNDQ4IDM5OS41IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNMTYwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNjB6XCJdXG59O1xudmFyIGZhUGVyc29uQXJyb3dVcEZyb21MaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1hcnJvdy11cC1mcm9tLWxpbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MzlcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTU5OC42IDEyMS40bC04MC04MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ2NCAxNDEuMyA0NjQgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQxLjNsMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhU2Nyb2xsVG9yYWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nyb2xsLXRvcmFoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ0b3JhaFwiXSwgXCJmNmEwXCIsIFwiTTk2IDQ4MFYzMkM5NiAxNC4zIDc0LjUgMCA0OCAwUzAgMTQuMyAwIDMyVjQ4MGMwIDE3LjcgMjEuNSAzMiA0OCAzMnM0OC0xNC4zIDQ4LTMyek01MTIgMzJIMTI4VjQ4MEg1MTJWMzJ6TTU5MiAwYy0yNi41IDAtNDggMTQuMy00OCAzMlY0ODBjMCAxNy43IDIxLjUgMzIgNDggMzJzNDgtMTQuMyA0OC0zMlYzMmMwLTE3LjctMjEuNS0zMi00OC0zMnpNMTk2IDMxMy43YzAtMy4yIC45LTYuNCAyLjUtOS4yTDIyNi43IDI1NmwtMjguMy00OC41Yy0xLjYtMi44LTIuNS02LTIuNS05LjJjMC0xMC4xIDguMi0xOC4zIDE4LjMtMTguM0gyNzFsMzEuNC01My45YzMuNi02LjMgMTAuMy0xMC4xIDE3LjYtMTAuMXMxMy45IDMuOCAxNy42IDEwLjFMMzY5IDE4MGg1Ni43YzEwLjEgMCAxOC4zIDguMiAxOC4zIDE4LjNjMCAzLjItLjkgNi40LTIuNSA5LjJMNDEzLjMgMjU2bDI4LjMgNDguNWMxLjYgMi44IDIuNSA2IDIuNSA5LjJjMCAxMC4xLTguMiAxOC4zLTE4LjMgMTguM0gzNjlsLTMxLjQgNTMuOWMtMy42IDYuMy0xMC4zIDEwLjEtMTcuNiAxMC4xcy0xMy45LTMuOC0xNy42LTEwLjFMMjcxIDMzMkgyMTQuM2MtMTAuMSAwLTE4LjMtOC4yLTE4LjMtMTguM3ptMTI0IDU0LjdMMzQxLjIgMzMySDI5OC44TDMyMCAzNjguNHpNMjU0LjUgMjU2bDMwLjMgNTJoNzAuNGwzMC4zLTUyLTMwLjMtNTJIMjg0LjhsLTMwLjMgNTJ6bTE0NC45IDIzLjhMMzgzIDMwOGgzMi44bC0xNi40LTI4LjJ6TTQxNS44IDIwNEgzODNsMTYuNCAyOC4yTDQxNS44IDIwNHpNMzIwIDE0My42TDI5OC44IDE4MGg0Mi40TDMyMCAxNDMuNnpNMjI0LjIgMjA0bDE2LjQgMjguMkwyNTcgMjA0SDIyNC4yek0yNTcgMzA4bC0xNi40LTI4LjJMMjI0LjIgMzA4SDI1N3pcIl1cbn07XG52YXIgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7XG52YXIgZmFCcm9vbUJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJvb20tYmFsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wicXVpZGRpdGNoXCIsIFwicXVpZGRpdGNoLWJyb29tLWJhbGxcIl0sIFwiZjQ1OFwiLCBcIk01NjYuNiA5LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTIgMzQuNyAzNC43YzQuMiA0LjIgNi42IDEwIDYuNiAxNmMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNkgzNjQuM0wyNTYgMjExLjdWMTgyLjZjMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZjNiAwIDExLjggMi40IDE2IDYuNmwzNC43IDM0LjcgMTkyLTE5MmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHptLTM0NCAyMjUuNUwzNDEuMSAzNTMuNGMzLjcgNDIuNy0xMS43IDg1LjItNDIuMyAxMTUuOEMyNzEuNCA0OTYuNiAyMzQuMiA1MTIgMTk1LjUgNTEyTDIyLjEgNTEyQzkuOSA1MTIgMCA1MDIuMSAwIDQ4OS45YzAtNi4zIDIuNy0xMi4zIDcuMy0xNi41TDEzMy43IDM1OS43YzQuMi0zLjctLjQtMTAuNC01LjQtNy45TDc3LjIgMzc3LjRjLTYuMSAzLTEzLjItMS40LTEzLjItOC4yYzAtMzEuNSAxMi41LTYxLjcgMzQuOC04NGw4LThjMzAuNi0zMC42IDczLjEtNDUuOSAxMTUuOC00Mi4zek00NjQgMzUyYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVF1aWRkaXRjaCA9IGZhQnJvb21CYWxsO1xudmFyIGZhUXVpZGRpdGNoQnJvb21CYWxsID0gZmFCcm9vbUJhbGw7XG52YXIgZmFUb2dnbGVPZmYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9nZ2xlLW9mZicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIwNFwiLCBcIk0zODQgMTI4YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4SDE5MmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOEgzODR6TTU3NiAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJIMTkyQzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4SDM4NGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDM1MmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnpcIl1cbn07XG52YXIgZmFCb3hBcmNoaXZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JveC1hcmNoaXZlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcmNoaXZlXCJdLCBcImYxODdcIiwgXCJNMzIgMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptMCAxMjhINDgwVjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwem0xMjggODBjMCA4LjggNy4yIDE2IDE2IDE2SDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG52YXIgZmFBcmNoaXZlID0gZmFCb3hBcmNoaXZlO1xudmFyIGZhUGVyc29uRHJvd25pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRyb3duaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQ1XCIsIFwiTTE5MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY5Ni4yYzAgNTQuMSAyMy41IDEwNCA2Mi4yIDEzOC4zbC0yMSAxNDYuN2M3LjggMi4xIDE1LjUgMy4zIDIyLjggMy4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzEyLjQgOC41IDI2LjEgMTQuOCAzOS43IDE4bDE3LjctOTcuNmMxMC43LTEuMiAyMS4zLTMuMSAzMS45LTUuNWwxMDUtMjMuOWMxNy4yLTMuOSAyOC0yMS4xIDI0LjEtMzguM3MtMjEuMS0yOC0zOC4zLTI0LjFMNDAwIDIxNi42Yy00MSA5LjMtODMuNyA3LjUtMTIzLjctNS4yYy01MC4yLTE2LTg0LjMtNjIuNi04NC4zLTExNS4zVjY0ek0zMjAgMTkyYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMDYuNSAzODkuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNDcgNDA1LjQgMjE5LjUgNDE2IDE5MiA0MTZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA0NjkuNyAxNTkgNDgwIDE5MiA0ODBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQwNS4yIDQxMC45IDQxNiAzODQgNDE2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duOTEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi05LTEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtbnVtZXJpYy1kZXNjXCIsIFwic29ydC1udW1lcmljLWRvd24tYWx0XCJdLCBcImY4ODZcIiwgXCJNMTYwIDQ4MGM5IDAgMTcuNS0zLjggMjMuNi0xMC40bDg4LTk2YzExLjktMTMgMTEuMS0zMy4zLTItNDUuMnMtMzMuMy0xMS4xLTQ1LjIgMkwxOTIgMzY1LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzY1LjdMOTUuNiAzMzAuNGMtMTEuOS0xMy0zMi4yLTEzLjktNDUuMi0ycy0xMy45IDMyLjItMiA0NS4ybDg4IDk2QzE0Mi41IDQ3Ni4yIDE1MSA0ODAgMTYwIDQ4MHpNNDUwLjcgMjk0Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMlY0MTZIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDQ4IDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2NFYzMjBjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTQxOC4zIDkxYTMyIDMyIDAgMSAxIDI3LjQgNTcuOUEzMiAzMiAwIDEgMSA0MTguMyA5MXpNNDA1LjEgMjAzLjhsLTYuOCA5LjJjLTEwLjUgMTQuMi03LjUgMzQuMiA2LjcgNDQuOHMzNC4yIDcuNSA0NC44LTYuN2w0OC44LTY1LjhjMTQtMTguOSAyMS41LTQxLjcgMjEuNS02NS4yYzAtNDguNi0zOS40LTg4LTg4LTg4cy04OCAzOS40LTg4IDg4YzAgMzkuMiAyNS42IDcyLjQgNjEuMSA4My44elwiXVxufTtcbnZhciBmYVNvcnROdW1lcmljRGVzYyA9IGZhQXJyb3dEb3duOTE7XG52YXIgZmFTb3J0TnVtZXJpY0Rvd25BbHQgPSBmYUFycm93RG93bjkxO1xudmFyIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsIFwiZ3Jpbi10b25ndWUtc3F1aW50XCJdLCBcImY1OGFcIiwgXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OFY0MDAuN2MtMjQtMTcuNS00My4xLTQxLjQtNTQuOC02OS4yYy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOWMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdjLTExLjggMjgtMzEuMSA1Mi01NS40IDY5LjZWNDQ4YzAgMTguNi01LjMgMzYtMTQuNSA1MC44QzQzOC45IDQ2NC43IDUxMiAzNjguOSA1MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6TTExNiAxNDEuMWMwLTkgOS42LTE0LjcgMTcuNS0xMC41bDg5LjkgNDcuOWMxMC43IDUuNyAxMC43IDIxLjEgMCAyNi44bC04OS45IDQ3LjljLTcuOSA0LjItMTcuNS0xLjUtMTcuNS0xMC41YzAtMi44IDEtNS41IDIuOC03LjZsMzYtNDMuMi0zNi00My4yYy0xLjgtMi4xLTIuOC00LjgtMi44LTcuNnptMjYyLjUtMTAuNWM3LjktNC4yIDE3LjUgMS41IDE3LjUgMTAuNWMwIDIuOC0xIDUuNS0yLjggNy42bC0zNiA0My4yIDM2IDQzLjJjMS44IDIuMSAyLjggNC44IDIuOCA3LjZjMCA5LTkuNiAxNC43LTE3LjUgMTAuNWwtODkuOS00Ny45Yy0xMC43LTUuNy0xMC43LTIxLjEgMC0yNi44bDg5LjktNDcuOXpNMzIwIDQ0OFY0MDIuNmMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmgtMmMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOWMtMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMGMtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWgtMmMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhR3JpblRvbmd1ZVNxdWludCA9IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ7XG52YXIgZmFTcHJheUNhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcHJheS1jYW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YmRcIiwgXCJNMTI4IDBoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMjU2YzAtNTMgNDMtOTYgOTYtOTZIMjI0YzUzIDAgOTYgNDMgOTYgOTZWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYyNTZ6bTI0MCA4MEE4MCA4MCAwIDEgMCA4MCAzMzZhODAgODAgMCAxIDAgMTYwIDB6TTI1NiA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zODQgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTQ0OCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzg0IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhVHJ1Y2tNb25zdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLW1vbnN0ZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2M2JcIiwgXCJNMjg4IDY0djY0SDQxNkwzNjggNjRIMjg4ek00MTkuMiAyNS42TDQ5NiAxMjhoODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTI5LjItMzguOS03NS43LTY0LTEyOC02NHMtOTguOCAyNS4xLTEyOCA2NEgyODhjLTI5LjItMzguOS03NS43LTY0LTEyOC02NHMtOTguOCAyNS4xLTEyOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIMjI0VjQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZ6TTE1MiAyNTZoMTZjMTIuMSAwIDIyLjEgOC45IDIzLjggMjAuNmM3LjYgMi4yIDE0LjkgNS4zIDIxLjcgOWM5LjQtNyAyMi44LTYuMyAzMS4zIDIuM2wxMS4zIDExLjNjOC42IDguNiA5LjMgMjEuOSAyLjMgMzEuM2MzLjcgNi44IDYuOCAxNC4xIDkgMjEuN2MxMS42IDEuNyAyMC42IDExLjcgMjAuNiAyMy44djE2YzAgMTIuMS04LjkgMjIuMS0yMC42IDIzLjhjLTIuMiA3LjYtNS4zIDE0LjktOSAyMS43YzcgOS40IDYuMyAyMi44LTIuMyAzMS4zbC0xMS4zIDExLjNjLTguNiA4LjYtMjEuOSA5LjMtMzEuMyAyLjJjLTYuOCAzLjctMTQuMSA2LjgtMjEuNyA5QzE5MC4xIDUwMy4xIDE4MC4xIDUxMiAxNjggNTEySDE1MmMtMTIuMSAwLTIyLjEtOC45LTIzLjgtMjAuNmMtNy42LTIuMi0xNC45LTUuMy0yMS43LTljLTkuNCA3LjEtMjIuOCA2LjMtMzEuMy0yLjJMNjMuOCA0NjguOWMtOC42LTguNi05LjMtMjEuOS0yLjMtMzEuM2MtMy43LTYuOS02LjgtMTQuMS05LTIxLjhDNDAuOSA0MTQuMSAzMiA0MDQuMSAzMiAzOTJWMzc2YzAtMTIuMSA4LjktMjIuMSAyMC42LTIzLjhjMi4yLTcuNiA1LjMtMTQuOSA5LTIxLjhjLTctOS40LTYuMy0yMi44IDIuMy0zMS4zbDExLjMtMTEuM2M4LjYtOC42IDIxLjktOS4zIDMxLjMtMi4zYzYuOC0zLjcgMTQuMS02LjggMjEuNy05YzEuNy0xMS42IDExLjctMjAuNiAyMy44LTIwLjZ6bTggMTc2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNDQ4LjIgMjc2LjZjMS43LTExLjYgMTEuNy0yMC42IDIzLjgtMjAuNmgxNmMxMi4xIDAgMjIuMSA4LjkgMjMuOCAyMC42YzcuNiAyLjIgMTQuOSA1LjMgMjEuOCA5YzkuNC03IDIyLjgtNi4zIDMxLjMgMi4zbDExLjMgMTEuM2M4LjYgOC42IDkuMyAyMS45IDIuMiAzMS4zYzMuNyA2LjggNi44IDE0LjEgOSAyMS43YzExLjYgMS43IDIwLjYgMTEuNyAyMC42IDIzLjh2MTZjMCAxMi4xLTguOSAyMi4xLTIwLjYgMjMuOGMtMi4yIDcuNi01LjMgMTQuOS05IDIxLjdjNyA5LjQgNi4zIDIyLjgtMi4yIDMxLjNsLTExLjMgMTEuM2MtOC42IDguNi0yMS45IDkuMy0zMS4zIDIuMmMtNi45IDMuNy0xNC4xIDYuOC0yMS44IDlDNTEwLjEgNTAzLjEgNTAwLjEgNTEyIDQ4OCA1MTJINDcyYy0xMi4xIDAtMjIuMS04LjktMjMuOC0yMC42Yy03LjYtMi4yLTE0LjktNS4zLTIxLjctOWMtOS40IDcuMS0yMi44IDYuMy0zMS4zLTIuMmwtMTEuMy0xMS4zYy04LjYtOC42LTkuMy0yMS45LTIuMi0zMS4zYy0zLjctNi45LTYuOC0xNC4xLTktMjEuOEMzNjAuOSA0MTQuMSAzNTIgNDA0LjEgMzUyIDM5MlYzNzZjMC0xMi4xIDguOS0yMi4xIDIwLjYtMjMuOGMyLjItNy42IDUuMy0xNC45IDktMjEuOGMtNy05LjQtNi4zLTIyLjggMi4yLTMxLjNsMTEuMy0xMS4zYzguNi04LjYgMjEuOS05LjMgMzEuMy0yLjNjNi44LTMuNyAxNC4xLTYuOCAyMS43LTl6TTUyOCAzODRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG52YXIgZmFXID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3cnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMTldLCBcIjU3XCIsIFwiTTIwLjggMzRjMTYuNS02LjIgMzUgMi4yIDQxLjIgMTguN2wxMTAuMiAyOTRMMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzbDg1LjEgMjkxLjdMNTE0IDUyLjhjNi4yLTE2LjUgMjQuNi0yNC45IDQxLjItMTguN3MyNC45IDI0LjcgMTguNyA0MS4ybC0xNDQgMzg0Yy00LjggMTIuOS0xNy40IDIxLjMtMzEuMiAyMC43cy0yNS43LTkuOC0yOS41LTIzTDI4OCAxNzguMyAyMDYuNyA0NTdjLTMuOSAxMy4yLTE1LjggMjIuNS0yOS41IDIzcy0yNi4zLTcuOC0zMS4yLTIwLjdMMiA3NS4yQy00LjIgNTguNyA0LjIgNDAuMiAyMC44IDM0elwiXVxufTtcbnZhciBmYUVhcnRoQWZyaWNhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VhcnRoLWFmcmljYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NywgXCJnbG9iZS1hZnJpY2FcIl0sIFwiZjU3Y1wiLCBcIk0xNzcuOCA2My4ybDEwIDE3LjRjMi44IDQuOCA0LjIgMTAuMyA0LjIgMTUuOXY0MS40YzAgMy45IDEuNiA3LjcgNC4zIDEwLjRjNi4yIDYuMiAxNi41IDUuNyAyMi0xLjJsMTMuNi0xN2M0LjctNS45IDEyLjktNy43IDE5LjYtNC4zbDE1LjIgNy42YzMuNCAxLjcgNy4yIDIuNiAxMSAyLjZjNi41IDAgMTIuOC0yLjYgMTcuNC03LjJsMy45LTMuOWMyLjktMi45IDcuMy0zLjYgMTEtMS44bDI5LjIgMTQuNmM3LjggMy45IDEyLjYgMTEuOCAxMi42IDIwLjVjMCAxMC41LTcuMSAxOS42LTE3LjMgMjIuMmwtMzUuNCA4LjhjLTcuNCAxLjgtMTUuMSAxLjUtMjIuNC0uOWwtMzItMTAuN2MtMy4zLTEuMS02LjctMS43LTEwLjItMS43Yy03IDAtMTMuOCAyLjMtMTkuNCA2LjVMMTc2IDIxMmMtMTAuMSA3LjYtMTYgMTkuNC0xNiAzMnYyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOGwyNS42LTM0LjFjOC4zLTExLjEgMTIuOC0yNC42IDEyLjgtMzguNFYzMTguNmMwLTMuOSAyLjYtNy4zIDYuNC04LjJsNS4zLTEuM2MxMS45LTMgMjAuMy0xMy43IDIwLjMtMjZjMC03LjEtMi44LTEzLjktNy44LTE4LjlsLTMzLjUtMzMuNWMtMy43LTMuNy0zLjctOS43IDAtMTMuNGM1LjctNS43IDE0LjEtNy43IDIxLjgtNS4xbDE0LjEgNC43YzEyLjMgNC4xIDI1LjctMS41IDMxLjUtMTNjMy41LTcgMTEuMi0xMC44IDE4LjktOS4ybDI3LjQgNS41QzQzMiAxMTIuNCAzNTEuNSA0OCAyNTYgNDhjLTI3LjcgMC01NCA1LjQtNzguMiAxNS4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhR2xvYmVBZnJpY2EgPSBmYUVhcnRoQWZyaWNhO1xudmFyIGZhUmFpbmJvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWluYm93JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3NzUyXSwgXCJmNzViXCIsIFwiTTMyMCA5NkMxNzguNiA5NiA2NCAyMTAuNiA2NCAzNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyQzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyczMyMCAxNDMuMyAzMjAgMzIwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xNjAgMzUydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTEyMy43IDEwMC4zLTIyNCAyMjQtMjI0czIyNCAxMDAuMyAyMjQgMjI0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MHMtMTYwIDcxLjYtMTYwIDE2MHpcIl1cbn07XG52YXIgZmFDaXJjbGVOb3RjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbm90Y2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxY2VcIiwgXCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44QzEyMS44IDk1LjYgNjQgMTY5LjEgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xYy0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE0MCA3Ny4xIDQyLjEgMTgyLjkgMTAuNmMxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41elwiXVxufTtcbnZhciBmYVRhYmxldFNjcmVlbkJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZXQtc2NyZWVuLWJ1dHRvbicsXG4gIGljb246IFs0NDgsIDUxMiwgW1widGFibGV0LWFsdFwiXSwgXCJmM2ZhXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0yNTYgNDQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCA2NEg2NFYzODRIMzg0VjY0elwiXVxufTtcbnZhciBmYVRhYmxldEFsdCA9IGZhVGFibGV0U2NyZWVuQnV0dG9uO1xudmFyIGZhUGF3ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhdycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFiMFwiLCBcIk0yMjYuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNXMuMy04Ni4yIDMyLjYtOTYuOHM3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjNTLTIuNyAxNzkuMyAyMS44IDE2NS4zczU5LjcgLjkgNzguNSAzMy4zek02OS4yIDQwMS4yQzEyMS42IDI1OS45IDIxNC43IDIyNCAyNTYgMjI0czEzNC40IDM1LjkgMTg2LjggMTc3LjJjMy42IDkuNyA1LjIgMjAuMSA1LjIgMzAuNXYxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjdjLTExLjUgMC0yMi45LTEuNC0zNC00LjJsLTg4LTIyYy0xNS4zLTMuOC0zMS4zLTMuOC00Ni42IDBsLTg4IDIyYy0xMS4xIDIuOC0yMi41IDQuMi0zNCA0LjJDODQuOSA0ODAgNjQgNDU5LjEgNjQgNDMzLjN2LTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjNzMjkuMSA1MS43IDEwLjIgODQuMXMtNTQgNDcuMy03OC41IDMzLjN6TTMxMC4xIDE4OS43Yy0zMi4zLTEwLjYtNDYuOS01My45LTMyLjYtOTYuOHM1Mi4xLTY5LjEgODQuNC01OC41czQ2LjkgNTMuOSAzMi42IDk2LjhzLTUyLjEgNjkuMS04NC40IDU4LjV6XCJdXG59O1xudmFyIGZhQ2xvdWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5NzI5XSwgXCJmMGMyXCIsIFwiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0SDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTYxLjktNDQtMTEzLjYtMTAyLjQtMTI1LjRjNC4xLTEwLjcgNi40LTIyLjQgNi40LTM0LjZjMC01My00My05Ni05Ni05NmMtMTkuNyAwLTM4LjEgNi01My4zIDE2LjJDMzY3IDY0LjIgMzE1LjMgMzIgMjU2IDMyQzE2Ny42IDMyIDk2IDEwMy42IDk2IDE5MmMwIDIuNyAuMSA1LjQgLjIgOC4xQzQwLjIgMjE5LjggMCAyNzMuMiAwIDMzNnpcIl1cbn07XG52YXIgZmFUcm93ZWxCcmlja3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJvd2VsLWJyaWNrcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU4YVwiLCBcIk0yNDAuOCA0LjhDMjUwLjMgMTAuNiAyNTYgMjAuOSAyNTYgMzJ2NzJoODljMy42LTEzLjggMTYuMS0yNCAzMS0yNGg4OGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzNzZjLTE0LjkgMC0yNy40LTEwLjItMzEtMjRIMjU2djcyYzAgMTEuMS01LjcgMjEuNC0xNS4yIDI3LjJzLTIxLjIgNi40LTMxLjEgMS40bC0xOTItOTZDNi44IDE1MS4yIDAgMTQwLjEgMCAxMjhzNi44LTIzLjIgMTcuNy0yOC42bDE5Mi05NmM5LjktNSAyMS43LTQuNCAzMS4xIDEuNHpNMjg4IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZ6TTMyIDM4NGg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhRmFjZUZsdXNoZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1mbHVzaGVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTYzLCBcImZsdXNoZWRcIl0sIFwiZjU3OVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE3NiAzODRjMCA4LjggNy4yIDE2IDE2IDE2SDMyMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnptLTE2LTg4YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFGbHVzaGVkID0gZmFGYWNlRmx1c2hlZDtcbnZhciBmYUhvc3BpdGFsVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3NwaXRhbC11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmODBkXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjI1NkgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY2NEgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyNjUuOWMtNi4zLTEwLjItOS45LTIyLjItOS45LTM1LjFjMC00Ni45IDI1LjgtODcuOCA2NC0xMDkuMlYyNzEuOCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNMTUyIDY0aDE2YzguOCAwIDE2IDcuMiAxNiAxNnYyNGgyNGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDE4NHYyNGMwIDguOC03LjIgMTYtMTYgMTZIMTUyYy04LjggMC0xNi03LjItMTYtMTZWMTUySDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjEyMGMwLTguOCA3LjItMTYgMTYtMTZoMjRWODBjMC04LjggNy4yLTE2IDE2LTE2ek01MTIgMjcyYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMjg4IDQ3Ny4xYzAgMTkuMyAxNS42IDM0LjkgMzQuOSAzNC45SDU0MS4xYzE5LjMgMCAzNC45LTE1LjYgMzQuOS0zNC45YzAtNTEuNC00MS43LTkzLjEtOTMuMS05My4xSDM4MS4xYy01MS40IDAtOTMuMSA0MS43LTkzLjEgOTMuMXpcIl1cbn07XG52YXIgZmFUZW50QXJyb3dMZWZ0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudC1hcnJvdy1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTdmXCIsIFwiTTQ4OC4xIDYuMmMtOS45LTguOS0yNS04LjEtMzMuOSAxLjhzLTguMSAyNSAxLjggMzMuOUw0ODkuNSA3MiA4Ni41IDcybDMzLjUtMzAuMmM5LjktOC45IDEwLjctMjQgMS44LTMzLjlTOTcuOC0yLjcgODcuOSA2LjJsLTgwIDcyQzIuOSA4Mi43IDAgODkuMiAwIDk2czIuOSAxMy4zIDcuOSAxNy44bDgwIDcyYzkuOSA4LjkgMjUgOC4xIDMzLjktMS44czguMS0yNS0xLjgtMzMuOUw4Ni41IDEyMGw0MDIuOSAwLTMzLjUgMzAuMmMtOS45IDguOS0xMC43IDI0LTEuOCAzMy45czI0IDEwLjcgMzMuOSAxLjhsODAtNzJjNS4xLTQuNiA3LjktMTEgNy45LTE3LjhzLTIuOS0xMy4zLTcuOS0xNy44bC04MC03MnpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJIMjQwaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM2MS45YzAtNS41IDQuNC05LjkgOS45LTkuOWMzLjcgMCA3LjIgMi4xIDguOCA1LjVsNjguNCAxMzYuOGM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43SDQ2NGgxNmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xudmFyIGZhR2F2ZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2F2ZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxlZ2FsXCJdLCBcImYwZTNcIiwgXCJNMzE4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTIwIDEyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYgMTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNC00TDMyNS40IDI5My40bC00IDRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2IDE2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyMC0xMjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2LTE2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNCA0TDMzMC42IDc0LjZsNC00YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNi0xNnptLTE1MiAyODhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMTIgMTEyYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w0OCA0OGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMTItMTEyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xLjQtMS40TDI3MiAyODUuMyAyMjYuNyAyNDAgMTY4IDI5OC43bC0xLjQtMS40elwiXVxufTtcbnZhciBmYUxlZ2FsID0gZmFHYXZlbDtcbnZhciBmYUJpbm9jdWxhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmlub2N1bGFycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFlNVwiLCBcIk0xMjggMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZIOTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDk2VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzg4LjljMC0zNC42IDkuNC02OC42IDI3LjItOTguM0M0MC45IDI2Ny44IDQ5LjcgMjQyLjQgNTMgMjE2TDYwLjUgMTU2YzItMTYgMTUuNi0yOCAzMS44LTI4SDE5MnptMjI3LjggMGMxNi4xIDAgMjkuOCAxMiAzMS44IDI4TDQ1OSAyMTZjMy4zIDI2LjQgMTIuMSA1MS44IDI1LjggNzQuNmMxNy44IDI5LjcgMjcuMiA2My43IDI3LjIgOTguM1Y0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjhoOTkuOHpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2SDMyMFY2NHptLTMyIDY0VjI4OEgyMjRWMTI4aDY0elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMTMxXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFY5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xem0zNjIuNSA0MDdsLTQzLjEtMzMuOUMzNDYuMSAzODIgMzMzLjMgMzg0IDMyMCAzODRjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4di04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZ2NDBjMCA4OS4xIDY2LjIgMTYyLjcgMTUyIDE3NC40VjQ2NEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNzIgNzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzQ0VjQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMnpcIl1cbn07XG52YXIgZmFCb3hUaXNzdWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94LXRpc3N1ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTA1YlwiLCBcIk05Mi41IDBIMjA4YzQwIDAgNTIgMjQgNjQgNDhzMjQgNDggNjQgNDhoODUuMkM0MzYgOTYgNDQ4IDEwOCA0NDggMTIyLjhjMCAzLjQtLjcgNi44LTEuOSAxMEw0MDkuNiAyMjQgMzg0IDI4OEgxMjhsLTE2LTY0TDY0LjkgMzUuNGMtLjYtMi4zLS45LTQuNi0uOS02LjlDNjQgMTIuOCA3Ni44IDAgOTIuNSAwek03OSAyMjRsMTYgNjRIODBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNDhIMzg0aDQ4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDQxOC41bDI1LjYtNjRINDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjM4NEgwVjI3MmMwLTI2LjUgMjEuNS00OCA0OC00OEg3OXpNMCA0MTZINTEydjQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0MTZ6XCJdXG59O1xudmFyIGZhTW90b3JjeWNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3RvcmN5Y2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ5XSwgXCJmMjFjXCIsIFwiTTI4MCAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg1Ny43bDE2LjQgMzAuM0wyNTYgMTkybC00NS4zLTQ1LjNjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDk2Yzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMTEtMS4xIDIxLjctMy4yIDMyaDcwLjRjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC01Mi4yIDI1LTk4LjYgNjMuNy0xMjcuOGwxNS40IDI4LjZDNDAyLjQgMjc2LjMgMzg0IDMxMiAzODQgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhjLTEzLjUgMC0yNi41IDIuMS0zOC43IDZMNDE4LjIgMTI4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NTkuNmMtNy41IDAtMTQuNyAyLjYtMjAuNSA3LjRMMzkxLjcgNzguOWwtMTQtMjZjLTctMTIuOS0yMC41LTIxLTM1LjItMjFIMjgwek00NjIuNyAzMTEuMmwyOC4yIDUyLjJjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0yOC4yLTUyLjJjMi4zLS4zIDQuNy0uNCA3LjEtLjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0xNS41IDUuNS0yOS43IDE0LjctNDAuOHpNMTg3LjMgMzc2Yy05LjUgMjMuNS0zMi41IDQwLTU5LjMgNDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMjYuOSAwIDQ5LjkgMTYuNSA1OS4zIDQwaDY2LjRDMjQyLjUgMjY4LjggMTkwLjUgMjI0IDEyOCAyMjRDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNEgxODcuM3pNMTI4IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQmVsbENvbmNpZXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsLWNvbmNpZXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODcxOCwgXCJjb25jaWVyZ2UtYmVsbFwiXSwgXCJmNTYyXCIsIFwiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgxNnYzMy4zQzExOS42IDE1Ny4yIDMyIDI1Mi40IDMyIDM2OEg0ODBjMC0xMTUuNi04Ny42LTIxMC44LTIwMC0yMjIuN1YxMTJoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjU2IDIxNnpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDQ4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyNHpcIl1cbn07XG52YXIgZmFDb25jaWVyZ2VCZWxsID0gZmFCZWxsQ29uY2llcmdlO1xudmFyIGZhUGVuUnVsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLXJ1bGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJwZW5jaWwtcnVsZXJcIl0sIFwiZjVhZVwiLCBcIk00NjkuMyAxOS4zbDIzLjQgMjMuNGMyNSAyNSAyNSA2NS41IDAgOTAuNWwtNTYuNCA1Ni40TDMyMi4zIDc1LjdsNTYuNC01Ni40YzI1LTI1IDY1LjUtMjUgOTAuNSAwek00NC45IDM1My4yTDI5OS43IDk4LjMgNDEzLjcgMjEyLjMgMTU4LjggNDY3LjFjLTYuNyA2LjctMTUuMSAxMS42LTI0LjIgMTQuMmwtMTA0IDI5LjdjLTguNCAyLjQtMTcuNCAuMS0yMy42LTYuMXMtOC41LTE1LjItNi4xLTIzLjZsMjkuNy0xMDRjMi42LTkuMiA3LjUtMTcuNSAxNC4yLTI0LjJ6TTI0OS40IDEwMy40TDEwMy40IDI0OS40IDE2IDE2MS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUw5NC4xIDE2YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDE5LjggMTkuOGMtLjMgLjMtLjcgLjYtMSAuOWwtNjQgNjRjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw2NC02NGMuMy0uMyAuNi0uNyAuOS0xbDQ1LjEgNDUuMXpNNDA4LjYgMjYyLjZsNDUuMSA0NS4xYy0uMyAuMy0uNyAuNi0xIC45bC02NCA2NGMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDY0LTY0Yy4zLS4zIC42LS43IC45LTFMNDk2IDM1MC4xYzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDQxNy45IDQ5NmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBsLTg3LjQtODcuNEw0MDguNiAyNjIuNnpcIl1cbn07XG52YXIgZmFQZW5jaWxSdWxlciA9IGZhUGVuUnVsZXI7XG52YXIgZmFQZW9wbGVBcnJvd3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVvcGxlLWFycm93cycsXG4gIGljb246IFs2NDAsIDUxMiwgW1wicGVvcGxlLWFycm93cy1sZWZ0LXJpZ2h0XCJdLCBcImUwNjhcIiwgXCJNNjQgNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgNjQgNjR6TTI1LjkgMjMzLjRDMjkuMyAxOTEuOSA2NCAxNjAgMTA1LjYgMTYwaDQ0LjhjMjcgMCA1MSAxMy40IDY1LjUgMzQuMWMtMi43IDEuOS01LjIgNC03LjUgNi4zbC02NCA2NGMtMjEuOSAyMS45LTIxLjkgNTcuMyAwIDc5LjJMMTkyIDM5MS4yVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgxMTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0OC4zYy0yNi41LTkuNS00NC43LTM1LjgtNDIuMi02NS42bDQuMS00OS4zek00NDggNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgNDQ4IDY0ek00MzEuNiAyMDAuNGMtMi4zLTIuMy00LjktNC40LTcuNS02LjNjMTQuNS0yMC43IDM4LjYtMzQuMSA2NS41LTM0LjFoNDQuOGM0MS42IDAgNzYuMyAzMS45IDc5LjcgNzMuNGw0LjEgNDkuM2MyLjUgMjkuOC0xNS43IDU2LjEtNDIuMiA2NS42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM5MS4ybDQ3LjYtNDcuNmMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMmwtNjQtNjR6TTI3MiAyNDB2MzJoOTZWMjQwYzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNjQgNjRjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMzM2SDI3MnYzMmMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNjQtNjRjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4yelwiXVxufTtcbnZhciBmYVBlb3BsZUFycm93c0xlZnRSaWdodCA9IGZhUGVvcGxlQXJyb3dzO1xudmFyIGZhTWFyc0FuZFZlbnVzQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1hbmQtdmVudXMtYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjNcIiwgXCJNNTA0IDBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzkgMzktMjIuMiAyMi4yQzQ3NS45IDc4LjQgNDM5LjYgNjQgNDAwIDY0Yy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MGMwIDgwLjIgNTkgMTQ2LjYgMTM2IDE1OC4yVjQwOEgzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMjR2MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NTZoMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDI0VjM4Mi4yYzc3LTExLjYgMTM2LTc4IDEzNi0xNTguMmMwLTMxLjQtOS02MC43LTI0LjctODUuNEw1NjAgMTEzLjlsMzkgMzljNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4yVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDUwNHpNNDAwIDEyOGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNMTkwLjkgMTguMUMxODguNCAxMiAxODIuNiA4IDE3NiA4cy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNzYgMjg2LjFsNTguNiA1My45YzQuMSAzLjggOS45IDUuMSAxNS4yIDMuNkMyMjMuNiAzMTAuOCAyMDggMjY5LjIgMjA4IDIyNGMwLTYwLjggMjguMy0xMTUgNzIuNC0xNTAuMkwyMjAuMyA5Mi4xbC0yOS40LTc0elwiXVxufTtcbnZhciBmYVNxdWFyZUNhcmV0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWNhcmV0LXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYXJldC1zcXVhcmUtcmlnaHRcIl0sIFwiZjE1MlwiLCBcIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40cy0xNC40LTEyLjUtMTQuNC0yMmwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnpcIl1cbn07XG52YXIgZmFDYXJldFNxdWFyZVJpZ2h0ID0gZmFTcXVhcmVDYXJldFJpZ2h0O1xudmFyIGZhU2Npc3NvcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Npc3NvcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTg0LCA5OTg2LCA5OTg4LCBcImN1dFwiXSwgXCJmMGM0XCIsIFwiTTI1NiAxOTJsLTM5LjUtMzkuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNUMyMjQgNTAuMSAxNzMuOSAwIDExMiAwUzAgNTAuMSAwIDExMnM1MC4xIDExMiAxMTIgMTEyYzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41QzUwLjEgMjg4IDAgMzM4LjEgMCA0MDBzNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42Yy0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MnptMjIuNiAxNTAuNkwzOTYuOCA0NjAuOGMyOC4zIDI4LjMgNzQuMSAyOC4zIDEwMi40IDBjNy4xLTcuMSA3LjEtMTguNSAwLTI1LjZMMzQyLjYgMjc4LjZsLTY0IDY0ek02NCAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDggMjQwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFDdXQgPSBmYVNjaXNzb3JzO1xudmFyIGZhU3VuUGxhbnRXaWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1bi1wbGFudC13aWx0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTdhXCIsIFwiTTE2MCAwYy02LjMgMC0xMiAzLjctMTQuNiA5LjVMMTIwLjYgNjQuOSA2My45IDQzLjJjLTUuOS0yLjMtMTIuNi0uOC0xNyAzLjZzLTUuOSAxMS4xLTMuNiAxN2wyMS43IDU2LjdMOS41IDE0NS40QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44TDQzLjIgMjU2LjFjLTIuMyA1LjktLjggMTIuNiAzLjYgMTdzMTEuMSA1LjkgMTcgMy42bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuNyAyMS43YzUuOSAyLjMgMTIuNiAuOCAxNy0zLjZzNS45LTExLjEgMy42LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43YzIuMy01LjkgLjgtMTIuNi0zLjYtMTdzLTExLjEtNS45LTE3LTMuNkwxOTkuNCA2NC45IDE3NC42IDkuNUMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgOTZhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMxMiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjUzLjRjLTE0LjggNy43LTI0IDIzLjEtMjQgNDQuNmMwIDE2LjggMTYgNDQgMzcuNCA2Ny4yYzUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwQzYyNCAzMTggNjQwIDI5MC43IDY0MCAyNzRjMC0yMS41LTkuMi0zNy0yNC00NC42VjE3NmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHYyMi43Yy05LjgtNC4zLTIwLjYtNi43LTMyLTYuN2MtNDQuMiAwLTgwIDM1LjgtODAgODB2MjEuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42YzAgMTYuOCAxNiA0NCAzNy40IDY3LjJjNS44IDYuMiAxNS41IDYuMiAyMS4yIDBDNDAwIDM4MiA0MTYgMzU0LjcgNDE2IDMzOGMwLTIxLjUtOS4yLTM3LTI0LTQ0LjZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2OFY0NDhIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDUwNFYyODB2LThWMTc2elwiXVxufTtcbnZhciBmYVRvaWxldHNQb3J0YWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b2lsZXRzLXBvcnRhYmxlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTg0XCIsIFwiTTMyIDBIMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0SDBWMzJDMCAxNC4zIDE0LjMgMCAzMiAwek0wIDk2SDI0IDIzMmgyNHYyNFY0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR2LThINDh2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxMjAgOTZ6TTE5MiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZ6TTM1MiAwSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgzMjBWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyMCA5NmgyNEg1NTJoMjR2MjRWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0di04SDM2OHY4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjEyMCA5NnpNNTEyIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG52YXIgZmFIb2NrZXlQdWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvY2tleS1wdWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDUzXCIsIFwiTTI1NiAyNTZDMTE0LjYgMjU2IDAgMjEzIDAgMTYwczExNC42LTk2IDI1Ni05NnMyNTYgNDMgMjU2IDk2cy0xMTQuNiA5Ni0yNTYgOTZ6bTE5Mi4zIDEuOGMyNC43LTkuMyA0Ni45LTIxIDYzLjctMzUuNlYzNTJjMCA1My0xMTQuNiA5Ni0yNTYgOTZTMCA0MDUgMCAzNTJWMjIyLjNjMTYuOCAxNC42IDM5IDI2LjMgNjMuNyAzNS42QzExNC41IDI3Ni45IDE4Mi41IDI4OCAyNTYgMjg4czE0MS41LTExLjEgMTkyLjMtMzAuMnpcIl1cbn07XG52YXIgZmFUYWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjBjZVwiLCBcIk02NCAyNTZWMTYwSDIyNHY5Nkg2NHptMCA2NEgyMjR2OTZINjRWMzIwem0yMjQgOTZWMzIwSDQ0OHY5NkgyODh6TTQ0OCAyNTZIMjg4VjE2MEg0NDh2OTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjFcIiwgXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjQxIDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMUgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjM4LjFsLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyelwiXVxufTtcbnZhciBmYVRhY2hvZ3JhcGhEaWdpdGFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhY2hvZ3JhcGgtZGlnaXRhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiZGlnaXRhbC10YWNob2dyYXBoXCJdLCBcImY1NjZcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTMyIDY0SDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAzNjhjMC04LjggNy4yLTE2IDE2LTE2SDMzNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMjAgMGMwLTguOCA3LjItMTYgMTYtMTZINTYwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2ek04MCAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem00OCAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem04MC0xNmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTQ4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTgwLTE2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFEaWdpdGFsVGFjaG9ncmFwaCA9IGZhVGFjaG9ncmFwaERpZ2l0YWw7XG52YXIgZmFVc2Vyc1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDczXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDQwLjYgMzIwSDYxOC43YzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNDNjQwIDIzOS44IDU5Mi4yIDE5MiA1MzMuMyAxOTJINDkwLjdjLTE1LjkgMC0zMSAzLjUtNDQuNiA5LjdjMS4zIDcuMiAxLjkgMTQuNyAxLjkgMjIuM2MwIDMwLjItMTAuNSA1OC0yOCA3OS45bC0yNS4yLTE5LjdDNDA4LjEgMjY3LjcgNDE2IDI0Ni44IDQxNiAyMjRjMC01My00My05Ni05Ni05NmMtMzEuMSAwLTU4LjcgMTQuOC03Ni4zIDM3LjdsLTQwLjYtMzEuOGMxMy0xNC4yIDIwLjktMzMuMSAyMC45LTUzLjljMC00NC4yLTM1LjgtODAtODAtODBDMTE2LjMgMCA5MS45IDE0LjEgNzcuNSAzNS41TDM4LjggNS4xek0xMDYuNyAxOTJDNDcuOCAxOTIgMCAyMzkuOCAwIDI5OC43QzAgMzEwLjQgOS42IDMyMCAyMS4zIDMyMEgyMzQuN2MuMiAwIC40IDAgLjcgMGMtMjAuNi0xOC4yLTM1LjItNDIuOC00MC44LTcwLjhMMTIxLjggMTkySDEwNi43ek0yNjEuMyAzNTJDMTg3LjcgMzUyIDEyOCA0MTEuNyAxMjggNDg1LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdINDg1LjNjMTAuNSAwIDE5LjUtNiAyMy45LTE0LjhMMzI0LjkgMzUySDI2MS4zek01MTIgMTYwQTgwIDgwIDAgMSAwIDUxMiAwYTgwIDgwIDAgMSAwIDAgMTYwelwiXVxufTtcbnZhciBmYUNsb3ZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG92ZXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxMzlcIiwgXCJNMjE2LjYgNDkuOUMyMDUuMSAzOC41IDE4OS41IDMyIDE3My4zIDMyQzEzOS40IDMyIDExMiA1OS40IDExMiA5My4zdjQuOWMwIDEyIDMuMyAyMy43IDkuNCAzNGwxOC44IDMxLjNjMS4xIDEuOCAxLjIgMy4xIDEgNC4yYy0uMiAxLjItLjggMi41LTIgMy42cy0yLjQgMS44LTMuNiAyYy0xIC4yLTIuNCAuMS00LjItMWwtMzEuMy0xOC44Yy0xMC4zLTYuMi0yMi05LjQtMzQtOS40SDYxLjNDMjcuNCAxNDQgMCAxNzEuNCAwIDIwNS4zYzAgMTYuMiA2LjUgMzEuOCAxNy45IDQzLjNsMS4yIDEuMmMzLjQgMy40IDMuNCA5IDAgMTIuNGwtMS4yIDEuMkM2LjUgMjc0LjkgMCAyOTAuNSAwIDMwNi43QzAgMzQwLjYgMjcuNCAzNjggNjEuMyAzNjhoNC45YzEyIDAgMjMuNy0zLjMgMzQtOS40bDMxLjMtMTguOGMxLjgtMS4xIDMuMS0xLjIgNC4yLTFjMS4yIC4yIDIuNSAuOCAzLjYgMnMxLjggMi40IDIgMy42Yy4yIDEgLjEgMi40LTEgNC4ybC0xOC44IDMxLjNjLTYuMiAxMC4zLTkuNCAyMi05LjQgMzR2NC45YzAgMzMuOCAyNy40IDYxLjMgNjEuMyA2MS4zYzE2LjIgMCAzMS44LTYuNSA0My4zLTE3LjlsMS4yLTEuMmMzLjQtMy40IDktMy40IDEyLjQgMGwxLjIgMS4yYzExLjUgMTEuNSAyNy4xIDE3LjkgNDMuMyAxNy45YzMzLjggMCA2MS4zLTI3LjQgNjEuMy02MS4zdi00LjljMC0xMi0zLjMtMjMuNy05LjQtMzRsLTE4LjgtMzEuM2MtMS4xLTEuOC0xLjItMy4xLTEtNC4yYy4yLTEuMiAuOC0yLjUgMi0zLjZzMi40LTEuOCAzLjYtMmMxLS4yIDIuNC0uMSA0LjIgMWwzMS4zIDE4LjhjMTAuMyA2LjIgMjIgOS40IDM0IDkuNGg0LjljMzMuOCAwIDYxLjMtMjcuNCA2MS4zLTYxLjNjMC0xNi4yLTYuNS0zMS44LTE3LjktNDMuM2wtMS4yLTEuMmMtMy40LTMuNC0zLjQtOSAwLTEyLjRsMS4yLTEuMmMxMS41LTExLjUgMTcuOS0yNy4xIDE3LjktNDMuM2MwLTMzLjgtMjcuNC02MS4zLTYxLjMtNjEuM2gtNC45Yy0xMiAwLTIzLjcgMy4zLTM0IDkuNGwtMzEuMyAxOC44Yy0xLjggMS4xLTMuMSAxLjItNC4yIDFjLTEuMi0uMi0yLjUtLjgtMy42LTJzLTEuOC0yLjQtMi0zLjZjLS4yLTEtLjEtMi40IDEtNC4ybDE4LjgtMzEuM2M2LjItMTAuMyA5LjQtMjIgOS40LTM0VjkzLjNDMzM2IDU5LjQgMzA4LjYgMzIgMjc0LjcgMzJjLTE2LjIgMC0zMS44IDYuNS00My4zIDE3LjlsLTEuMiAxLjJjLTMuNCAzLjQtOSAzLjQtMTIuNCAwbC0xLjItMS4yelwiXVxufTtcbnZhciBmYVJlcGx5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlcGx5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE3MTQsIFwibWFpbC1yZXBseVwiXSwgXCJmM2U1XCIsIFwiTTIwNSAzNC44YzExLjUgNS4xIDE5IDE2LjYgMTkgMjkuMnY2NEgzMzZjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzZjMCAxMTMuMy04MS41IDE2My45LTEwMC4yIDE3NC4xYy0yLjUgMS40LTUuMyAxLjktOC4xIDEuOWMtMTAuOSAwLTE5LjctOC45LTE5LjctMTkuN2MwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNWM5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjdjMC01My00My05Ni05Ni05NkgyMjR2NjRjMCAxMi42LTcuNCAyNC4xLTE5IDI5LjJzLTI1IDMtMzQuNC01LjRsLTE2MC0xNDRDMy45IDIyNS43IDAgMjE3LjEgMCAyMDhzMy45LTE3LjcgMTAuNi0yMy44bDE2MC0xNDRjOS40LTguNSAyMi45LTEwLjYgMzQuNC01LjR6XCJdXG59O1xudmFyIGZhTWFpbFJlcGx5ID0gZmFSZXBseTtcbnZhciBmYVN0YXJBbmRDcmVzY2VudCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWFuZC1jcmVzY2VudCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NzBdLCBcImY2OTlcIiwgXCJNMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwYzMzIDAgNjQuNiA2LjMgOTMuNiAxNy43YzcuNCAyLjkgMTEuNSAxMC43IDkuOCAxOC40cy04LjggMTMtMTYuNyAxMi40Yy00LjgtLjMtOS43LS41LTE0LjYtLjVjLTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41YzcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6XCJdXG59O1xudmFyIGZhSG91c2VGaXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZpcmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGNcIiwgXCJNMjg4IDM1MC4xbDAgMS45SDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjQgMjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBIMTYwIDEyOC4xYy0xLjUgMC0zLS4xLTQuNS0uMmMtMS4yIC4xLTIuNCAuMi0zLjYgLjJIMTA0Yy0yMi4xIDAtNDAtMTcuOS00MC00MFYzNjBjMC0uOSAwLTEuOSAuMS0yLjhWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ0Ny4zIDEyOC4xYy0xMi4zLTEtMjUgMy0zNC44IDExLjdjLTM1LjQgMzEuNi02NS42IDY3LjctODcuMyAxMDIuOEMzMDQuMyAyNzYuNSAyODggMzE0LjkgMjg4IDM1MC4xek00ODAgNTEyYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MGMwLTc2LjcgNjIuNS0xNDQuNyAxMDcuMi0xNzkuNGM1LTMuOSAxMC45LTUuOCAxNi44LTUuOGM3LjktLjEgMTYgMy4xIDIyIDkuMmw0NiA0NiAxMS4zLTExLjNjMTEuNy0xMS43IDMwLjYtMTIuNyA0Mi4zLTFDNjI0LjUgMjY4IDY0MCAzMjAuMiA2NDAgMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwem02NC0xMTEuOGMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMzI3LjEgNDE2IDM2My42IDQxNiA0MDAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYVNxdWFyZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1taW51cycsXG4gIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCBcIm1pbnVzLXNxdWFyZVwiXSwgXCJmMTQ2XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptODggMjAwSDI5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhTWludXNTcXVhcmUgPSBmYVNxdWFyZU1pbnVzO1xudmFyIGZhSGVsaWNvcHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxpY29wdGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjQxXSwgXCJmNTMzXCIsIFwiTTEyOCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0djY0aDMyYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwdjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM4NCAzMjBjLTIwLjEgMC0zOS4xLTkuNS01MS4yLTI1LjZsLTcxLjQtOTUuMmMtMy41LTQuNy04LjMtOC4zLTEzLjctMTAuNUw0Ny4yIDE5OC4xYy05LjUtMy44LTE2LjctMTItMTkuMi0yMkw1IDgzLjlDMi40IDczLjggMTAuMSA2NCAyMC41IDY0SDQ4YzEwLjEgMCAxOS42IDQuNyAyNS42IDEyLjhMMTEyIDEyOEgzMjBWNjRIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMzg0IDMyMEg1MTJWMjg4YzAtNTMtNDMtOTYtOTYtOTZIMzg0VjMyMHpNNjMwLjYgNDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTMuOSAzLjljLTI0IDI0LTU2LjYgMzcuNS05MC41IDM3LjVIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDUzNi4yYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43bDMuOS0zLjljMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDB6XCJdXG59O1xudmFyIGZhQ29tcGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21wYXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgXCJmMTRlXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFTcXVhcmVDYXJldERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWNhcmV0LWRvd24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImNhcmV0LXNxdWFyZS1kb3duXCJdLCBcImYxNTBcIiwgXCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45czEyLjUtMTQuNCAyMi0xNC40bDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6XCJdXG59O1xudmFyIGZhQ2FyZXRTcXVhcmVEb3duID0gZmFTcXVhcmVDYXJldERvd247XG52YXIgZmFGaWxlQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtcXVlc3Rpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZWZcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNMzY4IDMyMS42VjMyOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di02LjRjMC01LjMgNC4zLTkuNiA5LjYtOS42aDQwLjVjNy43IDAgMTMuOSA2LjIgMTMuOSAxMy45YzAgNS4yLTIuOSA5LjktNy40IDEyLjNsLTMyIDE2LjhjLTUuMyAyLjgtOC42IDguMi04LjYgMTQuMlYzODRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnYtNS4xbDIzLjUtMTIuM2MxNS4xLTcuOSAyNC41LTIzLjYgMjQuNS00MC42YzAtMjUuNC0yMC42LTQ1LjktNDUuOS00NS45SDQwOS42Yy0yMyAwLTQxLjYgMTguNi00MS42IDQxLjZ6XCJdXG59O1xudmFyIGZhTGFwdG9wQ29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYXB0b3AtY29kZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjVmY1wiLCBcIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzUySDUxMlY5NkgxMjhWMzUySDY0Vjk2ek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NEg2MjAuOGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yYzAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44SDc2LjhDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbnZhciBmYVN3YXRjaGJvb2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3dhdGNoYm9vaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjVjM1wiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEgxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDE2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2VjMyek0yMjMuNiA0MjUuOWMuMy0zLjMgLjQtNi42IC40LTkuOVYxNTRsNzUuNC03NS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDkwLjUgOTAuNWMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMjMuNiA0MjUuOXpNMTgyLjggNTEybDE5Mi0xOTJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxODIuOHpNMTI4IDY0SDY0djY0aDY0VjY0ek02NCAxOTJ2NjRoNjRWMTkySDY0ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYVByZXNjcmlwdGlvbkJvdHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24tYm90dGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDg1XCIsIFwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0VjMyem0zMiA5NkgzNTJWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY0MTZIMTQ0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMyVjMyMEgxNDRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzJWMjI0SDE0NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMlYxMjh6XCJdXG59O1xudmFyIGZhQmFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXJzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJuYXZpY29uXCJdLCBcImYwYzlcIiwgXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFOYXZpY29uID0gZmFCYXJzO1xudmFyIGZhUGVvcGxlR3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVvcGxlLWdyb3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTMzXCIsIFwiTTcyIDg4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDcyIDg4ek02NCAyNDUuN0M1NCAyNTYuOSA0OCAyNzEuOCA0OCAyODhzNiAzMS4xIDE2IDQyLjNWMjQ1Ljd6bTE0NC40LTQ5LjNDMTc4LjcgMjIyLjcgMTYwIDI2MS4yIDE2MCAzMDRjMCAzNC4zIDEyIDY1LjggMzIgOTAuNVY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4OS4yQzI2LjIgMzcxLjIgMCAzMzIuNyAwIDI4OGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmgzMmMyNCAwIDQ2LjIgNy41IDY0LjQgMjAuM3pNNDQ4IDQxNlYzOTQuNWMyMC0yNC43IDMyLTU2LjIgMzItOTAuNWMwLTQyLjgtMTguNy04MS4zLTQ4LjQtMTA3LjdDNDQ5LjggMTgzLjUgNDcyIDE3NiA0OTYgMTc2aDMyYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgNDQuNy0yNi4yIDgzLjItNjQgMTAxLjJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTgtMzI4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDQ1NiA4OHpNNTc2IDI0NS43djg0LjdjMTAtMTEuMyAxNi0yNi4xIDE2LTQyLjNzLTYtMzEuMS0xNi00Mi4zek0zMjAgMzJhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTI0MCAzMDRjMCAxNi4yIDYgMzEgMTYgNDIuM1YyNjEuN2MtMTAgMTEuMy0xNiAyNi4xLTE2IDQyLjN6bTE0NC00Mi4zdjg0LjdjMTAtMTEuMyAxNi0yNi4xIDE2LTQyLjNzLTYtMzEuMS0xNi00Mi4zek00NDggMzA0YzAgNDQuNy0yNi4yIDgzLjItNjQgMTAxLjJWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDA1LjJjLTM3LjgtMTgtNjQtNTYuNS02NC0xMDEuMmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmgzMmM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnpcIl1cbn07XG52YXIgZmFIb3VyZ2xhc3NFbmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91cmdsYXNzLWVuZCcsXG4gIGljb246IFszODQsIDUxMiwgWzg5ODcsIFwiaG91cmdsYXNzLTNcIl0sIFwiZjI1M1wiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNOTYgNzVWNjRIMjg4Vjc1YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDE5MiAyMTAuN2wtNjcuOS02Ny45QzEwNi4xIDEyNC45IDk2IDEwMC40IDk2IDc1elwiXVxufTtcbnZhciBmYUhvdXJnbGFzczMgPSBmYUhvdXJnbGFzc0VuZDtcbnZhciBmYUhlYXJ0Q3JhY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY3JhY2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDgsIFwiaGVhcnQtYnJva2VuXCJdLCBcImY3YTlcIiwgXCJNMTE5LjQgNDQuMWMyMy4zLTMuOSA0Ni44LTEuOSA2OC42IDUuM2w0OS44IDc3LjUtNzUuNCA3NS40Yy0xLjUgMS41LTIuNCAzLjYtMi4zIDUuOHMxIDQuMiAyLjYgNS43bDExMiAxMDRjMi45IDIuNyA3LjQgMi45IDEwLjUgLjNzMy44LTcgMS43LTEwLjRsLTYwLjQtOTguMSA5MC43LTc1LjZjMi42LTIuMSAzLjUtNS43IDIuNC04LjhMMjk2LjggNjEuOGMyOC41LTE2LjcgNjIuNC0yMy4yIDk1LjctMTcuNkM0NjEuNSA1NS42IDUxMiAxMTUuMiA1MTIgMTg1LjF2NS44YzAgNDEuNS0xNy4yIDgxLjItNDcuNiAxMDkuNUwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45TDQ3LjYgMzAwLjRDMTcuMiAyNzIuMSAwIDIzMi40IDAgMTkwLjl2LTUuOGMwLTY5LjkgNTAuNS0xMjkuNSAxMTkuNC0xNDF6XCJdXG59O1xudmFyIGZhSGVhcnRCcm9rZW4gPSBmYUhlYXJ0Q3JhY2s7XG52YXIgZmFTcXVhcmVVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTksIFwiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0XCJdLCBcImYzNjBcIiwgXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0ek0zMjAgMzEzLjRWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgxNjYuNmMtMTIuNSAwLTIyLjYgMTAuMS0yMi42IDIyLjZjMCA2IDIuNCAxMS44IDYuNiAxNkwxODQgMjMybC02Ni4zIDY2LjNDMTE0IDMwMiAxMTIgMzA2LjkgMTEyIDMxMnMyIDEwIDUuNyAxMy43bDM2LjcgMzYuN2MzLjYgMy42IDguNSA1LjcgMTMuNyA1LjdzMTAtMiAxMy43LTUuN0wyNDggMjk2bDMzLjQgMzMuNGM0LjIgNC4yIDEwIDYuNiAxNiA2LjZjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjZ6XCJdXG59O1xudmFyIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0ID0gZmFTcXVhcmVVcFJpZ2h0O1xudmFyIGZhRmFjZUtpc3NCZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Uta2lzcy1iZWFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCBcImtpc3MtYmVhbVwiXSwgXCJmNTk3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem00OC43LTE5OC4zYzQuMyA1LjEgNy4zIDExLjQgNy4zIDE4LjNzLTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNGMtMi43IDEuNS01LjcgMy04LjcgNC4zYzMuMSAxLjMgNiAyLjcgOC43IDQuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNGM0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRDMjc0LjcgNDQzLjEgMjU3LjQgNDQ4IDI0MCA0NDhjLTMuNiAwLTYuOC0yLjUtNy43LTZzLjYtNy4yIDMuOC05bDAgMCAwIDAgMCAwIDAgMCAuMi0uMWMuMi0uMSAuNS0uMyAuOS0uNWMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWMtLjQtLjItLjctLjQtLjktLjVsLS4yLS4xIDAgMCAwIDAgMCAwYy0yLjUtMS40LTQuMS00LjEtNC4xLTdzMS42LTUuNiA0LjEtN2wwIDAgMCAwIDAgMCAwIDAgMCAwIC4yLS4xIC4zLS4yIC42LS40Yy44LS41IDItMS4yIDMuNC0yLjFjMi44LTEuOSA2LjUtNC41IDEwLjItNy42YzMuNy0zLjEgNy4yLTYuNiA5LjYtMTAuMWMyLjUtMy41IDMuNS02LjQgMy41LTguNnMtMS01LTMuNS04LjZjLTIuNS0zLjUtNS45LTYuOS05LjYtMTAuMWMtMy43LTMuMS03LjQtNS43LTEwLjItNy42Yy0xLjQtLjktMi42LTEuNi0zLjQtMi4xbC0uNC0uMy0uNS0uMy0uMi0uMSAwIDAgMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjR6bS04Ny4xLTg0LjlsMCAwIDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMHptMTYwIDBsMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwIDAgMHpcIl1cbn07XG52YXIgZmFLaXNzQmVhbSA9IGZhRmFjZUtpc3NCZWFtO1xudmFyIGZhRmlsbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTAyXSwgXCJmMDA4XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6TTQ4IDM2OHYzMmMwIDguOCA3LjIgMTYgMTYgMTZIOTZjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZINjRjLTguOCAwLTE2IDcuMi0xNiAxNnptMzY4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDQxNnpNNDggMjQwdjMyYzAgOC44IDcuMiAxNiAxNiAxNkg5NmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkg2NGMtOC44IDAtMTYgNy4yLTE2IDE2em0zNjgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZINDE2ek00OCAxMTJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2SDk2YzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTQxNiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkg0MTZ6TTE2MCAxMjh2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJIMTkyelwiXVxufTtcbnZhciBmYVJ1bGVySG9yaXpvbnRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci1ob3Jpem9udGFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTQ3XCIsIFwiTTAgMzM2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDU0NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDMzNnpcIl1cbn07XG52YXIgZmFQZW9wbGVSb2JiZXJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1yb2JiZXJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTM2XCIsIFwiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1MmgxNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNzQuM2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2QTQ4IDQ4IDAgMSAwIDgwIDBhNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2bDAgLjZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUySDg4VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI1Mi43bDEzIDIwLjVjNS45IDkuMiAxNi4xIDE0LjkgMjcgMTQuOWg0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMDkuNmwtMzcuNC01OC45QzE1Ny42IDE0MiAxMzIuMSAxMjggMTA0LjcgMTI4SDcyelwiXVxufTtcbnZhciBmYUxpZ2h0YnVsYiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaWdodGJ1bGInLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCBcImYwZWJcIiwgXCJNMjcyIDM4NGM5LjYtMzEuOSAyOS41LTU5LjEgNDkuMi04Ni4ybDAgMGM1LjItNy4xIDEwLjQtMTQuMiAxNS40LTIxLjRjMTkuOC0yOC41IDMxLjQtNjMgMzEuNC0xMDAuM0MzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgMzcuMyAxMS42IDcxLjkgMzEuNCAxMDAuM2M1IDcuMiAxMC4yIDE0LjMgMTUuNCAyMS40bDAgMGMxOS44IDI3LjEgMzkuNyA1NC40IDQ5LjIgODYuMkgyNzJ6TTE5MiA1MTJjNDQuMiAwIDgwLTM1LjggODAtODBWNDE2SDExMnYxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHpNMTEyIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwIDM1LjgtODAgODB6XCJdXG59O1xudmFyIGZhQ2FyZXRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LWxlZnQnLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcImYwZDlcIiwgXCJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZsMCAyNTZjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleGNsYW1hdGlvbi1jaXJjbGVcIl0sIFwiZjA2YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zODRjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMjY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjI0IDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUV4Y2xhbWF0aW9uQ2lyY2xlID0gZmFDaXJjbGVFeGNsYW1hdGlvbjtcbnZhciBmYVNjaG9vbENpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjaG9vbC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NmRcIiwgXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRMMTY2LjMgOTZINDhDMjEuNSA5NiAwIDExNy41IDAgMTQ0VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMjB2MEgyNTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4zIDBoLjVjMy40LTM3LjcgMTguNy03Mi4xIDQyLjItOTkuMUMzNTAuMiAyNjAgMzM1LjYgMjY0IDMyMCAyNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDE4LjMtNS42IDM1LjMtMTUuMSA0OS40YzI5LTIxIDY0LjYtMzMuNCAxMDMuMS0zMy40YzU5LjUgMCAxMTIuMSAyOS42IDE0NCA3NC44VjE0NGMwLTI2LjUtMjEuNS00OC00OC00OEg0NzMuN0wzMzcuOCA1LjR6TTk2IDE5MmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMjA4YzAtOC44IDcuMi0xNiAxNi0xNnptMCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6TTMyMCAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzM2VjE0NGMwLTguOC03LjItMTYtMTYtMTZ6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDM2OHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQtZnJvbS1icmFja2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzaWduLW91dFwiXSwgXCJmMDhiXCIsIFwiTTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMTkyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4ek0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6XCJdXG59O1xudmFyIGZhU2lnbk91dCA9IGZhQXJyb3dSaWdodEZyb21CcmFja2V0O1xudmFyIGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2hldnJvbi1jaXJjbGUtZG93blwiXSwgXCJmMTNhXCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMHpNMTM1IDI0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDg3IDg3IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwyNzMgMzQ1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMzUgMjQxelwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVEb3duID0gZmFDaXJjbGVDaGV2cm9uRG93bjtcbnZhciBmYVVubG9ja0tleWhvbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndW5sb2NrLWtleWhvbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInVubG9jay1hbHRcIl0sIFwiZjEzZVwiLCBcIk0yMjQgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwdjQ4SDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NmMwLTM1LjMgMjguNy02NCA2NC02NEg4MFYxNDRDODAgNjQuNSAxNDQuNSAwIDIyNCAwYzU3LjUgMCAxMDcgMzMuNyAxMzAuMSA4Mi4zYzcuNiAxNiAuOCAzNS4xLTE1LjIgNDIuNnMtMzUuMSAuOC00Mi42LTE1LjJDMjgzLjQgODIuNiAyNTUuOSA2NCAyMjQgNjR6bTMyIDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjR6XCJdXG59O1xudmFyIGZhVW5sb2NrQWx0ID0gZmFVbmxvY2tLZXlob2xlO1xudmFyIGZhQ2xvdWRTaG93ZXJzSGVhdnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy1oZWF2eScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc0MFwiLCBcIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjJDNjQuNyAxMjYuMSA2NCAxMTkuMSA2NCAxMTJDNjQgNTAuMSAxMTQuMSAwIDE3NiAwYzQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MGMxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS41LS42IDEwLjgtMS42IDE2Yy41IDAgMS4xIDAgMS42IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIOTZ6TTgxLjUgMzUzLjljMTIuMiA1LjIgMTcuOCAxOS4zIDEyLjYgMzEuNWwtNDggMTEyYy01LjIgMTIuMi0xOS4zIDE3LjgtMzEuNSAxMi42Uy0zLjMgNDkwLjcgMS45IDQ3OC41bDQ4LTExMmM1LjItMTIuMiAxOS4zLTE3LjggMzEuNS0xMi42em0xMjAgMGMxMi4yIDUuMiAxNy44IDE5LjMgMTIuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZ6bTI0NC42IDMxLjVsLTQ4IDExMmMtNS4yIDEyLjItMTkuMyAxNy44LTMxLjUgMTIuNnMtMTcuOC0xOS4zLTEyLjYtMzEuNWw0OC0xMTJjNS4yLTEyLjIgMTkuMy0xNy44IDMxLjUtMTIuNnMxNy44IDE5LjMgMTIuNiAzMS41ek0zMTMuNSAzNTMuOWMxMi4yIDUuMiAxNy44IDE5LjMgMTIuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZ6XCJdXG59O1xudmFyIGZhSGVhZHBob25lc1NpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkcGhvbmVzLXNpbXBsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGVhZHBob25lcy1hbHRcIl0sIFwiZjU4ZlwiLCBcIk0yNTYgODBDMTQxLjEgODAgNDggMTczLjEgNDggMjg4VjM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODhDMCAxNDYuNiAxMTQuNiAzMiAyNTYgMzJzMjU2IDExNC42IDI1NiAyNTZWMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI4OGMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDh6TTgwIDM1MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzNTJ6bTI4OC02NGMzNS4zIDAgNjQgMjguNyA2NCA2NHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgxNnpcIl1cbn07XG52YXIgZmFIZWFkcGhvbmVzQWx0ID0gZmFIZWFkcGhvbmVzU2ltcGxlO1xudmFyIGZhU2l0ZW1hcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaXRlbWFwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGU4XCIsIFwiTTIwOCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg2NGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGgtOHY0MEg0NjRjMzAuOSAwIDU2IDI1LjEgNTYgNTZ2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OGg4VjI4OGMwLTQuNC0zLjYtOC04LThIMzEydjQwaDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMjU2Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNjhjMC0yNi41IDIxLjUtNDggNDgtNDhoOFYyODBIMTEyYy00LjQgMC04IDMuNi04IDh2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzY4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDhWMjg4YzAtMzAuOSAyNS4xLTU2IDU2LTU2SDI2NFYxOTJoLThjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwelwiXVxufTtcbnZhciBmYUNpcmNsZURvbGxhclRvU2xvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtZG9sbGFyLXRvLXNsb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRvbmF0ZVwiXSwgXCJmNGI5XCIsIFwiTTMyNi43IDQwMy43Yy0yMi4xIDgtNDUuOSAxMi4zLTcwLjcgMTIuM3MtNDguNy00LjQtNzAuNy0xMi4zYy0uMy0uMS0uNS0uMi0uOC0uM2MtMzAtMTEtNTYuOC0yOC43LTc4LjYtNTEuNEM3MCAzMTQuNiA0OCAyNjMuOSA0OCAyMDhDNDggOTMuMSAxNDEuMSAwIDI1NiAwUzQ2NCA5My4xIDQ2NCAyMDhjMCA1NS45LTIyIDEwNi42LTU3LjkgMTQ0Yy0xIDEtMiAyLjEtMyAzLjFjLTIxLjQgMjEuNC00Ny40IDM4LjEtNzYuMyA0OC42ek0yNTYgODRjLTExIDAtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjMxMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyOTguMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjEwNGMwLTExLTktMjAtMjAtMjB6TTQ4IDM1Mkg2NGMxOS41IDI1LjkgNDQgNDcuNyA3Mi4yIDY0SDY0djMySDI1NiA0NDhWNDE2SDM3NS44YzI4LjItMTYuMyA1Mi44LTM4LjEgNzIuMi02NGgxNmMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYURvbmF0ZSA9IGZhQ2lyY2xlRG9sbGFyVG9TbG90O1xudmFyIGZhTWVtb3J5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lbW9yeScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjUzOFwiLCBcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOHY3LjRjMCA2LjggNC40IDEyLjYgMTAuMSAxNi4zQzIzLjMgMTYwLjMgMzIgMTc1LjEgMzIgMTkycy04LjcgMzEuNy0yMS45IDQwLjNDNC40IDIzNiAwIDI0MS44IDAgMjQ4LjZWMzIwSDU3NlYyNDguNmMwLTYuOC00LjQtMTIuNi0xMC4xLTE2LjNDNTUyLjcgMjIzLjcgNTQ0IDIwOC45IDU0NCAxOTJzOC43LTMxLjcgMjEuOS00MC4zYzUuNy0zLjcgMTAuMS05LjUgMTAuMS0xNi4zVjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTc2IDM1MkgwdjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDgwVjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MnpNMTkyIDE2MHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDB2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwdjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVJvYWRTcGlrZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1zcGlrZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjhcIiwgXCJNNjQgMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMMTkyIDI1NlYxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUwzMjAgMjU2VjExNi44YzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDQ0OCAyNTZWMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMNjA2LjggMzAyLjJjMTQuMiAyMS4zLTEuMSA0OS43LTI2LjYgNDkuN0g1MTIgNDQ4IDM4NCAzMjAgMjU2IDE5MiA2NFYxMTYuOHpNMzIgMzg0SDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGaXJlQnVybmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtYnVybmVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGYxXCIsIFwiTTM0NS43IDQ4LjNMMzU4IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOWM3LjIgMCAxNC4zIDIuNiAxOS45IDcuOGMxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjZDNDY5IDEzMS4yIDQ4MCAxNjIuMiA0ODAgMTkyLjJDNDgwIDI4MC44IDQwOC43IDM1MiAzMjAgMzUyYy04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44YzAtMzcuMyAxNi03My40IDM2LjgtMTA0LjVjMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yQzI3My40IDIuMyAyODAuNy0uMiAyODggMGMxNC4xIC4zIDIzLjggMTEuNCAzMi43IDIxLjZjMCAwIDAgMCAwIDBjMiAyLjMgNCA0LjYgNiA2LjdsMTkgMTkuOXpNMzg0IDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjRjLTUuNC00LjctMTMuMS00LjctMTguNSAwQzI5MyAxNjcuMSAyNTYgMjAzLjYgMjU2IDI0MC4yYzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTMyIDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNjQgNDQ4IDAgMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMC05NnpNMzIwIDQ4MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE2MC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xOTIgNDgwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZsYWcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgXCJmMDI0XCIsIFwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJWNjQgMzY4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1Mmw2NC4zLTE2LjFjNDEuMS0xMC4zIDg0LjYtNS41IDEyMi41IDEzLjRjNDQuMiAyMi4xIDk1LjUgMjQuOCAxNDEuNyA3LjRsMzQuNy0xM2MxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMFY2Ni4xYzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTkuNiA0LjhjLTQ2LjMgMjMuMi0xMDAuOCAyMy4yLTE0Ny4xIDBjLTM1LjEtMTcuNi03NS40LTIyLTExMy41LTEyLjVMNjQgNDhWMzJ6XCJdXG59O1xudmFyIGZhSGFudWtpYWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFudWtpYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzRdLCBcImY2ZTZcIiwgXCJNMzE0LjIgMy4zQzMwOS4xIDEyLjEgMjk2IDM2LjYgMjk2IDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdDMzI0LjYgMS4yIDMyMi40IDAgMzIwIDBzLTQuNiAxLjItNS44IDMuM3ptLTI4OCA0OEMyMS4xIDYwLjEgOCA4NC42IDggMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdDMzYuNiA0OS4yIDM0LjQgNDggMzIgNDhzLTQuNiAxLjItNS44IDMuM3pNODggMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMTAxLjEgNjAuMSA4OCA4NC42IDg4IDEwNHptODIuMi01Mi43QzE2NS4xIDYwLjEgMTUyIDg0LjYgMTUyIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek0yMTYgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zQzM4OS4xIDYwLjEgMzc2IDg0LjYgMzc2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNDUzLjEgNjAuMSA0NDAgODQuNiA0NDAgMTA0em04Mi4yLTUyLjdDNTE3LjEgNjAuMSA1MDQgODQuNiA1MDQgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTU4NCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M1OTcuMSA2MC4xIDU4NCA4NC42IDU4NCAxMDR6TTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6bTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjMyMEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjk2YzAgNTMgNDMgOTYgOTYgOTZIMjg4djY0SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjAgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM1MlYzODRINTQ0YzUzIDAgOTYtNDMgOTYtOTZWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM1MlYxNDR6XCJdXG59O1xudmFyIGZhRmVhdGhlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZWF0aGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NzE4XSwgXCJmNTJkXCIsIFwiTTI3OC41IDIxNS42TDIzIDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU3LTU3aDY4YzQ5LjcgMCA5Ny45LTE0LjQgMTM5LTQxYzExLjEtNy4yIDUuNS0yMy03LjgtMjNjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODEtMjQuM2MyLjUtLjggNC44LTIuMSA2LjctNGwyMi40LTIyLjRjMTAuMS0xMC4xIDIuOS0yNy4zLTExLjMtMjcuM2wtMzIuMiAwYy01LjEgMC05LjItNC4xLTkuMi05LjJjMC00LjEgMi43LTcuNiA2LjUtOC44bDExMi0zMy42YzQtMS4yIDcuNC0zLjkgOS4zLTcuN0M1MDYuNCAyMDcuNiA1MTIgMTg0LjEgNTEyIDE2MGMwLTQxLTE2LjMtODAuMy00NS4zLTEwOS4zbC01LjUtNS41QzQzMi4zIDE2LjMgMzkzIDAgMzUyIDBzLTgwLjMgMTYuMy0xMDkuMyA0NS4zTDEzOSAxNDlDOTEgMTk3IDY0IDI2Mi4xIDY0IDMzMHY1NS4zTDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdXG59O1xudmFyIGZhVm9sdW1lTG93ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS1sb3cnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjQsIFwidm9sdW1lLWRvd25cIl0sIFwiZjAyN1wiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQxMi42IDE4MS41QzQzNC4xIDE5OS4xIDQ0OCAyMjUuOSA0NDggMjU2cy0xMy45IDU2LjktMzUuNCA3NC41Yy0xMC4zIDguNC0yNS40IDYuOC0zMy44LTMuNXMtNi44LTI1LjQgMy41LTMzLjhDMzkzLjEgMjg0LjQgNDAwIDI3MSA0MDAgMjU2cy02LjktMjguNC0xNy43LTM3LjNjLTEwLjMtOC40LTExLjgtMjMuNS0zLjUtMzMuOHMyMy41LTExLjggMzMuOC0zLjV6XCJdXG59O1xudmFyIGZhVm9sdW1lRG93biA9IGZhVm9sdW1lTG93O1xudmFyIGZhQ29tbWVudFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0YjNcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MTIuOSAzNzYuN0M1NTIuMiAzNDAuMiA1NzYgMjkyLjMgNTc2IDI0MEM1NzYgMTI1LjEgNDYxLjQgMzIgMzIwIDMyYy02Ny43IDAtMTI5LjMgMjEuNC0xNzUuMSA1Ni4zTDM4LjggNS4xem0zODUuMiA0MjVMODIuOSAxNjEuM0M3MC43IDE4NS42IDY0IDIxMi4yIDY0IDI0MGMwIDQ1LjEgMTcuNyA4Ni44IDQ3LjcgMTIwLjljLTEuOSAyNC41LTExLjQgNDYuMy0yMS40IDYyLjljLTUuNSA5LjItMTEuMSAxNi42LTE1LjIgMjEuNmMtMi4xIDIuNS0zLjcgNC40LTQuOSA1LjdjLS42IC42LTEgMS4xLTEuMyAxLjRsLS4zIC4zIDAgMCAwIDAgMCAwIDAgMGMtNC42IDQuNi01LjkgMTEuNC0zLjQgMTcuNGMyLjUgNiA4LjMgOS45IDE0LjggOS45YzI4LjcgMCA1Ny42LTguOSA4MS42LTE5LjNjMjIuOS0xMCA0Mi40LTIxLjkgNTQuMy0zMC42YzMxLjggMTEuNSA2NyAxNy45IDEwNC4xIDE3LjljMzcgMCA3Mi4zLTYuNCAxMDQuMS0xNy45elwiXVxufTtcbnZhciBmYUNsb3VkU3VuUmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1zdW4tcmFpbicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzc4Ml0sIFwiZjc0M1wiLCBcIk0yOTQuMiAxLjJjNS4xIDIuMSA4LjcgNi43IDkuNiAxMi4xbDEwLjQgNjIuNGMtMjMuMyAxMC44LTQyLjkgMjguNC01NiA1MC4zYy0xNC42LTktMzEuOC0xNC4xLTUwLjItMTQuMWMtNTMgMC05NiA0My05NiA5NmMwIDM1LjUgMTkuMyA2Ni42IDQ4IDgzLjJjLjggMzEuOCAxMy4yIDYwLjcgMzMuMSA4Mi43bC01NiAzOS4yYy00LjUgMy4yLTEwLjMgMy44LTE1LjQgMS42cy04LjctNi43LTkuNi0xMi4xTDk4LjEgMzE3LjkgMTMuNCAzMDMuOGMtNS40LS45LTEwLTQuNS0xMi4xLTkuNnMtMS41LTEwLjkgMS42LTE1LjRMNTIuNSAyMDggMi45IDEzNy4yYy0zLjItNC41LTMuOC0xMC4zLTEuNi0xNS40czYuNy04LjcgMTIuMS05LjZMOTguMSA5OC4xbDE0LjEtODQuN2MuOS01LjQgNC41LTEwIDkuNi0xMi4xczEwLjktMS41IDE1LjQgMS42TDIwOCA1Mi41IDI3OC44IDIuOWM0LjUtMy4yIDEwLjMtMy44IDE1LjQtMS42ek0yMDggMTQ0YzEzLjggMCAyNi43IDQuNCAzNy4xIDExLjljLTEuMiA0LjEtMi4yIDguMy0zIDEyLjZjLTM3LjkgMTQuNi02Ny4yIDQ2LjYtNzcuOCA4Ni40QzE1MS44IDI0My4xIDE0NCAyMjYuNSAxNDQgMjA4YzAtMzUuMyAyOC43LTY0IDY0LTY0em02OS40IDI3NmMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em05NiAwYzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zbC0zMiA0OGMtNy40IDExLTIyLjMgMTQtMzMuMyA2LjdzLTE0LTIyLjMtNi43LTMzLjNsMzItNDhjNy40LTExIDIyLjMtMTQgMzMuMy02Ljd6bTk2IDBjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNsLTMyIDQ4Yy03LjQgMTEtMjIuMyAxNC0zMy4zIDYuN3MtMTQtMjIuMy02LjctMzMuM2wzMi00OGM3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN3ptOTYgMGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em03NC41LTExNi4xYzAgNDQuMi0zNS44IDgwLTgwIDgwSDI4OGMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04NyA4MC05NC42bDAtMS4zYzAtNTMgNDMtOTYgOTYtOTZjMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjRjMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjktLjYgMTEuNy0xLjkgMTcuMmMzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43elwiXVxufTtcbnZhciBmYUNvbXByZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXByZXNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDY2XCIsIFwiTTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY2NHpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzUyVjY0ek0zMjAgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGg2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6XCJdXG59O1xudmFyIGZhV2hlYXRBd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hlYXQtYXduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ3aGVhdC1hbHRcIl0sIFwiZTJjZFwiLCBcIk01MDUgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzODMgOTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4OC04OHpNMzA1LjUgMjcuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjcxLjUgMzguNmMtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNC0zMC41IDMwLjVjLTMuNC0yNy4zLTE1LjUtNTMuOC0zNi41LTc0LjhsLTExLjMtMTEuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTExLjMgMTEuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNC0zMC41IDMwLjVjLTMuNC0yNy4zLTE1LjUtNTMuOC0zNi41LTc0LjhMMTAxLjggMjMxYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw2Ny45IDI0Mi4zYy0zNy41IDM3LjUtMzcuNSA5OC4zIDAgMTM1LjhsMTAuNCAxMC40TDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC45LTY4LjkgMTIuMiAxMi4yYzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMGwxMS4zLTExLjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTExLjMtMTEuM2MtMjEuOC0yMS44LTQ5LjYtMzQuMS03OC4xLTM2LjlsMzEuOS0zMS45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMzcuNSAzNy41IDk4LjMgMzcuNSAxMzUuOCAwTDQ4Ni41IDIzMWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNkw0NzUuMiAxOTdjLTUuMi01LjItMTAuNi05LjgtMTYuNC0xMy45TDUwNSAxMzdjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTkuNCA1OS40Yy0yMC42LTQuNC00Mi0zLjctNjIuMyAyLjFjNi4xLTIxLjMgNi42LTQzLjggMS40LTY1LjNMNDA5IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzI5LjEgNTIuOWMtMy43LTUtNy44LTkuOC0xMi40LTE0LjNMMzA1LjUgMjcuM3pcIl1cbn07XG52YXIgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247XG52YXIgZmFBbmtoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fua2gnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs5NzY1XSwgXCJmNjQ0XCIsIFwiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMWMtNS45IDYuMi0xMS44IDExLjgtMTcuNCAxNi43Yy01LjYtNC45LTExLjUtMTAuNS0xNy40LTE2LjdDMTE2LjcgMjA0LjYgOTYgMTY5LjYgOTYgMTI4ek0xNjAgMEM4OS4zIDAgMzIgNTcuMyAzMiAxMjhjMCA1Mi40IDIxLjUgOTUuNSA0Ni44IDEyOEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjQxLjJjMjUuNC0zMi41IDQ2LjgtNzUuNiA0Ni44LTEyOEMyODggNTcuMyAyMzAuNyAwIDE2MCAwelwiXVxufTtcbnZhciBmYUhhbmRzSG9sZGluZ0NoaWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWhvbGRpbmctY2hpbGQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZmFcIiwgXCJNMzIwIDBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem00NC43IDE2NC4zTDM3NS44IDI1M2MxLjYgMTMuMi03LjcgMjUuMS0yMC44IDI2LjhzLTI1LjEtNy43LTI2LjgtMjAuOGwtNC40LTM1aC03LjZsLTQuNCAzNWMtMS42IDEzLjItMTMuNiAyMi41LTI2LjggMjAuOHMtMjIuNS0xMy42LTIwLjgtMjYuOGwxMS4xLTg4LjhMMjU1LjUgMTgxYy0xMC4xIDguNi0yNS4zIDcuMy0zMy44LTIuOHMtNy4zLTI1LjMgMi44LTMzLjhsMjcuOS0yMy42QzI3MS4zIDEwNC44IDI5NS4zIDk2IDMyMCA5NnM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44bC0xOS44LTE2Ljd6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwdjQwIDgwIDQwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xYzEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDMyIDMyIDE1LjIgMTUuMiAwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDE3My4zYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNVYyMjQgMTYwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NTYgNjRWMzI1LjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43SDQwMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzg1LjFjMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMCAxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzItMTUuMiAxNS4yYy0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOGM5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM1YyMjQgMTQ0IDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpcIl1cbn07XG52YXIgZmFBc3RlcmlzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhc3RlcmlzaycsXG4gIGljb246IFszODQsIDUxMiwgWzEwMDMzLCA2MTU0NV0sIFwiMmFcIiwgXCJNMTkyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjE5OS41bDExMS41LTY2LjljMTUuMi05LjEgMzQuOC00LjIgNDMuOSAxMXM0LjIgMzQuOC0xMSA0My45TDI1NC4yIDI1NmwxMTQuMyA2OC42YzE1LjIgOS4xIDIwLjEgMjguNyAxMSA0My45cy0yOC43IDIwLjEtNDMuOSAxMUwyMjQgMzEyLjVWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMxMi41TDQ4LjUgMzc5LjRjLTE1LjIgOS4xLTM0LjggNC4yLTQzLjktMTFzLTQuMi0zNC44IDExLTQzLjlMMTI5LjggMjU2IDE1LjUgMTg3LjRjLTE1LjItOS4xLTIwLjEtMjguNy0xMS00My45czI4LjctMjAuMSA0My45LTExTDE2MCAxOTkuNVY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTcXVhcmVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgXCJjaGVjay1zcXVhcmVcIl0sIFwiZjE0YVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTMzNyAyMDlMMjA5IDMzN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMzAzIDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhQ2hlY2tTcXVhcmUgPSBmYVNxdWFyZUNoZWNrO1xudmFyIGZhUGVzZXRhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXNldGEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTIyMVwiLCBcIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjR2OTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA5NlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoOTZjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0zLjJDMzM0IDg3IDI2OS40IDMyIDE5MiAzMkg2NHpNMjgyLjUgMTYwSDk2Vjk2aDk2YzQxLjggMCA3Ny40IDI2LjcgOTAuNSA2NHpNOTYgMjI0SDI4Mi41Yy0xMy4yIDM3LjMtNDguNyA2NC05MC41IDY0SDk2VjIyNHpcIl1cbn07XG52YXIgZmFIZWFkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWRpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImhlYWRlclwiXSwgXCJmMWRjXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIODBoNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTEyVjIwOEgzMzZWOTZIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDQ4IDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQwMFYyNDAgNDE2aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM2OCAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMTZWMjcySDExMlY0MTZoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODAgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDhWMjQwIDk2SDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6XCJdXG59O1xudmFyIGZhSGVhZGVyID0gZmFIZWFkaW5nO1xudmFyIGZhR2hvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2hvc3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxMjNdLCBcImY2ZTJcIiwgXCJNNDAuMSA0NjcuMWwtMTEuMiA5Yy0zLjIgMi41LTcuMSAzLjktMTEuMSAzLjlDOCA0ODAgMCA0NzIgMCA0NjIuMlYxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyVjQ2Mi4yYzAgOS44LTggMTcuOC0xNy44IDE3LjhjLTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUxpc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGlzdC1zcXVhcmVzXCJdLCBcImYwM2FcIiwgXCJNNDAgNDhDMjYuNyA0OCAxNiA1OC43IDE2IDcydjQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjcyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnpNMTYgMjMydjQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjIzMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTQwIDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRIODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzkyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwelwiXVxufTtcbnZhciBmYUxpc3RTcXVhcmVzID0gZmFMaXN0O1xudmFyIGZhU3F1YXJlUGhvbmVGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1waG9uZS1mbGlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwaG9uZS1zcXVhcmUtYWx0XCJdLCBcImY4N2JcIiwgXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0em0tOTAuNyA5Ni43Yy05LjctMi42LTE5LjkgMi4zLTIzLjcgMTEuNmwtMjAgNDhjLTMuNCA4LjItMSAxNy42IDUuOCAyMy4yTDI4MCAyMzEuN2MtMTYuNiAzNS4yLTQ1LjEgNjMuNy04MC4zIDgwLjNsLTIwLjItMjQuN2MtNS42LTYuOC0xNS05LjItMjMuMi01LjhsLTQ4IDIwYy05LjMgMy45LTE0LjIgMTQtMTEuNiAyMy43bDEyIDQ0QzExMS4xIDM3OCAxMTkgMzg0IDEyOCAzODRjMTIzLjcgMCAyMjQtMTAwLjMgMjI0LTIyNGMwLTktNi0xNi45LTE0LjctMTkuM2wtNDQtMTJ6XCJdXG59O1xudmFyIGZhUGhvbmVTcXVhcmVBbHQgPSBmYVNxdWFyZVBob25lRmxpcDtcbnZhciBmYUNhcnRQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnQtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIxN1wiLCBcIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEg2OS41YzIyIDAgNDEuNSAxMi44IDUwLjYgMzJoNDExYzI2LjMgMCA0NS41IDI1IDM4LjYgNTAuNGwtNDEgMTUyLjNjLTguNSAzMS40LTM3IDUzLjMtNjkuNSA1My4zSDE3MC43bDUuNCAyOC41YzIuMiAxMS4zIDEyLjEgMTkuNSAyMy42IDE5LjVINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE5OS43Yy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMjUyIDE2MGMwIDExIDkgMjAgMjAgMjBoNDR2NDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWMTgwaDQ0YzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMEgzNTZWOTZjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwdjQ0SDI3MmMtMTEgMC0yMCA5LTIwIDIwelwiXVxufTtcbnZhciBmYUdhbWVwYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2FtZXBhZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjExYlwiLCBcIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhINDQ4YzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkgxOTJ6TTQ5NiAxNjhhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwek0zOTIgMzA0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE2OCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHYzMmgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMTZ2MzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGgzMlYyMDB6XCJdXG59O1xudmFyIGZhQ2lyY2xlRG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1kb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsIFwiZG90LWNpcmNsZVwiXSwgXCJmMTkyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFEb3RDaXJjbGUgPSBmYUNpcmNsZURvdDtcbnZhciBmYUZhY2VEaXp6eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWRpenp5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkaXp6eVwiXSwgXCJmNTY3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTIyNGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMTAwLjcgMTMyLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBMMTYwIDE2OS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMMTgyLjYgMTkybDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDE2MCAyMTQuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDEzNy40IDE5MmwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptMTkyIDBjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBMMzUyIDE2OS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMMzc0LjYgMTkybDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDM1MiAyMTQuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDMyOS40IDE5MmwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFEaXp6eSA9IGZhRmFjZURpenp5O1xudmFyIGZhRWdnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VnZycsXG4gIGljb246IFszODQsIDUxMiwgWzEyOTM3MF0sIFwiZjdmYlwiLCBcIk0xOTIgNDk2Qzg2IDQ5NiAwIDM5NCAwIDI4OEMwIDE3NiA2NCAxNiAxOTIgMTZzMTkyIDE2MCAxOTIgMjcyYzAgMTA2LTg2IDIwOC0xOTIgMjA4ek0xNTQuOCAxMzRjNi41LTYgNy0xNi4xIDEtMjIuNnMtMTYuMS03LTIyLjYtMWMtMjMuOSAyMS44LTQxLjEgNTIuNy01Mi4zIDg0LjJDNjkuNyAyMjYuMSA2NCAyNTkuNyA2NCAyODhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTI0LjUgNS01NC40IDE1LjEtODIuOGMxMC4xLTI4LjUgMjUtNTQuMSA0My43LTcxLjJ6XCJdXG59O1xudmFyIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbWVkaWNhbC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTNcIiwgXCJNMzIwIDM2OGMwIDU5LjUgMjkuNSAxMTIuMSA3NC44IDE0NEgxMjguMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDUyMi4xIDE5My45Yy04LjUtMS4zLTE3LjMtMS45LTI2LjEtMS45Yy01NC43IDAtMTAzLjUgMjQuOS0xMzUuOCA2NEgzMjBWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTIyLjYgMTQ0bDM2LjctMzYuN2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwTDQ5NiAzNDUuNGwtMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42TDQ3My40IDM2OGwtMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDk2IDM5MC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZMNTE4LjYgMzY4elwiXVxufTtcbnZhciBmYUNhbXBncm91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FtcGdyb3VuZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzk5NzhdLCBcImY2YmJcIiwgXCJNMzc3IDUyYzExLTEzLjggOC44LTMzLjktNS00NXMtMzMuOS04LjgtNDUgNUwyODggNjAuOCAyNDkgMTJjLTExLTEzLjgtMzEuMi0xNi00NS01cy0xNiAzMS4yLTUgNDVsNDggNjBMMTIuMyA0MDUuNEM0LjMgNDE1LjQgMCA0MjcuNyAwIDQ0MC40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyODggNTI4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ0MC40YzAtMTIuNy00LjMtMjUuMS0xMi4zLTM1TDMyOSAxMTJsNDgtNjB6TTI4OCA0NDhIMTY4LjVMMjg4IDI5MS43IDQwNy41IDQ0OEgyODh6XCJdXG59O1xudmFyIGZhRm9sZGVyUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY1ZVwiLCBcIk01MTIgNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgxOTJjMjAuMSAwIDM5LjEgOS41IDUxLjIgMjUuNmwxOS4yIDI1LjZjNiA4LjEgMTUuNSAxMi44IDI1LjYgMTIuOEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2ek0yMzIgMzc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzEyaDY0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDI4MFYyMDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NjRIMTY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDY0djY0elwiXVxufTtcbnZhciBmYUZ1dGJvbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmdXRib2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTE3LCBcImZ1dGJvbC1iYWxsXCIsIFwic29jY2VyLWJhbGxcIl0sIFwiZjFlM1wiLCBcIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE0LjEtMzI1LjdjLTguNC02LjEtMTkuOC02LjEtMjguMiAwTDE5NCAyMjFjLTguNCA2LjEtMTEuOSAxNi45LTguNyAyNi44bDE4LjMgNTYuM2MzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZoNTkuMmMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHpcIl1cbn07XG52YXIgZmFGdXRib2xCYWxsID0gZmFGdXRib2w7XG52YXIgZmFTb2NjZXJCYWxsID0gZmFGdXRib2w7XG52YXIgZmFQYWludGJydXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhaW50YnJ1c2gnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzOTYsIFwicGFpbnQtYnJ1c2hcIl0sIFwiZjFmY1wiLCBcIk0zMzkuMyAzNjcuMWMyNy4zLTMuOSA1MS45LTE5LjQgNjcuMi00Mi45TDU2OC4yIDc0LjFjMTIuNi0xOS41IDkuNC00NS4zLTcuNi02MS4yUzUxNy43LTQuNCA0OTkuMSA5LjZMMjYyLjQgMTg3LjJjLTI0IDE4LTM4LjIgNDYuMS0zOC40IDc2LjFMMzM5LjMgMzY3LjF6bS0xOS42IDI1LjRsLTExNi0xMDQuNEMxNDMuOSAyOTAuMyA5NiAzMzkuNiA5NiA0MDBjMCAzLjkgLjIgNy44IC42IDExLjZDOTguNCA0MjkuMSA4Ni40IDQ0OCA2OC44IDQ0OEg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyMDhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC0yLjUtLjEtNS0uMi03LjV6XCJdXG59O1xudmFyIGZhUGFpbnRCcnVzaCA9IGZhUGFpbnRicnVzaDtcbnZhciBmYUxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jaycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODI3NF0sIFwiZjAyM1wiLCBcIk0xNDQgMTQ0djQ4SDMwNFYxNDRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODB6TTgwIDE5MlYxNDRDODAgNjQuNSAxNDQuNSAwIDIyNCAwczE0NCA2NC41IDE0NCAxNDR2NDhoMTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyNTZjMC0zNS4zIDI4LjctNjQgNjQtNjRIODB6XCJdXG59O1xudmFyIGZhR2FzUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXMtcHVtcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5ODFdLCBcImY1MmZcIiwgXCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMjU2aDhjNDguNiAwIDg4IDM5LjQgODggODh2MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMjJjLTI3LjYtNy4xLTQ4LTMyLjItNDgtNjJWOTZMMzg0IDY0Yy04LjgtOC44LTguOC0yMy4yIDAtMzJzMjMuMi04LjggMzIgMGw3Ny4zIDc3LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YxNjh2MjQgMzJWMzc2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyVjM0NGMwLTIyLjEtMTcuOS00MC00MC00MGgtOFY0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWNjR6TTk2IDgwdjk2YzAgOC44IDcuMiAxNiAxNiAxNkgyNDBjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNkgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG52YXIgZmFIb3RUdWJQZXJzb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG90LXR1Yi1wZXJzb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhvdC10dWJcIl0sIFwiZjU5M1wiLCBcIk0yNzIgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NS4yYzAgMzQgMTQuNCA2Ni40IDM5LjcgODkuMmwxNi40IDE0LjhjMTUuMiAxMy43IDIzLjggMzMuMSAyMy44IDUzLjVWMjAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg2LjhjMC0zNC0xNC40LTY2LjQtMzkuNy04OS4yTDI5NS44IDgyLjhDMjgwLjcgNjkuMSAyNzIgNDkuNyAyNzIgMjkuMlYyNHpNMCAzMjB2MTZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjc3LjNjLTEzLjggMC0yNy4zLTQuNS0zOC40LTEyLjhsLTg1LjMtNjRDMTM3IDE2Ni43IDExNi44IDE2MCA5NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZ2NjR6bTEyOCAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTExMiAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6TTM2MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY1LjJjMCAzNCAxNC40IDY2LjQgMzkuNyA4OS4ybDE2LjQgMTQuOGMxNS4yIDEzLjcgMjMuOCAzMy4xIDIzLjggNTMuNVYyMDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxODYuOGMwLTM0LTE0LjQtNjYuNC0zOS43LTg5LjJMNDA3LjggODIuOEMzOTIuNyA2OS4xIDM4NCA0OS43IDM4NCAyOS4yVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek02NCAxMjhBNjQgNjQgMCAxIDAgNjQgMGE2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFIb3RUdWIgPSBmYUhvdFR1YlBlcnNvbjtcbnZhciBmYU1hcExvY2F0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcC1sb2NhdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibWFwLW1hcmtlZFwiXSwgXCJmNTlmXCIsIFwiTTMwMi44IDMxMkMzMzQuOSAyNzEuOSA0MDggMTc0LjYgNDA4IDEyMEM0MDggNTMuNyAzNTQuMyAwIDI4OCAwUzE2OCA1My43IDE2OCAxMjBjMCA1NC42IDczLjEgMTUxLjkgMTA1LjIgMTkyYzcuNyA5LjYgMjIgOS42IDI5LjYgMHpNNDE2IDUwM2wxNDQuOS01OGM5LjEtMy42IDE1LjEtMTIuNSAxNS4xLTIyLjNWMTUyYzAtMTctMTcuMS0yOC42LTMyLjktMjIuM2wtMTE2IDQ2LjRjLS41IDEuMi0xIDIuNS0xLjUgMy43Yy0yLjkgNi44LTYuMSAxMy43LTkuNiAyMC42VjUwM3pNMTUuMSAxODcuM0M2IDE5MSAwIDE5OS44IDAgMjA5LjZWNDgwLjRjMCAxNyAxNy4xIDI4LjYgMzIuOSAyMi4zTDE2MCA0NTEuOFYyMDAuNGMtMy41LTYuOS02LjctMTMuOC05LjYtMjAuNmMtNS42LTEzLjItMTAuNC0yNy40LTEyLjgtNDEuNWwtMTIyLjYgNDl6TTM4NCAyNTVjLTIwLjUgMzEuMy00Mi4zIDU5LjYtNTYuMiA3N2MtMjAuNSAyNS42LTU5LjEgMjUuNi03OS42IDBjLTEzLjktMTcuNC0zNS43LTQ1LjctNTYuMi03N1Y0NDkuNGwxOTIgNTQuOVYyNTV6XCJdXG59O1xudmFyIGZhTWFwTWFya2VkID0gZmFNYXBMb2NhdGlvbjtcbnZhciBmYUhvdXNlRmxvb2RXYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1mbG9vZC13YXRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwZVwiLCBcIk0zMDYuOCA2LjFDMjk1LjYtMiAyODAuNC0yIDI2OS4yIDYuMWwtMTc2IDEyOGMtMTEuMiA4LjItMTUuOSAyMi42LTExLjYgMzUuOFM5OC4xIDE5MiAxMTIgMTkyaDE2djczYzEuNyAxIDMuMyAyIDQuOSAzLjFjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzEuNS0xIDMtMiA0LjUtMi45bC0uMy03My4ySDQ2NGMxMy45IDAgMjYuMS04LjkgMzAuNC0yMi4xcy0uNC0yNy42LTExLjYtMzUuOGwtMTc2LTEyOHpNMjY5LjUgMzA5LjlDMjQ3IDMyNS40IDIxOS41IDMzNiAxOTIgMzM2Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgMzg5LjcgMTU5IDQwMCAxOTIgNDAwYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjUtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCAzMjUuMiA0MTAuOSAzMzYgMzg0IDMzNmMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwek0zODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OHpcIl1cbn07XG52YXIgZmFUcmVlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyZWUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3OTRdLCBcImYxYmJcIiwgXCJNMjEwLjYgNS45TDYyIDE2OS40Yy0zLjkgNC4yLTYgOS44LTYgMTUuNUM1NiAxOTcuNyA2Ni4zIDIwOCA3OS4xIDIwOEgxMDRMMzAuNiAyODEuNGMtNC4yIDQuMi02LjYgMTAtNi42IDE2QzI0IDMwOS45IDM0LjEgMzIwIDQ2LjYgMzIwSDgwTDUuNCA0MDkuNUMxLjkgNDEzLjcgMCA0MTkgMCA0MjQuNWMwIDEzIDEwLjUgMjMuNSAyMy41IDIzLjVIMTkydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4SDQyNC41YzEzIDAgMjMuNS0xMC41IDIzLjUtMjMuNWMwLTUuNS0xLjktMTAuOC01LjQtMTVMMzY4IDMyMGgzMy40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMzQ0IDIwOGgyNC45YzEyLjcgMCAyMy4xLTEwLjMgMjMuMS0yMy4xYzAtNS43LTIuMS0xMS4zLTYtMTUuNUwyMzcuNCA1LjlDMjM0IDIuMSAyMjkuMSAwIDIyNCAwcy0xMCAyLjEtMTMuNCA1Ljl6XCJdXG59O1xudmFyIGZhQnJpZGdlTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRjY1wiLCBcIk0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTM2djY0aC04Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMnYyNC42Yy05LjkgNS44LTE4LjIgMTQuMS0yMy44IDI0LjFjLTE3LjYtMjAtNDMuNC0zMi43LTcyLjItMzIuN2MtNTMgMC05NiA0My05NiA5NnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NGMwLTUzLTQzLTk2LTk2LTk2VjE2MGg3MlY5Nkg2NEM0Ni4zIDk2IDMyIDgxLjcgMzIgNjR6TTQwOCA5NnY2NGg4MFY5Nkg0MDh6bS00OCA2NFY5NkgyODB2NjRoODB6TTE1MiA5NnY2NGg4MFY5NkgxNTJ6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFTYWNrRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NhY2stZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc2XSwgXCJmODFkXCIsIFwiTTMyMCA5NkgxOTJMMTQ0LjYgMjQuOUMxMzcuNSAxNC4yIDE0NS4xIDAgMTU3LjkgMEgzNTQuMWMxMi44IDAgMjAuNCAxNC4yIDEzLjMgMjQuOUwzMjAgOTZ6TTE5MiAxMjhIMzIwYzMuOCAyLjUgOC4xIDUuMyAxMyA4LjRDMzg5LjcgMTcyLjcgNTEyIDI1MC45IDUxMiA0MTZjMCA1My00MyA5Ni05NiA5Nkg5NmMtNTMgMC05Ni00My05Ni05NkMwIDI1MC45IDEyMi4zIDE3Mi43IDE3OSAxMzYuNGwwIDAgMCAwYzQuOC0zLjEgOS4yLTUuOSAxMy04LjR6bTg0IDg4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjQyNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFY0MTAuMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bDAgMC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjIxNnpcIl1cbn07XG52YXIgZmFQZW5Ub1NxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW4tdG8tc3F1YXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJlZGl0XCJdLCBcImYwNDRcIiwgXCJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzYyLjMgNTEuN2w5Ny45IDk3LjkgMzAuMS0zMC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzNy43IDE3Mi4zIDMzOS43IDc0LjMgMTcyLjQgMjQxLjd6TTk2IDY0QzQzIDY0IDAgMTA3IDAgMTYwVjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM1MmM1MyAwIDk2LTQzIDk2LTk2VjMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDk2elwiXVxufTtcbnZhciBmYUVkaXQgPSBmYVBlblRvU3F1YXJlO1xudmFyIGZhQ2FyU2lkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItc2lkZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY2M10sIFwiZjVlNFwiLCBcIk0xNzEuMyA5NkgyMjR2OTZIMTExLjNsMzAuNC03NS45QzE0Ni41IDEwNCAxNTguMiA5NiAxNzEuMyA5NnpNMjcyIDE5MlY5Nmg4MS4yYzkuNyAwIDE4LjkgNC40IDI1IDEybDY3LjIgODRIMjcyem0yNTYuMiAxTDQyOC4yIDY4Yy0xOC4yLTIyLjgtNDUuOC0zNi03NS0zNkgxNzEuM2MtMzkuMyAwLTc0LjYgMjMuOS04OS4xIDYwLjNMNDAuNiAxOTYuNEMxNi44IDIwNS44IDAgMjI4LjkgMCAyNTZWMzY4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY1LjNjNy42IDQ1LjQgNDcuMSA4MCA5NC43IDgwczg3LjEtMzQuNiA5NC43LTgwSDM4NS4zYzcuNiA0NS40IDQ3LjEgODAgOTQuNyA4MHM4Ny4xLTM0LjYgOTQuNy04MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzIwYzAtNjUuMi00OC44LTExOS0xMTEuOC0xMjd6TTQzNC43IDM2OGE0OCA0OCAwIDEgMSA5MC41IDMyIDQ4IDQ4IDAgMSAxIC05MC41LTMyek0xNjAgMzM2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFTaGFyZU5vZGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoYXJlLW5vZGVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJzaGFyZS1hbHRcIl0sIFwiZjFlMFwiLCBcIk0zNTIgMjI0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDQgLjIgOCAuNyAxMS45bC05NC4xIDQ3QzE0NS40IDE3MC4yIDEyMS45IDE2MCA5NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjUuOSAwIDQ5LjQtMTAuMiA2Ni42LTI2LjlsOTQuMSA0N2MtLjUgMy45LS43IDcuOC0uNyAxMS45YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0yNS45IDAtNDkuNCAxMC4yLTY2LjYgMjYuOWwtOTQuMS00N2MuNS0zLjkgLjctNy44IC43LTExLjlzLS4yLTgtLjctMTEuOWw5NC4xLTQ3QzMwMi42IDIxMy44IDMyNi4xIDIyNCAzNTIgMjI0elwiXVxufTtcbnZhciBmYVNoYXJlQWx0ID0gZmFTaGFyZU5vZGVzO1xudmFyIGZhSGVhcnRDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZmZcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZ2LTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xdjUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTU3NiAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXJnbGFzc0hhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91cmdsYXNzLWhhbGYnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhvdXJnbGFzcy0yXCJdLCBcImYyNTJcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NFY3NWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMzIzLjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0Mzd2MTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjQgMzIwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjQzN2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFMMjM3LjMgMjU2bDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMVY2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjAgNjQgMzJ6TTk2IDc1VjY0SDI4OFY3NWMwIDE5LTUuNiAzNy40LTE2IDUzSDExMmMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMSAxNC45SDExMnpcIl1cbn07XG52YXIgZmFIb3VyZ2xhc3MyID0gZmFIb3VyZ2xhc3NIYWxmO1xudmFyIGZhTWljcm9zY29wZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Njb3BlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzAwXSwgXCJmNjEwXCIsIFwiTTE2MCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODhjMCAxNy43LTE0LjMgMzItMzIgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyIDQ0OEgzMjBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhWMTI4YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgNDkuMi0xOC41IDk0LTQ4LjkgMTI4SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjAgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTgwLTY0SDMwNGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhU2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaW5rJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDZkXCIsIFwiTTI4OCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NlYyODhIMTYwVjI2NGMwLTMwLjktMjUuMS01Ni01Ni01Nkg1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg0OGM0LjQgMCA4IDMuNiA4IDh2MjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjU2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MDBWMjY0YzAtNC40IDMuNi04IDgtOGg1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0MDhjLTMwLjkgMC01NiAyNS4xLTU2IDU2djI0SDI4OFY5NnpNNDgwIDQxNlYzODRIMzJ2MzJjMCA1MyA0MyA5NiA5NiA5NkgzODRjNTMgMCA5Ni00MyA5Ni05NnpcIl1cbn07XG52YXIgZmFCYWdTaG9wcGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWctc2hvcHBpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNob3BwaW5nLWJhZ1wiXSwgXCJmMjkwXCIsIFwiTTE2MCAxMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY0OEgxNjBWMTEyem0tNDggNDhINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM1MmM1MyAwIDk2LTQzIDk2LTk2VjIwOGMwLTI2LjUtMjEuNS00OC00OC00OEgzMzZWMTEyQzMzNiA1MC4xIDI4NS45IDAgMjI0IDBTMTEyIDUwLjEgMTEyIDExMnY0OHptMjQgNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0xNTIgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFTaG9wcGluZ0JhZyA9IGZhQmFnU2hvcHBpbmc7XG52YXIgZmFBcnJvd0Rvd25aQSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1kb3duLXotYScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS1kZXNjXCIsIFwic29ydC1hbHBoYS1kb3duLWFsdFwiXSwgXCJmODgxXCIsIFwiTTE4My42IDQ2OS42QzE3Ny41IDQ3Ni4yIDE2OSA0ODAgMTYwIDQ4MHMtMTcuNS0zLjgtMjMuNi0xMC40bC04OC05NmMtMTEuOS0xMy0xMS4xLTMzLjMgMi00NS4yczMzLjMtMTEuMSA0NS4yIDJMMTI4IDM2NS43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzY1LjdsMzIuNC0zNS40YzExLjktMTMgMzIuMi0xMy45IDQ1LjItMnMxMy45IDMyLjIgMiA0NS4ybC04OCA5NnpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDQyOS4zIDE2MEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzUyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUw0MDIuNyA5NkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem05NiAxOTJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w2NCAxMjggMTYgMzJjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM0w0NjAuMiA0NDhIMzcxLjhsLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDE2LTMyIDY0LTEyOGM1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43ek0zOTUuOCA0MDBoNDAuNEw0MTYgMzU5LjYgMzk1LjggNDAwelwiXVxufTtcbnZhciBmYVNvcnRBbHBoYURlc2MgPSBmYUFycm93RG93blpBO1xudmFyIGZhU29ydEFscGhhRG93bkFsdCA9IGZhQXJyb3dEb3duWkE7XG52YXIgZmFNaXR0ZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWl0dGVuJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmN2I1XCIsIFwiTTM1MiAzODRINjRMNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjNDMCA2Mi44IDYyLjggMCAxNDAuMyAwaDMuNGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJoMi44YzM0LjkgMCA2My4zIDI4LjMgNjMuMyA2My4zYzAgMTUuOS02IDMxLjItMTYuOCA0Mi45TDM1MiAzODR6TTMyIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OHpcIl1cbn07XG52YXIgZmFQZXJzb25SYXlzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1yYXlzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRkXCIsIFwiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45bC0yOC42IDQ3LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNTguMyA5N2M5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOUwzMjggMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgyNDh6TTcgN0MxNi40LTIuMyAzMS42LTIuMyA0MSA3bDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA0MUMtMi4zIDMxLjYtMi4zIDE2LjQgNyA3ek00NzEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDQ3MSA3ek03IDUwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODAtODBjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTQ2NCAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhVXNlcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYwYzBcIiwgXCJNMTQ0IDBhODAgODAgMCAxIDEgMCAxNjBBODAgODAgMCAxIDEgMTQ0IDB6TTUxMiAwYTgwIDgwIDAgMSAxIDAgMTYwQTgwIDgwIDAgMSAxIDUxMiAwek0wIDI5OC43QzAgMjM5LjggNDcuOCAxOTIgMTA2LjcgMTkyaDQyLjdjMTUuOSAwIDMxIDMuNSA0NC42IDkuN2MtMS4zIDcuMi0xLjkgMTQuNy0xLjkgMjIuM2MwIDM4LjIgMTYuOCA3Mi41IDQzLjMgOTZjLS4yIDAtLjQgMC0uNyAwSDIxLjNDOS42IDMyMCAwIDMxMC40IDAgMjk4Ljd6TTQwNS4zIDMyMGMtLjIgMC0uNCAwLS43IDBjMjYuNi0yMy41IDQzLjMtNTcuOCA0My4zLTk2YzAtNy42LS43LTE1LTEuOS0yMi4zYzEzLjYtNi4zIDI4LjctOS43IDQ0LjYtOS43aDQyLjdDNTkyLjIgMTkyIDY0MCAyMzkuOCA2NDAgMjk4LjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM0g0MDUuM3pNMjI0IDIyNGE5NiA5NiAwIDEgMSAxOTIgMCA5NiA5NiAwIDEgMSAtMTkyIDB6TTEyOCA0ODUuM0MxMjggNDExLjcgMTg3LjcgMzUyIDI2MS4zIDM1MkgzNzguN0M0NTIuMyAzNTIgNTEyIDQxMS43IDUxMiA0ODUuM2MwIDE0LjctMTEuOSAyNi43LTI2LjcgMjYuN0gxNTQuN2MtMTQuNyAwLTI2LjctMTEuOS0yNi43LTI2Ljd6XCJdXG59O1xudmFyIGZhRXllU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMDcwXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTI1LjYgMzg2LjdjMzkuNi00MC42IDY2LjQtODYuMSA3OS45LTExOC40YzMuMy03LjkgMy4zLTE2LjcgMC0yNC42Yy0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xQzQ2NS41IDY4LjggNDAwLjggMzIgMzIwIDMyYy02OC4yIDAtMTI1IDI2LjMtMTY5LjMgNjAuOEwzOC44IDUuMXpNMjIzLjEgMTQ5LjVDMjQ4LjYgMTI2LjIgMjgyLjcgMTEyIDMyMCAxMTJjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRjMCAyNC45LTYuMyA0OC4zLTE3LjQgNjguN0w0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNsLTkwLjMtNzAuOHpNMzczIDM4OS45Yy0xNi40IDYuNS0zNC4zIDEwLjEtNTMgMTAuMWMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDRjMC02LjkgLjUtMTMuNiAxLjQtMjAuMkw4My4xIDE2MS41QzYwLjMgMTkxLjIgNDQgMjIwLjggMzQuNSAyNDMuN2MtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjZjMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMUMxNzQuNSA0NDMuMiAyMzkuMiA0ODAgMzIwIDQ4MGM0Ny44IDAgODkuOS0xMi45IDEyNi4yLTMyLjVMMzczIDM4OS45elwiXVxufTtcbnZhciBmYUZsYXNrVmlhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFzay12aWFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGYzXCIsIFwiTTE3NSAzODkuNGMtOS44IDE2LTE1IDM0LjMtMTUgNTMuMWMtMTAgMy41LTIwLjggNS41LTMyIDUuNWMtNTMgMC05Ni00My05Ni05NlY2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwSDk2aDY0IDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjMwOS45bC00OSA3OS42ek05NiA2NHY5Nmg2NFY2NEg5NnpNMzUyIDBINDgwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjIxNC45TDYyOS43IDQwNi4yYzYuNyAxMC45IDEwLjMgMjMuNSAxMC4zIDM2LjRjMCAzOC4zLTMxLjEgNjkuNC02OS40IDY5LjRIMjYxLjRjLTM4LjMgMC02OS40LTMxLjEtNjkuNC02OS40YzAtMTIuOCAzLjYtMjUuNCAxMC4zLTM2LjRMMzIwIDIxNC45VjY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyem0zMiA2NFYyMjRjMCA1LjktMS42IDExLjctNC43IDE2LjhMMzMwLjUgMzIwaDE3MWwtNDguOC03OS4yYy0zLjEtNS00LjctMTAuOC00LjctMTYuOFY2NEgzODR6XCJdXG59O1xudmFyIGZhSGFuZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzA2LCA5OTk1LCBcImhhbmQtcGFwZXJcIl0sIFwiZjI1NlwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjMzNmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40cy0xNC42IDQxLjMgMS40IDU2LjZMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRIMzA0Yzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2VjEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMyelwiXVxufTtcbnZhciBmYUhhbmRQYXBlciA9IGZhSGFuZDtcbnZhciBmYU9tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ29tJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzI5XSwgXCJmNjc5XCIsIFwiTTM3OS4zIDQuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTE2IDE2Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxNiAxNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGwxNi0xNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTYtMTZ6TTI4MSA2Ni43Yy0yLjItMS41LTQuOS0yLjUtNy43LTIuN2MtLjYgMC0xLjMtLjEtMS45IDBjLTMuOSAuMi03LjQgMS43LTEwLjEgNC4yYy0uOSAuOC0xLjYgMS43LTIuMyAyLjZjLTEuNyAyLjQtMi43IDUuMy0yLjkgOC41YzAgLjcgMCAxLjQgMCAyLjFjLjIgMi4yIC45IDQuMyAxLjkgNi4ybC4zIC42Yy4zIC42IC44IDEuNCAxLjQgMi40YzEuMiAyIDIuOSA0LjggNS4xIDguMmM0LjQgNi43IDExLjEgMTUuNSAyMCAyNC40QzMwMi40IDE0MS4xIDMzMC4zIDE2MCAzNjggMTYwYzMxLjIgMCA1Ni42LTEwLjQgNzMuOS0yMC4yYzguNy01IDE1LjYtOS45IDIwLjQtMTMuOGMyLjQtMS45IDQuMy0zLjYgNS43LTQuOWMuNy0uNiAxLjMtMS4yIDEuNy0xLjZsLjYtLjUgLjEtLjEgLjEtLjEgMCAwIDAgMGM1LjktNS44IDkuNS0xMy45IDkuNS0yMi44YzAtMTcuNy0xNC4zLTMyLTMyLTMyYy04LjcgMC0xNi43IDMuNS0yMi40IDkuMmMtLjEgLjEtLjIgLjItLjUgLjRjLS41IC41LTEuNSAxLjMtMi44IDIuNGMtMi43IDIuMi02LjggNS4yLTEyLjEgOC4yQzM5OS40IDkwLjQgMzg0LjggOTYgMzY4IDk2Yy0yMC44IDAtNDIuNC03LTU5LjUtMTQuNmMtOC40LTMuNy0xNS40LTcuNS0yMC4zLTEwLjNjLTIuNC0xLjQtNC4zLTIuNS01LjYtMy4zYy0uNi0uNC0xLjEtLjctMS40LS45bC0uMy0uMnpNMTE1LjIgMTY5LjZjOC02IDE3LjktOS42IDI4LjgtOS42YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDEwOS44Yy03LjYgMC0xMy44IDYuMi0xMy44IDEzLjhjMCAxLjUgLjIgMi45IC43IDQuNGw4IDI0YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlIMTQ0aDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy01MC44IDAtODIuNy0yMS41LTEwMi4yLTQyLjhjLTkuOS0xMC44LTE2LjYtMjEuNi0yMC45LTI5LjdjLTIuMS00LTMuNi03LjMtNC41LTkuNmMtLjUtMS4xLS44LTItMS0yLjVsLS4yLS41Yy0uMy0uOS0uNy0xLjgtMS4xLTIuNmMtMS4yLTIuMi0yLjgtNC00LjctNS40Yy0xLjktMS40LTQuMS0yLjMtNi41LTIuOGMtMS40LS4zLTIuOS0uMy00LjQtLjJjLTIuNSAuMi00LjggMS02LjggMi4zYy0xLjEgLjctMi4yIDEuNS0zLjEgMi41Yy0yLjQgMi41LTQuMSA1LjgtNC41IDkuNWMtLjEgLjYtLjEgMS4xLS4xIDEuN2MwIDAgMCAwIDAgMGMwIC44IC4xIDEuNyAuMiAyLjVsMCAuMWMwIC4zIC4xIC44IC4yIDEuM2MuMiAxLjEgLjQgMi43IC44IDQuNmMuOCAzLjkgMiA5LjQgMy45IDE1LjljMy44IDEzIDEwLjMgMzAuNCAyMS4zIDQ4QzQ4LjcgNDc2LjIgODkuNCA1MTIgMTYwIDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTIzLjMtNi4yLTQ1LjItMTcuMS02NGgyMi42YzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI2LjUtMjYuNWM2LTYgMTQuMS05LjQgMjIuNi05LjRINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyYy0yNS43IDAtNDEuNC0xMi41LTUxLjItMjUuNmMtNS02LjctOC40LTEzLjQtMTAuNS0xOC42Yy0xLjEtMi41LTEuOC00LjYtMi4yLTZjLS4yLS43LS40LTEuMi0uNS0xLjVsLS4xLS4yYy0uMy0xLjMtLjgtMi42LTEuNS0zLjhjLTEuMS0yLTIuNi0zLjgtNC40LTUuMWMtMi43LTItNi0zLjItOS42LTMuMmwtLjIgMGMtOCAuMS0xNC42IDYuMS0xNS42IDEzLjlsMCAwYzAgLjMtLjEgLjYtLjIgMS4xYy0uMSAuOS0uMyAyLjEtLjQgMy42Yy0uMyAzLS42IDcuMy0uNiAxMi40YzAgMTAuMSAxLjEgMjMuOSA1LjggMzguMWM0LjggMTQuMyAxMy40IDI5LjMgMjguNiA0MC43QzM2OC43IDQ3My4zIDM4OS4zIDQ4MCA0MTYgNDgwYzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZoLTUuNWMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFsLTI2LjUgMjYuNWMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDI0NS4yYzYuOS0xNC41IDEwLjgtMzAuOCAxMC44LTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyYy0yNS4yIDAtNDguNSA4LjMtNjcuMiAyMi40Yy0xNC4xIDEwLjYtMTcgMzAuNy02LjQgNDQuOHMzMC43IDE3IDQ0LjggNi40elwiXVxufTtcbnZhciBmYVdvcm0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd29ybScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU5OVwiLCBcIk0yNTYgOTZjMC01MyA0My05NiA5Ni05NmgzOC40QzQzOS45IDAgNDgwIDQwLjEgNDgwIDg5LjZWMTc2djE2VjM3NmMwIDc1LjEtNjAuOSAxMzYtMTM2IDEzNnMtMTM2LTYwLjktMTM2LTEzNlYyOTZjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjI5NmMwLTc1LjEgNjAuOS0xMzYgMTM2LTEzNnMxMzYgNjAuOSAxMzYgMTM2djgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBWMTkySDM1MmMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFIb3VzZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUwYlwiLCBcIk0zMjAuNyAzNTJjOC4xLTg5LjcgODMuNS0xNjAgMTc1LjMtMTYwYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRsLjcgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhUGx1ZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbHVnJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjY4XSwgXCJmMWU2XCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44QzI5NyAzOTggMzUyIDMzMy40IDM1MiAyNTZWMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyelwiXVxufTtcbnZhciBmYUNoZXZyb25VcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGV2cm9uLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDc3XCIsIFwiTTIzMy40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDE3My4zIDg2LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE5Mi0xOTJ6XCJdXG59O1xudmFyIGZhSGFuZFNwb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BvY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0MDZdLCBcImYyNTlcIiwgXCJNMjQ2LjkgMjMuN0MyNDIuMyA2LjYgMjI0LjgtMy41IDIwNy43IDEuMXMtMjcuMiAyMi4xLTIyLjYgMzkuMkwyMzggMjM3LjhjMi41IDkuMi00LjUgMTguMi0xNCAxOC4yYy02LjQgMC0xMi00LjItMTMuOS0xMC4zTDE2Ni42IDEwMi43Yy01LjEtMTYuOS0yMy0yNi40LTM5LjktMjEuM3MtMjYuNCAyMy0yMS4zIDM5LjlsNjIuOCAyMDYuNGMyLjQgNy45LTcuMiAxMy44LTEzLjIgOC4xTDk5LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNHMtMTQuNiA0MS4zIDEuNCA1Ni42TDE1Ni44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0aDEwLjkgOC4yYy4xIDAgLjEtLjEgLjEtLjFzLjEtLjEgLjEtLjFjNTguMy0zLjUgMTA4LjYtNDMuMiAxMjUuMy05OS43bDgxLjItMjc1YzUtMTYuOS00LjctMzQuNy0yMS42LTM5LjhzLTM0LjcgNC43LTM5LjggMjEuNkw0NDMuNSAyNDcuMWMtMS42IDUuMy02LjQgOC45LTEyIDguOWMtNy45IDAtMTMuOC03LjMtMTIuMi0xNS4xbDM2LTE3MC4zYzMuNy0xNy4zLTcuNC0zNC4zLTI0LjctMzcuOXMtMzQuMyA3LjQtMzcuOSAyNC43TDM1NS4xIDIzNS4xYy0yLjYgMTIuMi0xMy4zIDIwLjktMjUuOCAyMC45Yy0xMS45IDAtMjIuNC04LTI1LjQtMTkuNWwtNTctMjEyLjh6XCJdXG59O1xudmFyIGZhU3RvcHdhdGNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCBcImYyZjJcIiwgXCJNMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMTZWOTguNEM5Mi4zIDExMy44IDE2IDIwMCAxNiAzMDRjMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4czIwOC05My4xIDIwOC0yMDhjMC00MS44LTEyLjMtODAuNy0zMy41LTExMy4ybDI0LjEtMjQuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzNTUuNyAxNDNjLTI4LjEtMjMtNjIuMi0zOC44LTk5LjctNDQuNlY2NGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMjQgMTc2em03MiAxOTJWMzIwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE5MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZhY2VLaXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Uta2lzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgXCJraXNzXCJdLCBcImY1OTZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTQ4LjctMTk4LjNjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40Yy0yLjcgMS41LTUuNyAzLTguNyA0LjNjMy4xIDEuMyA2IDIuNyA4LjcgNC4zYzYuNiAzLjcgMTIuNSA4LjIgMTYuNyAxMy40YzQuMyA1LjEgNy4zIDExLjQgNy4zIDE4LjNzLTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNEMyNzQuNyA0NDMuMSAyNTcuNCA0NDggMjQwIDQ0OGMtMy42IDAtNi44LTIuNS03LjctNnMuNi03LjIgMy44LTlsMCAwIDAgMCAwIDAgMCAwIC4yLS4xYy4yLS4xIC41LS4zIC45LS41Yy44LS41IDItMS4yIDMuNC0yLjFjMi44LTEuOSA2LjUtNC41IDEwLjItNy42YzMuNy0zLjEgNy4yLTYuNiA5LjYtMTAuMWMyLjUtMy41IDMuNS02LjQgMy41LTguNnMtMS01LTMuNS04LjZjLTIuNS0zLjUtNS45LTYuOS05LjYtMTAuMWMtMy43LTMuMS03LjQtNS43LTEwLjItNy42Yy0xLjQtLjktMi42LTEuNi0zLjQtMi4xYy0uNC0uMi0uNy0uNC0uOS0uNWwtLjItLjEgMCAwIDAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03bDAgMCAwIDAgMCAwIDAgMCAwIDAgLjItLjEgLjMtLjIgLjYtLjRjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFsLS40LS4zLS41LS4zLS4yLS4xIDAgMCAwIDAgMCAwYy0zLjItMS44LTQuNy01LjUtMy44LTlzNC4xLTYgNy43LTZjMTcuNCAwIDM0LjcgNC45IDQ3LjkgMTIuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNHpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhS2lzcyA9IGZhRmFjZUtpc3M7XG52YXIgZmFCcmlkZ2VDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGNiXCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w1MTguNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDk2IDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDczLjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0OTYgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFGYWNlR3JpblRvbmd1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tdG9uZ3VlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCBcImdyaW4tdG9uZ3VlXCJdLCBcImY1ODlcIiwgXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OFY0MDAuN2MtMjQtMTcuNS00My4xLTQxLjQtNTQuOC02OS4yYy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOWMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdjLTExLjggMjgtMzEuMSA1Mi01NS40IDY5LjZWNDQ4YzAgMTguNi01LjMgMzYtMTQuNSA1MC44QzQzOC45IDQ2NC43IDUxMiAzNjguOSA1MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6bTE3Ni40LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTMyMCA0NDhWNDAyLjZjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZoLTJjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjljLTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDBjLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjloLTJjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUdyaW5Ub25ndWUgPSBmYUZhY2VHcmluVG9uZ3VlO1xudmFyIGZhQ2hlc3NCaXNob3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3MtYmlzaG9wJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTgyMV0sIFwiZjQzYVwiLCBcIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJjMCAxNi4xIDExLjkgMjkuNCAyNy40IDMxLjdDNzguNCAxMDYuOCA4IDE5MCA4IDI4OGMwIDQ3LjQgMzAuOCA3Mi4zIDU2IDg0LjdWNDAwSDI1NlYzNzIuN2MyNS4yLTEyLjUgNTYtMzcuNCA1Ni04NC43YzAtMzcuMy0xMC4yLTcyLjQtMjUuMy0xMDQuMWwtOTkuNCA5OS40Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDI3MC44IDE1NC42Yy0yMy4yLTM4LjEtNTEuOC02OS41LTc0LjItOTAuOUMyMTIuMSA2MS40IDIyNCA0OC4xIDIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjh6TTQ4IDQzMkw2LjYgNDczLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMwIDUwMS45IDEwLjEgNTEyIDIyLjYgNTEySDI5Ny40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMjcyIDQzMkg0OHpcIl1cbn07XG52YXIgZmFGYWNlR3JpbldpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdyaW4td2lua1wiXSwgXCJmNThjXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6bS0xNi45LTc5LjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwYy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhR3JpbldpbmsgPSBmYUZhY2VHcmluV2luaztcbnZhciBmYUVhckRlYWYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFyLWRlYWYnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRlYWZcIiwgXCJkZWFmbmVzc1wiLCBcImhhcmQtb2YtaGVhcmluZ1wiXSwgXCJmMmE0XCIsIFwiTTUwMi42IDU0LjZsLTQwIDQwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MC00MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tMzIwIDMyMGwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41Yy0xLjkgMTcuNi0xNy44IDMwLjItMzUuMyAyOC4zcy0zMC4yLTE3LjgtMjguMy0zNS4zQzc0LjggMTMyLjUgMTQ5LjQgNjQgMjQwIDY0Yzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2YzAgNDYtMTcuNyA4Ny45LTQ2LjYgMTE5LjNjLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdWNDAwYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4YzE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOWMwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl1cbn07XG52YXIgZmFEZWFmID0gZmFFYXJEZWFmO1xudmFyIGZhRGVhZm5lc3MgPSBmYUVhckRlYWY7XG52YXIgZmFIYXJkT2ZIZWFyaW5nID0gZmFFYXJEZWFmO1xudmFyIGZhUm9hZENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY0XCIsIFwiTTIxMy4yIDMySDI4OFY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyaDc0LjhjMjcuMSAwIDUxLjMgMTcuMSA2MC4zIDQyLjZsNDIuNyAxMjAuNmMtMTAuOS0yLjEtMjIuMi0zLjItMzMuOC0zLjJjLTU5LjUgMC0xMTIuMSAyOS42LTE0NCA3NC44VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmMyLjMgMCA0LjYtLjMgNi44LS43Yy00LjUgMTUuNS02LjggMzEuOC02LjggNDguN2MwIDUuNCAuMiAxMC43IC43IDE2bC0uNyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NEg4Ni42QzU2LjUgNDgwIDMyIDQ1NS41IDMyIDQyNS40YzAtNi4yIDEuMS0xMi40IDMuMS0xOC4yTDE1Mi45IDc0LjZDMTYyIDQ5LjEgMTg2LjEgMzIgMjEzLjIgMzJ6TTM1MiAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDgwIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhRGljZUZpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1maXZlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MF0sIFwiZjUyM1wiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNOTYgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC02NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVNxdWFyZVJzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcnNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJyc3Mtc3F1YXJlXCJdLCBcImYxNDNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiAxMzZjMC0xMy4zIDEwLjctMjQgMjQtMjRjMTM3IDAgMjQ4IDExMSAyNDggMjQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTEwLjUtODkuNS0yMDAtMjAwLTIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYVJzc1NxdWFyZSA9IGZhU3F1YXJlUnNzO1xudmFyIGZhTGFuZE1pbmVPbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5kLW1pbmUtb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MWJcIiwgXCJNMzQ0IDI0VjE2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek0xOTIgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnYzMkgxOTJWMzIwem0tNzcuMyA5MC41YzguMS0xNi4zIDI0LjgtMjYuNSA0Mi45LTI2LjVINDgyLjNjMTguMiAwIDM0LjggMTAuMyA0Mi45IDI2LjVsMjcuNiA1NS4yQzU2My41IDQ4NyA1NDggNTEyIDUyNC4yIDUxMkgxMTUuOGMtMjMuOCAwLTM5LjMtMjUtMjguNi00Ni4zbDI3LjYtNTUuMnpNMzYuMyAxMzguM2M3LjUtMTAuOSAyMi41LTEzLjYgMzMuNC02LjFsMTA0IDcyYzEwLjkgNy41IDEzLjYgMjIuNSA2LjEgMzMuNHMtMjIuNSAxMy42LTMzLjQgNi4xbC0xMDQtNzJjLTEwLjktNy41LTEzLjYtMjIuNS02LjEtMzMuNHptNTM0LjEtNi4xYzEwLjktNy41IDI1LjgtNC44IDMzLjQgNi4xczQuOCAyNS44LTYuMSAzMy40bC0xMDQgNzJjLTEwLjkgNy41LTI1LjggNC44LTMzLjQtNi4xcy00LjgtMjUuOCA2LjEtMzMuNGwxMDQtNzJ6XCJdXG59O1xudmFyIGZhSUN1cnNvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpLWN1cnNvcicsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjI0NlwiLCBcIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM1YyMjRINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIOTZ2OTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43czE2LjkgMzAuNyAzNC41IDI5LjJsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45YzIxLjIgMjQgNTEuMiA0MC4xIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdWMjg4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MFYxMjguM2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdDMTc5LjIgMy42IDE0OS4yIDE5LjcgMTI4IDQzLjdjLTIxLjItMjQtNTEuMi00MC04NS40LTQyLjlsLTgtLjdDMTctMS40IDEuNiAxMS43IC4xIDI5LjN6XCJdXG59O1xudmFyIGZhU3RhbXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhbXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YmZcIiwgXCJNMzEyIDIwMS44YzAtMTcuNCA5LjItMzMuMiAxOS45LTQ3QzM0NC41IDEzOC41IDM1MiAxMTguMSAzNTIgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOGMxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDdjMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJIMTEyQzUwLjEgMjU2IDAgMzA2LjEgMCAzNjhjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDEzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zYzAtNjEuOS01MC4xLTExMi0xMTItMTEySDM2Ni4yYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNDE2IDQxNnYzMkg5NlY0MTZINDE2elwiXVxufTtcbnZhciBmYVN0YWlycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFpcnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUyODlcIiwgXCJNMzg0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NDh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NlYzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2VjY0elwiXVxufTtcbnZhciBmYUkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwNV0sIFwiNDlcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2aDk2VjQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyVjk2aDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MCAzMnpcIl1cbn07XG52YXIgZmFIcnl2bmlhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdocnl2bmlhLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4MzcyLCBcImhyeXZuaWFcIl0sIFwiZjZmMlwiLCBcIk0xMjEuOSAxMTYuMkMxMzguMyAxMDMuMSAxNTguNyA5NiAxNzkuNiA5NkgyMjNjMjcuMSAwIDQ5IDIxLjkgNDkgNDljMCAxMS41LTQgMjIuNC0xMS4xIDMxSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1NS41bC01MC42IDI4LjljLTEuNyAxLTMuNCAyLTUuMSAzLjFIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTIuM2MtMi44IDkuOS00LjMgMjAuNC00LjMgMzFjMCA2Mi40IDUwLjYgMTEzIDExMyAxMTNoNDMuNGMzNS41IDAgNzAtMTIuMSA5Ny43LTM0LjNMMzA4IDQ0MWMxMy44LTExIDE2LTMxLjIgNS00NXMtMzEuMi0xNi00NS01bC01LjkgNC43Yy0xNi40IDEzLjEtMzYuNyAyMC4yLTU3LjcgMjAuMkgxNjFjLTI3LjEgMC00OS0yMS45LTQ5LTQ5YzAtMTEuNSA0LTIyLjQgMTEuMS0zMUgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjI4LjVsNTAuNi0yOC45YzEuNy0xIDMuNC0yIDUuMS0zLjFIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMzMS43YzIuOC0xMCA0LjMtMjAuNCA0LjMtMzFjMC02Mi40LTUwLjYtMTEzLTExMy0xMTNIMTc5LjZjLTM1LjUgMC03MCAxMi4xLTk3LjcgMzQuM0w3NiA3MWMtMTMuOCAxMS0xNiAzMS4yLTUgNDVzMzEuMiAxNiA0NSA1bDUuOS00Ljd6XCJdXG59O1xudmFyIGZhSHJ5dm5pYSA9IGZhSHJ5dm5pYVNpZ247XG52YXIgZmFQaWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaWxscycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjQ4NFwiLCBcIk0xMTIgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI1Nmg5NlYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTAgMTQ0QzAgODIuMSA1MC4xIDMyIDExMiAzMnMxMTIgNTAuMSAxMTIgMTEyVjM2OGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMwIDQyOS45IDAgMzY4VjE0NHpNNTU0LjkgMzk5LjRjLTcuMSAxMi4zLTIzLjcgMTMuMS0zMy44IDMuMUwzMzMuNSAyMTQuOWMtMTAtMTAtOS4zLTI2LjcgMy4xLTMzLjhDMzYwIDE2Ny43IDM4Ny4xIDE2MCA0MTYgMTYwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMjguOS03LjcgNTYtMjEuMSA3OS40em0tNTkuNSA1OS41QzQ3MiA0NzIuMyA0NDQuOSA0ODAgNDE2IDQ4MGMtODguNCAwLTE2MC03MS42LTE2MC0xNjBjMC0yOC45IDcuNy01NiAyMS4xLTc5LjRjNy4xLTEyLjMgMjMuNy0xMy4xIDMzLjgtMy4xTDQ5OC41IDQyNS4xYzEwIDEwIDkuMyAyNi43LTMuMSAzMy44elwiXVxufTtcbnZhciBmYUZhY2VHcmluV2lkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4td2lkZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxNSwgXCJncmluLWFsdFwiXSwgXCJmNTgxXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTIwOCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NHMzMiAyOC43IDMyIDY0em0xMjggNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjRzMzIgMjguNyAzMiA2NHMtMTQuMyA2NC0zMiA2NHpcIl1cbn07XG52YXIgZmFHcmluQWx0ID0gZmFGYWNlR3JpbldpZGU7XG52YXIgZmFUb290aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b290aCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTQ2M10sIFwiZjVjOVwiLCBcIk0xODYuMSA1Mi4xQzE2OS4zIDM5LjEgMTQ4LjcgMzIgMTI3LjUgMzJDNzQuNyAzMiAzMiA3NC43IDMyIDEyNy41djYuMmMwIDE1LjggMy43IDMxLjMgMTAuNyA0NS41bDIzLjUgNDcuMWM0LjUgOC45IDcuNiAxOC40IDkuNCAyOC4ybDM2LjcgMjA1LjhjMiAxMS4yIDExLjYgMTkuNCAyMi45IDE5LjhzMjEuNC03LjQgMjQtMTguNGwyOC45LTEyMS4zQzE5Mi4yIDMyMy43IDIwNyAzMTIgMjI0IDMxMnMzMS44IDExLjcgMzUuOCAyOC4zbDI4LjkgMTIxLjNjMi42IDExLjEgMTIuNyAxOC44IDI0IDE4LjRzMjAuOS04LjYgMjIuOS0xOS44bDM2LjctMjA1LjhjMS44LTkuOCA0LjktMTkuMyA5LjQtMjguMmwyMy41LTQ3LjFjNy4xLTE0LjEgMTAuNy0yOS43IDEwLjctNDUuNXYtMi4xYzAtNTUtNDQuNi05OS42LTk5LjYtOTkuNmMtMjQuMSAwLTQ3LjQgOC44LTY1LjYgMjQuNmwtMy4yIDIuOCAxOS41IDE1LjJjNyA1LjQgOC4yIDE1LjUgMi44IDIyLjVzLTE1LjUgOC4yLTIyLjUgMi44bC0yNC40LTE5LTM3LTI4Ljh6XCJdXG59O1xudmFyIGZhViA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTE4XSwgXCI1NlwiLCBcIk0xOS43IDM0LjVjMTYuMy02LjggMzUgLjkgNDEuOCAxNy4yTDE5MiAzNjQuOCAzMjIuNSA1MS43YzYuOC0xNi4zIDI1LjUtMjQgNDEuOC0xNy4yczI0IDI1LjUgMTcuMiA0MS44bC0xNjAgMzg0Yy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN3MtMjQuNi03LjgtMjkuNS0xOS43TDIuNSA3Ni4zYy02LjgtMTYuMyAuOS0zNSAxNy4yLTQxLjh6XCJdXG59O1xudmFyIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYW5nbGFkZXNoaS10YWthLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUyZTZcIiwgXCJNMzYgMzIuMkMxOC40IDMwLjEgMi40IDQyLjUgLjIgNjBTMTAuNSA5My42IDI4IDk1LjhsNy45IDFjMTYgMiAyOCAxNS42IDI4IDMxLjhWMTYwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0VjM4NGMwIDUzIDQzIDk2IDk2IDk2aDMyYzEwNiAwIDE5Mi04NiAxOTItMTkyVjI1NmMwLTUzLTQzLTk2LTk2LTk2SDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnYzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOEgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIyNGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMjhWMTI4LjVjMC00OC40LTM2LjEtODkuMy04NC4xLTk1LjNsLTcuOS0xelwiXVxufTtcbnZhciBmYUJpY3ljbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmljeWNsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MF0sIFwiZjIwNlwiLCBcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMjUuN2wzNC42IDY0SDIyMi45bC0yNy40LTM4QzE5MSA5OS43IDE4My43IDk2IDE3NiA5NkgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNDMuN2wyMi4xIDMwLjctMjYuNiA1My4xYy0xMC0yLjUtMjAuNS0zLjgtMzEuMi0zLjhDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzY1LjMgMCAxMTkuMS00OC45IDEyNy0xMTJoNDljOC41IDAgMTYuMy00LjUgMjAuNy0xMS44bDg0LjgtMTQzLjUgMjEuNyA0MC4xQzQwMi40IDI3Ni4zIDM4NCAzMTIgMzg0IDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4Yy0xMy41IDAtMjYuNSAyLjEtMzguNyA2TDM3NS40IDQ4LjhDMzY5LjggMzguNCAzNTkgMzIgMzQ3LjIgMzJIMzEyek00NTguNiAzMDMuN2wzMi4zIDU5LjdjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0zMi4zLTU5LjdjMy42LS42IDcuNC0uOSAxMS4yLS45YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyYzAtMTguNiA3LTM1LjUgMTguNi00OC4zek0xMzMuMiAzNjhoNjVjLTcuMyAzMi4xLTM2IDU2LTcwLjIgNTZjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMS43IDAgMy40IC4xIDUuMSAuMmwtMjQuMiA0OC41Yy05IDE4LjEgNC4xIDM5LjQgMjQuMyAzOS40em0zMy43LTQ4bDUwLjctMTAxLjMgNzIuOSAxMDEuMi0uMSAuMUgxNjYuOHptOTAuNi0xMjhIMzY1LjlMMzE3IDI3NC44IDI1Ny40IDE5MnpcIl1cbn07XG52YXIgZmFTdGFmZlNuYWtlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YWZmLXNuYWtlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJyb2QtYXNjbGVwaXVzXCIsIFwicm9kLXNuYWtlXCIsIFwic3RhZmYtYWVzY3VsYXBpdXNcIl0sIFwiZTU3OVwiLCBcIk0yMjIuNiA0My4ybC0uMSA0LjhIMjg4YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDI0OFYxNjBoNDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjQ4IDIyMGwtNC41IDE0NEgyNTZjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIMjQwVjM4NGgxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgyMTNsLTMuMSA5OS41TDIwOC41IDQ5NWwwIDFjLS4zIDguOS03LjYgMTYtMTYuNSAxNnMtMTYuMi03LjEtMTYuNS0xNmwwLTEtMS0zMUgxMzZjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBoMzZsLTEtMzJIMTUyYy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3LjEgODAtOTQuN1YyNTZjMCA4LjggNy4yIDE2IDE2IDE2aDE2LjVMMTY0IDEyOEgxMzYgMTIyLjZjLTkgMTguOS0yOC4zIDMyLTUwLjYgMzJINTZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2UzI1LjEgNDggNTYgNDhoOCA4IDg5LjVsLS4xLTQuOEwxNjEgMzJjMC0uNyAwLTEuMyAwLTEuOWMuNS0xNi42IDE0LjEtMzAgMzEtMzBzMzAuNSAxMy40IDMxIDMwYzAgLjYgMCAxLjMgMCAxLjlsLS40IDExLjJ6TTY0IDExMmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhUm9kQXNjbGVwaXVzID0gZmFTdGFmZlNuYWtlO1xudmFyIGZhUm9kU25ha2UgPSBmYVN0YWZmU25ha2U7XG52YXIgZmFTdGFmZkFlc2N1bGFwaXVzID0gZmFTdGFmZlNuYWtlO1xudmFyIGZhSGVhZFNpZGVDb3VnaFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaC1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MlwiLCBcIk00NDggMzI1LjhsNDQgMzQuNWM4LjEgMS40IDE0LjggNi44IDE4IDE0LjFMNTUyLjkgNDA4YzEwLjYgLjQgMTkuNSA3LjYgMjIuMiAxNy40bDM5LjEgMzAuNmMuNiAwIDEuMi0uMSAxLjgtLjFjMTEuMSAwIDIwLjQgNy41IDIzLjIgMTcuOGgtMy45YzYuMiA4LjUgNi40IDIwLjQtLjQgMjljLTguMiAxMC40LTIzLjMgMTIuMy0zMy43IDQuMUw5LjIgNDIuOUMtMS4yIDM0LjctMy4xIDE5LjYgNS4xIDkuMlMyOC40LTMuMSAzOC44IDUuMUw4OS42IDQ0LjlDMTI3IDE2LjcgMTczLjUgMCAyMjQgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCAyNC4yLTE5LjYgNDMuOC00My44IDQzLjhINDQ4djAgNS44ek0wIDIyNC4yYzAtMzguNyA5LjgtNzUuMSAyNy4xLTEwNi45TDM0MS44IDM2NS4zbC0yLjUgLjNjLTExIDEuNC0xOS4yIDEwLjctMTkuMiAyMS44YzAgMTEuNiA5IDIxLjIgMjAuNiAyMS45bDYyIDMuOSA0MyAzMy45QzQzOS4zIDQ2Ni4yIDQyMS4yIDQ4MCA0MDAgNDgwSDMyMHY4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDI1NnYwSDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDcuM2MwLTE2LjctNi45LTMyLjUtMTcuMS00NS44QzE2LjYgMzIyLjQgMCAyNzQuMSAwIDIyNC4yek02MTYgMzYwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTY0LTQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFUcnVja01lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbWVkaWNhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY1NywgXCJhbWJ1bGFuY2VcIl0sIFwiZjBmOVwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgzNjhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWOTZoNTAuN2MxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w1ODkuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YyNTZ2MzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTc2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDI1NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTQxNiAyNTZINTQ0VjIzNy4zTDQ2Ni43IDE2MEg0MTZ2OTZ6TTE2MCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTc2IDgwdjQ4bC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTkyaDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYxNDRjMC04LjgtNy4yLTE2LTE2LTE2SDI0MFY4MGMwLTguOC03LjItMTYtMTYtMTZIMTkyYy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQW1idWxhbmNlID0gZmFUcnVja01lZGljYWw7XG52YXIgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OThcIiwgXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMjIuNSAyMi41IDUzLjMgMzEuNSA4Mi40IDI3YzAtMSAwLTIuMSAwLTMuMWMwLTMzLjEgOS4xLTY0LjEgMjUtOTAuNmMtMTUuNS04LjctMzIuNS0xMy44LTQ5LjgtMTUuNWwzMS45LTMxLjkgMTIuMiAxMi4yYzYgNiAxMi42IDExLjEgMTkuNyAxNS4yYzI3LjUtMzQgNjcuMy01Ny41IDExMi42LTYzLjhjLTQuMS0zLjgtOC40LTcuMy0xMi45LTEwLjVMNTA1IDEzN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01OS40IDU5LjRjLTIwLjYtNC40LTQyLTMuNy02Mi4zIDIuMWM2LjEtMjEuMyA2LjYtNDMuOCAxLjQtNjUuM0w0MDkgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMjkuMSA1Mi45Yy0zLjctNS03LjgtOS44LTEyLjQtMTQuM0wzMDUuNSAyNy4zek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYVNub3dtYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc25vd21hbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MzEsIDk5MjRdLCBcImY3ZDBcIiwgXCJNMzQxLjEgMTQwLjZjLTIgMy45LTEuNiA4LjYgMS4yIDEyYzcgOC41IDEyLjkgMTguMSAxNy4yIDI4LjRMNDA4IDE2MC4yVjEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djE5LjZsMjIuNS05LjdjMTIuMi01LjIgMjYuMyAuNCAzMS41IDEyLjZzLS40IDI2LjMtMTIuNiAzMS41bC01NiAyNC03My42IDMxLjVjLS41IDkuNS0yLjEgMTguNi00LjggMjcuM2MtMS4yIDMuOC0uMSA4IDIuOCAxMC44QzM5Ni43IDI5Ni45IDQxNiAzMzguMiA0MTYgMzg0YzAgNDQuNy0xOC4zIDg1LTQ3LjggMTE0LjFjLTkuOSA5LjctMjMuNyAxMy45LTM3LjUgMTMuOUgxODEuM2MtMTMuOSAwLTI3LjctNC4yLTM3LjUtMTMuOUMxMTQuMyA0NjkgOTYgNDI4LjcgOTYgMzg0YzAtNDUuOCAxOS4zLTg3LjEgNTAuMS0xMTYuM2MyLjktMi44IDQtNi45IDIuOC0xMC44Yy0yLjctOC43LTQuMy0xNy45LTQuOC0yNy4zTDcwLjUgMTk4LjFsLTU2LTI0QzIuNCAxNjguOC0zLjMgMTU0LjcgMS45IDE0Mi41czE5LjMtMTcuOCAzMS41LTEyLjZMNTYgMTM5LjZWMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NDAuMkwxNTIuNiAxODFjNC4zLTEwLjMgMTAuMS0xOS45IDE3LjItMjguNGMyLjgtMy40IDMuMy04LjEgMS4yLTEyQzE2NCAxMjcuMiAxNjAgMTEyLjEgMTYwIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNi4xLTQgMzEuMi0xMC45IDQ0LjZ6TTIyNCA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTQ4IDEyOGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tMTYgODBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0xNiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwek0yODggOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0tNDggMjR2My4yYzAgMy4yIC44IDYuMyAyLjMgOWw5IDE2LjljLjkgMS43IDIuNyAyLjggNC43IDIuOHMzLjgtMS4xIDQuNy0yLjhsOS0xNi45YzEuNS0yLjggMi4zLTUuOSAyLjMtOVYxMjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhTW9ydGFyUGVzdGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vcnRhci1wZXN0bGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YTdcIiwgXCJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwSDM5Ny4zTDUwMi42IDU0LjZjMTEuOC0xMS44IDEyLjYtMzAuOCAxLjYtNDMuNXpNMzIgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzAgODIuNSA0My40IDE0Ny43IDEyMy45IDE3Ni4yYy0xMS4xIDEzLjktMTkuNCAzMC4zLTIzLjkgNDguMUMxMjcuNiA0OTcuNCAxNDIuMyA1MTIgMTYwIDUxMkgzNTJjMTcuNyAwIDMyLjQtMTQuNiAyOC4xLTMxLjdjLTQuNS0xNy44LTEyLjgtMzQuMS0yMy45LTQ4LjFDNDM2LjYgNDAzLjcgNDgwIDMzOC41IDQ4MCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhUm9hZEJhcnJpZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1iYXJyaWVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYyXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjY2LjNMMTQ5LjIgOTZINjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQwNS4yIDk2SDMzMC44bC01LjQgMTAuN0wyMzQuOCAyODhoNzQuM2w1LjQtMTAuN0w0MDUuMiA5NnpNMzYyLjggMjg4aDc0LjNsNS40LTEwLjdMNTMzLjIgOTZINDU4LjhsLTUuNCAxMC43TDM2Mi44IDI4OHpNMjAyLjggOTZsLTUuNCAxMC43TDEwNi44IDI4OGg3NC4zbDUuNC0xMC43TDI3Ny4yIDk2SDIwMi44em0yODggMTkySDU3NlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY1My43TDQ5MC44IDI4OHpcIl1cbn07XG52YXIgZmFTY2hvb2wgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTc5XSwgXCJmNTQ5XCIsIFwiTTMzNy44IDUuNEMzMjctMS44IDMxMy0xLjggMzAyLjIgNS40TDE2Ni4zIDk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMjU2VjQxNmMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0djk2SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDczLjdMMzM3LjggNS40ek05NiAxOTJoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjIwOGMwLTguOCA3LjItMTYgMTYtMTZ6bTQwMCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg1MTJjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDh6TTk2IDMyMGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptNDAwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNnpNMjMyIDE3NmE4OCA4OCAwIDEgMSAxNzYgMCA4OCA4OCAwIDEgMSAtMTc2IDB6bTg4LTQ4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMzNlYxNDRjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUlnbG9vID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lnbG9vJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmN2FlXCIsIFwiTTMyMCAzMy44VjE2MEg0OC41QzEwMC4yIDgyLjggMTg4LjEgMzIgMjg4IDMyYzEwLjggMCAyMS41IC42IDMyIDEuOHpNMzUyIDE2MFYzOS4xQzQyNC45IDU1LjcgNDg3LjIgOTkuOCA1MjcuNSAxNjBIMzUyek0yOS45IDE5Mkg5NlYzMjBIMGMwLTQ2IDEwLjgtODkuNCAyOS45LTEyOHpNMTkyIDMyMEgxMjhWMTkySDQ0OFYzMjBIMzg0djMySDU3NnY4MGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzNTJWMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0VjQ4MEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzUySDE5MlYzMjB6bTI4OCAwVjE5Mmg2Ni4xYzE5LjIgMzguNiAyOS45IDgyIDI5LjkgMTI4SDQ4MHpcIl1cbn07XG52YXIgZmFKb2ludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqb2ludCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjU5NVwiLCBcIk00NDggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNDNjMCA1NS4yIDIxLjkgMTA4LjEgNjAuOSAxNDcuMWwyMSAyMWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOXYxMWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI0NWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjEtMjFDNDYzLjIgMTE3LjggNDQ4IDgxLjIgNDQ4IDQzVjMyek01NzYgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjQ1YzAtNTUuMi0yMS45LTEwOC4xLTYwLjktMTQ3LjFsLTIxLTIxYy05LTktMTQuMS0yMS4yLTE0LjEtMzMuOVYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0M2MwIDI5LjcgMTEuOCA1OC4yIDMyLjggNzkuMmwyMSAyMWMyNyAyNyA0Mi4yIDYzLjYgNDIuMiAxMDEuOHYxMXpNMjI5LjggMzYwYy00LjctMi4zLTEwLTIuNy0xNS4yLTJjLTM3LjggNS42LTc1LjIgMTQuMy0xMDYuOSAyMi44QzgxLjMgMzg4IDU4LjMgMzk1LjEgNDIgNDAwLjRjLTguMiAyLjctMTQuNyA0LjktMTkuMiA2LjVjLTIuMyAuOC00IDEuNC01LjIgMS44bC0xLjMgLjVDNi44IDQxMi41IDAgNDIxLjQgMCA0MzJzNi44IDE5LjUgMTYuMyAyMi43bDEuMyAuNWMxLjIgLjQgMyAxLjEgNS4yIDEuOGM0LjUgMS42IDExIDMuOCAxOS4yIDYuNWMxNi4zIDUuNCAzOS4yIDEyLjUgNjUuNyAxOS42QzE2MC4zIDQ5Ny4zIDIyOC44IDUxMiAyODggNTEyaDY3LjNjNC4xIDAgNi4zLTUuMSAzLjYtOC4zTDI1Ni41IDM4MC44Yy03LjQtOC45LTE2LjUtMTUuOS0yNi43LTIwLjh6TTQ0NSA1MTJoMTkgNTEuM2M0LjEgMCA2LjMtNS4xIDMuNi04LjNMNDE2LjUgMzgwLjhDNDAxLjMgMzYyLjUgMzc4LjggMzUyIDM1NSAzNTJIMzM2IDI4OGMtMS4xIDAtMi4zIDAtMy40IDBjLTQuMSAwLTYuMiA1LjEtMy41IDguM0wzODMuNSA0ODMuMkMzOTguNyA1MDEuNSA0MjEuMiA1MTIgNDQ1IDUxMnptLTMuOS0xNTEuN0w1NDMuNSA0ODMuMmMxNC42IDE3LjUgMzUuOSAyNy45IDU4LjYgMjguN2MyMS4xLTEuMSAzNy45LTE4LjYgMzcuOS0zOS45VjM5MmMwLTIyLjEtMTcuOS00MC00MC00MEg0NDQuN2MtNC4xIDAtNi4zIDUuMS0zLjYgOC4zelwiXVxufTtcbnZhciBmYUFuZ2xlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtcmlnaHQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs4MjUwXSwgXCJmMTA1XCIsIFwiTTI3OC42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMTAuNyAyNTYgNzMuNCAxMTguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwelwiXVxufTtcbnZhciBmYUhvcnNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvcnNlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDE0XSwgXCJmNmYwXCIsIFwiTTQ0OCAyMzguMVYxNjBoMTZsOS44IDE5LjZjMTIuNSAyNS4xIDQyLjIgMzYuNCA2OC4zIDI2YzIwLjUtOC4yIDMzLjktMjggMzMuOS01MC4xVjgwYzAtMTkuMS04LjQtMzYuMy0yMS43LTQ4SDU2MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0ODAgNDQ4QzM3Ny4zIDAgMzIwIDU3LjMgMzIwIDEyOEgyMjQgMjAzLjIgMTQ4LjhjLTMwLjcgMC01Ny42IDE2LjMtNzIuNSA0MC44QzMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NnY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI1NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41YzEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42Yy0xNi41IDI4LTIwLjYgNjIuMi0xMCA5My45bDE3LjUgNTIuNGM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45aDMzLjdjMjEuOCAwIDM3LjMtMjEuNCAzMC40LTQyLjFsLTIwLjgtNjIuNWMtMi4xLTYuNC0uNS0xMy40IDQuMy0xOC4ybDEyLjctMTIuN2MxMy4yLTEzLjIgMjAuNi0zMS4xIDIwLjYtNDkuN2MwLTIuMy0uMS00LjYtLjMtNi45bDg0IDI0YzQuMSAxLjIgOC4yIDIuMSAxMi4zIDIuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzE1LjdjMTkuMi0xOS4yIDMxLjUtNDUuNyAzMi03NS43aDB2LTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFRID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3EnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMTNdLCBcIjUxXCIsIFwiTTY0IDI1NmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGMyOC45IDAgNTYtNy43IDc5LjQtMjEuMWwtNzItODYuNGMtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDcwLjkgODUuMUMzNzEuOSAzMjUuOCAzODQgMjkyLjMgMzg0IDI1NmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFM2NCAxNjcuNiA2NCAyNTZ6TTM0NC45IDQ0NC42QzMxMCA0NjcgMjY4LjUgNDgwIDIyNCA0ODBDMTAwLjMgNDgwIDAgMzc5LjcgMCAyNTZTMTAwLjMgMzIgMjI0IDMyczIyNCAxMDAuMyAyMjQgMjI0YzAgNTYuMS0yMC42IDEwNy40LTU0LjcgMTQ2LjdsNDcuMyA1Ni44YzExLjMgMTMuNiA5LjUgMzMuOC00LjEgNDUuMXMtMzMuOCA5LjUtNDUuMS00LjFsLTQ2LjYtNTUuOXpcIl1cbn07XG52YXIgZmFHID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2cnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDNdLCBcIjQ3XCIsIFwiTTIyNCA5NkMxMzUuNiA5NiA2NCAxNjcuNiA2NCAyNTZzNzEuNiAxNjAgMTYwIDE2MGM3Ny40IDAgMTQyLTU1IDE1Ni44LTEyOEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDAwYzI1LjggMCA0OS42IDIxLjQgNDcuMiA1MC42QzQzNy44IDM4OS42IDM0MS40IDQ4MCAyMjQgNDgwQzEwMC4zIDQ4MCAwIDM3OS43IDAgMjU2UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1N2MxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2elwiXVxufTtcbnZhciBmYU5vdGVzTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3Rlcy1tZWRpY2FsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDgxXCIsIFwiTTk2IDM1MlY5NmMwLTM1LjMgMjguNy02NCA2NC02NEg0MTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMjkzLjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNsLTU4LjUgNTguNWMtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0gxNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0ek0yNzIgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjU2aDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDMyMFYxNDRjMC04LjgtNy4yLTE2LTE2LTE2SDI3MnptMjQgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDEzNkM2MC45IDUxMiAwIDQ1MS4xIDAgMzc2VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjI0YzAgNDguNiAzOS40IDg4IDg4IDg4SDI5NnpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUhhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtaGFsZicsXG4gIGljb246IFszMjAsIDUxMiwgWzEyNzc3NywgXCJ0ZW1wZXJhdHVyZS0yXCIsIFwidGhlcm1vbWV0ZXItMlwiLCBcInRoZXJtb21ldGVyLWhhbGZcIl0sIFwiZjJjOVwiLCBcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyMDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUyID0gZmFUZW1wZXJhdHVyZUhhbGY7XG52YXIgZmFUaGVybW9tZXRlcjIgPSBmYVRlbXBlcmF0dXJlSGFsZjtcbnZhciBmYVRoZXJtb21ldGVySGFsZiA9IGZhVGVtcGVyYXR1cmVIYWxmO1xudmFyIGZhRG9uZ1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9uZy1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMTY5XCIsIFwiTTI4OCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJ2NDkuMWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI0LjUgMCA0Ny40LTYuOSA2Ni44LTE4LjhjNSAxMS4xIDE2LjIgMTguOCAyOS4yIDE4LjhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4IDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTI4IDI4OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhQ2Fwc3VsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2Fwc3VsZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0NmJcIiwgXCJNNjQgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjU2SDY0VjE0NHpNMCAxNDRWMzY4YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJWMTg5LjZjMS44IDE5LjEgOC4yIDM4IDE5LjggNTQuOEwzNzIuMyA0MzEuN2MzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDExMy4zQzM5MS44IDYxLjUgMzIxLjkgNDkgMjcxLjMgODUuMmMtMjggMjAtNDQuMyA1MC44LTQ3LjMgODNWMTQ0YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgODIuMSAwIDE0NHptMjk2LjYgNjQuMmMtMTYtMjMuMy0xMC01NS4zIDExLjktNzFjMjEuMi0xNS4xIDUwLjUtMTAuMyA2NiAxMi4ybDY3IDk3LjZMMzYxLjYgMzAzbC02NS05NC44ek00OTEgNDA3LjdjLS44IC42LTEuNiAxLjEtMi40IDEuNmw0LTIuOGMtLjUgLjQtMSAuOC0xLjYgMS4yelwiXVxufTtcbnZhciBmYVBvb1N0b3JtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bvby1zdG9ybScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicG9vLWJvbHRcIl0sIFwiZjc1YVwiLCBcIk0yMzYuOSAuMmMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjNjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMWMwIDIxLjctOC41IDM3LjItMjEuOSA0Ny42Yy0xMy44IDEwLjgtMzQgMTctNTcuOCAxN0gxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0YzAgMTIuMiAzLjQgMjMuNSA5LjMgMzMuMkMzMS43IDIxNi4yIDAgMjUyLjQgMCAyOTZjMCA0MC45IDI4IDc1LjQgNjUuOCA4NS4yYy01LjMtMTguNSAxLTM4LjUgMTYuMi01MC43bDE2MC0xMjhjMTcuNi0xNC4xIDQyLjYtMTQgNjAuMiAuMnMyMi44IDM4LjYgMTIuOCA1OC44TDI4NS43IDMyMEgzMDRjMjAuNCAwIDM4LjUgMTIuOSA0NS4zIDMyLjFjMy43IDEwLjYgMy41IDIxLjggMCAzMS45SDM2MGM0OC42IDAgODgtMzkuNCA4OC04OGMwLTQzLjYtMzEuNy03OS44LTczLjMtODYuOGM1LjktOS43IDkuMy0yMS4xIDkuMy0zMy4yYzAtMzUuMy0yOC43LTY0LTY0LTY0aC0xLjRjLjktNS40IDEuNC0xMC45IDEuNC0xNi42YzAtNDguNy0zNi4xLTg4LjktODMuMS05NS4yem00NS4xIDIyNy40Yy01LjgtNC43LTE0LjItNC43LTIwLjEtLjFsLTE2MCAxMjhjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhzOC4zIDEwLjcgMTUuMSAxMC43aDcwLjFMMTI5LjcgNDg4LjhjLTMuNCA2LjctMS42IDE0LjkgNC4zIDE5LjZzMTQuMiA0LjcgMjAuMSAuMWwxNjAtMTI4YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhzLTguMy0xMC43LTE1LjEtMTAuN0gyMzMuOWw1Mi40LTEwNC44YzMuNC02LjcgMS42LTE0LjktNC4zLTE5LjZ6XCJdXG59O1xudmFyIGZhUG9vQm9sdCA9IGZhUG9vU3Rvcm07XG52YXIgZmFGYWNlRnJvd25PcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZnJvd24tb3BlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgXCJmcm93bi1vcGVuXCJdLCBcImY1N2FcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tMTIyIDE3NC41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjRjMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40Yy0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6XCJdXG59O1xudmFyIGZhRnJvd25PcGVuID0gZmFGYWNlRnJvd25PcGVuO1xudmFyIGZhSGFuZFBvaW50VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1wb2ludC11cCcsXG4gIGljb246IFszODQsIDUxMiwgWzk3NTddLCBcImYwYTZcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMyVjI0MEgzMlYzMnpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE5MnptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZWMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwSDE2Mi4zYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlMMzcuNSA0NTMuNUMxMy41IDQyOS41IDAgMzk2LjkgMCAzNjNWMzM2YzAtMzUuMyAyOC43LTY0IDY0LTY0aDg4YzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwSDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDU2YzM5LjggMCA3Mi0zMi4yIDcyLTcyelwiXVxufTtcbnZhciBmYU1vbmV5QmlsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGQ2XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAzMjBINjRWMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAxOTJWMTI4aDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzg0YzAtMzUuMyAyOC43LTY0IDY0LTY0djY0SDQ0OHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGg2NHY2NHpNMjg4IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFCb29rbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rbWFyaycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCBcImYwMmVcIiwgXCJNMCA0OFY0ODcuN0MwIDUwMS4xIDEwLjkgNTEyIDI0LjMgNTEyYzUgMCA5LjktMS41IDE0LTQuNEwxOTIgNDAwIDM0NS43IDUwNy42YzQuMSAyLjkgOSA0LjQgMTQgNC40YzEzLjQgMCAyNC4zLTEwLjkgMjQuMy0yNC4zVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHpcIl1cbn07XG52YXIgZmFBbGlnbkp1c3RpZnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tanVzdGlmeScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzOVwiLCBcIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnptMCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00NDggNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFVbWJyZWxsYUJlYWNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VtYnJlbGxhLWJlYWNoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTU4XSwgXCJmNWNhXCIsIFwiTTM0Ni4zIDI3MS44bC02MC4xLTIxLjlMMjE0IDQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjgyLjFsNjQuMS0xNzYuMnptMTIxLjEtLjJsLTMuMyA5LjEgNjcuNyAyNC42YzE4LjEgNi42IDM4LTQuMiAzOS42LTIzLjRjNi41LTc4LjUtMjMuOS0xNTUuNS04MC44LTIwOC41YzIgOCAzLjIgMTYuMyAzLjQgMjQuOGwuMiA2YzEuOCA1Ny03LjMgMTEzLjgtMjYuOCAxNjcuNHpNNDYyIDk5LjFjLTEuMS0zNC40LTIyLjUtNjQuOC01NC40LTc3LjRjLS45LS40LTEuOS0uNy0yLjgtMS4xYy0zMy0xMS43LTY5LjgtMi40LTkzLjEgMjMuOGwtNCA0LjVDMjcyLjQgODguMyAyNDUgMTM0LjIgMjI2LjggMTg0bC0zLjMgOS4xTDQzNCAyNjkuN2wzLjMtOS4xYzE4LjEtNDkuOCAyNi42LTEwMi41IDI0LjktMTU1LjVsLS4yLTZ6TTEwNy4yIDExMi45Yy0xMS4xIDE1LjctMi44IDM2LjggMTUuMyA0My40bDcxIDI1LjggMy4zLTkuMWMxOS41LTUzLjYgNDkuMS0xMDMgODcuMS0xNDUuNWw0LTQuNWM2LjItNi45IDEzLjEtMTMgMjAuNS0xOC4yYy03OS42IDIuNS0xNTQuNyA0Mi4yLTIwMS4yIDEwOHpcIl1cbn07XG52YXIgZmFIZWxtZXRVbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxtZXQtdW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MDNcIiwgXCJNNDc5LjUgMjI0QzQ3MS4yIDk4LjkgMzY3LjIgMCAyNDAgMEMxMDcuNSAwIDAgMTA3LjUgMCAyNDB2NTYuM0MwIDM0NC44IDM5LjIgMzg0IDg3LjcgMzg0SDIwMGgxNC45TDM0My41IDUwNS40YzQuNSA0LjIgMTAuNCA2LjYgMTYuNSA2LjZoOTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzY5LjVsLTEuNS0xLjVWMjg4aDgwIDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0uNXpNMzIwIDQxNy4ybC03OC03My43TDI3NC40IDI4OEgzMjBWNDE3LjJ6TTI4NS4zIDEwMy4xbDM0LjcgNTJWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2OTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MlYyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTEyYzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTYwIDExMnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUJ1bGxzZXllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1bGxzZXllJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMTQwXCIsIFwiTTQ0OCAyNTZBMTkyIDE5MiAwIDEgMCA2NCAyNTZhMTkyIDE5MiAwIDEgMCAzODQgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUJhY29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY29uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5MzYzXSwgXCJmN2U1XCIsIFwiTTQzOS4yIDEuMmMxMS4yLTMuMiAyMy4yLS4xIDMxLjQgOC4xTDUxOCA1Ni43bC0yNi41IDcuOWMtNTggMTYuNi05OC4xIDM5LjYtMTI5LjYgNjcuNGMtMzEuMiAyNy41LTUzLjIgNTkuMS03NS4xIDkwLjlsLTIuMyAzLjNDMjQxLjYgMjg4LjcgMTk1IDM1Ni42IDcyLjggNDE3LjdMMzcuOSA0MzUuMiA5LjQgNDA2LjZjLTcuMy03LjMtMTAuNi0xNy42LTktMjcuOHM4LjEtMTguOSAxNy4zLTIzLjVDMTM2LjEgMjk2LjIgMTgwLjkgMjMxIDIyMy4zIDE2OS4zbDIuMy0zLjRjMjEuOC0zMS44IDQ0LjktNjQuOSA3Ny43LTkzLjljMzMuNC0yOS41IDc1LjgtNTMuNiAxMzUuOS03MC44ek02MS44IDQ1OWwyNS40LTEyLjdjMTI5LjUtNjQuNyAxNzkuOS0xMzguMSAyMjMuOC0yMDJsMi4yLTMuM2MyMi4xLTMyLjEgNDIuMS02MC41IDY5LjktODUuMWMyNy41LTI0LjMgNjMuNC00NS4yIDExNy4zLTYwLjZsMCAwIC4yLS4xIDQzLjEtMTIuOSAyMyAyM2M4IDggMTEuMiAxOS43IDguMyAzMC43cy0xMS4zIDE5LjYtMjIuMiAyMi43Yy01MS45IDE0LjgtODUuNiAzNC43LTExMS4xIDU3LjJjLTI2LjEgMjMtNDUuMSA0OS45LTY3LjMgODIuMWwtMi4yIDMuMkMzMjcuOCAzNjUuOSAyNzUuNSA0NDIgMTQyLjMgNTA4LjZjLTEyLjMgNi4yLTI3LjIgMy43LTM2LjktNkw2MS44IDQ1OXpcIl1cbn07XG52YXIgZmFIYW5kUG9pbnREb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnQtZG93bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjBhN1wiLCBcIk0zMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNzJIMzJWNDgwek0yMjQgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0em0tNjQgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzA0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xNjAtOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjR6bS05Ni04OGwwIC42YzkuNC01LjQgMjAuMy04LjYgMzItOC42YzEzLjIgMCAyNS40IDQgMzUuNiAxMC44YzguNy0yNC45IDMyLjUtNDIuOCA2MC40LTQyLjhjMTEuNyAwIDIyLjYgMy4xIDMyIDguNlYxNjBDMzg0IDcxLjYgMzEyLjQgMCAyMjQgMEgxNjIuM0MxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5djI3YzAgMzUuMyAyOC43IDY0IDY0IDY0aDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwSDk2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDU2YzM5LjggMCA3MiAzMi4yIDcyIDcyelwiXVxufTtcbnZhciBmYUFycm93VXBGcm9tQnJhY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLWJyYWNrZXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwOWFcIiwgXCJNMjQ2LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMTkyIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjEwLjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0elwiXVxufTtcbnZhciBmYUZvbGRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsIFwiZm9sZGVyLWJsYW5rXCJdLCBcImYwN2JcIiwgXCJNNjQgNDgwSDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjg4Yy0xMC4xIDAtMTkuNi00LjctMjUuNi0xMi44TDI0My4yIDU3LjZDMjMxLjEgNDEuNSAyMTIuMSAzMiAxOTIgMzJINjRDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6XCJdXG59O1xudmFyIGZhRm9sZGVyQmxhbmsgPSBmYUZvbGRlcjtcbnZhciBmYUZpbGVXYXZlZm9ybSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXdhdmVmb3JtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJmaWxlLW1lZGljYWwtYWx0XCJdLCBcImY0NzhcIiwgXCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NFYyODhIMTQ0YzYuMSAwIDExLjYgMy40IDE0LjMgOC44TDE3NiAzMzIuMmw0OS43LTk5LjRjMi43LTUuNCA4LjMtOC44IDE0LjMtOC44czExLjYgMy40IDE0LjMgOC44TDI4MS45IDI4OEgzNTJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjcyYy02LjEgMC0xMS42LTMuNC0xNC4zLTguOEwyNDAgMjc1LjhsLTQ5LjcgOTkuNGMtMi43IDUuNC04LjMgOC44LTE0LjMgOC44cy0xMS42LTMuNC0xNC4zLTguOEwxMzQuMSAzMjBIMzJWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDk2ek0yODggMFYxMjhINDE2TDI4OCAwelwiXVxufTtcbnZhciBmYUZpbGVNZWRpY2FsQWx0ID0gZmFGaWxlV2F2ZWZvcm07XG52YXIgZmFSYWRpYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmFkaWF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2I5XCIsIFwiTTIxNiAxODYuN2MtMjMuOSAxMy44LTQwIDM5LjctNDAgNjkuM0wzMiAyNTZDMTQuMyAyNTYtLjIgMjQxLjYgMiAyMjQuMUMxMC43IDE1NCA0Ny44IDkyLjcgMTAxLjMgNTJjMTQuMS0xMC43IDMzLjgtNS4zIDQyLjcgMTBsNzIgMTI0Ljd6TTI1NiAzMzZjMTQuNiAwIDI4LjItMy45IDQwLTEwLjdsNzIgMTI0LjhjOC44IDE1LjMgMy43IDM1LjEtMTIuNiA0MS45Yy0zMC42IDEyLjktNjQuMiAyMC05OS40IDIwcy02OC45LTcuMS05OS40LTIwYy0xNi4zLTYuOS0yMS40LTI2LjYtMTIuNi00MS45bDcyLTEyNC44YzExLjggNi44IDI1LjQgMTAuNyA0MCAxMC43em0yMjQtODBsLTE0NCAwYzAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuM0wzNjggNjJjOC44LTE1LjMgMjguNi0yMC43IDQyLjctMTBjNTMuNiA0MC43IDkwLjYgMTAyIDk5LjQgMTcyLjFjMi4yIDE3LjUtMTIuNCAzMS45LTMwIDMxLjl6TTI1NiAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUNoYXJ0U2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LXNpbXBsZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTQ3M1wiLCBcIk0xNjAgODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODB6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjcyek0zNjggOTZoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDM2OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYU1hcnNTdHJva2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1zdHJva2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODk0XSwgXCJmMjI5XCIsIFwiTTM3NiAwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDMzLjQgMzMuNEwzNzAuMyA5Ni40IDM0NSA3MWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwyNS40IDI1LjRMMzA3LjggMTU5Yy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxYy05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NnM3OC44IDE3NiAxNzYgMTc2czE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGwyOC42LTI4LjZMNDA3IDIwMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI1LjQtMjUuNCAyMi4xLTIyLjFMNDcxIDE1M2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzc2em04OCA0OGgwdjBsMCAwek05NiAzMDRhMTEyIDExMiAwIDEgMSAyMjQgMEExMTIgMTEyIDAgMSAxIDk2IDMwNHpcIl1cbn07XG52YXIgZmFWaWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTRdLCBcImY0OTJcIiwgXCJNMzQyLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40TDI4LjEgMzQyLjZDMTAuMSAzNjAuNiAwIDM4NSAwIDQxMC41VjQxNmMwIDUzIDQzIDk2IDk2IDk2aDUuNWMyNS41IDAgNDkuOS0xMC4xIDY3LjktMjguMUw0NDggMjA1LjNsOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0zMi0zMi05Ni05Ni0zMi0zMnpNMjA1LjMgMjU2TDM1MiAxMDkuMyA0MDIuNyAxNjBsLTk2IDk2SDIwNS4zelwiXVxufTtcbnZhciBmYUdhdWdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dhdWdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkYXNoYm9hcmRcIiwgXCJnYXVnZS1tZWRcIiwgXCJ0YWNob21ldGVyLWFsdC1hdmVyYWdlXCJdLCBcImY2MjRcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zVjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjI5Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjNjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bS0xNiA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xudmFyIGZhRGFzaGJvYXJkID0gZmFHYXVnZTtcbnZhciBmYUdhdWdlTWVkID0gZmFHYXVnZTtcbnZhciBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTtcbnZhciBmYVdhbmRNYWdpY1NwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dhbmQtbWFnaWMtc3BhcmtsZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1hZ2ljLXdhbmQtc3BhcmtsZXNcIl0sIFwiZTJjYVwiLCBcIk0yMzQuNyA0Mi43TDE5NyA1Ni44Yy0zIDEuMS01IDQtNSA3LjJzMiA2LjEgNSA3LjJsMzcuNyAxNC4xTDI0OC44IDEyM2MxLjEgMyA0IDUgNy4yIDVzNi4xLTIgNy4yLTVsMTQuMS0zNy43TDMxNSA3MS4yYzMtMS4xIDUtNCA1LTcuMnMtMi02LjEtNS03LjJMMjc3LjMgNDIuNyAyNjMuMiA1Yy0xLjEtMy00LTUtNy4yLTVzLTYuMSAyLTcuMiA1TDIzNC43IDQyLjd6TTQ2LjEgMzk1LjRjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45bDM0LjYgMzQuNmMxOC43IDE4LjcgNDkuMSAxOC43IDY3LjkgMEw1MjkuOSAxMTYuNWMxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOUw0OTUuMyAxNC4xYy0xOC43LTE4LjctNDkuMS0xOC43LTY3LjkgMEw0Ni4xIDM5NS40ek00ODQuNiA4Mi42bC0xMDUgMTA1LTIzLjMtMjMuMyAxMDUtMTA1IDIzLjMgMjMuM3pNNy41IDExNy4yQzMgMTE4LjkgMCAxMjMuMiAwIDEyOHMzIDkuMSA3LjUgMTAuOEw2NCAxNjBsMjEuMiA1Ni41YzEuNyA0LjUgNiA3LjUgMTAuOCA3LjVzOS4xLTMgMTAuOC03LjVMMTI4IDE2MGw1Ni41LTIxLjJjNC41LTEuNyA3LjUtNiA3LjUtMTAuOHMtMy05LjEtNy41LTEwLjhMMTI4IDk2IDEwNi44IDM5LjVDMTA1LjEgMzUgMTAwLjggMzIgOTYgMzJzLTkuMSAzLTEwLjggNy41TDY0IDk2IDcuNSAxMTcuMnptMzUyIDI1NmMtNC41IDEuNy03LjUgNi03LjUgMTAuOHMzIDkuMSA3LjUgMTAuOEw0MTYgNDE2bDIxLjIgNTYuNWMxLjcgNC41IDYgNy41IDEwLjggNy41czkuMS0zIDEwLjgtNy41TDQ4MCA0MTZsNTYuNS0yMS4yYzQuNS0xLjcgNy41LTYgNy41LTEwLjhzLTMtOS4xLTcuNS0xMC44TDQ4MCAzNTJsLTIxLjItNTYuNWMtMS43LTQuNS02LTcuNS0xMC44LTcuNXMtOS4xIDMtMTAuOCA3LjVMNDE2IDM1MmwtNTYuNSAyMS4yelwiXVxufTtcbnZhciBmYU1hZ2ljV2FuZFNwYXJrbGVzID0gZmFXYW5kTWFnaWNTcGFya2xlcztcbnZhciBmYUUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMV0sIFwiNDVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlYyNTYgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFYyODhIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0Vjk2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NHpcIl1cbn07XG52YXIgZmFQZW5DbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blbi1jbGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJwZW4tYWx0XCJdLCBcImYzMDVcIiwgXCJNNDUzLjMgMTkuM2wzOS40IDM5LjRjMjUgMjUgMjUgNjUuNSAwIDkwLjVsLTUyLjEgNTIuMSAwIDAtMS0xIDAgMC0xNi0xNi05Ni05Ni0xNy0xNyA1Mi4xLTUyLjFjMjUtMjUgNjUuNS0yNSA5MC41IDB6TTI0MSAxMTQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMTA1IDIxN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNzMuMSA4MWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMMjg4IDk0LjFsMTcgMTcgOTYgOTYgMTYgMTYgMSAxLTE3IDE3TDIyOS41IDQxMi41Yy00OCA0OC0xMDkuMiA4MC44LTE3NS44IDk0LjFsLTI1IDVjLTcuOSAxLjYtMTYtLjktMjEuNy02LjZzLTguMS0xMy44LTYuNi0yMS43bDUtMjVjMTMuMy02Ni42IDQ2LjEtMTI3LjggOTQuMS0xNzUuOEwyNTQuMSAxMjggMjQxIDExNC45elwiXVxufTtcbnZhciBmYVBlbkFsdCA9IGZhUGVuQ2xpcDtcbnZhciBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0Y2FcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0czE0LjMgMzIgMzIgMzJoNDB2NjRIMzJWMjg4YzUzIDAgOTYgNDMgOTYgOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzg0YzAtNTMgNDMtOTYgOTYtOTZjNi4zIDAgMTIuNCAuNiAxOC4zIDEuN0MzNjcuMSAyMzEuOCA0MjYuOSAxOTIgNDk2IDE5MmM0Mi41IDAgODEuNiAxNS4xIDExMiA0MC4yVjE2MEg1MzZWOTZoNDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6TTQ4OCA5NnY2NEg0MDhWOTZoODB6TTM2MCA5NnY2NEgyODBWOTZoODB6TTIzMiA5NnY2NEgxNTJWOTZoODB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NF0sIFwiZjAwN1wiLCBcIk0yMjQgMjU2QTEyOCAxMjggMCAxIDAgMjI0IDBhMTI4IDEyOCAwIDEgMCAwIDI1NnptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdDNDQ4IDM4My44IDM2OC4yIDMwNCAyNjkuNyAzMDRIMTc4LjN6XCJdXG59O1xudmFyIGZhU2Nob29sQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2YlwiLCBcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNEwxNjYuMyA5Nkg0OEMyMS41IDk2IDAgMTE3LjUgMCAxNDRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMyMHYwSDI1NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjMgMGguNWMzLjQtMzcuNyAxOC43LTcyLjEgNDIuMi05OS4xQzM1MC4yIDI2MCAzMzUuNiAyNjQgMzIwIDI2NGMtNDguNiAwLTg4LTM5LjQtODgtODhzMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMTguMy01LjYgMzUuMy0xNS4xIDQ5LjRjMjktMjEgNjQuNi0zMy40IDEwMy4xLTMzLjRjNTkuNSAwIDExMi4xIDI5LjYgMTQ0IDc0LjhWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ3My43TDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tOTkuMy00My4zYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjd6XCJdXG59O1xudmFyIGZhRHVtcHN0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHVtcHN0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY3OTNcIiwgXCJNNDkuNyAzMmMtMTAuNSAwLTE5LjggNi45LTIyLjkgMTYuOUwuOSAxMzNjLS42IDItLjkgNC4xLS45IDYuMUMwIDE1MC43IDkuMyAxNjAgMjAuOSAxNjBoOTRMMTQwLjUgMzJINDkuN3pNMjcyIDE2MFYzMkgxNzMuMUwxNDcuNSAxNjBIMjcyem0zMiAwSDQyOC41TDQwMi45IDMySDMwNFYxNjB6bTE1Ny4xIDBoOTRjMTEuNSAwIDIwLjktOS4zIDIwLjktMjAuOWMwLTIuMS0uMy00LjEtLjktNi4xTDU0OS4yIDQ4LjlDNTQ2LjEgMzguOSA1MzYuOCAzMiA1MjYuMyAzMkg0MzUuNWwyNS42IDEyOHpNMzIgMTkybDQgMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDRMNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJINDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjAtMTYwaDEyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC00bDQtMzJIMzJ6XCJdXG59O1xudmFyIGZhVmFuU2h1dHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2YW4tc2h1dHRsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY1NiwgXCJzaHV0dGxlLXZhblwiXSwgXCJmNWI2XCIsIFwiTTY0IDEwNHY4OGg5NlY5Nkg3MmMtNC40IDAtOCAzLjYtOCA4em00ODIgODhMNDY1LjEgOTZIMzg0djk2SDU0NnptLTIyNiAwVjk2SDIyNHY5Nmg5NnpNNTkyIDM4NEg1NzZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMjU2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxMDRDMCA2NC4yIDMyLjIgMzIgNzIgMzJIMTkyIDM1MiA0NjUuMWMxOC45IDAgMzYuOCA4LjMgNDkgMjIuOEw2MjUgMTg2LjVjOS43IDExLjUgMTUgMjYuMSAxNSA0MS4yVjMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptLTY0IDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTYwIDQzMmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhU2h1dHRsZVZhbiA9IGZhVmFuU2h1dHRsZTtcbnZhciBmYUJ1aWxkaW5nVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11c2VyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGRhXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OS45Yy02LjMtMTAuMi05LjktMjIuMi05LjktMzUuMWMwLTQ2LjkgMjUuOC04Ny44IDY0LTEwOS4yVjI3MS44IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNTc2IDI3MmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTM1MiA0NzcuMWMwIDE5LjMgMTUuNiAzNC45IDM0LjkgMzQuOUg2MDUuMWMxOS4zIDAgMzQuOS0xNS42IDM0LjktMzQuOWMwLTUxLjQtNDEuNy05My4xLTkzLjEtOTMuMUg0NDUuMWMtNTEuNCAwLTkzLjEgNDEuNy05My4xIDkzLjF6XCJdXG59O1xudmFyIGZhU3F1YXJlQ2FyZXRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1jYXJldC1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYXJldC1zcXVhcmUtbGVmdFwiXSwgXCJmMTkxXCIsIFwiTTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6TTEyOCAyNTZjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRzMTQuNCAxMi41IDE0LjQgMjJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6XCJdXG59O1xudmFyIGZhQ2FyZXRTcXVhcmVMZWZ0ID0gZmFTcXVhcmVDYXJldExlZnQ7XG52YXIgZmFIaWdobGlnaHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoaWdobGlnaHRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU5MVwiLCBcIk0zMTUgMzE1bDE1OC40LTIxNUw0NDQuMSA3MC42IDIyOSAyMjkgMzE1IDMxNXptLTE4NyA1bDAgMFYyNDguM2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQyMC42IDguNEM0MjggMi45IDQzNyAwIDQ0Ni4yIDBjMTEuNCAwIDIyLjQgNC41IDMwLjUgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNWMwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzMzQuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVIMjI0bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDEyOCAzMjB6TTcgNDY2LjNsNjMtNjMgNzAuNiA3MC42LTMxIDMxYy00LjUgNC41LTEwLjYgNy0xNyA3SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHYtNC43YzAtNi40IDIuNS0xMi41IDctMTd6XCJdXG59O1xudmFyIGZhS2V5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI3M10sIFwiZjA4NFwiLCBcIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDBTMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTd2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNDQ4aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0VjM4NGg0MGM2LjQgMCAxMi41LTIuNSAxNy03bDMzLjMtMzMuM2MxNi45IDUuNCAzNSA4LjMgNTMuNyA4LjN6TTM3NiA5NmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6XCJdXG59O1xudmFyIGZhQnVsbGhvcm4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVsbGhvcm4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjYsIDEyODM2M10sIFwiZjBhMVwiLCBcIk00ODAgMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlMMzgxLjcgNTNjLTQ4IDQ4LTExMy4xIDc1LTE4MSA3NUgxOTIgMTYwIDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJsOC43IDBjNjcuOSAwIDEzMyAyNyAxODEgNzVsNDMuNiA0My42YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMzAwLjRjMTguNi04LjggMzItMzIuNSAzMi02MC40cy0xMy40LTUxLjYtMzItNjAuNFYzMnptLTY0IDc2LjdWMjQwIDM3MS4zQzM1Ny4yIDMxNy44IDI4MC41IDI4OCAyMDAuNyAyODhIMTkyVjE5Mmg4LjdjNzkuOCAwIDE1Ni41LTI5LjggMjE1LjMtODMuM3pcIl1cbn07XG52YXIgZmFHbG9iZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbG9iZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc2MF0sIFwiZjBhY1wiLCBcIk0zNTIgMjU2YzAgMjIuMi0xLjIgNDMuNi0zLjMgNjRIMTYzLjNjLTIuMi0yMC40LTMuMy00MS44LTMuMy02NHMxLjItNDMuNiAzLjMtNjRIMzQ4LjdjMi4yIDIwLjQgMy4zIDQxLjggMy4zIDY0em0yOC44LTY0SDUwMy45YzUuMyAyMC41IDguMSA0MS45IDguMSA2NHMtMi44IDQzLjUtOC4xIDY0SDM4MC44YzIuMS0yMC42IDMuMi00MiAzLjItNjRzLTEuMS00My40LTMuMi02NHptMTEyLjYtMzJIMzc2LjdjLTEwLTYzLjktMjkuOC0xMTcuNC01NS4zLTE1MS42Yzc4LjMgMjAuNyAxNDIgNzcuNSAxNzEuOSAxNTEuNnptLTE0OS4xIDBIMTY3LjdjNi4xLTM2LjQgMTUuNS02OC42IDI3LTk0LjdjMTAuNS0yMy42IDIyLjItNDAuNyAzMy41LTUxLjVDMjM5LjQgMy4yIDI0OC43IDAgMjU2IDBzMTYuNiAzLjIgMjcuOCAxMy44YzExLjMgMTAuOCAyMyAyNy45IDMzLjUgNTEuNWMxMS42IDI2IDIwLjkgNTguMiAyNyA5NC43em0tMjA5IDBIMTguNkM0OC42IDg1LjkgMTEyLjIgMjkuMSAxOTAuNiA4LjRDMTY1LjEgNDIuNiAxNDUuMyA5Ni4xIDEzNS4zIDE2MHpNOC4xIDE5MkgxMzEuMmMtMi4xIDIwLjYtMy4yIDQyLTMuMiA2NHMxLjEgNDMuNCAzLjIgNjRIOC4xQzIuOCAyOTkuNSAwIDI3OC4xIDAgMjU2czIuOC00My41IDguMS02NHpNMTk0LjcgNDQ2LjZjLTExLjYtMjYtMjAuOS01OC4yLTI3LTk0LjZIMzQ0LjNjLTYuMSAzNi40LTE1LjUgNjguNi0yNyA5NC42Yy0xMC41IDIzLjYtMjIuMiA0MC43LTMzLjUgNTEuNUMyNzIuNiA1MDguOCAyNjMuMyA1MTIgMjU2IDUxMnMtMTYuNi0zLjItMjcuOC0xMy44Yy0xMS4zLTEwLjgtMjMtMjcuOS0zMy41LTUxLjV6TTEzNS4zIDM1MmMxMCA2My45IDI5LjggMTE3LjQgNTUuMyAxNTEuNkMxMTIuMiA0ODIuOSA0OC42IDQyNi4xIDE4LjYgMzUySDEzNS4zem0zNTguMSAwYy0zMCA3NC4xLTkzLjYgMTMwLjktMTcxLjkgMTUxLjZjMjUuNS0zNC4yIDQ1LjItODcuNyA1NS4zLTE1MS42SDQ5My40elwiXVxufTtcbnZhciBmYVN5bmFnb2d1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzeW5hZ29ndWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzNdLCBcImY2OWJcIiwgXCJNMzA5LjggMy43YzUuOS00LjkgMTQuNi00LjkgMjAuNSAwbDEyMSAxMDAuOEM0NjkuNSAxMTkuNyA0ODAgMTQyLjIgNDgwIDE2NlYyODAuMSA1MTJINDY0IDM1MlY0MTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZIMTc2IDE2MFYyODAuMSAxNjZjMC0yMy43IDEwLjUtNDYuMyAyOC44LTYxLjVMMzA5LjggMy43ek01MTIgNTEyVjI0NC41bDI4LjEtMzEuMmMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNsNjMuOCA3MC45YzcuOSA4LjggMTIuMyAyMC4zIDEyLjMgMzIuMVY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINTEyek0xMjggMjQ0LjVWNTEySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzMTYuM2MwLTExLjkgNC40LTIzLjMgMTIuMy0zMi4xbDYzLjgtNzAuOWMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNMMTI4IDI0NC41ek0zMjcgMTI0LjNjLTMuMS01LjQtMTAuOS01LjQtMTMuOSAwbC0xNS45IDI4LjEtMzIuMy0uM2MtNi4yLS4xLTEwLjEgNi43LTcgMTIuMUwyNzQuMyAxOTJsLTE2LjQgMjcuOGMtMy4yIDUuNCAuNyAxMi4xIDcgMTIuMWwzMi4zLS4zTDMxMyAyNTkuN2MzLjEgNS40IDEwLjkgNS40IDEzLjkgMGwxNS45LTI4LjEgMzIuMyAuM2M2LjIgLjEgMTAuMS02LjcgNy0xMi4xTDM2NS43IDE5MmwxNi40LTI3LjhjMy4yLTUuNC0uNy0xMi4xLTctMTIuMWwtMzIuMyAuM0wzMjcgMTI0LjN6XCJdXG59O1xudmFyIGZhUGVyc29uSGFsZkRyZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oYWxmLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTQ4XCIsIFwiTTE2MCAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptOCAzNTJWMTI4aDYuOWMzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw1OC4zIDk3YzkuMSAxNS4xIDQuMiAzNC44LTEwLjkgNDMuOXMtMzQuOCA0LjItNDMuOS0xMC45TDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyaDB6TTU4LjIgMTgyLjNjMTkuOS0zMy4xIDU1LjMtNTMuNSA5My44LTU0LjNWMzg0aDB2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0SDcwLjJjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xTDkzLjMgMjQ4LjEgNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDUzLjYtODkuMnpcIl1cbn07XG52YXIgZmFSb2FkQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtYnJpZGdlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYzXCIsIFwiTTM1MiAwSDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDgwIDIwMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjM4NHpNNDgwIDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiA5NkgyODh2NjRIMjQ4djY0aDQwdjk2Yy01MyAwLTk2IDQzLTk2IDk2djY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtNTMtNDMtOTYtOTYtOTZWMjI0SDcyVjE2MEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMTY4IDY0SDEyMHY2NGg4MFYxNjB6XCJdXG59O1xudmFyIGZhTG9jYXRpb25BcnJvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1hcnJvdycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjEyNFwiLCBcIk00MjkuNiA5Mi4xYzQuOS0xMS45IDIuMS0yNS42LTctMzQuN3MtMjIuOC0xMS45LTM0LjctN2wtMzUyIDE0NGMtMTQuMiA1LjgtMjIuMiAyMC44LTE5LjMgMzUuOHMxNi4xIDI1LjggMzEuNCAyNS44SDIyNFY0MzJjMCAxNS4zIDEwLjggMjguNCAyNS44IDMxLjRzMzAtNS4xIDM1LjgtMTkuM2wxNDQtMzUyelwiXVxufTtcbnZhciBmYUMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYycsXG4gIGljb246IFszODQsIDUxMiwgWzk5XSwgXCI0M1wiLCBcIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zczE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjhzMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwelwiXVxufTtcbnZhciBmYVRhYmxldEJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZXQtYnV0dG9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMTBhXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1sb2NrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGQ2XCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OC42Yy01LjQtOS40LTguNi0yMC4zLTguNi0zMlYzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTMwLjUgMTIuMi01OC4yIDMyLTc4LjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00NjQgMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQzMlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYVBpenphU2xpY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGl6emEtc2xpY2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4MThcIiwgXCJNMTY5LjcgLjljLTIyLjgtMS42LTQxLjkgMTQtNDcuNSAzNC43TDExMC40IDgwYy41IDAgMS4xIDAgMS42IDBjMTc2LjcgMCAzMjAgMTQzLjMgMzIwIDMyMGMwIC41IDAgMS4xIDAgMS42bDQ0LjQtMTEuOGMyMC44LTUuNSAzNi4zLTI0LjcgMzQuNy00Ny41QzQ5OC41IDE1OS41IDM1Mi41IDEzLjUgMTY5LjcgLjl6TTM5OS44IDQxMC4yYy4xLTMuNCAuMi02LjggLjItMTAuMmMwLTE1OS4xLTEyOC45LTI4OC0yODgtMjg4Yy0zLjQgMC02LjggLjEtMTAuMiAuMkwuNSA0OTEuOWMtMS41IDUuNSAuMSAxMS40IDQuMSAxNS40czkuOSA1LjYgMTUuNCA0LjFMMzk5LjggNDEwLjJ6TTE3NiAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhTW9uZXlCaWxsV2F2ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLXdhdmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1M2FcIiwgXCJNMCAxMTIuNVY0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNFY4OS43YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMjg4IDM1MmMtNDQuMiAwLTgwLTQzLTgwLTk2czM1LjgtOTYgODAtOTZzODAgNDMgODAgOTZzLTM1LjggOTYtODAgOTZ6TTY0IDM1MmMzNS4zIDAgNjQgMjguNyA2NCA2NEg2NFYzNTJ6bTY0LTIwOGMwIDM1LjMtMjguNyA2NC02NCA2NFYxNDRoNjR6TTUxMiAzMDR2NjRINDQ4YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00NDggOTZoNjR2NjRjLTM1LjMgMC02NC0yOC43LTY0LTY0elwiXVxufTtcbnZhciBmYUNoYXJ0QXJlYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1hcmVhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcmVhLWNoYXJ0XCJdLCBcImYxZmVcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0em05NiAyODhINDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1MS44YzAtNy42LTIuNy0xNS03LjctMjAuOGwtNjUuOC03Ni44Yy0xMi4xLTE0LjItMzMuNy0xNS00Ni45LTEuOGwtMjEgMjFjLTEwIDEwLTI2LjQgOS4yLTM1LjQtMS42bC0zOS4yLTQ3Yy0xMi42LTE1LjEtMzUuNy0xNS40LTQ4LjctLjZMMTM1LjkgMjE1Yy01LjEgNS44LTcuOSAxMy4zLTcuOSAyMS4xdjg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyelwiXVxufTtcbnZhciBmYUFyZWFDaGFydCA9IGZhQ2hhcnRBcmVhO1xudmFyIGZhSG91c2VGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGRcIiwgXCJNNDgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjE5MiA1MTJoNjRWMTkySDYyNGM4LjggMCAxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2SDUxMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDE2IDE1OUwyNzYuOCAzOS43Yy0xMi0xMC4zLTI5LjctMTAuMy00MS43IDBsLTIyNCAxOTJDMSAyNDAuNC0yLjcgMjU0LjUgMiAyNjcuMVMxOC42IDI4OCAzMiAyODhINjRWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NC43bC4yIDBoLTFWMTU5elwiXVxufTtcbnZhciBmYVBlcnNvbkNpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NDBcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6bTEzNiAxNmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ5NmM4LjggMCAxNi03LjIgMTYtMTZ6XCJdXG59O1xudmFyIGZhQmFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY4MywgXCJjYW5jZWxcIl0sIFwiZjA1ZVwiLCBcIk0zNjcuMiA0MTIuNUw5OS41IDE0NC44Qzc3LjEgMTc2LjEgNjQgMjE0LjUgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyYzQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zQzQzNC45IDMzNS45IDQ0OCAyOTcuNSA0NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyYy00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpcIl1cbn07XG52YXIgZmFDYW5jZWwgPSBmYUJhbjtcbnZhciBmYUNhbWVyYVJvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYW1lcmEtcm90YXRlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMGQ4XCIsIFwiTTIxMy4xIDY0LjhMMjAyLjcgOTZIMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEg0MzcuM0w0MjYuOSA2NC44QzQyMC40IDQ1LjIgNDAyLjEgMzIgMzgxLjQgMzJIMjU4LjZjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNNDQ4IDI1NmMwIDguOC03LjIgMTYtMTYgMTZIMzU1LjNjLTYuMiAwLTExLjMtNS4xLTExLjMtMTEuM2MwLTMgMS4yLTUuOSAzLjMtOEwzNzEgMjI5Yy0xMy42LTEzLjQtMzEuOS0yMS01MS0yMWMtMTkuMiAwLTM3LjcgNy42LTUxLjMgMjEuM0wyNDkgMjQ5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDE5LjctMTkuN0MyNTcuNCAxNzIuNyAyODggMTYwIDMyMCAxNjBjMzEuOCAwIDYyLjQgMTIuNiA4NSAzNWwyMy43LTIzLjdjMi4xLTIuMSA1LTMuMyA4LTMuM2M2LjIgMCAxMS4zIDUuMSAxMS4zIDExLjNWMjU2ek0xOTIgMzIwYzAtOC44IDcuMi0xNiAxNi0xNmg3Ni43YzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2MwIDMtMS4yIDUuOS0zLjMgOEwyNjkgMzQ3YzEzLjYgMTMuNCAzMS45IDIxIDUxIDIxYzE5LjIgMCAzNy43LTcuNiA1MS4zLTIxLjNMMzkxIDMyN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTE5LjcgMTkuN0MzODIuNiA0MDMuMyAzNTIgNDE2IDMyMCA0MTZjLTMxLjggMC02Mi40LTEyLjYtODUtMzVsLTIzLjcgMjMuN2MtMi4xIDIuMS01IDMuMy04IDMuM2MtNi4yIDAtMTEuMy01LjEtMTEuMy0xMS4zVjMyMHpcIl1cbn07XG52YXIgZmFTcHJheUNhblNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwcmF5LWNhbi1zcGFya2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYWlyLWZyZXNoZW5lclwiXSwgXCJmNWQwXCIsIFwiTTk2IDMydjk2SDIyNFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhDMTEwLjMgMCA5NiAxNC4zIDk2IDMyem0wIDEyOGMtNTMgMC05NiA0My05NiA5NlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMjcyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmMwLTUzLTQzLTk2LTk2LTk2SDk2em02NCA5NmE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMzg0IDQ4YzAtMS40LTEtMy0yLjItMy42TDM1MiAzMiAzMzkuNiAyLjJDMzM5IDEgMzM3LjQgMCAzMzYgMHMtMyAxLTMuNiAyLjJMMzIwIDMyIDI5MC4yIDQ0LjRDMjg5IDQ1IDI4OCA0Ni42IDI4OCA0OGMwIDEuNCAxIDMgMi4yIDMuNkwzMjAgNjRsMTIuNCAyOS44QzMzMyA5NSAzMzQuNiA5NiAzMzYgOTZzMy0xIDMuNi0yLjJMMzUyIDY0bDI5LjgtMTIuNEMzODMgNTEgMzg0IDQ5LjQgMzg0IDQ4em03Ni40IDQ1LjhDNDYxIDk1IDQ2Mi42IDk2IDQ2NCA5NnMzLTEgMy42LTIuMkw0ODAgNjRsMjkuOC0xMi40QzUxMSA1MSA1MTIgNDkuNCA1MTIgNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDgwIDMyIDQ2Ny42IDIuMkM0NjcgMSA0NjUuNCAwIDQ2NCAwcy0zIDEtMy42IDIuMkw0NDggMzIgNDE4LjIgNDQuNEM0MTcgNDUgNDE2IDQ2LjYgNDE2IDQ4YzAgMS40IDEgMyAyLjIgMy42TDQ0OCA2NGwxMi40IDI5Ljh6bTcuMiAxMDAuNGMtLjYtMS4yLTIuMi0yLjItMy42LTIuMnMtMyAxLTMuNiAyLjJMNDQ4IDIyNGwtMjkuOCAxMi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42YzAgMS40IDEgMyAyLjIgMy42TDQ0OCAyNTZsMTIuNCAyOS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDI1NmwyOS44LTEyLjRjMS4yLS42IDIuMi0yLjIgMi4yLTMuNmMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMjI0bC0xMi40LTI5Ljh6TTQ0OCAxNDRjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDEyOCA0MDMuNiA5OC4yQzQwMyA5NyA0MDEuNCA5NiA0MDAgOTZzLTMgMS0zLjYgMi4yTDM4NCAxMjhsLTI5LjggMTIuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNmMwIDEuNCAxIDMgMi4yIDMuNkwzODQgMTYwbDEyLjQgMjkuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDQxNiAxNjBsMjkuOC0xMi40YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6XCJdXG59O1xudmFyIGZhQWlyRnJlc2hlbmVyID0gZmFTcHJheUNhblNwYXJrbGVzO1xudmFyIGZhU3RhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTEwODgsIDYxNDQ2XSwgXCJmMDA1XCIsIFwiTTMxNi45IDE4QzMxMS42IDcgMzAwLjQgMCAyODguMSAwcy0yMy40IDctMjguOCAxOEwxOTUgMTUwLjMgNTEuNCAxNzEuNWMtMTIgMS44LTIyIDEwLjItMjUuNyAyMS43cy0uNyAyNC4yIDcuOSAzMi43TDEzNy44IDMyOSAxMTMuMiA0NzQuN2MtMiAxMiAzIDI0LjIgMTIuOSAzMS4zczIzIDggMzMuOCAyLjNsMTI4LjMtNjguNSAxMjguMyA2OC41YzEwLjggNS43IDIzLjkgNC45IDMzLjgtMi4zczE0LjktMTkuMyAxMi45LTMxLjNMNDM4LjUgMzI5IDU0Mi43IDIyNS45YzguNi04LjUgMTEuNy0yMS4yIDcuOS0zMi43cy0xMy43LTE5LjktMjUuNy0yMS43TDM4MS4yIDE1MC4zIDMxNi45IDE4elwiXVxufTtcbnZhciBmYVJlcGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZXBlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNTddLCBcImYzNjNcIiwgXCJNMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzIDQzLTk2IDk2LTk2SDMyMHYzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMzIwIDE5LjEgMzIwIDMyVjY0SDE2MEM3MS42IDY0IDAgMTM1LjYgMCAyMjR6bTUxMiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDUzLTQzIDk2LTk2IDk2SDE5MlYzNTJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42VjQ0OEgzNTJjODguNCAwIDE2MC03MS42IDE2MC0xNjB6XCJdXG59O1xudmFyIGZhQ3Jvc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvc3MnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgzMjcsIDEwMDEzXSwgXCJmNjU0XCIsIFwiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MzJjMCAyNi41IDIxLjUgNDggNDggNDhoODBWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1Nmg4MGMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjU2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl1cbn07XG52YXIgZmFCb3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjMwXSwgXCJmNDY2XCIsIFwiTTUwLjcgNTguNUwwIDE2MEgyMDhWMzJIOTMuN0M3NS41IDMyIDU4LjkgNDIuMyA1MC43IDU4LjV6TTI0MCAxNjBINDQ4TDM5Ny4zIDU4LjVDMzg5LjEgNDIuMyAzNzIuNSAzMiAzNTQuMyAzMkgyNDBWMTYwem0yMDggMzJIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MnpcIl1cbn07XG52YXIgZmFWZW51c01hcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVudXMtbWFycycsXG4gIGljb246IFs2NDAsIDUxMiwgWzk4OTJdLCBcImYyMjhcIiwgXCJNMTc2IDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM1MiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xVjM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMDh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMlYzNDkuMUM2Mi4xIDMzNC4xIDAgMjYyLjMgMCAxNzZDMCA3OC44IDc4LjggMCAxNzYgMHMxNzYgNzguOCAxNzYgMTc2ek0yNzEuOSAzNjAuNmMxOS4zLTEwLjEgMzYuOS0yMy4xIDUyLjEtMzguNGMyMCAxOC41IDQ2LjcgMjkuOCA3Ni4xIDI5LjhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJjLTcuMiAwLTE0LjMgLjctMjEuMSAyYy00LjktMjEuNS0xMy00MS43LTI0LTYwLjJDMzY5LjMgNjYgMzg0LjQgNjQgNDAwIDY0YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsMjAuNi0yMC42TDQ4NyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0OTQuMyAwIDUwNCAwSDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxMzZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzMuNC0zMy40TDU0NSAxNDAuMmMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2Yy01MC41IDAtOTYtMjEuMy0xMjguMS01NS40elwiXVxufTtcbnZhciBmYUFycm93UG9pbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1wb2ludGVyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJtb3VzZS1wb2ludGVyXCJdLCBcImYyNDVcIiwgXCJNMCA1NS4yVjQyNmMwIDEyLjIgOS45IDIyIDIyIDIyYzYuMyAwIDEyLjQtMi43IDE2LjYtNy41TDEyMS4yIDM0Nmw1OC4xIDExNi4zYzcuOSAxNS44IDI3LjEgMjIuMiA0Mi45IDE0LjNzMjIuMi0yNy4xIDE0LjMtNDIuOUwxNzkuOCAzMjBIMjk3LjljMTIuMiAwIDIyLjEtOS45IDIyLjEtMjIuMWMwLTYuMy0yLjctMTIuMy03LjQtMTYuNUwzOC42IDM3LjlDMzQuMyAzNC4xIDI4LjkgMzIgMjMuMiAzMkMxMC40IDMyIDAgNDIuNCAwIDU1LjJ6XCJdXG59O1xudmFyIGZhTW91c2VQb2ludGVyID0gZmFBcnJvd1BvaW50ZXI7XG52YXIgZmFNYXhpbWl6ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXhpbWl6ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXhwYW5kLWFycm93cy1hbHRcIl0sIFwiZjMxZVwiLCBcIk0yMDAgMzJINTZDNDIuNyAzMiAzMiA0Mi43IDMyIDU2VjIwMGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsNDAtNDAgNzkgNzktNzkgNzlMNzMgMjk1Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyIDMwMi4zIDMyIDMxMlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMjAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgzMTJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMyMDkuNyAzMiAyMDAgMzJ6XCJdXG59O1xudmFyIGZhRXhwYW5kQXJyb3dzQWx0ID0gZmFNYXhpbWl6ZTtcbnZhciBmYUNoYXJnaW5nU3RhdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFyZ2luZy1zdGF0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNWU3XCIsIFwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRWNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzMDRoMTZjMjIuMSAwIDQwIDE3LjkgNDAgNDB2MzJjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03MlYyNTIuM2MzMi41LTEwLjIgNTYtNDAuNSA1Ni03Ni4zVjE0NGMwLTguOC03LjItMTYtMTYtMTZINTQ0VjgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djQ4SDQ4MFY4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEg0MzJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDM1LjggMjMuNSA2Ni4xIDU2IDc2LjNWMzc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM0NGMwLTQ4LjYtMzkuNC04OC04OC04OEgzMjBWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIxNi45IDgyLjdjNiA0IDguNSAxMS41IDYuMyAxOC4zbC0yNSA3NC45SDI1NmM2LjcgMCAxMi43IDQuMiAxNSAxMC40cy41IDEzLjMtNC42IDE3LjdsLTExMiA5NmMtNS41IDQuNy0xMy40IDUuMS0xOS4zIDEuMXMtOC41LTExLjUtNi4zLTE4LjNsMjUtNzQuOUg5NmMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN2wxMTItOTZjNS41LTQuNyAxMy40LTUuMSAxOS4zLTEuMXpcIl1cbn07XG52YXIgZmFTaGFwZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcGVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0cmlhbmdsZS1jaXJjbGUtc3F1YXJlXCJdLCBcImY2MWZcIiwgXCJNMzE1LjQgMTUuNUMzMDkuNyA1LjkgMjk5LjIgMCAyODggMHMtMjEuNyA1LjktMjcuNCAxNS41bC05NiAxNjBjLTUuOSA5LjktNi4xIDIyLjItLjQgMzIuMnMxNi4zIDE2LjIgMjcuOCAxNi4ySDM4NGMxMS41IDAgMjIuMi02LjIgMjcuOC0xNi4yczUuNS0yMi4zLS40LTMyLjJsLTk2LTE2MHpNMjg4IDMxMlY0NTZjMCAyMi4xIDE3LjkgNDAgNDAgNDBINDcyYzIyLjEgMCA0MC0xNy45IDQwLTQwVjMxMmMwLTIyLjEtMTcuOS00MC00MC00MEgzMjhjLTIyLjEgMC00MCAxNy45LTQwIDQwek0xMjggNTEyYTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDEgMCAwIDI1NnpcIl1cbn07XG52YXIgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSA9IGZhU2hhcGVzO1xudmFyIGZhU2h1ZmZsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaHVmZmxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU2LCBcInJhbmRvbVwiXSwgXCJmMDc0XCIsIFwiTTQwMy44IDM0LjRjMTItNSAyNS43LTIuMiAzNC45IDYuOWw2NCA2NGM2IDYgOS40IDE0LjEgOS40IDIyLjZzLTMuNCAxNi42LTkuNCAyMi42bC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlzLTE5LjgtMTYuNi0xOS44LTI5LjZWMTYwSDM1MmMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOEwyODQgMjI5LjMgMjQ0IDE3NmwzMS4yLTQxLjZDMjkzLjMgMTEwLjIgMzIxLjggOTYgMzUyIDk2aDMyVjY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZ6TTE2NCAyODIuN0wyMDQgMzM2bC0zMS4yIDQxLjZDMTU0LjcgNDAxLjggMTI2LjIgNDE2IDk2IDQxNkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5NmMxMC4xIDAgMTkuNi00LjcgMjUuNi0xMi44TDE2NCAyODIuN3ptMjc0LjYgMTg4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlY0MTZIMzUyYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5NmMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNEwzMjYuNCAzMzkuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44aDMyVjMyMGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0elwiXVxufTtcbnZhciBmYVJhbmRvbSA9IGZhU2h1ZmZsZTtcbnZhciBmYVBlcnNvblJ1bm5pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXJ1bm5pbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzksIFwicnVubmluZ1wiXSwgXCJmNzBjXCIsIFwiTTMyMCA0OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xMjUuNyAxNzUuNWM5LjktOS45IDIzLjQtMTUuNSAzNy41LTE1LjVjMS45IDAgMy44IC4xIDUuNiAuM0wxMzcuNiAyNTRjLTkuMyAyOCAxLjcgNTguOCAyNi44IDc0LjVsODYuMiA1My45LTI1LjQgODguOGMtNC45IDE3IDUgMzQuNyAyMiAzOS42czM0LjctNSAzOS42LTIybDI4LjctMTAwLjRjNS45LTIwLjYtMi42LTQyLjYtMjAuNy01My45TDIzOCAyOTlsMzAuOS04Mi40IDUuMSAxMi4zQzI4OSAyNjQuNyAzMjMuOSAyODggMzYyLjcgMjg4SDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNjIuN2MtMTIuOSAwLTI0LjYtNy44LTI5LjUtMTkuN2wtNi4zLTE1Yy0xNC42LTM1LjEtNDQuMS02MS45LTgwLjUtNzMuMWwtNDguNy0xNWMtMTEuMS0zLjQtMjIuNy01LjItMzQuNC01LjJjLTMxIDAtNjAuOCAxMi4zLTgyLjcgMzQuM0w1Ny40IDE1My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDIzLjEtMjMuMXpNOTEuMiAzNTJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjkuNmMxOSAwIDM2LjItMTEuMiA0My45LTI4LjVMMTU3IDM2MS42bC05LjUtNmMtMTcuNS0xMC45LTMwLjUtMjYuOC0zNy45LTQ0LjlMOTEuMiAzNTJ6XCJdXG59O1xudmFyIGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZztcbnZhciBmYU1vYmlsZVJldHJvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vYmlsZS1yZXRybycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTUyN1wiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptNjQgOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgwIDM1MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDU2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2LTU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNTZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYtNTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA1NmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xMjggNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTI4elwiXVxufTtcbnZhciBmYUdyaXBMaW5lc1ZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtbGluZXMtdmVydGljYWwnLFxuICBpY29uOiBbMTkyLCA1MTIsIFtdLCBcImY3YTVcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjR6bTEyOCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0elwiXVxufTtcbnZhciBmYVNwaWRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGlkZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzNzVdLCBcImY3MTdcIiwgXCJNMTU4LjQgMzIuNmM0LjgtMTIuNC0xLjQtMjYuMy0xMy44LTMxcy0yNi4zIDEuNC0zMSAxMy44TDgxLjEgMTAwYy03LjkgMjAuNy0zIDQ0LjEgMTIuNyA1OS43bDU3LjQgNTcuNEw3MC44IDE5MC4zYy0yLjQtLjgtNC4zLTIuNy01LjEtNS4xTDQ2LjggMTI4LjRDNDIuNiAxMTUuOCAyOSAxMDkgMTYuNCAxMTMuMlMtMyAxMzEgMS4yIDE0My42bDE4LjkgNTYuOGM1LjYgMTYuNyAxOC43IDI5LjggMzUuNCAzNS40TDExNi4xIDI1NiA1NS42IDI3Ni4yYy0xNi43IDUuNi0yOS44IDE4LjctMzUuNCAzNS40TDEuMiAzNjguNEMtMyAzODEgMy44IDM5NC42IDE2LjQgMzk4LjhzMjYuMi0yLjYgMzAuNC0xNS4ybDE4LjktNTYuOGMuOC0yLjQgMi43LTQuMyA1LjEtNS4xbDgwLjQtMjYuOEw5My43IDM1Mi4zQzc4LjEgMzY4IDczLjEgMzkxLjQgODEuMSA0MTJsMzIuNSA4NC42YzQuOCAxMi40IDE4LjYgMTguNSAzMSAxMy44czE4LjUtMTguNiAxMy44LTMxbC0zMi41LTg0LjZjLTEuMS0zLS40LTYuMyAxLjgtOC41TDE2MCAzNTMuOWMxIDUyLjEgNDMuNiA5NC4xIDk2IDk0LjFzOTUtNDEuOSA5Ni05NC4xbDMyLjMgMzIuM2MyLjIgMi4yIDIuOSA1LjYgMS44IDguNWwtMzIuNSA4NC42Yy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhMNDMwLjkgNDEyYzcuOS0yMC43IDMtNDQuMS0xMi43LTU5LjdsLTU3LjQtNTcuNCA4MC40IDI2LjhjMi40IC44IDQuMyAyLjcgNS4xIDUuMWwxOC45IDU2LjhjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMnMxOS40LTE3LjggMTUuMi0zMC40bC0xOC45LTU2LjhjLTUuNi0xNi43LTE4LjctMjkuOC0zNS40LTM1LjRMMzk1LjkgMjU2bDYwLjUtMjAuMmMxNi43LTUuNiAyOS44LTE4LjcgMzUuNC0zNS40bDE4LjktNTYuOGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMTguOSA1Ni44Yy0uOCAyLjQtMi43IDQuMy01LjEgNS4xbC04MC40IDI2LjggNTcuNC01Ny40YzE1LjYtMTUuNiAyMC42LTM5IDEyLjctNTkuN0wzOTguNCAxNS40QzM5My42IDMgMzc5LjgtMy4yIDM2Ny40IDEuNnMtMTguNSAxOC42LTEzLjggMzFsMzIuNSA4NC42YzEuMSAzIC40IDYuMy0xLjggOC41TDMzNiAxNzQuMVYxNjBjMC0zMS44LTE4LjYtNTkuMy00NS41LTcyLjJjLTkuMS00LjQtMTguNSAzLjMtMTguNSAxMy40VjExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxMDEuMmMwLTEwLjEtOS40LTE3LjctMTguNS0xMy40QzE5NC42IDEwMC43IDE3NiAxMjguMiAxNzYgMTYwdjE0LjFsLTQ4LjMtNDguM2MtMi4yLTIuMi0yLjktNS42LTEuOC04LjVsMzIuNS04NC42elwiXVxufTtcbnZhciBmYUhhbmRzQm91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMtYm91bmQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZjlcIiwgXCJNOTYgMzJDOTYgMTQuMyA4MS43IDAgNjQgMFMzMiAxNC4zIDMyIDMyVjk2djU5LjEgLjdWMTkydjIxLjljMCAxNC4yIDUuMSAyNy45IDE0LjMgMzguN0wxMzEuNiAzNTJIMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMySDI4OGg2NEg0ODBoMzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRoLTMuNmw4NS4zLTk5LjVjOS4yLTEwLjggMTQuMy0yNC41IDE0LjMtMzguN1YxOTIgMTU1Ljh2LS43Vjk2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjk2djQ4LjhsLTY5LjMgOTIuNGMtNS43IDcuNi0xNi4xIDkuNi0yNC4yIDQuOGMtOS43LTUuNy0xMi4xLTE4LjctNS4xLTI3LjVMNDczIDE4MGMxMC44LTEzLjUgOC45LTMzLjMtNC40LTQ0LjVzLTMzLTkuOC00NC41IDMuMmwtNDYuNyA1Mi41QzM2MSAyMDkuNyAzNTIgMjMzLjQgMzUyIDI1OC4xVjMyMHYzMkgyODhWMzIwIDI1OC4xYzAtMjQuNi05LTQ4LjQtMjUuNC02Ni44bC00Ni43LTUyLjVjLTExLjUtMTMtMzEuMy0xNC40LTQ0LjUtMy4ycy0xNS4yIDMwLjktNC40IDQ0LjVsMjcuNiAzNC41YzcgOC44IDQuNyAyMS44LTUuMSAyNy41Yy04LjEgNC44LTE4LjYgMi43LTI0LjItNC44TDk2IDE0NC44Vjk2IDMyem02NCA0NDh2MzJIMjg4VjQ4MGg2NHYzMkg0ODBWNDgwaDMyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ4MCAzNTIgMjg4IDE2MCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMzJ6XCJdXG59O1xudmFyIGZhRmlsZUludm9pY2VEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1pbnZvaWNlLWRvbGxhcicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MVwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTY0IDgwYzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0xMjggNzJjOC44IDAgMTYgNy4yIDE2IDE2djE3LjNjOC41IDEuMiAxNi43IDMuMSAyNC4xIDUuMWM4LjUgMi4zIDEzLjYgMTEgMTEuMyAxOS42cy0xMSAxMy42LTE5LjYgMTEuM2MtMTEuMS0zLTIyLTUuMi0zMi4xLTUuM2MtOC40LS4xLTE3LjQgMS44LTIzLjYgNS41Yy01LjcgMy40LTguMSA3LjMtOC4xIDEyLjhjMCAzLjcgMS4zIDYuNSA3LjMgMTAuMWM2LjkgNC4xIDE2LjYgNy4xIDI5LjIgMTAuOWwuNSAuMSAwIDAgMCAwYzExLjMgMy40IDI1LjMgNy42IDM2LjMgMTQuNmMxMi4xIDcuNiAyMi40IDE5LjcgMjIuNyAzOC4yYy4zIDE5LjMtOS42IDMzLjMtMjIuOSA0MS42Yy03LjcgNC44LTE2LjQgNy42LTI1LjEgOS4xVjQ0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY0MjIuMmMtMTEuMi0yLjEtMjEuNy01LjctMzAuOS04LjlsMCAwIDAgMGMtMi4xLS43LTQuMi0xLjQtNi4yLTIuMWMtOC40LTIuOC0xMi45LTExLjktMTAuMS0yMC4yczExLjktMTIuOSAyMC4yLTEwLjFjMi41IC44IDQuOCAxLjYgNy4xIDIuNGwwIDAgMCAwIDAgMGMxMy42IDQuNiAyNC42IDguNCAzNi4zIDguN2M5LjEgLjMgMTcuOS0xLjcgMjMuNy01LjNjNS4xLTMuMiA3LjktNy4zIDcuOC0xNGMtLjEtNC42LTEuOC03LjgtNy43LTExLjZjLTYuOC00LjMtMTYuNS03LjQtMjktMTEuMmwtMS42LS41IDAgMGMtMTEtMy4zLTI0LjMtNy4zLTM0LjgtMTMuN2MtMTItNy4yLTIyLjYtMTguOS0yMi43LTM3LjNjLS4xLTE5LjQgMTAuOC0zMi44IDIzLjgtNDAuNWM3LjUtNC40IDE1LjgtNy4yIDI0LjEtOC43VjIzMmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTZcIiwgXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43djg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45djY1LjVjMCAxMC42IDEwLjIgMTguMyAyMC40IDE1LjRsMTcxLjYtNDkgMCA3MC45LTU3LjYgNDMuMmMtNCAzLTYuNCA3LjgtNi40IDEyLjh2NDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zVjkzLjdDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhWFJheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd4LXJheScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQ5N1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMlY0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMjU2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJIMTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjQ4SDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyNDB2NzAuNkwxODkuMSAzMDdjLTUuMi0yLTEwLjYtMy0xNi4yLTNoLTIuMWMtMjMuNiAwLTQyLjggMTkuMi00Mi44IDQyLjhjMCA5LjYgMy4yIDE4LjkgOS4xIDI2LjRsMTguMiAyMy4yYzkuNyAxMi40IDI0LjYgMTkuNiA0MC4zIDE5LjZIMzE2LjRjMTUuNyAwIDMwLjYtNy4yIDQwLjMtMTkuNmwxOC4yLTIzLjJjNS45LTcuNSA5LjEtMTYuOCA5LjEtMjYuNGMwLTIzLjYtMTkuMi00Mi44LTQyLjgtNDIuOEgzMzljLTUuNSAwLTExIDEtMTYuMiAzTDI3MiAzMjYuNlYyNTZIMzg0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI3MlYxNzZoODBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjcyVjExMmMwLTguOC03LjItMTYtMTYtMTZ6TTIwOCAzNTJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem04MCAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYVNwZWxsQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BlbGwtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY4OTFcIiwgXCJNMTEyIDBDOTkuMSAwIDg3LjQgNy44IDgyLjUgMTkuN2wtNjYuNyAxNjAtMTMuMyAzMmMtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMkw2Ni43IDIyNGg5MC43bDUuMSAxMi4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44bC0xMy4zLTMyLTY2LjctMTYwQzEzNi42IDcuOCAxMjQuOSAwIDExMiAwem0xOC43IDE2MEg5My4zTDExMiAxMTUuMiAxMzAuNyAxNjB6TTI1NiAzMnY5NiA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4MGM0NC4yIDAgODAtMzUuOCA4MC04MGMwLTIzLjEtOS44LTQzLjgtMjUuNC01OC40YzYtMTEuMiA5LjQtMjQgOS40LTM3LjZjMC00NC4yLTM1LjgtODAtODAtODBIMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgNjRIMzIwVjY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em0tMzIgNjRoMzIgMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzIwVjE2MHpNNTY2LjYgMzEwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzUyIDQzNC43bC03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJ6XCJdXG59O1xudmFyIGZhU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3MTVcIiwgXCJNNS4xIDkuMkMxMy4zLTEuMiAyOC40LTMuMSAzOC44IDUuMWw1OTIgNDY0YzEwLjQgOC4yIDEyLjMgMjMuMyA0LjEgMzMuN3MtMjMuMyAxMi4zLTMzLjcgNC4xTDkuMiA0Mi45Qy0xLjIgMzQuNy0zLjEgMTkuNiA1LjEgOS4yelwiXVxufTtcbnZhciBmYUNvbXB1dGVyTW91c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcHV0ZXItbW91c2UnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0MzMsIFwibW91c2VcIl0sIFwiZjhjY1wiLCBcIk0wIDE5MkgxNzZWMEgxNjBDNzEuNiAwIDAgNzEuNiAwIDE2MHYzMnptMCAzMlYzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoNjRjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMjI0SDE5MiAwem0zODQtMzJWMTYwQzM4NCA3MS42IDMxMi40IDAgMjI0IDBIMjA4VjE5MkgzODR6XCJdXG59O1xudmFyIGZhTW91c2UgPSBmYUNvbXB1dGVyTW91c2U7XG52YXIgZmFBcnJvd1JpZ2h0VG9CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0LXRvLWJyYWNrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ24taW5cIl0sIFwiZjA5MFwiLCBcIk0zNTIgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptLTkuNCAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjQyLjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4elwiXVxufTtcbnZhciBmYVNpZ25JbiA9IGZhQXJyb3dSaWdodFRvQnJhY2tldDtcbnZhciBmYVNob3BTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG9wLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJzdG9yZS1hbHQtc2xhc2hcIl0sIFwiZTA3MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC01NC44LTQzVjIyNEg1MTJWMzc2TDM4NCAyNzUuN1YyMjRIMzIwdjEuNUwyNzcuMiAxOTJINjAzLjJjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjhjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEgxMjEuN2MtMTYgMC0zMSA4LTM5LjkgMjEuNEw3NC4xIDMyLjggMzguOCA1LjF6TTM2LjggMTkyaDg1TDIxIDExMi41IDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNMzIwIDM4NEgxMjhWMjI0SDY0VjM4NHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzk4LjVsLTY0LTUwLjRWMzg0ek01NDQgNTEybC0uMyAwaC42bC0uMyAwelwiXVxufTtcbnZhciBmYVN0b3JlQWx0U2xhc2ggPSBmYVNob3BTbGFzaDtcbnZhciBmYVNlcnZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZXJ2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyMzNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTI4MCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQ4IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM1MmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptMjgwIDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFWaXJ1c0NvdmlkU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXMtY292aWQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YTlcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0NzIuMSAzNDQuN2MxMS40LTE5LjUgMTkuMS00MS40IDIyLjMtNjQuN0g1Mjh2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTZINDk0LjRjLTQuMi0zMC43LTE2LjMtNTguOC0zNC4xLTgyLjNMNDg0IDEyNS45bDExLjMgMTEuM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDcyLjcgNDYuN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUw0NTAuMSA5MmwtMjMuOCAyMy44QzQwMi44IDk3LjkgMzc0LjcgODUuOCAzNDQgODEuNlY0OGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMTZWODEuNmMtMzAuNyA0LjItNTguOCAxNi4zLTgyLjMgMzQuMUwxODkuOSA5MmwxMS4zLTExLjNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwxMzQuMSA3OS44IDM4LjggNS4xem0zNjIuNSA0MDdMMTQ5LjIgMjEzLjVjLTEuNSA2LTIuNyAxMi4yLTMuNSAxOC41SDExMlYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyODBoMzMuNmM0LjIgMzAuNyAxNi4zIDU4LjggMzQuMSA4Mi4zTDE1NiAzODYuMWwtMTEuMy0xMS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2LjYgNTYuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMTg5LjkgNDIwbDIzLjgtMjMuOGMyMy41IDE3LjkgNTEuNyAyOS45IDgyLjMgMzQuMVY0NjRIMjgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM0NFY0MzAuNGMyMC40LTIuOCAzOS43LTkuMSA1Ny4zLTE4LjJ6XCJdXG59O1xudmFyIGZhU2hvcExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hvcC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGE1XCIsIFwiTTM2LjggMTkySDQ0OS42YzIwLjItMTkuOCA0Ny45LTMyIDc4LjQtMzJjMzAuNSAwIDU4LjEgMTIuMiA3OC4zIDMxLjljMTguOS0xLjYgMzMuNy0xNy40IDMzLjctMzYuN2MwLTcuMy0yLjItMTQuNC02LjItMjAuNEw1NTguMiAyMS40QzU0OS4zIDggNTM0LjQgMCA1MTguMyAwSDEyMS43Yy0xNiAwLTMxIDgtMzkuOSAyMS40TDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNMzg0IDIyNEgzMjBWMzg0SDEyOFYyMjRINjRWMzg0djgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMzNmMyNi41IDAgNDgtMjEuNSA0OC00OFYzODQgMzUyIDIyNHptMTQ0IDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUhvdXJnbGFzc1N0YXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXJnbGFzcy1zdGFydCcsXG4gIGljb246IFszODQsIDUxMiwgW1wiaG91cmdsYXNzLTFcIl0sIFwiZjI1MVwiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNMjg4IDQzN3YxMUg5NlY0MzdjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWMxOCAxOCAyOC4xIDQyLjQgMjguMSA2Ny45elwiXVxufTtcbnZhciBmYUhvdXJnbGFzczEgPSBmYUhvdXJnbGFzc1N0YXJ0O1xudmFyIGZhQmxlbmRlclBob25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JsZW5kZXItcGhvbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY2YjZcIiwgXCJNMjI0IDM1MkwxOTYuOCA1Mi4zQzE5NC4yIDI0LjIgMjE2LjMgMCAyNDQuNiAwSDUzNC4xYzIxLjEgMCAzNi40IDIwLjEgMzAuOSA0MC40TDU1OC41IDY0SDQwMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg1NDkuOGwtMTcuNSA2NEg0MDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINTIzLjZsLTE3LjUgNjRINDAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk3LjVMNDgwIDM1MkgyMjR6bS0xNiAzMkg0OTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MzJjMCAyNi41LTIxLjUgNDgtNDggNDhIMjA4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE0NCA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE0Ny41IDMwLjdjMTAuOCA2LjcgMTUuMyAyMSAxMC42IDMzLjRsLTIyIDU3LjhjLTQuMiAxMC45LTE0LjUgMTcuNi0yNS4zIDE2LjRsLTMzLjMtMy42Yy0xMy42IDQyLjItMTMuNiA4OC40IDAgMTMwLjdsMzMuMy0zLjZjMTAuOS0xLjIgMjEuMiA1LjUgMjUuMyAxNi40bDIyIDU3LjhjNC43IDEyLjQgLjIgMjYuNy0xMC42IDMzLjRsLTQ0IDI3LjJjLTkuNyA2LTIxLjkgNC4yLTI5LjgtNC4zQy0yNC42IDI4Ni0yNC42IDExNCA3My43IDcuOEM4MS42LS43IDkzLjgtMi41IDEwMy41IDMuNWw0NCAyNy4yelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctd2hlYXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZGJcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNDBWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTExMi0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJ6TTY0IDExMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDE3NnptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2em0zODQgODB2MTZjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjI3MmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnptMCAxMjhjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjM4NGMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnptMCAxMTJjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjQ5NmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnpNNTEyIDQ5NnYxNkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQxNmgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHptMC05Nkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjMwNGgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNnptMC0xMjh2MTZINDk2Yy00NC4yIDAtODAtMzUuOC04MC04MFYxOTJoMTZjNDQuMiAwIDgwIDM1LjggODAgODB6TTUyOCAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWNTZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTk2IDY0djMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ1NiA3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFQZXJzb25CcmVhc3RmZWVkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1icmVhc3RmZWVkaW5nJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNTNhXCIsIFwiTTIyNCAwYTgwIDgwIDAgMSAxIDAgMTYwQTgwIDgwIDAgMSAxIDIyNCAwek00MzYuOCAzODIuOEwzNzMuNSA0NjJjLTE2LjYgMjAuNy00Ni44IDI0LjEtNjcuNSA3LjVjLTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uOC0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOFYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NDhjMCAuOCAwIDEuNiAuMSAyLjRsMTAxLjQgNTAuN2MyMy43IDExLjkgMzMuMyA0MC43IDIxLjUgNjQuNHMtNDAuNyAzMy4zLTY0LjQgMjEuNUwyNy4yIDQyNy4zYy0xLjEtLjUtMi4yLTEuMS0zLjMtMS43Yy00LjktMi44LTkuMi02LjQtMTIuNi0xMC42Yy00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40Yy0zLjMtMTItMS45LTI1LjIgNC44LTM2LjZjLjYtMS4xIDEuMy0yLjIgMi0zLjJMNzUuNiAyNTYuMWMyNi43LTQwLjEgNzEuNy02NC4xIDExOS44LTY0LjFoNzUuMmM0Ni41IDAgOTAuMSAyMi41IDExNy4yIDYwLjNsNTAuNyA3MC45YzIuMiAzIDQgNi4xIDUuNSA5LjRjMi45IDYuNyA0LjMgMTMuOCA0IDIwLjhjLS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAwelwiXVxufTtcbnZhciBmYVJpZ2h0VG9CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpZ2h0LXRvLWJyYWNrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ24taW4tYWx0XCJdLCBcImYyZjZcIiwgXCJNMjE3LjkgMTA1LjlMMzQwLjcgMjI4LjdjNy4yIDcuMiAxMS4zIDE3LjEgMTEuMyAyNy4zcy00LjEgMjAuMS0xMS4zIDI3LjNMMjE3LjkgNDA2LjFjLTYuNCA2LjQtMTUgOS45LTI0IDkuOWMtMTguNyAwLTMzLjktMTUuMi0zMy45LTMzLjlsMC02Mi4xTDMyIDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMCAwLTYyLjFjMC0xOC43IDE1LjItMzMuOSAzMy45LTMzLjljOSAwIDE3LjYgMy42IDI0IDkuOXpNMzUyIDQxNmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDI1NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVNpZ25JbkFsdCA9IGZhUmlnaHRUb0JyYWNrZXQ7XG52YXIgZmFWZW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ZW51cycsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTJdLCBcImYyMjFcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMVYzODRIMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDIyNFYzNDkuMXpcIl1cbn07XG52YXIgZmFQYXNzcG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXNzcG9ydCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjVhYlwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgzODRjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMTgzIDI3OC44Yy0yNy45LTEzLjItNDguNC0zOS40LTUzLjctNzAuOGgzOS4xYzEuNiAzMC40IDcuNyA1My44IDE0LjYgNzAuOHptNDEuMyA5LjJsLS4zIDAtLjMgMGMtMi40LTMuNS01LjctOC45LTkuMS0xNi41Yy02LTEzLjYtMTIuNC0zNC4zLTE0LjItNjMuNWg0Ny4xYy0xLjggMjkuMi04LjEgNDkuOS0xNC4yIDYzLjVjLTMuNCA3LjYtNi43IDEzLTkuMSAxNi41em00MC43LTkuMmM2LjgtMTcuMSAxMi45LTQwLjQgMTQuNi03MC44aDM5LjFjLTUuMyAzMS40LTI1LjggNTcuNi01My43IDcwLjh6TTI3OS42IDE3NmMtMS42LTMwLjQtNy43LTUzLjgtMTQuNi03MC44YzI3LjkgMTMuMiA0OC40IDM5LjQgNTMuNyA3MC44SDI3OS42ek0yMjMuNyA5NmwuMyAwIC4zIDBjMi40IDMuNSA1LjcgOC45IDkuMSAxNi41YzYgMTMuNiAxMi40IDM0LjMgMTQuMiA2My41SDIwMC41YzEuOC0yOS4yIDguMS00OS45IDE0LjItNjMuNWMzLjQtNy42IDYuNy0xMyA5LjEtMTYuNXpNMTgzIDEwNS4yYy02LjggMTcuMS0xMi45IDQwLjQtMTQuNiA3MC44SDEyOS4zYzUuMy0zMS40IDI1LjgtNTcuNiA1My43LTcwLjh6TTM1MiAxOTJBMTI4IDEyOCAwIDEgMCA5NiAxOTJhMTI4IDEyOCAwIDEgMCAyNTYgMHpNMTEyIDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzMzZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTEyelwiXVxufTtcbnZhciBmYUhlYXJ0UHVsc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtcHVsc2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhlYXJ0YmVhdFwiXSwgXCJmMjFlXCIsIFwiTTIyOC4zIDQ2OS4xTDQ3LjYgMzAwLjRjLTQuMi0zLjktOC4yLTguMS0xMS45LTEyLjRoODdjMjIuNiAwIDQzLTEzLjYgNTEuNy0zNC41bDEwLjUtMjUuMiA0OS4zIDEwOS41YzMuOCA4LjUgMTIuMSAxNCAyMS40IDE0LjFzMTcuOC01IDIyLTEzLjNMMzIwIDI1My43bDEuNyAzLjRjOS41IDE5IDI4LjkgMzEgNTAuMSAzMUg0NzYuM2MtMy43IDQuMy03LjcgOC41LTExLjkgMTIuNEwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45ek01MDMuNyAyNDBoLTEzMmMtMyAwLTUuOC0xLjctNy4yLTQuNGwtMjMuMi00Ni4zYy00LjEtOC4xLTEyLjQtMTMuMy0yMS41LTEzLjNzLTE3LjQgNS4xLTIxLjUgMTMuM2wtNDEuNCA4Mi44TDIwNS45IDE1OC4yYy0zLjktOC43LTEyLjctMTQuMy0yMi4yLTE0LjFzLTE4LjEgNS45LTIxLjggMTQuOGwtMzEuOCA3Ni4zYy0xLjIgMy00LjIgNC45LTcuNCA0LjlIMTZjLTIuNiAwLTUgLjQtNy4zIDEuMUMzIDIyNS4yIDAgMjA4LjIgMCAxOTAuOXYtNS44YzAtNjkuOSA1MC41LTEyOS41IDExOS40LTE0MUMxNjUgMzYuNSAyMTEuNCA1MS40IDI0NCA4NGwxMiAxMiAxMi0xMmMzMi42LTMyLjYgNzktNDcuNSAxMjQuNi0zOS45QzQ2MS41IDU1LjYgNTEyIDExNS4yIDUxMiAxODUuMXY1LjhjMCAxNi45LTIuOCAzMy41LTguMyA0OS4xelwiXVxufTtcbnZhciBmYUhlYXJ0YmVhdCA9IGZhSGVhcnRQdWxzZTtcbnZhciBmYVBlb3BsZUNhcnJ5Qm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1jYXJyeS1ib3gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInBlb3BsZS1jYXJyeVwiXSwgXCJmNGNlXCIsIFwiTTgwIDQ4YTQ4IDQ4IDAgMSAxIDk2IDBBNDggNDggMCAxIDEgODAgNDh6bTY0IDE5My43djY1LjFsNTEgNTFjNy4xIDcuMSAxMS44IDE2LjIgMTMuNCAyNi4xbDE1LjIgOTAuOWMyLjkgMTcuNC04LjkgMzMuOS0yNi4zIDM2LjhzLTMzLjktOC45LTM2LjgtMjYuM2wtMTQuMy04NS45TDY2LjggMzIwQzU0LjggMzA4IDQ4IDI5MS43IDQ4IDI3NC43VjE4Ni42YzAtMzIuNCAyNi4yLTU4LjYgNTguNi01OC42YzI0LjEgMCA0Ni41IDEyIDU5LjkgMzJsNDcuNCA3MS4xIDEwLjEgNVYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjc2LjJsMTAuMS01TDQ3My41IDE2MGMxMy4zLTIwIDM1LjgtMzIgNTkuOS0zMmMzMi40IDAgNTguNiAyNi4yIDU4LjYgNTguNnY4OC4xYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC03OS40IDc5LjQtMTQuMyA4NS45Yy0yLjkgMTcuNC0xOS40IDI5LjItMzYuOCAyNi4zcy0yOS4yLTE5LjQtMjYuMy0zNi44bDE1LjItOTAuOWMxLjYtOS45IDYuMy0xOSAxMy40LTI2LjFsNTEtNTFWMjQxLjdsLTE5IDI4LjVjLTQuNiA3LTExIDEyLjYtMTguNSAxNi4zbC01OS42IDI5LjhjLTIuNCAxLjMtNC45IDIuMi03LjYgMi44Yy0yLjYgLjYtNS4zIC45LTcuOSAuOEgyNTYuN2MtMi41IC4xLTUtLjItNy41LS43Yy0yLjktLjYtNS42LTEuNi04LjEtM2wtNTkuNS0yOS44Yy03LjUtMy43LTEzLjgtOS40LTE4LjUtMTYuM2wtMTktMjguNXpNMi4zIDQ2OC4xTDUwLjEgMzQ4LjZsNDkuMiA0OS4yLTM3LjYgOTRjLTYuNiAxNi40LTI1LjIgMjQuNC00MS42IDE3LjhTLTQuMyA0ODQuNSAyLjMgNDY4LjF6TTUxMiAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptNzcuOSAzNDguNmw0Ny44IDExOS41YzYuNiAxNi40LTEuNCAzNS0xNy44IDQxLjZzLTM1LTEuNC00MS42LTE3LjhsLTM3LjYtOTQgNDkuMi00OS4yelwiXVxufTtcbnZhciBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDtcbnZhciBmYVRlbXBlcmF0dXJlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1oaWdoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzY5XCIsIFwiTTQxNiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAgMTI4QTk2IDk2IDAgMSAwIDQxNiAwYTk2IDk2IDAgMSAwIDAgMTkyek05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzIxNy44IDMzMi42IDIyNCAzNDkuNSAyMjQgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjlDODguOSAzMDguNCA5NiAyOTMuOCA5NiAyNzYuNVYxMTJ6TTE0NCAwQzgyLjEgMCAzMiA1MC4yIDMyIDExMlYyNzYuNWMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMxMS4yIDMwNC4yIDAgMzM0LjggMCAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI1NiA1MC4yIDIwNS45IDAgMTQ0IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM1YxMTJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzIyLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl1cbn07XG52YXIgZmFNaWNyb2NoaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWljcm9jaGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMmRiXCIsIFwiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjRjMCAzNS4zIDI4LjcgNjQgNjQgNjR2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRoNDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDQ4VjI4MGg0MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0NDhWMTc2aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ0OGMwLTM1LjMtMjguNy02NC02NC02NFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NEgyODBWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNjRIMTc2VjI0ek0xNjAgMTI4SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAzMkgxNjBWMzUySDM1MlYxNjB6XCJdXG59O1xudmFyIGZhQ3Jvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvd24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwODFdLCBcImY1MjFcIiwgXCJNMzA5IDEwNmMxMS40LTcgMTktMTkuNyAxOS0zNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDE0LjQgNy42IDI3IDE5IDM0TDIwOS43IDIyMC42Yy05LjEgMTguMi0zMi43IDIzLjQtNDguNiAxMC43TDcyIDE2MGM1LTYuNyA4LTE1IDgtMjRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCAxMTMuOSAwIDEzNnMxNy45IDQwIDQwIDQwYy4yIDAgLjUgMCAuNyAwTDg2LjQgNDI3LjRjNS41IDMwLjQgMzIgNTIuNiA2MyA1Mi42SDQyNi42YzMwLjkgMCA1Ny40LTIyLjEgNjMtNTIuNkw1MzUuMyAxNzZjLjIgMCAuNSAwIC43IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA5IDMgMTcuMyA4IDI0bC04OS4xIDcxLjNjLTE1LjkgMTIuNy0zOS41IDcuNS00OC42LTEwLjdMMzA5IDEwNnpcIl1cbn07XG52YXIgZmFXZWlnaHRIYW5naW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dlaWdodC1oYW5naW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWNkXCIsIFwiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMySDEyMGMtMjIgMC00MS4yIDE1LTQ2LjYgMzYuNGwtNzIgMjg4Yy0zLjYgMTQuMy0uNCAyOS41IDguNyA0MS4yUzMzLjIgNTEyIDQ4IDUxMkg0NjRjMTQuOCAwIDI4LjctNi44IDM3LjgtMTguNXMxMi4zLTI2LjggOC43LTQxLjJsLTcyLTI4OEM0MzMuMiAxNDMgNDE0IDEyOCAzOTIgMTI4SDM0Ni41elwiXVxufTtcbnZhciBmYVhtYXJrc0xpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3htYXJrcy1saW5lcycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5YVwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NUw3IDMxMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTVMNDEgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpNMjY1IDE2N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTV6TTQ1NSAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhRmlsZVByZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXByZXNjcmlwdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEwNCAxOTZoNzJjMzMuMSAwIDYwIDI2LjkgNjAgNjBjMCAyNS41LTE1LjkgNDcuMi0zOC4zIDU1LjlsNDMgNDAuMyAzMy44LTMxYzguMS03LjUgMjAuOC02LjkgMjguMyAxLjJzNi45IDIwLjgtMS4yIDI4LjNMMjcwIDM3OS43bDMxLjcgMjkuN2M4LjEgNy42IDguNSAyMC4yIC45IDI4LjNzLTIwLjIgOC41LTI4LjMgLjlsLTMzLjktMzEuOC0zNC45IDMyYy04LjEgNy41LTIwLjggNi45LTI4LjMtMS4ycy02LjktMjAuOCAxLjItMjguM2wzMi42LTI5LjktNjQuOC02MC44Yy0uOS0uOC0xLjYtMS43LTIuMy0yLjZIMTI0djQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYyOTYgMjE2YzAtMTEgOS0yMCAyMC0yMHptNzIgODBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwSDEyNHY0MGg1MnpcIl1cbn07XG52YXIgZmFXZWlnaHRTY2FsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3ZWlnaHQtc2NhbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIndlaWdodFwiXSwgXCJmNDk2XCIsIFwiTTEyOCAxNzZhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHpNMzkxLjggNjRDMzU5LjUgMjQuOSAzMTAuNyAwIDI1NiAwUzE1Mi41IDI0LjkgMTIwLjIgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzkxLjh6TTI5NiAyMjRjMC0xMC42LTQuMS0yMC4yLTEwLjktMjcuNGwzMy42LTc4LjNjMy41LTguMS0uMy0xNy41LTguNC0yMXMtMTcuNSAuMy0yMSA4LjRMMjU1LjcgMTg0Yy0yMiAuMS0zOS43IDE4LTM5LjcgNDBjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MHpcIl1cbn07XG52YXIgZmFXZWlnaHQgPSBmYVdlaWdodFNjYWxlO1xudmFyIGZhVXNlckdyb3VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZ3JvdXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgxMDEsIFwidXNlci1mcmllbmRzXCJdLCBcImY1MDBcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNjA5LjMgNTEySDQ3MS40YzUuNC05LjQgOC42LTIwLjMgOC42LTMydi04YzAtNjAuNy0yNy4xLTExNS4yLTY5LjgtMTUxLjhjMi40LS4xIDQuNy0uMiA3LjEtLjJoNjEuNEM1NjcuOCAzMjAgNjQwIDM5Mi4yIDY0MCA0ODEuM2MwIDE3LTEzLjggMzAuNy0zMC43IDMwLjd6TTQzMiAyNTZjLTMxIDAtNTktMTIuNi03OS4zLTMyLjlDMzcyLjQgMTk2LjUgMzg0IDE2My42IDM4NCAxMjhjMC0yNi44LTYuNi01Mi4xLTE4LjMtNzQuM0MzODQuMyA0MC4xIDQwNy4yIDMyIDQzMiAzMmM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnMtNTAuMSAxMTItMTEyIDExMnpcIl1cbn07XG52YXIgZmFVc2VyRnJpZW5kcyA9IGZhVXNlckdyb3VwO1xudmFyIGZhQXJyb3dVcEFaID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWEteicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS11cFwiXSwgXCJmMTVlXCIsIFwiTTE4My42IDQyLjRDMTc3LjUgMzUuOCAxNjkgMzIgMTYwIDMycy0xNy41IDMuOC0yMy42IDEwLjRsLTg4IDk2Yy0xMS45IDEzLTExLjEgMzMuMyAyIDQ1LjJzMzMuMyAxMS4xIDQ1LjItMkwxMjggMTQ2LjNWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ2LjNsMzIuNCAzNS40YzExLjkgMTMgMzIuMiAxMy45IDQ1LjIgMnMxMy45LTMyLjIgMi00NS4ybC04OC05NnpNMzIwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg1MC43bC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyOS4zbDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00MTYgMzJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zaDg4LjRsNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMzguOCA0MjguMSAzMiA0MTYgMzJ6TTM5NS44IDE3Nkw0MTYgMTM1LjYgNDM2LjIgMTc2SDM5NS44elwiXVxufTtcbnZhciBmYVNvcnRBbHBoYVVwID0gZmFBcnJvd1VwQVo7XG52YXIgZmFDaGVzc0tuaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1rbmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIyXSwgXCJmNDQxXCIsIFwiTTk2IDQ4TDgyLjcgNjEuM0M3MC43IDczLjMgNjQgODkuNSA2NCAxMDYuNVYyMzguOWMwIDEwLjcgNS4zIDIwLjcgMTQuMiAyNi42bDEwLjYgN2MxNC4zIDkuNiAzMi43IDEwLjcgNDguMSAzbDMuMi0xLjZjMi42LTEuMyA1LTIuOCA3LjMtNC41bDQ5LjQtMzdjNi42LTUgMTUuNy01IDIyLjMgMGMxMC4yIDcuNyA5LjkgMjMuMS0uNyAzMC4zTDkwLjQgMzUwQzczLjkgMzYxLjMgNjQgMzgwIDY0IDQwMEgzODRsMjguOS0xNTljMi4xLTExLjMgMy4xLTIyLjggMy4xLTM0LjNWMTkyQzQxNiA4NiAzMzAgMCAyMjQgMEg4My44QzcyLjkgMCA2NCA4LjkgNjQgMTkuOGMwIDcuNSA0LjIgMTQuMyAxMC45IDE3LjdMOTYgNDh6bTI0IDY4YTIwIDIwIDAgMSAxIDQwIDAgMjAgMjAgMCAxIDEgLTQwIDB6TTIyLjYgNDczLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMxNiA1MDEuOSAyNi4xIDUxMiAzOC42IDUxMkg0MDkuNGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNmMwLTYtMi40LTExLjgtNi42LTE2TDM4NCA0MzJINjRMMjIuNiA0NzMuNHpcIl1cbn07XG52YXIgZmFGYWNlTGF1Z2hTcXVpbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1sYXVnaC1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoLXNxdWludFwiXSwgXCJmNTliXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek05Ni44IDMxNC4xYy0zLjgtMTMuNyA3LjQtMjYuMSAyMS42LTI2LjFIMzkzLjZjMTQuMiAwIDI1LjUgMTIuNCAyMS42IDI2LjFDMzk2LjIgMzgyIDMzMi4xIDQzMiAyNTYgNDMycy0xNDAuMi01MC0xNTkuMi0xMTcuOXptMzYuNy0xOTkuNGw4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDEyNS4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXVxufTtcbnZhciBmYUxhdWdoU3F1aW50ID0gZmFGYWNlTGF1Z2hTcXVpbnQ7XG52YXIgZmFXaGVlbGNoYWlyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWVsY2hhaXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxOTNcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIwLjUgMjQ3LjJjMTIuNC00LjcgMTguNy0xOC41IDE0LTMwLjlzLTE4LjUtMTguNy0zMC45LTE0QzQzLjEgMjI1LjEgMCAyODMuNSAwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGM2MS4yIDAgMTE0LjMtMzQuMyAxNDEuMi04NC43YzYuMi0xMS43IDEuOC0yNi4yLTkuOS0zMi41cy0yNi4yLTEuOC0zMi41IDkuOUMyNDAgNDQwIDIwMi44IDQ2NCAxNjAgNDY0Qzk4LjEgNDY0IDQ4IDQxMy45IDQ4IDM1MmMwLTQ3LjkgMzAuMS04OC44IDcyLjUtMTA0Ljh6TTI1OS44IDE3NmwtMS45LTkuN2MtNC41LTIyLjMtMjQtMzguMy00Ni44LTM4LjNjLTMwLjEgMC01Mi43IDI3LjUtNDYuOCA1N2wyMy4xIDExNS41YzYgMjkuOSAzMi4yIDUxLjQgNjIuOCA1MS40aDUuMWMuNCAwIC44IDAgMS4zIDBoOTQuMWM2LjcgMCAxMi42IDQuMSAxNSAxMC40TDQwMiA0NTkuMmM2IDE2LjEgMjMuOCAyNC42IDQwLjEgMTkuMWw0OC0xNmMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4ybC0xOC43IDYuMi0yNS41LTY4Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOUgyODIuMmwtOS42LTQ4SDMzNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNTkuOHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1hcnJvdy11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYXJyb3ctY2lyY2xlLXVwXCJdLCBcImYwYWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4NSAyMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzEtNzFWMzc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE5My45bC03MSA3MWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM4NSAyMzF6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVVcCA9IGZhQ2lyY2xlQXJyb3dVcDtcbnZhciBmYVRvZ2dsZU9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvZ2dsZS1vbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIwNVwiLCBcIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhIMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkgxOTJ6bTE5MiA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFQZXJzb25XYWxraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTI4Njk0LCBcIndhbGtpbmdcIl0sIFwiZjU1NFwiLCBcIk0xNjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTI2LjUgMTk5LjNjLTEgLjQtMS45IC44LTIuOSAxLjJsLTggMy41Yy0xNi40IDcuMy0yOSAyMS4yLTM0LjcgMzguMmwtMi42IDcuOGMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMnMtMjUuOC0yMy43LTIwLjItNDAuNWwyLjYtNy44YzExLjQtMzQuMSAzNi42LTYxLjkgNjkuNC03Ni41bDgtMy41YzIwLjgtOS4yIDQzLjMtMTQgNjYuMS0xNGM0NC42IDAgODQuOCAyNi44IDEwMS45IDY3LjlMMjgxIDIzMi43bDIxLjQgMTAuN2MxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zTDI0NyAyODcuM2MtMTAuMy01LjItMTguNC0xMy44LTIyLjgtMjQuNWwtOS42LTIzLTE5LjMgNjUuNSA0OS41IDU0YzUuNCA1LjkgOS4yIDEzIDExLjIgMjAuOGwyMyA5Mi4xYzQuMyAxNy4xLTYuMSAzNC41LTIzLjMgMzguOHMtMzQuNS02LjEtMzguOC0yMy4zbC0yMi04OC4xLTcwLjctNzcuMWMtMTQuOC0xNi4xLTIwLjMtMzguNi0xNC43LTU5LjdsMTYuOS02My41ek02OC43IDM5OGwyNS02Mi40YzIuMSAzIDQuNSA1LjggNyA4LjZsNDAuNyA0NC40LTE0LjUgMzYuMmMtMi40IDYtNiAxMS41LTEwLjYgMTYuMUw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w2OC43IDM5OHpcIl1cbn07XG52YXIgZmFXYWxraW5nID0gZmFQZXJzb25XYWxraW5nO1xudmFyIGZhTCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTA4XSwgXCI0Y1wiLCBcIk02NCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0MTZIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGaXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyOTNdLCBcImYwNmRcIiwgXCJNMTU5LjMgNS40YzcuOC03LjMgMTkuOS03LjIgMjcuNyAuMWMyNy42IDI1LjkgNTMuNSA1My44IDc3LjcgODRjMTEtMTQuNCAyMy41LTMwLjEgMzctNDIuOWM3LjktNy40IDIwLjEtNy40IDI4IC4xYzM0LjYgMzMgNjMuOSA3Ni42IDg0LjUgMTE4YzIwLjMgNDAuOCAzMy44IDgyLjUgMzMuOCAxMTEuOUM0NDggNDA0LjIgMzQ4LjIgNTEyIDIyNCA1MTJDOTguNCA1MTIgMCA0MDQuMSAwIDI3Ni41YzAtMzguNCAxNy44LTg1LjMgNDUuNC0xMzEuN0M3My4zIDk3LjcgMTEyLjcgNDguNiAxNTkuMyA1LjR6TTIyNS43IDQxNmMyNS4zIDAgNDcuNy03IDY4LjgtMjFjNDIuMS0yOS40IDUzLjQtODguMiAyOC4xLTEzNC40Yy00LjUtOS0xNi05LjYtMjIuNS0ybC0yNS4yIDI5LjNjLTYuNiA3LjYtMTguNSA3LjQtMjQuNy0uNWMtMTYuNS0yMS00Ni01OC41LTYyLjgtNzkuOGMtNi4zLTgtMTguMy04LjEtMjQuNy0uMWMtMzMuOCA0Mi41LTUwLjggNjkuMy01MC44IDk5LjRDMTEyIDM3NS40IDE2Mi42IDQxNiAyMjUuNyA0MTZ6XCJdXG59O1xudmFyIGZhQmVkUHVsc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVkLXB1bHNlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwcm9jZWR1cmVzXCJdLCBcImY0ODdcIiwgXCJNNDgzLjIgOS42TDUyNCA2NGg5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1MTJjLTcuNiAwLTE0LjctMy42LTE5LjItOS42TDQ2OC43IDcwLjNsLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDMzOS4yIDExMkgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzUyYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41QzQ0NS45IDYuMiA0NTMuMiAxIDQ2MS42IC4xczE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwaDEyLjdsMjAuNyAzMS4xYzExLjIgMTYuOCAzMC42IDI2LjMgNTAuNyAyNC44czM3LjktMTMuNyA0Ni41LTMyTDQ2MS45IDE2MEg1NDRjNTMgMCA5NiA0MyA5NiA5NlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDM1MiAzMjAgNjR2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRzMzIgMTQuMyAzMiAzMlYzNTJIMjg4VjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTE0NCAwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVByb2NlZHVyZXMgPSBmYUJlZFB1bHNlO1xudmFyIGZhU2h1dHRsZVNwYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NodXR0bGUtc3BhY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInNwYWNlLXNodXR0bGVcIl0sIFwiZjE5N1wiLCBcIk0xMzAgNDgwYzQwLjYgMCA4MC40LTExIDExNS4yLTMxLjlMMzUyIDM4NGwtMjI0IDAgMCA5Nmgyek0zNTIgMTI4TDI0NS4yIDYzLjlDMjEwLjQgNDMgMTcwLjYgMzIgMTMwIDMyaC0ydjk2bDIyNCAwek05NiAxMjhsMC05Nkg4MEM1My41IDMyIDMyIDUzLjUgMzIgODB2NDhoOGMtMjIuMSAwLTQwIDE3LjktNDAgNDB2MTZWMzI4djE2YzAgMjIuMSAxNy45IDQwIDQwIDQwSDMydjQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDk2bDAtOTZoOGMyNi4yIDAgNDkuNC0xMi42IDY0LTMySDQ1NmM2OS4zIDAgMTM1LTIyLjcgMTc5LjItODEuNmM2LjQtOC41IDYuNC0yMC4zIDAtMjguOEM1OTEgMTgyLjcgNTI1LjMgMTYwIDQ1NiAxNjBIMTY4Yy0xNC42LTE5LjQtMzcuOC0zMi02NC0zMmwtOCAwek01MTIgMjQzLjZ2MjQuOWMwIDE5LjYtMTUuOSAzNS42LTM1LjYgMzUuNmMtMi41IDAtNC40LTItNC40LTQuNFYyMTIuNGMwLTIuNSAyLTQuNCA0LjQtNC40YzE5LjYgMCAzNS42IDE1LjkgMzUuNiAzNS42elwiXVxufTtcbnZhciBmYVNwYWNlU2h1dHRsZSA9IGZhU2h1dHRsZVNwYWNlO1xudmFyIGZhRmFjZUxhdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtbGF1Z2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoXCJdLCBcImY1OTlcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTk2LjggMzE0LjFjLTMuOC0xMy43IDcuNC0yNi4xIDIxLjYtMjYuMUgzOTMuNmMxNC4yIDAgMjUuNSAxMi40IDIxLjYgMjYuMUMzOTYuMiAzODIgMzMyLjEgNDMyIDI1NiA0MzJzLTE0MC4yLTUwLTE1OS4yLTExNy45ek0xNDQuNCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFMYXVnaCA9IGZhRmFjZUxhdWdoO1xudmFyIGZhRm9sZGVyT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sIFwiZjA3Y1wiLCBcIk04OC43IDIyMy44TDAgMzc1LjhWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTgxLjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0djMySDE0NGMtMjIuOCAwLTQzLjggMTIuMS01NS4zIDMxLjh6bTI3LjYgMTYuMUMxMjIuMSAyMzAgMTMyLjYgMjI0IDE0NCAyMjRINTQ0YzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTExMiAxOTJDNDUzLjkgNDc0IDQ0My40IDQ4MCA0MzIgNDgwSDMyYy0xMS41IDAtMjItNi4xLTI3LjctMTYuMXMtNS43LTIyLjIgLjEtMzIuMWwxMTItMTkyelwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwMFwiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNnYtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjF2NS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTE2LTIwOHY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg0NDh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzg0SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg0OFYzMDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFDb2RlRm9yayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLWZvcmsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxM2JcIiwgXCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzA0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE1My4zQzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCA1My00MyA5Ni05NiA5NkgyNTZ2NzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMjg4SDE0NGMtNTMgMC05Ni00My05Ni05NlYxNTMuM0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFDaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NjFdLCBcImY2NGZcIiwgXCJNNDgwIDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWOTZIMjI0VjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0Vjk2SDExMlYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0Vjk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NHY5NlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMzA0aDMyIDk2SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYyNDBjMC0yNi41LTIxLjUtNDgtNDgtNDhINDgwVjQ4em05NiAzMjB2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2ek0yNDAgNDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMTI4IDQwMGMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMnpNNTYwIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoMzJ6TTI1NiAxNzZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2ek0xMTIgMTYwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyek0yNTYgMzA0YzAgOC44LTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMnpNMTEyIDMyMEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNnptMzA0LTQ4djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnpNNDAwIDY0YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWODBjMC04LjggNy4yLTE2IDE2LTE2aDMyem0xNiAxMTJ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVMaW5lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLWxpbmVzJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk3LCBcIm1pY3JvcGhvbmUtYWx0XCJdLCBcImYzYzlcIiwgXCJNOTYgOTZWMjU2YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZIMjA4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDgwVjE5MkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTI4SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MGMwLTUzLTQzLTk2LTk2LTk2Uzk2IDQzIDk2IDk2ek0zMjAgMjQwdjE2YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRWNDY0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg3MiA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMTZWNDMwLjRjODUuOC0xMS43IDE1Mi04NS4zIDE1Mi0xNzQuNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MjR6XCJdXG59O1xudmFyIGZhTWljcm9waG9uZUFsdCA9IGZhTWljcm9waG9uZUxpbmVzO1xudmFyIGZhUGVwcGVySG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcHBlci1ob3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3OThdLCBcImY4MTZcIiwgXCJNNDI4LjMgM2MxMS42LTYuNCAyNi4yLTIuMyAzMi42IDkuM2w0LjggOC43YzE5LjMgMzQuNyAxOS44IDc1LjcgMy40IDExMEM0OTUuOCAxNTkuNiA1MTIgMTk3LjkgNTEyIDI0MGMwIDE4LjUtMy4xIDM2LjMtOC45IDUyLjhjLTYuMSAxNy4zLTI4LjUgMTYuMy0zNi44LS4xbC0xMS43LTIzLjRjLTQuMS04LjEtMTIuNC0xMy4zLTIxLjUtMTMuM0gzNjBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTcuMSAwYy0yMS4zIDAtMzAtMjMuOS0xMC44LTMyLjlDMzA0LjcgODUuNCAzMjcuNyA4MCAzNTIgODBjMjguMyAwIDU0LjggNy4zIDc3LjggMjAuMmM1LjUtMTguMiAzLjctMzguNC02LTU1LjhMNDE5IDM1LjdjLTYuNC0xMS42LTIuMy0yNi4yIDkuMy0zMi42ek0xNzEuMiAzNDUuNUwyNjQgMTYwbDQwIDB2ODBjMCAyNi41IDIxLjUgNDggNDggNDhoNzYuMmwyMy45IDQ3LjhDMzcyLjMgNDQzLjkgMjQ0LjMgNTEyIDEwMy4yIDUxMkg0NC40QzE5LjkgNTEyIDAgNDkyLjEgMCA0NjcuNmMwLTIwLjggMTQuNS0zOC44IDM0LjgtNDMuM2w0OS44LTExLjFjMzcuNi04LjQgNjkuNS0zMy4yIDg2LjctNjcuN3pcIl1cbn07XG52YXIgZmFVbmxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndW5sb2NrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc1XSwgXCJmMDljXCIsIFwiTTE0NCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBjMzEuOSAwIDU5LjQgMTguNiA3Mi4zIDQ1LjdjNy42IDE2IDI2LjcgMjIuOCA0Mi42IDE1LjJzMjIuOC0yNi43IDE1LjItNDIuNkMzMzEgMzMuNyAyODEuNSAwIDIyNCAwQzE0NC41IDAgODAgNjQuNSA4MCAxNDR2NDhINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDE0NFYxNDR6XCJdXG59O1xudmFyIGZhQ29sb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbG9uLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxNDBcIiwgXCJNMjU1IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzE5Ny4yIDcuMSAxOTMgMjQuMkwxODEuOSA2OC42Qzk2LjEgODcuOCAzMiAxNjQuNCAzMiAyNTZjMCA1OC4xIDI1LjggMTEwLjIgNjYuNyAxNDUuNEw4MSA0NzIuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMy01Mi4xYzkgMy40IDE4LjQgNi4yIDI4IDguMkwxNzcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTAuNC00MS40YzMzLjQtNC40IDY0LjEtMTcuNCA4OS44LTM2LjdjMTQuMS0xMC42IDE3LTMwLjcgNi40LTQ0LjhzLTMwLjctMTctNDQuOC02LjRjLTEwLjIgNy43LTIxLjcgMTMuOS0zNCAxOC4zTDMyMSAxNjBjOS40LS4zIDE4LjUtNC43IDI0LjYtMTIuOGMxMC42LTE0LjEgNy44LTM0LjItNi40LTQ0LjhjLTEuMS0uOC0yLjItMS42LTMuMy0yLjRMMzUxIDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzI5My4yIDcuMSAyODkgMjQuMkwyNzcuMiA3MS41Yy05LjMtMi43LTE4LjgtNC42LTI4LjYtNS45TDI1NSAzOS44ek0xNjMuMiAxNDMuM0wxMTcuMyAzMjYuOEMxMDMuOSAzMDYuNSA5NiAyODIuMiA5NiAyNTZjMC00OC43IDI3LjItOTEgNjcuMi0xMTIuN3ptOC42IDIyOS41bDYxLjEtMjQ0LjZjOS45IC43IDE5LjUgMi41IDI4LjcgNS4zbC02MiAyNDguMWMtOS43LTEuOS0xOS00LjgtMjcuOC04Ljh6XCJdXG59O1xudmFyIGZhSGVhZHNldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkc2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTkwXCIsIFwiTTI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZ2NDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NlY0MDAuMWMwIDQ4LjYtMzkuNCA4OC04OC4xIDg4TDMxMy42IDQ4OGMtOC4zIDE0LjMtMjMuOCAyNC00MS42IDI0SDI0MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGgzMmMxNy44IDAgMzMuMyA5LjcgNDEuNiAyNGwxMTAuNCAuMWMyMi4xIDAgNDAtMTcuOSA0MC00MFYyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4ek0xNDQgMjA4aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNDRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI3MmMwLTM1LjMgMjguNy02NCA2NC02NHptMjI0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNDBjMC0xNy43IDE0LjMtMzIgMzItMzJoMTZ6XCJdXG59O1xudmFyIGZhU3RvcmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9yZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3MVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC04Ni44LTY4VjM4NCAyNTIuNmMtNCAxLTggMS44LTEyLjMgMi4zbC0uMSAwYy01LjMgLjctMTAuNyAxLjEtMTYuMiAxLjFjLTEyLjQgMC0yNC4zLTEuOS0zNS40LTUuM1YzNTAuOUwzMDEuMiAyMTAuN2M3LTQuNCAxMy4zLTkuNyAxOC44LTE1LjdjMTUuOSAxNy42IDM5LjEgMjkgNjUuMiAyOWMyNi4yIDAgNDkuMy0xMS40IDY1LjItMjljMTYgMTcuNiAzOS4xIDI5IDY1LjIgMjljNC4xIDAgOC4xLS4zIDEyLjEtLjhjNTUuNS03LjQgODEuOC03Mi41IDUyLjEtMTE5LjRMNTIyLjMgMTMuMUM1MTcuMiA1IDUwOC4xIDAgNDk4LjQgMEgxNDEuNmMtOS43IDAtMTguOCA1LTIzLjkgMTMuMWwtMjIuNyAzNkwzOC44IDUuMXpNNTE0LjkgNTAxLjdMMzY1LjUgMzg0SDE2MFYyNTAuNmMtMTEuMiAzLjUtMjMuMiA1LjQtMzUuNiA1LjRjLTUuNSAwLTExLS40LTE2LjMtMS4xbC0uMSAwYy00LjEtLjYtOC4xLTEuMy0xMi0yLjNWMzg0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ4MGMxMi45IDAgMjQuOC0zLjggMzQuOS0xMC4zek0xNTUuMyAyMTguNEw0OC45IDEzNC41Yy02LjEgNDAuNiAxOS41IDgyLjggNjMuMyA4OC43YzQgLjUgOC4xIC44IDEyLjEgLjhjMTEgMCAyMS40LTIgMzEtNS42elwiXVxufTtcbnZhciBmYVJvYWRDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2FkLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2NlwiLCBcIk0yMTMuMiAzMkgyODhWOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmg3NC44YzI3LjEgMCA1MS4zIDE3LjEgNjAuMyA0Mi42bDQyLjcgMTIwLjZjLTEwLjktMi4xLTIyLjItMy4yLTMzLjgtMy4yYy01OS41IDAtMTEyLjEgMjkuNi0xNDQgNzQuOFYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJjMi4zIDAgNC42LS4zIDYuOC0uN2MtNC41IDE1LjUtNi44IDMxLjgtNi44IDQ4LjdjMCA1LjQgLjIgMTAuNyAuNyAxNmwtLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRIODYuNkM1Ni41IDQ4MCAzMiA0NTUuNSAzMiA0MjUuNGMwLTYuMiAxLjEtMTIuNCAzLjEtMTguMkwxNTIuOSA3NC42QzE2MiA0OS4xIDE4Ni4xIDMyIDIxMy4yIDMyek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMjIuNiAxNDRsMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDk2IDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDczLjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0OTYgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw1MTguNiAzNjh6XCJdXG59O1xudmFyIGZhVXNlck1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItbWludXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MDNcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNDcyIDIwMEg2MTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbnZhciBmYU1hcnNTdHJva2VVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLXN0cm9rZS11cCcsXG4gIGljb246IFszMjAsIDUxMiwgWzk4OTYsIFwibWFycy1zdHJva2UtdlwiXSwgXCJmMjJhXCIsIFwiTTE0OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGw2NCA2NGM0LjYgNC42IDUuOSAxMS41IDMuNSAxNy40cy04LjMgOS45LTE0LjggOS45SDE4NHYyNGgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODR2MjRjMCAuNiAwIDEuMi0uMSAxLjhjNzcgMTEuNiAxMzYuMSA3OCAxMzYuMSAxNTguMmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyYzAtODAuMiA1OS4xLTE0Ni43IDEzNi4xLTE1OC4yYzAtLjYtLjEtMS4yLS4xLTEuOFYxNjhIMTA0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDMyVjk2SDk2Yy02LjUgMC0xMi4zLTMuOS0xNC44LTkuOXMtMS4xLTEyLjkgMy41LTE3LjRsNjQtNjR6TTI1NiAzNTJBOTYgOTYgMCAxIDAgNjQgMzUyYTk2IDk2IDAgMSAwIDE5MiAwelwiXVxufTtcbnZhciBmYU1hcnNTdHJva2VWID0gZmFNYXJzU3Ryb2tlVXA7XG52YXIgZmFDaGFtcGFnbmVHbGFzc2VzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYW1wYWduZS1nbGFzc2VzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzQ2LCBcImdsYXNzLWNoZWVyc1wiXSwgXCJmNzlmXCIsIFwiTTE1NS42IDE3LjNDMTYzIDMgMTc5LjktMy42IDE5NSAxLjlMMzIwIDQ3LjVsMTI1LTQ1LjZjMTUuMS01LjUgMzIgMS4xIDM5LjQgMTUuNGw3OC44IDE1Mi45YzI4LjggNTUuOCAxMC4zIDEyMi4zLTM4LjUgMTU2LjZMNTU2LjEgNDEzbDQxLTE1YzE2LjYtNiAzNSAyLjUgNDEgMTkuMXMtMi41IDM1LTE5LjEgNDFsLTcxLjEgMjUuOUw0NzYuOCA1MTBjLTE2LjYgNi4xLTM1LTIuNS00MS0xOS4xczIuNS0zNSAxOS4xLTQxbDQxLTE1LTMxLjMtODYuMmMtNTkuNCA1LjItMTE2LjItMzQtMTMwLTk1LjJMMzIwIDE4OC44bC0xNC42IDY0LjdjLTEzLjggNjEuMy03MC42IDEwMC40LTEzMCA5NS4ybC0zMS4zIDg2LjIgNDEgMTVjMTYuNiA2IDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMUw5Mi4yIDQ4NC4xIDIxLjEgNDU4LjJjLTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxczI0LjQtMjUuMiA0MS0xOS4xbDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44TDI2MS42IDE1N2wxMy4xLTU3LjlMMTk5LjYgNzEuN3ptMjQwLjkgMEwzNjUuNCA5OS4xIDM3OC41IDE1N2w4OS4yLTMyLjVMNDQwLjUgNzEuN3pcIl1cbn07XG52YXIgZmFHbGFzc0NoZWVycyA9IGZhQ2hhbXBhZ25lR2xhc3NlcztcbnZhciBmYUNsaXBib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGlwYm9hcmQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCBcImYzMjhcIiwgXCJNMTkyIDBjLTQxLjggMC03Ny40IDI2LjctOTAuNSA2NEg2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyODIuNUMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xMTIgMTkySDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGFcIiwgXCJNMzIwLjcgMzUyYzguMS04OS43IDgzLjUtMTYwIDE3NS4zLTE2MGM4LjkgMCAxNy42IC43IDI2LjEgMS45TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMydjY5LjdjLS4xIC45LS4xIDEuOC0uMSAyLjhWNDcyYzAgMjIuMSAxNy45IDQwIDQwIDQwaDE2YzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ySDE2MGgyNGMyMi4xIDAgNDAtMTcuOSA0MC00MFY0NDggMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0bC43IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhRmlsZUFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1hcnJvdy11cCcsXG4gIGljb246IFszODQsIDUxMiwgW1wiZmlsZS11cGxvYWRcIl0sIFwiZjU3NFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTIxNiA0MDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzA1LjlsLTMxIDMxYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDcyLTcyYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMxLTMxVjQwOHpcIl1cbn07XG52YXIgZmFGaWxlVXBsb2FkID0gZmFGaWxlQXJyb3dVcDtcbnZhciBmYVdpZmkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2lmaScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wid2lmaS0zXCIsIFwid2lmaS1zdHJvbmdcIl0sIFwiZjFlYlwiLCBcIk01NC4yIDIwMi45QzEyMy4yIDEzNi43IDIxNi44IDk2IDMyMCA5NnMxOTYuOCA0MC43IDI2NS44IDEwNi45YzEyLjggMTIuMiAzMyAxMS44IDQ1LjItLjlzMTEuOC0zMy0uOS00NS4yQzU0OS43IDc5LjUgNDQwLjQgMzIgMzIwIDMyUzkwLjMgNzkuNSA5LjggMTU2LjdDLTIuOSAxNjktMy4zIDE4OS4yIDguOSAyMDJzMzIuNSAxMy4yIDQ1LjIgLjl6TTMyMCAyNTZjNTYuOCAwIDEwOC42IDIxLjEgMTQ4LjIgNTZjMTMuMyAxMS43IDMzLjUgMTAuNCA0NS4yLTIuOHMxMC40LTMzLjUtMi44LTQ1LjJDNDU5LjggMjE5LjIgMzkzIDE5MiAzMjAgMTkycy0xMzkuOCAyNy4yLTE5MC41IDcyYy0xMy4zIDExLjctMTQuNSAzMS45LTIuOCA0NS4yczMxLjkgMTQuNSA0NS4yIDIuOGMzOS41LTM0LjkgOTEuMy01NiAxNDguMi01NnptNjQgMTYwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFXaWZpMyA9IGZhV2lmaTtcbnZhciBmYVdpZmlTdHJvbmcgPSBmYVdpZmk7XG52YXIgZmFCYXRoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdGgnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDUsIFwiYmF0aHR1YlwiXSwgXCJmMmNkXCIsIFwiTTk2IDc3LjNjMC03LjMgNS45LTEzLjMgMTMuMy0xMy4zYzMuNSAwIDYuOSAxLjQgOS40IDMuOWwxNC45IDE0LjlDMTMwIDkxLjggMTI4IDEwMS43IDEyOCAxMTJjMCAxOS45IDcuMiAzOCAxOS4yIDUyYy01LjMgOS4yLTQgMjEuMSAzLjggMjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjg5IDg5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45Yy03LjktNy45LTE5LjgtOS4xLTI5LTMuOEMyNDYgMzkuMiAyMjcuOSAzMiAyMDggMzJjLTEwLjMgMC0yMC4yIDItMjkuMiA1LjVMMTYzLjkgMjIuNkMxNDkuNCA4LjEgMTI5LjcgMCAxMDkuMyAwQzY2LjYgMCAzMiAzNC42IDMyIDc3LjNWMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg5NlY3Ny4zek0zMiAzNTJ2MTZjMCAyOC40IDEyLjQgNTQgMzIgNzEuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NjRIMzg0djE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDM5LjZjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNlYzNTJIMzJ6XCJdXG59O1xudmFyIGZhQmF0aHR1YiA9IGZhQmF0aDtcbnZhciBmYVVuZGVybGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bmRlcmxpbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwY2RcIiwgXCJNMTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTI4VjIyNGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2Vjk2SDMwNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRWMjI0YzAgODguNC03MS42IDE2MC0xNjAgMTYwcy0xNjAtNzEuNi0xNjAtMTYwVjk2SDQ4QzMwLjMgOTYgMTYgODEuNyAxNiA2NHpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFVc2VyUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItcGVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLWVkaXRcIl0sIFwiZjRmZlwiLCBcIk0yMjQgMjU2QTEyOCAxMjggMCAxIDAgMjI0IDBhMTI4IDEyOCAwIDEgMCAwIDI1NnptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJIMzIyLjhjLTMuMS04LjgtMy43LTE4LjQtMS40LTI3LjhsMTUtNjAuMWMyLjgtMTEuMyA4LjYtMjEuNSAxNi44LTI5LjdsNDAuMy00MC4zYy0zMi4xLTMxLTc1LjctNTAuMS0xMjMuOS01MC4xSDE3OC4zem00MzUuNS02OC4zYy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjkuNCAyOS40IDcxIDcxIDI5LjQtMjkuNGMxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNmwtMTQuNC0xNC40ek0zNzUuOSA0MTdjLTQuMSA0LjEtNyA5LjItOC40IDE0LjlsLTE1IDYwLjFjLTEuNCA1LjUgLjIgMTEuMiA0LjIgMTUuMnM5LjcgNS42IDE1LjIgNC4ybDYwLjEtMTVjNS42LTEuNCAxMC44LTQuMyAxNC45LTguNEw1NzYuMSAzNTguN2wtNzEtNzFMMzc1LjkgNDE3elwiXVxufTtcbnZhciBmYVVzZXJFZGl0ID0gZmFVc2VyUGVuO1xudmFyIGZhU2lnbmF0dXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NpZ25hdHVyZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjViN1wiLCBcIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2Ny44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJ2NzEuOWMwIDQwIDMyLjUgNzIuNSA3Mi41IDcyLjVjMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjAuNGwxOC01My45YzMuOC0xMS4zIC45LTIzLjgtNy40LTMyLjRzLTIwLjctMTEuOC0zMi4yLTguNEwzMTYuNCAxOTguMWMyLjQtMjAuNyAzLjYtNDEuNCAzLjYtNjIuM1YxMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMjh6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zYy00LjcgMC04LjUtMy44LTguNS04LjVWMzM1LjZjMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNMjQgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDY0LjNjLS4yLTIuOC0uMy01LjYtLjMtOC41VjM2OEgyNHptNTkyIDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDMwNS45Yy02LjcgMTYuMy0xNC4yIDMyLjMtMjIuMyA0OEg2MTZ6XCJdXG59O1xudmFyIGZhU3Ryb29wd2FmZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Ryb29wd2FmZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0zMTIuNiA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEwyNTYgOTcuNiAyMjIuMSA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDMzLjkgMzMuOS00NS4zIDQ1LjMtNTYuNi01Ni42Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDU2LjYgNTYuNi00NS4zIDQ1LjNMODYuMyAxOTkuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDI1NiA0MTQuNGwzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw0MTQuNCAyNTZsMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTMzLjkgMzMuOS00NS4zLTQ1LjMgNTYuNi01Ni42YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTU2LjYgNTYuNi00NS4zLTQ1LjMgMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42ek0xNDIuOSAyNTZsNDUuMy00NS4zTDIzMy40IDI1NmwtNDUuMyA0NS4zTDE0Mi45IDI1NnptNjcuOSA2Ny45TDI1NiAyNzguNmw0NS4zIDQ1LjNMMjU2IDM2OS4xbC00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjNMMzY5LjEgMjU2bC00NS4zIDQ1LjNMMjc4LjYgMjU2em0yMi42LTY3LjlMMjU2IDIzMy40bC00NS4zLTQ1LjNMMjU2IDE0Mi45bDQ1LjMgNDUuM3pcIl1cbn07XG52YXIgZmFCb2xkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbGQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYwMzJcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkg4MCA5NiAyMjRjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhjMCAzMS4zLTExLjMgNjAuMS0zMCA4Mi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDk2IDgwIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ4VjI1NiA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0yMjQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDExMlYyMjRIMjI0ek0xMTIgMjg4VjQxNkgyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRIMjI0IDExMnpcIl1cbn07XG52YXIgZmFBbmNob3JMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuY2hvci1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFkXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzggMCAxNS45LS42IDIzLjYtMS43Yy00LjgtOS03LjYtMTkuMy03LjYtMzAuM1Y0NDYuN2MtNS4yIC45LTEwLjUgMS4zLTE2IDEuM0gzMjBWMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xek01MjggMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nTmdvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLW5nbycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkN1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek0xNjggNjRoNDhjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTg0djY0aDE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djI0YzAgMTMuMy0xMC43IDI0LTI0IDI0SDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWODBjMC04LjggNy4yLTE2IDE2LTE2ek0zMDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZ6bS00OCAxNmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjExMnpNNjEuMyA3MS4xbDM0LjcgNTJWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40TDY0IDEzMi44VjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY4MGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6XCJdXG59O1xudmFyIGZhTWFuYXRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hbmF0LXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDVcIiwgXCJNMTkyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY5OC43QzY5LjIgMTEzLjkgMCAxOTIuOSAwIDI4OFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhjMC01OS42IDQwLjgtMTA5LjggOTYtMTI0VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2NGM1NS4yIDE0LjIgOTYgNjQuMyA5NiAxMjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4YzAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM1Y2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl1cbn07XG52YXIgZmFOb3RFcXVhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3QtZXF1YWwnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1M2VcIiwgXCJNMzY5LjggMzcuNGMxNC43IDkuOCAxOC43IDI5LjcgOC45IDQ0LjRMMzM3LjEgMTQ0SDQwMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyOTQuNWwtNjQgOTZINDAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE4Ny44bC02NS4yIDk3LjdjLTkuOCAxNC43LTI5LjcgMTguNy00NC40IDguOXMtMTguNy0yOS43LTguOS00NC40TDExMC45IDM2OEg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNTMuNWw2NC05Nkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgyNjAuMmw2NS4yLTk3LjdjOS44LTE0LjcgMjkuNy0xOC43IDQ0LjQtOC45elwiXVxufTtcbnZhciBmYUJvcmRlclRvcExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9yZGVyLXRvcC1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJib3JkZXItc3R5bGVcIl0sIFwiZjg1M1wiLCBcIk0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM2YzAtOC44IDcuMi0xNiAxNi0xNmwzMzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCAzMkMzNS44IDMyIDAgNjcuOCAwIDExMkwwIDQ0OHptMTYwIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptLTk2IDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTAgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQm9yZGVyU3R5bGUgPSBmYUJvcmRlclRvcExlZnQ7XG52YXIgZmFNYXBMb2NhdGlvbkRvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXAtbG9jYXRpb24tZG90JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtYXAtbWFya2VkLWFsdFwiXSwgXCJmNWEwXCIsIFwiTTQwOCAxMjBjMCA1NC42LTczLjEgMTUxLjktMTA1LjIgMTkyYy03LjcgOS42LTIyIDkuNi0yOS42IDBDMjQxLjEgMjcxLjkgMTY4IDE3NC42IDE2OCAxMjBDMTY4IDUzLjcgMjIxLjcgMCAyODggMHMxMjAgNTMuNyAxMjAgMTIwem04IDgwLjRjMy41LTYuOSA2LjctMTMuOCA5LjYtMjAuNmMuNS0xLjIgMS0yLjUgMS41LTMuN2wxMTYtNDYuNEM1NTguOSAxMjMuNCA1NzYgMTM1IDU3NiAxNTJWNDIyLjhjMCA5LjgtNiAxOC42LTE1LjEgMjIuM0w0MTYgNTAzVjIwMC40ek0xMzcuNiAxMzguM2MyLjQgMTQuMSA3LjIgMjguMyAxMi44IDQxLjVjMi45IDYuOCA2LjEgMTMuNyA5LjYgMjAuNlY0NTEuOEwzMi45IDUwMi43QzE3LjEgNTA5IDAgNDk3LjQgMCA0ODAuNFYyMDkuNmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMi42LTQ5ek0zMjcuOCAzMzJjMTMuOS0xNy40IDM1LjctNDUuNyA1Ni4yLTc3VjUwNC4zTDE5MiA0NDkuNFYyNTVjMjAuNSAzMS4zIDQyLjMgNTkuNiA1Ni4yIDc3YzIwLjUgMjUuNiA1OS4xIDI1LjYgNzkuNiAwek0yODggMTUyYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpcIl1cbn07XG52YXIgZmFNYXBNYXJrZWRBbHQgPSBmYU1hcExvY2F0aW9uRG90O1xudmFyIGZhSmVkaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqZWRpJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNjY5XCIsIFwiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOSAwIDUtMi42TDI3OS43IDhjLjEtNC41IDMuOC04IDguMy04czguMSAzLjUgOC4zIDhsOS40IDI4MS45Yy4xIDIuNSAyLjkgMy45IDUgMi42bDI5LjUtMTkuN2MzLjItMi4xIDcuNC0xLjcgMTAuMSAxczMuMSA2LjkgMSAxMC4xTDMzMCAzMTUuN2MtMS4zIDEuOS0uMiA0LjUgMiA0LjlsMzcuNiA3LjVjMy43IC43IDYuNCA0IDYuNCA3LjhzLTIuNyA3LjEtNi40IDcuOEwzMzIgMzUxLjRjLTIuMiAuNC0zLjMgMy0yIDQuOWwyMS4yIDMxLjljMi4xIDMuMiAxLjcgNy40LTEgMTAuMXMtNi45IDMuMS0xMC4xIDFsLTI2LjMtMTcuNmMtMi4yLTEuNC01LjEgLjItNSAyLjhsMi4xIDYxLjVDMzcwLjYgNDM1LjIgNDE2IDM4Mi45IDQxNiAzMjBjMC0zNy0xNS43LTcwLjQtNDAuOC05My43Yy03LTYuNS02LjUtMTguNiAxLTI0LjRDNDEwLjEgMTc1LjUgNDMyIDEzNC4zIDQzMiA4OGMwLTE2LjgtMi45LTMzLTguMi00OGMtNC42LTEzIDEwLjItMzAgMjEuNC0yMmM1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuN2MuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45aDI2YzMuNCAwIDYuMiAyLjYgNi4zIDZjLjEgMy4zIC4yIDYuNiAuMiAxMGMwIDE3LjUtMS43IDM0LjctNC44IDUxLjNjLS4yIDEuMi0uOSAyLjQtMS43IDMuM2wtNDYuNSA0Ni41Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlINTI2YzQuNiAwIDcuNyA0LjggNS43IDlDNDg3LjIgNDUwLjUgMzk0LjggNTEyIDI4OCA1MTJTODguOCA0NTAuNSA0NC4zIDM2MWMtMi4xLTQuMiAxLTkgNS43LTlINjQuNWM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjNDMTcuNyAyNzQuNyAxNiAyNTcuNSAxNiAyNDBjMC0zLjMgLjEtNi43IC4yLTEwYy4xLTMuNCAyLjktNiA2LjMtNmgyNmM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDI0LjYgMTg0LjZjLTEuNS0xLjUtMi4yLTMuOC0xLjctNS45QzM4LjEgMTEyLjggNzcuMyA1NiAxMzAuOCAxOGMxMS4zLTggMjYgOC45IDIxLjQgMjJjLTUuMyAxNS04LjIgMzEuMi04LjIgNDhjMCA0Ni4zIDIxLjkgODcuNSA1NS44IDExMy45YzcuNSA1LjggOCAxNy45IDEgMjQuNEMxNzUuNyAyNDkuNiAxNjAgMjgzIDE2MCAzMjBjMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6XCJdXG59O1xudmFyIGZhU3F1YXJlUG9sbFZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wb2xsLXZlcnRpY2FsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb2xsXCJdLCBcImY2ODFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjB6TTMyMCAyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVBvbGwgPSBmYVNxdWFyZVBvbGxWZXJ0aWNhbDtcbnZhciBmYU11Z0hvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtdWctaG90JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc0OV0sIFwiZjdiNlwiLCBcIk04OCAwQzc0LjcgMCA2NCAxMC43IDY0IDI0YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxQzEyMC41IDExMi4zIDEyOCAxMTkuOSAxMjggMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzExOS41IDQ3LjcgMTEyIDQwLjEgMTEyIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQxNmMwIDUzIDQzIDk2IDk2IDk2SDI4OGM1MyAwIDk2LTQzIDk2LTk2aDE2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEySDM1MiAzMnptMzUyIDY0aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDM4NFYyNTZ6TTIyNCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMUMyMzIuNSAxMTIuMyAyNDAgMTE5LjkgMjQwIDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyMzEuNSA0Ny43IDIyNCA0MC4xIDIyNCAyNHpcIl1cbn07XG52YXIgZmFDYXJCYXR0ZXJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nhci1iYXR0ZXJ5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiYXR0ZXJ5LWNhclwiXSwgXCJmNWRmXCIsIFwiTTgwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJoMTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMHptMzA0IDk2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djMySDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgzMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI1NmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzODRWMTkyek04MCAyNDBjMCA4LjggNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQmF0dGVyeUNhciA9IGZhQ2FyQmF0dGVyeTtcbnZhciBmYUdpZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2lmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzg3M10sIFwiZjA2YlwiLCBcIk0xOTAuNSA2OC44TDIyNS4zIDEyOEgyMjQgMTUyYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwaDIuMmMxNC45IDAgMjguOCA3LjkgMzYuMyAyMC44ek02NCA4OGMwIDE0LjQgMy41IDI4IDkuNiA0MEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0MzguNGM2LjEtMTIgOS42LTI1LjYgOS42LTQwYzAtNDguNi0zOS40LTg4LTg4LTg4aC0yLjJjLTMxLjkgMC02MS41IDE2LjktNzcuNyA0NC40TDI1NiA4NS41bC0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwSDE1MkMxMDMuNCAwIDY0IDM5LjQgNjQgODh6bTMzNiAwYzAgMjIuMS0xNy45IDQwLTQwIDQwSDI4OGgtMS4zbDM0LjgtNTkuMkMzMjkuMSA1NS45IDM0Mi45IDQ4IDM1Ny44IDQ4SDM2MGMyMi4xIDAgNDAgMTcuOSA0MCA0MHpNMzIgMjg4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyMjRWMjg4SDMyek0yODggNTEySDQzMmMyNi41IDAgNDgtMjEuNSA0OC00OFYyODhIMjg4VjUxMnpcIl1cbn07XG52YXIgZmFEaWNlVHdvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtdHdvJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1N10sIFwiZjUyOFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUNoZXNzUXVlZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3MtcXVlZW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODE5XSwgXCJmNDQ1XCIsIFwiTTI1NiAwYTU2IDU2IDAgMSAxIDAgMTEyQTU2IDU2IDAgMSAxIDI1NiAwek0xMzQuMSAxNDMuOGMzLjMtMTMgMTUtMjMuOCAzMC4yLTIzLjhjMTIuMyAwIDIyLjYgNy4yIDI3LjcgMTdjMTIgMjMuMiAzNi4yIDM5IDY0IDM5czUyLTE1LjggNjQtMzljNS4xLTkuOCAxNS40LTE3IDI3LjctMTdjMTUuMyAwIDI3IDEwLjggMzAuMiAyMy44YzcgMjcuOCAzMi4yIDQ4LjMgNjIuMSA0OC4zYzEwLjggMCAyMS0yLjcgMjkuOC03LjRjOC40LTQuNCAxOC45LTQuNSAyNy42IC45YzEzIDggMTcuMSAyNSA5LjIgMzhMMzk5LjcgNDAwSDM4NCAzNDMuNiAxNjguNCAxMjggMTEyLjNMNS40IDIyMy42Yy03LjktMTMtMy44LTMwIDkuMi0zOGM4LjctNS4zIDE5LjItNS4zIDI3LjYtLjljOC45IDQuNyAxOSA3LjQgMjkuOCA3LjRjMjkuOSAwIDU1LjEtMjAuNSA2Mi4xLTQ4LjN6TTI1NiAyMjRsMCAwIDAgMGgwek0xMTIgNDMySDQwMGw0MS40IDQxLjRjNC4yIDQuMiA2LjYgMTAgNi42IDE2YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42SDg2LjZDNzQuMSA1MTIgNjQgNTAxLjkgNjQgNDg5LjRjMC02IDIuNC0xMS44IDYuNi0xNkwxMTIgNDMyelwiXVxufTtcbnZhciBmYUdsYXNzZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2xhc3NlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjUzMFwiLCBcIk0xMTguNiA4MGMtMTEuNSAwLTIxLjQgNy45LTI0IDE5LjFMNTcgMjYwLjNjMjAuNS02LjIgNDguMy0xMi4zIDc4LjctMTIuM2MzMi4zIDAgNjEuOCA2LjkgODIuOCAxMy41YzEwLjYgMy4zIDE5LjMgNi43IDI1LjQgOS4yYzMuMSAxLjMgNS41IDIuNCA3LjMgMy4yYy45IC40IDEuNiAuNyAyLjEgMWwuNiAuMyAuMiAuMSAuMSAwIDAgMCAwIDBzMCAwLTYuMyAxMi43aDBsNi4zLTEyLjdjNS44IDIuOSAxMC40IDcuMyAxMy41IDEyLjdoNDAuNmMzLjEtNS4zIDcuNy05LjggMTMuNS0xMi43bDYuMyAxMi43aDBjLTYuMy0xMi43LTYuMy0xMi43LTYuMy0xMi43bDAgMCAwIDAgLjEgMCAuMi0uMSAuNi0uM2MuNS0uMiAxLjItLjYgMi4xLTFjMS44LS44IDQuMi0xLjkgNy4zLTMuMmM2LjEtMi42IDE0LjgtNS45IDI1LjQtOS4yYzIxLTYuNiA1MC40LTEzLjUgODIuOC0xMy41YzMwLjQgMCA1OC4yIDYuMSA3OC43IDEyLjNMNDgxLjQgOTkuMWMtMi42LTExLjItMTIuNi0xOS4xLTI0LTE5LjFjLTMuMSAwLTYuMiAuNi05LjIgMS44TDQxNi45IDk0LjNjLTEyLjMgNC45LTI2LjMtMS4xLTMxLjItMTMuNHMxLjEtMjYuMyAxMy40LTMxLjJsMzEuMy0xMi41YzguNi0zLjQgMTcuNy01LjIgMjctNS4yYzMzLjggMCA2My4xIDIzLjMgNzAuOCA1Ni4ybDQzLjkgMTg4YzEuNyA3LjMgMi45IDE0LjcgMy41IDIyLjFjLjMgMS45IC41IDMuOCAuNSA1Ljd2Ni43VjM1MnYxNmMwIDYxLjktNTAuMSAxMTItMTEyIDExMkg0MTkuN2MtNTkuNCAwLTEwOC41LTQ2LjQtMTExLjgtMTA1LjhMMzA2LjYgMzUySDI2OS40bC0xLjIgMjIuMkMyNjQuOSA0MzMuNiAyMTUuOCA0ODAgMTU2LjMgNDgwSDExMkM1MC4xIDQ4MCAwIDQyOS45IDAgMzY4VjM1MiAzMTAuNyAzMDRjMC0xLjkgLjItMy44IC41LTUuN2MuNi03LjQgMS44LTE0LjggMy41LTIyLjFsNDMuOS0xODhDNTUuNSA1NS4zIDg0LjggMzIgMTE4LjYgMzJjOS4yIDAgMTguNCAxLjggMjcgNS4ybDMxLjMgMTIuNWMxMi4zIDQuOSAxOC4zIDE4LjkgMTMuNCAzMS4ycy0xOC45IDE4LjMtMzEuMiAxMy40TDEyNy44IDgxLjhjLTIuOS0xLjItNi0xLjgtOS4yLTEuOHpNNjQgMzI1LjRWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ0LjNjMjUuNSAwIDQ2LjUtMTkuOSA0Ny45LTQ1LjNsMi41LTQ1LjZjLTIuMy0uOC00LjktMS43LTcuNS0yLjVjLTE3LjItNS40LTM5LjktMTAuNS02My42LTEwLjVjLTIzLjcgMC00Ni4yIDUuMS02My4yIDEwLjVjLTMuMSAxLTUuOSAxLjktOC41IDIuOXpNNTEyIDM2OFYzMjUuNGMtMi42LS45LTUuNS0xLjktOC41LTIuOWMtMTctNS40LTM5LjUtMTAuNS02My4yLTEwLjVjLTIzLjcgMC00Ni40IDUuMS02My42IDEwLjVjLTIuNyAuOC01LjIgMS43LTcuNSAyLjVsMi41IDQ1LjZjMS40IDI1LjQgMjIuNSA0NS4zIDQ3LjkgNDUuM0g0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6XCJdXG59O1xudmFyIGZhQ2hlc3NCb2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1ib2FyZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjQzY1wiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDY0djY0aDY0Vjk2aDY0djY0aDY0Vjk2aDY0djY0SDMyMHY2NGg2NHY2NEgzMjB2NjRoNjR2NjRIMzIwVjM1MkgyNTZ2NjRIMTkyVjM1MkgxMjh2NjRINjRWMzUyaDY0VjI4OEg2NFYyMjRoNjRWMTYwSDY0Vjk2aDY0em02NCAxMjhoNjRWMTYwSDE5MnY2NHptMCA2NFYyMjRIMTI4djY0aDY0em02NCAwSDE5MnY2NGg2NFYyODh6bTAgMGg2NFYyMjRIMjU2djY0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGQyXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMxNS4xIDAgMjguNS02LjkgMzcuMy0xNy44QzM0MC40IDQ2Mi4yIDMyMCA0MTcuNSAzMjAgMzY4YzAtNTQuNyAyNC45LTEwMy41IDY0LTEzNS44VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG52YXIgZmFQZXJzb25DaGFsa2JvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaGFsa2JvYXJkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTNkXCIsIFwiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDM4NFYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTkyaDU2IDY0IDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM4NFY2NEg1NzZWMjU2SDM4NFYyMjRIMzIwdjQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzNjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djgwSDI0My4xIDE3Ny4xYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUwxMjAgMjU2LjlWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdXG59O1xudmFyIGZhTWFyc1N0cm9rZVJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcnMtc3Ryb2tlLXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg5NywgXCJtYXJzLXN0cm9rZS1oXCJdLCBcImYyMmJcIiwgXCJNMjA4IDM2OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTE3NC40LTg4QzM3MC43IDM2NS44IDI5Ny4xIDQzMiAyMDggNDMyYy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2Yzg5LjEgMCAxNjIuNyA2Ni4yIDE3NC40IDE1Mkg0MTZWMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NTZoMzJWMTc2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODBjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMjgwSDQ2NHY1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMzgyLjR6XCJdXG59O1xudmFyIGZhTWFyc1N0cm9rZUggPSBmYU1hcnNTdHJva2VSaWdodDtcbnZhciBmYUhhbmRCYWNrRmlzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWJhY2stZmlzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiaGFuZC1yb2NrXCJdLCBcImYyNTVcIiwgXCJNMTQ0IDBDMTE3LjUgMCA5NiAyMS41IDk2IDQ4Vjk2djI4LjVWMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjE0OS4zbC05IDcuNUM0MC40IDE2OSAzMiAxODcgMzIgMjA2VjI0NGMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zTDEyOCAzODR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM3NC43YzQ2LjktMTkgODAtNjUgODAtMTE4LjdWMTc2IDE2MCAxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMzUwIDgzLjUgMzI5LjMgNjQgMzA0IDY0Yy0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zQzI3MCA1MS41IDI0OS4zIDMyIDIyNCAzMmMtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuM0MxOTAgMTkuNSAxNjkuMyAwIDE0NCAwelwiXVxufTtcbnZhciBmYUhhbmRSb2NrID0gZmFIYW5kQmFja0Zpc3Q7XG52YXIgZmFTcXVhcmVDYXJldFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1jYXJldC11cCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiY2FyZXQtc3F1YXJlLXVwXCJdLCBcImYxNTFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yMjQgMTYwYzYuNyAwIDEzIDIuOCAxNy42IDcuN2wxMDQgMTEyYzYuNSA3IDguMiAxNy4yIDQuNCAyNS45cy0xMi41IDE0LjQtMjIgMTQuNEgxMjBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3pcIl1cbn07XG52YXIgZmFDYXJldFNxdWFyZVVwID0gZmFTcXVhcmVDYXJldFVwO1xudmFyIGZhQ2xvdWRTaG93ZXJzV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy13YXRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlNFwiLCBcIk0yMjQgMGMzOC42IDAgNzEuOSAyMi44IDg3LjIgNTUuN0MzMjUuNyA0MS4xIDM0NS44IDMyIDM2OCAzMmMzOC43IDAgNzEgMjcuNSA3OC40IDY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMC01MyA0My05NiA5Ni05NnpNMTQwLjYgMjkyLjNsLTQ4IDgwYy02LjggMTEuNC0yMS42IDE1LTMyLjkgOC4ycy0xNS4xLTIxLjYtOC4yLTMyLjlsNDgtODBjNi44LTExLjQgMjEuNi0xNS4xIDMyLjktOC4yczE1LjEgMjEuNiA4LjIgMzIuOXptMzI3LjgtMzIuOWMxMS40IDYuOCAxNSAyMS42IDguMiAzMi45bC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTI1Mi42IDI5Mi4zbC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUuMS0yMS42LTguMi0zMi45bDQ4LTgwYzYuOC0xMS40IDIxLjYtMTUuMSAzMi45LTguMnMxNS4xIDIxLjYgOC4yIDMyLjl6bTEwMy44LTMyLjljMTEuNCA2LjggMTUgMjEuNiA4LjIgMzIuOWwtNDggODBjLTYuOCAxMS40LTIxLjYgMTUtMzIuOSA4LjJzLTE1LjEtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTMwNi41IDQyMS45QzMyOSA0MzcuNCAzNTYuNSA0NDggMzg0IDQ0OGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG52YXIgZmFDaGFydEJhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1iYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImJhci1jaGFydFwiXSwgXCJmMDgwXCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwYy00NC4yIDAtODAtMzUuOC04MC04MFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgNjRIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUJhckNoYXJ0ID0gZmFDaGFydEJhcjtcbnZhciBmYUhhbmRzQnViYmxlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1idWJibGVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJoYW5kcy13YXNoXCJdLCBcImUwNWVcIiwgXCJNNDE2IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptOTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0zMiAxNjBsLjEgNzIuNmMuMSA1Mi4yIDI0IDEwMSA2NCAxMzMuMWMtLjEtMS45LS4xLTMuOC0uMS01Ljd2LThjMC03MS44IDM3LTEzOC42IDk3LjktMTc2LjdsNjAuMi0zNy42YzguNi01LjQgMTcuOS04LjQgMjcuMy05LjRsNDUuOS03OS41YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNzggMTM1LjFjLTMuMyA1LjctMTAuNyA3LjctMTYuNCA0LjRzLTcuNy0xMC43LTQuNC0xNi40bDYyLTEwNy40YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44UzIxNCA1IDIwNy40IDE2LjVsLTY4IDExNy44IDAgMCAwIDAtNDMuMyA3NUw5NiAxNjBjMC0xNy43LTE0LjQtMzItMzItMzJzLTMyIDE0LjQtMzIgMzJ6TTMzMi4xIDg4LjVMMzA3LjUgMTMxYzEzLjkgNC41IDI2LjQgMTMuNyAzNC43IDI3Yy45IDEuNSAxLjggMi45IDIuNSA0LjRsMjguOS01MGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMjYuOCA0Ni40Yy0uNiA2LTIuMSAxMS44LTQuMyAxNy40SDM1MmgxMy4zbDAgMEgzOTdsMjMtMzkuOGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6TTMxNS4xIDE3NWMtOS40LTE1LTI5LjEtMTkuNS00NC4xLTEwLjJsLTYwLjIgMzcuNkMxNTkuMyAyMzQuNyAxMjggMjkxLjIgMTI4IDM1MnY4YzAgOC45IC44IDE3LjYgMi4yIDI2LjFjMzUuNCA4LjIgNjEuOCA0MCA2MS44IDc3LjljMCA2LjMtLjcgMTIuNS0yLjEgMTguNEMyMTUuMSA1MDEgMjQ2LjMgNTEyIDI4MCA1MTJINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM2NGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMkg0ODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzY0Yy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEySDUyMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNjRjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJINDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM1MmwwIDAgMCAwSDI1OC44TDMwNSAyMTkuMWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXpcIl1cbn07XG52YXIgZmFIYW5kc1dhc2ggPSBmYUhhbmRzQnViYmxlcztcbnZhciBmYUxlc3NUaGFuRXF1YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGVzcy10aGFuLWVxdWFsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNTM3XCIsIFwiTTM5NS45IDkzLjdjMTYuNC02LjYgMjQuNC0yNS4yIDE3LjgtNDEuNnMtMjUuMi0yNC40LTQxLjYtMTcuOGwtMzIwIDEyOEM0MCAxNjcuMSAzMiAxNzguOSAzMiAxOTJzOCAyNC45IDIwLjEgMjkuN2wzMjAgMTI4YzE2LjQgNi42IDM1LTEuNCA0MS42LTE3LjhzLTEuNC0zNS0xNy44LTQxLjZMMTUwLjIgMTkyIDM5NS45IDkzLjd6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhVHJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NDZdLCBcImYyMzhcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlYzNTJjMCA0OCAzNS4yIDg3LjcgODEuMSA5NC45bC00NiA0NkMyOC4xIDQ5OS45IDMzLjEgNTEyIDQzIDUxMkg4Mi43YzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDE2MCA0NDhIMjg4bDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRINDA1YzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NnpNMjI0IDI4OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhRXllTG93VmlzaW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V5ZS1sb3ctdmlzaW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJsb3ctdmlzaW9uXCJdLCBcImYyYThcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MjUuNiAzODYuN2MzOS42LTQwLjYgNjYuNC04Ni4xIDc5LjktMTE4LjRjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDY1LjUgNjguOCA0MDAuOCAzMiAzMjAgMzJjLTY4LjIgMC0xMjUgMjYuMy0xNjkuMyA2MC44TDM4LjggNS4xek0yMjMgMTQ5LjVjNDguNi00NC4zIDEyMy01MC44IDE3OS4zLTExLjdjNjAuOCA0Mi40IDc4LjkgMTIzLjIgNDQuMiAxODYuOUw0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNMMjIzIDE0OS41em0tMTM5LjkgMTJjLTExIDE0LjQtMjAuNSAyOC43LTI4LjQgNDIuMmwzMzkgMjY1LjdjMTguNy01LjUgMzYuMi0xMyA1Mi42LTIxLjhMODMuMSAxNjEuNXptLTUwIDg2LjNjLTEuOCA2LjgtMS4zIDE0IDEuNCAyMC41YzE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjFDMTc0LjUgNDQzLjIgMjM5LjIgNDgwIDMyMCA0ODBjMy4xIDAgNi4xLS4xIDkuMi0uMkwzMy4xIDI0Ny44elwiXVxufTtcbnZhciBmYUxvd1Zpc2lvbiA9IGZhRXllTG93VmlzaW9uO1xudmFyIGZhQ3JvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjcm93JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTIwXCIsIFwiTTQ1NiAwYy00OC42IDAtODggMzkuNC04OCA4OHYyOS4yTDEyLjUgMzkwLjZjLTE0IDEwLjgtMTYuNiAzMC45LTUuOSA0NC45czMwLjkgMTYuNiA0NC45IDUuOUwxMjYuMSAzODRIMjU5LjJsNDYuNiAxMTMuMWM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zTDMxMS4xIDM4NEgzNTJjMS4xIDAgMi4xIDAgMy4yIDBsNDYuNiAxMTMuMmM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zbC00Mi0xMDJDNDg0LjkgMzU0LjEgNTQ0IDI4MCA1NDQgMTkyVjEyOHYtOGw4MC41LTIwLjFjOC42LTIuMSAxMy44LTEwLjggMTEuNi0xOS40QzYyOSA1MiA2MDMuNCAzMiA1NzQgMzJINTIzLjlDNTA3LjcgMTIuNSA0ODMuMyAwIDQ1NiAwem0wIDY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFTYWlsYm9hdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzYWlsYm9hdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTQ0NVwiLCBcIk0yNTYgMTZjMC03IDQuNS0xMy4yIDExLjItMTUuM3MxMy45IC40IDE3LjkgNi4xbDIyNCAzMjBjMy40IDQuOSAzLjggMTEuMyAxLjEgMTYuNnMtOC4yIDguNi0xNC4yIDguNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxNnpNMjEyLjEgOTYuNWM3IDEuOSAxMS45IDguMiAxMS45IDE1LjVWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtNS43IDAtMTEtMy0xMy44LThzLTIuOS0xMS0uMS0xNmwxMjgtMjI0YzMuNi02LjMgMTEtOS40IDE4LTcuNXpNNS43IDQwNC4zQzIuOCAzOTQuMSAxMC41IDM4NCAyMS4xIDM4NEg1NTQuOWMxMC42IDAgMTguMyAxMC4xIDE1LjQgMjAuM2wtNCAxNC4zQzU1MC43IDQ3My45IDUwMC40IDUxMiA0NDMgNTEySDEzM0M3NS42IDUxMiAyNS4zIDQ3My45IDkuNyA0MTguN2wtNC0xNC4zelwiXVxufTtcbnZhciBmYVdpbmRvd1Jlc3RvcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LXJlc3RvcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyZDJcIiwgXCJNNDMyIDY0SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2Vjk2SDEyOFY4MGMwLTQ0LjIgMzUuOC04MCA4MC04MEg0MzJjNDQuMiAwIDgwIDM1LjggODAgODBWMzA0YzAgNDQuMi0zNS44IDgwLTgwIDgwSDQxNlYzMjBoMTZjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNnpNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRIMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyem02NCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYVNxdWFyZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXBsdXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgXCJwbHVzLXNxdWFyZVwiXSwgXCJmMGZlXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjAwIDM0NFYyODBIMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjE2OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OHY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFQbHVzU3F1YXJlID0gZmFTcXVhcmVQbHVzO1xudmFyIGZhVG9yaWlHYXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvcmlpLWdhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTYxXSwgXCJmNmExXCIsIFwiTTAgODBjMCAyNi41IDIxLjUgNDggNDggNDhINjR2NjRoNjRWMTI4aDk2djY0aDY0VjEyOGg5NnY2NGg2NFYxMjhoMTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTMuNEM1MTIgNiA1MDYgMCA0OTguNiAwYy0xLjcgMC0zLjQgLjMtNSAxbC00OSAxOS42QzQyNS43IDI4LjEgNDA1LjUgMzIgMzg1LjIgMzJIMTI2LjhjLTIwLjQgMC00MC41LTMuOS01OS40LTExLjRMMTguNCAxYy0xLjYtLjYtMy4zLTEtNS0xQzYgMCAwIDYgMCAxMy40Vjgwek02NCAyODhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDM4NFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjR6XCJdXG59O1xudmFyIGZhRnJvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmcm9nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTJlXCIsIFwiTTM2OCAzMmM0MS43IDAgNzUuOSAzMS44IDc5LjcgNzIuNWw4NS42IDI2LjNjMjUuNCA3LjggNDIuOCAzMS4zIDQyLjggNTcuOWMwIDIxLjgtMTEuNyA0MS45LTMwLjcgNTIuN0w0MDAuOCAzMjMuNSA0OTMuMyA0MTZINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQ4MGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43Yy00MC42LTQwLjYtMTA2LjMtNDAuNi0xNDYuOS0uMUwxMDEgMzI0LjRjLTYuNCA2LjEtNi43IDE2LjItLjYgMjIuNnMxNi4yIDYuNiAyMi42IC42bDczLjgtNzAuMiAuMS0uMSAuMS0uMWMzLjUtMy41IDcuMy02LjYgMTEuMy05LjJjMjcuOS0xOC41IDY1LjktMTUuNCA5MC41IDkuMmMyNC43IDI0LjcgMjcuNyA2Mi45IDkgOTAuOWMtMi42IDMuOC01LjYgNy41LTkgMTAuOUwyNjEuOCA0MTZIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NEMwIDI0OS42IDEyNyAxMTIuOSAyODkuMyA5Ny41QzI5Ni4yIDYwLjIgMzI4LjggMzIgMzY4IDMyem0wIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhQnVja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1Y2tldCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRjZlwiLCBcIk05NiAxNTJ2OEg0OHYtOEM0OCA2OC4xIDExNi4xIDAgMjAwIDBoNDhjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJ2OEgzNTJ2LThjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDRIMjAwQzE0Mi42IDQ4IDk2IDk0LjYgOTYgMTUyek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJoLTUuMUwzODguNSA0NjljLTIuNiAyNC40LTIzLjIgNDMtNDcuNyA0M0gxMDcuMmMtMjQuNiAwLTQ1LjItMTguNS00Ny43LTQzTDM3LjEgMjU2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFJbWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpbWFnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAzZVwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0zMjMuOCAyMDIuNWMtNC41LTYuNi0xMS45LTEwLjUtMTkuOC0xMC41cy0xNS40IDMuOS0xOS44IDEwLjVsLTg3IDEyNy42TDE3MC43IDI5N2MtNC42LTUuNy0xMS41LTktMTguNy05cy0xNC4yIDMuMy0xOC43IDlsLTY0IDgwYy01LjggNy4yLTYuOSAxNy4xLTIuOSAyNS40czEyLjQgMTMuNiAyMS42IDEzLjZoOTYgMzJINDI0YzguOSAwIDE3LjEtNC45IDIxLjItMTIuOHMzLjYtMTcuNC0xLjQtMjQuN2wtMTIwLTE3NnpNMTEyIDE5MmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhTWljcm9waG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMTMwXCIsIFwiTTE5MiAwQzEzOSAwIDk2IDQzIDk2IDk2VjI1NmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2Vjk2YzAtNTMtNDMtOTYtOTYtOTZ6TTY0IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRWNDY0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg3MiA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMTZWNDMwLjRjODUuOC0xMS43IDE1Mi04NS4zIDE1Mi0xNzQuNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NDBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMjE2elwiXVxufTtcbnZhciBmYUNvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDRdLCBcImY2YzhcIiwgXCJNOTYgMjI0djMyVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjcuOGM5LjkgNi42IDIwLjYgMTIgMzIgMTYuMVYzNjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzNTEuMWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45VjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM0My44YzExLjQtNCAyMi4xLTkuNCAzMi0xNi4xVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZsMzIgMzJ2NDkuNWMwIDkuNSAyLjggMTguNyA4LjEgMjYuNkw1MzAgNDI3YzguOCAxMy4xIDIzLjUgMjEgMzkuMyAyMWMyMi41IDAgNDEuOS0xNS45IDQ2LjMtMzhsMjAuMy0xMDEuNmMyLjYtMTMtLjMtMjYuNS04LTM3LjNsLTMuOS01LjVWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djE0LjRsLTUyLjktNzQuMUM0OTYgODYuNSA0NTIuNCA2NCA0MDUuOSA2NEgyNzIgMjU2IDE5MiAxNDRDNzcuNyA2NCAyNCAxMTcuNyAyNCAxODR2NTRDOS40IDI0OS44IDAgMjY3LjggMCAyODh2MTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40QzQ2LjIgMzIwIDcyIDI5NC4yIDcyIDI2Mi40VjI1NiAyMjQgMTg0YzAtMjQuMyAxMi4xLTQ1LjggMzAuNS01OC45Qzk4LjMgMTM1LjkgOTYgMTQ3LjcgOTYgMTYwdjY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTZjMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZIMzYxLjRjMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjZjMCA2LTIuNCAxMS44LTYuNiAxNmwtMjMuNCAyMy40QzMzMi4yIDIxMS44IDMwMi43IDIyNCAyNzIgMjI0cy02MC4yLTEyLjItODEuOS0zMy45bC0yMy40LTIzLjR6XCJdXG59O1xudmFyIGZhQ2FyZXRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJldC11cCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZjBkOFwiLCBcIk0xODIuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhIMjg4YzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhU2NyZXdkcml2ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NyZXdkcml2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk2OTFdLCBcImY1NGFcIiwgXCJNNDY1IDdjLTguNS04LjUtMjItOS40LTMxLjYtMi4xbC0xMDQgODBjLTUuOSA0LjUtOS40IDExLjYtOS40IDE5djU0LjFsLTg1LjYgODUuNmM2LjcgNC4yIDEzIDkuMyAxOC44IDE1LjFzMTAuOSAxMi4yIDE1LjEgMTguOEwzNTMuOSAxOTJINDA4YzcuNSAwIDE0LjUtMy41IDE5LTkuNGw4MC0xMDRjNy40LTkuNiA2LjUtMjMuMS0yLjEtMzEuNkw0NjUgN3pNMTIxLjQgMjgxLjRsLTExMiAxMTJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDExMi0xMTJjMzAuMi0zMC4yIDMwLjItNzkuMSAwLTEwOS4zcy03OS4xLTMwLjItMTA5LjMgMHpcIl1cbn07XG52YXIgZmFGb2xkZXJDbG9zZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLWNsb3NlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE4NVwiLCBcIk00NDggNDgwSDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxOTJINTEyVjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NHptNjQtMzIwSDBWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTkyYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZsMTkuMiAyNS42YzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0elwiXVxufTtcbnZhciBmYUhvdXNlVHN1bmFtaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS10c3VuYW1pJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTE1XCIsIFwiTTgwLjggMTM2LjVDMTA0LjkgOTMuOCAxNTIuNiA2NCAyMDkgNjRjMTYuOSAwIDMzLjEgMi43IDQ4LjIgNy43YzE2LjggNS41IDM0LjktMy42IDQwLjQtMjAuNHMtMy42LTM0LjktMjAuNC00MC40QzI1NS44IDMuOCAyMzIuOCAwIDIwOSAwQzk1LjIgMCAwIDg4IDAgMjAwYzAgOTEuNiA1My41IDE3Mi4xIDE0Mi4yIDE5NC4xYzEzLjQgMy44IDI3LjUgNS45IDQyLjIgNS45Yy43IDAgMS40IDAgMi4xLS4xYzEuOCAwIDMuNyAuMSA1LjUgLjFsMCAwYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjUtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCAzMjUuMiA0MTAuOSAzMzYgMzg0IDMzNmMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwYy0yMi40IDE1LjUtNDkuOSAyNi4xLTc3LjQgMjYuMWMwIDAtLjEgMC0uMSAwYy0xMi40IDAtMjQtMS41LTM0LjktNC4zQzEyMS42IDMyMC4yIDk2IDI4NyA5NiAyNDhjMC00OC41IDM5LjUtODggODguNC04OGMxMy41IDAgMjYuMSAzIDM3LjUgOC4zYzE2IDcuNSAzNS4xIC42IDQyLjUtMTUuNXMuNi0zNS4xLTE1LjUtNDIuNUMyMjkuMyAxMDEuMSAyMDcuNCA5NiAxODQuNCA5NmMtNDAgMC03Ni40IDE1LjQtMTAzLjYgNDAuNXptMjUyLTE4LjFjLTguMSA2LTEyLjggMTUuNS0xMi44IDI1LjZWMjY1YzEuNiAxIDMuMyAyIDQuOCAzLjFjMTguNCAxMi43IDM5LjYgMjAuMyA1OS4yIDIwLjNjMTkgMCA0MS4yLTcuOSA1OS4yLTIwLjNjMjMuOC0xNi43IDU1LjgtMTUuMyA3OC4xIDMuNGMxMC42IDguOCAyNC4yIDE1LjYgMzcuMyAxOC42YzUuOCAxLjQgMTEuMiAzLjQgMTYuMiA2LjJjLjctMi43IDEuMS01LjUgMS4xLTguNGwtLjQtMTQ0YzAtMTAtNC43LTE5LjQtMTIuNy0yNS41bC05NS41LTcyYy0xMS40LTguNi0yNy4xLTguNi0zOC41IDBsLTk2IDcyek0zODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OHpcIl1cbn07XG52YXIgZmFTcXVhcmVOZmkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLW5maScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTU3NlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2em03NS43IDY0LjZDNjguOCAxNjIuNSA2NCAxNjguOCA2NCAxNzZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjMzLjhsNjYuMyAxMTAuNWMzLjcgNi4yIDExLjEgOS4xIDE4IDcuMnMxMS43LTguMiAxMS43LTE1LjRWMTc2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjI3OC4yTDkzLjcgMTY3LjhjLTMuNy02LjItMTEuMS05LjEtMTgtNy4yek0yMjQgMTc2djY0IDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjU2aDQ4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI1NlYxOTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjQwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMzNmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE3NnpcIl1cbn07XG52YXIgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWZyb20tZ3JvdW5kLXdhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI1XCIsIFwiTTI4OCAzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTA5LjNsMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjU2IDEwOS4zVjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnptLTE4LjUgNjkuOUMyNDcgNDM3LjQgMjE5LjUgNDQ4IDE5MiA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA1MDEuNyAxNTkgNTEyIDE5MiA1MTJjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDB6TTE5MiAxOTJINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQyNWM1LjMtMy4xIDExLjItNS40IDE3LjUtNi45YzEzLjEtMy4xIDI2LjctOS44IDM3LjMtMTguNmMyMi4yLTE4LjcgNTQuMy0yMC4xIDc4LjEtMy40YzE4IDEyLjQgNDAuMSAyMC4zIDU5LjEgMjAuM1YxOTJ6bTM4NCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzODRWNDE2LjVoMGMxOSAwIDQxLjItNy45IDU5LjItMjAuM2MyMy44LTE2LjcgNTUuOC0xNS4zIDc4LjEgMy40YzEwLjYgOC44IDI0LjIgMTUuNiAzNy4zIDE4LjZjNi4zIDEuNSAxMi4xIDMuOCAxNy41IDYuOVYyNDB6XCJdXG59O1xudmFyIGZhTWFydGluaUdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcnRpbmktZ2xhc3MnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjQsIFwiZ2xhc3MtbWFydGluaS1hbHRcIl0sIFwiZjU3YlwiLCBcIk0zMiAwQzE5LjEgMCA3LjQgNy44IDIuNCAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOUwyMjQgMjY5LjNWNDQ4SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODhWMjY5LjNMNTAyLjYgNTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAwIDQ4MCAwSDMyek0xNzMuMyAxMjhsLTY0LTY0SDQwMi43bC02NCA2NEgxNzMuM3pcIl1cbn07XG52YXIgZmFHbGFzc01hcnRpbmlBbHQgPSBmYU1hcnRpbmlHbGFzcztcbnZhciBmYVJvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJvdGF0ZS1iYWNrXCIsIFwicm90YXRlLWJhY2t3YXJkXCIsIFwidW5kby1hbHRcIl0sIFwiZjJlYVwiLCBcIk00OC41IDIyNEg0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNzJjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yczE5LjMtMS43IDI2LjIgNS4yTDk4LjYgOTYuNmM4Ny42LTg2LjUgMjI4LjctODYuMiAzMTUuOCAxYzg3LjUgODcuNSA4Ny41IDIyOS4zIDAgMzE2LjhzLTIyOS4zIDg3LjUtMzE2LjggMGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGM2Mi41IDYyLjUgMTYzLjggNjIuNSAyMjYuMyAwczYyLjUtMTYzLjggMC0yMjYuM2MtNjIuMi02Mi4yLTE2Mi43LTYyLjUtMjI1LjMtMUwxODUgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0LjhINDguNXpcIl1cbn07XG52YXIgZmFSb3RhdGVCYWNrID0gZmFSb3RhdGVMZWZ0O1xudmFyIGZhUm90YXRlQmFja3dhcmQgPSBmYVJvdGF0ZUxlZnQ7XG52YXIgZmFVbmRvQWx0ID0gZmFSb3RhdGVMZWZ0O1xudmFyIGZhVGFibGVDb2x1bW5zID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLWNvbHVtbnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNvbHVtbnNcIl0sIFwiZjBkYlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2em02NCA2NFY0MTZIMjI0VjE2MEg2NHptMzg0IDBIMjg4VjQxNkg0NDhWMTYwelwiXVxufTtcbnZhciBmYUNvbHVtbnMgPSBmYVRhYmxlQ29sdW1ucztcbnZhciBmYUxlbW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlbW9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgXCJmMDk0XCIsIFwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NGMtNi42IDAtMTMgMS0xOSAyLjljLTIyLjUgNy00OC4xIDE0LjktNzEgOWMtNzUuMi0xOS4xLTE1Ni40IDExLTIxMy43IDY4LjNTLTcuMiAyNTAuOCAxMS45IDMyNmM1LjggMjIuOS0yIDQ4LjQtOSA3MUMxIDQwMyAwIDQwOS40IDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0YzYuNiAwIDEzLTEgMTkuMS0yLjljMjIuNS03IDQ4LjEtMTQuOSA3MS05Yzc1LjIgMTkuMSAxNTYuNC0xMSAyMTMuNy02OC4zczg3LjUtMTM4LjUgNjguMy0yMTMuN2MtNS44LTIyLjkgMi00OC40IDktNzFjMS45LTYgMi45LTEyLjQgMi45LTE5LjF6TTIxMi41IDEyNy40Yy01NC42IDE2LTEwMS4xIDYyLjUtMTE3LjEgMTE3LjFDOTIuOSAyNTMgODQgMjU3LjggNzUuNSAyNTUuNFM2Mi4yIDI0NCA2NC42IDIzNS41YzE5LjEtNjUuMSA3My43LTExOS44IDEzOC45LTEzOC45YzguNS0yLjUgMTcuNCAyLjQgMTkuOSAxMC45cy0yLjQgMTcuNC0xMC45IDE5Ljl6XCJdXG59O1xudmFyIGZhSGVhZFNpZGVNYXNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1tYXNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDYzXCIsIFwiTTMyIDIyNC4yYzAtMjIuMiAzLjItNDMuNiA5LjItNjMuOUwyNjIuMiAzMjFjLTQgOS41LTYuMiAyMC02LjIgMzFWNTEySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDA3LjNjMC0xNi43LTYuOS0zMi41LTE3LjEtNDUuOEM0OC42IDMyMi40IDMyIDI3NC4xIDMyIDIyNC4yem0yNDguMyA3MC40TDUzIDEyOS4zQzg4LjcgNTMgMTY2LjIgMCAyNTYgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzUuNCA2LjcgOC42IDE0LjggOS40IDIzLjJIMzM2Yy0yMS43IDAtNDEuMyA4LjYtNTUuNyAyMi42ek0zMzYgMzA0SDUzNGwwIDBoMTBsLTE5LjcgNjRIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDUxNC41bC05LjggMzJIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ5NC44bC0uOSAyLjhjLTguMyAyNi45LTMzLjEgNDUuMi02MS4yIDQ1LjJIMjg4VjM1MmMwLTE0IDYtMjYuNyAxNS42LTM1LjRjMCAwIDAgMCAwIDBjOC41LTcuOCAxOS45LTEyLjYgMzIuNC0xMi42em00OC04MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhSGFuZHNoYWtlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjJiNVwiLCBcIk0zMjMuNCA4NS4ybC05Ni44IDc4LjRjLTE2LjEgMTMtMTkuMiAzNi40LTcgNTMuMWMxMi45IDE3LjggMzggMjEuMyA1NS4zIDcuOGw5OS4zLTc3LjJjNy01LjQgMTctNC4yIDIyLjUgMi44czQuMiAxNy0yLjggMjIuNWwtMjAuOSAxNi4yTDUxMiAzMTYuOFYxMjhoLS43bC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMnptMjIuOCAxMjQuNGwtNTEuNyA0MC4yQzI2MyAyNzQuNCAyMTcuMyAyNjggMTkzLjcgMjM1LjZjLTIyLjItMzAuNS0xNi42LTczLjEgMTIuNy05Ni44bDgzLjItNjcuM2MtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC03MiA0OFYzNTJoMjguMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljNC41LTQuOSA3LjgtMTAuNiA5LjktMTYuNWMxOS40IDEzIDQ1LjggMTAuMyA2Mi4xLTcuNWMxNy45LTE5LjUgMTYuNi00OS45LTIuOS02Ny44bC0xMzQuMi0xMjN6TTE2IDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhIMTZ6TTQ4IDMyMGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTU0NCAxMjhWMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE0NGMwLTguOC03LjItMTYtMTYtMTZINTQ0em0zMiAyMDhhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpcIl1cbn07XG52YXIgZmFHZW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgXCJmM2E1XCIsIFwiTTExNi43IDMzLjhjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOEgzNzZjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNWw1Ny40IDk1LjZMNjMuMyAxOTJjLTQuMSAuMy03LjMgMy44LTcuMyA4czMuMiA3LjYgNy4zIDhsMTkyIDE2Yy40IDAgLjkgMCAxLjMgMGwxOTItMTZjNC4xLS4zIDcuMy0zLjggNy4zLThzLTMuMi03LjYtNy4zLThMMzAxLjUgMTc5LjhsNTcuNC05NS42YzIuMS0zLjUgMS4yLTguMS0yLjEtMTAuNXMtNy45LTItMTAuNyAxTDI1NiAxNzIuMiAxNjUuOSA3NC42Yy0yLjgtMy03LjQtMy40LTEwLjctMXpcIl1cbn07XG52YXIgZmFEb2xseSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb2xseScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiZG9sbHktYm94XCJdLCBcImY0NzJcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBoNzIuOWMyNy41IDAgNTIgMTcuNiA2MC43IDQzLjhMMjU3LjcgMzIwYzMwLjEgLjUgNTYuOCAxNC45IDc0IDM3bDIwMi4xLTY3LjRjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMMzUyIDQxNy43Yy0uOSA1Mi4yLTQzLjUgOTQuMy05NiA5NC4zYy01MyAwLTk2LTQzLTk2LTk2YzAtMzAuOCAxNC41LTU4LjIgMzctNzUuOEwxMDQuOSA2NEgzMkMxNC4zIDY0IDAgNDkuNyAwIDMyek0yNDQuOCAxMzQuNWMtNS41LTE2LjggMy43LTM0LjkgMjAuNS00MC4zTDMxMSA3OS40bDE5LjggNjAuOSA2MC45LTE5LjhMMzcxLjggNTkuNmw0NS43LTE0LjhjMTYuOC01LjUgMzQuOSAzLjcgNDAuMyAyMC41bDQ5LjQgMTUyLjJjNS41IDE2LjgtMy43IDM0LjktMjAuNSA0MC4zTDMzNC41IDMwNy4yYy0xNi44IDUuNS0zNC45LTMuNy00MC4zLTIwLjVMMjQ0LjggMTM0LjV6XCJdXG59O1xudmFyIGZhRG9sbHlCb3ggPSBmYURvbGx5O1xudmFyIGZhU21va2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbW9raW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Njg0XSwgXCJmNDhkXCIsIFwiTTQ0OCAzMlY0M2MwIDM4LjIgMTUuMiA3NC44IDQyLjIgMTAxLjhsMjEgMjFjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMnYxMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNDVjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtMjEtMjFDNDA1LjkgMTUxLjEgMzg0IDk4LjEgMzg0IDQzVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTU3NiAyNTZWMjQ1YzAtMzguMi0xNS4yLTc0LjgtNDIuMi0xMDEuOGwtMjEtMjFjLTIxLTIxLTMyLjgtNDkuNS0zMi44LTc5LjJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0M2MwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDIxIDIxYzM5IDM5IDYwLjkgOTEuOSA2MC45IDE0Ny4xdjExYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNnptMjI0IDB2MzJIMzg0VjQxNkgyMjR6bTI4OC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYU1pbmltaXplID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pbmltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjb21wcmVzcy1hcnJvd3MtYWx0XCJdLCBcImY3OGNcIiwgXCJNNDU2IDIyNEgzMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjU2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw0MCA0MEw0NDIuMyA1LjdDNDQ2IDIgNDUwLjkgMCA0NTYgMHMxMCAyIDEzLjcgNS43bDM2LjcgMzYuN0M1MTAgNDYgNTEyIDUwLjkgNTEyIDU2cy0yIDEwLTUuNyAxMy43TDQzMyAxNDNsNDAgNDBjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzNsLTQwIDQwYy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4ycy0xNC44LTEyLjUtMTQuOC0yMi4yVjMxMmMwLTEzLjMgMTAuNy0yNCAyNC0yNEg0NTZ6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0NTZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNDAtNDBMNjkuNyA1MDYuM0M2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnMxMi41LTE0LjggMjIuMi0xNC44SDIwMHpNNTYgMjI0Yy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQwLTQwTDUuNyA2OS43QzIgNjYgMCA2MS4xIDAgNTZzMi0xMCA1LjctMTMuN0w0Mi4zIDUuN0M0NiAyIDUwLjkgMCA1NiAwczEwIDIgMTMuNyA1LjdMMTQzIDc5bDQwLTQwYzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMlYyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRINTZ6XCJdXG59O1xudmFyIGZhQ29tcHJlc3NBcnJvd3NBbHQgPSBmYU1pbmltaXplO1xudmFyIGZhTW9udW1lbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9udW1lbnQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1YTZcIiwgXCJNMTgwLjcgNC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDgwIDgwYzIuNSAyLjUgNC4xIDUuOCA0LjYgOS4zbDQwLjIgMzIySDU1LjlMOTYuMSA5NGMuNC0zLjUgMi02LjggNC42LTkuM2w4MC04MHpNMTUyIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxNTJ6TTMyIDQ0OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhU25vd3Bsb3cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc25vd3Bsb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3ZDJcIiwgXCJNMjk4LjkgNjRsNjguNiAxNjBIMjU2bC02NC02NFY2NEgyOTguOXpNNDQ1LjEgMjQyLjdsLTg3LjQtMjA0QzM0Ny42IDE1LjMgMzI0LjUgMCAyOTguOSAwSDE3NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlYyOTguOEMyNi4yIDMxNi44IDAgMzU1LjMgMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJIMzY4YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtMTcuMi0zLjktMzMuNS0xMC44LTQ4SDUxMnY1MC43YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDU0LjYgNTQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDU3NiA0MDIuN1YzMjAgMjM1LjJMNjMzIDE2NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTU3IDcxLjJjLTkuMSAxMS4zLTE0IDI1LjQtMTQgNDBWMjg4SDQ0OFYyNTYuN2MuMS0yLjQtLjItNC44LS42LTcuMXMtMS4yLTQuNy0yLjItNi44ek0zNjggMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OEgzNjh6TTE0NCA0MDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMjE2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTU2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTIwMCA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUFuZ2xlc1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuZ2xlcy1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE4NywgXCJhbmdsZS1kb3VibGUtcmlnaHRcIl0sIFwiZjEwMVwiLCBcIk00NzAuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjU2IDI2NS40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDIxMC43IDI1NiA3My40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUFuZ2xlRG91YmxlUmlnaHQgPSBmYUFuZ2xlc1JpZ2h0O1xudmFyIGZhQ2FubmFiaXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FubmFiaXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NWZcIiwgXCJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFjMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOWM3LjIgMjYuNCAxMS44IDU1LjIgMTAuNCA4NGMxMS41LTguOCAyMy43LTE2LjcgMzUuOC0yMy42YzQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjVjNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuN2MtOS4xIDE1LjktMTkuOSAzMS43LTMyLjQgNDYuM2MyNy44IDYuNiA1Mi40IDE3LjMgNjcuMiAyNS41YzUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMWMtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjFjMS41IDYuMS0uNiAxMi40LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOUwyODAgNDE3LjJWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQxNy4ybC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjlzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMWMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNmMtMjguOS02LjYtNTQuNi0xNy42LTY5LjgtMjYuMWMtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRjMTQuOC04LjIgMzkuNC0xOC44IDY3LjItMjUuNUM3OC45IDI5Ni4zIDY4LjEgMjgwLjUgNTkgMjY0LjZjLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjdjLTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41YzEyLjEgNi45IDI0LjMgMTQuNyAzNS44IDIzLjZjLTEuNC0yOC43IDMuMS01Ny42IDEwLjQtODRjMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWMzLTQuNCA4LTcuMSAxMy4zLTcuMXpcIl1cbn07XG52YXIgZmFDaXJjbGVQbGF5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1wbGF5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjksIFwicGxheS1jaXJjbGVcIl0sIFwiZjE0NFwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlWMzQ0YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjV6XCJdXG59O1xudmFyIGZhUGxheUNpcmNsZSA9IGZhQ2lyY2xlUGxheTtcbnZhciBmYVRhYmxldHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGV0cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjQ5MFwiLCBcIk02MTQuMyAyNDdjMTYuMy0yNSAyNS43LTU0LjkgMjUuNy04N0M2NDAgNzEuNiA1NjguNCAwIDQ4MCAwYy0zMi4xIDAtNjEuOSA5LjQtODcgMjUuN2MtNy45IDUuMi04LjUgMTYuMi0xLjggMjIuOUw1OTEuNCAyNDguOGM2LjcgNi43IDE3LjggNi4yIDIyLjktMS44ek01NjcgMjk0LjNjNy45LTUuMiA4LjUtMTYuMiAxLjgtMjIuOUwzNjguNiA3MS4yYy02LjctNi43LTE3LjgtNi4yLTIyLjkgMS44Yy0xNi4zIDI1LTI1LjcgNTQuOS0yNS43IDg3YzAgODguNCA3MS42IDE2MCAxNjAgMTYwYzMyLjEgMCA2MS45LTkuNCA4Ny0yNS43ek0zMDEuNSAzNjhIMTguNWMtOS41IDAtMTYuOSA4LjItMTUgMTcuNUMxOC45IDQ1Ny44IDgzLjEgNTEyIDE2MCA1MTJzMTQxLjEtNTQuMiAxNTYuNS0xMjYuNWMyLTkuMy01LjUtMTcuNS0xNS0xNy41em0wLTMyYzkuNSAwIDE2LjktOC4yIDE1LTE3LjVDMzAxLjEgMjQ2LjIgMjM2LjkgMTkyIDE2MCAxOTJTMTguOSAyNDYuMiAzLjUgMzE4LjVjLTIgOS4zIDUuNSAxNy41IDE1IDE3LjVIMzAxLjV6XCJdXG59O1xudmFyIGZhRXRoZXJuZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXRoZXJuZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3OTZcIiwgXCJNMCAyMjRWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDk2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2VjQ0OGg2NFYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlY0NDhoNjRWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWNDQ4aDY0VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2VjQ0OGg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJINDQ4VjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzODRWOTZjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUV1cm9TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V1cm8tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgWzgzNjQsIFwiZXVyXCIsIFwiZXVyb1wiXSwgXCJmMTUzXCIsIFwiTTQ4LjEgMjQwYy0uMSAyLjctLjEgNS4zLS4xIDh2MTZjMCAyLjcgMCA1LjMgLjEgOEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MC4zQzg5LjkgNDE5LjkgMTcwIDQ4MCAyNjQgNDgwaDI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI2NGMtNTcuOSAwLTEwOC4yLTMyLjQtMTMzLjktODBIMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMi4yYy0uMS0yLjYtLjItNS4zLS4yLThWMjQ4YzAtMi43IC4xLTUuNCAuMi04SDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMzAuMWMyNS43LTQ3LjYgNzYtODAgMTMzLjktODBoMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0QzE3MCAzMiA4OS45IDkyLjEgNjAuMyAxNzZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDguMXpcIl1cbn07XG52YXIgZmFFdXIgPSBmYUV1cm9TaWduO1xudmFyIGZhRXVybyA9IGZhRXVyb1NpZ247XG52YXIgZmFDaGFpciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFpcicsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTY4MV0sIFwiZjZjMFwiLCBcIk0yNDggNDhWMjU2aDQ4VjU4LjdjMjMuOSAxMy44IDQwIDM5LjcgNDAgNjkuM1YyNTZoNDhWMTI4QzM4NCA1Ny4zIDMyNi43IDAgMjU2IDBIMTkyQzEyMS4zIDAgNjQgNTcuMyA2NCAxMjhWMjU2aDQ4VjEyOGMwLTI5LjYgMTYuMS01NS41IDQwLTY5LjNWMjU2aDQ4VjQ4aDQ4ek00OCAyODhjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE2IDMyYy01IDkuOS00LjQgMjEuNyAxLjQgMzEuMVMyMC45IDM4NCAzMiAzODRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NEgzNTJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRjMTEuMSAwIDIxLjQtNS43IDI3LjItMTUuMnM2LjQtMjEuMiAxLjQtMzEuMWwtMTYtMzJDNDIzLjIgMjk0LjggNDEyLjEgMjg4IDQwMCAyODhINDh6XCJdXG59O1xudmFyIGZhQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzMsIFwiY2hlY2stY2lyY2xlXCJdLCBcImYwNThcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM2OSAyMDlMMjQxIDMzN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMzM1IDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhQ2hlY2tDaXJjbGUgPSBmYUNpcmNsZUNoZWNrO1xudmFyIGZhQ2lyY2xlU3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtc3RvcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCBcInN0b3AtY2lyY2xlXCJdLCBcImYyOGRcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBIMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTdG9wQ2lyY2xlID0gZmFDaXJjbGVTdG9wO1xudmFyIGZhQ29tcGFzc0RyYWZ0aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXBhc3MtZHJhZnRpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRyYWZ0aW5nLWNvbXBhc3NcIl0sIFwiZjU2OFwiLCBcIk0zNTIgOTZjMCAxNC4zLTMuMSAyNy45LTguOCA0MC4yTDM5NiAyMjcuNGMtMjMuNyAyNS4zLTU0LjIgNDQuMS04OC41IDUzLjZMMjU2IDE5MmgwIDBsLTY4IDExNy41YzIxLjUgNi44IDQ0LjMgMTAuNSA2OC4xIDEwLjVjNzAuNyAwIDEzMy44LTMyLjcgMTc0LjktODRjMTEuMS0xMy44IDMxLjItMTYgNDUtNXMxNiAzMS4yIDUgNDVDNDI4LjEgMzQxLjggMzQ3IDM4NCAyNTYgMzg0Yy0zNS40IDAtNjkuNC02LjQtMTAwLjctMTguMUw5OC43IDQ2My43Qzk0IDQ3MS44IDg3IDQ3OC40IDc4LjYgNDgyLjZMMjMuMiA1MTAuM2MtNSAyLjUtMTAuOSAyLjItMTUuNi0uN1MwIDUwMS41IDAgNDk2VjQ0MC42YzAtOC40IDIuMi0xNi43IDYuNS0yNC4xbDYwLTEwMy43QzUzLjcgMzAxLjYgNDEuOCAyODkuMyAzMS4yIDI3NmMtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjFsNjkuNC0xMTkuOWMtNS42LTEyLjItOC44LTI1LjgtOC44LTQwLjJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptMjEgMjk3LjljMzIuNi0xMi44IDYyLjUtMzAuOCA4OC45LTUyLjlsNDMuNyA3NS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFWNDk2YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOUwzNzMgMzkzLjl6TTI1NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYURyYWZ0aW5nQ29tcGFzcyA9IGZhQ29tcGFzc0RyYWZ0aW5nO1xudmFyIGZhUGxhdGVXaGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGF0ZS13aGVhdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU1YVwiLCBcIk0xNzYgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDY0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yNCAxMzZIMTM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQ4ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MHYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI1NmMwLTQ0LjIgMzUuOC04MCA4MC04MGM4LjggMCAxNiA3LjIgMTYgMTZ6TTM1MiAxNzZjOC44IDAgMTYgNy4yIDE2IDE2djE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZWMjU2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZ2MTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMEg0ODQuMmMxNC44IDAgMjYuMiAxMi45IDI0LjQgMjcuNkM1MDIuMyAzOTcuOCA0NjQuMiA0MzcgNDE2IDQ0NnYyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LTJjLTQ4LjItOS04Ni4zLTQ4LjItOTIuNS05OC40elwiXVxufTtcbnZhciBmYUljaWNsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNpY2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdhZFwiLCBcIk03NS44IDMwNC44TDEgMzUuN2MtLjctMi41LTEtNS0xLTcuNUMwIDEyLjYgMTIuNiAwIDI4LjIgMEg0ODIuNEM0OTguOCAwIDUxMiAxMy4yIDUxMiAyOS42YzAgMS42LS4xIDMuMy0uNCA0LjlMNDM0LjYgNDk2LjFjLTEuNSA5LjItOS41IDE1LjktMTguOCAxNS45Yy05LjIgMC0xNy4xLTYuNi0xOC43LTE1LjZMMzM2IDE2MCAzMDcuMiAzMDMuOWMtMS45IDkuMy0xMC4xIDE2LjEtMTkuNiAxNi4xYy05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjdjLTkuMyAwLTE3LjUtNi4yLTIwLTE1LjJ6XCJdXG59O1xudmFyIGZhUGVyc29uU2hlbHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc2hlbHRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU0ZlwiLCBcIk0yNzEuOSA0LjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4QzYuMiAxMzcuOSAwIDE0OC41IDAgMTYwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE3OC42TDI1NiA2OC45IDQ0OCAxNzguNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBjMC0xMS41LTYuMi0yMi4xLTE2LjEtMjcuOGwtMjI0LTEyOHpNMjU2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bS04IDI4MFY0MDBoMTZ2ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDI0Ni4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzcuOSA3MC4zYy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjVWNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdXG59O1xudmFyIGZhTmV1dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25ldXRlcicsXG4gIGljb246IFszODQsIDUxMiwgWzk5MDZdLCBcImYyMmNcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNDkuMXpcIl1cbn07XG52YXIgZmFJZEJhZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lkLWJhZGdlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMmMxXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDMyMGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTMyLTk2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTQ0IDY0aDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFNYXJrZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFya2VyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWExXCIsIFwiTTQ4MSAzMUM0NDUuMS00LjggMzg2LjktNC44IDM1MSAzMWwtMTUgMTVMMzIyLjkgMzNDMjk0LjggNC45IDI0OS4yIDQuOSAyMjEuMSAzM0wxMzUgMTE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMjU1IDY2LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzAyLjEgODAgMTg2LjMgMTk1LjcgMzE2LjMgMzI1LjcgNDgxIDE2MWMzNS45LTM1LjkgMzUuOS05NC4xIDAtMTI5Ljl6TTI5My43IDM0OC4zTDE2My43IDIxOC4zIDk5LjUgMjgyLjVjLTQ4IDQ4LTgwLjggMTA5LjItOTQuMSAxNzUuOGwtNSAyNWMtMS42IDcuOSAuOSAxNiA2LjYgMjEuN3MxMy44IDguMSAyMS43IDYuNmwyNS01YzY2LjYtMTMuMyAxMjcuOC00Ni4xIDE3NS44LTk0LjFsNjQuMi02NC4yelwiXVxufTtcbnZhciBmYUZhY2VMYXVnaEJlYW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1sYXVnaC1iZWFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCBcImxhdWdoLWJlYW1cIl0sIFwiZjU5YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTIxNy42IDIxMi44bDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhTGF1Z2hCZWFtID0gZmFGYWNlTGF1Z2hCZWFtO1xudmFyIGZhSGVsaWNvcHRlclN5bWJvbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxpY29wdGVyLXN5bWJvbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUwMlwiLCBcIk00NDUuMyAyMjRINTEwQzQ5NS42IDEwOC4yIDQwMy44IDE2LjQgMjg4IDJWNjYuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNHpNNTEwIDI4OEg0NDUuM0M0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjRWNTEwYzExNS44LTE0LjQgMjA3LjYtMTA2LjIgMjIyLTIyMnpNMiAyODhDMTYuNCA0MDMuOCAxMDguMiA0OTUuNiAyMjQgNTEwVjQ0NS40QzE0My42IDQzMS45IDgwLjEgMzY4LjQgNjYuNyAyODhIMnptMC02NEg2Ni43QzgwLjEgMTQzLjYgMTQzLjYgODAuMSAyMjQgNjYuN1YyQzEwOC4yIDE2LjQgMTYuNCAxMDguMiAyIDIyNHptMjA2LTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI4OGg5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgyMDhWMTYwelwiXVxufTtcbnZhciBmYVVuaXZlcnNhbEFjY2VzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bml2ZXJzYWwtYWNjZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjlhXCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptMTYxLjUtODYuMWMtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVsMTEuOSA1LjFjMTcuMyA3LjQgMzUuMiAxMi45IDUzLjYgMTYuM3Y1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJzMTkuNC0xNy44IDE1LjItMzAuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZWMjM1LjVjMTguNC0zLjUgMzYuMy04LjkgNTMuNi0xNi4zbDExLjktNS4xYzEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZMMzM4LjcgMTc1Yy0yNi4xIDExLjItNTQuMiAxNy04Mi43IDE3cy01Ni41LTUuOC04Mi43LTE3bC0xMS45LTUuMXpNMjU2IDE2MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6XCJdXG59O1xudmFyIGZhQ2lyY2xlQ2hldnJvblVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1jaGV2cm9uLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjaGV2cm9uLWNpcmNsZS11cFwiXSwgXCJmMTM5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zNzcgMjcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTg3LTg3LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIzOSAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzc3IDI3MXpcIl1cbn07XG52YXIgZmFDaGV2cm9uQ2lyY2xlVXAgPSBmYUNpcmNsZUNoZXZyb25VcDtcbnZhciBmYUxhcmlTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhcmktc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFjOFwiLCBcIk0xNDQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTYuN2M1LjMtLjQgMTAuNi0uNyAxNi0uN3MxMC43IC4yIDE2IC43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NDkuNGM1NC45IDI1LjIgOTUuOCA3NS41IDEwOC4yIDEzNi4yYzMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuMS0yOS45LTIyLjUtNTUuOS00NS40LTc0LjNWMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MWMtNS4yLS43LTEwLjYtMS0xNi0xcy0xMC44IC4zLTE2IDF2OTVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTg4LjFDODIuNyAyMTEuNSA2NCAyNDcuNiA2NCAyODhjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE5MiAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0OC45QzE4LjUgMzgyIDAgMzM3LjIgMCAyODhjMC03Ny41IDQ1LjktMTQ0LjMgMTEyLTE3NC42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVZvbGNhbm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndm9sY2FubycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NV0sIFwiZjc3MFwiLCBcIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNUMyMTIuNCAxMi40IDIzMi43IDAgMjU2IDBzNDMuNiAxMi40IDU0LjggMzFDMzIyIDIxLjYgMzM2LjMgMTYgMzUyIDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xNC43IDAtMjguMy01LTM5LjEtMTMuM2wtMzIgNDhDMjc1LjMgMTg3IDI2NiAxOTIgMjU2IDE5MnMtMTkuMy01LTI0LjktMTMuM2wtMzItNDhDMTg4LjMgMTM5IDE3NC43IDE0NCAxNjAgMTQ0ek0xNDQgMzUybDQ4LjQtMjQuMmMxMC4yLTUuMSAyMS42LTcuOCAzMy03LjhjMTkuNiAwIDM4LjQgNy44IDUyLjIgMjEuNmwzMi41IDMyLjVjNi4zIDYuMyAxNC45IDkuOSAyMy44IDkuOWMxMS4zIDAgMjEuOC01LjYgMjgtMTVsOS43LTE0LjYtNTguOS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xSDIzNS4xYy0xMy43IDAtMjYuOCA1LjktMzUuOSAxNi4xbC01OS45IDY3LjRMMTQ0IDM1MnptMTkuNC05NS44YzE4LjItMjAuNSA0NC4zLTMyLjIgNzEuOC0zMi4yaDQxLjhjMjcuNCAwIDUzLjUgMTEuNyA3MS44IDMyLjJsMTUwLjIgMTY5YzguNSA5LjUgMTMuMiAyMS45IDEzLjIgMzQuN2MwIDI4LjgtMjMuNCA1Mi4yLTUyLjIgNTIuMkg1Mi4yQzIzLjQgNTEyIDAgNDg4LjYgMCA0NTkuOGMwLTEyLjggNC43LTI1LjEgMTMuMi0zNC43bDE1MC4yLTE2OXpcIl1cbn07XG52YXIgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctZGFzaGVkLWxpbmUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTNcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6TTU1MC42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1MzAuNyAyMjRIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDUzMC43bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0zOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRWNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTUyek0zOTIgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjM0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDQwelwiXVxufTtcbnZhciBmYVN0ZXJsaW5nU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGVybGluZy1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTYzLCBcImdicFwiLCBcInBvdW5kLXNpZ25cIl0sIFwiZjE1NFwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40VjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0OHY0NC41YzAgMTcuNC00LjcgMzQuNS0xMy43IDQ5LjRMNC42IDQzMS41Yy01LjkgOS45LTYuMSAyMi4yLS40IDMyLjJTMjAuNSA0ODAgMzIgNDgwSDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4OC41bC43LTEuMUMxMDQuMSAzOTAgMTEyIDM2MS41IDExMiAzMzIuNVYyODhIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYxNjAuNHpcIl1cbn07XG52YXIgZmFHYnAgPSBmYVN0ZXJsaW5nU2lnbjtcbnZhciBmYVBvdW5kU2lnbiA9IGZhU3RlcmxpbmdTaWduO1xudmFyIGZhVmlydXNlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aXJ1c2VzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDc2XCIsIFwiTTE5MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0VjM3LjVjMCAzNS42IDQzLjEgNTMuNSA2OC4zIDI4LjNsOS41LTkuNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTkuNSA5LjVDMjkzIDEyNC45IDMxMC45IDE2OCAzNDYuNSAxNjhIMzYwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM0Ni41Yy0zNS42IDAtNTMuNSA0My4xLTI4LjMgNjguM2w5LjUgOS41YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTkuNS05LjVDMjU5LjEgMjkzIDIxNiAzMTAuOSAyMTYgMzQ2LjVWMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM0Ni41YzAtMzUuNi00My4xLTUzLjUtNjguMy0yOC4zbC05LjUgOS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDkuNS05LjVDOTEgMjU5LjEgNzMuMSAyMTYgMzcuNSAyMTZIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzcuNWMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM2wtOS41LTkuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkuNSA5LjVDMTI0LjkgOTEgMTY4IDczLjEgMTY4IDM3LjVWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTQ4IDIyNGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS00OC02NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMjAgODBjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkM1NzQuNSAzMTIuMSA1OTEgMzUyIDYyNCAzNTJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwQzU1MS45IDQ0Ni41IDUxMiA0NjMgNTEyIDQ5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDNDE3LjUgNDIzLjkgNDAxIDM4NCAzNjggMzg0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzQ0MC4xIDI4OS41IDQ4MCAyNzMgNDgwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0wIDExMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbnZhciBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZXJzb24tY29uZmluZWQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1NzdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em05NiAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptODAgMTA0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZWMzUwLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjljLTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNMMTg0LjggMzQybC0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOUwyNDAgMzA2LjdWMjQ4elwiXVxufTtcbnZhciBmYVVzZXJUaWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci10aWUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1MDhcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDAgMjU2IDBBMTI4IDEyOCAwIDEgMCA5NiAxMjh6bTk0LjUgMjAwLjJsMTguNiAzMUwxNzUuOCA0ODMuMWwtMzYtMTQ2LjljLTItOC4xLTkuOC0xMy40LTE3LjktMTEuM0M1MS45IDM0Mi40IDAgNDA1LjggMCA0ODEuM2MwIDE3IDEzLjggMzAuNyAzMC43IDMwLjdIMTYyLjVjMCAwIDAgMCAuMSAwSDE2OCAyODBoNS41YzAgMCAwIDAgLjEgMEg0MTcuM2MxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdjMC03NS41LTUxLjktMTM4LjktMTIxLjktMTU2LjRjLTguMS0yLTE1LjkgMy4zLTE3LjkgMTEuM2wtMzYgMTQ2LjlMMjM4LjkgMzU5LjJsMTguNi0zMWM2LjQtMTAuNy0xLjMtMjQuMi0xMy43LTI0LjJIMjI0IDIwNC4zYy0xMi40IDAtMjAuMSAxMy42LTEzLjcgMjQuMnpcIl1cbn07XG52YXIgZmFBcnJvd0Rvd25Mb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tbG9uZycsXG4gIGljb246IFszODQsIDUxMiwgW1wibG9uZy1hcnJvdy1kb3duXCJdLCBcImYxNzVcIiwgXCJNMTY5LjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgNDAyLjcgMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzcwLjdMODYuNiAzMjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOHpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dEb3duID0gZmFBcnJvd0Rvd25Mb25nO1xudmFyIGZhVGVudEFycm93RG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50LWFycm93LWRvd24tdG8tbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU3ZVwiLCBcIk0yNDEuOCAxMTEuOWM4LjkgOS45IDguMSAyNS0xLjggMzMuOWwtODAgNzJjLTkuMSA4LjItMjMgOC4yLTMyLjEgMGwtODAtNzJjLTkuOS04LjktMTAuNy0yNC0xLjgtMzMuOXMyNC0xMC43IDMzLjktMS44bDM5LjkgMzZMMTIwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMjIuMSAzOS45LTM2YzkuOS04LjkgMjUtOC4xIDMzLjkgMS44em0xMjIuOCAyMi42YzExLjUtOC43IDI3LjMtOC43IDM4LjggMGwxNjggMTI4YzYuNiA1IDExIDEyLjUgMTIuMyAyMC43bDI0IDE2MCAuNyA0LjdjMTcuNSAuMiAzMS42IDE0LjQgMzEuNiAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNTkuNmwuNy00LjcgMjQtMTYwYzEuMi04LjIgNS42LTE1LjcgMTIuMy0yMC43bDE2OC0xMjh6TTM4NCA0NDhoODBMNDAyLjcgMzI1LjVjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41Yy01LjUgMC05LjkgNC40LTkuOSA5LjlWNDQ4elwiXVxufTtcbnZhciBmYUNlcnRpZmljYXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NlcnRpZmljYXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGEzXCIsIFwiTTIxMSA3LjNDMjA1IDEgMTk2LTEuNCAxODcuNiAuOHMtMTQuOSA4LjktMTcuMSAxNy4zTDE1NC43IDgwLjZsLTYyLTE3LjVjLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNy41IDYyTDE4LjEgMTcwLjZjLTguNCAyLjEtMTUgOC43LTE3LjMgMTcuMVMxIDIwNSA3LjMgMjExbDQ2LjIgNDVMNy4zIDMwMUMxIDMwNy0xLjQgMzE2IC44IDMyNC40czguOSAxNC45IDE3LjMgMTcuMWw2Mi41IDE1LjgtMTcuNSA2MmMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNjItMTcuNSAxNS44IDYyLjVjMi4xIDguNCA4LjcgMTUgMTcuMSAxNy4zczE3LjMtLjIgMjMuNC02LjRsNDUtNDYuMiA0NSA0Ni4yYzYuMSA2LjIgMTUgOC43IDIzLjQgNi40czE0LjktOC45IDE3LjEtMTcuM2wxNS44LTYyLjUgNjIgMTcuNWM4LjQgMi40IDE3LjQgMCAyMy41LTYuMXM4LjUtMTUuMSA2LjEtMjMuNWwtMTcuNS02MiA2Mi41LTE1LjhjOC40LTIuMSAxNS04LjcgMTcuMy0xNy4xcy0uMi0xNy40LTYuNC0yMy40bC00Ni4yLTQ1IDQ2LjItNDVjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjIuNS0xNS44IDE3LjUtNjJjMi40LTguNCAwLTE3LjQtNi4xLTIzLjVzLTE1LjEtOC41LTIzLjUtNi4xbC02MiAxNy41TDM0MS40IDE4LjFjLTIuMS04LjQtOC43LTE1LTE3LjEtMTcuM1MzMDcgMSAzMDEgNy4zTDI1NiA1My41IDIxMSA3LjN6XCJdXG59O1xudmFyIGZhUmVwbHlBbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVwbHktYWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtYWlsLXJlcGx5LWFsbFwiXSwgXCJmMTIyXCIsIFwiTTIwOS40IDM5LjVjLTkuMS05LjYtMjQuMy0xMC0zMy45LS45TDMzLjggMTczLjJjLTE5LjkgMTguOS0xOS45IDUwLjcgMCA2OS42TDE3NS41IDM3Ny40YzkuNiA5LjEgMjQuOCA4LjcgMzMuOS0uOXM4LjctMjQuOC0uOS0zMy45TDY2LjggMjA4IDIwOC41IDczLjRjOS42LTkuMSAxMC0yNC4zIC45LTMzLjl6TTM1MiA2NGMwLTEyLjYtNy40LTI0LjEtMTktMjkuMnMtMjUtMy0zNC40IDUuNGwtMTYwIDE0NGMtNi43IDYuMS0xMC42IDE0LjctMTAuNiAyMy44czMuOSAxNy43IDEwLjYgMjMuOGwxNjAgMTQ0YzkuNCA4LjUgMjIuOSAxMC42IDM0LjQgNS40czE5LTE2LjYgMTktMjkuMlYyODhoMzJjNTMgMCA5NiA0MyA5NiA5NmMwIDMwLjQtMTIuOCA0Ny45LTIyLjIgNTYuN2MtNS41IDUuMS05LjggMTItOS44IDE5LjVjMCAxMC45IDguOCAxOS43IDE5LjcgMTkuN2MyLjggMCA1LjYtLjYgOC4xLTEuOUM0OTQuNSA0NjcuOSA1NzYgNDE3LjMgNTc2IDMwNGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NkgzNTJWNjR6XCJdXG59O1xudmFyIGZhTWFpbFJlcGx5QWxsID0gZmFSZXBseUFsbDtcbnZhciBmYVN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIzXSwgXCJmMGYyXCIsIFwiTTE3NiA1NlY5NkgzMzZWNTZjMC00LjQtMy42LTgtOC04SDE4NGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZWNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZIMzI4YzMwLjkgMCA1NiAyNS4xIDU2IDU2Vjk2djMyVjQ4MEgxMjhWMTI4IDk2ek02NCA5Nkg5NlY0ODBINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDQ4MEg0MTZWOTZoMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYVBlcnNvblNrYXRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXNrYXRpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNrYXRpbmdcIl0sIFwiZjdjNVwiLCBcIk0zNTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTI4IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzMTkuNGM0My42IDAgNjQuNiA1My40IDMyLjggODMuMWwtNzQuNCA2OS40IDYwLjIgNjAuMmM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOVY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzQ5LjNsLTc3LjktNzcuOGMtMjYuNi0yNi42LTI0LjYtNzAuMyA0LjMtOTQuNGwyMC40LTE3SDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTgxLjQgMzUzLjRsODYuOS04Ni45YzQuNiAxMCAxMSAxOS4zIDE5LjMgMjcuNWwyMS44IDIxLjgtODIuNyA4Mi43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3ptMzIyLjUgOTUuMWM4LjYgMi4xIDEzLjggMTAuOCAxMS42IDE5LjRsLS40IDEuN2MtNi4yIDI0LjktMjguNiA0Mi40LTU0LjMgNDIuNEgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODguOGMxMSAwIDIwLjYtNy41IDIzLjMtMTguMmwuNC0xLjdjMi4xLTguNiAxMC44LTEzLjggMTkuNC0xMS42ek0xMzUuMiA0NzguM2wtNi4yIDMuMWMtMjEuNiAxMC44LTQ3LjYgNi42LTY0LjYtMTAuNUw0LjcgNDExLjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw1OS42IDU5LjZjNy4zIDcuMyAxOC41IDkuMSAyNy43IDQuNWw2LjItMy4xYzcuOS00IDE3LjUtLjcgMjEuNSA3LjJzLjcgMTcuNS03LjIgMjEuNXpcIl1cbn07XG52YXIgZmFTa2F0aW5nID0gZmFQZXJzb25Ta2F0aW5nO1xudmFyIGZhRmlsdGVyQ2lyY2xlRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbHRlci1jaXJjbGUtZG9sbGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJmdW5uZWwtZG9sbGFyXCJdLCBcImY2NjJcIiwgXCJNMy45IDIyLjlDMTAuNSA4LjkgMjQuNSAwIDQwIDBINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzk2LjQgMTk1LjZDMzE2LjIgMjEyLjEgMjU2IDI4MyAyNTYgMzY4YzAgMjcuNCA2LjMgNTMuNCAxNy41IDc2LjVjLTEuNi0uOC0zLjItMS44LTQuNy0yLjlsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjI4OC45TDkgNjUuM0MtLjcgNTMuNC0yLjggMzYuOCAzLjkgMjIuOXpNMjg4IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xMjAuOC0zMi42Yy42LS45IDEuOC0yLjEgNC4yLTMuNGM1LjEtMi43IDEyLjUtNC4xIDE4LjctNGM4LjIgLjEgMTcuMSAxLjggMjYuNCA0LjFjOC42IDIuMSAxNy4zLTMuMSAxOS40LTExLjdzLTMuMS0xNy4zLTExLjctMTkuNGMtNS42LTEuNC0xMS42LTIuNy0xNy45LTMuN1YyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2OS41Yy02LjEgMS4yLTEyLjMgMy4yLTE4IDYuM2MtMTEuOCA2LjMtMjMgMTguNC0yMS44IDM3LjJjMSAxNiAxMS43IDI1LjMgMjEuNiAzMC43YzguOCA0LjcgMTkuNyA3LjggMjguNiAxMC4zbDEuOCAuNWMxMC4zIDIuOSAxNy45IDUuMiAyMy4yIDguM2M0LjUgMi43IDQuNyA0LjIgNC43IDUuNmMuMSAyLjQtLjUgMy43LTEgNC41Yy0uNiAxLTEuOCAyLjItNCAzLjNjLTQuNyAyLjUtMTEuOCAzLjgtMTguNSAzLjZjLTkuNS0uMy0xOC41LTMuMS0yOS45LTYuOGMtMS45LS42LTMuOC0xLjItNS44LTEuOGMtOC40LTIuNi0xNy40IDIuMS0yMCAxMC41czIuMSAxNy40IDEwLjUgMjBjMS42IC41IDMuMyAxIDUgMS42bDAgMCAwIDBjNyAyLjMgMTUuMSA0LjggMjMuNyA2LjZ2MTEuNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjQzOC43YzYuMi0xLjEgMTIuNS0zLjEgMTguMy02LjJjMTIuMS02LjUgMjIuMy0xOC43IDIxLjctMzYuOWMtLjUtMTYuMi0xMC4zLTI2LjMtMjAuNS0zMi4zYy05LjQtNS42LTIxLjItOC45LTMwLjUtMTEuNWwtLjIgMGMtMTAuNC0yLjktMTguMy01LjItMjMuOS04LjJjLTQuOC0yLjYtNC44LTQtNC44LTQuNWwwLS4xYy0uMS0xLjkgLjMtMi45IC44LTMuNnpcIl1cbn07XG52YXIgZmFGdW5uZWxEb2xsYXIgPSBmYUZpbHRlckNpcmNsZURvbGxhcjtcbnZhciBmYUNhbWVyYVJldHJvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbWVyYS1yZXRybycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI0N10sIFwiZjA4M1wiLCBcIk0yMjAuNiAxMjEuMkwyNzEuMSA5NiA0NDggOTZ2OTZIMzMzLjJjLTIxLjktMTUuMS00OC41LTI0LTc3LjItMjRzLTU1LjIgOC45LTc3LjIgMjRINjRWMTI4SDE5MmM5LjkgMCAxOS43LTIuMyAyOC42LTYuOHpNMCAxMjhWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEgyNzEuMWMtOS45IDAtMTkuNyAyLjMtMjguNiA2LjhMMTkyIDY0SDE2MFY0OGMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2QzI4LjcgNjQgMCA5Mi43IDAgMTI4ek0xNjggMzA0YTg4IDg4IDAgMSAxIDE3NiAwIDg4IDg4IDAgMSAxIC0xNzYgMHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1kb3duXCJdLCBcImYwYWJcIiwgXCJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwek0xMjcgMjgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzEgNzFMMjMyIDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTgyLjEgNzEtNzFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDI3MyAzOTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDEyNyAyODF6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVEb3duID0gZmFDaXJjbGVBcnJvd0Rvd247XG52YXIgZmFGaWxlSW1wb3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtaW1wb3J0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1yaWdodC10by1maWxlXCJdLCBcImY1NmZcIiwgXCJNMTI4IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDM1MlYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJINTEyVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgxOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0VjMzNkgzMDIuMWwtMzkgMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlIMTI4VjY0em0wIDIyNHY0OEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEgxMjh6TTUxMiAxMjhIMzg0VjBMNTEyIDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0VG9GaWxlID0gZmFGaWxlSW1wb3J0O1xudmFyIGZhU3F1YXJlQXJyb3dVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1hcnJvdy11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZXh0ZXJuYWwtbGluay1zcXVhcmVcIl0sIFwiZjE0Y1wiLCBcIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgzODR6TTE2MCAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoOTQuMUwxMTkgMzI3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTM1LTEzNVYzMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxNjhjMC0xMy4zLTEwLjctMjQtMjQtMjRIMTYwelwiXVxufTtcbnZhciBmYUV4dGVybmFsTGlua1NxdWFyZSA9IGZhU3F1YXJlQXJyb3dVcFJpZ2h0O1xudmFyIGZhQm94T3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3gtb3BlbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjQ5ZVwiLCBcIk01OC45IDQyLjFjMy02LjEgOS42LTkuNiAxNi4zLTguN0wzMjAgNjQgNTY0LjggMzMuNGM2LjctLjggMTMuMyAyLjcgMTYuMyA4LjdsNDEuNyA4My40YzkgMTcuOS0uNiAzOS42LTE5LjggNDUuMUw0MzkuNiAyMTcuM2MtMTMuOSA0LTI4LjgtMS45LTM2LjItMTQuM0wzMjAgNjQgMjM2LjYgMjAzYy03LjQgMTIuNC0yMi4zIDE4LjMtMzYuMiAxNC4zTDM3LjEgMTcwLjZjLTE5LjMtNS41LTI4LjgtMjcuMi0xOS44LTQ1LjFMNTguOSA0Mi4xek0zMjEuMSAxMjhsNTQuOSA5MS40YzE0LjkgMjQuOCA0NC42IDM2LjYgNzIuNSAyOC42TDU3NiAyMTEuNnYxNjdjMCAyMi0xNSA0MS4yLTM2LjQgNDYuNmwtMjA0LjEgNTFjLTEwLjIgMi42LTIwLjkgMi42LTMxIDBsLTIwNC4xLTUxQzc5IDQxOS43IDY0IDQwMC41IDY0IDM3OC41di0xNjdMMTkxLjYgMjQ4YzI3LjggOCA1Ny42LTMuOCA3Mi41LTI4LjZMMzE4LjkgMTI4aDIuMnpcIl1cbn07XG52YXIgZmFTY3JvbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nyb2xsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjIwXSwgXCJmNzBlXCIsIFwiTTAgODB2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJINDggOTZWODBjMC0yNi41LTIxLjUtNDgtNDgtNDhTMCA1My41IDAgODB6TTExMiAzMmMxMCAxMy40IDE2IDMwIDE2IDQ4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0di01LjNjMC0zMi40IDI2LjMtNTguNyA1OC43LTU4LjdINDgwVjEyOGMwLTUzLTQzLTk2LTk2LTk2SDExMnpNNDY0IDQ4MGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMmMwLTguOC03LjItMTYtMTYtMTZIMzE0LjdjLTE0LjcgMC0yNi43IDExLjktMjYuNyAyNi43VjM4NGMwIDUzLTQzIDk2LTk2IDk2SDM2OGg5NnpcIl1cbn07XG52YXIgZmFTcGEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNWJiXCIsIFwiTTE4My4xIDIzNS4zYzMzLjcgMjAuNyA2Mi45IDQ4LjEgODUuOCA4MC41YzcgOS45IDEzLjQgMjAuMyAxOS4xIDMxYzUuNy0xMC44IDEyLjEtMjEuMSAxOS4xLTMxYzIyLjktMzIuNCA1Mi4xLTU5LjggODUuOC04MC41QzQzNy42IDIwNy44IDQ5MC4xIDE5MiA1NDYgMTkyaDkuOWMxMS4xIDAgMjAuMSA5IDIwLjEgMjAuMUM1NzYgMzYwLjEgNDU2LjEgNDgwIDMwOC4xIDQ4MEgyODggMjY3LjlDMTE5LjkgNDgwIDAgMzYwLjEgMCAyMTIuMUMwIDIwMSA5IDE5MiAyMC4xIDE5MkgzMGM1NS45IDAgMTA4LjQgMTUuOCAxNTMuMSA0My4zek0zMDEuNSAzNy42YzE1LjcgMTYuOSA2MS4xIDcxLjggODQuNCAxNjQuNmMtMzggMjEuNi03MS40IDUwLjgtOTcuOSA4NS42Yy0yNi41LTM0LjgtNTkuOS02My45LTk3LjktODUuNmMyMy4yLTkyLjggNjguNi0xNDcuNyA4NC40LTE2NC42QzI3OCAzMy45IDI4Mi45IDMyIDI4OCAzMnMxMCAxLjkgMTMuNSA1LjZ6XCJdXG59O1xudmFyIGZhTG9jYXRpb25QaW5Mb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY2F0aW9uLXBpbi1sb2NrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTFmXCIsIFwiTTIxNS43IDQ5OS4yYzExLTEzLjggMjUuMS0zMS43IDQwLjMtNTIuM1YzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTU1LjYgNDAuNS0xMDEuNyA5My42LTExMC41QzM2NyA3MCAyODcuNyAwIDE5MiAwQzg2IDAgMCA4NiAwIDE5MmMwIDg3LjQgMTE3IDI0MyAxNjguMyAzMDcuMmMxMi4zIDE1LjMgMzUuMSAxNS4zIDQ3LjQgMHpNMTkyIDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEgzNjhWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFQYXVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXVzZScsXG4gIGljb246IFszMjAsIDUxMiwgWzkyMDhdLCBcImYwNGNcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJWNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEg0OHptMTkyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQwMGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzMmMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjQwelwiXVxufTtcbnZhciBmYUhpbGxBdmFsYW5jaGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGlsbC1hdmFsYW5jaGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MDdcIiwgXCJNNDM5LjcgNDAxLjljMzQuMiAyMy4xIDgxLjEgMTkuNSAxMTEuNC0xMC44YzM0LjQtMzQuNCAzNC40LTkwLjEgMC0xMjQuNGMtMjcuOC0yNy44LTY5LjUtMzMuMS0xMDIuNi0xNmMtMTEuOCA2LjEtMTYuNCAyMC42LTEwLjMgMzIuM3MyMC42IDE2LjQgMzIuMyAxMC4zYzE1LjEtNy44IDM0LTUuMyA0Ni42IDcuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtODEuNy04MS43QzQwMS4yIDI2MS4zIDQxNiAyMzYuNCA0MTYgMjA4YzAtMzMuOS0yMS4xLTYyLjktNTAuOS03NC41YzEuOS02LjggMi45LTE0IDIuOS0yMS41YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNy4zIDAtNTEuNSAxMy43LTY1LjkgMzQuNkMyMTYuMyA0Ni42IDE5Ny45IDMyIDE3NiAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhjMCA0IC41IDcuOSAxLjQgMTEuNkw0MzkuNyA0MDEuOXpNNDgwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNWNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwSDM5Ni43YzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmVFbXB0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1lbXB0eScsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtMFwiLCBcInRoZXJtb21ldGVyLTBcIiwgXCJ0aGVybW9tZXRlci1lbXB0eVwiXSwgXCJmMmNiXCIsIFwiTTExMiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzIzMy44IDMzMi42IDI0MCAzNDkuNSAyNDAgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjljOC4yLTEwLjYgMTUuMy0yNS4yIDE1LjMtNDIuNVYxMTJ6TTE2MCAwQzk4LjEgMCA0OCA1MC4yIDQ4IDExMlYyNzYuNWMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMyNy4yIDMwNC4yIDE2IDMzNC44IDE2IDM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0YzAtMzMuMi0xMS4yLTYzLjgtMzAuMS04OC4xYy0uOS0xLjItMS41LTIuMi0xLjctMi44Yy0uMS0uMy0uMi0uNS0uMi0uNlYxMTJDMjcyIDUwLjIgMjIxLjkgMCAxNjAgMHptMCA0MTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbnZhciBmYVRoZXJtb21ldGVyMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbnZhciBmYVRoZXJtb21ldGVyRW1wdHkgPSBmYVRlbXBlcmF0dXJlRW1wdHk7XG52YXIgZmFCb21iID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbWInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNjNdLCBcImYxZTJcIiwgXCJNNDU5LjEgNTIuNEw0NDIuNiA2LjVDNDQwLjcgMi42IDQzNi41IDAgNDMyLjEgMHMtOC41IDIuNi0xMC40IDYuNUw0MDUuMiA1Mi40bC00NiAxNi44Yy00LjMgMS42LTcuMyA1LjktNy4yIDEwLjRjMCA0LjUgMyA4LjcgNy4yIDEwLjJsNDUuNyAxNi44IDE2LjggNDUuOGMxLjUgNC40IDUuOCA3LjUgMTAuNCA3LjVzOC45LTMuMSAxMC40LTcuNWwxNi41LTQ1LjggNDUuNy0xNi44YzQuMi0xLjUgNy4yLTUuNyA3LjItMTAuMmMwLTQuNi0zLTguOS03LjItMTAuNEw0NTkuMSA1Mi40em0tMTMyLjQgNTNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0yLjkgMi45QzI1Ni41IDEwMC4zIDIzMi43IDk2IDIwOCA5NkM5My4xIDk2IDAgMTg5LjEgMCAzMDRTOTMuMSA1MTIgMjA4IDUxMnMyMDgtOTMuMSAyMDgtMjA4YzAtMjQuNy00LjMtNDguNS0xMi4yLTcwLjVsMi45LTIuOWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTIwMCAxOTJjLTU3LjQgMC0xMDQgNDYuNi0xMDQgMTA0djhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ2LThjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZoOGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmgtOHpcIl1cbn07XG52YXIgZmFSZWdpc3RlcmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlZ2lzdGVyZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxNzRdLCBcImYyNWRcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2MCAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRoODhjNDQuMiAwIDgwIDM1LjggODAgODBjMCAyOC0xNC40IDUyLjctMzYuMyA2N2wzNC4xIDc1LjFjNS41IDEyLjEgLjEgMjYuMy0xMS45IDMxLjhzLTI2LjMgLjEtMzEuOC0xMS45TDI2OC45IDI4OEgyMDh2NzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjY0IDE1MnptNDggODhoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjA4djY0elwiXVxufTtcbnZhciBmYUFkZHJlc3NDYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FkZHJlc3MtY2FyZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzYyMTQwLCBcImNvbnRhY3QtY2FyZFwiLCBcInZjYXJkXCJdLCBcImYyYmJcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em04MCAyNTZoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS0zMi05NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni0zMkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFDb250YWN0Q2FyZCA9IGZhQWRkcmVzc0NhcmQ7XG52YXIgZmFWY2FyZCA9IGZhQWRkcmVzc0NhcmQ7XG52YXIgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjYWxlLXVuYmFsYW5jZWQtZmxpcCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiYmFsYW5jZS1zY2FsZS1yaWdodFwiXSwgXCJmNTE2XCIsIFwiTTExNy45IDYyLjRjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwxMTMgMzcuN0MyNjUgMTUuOCAyOTAuNyAwIDMyMCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMy0uMiA1LjktLjUgOC44bDEyMi42IDQwLjljMTYuOCA1LjYgMjUuOCAyMy43IDIwLjIgNDAuNXMtMjMuNyAyNS44LTQwLjUgMjAuMkwzNjYuNCAxNDUuMmMtNC41IDMuMi05LjMgNS45LTE0LjQgOC4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjE1My4zYy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnpNMjAwLjQgMjg4TDEyOCAxNjMuOCA1NS42IDI4OEgyMDAuNHpNMTI4IDM4NEM2NS4xIDM4NCAxMi44IDM1MCAyIDMwNS4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzI0My4yIDM1MCAxOTAuOSAzODQgMTI4IDM4NHptMzgyLjgtOTIuMkw0MzguNCA0MTZINTgzLjNMNTEwLjggMjkxLjh6bTEyNiAxNDEuM0M2MjYgNDc4IDU3My43IDUxMiA1MTAuOCA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xelwiXVxufTtcbnZhciBmYUJhbGFuY2VTY2FsZVJpZ2h0ID0gZmFTY2FsZVVuYmFsYW5jZWRGbGlwO1xudmFyIGZhU3Vic2NyaXB0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1YnNjcmlwdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEyY1wiLCBcIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJINDcuM2w4OS42IDEyOEw0Ny4zIDM4NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDE3NiAzMTEuOGw4NS44IDEyMi42YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzA0LjdMMjE1LjEgMjU2bDg5LjYtMTI4SDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODhjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMTc2IDIwMC4yIDkwLjIgNzcuNkM4NC4yIDY5LjEgNzQuNCA2NCA2NCA2NEgzMnpNNDgwIDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjlDMzkzIDM2MS41IDQwNC4zIDM2OCA0MTYgMzY4djgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyIDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjMyMHpcIl1cbn07XG52YXIgZmFEaWFtb25kVHVyblJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYW1vbmQtdHVybi1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZGlyZWN0aW9uc1wiXSwgXCJmNWViXCIsIFwiTTIyNy43IDExLjdjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBsMjE2IDIxNmMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjE2IDIxNmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBsLTIxNi0yMTZjLTE1LjYtMTUuNi0xNS42LTQwLjkgMC01Ni42bDIxNi0yMTZ6bTg3LjYgMTM3Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41cy05LjkgOC4zLTkuOSAxNC44djU2SDIyNGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyODBjMC04LjggNy4yLTE2IDE2LTE2aDY0djU2YzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDgwLTgwYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC04MC04MHpcIl1cbn07XG52YXIgZmFEaXJlY3Rpb25zID0gZmFEaWFtb25kVHVyblJpZ2h0O1xudmFyIGZhQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVyc3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZGNcIiwgXCJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN3MtOS40IDIxLTIuOCAzMC41bDExMiAxNjMuM0wxNi42IDIzMy4yQzYuNyAyMzYuNCAwIDI0NS42IDAgMjU2czYuNyAxOS42IDE2LjYgMjIuOGwxMDMuMSAzMy40TDY2LjggNDEyLjhjLTQuOSA5LjMtMy4yIDIwLjcgNC4zIDI4LjFzMTguOCA5LjIgMjguMSA0LjNsMTAwLjYtNTIuOSAzMy40IDEwMy4xYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNnMxOS42LTYuNyAyMi44LTE2LjZsMzMuNC0xMDMuMSAxMDAuNiA1Mi45YzkuMyA0LjkgMjAuNyAzLjIgMjguMS00LjNzOS4yLTE4LjggNC4zLTI4LjFMMzkyLjMgMzEyLjJsMTAzLjEtMzMuNGM5LjktMy4yIDE2LjYtMTIuNCAxNi42LTIyLjhzLTYuNy0xOS42LTE2LjYtMjIuOEwzODguOSAxOTguN2wyNS43LTcwLjRjMy4yLTguOCAxLTE4LjYtNS42LTI1LjJzLTE2LjQtOC44LTI1LjItNS42bC03MC40IDI1LjdMMjc4LjggMTYuNkMyNzUuNiA2LjcgMjY2LjQgMCAyNTYgMHMtMTkuNiA2LjctMjIuOCAxNi42bC0zMi4zIDk5LjZMMzcuNiA0LjJ6XCJdXG59O1xudmFyIGZhSG91c2VMYXB0b3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbGFwdG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJsYXB0b3AtaG91c2VcIl0sIFwiZTA2NlwiLCBcIk0yMTguMyA4LjVjMTIuMy0xMS4zIDMxLjItMTEuMyA0My40IDBsMjA4IDE5MmM2LjcgNi4yIDEwLjMgMTQuOCAxMC4zIDIzLjVIMzM2Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN1YyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg2NFY0MTZIMTEyYy0yNi41IDAtNDgtMjEuNS00OC00OFYyNTZIMzJjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LjEtMzUuMmwyMDgtMTkyek0zNTIgMzA0VjQ0OEg1NDRWMzA0SDM1MnptLTQ4LTE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDU2MGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhoMzJjOC44IDAgMTYgNy4yIDE2IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDU0NCAzNTIgMzA0Yy0yNi41IDAtNDgtMjEuNS00OC00OGMwLTguOCA3LjItMTYgMTYtMTZoMzJWMjg4elwiXVxufTtcbnZhciBmYUxhcHRvcEhvdXNlID0gZmFIb3VzZUxhcHRvcDtcbnZhciBmYUZhY2VUaXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXRpcmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU1LCBcInRpcmVkXCJdLCBcImY1YzhcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC43IDMyOC43YzIyLTIyIDUzLjktNDAuNyA5MS4zLTQwLjdzNjkuMyAxOC43IDkxLjMgNDAuN2MxMS4xIDExLjEgMjAuMSAyMy40IDI2LjQgMzUuNGM2LjIgMTEuNyAxMC4zIDI0LjQgMTAuMyAzNS45YzAgNS4yLTIuNiAxMC4yLTYuOSAxMy4ycy05LjggMy43LTE0LjcgMS44bC0yMC41LTcuN2MtMjYuOS0xMC4xLTU1LjUtMTUuMy04NC4zLTE1LjNoLTMuMmMtMjguOCAwLTU3LjMgNS4yLTg0LjMgMTUuM0wxNDkuNiA0MTVjLTQuOSAxLjgtMTAuNCAxLjItMTQuNy0xLjhzLTYuOS03LjktNi45LTEzLjJjMC0xMS42IDQuMi0yNC4yIDEwLjMtMzUuOWM2LjMtMTIgMTUuMy0yNC4zIDI2LjQtMzUuNHptLTMxLjItMTgybDg5LjkgNDcuOWMxMC43IDUuNyAxMC43IDIxLjEgMCAyNi44bC04OS45IDQ3LjljLTcuOSA0LjItMTcuNS0xLjUtMTcuNS0xMC41YzAtMi44IDEtNS41IDIuOC03LjZsMzYtNDMuMi0zNi00My4yYy0xLjgtMi4xLTIuOC00LjgtMi44LTcuNmMwLTkgOS42LTE0LjcgMTcuNS0xMC41ek0zOTYgMTU3LjFjMCAyLjgtMSA1LjUtMi44IDcuNmwtMzYgNDMuMiAzNiA0My4yYzEuOCAyLjEgMi44IDQuOCAyLjggNy42YzAgOS05LjYgMTQuNy0xNy41IDEwLjVsLTg5LjktNDcuOWMtMTAuNy01LjctMTAuNy0yMS4xIDAtMjYuOGw4OS45LTQ3LjljNy45LTQuMiAxNy41IDEuNSAxNy41IDEwLjV6XCJdXG59O1xudmFyIGZhVGlyZWQgPSBmYUZhY2VUaXJlZDtcbnZhciBmYU1vbmV5QmlsbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUxZjNcIiwgXCJNOTYgOTZWMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEgxNjBjLTM1LjMgMC02NCAyOC43LTY0IDY0em02NCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRIMTYwVjI1NnpNMjI0IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0Vjk2aDY0ek01NzYgMjU2djY0SDUxMmMwLTM1LjMgMjguNy02NCA2NC02NHpNNTEyIDk2aDY0djY0Yy0zNS4zIDAtNjQtMjguNy02NC02NHpNMjg4IDIwOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwVjM2MGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMEg1MjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTIwYy0zOS44IDAtNzItMzIuMi03Mi03MlYxMjB6XCJdXG59O1xudmFyIGZhU21vZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbW9nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzVmXCIsIFwiTTMyIDE0NGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NEgyOTkuM2MyMi42IDE5LjkgNTIuMiAzMiA4NC43IDMyczYyLjEtMTIuMSA4NC43LTMySDQ5NmM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnMtNTAuMS0xMTItMTEyLTExMmMtMTAuNyAwLTIxIDEuNS0zMC44IDQuM0M0NDMuOCAyNy43IDQwMS4xIDAgMzUyIDBjLTMyLjYgMC02Mi40IDEyLjItODUuMSAzMi4zQzI0Mi4xIDEyLjEgMjEwLjUgMCAxNzYgMEM5Ni41IDAgMzIgNjQuNSAzMiAxNDR6TTYxNiAzNjhIMjgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDYxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHptLTY0IDk2SDQ0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg1NTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6bS0xOTIgMEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgzNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6TTIyNCAzOTJjMC0xMy4zLTEwLjctMjQtMjQtMjRIOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjAwYzEzLjMgMCAyNC0xMC43IDI0LTI0elwiXVxufTtcbnZhciBmYUNydXRjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjcnV0Y2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZjdcIiwgXCJNMjk3LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwem0tOTYgMTQ0bC0zNC44IDM0LjhjLTEyLjkgMTIuOS0yMS45IDI5LjItMjUuOCA0Ny4xTDExNi44IDM0Mi45Yy0xLjMgNS45LTQuMyAxMS40LTguNiAxNS43TDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5OC44LTk4LjhjNC4zLTQuMyA5LjctNy4zIDE1LjctOC42bDEwNy42LTIzLjljMTcuOC00IDM0LjEtMTIuOSA0Ny4xLTI1LjhsMzQuNy0zNC43YzAgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWw3NC42LTc0LjYtNDUuMy00NS4zTDMzNiAyNDIuNyAyNjkuMyAxNzZsNTIuMS01Mi4xTDI3Ni4xIDc4LjZsLTc0LjcgNzQuN3pNMjI0IDIyMS4zTDI5MC43IDI4OGwtMTIuMiAxMi4yYy00LjMgNC4zLTkuNyA3LjMtMTUuNyA4LjZsLTc2LjcgMTcgMTctNzYuN2MxLjMtNS45IDQuMy0xMS40IDguNi0xNS43TDIyNCAyMjEuM3pcIl1cbn07XG52YXIgZmFGb250QXdlc29tZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb250LWF3ZXNvbWUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsIFwiZm9udC1hd2Vzb21lLWZsYWdcIiwgXCJmb250LWF3ZXNvbWUtbG9nby1mdWxsXCJdLCBcImYyYjRcIiwgXCJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MkMxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDMgMCAzNTIgMCA2NCA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNGMwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3Mmw2MS43LTEzOC45YzEuNS0zLjQgMi4zLTcgMi4zLTEwLjdjMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpcIl1cbn07XG52YXIgZmFGb250QXdlc29tZUZsYWcgPSBmYUZvbnRBd2Vzb21lO1xudmFyIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCA9IGZhRm9udEF3ZXNvbWU7XG52YXIgZmFDbG91ZEFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYXJyb3ctdXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs2MjMzOCwgXCJjbG91ZC11cGxvYWRcIiwgXCJjbG91ZC11cGxvYWQtYWx0XCJdLCBcImYwZWVcIiwgXCJNMTQ0IDQ4MEM2NC41IDQ4MCAwIDQxNS41IDAgMzM2YzAtNjIuOCA0MC4yLTExNi4yIDk2LjItMTM1LjljLS4xLTIuNy0uMi01LjQtLjItOC4xYzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzU5LjMgMCAxMTEgMzIuMiAxMzguNyA4MC4yQzQwOS45IDEwMiA0MjguMyA5NiA0NDggOTZjNTMgMCA5NiA0MyA5NiA5NmMwIDEyLjItMi4zIDIzLjgtNi40IDM0LjZDNTk2IDIzOC40IDY0MCAyOTAuMSA2NDAgMzUyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDE0NHptNzktMjE3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzktMzlWMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjU3LjlsMzkgMzljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTgwIDgwelwiXVxufTtcbnZhciBmYUNsb3VkVXBsb2FkID0gZmFDbG91ZEFycm93VXA7XG52YXIgZmFDbG91ZFVwbG9hZEFsdCA9IGZhQ2xvdWRBcnJvd1VwO1xudmFyIGZhUGFsZXR0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWxldHRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTEyXSwgXCJmNTNmXCIsIFwiTTUxMiAyNTZjMCAuOSAwIDEuOCAwIDIuN2MtLjQgMzYuNS0zMy42IDYxLjMtNzAuMSA2MS4zSDM0NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhjMCAzLjQgLjQgNi43IDEgOS45YzIuMSAxMC4yIDYuNSAyMCAxMC44IDI5LjljNi4xIDEzLjggMTIuMSAyNy41IDEyLjEgNDJjMCAzMS44LTIxLjYgNjAuNy01My40IDYyYy0zLjUgLjEtNyAuMi0xMC42IC4yQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQXJyb3dzVHVyblJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10dXJuLXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNGMwXCIsIFwiTTI5Ny40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDE2MEgxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNEMwIDE1My4zIDU3LjMgOTYgMTI4IDk2SDMzOC43TDI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zem0tOTYgMjU2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgNDE2SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhjMC01MyA0My05NiA5Ni05NkgyNDIuN2wtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFWZXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Zlc3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwODVcIiwgXCJNMjA3LjEgMjM3LjRMMTUxLjIgNjkuN0MxNjguNiA3OS43IDE5Mi42IDg4IDIyNCA4OHM1NS40LTguMyA3Mi44LTE4LjNMMjI2LjUgMjgwLjZjLTEuNiA0LjktMi41IDEwLTIuNSAxNS4yVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjcwLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNlYxMjggNTQuMyA0OGMwLTI2LjUtMjEuNS00OC00OC00OGgtNC41Yy0uMiAwLS40IDAtLjYgMGMtLjQgMC0uOCAwLTEuMiAwQzMxMSAwIDI5NS43IDkuNyAyODUuNyAxOC44QzI3Ni40IDI3LjIgMjU3LjIgNDAgMjI0IDQwcy01Mi40LTEyLjgtNjEuNy0yMS4yQzE1Mi4zIDkuNyAxMzcgMCAxMTguMyAwYy0uNCAwLS44IDAtMS4yIDBjLS4yIDAtLjQgMC0uNiAwSDExMkM4NS41IDAgNjQgMjEuNSA2NCA0OHY2LjNWMTI4djE3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDE3NmM5LjkgMCAxOS0zIDI2LjctOC4xQzE5NS45IDQ5Mi4yIDE5MiA0NzguNSAxOTIgNDY0VjI5NS44YzAtOC42IDEuNC0xNy4xIDQuMS0yNS4zbDExLTMzLjF6TTM0Ny4zIDM1Ni43bDQ4IDQ4YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTQ4LTQ4Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDB6bS0yOTQuNiA0OGw0OC00OGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZsLTQ4IDQ4Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYUZlcnJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZlcnJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGVhXCIsIFwiTTIyNCAwSDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMmg3NS4xYzIwLjYgMCAzMS42IDI0LjMgMTguMSAzOS44TDQ1NiA5NkgxMjBMOTguOCA3MS44Qzg1LjMgNTYuMyA5Ni4zIDMyIDExNi45IDMySDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNOTYgMTI4SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODMuNWMwIDEzLjMtNC4yIDI2LjMtMTEuOSAzNy4ybC01MS40IDcxLjljLTEuOSAxLjEtMy43IDIuMi01LjUgMy41Yy0xNS41IDEwLjctMzQgMTgtNTEgMTkuOUgzNzUuNmMtMTcuMS0xLjgtMzUtOS01MC44LTE5LjljLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNC44IDEwLjItMzIuNSAxOC01MC42IDE5LjlIMTgzLjljLTE3LTEuOC0zNS42LTkuMi01MS0xOS45Yy0xLjgtMS4zLTMuNy0yLjQtNS42LTMuNUw3NS45IDMyMC43QzY4LjIgMzA5LjggNjQgMjk2LjggNjQgMjgzLjVWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiA2NHY5Nkg0NDhWMTkySDEyOHpNMzA2LjUgNDIxLjlDMzI5IDQzNy40IDM1Ni41IDQ0OCAzODQgNDQ4YzI2LjkgMCA1NS4zLTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDUwMS43IDQxNyA1MTIgMzg0IDUxMmMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDQzNy4yIDE2NS4xIDQ0OCAxOTIgNDQ4YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbnZhciBmYUFycm93c0Rvd25Ub1Blb3BsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtZG93bi10by1wZW9wbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YjlcIiwgXCJNMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjE0Mi4xTDk3IDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyM1YyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzYwIDIwMGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwek0xODQgMjk2YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTMxMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6TTIwMCA0NDEuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNi4zLTY3LjVjMS43LTEuNyAzLjItMy42IDQuMy01LjhMMjY0IDM0NS41VjQwMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNDUuNWwyNi45IDQ5LjljMS4yIDIuMiAyLjYgNC4xIDQuMyA1LjhsLTM2LjMgNjcuNWMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMNDQwIDQ0MS41VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDEuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDQ4Ni4yYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDMxMC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42SDEzNC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM0wxOC45IDQ2OC42Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw4OCA0NDEuNVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDQxLjV6TTQxNSAxNTNsNjQgNjRjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjNWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWMTQyLjFsLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45elwiXVxufTtcbnZhciBmYVNlZWRsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NlZWRsaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzkzLCBcInNwcm91dFwiXSwgXCJmNGQ4XCIsIFwiTTUxMiAzMmMwIDExMy42LTg0LjYgMjA3LjUtMTk0LjIgMjIyYy03LjEtNTMuNC0zMC42LTEwMS42LTY1LjMtMTM5LjNDMjkwLjggNDYuMyAzNjQgMCA0NDggMGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg2NGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0djMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMjBDMTAwLjMgMzIwIDAgMjE5LjcgMCA5NnpcIl1cbn07XG52YXIgZmFTcHJvdXQgPSBmYVNlZWRsaW5nO1xudmFyIGZhTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlZnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NTk2LCBcImFycm93cy1hbHQtaFwiXSwgXCJmMzM3XCIsIFwiTTUwNC4zIDI3My42YzQuOS00LjUgNy43LTEwLjkgNy43LTE3LjZzLTIuOC0xMy03LjctMTcuNmwtMTEyLTEwNGMtNy02LjUtMTcuMi04LjItMjUuOS00LjRzLTE0LjQgMTIuNS0xNC40IDIybDAgNTYtMTkyIDAgMC01NmMwLTkuNS01LjctMTguMi0xNC40LTIycy0xOC45LTIuMS0yNS45IDQuNGwtMTEyIDEwNEMyLjggMjQzIDAgMjQ5LjMgMCAyNTZzMi44IDEzIDcuNyAxNy42bDExMiAxMDRjNyA2LjUgMTcuMiA4LjIgMjUuOSA0LjRzMTQuNC0xMi41IDE0LjQtMjJsMC01NiAxOTIgMCAwIDU2YzAgOS41IDUuNyAxOC4yIDE0LjQgMjJzMTguOSAyLjEgMjUuOS00LjRsMTEyLTEwNHpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHRIID0gZmFMZWZ0UmlnaHQ7XG52YXIgZmFCb3hlc1BhY2tpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94ZXMtcGFja2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRjN1wiLCBcIk0yNTYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhINTkyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzODEuM2MxLjgtNSAyLjctMTAuNCAyLjctMTZWMjUzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zVjE3NmMwLTI2LjUtMjEuNS00OC00OC00OEgyNTZWNDh6TTU3MS4zIDM0Ny4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTY0IDY0Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDgwIDMxMC42VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMxMC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHpNMCAxNzZjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE2Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0zNTIgODBWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZIMzUyek0xNDQgMzIwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE0NHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1sZWZ0XCJdLCBcImYwYThcIiwgXCJNNTEyIDI1NkEyNTYgMjU2IDAgMSAwIDAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDB6TTIzMSAxMjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03MSA3MUwzNzYgMjMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xODIuMSAwIDcxIDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTE5IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMjMxIDEyN3pcIl1cbn07XG52YXIgZmFBcnJvd0NpcmNsZUxlZnQgPSBmYUNpcmNsZUFycm93TGVmdDtcbnZhciBmYUdyb3VwQXJyb3dzUm90YXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyb3VwLWFycm93cy1yb3RhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZjZcIiwgXCJNMjAxLjEgNzEuOWMxNi45LTUgMjYuNi0yMi45IDIxLjUtMzkuOHMtMjIuOS0yNi42LTM5LjgtMjEuNWMtMjEuNSA2LjQtNDEuOCAxNS41LTYwLjYgMjdDMTE0LjMgMzQgMTA1LjQgMzIgOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2YzAgOS40IDIgMTguMyA1LjYgMjYuM2MtMTEuNSAxOC43LTIwLjYgMzktMjcgNjAuNmMtNSAxNi45IDQuNiAzNC44IDIxLjUgMzkuOHMzNC44LTQuNiAzOS44LTIxLjVjNC4zLTE0LjYgMTAuNC0yOC41IDE3LjktNDEuNGMyIC4yIDQuMSAuMyA2LjEgLjNjMzUuMyAwIDY0LTI4LjcgNjQtNjRjMC0yLjEtLjEtNC4xLS4zLTYuMWMxMi45LTcuNSAyNi44LTEzLjYgNDEuNC0xNy45em0xMjgtNjEuM2MtMTYuOS01LTM0LjggNC42LTM5LjggMjEuNXM0LjYgMzQuOCAyMS41IDM5LjhjMTQuNiA0LjMgMjguNSAxMC40IDQxLjQgMTcuOWMtLjIgMi0uMyA0LjEtLjMgNi4xYzAgMzUuMyAyOC43IDY0IDY0IDY0YzIuMSAwIDQuMS0uMSA2LjItLjNjNy41IDEyLjkgMTMuNiAyNi44IDE3LjkgNDEuNGM1IDE2LjkgMjIuOSAyNi42IDM5LjggMjEuNXMyNi42LTIyLjkgMjEuNS0zOS44Yy02LjQtMjEuNS0xNS41LTQxLjgtMjctNjAuNmMzLjYtOCA1LjYtMTYuOSA1LjYtMjYuM2MwLTM1LjMtMjguNy02NC02NC02NGMtOS40IDAtMTguMyAyLTI2LjMgNS42Yy0xOC43LTExLjUtMzktMjAuNi02MC42LTI3ek03MS45IDMxMC45Yy01LTE2LjktMjIuOS0yNi42LTM5LjgtMjEuNXMtMjYuNiAyMi45LTIxLjUgMzkuOGM2LjQgMjEuNSAxNS41IDQxLjggMjcgNjAuNkMzNCAzOTcuNyAzMiA0MDYuNiAzMiA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRjOS40IDAgMTguMy0yIDI2LjMtNS42YzE4LjcgMTEuNSAzOSAyMC42IDYwLjYgMjdjMTYuOSA1IDM0LjgtNC42IDM5LjgtMjEuNXMtNC42LTM0LjgtMjEuNS0zOS44Yy0xNC42LTQuMy0yOC41LTEwLjQtNDEuNC0xNy45Yy4yLTIgLjMtNC4xIC4zLTYuMmMwLTM1LjMtMjguNy02NC02NC02NGMtMi4xIDAtNC4xIC4xLTYuMiAuM2MtNy41LTEyLjktMTMuNi0yNi44LTE3LjktNDEuNHptNDI5LjQgMTguM2M1LTE2LjktNC42LTM0LjgtMjEuNS0zOS44cy0zNC44IDQuNi0zOS44IDIxLjVjLTQuMyAxNC42LTEwLjQgMjguNS0xNy45IDQxLjRjLTItLjItNC4xLS4zLTYuMi0uM2MtMzUuMyAwLTY0IDI4LjctNjQgNjRjMCAyLjEgLjEgNC4xIC4zIDYuMmMtMTIuOSA3LjUtMjYuOCAxMy42LTQxLjQgMTcuOWMtMTYuOSA1LTI2LjYgMjIuOS0yMS41IDM5LjhzMjIuOSAyNi42IDM5LjggMjEuNWMyMS41LTYuNCA0MS44LTE1LjUgNjAuNi0yN2M4IDMuNiAxNi45IDUuNiAyNi4zIDUuNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTkuNC0yLTE4LjMtNS42LTI2LjNjMTEuNS0xOC43IDIwLjYtMzkgMjctNjAuNnpNMTkyLjggMjU2LjhjMC0xNS42IDUuNi0yOS45IDE0LjktNDEuMUwyMjMgMjMxYzYuNiA2LjYgMTcuOCAxLjkgMTcuOC03LjRWMTYzLjJjMC01LjctNC43LTEwLjQtMTAuNC0xMC40SDE2OS45Yy05LjMgMC0xMy45IDExLjItNy40IDE3LjhsMTEuMiAxMS4yYy0xNy45IDE5LjgtMjguOSA0Ni4yLTI4LjkgNzUuMWMwIDQzLjYgMjQuOSA4MS4zIDYxLjEgOTkuOGMxMS44IDYgMjYuMyAxLjQgMzIuMy0xMC40czEuNC0yNi4zLTEwLjQtMzIuM2MtMjAuOC0xMC42LTM0LjktMzIuMi0zNC45LTU3em05My4xLTU4LjZjMjAuOCAxMC42IDM0LjkgMzIuMiAzNC45IDU3YzAgMTUuNi01LjYgMjkuOS0xNC45IDQxLjFMMjkwLjYgMjgxYy02LjYtNi42LTE3LjgtMS45LTE3LjggNy40djYwLjVjMCA1LjcgNC43IDEwLjQgMTAuNCAxMC40aDYwLjVjOS4zIDAgMTMuOS0xMS4yIDcuNC0xNy44bC0xMS4yLTExLjJjMTcuOS0xOS44IDI4LjktNDYuMiAyOC45LTc1LjFjMC00My42LTI0LjktODEuMy02MS4xLTk5LjhjLTExLjgtNi0yNi4zLTEuNC0zMi4zIDEwLjRzLTEuNCAyNi4zIDEwLjQgMzIuM3pcIl1cbn07XG52YXIgZmFCb3dsRm9vZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsLWZvb2QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YzZcIiwgXCJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRjLjUgMCAxLjEgMCAxLjYgMEM3MyA5MS41IDEwNS4zIDY0IDE0NCA2NGMxNSAwIDI5IDQuMSA0MC45IDExLjJDMTk4LjIgNDkuNiAyMjUuMSAzMiAyNTYgMzJzNTcuOCAxNy42IDcxLjEgNDMuMkMzMzkgNjguMSAzNTMgNjQgMzY4IDY0YzM4LjcgMCA3MSAyNy41IDc4LjQgNjRjLjUgMCAxLjEgMCAxLjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGMwIDExLjctMy4xIDIyLjYtOC42IDMySDguNkMzLjEgMjE0LjYgMCAyMDMuNyAwIDE5MnptMCA5MS40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZINDg0LjZjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjRjMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOEgxNDAuMmMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6XCJdXG59O1xudmFyIGZhQ2FuZHlDYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbmR5LWNhbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ODZcIiwgXCJNMzQ4LjggMTMxLjVjMy43LTIuMyA3LjktMy41IDEyLjItMy41YzEyLjcgMCAyMyAxMC4zIDIzIDIzdjUuNmMwIDkuOS01LjEgMTkuMS0xMy41IDI0LjNMMzAuMSAzOTMuN0MuMSA0MTIuNS05IDQ1MS45IDkuNyA0ODEuOXM1OC4yIDM5LjEgODguMiAyMC40TDQzOC40IDI4OS41YzQ1LjgtMjguNiA3My42LTc4LjggNzMuNi0xMzIuOFYxNTFDNTEyIDY3LjYgNDQ0LjQgMCAzNjEgMGMtMjguMyAwLTU2IDgtODAuMSAyM0wyNTQuMSAzOS43Yy0zMCAxOC43LTM5LjEgNTguMi0yMC40IDg4LjJzNTguMiAzOS4xIDg4LjIgMjAuNGwyNi44LTE2Ljh6TTI5OC40IDQ5LjhjOS4yLTUuNyAxOS4xLTEwLjEgMjkuNC0xMy4xTDM0OCA5Ny41Yy01LjcgMS40LTExLjIgMy43LTE2LjMgNi44bC0xMi42IDcuOUwyOTguNCA0OS44em04OC41IDUyLjdsNDYuMi00Ni4yYzguNSA2LjUgMTYuMSAxNC4xIDIyLjYgMjIuNmwtNDYuMiA0Ni4yYy01LjEtOS42LTEzLTE3LjUtMjIuNi0yMi42em0yOC45IDU5LjNsNjEuNiAyMC41Yy0yLjIgMTAuNS01LjggMjAuNy0xMC41IDMwLjJsLTYyLTIwLjdjNi4yLTguOCAxMC4xLTE5LjEgMTEtMzAuMXptLTg2LjEgODIuNWw2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6bS0xMDcuMiA2N2w2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6TTExOS4zIDM3NS43bDYwLjQgMzcuNy0zMC4yIDE4LjlMODkuMSAzOTQuNmwzMC4yLTE4Ljl6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duV2lkZVNob3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24td2lkZS1zaG9ydCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbW91bnQtYXNjXCIsIFwic29ydC1hbW91bnQtZG93blwiXSwgXCJmMTYwXCIsIFwiTTE1MS42IDQ2OS42QzE0NS41IDQ3Ni4yIDEzNyA0ODAgMTI4IDQ4MHMtMTcuNS0zLjgtMjMuNi0xMC40bC04OC05NmMtMTEuOS0xMy0xMS4xLTMzLjMgMi00NS4yczMzLjMtMTEuMSA0NS4yIDJMOTYgMzY1LjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNjUuN2wzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwelwiXVxufTtcbnZhciBmYVNvcnRBbW91bnRBc2MgPSBmYUFycm93RG93bldpZGVTaG9ydDtcbnZhciBmYVNvcnRBbW91bnREb3duID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7XG52YXIgZmFDbG91ZEJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYm9sdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc4NSwgXCJ0aHVuZGVyc3Rvcm1cIl0sIFwiZjc2Y1wiLCBcIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2aDQ3LjJMMjkwIDIwMi41YzE3LjYtMTQuMSA0Mi42LTE0IDYwLjIgLjJzMjIuOCAzOC42IDEyLjggNTguOEwzMzMuNyAzMjBIMzUyaDY0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwYzEuMS01LjIgMS42LTEwLjUgMS42LTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjhDMjU2LjUgMjQuMyAyMTkuMSAwIDE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJjMCA3LjEgLjcgMTQuMSAxLjkgMjAuOEMyNy42IDE0NS40IDAgMTgxLjUgMCAyMjR6bTMzMC4xIDMuNmMtNS44LTQuNy0xNC4yLTQuNy0yMC4xLS4xbC0xNjAgMTI4Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44czguMyAxMC43IDE1LjEgMTAuN2g3MC4xTDE3Ny43IDQ4OC44Yy0zLjQgNi43LTEuNiAxNC45IDQuMyAxOS42czE0LjIgNC43IDIwLjEgLjFsMTYwLTEyOGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44cy04LjMtMTAuNy0xNS4xLTEwLjdIMjgxLjlsNTIuNC0xMDQuOGMzLjQtNi43IDEuNi0xNC45LTQuMi0xOS42elwiXVxufTtcbnZhciBmYVRodW5kZXJzdG9ybSA9IGZhQ2xvdWRCb2x0O1xudmFyIGZhVGV4dFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInJlbW92ZS1mb3JtYXRcIl0sIFwiZjg3ZFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM1NS43IDI1My41IDQwMC4yIDk2SDUwM0w0OTcgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NzcuNiA2MS4zIDU1NC43IDMyIDUyMy41IDMySDM3Ni4xaC0uM0gyMDQuNWMtMjIgMC00MS4yIDE1LTQ2LjYgMzYuNGwtNi4zIDI1LjJMMzguOCA1LjF6bTE2OCAxMzEuN2MuMS0uMyAuMi0uNyAuMy0xTDIxNyA5NkgzMzMuN0wzMDEuMyAyMTAuOGwtOTQuNS03NC4xek0zMjcuMyAzNTMuOUwyNzIuOSAzMTEgMjQzLjMgNDE2SDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzA5LjhsMTcuNi02Mi4xelwiXVxufTtcbnZhciBmYVJlbW92ZUZvcm1hdCA9IGZhVGV4dFNsYXNoO1xudmFyIGZhRmFjZVNtaWxlV2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXNtaWxlLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjEsIFwic21pbGUtd2lua1wiXSwgXCJmNGRhXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuMSAzMjUuNUMxODIgMzQ2LjIgMjEyLjYgMzY4IDI1NiAzNjhzNzQtMjEuOCA5MS45LTQyLjVjNS44LTYuNyAxNS45LTcuNCAyMi42LTEuNnM3LjQgMTUuOSAxLjYgMjIuNkMzNDkuOCAzNzIuMSAzMTEuMSA0MDAgMjU2IDQwMHMtOTMuOC0yNy45LTExNi4xLTUzLjVjLTUuOC02LjctNS4xLTE2LjggMS42LTIyLjZzMTYuOC01LjEgMjIuNiAxLjZ6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNTYuNCAyNS42Yy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwelwiXVxufTtcbnZhciBmYVNtaWxlV2luayA9IGZhRmFjZVNtaWxlV2luaztcbnZhciBmYUZpbGVXb3JkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtd29yZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjMlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTExMSAyNTcuMWwyNi44IDg5LjIgMzEuNi05MC4zYzMuNC05LjYgMTIuNS0xNi4xIDIyLjctMTYuMXMxOS4zIDYuNCAyMi43IDE2LjFsMzEuNiA5MC4zTDI3MyAyNTcuMWMzLjgtMTIuNyAxNy4yLTE5LjkgMjkuOS0xNi4xczE5LjkgMTcuMiAxNi4xIDI5LjlsLTQ4IDE2MGMtMyAxMC0xMiAxNi45LTIyLjQgMTcuMXMtMTkuOC02LjItMjMuMi0xNi4xTDE5MiAzMzYuNmwtMzMuMyA5NS4zYy0zLjQgOS44LTEyLjggMTYuMy0yMy4yIDE2LjFzLTE5LjUtNy4xLTIyLjQtMTcuMWwtNDgtMTYwYy0zLjgtMTIuNyAzLjQtMjYuMSAxNi4xLTI5LjlzMjYuMSAzLjQgMjkuOSAxNi4xelwiXVxufTtcbnZhciBmYUZpbGVQb3dlcnBvaW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcG93ZXJwb2ludCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjNFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEzNiAyNDBoNjhjNDIgMCA3NiAzNCA3NiA3NnMtMzQgNzYtNzYgNzZIMTYwdjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM2OCAyNjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTY4IDEwNGMxNS41IDAgMjgtMTIuNSAyOC0yOHMtMTIuNS0yOC0yOC0yOEgxNjB2NTZoNDR6XCJdXG59O1xudmFyIGZhQXJyb3dzTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvd3MtaFwiXSwgXCJmMDdlXCIsIFwiTTQwNi42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjI0bC0yOTMuNSAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4bDI5My41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUFycm93c0ggPSBmYUFycm93c0xlZnRSaWdodDtcbnZhciBmYUhvdXNlTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEwXCIsIFwiTTM4NCA0ODBjMCAxMS43IDMuMSAyMi42IDguNiAzMkgzOTJjLTIyLjEgMC00MC0xNy45LTQwLTQwVjQ0OCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MEgxNjAgMTI4LjFjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMkgxMDRjLTIyLjEgMC00MC0xNy45LTQwLTQwVjM2MGMwLS45IDAtMS45IC4xLTIuOFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNDkwLjcgMTY2LjNDNDQ3LjIgMTgxLjcgNDE2IDIyMy4yIDQxNiAyNzJ2MjQuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNFY0ODB6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFDbG91ZEFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbNjIzMzcsIFwiY2xvdWQtZG93bmxvYWRcIiwgXCJjbG91ZC1kb3dubG9hZC1hbHRcIl0sIFwiZjBlZFwiLCBcIk0xNDQgNDgwQzY0LjUgNDgwIDAgNDE1LjUgMCAzMzZjMC02Mi44IDQwLjItMTE2LjIgOTYuMi0xMzUuOWMtLjEtMi43LS4yLTUuNC0uMi04LjFjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBjNTkuMyAwIDExMSAzMi4yIDEzOC43IDgwLjJDNDA5LjkgMTAyIDQyOC4zIDk2IDQ0OCA5NmM1MyAwIDk2IDQzIDk2IDk2YzAgMTIuMi0yLjMgMjMuOC02LjQgMzQuNkM1OTYgMjM4LjQgNjQwIDI5MC4xIDY0MCAzNTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhIMTQ0em03OS0xNjdsODAgODBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzkgMzlWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjMxOC4xbC0zOS0zOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG52YXIgZmFDbG91ZERvd25sb2FkID0gZmFDbG91ZEFycm93RG93bjtcbnZhciBmYUNsb3VkRG93bmxvYWRBbHQgPSBmYUNsb3VkQXJyb3dEb3duO1xudmFyIGZhQ2hpbGRyZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGRyZW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZTFcIiwgXCJNMTYwIDBhNjQgNjQgMCAxIDEgMCAxMjhBNjQgNjQgMCAxIDEgMTYwIDB6TTg4IDQ4MFY0MDBINzAuMmMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsMzEuMS05My40TDU3LjUgMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJzLTE2LjgtMzAuNy02LjItNDQuOEw2NS40IDIwN2MyMi40LTI5LjYgNTcuNS00NyA5NC42LTQ3czcyLjIgMTcuNCA5NC42IDQ3bDU4LjkgNzcuN2MxMC43IDE0LjEgNy45IDM0LjItNi4yIDQ0LjhzLTM0LjIgNy45LTQ0LjgtNi4ybC0yOC42LTM3LjhMMjY1IDM3OC45YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMUgyMzJ2ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDAwSDE1MnY4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNNDgwIDBhNjQgNjQgMCAxIDEgMCAxMjhBNjQgNjQgMCAxIDEgNDgwIDB6bS04IDM4NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMDAuNUwzOTUuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45aDEyLjNjMzMgMCA2My43IDE2LjkgODEuMiA0NC45TDYxOS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEw1NTIgMzAwLjVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEg0NzJ6XCJdXG59O1xudmFyIGZhQ2hhbGtib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFsa2JvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJibGFja2JvYXJkXCJdLCBcImY1MWJcIiwgXCJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2VjM4NEg5NlY5NmwzODQgMFYzODRoNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIyNCAzODR2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQxNlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG52YXIgZmFCbGFja2JvYXJkID0gZmFDaGFsa2JvYXJkO1xudmFyIGZhVXNlckxhcmdlU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sYXJnZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci1hbHQtc2xhc2hcIl0sIFwiZjRmYVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM4MS45IDI3NGM0OC41LTIzLjIgODIuMS03Mi43IDgyLjEtMTMwQzQ2NCA2NC41IDM5OS41IDAgMzIwIDBDMjUwLjQgMCAxOTIuNCA0OS4zIDE3OC45IDExNC45TDM4LjggNS4xek01NDUuNSA1MTJINTI4TDI4NC4zIDMyMGgtNTlDMTM2LjIgMzIwIDY0IDM5Mi4yIDY0IDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN0g1NDUuM2wuMyAwelwiXVxufTtcbnZhciBmYVVzZXJBbHRTbGFzaCA9IGZhVXNlckxhcmdlU2xhc2g7XG52YXIgZmFFbnZlbG9wZU9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZW52ZWxvcGUtb3BlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgXCJmMmI2XCIsIFwiTTY0IDIwOC4xTDI1NiA2NS45IDQ0OCAyMDguMXY0Ny40TDI4OS41IDM3M2MtOS43IDcuMi0yMS40IDExLTMzLjUgMTFzLTIzLjgtMy45LTMzLjUtMTFMNjQgMjU1LjVWMjA4LjF6TTI1NiAwYy0xMi4xIDAtMjMuOCAzLjktMzMuNSAxMUwyNS45IDE1Ni43QzkuNiAxNjguOCAwIDE4Ny44IDAgMjA4LjFWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYyMDguMWMwLTIwLjMtOS42LTM5LjQtMjUuOS01MS40TDI4OS41IDExQzI3OS44IDMuOSAyNjguMSAwIDI1NiAwelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1zaW1wbGUtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImhhbmRzaGFrZS1hbHQtc2xhc2hcIl0sIFwiZTA1ZlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS4zLTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTUwLjIgMzUySDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhINTE2aC00LS43bC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMmwtODkuNyA3Mi42LTI1LjgtMjAuMyA4MS44LTY2LjJjLTExLjYtNC45LTI0LjEtNy40LTM2LjgtNy40QzIzNCA2NCAyMTUuNyA2OS42IDIwMCA4MGwtMzUuNSAyMy43TDM4LjggNS4xek00MTMuNiA0MjEuOUw0MS4yIDEyOC41QzE3LjkgMTMxLjggMCAxNTEuOCAwIDE3NlYzMDRjMCAyNi41IDIxLjUgNDggNDggNDhIMTU2LjJsOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45Yy44LS44IDEuNS0xLjcgMi4yLTIuNnpcIl1cbn07XG52YXIgZmFIYW5kc2hha2VBbHRTbGFzaCA9IGZhSGFuZHNoYWtlU2ltcGxlU2xhc2g7XG52YXIgZmFNYXR0cmVzc1BpbGxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXR0cmVzcy1waWxsb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjVcIiwgXCJNMjU2IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNTZWNjR6bTMyIDM4NEg1NzZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4OFY0NDh6TTY0IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE2MHpcIl1cbn07XG52YXIgZmFHdWFyYW5pU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndWFyYW5pLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxOWFcIiwgXCJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjY2LjdDNjkuMiA4MS45IDAgMTYwLjkgMCAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ1LjNjOTAuOC0xNS4yIDE2MC05NC4yIDE2MC0xODkuM2MwLTE3LjctMTQuMy0zMi0zMi0zMkgyMjRWMTMyYzIyLjEgNS43IDQxLjggMTcuMSA1Ny42IDMyLjZjMTIuNiAxMi40IDMyLjkgMTIuMiA0NS4zLS40czEyLjItMzIuOS0uNS00NS4zQzI5OSA5MiAyNjMuNSA3My4zIDIyNCA2Ni43VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjAgMTMyVjM4MGMtNTUuMi0xNC4yLTk2LTY0LjMtOTYtMTI0czQwLjgtMTA5LjggOTYtMTI0ek0yMjQgMzgwVjI4OGg5MmMtMTEuNiA0NS00NyA4MC40LTkyIDkyelwiXVxufTtcbnZhciBmYUFycm93c1JvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3Mtcm90YXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcyLCBcInJlZnJlc2hcIiwgXCJzeW5jXCJdLCBcImYwMjFcIiwgXCJNMTA1LjEgMjAyLjZjNy43LTIxLjggMjAuMi00Mi4zIDM3LjgtNTkuOGM2Mi41LTYyLjUgMTYzLjgtNjIuNSAyMjYuMyAwTDM4Ni4zIDE2MEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDYzLjVjMCAwIDAgMCAwIDBoLjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2MzUuMkw0MTQuNCA5Ny42Yy04Ny41LTg3LjUtMjI5LjMtODcuNS0zMTYuOCAwQzczLjIgMTIyIDU1LjYgMTUwLjcgNDQuOCAxODEuNGMtNS45IDE2LjcgMi45IDM0LjkgMTkuNSA0MC44czM0LjktMi45IDQwLjgtMTkuNXpNMzkgMjg5LjNjLTUgMS41LTkuOCA0LjItMTMuNyA4LjJjLTQgNC02LjcgOC44LTguMSAxNGMtLjMgMS4yLS42IDIuNS0uOCAzLjhjLS4zIDEuNy0uNCAzLjQtLjQgNS4xVjQzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM5Ni45bDE3LjYgMTcuNSAwIDBjODcuNSA4Ny40IDIyOS4zIDg3LjQgMzE2LjcgMGMyNC40LTI0LjQgNDIuMS01My4xIDUyLjktODMuN2M1LjktMTYuNy0yLjktMzQuOS0xOS41LTQwLjhzLTM0LjkgMi45LTQwLjggMTkuNWMtNy43IDIxLjgtMjAuMiA0Mi4zLTM3LjggNTkuOGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMGwtLjEtLjFMMTI1LjYgMzUySDE2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0OC40Yy0xLjYgMC0zLjIgLjEtNC44IC4zcy0zLjEgLjUtNC42IDF6XCJdXG59O1xudmFyIGZhUmVmcmVzaCA9IGZhQXJyb3dzUm90YXRlO1xudmFyIGZhU3luYyA9IGZhQXJyb3dzUm90YXRlO1xudmFyIGZhRmlyZUV4dGluZ3Vpc2hlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaXJlLWV4dGluZ3Vpc2hlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxOV0sIFwiZjEzNFwiLCBcIk01MDAuMyA3LjNDNTA3LjcgMTMuMyA1MTIgMjIuNCA1MTIgMzJ2OTZjMCA5LjYtNC4zIDE4LjctMTEuNyAyNC43cy0xNy4yIDguNS0yNi42IDYuNmwtMTYwLTMyQzMwMS41IDEyNC45IDI5MiAxMTUuNyAyODkgMTA0SDIyNHYzNC44YzM3LjggMTggNjQgNTYuNSA2NCAxMDEuMlYzODRINjRWMjQwYzAtNDQuNyAyNi4yLTgzLjIgNjQtMTAxLjJWMTEwYy0zNi4yIDExLjEtNjYgMzYuOS04Mi4zIDcwLjVjLTUuOCAxMS45LTIwLjIgMTYuOS0zMi4xIDExLjFTLTMuMyAxNzEuNCAyLjUgMTU5LjVDMjYuNyAxMDkuOCA3Mi43IDcyLjYgMTI4IDYwLjRWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNTZoNjVjMy0xMS43IDEyLjUtMjAuOSAyNC43LTIzLjRsMTYwLTMyYzkuNC0xLjkgMTkuMSAuNiAyNi42IDYuNnpNMjg4IDQxNnYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNkgyODh6TTE3NiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhQ3J1emVpcm9TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NydXplaXJvLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxNTJcIiwgXCJNOTYgMjU2YzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzQxIDAgNzguMyAxNS40IDEwNi43IDQwLjdjMTMuMiAxMS44IDMzLjQgMTAuNyA0NS4yLTIuNXMxMC43LTMzLjQtMi41LTQ1LjJjLTM5LjYtMzUuNS05Mi01Ny0xNDkuMy01N0MxMzIuMyAzMiAzMiAxMzIuMyAzMiAyNTZzMTAwLjMgMjI0IDIyNCAyMjRjNTcuNCAwIDEwOS43LTIxLjYgMTQ5LjMtNTdjMTMuMi0xMS44IDE0LjMtMzIgMi41LTQ1LjJzLTMyLTE0LjMtNDUuMi0yLjVDMzM0LjMgNDAwLjYgMjk3IDQxNiAyNTYgNDE2VjMyMHYtOC43YzAtMTIuOCAxMC40LTIzLjMgMjMuMy0yMy4zYzQuNiAwIDkuMSAxLjQgMTIuOSAzLjlsMTAuMSA2LjdjMTQuNyA5LjggMzQuNiA1LjggNDQuNC04LjlzNS44LTM0LjYtOC45LTQ0LjRsLTEwLjEtNi43Yy0xNC4zLTkuNi0zMS4yLTE0LjctNDguNC0xNC43Yy0xMi40IDAtMjQuMiAyLjYtMzQuOSA3LjNjLTUuNS00LjUtMTIuNi03LjMtMjAuMy03LjNjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjU1LjNWMzIwdjgyLjdDMTM1LjUgMzc4IDk2IDMyMS42IDk2IDI1NnpcIl1cbn07XG52YXIgZmFHcmVhdGVyVGhhbkVxdWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyZWF0ZXItdGhhbi1lcXVhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUzMlwiLCBcIk01Mi4xIDkzLjdDMzUuNyA4Ny4xIDI3LjcgNjguNSAzNC4zIDUyLjFzMjUuMi0yNC40IDQxLjYtMTcuOGwzMjAgMTI4QzQwOCAxNjcuMSA0MTYgMTc4LjkgNDE2IDE5MnMtOCAyNC45LTIwLjEgMjkuN2wtMzIwIDEyOGMtMTYuNCA2LjYtMzUtMS40LTQxLjYtMTcuOHMxLjQtMzUgMTcuOC00MS42TDI5Ny44IDE5MiA1Mi4xIDkzLjd6TTQxNiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2elwiXVxufTtcbnZhciBmYVNoaWVsZEhhbHZlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtaGFsdmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzaGllbGQtYWx0XCJdLCBcImYzZWRcIiwgXCJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjcgODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjJjLS41IDk5LjItNDEuMyAyODAuNy0yMTMuNiAzNjMuMmMtMTYuNyA4LTM2LjEgOC01Mi44IDBDNTcuMyA0MjAuNyAxNi41IDIzOS4yIDE2IDE0MGMtLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOCAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOFY0NDQuOEMzOTQgMzc4IDQzMS4xIDIzMC4xIDQzMiAxNDEuNEwyNTYgNjYuOGwwIDB6XCJdXG59O1xudmFyIGZhU2hpZWxkQWx0ID0gZmFTaGllbGRIYWx2ZWQ7XG52YXIgZmFCb29rQXRsYXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1hdGxhcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYXRsYXNcIl0sIFwiZjU1OFwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwSDM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0IDk2Yy01MyAwLTk2LTQzLTk2LTk2Vjk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyVjM4NEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTI0Ny40IDI4My44Yy0zLjcgMy43LTYuMiA0LjItNy40IDQuMnMtMy43LS41LTcuNC00LjJjLTMuOC0zLjctOC0xMC0xMS44LTE4LjljLTYuMi0xNC41LTEwLjgtMzQuMy0xMi4yLTU2LjloNjNjLTEuNSAyMi42LTYgNDIuNC0xMi4yIDU2LjljLTMuOCA4LjktOCAxNS4yLTExLjggMTguOXptNDIuNy05LjljNy4zLTE4LjMgMTItNDEuMSAxMy40LTY1LjloMzEuMWMtNC43IDI3LjktMjEuNCA1MS43LTQ0LjUgNjUuOXptMC0xNjMuOGMyMy4yIDE0LjIgMzkuOSAzOCA0NC41IDY1LjlIMzAzLjVjLTEuNC0yNC43LTYuMS00Ny41LTEzLjQtNjUuOXpNMzY4IDE5MmExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwek0xNDUuMyAyMDhoMzEuMWMxLjQgMjQuNyA2LjEgNDcuNSAxMy40IDY1LjljLTIzLjItMTQuMi0zOS45LTM4LTQ0LjUtNjUuOXptMzEuMS0zMkgxNDUuM2M0LjctMjcuOSAyMS40LTUxLjcgNDQuNS02NS45Yy03LjMgMTguMy0xMiA0MS4xLTEzLjQgNjUuOXptNTYuMS03NS44YzMuNy0zLjcgNi4yLTQuMiA3LjQtNC4yczMuNyAuNSA3LjQgNC4yYzMuOCAzLjcgOCAxMCAxMS44IDE4LjljNi4yIDE0LjUgMTAuOCAzNC4zIDEyLjIgNTYuOWgtNjNjMS41LTIyLjYgNi00Mi40IDEyLjItNTYuOWMzLjgtOC45IDgtMTUuMiAxMS44LTE4Ljl6XCJdXG59O1xudmFyIGZhQXRsYXMgPSBmYUJvb2tBdGxhcztcbnZhciBmYVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDc0XCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0My41YzAgNDkuOS02MC4zIDc0LjktOTUuNiAzOS42TDEyMC4yIDc1QzEwNy43IDYyLjUgODcuNSA2Mi41IDc1IDc1cy0xMi41IDMyLjggMCA0NS4zbDguMiA4LjJDMTE4LjQgMTYzLjcgOTMuNCAyMjQgNDMuNSAyMjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDMuNWM0OS45IDAgNzQuOSA2MC4zIDM5LjYgOTUuNkw3NSAzOTEuOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw4LjItOC4yYzM1LjMtMzUuMyA5NS42LTEwLjMgOTUuNiAzOS42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQ2OC41YzAtNDkuOSA2MC4zLTc0LjkgOTUuNi0zOS42bDguMiA4LjJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOC4yLTguMmMtMzUuMy0zNS4zLTEwLjMtOTUuNiAzOS42LTk1LjZINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2OC41Yy00OS45IDAtNzQuOS02MC4zLTM5LjYtOTUuNmw4LjItOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04LjIgOC4yQzM0OC4zIDExOC40IDI4OCA5My40IDI4OCA0My41VjMyek0xNzYgMjI0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhRW52ZWxvcGVDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbnZlbG9wZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZThcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJjMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNEwyMzYuOCAzMTMuNmMxMS40IDguNSAyNyA4LjUgMzguNCAwbDU3LjQtNDNjMjMuOS01OS44IDc5LjctMTAzLjMgMTQ2LjMtMTA5LjhsMTMuOS0xMC40YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTI5NC40IDMzOS4yYy0yMi44IDE3LjEtNTQgMTcuMS03Ni44IDBMMCAxNzZWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM2MC4yQzMzNS4xIDQxNy42IDMyMCAzNzguNSAzMjAgMzM2YzAtNS42IC4zLTExLjEgLjgtMTYuNmwtMjYuNCAxOS44ek02NDAgMzM2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzUzLjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUxheWVyR3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGF5ZXItZ3JvdXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1ZmRcIiwgXCJNMjY0LjUgNS4yYzE0LjktNi45IDMyLjEtNi45IDQ3IDBsMjE4LjYgMTAxYzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSAxNDkuOEMzNy40IDE0NS44IDMyIDEzNy4zIDMyIDEyOHM1LjQtMTcuOSAxMy45LTIxLjhMMjY0LjUgNS4yek00NzYuOSAyMDkuNmw1My4yIDI0LjZjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEw0NS45IDI3Ny44QzM3LjQgMjczLjggMzIgMjY1LjMgMzIgMjU2czUuNC0xNy45IDEzLjktMjEuOGw1My4yLTI0LjYgMTUyIDcwLjJjMjMuNCAxMC44IDUwLjQgMTAuOCA3My44IDBsMTUyLTcwLjJ6bS0xNTIgMTk4LjJsMTUyLTcwLjIgNTMuMiAyNC42YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSA0MDUuOEMzNy40IDQwMS44IDMyIDM5My4zIDMyIDM4NHM1LjQtMTcuOSAxMy45LTIxLjhsNTMuMi0yNC42IDE1MiA3MC4yYzIzLjQgMTAuOCA1MC40IDEwLjggNzMuOCAwelwiXVxufTtcbnZhciBmYUFycm93c1RvRG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1kb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YmVcIiwgXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRoMzJjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlzMTYuNi0xOS44IDI5LjYtMTkuOGgzMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTY5LjQgMzkzLjRsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhIMjg4djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxOTJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45ek0zMiAyMjRINjRWMTkyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZ2MzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ4djMyYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC02NC02NHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhQXJjaHdheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcmNod2F5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTU3XCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2aDY0VjM1MmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2VjQ4MGg2NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYxMjhIMzJWNDE2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGZkXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek01NzYgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MTYgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUhvdXNlQ2hpbW5leUNyYWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNoaW1uZXktY3JhY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhvdXNlLWRhbWFnZVwiXSwgXCJmNmYxXCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zSDMyNi40TDI4OCA0NDhsODAuOC02Ny4zYzcuOC02LjUgNy42LTE4LjYtLjQtMjQuOUwyNTAuNiAyNjMuMmMtMTQuNi0xMS41LTMzLjggNy0yMi44IDIyTDI4OCAzNjhsLTg1LjUgNzEuMmMtNi4xIDUtNy41IDEzLjgtMy41IDIwLjVMMjMwLjQgNTEySDEyOC4xYy0zNS4zIDAtNjQtMjguNy02NC02NFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNDE2IDEwMC43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjE4NWw1Mi44IDQ2LjRjOCA3IDEyIDE1IDExIDI0elwiXVxufTtcbnZhciBmYUhvdXNlRGFtYWdlID0gZmFIb3VzZUNoaW1uZXlDcmFjaztcbnZhciBmYUZpbGVaaXBwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS16aXBwZXInLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpbGUtYXJjaGl2ZVwiXSwgXCJmMWM2XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZ6bS02LjMgNzEuOGMzLjctMTQgMTYuNC0yMy44IDMwLjktMjMuOGgxNC44YzE0LjUgMCAyNy4yIDkuNyAzMC45IDIzLjhsMjMuNSA4OC4yYzEuNCA1LjQgMi4xIDEwLjkgMi4xIDE2LjRjMCAzNS4yLTI4LjggNjMuNy02NCA2My43cy02NC0yOC41LTY0LTYzLjdjMC01LjUgLjctMTEuMSAyLjEtMTYuNGwyMy41LTg4LjJ6TTExMiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTEyelwiXVxufTtcbnZhciBmYUZpbGVBcmNoaXZlID0gZmFGaWxlWmlwcGVyO1xudmFyIGZhU3F1YXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk2MzIsIDk3MjMsIDk3MjQsIDYxNTkwXSwgXCJmMGM4XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6XCJdXG59O1xudmFyIGZhTWFydGluaUdsYXNzRW1wdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1lbXB0eScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZ2xhc3MtbWFydGluaVwiXSwgXCJmMDAwXCIsIFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuM1Y0NDhIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2IDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OFYyNjkuM0w1MDIuNiA1NC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDAgNDgwIDBIMzJ6TTI1NiAyMTAuN0wxMDkuMyA2NEg0MDIuN0wyNTYgMjEwLjd6XCJdXG59O1xudmFyIGZhR2xhc3NNYXJ0aW5pID0gZmFNYXJ0aW5pR2xhc3NFbXB0eTtcbnZhciBmYUNvdWNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvdWNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGI4XCIsIFwiTTY0IDE2MEM2NCA4OS4zIDEyMS4zIDMyIDE5MiAzMkg0NDhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjh2MzMuNmMtMzYuNSA3LjQtNjQgMzkuNy02NCA3OC40djQ4SDEyOFYyNzJjMC0zOC43LTI3LjUtNzEtNjQtNzguNFYxNjB6TTU0NCAyNzJjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zYzUtMS44IDEwLjQtMi43IDE2LTIuN2MyNi41IDAgNDggMjEuNSA0OCA0OFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJINTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMkg5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzUuNiAwIDExIDEgMTYgMi43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3Y0OCAzMmgzMkg1MTJoMzJWMzIwIDI3MnpcIl1cbn07XG52YXIgZmFDZWRpU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjZWRpLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUwZGZcIiwgXCJNMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjY2LjdDMTAxLjIgODEuOSAzMiAxNjAuOSAzMiAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ1LjNjMzAuOS01LjIgNTkuMi0xNy43IDgzLjItMzUuOGMxNC4xLTEwLjYgMTctMzAuNyA2LjQtNDQuOHMtMzAuNy0xNy00NC44LTYuNGMtMTMuMiA5LjktMjguMyAxNy4zLTQ0LjggMjEuNlYxMzJjMTYuNCA0LjIgMzEuNiAxMS42IDQ0LjggMjEuNmMxNC4xIDEwLjYgMzQuMiA3LjggNDQuOC02LjRzNy44LTM0LjItNi40LTQ0LjhjLTI0LTE4LTUyLjQtMzAuNi04My4yLTM1LjhWMzJ6TTE5MiAxMzJWMzgwYy01NS4yLTE0LjItOTYtNjQuMy05Ni0xMjRzNDAuOC0xMDkuOCA5Ni0xMjR6XCJdXG59O1xudmFyIGZhSXRhbGljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2l0YWxpYycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjAzM1wiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI5My4zTDE2MCA0MTZoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIOTAuN0wyMjQgOTZIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFUYWJsZUNlbGxzQ29sdW1uTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscy1jb2x1bW4tbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTY3OFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjUuMWMtMzcuOCA1LjQtNjkuNCAyOS42LTg1LjIgNjIuOUwzNjAgMjI0bDAgNjQgNTYgMCAwIDguNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwtMjQgMCAwIDY0IDI0IDAgMCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIwOCAwbDAgNjQgODggMCAwLTY0LTg4IDB6bTI0MCAwbC04OCAwIDAgNjQgODggMCAwLTY0ek0yMDggMjI0bDAgNjQgODggMCAwLTY0LTg4IDB6bTAgMTI4bDAgNjQgODggMCAwLTY0LTg4IDB6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tODAgMzJjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMC00OHpcIl1cbn07XG52YXIgZmFDaHVyY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2h1cmNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTk2Ml0sIFwiZjUxZFwiLCBcIk0zNDQgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNDhIMjY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMydjQ2LjRMMTgzLjMgMjEwYy0xNC41IDguNy0yMy4zIDI0LjMtMjMuMyA0MS4yVjUxMmg5NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY5Nmg5NlYyNTEuMmMwLTE2LjktOC44LTMyLjUtMjMuMy00MS4yTDM0NCAxNDIuNFY5NmgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNDRWMjR6TTI0LjkgMzMwLjNDOS41IDMzOC44IDAgMzU0LjkgMCAzNzIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoODBWMjczLjZMMjQuOSAzMzAuM3pNNTkyIDUxMmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzIuNGMwLTE3LjUtOS41LTMzLjYtMjQuOS00Mi4xTDUxMiAyNzMuNlY1MTJoODB6XCJdXG59O1xudmFyIGZhQ29tbWVudHNEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudHMtZG9sbGFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNjUzXCIsIFwiTTQxNiAxNzZjMCA5Ny4yLTkzLjEgMTc2LTIwOCAxNzZjLTM4LjIgMC03My45LTguNy0xMDQuNy0yMy45Yy03LjUgNC0xNiA3LjktMjUuMiAxMS40QzU5LjggMzQ2LjQgMzcuOCAzNTIgMTYgMzUyYy02LjkgMC0xMy4xLTQuNS0xNS4yLTExLjFzLjItMTMuOCA1LjgtMTcuOWwwIDAgMCAwIC4yLS4yYy4yLS4yIC42LS40IDEuMS0uOGMxLS44IDIuNS0yIDQuMy0zLjdjMy42LTMuMyA4LjUtOC4xIDEzLjMtMTQuM2M1LjUtNyAxMC43LTE1LjQgMTQuMi0yNC43QzE0LjcgMjUwLjMgMCAyMTQuNiAwIDE3NkMwIDc4LjggOTMuMSAwIDIwOCAwUzQxNiA3OC44IDQxNiAxNzZ6TTIzMS41IDM4M0MzNDguOSAzNzIuOSA0NDggMjg4LjMgNDQ4IDE3NmMwLTUuMi0uMi0xMC40LS42LTE1LjVDNTU1LjEgMTY3LjEgNjQwIDI0My4yIDY0MCAzMzZjMCAzOC42LTE0LjcgNzQuMy0zOS42IDEwMy40YzMuNSA5LjQgOC43IDE3LjcgMTQuMiAyNC43YzQuOCA2LjIgOS43IDExIDEzLjMgMTQuM2MxLjggMS42IDMuMyAyLjkgNC4zIDMuN2MuNSAuNCAuOSAuNyAxLjEgLjhsLjIgLjIgMCAwIDAgMGM1LjYgNC4xIDcuOSAxMS4zIDUuOCAxNy45Yy0yLjEgNi42LTguMyAxMS4xLTE1LjIgMTEuMWMtMjEuOCAwLTQzLjgtNS42LTYyLjEtMTIuNWMtOS4yLTMuNS0xNy44LTcuNC0yNS4yLTExLjRDNTA1LjkgNTAzLjMgNDcwLjIgNTEyIDQzMiA1MTJjLTk1LjYgMC0xNzYuMi01NC42LTIwMC41LTEyOXpNMjI4IDcyYzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMFY4NmMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjI4MGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyNjYuMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjcyelwiXVxufTtcbnZhciBmYURlbW9jcmF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RlbW9jcmF0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzQ3XCIsIFwiTTY0IDMyYzAtOC45IDMuOC0yMC45IDYuMi0yNy4zQzcxLjIgMS44IDc0IDAgNzcgMGMxLjkgMCAzLjggLjcgNS4yIDIuMUwxMjggNDUuNyAxNzMuOCAyLjFDMTc1LjIgLjcgMTc3LjEgMCAxNzkgMGMzIDAgNS44IDEuOCA2LjggNC43YzIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjNjMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOEg0ODBsMzIgMGM0MC4zIDAgNzguMiAxOSAxMDIuNCA1MS4ybDE5LjIgMjUuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40bC0xOS4yLTI1LjZjLTUuMy03LTExLjgtMTIuOC0xOS4yLTE3VjMyMEgxOTJsLTQwLjQtOTQuM2MtMy45LTkuMi0xNS4zLTEyLjYtMjMuNi03bC00Mi4xIDI4Yy05LjEgNi4xLTE5LjcgOS4zLTMwLjcgOS4zaC0yQzIzLjkgMjU2IDAgMjMyLjEgMCAyMDIuN2MwLTEyLjEgNC4xLTIzLjggMTEuNy0zMy4zTDg3LjYgNzQuNkM3OC4xIDY3LjQgNjQgNTMuMiA2NCAzMnpNNDQ4IDM1Mmg5NnY2NCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNkgyODh2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTYgMzUyaDk2SDQ0OHpNMjYwLjkgMjEwLjljLS45LTEuOC0yLjgtMi45LTQuOC0yLjlzLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS4zLTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjV6TTM2OC4xIDIwOGMtMiAwLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS40LTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjVjLS45LTEuOC0yLjgtMi45LTQuOC0yLjl6bTExNi44IDIuOWMtLjktMS44LTIuOC0yLjktNC44LTIuOXMtMy45IDEuMS00LjggMi45bC0xMC41IDIwLjUtMjMuNSAzLjNjLTIgLjMtMy43IDEuNi00LjMgMy41cy0uMSAzLjkgMS4zIDUuM2wxNyAxNi00IDIyLjZjLS4zIDEuOSAuNSAzLjkgMi4xIDVzMy44IDEuMyA1LjYgLjRsMjEtMTAuNyAyMSAxMC43YzEuOCAuOSA0IC44IDUuNi0uNHMyLjUtMy4xIDIuMS01bC00LTIyLjYgMTctMTZjMS41LTEuNCAyLTMuNCAxLjQtNS4zcy0yLjMtMy4yLTQuMy0zLjVsLTIzLjUtMy4zLTEwLjUtMjAuNXpcIl1cbn07XG52YXIgZmFaID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3onLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjJdLCBcIjVhXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIMzUyYzEyLjQgMCAyMy43IDcuMiAyOSAxOC40czMuNiAyNC41LTQuNCAzNC4xTDEwMC4zIDQxNkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYVBlcnNvblNraWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc2tpaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTk3NSwgXCJza2lpbmdcIl0sIFwiZjdjOVwiLCBcIk0zODAuNyA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0yLjcgMjY4LjljNi4xLTExLjggMjAuNi0xNi4zIDMyLjQtMTAuMkwyMzIuNyAzNjEuM2w0Ni4yLTY5LjItNzUuMS03NS4xYy0xNC42LTE0LjYtMjAuNC0zMy45LTE4LjQtNTIuMWwxMDguOCA1MiAzOS4zIDM5LjNjMTYuMiAxNi4yIDE4LjcgNDEuNSA2IDYwLjZMMjg5LjggMzkxbDEyOC43IDY2LjhjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzAxLjNDMS4yIDI5NS4yLTMuNCAyODAuNyAyLjcgMjY4Ljl6TTExOC45IDY1LjZMMTM3IDc0LjJsOC43LTE3LjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtOC41IDE2LjkgNTQuNyAyNi4yYzEuNS0uNyAzLjEtMS40IDQuNy0yLjFsODMuNC0zMy40YzM0LjItMTMuNyA3Mi44IDQuMiA4NC41IDM5LjJsMTcuMSA1MS4yIDUyLjEgMjYuMWMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zbC01OC4xLTI5Yy0xMS40LTUuNy0yMC0xNS43LTI0LjEtMjcuOGwtNS44LTE3LjMtMjcuMyAxMi4xLTYuOCAzLTYuNy0zLjJMMTUxLjUgMTE2LjdsLTkuMiAxOC40Yy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE4LTE3LjYtOC40Yy04LTMuOC0xMS4zLTEzLjQtNy41LTIxLjNzMTMuNC0xMS4zIDIxLjMtNy41elwiXVxufTtcbnZhciBmYVNraWluZyA9IGZhUGVyc29uU2tpaW5nO1xudmFyIGZhUm9hZExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY3XCIsIFwiTTI4OCAzMkgyMTMuMmMtMjcuMSAwLTUxLjMgMTcuMS02MC4zIDQyLjZMMzUuMSA0MDcuMmMtMi4xIDUuOS0zLjEgMTItMy4xIDE4LjJDMzIgNDU1LjUgNTYuNSA0ODAgODYuNiA0ODBIMjg4VjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0aDMyVjM1MmMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRWMjcyYzAtNTguMyA0NC42LTEwNi4yIDEwMS41LTExMS41TDQ4Ny4xIDc0LjZDNDc4IDQ5LjEgNDUzLjkgMzIgNDI2LjggMzJIMzUyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyem02NCAxOTJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFBID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2EnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5N10sIFwiNDFcIiwgXCJNMjIxLjUgNTEuN0MyMTYuNiAzOS44IDIwNC45IDMyIDE5MiAzMnMtMjQuNiA3LjgtMjkuNSAxOS43bC0xMjAgMjg4LTQwIDk2Yy02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4yTDkzLjMgMzg0SDI5MC43bDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOGwtNDAtOTYtMTIwLTI4OHpNMjY0IDMyMEgxMjBsNzItMTcyLjhMMjY0IDMyMHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS1kb3duXCJdLCBcImUwM2ZcIiwgXCJNMTI4IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4VjI3Ni41YzAgMTcuMyA3LjEgMzEuOSAxNS4zIDQyLjVDMjQ5LjggMzMyLjYgMjU2IDM0OS41IDI1NiAzNjhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0xOC41IDYuMi0zNS40IDE2LjctNDguOWM4LjItMTAuNiAxNS4zLTI1LjIgMTUuMy00Mi41VjExMnpNMTc2IDBDMTE0LjEgMCA2NCA1MC4xIDY0IDExMlYyNzYuNGMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEM0My4yIDMwNC4yIDMyIDMzNC44IDMyIDM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0YzAtMzMuMi0xMS4yLTYzLjgtMzAuMS04OC4xYy0uOS0xLjItMS41LTIuMi0xLjctMi44Yy0uMS0uMy0uMi0uNS0uMi0uNlYxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMHptMCA0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zVjI3MmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY1MC43Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjNjMCAyNi41IDIxLjUgNDggNDggNDh6bTMzNi02NEg0ODBWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzUySDM4NGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjNiA2IDE0LjEgOS40IDIyLjYgOS40czE2LjYtMy40IDIyLjYtOS40bDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44elwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlRG93biA9IGZhVGVtcGVyYXR1cmVBcnJvd0Rvd247XG52YXIgZmFGZWF0aGVyUG9pbnRlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZWF0aGVyLXBvaW50ZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImZlYXRoZXItYWx0XCJdLCBcImY1NmJcIiwgXCJNMjc4LjUgMjE1LjZMMjMgNDcxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzQuOC03NC44YzcuNCA0LjYgMTUuMyA4LjIgMjMuOCAxMC41QzIwMC4zIDQ1Mi44IDI3MCA0NTQuNSAzMzggNDA5LjRjMTIuMi04LjEgNS44LTI1LjQtOC44LTI1LjRsLTE2LjEgMGMtNS4xIDAtOS4yLTQuMS05LjItOS4yYzAtNC4xIDIuNy03LjYgNi41LTguOGw5Ny43LTI5LjNjMy40LTEgNi40LTMuMSA4LjQtNi4xYzQuNC02LjQgOC42LTEyLjkgMTIuNi0xOS42YzYuMi0xMC4zLTEuNS0yMy0xMy41LTIzbC0zOC42IDBjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODAuOS0yNC4zYzQuNi0xLjQgOC40LTQuOCAxMC4yLTkuM0M0OTQuNSAxNjMgNTA3LjggODYuMSA1MTEuOSAzNi44Yy44LTkuOS0zLTE5LjYtMTAtMjYuNnMtMTYuNy0xMC44LTI2LjYtMTBDMzkxLjUgNyAyMjguNSA0MC41IDEzNy40IDEzMS42QzU3LjMgMjExLjcgNTYuNyAzMDIuMyA3MS4zIDM1Ni40YzIuMSA3LjkgMTIgOS42IDE3LjggMy44TDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdXG59O1xudmFyIGZhRmVhdGhlckFsdCA9IGZhRmVhdGhlclBvaW50ZWQ7XG52YXIgZmFQID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3AnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMTJdLCBcIjUwXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJoOTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBzLTcxLjYgMTYwLTE2MCAxNjBINjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwIDk2ek02NCAyODhoOTZjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZINjRWMjg4elwiXVxufTtcbnZhciBmYVNub3dmbGFrZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbm93Zmxha2UnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDA1MiwgMTAwNTRdLCBcImYyZGNcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjIuMWwxNS0xNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ5IDQ5djcwLjNsNjEuNC0zNS44IDE3LjctNjYuMWMzLjQtMTIuOCAxNi42LTIwLjQgMjkuNC0xN3MyMC40IDE2LjYgMTcgMjkuNGwtNS4yIDE5LjMgMjMuNi0xMy44YzE1LjMtOC45IDM0LjktMy43IDQzLjggMTEuNXMzLjggMzQuOS0xMS41IDQzLjhsLTI1LjMgMTQuOCAyMS43IDUuOGMxMi44IDMuNCAyMC40IDE2LjYgMTcgMjkuNHMtMTYuNiAyMC40LTI5LjQgMTdsLTY3LjctMTguMUwyODcuNSAyNTZsNjAuOSAzNS41IDY3LjctMTguMWMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN3MtNC4yIDI2LTE3IDI5LjRsLTIxLjcgNS44IDI1LjMgMTQuOGMxNS4zIDguOSAyMC40IDI4LjUgMTEuNSA0My44cy0yOC41IDIwLjQtNDMuOCAxMS41bC0yMy42LTEzLjggNS4yIDE5LjNjMy40IDEyLjgtNC4yIDI2LTE3IDI5LjRzLTI2LTQuMi0yOS40LTE3bC0xNy43LTY2LjFMMjU2IDMxMS43djcwLjNsNDkgNDljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTUtMTVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OS45bC0xNSAxNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0OS00OVYzMTEuN2wtNjEuNCAzNS44LTE3LjcgNjYuMWMtMy40IDEyLjgtMTYuNiAyMC40LTI5LjQgMTdzLTIwLjQtMTYuNi0xNy0yOS40bDUuMi0xOS4zTDQ4LjEgMzk1LjZjLTE1LjMgOC45LTM0LjkgMy43LTQzLjgtMTEuNXMtMy43LTM0LjkgMTEuNS00My44bDI1LjMtMTQuOC0yMS43LTUuOGMtMTIuOC0zLjQtMjAuNC0xNi42LTE3LTI5LjRzMTYuNi0yMC40IDI5LjQtMTdsNjcuNyAxOC4xTDE2MC41IDI1NiA5OS42IDIyMC41IDMxLjkgMjM4LjZjLTEyLjggMy40LTI2LTQuMi0yOS40LTE3czQuMi0yNiAxNy0yOS40bDIxLjctNS44TDE1LjkgMTcxLjZDLjYgMTYyLjctNC41IDE0My4xIDQuNCAxMjcuOXMyOC41LTIwLjQgNDMuOC0xMS41bDIzLjYgMTMuOC01LjItMTkuM2MtMy40LTEyLjggNC4yLTI2IDE3LTI5LjRzMjYgNC4yIDI5LjQgMTdsMTcuNyA2Ni4xTDE5MiAyMDAuM1YxMjkuOUwxNDMgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxNSAxNVYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFOZXdzcGFwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmV3c3BhcGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgXCJmMWVhXCIsIFwiTTk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2Vjk2em02NCAyNHY4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNEgyOTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0SDE4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTIwOC04YzAgOC44IDcuMiAxNiAxNiAxNmg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzODRjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzg0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTE2MCAzMDRjMCA4LjggNy4yIDE2IDE2IDE2SDQzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZINDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYVJlY3RhbmdsZUFkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlY3RhbmdsZS1hZCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYWRcIl0sIFwiZjY0MVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyOS41IDE3My4zbDcyIDE0NGM1LjkgMTEuOSAxLjEgMjYuMy0xMC43IDMyLjJzLTI2LjMgMS4xLTMyLjItMTAuN0wyNTMuMiAzMjhIMTYyLjhsLTUuNCAxMC43Yy01LjkgMTEuOS0yMC4zIDE2LjctMzIuMiAxMC43cy0xNi43LTIwLjMtMTAuNy0zMi4ybDcyLTE0NGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zek0yMDggMjM3LjdMMTg2LjggMjgwaDQyLjNMMjA4IDIzNy43ek0zOTIgMjU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHptMjQtNDMuOVYxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY5NiA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGMtNi42IDAtMTIuNi0yLjctMTctN2MtOS40IDQuNS0xOS45IDctMzEgN2MtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmM4LjQgMCAxNi41IDEuNCAyNCA0LjF6XCJdXG59O1xudmFyIGZhQWQgPSBmYVJlY3RhbmdsZUFkO1xudmFyIGZhQ2lyY2xlQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1yaWdodFwiXSwgXCJmMGE5XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnpNMjgxIDM4NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw3MS03MUwxMzYgMjgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE4Mi4xIDAtNzEtNzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEwzOTMgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI4MSAzODV6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDtcbnZhciBmYUZpbHRlckNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbHRlci1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUxN2JcIiwgXCJNMy45IDIyLjlDMTAuNSA4LjkgMjQuNSAwIDQwIDBINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzk2LjQgMTk1LjZDMzE2LjIgMjEyLjEgMjU2IDI4MyAyNTYgMzY4YzAgMjcuNCA2LjMgNTMuNCAxNy41IDc2LjVjLTEuNi0uOC0zLjItMS44LTQuNy0yLjlsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjI4OC45TDkgNjUuM0MtLjcgNTMuNC0yLjggMzYuOCAzLjkgMjIuOXpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhTG9jdXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY3VzdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUyMFwiLCBcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMTZjOTguNyAwIDE4MC42IDcxLjQgMTk3IDE2NS40Yy05LTMuNS0xOC44LTUuNC0yOS01LjRINDMxLjhsLTQxLjgtOTcuNWMtMy40LTcuOS0xMC44LTEzLjQtMTkuMy0xNC40cy0xNyAyLjctMjIuMSA5LjZsLTQwLjkgNTUuNS0yMS43LTUwLjdjLTMuMy03LjgtMTAuNS0xMy4yLTE4LjktMTQuM3MtMTYuNyAyLjMtMjIgOC45bC0yNDAgMzA0Yy04LjIgMTAuNC02LjQgMjUuNSA0IDMzLjdzMjUuNSA2LjQgMzMuNy00bDc5LjQtMTAwLjUgNDMgMTYuNC00MC41IDU1Yy03LjkgMTAuNy01LjYgMjUuNyA1LjEgMzMuNnMyNS43IDUuNiAzMy42LTUuMUwyMTUuMSA0MDBoNzQuNWwtMjkuMyA0Mi4zYy03LjUgMTAuOS00LjggMjUuOCA2LjEgMzMuNHMyNS44IDQuOCAzMy40LTYuMUwzNDggNDAwaDgwLjRsMzguOCA2Ny45YzYuNiAxMS41IDIxLjIgMTUuNSAzMi43IDguOXMxNS41LTIxLjIgOC45LTMyLjdMNDgzLjYgNDAwSDQ5NmM0NC4xIDAgNzkuOC0zNS43IDgwLTc5LjdjMC0uMSAwLS4yIDAtLjNWMjgwQzU3NiAxNDMgNDY1IDMyIDMyOCAzMkgzMTJ6bTUwLjUgMTY4bDE3LjEgNDBIMzMzbDI5LjUtNDB6bS04Ny43IDM4LjFsLTEuNCAxLjlIMjI1LjFsMzIuNy00MS41IDE2LjkgMzkuNXpNODguOCAyNDBDNTcuNCAyNDAgMzIgMjY1LjQgMzIgMjk2LjhjMCAxNS41IDYuMyAzMCAxNi45IDQwLjRMMTI2LjcgMjQwSDg4Ljh6TTQ5NiAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyelwiXVxufTtcbnZhciBmYVNvcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc29ydCcsXG4gIGljb246IFszMjAsIDUxMiwgW1widW5zb3J0ZWRcIl0sIFwiZjBkY1wiLCBcIk0xMzcuNCA0MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhIMzJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6bTAgNDI5LjNsLTEyOC0xMjhjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45czE2LjYtMTkuOCAyOS42LTE5LjhIMjg4YzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwelwiXVxufTtcbnZhciBmYVVuc29ydGVkID0gZmFTb3J0O1xudmFyIGZhTGlzdE9sID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpc3Qtb2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxpc3QtMS0yXCIsIFwibGlzdC1udW1lcmljXCJdLCBcImYwY2JcIiwgXCJNMjQgNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRIODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMTc2aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0SDU2VjgwSDQ4QzM0LjcgODAgMjQgNjkuMyAyNCA1NnpNODYuNyAzNDEuMmMtNi41LTcuNC0xOC4zLTYuOS0yNCAxLjJMNTEuNSAzNTcuOWMtNy43IDEwLjgtMjIuNyAxMy4zLTMzLjUgNS42cy0xMy4zLTIyLjctNS42LTMzLjVsMTEuMS0xNS42YzIzLjctMzMuMiA3Mi4zLTM1LjYgOTkuMi00LjljMjEuMyAyNC40IDIwLjggNjAuOS0xLjEgODQuN0w4Ni44IDQzMkgxMjBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMzJjLTkuNSAwLTE4LjItNS42LTIyLTE0LjRzLTIuMS0xOC45IDQuMy0yNS45bDcyLTc4YzUuMy01LjggNS40LTE0LjYgLjMtMjAuNXpNMjI0IDY0SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwSDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwSDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhTGlzdDEyID0gZmFMaXN0T2w7XG52YXIgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sO1xudmFyIGZhUGVyc29uRHJlc3NCdXJzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tZHJlc3MtYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NDRcIiwgXCJNNTI4IDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTM5MC4yIDM4NEg0MDh2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTZ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTcuOGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMUw1NDYuNyAyNDguMWwzMy45IDU2LjNjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTUzLjYtODkuMmMtMjAuMi0zMy43LTU2LjctNTQuMy05Ni01NC4zSDQ3NC4yYy0zOS4zIDAtNzUuNyAyMC42LTk2IDU0LjNsLTUzLjYgODkuMmMtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOWwzMy45LTU2LjNMMzc1IDM2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjF6TTE5MC45IDE4LjFDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEw1NS42IDY4LjljLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM3MtNC42IDEyLjItMS40IDE3LjlsMzkuNSA2OS4xTDEwLjkgMjA2LjRjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjJMOTAuNiAzMjdjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTc2IDI4Ni4xbDU4LjYgNTMuOWM0LjggNC40IDExLjkgNS41IDE3LjggMi42czkuNS05IDktMTUuNWwtNS42LTc5LjQgNTAuNS03LjggMjQuNC00MC41LTU1LjItMzhMMzE1IDkyLjJjMy4zLTUuNyAyLjctMTIuOC0xLjQtMTcuOXMtMTAuOS03LjItMTcuMi01LjNMMjIwLjMgOTIuMWwtMjkuNC03NHpcIl1cbn07XG52YXIgZmFNb25leUNoZWNrRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWNoZWNrLWRvbGxhcicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibW9uZXktY2hlY2stYWx0XCJdLCBcImY1M2RcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTI3MiAxOTJINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMjU2IDMwNGMwLTguOCA3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2ek0xNjQgMTUydjEzLjljNy41IDEuMiAxNC42IDIuOSAyMS4xIDQuN2MxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTExLTIuOS0yMS42LTUtMzEuMi01LjJjLTcuOS0uMS0xNiAxLjgtMjEuNSA1Yy00LjggMi44LTYuMiA1LjYtNi4yIDkuM2MwIDEuOCAuMSAzLjUgNS4zIDYuN2M2LjMgMy44IDE1LjUgNi43IDI4LjMgMTAuNWwuNyAuMmMxMS4yIDMuNCAyNS42IDcuNyAzNy4xIDE1YzEyLjkgOC4xIDI0LjMgMjEuMyAyNC42IDQxLjZjLjMgMjAuOS0xMC41IDM2LjEtMjQuOCA0NWMtNy4yIDQuNS0xNS4yIDcuMy0yMy4yIDlWMzYwYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYzNDUuNGMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40bDAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVWMTUyYzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXVxufTtcbnZhciBmYU1vbmV5Q2hlY2tBbHQgPSBmYU1vbmV5Q2hlY2tEb2xsYXI7XG52YXIgZmFWZWN0b3JTcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVjdG9yLXNxdWFyZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjVjYlwiLCBcIk0zNjggODBoMzJ2MzJIMzY4Vjgwek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMySDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMlYxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzUyek05NiAxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJIMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyVjE2MHpNNDggNDAwSDgwdjMySDQ4VjQwMHptMzIwIDMyVjQwMGgzMnYzMkgzNjh6TTQ4IDExMlY4MEg4MHYzMkg0OHpcIl1cbn07XG52YXIgZmFCcmVhZFNsaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyZWFkLXNsaWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2VjXCIsIFwiTTI1NiAzMkMxOTIgMzIgMCA2NCAwIDE5MmMwIDM1LjMgMjguNyA2NCA2NCA2NFY0MzJjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmMzNS4zIDAgNjQtMjguNyA2NC02NEM1MTIgNjQgMzIwIDMyIDI1NiAzMnpcIl1cbn07XG52YXIgZmFMYW5ndWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5ndWFnZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjFhYlwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEgyNTZoNDggMTZINTc2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMjAgMzA0IDI1NiA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTI4em0zMjAgMFYzODRINTc2VjEyOEgzMjB6TTE3OC4zIDE3NS45Yy0zLjItNy4yLTEwLjQtMTEuOS0xOC4zLTExLjlzLTE1LjEgNC43LTE4LjMgMTEuOWwtNjQgMTQ0Yy00LjUgMTAuMSAuMSAyMS45IDEwLjIgMjYuNHMyMS45LS4xIDI2LjQtMTAuMmw4LjktMjAuMWg3My42bDguOSAyMC4xYzQuNSAxMC4xIDE2LjMgMTQuNiAyNi40IDEwLjJzMTQuNi0xNi4zIDEwLjItMjYuNGwtNjQtMTQ0ek0xNjAgMjMzLjJMMTc5IDI3NkgxNDFsMTktNDIuOHpNNDQ4IDE2NGMxMSAwIDIwIDkgMjAgMjB2NGg0NCAxNmMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBoLTJsLTEuNiA0LjVjLTguOSAyNC40LTIyLjQgNDYuNi0zOS42IDY1LjRjLjkgLjYgMS44IDEuMSAyLjcgMS42bDE4LjkgMTEuM2M5LjUgNS43IDEyLjUgMTggNi45IDI3LjRzLTE4IDEyLjUtMjcuNCA2LjlsLTE4LjktMTEuM2MtNC41LTIuNy04LjgtNS41LTEzLjEtOC41Yy0xMC42IDcuNS0yMS45IDE0LTM0IDE5LjRsLTMuNiAxLjZjLTEwLjEgNC41LTIxLjktLjEtMjYuNC0xMC4ycy4xLTIxLjkgMTAuMi0yNi40bDMuNi0xLjZjNi40LTIuOSAxMi42LTYuMSAxOC41LTkuOGwtMTIuMi0xMi4yYy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDBsMTQuNiAxNC42IC41IC41YzEyLjQtMTMuMSAyMi41LTI4LjMgMjkuOC00NUg0NDggMzc2Yy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGg1MnYtNGMwLTExIDktMjAgMjAtMjB6XCJdXG59O1xudmFyIGZhRmFjZUtpc3NXaW5rSGVhcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1raXNzLXdpbmstaGVhcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzYsIFwia2lzcy13aW5rLWhlYXJ0XCJdLCBcImY1OThcIiwgXCJNNDk4IDMzOS43YzkuMS0yNi4yIDE0LTU0LjQgMTQtODMuN0M1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyYzM1LjQgMCA2OS4xLTcuMiA5OS43LTIwLjJjLTQuOC01LjUtOC41LTEyLjItMTAuNC0xOS43bC0yMi45LTg5LjNjLTEwLTM5IDExLjgtODAuOSA1MS44LTkyLjFjMzcuMi0xMC40IDczLjggMTAuMSA4Ny41IDQ0YzEyLjctMS42IDI1LjEgLjQgMzYuMiA1ek0yOTYgMzMyYzAgNi45LTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNGMtMi43IDEuNS01LjcgMy04LjcgNC4zYzMuMSAxLjMgNiAyLjcgOC43IDQuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNGM0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRDMjU4LjcgNDQzLjEgMjQxLjQgNDQ4IDIyNCA0NDhjLTMuNiAwLTYuOC0yLjUtNy43LTZzLjYtNy4yIDMuOC05bDAgMCAwIDAgMCAwIDAgMCAuMi0uMWMuMi0uMSAuNS0uMyAuOS0uNWMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjYtLjQtLjMtLjItLjItLjEgMCAwIDAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03bDAgMCAwIDAgMCAwIDAgMCAwIDAgLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMSAwIDAgMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3pNMTc2LjQgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTk0LjggNTcuNmMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDBjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMnpNNDM0IDM1Mi4zYy02LTIzLjItMjguOC0zNy01MS4xLTMwLjhzLTM1LjQgMzAuMS0yOS41IDUzLjRsMjIuOSA4OS4zYzIuMiA4LjcgMTEuMiAxMy45IDE5LjggMTEuNGw4NC45LTIzLjhjMjIuMi02LjIgMzUuNC0zMC4xIDI5LjUtNTMuNHMtMjguOC0zNy01MS4xLTMwLjhsLTIwLjIgNS42LTUuNC0yMXpcIl1cbn07XG52YXIgZmFLaXNzV2lua0hlYXJ0ID0gZmFGYWNlS2lzc1dpbmtIZWFydDtcbnZhciBmYUZpbHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWx0ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYjBcIiwgXCJNMy45IDU0LjlDMTAuNSA0MC45IDI0LjUgMzIgNDAgMzJINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzIwIDMyMC45VjQ0OGMwIDEyLjEtNi44IDIzLjItMTcuNyAyOC42cy0yMy44IDQuMy0zMy41LTNsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjMyMC45TDkgOTcuM0MtLjcgODUuNC0yLjggNjguOCAzLjkgNTQuOXpcIl1cbn07XG52YXIgZmFRdWVzdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdxdWVzdGlvbicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMDY3LCAxMDA2OCwgNjE3MzZdLCBcIjNmXCIsIFwiTTgwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGgzMmMzNS4zIDAgNjQgMjguNyA2NCA2NHYzLjZjMCAyMS44LTExLjEgNDIuMS0yOS40IDUzLjhsLTQyLjIgMjcuMWMtMjUuMiAxNi4yLTQwLjQgNDQuMS00MC40IDc0VjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMydi0xLjRjMC04LjIgNC4yLTE1LjggMTEtMjAuMmw0Mi4yLTI3LjFjMzYuNi0yMy42IDU4LjgtNjQuMSA1OC44LTEwNy43VjE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgxNDRDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem04MCAzMjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbnZhciBmYUZpbGVTaWduYXR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1zaWduYXR1cmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1NzNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFY0MjguN2MtMi43IDEuMS01LjQgMi04LjIgMi43bC02MC4xIDE1Yy0zIC43LTYgMS4yLTkgMS40Yy0uOSAuMS0xLjggLjItMi43IC4ySDI0MGMtNi4xIDAtMTEuNi0zLjQtMTQuMy04LjhsLTguOC0xNy43Yy0xLjctMy40LTUuMS01LjUtOC44LTUuNXMtNy4yIDIuMS04LjggNS41bC04LjggMTcuN2MtMi45IDUuOS05LjIgOS40LTE1LjcgOC44cy0xMi4xLTUuMS0xMy45LTExLjNMMTQ0IDM4MWwtOS44IDMyLjhjLTYuMSAyMC4zLTI0LjggMzQuMi00NiAzNC4ySDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDguMmM3LjEgMCAxMy4zLTQuNiAxNS4zLTExLjRsMTQuOS00OS41YzMuNC0xMS4zIDEzLjgtMTkuMSAyNS42LTE5LjFzMjIuMiA3LjggMjUuNiAxOS4xbDExLjYgMzguNmM3LjQtNi4yIDE2LjgtOS43IDI2LjgtOS43YzE1LjkgMCAzMC40IDkgMzcuNSAyMy4ybDQuNCA4LjhoOC45Yy0zLjEtOC44LTMuNy0xOC40LTEuNC0yNy44bDE1LTYwLjFjMi44LTExLjMgOC42LTIxLjUgMTYuOC0yOS43TDM4NCAyMDMuNlYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek01NDkuOCAxMzkuN2MtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBsLTI5LjQgMjkuNCA3MSA3MSAyOS40LTI5LjRjMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZsLTE0LjQtMTQuNHpNMzExLjkgMzIxYy00LjEgNC4xLTcgOS4yLTguNCAxNC45bC0xNSA2MC4xYy0xLjQgNS41IC4yIDExLjIgNC4yIDE1LjJzOS43IDUuNiAxNS4yIDQuMmw2MC4xLTE1YzUuNi0xLjQgMTAuOC00LjMgMTQuOS04LjRMNTEyLjEgMjYyLjdsLTcxLTcxTDMxMS45IDMyMXpcIl1cbn07XG52YXIgZmFVcERvd25MZWZ0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtZG93bi1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvd3MtYWx0XCJdLCBcImYwYjJcIiwgXCJNMjc4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhoMzJ2OTZIMTI4VjE5MmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMjg4aDk2djk2SDE5MmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhIMjg4VjI4OGg5NnYzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlzLTE5LjggMTYuNi0xOS44IDI5LjZ2MzJIMjg4VjEyOGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NHpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHQgPSBmYVVwRG93bkxlZnRSaWdodDtcbnZhciBmYUhvdXNlQ2hpbW5leVVzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2hpbW5leS11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDY1XCIsIFwiTTU0My44IDI4Ny42YzE3IDAgMzItMTQgMzItMzIuMWMxLTktMy0xNy0xMS0yNEw1MTIgMTg1VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzYuN0wzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWgzMlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpNMjg4IDE2MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMTc2IDQwMGMwLTQ0LjIgMzUuOC04MCA4MC04MGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIMTkyYy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xudmFyIGZhSGFuZEhvbGRpbmdIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctaGVhcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0YmVcIiwgXCJNMTYzLjkgMTM2LjljLTI5LjQtMjkuOC0yOS40LTc4LjIgMC0xMDhzNzctMjkuOCAxMDYuNCAwbDE3LjcgMTggMTcuNy0xOGMyOS40LTI5LjggNzctMjkuOCAxMDYuNCAwczI5LjQgNzguMiAwIDEwOEwzMTAuNSAyNDAuMWMtNi4yIDYuMy0xNC4zIDkuNC0yMi41IDkuNHMtMTYuMy0zLjEtMjIuNS05LjRMMTYzLjkgMTM2Ljl6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhUHV6emxlUGllY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncHV6emxlLXBpZWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEzXSwgXCJmMTJlXCIsIFwiTTE5MiAxMDQuOGMwLTkuMi01LjgtMTcuMy0xMy4yLTIyLjhDMTY3LjIgNzMuMyAxNjAgNjEuMyAxNjAgNDhjMC0yNi41IDI4LjctNDggNjQtNDhzNjQgMjEuNSA2NCA0OGMwIDEzLjMtNy4yIDI1LjMtMTguOCAzNGMtNy40IDUuNS0xMy4yIDEzLjYtMTMuMiAyMi44YzAgMTIuOCAxMC40IDIzLjIgMjMuMiAyMy4ySDMzNmMyNi41IDAgNDggMjEuNSA0OCA0OHY1Ni44YzAgMTIuOCAxMC40IDIzLjIgMjMuMiAyMy4yYzkuMiAwIDE3LjMtNS44IDIyLjgtMTMuMmM4LjctMTEuNiAyMC43LTE4LjggMzQtMTguOGMyNi41IDAgNDggMjguNyA0OCA2NHMtMjEuNSA2NC00OCA2NGMtMTMuMyAwLTI1LjMtNy4yLTM0LTE4LjhjLTUuNS03LjQtMTMuNi0xMy4yLTIyLjgtMTMuMmMtMTIuOCAwLTIzLjIgMTAuNC0yMy4yIDIzLjJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDI3OS4yYy0xMi44IDAtMjMuMi0xMC40LTIzLjItMjMuMmMwLTkuMiA1LjgtMTcuMyAxMy4yLTIyLjhjMTEuNi04LjcgMTguOC0yMC43IDE4LjgtMzRjMC0yNi41LTI4LjctNDgtNjQtNDhzLTY0IDIxLjUtNjQgNDhjMCAxMy4zIDcuMiAyNS4zIDE4LjggMzRjNy40IDUuNSAxMy4yIDEzLjYgMTMuMiAyMi44YzAgMTIuOC0xMC40IDIzLjItMjMuMiAyMy4ySDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNDMuMkMwIDMzMC40IDEwLjQgMzIwIDIzLjIgMzIwYzkuMiAwIDE3LjMgNS44IDIyLjggMTMuMkM1NC43IDM0NC44IDY2LjcgMzUyIDgwIDM1MmMyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjhDNDAuNSAyNTAuMiAzMi40IDI1NiAyMy4yIDI1NkMxMC40IDI1NiAwIDI0NS42IDAgMjMyLjhWMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDE2OC44YzEyLjggMCAyMy4yLTEwLjQgMjMuMi0yMy4yelwiXVxufTtcbnZhciBmYU1vbmV5Q2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1M2NcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTQ4IDE2MEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek05NiAzMzZjMC04LjggNy4yLTE2IDE2LTE2SDQ2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnpNMzc2IDE2MGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHY0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgzNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFTdGFySGFsZlN0cm9rZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWhhbGYtc3Ryb2tlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzdGFyLWhhbGYtYWx0XCJdLCBcImY1YzBcIiwgXCJNMjg4IDM3Ni40bC4xLS4xIDI2LjQgMTQuMSA4NS4yIDQ1LjUtMTYuNS05Ny42LTQuOC0yOC43IDIwLjctMjAuNSA3MC4xLTY5LjMtOTYuMS0xNC4yLTI5LjMtNC4zLTEyLjktMjYuNkwyODguMSA4Ni45bC0uMSAuM1YzNzYuNHptMTc1LjEgOTguM2MyIDEyLTMgMjQuMi0xMi45IDMxLjNzLTIzIDgtMzMuOCAyLjNMMjg4LjEgNDM5LjggMTU5LjggNTA4LjNDMTQ5IDUxNCAxMzUuOSA1MTMuMSAxMjYgNTA2cy0xNC45LTE5LjMtMTIuOS0zMS4zTDEzNy44IDMyOSAzMy42IDIyNS45Yy04LjYtOC41LTExLjctMjEuMi03LjktMzIuN3MxMy43LTE5LjkgMjUuNy0yMS43TDE5NSAxNTAuMyAyNTkuNCAxOGM1LjQtMTEgMTYuNS0xOCAyOC44LTE4czIzLjQgNyAyOC44IDE4bDY0LjMgMTMyLjMgMTQzLjYgMjEuMmMxMiAxLjggMjIgMTAuMiAyNS43IDIxLjdzLjcgMjQuMi03LjkgMzIuN0w0MzguNSAzMjlsMjQuNiAxNDUuN3pcIl1cbn07XG52YXIgZmFTdGFySGFsZkFsdCA9IGZhU3RhckhhbGZTdHJva2U7XG52YXIgZmFDb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYxMjFcIiwgXCJNMzkyLjggMS4yYy0xNy00LjktMzQuNyA1LTM5LjYgMjJsLTEyOCA0NDhjLTQuOSAxNyA1IDM0LjcgMjIgMzkuNnMzNC43LTUgMzkuNi0yMmwxMjgtNDQ4YzQuOS0xNy01LTM0LjctMjItMzkuNnptODAuNiAxMjAuMWMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNMNTYyLjcgMjU2bC04OS40IDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTEyLTExMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTEyLTExMmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS0zMDYuNyAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTEyIDExMmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2bDg5LjQtODkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFXaGlza2V5R2xhc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hpc2tleS1nbGFzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NywgXCJnbGFzcy13aGlza2V5XCJdLCBcImY3YTBcIiwgXCJNMzIgMzJjLTkuMyAwLTE4LjEgNC0yNC4yIDExLjFTLTEgNTkuNCAuMyA2OC42bDUwIDM0Mi45YzUuNyAzOS4zIDM5LjQgNjguNSA3OS4yIDY4LjVoMjUzYzM5LjcgMCA3My40LTI5LjEgNzkuMi02OC41bDUwLTM0Mi45YzEuMy05LjItMS40LTE4LjUtNy41LTI1LjVTNDg5LjMgMzIgNDgwIDMySDMyek04Ny43IDIyNEw2OSA5Nkg0NDNMNDI0LjMgMjI0SDg3Ljd6XCJdXG59O1xudmFyIGZhR2xhc3NXaGlza2V5ID0gZmFXaGlza2V5R2xhc3M7XG52YXIgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRkM1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMTUuMSAwIDI4LjUtNi45IDM3LjMtMTcuOEMzNDAuNCA0NjIuMiAzMjAgNDE3LjUgMzIwIDM2OGMwLTU0LjcgMjQuOS0xMDMuNSA2NC0xMzUuOFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmlmeWluZy1nbGFzcy1jaGFydCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUyMlwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4em0tMzEyIDh2NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NlYyODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTgwIDY0djk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUFycm93VXBSaWdodEZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImV4dGVybmFsLWxpbmtcIl0sIFwiZjA4ZVwiLCBcIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg4Mi43TDIwMS40IDI2NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ0OCAxMDkuM1YxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMjB6TTgwIDMyQzM1LjggMzIgMCA2Ny44IDAgMTEyVjQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0MDBjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2SDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MHpcIl1cbn07XG52YXIgZmFFeHRlcm5hbExpbmsgPSBmYUFycm93VXBSaWdodEZyb21TcXVhcmU7XG52YXIgZmFDdWJlc1N0YWNrZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3ViZXMtc3RhY2tlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRlNlwiLCBcIk0xOTIgNjR2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODIuNyAyMDdjLTE1LjMgOC44LTIwLjUgMjguNC0xMS43IDQzLjdsMzIgNTUuNGM4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43bDU1LjQtMzJjMTUuMy04LjggMjAuNS0yOC40IDExLjctNDMuN2wtMzItNTUuNGMtOC44LTE1LjMtMjguNC0yMC41LTQzLjctMTEuN0w4Mi43IDIwN3pNMjg4IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI4OHptNjQgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMzUyek0xNjAgMzg0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFXb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dvbi1zaWduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbODM2MSwgXCJrcndcIiwgXCJ3b25cIl0sIFwiZjE1OVwiLCBcIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjYgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNiA3NC4xTDUxLjYgMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDcyLjlsNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OGg0NkwzMjEgNDU1LjhjMy40IDEzLjggMTUuNiAyMy43IDI5LjggMjQuMnMyNy4xLTguNCAzMS42LTIxLjlMNDM5LjEgMjg4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjAuNGw1MC0xNDkuOWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMkwzOTIuOSAyMjRIMzI5TDI4NyA1Ni4yQzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE4MyAyMjRoLTY0TDYyLjQgNTMuOXptNzggMjM0LjFIMTY3bC0xMS40IDQ1LjZMMTQwLjQgMjg4ek0yNDkgMjI0bDctMjguMSA3IDI4LjFIMjQ5em05NiA2NGgyNi42bC0xNS4yIDQ1LjZMMzQ1IDI4OHpcIl1cbn07XG52YXIgZmFLcncgPSBmYVdvblNpZ247XG52YXIgZmFXb24gPSBmYVdvblNpZ247XG52YXIgZmFWaXJ1c0NvdmlkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzLWNvdmlkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGE4XCIsIFwiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyODBWODEuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0MjAgMTI1LjlsLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM0g0NjRWMjE2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2ODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDQzMC40Yy00LjIgMzAuNy0xNi4zIDU4LjgtMzQuMSA4Mi4zTDQyMCAzODYuMWwxMS4zLTExLjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01Ni42IDU2LjZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzg2LjEgNDIwbC0yMy44LTIzLjhjLTIzLjUgMTcuOS01MS43IDI5LjktODIuMyAzNC4xVjQ2NGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMTZWNDMwLjRjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFMMTI1LjkgNDIwbDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEw5MiAzODYuMWwyMy44LTIzLjhDOTcuOSAzMzguOCA4NS44IDMxMC43IDgxLjYgMjgwSDQ4djE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjIxNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djE2SDgxLjZjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTJsMjMuOCAyMy44YzIzLjUtMTcuOSA1MS43LTI5LjkgODIuMy0zNC4xVjQ4SDIxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4IDIwMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem02NCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUF1c3RyYWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F1c3RyYWwtc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTBhOVwiLCBcIk0yNTMuNSA1MS43QzI0OC42IDM5LjggMjM2LjkgMzIgMjI0IDMycy0yNC42IDcuOC0yOS41IDE5LjdMMTIyLjcgMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2TDgyLjcgMzIwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU2TDM0LjUgNDM1LjdjLTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJMMTI1LjMgMzg0SDMyMi43bDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOEwzOTIgMzg0aDI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM2NS4zTDM1MiAyODhoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzI1LjNMMjUzLjUgNTEuN3pNMjU2IDIyNEgxOTJsMzItNzYuOEwyNTYgMjI0em0tOTAuNyA2NEgyODIuN0wyOTYgMzIwSDE1MmwxMy4zLTMyelwiXVxufTtcbnZhciBmYUYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMl0sIFwiNDZcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlYyNTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFY5NkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6XCJdXG59O1xudmFyIGZhTGVhZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZWFmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDZjXCIsIFwiTTI3MiA5NmMtNzguNiAwLTE0NS4xIDUxLjUtMTY3LjcgMTIyLjVjMzMuNi0xNyA3MS41LTI2LjUgMTExLjctMjYuNWg4OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyODggMjE2czAgMCAwIDBjLTE2LjYgMC0zMi43IDEuOS00OC4zIDUuNGMtMjUuOSA1LjktNDkuOSAxNi40LTcxLjQgMzAuN2MwIDAgMCAwIDAgMEMzOC4zIDI5OC44IDAgMzY0LjkgMCA0NDB2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDBjMC00OC43IDIwLjctOTIuNSA1My44LTEyMy4yQzEyMS42IDM5Mi4zIDE5MC4zIDQ0OCAyNzIgNDQ4bDEgMGMxMzIuMS0uNyAyMzktMTMwLjkgMjM5LTI5MS40YzAtNDIuNi03LjUtODMuMS0yMS4xLTExOS42Yy0yLjYtNi45LTEyLjctNi42LTE2LjItLjFDNDU1LjkgNzIuMSA0MTguNyA5NiAzNzYgOTZMMjcyIDk2elwiXVxufTtcbnZhciBmYVJvYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODczOV0sIFwiZjAxOFwiLCBcIk0yNTYgMzJIMTgxLjJjLTI3LjEgMC01MS4zIDE3LjEtNjAuMyA0Mi42TDMuMSA0MDcuMkMxLjEgNDEzIDAgNDE5LjIgMCA0MjUuNEMwIDQ1NS41IDI0LjUgNDgwIDU0LjYgNDgwSDI1NlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY2NEg1MjEuNGMzMC4yIDAgNTQuNi0yNC41IDU0LjYtNTQuNmMwLTYuMi0xLjEtMTIuNC0zLjEtMTguMkw0NTUuMSA3NC42QzQ0NiA0OS4xIDQyMS45IDMyIDM5NC44IDMySDMyMFY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMnptNjQgMTkydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVRheGkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGF4aScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY2MiwgXCJjYWJcIl0sIFwiZjFiYVwiLCBcIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNjRjMCAuMSAwIC4xIDAgLjJjLTM4LjYgMi4yLTcyLjMgMjcuMy04NS4yIDY0LjFMMzkuNiAyMjguOEMxNi40IDIzOC40IDAgMjYxLjMgMCAyODhWNDMydjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQzMkg0MTZ2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDMyIDI4OGMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiAxMjguM2MtMTIuOS0zNi44LTQ2LjYtNjItODUuMi02NC4xYzAtLjEgMC0uMSAwLS4yVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDE5MnpNMTY1LjQgMTI4SDM0Ni42YzEzLjYgMCAyNS43IDguNiAzMC4yIDIxLjRMNDAyLjkgMjI0SDEwOS4xbDI2LjEtNzQuNmM0LjUtMTIuOCAxNi42LTIxLjQgMzAuMi0yMS40ek05NiAyODhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yODggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG52YXIgZmFDYWIgPSBmYVRheGk7XG52YXIgZmFQZXJzb25DaXJjbGVQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0MVwiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djQ4SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg0OHY0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM4NGg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0NDhWMzA0elwiXVxufTtcbnZhciBmYUNoYXJ0UGllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LXBpZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wicGllLWNoYXJ0XCJdLCBcImYyMDBcIiwgXCJNMzA0IDI0MFYxNi42YzAtOSA3LTE2LjYgMTYtMTYuNkM0NDMuNyAwIDU0NCAxMDAuMyA1NDQgMjI0YzAgOS03LjYgMTYtMTYuNiAxNkgzMDR6TTMyIDI3MkMzMiAxNTAuNyAxMjIuMSA1MC4zIDIzOSAzNC4zYzkuMi0xLjMgMTcgNi4xIDE3IDE1LjRWMjg4TDQxMi41IDQ0NC41YzYuNyA2LjcgNi4yIDE3LjctMS41IDIzLjFDMzcxLjggNDk1LjYgMzIzLjggNTEyIDI3MiA1MTJDMTM5LjUgNTEyIDMyIDQwNC42IDMyIDI3MnptNTI2LjQgMTZjOS4zIDAgMTYuNiA3LjggMTUuNCAxN2MtNy43IDU1LjktMzQuNiAxMDUuNi03My45IDE0Mi4zYy02IDUuNi0xNS40IDUuMi0yMS4yLS43TDMyMCAyODhINTU4LjR6XCJdXG59O1xudmFyIGZhUGllQ2hhcnQgPSBmYUNoYXJ0UGllO1xudmFyIGZhQm9sdExpZ2h0bmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib2x0LWxpZ2h0bmluZycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTBiN1wiLCBcIk0wIDI1NkwyOC41IDI4YzItMTYgMTUuNi0yOCAzMS44LTI4SDIyOC45YzE1IDAgMjcuMSAxMi4xIDI3LjEgMjcuMWMwIDMuMi0uNiA2LjUtMS43IDkuNUwyMDggMTYwSDM0Ny4zYzIwLjIgMCAzNi43IDE2LjQgMzYuNyAzNi43YzAgNy40LTIuMiAxNC42LTYuNCAyMC43bC0xOTIuMiAyODFjLTUuOSA4LjYtMTUuNiAxMy43LTI1LjkgMTMuN2gtMi45Yy0xNS43IDAtMjguNS0xMi44LTI4LjUtMjguNWMwLTIuMyAuMy00LjYgLjktNi45TDE3NiAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXVxufTtcbnZhciBmYVNhY2tYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzYWNrLXhtYXJrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTZhXCIsIFwiTTE5MiA5NkgzMjBsNDcuNC03MS4xQzM3NC41IDE0LjIgMzY2LjkgMCAzNTQuMSAwSDE1Ny45Yy0xMi44IDAtMjAuNCAxNC4yLTEzLjMgMjQuOUwxOTIgOTZ6bTEyOCAzMkgxOTJjLTMuOCAyLjUtOC4xIDUuMy0xMyA4LjRsMCAwIDAgMEMxMjIuMyAxNzIuNyAwIDI1MC45IDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZINDE2YzUzIDAgOTYtNDMgOTYtOTZjMC0xNjUuMS0xMjIuMy0yNDMuMy0xNzktMjc5LjZjLTQuOC0zLjEtOS4yLTUuOS0xMy04LjR6TTI4OS45IDMzNmw0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDd6XCJdXG59O1xudmFyIGZhRmlsZUV4Y2VsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtZXhjZWwnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0xNTUuNyAyNTAuMkwxOTIgMzAyLjFsMzYuMy01MS45YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXMxMy41IDIyLjYgNS45IDMzLjRMMjIxLjMgMzQ0bDQ2LjQgNjYuMmM3LjYgMTAuOSA1IDI1LjgtNS45IDMzLjRzLTI1LjggNS0zMy40LTUuOUwxOTIgMzg1LjhsLTM2LjMgNTEuOWMtNy42IDEwLjktMjIuNiAxMy41LTMzLjQgNS45cy0xMy41LTIyLjYtNS45LTMzLjRMMTYyLjcgMzQ0bC00Ni40LTY2LjJjLTcuNi0xMC45LTUtMjUuOCA1LjktMzMuNHMyNS44LTUgMzMuNCA1Ljl6XCJdXG59O1xudmFyIGZhRmlsZUNvbnRyYWN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY29udHJhY3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1NmNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek04MCA2NGg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NGg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptNTQuMiAyNTMuOGMtNi4xIDIwLjMtMjQuOCAzNC4yLTQ2IDM0LjJIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoOC4yYzcuMSAwIDEzLjMtNC42IDE1LjMtMTEuNGwxNC45LTQ5LjVjMy40LTExLjMgMTMuOC0xOS4xIDI1LjYtMTkuMXMyMi4yIDcuNyAyNS42IDE5LjFsMTEuNiAzOC42YzcuNC02LjIgMTYuOC05LjcgMjYuOC05LjdjMTUuOSAwIDMwLjQgOSAzNy41IDIzLjJsNC40IDguOEgzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjQwYy02LjEgMC0xMS42LTMuNC0xNC4zLTguOGwtOC44LTE3LjdjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41cy03LjIgMi4xLTguOCA1LjVsLTguOCAxNy43Yy0yLjkgNS45LTkuMiA5LjQtMTUuNyA4LjhzLTEyLjEtNS4xLTEzLjktMTEuM0wxNDQgMzQ5bC05LjggMzIuOHpcIl1cbn07XG52YXIgZmFGaXNoRmlucyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaXNoLWZpbnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZjJcIiwgXCJNMjc1LjIgMzguNGMtMTAuNi04LTI1LTguNS0zNi4zLTEuNVMyMjIgNTcuMyAyMjQuNiA3MC4zbDkuNyA0OC42Yy0xOS40IDktMzYuOSAxOS45LTUyLjQgMzEuNWMtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjYgNC45Uy0zIDE2My4zIDQuMiAxNzUuOUw1MCAyNTYgNC4yIDMzNi4xYy03LjIgMTIuNi01IDI4LjQgNS4zIDM4LjZzMjYuMSAxMi4yIDM4LjYgNC45bDkzLjEtNTQuM2MxMS44IDEyLjMgMjUuNCAyNC44IDQwLjcgMzYuM2MxNS41IDExLjYgMzMgMjIuNSA1Mi40IDMxLjVsLTkuNyA0OC42Yy0yLjYgMTMgMy4xIDI2LjMgMTQuMyAzMy4zczI1LjYgNi41IDM2LjMtMS41bDc3LjYtNTguMmM1NC45LTQgMTAxLjUtMjcgMTM3LjItNTMuOGMzOS4yLTI5LjQgNjcuMi02NC43IDgxLjYtODkuNWM1LjgtOS45IDUuOC0yMi4yIDAtMzIuMWMtMTQuNC0yNC44LTQyLjUtNjAuMS04MS42LTg5LjVjLTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDVcIiwgXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjUxMmg2NFYxOTJINjI0YzguOCAwIDE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZINDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbnZhciBmYUZhY2VHcmluQmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgXCJncmluLWJlYW1cIl0sIFwiZjU4MlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg4LjEgMzEyLjhjMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43QzM4Mi40IDM5MC42IDMyNC4yIDQzMiAyNTYuMyA0MzJzLTEyNi4yLTQxLjQtMTUxLjEtMTAwLjVjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5em0tMTcwLjUtODRsMCAwIDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMHptMTYwIDBsMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwIDAgMHpcIl1cbn07XG52YXIgZmFHcmluQmVhbSA9IGZhRmFjZUdyaW5CZWFtO1xudmFyIGZhT2JqZWN0VW5ncm91cCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdvYmplY3QtdW5ncm91cCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjI0OFwiLCBcIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0QzAgMjguNyAyOC43IDAgNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJIMzI4LjZDMzM5LjYgMTIuOSAzNjAuMyAwIDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNFYyMzIuNmMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJIMTE5LjRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYxMTkuNHpNMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNFYyMzIuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRIMzI4LjZjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40VjExOS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRIMTE5LjR6bTE5MiAzODRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYzNTJoNjR2NDAuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRINTIwLjZjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40VjI3OS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRoLTQ2Yy01LjQtMTUuNC0xNC42LTI4LjktMjYuNS0zOS42VjE5Mmg3Mi42YzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40VjM5Mi42YzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgzMTEuNHpcIl1cbn07XG52YXIgZmFQb29wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bvb3AnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY2MTlcIiwgXCJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjdDMzE1LjggNy4yIDM1MiA0Ny40IDM1MiA5NmMwIDExLjItMS45IDIyLTUuNSAzMkgzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxOS4xLTguNCAzNi4zLTIxLjcgNDhINDA4YzM5LjggMCA3MiAzMi4yIDcyIDcyYzAgMjMuMi0xMSA0My44LTI4IDU3YzM0LjEgNS43IDYwIDM1LjMgNjAgNzFjMCAzOS44LTMyLjIgNzItNzIgNzJINzJjLTM5LjggMC03Mi0zMi4yLTcyLTcyYzAtMzUuNyAyNS45LTY1LjMgNjAtNzFjLTE3LTEzLjItMjgtMzMuOC0yOC01N2MwLTM5LjggMzIuMi03MiA3Mi03MmgxMy43QzEwNC40IDIyOC4zIDk2IDIxMS4xIDk2IDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNi4yYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODBjMC05LjItMS41LTE3LjktNC4zLTI2LjFjLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHpcIl1cbn07XG52YXIgZmFMb2NhdGlvblBpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1waW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1hcC1tYXJrZXJcIl0sIFwiZjA0MVwiLCBcIk0zODQgMTkyYzAgODcuNC0xMTcgMjQzLTE2OC4zIDMwNy4yYy0xMi4zIDE1LjMtMzUuMSAxNS4zLTQ3LjQgMEMxMTcgNDM1IDAgMjc5LjQgMCAxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyelwiXVxufTtcbnZhciBmYU1hcE1hcmtlciA9IGZhTG9jYXRpb25QaW47XG52YXIgZmFLYWFiYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdrYWFiYScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODMzMV0sIFwiZjY2YlwiLCBcIk02MCAxMjBsMjI4IDcxLjJMNTE2IDEyMCAyODggNDguOCA2MCAxMjB6TTI3OC41IDEuNWM2LjItMS45IDEyLjktMS45IDE5LjEgMGwyNTYgODBDNTY2LjkgODUuNiA1NzYgOTggNTc2IDExMnYxNiAwIDIxLjJMMjkyLjggMjM3LjdjLTMuMSAxLTYuNCAxLTkuNSAwTDAgMTQ5LjJWMTI4IDExMkMwIDk4IDkuMSA4NS42IDIyLjUgODEuNWwyNTYtODB6bTIzLjkgMjY2LjhMNTc2IDE4Mi44djQ2LjVsLTUyLjggMTYuNWMtOC40IDIuNi0xMy4xIDExLjYtMTAuNSAyMHMxMS42IDEzLjEgMjAgMTAuNUw1NzYgMjYyLjhWNDAwYzAgMTQtOS4xIDI2LjQtMjIuNSAzMC41bC0yNTYgODBjLTYuMiAxLjktMTIuOSAxLjktMTkuMSAwbC0yNTYtODBDOS4xIDQyNi40IDAgNDE0IDAgNDAwVjI2Mi44bDQzLjIgMTMuNWM4LjQgMi42IDE3LjQtMi4xIDIwLTEwLjVzLTIuMS0xNy40LTEwLjUtMjBMMCAyMjkuMlYxODIuOGwyNzMuNyA4NS41YzkuMyAyLjkgMTkuMyAyLjkgMjguNiAwem0tMTg1LjUtMi42Yy04LjQtMi42LTE3LjQgMi4xLTIwIDEwLjVzMi4xIDE3LjQgMTAuNSAyMGw2NCAyMGM4LjQgMi42IDE3LjQtMi4xIDIwLTEwLjVzLTIuMS0xNy40LTEwLjUtMjBsLTY0LTIwem0zNTIgMzAuNWM4LjQtMi42IDEzLjEtMTEuNiAxMC41LTIwcy0xMS42LTEzLjEtMjAtMTAuNWwtNjQgMjBjLTguNCAyLjYtMTMuMSAxMS42LTEwLjUgMjBzMTEuNiAxMy4xIDIwIDEwLjVsNjQtMjB6bS0yMjQgOS41Yy04LjQtMi42LTE3LjQgMi4xLTIwIDEwLjVzMi4xIDE3LjQgMTAuNSAyMGwzOC41IDEyYzkuMyAyLjkgMTkuMyAyLjkgMjguNiAwbDM4LjUtMTJjOC40LTIuNiAxMy4xLTExLjYgMTAuNS0yMHMtMTEuNi0xMy4xLTIwLTEwLjVsLTM4LjUgMTJjLTMuMSAxLTYuNCAxLTkuNSAwbC0zOC41LTEyelwiXVxufTtcbnZhciBmYVRvaWxldFBhcGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldC1wYXBlcicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTUzMV0sIFwiZjcxZVwiLCBcIk00NDQuMiAwQzM5Ny4yIDQ5LjYgMzg0IDEyNi41IDM4NCAxOTJjMCAxNTguOC0yNy4zIDI0Ny00Mi43IDI4My45Yy0xMCAyNC0zMy4yIDM2LjEtNTUuNCAzNi4xSDQ4Yy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjYtMjIuMyAuNC0zMi4yYzkuOC0xNy43IDE1LjQtMzguMiAyMC41LTU3LjdDNTIuMyAzNjIuOCA2NCAyOTMuNSA2NCAxOTJDNjQgODYgMTA3IDAgMTYwIDBINDQ0LjJ6TTUxMiAzODRjLTUzIDAtOTYtODYtOTYtMTkyUzQ1OSAwIDUxMiAwczk2IDg2IDk2IDE5MnMtNDMgMTkyLTk2IDE5MnptMC0xMjhjMTcuNyAwIDMyLTI4LjcgMzItNjRzLTE0LjMtNjQtMzItNjRzLTMyIDI4LjctMzIgNjRzMTQuMyA2NCAzMiA2NHpNMTQ0IDIwOGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem02NCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptODAtMTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG52YXIgZmFIZWxtZXRTYWZldHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVsbWV0LXNhZmV0eScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFyZC1oYXRcIiwgXCJoYXQtaGFyZFwiXSwgXCJmODA3XCIsIFwiTTI1NiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2Mi4zIDk5LjZjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xYy0zLjYgMC03LTEuOS04LjgtNS4xTDE1Ny4xIDg3QzgzIDEyMy41IDMyIDE5OS44IDMyIDI4OHY2NEg1NDRsMC02Ni40Yy0uOS04Ny4yLTUxLjctMTYyLjQtMTI1LjEtMTk4LjZsLTQ4IDgzLjljLTEuOCAzLjItNS4yIDUuMS04LjggNS4xYy01LjYgMC0xMC4xLTQuNS0xMC4xLTEwLjFWNjYuMyA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgyNTZ6TTE2LjYgMzg0QzcuNCAzODQgMCAzOTEuNCAwIDQwMC42YzAgNC43IDIgOS4yIDUuOCAxMS45QzI3LjUgNDI4LjQgMTExLjggNDgwIDI4OCA0ODBzMjYwLjUtNTEuNiAyODIuMi02Ny41YzMuOC0yLjggNS44LTcuMiA1LjgtMTEuOWMwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZIMTYuNnpcIl1cbn07XG52YXIgZmFIYXJkSGF0ID0gZmFIZWxtZXRTYWZldHk7XG52YXIgZmFIYXRIYXJkID0gZmFIZWxtZXRTYWZldHk7XG52YXIgZmFFamVjdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlamVjdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzkxNjddLCBcImYwNTJcIiwgXCJNMjI0IDMyYzEzLjUgMCAyNi4zIDUuNiAzNS40IDE1LjZsMTc2IDE5MmMxMi45IDE0IDE2LjIgMzQuMyA4LjYgNTEuOFM0MTkgMzIwIDQwMCAzMjBINDhjLTE5IDAtMzYuMy0xMS4yLTQzLjktMjguN3MtNC4zLTM3LjcgOC42LTUxLjhsMTc2LTE5MkMxOTcuNyAzNy42IDIxMC41IDMyIDIyNCAzMnpNMCA0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhINDAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHpcIl1cbn07XG52YXIgZmFDaXJjbGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTgzOCwgXCJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0XCJdLCBcImYzNWFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMEEyNTYgMjU2IDAgMSAwIDAgMjU2ek0yOTQuNiAxMzUuMWw5OS45IDEwNy4xYzMuNSAzLjggNS41IDguNyA1LjUgMTMuOHMtMiAxMC4xLTUuNSAxMy44TDI5NC42IDM3Ni45Yy00LjIgNC41LTEwLjEgNy4xLTE2LjMgNy4xQzI2NiAzODQgMjU2IDM3NCAyNTYgMzYxLjdsMC01Ny43LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTU3LjdjMC0xMi4zIDEwLTIyLjMgMjIuMy0yMi4zYzYuMiAwIDEyLjEgMi42IDE2LjMgNy4xelwiXVxufTtcbnZhciBmYUFycm93QWx0Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZVJpZ2h0O1xudmFyIGZhUGxhbmVDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTVcIiwgXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43djg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45djY1LjVjMCAxMC42IDEwLjIgMTguMyAyMC40IDE1LjRsMTcxLjYtNDkgMCA3MC45LTU3LjYgNDMuMmMtNCAzLTYuNCA3LjgtNi40IDEyLjh2NDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zVjkzLjdDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTY0MCAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xudmFyIGZhRmFjZVJvbGxpbmdFeWVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utcm9sbGluZy1leWVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTgwLCBcIm1laC1yb2xsaW5nLWV5ZXNcIl0sIFwiZjVhNVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDM2OEgzMjBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTkyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0zMi0xNDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40Yy0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjRDMjA4LjUgMTc1LjYgMjI0IDE5OCAyMjQgMjI0em0xMjggNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjYgMTUuNS00OC40IDM3LjgtNTguNGMtMy43IDUuMi01LjggMTEuNi01LjggMTguNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40QzQwMC41IDE3NS42IDQxNiAxOTggNDE2IDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl1cbn07XG52YXIgZmFNZWhSb2xsaW5nRXllcyA9IGZhRmFjZVJvbGxpbmdFeWVzO1xudmFyIGZhT2JqZWN0R3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2JqZWN0LWdyb3VwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjQ3XCIsIFwiTTMyIDExOS40QzEyLjkgMTA4LjQgMCA4Ny43IDAgNjRDMCAyOC43IDI4LjcgMCA2NCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMkg0NTYuNkM0NjcuNiAxMi45IDQ4OC4zIDAgNTEyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40VjM5Mi42YzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgxMTkuNGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjExOS40ek00NTYuNiA5NkgxMTkuNGMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40VjM5Mi42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNEg0NTYuNmM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRWMTE5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNHpNMTI4IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjB6TTI1NiAzMjBoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjI0aDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzIwelwiXVxufTtcbnZhciBmYUNoYXJ0TGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1saW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsaW5lLWNoYXJ0XCJdLCBcImYyMDFcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuN2wtNTcuNC01Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNDAgMjIxLjNsNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6XCJdXG59O1xudmFyIGZhTGluZUNoYXJ0ID0gZmFDaGFydExpbmU7XG52YXIgZmFNYXNrVmVudGlsYXRvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrLXZlbnRpbGF0b3InLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjRcIiwgXCJNMTU5LjEgMTc2QzEzOS40IDIxOS4yIDEyOCAyNjQuNyAxMjggMzAwLjhjMCAxNS45IDIuMiAzMS40IDYuMyA0NmwtMzEuOC03LjlDNzAuNSAzMzAuOSA0OCAzMDIuMSA0OCAyNjlWMTg0YzAtNC40IDMuNi04IDgtOEgxNTkuMXptMjYtNDhINTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2djg1YzAgNTUuMSAzNy41IDEwMy4xIDkwLjkgMTE2LjRsNzEuMyAxNy44YzIyLjcgMzAuNSA1NS40IDU0LjEgOTMuOCA2Ni42VjM5My4zYy0xOS43LTE2LjQtMzItNDAuMy0zMi02Ni45YzAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNGM1Mi41IDAgOTYgODQuOSA5NiAxMzQuNGMwIDI2LjctMTIuNCA1MC40LTMyIDY2Ljh2NzYuNmMzOC0xMi42IDcwLjYtMzYgOTMuNS02Ni40bDcxLjYtMTcuOUM2MDIuNSAzNzIuMSA2NDAgMzI0LjEgNjQwIDI2OVYxODRjMC0zMC45LTI1LjEtNTYtNTYtNTZINDU0LjVDNDE5LjcgNzMuOCAzNzIuMSAzMiAzMjAgMzJjLTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0yOTUuNiA0OEg1ODRjNC40IDAgOCAzLjYgOCA4djg1YzAgMzMtMjIuNSA2MS44LTU0LjUgNjkuOWwtMzEuOCA4YzQuMi0xNC43IDYuNC0zMC4xIDYuNC00Ni4xYzAtMzYuMS0xMS42LTgxLjYtMzEuMy0xMjQuOHpNMjg4IDMyMFY1MTJoNjRWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4NTk0XSwgXCJmMDYxXCIsIFwiTTQzOC42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzMzguOCAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMwNi43IDBMMjMzLjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHpcIl1cbn07XG52YXIgZmFTaWduc1Bvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbnMtcG9zdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibWFwLXNpZ25zXCJdLCBcImYyNzdcIiwgXCJNMjI0IDMySDY0QzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0NDEuNGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDQ4LTQ4YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC00OC00OGMtMy0zLTcuMS00LjctMTEuMy00LjdIMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek00ODAgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI4OFYxOTJIMjI0djMySDcwLjZjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN0g0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjU2ek0yODggNDgwVjM4NEgyMjR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFNYXBTaWducyA9IGZhU2lnbnNQb3N0O1xudmFyIGZhQ2FzaFJlZ2lzdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nhc2gtcmVnaXN0ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ODhcIiwgXCJNNjQgMEM0Ni4zIDAgMzIgMTQuMyAzMiAzMlY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4MHYzMkg4N2MtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM3OC40YzAtNC44LS40LTkuNi0xLjEtMTQuNEw0ODguMiAyMTQuNEM0ODMuNSAxODMuMSA0NTYuNiAxNjAgNDI1IDE2MEgyMDhWMTI4aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0ek05NiA0OEgyNTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTY0IDQzMmMwLTguOCA3LjItMTYgMTYtMTZINDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTQ4LTE2OGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyMC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0xNjAgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNMzI4IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0yNTYgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNDI0IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0zNTIgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpcIl1cbn07XG52YXIgZmFQZXJzb25DaXJjbGVRdWVzdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQyXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyek00MzIgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyNDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0zNjggMzIxLjZWMzI4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ2LTYuNGMwLTUuMyA0LjMtOS42IDkuNi05LjZoNDAuNWM3LjcgMCAxMy45IDYuMiAxMy45IDEzLjljMCA1LjItMi45IDkuOS03LjQgMTIuM2wtMzIgMTYuOGMtNS4zIDIuOC04LjYgOC4yLTguNiAxNC4yVjM4NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di01LjFsMjMuNS0xMi4zYzE1LjEtNy45IDI0LjUtMjMuNiAyNC41LTQwLjZjMC0yNS40LTIwLjYtNDUuOS00NS45LTQ1LjlINDA5LjZjLTIzIDAtNDEuNiAxOC42LTQxLjYgNDEuNnpcIl1cbn07XG52YXIgZmFIID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2gnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDRdLCBcIjQ4XCIsIFwiTTMyMCAyNTZsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJMNjQgMTkyIDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyIDI1NiAwelwiXVxufTtcbnZhciBmYVRhcnAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFycCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU3YlwiLCBcIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNTIgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZWMTI4ek00NDggNDQ4TDU3NiAzMjBINDQ4bDAgMTI4ek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVNjcmV3ZHJpdmVyV3JlbmNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjcmV3ZHJpdmVyLXdyZW5jaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1widG9vbHNcIl0sIFwiZjdkOVwiLCBcIk03OC42IDVDNjkuMS0yLjQgNTUuNi0xLjUgNDcgN0w3IDQ3Yy04LjUgOC41LTkuNCAyMi0yLjEgMzEuNmw4MCAxMDRjNC41IDUuOSAxMS42IDkuNCAxOSA5LjRoNTQuMWwxMDkgMTA5Yy0xNC43IDI5LTEwIDY1LjQgMTQuMyA4OS42bDExMiAxMTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTExMi0xMTJjLTI0LjItMjQuMi02MC42LTI5LTg5LjYtMTQuM2wtMTA5LTEwOVYxMDRjMC03LjUtMy41LTE0LjUtOS40LTE5TDc4LjYgNXpNMTkuOSAzOTYuMUM3LjIgNDA4LjggMCA0MjYuMSAwIDQ0NC4xQzAgNDgxLjYgMzAuNCA1MTIgNjcuOSA1MTJjMTggMCAzNS4zLTcuMiA0OC0xOS45TDIzMy43IDM3NC4zYy03LjgtMjAuOS05LTQzLjYtMy42LTY1LjFsLTYxLjctNjEuN0wxOS45IDM5Ni4xek01MTIgMTQ0YzAtMTAuNS0xLjEtMjAuNy0zLjItMzAuNWMtMi40LTExLjItMTYuMS0xNC4xLTI0LjItNmwtNjMuOSA2My45Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN0gzNTJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMDIuNmMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDYzLjktNjMuOWM4LjEtOC4xIDUuMi0yMS44LTYtMjQuMkMzODguNyAxLjEgMzc4LjUgMCAzNjggMEMyODguNSAwIDIyNCA2NC41IDIyNCAxNDRsMCAuOCA4NS4zIDg1LjNjMzYtOS4xIDc1LjggLjUgMTA0IDI4LjdMNDI5IDI3NC41YzQ5LTIzIDgzLTcyLjggODMtMTMwLjV6TTU2IDQzMmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYVRvb2xzID0gZmFTY3Jld2RyaXZlcldyZW5jaDtcbnZhciBmYUFycm93c1RvRXllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1leWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmZcIiwgXCJNMTUgMTVDMjQuNCA1LjcgMzkuNiA1LjcgNDkgMTVsNjMgNjNWNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNEg0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEg3OC4xTDE1IDQ5QzUuNyAzOS42IDUuNyAyNC40IDE1IDE1ek0xMzMuNSAyNDMuOUMxNTguNiAxOTMuNiAyMjIuNyAxMTIgMzIwIDExMnMxNjEuNCA4MS42IDE4Ni41IDEzMS45YzMuOCA3LjYgMy44IDE2LjUgMCAyNC4yQzQ4MS40IDMxOC40IDQxNy4zIDQwMCAzMjAgNDAwcy0xNjEuNC04MS42LTE4Ni41LTEzMS45Yy0zLjgtNy42LTMuOC0xNi41IDAtMjQuMnpNMzIwIDMyMGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNTkxIDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjMgNjNINjAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDUwNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNFY3OC4xbDYzLTYzek0xNSA0OTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDYzLTYzSDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0djk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQzMy45TDQ5IDQ5N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTU3NiAwbC02My02M1Y0NzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2MS45bDYzIDYzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZUJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtYm9sdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU1YlwiLCBcIk05NiAwQzc4LjMgMCA2NCAxNC4zIDY0IDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnYzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MTIuOGMxMi4zLTIuNSAyNC4xLTYuNCAzNS4xLTExLjVjLTIuMS0xMC44LTMuMS0yMS45LTMuMS0zMy4zYzAtODAuMyA1My44LTE0OCAxMjcuMy0xNjkuMmMuNS0yLjIgLjctNC41IC43LTYuOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZINDg4YzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwSDM3NmMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnpcIl1cbn07XG52YXIgZmFIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCBcImYwMDRcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOUw0NjQuNCAzMDAuNGMzMC40LTI4LjMgNDcuNi02OCA0Ny42LTEwOS41di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41elwiXVxufTtcbnZhciBmYU1hcnNBbmRWZW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLWFuZC12ZW51cycsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4OTNdLCBcImYyMjRcIiwgXCJNMzM3LjggMTQuOEMzNDEuNSA1LjggMzUwLjMgMCAzNjAgMEg0NzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMTM2YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTI0LjcgMjQuN0M0MDcgMTYzLjMgNDE2IDE5Mi42IDQxNiAyMjRjMCA4MC4yLTU5IDE0Ni42LTEzNiAxNTguMlY0MDhoMjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwdjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQ1NkgyMDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMjRWMzgyLjJDMTU1IDM3MC42IDk2IDMwNC4yIDk2IDIyNGMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MGMzOS42IDAgNzUuOSAxNC40IDEwMy44IDM4LjJMMzgyLjEgODAgMzQzIDQxYy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yek00NDggNDhsMCAwaDB2MHpNMzUyIDIyNGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6XCJdXG59O1xudmFyIGZhSG91c2VVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLXVzZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhvbWUtdXNlclwiXSwgXCJlMWIwXCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zSDEyOC4xYy0zNS4zIDAtNjQtMjguNy02NC02NFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0ek0zNTIgMjI0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHptLTk2IDk2Yy00NC4yIDAtODAgMzUuOC04MCA4MGMwIDguOCA3LjIgMTYgMTYgMTZIMzg0YzguOCAwIDE2LTcuMiAxNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MEgyNTZ6XCJdXG59O1xudmFyIGZhSG9tZVVzZXIgPSBmYUhvdXNlVXNlcjtcbnZhciBmYUR1bXBzdGVyRmlyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkdW1wc3Rlci1maXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzk0XCIsIFwiTTQ5LjcgMzJsOTAuOCAwTDExNC45IDE2MGwtOTQgMEM5LjMgMTYwIDAgMTUwLjcgMCAxMzkuMWMwLTIuMSAuMy00LjEgLjktNi4xTDI2LjggNDguOUMyOS45IDM4LjkgMzkuMiAzMiA0OS43IDMyek0yNzIgMTYwbC0xMjQuNSAwTDE3My4xIDMyIDI3MiAzMmwwIDEyOHptMzIgMGwwLTEyOCA5OC45IDAgMTQuNCA3Mi4xYy0xLjcgMS4xLTMuMyAyLjQtNC44IDMuOGMtMTguNCAxNi40LTM1LjQgMzQtNTAuNSA1Mi4xbC01OCAwem0yMDkuOS0yMy43Yy0xLjcgMS42LTMuNCAzLjItNSA0LjhDNDk4IDEyOS42IDQ4Ni43IDExOC42IDQ3NSAxMDhjLTcuNi02LjktMTctMTAuOC0yNi42LTExLjhMNDM1LjUgMzJsOTAuOCAwYzEwLjUgMCAxOS44IDYuOSAyMi45IDE2LjlMNTc1LjEgMTMzYy4yIC43IC40IDEuNCAuNSAyLjFjLTE3LjgtMTUtNDQuMy0xNC42LTYxLjcgMS4yek0zMjUuMiAyMTAuN0MzMDQuMyAyNDQuNSAyODggMjgyLjkgMjg4IDMxOC4xYzAgNDkuMyAxOC42IDk1LjIgNDkuNiAxMjkuOUwxMjggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDQ0IDI4OGwtMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0IDAtNC0zMiAzMDUuNSAwYy00LjQgNi4yLTguNSAxMi41LTEyLjMgMTguN3ptMTgwLjYtMzQuNUw1MTggMTYyLjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOWM3LjIgMCAxNC4zIDIuNiAxOS45IDcuOGMxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjZDNjI5IDI1OS4yIDY0MCAyOTAuMiA2NDAgMzIwLjJDNjQwIDQwOC44IDU2OC43IDQ4MCA0ODAgNDgwYy04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44YzAtMzcuMyAxNi03My40IDM2LjgtMTA0LjVjMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yYzUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVjMTQuMSAuMyAyMy44IDExLjQgMzIuNyAyMS42YzAgMCAwIDAgMCAwYzIgMi4zIDQgNC42IDYgNi43bDE5IDE5Ljl6TTU0NCAzNjguMmMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMjk1LjEgNDE2IDMzMS42IDQxNiAzNjguMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUhvdXNlQ3JhY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY3JhY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUzYjFcIiwgXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyMzAuNGwtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI4OCAzNjhsLTYwLjItODIuOGMtMTAuOS0xNSA4LjItMzMuNSAyMi44LTIybDExNy45IDkyLjZjOCA2LjMgOC4yIDE4LjQgLjQgMjQuOUwyODggNDQ4bDM4LjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpcIl1cbn07XG52YXIgZmFNYXJ0aW5pR2xhc3NDaXRydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1jaXRydXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNvY2t0YWlsXCJdLCBcImY1NjFcIiwgXCJNNDMyIDI0MGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtMzUuNSAwLTY2LjYgMTkuMy04My4yIDQ4SDI5Ni4yQzMxNiA0MC4xIDM2OS4zIDAgNDMyIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDRjLTI3LjcgMC01My41LTcuOC03NS41LTIxLjNsMzUuNC0zNS40YzEyLjIgNS42IDI1LjggOC43IDQwLjEgOC43ek0xLjggMTQyLjhDNS41IDEzMy44IDE0LjMgMTI4IDI0IDEyOEgzOTJjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC0xNzcgMTc3VjQ2NGg2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDggMTIwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjM0NS45TDcgMTY5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yelwiXVxufTtcbnZhciBmYUNvY2t0YWlsID0gZmFNYXJ0aW5pR2xhc3NDaXRydXM7XG52YXIgZmFGYWNlU3VycHJpc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zdXJwcmlzZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgXCJzdXJwcmlzZVwiXSwgXCJmNWMyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYuNCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjU2IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFTdXJwcmlzZSA9IGZhRmFjZVN1cnByaXNlO1xudmFyIGZhQm90dGxlV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm90dGxlLXdhdGVyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNGM1XCIsIFwiTTEyMCAwbDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MEw5NiA2NGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zMiAxNjcuNWMwLTE5LjUgMTAtMzcuNiAyNi42LTQ3LjlsMTUuOC05LjlDODguNyAxMDAuNyAxMDUuMiA5NiAxMjIuMSA5Nmw3NS44IDBjMTYuOSAwIDMzLjQgNC43IDQ3LjcgMTMuN2wxNS44IDkuOUMyNzggMTI5LjkgMjg4IDE0OCAyODggMTY3LjVjMCAxNy03LjUgMzIuMy0xOS40IDQyLjZDMjgwLjYgMjIxLjcgMjg4IDIzOCAyODggMjU2YzAgMTkuMS04LjQgMzYuMy0yMS43IDQ4YzEzLjMgMTEuNyAyMS43IDI4LjkgMjEuNyA0OHMtOC40IDM2LjMtMjEuNyA0OGMxMy4zIDExLjcgMjEuNyAyOC45IDIxLjcgNDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTE5LjEgOC40LTM2LjMgMjEuNy00OEM0MC40IDM4OC4zIDMyIDM3MS4xIDMyIDM1MnM4LjQtMzYuMyAyMS43LTQ4QzQwLjQgMjkyLjMgMzIgMjc1LjEgMzIgMjU2YzAtMTggNy40LTM0LjMgMTkuNC00NS45QzM5LjUgMTk5LjcgMzIgMTg0LjUgMzIgMTY3LjV6TTk2IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZsOTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtOTYgMHpcIl1cbn07XG52YXIgZmFDaXJjbGVQYXVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcGF1c2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgXCJwYXVzZS1jaXJjbGVcIl0sIFwiZjI4YlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MlYzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwVjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFQYXVzZUNpcmNsZSA9IGZhQ2lyY2xlUGF1c2U7XG52YXIgZmFUb2lsZXRQYXBlclNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldC1wYXBlci1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3MlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMDkuNy04NkM1NjkuOSAzNzQgNjA4IDI5MS45IDYwOCAxOTJDNjA4IDg2IDU2NSAwIDUxMiAwcy05NiA4Ni05NiAxOTJjMCA0OS4xIDkuMiA5My45IDI0LjQgMTI3LjlsLTU5LTQ2LjJjMS42LTI0LjggMi42LTUyIDIuNi04MS42YzAtNjUuNSAxMy4yLTE0Mi40IDYwLjItMTkySDE2MGMtMjQuOCAwLTQ3LjQgMTguOC02NC40IDQ5LjZMMzguOCA1LjF6TTM2Ny4zIDM4NS40TDY2LjUgMTQ4LjRDNjQuOSAxNjIuNCA2NCAxNzcgNjQgMTkyYzAgMTAxLjUtMTEuNyAxNzAuOC0yMyAyMTMuOWMtNS4xIDE5LjQtMTAuNyAzOS45LTIwLjUgNTcuN2MtNS45IDkuOS02LjEgMjIuMS0uNCAzMi4yUzM2LjUgNTEyIDQ4IDUxMkgyODUuOWMyMi4zIDAgNDUuNC0xMi4xIDU1LjQtMzYuMWM3LjQtMTcuNyAxNy41LTQ3LjIgMjYtOTAuNnpNNTQ0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0czMyIDI4LjcgMzIgNjR6XCJdXG59O1xudmFyIGZhQXBwbGVXaG9sZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcHBsZS13aG9sZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzgyMiwgMTI3ODIzLCBcImFwcGxlLWFsdFwiXSwgXCJmNWQxXCIsIFwiTTIyNCAxMTJjLTguOCAwLTE2LTcuMi0xNi0xNlY4MGMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNmM4LjggMCAxNiA3LjIgMTYgMTZWMzJjMCA0NC4yLTM1LjggODAtODAgODBIMjI0ek0wIDI4OGMwLTc2LjMgMzUuNy0xNjAgMTEyLTE2MGMyNy4zIDAgNTkuNyAxMC4zIDgyLjcgMTkuM2MxOC44IDcuMyAzOS45IDcuMyA1OC43IDBjMjIuOS04LjkgNTUuNC0xOS4zIDgyLjctMTkuM2M3Ni4zIDAgMTEyIDgzLjcgMTEyIDE2MGMwIDEyOC04MCAyMjQtMTYwIDIyNGMtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuM2MtOC4xLTIuOC0xNi45LTIuOC0yNSAwYy0xMy40IDQuNy0zNSAxMS4zLTUxLjUgMTEuM0M4MCA1MTIgMCA0MTYgMCAyODh6XCJdXG59O1xudmFyIGZhQXBwbGVBbHQgPSBmYUFwcGxlV2hvbGU7XG52YXIgZmFLaXRjaGVuU2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tpdGNoZW4tc2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTFhXCIsIFwiTTI0MCAxNDRBOTYgOTYgMCAxIDAgNDggMTQ0YTk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4QzY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmg3MS44YzguOC05LjggMjEuNi0xNiAzNS44LTE2SDQ5NmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzOTJjLTE0LjIgMC0yNy02LjItMzUuOC0xNkgyODQuNHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0djhoOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDk2di04YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yODggNDY0VjM1Mkg1MTJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDMzNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTQ4IDMyMGg4MCAxNiAzMmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNjB2MzJoMTZ6TTI0IDQ2NEgyMDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhUiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTE0XSwgXCI1MlwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjI4OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBoOTUuM0wyNjEuOCA0NjYuNGMxMC4xIDE0LjUgMzAuMSAxOCA0NC42IDcuOXMxOC0zMC4xIDcuOS00NC42TDIzMC4xIDMwOS41QzI4Mi44IDI4OC4xIDMyMCAyMzYuNCAzMjAgMTc2YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0SDY0ek0xNzYgMjU2SDY0Vjk2SDE3NmM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtcXVhcnRlcicsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtMVwiLCBcInRoZXJtb21ldGVyLTFcIiwgXCJ0aGVybW9tZXRlci1xdWFydGVyXCJdLCBcImYyY2FcIiwgXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OFYyNzYuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNVYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEyVjI3Ni41YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42VjExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNWMjcyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NTAuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUxID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7XG52YXIgZmFUaGVybW9tZXRlcjEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjtcbnZhciBmYVRoZXJtb21ldGVyUXVhcnRlciA9IGZhVGVtcGVyYXR1cmVRdWFydGVyO1xudmFyIGZhQ3ViZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjdWJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMWIyXCIsIFwiTTIzNC41IDUuN2MxMy45LTUgMjkuMS01IDQzLjEgMGwxOTIgNjguNkM0OTUgODMuNCA1MTIgMTA3LjUgNTEyIDEzNC42VjM3Ny40YzAgMjctMTcgNTEuMi00Mi41IDYwLjNsLTE5MiA2OC42Yy0xMy45IDUtMjkuMSA1LTQzLjEgMGwtMTkyLTY4LjZDMTcgNDI4LjYgMCA0MDQuNSAwIDM3Ny40VjEzNC42YzAtMjcgMTctNTEuMiA0Mi41LTYwLjNsMTkyLTY4LjZ6TTI1NiA2Nkw4Mi4zIDEyOCAyNTYgMTkwbDE3My43LTYyTDI1NiA2NnptMzIgMzY4LjZsMTYwLTU3LjF2LTE4OEwyODggMjQ2LjZ2MTg4elwiXVxufTtcbnZhciBmYUJpdGNvaW5TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JpdGNvaW4tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTBiNFwiLCBcIk00OCAzMkM0OCAxNC4zIDYyLjMgMCA4MCAwczMyIDE0LjMgMzIgMzJWNjRoMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGMwIDEuNS0uMSAzLjEtLjMgNC41QzI1NC4xIDgyLjIgMjg4IDEyNS4xIDI4OCAxNzZjMCAyNC4yLTcuNyA0Ni42LTIwLjcgNjQuOWMzMS43IDE5LjggNTIuNyA1NSA1Mi43IDk1LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhINDEuN0MxOC43IDQ0OCAwIDQyOS4zIDAgNDA2LjNWMjg4IDI2NS43IDIyNCAxMDEuNkMwIDgwLjggMTYuOCA2NCAzNy42IDY0SDQ4VjMyek02NCAyMjRIMTc2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDY0djk2em0xMTIgNjRINjR2OTZIMjA4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl1cbn07XG52YXIgZmFTaGllbGREb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpZWxkLWRvZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU3M1wiLCBcIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMmMuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjJjMTYuNyA4IDM2LjEgOCA1Mi44IDBDNDU0LjcgNDIwLjcgNDk1LjUgMjM5LjIgNDk2IDE0MGMuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAuOSAyODYuMmM0LjggMS4yIDkuOSAxLjggMTUuMSAxLjhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwaDQ0LjJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN0wzMjAgMTkyaDY0YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDQ0LjItMzUuOCA4MC04MCA4MEgyNzJ2NTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjNjLTEuOCAwLTMuNi0uNC01LjItMS4xbC05OC43LTQyLjNjLTYuNi0yLjgtMTAuOC05LjMtMTAuOC0xNi40YzAtMi44IC42LTUuNSAxLjktOGwxNS0zMHpNMTYwIDE2MGg0MCA4djMyIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE3NmMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYVNvbGFyUGFuZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc29sYXItcGFuZWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1YmFcIiwgXCJNMTIyLjIgMEM5MS43IDAgNjUuNSAyMS41IDU5LjUgNTEuNEw4LjMgMzA3LjRDLjQgMzQ3IDMwLjYgMzg0IDcxIDM4NEgyODh2NjRIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTJWMzg0SDU2OWM0MC40IDAgNzAuNy0zNi45IDYyLjgtNzYuNmwtNTEuMi0yNTZDNTc0LjUgMjEuNSA1NDguMyAwIDUxNy44IDBIMTIyLjJ6TTI2MC45IDY0SDM3OS4xbDEwLjQgMTA0aC0xMzlMMjYwLjkgNjR6TTIwMi4zIDE2OEgxMDEuNEwxMjIuMiA2NGg5MC40TDIwMi4zIDE2OHpNOTEuOCAyMTZIMTk3LjVMMTg3LjEgMzIwSDcxTDkxLjggMjE2em0xNTMuOSAwSDM5NC4zbDEwLjQgMTA0LTE2OS40IDAgMTAuNC0xMDR6bTE5Ni44IDBINTQ4LjJMNTY5IDMyMGgtMTE2TDQ0Mi41IDIxNnptOTYtNDhINDM3LjdMNDI3LjMgNjRoOTAuNGwzMS40LTYuM0w1MTcuOCA2NGwyMC44IDEwNHpcIl1cbn07XG52YXIgZmFMb2NrT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NrLW9wZW4nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYzYzFcIiwgXCJNMzUyIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ0QzU3NiA2NC41IDUxMS41IDAgNDMyIDBTMjg4IDY0LjUgMjg4IDE0NHY0OEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyVjE0NHpcIl1cbn07XG52YXIgZmFFbGV2YXRvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbGV2YXRvcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE2ZFwiLCBcIk0xMzIuNyA0LjdsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40czguMyA5LjkgMTQuOCA5LjlIMjA4YzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwem0xOTIgMGMwLTI2LjUgMjEuNS00OCA0OC00OGg2NGMyNi41IDAgNDggMjEuNSA0OCA0OHYxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwMHptMzItMTI4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTM1Ni43IDkxLjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFM0MzguNSAwIDQzMiAwSDMwNGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDY0IDY0elwiXVxufTtcbnZhciBmYU1vbmV5QmlsbFRyYW5zZmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtdHJhbnNmZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjhcIiwgXCJNNTM1IDQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNjQgNjRjNC41IDQuNSA3IDEwLjYgNyAxN3MtMi41IDEyLjUtNyAxN2wtNjQgNjRjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMjMtMjNMMzg0IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNzQuMSAwTDUzNSA0MXpNMTA1IDM3N2wtMjMgMjNMMjU2IDQwMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4MS45IDQ0OGwyMyAyM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgNDQxYy00LjUtNC41LTctMTAuNi03LTE3czIuNS0xMi41IDctMTdsNjQtNjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek05NiA2NEgzMzcuOWMtMy43IDcuMi01LjkgMTUuMy01LjkgMjRjMCAyOC43IDIzLjMgNTIgNTIgNTJsMTE3LjQgMGMtNCAxNyAuNiAzNS41IDEzLjggNDguOGMyMC4zIDIwLjMgNTMuMiAyMC4zIDczLjUgMEw2MDggMTY5LjVWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDMwMi4xYzMuNy03LjIgNS45LTE1LjMgNS45LTI0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0xMTcuNCAwYzQtMTctLjYtMzUuNS0xMy44LTQ4LjhjLTIwLjMtMjAuMy01My4yLTIwLjMtNzMuNSAwTDMyIDM0Mi41VjEyOGMwLTM1LjMgMjguNy02NCA2NC02NHptNjQgNjRIOTZ2NjRjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTU0NCAzMjBjLTM1LjMgMC02NCAyOC43LTY0IDY0aDY0VjMyMHpNMzIwIDM1MmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnpcIl1cbn07XG52YXIgZmFNb25leUJpbGxUcmVuZFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtdHJlbmQtdXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjlcIiwgXCJNNDcwLjcgOS40YzMgMy4xIDUuMyA2LjYgNi45IDEwLjNzMi40IDcuOCAyLjQgMTIuMmwwIC4xdjAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTA5LjNMMzEwLjYgMjE0LjZjLTExLjggMTEuOC0zMC44IDEyLjYtNDMuNSAxLjdMMTc2IDEzOC4xIDg0LjggMjE2LjNjLTEzLjQgMTEuNS0zMy42IDkuOS00NS4xLTMuNXMtOS45LTMzLjYgMy41LTQ1LjFsMTEyLTk2YzEyLTEwLjMgMjkuNy0xMC4zIDQxLjcgMGw4OS41IDc2LjdMMzcwLjcgNjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2IDBjOC44IDAgMTYuOCAzLjYgMjIuNiA5LjNsLjEgLjF6TTAgMzA0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDQ2NGMyNi41IDAgNDggMjEuNSA0OCA0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMwNHpNNDggNDE2djQ4SDk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek05NiAzMDRINDh2NDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4aDQ4VjQxNnpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OFYzMDRINDE2em0tOTYgODBhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwelwiXVxufTtcbnZhciBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtZmxvb2Qtd2F0ZXItY2lyY2xlLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTBmXCIsIFwiTTI4OCAxNDRBMTQ0IDE0NCAwIDEgMCAwIDE0NGExNDQgMTQ0IDAgMSAwIDI4OCAwek0xNDAuNyA3Ni43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDU2IDU2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC01NiA1NmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwxNjkuNCAxNjBIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODkuNEwxNDAuNyA5OS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpNMzIwIDE0NGMwIDU3LjMtMjcuNCAxMDguMi02OS44IDE0MC4zYzExLjgtMy42IDIzLTkuNCAzMy0xNi4yYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjQgNzguMSAzLjRjMi4xIDEuNyA0LjIgMy4zIDYuNSA0LjlsLS4zLTg0LjRINTc2YzEzLjkgMCAyNi4xLTguOSAzMC40LTIyLjFzLS40LTI3LjYtMTEuNi0zNS44bC0xNzYtMTI4QzQwNy42LTIgMzkyLjQtMiAzODEuMiA2LjFMMzAxIDY0LjRjMTIuMSAyMy45IDE5IDUwLjkgMTkgNzkuNnptMTguNSAxNjUuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNzkgMzI1LjQgMjUxLjUgMzM2IDIyNCAzMzZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxNTguNSAzODkuNyAxOTEgNDAwIDIyNCA0MDBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNiAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNS0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQ3MS40IDMyNS4yIDQ0Mi45IDMzNiA0MTYgMzM2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6bTAgMTEyYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI3OSA0MzcuNCAyNTEuNSA0NDggMjI0IDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzE1OC41IDUwMS43IDE5MSA1MTIgMjI0IDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDcxLjQgNDM3LjIgNDQyLjkgNDQ4IDQxNiA0NDhjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMXpcIl1cbn07XG52YXIgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcG9sbC1ob3Jpem9udGFsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb2xsLWhcIl0sIFwiZjY4MlwiLCBcIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjU2IDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem02NCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDB6TTE5MiAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFQb2xsSCA9IGZhU3F1YXJlUG9sbEhvcml6b250YWw7XG52YXIgZmFDaXJjbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgXCJmMTExXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyelwiXVxufTtcbnZhciBmYUJhY2t3YXJkRmFzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWNrd2FyZC1mYXN0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTE5OCwgXCJmYXN0LWJhY2t3YXJkXCJdLCBcImYwNDlcIiwgXCJNNDkzLjYgNDQ1Yy0xMS4yIDUuMy0yNC41IDMuNi0zNC4xLTQuNEwyODggMjk3LjdWNDE2YzAgMTIuNC03LjIgMjMuNy0xOC40IDI5cy0yNC41IDMuNi0zNC4xLTQuNEw2NCAyOTcuN1Y0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRzMzIgMTQuMyAzMiAzMlYyMTQuM0wyMzUuNSA3MS40YzkuNS03LjkgMjIuOC05LjcgMzQuMS00LjRTMjg4IDgzLjYgMjg4IDk2VjIxNC4zTDQ1OS41IDcxLjRjOS41LTcuOSAyMi44LTkuNyAzNC4xLTQuNFM1MTIgODMuNiA1MTIgOTZWNDE2YzAgMTIuNC03LjIgMjMuNy0xOC40IDI5elwiXVxufTtcbnZhciBmYUZhc3RCYWNrd2FyZCA9IGZhQmFja3dhcmRGYXN0O1xudmFyIGZhUmVjeWNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN5Y2xlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg0MiwgOTg1MCwgOTg1MV0sIFwiZjFiOFwiLCBcIk0xNzQuNyA0NS4xQzE5Mi4yIDE3IDIyMyAwIDI1NiAwczYzLjggMTcgODEuMyA0NS4xbDM4LjYgNjEuNyAyNy0xNS42YzguNC00LjkgMTguOS00LjIgMjYuNiAxLjdzMTEuMSAxNS45IDguNiAyNS4zbC0yMy40IDg3LjRjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI4LjQtMTYuNEwyODMgNzljLTUuOC05LjMtMTYtMTUtMjctMTVzLTIxLjIgNS43LTI3IDE1bC0xNy41IDI4Yy05LjIgMTQuOC0yOC42IDE5LjUtNDMuNiAxMC41Yy0xNS4zLTkuMi0yMC4yLTI5LjItMTAuNy00NC40bDE3LjUtMjh6TTQyOS41IDI1MS45YzE1LTkgMzQuNC00LjMgNDMuNiAxMC41bDI0LjQgMzkuMWM5LjQgMTUuMSAxNC40IDMyLjQgMTQuNiA1MC4yYy4zIDUzLjEtNDIuNyA5Ni40LTk1LjggOTYuNEwzMjAgNDQ4djMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJ2MzJsOTYuMiAwYzE3LjYgMCAzMS45LTE0LjQgMzEuOC0zMmMwLTUuOS0xLjctMTEuNy00LjgtMTYuN2wtMjQuNC0zOS4xYy05LjUtMTUuMi00LjctMzUuMiAxMC43LTQ0LjR6bS0zNjQuNi0zMUwzNiAyMDQuMmMtOC40LTQuOS0xMy4xLTE0LjMtMTEuOC0yMy45czguMi0xNy41IDE3LjYtMjBsODcuNC0yMy40YzEyLjgtMy40IDI2IDQuMiAyOS40IDE3TDE4MiAyNDEuMmMyLjUgOS40LS45IDE5LjMtOC42IDI1LjNzLTE4LjIgNi42LTI2LjYgMS43bC0yNi41LTE1LjNMNjguOCAzMzUuM2MtMy4xIDUtNC44IDEwLjgtNC44IDE2LjdjLS4xIDE3LjYgMTQuMiAzMiAzMS44IDMybDMyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuMiAwQzQyLjcgNDQ4LS4zIDQwNC44IDAgMzUxLjZjLjEtMTcuOCA1LjEtMzUuMSAxNC42LTUwLjJsNTAuMy04MC41elwiXVxufTtcbnZhciBmYVVzZXJBc3Ryb25hdXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1hc3Ryb25hdXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY0ZmJcIiwgXCJNMzcwLjcgOTYuMUMzNDYuMSAzOS41IDI4OS43IDAgMjI0IDBTMTAxLjkgMzkuNSA3Ny4zIDk2LjFDNjAuOSA5Ny41IDQ4IDExMS4yIDQ4IDEyOHY2NGMwIDE2LjggMTIuOSAzMC41IDI5LjMgMzEuOUMxMDEuOSAyODAuNSAxNTguMyAzMjAgMjI0IDMyMHMxMjIuMS0zOS41IDE0Ni43LTk2LjFjMTYuNC0xLjQgMjkuMy0xNS4xIDI5LjMtMzEuOVYxMjhjMC0xNi44LTEyLjktMzAuNS0yOS4zLTMxLjl6TTMzNiAxNDR2MTZjMCA1My00MyA5Ni05NiA5NkgyMDhjLTUzIDAtOTYtNDMtOTYtOTZWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDI4OGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg5LjMgMTYyLjdsLTYtMjEuMmMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTZ6TTExMi43IDMxNi41QzQ2LjcgMzQyLjYgMCA0MDcgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDEyOFY0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0bDk4LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN2MwLTc1LjMtNDYuNy0xMzkuNy0xMTIuNy0xNjUuOEMzMDMuOSAzMzguOCAyNjUuNSAzNTIgMjI0IDM1MnMtNzkuOS0xMy4yLTExMS4zLTM1LjV6TTE3NiA0NDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0OGgzMlY0NjRjMC04LjgtNy4yLTE2LTE2LTE2em05NiAzMmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhUGxhbmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2OVwiLCBcIk00NDAuNiAzMjBoNzMuOGMzNC4yIDAgOTMuNy0yOCA5My43LTY0YzAtMzUtNTkuNS02NC05My43LTY0bC0xMTYuNiAwTDI5Ny4yIDE2LjFDMjkxLjUgNi4yIDI4MC45IDAgMjY5LjQgMEgyMTMuMmMtMTAuNiAwLTE4LjMgMTAuMi0xNS40IDIwLjRsNDAuMyAxNDAuOUwzOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ0MC42IDMyMHptLTc4LjEgNjEuNkw0MS41IDEyOC43QzM2IDEzMC42IDMyIDEzNS45IDMyIDE0MmMwIDEuMyAuMiAyLjYgLjUgMy45TDY0IDI1NiAzMi41IDM2Ni4xYy0uNCAxLjMtLjUgMi42LS41IDMuOWMwIDcuOCA2LjMgMTQgMTQgMTRIODhjNSAwIDkuOC0yLjQgMTIuOC02LjRMMTQ0IDMyMEgyNDYuOWwtNDkgMTcxLjZjLTIuOSAxMC4yIDQuOCAyMC40IDE1LjQgMjAuNGw1Ni4yIDBjMTEuNSAwIDIyLjEtNi4yIDI3LjgtMTYuMWw2NS4zLTExNC4zelwiXVxufTtcbnZhciBmYVRyYWRlbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmFkZW1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs4NDgyXSwgXCJmMjVjXCIsIFwiTTM0NS42IDEwOC44Yy04LjMtMTEtMjIuNy0xNS41LTM1LjctMTEuMlMyODggMTE0LjIgMjg4IDEyOFYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRsODYuNCAxMTUuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44czE5LjYtNC43IDI1LjYtMTIuOEw1NzYgMjI0VjM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjEyOGMwLTEzLjgtOC44LTI2LTIxLjktMzAuNHMtMjcuNSAuMS0zNS43IDExLjJMNDY0IDI2Ni43IDM0NS42IDEwOC44ek0wIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NlYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJDMTQuMyA5NiAwIDExMC4zIDAgMTI4elwiXVxufTtcbnZhciBmYUJhc2tldGJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFza2V0YmFsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkzNiwgXCJiYXNrZXRiYWxsLWJhbGxcIl0sIFwiZjQzNFwiLCBcIk04Ni42IDY0bDg1LjIgODUuMkMxOTQuNSAxMjEuNyAyMDggODYuNCAyMDggNDhjMC0xNC43LTItMjguOS01LjctNDIuNEMxNTguNiAxNSAxMTkgMzUuNSA4Ni42IDY0ek02NCA4Ni42QzM1LjUgMTE5IDE1IDE1OC42IDUuNiAyMDIuM0MxOS4xIDIwNiAzMy4zIDIwOCA0OCAyMDhjMzguNCAwIDczLjctMTMuNSAxMDEuMy0zNi4xTDY0IDg2LjZ6TTI1NiAwYy03LjMgMC0xNC42IC4zLTIxLjggLjlDMjM4IDE2IDI0MCAzMS44IDI0MCA0OGMwIDQ3LjMtMTcuMSA5MC41LTQ1LjQgMTI0TDI1NiAyMzMuNCA0MjUuNCA2NEMzODAuMiAyNC4yIDMyMC45IDAgMjU2IDB6TTQ4IDI0MGMtMTYuMiAwLTMyLTItNDcuMS01LjhDLjMgMjQxLjQgMCAyNDguNyAwIDI1NmMwIDY0LjkgMjQuMiAxMjQuMiA2NCAxNjkuNEwyMzMuNCAyNTYgMTcyIDE5NC42QzEzOC41IDIyMi45IDk1LjMgMjQwIDQ4IDI0MHptNDYzLjEgMzcuOGMuNi03LjIgLjktMTQuNSAuOS0yMS44YzAtNjQuOS0yNC4yLTEyNC4yLTY0LTE2OS40TDI3OC42IDI1NiAzNDAgMzE3LjRjMzMuNC0yOC4zIDc2LjctNDUuNCAxMjQtNDUuNGMxNi4yIDAgMzIgMiA0Ny4xIDUuOHptLTQuNyAzMS45QzQ5Mi45IDMwNiA0NzguNyAzMDQgNDY0IDMwNGMtMzguNCAwLTczLjcgMTMuNS0xMDEuMyAzNi4xTDQ0OCA0MjUuNGMyOC41LTMyLjMgNDkuMS03MS45IDU4LjQtMTE1Ljd6TTM0MC4xIDM2Mi43QzMxNy41IDM5MC4zIDMwNCA0MjUuNiAzMDQgNDY0YzAgMTQuNyAyIDI4LjkgNS43IDQyLjRDMzUzLjQgNDk3IDM5MyA0NzYuNSA0MjUuNCA0NDhsLTg1LjItODUuMnpNMzE3LjQgMzQwTDI1NiAyNzguNiA4Ni42IDQ0OGM0NS4xIDM5LjggMTA0LjQgNjQgMTY5LjQgNjRjNy4zIDAgMTQuNi0uMyAyMS44LS45QzI3NCA0OTYgMjcyIDQ4MC4yIDI3MiA0NjRjMC00Ny4zIDE3LjEtOTAuNSA0NS40LTEyNHpcIl1cbn07XG52YXIgZmFCYXNrZXRiYWxsQmFsbCA9IGZhQmFza2V0YmFsbDtcbnZhciBmYVNhdGVsbGl0ZURpc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlLWRpc2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjVdLCBcImY3YzBcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyQzM4My4xIDAgNTEyIDEyOC45IDUxMiAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDNDQ4IDE2NC4zIDM0Ny43IDY0IDIyNCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTYwLjYgMjIwLjZMMTY0LjcgMzI0LjdsMjguNC0yOC40Yy0uNy0yLjYtMS4xLTUuNC0xLjEtOC4zYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTIuOSAwLTUuNi0uNC04LjMtMS4xbC0yOC40IDI4LjRMMjkxLjQgNDUxLjRjMTQuNSAxNC41IDExLjggMzguOC03LjMgNDYuM0MyNjAuNSA1MDYuOSAyMzQuOSA1MTIgMjA4IDUxMkM5My4xIDUxMiAwIDQxOC45IDAgMzA0YzAtMjYuOSA1LjEtNTIuNSAxNC40LTc2LjFjNy41LTE5IDMxLjgtMjEuOCA0Ni4zLTcuM3pNMjI0IDk2YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUNpcmNsZVVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNDY3LCBcImFycm93LWFsdC1jaXJjbGUtdXBcIl0sIFwiZjM1YlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM1LjEgMjE3LjRsMTA3LjEtOTkuOWMzLjgtMy41IDguNy01LjUgMTMuOC01LjVzMTAuMSAyIDEzLjggNS41bDEwNy4xIDk5LjljNC41IDQuMiA3LjEgMTAuMSA3LjEgMTYuM2MwIDEyLjMtMTAgMjIuMy0yMi4zIDIyLjNIMzA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjU2SDE1MC4zQzEzOCAyNTYgMTI4IDI0NiAxMjggMjMzLjdjMC02LjIgMi42LTEyLjEgNy4xLTE2LjN6XCJdXG59O1xudmFyIGZhQXJyb3dBbHRDaXJjbGVVcCA9IGZhQ2lyY2xlVXA7XG52YXIgZmFNb2JpbGVTY3JlZW5CdXR0b24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9iaWxlLXNjcmVlbi1idXR0b24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1vYmlsZS1hbHRcIl0sIFwiZjNjZFwiLCBcIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwSDMwNGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIODBjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0yMjQgNDQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMwNCA2NEg4MFYzODRIMzA0VjY0elwiXVxufTtcbnZhciBmYU1vYmlsZUFsdCA9IGZhTW9iaWxlU2NyZWVuQnV0dG9uO1xudmFyIGZhVm9sdW1lSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2b2x1bWUtaGlnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI2NiwgXCJ2b2x1bWUtdXBcIl0sIFwiZjAyOFwiLCBcIk01MzMuNiAzMi41QzU5OC41IDg1LjIgNjQwIDE2NS44IDY0MCAyNTZzLTQxLjUgMTcwLjctMTA2LjQgMjIzLjVjLTEwLjMgOC40LTI1LjQgNi44LTMzLjgtMy41cy02LjgtMjUuNCAzLjUtMzMuOEM1NTcuNSAzOTguMiA1OTIgMzMxLjIgNTkyIDI1NnMtMzQuNS0xNDIuMi04OC43LTE4Ni4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek00NzMuMSAxMDdjNDMuMiAzNS4yIDcwLjkgODguOSA3MC45IDE0OXMtMjcuNyAxMTMuOC03MC45IDE0OWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzQ3NS4zIDM0MS4zIDQ5NiAzMDEuMSA0OTYgMjU2cy0yMC43LTg1LjMtNTMuMi0xMTEuOGMtMTAuMy04LjQtMTEuOC0yMy41LTMuNS0zMy44czIzLjUtMTEuOCAzMy44LTMuNXptLTYwLjUgNzQuNUM0MzQuMSAxOTkuMSA0NDggMjI1LjkgNDQ4IDI1NnMtMTMuOSA1Ni45LTM1LjQgNzQuNWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzM5My4xIDI4NC40IDQwMCAyNzEgNDAwIDI1NnMtNi45LTI4LjQtMTcuNy0zNy4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6XCJdXG59O1xudmFyIGZhVm9sdW1lVXAgPSBmYVZvbHVtZUhpZ2g7XG52YXIgZmFVc2Vyc1JheXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtcmF5cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5M1wiLCBcIk00MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN1MtMi4zIDMxLjYgNyA0MWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEgN3pNNTk5IDdMNTI3IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpNNyA1MDVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw3IDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bTU5MiAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJ6TTMyMCAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTIxMi4xIDMzNmMtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNGMtLjUtMS40LTEtMi43LTEuNi00Yy05LjQtMjIuMy0yOS44LTM4LjktNTQuMy00M2MtMy45LS43LTcuOS0xLTEyLTFIMjgwYy00LjEgMC04LjEgLjMtMTIgMWMtLjggLjEtMS43IC4zLTIuNSAuNWMtMjQuOSA1LjEtNDUuMSAyMy01My40IDQ2LjV6TTE3NS44IDIyNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS0yNi41IDMyQzExOS45IDI1NiA5NiAyNzkuOSA5NiAzMDkuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2g1Ni4xYzgtMzQuMSAzMi44LTYxLjcgNjUuMi03My42Yy03LjUtNC4xLTE2LjItNi40LTI1LjMtNi40SDE0OS4zem0zNjggODBjMTQuNyAwIDI2LjctMTEuOSAyNi43LTI2LjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNINDIxLjNjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42aDU2LjF6TTQ2NCAyMjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVdhbGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxsZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MmMwLTM1LjMtMjguNy02NC02NC02NEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6TTQxNiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNsaXBib2FyZENoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1jaGVjaycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjQ2Y1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTMwNSAyNzNMMTc3IDQwMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNzkgMzM3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMjcxIDIzOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhRmlsZUF1ZGlvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtYXVkaW8nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzdcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwem0yIDIyNi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43cy0yNC45IDg3LjMtNjIgMTA5LjdjLTcuNiA0LjYtMTcuNCAyLjEtMjItNS40cy0yLjEtMTcuNCA1LjQtMjJDMjY5LjQgNDAxLjUgMjg4IDM3MC45IDI4OCAzMzZzLTE4LjYtNjUuNS00Ni41LTgyLjNjLTcuNi00LjYtMTAtMTQuNC01LjQtMjJzMTQuNC0xMCAyMi01LjR6bS05MS45IDMwLjljNiAyLjUgOS45IDguMyA5LjkgMTQuOFY0MDBjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41TDExMy40IDM3Nkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMxMmMwLTguOCA3LjItMTYgMTYtMTZoMzMuNGwzNS4zLTM1LjNjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXptNTEgMzQuOWM2LjYtNS45IDE2LjctNS4zIDIyLjYgMS4zQzI0OS44IDMwNC42IDI1NiAzMTkuNiAyNTYgMzM2cy02LjIgMzEuNC0xNi4zIDQyLjdjLTUuOSA2LjYtMTYgNy4xLTIyLjYgMS4zcy03LjEtMTYtMS4zLTIyLjZjNS4xLTUuNyA4LjEtMTMuMSA4LjEtMjEuM3MtMy4xLTE1LjctOC4xLTIxLjNjLTUuOS02LjYtNS4zLTE2LjcgMS4zLTIyLjZ6XCJdXG59O1xudmFyIGZhQnVyZ2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cmdlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGFtYnVyZ2VyXCJdLCBcImY4MDVcIiwgXCJNNjEuMSAyMjRDNDUgMjI0IDMyIDIxMSAzMiAxOTQuOWMwLTEuOSAuMi0zLjcgLjYtNS42QzM3LjkgMTY4LjMgNzguOCAzMiAyNTYgMzJzMjE4LjEgMTM2LjMgMjIzLjQgMTU3LjNjLjUgMS45IC42IDMuNyAuNiA1LjZjMCAxNi4xLTEzIDI5LjEtMjkuMSAyOS4xSDYxLjF6TTE0NCAxMjhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMjQwIDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpNMjcyIDk2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6TTE2IDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhINjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4em0xNiA5NmMwLTguOCA3LjItMTYgMTYtMTZINDY0YzguOCAwIDE2IDcuMiAxNiAxNnYxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDAwelwiXVxufTtcbnZhciBmYUhhbWJ1cmdlciA9IGZhQnVyZ2VyO1xudmFyIGZhV3JlbmNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dyZW5jaCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI5NV0sIFwiZjBhZFwiLCBcIk0zNTIgMzIwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwYzAtMTUuMy0yLjItMzAuMS02LjItNDQuMmMtMy4xLTEwLjgtMTYuNC0xMy4yLTI0LjMtNS4zbC03Ni44IDc2LjhjLTMgMy03LjEgNC43LTExLjMgNC43SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2VjExOC42YzAtNC4yIDEuNy04LjMgNC43LTExLjNsNzYuOC03Ni44YzcuOS03LjkgNS40LTIxLjItNS4zLTI0LjNDMzgyLjEgMi4yIDM2Ny4zIDAgMzUyIDBDMjYzLjYgMCAxOTIgNzEuNiAxOTIgMTYwYzAgMTkuMSAzLjQgMzcuNSA5LjUgNTQuNUwxOS45IDM5Ni4xQzcuMiA0MDguOCAwIDQyNi4xIDAgNDQ0LjFDMCA0ODEuNiAzMC40IDUxMiA2Ny45IDUxMmMxOCAwIDM1LjMtNy4yIDQ4LTE5LjlMMjk3LjUgMzEwLjVjMTcgNi4yIDM1LjQgOS41IDU0LjUgOS41ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUJ1Z3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVncycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRkMFwiLCBcIk0xNjQuNSAxMDcuNGwzMy40LTczLjVjNS41LTEyLjEgLjEtMjYuMy0xMS45LTMxLjhzLTI2LjMtLjEtMzEuOCAxMS45TDEyOCA3MS43IDEwMS45IDE0LjFDOTYuNCAyIDgyLjEtMy4zIDcwLjEgMi4xUzUyLjcgMjEuOSA1OC4xIDMzLjlsMzMuNCA3My41Yy0xMC4yIDcuMS0xOC4yIDE3LTIyLjkgMjguNmgtMTdsLTQuMS0yMC43Yy0yLjYtMTMtMTUuMi0yMS40LTI4LjItMTguOFMtMi4xIDExMS43IC41IDEyNC43bDggNDBDMTAuNyAxNzUuOSAyMC42IDE4NCAzMiAxODRINjR2MjMuM2wtMzcuOCA5LjVjLTkuNSAyLjQtMTYuNiAxMC4yLTE3LjkgMTkuOWwtOCA1NmMtMS45IDEzLjEgNy4yIDI1LjMgMjAuNCAyNy4yczI1LjMtNy4yIDI3LjItMjAuNGw1LjctNDAgMTguNC00LjZDODIuNyAyNzQuNiAxMDMuOCAyODggMTI4IDI4OHM0NS4zLTEzLjQgNTYuMS0zMy4ybDE4LjQgNC42IDUuNyA0MGMxLjkgMTMuMSAxNCAyMi4yIDI3LjIgMjAuNHMyMi4yLTE0IDIwLjQtMjcuMmwtOC01NmMtMS40LTkuNy04LjUtMTcuNS0xNy45LTE5LjlMMTkyIDIwNy4zVjE4NGgzMmMxMS40IDAgMjEuMy04LjEgMjMuNS0xOS4zbDgtNDBjMi42LTEzLTUuOC0yNS42LTE4LjgtMjguMnMtMjUuNiA1LjgtMjguMiAxOC44TDIwNC4zIDEzNmgtMTdjLTQuNy0xMS42LTEyLjctMjEuNS0yMi45LTI4LjZ6TTQ5NiAyODYuNWw2NS42LTQ3YzEwLjgtNy43IDEzLjMtMjIuNyA1LjYtMzMuNXMtMjIuNy0xMy4zLTMzLjUtNS42bC01MS40IDM2LjggNi4xLTYyLjljMS4zLTEzLjItOC40LTI0LjktMjEuNi0yNi4ycy0yNC45IDguNC0yNi4yIDIxLjZMNDMyLjggMjUwYy0xMi4zIDEtMjQuMiA1LjYtMzQuMSAxMy4zTDM4NCAyNTQuOGw2LjgtMjBjNC4yLTEyLjYtMi41LTI2LjItMTUtMzAuNHMtMjYuMiAyLjUtMzAuNCAxNWwtMTMuMSAzOC42Yy0zLjcgMTAuOCAuOCAyMi44IDEwLjcgMjguNWwyNy43IDE2TDM1OSAzMjIuNyAzMjEuNSAzMTJjLTkuNC0yLjctMTkuNSAuNi0yNS41IDguM2wtMzQuOSA0NC41Yy04LjIgMTAuNC02LjQgMjUuNSA0LjEgMzMuN3MyNS41IDYuNCAzMy43LTQuMWwyNS0zMS44IDE4LjIgNS4yYy0uNSAyMi42IDExIDQ0LjcgMzIgNTYuOHM0NS45IDExIDY1LjItLjdsMTMuNiAxMy4yLTE1LjEgMzcuNWMtNC45IDEyLjMgMSAyNi4zIDEzLjMgMzEuMnMyNi4zLTEgMzEuMi0xMy4zTDUwMy41IDQ0MGMzLjYtOS4xIDEuNC0xOS40LTUuNi0yNi4ybC0yOC0yNy4xIDExLjYtMjAuMSAyNy43IDE2YzkuOSA1LjcgMjIuNSAzLjcgMzAtNC45TDU2Ni4yIDM0N2M4LjctMTAgNy44LTI1LjEtMi4yLTMzLjlzLTI1LjEtNy44LTMzLjkgMi4ybC0xMy45IDE1LjktMTQuNy04LjVjMS43LTEyLjQtLjItMjUtNS41LTM2LjJ6XCJdXG59O1xudmFyIGZhUnVwZWVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1cGVlLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MzYwLCBcInJ1cGVlXCJdLCBcImYxNTZcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnptMjU2LjUgMTYuNGMtLjkgNiAwIDguNyAuNCA5LjhjLjQgMS4xIDEuNCAyLjYgNC4yIDQuOWM3LjIgNS43IDE4LjcgMTAgMzcuOSAxNi44bDEuMyAuNWMxNiA1LjYgMzguNyAxMy42IDU1LjcgMjguMWM5LjUgOC4xIDE3LjkgMTguNiAyMy4xIDMyLjNjNS4xIDEzLjcgNi4xIDI4LjUgMy44IDQ0Yy00LjIgMjguMS0yMC41IDQ5LjMtNDMuOCA2MC45Yy0yMi4xIDExLTQ4LjEgMTIuNS03My4yIDhsLS4yIDAgMCAwYy05LjMtMS44LTIwLjUtNS43LTI5LjMtOWMtNi0yLjMtMTIuNi00LjktMTcuNy02LjlsMCAwYy0yLjUtMS00LjYtMS44LTYuMy0yLjVjLTE2LjUtNi40LTI0LjYtMjUtMTguMi00MS40czI0LjktMjQuNiA0MS40LTE4LjJjMi42IDEgNS4yIDIgNy45IDMuMWwwIDBjNC44IDEuOSA5LjggMy45IDE1LjQgNmM4LjggMy4zIDE1LjMgNS40IDE4LjcgNmMxNS43IDIuOCAyNi43IC44IDMyLjktMi4zYzUtMi41IDgtNiA5LjEtMTNjMS02LjkgLjItMTAuNS0uNS0xMi4zYy0uNi0xLjctMS44LTMuNi00LjUtNS45Yy02LjktNS44LTE4LjItMTAuNC0zNi45LTE3bC0zLTEuMWMtMTUuNS01LjQtMzctMTMtNTMuMy0yNS45Yy05LjUtNy41LTE4LjMtMTcuNi0yMy43LTMxYy01LjUtMTMuNC02LjYtMjgtNC40LTQzLjJjOC40LTU3LjEgNjctNzggMTE2LjktNjguOWM2LjkgMS4zIDI3LjMgNS44IDM1LjQgOC40YzE2LjkgNS4yIDI2LjMgMjMuMiAyMS4xIDQwLjFzLTIzLjIgMjYuMy00MC4xIDIxLjFjLTQuNy0xLjQtMjIuMy01LjUtMjcuOS02LjVjLTE0LjYtMi43LTI1LjgtLjQtMzIuNiAzLjJjLTYuMyAzLjMtOC45IDcuNi05LjUgMTJ6XCJdXG59O1xudmFyIGZhUnVwZWUgPSBmYVJ1cGVlU2lnbjtcbnZhciBmYUZpbGVJbWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWltYWdlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgXCJmMWM1XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE1MiAzMmM1LjMgMCAxMC4yIDIuNiAxMy4yIDYuOWw4OCAxMjhjMy40IDQuOSAzLjcgMTEuMyAxIDE2LjVzLTguMiA4LjYtMTQuMiA4LjZIMjE2IDE3NiAxMjggODBjLTUuOCAwLTExLjEtMy4xLTEzLjktOC4xcy0yLjgtMTEuMiAuMi0xNi4xbDQ4LTgwYzIuOS00LjggOC4xLTcuOCAxMy43LTcuOHMxMC44IDIuOSAxMy43IDcuOGwxMi44IDIxLjQgNDguMy03MC4yYzMtNC4zIDcuOS02LjkgMTMuMi02Ljl6XCJdXG59O1xudmFyIGZhQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsIFwicXVlc3Rpb24tY2lyY2xlXCJdLCBcImYwNTlcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2OS44IDE2NS4zYzcuOS0yMi4zIDI5LjEtMzcuMyA1Mi44LTM3LjNoNTguM2MzNC45IDAgNjMuMSAyOC4zIDYzLjEgNjMuMWMwIDIyLjYtMTIuMSA0My41LTMxLjcgNTQuOEwyODAgMjY0LjRjLS4yIDEzLTEwLjkgMjMuNi0yNCAyMy42Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYyNTAuNWMwLTguNiA0LjYtMTYuNSAxMi4xLTIwLjhsNDQuMy0yNS40YzQuNy0yLjcgNy42LTcuNyA3LjYtMTMuMWMwLTguNC02LjgtMTUuMS0xNS4xLTE1LjFIMjIyLjZjLTMuNCAwLTYuNCAyLjEtNy41IDUuM2wtLjQgMS4yYy00LjQgMTIuNS0xOC4yIDE5LTMwLjYgMTQuNnMtMTktMTguMi0xNC42LTMwLjZsLjQtMS4yek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUXVlc3Rpb25DaXJjbGUgPSBmYUNpcmNsZVF1ZXN0aW9uO1xudmFyIGZhUGxhbmVEZXBhcnR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtZGVwYXJ0dXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzQ3XSwgXCJmNWIwXCIsIFwiTTM4MSAxMTQuOUwxODYuMSA0MS44Yy0xNi43LTYuMi0zNS4yLTUuMy01MS4xIDIuN0w4OS4xIDY3LjRDNzggNzMgNzcuMiA4OC41IDg3LjYgOTUuMmwxNDYuOSA5NC41TDEzNiAyNDAgNzcuOCAyMTQuMWMtOC43LTMuOS0xOC44LTMuNy0yNy4zIC42TDE4LjMgMjMwLjhjLTkuMyA0LjctMTEuOCAxNi44LTUgMjQuN2w3My4xIDg1LjNjNi4xIDcuMSAxNSAxMS4yIDI0LjMgMTEuMkgyNDguNGM1IDAgOS45LTEuMiAxNC4zLTMuNEw1MzUuNiAyMTIuMmM0Ni41LTIzLjMgODIuNS02My4zIDEwMC44LTExMkM2NDUuOSA3NSA2MjcuMiA0OCA2MDAuMiA0OEg1NDIuOGMtMjAuMiAwLTQwLjIgNC44LTU4LjIgMTRMMzgxIDExNC45ek0wIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS4zLTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTEyIDMxNi44VjEyOGgtLjdsLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4ybC04OS43IDcyLjYtMjUuOC0yMC4zIDgxLjgtNjYuMmMtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC0zNS41IDIzLjdMMzguOCA1LjF6TTQxMy42IDQyMS45TDEyOCAxOTYuOFYzNTJoMjguMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljLjgtLjggMS41LTEuNyAyLjItMi42ek05NiAxNzEuNkw0MC42IDEyOEgxNmMtOC44IDAtMTYgNy4yLTE2IDE2VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNzEuNnpNNDggMzIwYTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpNNTQ0IDEyOFYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNkg1NDR6bTMyIDIwOGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYUJvb2tCb29rbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLWJvb2ttYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlMGJiXCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBoOTZWMTkwLjdjMCAxMy40IDE1LjUgMjAuOSAyNiAxMi41TDI3MiAxNjBsNTQgNDMuMmMxMC41IDguNCAyNiAuOSAyNi0xMi41VjBoMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUNvZGVCcmFuY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1icmFuY2gnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYxMjZcIiwgXCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM3Y4Ny44YzE4LjgtMTAuOSA0MC43LTE3LjEgNjQtMTcuMWg5NmMzNS4zIDAgNjQtMjguNyA2NC02NHYtNi43QzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxNjBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhIMTc2Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY2LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuM2MwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zVjM1MiAxNTMuM0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIzMiAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTgwIDQ1NmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhSGF0Q293Ym95ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhdC1jb3dib3knLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY4YzBcIiwgXCJNMzIwIDY0YzE0LjQgMCAyMi4zLTcgMzAuOC0xNC40QzM2MC40IDQxLjEgMzcwLjcgMzIgMzkyIDMyYzQ5LjMgMCA4NC40IDE1Mi4yIDk3LjkgMjIxLjlDNDQ3LjggMjcyLjEgMzkwLjkgMjg4IDMyMCAyODhzLTEyNy44LTE1LjktMTY5LjktMzQuMUMxNjMuNiAxODQuMiAxOTguNyAzMiAyNDggMzJjMjEuMyAwIDMxLjYgOS4xIDQxLjIgMTcuNkMyOTcuNyA1NyAzMDUuNiA2NCAzMjAgNjR6TTExMS4xIDI3MC43YzQ3LjIgMjQuNSAxMTcuNSA0OS4zIDIwOSA0OS4zczE2MS44LTI0LjggMjA4LjktNDkuM2MyNC44LTEyLjkgNDkuOC0yOC4zIDcwLjEtNDcuN2M3LjktNy45IDIwLjItOS4yIDI5LjYtMy4zYzkuNSA1LjkgMTMuNSAxNy45IDkuOSAyOC41Yy0xMy41IDM3LjctMzguNCA3Mi4zLTY2LjEgMTAwLjZDNTIzLjcgMzk4LjkgNDQzLjYgNDQ4IDMyMCA0NDhzLTIwMy42LTQ5LjEtMjUyLjUtOTkuMkMzOS44IDMyMC40IDE0LjkgMjg1LjggMS40IDI0OC4xYy0zLjYtMTAuNiAuNC0yMi42IDkuOS0yOC41YzkuNS01LjkgMjEuNy00LjUgMjkuNiAzLjNjMjAuNCAxOS40IDQ1LjMgMzQuOCA3MC4xIDQ3Ljd6XCJdXG59O1xudmFyIGZhQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRjOFwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZINzJ2NjRIMFYyODhjNTMgMCA5NiA0MyA5NiA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC01MyA0My05NiA5Ni05NlYxNjBINTA0Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyek00NTYgOTZ2NjRIMzc2Vjk2aDgwek0zMjggOTZ2NjRIMjQ4Vjk2aDgwek0yMDAgOTZ2NjRIMTIwVjk2aDgwelwiXVxufTtcbnZhciBmYVBob25lRmxpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG9uZS1mbGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzgxLCBcInBob25lLWFsdFwiXSwgXCJmODc5XCIsIFwiTTM0Ny4xIDI0LjZjNy43LTE4LjYgMjgtMjguNSA0Ny40LTIzLjJsODggMjRDNDk5LjkgMzAuMiA1MTIgNDYgNTEyIDY0YzAgMjQ3LjQtMjAwLjYgNDQ4LTQ0OCA0NDhjLTE4IDAtMzMuOC0xMi4xLTM4LjYtMjkuNWwtMjQtODhjLTUuMy0xOS40IDQuNi0zOS43IDIzLjItNDcuNGw5Ni00MGMxNi4zLTYuOCAzNS4yLTIuMSA0Ni4zIDExLjZMMjA3LjMgMzY4YzcwLjQtMzMuMyAxMjcuNC05MC4zIDE2MC43LTE2MC43TDMxOC43IDE2N2MtMTMuNy0xMS4yLTE4LjQtMzAtMTEuNi00Ni4zbDQwLTk2elwiXVxufTtcbnZhciBmYVBob25lQWx0ID0gZmFQaG9uZUZsaXA7XG52YXIgZmFUcnVja0Zyb250ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZyb250JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMmI3XCIsIFwiTTAgODBDMCAzNS44IDM1LjggMCA4MCAwSDQzMmM0NC4yIDAgODAgMzUuOCA4MCA4MFYzNjhjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NHY0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgxMjh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQzMkMxMi42IDQxNy40IDAgMzk0LjIgMCAzNjhWODB6bTEyOS45IDcyLjJMMTEyIDIyNEg0MDBsLTE3LjktNzEuOEMzNzguNSAxMzggMzY1LjcgMTI4IDM1MSAxMjhIMTYxYy0xNC43IDAtMjcuNSAxMC0zMSAyNC4yek0xMjggMzIwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQ2F0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhdCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODAwOF0sIFwiZjZiZVwiLCBcIk0zMjAgMTkyaDE3LjFjMjIuMSAzOC4zIDYzLjUgNjQgMTEwLjkgNjRjMTEgMCAyMS44LTEuNCAzMi00djQgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMzOS4yTDI4MCA0NDhoNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTkyYy01MyAwLTk2LTQzLTk2LTk2VjE5Mi41YzAtMTYuMS0xMi0yOS44LTI4LTMxLjhsLTcuOS0xYy0xNy41LTIuMi0zMC0xOC4yLTI3LjgtMzUuN3MxOC4yLTMwIDM1LjctMjcuOGw3LjkgMWM0OCA2IDg0LjEgNDYuOCA4NC4xIDk1LjN2ODUuM2MzNC40LTUxLjcgOTMuMi04NS44IDE2MC04NS44em0xNjAgMjYuNXYwYy0xMCAzLjUtMjAuOCA1LjUtMzIgNS41Yy0yOC40IDAtNTQtMTIuNC03MS42LTMyaDBjLTMuNy00LjEtNy04LjUtOS45LTEzLjJDMzU3LjMgMTY0IDM1MiAxNDYuNiAzNTIgMTI4djBWMzIgMTIgMTAuN0MzNTIgNC44IDM1Ni43IC4xIDM2Mi42IDBoLjJjMy4zIDAgNi40IDEuNiA4LjQgNC4ybDAgLjFMMzg0IDIxLjNsMjcuMiAzNi4zTDQxNiA2NGg2NGw0LjgtNi40TDUxMiAyMS4zIDUyNC44IDQuM2wwLS4xYzItMi42IDUuMS00LjIgOC40LTQuMmguMkM1MzkuMyAuMSA1NDQgNC44IDU0NCAxMC43VjEyIDMydjk2YzAgMTcuMy00LjYgMzMuNi0xMi42IDQ3LjZjLTExLjMgMTkuOC0yOS42IDM1LjItNTEuNCA0Mi45ek00MzIgMTI4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFiXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzguMiAwIDE2LjMtLjYgMjQuMi0xLjhjLTIyLjItMTYuMi00MC40LTM3LjUtNTMtNjIuMkgzMjBWMzY4IDI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFUcnVja0ZpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThkXCIsIFwiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0SDMyMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJoNTEuOGMyNS4zIDAgNDguMiAxNC45IDU4LjUgMzhsNTIuOCAxMTguOGMuNSAxLjEgLjkgMi4xIDEuMyAzLjJINTQ0YzM1LjMgMCA2NCAyOC43IDY0IDY0djMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJWOTZ6TTM4NCAyMjRoODUuOWwtNDIuNy05NkgzODR2OTZ6TTE2MCA0MzJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG52YXIgZmFSb3V0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3V0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjRkN1wiLCBcIk01MTIgOTZjMCA1MC4yLTU5LjEgMTI1LjEtODQuNiAxNTVjLTMuOCA0LjQtOS40IDYuMS0xNC41IDVIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDEzOS42YzguNy05LjkgMTkuMy0yMi42IDMwLTM2LjhjNi4zLTguNCAxMi44LTE3LjYgMTktMjcuMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2aDM5LjhjLTIxLTMxLjUtMzkuOC02Ny43LTM5LjgtOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTE3LjEgNDg5LjFjLTMuOCA0LjMtNy4yIDguMS0xMC4xIDExLjNsLTEuOCAyLS4yLS4yYy02IDQuNi0xNC42IDQtMjAtMS44QzU5LjggNDczIDAgNDAyLjUgMCAzNTJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDMwLTIxLjEgNjctNDMuNSA5Ny45Yy0xMC43IDE0LjctMjEuNyAyOC0zMC44IDM4LjVsLS42IC43ek0xMjggMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTQxNiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUNsaXBib2FyZFF1ZXN0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1xdWVzdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRlM1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTEwNS44IDIyOS4zYzcuOS0yMi4zIDI5LjEtMzcuMyA1Mi44LTM3LjNoNTguM2MzNC45IDAgNjMuMSAyOC4zIDYzLjEgNjMuMWMwIDIyLjYtMTIuMSA0My41LTMxLjcgNTQuOEwyMTYgMzI4LjRjLS4yIDEzLTEwLjkgMjMuNi0yNCAyMy42Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYzMTQuNWMwLTguNiA0LjYtMTYuNSAxMi4xLTIwLjhsNDQuMy0yNS40YzQuNy0yLjcgNy42LTcuNyA3LjYtMTMuMWMwLTguNC02LjgtMTUuMS0xNS4xLTE1LjFIMTU4LjZjLTMuNCAwLTYuNCAyLjEtNy41IDUuM2wtLjQgMS4yYy00LjQgMTIuNS0xOC4yIDE5LTMwLjYgMTQuNnMtMTktMTguMi0xNC42LTMwLjZsLjQtMS4yek0xNjAgNDE2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUGFub3JhbWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFub3JhbWEnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUyMDlcIiwgXCJNNDUuNiAzMkMyMC40IDMyIDAgNTIuNCAwIDc3LjZWNDM0LjRDMCA0NTkuNiAyMC40IDQ4MCA0NS42IDQ4MGM1LjEgMCAxMC0uOCAxNC43LTIuNEM3NC42IDQ3Mi44IDE3Ny42IDQ0MCAzMjAgNDQwczI0NS40IDMyLjggMjU5LjYgMzcuNmM0LjcgMS42IDkuNyAyLjQgMTQuNyAyLjRjMjUuMiAwIDQ1LjYtMjAuNCA0NS42LTQ1LjZWNzcuNkM2NDAgNTIuNCA2MTkuNiAzMiA1OTQuNCAzMmMtNSAwLTEwIC44LTE0LjcgMi40QzU2NS40IDM5LjIgNDYyLjQgNzIgMzIwIDcyUzc0LjYgMzkuMiA2MC40IDM0LjRDNTUuNiAzMi44IDUwLjcgMzIgNDUuNiAzMnpNOTYgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTI3MiAwYzcuOSAwIDE1LjQgMy45IDE5LjggMTAuNUw1MTIuMyAzNTNjNS40IDggNS42IDE4LjQgLjQgMjYuNXMtMTQuNyAxMi4zLTI0LjIgMTAuN0M0NDIuNyAzODIuNCAzODUuMiAzNzYgMzIwIDM3NmMtNjUuNiAwLTEyMy40IDYuNS0xNjkuMyAxNC40Yy05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTk3LjMgMjY1YzQuNi01LjcgMTEuNC05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjYuNCAzMy4xIDg3LTEyNy42YzQuNS02LjYgMTEuOS0xMC41IDE5LjgtMTAuNXpcIl1cbn07XG52YXIgZmFDb21tZW50TWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21tZW50LW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZjVcIiwgXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0yMjQgMTYwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhoNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyODh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMjRjMC04LjggNy4yLTE2IDE2LTE2aDQ4VjE2MHpcIl1cbn07XG52YXIgZmFUZWV0aE9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVldGgtb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjYyZlwiLCBcIk05NiAzMkM0MyAzMiAwIDc1IDAgMTI4djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC01My00My05Ni05Ni05Nkg5NnpNMjI0IDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djU2YzAgMTMuMy0xMC43IDI0LTI0IDI0SDIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em04MCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djU2YzAgMTMuMy0xMC43IDI0LTI0IDI0SDMyOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTQ0ek05NiAxMjhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHptMzM2IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxNzZ6TTk2IDQ4MEg0ODBjNTMgMCA5Ni00MyA5Ni05NlYzNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgNTMgNDMgOTYgOTYgOTZ6bTAtNjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyNGMwIDI2LjUtMjEuNSA0OC00OCA0OHptODAtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4em0xNzYgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyNGMwIDI2LjUtMjEuNSA0OC00OCA0OHptODAtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4elwiXVxufTtcbnZhciBmYUZpbGVDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWNpcmNsZS1taW51cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlZFwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyMjRWMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NHYzOC42QzMxMC4xIDIxOS41IDI1NiAyODcuNCAyNTYgMzY4YzAgNTkuMSAyOS4xIDExMS4zIDczLjcgMTQzLjNjLTMuMiAuNS02LjQgLjctOS43IC43SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTI4OCAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0OTZjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYVRhZ3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFncycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAyY1wiLCBcIk0zNDUgMzkuMUw0NzIuOCAxNjguNGM1Mi40IDUzIDUyLjQgMTM4LjIgMCAxOTEuMkwzNjAuOCA0NzIuOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDQzOC42IDMyNS45YzMzLjktMzQuMyAzMy45LTg5LjQgMC0xMjMuN0wzMTAuOSA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMCAyMjkuNVY4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMkgxOTcuNWMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2wxNjggMTY4YzI1IDI1IDI1IDY1LjUgMCA5MC41TDI3Ny4zIDQ0Mi43Yy0yNSAyNS02NS41IDI1LTkwLjUgMGwtMTY4LTE2OEM2LjcgMjYyLjcgMCAyNDYuNSAwIDIyOS41ek0xNDQgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xudmFyIGZhV2luZUdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmUtZ2xhc3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjc4NjNdLCBcImY0ZTNcIiwgXCJNMzIuMSAyOS4zQzMzLjUgMTIuOCA0Ny40IDAgNjQgMEgyNTZjMTYuNiAwIDMwLjUgMTIuOCAzMS45IDI5LjNsMTQgMTY4LjRjNiA3Mi00Mi41IDEzNS4yLTEwOS45IDE1MC42VjQ0OGg0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxNjAgODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNDhWMzQ4LjRDNjAuNiAzMzMgMTIuMSAyNjkuOCAxOC4xIDE5Ny44bDE0LTE2OC40em01NiA5OC43SDIzMS45bC01LjMtNjRIOTMuNGwtNS4zIDY0elwiXVxufTtcbnZhciBmYUZvcndhcmRGYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvcndhcmQtZmFzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTcsIFwiZmFzdC1mb3J3YXJkXCJdLCBcImYwNTBcIiwgXCJNMTguNCA0NDVjMTEuMiA1LjMgMjQuNSAzLjYgMzQuMS00LjRMMjI0IDI5Ny43VjQxNmMwIDEyLjQgNy4yIDIzLjcgMTguNCAyOXMyNC41IDMuNiAzNC4xLTQuNEw0NDggMjk3LjdWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjE0LjNMMjc2LjUgNzEuNGMtOS41LTcuOS0yMi44LTkuNy0zNC4xLTQuNFMyMjQgODMuNiAyMjQgOTZWMjE0LjNMNTIuNSA3MS40Yy05LjUtNy45LTIyLjgtOS43LTM0LjEtNC40UzAgODMuNiAwIDk2VjQxNmMwIDEyLjQgNy4yIDIzLjcgMTguNCAyOXpcIl1cbn07XG52YXIgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7XG52YXIgZmFGYWNlTWVoQmxhbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1tZWgtYmxhbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjYsIFwibWVoLWJsYW5rXCJdLCBcImY1YTRcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yMDguNC00OGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xMjggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYU1laEJsYW5rID0gZmFGYWNlTWVoQmxhbms7XG52YXIgZmFTcXVhcmVQYXJraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wYXJraW5nJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3MzU5LCBcInBhcmtpbmdcIl0sIFwiZjU0MFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTE5MiAyNTZoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkydjY0em00OCA2NEgxOTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjg4IDE2OGMwLTIyLjEgMTcuOS00MCA0MC00MGg3MmM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnpcIl1cbn07XG52YXIgZmFQYXJraW5nID0gZmFTcXVhcmVQYXJraW5nO1xudmFyIGZhSG91c2VTaWduYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2Utc2lnbmFsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDEyXCIsIFwiTTM1Ny43IDguNWMtMTIuMy0xMS4zLTMxLjItMTEuMy00My40IDBsLTIwOCAxOTJjLTkuNCA4LjYtMTIuNyAyMi04LjUgMzRjODcuMSAyNS4zIDE1NS42IDk0LjIgMTgwLjMgMTgxLjZINDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmgzMmMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LjEtMzUuMmwtMjA4LTE5MnpNMjg4IDIwOGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDh6TTI0IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGMxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTEyOC4xLTEwMy45LTIzMi0yMzItMjMyem04IDI1NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTAgMzc2YzAgMTMuMyAxMC43IDI0IDI0IDI0YzQ4LjYgMCA4OCAzOS40IDg4IDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUJhcnNQcm9ncmVzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXJzLXByb2dyZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0YXNrcy1hbHRcIl0sIFwiZjgyOFwiLCBcIk00NDggMTYwSDMyMFYxMjhINDQ4djMyek00OCA2NEMyMS41IDY0IDAgODUuNSAwIDExMnY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek00NDggMzUydjMySDE5MlYzNTJINDQ4ek00OCAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6XCJdXG59O1xudmFyIGZhVGFza3NBbHQgPSBmYUJhcnNQcm9ncmVzcztcbnZhciBmYUZhdWNldERyaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmF1Y2V0LWRyaXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2ODhdLCBcImUwMDZcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDRsOTYtMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjU2IDg0bC0zMS0zLjktMS0uMS0xIC4xTDE5MiA4NCA5NiA5NkM3OC4zIDk2IDY0IDgxLjcgNjQgNjRzMTQuMy0zMiAzMi0zMmw5NiAxMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZsMjIuNi0yMi42YzYtNiAxNC4xLTkuNCAyMi42LTkuNEgxOTJWMTE2LjJsMzItNCAzMiA0VjE2MGgxOC43YzguNSAwIDE2LjYgMy40IDIyLjYgOS40TDMyMCAxOTJoMzJjODguNCAwIDE2MCA3MS42IDE2MCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJINDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMtMTQuMy0zMi0zMi0zMkgzMTUuOWMtMjAuMiAyOS01My45IDQ4LTkxLjkgNDhzLTcxLjctMTktOTEuOS00OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjI0ek00MzYuOCA0MjMuNGMxLjktNC41IDYuMy03LjQgMTEuMi03LjRzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnYtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMWwxOC4yLTQyLjR6XCJdXG59O1xudmFyIGZhQ2FydEZsYXRiZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1mbGF0YmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJkb2xseS1mbGF0YmVkXCJdLCBcImY0NzRcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NEg0OGM4LjggMCAxNiA3LjIgMTYgMTZWMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwaDE4LjdjLTEuOCA1LTIuNyAxMC40LTIuNyAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2SDQ1MC43Yy0xLjggNS0yLjcgMTAuNC0yLjcgMTZjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWODBDMTI4IDM1LjggOTIuMiAwIDQ4IDBIMzJ6TTE5MiA4MFYyNzJjMCAyNi41IDIxLjUgNDggNDggNDhINTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ2NFYxNzZjMCA1LjktMy4yIDExLjMtOC41IDE0LjFzLTExLjUgMi41LTE2LjQtLjhMNDAwIDE2My4ybC0zOS4xIDI2LjFjLTQuOSAzLjMtMTEuMiAzLjYtMTYuNCAuOHMtOC41LTguMi04LjUtMTQuMVYzMkgyNDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4elwiXVxufTtcbnZhciBmYURvbGx5RmxhdGJlZCA9IGZhQ2FydEZsYXRiZWQ7XG52YXIgZmFCYW5TbW9raW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhbi1zbW9raW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg1LCBcInNtb2tpbmctYmFuXCJdLCBcImY1NGRcIiwgXCJNOTkuNSAxNDQuOEwxNzguNyAyMjRsOTYgOTYgOTIuNSA5Mi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4QzE1MCA0NDggNjQgMzYyIDY0IDI1NmMwLTQxLjUgMTMuMS03OS45IDM1LjUtMTExLjJ6TTMzMy4zIDI4OGwtMzItMzJIMzg0djMySDMzMy4zem0zMiAzMkg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjY5LjNMMTQ0LjggOTkuNUMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MmMwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTZjMCAyNi41IDIxLjUgNDggNDggNDhoMzJjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzA0Yy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI5LjUgMzIwbC05Ni05NkgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZIMjI5LjV6XCJdXG59O1xudmFyIGZhU21va2luZ0JhbiA9IGZhQmFuU21va2luZztcbnZhciBmYVRlcm1pbmFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rlcm1pbmFsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTIwXCIsIFwiTTkuNCA4Ni42Qy0zLjEgNzQuMS0zLjEgNTMuOSA5LjQgNDEuNHMzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE3OC43IDI1NiA5LjQgODYuNnpNMjU2IDQxNkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYU1vYmlsZUJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUtYnV0dG9uJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMTBiXCIsIFwiTTgwIDBDNDQuNyAwIDE2IDI4LjcgMTYgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMwNGMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg4MHpNMTkyIDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhSG91c2VNZWRpY2FsRmxhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1tZWRpY2FsLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTRcIiwgXCJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJINjI0YzguOCAwIDE2IDcuMiAxNiAxNlYxNzZjMCA4LjgtNy4yIDE2LTE2IDE2SDUxMlY1MTJINDQ4VjE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjc2LjggMzkuN0w0MTYgMTU5VjUxMmgxbC0uMiAwSDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhIMzJjLTEzLjQgMC0yNS40LTguMy0zMC0yMC45cy0xLTI2LjcgOS4yLTM1LjRsMjI0LTE5MmMxMi0xMC4zIDI5LjctMTAuMyA0MS43IDB6TTIyNCAyMDh2NDhIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzIwaDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDI4OFYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYUJhc2tldFNob3BwaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhc2tldC1zaG9wcGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic2hvcHBpbmctYmFza2V0XCJdLCBcImYyOTFcIiwgXCJNMjUzLjMgMzUuMWM2LjEtMTEuOCAxLjUtMjYuMy0xMC4yLTMyLjRzLTI2LjMtMS41LTMyLjQgMTAuMkwxMTcuNiAxOTJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJMODMuOSA0NjMuNUM5MSA0OTIgMTE2LjYgNTEyIDE0NiA1MTJINDMwYzI5LjQgMCA1NS0yMCA2Mi4xLTQ4LjVMNTQ0IDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NTguNEwzNjUuMyAxMi45QzM1OS4yIDEuMiAzNDQuNy0zLjQgMzMyLjkgMi43cy0xNi4zIDIwLjYtMTAuMiAzMi40TDQwNC4zIDE5MkgxNzEuN0wyNTMuMyAzNS4xek0xOTIgMzA0djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em05Ni0xNmM4LjggMCAxNiA3LjIgMTYgMTZ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzA0YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZztcbnZhciBmYVRhcGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFwZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjRkYlwiLCBcIk0zODAuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MEM0NDggMTMyLjMgMzQ3LjcgMzIgMjI0IDMyUzAgMTMyLjMgMCAyNTZTMTAwLjMgNDgwIDIyNCA0ODBINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM4MC44ek0yMjQgMTYwYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem02NCA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xudmFyIGZhQnVzU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cy1zaW1wbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJ1cy1hbHRcIl0sIFwiZjU1ZVwiLCBcIk0yMjQgMEMzNDguOCAwIDQ0OCAzNS4yIDQ0OCA4MFY5NiA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0NDhIMTI4djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NiA4MEMwIDM1LjIgOTkuMiAwIDIyNCAwek02NCAxMjhWMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04MCA0MDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0yODggMGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQnVzQWx0ID0gZmFCdXNTaW1wbGU7XG52YXIgZmFFeWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgXCJmMDZlXCIsIFwiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNkM0OC42IDE1NiAxNy4zIDIwOCAyLjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42QzE3LjMgMzA0IDQ4LjYgMzU2IDk1LjQgMzk5LjRDMTQyLjUgNDQzLjIgMjA3LjIgNDgwIDI4OCA0ODBzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjFjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDMzLjUgNjguOCAzNjguOCAzMiAyODggMzJ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy03LjEgMC0xMy45LTEuMi0yMC4zLTMuM2MtNS41LTEuOC0xMS45IDEuNi0xMS43IDcuNGMuMyA2LjkgMS4zIDEzLjggMy4yIDIwLjdjMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM3pcIl1cbn07XG52YXIgZmFGYWNlU2FkQ3J5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utc2FkLWNyeScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NywgXCJzYWQtY3J5XCJdLCBcImY1YjNcIiwgXCJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42VjI4OGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlY0NzcuOEM1MS41IDQzMy41IDAgMzUwLjggMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgOTQuOC01MS41IDE3Ny41LTEyOCAyMjEuOFYyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDkzLjR6TTE5NS4yIDIzMy42YzUuMyA3LjEgMTUuMyA4LjUgMjIuNCAzLjJzOC41LTE1LjMgMy4yLTIyLjRjLTMwLjQtNDAuNS05MS4yLTQwLjUtMTIxLjYgMGMtNS4zIDcuMS0zLjkgMTcuMSAzLjIgMjIuNHMxNy4xIDMuOSAyMi40LTMuMmMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMHptMTIxLjYgMGMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMGM1LjMgNy4xIDE1LjMgOC41IDIyLjQgMy4yczguNS0xNS4zIDMuMi0yMi40Yy0zMC40LTQwLjUtOTEuMi00MC41LTEyMS42IDBjLTUuMyA3LjEtMy45IDE3LjEgMy4yIDIyLjRzMTcuMSAzLjkgMjIuNC0zLjJ6TTIwOCAzMzZ2MzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OFYzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6XCJdXG59O1xudmFyIGZhU2FkQ3J5ID0gZmFGYWNlU2FkQ3J5O1xudmFyIGZhQXVkaW9EZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhdWRpby1kZXNjcmlwdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjI5ZVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIxMy41IDE3My4zbDcyIDE0NGM1LjkgMTEuOSAxLjEgMjYuMy0xMC43IDMyLjJzLTI2LjMgMS4xLTMyLjItMTAuN2wtOS40LTE4LjlIMTUwLjlsLTkuNCAxOC45Yy01LjkgMTEuOS0yMC4zIDE2LjctMzIuMiAxMC43cy0xNi43LTIwLjMtMTAuNy0zMi4ybDcyLTE0NGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zem0tLjQgMTA2LjZMMTkyIDIzNy43bC0yMS4xIDQyLjJoNDIuMnpNMzA0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg1NmM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NkgzMjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE4NHptNDggMjR2OTZoMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhIMzUyelwiXVxufTtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXRvLXBlcnNvbicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU0Y1wiLCBcIk03MSAxMi41Yy04LjYgMS0xNSA4LjItMTUgMTYuOGMwIDkuMyA3LjUgMTYuOCAxNi43IDE2LjlIMTg0LjFjOC44LS4xIDE1LjktNy4yIDE1LjktMTZWMTZjMC05LjUtOC4zLTE3LTE3LjgtMTUuOUw3MSAxMi41ek0xODkuNSA3OC4xSDY2LjVDNjQuOSA4My44IDY0IDg5LjggNjQgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTkyYzEuOCAwIDMuNS0uMSA1LjItLjRMNTMgMjA4LjZDNDAuMSAyMjAuMyAzMiAyMzcuMiAzMiAyNTZ6bTE5MC4yIDQyLjVjMS4xLTMuMyAxLjgtNi44IDEuOC0xMC41VjI1NmMwLTM1LjMtMjguNy02NC02NC02NEg5NmMtMy43IDAtNy40IC4zLTEwLjkgLjlMMjIyLjIgMjk4LjV6TTM4NCAxNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bS0zMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJINDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1NmMwLTM1LjMtMjguNy02NC02NC02NEgzNTJ6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZ2MzJsLTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODggMHYzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMi45IDEzLjUgOC4xIDE4LjFsNjQgNTYuNGM3LjEgNi4yIDE3LjEgNy44IDI1LjcgMy45czE0LjEtMTIuNCAxNC4xLTIxLjlsMC0zMi40IDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC0zMmMwLTkuNC01LjUtMTgtMTQuMS0yMS45cy0xOC42LTIuNC0yNS43IDMuOGwtNjQgNTZjLTUuMiA0LjUtOC4yIDExLjEtOC4yIDE4elwiXVxufTtcbnZhciBmYUZpbGVTaGllbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1zaGllbGQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZjBcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2NDdsLTkyLjggMzcuMWMtMjEuMyA4LjUtMzUuMiAyOS4xLTM1LjIgNTJjMCA1Ni42IDE4LjkgMTQ4IDk0LjIgMjA4LjNjLTkgNC44LTE5LjMgNy42LTMwLjIgNy42SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6bTM5LjEgOTcuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOFY0NjEuN2M2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl1cbn07XG52YXIgZmFVc2VyU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjUwNlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM1My4zIDI1MS42QzQwNy45IDIzNyA0NDggMTg3LjIgNDQ4IDEyOEM0NDggNTcuMyAzOTAuNyAwIDMyMCAwQzI1MC4yIDAgMTkzLjUgNTUuOCAxOTIgMTI1LjJMMzguOCA1LjF6TTI2NC4zIDMwNC4zQzE3MC41IDMwOS40IDk2IDM4Ny4yIDk2IDQ4Mi4zYzAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43SDUxNC4zYzMuOSAwIDcuNi0uNyAxMS0yLjFsLTI2MS0yMDUuNnpcIl1cbn07XG52YXIgZmFQZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk0XSwgXCJmMzA0XCIsIFwiTTM2Mi43IDE5LjNMMzE0LjMgNjcuNyA0NDQuMyAxOTcuN2w0OC40LTQ4LjRjMjUtMjUgMjUtNjUuNSAwLTkwLjVMNDUzLjMgMTkuM2MtMjUtMjUtNjUuNS0yNS05MC41IDB6bS03MSA3MUw1OC42IDMyMy41Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODEuMkMtMS41IDQ4OS43IC44IDQ5OC44IDcgNTA1czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMNDIxLjcgMjIwLjMgMjkxLjcgOTAuM3pcIl1cbn07XG52YXIgZmFUb3dlck9ic2VydmF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rvd2VyLW9ic2VydmF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTg2XCIsIFwiTTI0MS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlDNDM5IDEzNy41IDQyNy43IDE0NCA0MTYgMTQ0djgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyaC00LjlsMzIgMTkySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQuNWMtLjQgMC0uOCAwLTEuMSAwSDEyOC42Yy0uNCAwLS44IDAtMS4xIDBIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNjguOWwzMi0xOTJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNDRjLTExLjcgMC0yMy02LjUtMjguNi0xNy43Yy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzE0LjUgNDQ4TDI1NiAzOTkuMiAxOTcuNSA0NDhoMTE3ek0xOTcuOCAyNTZsLTQuNyAyOC4zTDI1NiAzMzYuOGw2Mi45LTUyLjVMMzE0LjIgMjU2SDE5Ny44em0tMTMuOSA4My4ybC0xMS4yIDY3TDIxOC41IDM2OGwtMzQuNi0yOC44ek0yOTMuNSAzNjhsNDUuOCAzOC4xLTExLjItNjdMMjkzLjUgMzY4ek0xNzYgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZ6XCJdXG59O1xudmFyIGZhRmlsZUNvZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jb2RlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMWM5XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTUzIDI4OWwtMzEgMzEgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3MSAzMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDQ4LTQ4YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpNMjY1IDI1NWw0OCA0OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNDggNDhjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMHpcIl1cbn07XG52YXIgZmFTaWduYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbmFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjQ2LCBcInNpZ25hbC01XCIsIFwic2lnbmFsLXBlcmZlY3RcIl0sIFwiZjAxMlwiLCBcIk01NzYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ0OCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgMjI0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMTkyIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiA0MTZ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhU2lnbmFsNSA9IGZhU2lnbmFsO1xudmFyIGZhU2lnbmFsUGVyZmVjdCA9IGZhU2lnbmFsO1xudmFyIGZhQnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODY1M10sIFwiZjIwN1wiLCBcIk0yODggMEM0MjIuNCAwIDUxMiAzNS4yIDUxMiA4MFY5NmwwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMydjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4SDE5MnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJoMFY5NmgwVjgwQzY0IDM1LjIgMTUzLjYgMCAyODggMHpNMTI4IDE2MHY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyNzJWMTI4SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMwNCAyODhINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMDRWMjg4ek0xNDQgNDAwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMjg4IDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zODQgODBjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzNjhjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTAxXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w0NTQuNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDMyIDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDA5LjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MzIgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFIb3VzZUNoaW1uZXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2hpbW5leScsXG4gIGljb246IFs1NzYsIDUxMiwgWzYzNDk5LCBcImhvbWUtbGdcIl0sIFwiZTNhZlwiLCBcIk01NDMuOCAyODcuNmMxNyAwIDMyLTE0IDMyLTMyLjFjMS05LTMtMTctMTEtMjRMNTEyIDE4NVY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjM2LjdMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjQgMjRjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMjQgMzIuNWMxLjQgMCAyLjggMCA0LjItLjFjMS4xIC4xIDIuMiAuMSAzLjMgLjFoMTZjMjIuMSAwIDQwLTE3LjkgNDAtNDBWNDU1LjhjLjMtMi42IC41LTUuMyAuNS04LjFsLS43LTE2MC4yaDMyelwiXVxufTtcbnZhciBmYUhvbWVMZyA9IGZhSG91c2VDaGltbmV5O1xudmFyIGZhV2luZG93TWF4aW1pemUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LW1heGltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgXCJmMmQwXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNOTYgOTZINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUZhY2VGcm93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWZyb3duJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgXCJmcm93blwiXSwgXCJmMTE5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNTkuMyAzODguN2MtMi42IDguNC0xMS42IDEzLjItMjAgMTAuNXMtMTMuMi0xMS42LTEwLjUtMjBDMTQ1LjIgMzI2LjEgMTk2LjMgMjg4IDI1NiAyODhzMTEwLjggMzguMSAxMjcuMyA5MS4zYzIuNiA4LjQtMi4xIDE3LjQtMTAuNSAyMHMtMTcuNC0yLjEtMjAtMTAuNUMzNDAuNSAzNDkuNCAzMDIuMSAzMjAgMjU2IDMyMHMtODQuNSAyOS40LTk2LjcgNjguN3pNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhRnJvd24gPSBmYUZhY2VGcm93bjtcbnZhciBmYVByZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1YjFcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJWMTkydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjI0aDUwLjdsMTI4IDEyOEwxMzcuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMzk3LjMgMzkzLjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMzMuMyAzNTIgNDM4LjYgMjQ2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjg4IDMwNi43bC04NS44LTg1LjhDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEgzMnpNMTc2IDE2MEg2NFY2NEgxNzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdXG59O1xudmFyIGZhU2hvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJzdG9yZS1hbHRcIl0sIFwiZjU0ZlwiLCBcIk0zNi44IDE5Mkg2MDMuMmMyMC4zIDAgMzYuOC0xNi41IDM2LjgtMzYuOGMwLTcuMy0yLjItMTQuNC02LjItMjAuNEw1NTguMiAyMS40QzU0OS4zIDggNTM0LjQgMCA1MTguMyAwSDEyMS43Yy0xNiAwLTMxIDgtMzkuOSAyMS40TDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNNjQgMjI0VjM4NHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzg0IDIyNEgzMjBWMzg0SDEyOFYyMjRINjR6bTQ0OCAwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIyNEg1MTJ6XCJdXG59O1xudmFyIGZhU3RvcmVBbHQgPSBmYVNob3A7XG52YXIgZmFGbG9wcHlEaXNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Zsb3BweS1kaXNrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsIFwic2F2ZVwiXSwgXCJmMGM3XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNzMuM2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNTIgNTAuN0MzNDAgMzguNyAzMjMuNyAzMiAzMDYuNyAzMkg2NHptMCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjEyOHpNMjI0IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFTYXZlID0gZmFGbG9wcHlEaXNrO1xudmFyIGZhVmloYXJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpaGFyYScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjZhN1wiLCBcIk0yODEgMjJMMzA1LjggNC43YzEuMy0uOSAyLjctMS44IDQuMS0yLjRDMzEzLjEgLjcgMzE2LjYgMCAzMjAgMHM2LjkgLjcgMTAuMSAyLjJjMS40IC43IDIuOCAxLjUgNC4xIDIuNEwzNTkgMjJDMzkzIDQ1LjggNDMwLjggNjMuNSA0NzAuOCA3NC40bDIzIDYuM2MxLjggLjUgMy42IDEuMSA1LjIgMmMzLjIgMS43IDUuOSA0IDguMSA2LjhjMy44IDQuOSA1LjYgMTEuMyA0LjcgMTcuOGMtLjQgMi44LTEuMiA1LjQtMi41IDcuOGMtMS43IDMuMi00IDUuOS02LjggOC4xYy00LjMgMy4yLTkuNiA1LjEtMTUuMSA0LjlINDgwdjU2LjFsNi40IDUuMSA1LjIgNC4xYzIxLjEgMTYuNyA0NSAyOS42IDcwLjUgMzguMWwyOC45IDkuNmMxLjYgLjUgMy4yIDEuMiA0LjYgMmMzLjEgMS43IDUuOCA0LjEgNy44IDYuOXMzLjUgNi4xIDQuMSA5LjZjLjUgMi43IC42IDUuNSAuMSA4LjNzLTEuNCA1LjQtMi43IDcuOGMtMS43IDMuMS00LjEgNS44LTYuOSA3LjhzLTYuMSAzLjUtOS42IDQuMWMtMS42IC4zLTMuMyAuNC01IC40SDU0NHY2NS45YzIwLjUgMjIuOCA0Ny40IDM5LjIgNzcuNCA0Ni43QzYzMiA0MDMgNjQwIDQxMi42IDY0MCA0MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINTc2djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgzNTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDEyOHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0YzAtMTEuNCA4LTIxIDE4LjYtMjMuNGMzMC03LjYgNTYuOS0yMy45IDc3LjQtNDYuN1YyODhINTYuNmMtMS43IDAtMy40LS4xLTUtLjRjLTMuNS0uNy02LjgtMi4xLTkuNi00LjFzLTUuMi00LjctNy03LjhjLTEuMy0yLjQtMi4zLTUtMi43LTcuOHMtLjQtNS42IC4xLTguM2MuNy0zLjUgMi4xLTYuOCA0LjEtOS42czQuNy01LjIgNy44LTYuOWMxLjQtLjggMy0xLjUgNC42LTJsMjguOS05LjZjMjUuNS04LjUgNDkuNC0yMS40IDcwLjUtMzguMWw1LjItNC4xIDYuNC01LjFWMTc2IDEyOGgtNy41Yy01LjUgLjEtMTAuOC0xLjctMTUuMS00LjljLTIuOC0yLjEtNS4xLTQuOC02LjgtOC4xYy0xLjItMi40LTIuMS01LTIuNS03LjhjLS45LTYuNSAuOS0xMi44IDQuNy0xNy44YzIuMS0yLjggNC44LTUuMSA4LjEtNi44YzEuNi0uOCAzLjQtMS41IDUuMi0ybDIzLTYuM0MyMDkuMiA2My41IDI0NyA0NS44IDI4MSAyMnpNNDE2IDEyOEgzMjAgMjI0djY0aDcyIDQ4IDcyVjEyOHpNMTYwIDI4OHY2NEgyOTZoMjQgMjRINDgwVjI4OEgzNDQgMzIwaDBIMjk2IDE2MHpcIl1cbn07XG52YXIgZmFTY2FsZVVuYmFsYW5jZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NhbGUtdW5iYWxhbmNlZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiYmFsYW5jZS1zY2FsZS1sZWZ0XCJdLCBcImY1MTVcIiwgXCJNNTIyLjEgNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxOC42LTMuOSA1MDEuOSAxLjZsLTExMyAzNy43QzM3NSAxNS44IDM0OS4zIDAgMzIwIDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwYzAgMyAuMiA1LjkgLjUgOC44TDExNy45IDEyOS42Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsMTM1LjUtNDUuMmM0LjUgMy4yIDkuMyA1LjkgMTQuNCA4LjJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTJWMTUzLjNjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM5LjYgMjg4TDUxMiAxNjMuOCA1ODQuNCAyODhINDM5LjZ6TTUxMiAzODRjNjIuOSAwIDExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMNTM2LjEgMTA5LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEwzOTIuNyAyNzMuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMUMzOTYuOCAzNTAgNDQ5LjEgMzg0IDUxMiAzODR6TTEyOS4yIDI5MS44TDIwMS42IDQxNkg1Ni43bDcyLjQtMTI0LjJ6TTMuMiA0MzMuMUMxNCA0NzggNjYuMyA1MTIgMTI5LjIgNTEyczExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMMTUzLjIgMjM3LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEw5LjkgNDAxLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjF6XCJdXG59O1xudmFyIGZhQmFsYW5jZVNjYWxlTGVmdCA9IGZhU2NhbGVVbmJhbGFuY2VkO1xudmFyIGZhU29ydFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvcnQtdXAnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInNvcnQtYXNjXCJdLCBcImYwZGVcIiwgXCJNMTgyLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhIMjg4YzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhU29ydEFzYyA9IGZhU29ydFVwO1xudmFyIGZhQ29tbWVudERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgXCJjb21tZW50aW5nXCJdLCBcImY0YWRcIiwgXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0xMjggMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUNvbW1lbnRpbmcgPSBmYUNvbW1lbnREb3RzO1xudmFyIGZhUGxhbnRXaWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW50LXdpbHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1YWFcIiwgXCJNMjg4IDEyMGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2djEzYy0yOS4zIDEwLTQ4IDM0LjUtNDggNzAuMWMwIDI3LjkgMjUuMyA3NC44IDY2IDExMS42YzMuOCAzLjUgOC45IDUuMyAxNCA1LjNzMTAuMi0xLjggMTQtNS4zYzQwLjctMzYuOCA2Ni04My43IDY2LTExMS42YzAtMzUuNi0xOC43LTYwLjItNDgtNzAuMVYxMjBDNDY0IDUzLjcgNDEwLjMgMCAzNDQgMFMyMjQgNTMuNyAyMjQgMTIwdjIxLjhDMjA3LjMgMTMzIDE4OC4yIDEyOCAxNjggMTI4Yy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMHYxM2MtMjkuMyAxMC00OCAzNC41LTQ4IDcwLjFDMCAzNTkgMjUuMyA0MDUuOSA2NiA0NDIuN2MzLjggMy41IDguOSA1LjMgMTQgNS4zczEwLjItMS44IDE0LTUuM2M0MC43LTM2LjggNjYtODMuNyA2Ni0xMTEuNmMwLTM1LjYtMTguNy02MC4yLTQ4LTcwLjFWMjQ4YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZ2MzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjgwIDI0OCAxMjB6XCJdXG59O1xudmFyIGZhRGlhbW9uZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFtb25kJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTgzMF0sIFwiZjIxOVwiLCBcIk0yODQuMyAxMS43Yy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjE2IDIxNmMtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsMjE2IDIxNmMxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMGwyMTYtMjE2YzE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42bC0yMTYtMjE2elwiXVxufTtcbnZhciBmYUZhY2VHcmluU3F1aW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTgsIFwiZ3Jpbi1zcXVpbnRcIl0sIFwiZjU4NVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg4LjEgMzEyLjhjMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43QzM4Mi40IDM5MC42IDMyNC4yIDQzMiAyNTYuMyA0MzJzLTEyNi4yLTQxLjQtMTUxLjEtMTAwLjVjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5ek0xMzMuNSAxNDYuN2w4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDE1Ny4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXVxufTtcbnZhciBmYUdyaW5TcXVpbnQgPSBmYUZhY2VHcmluU3F1aW50O1xudmFyIGZhSGFuZEhvbGRpbmdEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1ob2xkaW5nLWRvbGxhcicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFuZC1ob2xkaW5nLXVzZFwiXSwgXCJmNGMwXCIsIFwiTTMxMiAyNFYzNC41YzYuNCAxLjIgMTIuNiAyLjcgMTguMiA0LjJjMTIuOCAzLjQgMjAuNCAxNi42IDE3IDI5LjRzLTE2LjYgMjAuNC0yOS40IDE3Yy0xMC45LTIuOS0yMS4xLTQuOS0zMC4yLTVjLTcuMy0uMS0xNC43IDEuNy0xOS40IDQuNGMtMi4xIDEuMy0zLjEgMi40LTMuNSAzYy0uMyAuNS0uNyAxLjItLjcgMi44YzAgLjMgMCAuNSAwIC42Yy4yIC4yIC45IDEuMiAzLjMgMi42YzUuOCAzLjUgMTQuNCA2LjIgMjcuNCAxMC4xbC45IC4zYzExLjEgMy4zIDI1LjkgNy44IDM3LjkgMTUuM2MxMy43IDguNiAyNi4xIDIyLjkgMjYuNCA0NC45Yy4zIDIyLjUtMTEuNCAzOC45LTI2LjcgNDguNWMtNi43IDQuMS0xMy45IDctMjEuMyA4LjhWMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjIyMC42Yy05LjUtMi4zLTE4LjItNS4zLTI1LjYtNy44Yy0yLjEtLjctNC4xLTEuNC02LTJjLTEyLjYtNC4yLTE5LjQtMTcuOC0xNS4yLTMwLjRzMTcuOC0xOS40IDMwLjQtMTUuMmMyLjYgLjkgNSAxLjcgNy4zIDIuNWMxMy42IDQuNiAyMy40IDcuOSAzMy45IDguM2M4IC4zIDE1LjEtMS42IDE5LjItNC4xYzEuOS0xLjIgMi44LTIuMiAzLjItMi45Yy40LS42IC45LTEuOCAuOC00LjFsMC0uMmMwLTEgMC0yLjEtNC00LjZjLTUuNy0zLjYtMTQuMy02LjQtMjcuMS0xMC4zbC0xLjktLjZjLTEwLjgtMy4yLTI1LTcuNS0zNi40LTE0LjRjLTEzLjUtOC4xLTI2LjUtMjItMjYuNi00NC4xYy0uMS0yMi45IDEyLjktMzguNiAyNy43LTQ3LjRjNi40LTMuOCAxMy4zLTYuNCAyMC4yLTguMlYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01NjguMiAzMzYuM2MxMy4xIDE3LjggOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41SDE5MiAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDY4LjhsNDQuOS0zNmMyMi43LTE4LjIgNTAuOS0yOCA4MC0yOEgyNzJoMTYgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjg4IDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzOTIuNmwxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXpNMTkzLjYgMzg0bDAgMC0uOSAwYy4zIDAgLjYgMCAuOSAwelwiXVxufTtcbnZhciBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjtcbnZhciBmYUJhY3Rlcml1bSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWN0ZXJpdW0nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNWFcIiwgXCJNNDIzLjEgMzAuNmMzLjYtMTIuNy0zLjctMjYtMTYuNS0yOS43cy0yNiAzLjctMjkuNyAxNi41bC00LjIgMTQuN2MtOS44LS40LTE5LjkgLjUtMjkuOSAyLjhjLTEyLjEgMi44LTIzLjcgNS45LTM0LjkgOS40bC01LjktMTMuN2MtNS4yLTEyLjItMTkuMy0xNy44LTMxLjUtMTIuNnMtMTcuOCAxOS4zLTEyLjYgMzEuNWw0LjkgMTEuM2MtMjIgOS40LTQyIDIwLjEtNjAuMiAzMS44TDE5NiA4Mi43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM2w3LjggMTEuNmMtMTggMTUtMzMuNyAzMC44LTQ3LjMgNDcuMUwxMDMgMTU3LjNjLTEwLjQtOC4zLTI1LjUtNi42LTMzLjcgMy43cy02LjYgMjUuNSAzLjcgMzMuN2wxNSAxMmMtMi4xIDMuMi00LjEgNi41LTYgOS43Yy05LjQgMTUuNy0xNyAzMS0yMy4yIDQ1LjNsLTkuOS0zLjljLTEyLjMtNC45LTI2LjMgMS4xLTMxLjIgMTMuNHMxLjEgMjYuMyAxMy40IDMxLjJsMTEuNiA0LjZjLS4zIDEuMS0uNiAyLjEtLjkgMy4xYy0zLjUgMTIuNS01LjcgMjMuMi03LjEgMzEuM2MtLjcgNC4xLTEuMiA3LjUtMS42IDEwLjNjLS4yIDEuNC0uMyAyLjYtLjQgMy42bC0uMSAxLjQtLjEgLjYgMCAuMyAwIC4xYzAgMCAwIC4xIDM5LjIgMy43bDAgMC0zOS4yLTMuNmMtLjUgNS0uNiAxMC0uNCAxNC45bC0xNC43IDQuMkM0LjcgMzgwLjYtMi43IDM5My44IC45IDQwNi42czE2LjkgMjAuMSAyOS43IDE2LjVsMTMuOC0zLjljMTAuNiAyMC43IDI3LjYgMzcuOCA0OC41IDQ4LjVsLTMuOSAxMy43Yy0zLjYgMTIuNyAzLjcgMjYgMTYuNSAyOS43czI2LTMuNyAyOS43LTE2LjVsNC4yLTE0LjdjMjMuOCAxIDQ2LjMtNS41IDY1LjEtMTcuNkwyMTUgNDczYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTAuNi0xMC42YzkuMS0xNC4xIDE1LjEtMzAuNSAxNy00OC4zbC4xLS44Yy4zLTEuNyAxLTUuMSAyLjMtOS44bC4yLS44IDEyLjYgNS40YzEyLjIgNS4yIDI2LjMtLjQgMzEuNS0xMi42cy0uNC0yNi4zLTEyLjYtMzEuNWwtMTEuMy00LjhjOS45LTE0LjkgMjQuOS0zMS42IDQ4LjYtNDZsMi4xIDcuNWMzLjYgMTIuNyAxNi45IDIwLjEgMjkuNyAxNi41czIwLjEtMTYuOSAxNi41LTI5LjdMMzcxIDI1OS4yYzYuOS0yLjIgMTQuMy00LjMgMjIuMi02LjFjMTIuOS0zIDI0LjctOCAzNS4yLTE0LjhMNDM5IDI0OWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTEwLjYtMTAuNmMxMi4yLTE5IDE4LjYtNDEuNiAxNy42LTY1LjFsMTQuNy00LjJjMTIuNy0zLjYgMjAuMS0xNi45IDE2LjUtMjkuN3MtMTYuOS0yMC4xLTI5LjctMTYuNWwtMTMuNyAzLjljLTEwLjgtMjEuMi0yOC0zOC00OC41LTQ4LjVsMy45LTEzLjh6TTkyLjEgMzYzLjNsMCAwTDE0NCAzNjhsLTUxLjktNC43ek0xMTIgMzIwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTI0MCAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUhhbmRQb2ludGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnRlcicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI1YVwiLCBcIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYxODguMmM4LjUtNy42IDE5LjctMTIuMiAzMi0xMi4yYzIwLjYgMCAzOC4yIDEzIDQ1IDMxLjJjOC44LTkuMyAyMS4yLTE1LjIgMzUtMTUuMmMyNS4zIDAgNDYgMTkuNSA0Ny45IDQ0LjNjOC41LTcuNyAxOS44LTEyLjMgMzIuMS0xMi4zYzI2LjUgMCA0OCAyMS41IDQ4IDQ4djQ4IDE2IDQ4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNiAwSDI0MGwtLjEgMGgtNS4yYy01IDAtOS45LS4zLTE0LjctMWMtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjdWNDB6TTI0MCAzMDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzMDR6bTQ4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzMDRjMC04LjgtNy4yLTE2LTE2LTE2em04MCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMwNHpcIl1cbn07XG52YXIgZmFEcnVtU3RlZWxwYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJ1bS1zdGVlbHBhbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU2YVwiLCBcIk0yODggMzJjMTU5LjEgMCAyODggNDggMjg4IDEyOFYzNTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MlYxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjhjLTE4LjYtNy45LTQwLjktMTQuNC02Ni0xOS40bC0yNy44IDQzLjZjLTcuMyAxMS41LTExLjIgMjQuOC0xMS4yIDM4LjRjMCAxNy41IDYuNCAzNC40IDE4LjEgNDcuNWw5LjggMTFjMjkuOC01LjIgNTUuOS0xMi41IDc3LjItMjEuNWM0Ny4xLTE5LjkgNTUtMzkuOSA1NS00OS44ek0zNDkuMiAyMzcuM2MtOC0yNi4yLTMyLjQtNDUuMy02MS4yLTQ1LjNzLTUzLjMgMTkuMS02MS4yIDQ1LjNjMTkuNCAxLjcgMzkuOSAyLjcgNjEuMiAyLjdzNDEuOC0uOSA2MS4yLTIuN3pNMTY5IDkwLjhjLTI1LjIgNS00Ny40IDExLjYtNjYgMTkuNEM1NiAxMzAuMSA0OCAxNTAuMSA0OCAxNjBzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNWMwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThDMjI0LjUgODcgMjI0IDkxLjUgMjI0IDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMkMzMzAuOCA4MSAzMDkuOCA4MCAyODggODBzLTQyLjggMS02Mi42IDIuOHpcIl1cbn07XG52YXIgZmFIYW5kU2Npc3NvcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1zY2lzc29ycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjI1N1wiLCBcIk00MCAyMDhjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTgwLjIgMGMtNy42IDguNS0xMi4yIDE5LjctMTIuMiAzMmMwIDI1LjMgMTkuNSA0NiA0NC4zIDQ3LjljLTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMWMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwIDY0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xMTMuMWMwLTQwLjItMTYtNzguOC00NC40LTEwNy4zQzQ0NC44IDc2LjggNDEzLjkgNjQgMzgxLjcgNjRMMzM2IDY0Yy0yMS4zIDAtMzkuMyAxMy45LTQ1LjYgMzMuMWw3NC41IDIzLjdjOC40IDIuNyAxMy4xIDExLjcgMTAuNCAyMC4xcy0xMS43IDEzLjEtMjAuMSAxMC40TDI4OCAxMjkuOWwwIC4xTDg0IDY1LjhDNjIuOSA1OS4yIDQwLjUgNzAuOSAzMy44IDkyczUuMSA0My41IDI2LjIgNTAuMkwyNjkuNSAyMDggNDAgMjA4elwiXVxufTtcbnZhciBmYUhhbmRzUHJheWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1wcmF5aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwcmF5aW5nLWhhbmRzXCJdLCBcImY2ODRcIiwgXCJNMzUxLjIgNC44YzMuMi0yIDYuNi0zLjMgMTAtNC4xYzQuNy0xIDkuNi0uOSAxNC4xIC4xYzcuNyAxLjggMTQuOCA2LjUgMTkuNCAxMy42TDUxNC42IDE5NC4yYzguOCAxMy4xIDEzLjQgMjguNiAxMy40IDQ0LjR2NzMuNWMwIDYuOSA0LjQgMTMgMTAuOSAxNS4ybDc5LjIgMjYuNEM2MzEuMiAzNTggNjQwIDM3MC4yIDY0MCAzODR2OTZjMCA5LjktNC42IDE5LjMtMTIuNSAyNS40cy0xOC4xIDguMS0yNy43IDUuNUw0MzEgNDY1LjljLTU2LTE0LjktOTUtNjUuNy05NS0xMjMuN1YyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIxOS4xYzAtNy0xLjgtMTMuOC01LjMtMTkuOEwzNDAuMyA0OC4xYy0xLjctMy0yLjktNi4xLTMuNi05LjNjLTEtNC43LTEtOS42IC4xLTE0LjFjMS45LTggNi44LTE1LjIgMTQuMy0xOS45em0tNjIuNCAwYzcuNSA0LjYgMTIuNCAxMS45IDE0LjMgMTkuOWMxLjEgNC42IDEuMiA5LjQgLjEgMTQuMWMtLjcgMy4yLTEuOSA2LjMtMy42IDkuM0wyMTMuMyAxOTkuM2MtMy41IDYtNS4zIDEyLjktNS4zIDE5LjhWMzA0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQyLjNjMCA1OC0zOSAxMDguNy05NSAxMjMuN2wtMTY4LjcgNDVjLTkuNiAyLjYtMTkuOSAuNS0yNy43LTUuNVMwIDQ5MCAwIDQ4MFYzODRjMC0xMy44IDguOC0yNiAyMS45LTMwLjRsNzkuMi0yNi40YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4yVjIzOC41YzAtMTUuOCA0LjctMzEuMiAxMy40LTQ0LjRMMjQ1LjIgMTQuNWM0LjYtNy4xIDExLjctMTEuOCAxOS40LTEzLjZjNC42LTEuMSA5LjQtMS4yIDE0LjEtLjFjMy41IC44IDYuOSAyLjEgMTAgNC4xelwiXVxufTtcbnZhciBmYVByYXlpbmdIYW5kcyA9IGZhSGFuZHNQcmF5aW5nO1xudmFyIGZhQXJyb3dSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NjM1LCBcImFycm93LXJpZ2h0LXJvdGF0ZVwiLCBcImFycm93LXJvdGF0ZS1mb3J3YXJkXCIsIFwicmVkb1wiXSwgXCJmMDFlXCIsIFwiTTM4Ni4zIDE2MEgzMzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjUxLjJMNDE0LjQgOTcuNmMtODcuNS04Ny41LTIyOS4zLTg3LjUtMzE2LjggMHMtODcuNSAyMjkuMyAwIDMxNi44czIyOS4zIDg3LjUgMzE2LjggMGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMHMtNjIuNS0xNjMuOCAwLTIyNi4zczE2My44LTYyLjUgMjI2LjMgMEwzODYuMyAxNjB6XCJdXG59O1xudmFyIGZhQXJyb3dSaWdodFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbnZhciBmYUFycm93Um90YXRlRm9yd2FyZCA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbnZhciBmYVJlZG8gPSBmYUFycm93Um90YXRlUmlnaHQ7XG52YXIgZmFCaW9oYXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmlvaGF6YXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTc2M10sIFwiZjc4MFwiLCBcIk0xNzMuMiAwYy0xLjggMC0zLjUgLjctNC44IDJDMTM4LjUgMzIuMyAxMjAgNzQgMTIwIDEyMGMwIDI2LjIgNiA1MC45IDE2LjYgNzNjLTIyIDIuNC00My44IDkuMS02NC4yIDIwLjVDMzcuOSAyMzIuOCAxMy4zIDI2Mi40IC40IDI5NmMtLjcgMS43LS41IDMuNyAuNSA1LjJjMi4yIDMuNyA3LjQgNC4zIDEwLjYgMS4zQzY0LjIgMjU0LjMgMTU4IDI0NS4xIDIwNSAzMjRzLTguMSAxNTMuMS03Ny42IDE3My4yYy00LjIgMS4yLTYuMyA1LjktNC4xIDkuNmMxIDEuNiAyLjYgMi43IDQuNSAzYzM2LjUgNS45IDc1LjIgLjEgMTA5LjctMTkuMmMyMC40LTExLjQgMzcuNC0yNi41IDUwLjUtNDMuOGMxMy4xIDE3LjMgMzAuMSAzMi40IDUwLjUgNDMuOGMzNC41IDE5LjMgNzMuMyAyNS4yIDEwOS43IDE5LjJjMS45LS4zIDMuNS0xLjQgNC41LTNjMi4yLTMuNyAuMS04LjQtNC4xLTkuNkMzNzkuMSA0NzcuMSAzMjQgNDAzIDM3MSAzMjRzMTQwLjctNjkuOCAxOTMuNS0yMS40YzMuMiAyLjkgOC40IDIuMyAxMC42LTEuM2MxLTEuNiAxLjEtMy41IC41LTUuMmMtMTIuOS0zMy42LTM3LjUtNjMuMi03Mi4xLTgyLjVjLTIwLjQtMTEuNC00Mi4yLTE4LjEtNjQuMi0yMC41QzQ1MCAxNzAuOSA0NTYgMTQ2LjIgNDU2IDEyMGMwLTQ2LTE4LjUtODcuNy00OC40LTExOGMtMS4zLTEuMy0zLTItNC44LTJjLTUgMC04LjQgNS4yLTYuNyA5LjlDNDIxLjcgODAuNSAzODUuNiAxNzYgMjg4IDE3NlMxNTQuMyA4MC41IDE3OS45IDkuOWMxLjctNC43LTEuNi05LjktNi43LTkuOXpNMjQwIDI3MmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xODEuNyA0MTcuNmM2LjMtMTEuOCA5LjgtMjUuMSA4LjYtMzkuOGMtMTkuNS0xOC0zNC00MS40LTQxLjItNjcuOGMtMTIuNS04LjEtMjYuMi0xMS44LTQwLTEyLjRjLTktLjQtMTguMSAuNi0yNy4xIDIuN2M3LjggNTcuMSAzOC43IDEwNi44IDgyLjkgMTM5LjRjNi44LTYuNyAxMi42LTE0LjEgMTYuOC0yMi4xek0yODggNjRjLTI4LjggMC01Ni4zIDUuOS04MS4yIDE2LjVjMiA4LjMgNSAxNi4yIDkgMjMuNWM2LjggMTIuNCAxNi43IDIzLjEgMzAuMSAzMC4zYzEzLjMtNC4xIDI3LjUtNi4zIDQyLjItNi4zczI4LjggMi4yIDQyLjIgNi4zYzEzLjQtNy4yIDIzLjMtMTcuOSAzMC4xLTMwLjNjNC03LjMgNy0xNS4yIDktMjMuNUMzNDQuMyA2OS45IDMxNi44IDY0IDI4OCA2NHpNNDI2LjkgMzEwYy03LjIgMjYuNC0yMS43IDQ5LjctNDEuMiA2Ny44Yy0xLjIgMTQuNyAyLjIgMjguMSA4LjYgMzkuOGM0LjMgOCAxMCAxNS40IDE2LjggMjIuMWM0NC4zLTMyLjYgNzUuMi04Mi4zIDgyLjktMTM5LjRjLTktMi4yLTE4LjEtMy4xLTI3LjEtMi43Yy0xMy44IC42LTI3LjUgNC40LTQwIDEyLjR6XCJdXG59O1xudmFyIGZhTG9jYXRpb25Dcm9zc2hhaXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY2F0aW9uLWNyb3NzaGFpcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxvY2F0aW9uXCJdLCBcImY2MDFcIiwgXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjYuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ1LjNDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS4zVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDUuM0MxNDMuNiA0MzEuOSA4MC4xIDM2OC40IDY2LjcgMjg4SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY2LjdDODAuMSAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMjU2YTEyOCAxMjggMCAxIDAgMjU2IDAgMTI4IDEyOCAwIDEgMCAtMjU2IDB6bTEyOC04MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpcIl1cbn07XG52YXIgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzO1xudmFyIGZhTWFyc0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLWRvdWJsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzk4OTFdLCBcImYyMjdcIiwgXCJNMzEyIDMyYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDMzLjQgMzMuNEwyNzUuOCAxNTljLTI4LjQtMTkuNS02Mi43LTMxLTk5LjgtMzFDNzguOCAxMjggMCAyMDYuOCAwIDMwNHM3OC44IDE3NiAxNzYgMTc2czE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGw1Mi42LTUyLjZMNDA3IDE4NWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzEyem04OCA0OGgwdjBsMCAwek02NCAzMDRhMTEyIDExMiAwIDEgMSAyMjQgMEExMTIgMTEyIDAgMSAxIDY0IDMwNHpNMzY4IDQ4MGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDUyLjYtNTIuNkw1OTkgMTg1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg1MDRjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOGMtMS4yIDIuOS0xLjggNi0xLjggOWwwIC4ydi4yYzAgNi4yIDIuNSAxMi4yIDcgMTYuOGwzMy40IDMzLjRMNDgwIDE0Ni43VjE2OGMwIDIyLjYtMTMuNiA0My4xLTM0LjYgNTEuN2MtLjggLjMtMS43IC43LTIuNSAxQzQ2NS43IDI0MS4yIDQ4MCAyNzAuOSA0ODAgMzA0YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyYy01LjQgMC0xMC44LS40LTE2LTEuMWMtMTIuOSAyMC40LTI5LjEgMzguMy00OC4xIDUzLjFjMTkuOCA3LjggNDEuNCAxMiA2NCAxMnpcIl1cbn07XG52YXIgZmFDaGlsZERyZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTljXCIsIFwiTTIyNCA2NEE2NCA2NCAwIDEgMCA5NiA2NGE2NCA2NCAwIDEgMCAxMjggMHpNODggNDAwdjgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDAwaDE2djgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDAwaDE3LjhjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC42IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMmwyOC43LTM3LjhMNTUgMzc4LjlDNTEuNiAzODkuMyA1OS4zIDQwMCA3MC4yIDQwMEg4OHpcIl1cbn07XG52YXIgZmFVc2Vyc0JldHdlZW5MaW5lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1iZXR3ZWVuLWxpbmVzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTkxXCIsIFwiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwSDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0wIDQ4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNEg2MTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek04My4yIDE2MGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGg5NmMxMi4yIDAgMjMuNyAzLjQgMzMuNCA5LjRjLTM3LjIgMTUuMS02NS42IDQ3LjItNzUuOCA4Ni42SDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptNDYxLjYgMzJjLTEwLjMtNDAuMS0zOS42LTcyLjYtNzcuNy04Ny40YzkuNC01LjUgMjAuNC04LjYgMzIuMS04LjZoOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJINDkzLjZ6TTM5MS4yIDI5MC40YzMyLjEgNy40IDU4LjEgMzAuOSA2OC45IDYxLjZjMy41IDEwIDUuNSAyMC44IDUuNSAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmgtMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmMwLTExLjIgMS45LTIyIDUuNS0zMmMxMC41LTI5LjcgMzUuMy01Mi44IDY2LjEtNjAuOWM3LjgtMi4xIDE2LTMuMSAyNC41LTMuMWg5NmM3LjQgMCAxNC43IC44IDIxLjYgMi40em00NC0xMzAuNGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyMS42IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYUx1bmdzVmlydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbHVuZ3MtdmlydXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNjdcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTU2LjJjLTguNS03LjYtMTkuNy0xMi4yLTMyLTEyLjJzLTIzLjUgNC42LTMyIDEyLjJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ0NC41IDE5NS41Yy0xNi40LTE2LjQtNDEuOC0xOC41LTYwLjUtNi4xVjE2NS4zQzM4NCAxMjcgNDE1IDk2IDQ1My4zIDk2YzIxLjcgMCA0Mi44IDEwLjIgNTUuOCAyOC44YzE1LjQgMjIuMSA0NC4zIDY1LjQgNzEgMTE2LjljMjYuNSA1MC45IDUyLjQgMTEyLjUgNTkuNiAxNzAuM2MuMiAxLjMgLjIgMi42IC4yIDR2N2MwIDQ5LjEtMzkuOCA4OS04OSA4OWMtNy4zIDAtMTQuNS0uOS0yMS42LTIuN2wtNzIuNy0xOC4yYy0yMC45LTUuMi0zOC43LTE3LjEtNTEuNS0zMi45YzE0IDEuNSAyOC41LTMgMzkuMi0xMy44bC0yMi42LTIyLjYgMjIuNiAyMi42YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45Yy0xLjEtMS4xLTEuNC0yLTEuNS0yLjVjLS4xLS44LS4xLTEuOCAuNC0yLjlzMS4yLTEuOSAxLjgtMi4zYy41LS4zIDEuMy0uOCAyLjktLjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhjLTEuNiAwLTIuNC0uNC0yLjktLjhjLS42LS40LTEuMy0xLjItMS44LTIuM3MtLjUtMi4yLS40LTIuOWMuMS0uNiAuNC0xLjQgMS41LTIuNWMxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOXpNNDIxLjggNDIxLjhjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwQzM3NS45IDM5OC41IDMzNiA0MTUgMzM2IDQ0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDMjQxLjUgMzc1LjkgMjI1IDMzNiAxOTIgMzM2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzI2NC4xIDI0MS41IDMwNCAyMjUgMzA0IDE5MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2YzAgMzMgMzkuOSA0OS41IDYzLjIgMjYuMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZDMzk4LjUgMjY0LjEgNDE1IDMwNCA0NDggMzA0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2Yy0zMyAwLTQ5LjUgMzkuOS0yNi4yIDYzLjJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZ6TTE4My4zIDQ5MS4ybC03Mi43IDE4LjJjLTcuMSAxLjgtMTQuMyAyLjctMjEuNiAyLjdjLTQ5LjEgMC04OS0zOS44LTg5LTg5di03YzAtMS4zIC4xLTIuNyAuMi00YzcuMi01Ny45IDMzLjEtMTE5LjQgNTkuNi0xNzAuM2MyNi44LTUxLjUgNTUuNi05NC44IDcxLTExNi45YzEzLTE4LjYgMzQtMjguOCA1NS44LTI4LjhDMjI1IDk2IDI1NiAxMjcgMjU2IDE2NS4zdjI0LjFjLTE4LjYtMTIuNC00NC0xMC4zLTYwLjUgNi4xYy0xOC43IDE4LjctMTguNyA0OS4xIDAgNjcuOWMxLjEgMS4xIDEuNCAyIDEuNSAyLjVjLjEgLjggLjEgMS44LS40IDIuOXMtMS4yIDEuOS0xLjggMi4zYy0uNSAuMy0xLjMgLjgtMi45IC44Yy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4YzEuNiAwIDIuNCAuNCAyLjkgLjhjLjYgLjQgMS4zIDEuMiAxLjggMi4zcy41IDIuMiAuNCAyLjljLS4xIC42LS40IDEuNC0xLjUgMi41Yy0xOC43IDE4LjctMTguNyA0OS4xIDAgNjcuOWMxMC43IDEwLjcgMjUuMyAxNS4zIDM5LjIgMTMuOGMtMTIuOCAxNS45LTMwLjYgMjcuNy01MS41IDMyLjl6TTI5NiAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em03MiAzMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYUZhY2VHcmluVGVhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRlYXJzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCBcImdyaW4tdGVhcnNcIl0sIFwiZjU4OFwiLCBcIk01NDguNiAzNzEuNEM1MDYuNCA0NTQuOCA0MTkuOSA1MTIgMzIwIDUxMnMtMTg2LjQtNTcuMi0yMjguNi0xNDAuNmM0LjUtMi45IDguNy02LjMgMTIuNy0xMC4zYzguMS04LjEgMTMuMi0xOC42IDE2LjUtMjYuNmMzLjYtOC44IDYuNS0xOC40IDguOC0yNy41YzQuNi0xOC4yIDcuNy0zNyA5LjMtNDguMmMzLjktMjYuNS0xOC44LTQ5LjItNDUuMi00NS40Yy02LjggLjktMTYuMiAyLjQtMjYuNiA0LjRDODUuMyA5NC41IDE5MS42IDAgMzIwIDBTNTU0LjcgOTQuNSA1NzMuMiAyMTcuN2MtMTAuMy0yLTE5LjgtMy41LTI2LjYtNC40Yy0yNi41LTMuOS00OS4yIDE4LjgtNDUuMiA0NS40YzEuNiAxMS4zIDQuNiAzMCA5LjMgNDguMmMyLjMgOS4xIDUuMiAxOC44IDguOCAyNy41YzMuMyA4LjEgOC40IDE4LjUgMTYuNSAyNi42YzMuOSAzLjkgOC4yIDcuNCAxMi43IDEwLjN6TTEwNyAyNTQuMWMtMy4xIDIxLjUtMTEuNCA3MC4yLTI1LjUgODQuNGMtLjkgMS0xLjkgMS44LTIuOSAyLjdDNjAgMzU2LjcgMzIgMzU1LjUgMTQuMyAzMzcuN2MtMTguNy0xOC43LTE5LjEtNDguOC0uNy02Ny4yYzguNi04LjYgMzAuMS0xNS4xIDUwLjUtMTkuNmMxMy0yLjggMjUuNS00LjggMzMuOS02YzUuNC0uOCA5LjkgMy43IDkgOXptNDU0LjUgODcuMWMtLjgtLjYtMS41LTEuMy0yLjMtMmMtLjItLjItLjUtLjQtLjctLjdjLTE0LjEtMTQuMS0yMi41LTYyLjktMjUuNS04NC40Yy0uOC01LjQgMy43LTkuOSA5LTljMSAuMSAyLjIgLjMgMy4zIC41YzguMiAxLjIgMTkuMiAzIDMwLjYgNS41YzIwLjQgNC40IDQxLjkgMTAuOSA1MC41IDE5LjZjMTguNCAxOC40IDE4IDQ4LjUtLjcgNjcuMmMtMTcuNyAxNy43LTQ1LjcgMTktNjQuMiAzLjR6bS05MC4xLTkuN2M1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTI4MS42IDIyOC44bDAgMCAwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxOTAuNyAxODguNCAxODQgMjA2LjEgMTg0IDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDB6bTE2MCAwbDAgMCAwIDBjMi4xIDIuOCA1LjcgMy45IDguOSAyLjhzNS41LTQuMSA1LjUtNy42YzAtMTcuOS02LjctMzUuNi0xNi42LTQ4LjhjLTkuOC0xMy0yMy45LTIzLjItMzkuNC0yMy4ycy0yOS42IDEwLjItMzkuNCAyMy4yQzM1MC43IDE4OC40IDM0NCAyMDYuMSAzNDQgMjI0YzAgMy40IDIuMiA2LjUgNS41IDcuNnM2LjkgMCA4LjktMi44bDAgMCAwIDAgMCAwIC4yLS4yYy4yLS4yIC40LS41IC43LS45Yy42LS44IDEuNi0yIDIuOC0zLjRjMi41LTIuOCA2LTYuNiAxMC4yLTEwLjNjOC44LTcuOCAxOC44LTE0IDI3LjctMTRzMTguOSA2LjIgMjcuNyAxNGM0LjIgMy43IDcuNyA3LjUgMTAuMiAxMC4zYzEuMiAxLjQgMi4yIDIuNiAyLjggMy40Yy4zIC40IC42IC43IC43IC45bC4yIC4yIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhR3JpblRlYXJzID0gZmFGYWNlR3JpblRlYXJzO1xudmFyIGZhUGhvbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGhvbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjIsIDEyODM3OV0sIFwiZjA5NVwiLCBcIk0xNjQuOSAyNC42Yy03LjctMTguNi0yOC0yOC41LTQ3LjQtMjMuMmwtODggMjRDMTIuMSAzMC4yIDAgNDYgMCA2NEMwIDMxMS40IDIwMC42IDUxMiA0NDggNTEyYzE4IDAgMzMuOC0xMi4xIDM4LjYtMjkuNWwyNC04OGM1LjMtMTkuNC00LjYtMzkuNy0yMy4yLTQ3LjRsLTk2LTQwYy0xNi4zLTYuOC0zNS4yLTIuMS00Ni4zIDExLjZMMzA0LjcgMzY4QzIzNC4zIDMzNC43IDE3Ny4zIDI3Ny43IDE0NCAyMDcuM0wxOTMuMyAxNjdjMTMuNy0xMS4yIDE4LjQtMzAgMTEuNi00Ni4zbC00MC05NnpcIl1cbn07XG52YXIgZmFDYWxlbmRhclhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbGVuZGFyLXhtYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYWxlbmRhci10aW1lc1wiXSwgXCJmMjczXCIsIFwiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0SDI4OFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjY0aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djQ4SDBWMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0SDk2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDE5Mkg0NDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxOTJ6TTMwNSAzMDVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNDcgNDctNDctNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3elwiXVxufTtcbnZhciBmYUNhbGVuZGFyVGltZXMgPSBmYUNhbGVuZGFyWG1hcms7XG52YXIgZmFDaGlsZFJlYWNoaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLXJlYWNoaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTlkXCIsIFwiTTI1NiA2NEE2NCA2NCAwIDEgMCAxMjggNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4yIDg1LjRzLTE4LjcgMjkuNy04LjkgNDQuNEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjEuNmMyOS4xLTE0LjIgNTQuNC0zNi4yIDcyLjctNjQuMmwxOC4yLTI3LjljOS42LTE0LjggNS40LTM0LjYtOS40LTQ0LjNzLTM0LjYtNS41LTQ0LjMgOS40TDI5MSAxMjIuNGMtMjEuOCAzMy40LTU4LjkgNTMuNi05OC44IDUzLjZjLTEyLjYgMC0yNC45LTItMzYuNi01LjhjLS45LS4zLTEuOC0uNy0yLjctLjl6XCJdXG59O1xudmFyIGZhSGVhZFNpZGVWaXJ1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkLXNpZGUtdmlydXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNjRcIiwgXCJNMCAyMjQuMkMwIDEwMC42IDEwMC4yIDAgMjI0IDBoMjRjOTUuMiAwIDE4MS4yIDY5LjMgMTk3LjMgMTYwLjJjMi4zIDEzIDYuOCAyNS43IDE1LjEgMzZsNDIgNTIuNmM2LjIgNy44IDkuNiAxNy40IDkuNiAyNy40YzAgMjQuMi0xOS42IDQzLjgtNDMuOCA0My44SDQ0OHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMjB2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwNy4zYzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6TTIyNCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2YzAgMzMtMzkuOSA0OS41LTYzLjIgMjYuMmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkMxNDUuNSAxNTIuMSAxMjkgMTkyIDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmMzMyAwIDQ5LjUgMzkuOSAyNi4yIDYzLjJjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEMxNjguMSAyODYuNSAyMDggMzAzIDIwOCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTMzIDM5LjktNDkuNSA2My4yLTI2LjJjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42QzMwMi41IDI2My45IDMxOSAyMjQgMzUyIDIyNGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtMzMgMC00OS41LTM5LjktMjYuMi02My4yYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBDMjc5LjkgMTI5LjUgMjQwIDExMyAyNDAgODBjMC04LjgtNy4yLTE2LTE2LTE2em0tMjQgOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4MGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYVVzZXJHZWFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZ2VhcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci1jb2dcIl0sIFwiZjRmZVwiLCBcIk0yMjQgMGExMjggMTI4IDAgMSAxIDAgMjU2QTEyOCAxMjggMCAxIDEgMjI0IDB6TTE3OC4zIDMwNGg5MS40YzExLjggMCAyMy40IDEuMiAzNC41IDMuM2MtMi4xIDE4LjUgNy40IDM1LjYgMjEuOCA0NC44Yy0xNi42IDEwLjYtMjYuNyAzMS42LTIwIDUzLjNjNCAxMi45IDkuNCAyNS41IDE2LjQgMzcuNnMxNS4yIDIzLjEgMjQuNCAzM2MxNS43IDE2LjkgMzkuNiAxOC40IDU3LjIgOC43di45YzAgOS4yIDIuNyAxOC41IDcuOSAyNi4zSDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek00MzYgMjE4LjJjMC03IDQuNS0xMy4zIDExLjMtMTQuOGMxMC41LTIuNCAyMS41LTMuNyAzMi43LTMuN3MyMi4yIDEuMyAzMi43IDMuN2M2LjggMS41IDExLjMgNy44IDExLjMgMTQuOHYxNy43YzAgNy44IDQuOCAxNC44IDExLjYgMTguN2M2LjggMy45IDE1LjEgNC41IDIxLjggLjZsMTMuOC03LjljNi4xLTMuNSAxMy43LTIuNyAxOC41IDIuNGM3LjYgOC4xIDE0LjMgMTcuMiAyMC4xIDI3LjJzMTAuMyAyMC40IDEzLjUgMzFjMi4xIDYuNy0xLjEgMTMuNy03LjIgMTcuMmwtMTQuNCA4LjNjLTYuNSAzLjctMTAgMTAuOS0xMCAxOC40czMuNSAxNC43IDEwIDE4LjRsMTQuNCA4LjNjNi4xIDMuNSA5LjIgMTAuNSA3LjIgMTcuMmMtMy4zIDEwLjYtNy44IDIxLTEzLjUgMzFzLTEyLjUgMTkuMS0yMC4xIDI3LjJjLTQuOCA1LjEtMTIuNSA1LjktMTguNSAyLjRsLTEzLjgtNy45Yy02LjctMy45LTE1LjEtMy4zLTIxLjggLjZjLTYuOCAzLjktMTEuNiAxMC45LTExLjYgMTguN3YxNy43YzAgNy00LjUgMTMuMy0xMS4zIDE0LjhjLTEwLjUgMi40LTIxLjUgMy43LTMyLjcgMy43cy0yMi4yLTEuMy0zMi43LTMuN2MtNi44LTEuNS0xMS4zLTcuOC0xMS4zLTE0LjhWNDY3LjhjMC03LjktNC45LTE0LjktMTEuNy0xOC45Yy02LjgtMy45LTE1LjItNC41LTIyLS42bC0xMy41IDcuOGMtNi4xIDMuNS0xMy43IDIuNy0xOC41LTIuNGMtNy42LTguMS0xNC4zLTE3LjItMjAuMS0yNy4ycy0xMC4zLTIwLjQtMTMuNS0zMWMtMi4xLTYuNyAxLjEtMTMuNyA3LjItMTcuMmwxNC04LjFjNi41LTMuOCAxMC4xLTExLjEgMTAuMS0xOC42cy0zLjUtMTQuOC0xMC4xLTE4LjZsLTE0LTguMWMtNi4xLTMuNS05LjItMTAuNS03LjItMTcuMmMzLjMtMTAuNiA3LjctMjEgMTMuNS0zMXMxMi41LTE5LjEgMjAuMS0yNy4yYzQuOC01LjEgMTIuNC01LjkgMTguNS0yLjRsMTMuNiA3LjhjNi44IDMuOSAxNS4yIDMuMyAyMi0uNmM2LjktMy45IDExLjctMTEgMTEuNy0xOC45VjIxOC4yem05Mi4xIDEzMy41YTQ4LjEgNDguMSAwIDEgMCAtOTYuMSAwIDQ4LjEgNDguMSAwIDEgMCA5Ni4xIDB6XCJdXG59O1xudmFyIGZhVXNlckNvZyA9IGZhVXNlckdlYXI7XG52YXIgZmFBcnJvd1VwMTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtMS05JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtdXBcIl0sIFwiZjE2M1wiLCBcIk00NTAuNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjEwOC40bC01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40ek0xNjAgMzJjOSAwIDE3LjUgMy44IDIzLjYgMTAuNGw4OCA5NmMxMS45IDEzIDExLjEgMzMuMy0yIDQ1LjJzLTMzLjMgMTEuMS00NS4yLTJMMTkyIDE0Ni4zVjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNDYuM0w5NS42IDE4MS42Yy0xMS45IDEzLTMyLjIgMTMuOS00NS4yIDJzLTEzLjktMzIuMi0yLTQ1LjJsODgtOTZDMTQyLjUgMzUuOCAxNTEgMzIgMTYwIDMyek00NDUuNyAzNjQuOUEzMiAzMiAwIDEgMCA0MTguMyAzMDdhMzIgMzIgMCAxIDAgMjcuNCA1Ny45em0tNDAuNyA1NC45QzM2OS42IDQwOC40IDM0NCAzNzUuMiAzNDQgMzM2YzAtNDguNiAzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAyMy41LTcuNSA0Ni4zLTIxLjUgNjUuMkw0NDkuNyA0NjdjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjdzLTE3LjItMzAuNi02LjctNDQuOGw2LjgtOS4yelwiXVxufTtcbnZhciBmYVNvcnROdW1lcmljVXAgPSBmYUFycm93VXAxOTtcbnZhciBmYURvb3JDbG9zZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9vci1jbG9zZWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2ODJdLCBcImY1MmFcIiwgXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMTQ0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2VjY0ek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFTaGllbGRWaXJ1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtdmlydXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNmNcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMjU2IDExMmM4LjggMCAxNiA3LjIgMTYgMTZjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkMzMzQuNSAyMDAuMSAzNTEgMjQwIDM4NCAyNDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwQzMxMS45IDMzNC41IDI3MiAzNTEgMjcyIDM4NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDMTc3LjUgMzExLjkgMTYxIDI3MiAxMjggMjcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzIwMC4xIDE3Ny41IDI0MCAxNjEgMjQwIDEyOGMwLTguOCA3LjItMTYgMTYtMTZ6TTIzMiAyNTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em03MiAzMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYURpY2VTaXggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1zaXgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYxXSwgXCJmNTI2XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYU1vc3F1aXRvTmV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vc3F1aXRvLW5ldCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyY1wiLCBcIk0xNjguOCA0NjIuM2MtNy45LTQtMTEuMS0xMy42LTcuMi0yMS41TDE5MiAzODAuMmwwLTQ0LjJjMC00LjIgMS43LTguMyA0LjctMTEuM0wyNTYgMjY1LjRWMjQyLjJMMTM5LjIgMzQ0Qzg3LjggMzk1LjMgMCAzNTguOSAwIDI4Ni4zYzAtNDEuMSAzMC42LTc1LjggNzEuNC04MC45bDE1OS45LTIzLjktNDkuNi00MS4zYy01LjEtNC4yLTctMTEuMS00LjktMTcuNGwxMy45LTQxLjctMjktNTguMWMtNC03LjktLjctMTcuNSA3LjItMjEuNXMxNy41LS43IDIxLjUgNy4ybDMyIDY0YzEuOSAzLjggMi4yIDguMiAuOSAxMi4ybC0xMi41IDM3LjZMMjU2IDE2MC41VjEzNy45YzAtMTQuOSAxMC4xLTI3LjMgMjMuOC0zMVY2My43YzAtNC41IDMuNy04LjIgOC4yLTguMnM4LjIgMy43IDguMiA4LjJWMTA3YzEzLjcgMy42IDIzLjggMTYuMSAyMy44IDMxdjIyLjZsNDUuNC0zNy44TDM1Mi44IDg1LjFjLTEuMy00LTEtOC40IC45LTEyLjJsMzItNjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtMjkgNTguMSAxMy45IDQxLjdjMi4xIDYuMiAuMSAxMy4xLTQuOSAxNy40bC00OS42IDQxLjMgMTU5LjkgMjMuOWMyMi41IDIuOCA0MS44IDE0LjYgNTQuNyAzMS40Yy0yLjcgMi42LTUuMiA1LjQtNy4zIDguNmMtOC42LTEyLjktMjMuMy0yMS41LTQwLTIxLjVzLTMxLjQgOC41LTQwIDIxLjVjLTguNi0xMi45LTIzLjMtMjEuNS00MC0yMS41Yy0yMS43IDAtNDAgMTQuMy00NS45IDM0LjFjLTEwLjcgMy4yLTE5LjggMTAuMS0yNS45IDE5LjJsLTQwLjItMzV2MjMuMWwzMi40IDMyLjRjLS4zIDItLjQgNC4xLS40IDYuMmMwIDE2LjcgOC41IDMxLjQgMjEuNSA0MGMtNCAyLjYtNy41IDUuOS0xMC42IDkuNUwzMjAgMzEwLjZ2NTBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ2LTUwbC0zMiAzMiAwIDQxLjRjMCAyLjUtLjYgNC45LTEuNyA3LjJsLTMyIDY0Yy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJ6TTUxMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2djE2aDQ4VjI3MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDYwOHY0OGgxNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2MDh2NDhoMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjA4djE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjQ4MEg1Mjh2MTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNDgwSDQ0OHYxNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY0ODBINDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2VjQwMEg0MDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMTZWMzIwSDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYxNmg0OFYyNzJjMC04LjggNy4yLTE2IDE2LTE2em0xNiAxMTJoNDhWMzIwSDUyOHY0OHptMCA4MGg0OFY0MDBINTI4djQ4ek00NDggMzIwdjQ4aDQ4VjMyMEg0NDh6bTAgODB2NDhoNDhWNDAwSDQ0OHpcIl1cbn07XG52YXIgZmFCcmlkZ2VXYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2Utd2F0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0Y2VcIiwgXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzUuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNGMtMzcuMyAwLTY3LjYgMzAuMi02Ny42IDY3LjZWMzUyLjVjLTEyLjkgMC0yNS44IDMuOS0zNi44IDExLjdjLTE4IDEyLjQtNDAuMSAyMC4zLTU5LjIgMjAuM2gwbDAtLjVWMjU2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2VjM4NGwwIC41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMTEuMS03LjgtMjQtMTEuNy0zNi45LTExLjdWMjI3LjZDOTYgMTkwLjIgNjUuOCAxNjAgMjguNCAxNjBDMTIuNyAxNjAgMCAxNDcuMyAwIDEzMS42Vjk2ek0zMDYuNSAzODkuOUMzMjkgNDA1LjQgMzU2LjUgNDE2IDM4NCA0MTZjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDY5LjcgNDE3IDQ4MCAzODQgNDgwYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgNDA1LjIgMTY1LjEgNDE2IDE5MiA0MTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhUGVyc29uQm9vdGggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJvb3RoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNzU2XCIsIFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjRWMzJ6bTMyMCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyek0yMjQgNTEyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyMEgxOTJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0zMjAgMGMtOS4zIDAtMTguMSA0LTI0LjIgMTFzLTguOCAxNi4zLTcuNSAyNS41bDMxLjIgMjE4LjZMMjg4LjYgNDA5LjdjLTMuNSAxNy4zIDcuOCAzNC4yIDI1LjEgMzcuN3MzNC4yLTcuOCAzNy43LTI1LjFsLjctMy42YzEuMyAxNi40IDE1LjEgMjkuNCAzMS45IDI5LjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMjB6TTExMiA4MEE0OCA0OCAwIDEgMCAxNiA4MGE0OCA0OCAwIDEgMCA5NiAwem0wIDI2MS4zVjI2OS4zbDQuNyA0LjdjOSA5IDIxLjIgMTQuMSAzMy45IDE0LjFIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE1Ny4zbC00MS42LTQxLjZjLTE0LjMtMTQuMy0zMy44LTIyLjQtNTQtMjIuNEMyNy42IDE2MCAwIDE4Ny42IDAgMjIxLjZ2NTUuN2wwIC45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGwzMiA0Mi43VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQyMS4zYzAtMTAuNC0zLjQtMjAuNS05LjYtMjguOEwxMTIgMzQxLjN6XCJdXG59O1xudmFyIGZhVGV4dFdpZHRoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtd2lkdGgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzVcIiwgXCJNNjQgMTI4Vjk2SDE5MmwwIDEyOEgxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjU2bDAtMTI4SDM4NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDIyNCA0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTkuNCAzNjEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlY0MTZIMzIwdjMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNnYzMkgxMjhWMzIwYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHpcIl1cbn07XG52YXIgZmFIYXRXaXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGF0LXdpemFyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZlOFwiLCBcIk02NCA0MTZMMTY4LjYgMTgwLjdjMTUuMy0zNC40IDQwLjMtNjMuNSA3Mi04My43bDE0Ni45LTk0YzMtMS45IDYuNS0yLjkgMTAtMi45QzQwNy43IDAgNDE2IDguMyA0MTYgMTguNnYxLjZjMCAyLjYtLjUgNS4xLTEuNCA3LjVMMzU0LjggMTc2LjljLTEuOSA0LjctMi44IDkuNy0yLjggMTQuN2MwIDUuNSAxLjIgMTEgMy40IDE2LjFMNDQ4IDQxNkgyNDAuOWwxMS44LTM1LjQgNDAuNC0xMy41YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ycy00LjQtMTMtMTAuOS0xNS4ybC00MC40LTEzLjUtMTMuNS00MC40QzIzNyAyNzYuNCAyMzAuOSAyNzIgMjI0IDI3MnMtMTMgNC40LTE1LjIgMTAuOWwtMTMuNSA0MC40LTQwLjQgMTMuNUMxNDguNCAzMzkgMTQ0IDM0NS4xIDE0NCAzNTJzNC40IDEzIDEwLjkgMTUuMmw0MC40IDEzLjVMMjA3LjEgNDE2SDY0ek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhUGVuRmFuY3kgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLWZhbmN5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk1LCAxMDAwMl0sIFwiZjVhY1wiLCBcIk0zNzMuNSAyNy4xQzM4OC41IDkuOSA0MTAuMiAwIDQzMyAwYzQzLjYgMCA3OSAzNS40IDc5IDc5YzAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjc3LjcgMzE5bC0xMC4zLTEwLjMtNjQtNjRMMTkzIDIzNC4zIDM3My41IDI3LjF6TTE3MC4zIDI1Ni45bDEwLjQgMTAuNCA2NCA2NCAxMC40IDEwLjQtMTkuMiA4My40Yy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40TDI0LjQgNTEwLjNsOTUuNC05NS40YzIuNiAuNyA1LjQgMS4xIDguMyAxLjFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCAyLjkgLjQgNS42IDEuMSA4LjNMMS43IDQ4Ny42IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhsODMuNC0xOS4yelwiXVxufTtcbnZhciBmYVBlcnNvbkRpZ2dpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRpZ2dpbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImRpZ2dpbmdcIl0sIFwiZjg1ZVwiLCBcIk0yMDggNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNOS44IDIxNC44YzUuMS0xMi4yIDE5LjEtMTggMzEuNC0xMi45TDYwLjcgMjEwbDIyLjktMzguMUM5OS45IDE0NC42IDEyOS4zIDEyOCAxNjEgMTI4YzUxLjQgMCA5NyAzMi45IDExMy4zIDgxLjdsMzQuNiAxMDMuNyA3OS4zIDMzLjEgMzQuMi00NS42YzYuNC04LjUgMTYuNi0xMy4zIDI3LjItMTIuOHMyMC4zIDYuNCAyNS44IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMnMtMTYuMyAxNi4yLTI3LjggMTYuMkgyODhjLTExLjEgMC0yMS40LTUuNy0yNy4yLTE1LjJzLTYuNC0yMS4yLTEuNC0zMS4xbDE2LTMyYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdoMzJsMjIuNS0zMEwyMi44IDI0Ni4yYy0xMi4yLTUuMS0xOC0xOS4xLTEyLjktMzEuNHptODIuOCA5MS44bDExMiA0OGMxMS44IDUgMTkuNCAxNi42IDE5LjQgMjkuNHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MDUuMWwtNjAuNi0yNi0zNyAxMTFjLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJTLTMuOSA0ODYuNiAxLjYgNDY5LjlsNDgtMTQ0IDExLTMzIDMyIDEzLjd6XCJdXG59O1xudmFyIGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZztcbnZhciBmYVRyYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMWY4XCIsIFwiTTEzNS4yIDE3LjdMMTI4IDMySDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwbC03LjItMTQuM0MzMDcuNCA2LjggMjk2LjMgMCAyODQuMiAwSDE2My44Yy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43ek00MTYgMTI4SDMyTDUzLjIgNDY3YzEuNiAyNS4zIDIyLjYgNDUgNDcuOSA0NUgzNDYuOWMyNS4zIDAgNDYuMy0xOS43IDQ3LjktNDVMNDE2IDEyOHpcIl1cbn07XG52YXIgZmFHYXVnZVNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1zaW1wbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdhdWdlLXNpbXBsZS1tZWRcIiwgXCJ0YWNob21ldGVyLWF2ZXJhZ2VcIl0sIFwiZjYyOVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNWODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWMjkyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuM2MwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUdhdWdlU2ltcGxlTWVkID0gZmFHYXVnZVNpbXBsZTtcbnZhciBmYVRhY2hvbWV0ZXJBdmVyYWdlID0gZmFHYXVnZVNpbXBsZTtcbnZhciBmYUJvb2tNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stbWVkaWNhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjdlNlwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwSDM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0IDk2Yy01MyAwLTk2LTQzLTk2LTk2Vjk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyVjM4NEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTIwOCAxMTJ2NDhIMTYwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjI0aDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDI3MlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYVBvbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwb28nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNjldLCBcImYyZmVcIiwgXCJNMjY4LjkgLjljLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS40YzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjFjMCA0NC4xLTM1LjcgNzkuOS03OS44IDgwSDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjRjMCAxOS4xIDguNCAzNi4zIDIxLjcgNDhIMTA0Yy0zOS44IDAtNzIgMzIuMi03MiA3MmMwIDIzLjIgMTEgNDMuOCAyOCA1N2MtMzQuMSA1LjctNjAgMzUuMy02MCA3MWMwIDM5LjggMzIuMiA3MiA3MiA3Mkg0NDBjMzkuOCAwIDcyLTMyLjIgNzItNzJjMC0zNS43LTI1LjktNjUuMy02MC03MWMxNy0xMy4yIDI4LTMzLjggMjgtNTdjMC0zOS44LTMyLjItNzItNzItNzJIMzk0LjNjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0aC01LjVjMy41LTEwIDUuNS0yMC44IDUuNS0zMmMwLTQ4LjYtMzYuMi04OC44LTgzLjEtOTUuMXpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTY0IDEwOC4zYzAgMi40LS43IDQuOC0yLjIgNi43Yy04LjIgMTAuNS0zOS41IDQ1LTkzLjggNDVzLTg1LjYtMzQuNi05My44LTQ1Yy0xLjUtMS45LTIuMi00LjMtMi4yLTYuN2MwLTYuOCA1LjUtMTIuMyAxMi4zLTEyLjNIMzM5LjdjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zelwiXVxufTtcbnZhciBmYVF1b3RlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVvdGUtcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIxLCBcInF1b3RlLXJpZ2h0LWFsdFwiXSwgXCJmMTBlXCIsIFwiTTQ0OCAyOTZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBoLThjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOGMzMC45IDAgNTYtMjUuMSA1Ni01NnYtOEgzMjBjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NGg2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMiAzMiA3MnptLTI1NiAwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwSDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDhjMzAuOSAwIDU2LTI1LjEgNTYtNTZ2LThINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NGg2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMiAzMiA3MnpcIl1cbn07XG52YXIgZmFRdW90ZVJpZ2h0QWx0ID0gZmFRdW90ZVJpZ2h0O1xudmFyIGZhU2hpcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpcnQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwODUsIFwidC1zaGlydFwiLCBcInRzaGlydFwiXSwgXCJmNTUzXCIsIFwiTTIxMS44IDBjNy44IDAgMTQuMyA1LjcgMTYuNyAxMy4yQzI0MC44IDUxLjkgMjc3LjEgODAgMzIwIDgwczc5LjItMjguMSA5MS41LTY2LjhDNDEzLjkgNS43IDQyMC40IDAgNDI4LjIgMGgxMi42YzIyLjUgMCA0NC4yIDcuOSA2MS41IDIyLjNMNjI4LjUgMTI3LjRjNi42IDUuNSAxMC43IDEzLjUgMTEuNCAyMi4xcy0yLjEgMTcuMS03LjggMjMuNmwtNTYgNjRjLTExLjQgMTMuMS0zMS4yIDE0LjYtNDQuNiAzLjVMNDgwIDE5Ny43VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE5Ny43bC01MS41IDQyLjljLTEzLjMgMTEuMS0zMy4xIDkuNi00NC42LTMuNWwtNTYtNjRjLTUuNy02LjUtOC41LTE1LTcuOC0yMy42czQuOC0xNi42IDExLjQtMjIuMUwxMzcuNyAyMi4zQzE1NSA3LjkgMTc2LjcgMCAxOTkuMiAwaDEyLjZ6XCJdXG59O1xudmFyIGZhVFNoaXJ0ID0gZmFTaGlydDtcbnZhciBmYVRzaGlydCA9IGZhU2hpcnQ7XG52YXIgZmFDdWJlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjdWJlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjFiM1wiLCBcIk0yOTAuOCA0OC42bDc4LjQgMjkuN0wyODggMTA5LjUgMjA2LjggNzguM2w3OC40LTI5LjdjMS44LS43IDMuOC0uNyA1LjcgMHpNMTM2IDkyLjVWMjA0LjdjLTEuMyAuNC0yLjYgLjgtMy45IDEuM2wtOTYgMzYuNEMxNC40IDI1MC42IDAgMjcxLjUgMCAyOTQuN1Y0MTMuOWMwIDIyLjIgMTMuMSA0Mi4zIDMzLjUgNTEuM2w5NiA0Mi4yYzE0LjQgNi4zIDMwLjcgNi4zIDQ1LjEgMEwyODggNDU3LjVsMTEzLjUgNDkuOWMxNC40IDYuMyAzMC43IDYuMyA0NS4xIDBsOTYtNDIuMmMyMC4zLTguOSAzMy41LTI5LjEgMzMuNS01MS4zVjI5NC43YzAtMjMuMy0xNC40LTQ0LjEtMzYuMS01Mi40bC05Ni0zNi40Yy0xLjMtLjUtMi42LS45LTMuOS0xLjNWOTIuNWMwLTIzLjMtMTQuNC00NC4xLTM2LjEtNTIuNGwtOTYtMzYuNGMtMTIuOC00LjgtMjYuOS00LjgtMzkuNyAwbC05NiAzNi40QzE1MC40IDQ4LjQgMTM2IDY5LjMgMTM2IDkyLjV6TTM5MiAyMTAuNmwtODIuNCAzMS4yVjE1Mi42TDM5MiAxMjF2ODkuNnpNMTU0LjggMjUwLjlsNzguNCAyOS43TDE1MiAzMTEuNyA3MC44IDI4MC42bDc4LjQtMjkuN2MxLjgtLjcgMy44LS43IDUuNyAwem0xOC44IDIwNC40VjM1NC44TDI1NiAzMjMuMnY5NS45bC04Mi40IDM2LjJ6TTQyMS4yIDI1MC45YzEuOC0uNyAzLjgtLjcgNS43IDBsNzguNCAyOS43TDQyNCAzMTEuN2wtODEuMi0zMS4xIDc4LjQtMjkuN3pNNTIzLjIgNDIxLjJsLTc3LjYgMzQuMVYzNTQuOEw1MjggMzIzLjJ2OTAuN2MwIDMuMi0xLjkgNi00LjggNy4zelwiXVxufTtcbnZhciBmYURpdmlkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaXZpZGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDEzNSwgMjQ3XSwgXCJmNTI5XCIsIFwiTTI3MiA5NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0wIDMyMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00MDAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQwMHpcIl1cbn07XG52YXIgZmFUZW5nZVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVuZ2Utc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgWzgzNzYsIFwidGVuZ2VcIl0sIFwiZjdkN1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgxOTIgMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFUZW5nZSA9IGZhVGVuZ2VTaWduO1xudmFyIGZhSGVhZHBob25lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkcGhvbmVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTExXSwgXCJmMDI1XCIsIFwiTTI1NiA4MEMxNDkuOSA4MCA2Mi40IDE1OS40IDQ5LjYgMjYyYzkuNC0zLjggMTkuNi02IDMwLjQtNmMyNi41IDAgNDggMjEuNSA0OCA0OFY0MzJjMCAyNi41LTIxLjUgNDgtNDggNDhjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjM4NCAzMzYgMjg4QzAgMTQ2LjYgMTE0LjYgMzIgMjU2IDMyczI1NiAxMTQuNiAyNTYgMjU2djQ4IDQ4IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhjMTAuOCAwIDIxIDIuMSAzMC40IDZDNDQ5LjYgMTU5LjQgMzYyLjEgODAgMjU2IDgwelwiXVxufTtcbnZhciBmYUhhbmRzSG9sZGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1ob2xkaW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGMyXCIsIFwiTTgwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MFMwIDgxLjkgMCAxMDR2NTYgNjRWMzI1LjVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTI4IDQ5My4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdIMjQwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjM4NS4xYzAtMjkuNy0xMS44LTU4LjItMzIuOC03OS4ybC0yNS4zLTI1LjMgMCAwLTE1LjItMTUuMi0zMi0zMmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMzIgMzIgMTUuMiAxNS4yYzExIDExIDkuMiAyOS4yLTMuNyAzNy44Yy05LjcgNi41LTIyLjcgNS4yLTMxLTMuMUw5OC43IDMwOS41Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zVjIyNCAxNDQgMTA0em00ODAgMHY0MCA4MCA0MC4yYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01MS4xIDUxLjFjLTguMyA4LjMtMjEuMyA5LjYtMzEgMy4xYy0xMi45LTguNi0xNC43LTI2LjktMy43LTM3LjhsMTUuMi0xNS4yIDMyLTMyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0zMiAzMi0xNS4yIDE1LjIgMCAwLTI1LjMgMjUuM2MtMjEgMjEtMzIuOCA0OS41LTMyLjggNzkuMlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNjYuN2MxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOVYyMjQgMTYwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHpcIl1cbn07XG52YXIgZmFIYW5kc0NsYXBwaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWNsYXBwaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMWE4XCIsIFwiTTMzNiAxNlY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0tOTguNyA3LjFsMzIgNDhjNC45IDcuNCAyLjkgMTcuMy00LjQgMjIuMnMtMTcuMyAyLjktMjIuMi00LjRsLTMyLTQ4Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40ek0xMzUgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI5Mi43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQ1LjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40Yy02NCAzOC40LTE0NS44IDI4LjMtMTk4LjUtMjQuNEw3IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDUzIDUzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDIzIDI2NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkzIDkzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDU1IDE4NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDExNyAxMTdjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFsLTkzLTkzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNNDMzLjEgNDg0LjljLTI0LjIgMTQuNS01MC45IDIyLjEtNzcuNyAyMy4xYzQ4LjEtMzkuNiA3Ni42LTk5IDc2LjYtMTYyLjRsMC05OC4xYzguMi0uMSAxNi02LjQgMTYtMTZWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQ1LjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40ek00MjQuOSAxOC43YzcuNCA0LjkgOS4zIDE0LjggNC40IDIyLjJsLTMyIDQ4Yy00LjkgNy40LTE0LjggOS4zLTIyLjIgNC40cy05LjMtMTQuOC00LjQtMjIuMmwzMi00OGM0LjktNy40IDE0LjgtOS4zIDIyLjItNC40elwiXVxufTtcbnZhciBmYVJlcHVibGljYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVwdWJsaWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjc1ZVwiLCBcIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMySDM4NGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MHY2NEgwVjE5MnptNDE1LjktNjRjLTIuNCAwLTQuNyAxLjMtNS43IDMuNGwtMTIuNiAyNC42LTI4LjIgNGMtMi40IC4zLTQuNCAyLTUuMiA0LjJzLS4xIDQuNyAxLjYgNi4zbDIwLjQgMTkuMi00LjggMjcuMWMtLjQgMi4zIC42IDQuNyAyLjUgNnM0LjYgMS42IDYuNyAuNWwyNS4yLTEyLjggMjUuMiAxMi44YzIuMiAxLjEgNC44IC45IDYuNy0uNXMzLTMuNyAyLjUtNmwtNC44LTI3LjFMNDY2IDE3MC41YzEuNy0xLjYgMi40LTQuMSAxLjYtNi4zcy0yLjgtMy45LTUuMi00LjJsLTI4LjItNC0xMi42LTI0LjZjLTEuMS0yLjEtMy4zLTMuNC01LjctMy40em0tMTM4LjMgMy40Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHMtNC43IDEuMy01LjcgMy40bC0xMi42IDI0LjYtMjguMiA0Yy0yLjQgLjMtNC40IDItNS4yIDQuMnMtLjEgNC43IDEuNiA2LjNsMjAuNCAxOS4yLTQuOCAyNy4xYy0uNCAyLjMgLjYgNC43IDIuNSA2czQuNiAxLjYgNi43IC41bDI1LjItMTIuOCAyNS4yIDEyLjhjMi4yIDEuMSA0LjggLjkgNi43LS41czMtMy43IDIuNS02bC00LjgtMjcuMUwzMjIgMTcwLjVjMS43LTEuNiAyLjQtNC4xIDEuNi02LjNzLTIuOC0zLjktNS4yLTQuMmwtMjguMi00LTEyLjYtMjQuNnpNMTI3LjkgMTI4Yy0yLjQgMC00LjcgMS4zLTUuNyAzLjRsLTEyLjYgMjQuNi0yOC4yIDRjLTIuNCAuMy00LjQgMi01LjIgNC4ycy0uMSA0LjcgMS42IDYuM2wyMC40IDE5LjItNC44IDI3LjFjLS40IDIuMyAuNiA0LjcgMi41IDZzNC42IDEuNiA2LjcgLjVsMjUuMi0xMi44IDI1LjIgMTIuOGMyLjIgMS4xIDQuOCAuOSA2LjctLjVzMy0zLjcgMi41LTZsLTQuOC0yNy4xTDE3OCAxNzAuNWMxLjctMS42IDIuNC00LjEgMS42LTYuM3MtMi44LTMuOS01LjItNC4ybC0yOC4yLTQtMTIuNi0yNC42Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHptLjEgMTYwSDMyMGg5NiAzMiA2NCAzMnYzMiA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwVjM1Mkg0NDh2MzIgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRIMTI4djY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODQgMjg4SDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTJdLCBcImYwNjBcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjIgMjg4IDQxNiAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwNi43IDBMMjE0LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6XCJdXG59O1xudmFyIGZhUGVyc29uQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0M1wiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhUnVsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVsZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMDddLCBcImY1NDVcIiwgXCJNMTc3LjkgNDk0LjFjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwTDE3LjkgNDAxLjljLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45bDUwLjctNTAuNyA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDUwLjctNTAuN2MxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMGw5Mi4xIDkyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMTc3LjkgNDk0LjF6XCJdXG59O1xudmFyIGZhQWxpZ25MZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FsaWduLWxlZnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzZcIiwgXCJNMjg4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMkgyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhRGljZUQ2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtZDYnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY2ZDFcIiwgXCJNMjAxIDEwLjNjMTQuMy03LjggMzEuNi03LjggNDYgMEw0MjIuMyAxMDZjNS4xIDIuOCA4LjMgOC4yIDguMyAxNHMtMy4yIDExLjItOC4zIDE0TDIzMS43IDIzOGMtNC44IDIuNi0xMC41IDIuNi0xNS4zIDBMMjUuNyAxMzRjLTUuMS0yLjgtOC4zLTguMi04LjMtMTRzMy4yLTExLjIgOC4zLTE0TDIwMSAxMC4zek0yMy43IDE3MGwxNzYgOTZjNS4xIDIuOCA4LjMgOC4yIDguMyAxNFY0OTZjMCA1LjYtMyAxMC45LTcuOCAxMy44cy0xMC45IDMtMTUuOCAuM0wyNSA0MjMuMUM5LjYgNDE0LjcgMCAzOTguNiAwIDM4MVYxODRjMC01LjYgMy0xMC45IDcuOC0xMy44czEwLjktMyAxNS44LS4zem00MDAuNyAwYzUtMi43IDExLTIuNiAxNS44IC4zczcuOCA4LjEgNy44IDEzLjhWMzgxYzAgMTcuNi05LjYgMzMuNy0yNSA0Mi4xTDI2My43IDUxMGMtNSAyLjctMTEgMi42LTE1LjgtLjNzLTcuOC04LjEtNy44LTEzLjhWMjgwYzAtNS45IDMuMi0xMS4yIDguMy0xNGwxNzYtOTZ6XCJdXG59O1xudmFyIGZhUmVzdHJvb20gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVzdHJvb20nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3YmRcIiwgXCJNODAgNDhhNDggNDggMCAxIDEgOTYgMEE0OCA0OCAwIDEgMSA4MCA0OHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMjUuMmMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjRjLTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDMwLjktOTkuMUM0NC45IDE1NS4zIDgyIDEyOCAxMjQgMTI4aDhjNDIgMCA3OS4xIDI3LjMgOTEuNiA2Ny40bDMwLjkgOTkuMWM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xYy0xMi40IDMuOS0yNS40LS4yLTMzLjUtOS40VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTIwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQ2NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00NDAgNDgwVjM4NEg0MjIuMmMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsOS0yNi45Yy0zLjIgMC02LjQtLjUtOS41LTEuNWMtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjFjLTMuMiAxLTYuNCAxLjUtOS41IDEuNWw5IDI2LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xSDU4NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRINTA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyelwiXVxufTtcbnZhciBmYUogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwNl0sIFwiNGFcIiwgXCJNMjg4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwVjI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVXNlcnNWaWV3ZmluZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXZpZXdmaW5kZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OTVcIiwgXCJNNDggNDhoODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzJDMTQuMyAwIDAgMTQuMyAwIDMyVjEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQ4ek0xNzUuOCAyMjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tMjYuNSAzMkMxMTkuOSAyNTYgOTYgMjc5LjkgOTYgMzA5LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdoNTYuMWM4LTM0LjEgMzIuOC02MS43IDY1LjItNzMuNmMtNy41LTQuMS0xNi4yLTYuNC0yNS4zLTYuNEgxNDkuM3ptMzY4IDgwYzE0LjcgMCAyNi43LTExLjkgMjYuNy0yNi43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zSDQyMS4zYy05LjIgMC0xNy44IDIuMy0yNS4zIDYuNGMzMi40IDExLjkgNTcuMiAzOS41IDY1LjIgNzMuNmg1Ni4xem0tODkuNCAwYy04LjYtMjQuMy0yOS45LTQyLjYtNTUuOS00N2MtMy45LS43LTcuOS0xLTEyLTFIMjgwYy00LjEgMC04LjEgLjMtMTIgMWMtMjYgNC40LTQ3LjMgMjIuNy01NS45IDQ3Yy0yLjcgNy41LTQuMSAxNS42LTQuMSAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNEg0MDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC04LjQtMS40LTE2LjUtNC4xLTI0ek00NjQgMjI0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwLTMyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNTA0IDQ4aDg4djg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJINTA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek00OCA0NjRWMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDh6bTQ1NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNzZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2ODhINTA0elwiXVxufTtcbnZhciBmYUZpbGVWaWRlbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXZpZGVvJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMWM4XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODh6TTMwMC45IDM5Ny45TDI1NiAzNjhWMzA0bDQ0LjktMjkuOWMyLTEuMyA0LjQtMi4xIDYuOC0yLjFjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zVjM4Ny43YzAgNi44LTUuNSAxMi4zLTEyLjMgMTIuM2MtMi40IDAtNC44LS43LTYuOC0yLjF6XCJdXG59O1xudmFyIGZhVXBSaWdodEZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtcmlnaHQtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImV4dGVybmFsLWxpbmstYWx0XCJdLCBcImYzNWRcIiwgXCJNMzUyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDM3MC43IDk2IDIwMS40IDI2NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQxNiAxNDEuM2w0MS40IDQxLjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJ6TTgwIDMyQzM1LjggMzIgMCA2Ny44IDAgMTEyVjQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0MDBjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2SDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MHpcIl1cbn07XG52YXIgZmFFeHRlcm5hbExpbmtBbHQgPSBmYVVwUmlnaHRGcm9tU3F1YXJlO1xudmFyIGZhVGFibGVDZWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGhcIl0sIFwiZjAwYVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTg4IDY0djY0SDY0Vjk2aDg4em01NiAwaDg4djY0SDIwOFY5NnptMjQwIDB2NjRIMzYwVjk2aDg4ek02NCAyMjRoODh2NjRINjRWMjI0em0yMzIgMHY2NEgyMDhWMjI0aDg4em02NCAwaDg4djY0SDM2MFYyMjR6TTE1MiAzNTJ2NjRINjRWMzUyaDg4em01NiAwaDg4djY0SDIwOFYzNTJ6bTI0MCAwdjY0SDM2MFYzNTJoODh6XCJdXG59O1xudmFyIGZhVGggPSBmYVRhYmxlQ2VsbHM7XG52YXIgZmFGaWxlUGRmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcGRmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMWMxXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMTQ0LTIwOCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE0NC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0zODQgNjRsLTEyOCAwTDI1NiAwIDM4NCAxMjh6TTE3NiAzNTJsMzIgMGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1NmwtMTYgMCAwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDggMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6bTMyIDgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwIDAgNDggMTYgMHptOTYtODBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMjhjMC04LjggNy4yLTE2IDE2LTE2em0zMiAxMjhjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwIDAgOTYgMTYgMHptODAtMTEyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwIDAgMzIgMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNjQgMC02NHpcIl1cbn07XG52YXIgZmFCb29rQmlibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1iaWJsZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYmlibGVcIl0sIFwiZjY0N1wiLCBcIk05NiAwQzQzIDAgMCA0MyAwIDk2VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0IDk2em0wIDM4NEgzNTJ2NjRIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTIwOCA4MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyVjMwNGMwIDguOC03LjIgMTYtMTYgMTZIMjI0Yy04LjggMC0xNi03LjItMTYtMTZWMTkySDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZoNDhWODB6XCJdXG59O1xudmFyIGZhQmlibGUgPSBmYUJvb2tCaWJsZTtcbnZhciBmYU8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbycsXG4gIGljb246IFs0NDgsIDUxMiwgWzExMV0sIFwiNGZcIiwgXCJNMjI0IDk2YTE2MCAxNjAgMCAxIDAgMCAzMjAgMTYwIDE2MCAwIDEgMCAwLTMyMHpNNDQ4IDI1NkEyMjQgMjI0IDAgMSAxIDAgMjU2YTIyNCAyMjQgMCAxIDEgNDQ4IDB6XCJdXG59O1xudmFyIGZhU3VpdGNhc2VNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1lZGtpdFwiXSwgXCJmMGZhXCIsIFwiTTE4NCA0OEgzMjhjNC40IDAgOCAzLjYgOCA4Vjk2SDE3NlY1NmMwLTQuNCAzLjYtOCA4LTh6bS01NiA4Vjk2djMyVjQ4MEgzODRWMTI4IDk2IDU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTk2IDk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIOTZWOTZ6TTQxNiA0ODBoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQxNlY0ODB6TTIyNCAyMDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI4OHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjA4elwiXVxufTtcbnZhciBmYU1lZGtpdCA9IGZhU3VpdGNhc2VNZWRpY2FsO1xudmFyIGZhVXNlclNlY3JldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXNlY3JldCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODM3M10sIFwiZjIxYlwiLCBcIk0yMjQgMTZjLTYuNyAwLTEwLjgtMi44LTE1LjUtNi4xQzIwMS45IDUuNCAxOTQgMCAxNzYgMGMtMzAuNSAwLTUyIDQzLjctNjYgODkuNEM2Mi43IDk4LjEgMzIgMTEyLjIgMzIgMTI4YzAgMTQuMyAyNSAyNy4xIDY0LjYgMzUuOWMtLjQgNC0uNiA4LS42IDEyLjFjMCAxNyAzLjMgMzMuMiA5LjMgNDhINDUuNEMzOCAyMjQgMzIgMjMwIDMyIDIzNy40YzAgMS43IC4zIDMuNCAxIDVsMzguOCA5Ni45QzI4LjIgMzcxLjggMCA0MjMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC01OC41LTI4LjItMTEwLjQtNzEuNy0xNDNMNDE1IDI0Mi40Yy42LTEuNiAxLTMuMyAxLTVjMC03LjQtNi0xMy40LTEzLjQtMTMuNEgzNDIuN2M2LTE0LjggOS4zLTMxIDkuMy00OGMwLTQuMS0uMi04LjEtLjYtMTIuMUMzOTEgMTU1LjEgNDE2IDE0Mi4zIDQxNiAxMjhjMC0xNS44LTMwLjctMjkuOS03OC0zOC42QzMyNCA0My43IDMwMi41IDAgMjcyIDBjLTE4IDAtMjUuOSA1LjQtMzIuNSA5LjljLTQuOCAzLjMtOC44IDYuMS0xNS41IDYuMXptNTYgMjA4SDI2Ny42Yy0xNi41IDAtMzEuMS0xMC42LTM2LjMtMjYuMmMtMi4zLTctMTIuMi03LTE0LjUgMGMtNS4yIDE1LjYtMTkuOSAyNi4yLTM2LjMgMjYuMkgxNjhjLTIyLjEgMC00MC0xNy45LTQwLTQwVjE2OS42YzI4LjIgNC4xIDYxIDYuNCA5NiA2LjRzNjcuOC0yLjMgOTYtNi40VjE4NGMwIDIyLjEtMTcuOSA0MC00MCA0MHptLTg4IDk2bDE2IDMyTDE3NiA0ODAgMTI4IDI4OGw2NCAzMnptMTI4LTMyTDI3MiA0ODAgMjQwIDM1MmwxNi0zMiA2NC0zMnpcIl1cbn07XG52YXIgZmFPdHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdvdHRlcicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTQ0Nl0sIFwiZjcwMFwiLCBcIk0xODEuNSAxOTcuMWwxMi45IDYuNGM1LjkgMyAxMi40IDQuNSAxOS4xIDQuNWMyMy41IDAgNDIuNi0xOS4xIDQyLjYtNDIuNlYxNDRjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NHYyMS40YzAgMjMuNSAxOS4xIDQyLjYgNDIuNiA0Mi42YzYuNiAwIDEzLjEtMS41IDE5LjEtNC41bDEyLjktNi40IDguNC00LjJMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM1YxNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjR2My43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRMMTYwIDI0MGwtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42Yy0zLjYgMC03LjEtLjItMTAuNi0uNnYuNmMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRWMzM2IDMyMGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRjOS40LTUuNCAyMC4zLTguNiAzMi04LjZWMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMiAxNiA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwNC4zYzAtNDguMi0zMC44LTkxLTc2LjYtMTA2LjNsLTguNS0yLjhjLTgtMi43LTEyLjYtMTEuMS0xMC40LTE5LjNzMTAuMy0xMy4yIDE4LjYtMTEuNmwxOS45IDRDNTc2IDg2LjEgNjQwIDE2NC4yIDY0MCAyNTQuOWwwIDEuMWgwYzAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRoLTEuMUgyNTZoLS42QzEzMiA0ODAgMzIgMzgwIDMyIDI1Ni42VjI1NiAyMTYuOGMtMTAuMS0xNC42LTE2LTMyLjMtMTYtNTEuNFYxNDRsMC0xLjRDNi43IDEzOS4zIDAgMTMwLjUgMCAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMi44QzQ0LjggNTguMiA4My4zIDMyIDEyOCAzMmg2NGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0SDI5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNGMwIDEwLjUtNi43IDE5LjMtMTYgMjIuNmwwIDEuNHYyMS40YzAgMS40IDAgMi44LS4xIDQuM2MxMi02LjIgMjUuNy05LjYgNDAuMS05LjZoOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmgtOGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2OGg1Ni40Yy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0SDMyMGMtNDIuMyAwLTc4LjItMjcuNC05MS02NS4zYy01LjEgLjktMTAuMyAxLjMtMTUuNiAxLjNjLTE0LjEgMC0yNy45LTMuMy00MC41LTkuNnpNOTYgMTI4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptMTEyIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6XCJdXG59O1xudmFyIGZhUGVyc29uRHJlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJmZW1hbGVcIl0sIFwiZjE4MlwiLCBcIk0xNjAgMGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTg4IDM4NEg3MC4yYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw5My4zIDI0OC4xIDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1My42LTg5LjJjMjAuMy0zMy43IDU2LjctNTQuMyA5Ni01NC4zaDExLjZjMzkuMyAwIDc1LjcgMjAuNiA5NiA1NC4zbDUzLjYgODkuMmM5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOWwtMzMuOS01Ni4zTDI2NSAzNjIuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFIMjMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEgxNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0elwiXVxufTtcbnZhciBmYUZlbWFsZSA9IGZhUGVyc29uRHJlc3M7XG52YXIgZmFDb21tZW50RG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQtZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjUxXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjMgMCAwIDAgMCAwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXptMjAtMzEydjEzLjljNy41IDEuMiAxNC42IDIuOSAyMS4xIDQuN2MxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTExLTIuOS0yMS42LTUtMzEuMi01LjJjLTcuOS0uMS0xNiAxLjgtMjEuNSA1Yy00LjggMi44LTYuMiA1LjYtNi4yIDkuM2MwIDEuOCAuMSAzLjUgNS4zIDYuN2M2LjMgMy44IDE1LjUgNi43IDI4LjMgMTAuNWwuNyAuMmMxMS4yIDMuNCAyNS42IDcuNyAzNy4xIDE1YzEyLjkgOC4xIDI0LjMgMjEuMyAyNC42IDQxLjZjLjMgMjAuOS0xMC41IDM2LjEtMjQuOCA0NWMtNy4yIDQuNS0xNS4yIDcuMy0yMy4yIDlWMzQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYzMjkuNGMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40bDAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVWMTM2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXVxufTtcbnZhciBmYUJ1c2luZXNzVGltZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidXNpbmVzcy10aW1lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJicmllZmNhc2UtY2xvY2tcIl0sIFwiZjY0YVwiLCBcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjB2OTZIMTkyIDM1Mmg4LjJjMzIuMy0zOS4xIDgxLjEtNjQgMTM1LjgtNjRjNS40IDAgMTAuNyAuMiAxNiAuN1YxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzg0VjU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTMyMCAzNTJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzYwLjJDMzM1LjEgNDQ5LjYgMzIwIDQxMC41IDMyMCAzNjhjMC01LjQgLjItMTAuNyAuNy0xNmwtLjcgMHptMzIwIDE2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQ5NiAyODhjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQ5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQnJpZWZjYXNlQ2xvY2sgPSBmYUJ1c2luZXNzVGltZTtcbnZhciBmYVRhYmxlQ2VsbHNMYXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscy1sYXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGgtbGFyZ2VcIl0sIFwiZjAwOVwiLCBcIk00NDggOTZWMjI0SDI4OFY5Nkg0NDh6bTAgMTkyVjQxNkgyODhWMjg4SDQ0OHpNMjI0IDIyNEg2NFY5NkgyMjRWMjI0ek02NCAyODhIMjI0VjQxNkg2NFYyODh6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpcIl1cbn07XG52YXIgZmFUaExhcmdlID0gZmFUYWJsZUNlbGxzTGFyZ2U7XG52YXIgZmFCb29rVGFuYWtoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stdGFuYWtoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0YW5ha2hcIl0sIFwiZjgyN1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2VjQxNmMwIDUzLTQzIDk2LTk2IDk2SDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDY0IDM1MnptMCAzODRIOTZ2NjRIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0xMzguNyAyMDhsMTMuOSAyNEgxMjQuOWwxMy45LTI0em0tMTMuOS0yNEw5Ny4xIDIzMmMtNi4yIDEwLjcgMS41IDI0IDEzLjkgMjRoNTUuNGwyNy43IDQ4YzYuMiAxMC43IDIxLjYgMTAuNyAyNy43IDBsMjcuNy00OEgzMDVjMTIuMyAwIDIwLTEzLjMgMTMuOS0yNGwtMjcuNy00OCAyNy43LTQ4YzYuMi0xMC43LTEuNS0yNC0xMy45LTI0SDI0OS42TDIyMS45IDY0Yy02LjItMTAuNy0yMS42LTEwLjctMjcuNyAwbC0yNy43IDQ4SDExMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyNGwyNy43IDQ4em0yNy43IDBsMjcuNy00OGg1NS40bDI3LjcgNDgtMjcuNyA0OEgxODAuM2wtMjcuNy00OHptMC00OGwtMTMuOSAyNC0xMy45LTI0aDI3Ljd6bTQxLjYtMjRMMjA4IDg4bDEzLjkgMjRIMTk0LjF6bTY5LjMgMjRoMjcuN2wtMTMuOSAyNC0xMy45LTI0em0xMy45IDcybDEzLjkgMjRIMjYzLjRsMTMuOS0yNHptLTU1LjQgNDhMMjA4IDI4MGwtMTMuOS0yNGgyNy43elwiXVxufTtcbnZhciBmYVRhbmFraCA9IGZhQm9va1RhbmFraDtcbnZhciBmYVBob25lVm9sdW1lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bob25lLXZvbHVtZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widm9sdW1lLWNvbnRyb2wtcGhvbmVcIl0sIFwiZjJhMFwiLCBcIk0yODAgMEM0MDguMSAwIDUxMiAxMDMuOSA1MTIgMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTAxLjYtODIuNC0xODQtMTg0LTE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0tMzItNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xMTcuNSAxLjRjMTkuNC01LjMgMzkuNyA0LjYgNDcuNCAyMy4ybDQwIDk2YzYuOCAxNi4zIDIuMSAzNS4yLTExLjYgNDYuM0wxNDQgMjA3LjNjMzMuMyA3MC40IDkwLjMgMTI3LjQgMTYwLjcgMTYwLjdMMzQ1IDMxOC43YzExLjItMTMuNyAzMC0xOC40IDQ2LjMtMTEuNmw5NiA0MGMxOC42IDcuNyAyOC41IDI4IDIzLjIgNDcuNGwtMjQgODhDNDgxLjggNDk5LjkgNDY2IDUxMiA0NDggNTEyQzIwMC42IDUxMiAwIDMxMS40IDAgNjRDMCA0NiAxMi4xIDMwLjIgMjkuNSAyNS40bDg4LTI0elwiXVxufTtcbnZhciBmYVZvbHVtZUNvbnRyb2xQaG9uZSA9IGZhUGhvbmVWb2x1bWU7XG52YXIgZmFIYXRDb3dib3lTaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhdC1jb3dib3ktc2lkZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjhjMVwiLCBcIk0xNTIuNyAxMzUuOWwtMTAuNCA1Ny4yYzYuOC0uNyAxMy42LTEuMSAyMC41LTEuMWgxMC43YzM5LjQgMCA3Ny44IDEyLjEgMTEwLjEgMzQuN0w1NjIuNCA0MjEuOGwzNS4xIDI0LjZjMjQuNC02IDQyLjUtMjguMSA0Mi41LTU0LjRjMC03NS44LTk0LjctMTI2LjYtMTM0LjYtMTQ0LjdMNDc0IDgzLjlDNDY4LjIgNTMuOCA0NDEuOCAzMiA0MTEuMSAzMmgtMi43Yy01LjYgMC0xMS4xIC43LTE2LjUgMi4yTDE5OS4yIDg1LjVjLTIzLjkgNi40LTQyIDI2LTQ2LjUgNTAuNHpNMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTQ0TDI2NS4zIDI1Mi45Yy0yNi45LTE4LjgtNTguOS0yOC45LTkxLjgtMjguOUgxNjIuOWMtNjAuNiAwLTExNiAzNC4yLTE0My4xIDg4LjRMMTMuNSAzMjVDNC42IDM0Mi43IDAgMzYyLjMgMCAzODIuMlYzODR6XCJdXG59O1xudmFyIGZhQ2xpcGJvYXJkVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGlwYm9hcmQtdXNlcicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjdmM1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTEyOCAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek04MCA0MzJjMC00NC4yIDM1LjgtODAgODAtODBoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2hpbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYxYWVcIiwgXCJNOTYgNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyODcuOEw1OS4xIDMyMWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwUy00LjUgMzAxLjkgNC45IDI4N2wzOS45LTYzLjNDNjkuNyAxODQgMTEzLjIgMTYwIDE2MCAxNjBzOTAuMyAyNCAxMTUuMiA2My42TDMxNS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEwyNDAgMjg3LjhWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEgxNDR6XCJdXG59O1xudmFyIGZhTGlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlyYS1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbODM1Nl0sIFwiZjE5NVwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40VjE5MkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0OHYzMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0NmMtMi4yIDEwLjUtNi4xIDIwLjYtMTEuNyAyOS45TDQuNiA0MzEuNWMtNS45IDkuOS02LjEgMjIuMi0uNCAzMi4yUzIwLjUgNDgwIDMyIDQ4MEgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODguNWwuNy0xLjFjMTEuNi0xOS4zIDE4LjktNDAuNyAyMS42LTYyLjlIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYyNTZIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYxNjAuNHpcIl1cbn07XG52YXIgZmFTYXRlbGxpdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgXCJmN2JmXCIsIFwiTTIzMyA3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtOTYgOTZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDg5LjQgODkuNC0xNS41IDE1LjVDMTUyLjMgMjMwLjQgMTI0LjkgMjI0IDk2IDIyNGMtMzEuNyAwLTYxLjUgNy43LTg3LjggMjEuMmMtOSA0LjctMTAuMyAxNi43LTMuMSAyMy44TDExMi43IDM3Ni43IDk2LjMgMzkzLjFjLTIuNi0uNy01LjQtMS4xLTguMy0xLjFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOS0uNC01LjYtMS4xLTguM2wxNi40LTE2LjRMMjQyLjkgNTA2LjljNy4yIDcuMiAxOS4yIDUuOSAyMy44LTMuMUMyODAuMyA0NzcuNSAyODggNDQ3LjcgMjg4IDQxNmMwLTI4LjktNi40LTU2LjMtMTcuOC04MC45bDE1LjUtMTUuNUwzNzUgNDA5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDk2LTk2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC04OS40LTg5LjQgNTUtNTVjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTQ4LTQ4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNTUgNTVMMjMzIDd6bTE1OSAzNTFsLTcyLjQtNzIuNCA2Mi4xLTYyLjFMNDU0LjEgMjk2IDM5MiAzNTguMXpNMjI2LjMgMTkyLjRMMTUzLjkgMTIwIDIxNiA1Ny45bDcyLjQgNzIuNC02Mi4xIDYyLjF6XCJdXG59O1xudmFyIGZhUGxhbmVMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NThcIiwgXCJNMTkyIDkzLjdDMTkyIDU5LjUgMjIxIDAgMjU2IDBjMzYgMCA2NCA1OS41IDY0IDkzLjd2ODQuNmwxMDEuOCA1OC4yQzQxOCAyNDcuNiA0MTYgMjU5LjYgNDE2IDI3MnYyNC42Yy0xNy45IDEwLjQtMzAuMyAyOS4xLTMxLjggNTAuOUwzMjAgMzI5LjFWNDAwbDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOHYyNCAxOGMwIDcuOC02LjMgMTQtMTQgMTRjLTEuMyAwLTIuNi0uMi0zLjktLjVMMjU2IDQ4MCAxNDUuOSA1MTEuNWMtMS4zIC40LTIuNiAuNS0zLjkgLjVjLTcuOCAwLTE0LTYuMy0xNC0xNFY0NTZjMC01IDIuNC05LjggNi40LTEyLjhMMTkyIDQwMGwwLTcwLjktMTcxLjYgNDlDMTAuMiAzODEuMSAwIDM3My40IDAgMzYyLjhWMjk3LjNjMC01LjcgMy4xLTExIDguMS0xMy45TDE5MiAxNzguM1Y5My43ek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0OGg2NFYyNzJjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMlYyNzJ6XCJdXG59O1xudmFyIGZhVGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzk5MV0sIFwiZjAyYlwiLCBcIk0wIDgwVjIyOS41YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDE3NiAxNzZjMjUgMjUgNjUuNSAyNSA5MC41IDBMNDE4LjcgMzE3LjNjMjUtMjUgMjUtNjUuNSAwLTkwLjVsLTE3Ni0xNzZjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHptMTEyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFDb21tZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgXCJmMDc1XCIsIFwiTTUxMiAyNDBjMCAxMTQuOS0xMTQuNiAyMDgtMjU2IDIwOGMtMzcuMSAwLTcyLjMtNi40LTEwNC4xLTE3LjljLTExLjkgOC43LTMxLjMgMjAuNi01NC4zIDMwLjZDNzMuNiA0NzEuMSA0NC43IDQ4MCAxNiA0ODBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45Yy0yLjUtNi0xLjEtMTIuOCAzLjQtMTcuNGwwIDAgMCAwIDAgMCAwIDAgLjMtLjNjLjMtLjMgLjctLjcgMS4zLTEuNGMxLjEtMS4yIDIuOC0zLjEgNC45LTUuN2M0LjEtNSA5LjYtMTIuNCAxNS4yLTIxLjZjMTAtMTYuNiAxOS41LTM4LjQgMjEuNC02Mi45QzE3LjcgMzI2LjggMCAyODUuMSAwIDI0MEMwIDEyNS4xIDExNC42IDMyIDI1NiAzMnMyNTYgOTMuMSAyNTYgMjA4elwiXVxufTtcbnZhciBmYUNha2VDYW5kbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nha2UtY2FuZGxlcycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzg3NCwgXCJiaXJ0aGRheS1jYWtlXCIsIFwiY2FrZVwiXSwgXCJmMWZkXCIsIFwiTTg2LjQgNS41TDYxLjggNDcuNkM1OCA1NC4xIDU2IDYxLjYgNTYgNjkuMlY3MmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjY5LjJjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNiA1LjVDMTAzLjYgMi4xIDEwMCAwIDk2IDBzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggNDcuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZWNzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MFY2OS4yYzAtNy42LTItMTUtNS44LTIxLjZMMjMzLjYgNS41QzIzMS42IDIuMSAyMjggMCAyMjQgMHMtNy42IDIuMS05LjYgNS41ek0zMTcuOCA0Ny42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNlY3MmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjY5LjJjMC03LjYtMi0xNS01LjgtMjEuNkwzNjEuNiA1LjVDMzU5LjYgMi4xIDM1NiAwIDM1MiAwcy03LjYgMi4xLTkuNiA1LjVMMzE3LjggNDcuNnpNMTI4IDE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NzFjOC4zIDUuMiAxOC4xIDkgMjguOCA5YzEzLjUgMCAyNy4yLTYuMSAzOC40LTEzLjRjNS40LTMuNSA5LjktNy4xIDEzLTkuN2MxLjUtMS4zIDIuNy0yLjQgMy41LTMuMWMuNC0uNCAuNy0uNiAuOC0uOGwuMS0uMSAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMzLjEtMy4yIDcuNC00LjkgMTEuOS00LjhzOC42IDIuMSAxMS42IDUuNGwwIDAgMCAwIC4xIC4xYy4xIC4xIC40IC40IC43IC43Yy43IC43IDEuNyAxLjcgMy4xIDNjMi44IDIuNiA2LjggNi4xIDExLjggOS41YzEwLjIgNy4xIDIzIDEzLjEgMzYuMyAxMy4xczI2LjEtNiAzNi4zLTEzLjFjNS0zLjUgOS02LjkgMTEuOC05LjVjMS40LTEuMyAyLjQtMi4zIDMuMS0zYy4zLS4zIC42LS42IC43LS43bC4xLS4xYzMtMy41IDcuNC01LjQgMTItNS40czkgMiAxMiA1LjRsLjEgLjFjLjEgLjEgLjQgLjQgLjcgLjdjLjcgLjcgMS43IDEuNyAzLjEgM2MyLjggMi42IDYuOCA2LjEgMTEuOCA5LjVjMTAuMiA3LjEgMjMgMTMuMSAzNi4zIDEzLjFzMjYuMS02IDM2LjMtMTMuMWM1LTMuNSA5LTYuOSAxMS44LTkuNWMxLjQtMS4zIDIuNC0yLjMgMy4xLTNjLjMtLjMgLjYtLjYgLjctLjdsLjEtLjFjMi45LTMuNCA3LjEtNS4zIDExLjYtNS40czguNyAxLjYgMTEuOSA0LjhsMCAwIDAgMCAwIDAgLjEgLjFjLjIgLjIgLjQgLjQgLjggLjhjLjggLjcgMS45IDEuOCAzLjUgMy4xYzMuMSAyLjYgNy41IDYuMiAxMyA5LjdjMTEuMiA3LjMgMjQuOSAxMy40IDM4LjQgMTMuNGMxMC43IDAgMjAuNS0zLjkgMjguOC05VjI4OGMwLTM1LjMtMjguNy02NC02NC02NFYxNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NDhIMjU2VjE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OEgxMjhWMTc2ek00NDggMzk0LjZjLTguNSAzLjMtMTguMiA1LjQtMjguOCA1LjRjLTIyLjUgMC00Mi40LTkuOS01NS44LTE4LjZjLTQuMS0yLjctNy44LTUuNC0xMC45LTcuOGMtMi44IDIuNC02LjEgNS05LjggNy41QzMyOS44IDM5MCAzMTAuNiA0MDAgMjg4IDQwMHMtNDEuOC0xMC01NC42LTE4LjljLTMuNS0yLjQtNi43LTQuOS05LjQtNy4yYy0yLjcgMi4zLTUuOSA0LjctOS40IDcuMkMyMDEuOCAzOTAgMTgyLjYgNDAwIDE2MCA0MDBzLTQxLjgtMTAtNTQuNi0xOC45Yy0zLjctMi42LTctNS4yLTkuOC03LjVjLTMuMSAyLjQtNi44IDUuMS0xMC45IDcuOEM3MS4yIDM5MC4xIDUxLjMgNDAwIDI4LjggNDAwYy0xMC42IDAtMjAuMy0yLjItMjguOC01LjRWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzOTQuNnpcIl1cbn07XG52YXIgZmFCaXJ0aGRheUNha2UgPSBmYUNha2VDYW5kbGVzO1xudmFyIGZhQ2FrZSA9IGZhQ2FrZUNhbmRsZXM7XG52YXIgZmFFbnZlbG9wZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbnZlbG9wZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODM4NiwgOTk5MywgNjE0NDNdLCBcImYwZTBcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJjMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNEwyMzYuOCAzMTMuNmMxMS40IDguNSAyNyA4LjUgMzguNCAwTDQ5Mi44IDE1MC40YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTAgMTc2VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTc2TDI5NC40IDMzOS4yYy0yMi44IDE3LjEtNTQgMTcuMS03Ni44IDBMMCAxNzZ6XCJdXG59O1xudmFyIGZhQW5nbGVzVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGVzLXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJhbmdsZS1kb3VibGUtdXBcIl0sIFwiZjEwMlwiLCBcIk0yNDYuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyMjQgMTA5LjMgMzYxLjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHptMTYwIDM1MmwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjI0IDMwMS4zIDM2MS40IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7XG52YXIgZmFQYXBlcmNsaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFwZXJjbGlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjA2XSwgXCJmMGM2XCIsIFwiTTM2NC4yIDgzLjhjLTI0LjQtMjQuNC02NC0yNC40LTg4LjQgMGwtMTg0IDE4NGMtNDIuMSA0Mi4xLTQyLjEgMTEwLjMgMCAxNTIuNHMxMTAuMyA0Mi4xIDE1Mi40IDBsMTUyLTE1MmMxMC45LTEwLjkgMjguNy0xMC45IDM5LjYgMHMxMC45IDI4LjcgMCAzOS42bC0xNTIgMTUyYy02NCA2NC0xNjcuNiA2NC0yMzEuNiAwcy02NC0xNjcuNiAwLTIzMS42bDE4NC0xODRjNDYuMy00Ni4zIDEyMS4zLTQ2LjMgMTY3LjYgMHM0Ni4zIDEyMS4zIDAgMTY3LjZsLTE3NiAxNzZjLTI4LjYgMjguNi03NSAyOC42LTEwMy42IDBzLTI4LjYtNzUgMC0xMDMuNmwxNDQtMTQ0YzEwLjktMTAuOSAyOC43LTEwLjkgMzkuNiAwczEwLjkgMjguNyAwIDM5LjZsLTE0NCAxNDRjLTYuNyA2LjctNi43IDE3LjcgMCAyNC40czE3LjcgNi43IDI0LjQgMGwxNzYtMTc2YzI0LjQtMjQuNCAyNC40LTY0IDAtODguNHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0VG9DaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0LXRvLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YjNcIiwgXCJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjE5Mmg0MFYxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY3MmgyNGMyNi41IDAgNDggMjEuNSA0OCA0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDMyIDMzNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6bTY0IDMydjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWODBjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgzNjh6TTM1MiAyNzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNzYtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZINTI4ek01MTIgMzY4djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg1MjhjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTY2LjYgMTUzLjRsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxNDYuNyAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMTQ2LjdsLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpcIl1cbn07XG52YXIgZmFSaWJib24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmliYm9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODk1XSwgXCJmNGQ2XCIsIFwiTTMzMy4yIDMyMi44bDAgMC0xMzMuOS0xNDYgMCAwTDE0NiAxMTguNmM3LjgtNS4xIDM3LTIyLjYgNzgtMjIuNnM3MC4yIDE3LjQgNzggMjIuNkwyNDUuNyAxODBsODUuNiA5My40IDI3LjQtMjkuOGMxNi4zLTE3LjcgMjUuMy00MC45IDI1LjMtNjVWMTQ5LjFjMC0xOS01LjYtMzcuNS0xNi4xLTUzLjNMMzI3LjggMzUuNkMzMTIuOSAxMy40IDI4Ny45IDAgMjYxLjIgMGgtNzZjLTI1LjggMC01MC4xIDEyLjUtNjUuMSAzMy41TDgxLjkgODdDNzAuMyAxMDMuMiA2NCAxMjIuOCA2NCAxNDIuOFYxNjRjMCAyMy4yIDguNCA0NS42IDIzLjYgNjMuMWw1NiA2NC4yIDAgMCA4My4zIDk1LjYgMCAwIDkxLjggMTA1LjNjMTAgMTEuNSAyNi44IDE0LjMgNDAgNi44bDU0LjUtMzEuMWMxNy44LTEwLjIgMjEuNi0zNC4zIDcuNy00OS40bC04Ny43LTk1Ljd6TTIwNS4yIDQxMC42bC04My4zLTk1LjZMMjcuMSA0MTguNWMtMTMuOSAxNS4xLTEwLjEgMzkuMiA3LjcgNDkuNGw1NS4xIDMxLjVjMTMgNy40IDI5LjMgNC45IDM5LjQtNi4xbDc1LjktODIuNnpcIl1cbn07XG52YXIgZmFMdW5ncyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsdW5ncycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTcyOV0sIFwiZjYwNFwiLCBcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNjQuMWMwIDE2LjQgOC40IDMxLjcgMjIuMiA0MC41bDkuOCA2LjJWMTY1LjNDMzg0IDEyNyA0MTUgOTYgNDUzLjMgOTZjMjEuNyAwIDQyLjggMTAuMiA1NS44IDI4LjhjMTUuNCAyMi4xIDQ0LjMgNjUuNCA3MSAxMTYuOWMyNi41IDUwLjkgNTIuNCAxMTIuNSA1OS42IDE3MC4zYy4yIDEuMyAuMiAyLjYgLjIgNHY3YzAgNDkuMS0zOS44IDg5LTg5IDg5Yy03LjMgMC0xNC41LS45LTIxLjYtMi43bC03Mi43LTE4LjJDNDE0IDQ4MC41IDM4NCA0NDIuMSAzODQgMzk4VjMyNWw5MC41IDU3LjZjNy41IDQuNyAxNy4zIDIuNSAyMi4xLTQuOXMyLjUtMTcuMy00LjktMjIuMUwzODQgMjg3LjF2LS40bC00NC4xLTI4LjFjLTcuMy00LjYtMTMuOS0xMC4xLTE5LjktMTYuMWMtNS45IDYtMTIuNiAxMS41LTE5LjkgMTYuMUwyNTYgMjg2LjcgMTYxLjIgMzQ3bC0xMy41IDguNmMwIDAgMCAwLS4xIDBjLTcuNCA0LjgtOS42IDE0LjYtNC44IDIyLjFjNC43IDcuNSAxNC42IDkuNyAyMi4xIDQuOWw5MS4xLTU4VjM5OGMwIDQ0LjEtMzAgODIuNS03Mi43IDkzLjFsLTcyLjcgMTguMmMtNy4xIDEuOC0xNC4zIDIuNy0yMS42IDIuN2MtNDkuMSAwLTg5LTM5LjgtODktODl2LTdjMC0xLjMgLjEtMi43IC4yLTRjNy4yLTU3LjkgMzMuMS0xMTkuNCA1OS42LTE3MC4zYzI2LjgtNTEuNSA1NS42LTk0LjggNzEtMTE2LjljMTMtMTguNiAzNC0yOC44IDU1LjgtMjguOEMyMjUgOTYgMjU2IDEyNyAyNTYgMTY1LjN2NDUuNWw5LjgtNi4yYzEzLjgtOC44IDIyLjItMjQuMSAyMi4yLTQwLjVWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhQXJyb3dVcDkxID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLTktMScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1udW1lcmljLXVwLWFsdFwiXSwgXCJmODg3XCIsIFwiTTE2MCAzMmM5IDAgMTcuNSAzLjggMjMuNiAxMC40bDg4IDk2YzExLjkgMTMgMTEuMSAzMy4zLTIgNDUuMnMtMzMuMyAxMS4xLTQ1LjItMkwxOTIgMTQ2LjNWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE0Ni4zTDk1LjYgMTgxLjZjLTExLjkgMTMtMzIuMiAxMy45LTQ1LjIgMnMtMTMuOS0zMi4yLTItNDUuMmw4OC05NkMxNDIuNSAzNS44IDE1MSAzMiAxNjAgMzJ6TTQ1MC43IDI5NGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjM2NC40bC01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40em0tNS0xNDUuMUEzMiAzMiAwIDEgMCA0MTguMyA5MWEzMiAzMiAwIDEgMCAyNy40IDU3Ljl6bS00MC43IDU0LjlDMzY5LjYgMTkyLjQgMzQ0IDE1OS4yIDM0NCAxMjBjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDIzLjUtNy41IDQ2LjMtMjEuNSA2NS4yTDQ0OS43IDI1MWMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuN3MtMTcuMi0zMC42LTYuNy00NC44bDYuOC05LjJ6XCJdXG59O1xudmFyIGZhU29ydE51bWVyaWNVcEFsdCA9IGZhQXJyb3dVcDkxO1xudmFyIGZhTGl0ZWNvaW5TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpdGVjb2luLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDNcIiwgXCJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRWMjEzLjZMMjMuMiAyMjUuMmMtMTcgNC45LTI2LjggMjIuNi0yMiAzOS42czIyLjYgMjYuOCAzOS42IDIyTDY0IDI4MC4xVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTI4VjI2MS45bDEzNi44LTM5LjFjMTctNC45IDI2LjgtMjIuNiAyMi0zOS42cy0yMi42LTI2LjgtMzkuNi0yMkwxMjggMTk1LjNWNjR6XCJdXG59O1xudmFyIGZhQm9yZGVyTm9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItbm9uZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjg1MFwiLCBcIk0zMiA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em05Ni02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMCAyNTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek0zMjAgNDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMC0zMjBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIyNCA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wLTQ0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAgMjU2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNNDE2IDQxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek00MTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgMjg4YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTkyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTkyIDY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNMzIgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNDE2IDE5MmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6TTMyIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTE5MiA2NGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xudmFyIGZhQ2lyY2xlTm9kZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLW5vZGVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGUyXCIsIFwiTTQxOC40IDE1Ny45YzM1LjMtOC4zIDYxLjYtNDAgNjEuNi03Ny45YzAtNDQuMi0zNS44LTgwLTgwLTgwYy00My40IDAtNzguNyAzNC41LTgwIDc3LjVMMTM2LjIgMTUxLjFDMTIxLjcgMTM2LjggMTAxLjkgMTI4IDgwIDEyOGMtNDQuMiAwLTgwIDM1LjgtODAgODBzMzUuOCA4MCA4MCA4MGMxMi4yIDAgMjMuOC0yLjcgMzQuMS03LjZMMjU5LjcgNDA3LjhjLTIuNCA3LjYtMy43IDE1LjgtMy43IDI0LjJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTI3LjctMTQtNTIuMS0zNS40LTY2LjRsMzcuOC0yMDcuN3pNMTU2LjMgMjMyLjJjMi4yLTYuOSAzLjUtMTQuMiAzLjctMjEuN2wxODMuOC03My41YzMuNiAzLjUgNy40IDYuNyAxMS42IDkuNUwzMTcuNiAzNTQuMWMtNS41IDEuMy0xMC44IDMuMS0xNS44IDUuNUwxNTYuMyAyMzIuMnpcIl1cbn07XG52YXIgZmFQYXJhY2h1dGVCb3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFyYWNodXRlLWJveCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjRjZFwiLCBcIk0zODMuNSAxOTJjLjMtNS4zIC41LTEwLjYgLjUtMTZjMC01MS0xNS45LTk2LTQwLjItMTI3LjZDMzE5LjUgMTYuOSAyODguMiAwIDI1NiAwcy02My41IDE2LjktODcuOCA0OC40QzE0My45IDgwIDEyOCAxMjUgMTI4IDE3NmMwIDUuNCAuMiAxMC43IC41IDE2SDI0MFYzMjBIMjA4Yy03IDAtMTMuNyAxLjUtMTkuNyA0LjJMNjguMiAxOTJIOTYuNWMtLjMtNS4zLS41LTEwLjYtLjUtMTZjMC02NCAyMi4yLTEyMS4yIDU3LjEtMTU5LjNDNjIgNDkuMyAxOC42IDEyMi42IDQuMiAxNzMuNkMxLjUgMTgzLjEgOSAxOTIgMTguOSAxOTJoNkwxNjUuMiAzNDYuM2MtMy4zIDYuNS01LjIgMTMuOS01LjIgMjEuN3Y5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC03LjgtMS45LTE1LjItNS4yLTIxLjdMNDg3LjEgMTkyaDZjOS45IDAgMTcuNC04LjkgMTQuNy0xOC40QzQ5My40IDEyMi42IDQ1MCA0OS4zIDM1OC45IDE2LjdDMzkzLjggNTQuOCA0MTYgMTEyLjEgNDE2IDE3NmMwIDUuNC0uMiAxMC43LS41IDE2aDI4LjNMMzIzLjcgMzI0LjJjLTYtMi43LTEyLjctNC4yLTE5LjctNC4ySDI3MlYxOTJIMzgzLjV6XCJdXG59O1xudmFyIGZhSW5kZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZGVudCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzY1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0wIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xMjcuOCAyNjguNkwyNS44IDM0Ny45QzE1LjMgMzU2LjEgMCAzNDguNiAwIDMzNS4zVjE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6XCJdXG59O1xudmFyIGZhVHJ1Y2tGaWVsZFVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkLXVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThlXCIsIFwiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NnYzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJ2MzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODhjMC0zNS4zLTI4LjctNjQtNjQtNjRoLTQuMmMtLjQtMS4xLS45LTIuMS0xLjMtMy4yTDQ4NS43IDEwMmMtMTAuMy0yMy4xLTMzLjItMzgtNTguNS0zOEgzNzUuNEMzNjQuNCA0NC45IDM0My43IDMyIDMyMCAzMkg5NnptMjg4IDk2aDQzLjJsNDIuNyA5NkgzODRWMTI4ek0xMTIgMzg0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM2OC00OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI1My4zIDEzNS4xbDM0LjcgNTJWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2OTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTQ0YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTI4IDE0NHY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXJnbGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VyZ2xhc3MnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5MjAzLCA2MjAzMiwgXCJob3VyZ2xhc3MtZW1wdHlcIl0sIFwiZjI1NFwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEg2NCAzMjBoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNzVjMCA0Mi40LTE2LjkgODMuMS00Ni45IDExMy4xTDIzNy4zIDI1Nmw2Ny45IDY3LjljMzAgMzAgNDYuOSA3MC43IDQ2LjkgMTEzLjF2MTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwIDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjQzN2MwLTQyLjQgMTYuOS04My4xIDQ2LjktMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMTg4LjFDNDguOSAxNTguMSAzMiAxMTcuNCAzMiA3NVY2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NFY3NWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOUwxOTIgMjEwLjdsNjcuOS02Ny45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlWNjRIOTZ6bTAgMzg0SDI4OFY0MzdjMC0yNS41LTEwLjEtNDkuOS0yOC4xLTY3LjlMMTkyIDMwMS4zbC02Ny45IDY3LjljLTE4IDE4LTI4LjEgNDIuNC0yOC4xIDY3Ljl2MTF6XCJdXG59O1xudmFyIGZhSG91cmdsYXNzRW1wdHkgPSBmYUhvdXJnbGFzcztcbnZhciBmYU1vdW50YWluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU2XSwgXCJmNmZjXCIsIFwiTTI1NiAzMmMxMi41IDAgMjQuMSA2LjQgMzAuOCAxN0w1MDMuNCAzOTQuNGM1LjYgOC45IDguNiAxOS4yIDguNiAyOS43YzAgMzAuOS0yNSA1NS45LTU1LjkgNTUuOUg1NS45QzI1IDQ4MCAwIDQ1NSAwIDQyNC4xYzAtMTAuNSAzLTIwLjggOC42LTI5LjdMMjI1LjIgNDljNi42LTEwLjYgMTguMy0xNyAzMC44LTE3em02NSAxOTJMMjU2IDEyMC40IDE3Ni45IDI0Ni41bDE4LjMgMjQuNGM2LjQgOC41IDE5LjIgOC41IDI1LjYgMGwyNS42LTM0LjFjNi04LjEgMTUuNS0xMi44IDI1LjYtMTIuOGg0OXpcIl1cbn07XG52YXIgZmFVc2VyRG9jdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZG9jdG9yJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ1c2VyLW1kXCJdLCBcImYwZjBcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS05NiA1NS4yQzU0IDMzMi45IDAgNDAxLjMgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43YzAtODEtNTQtMTQ5LjQtMTI4LTE3MS4xVjM2MmMyNy42IDcuMSA0OCAzMi4yIDQ4IDYydjQwYzAgOC44LTcuMiAxNi0xNiAxNkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZWNDI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjI0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI1NmMtOC44IDAtMTYtNy4yLTE2LTE2VjQyNGMwLTI5LjggMjAuNC01NC45IDQ4LTYyVjMwNC45Yy02LS42LTEyLjEtLjktMTguMy0uOUgxNzguM2MtNi4yIDAtMTIuMyAuMy0xOC4zIC45djY1LjRjMjMuMSA2LjkgNDAgMjguMyA0MCA1My43YzAgMzAuOS0yNS4xIDU2LTU2IDU2cy01Ni0yNS4xLTU2LTU2YzAtMjUuNCAxNi45LTQ2LjggNDAtNTMuN1YzMTEuMnpNMTQ0IDQ0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhVXNlck1kID0gZmFVc2VyRG9jdG9yO1xudmFyIGZhQ2lyY2xlSW5mbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtaW5mbycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaW5mby1jaXJjbGVcIl0sIFwiZjA1YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjE2IDMzNmgyNFYyNzJIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djg4aDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em00MC0yMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87XG52YXIgZmFDbG91ZE1lYXRiYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLW1lYXRiYWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzNiXCIsIFwiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZoNDQuN2M5LjUtMjMuNSAzMi41LTQwIDU5LjMtNDBjMiAwIDMuOSAuMSA1LjggLjNDMjE3LjYgMjY1LjUgMjM1LjcgMjU2IDI1NiAyNTZzMzguNCA5LjUgNTAuMiAyNC4zYzEuOS0uMiAzLjktLjMgNS44LS4zYzI2LjkgMCA0OS45IDE2LjUgNTkuMyA0MEg0MTZjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLS41IDAtMS4xIDAtMS42IDBjMS4xLTUuMiAxLjYtMTAuNSAxLjYtMTZjMC00NC4yLTM1LjgtODAtODAtODBjLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOEMyNTYuNSAyNC4zIDIxOS4xIDAgMTc2IDBDMTE0LjEgMCA2NCA1MC4xIDY0IDExMmMwIDcuMSAuNyAxNC4xIDEuOSAyMC44QzI3LjYgMTQ1LjQgMCAxODEuNSAwIDIyNHptMjg4IDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgMSAuMSAyLjEgLjEgMy4xYy0uNy0uOC0xLjQtMS42LTIuMS0yLjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zYy43IC43IDEuNSAxLjQgMi4zIDIuMWMtMS0uMS0yLjEtLjEtMy4xLS4xYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzEgMCAyLjEtLjEgMy4xLS4xYy0uOCAuNy0xLjYgMS4zLTIuMyAyLjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBjLjctLjcgMS40LTEuNSAyLjEtMi4zYy0uMSAxLS4xIDIuMS0uMSAzLjFjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTEtLjEtMi4xLS4xLTMuMWMuNyAuOCAxLjMgMS42IDIuMSAyLjNjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2MtLjctLjctMS41LTEuNC0yLjMtMi4xYzEgLjEgMi4xIC4xIDMuMSAuMWMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMtMSAwLTIuMSAuMS0zLjEgLjFjLjgtLjcgMS42LTEuMyAyLjMtMi4xYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy0uNyAuNy0xLjQgMS41LTIuMSAyLjNjLjEtMSAuMS0yLjEgLjEtMy4xek00OCA0NDhhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em00MTYgMGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhQ2FtZXJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbWVyYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCBcImNhbWVyYS1hbHRcIl0sIFwiZjAzMFwiLCBcIk0xNDkuMSA2NC44TDEzOC43IDk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEgzNzMuM0wzNjIuOSA2NC44QzM1Ni40IDQ1LjIgMzM4LjEgMzIgMzE3LjQgMzJIMTk0LjZjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNMjU2IDE5MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFDYW1lcmFBbHQgPSBmYUNhbWVyYTtcbnZhciBmYVNxdWFyZVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS12aXJ1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTU3OFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyMy44IDkzLjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRjMCAyOS4zIDM1LjQgNDMuOSA1Ni4xIDIzLjJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC43IDIwLjctNiA1Ni4xIDIzLjIgNTYuMWMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjkuMyAwLTQzLjkgMzUuNC0yMy4yIDU2LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNy0yMC43LTU2LjEtNi01Ni4xIDIzLjJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yOS4zLTM1LjQtNDMuOS01Ni4xLTIzLjJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNy0yMC43IDYtNTYuMS0yMy4yLTU2LjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjkuMyAwIDQzLjktMzUuNCAyMy4yLTU2LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC43IDIwLjcgNTYuMSA2IDU2LjEtMjMuMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTkyIDI1NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTg4IDMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xudmFyIGZhTWV0ZW9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21ldGVvcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCBcImY3NTNcIiwgXCJNNDkzLjcgLjlMMjk5LjQgNzUuNmwyLjMtMjkuM2MxLTEyLjgtMTIuOC0yMS41LTI0LTE1LjFMMTAxLjMgMTMzLjRDMzguNiAxNjkuNyAwIDIzNi42IDAgMzA5QzAgNDIxLjEgOTAuOSA1MTIgMjAzIDUxMmM3Mi40IDAgMTM5LjQtMzguNiAxNzUuNy0xMDEuM0w0ODAuOCAyMzQuM2M2LjUtMTEuMS0yLjItMjUtMTUuMS0yNGwtMjkuMyAyLjNMNTExLjEgMTguM2MuNi0xLjUgLjktMy4yIC45LTQuOEM1MTIgNiA1MDYgMCA0OTguNSAwYy0xLjcgMC0zLjMgLjMtNC44IC45ek0xOTIgMTkyYTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhQ2FyT24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGRkXCIsIFwiTTI4MCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI0ek0xODUuOCAyMjRIMzI2LjJjNi44IDAgMTIuOCA0LjMgMTUuMSAxMC42TDM2MC4zIDI4OEgxNTEuN2wxOS4xLTUzLjRjMi4zLTYuNCA4LjMtMTAuNiAxNS4xLTEwLjZ6bS03NS4zLTEwLjlMODIuMiAyOTIuNEM2Mi4xIDMwMC45IDQ4IDMyMC44IDQ4IDM0NHY0MCA2NCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDhIMzg0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ0OCAzODQgMzQ0YzAtMjMuMi0xNC4xLTQzLjEtMzQuMi01MS42bC0yOC4zLTc5LjNDMzkwLjEgMTgxLjMgMzYwIDE2MCAzMjYuMiAxNjBIMTg1LjhjLTMzLjggMC02NCAyMS4zLTc1LjMgNTMuMXpNMTI4IDM0NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTIzMiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zOSAzOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDggNDhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDczIDM5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHptNDAwIDBMMzkxIDg3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpcIl1cbn07XG52YXIgZmFTbGVpZ2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2xlaWdoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmN2NjXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NlYyNTZjMCA1MyA0MyA5NiA5NiA5NnYzMmg2NFYzNTJIMzg0djMyaDY0VjM1MmM1MyAwIDk2LTQzIDk2LTk2VjE2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MTIgNDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0MS4zYzAgMzAuMi0yNC41IDU0LjctNTQuNyA1NC43Yy03NS41IDAtMTQ1LjYtMzguOS0xODUuNi0xMDIuOWwtNC4zLTYuOUMxNzQuMiA2Ny42IDEyNSAzNy42IDcwLjcgMzIuN2MtMi4yLS41LTQuNC0uNy02LjctLjdINTUgMzJ6TTY0MCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NTJjNDguNiAwIDg4LTM5LjQgODgtODh2LTh6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duMTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi0xLTknLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtbnVtZXJpYy1hc2NcIiwgXCJzb3J0LW51bWVyaWMtZG93blwiXSwgXCJmMTYyXCIsIFwiTTQ1MC43IDM4Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMlYxNjBIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDQ4IDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2NFY2NGMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMTYwIDQ4MGM5IDAgMTcuNS0zLjggMjMuNi0xMC40bDg4LTk2YzExLjktMTMgMTEuMS0zMy4zLTItNDUuMnMtMzMuMy0xMS4xLTQ1LjIgMkwxOTIgMzY1LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzY1LjdMOTUuNiAzMzAuNGMtMTEuOS0xMy0zMi4yLTEzLjktNDUuMi0ycy0xMy45IDMyLjItMiA0NS4ybDg4IDk2QzE0Mi41IDQ3Ni4yIDE1MSA0ODAgMTYwIDQ4MHpNNDE4LjMgMzA3YTMyIDMyIDAgMSAxIDI3LjQgNTcuOUEzMiAzMiAwIDEgMSA0MTguMyAzMDd6TTQwNS4xIDQxOS44bC02LjggOS4yYy0xMC41IDE0LjItNy41IDM0LjIgNi43IDQ0LjhzMzQuMiA3LjUgNDQuOC02LjdsNDguOC02NS44YzE0LTE4LjkgMjEuNS00MS43IDIxLjUtNjUuMmMwLTQ4LjYtMzkuNC04OC04OC04OHMtODggMzkuNC04OCA4OGMwIDM5LjIgMjUuNiA3Mi40IDYxLjEgODMuOHpcIl1cbn07XG52YXIgZmFTb3J0TnVtZXJpY0FzYyA9IGZhQXJyb3dEb3duMTk7XG52YXIgZmFTb3J0TnVtZXJpY0Rvd24gPSBmYUFycm93RG93bjE5O1xudmFyIGZhSGFuZEhvbGRpbmdEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZy1kcm9wbGV0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJoYW5kLWhvbGRpbmctd2F0ZXJcIl0sIFwiZjRjMVwiLCBcIk0yNzUuNSA2LjZDMjc4LjMgMi41IDI4MyAwIDI4OCAwczkuNyAyLjUgMTIuNSA2LjZMMzY2LjggMTAzQzM3OCAxMTkuMyAzODQgMTM4LjYgMzg0IDE1OC4zVjE2MGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NnYtMS43YzAtMTkuOCA2LTM5IDE3LjItNTUuM0wyNzUuNSA2LjZ6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhSGFuZEhvbGRpbmdXYXRlciA9IGZhSGFuZEhvbGRpbmdEcm9wbGV0O1xudmFyIGZhV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2F0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY3NzNcIiwgXCJNMjY5LjUgNjkuOWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwQzMyOSA4NS40IDM1Ni41IDk2IDM4NCA5NmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSAxNDkuNyA0MTcgMTYwIDM4NCAxNjBjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40QzQyLjggOTIuNiA2MSA4My41IDc1LjMgNzEuNmMxMS4xLTkuNSAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDg1LjIgMTY1LjEgOTYgMTkyIDk2YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMXptMzcgMjg4QzMyOSAzNzMuNCAzNTYuNSAzODQgMzg0IDM4NGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA0MzcuNyA0MTcgNDQ4IDM4NCA0NDhjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyAzNzMuMiAxNjUuMSAzODQgMTkyIDM4NGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHptMC0xNDRDMzI5IDIyOS40IDM1Ni41IDI0MCAzODQgMjQwYzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDI5My43IDQxNyAzMDQgMzg0IDMwNGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNSAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDIyOS4yIDE2NS4xIDI0MCAxOTIgMjQwYzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbnZhciBmYUNhbGVuZGFyQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyNzRcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzI5IDMwNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC05NSA5NS00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwzMjkgMzA1elwiXVxufTtcbnZhciBmYUJyYWlsbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJhaWxsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjJhMVwiLCBcIk0wIDk2YTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDAgOTZ6TTIyNCAyNzJhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0wLTgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek04MCA0MTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgMCA0MTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTkyYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMzJhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTM1MiA5NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSAzNTIgOTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDUxMiA5NnptNjQgMTc2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptMC04MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMTYgMjI0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNDE2IDI3MmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTAtODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTE2IDIyNGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tODAgMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6XCJdXG59O1xudmFyIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24tYm90dGxlLW1lZGljYWwnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcInByZXNjcmlwdGlvbi1ib3R0bGUtYWx0XCJdLCBcImY0ODZcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRWMzJ6bTMyIDk2SDM1MlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpNMTYwIDI0MHY0OEgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0ID0gZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsO1xudmFyIGZhTGFuZG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjNdLCBcImY2NmZcIiwgXCJNMjQwLjEgNC4yYzkuOC01LjYgMjEuOS01LjYgMzEuOCAwbDE3MS44IDk4LjFMNDQ4IDEwNGwwIC45IDQ3LjkgMjcuNGMxMi42IDcuMiAxOC44IDIyIDE1LjEgMzZzLTE2LjQgMjMuOC0zMC45IDIzLjhIMzJjLTE0LjUgMC0yNy4yLTkuOC0zMC45LTIzLjhzMi41LTI4LjggMTUuMS0zNkw2NCAxMDQuOVYxMDRsNC40LTEuNkwyNDAuMSA0LjJ6TTY0IDIyNGg2NFY0MTZoNDBWMjI0aDY0VjQxNmg0OFYyMjRoNjRWNDE2aDQwVjIyNGg2NFY0MjAuM2MuNiAuMyAxLjIgLjcgMS44IDEuMWw0OCAzMmMxMS43IDcuOCAxNyAyMi40IDEyLjkgMzUuOVM0OTQuMSA1MTIgNDgwIDUxMkgzMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFWMjI0elwiXVxufTtcbnZhciBmYVRydWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgXCJmMGQxXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjM2OGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg2NGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2SDM4NGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjI4OCAyNTYgMjM3LjNjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDExNC43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43SDQxNlY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNDE2IDE2MGg1MC43TDU0NCAyMzcuM1YyNTZINDE2VjE2MHpNMTEyIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0zNjgtNDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUNyb3NzaGFpcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvc3NoYWlycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA1YlwiLCBcIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0Mi40YzkzLjcgMTMuOSAxNjcuNyA4OCAxODEuNiAxODEuNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDY5LjZjLTEzLjkgOTMuNy04OCAxNjcuNy0xODEuNiAxODEuNlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDY5LjZDMTMwLjMgNDU1LjcgNTYuMyAzODEuNyA0Mi40IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0Mi40QzU2LjMgMTMwLjMgMTMwLjMgNTYuMyAyMjQgNDIuNFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTA3LjQgMjg4YzEyLjUgNTguMyA1OC40IDEwNC4xIDExNi42IDExNi42VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjIwLjZjNTguMy0xMi41IDEwNC4xLTU4LjQgMTE2LjYtMTE2LjZIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDIwLjZDMzkyLjEgMTY1LjcgMzQ2LjMgMTE5LjkgMjg4IDEwNy40VjEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMDcuNEMxNjUuNyAxMTkuOSAxMTkuOSAxNjUuNyAxMDcuNCAyMjRIMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEwNy40ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFQZXJzb25DYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jYW5lJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNTNjXCIsIFwiTTI3MiA0OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0tOCAxODcuM2w0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43SDE3Ny4xYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUwxMjAgMjU2LjlWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyaDE2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIzNS4zek0zNTIgMzc2YzAtNC40IDMuNi04IDgtOHM4IDMuNiA4IDhWNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzc2YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2djhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHYtOHpcIl1cbn07XG52YXIgZmFUZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1N2RcIiwgXCJNMjY5LjQgNkMyODAuNS0yIDI5NS41LTIgMzA2LjYgNmwyMjQgMTYwYzcuNCA1LjMgMTIuMiAxMy41IDEzLjIgMjIuNWwzMiAyODhjMSA5LTEuOSAxOC4xLTggMjQuOXMtMTQuNyAxMC43LTIzLjggMTAuN0g0NjQgNDM1LjhjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdMMzA2LjcgMjkzLjVjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41Yy01LjUgMC05LjkgNC40LTkuOSA5LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MCAzMmMtOS4xIDAtMTcuOC0zLjktMjMuOC0xMC43cy05LTE1LjgtOC0yNC45bDMyLTI4OGMxLTkgNS44LTE3LjIgMTMuMi0yMi41TDI2OS40IDZ6XCJdXG59O1xudmFyIGZhVmVzdFBhdGNoZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVzdC1wYXRjaGVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlMDg2XCIsIFwiTTE1MS4yIDY5LjdsNTUuOSAxNjcuNy0xMSAzMy4xYy0yLjcgOC4yLTQuMSAxNi43LTQuMSAyNS4zVjQ2NGMwIDE0LjUgMy45IDI4LjIgMTAuNyAzOS45QzE5NSA1MDkgMTg1LjkgNTEyIDE3NiA1MTJINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42VjEyOCA1NC4zIDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwaDQuNWMuMiAwIC40IDAgLjYgMGMuNCAwIC44IDAgMS4yIDBjMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOEMxNzEuNiAyNy4yIDE5MC44IDQwIDIyNCA0MHM1Mi40LTEyLjggNjEuNy0yMS4yQzI5NS43IDkuNyAzMTEgMCAzMjkuNyAwYy40IDAgLjggMCAxLjIgMGMuMiAwIC40IDAgLjYgMEgzMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2Ni4zVjEyOHYxNy41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI5NS44YzAtNS4yIC44LTEwLjMgMi41LTE1LjJMMjk2LjggNjkuN0MyNzkuNCA3OS43IDI1NS40IDg4IDIyNCA4OHMtNTUuNC04LjMtNzIuOC0xOC4zek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNWwxNS41IDE1LjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OGwxNS41LTE1LjVjNC43LTQuNyA0LjctMTIuMyAwLTE3cy0xMi4zLTQuNy0xNyAwTDk2IDI3MSA4MC41IDI1NS41Yy00LjctNC43LTEyLjMtNC43LTE3IDB6TTMwNCAyODB2OCAzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzIgOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGgtOHYtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG52YXIgZmFDaGVja0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVjay1kb3VibGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1NjBcIiwgXCJNMzQyLjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxNjAgMTc4LjdsLTU3LjQtNTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsODAgODBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHptOTYgMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuNyA1NC42IDI5Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDI1Ni0yNTZ6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duQVogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi1hLXonLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYWxwaGEtYXNjXCIsIFwic29ydC1hbHBoYS1kb3duXCJdLCBcImYxNWRcIiwgXCJNMTgzLjYgNDY5LjZDMTc3LjUgNDc2LjIgMTY5IDQ4MCAxNjAgNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkwxMjggMzY1LjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNjUuN2wzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDQyOS4zIDQxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzUyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUw0MDIuNyAzNTJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDE2IDMyYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNjQgMTI4IDE2IDMyYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNMNDYwLjIgMjI0SDM3MS44bC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWwxNi0zMiA2NC0xMjhDMzkyLjggMzguOCA0MDMuOSAzMiA0MTYgMzJ6TTM5NS44IDE3Nmg0MC40TDQxNiAxMzUuNiAzOTUuOCAxNzZ6XCJdXG59O1xudmFyIGZhU29ydEFscGhhQXNjID0gZmFBcnJvd0Rvd25BWjtcbnZhciBmYVNvcnRBbHBoYURvd24gPSBmYUFycm93RG93bkFaO1xudmFyIGZhTW9uZXlCaWxsV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbC13aGVhdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUyYVwiLCBcIk0xNzYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgMTZoNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTZDNDIuNyA2NCAzMiA1My4zIDMyIDQwczEwLjctMjQgMjQtMjR6TTI0IDg4SDEzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA4OCAyNCA4OHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAxNmMwLTguOCA3LjItMTYgMTYtMTZjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MHpNNDAwIDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDEyOGM4LjggMCAxNiA3LjIgMTYgMTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDR6TTQ4IDQxNnY0OEg5NmMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0SDQ4djQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4ek00NjQgNDE2Yy0yNi41IDAtNDggMjEuNS00OCA0OGg0OFY0MTZ6TTQxNiAzMDRjMCAyNi41IDIxLjUgNDggNDggNDhWMzA0SDQxNnptLTk2IDgwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFDb29raWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29va2llJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgXCJmNTYzXCIsIFwiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFBcnJvd1JvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NjM0LCBcImFycm93LWxlZnQtcm90YXRlXCIsIFwiYXJyb3ctcm90YXRlLWJhY2tcIiwgXCJhcnJvdy1yb3RhdGUtYmFja3dhcmRcIiwgXCJ1bmRvXCJdLCBcImYwZTJcIiwgXCJNMTI1LjcgMTYwSDE3NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY1MS4yTDk3LjYgOTcuNmM4Ny41LTg3LjUgMjI5LjMtODcuNSAzMTYuOCAwczg3LjUgMjI5LjMgMCAzMTYuOHMtMjI5LjMgODcuNS0zMTYuOCAwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzYyLjUgNjIuNSAxNjMuOCA2Mi41IDIyNi4zIDBzNjIuNS0xNjMuOCAwLTIyNi4zcy0xNjMuOC02Mi41LTIyNi4zIDBMMTI1LjcgMTYwelwiXVxufTtcbnZhciBmYUFycm93TGVmdFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVMZWZ0O1xudmFyIGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFVbmRvID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFIYXJkRHJpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFyZC1kcml2ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQzNiwgXCJoZGRcIl0sIFwiZjBhMFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFYyODAuNGMtMTctMTUuMi0zOS40LTI0LjQtNjQtMjQuNEg2NGMtMjQuNiAwLTQ3IDkuMi02NCAyNC40Vjk2ek02NCAyODhINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzNTJjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTMyMCA0MTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjgtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFIZGQgPSBmYUhhcmREcml2ZTtcbnZhciBmYUZhY2VHcmluU3F1aW50VGVhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXNxdWludC10ZWFycycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTMxNSwgXCJncmluLXNxdWludC10ZWFyc1wiXSwgXCJmNTg2XCIsIFwiTTQyNi44IDE0LjJDNDQ2LTUgNDc3LjUtNC42IDQ5Ny4xIDE0LjlzMjAgNTEgLjcgNzAuM2MtNi44IDYuOC0yMS40IDEyLjQtMzcuNCAxNi43Yy0xNi4zIDQuNC0zNC4xIDcuNS00Ni4zIDkuM2MtMS42IC4yLTMuMSAuNS00LjYgLjZjLTUuNiAuOS0xMC4zLTMuOS05LjUtOS41YzEuNi0xMS4yIDQuNi0yOS42IDktNDdjLjMtMS4zIC43LTIuNiAxLTMuOWM0LjMtMTUuOSA5LjgtMzAuNSAxNi43LTM3LjR6bS00NC43IDE5Yy0xLjUgNC44LTIuOSA5LjYtNC4xIDE0LjNjLTQuOCAxOC45LTggMzguNS05LjcgNTAuM2MtNCAyNi44IDE4LjkgNDkuNyA0NS43IDQ1LjhjMTEuOS0xLjYgMzEuNS00LjggNTAuNC05LjdjNC43LTEuMiA5LjUtMi41IDE0LjMtNC4xQzUzNC4yIDIyNy41IDUyMC4yIDM1My44IDQzNyA0MzdjLTgzLjIgODMuMi0yMDkuNSA5Ny4yLTMwNy4yIDQxLjhjMS41LTQuOCAyLjgtOS42IDQtMTQuM2M0LjgtMTguOSA4LTM4LjUgOS43LTUwLjNjNC0yNi44LTE4LjktNDkuNy00NS43LTQ1LjhjLTExLjkgMS42LTMxLjUgNC44LTUwLjQgOS43Yy00LjcgMS4yLTkuNSAyLjUtMTQuMyA0LjFDLTIyLjIgMjg0LjUtOC4yIDE1OC4yIDc1IDc1QzE1OC4yLTguMyAyODQuNS0yMi4yIDM4Mi4yIDMzLjJ6TTUxLjUgNDEwLjFjMTguNS01IDM4LjgtOC4zIDUwLjktMTBjNS42LS45IDEwLjMgMy45IDkuNSA5LjVjLTEuNyAxMi4xLTUgMzIuNC0xMCA1MC45Qzk3LjYgNDc2LjQgOTIgNDkxIDg1LjIgNDk3LjhDNjYgNTE3IDM0LjUgNTE2LjYgMTQuOSA0OTcuMXMtMjAtNTEtLjctNzAuM2M2LjgtNi44IDIxLjQtMTIuNCAzNy40LTE2Ljd6TTQxNi40IDIwMi4zYy00LjgtMTEuOS0yMC45LTEwLjktMjYuOSAuNGMtMTkuNCAzNi43LTQ2LjMgNzMuMi03OS44IDEwNi43cy03MCA2MC4zLTEwNi43IDc5LjhjLTExLjMgNi0xMi4zIDIyLjEtLjQgMjYuOWM1OS40IDI0LjEgMTI5LjkgMTIuMiAxNzcuOS0zNS44czU5LjktMTE4LjUgMzUuOC0xNzcuOXpNODcuMSAyODUuMWMyIDIgNC42IDMuMiA3LjMgMy40bDU2LjEgNS4xIDUuMSA1Ni4xYy4zIDIuOCAxLjUgNS40IDMuNCA3LjNjNi4zIDYuMyAxNy4yIDMuNiAxOS44LTQuOWwyOS43LTk3LjRjMy41LTExLjYtNy4zLTIyLjUtMTktMTlMOTIgMjY1LjNjLTguNiAyLjYtMTEuMyAxMy40LTQuOSAxOS44ek0yNjUuMyA5MmwtMjkuNyA5Ny40Yy0zLjUgMTEuNiA3LjMgMjIuNSAxOSAxOWw5Ny40LTI5LjdjOC42LTIuNiAxMS4zLTEzLjQgNC45LTE5LjhjLTItMi00LjYtMy4yLTcuMy0zLjRsLTU2LjEtNS4xLTUuMS01Ni4xYy0uMy0yLjgtMS41LTUuNC0zLjQtNy4zYy02LjMtNi4zLTE3LjItMy42LTE5LjggNC45elwiXVxufTtcbnZhciBmYUdyaW5TcXVpbnRUZWFycyA9IGZhRmFjZUdyaW5TcXVpbnRUZWFycztcbnZhciBmYUR1bWJiZWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2R1bWJiZWxsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDRiXCIsIFwiTTk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjIyNHY2NFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIOTZWNjR6bTQ0OCAwdjY0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDU0NHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OCAyMjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTQxNiAyMjR2NjRIMjI0VjIyNEg0MTZ6XCJdXG59O1xudmFyIGZhUmVjdGFuZ2xlTGlzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN0YW5nbGUtbGlzdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibGlzdC1hbHRcIl0sIFwiZjAyMlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDUxMmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzItMTI4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05Ni0yNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIyNHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg0NDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjI0em0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDQ0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMjR6XCJdXG59O1xudmFyIGZhTGlzdEFsdCA9IGZhUmVjdGFuZ2xlTGlzdDtcbnZhciBmYVRhcnBEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhcnAtZHJvcGxldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU3Y1wiLCBcIk0yODggMTYwYy0zNS4zIDAtNjQtMjYuOS02NC02MGMwLTI0IDMzLjctNzAuMSA1Mi4yLTkzLjVjNi4xLTcuNyAxNy41LTcuNyAyMy42IDBDMzE4LjMgMjkuOSAzNTIgNzYgMzUyIDEwMGMwIDMzLjEtMjguNyA2MC02NCA2MHpNNjQgMTI4SDE5Ny41YzEzLjIgMzcuMyA0OC43IDY0IDkwLjUgNjRzNzcuNC0yNi43IDkwLjUtNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1Mkg0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0ek00NDggNTEybDAtMTI4SDU3Nkw0NDggNTEyek05NiAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTExXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6bTMyIDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDgwIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhUGVyc29uU2tpaW5nTm9yZGljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1za2lpbmctbm9yZGljJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJza2lpbmctbm9yZGljXCJdLCBcImY3Y2FcIiwgXCJNMzM2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjI3LjIgMTYwYzEuOSAwIDMuOCAuMSA1LjYgLjNMMjAxLjYgMjU0Yy05LjMgMjggMS43IDU4LjggMjYuOCA3NC41bDg2LjIgNTMuOUwyOTEuMyA0NjRIMjAyLjhsNDEuMS04OC4xLTMyLjQtMjAuM2MtNy44LTQuOS0xNC43LTEwLjctMjAuNi0xNy4zTDEzMi4yIDQ2NEg5OS43bDU0LjItMjU3LjZjNC42LTEuNSA5LTQuMSAxMi43LTcuOGwyMy4xLTIzLjFjOS45LTkuOSAyMy40LTE1LjUgMzcuNS0xNS41ek0xMjEuNCAxOTguNmMuNCAuNCAuOCAuOCAxLjMgMS4yTDY3IDQ2NEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgxNTkuM2MuNCAwIC45IDAgMS4zIDBIMzE5LjNjLjUgMCAxIDAgMS40IDBINTA0YzM5LjggMCA3Mi0zMi4yIDcyLTcydi04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djhjMCAxMy4zLTEwLjcgMjQtMjQgMjRINDM0LjZsMjcuNi0xNzkuM2MxMC41LTUuMiAxNy44LTE2LjEgMTcuOC0yOC43YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQyNi43Yy0xMi45IDAtMjQuNi03LjgtMjkuNS0xOS43bC02LjMtMTVjLTE0LjYtMzUuMS00NC4xLTYxLjktODAuNS03My4xbC00OC43LTE1Yy0xMS4xLTMuNC0yMi43LTUuMi0zNC40LTUuMmMtMzEgMC02MC44IDEyLjMtODIuNyAzNC4zbC0yMy4xIDIzLjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zem0zMDggODkuNEw0MDIuMyA0NjRIMzU3LjhsMjEuNi03NS42YzUuOS0yMC42LTIuNi00Mi42LTIwLjctNTMuOUwzMDIgMjk5bDMwLjktODIuNCA1LjEgMTIuM0MzNTMgMjY0LjcgMzg3LjkgMjg4IDQyNi43IDI4OGgyLjd6XCJdXG59O1xudmFyIGZhU2tpaW5nTm9yZGljID0gZmFQZXJzb25Ta2lpbmdOb3JkaWM7XG52YXIgZmFDYWxlbmRhclBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItcGx1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI3MVwiLCBcIk05NiAzMlY2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnY0OEg0NDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDM1MlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY2NEgxNjBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkgwVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTkyek0yMjQgMjQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djU2aDU2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OHY1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNzZIMTQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDU2VjI3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFQbGFuZUFycml2YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtYXJyaXZhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODc0OF0sIFwiZjVhZlwiLCBcIk0uMyAxNjYuOUwwIDY4QzAgNTcuNyA5LjUgNTAuMSAxOS41IDUyLjNsMzUuNiA3LjljMTAuNiAyLjMgMTkuMiA5LjkgMjMgMjBMOTYgMTI4bDEyNy4zIDM3LjZMMTgxLjggMjAuNEMxNzguOSAxMC4yIDE4Ni42IDAgMTk3LjIgMGg0MC4xYzExLjYgMCAyMi4yIDYuMiAyNy45IDE2LjNsMTA5IDE5My44IDEwNy4yIDMxLjdjMTUuOSA0LjcgMzAuOCAxMi41IDQzLjcgMjIuOGwzNC40IDI3LjZjMjQgMTkuMiAxOC4xIDU3LjMtMTAuNyA2OC4yYy00MS4yIDE1LjYtODYuMiAxOC4xLTEyOC44IDdMMTIxLjcgMjg5LjhjLTExLjEtMi45LTIxLjItOC43LTI5LjMtMTYuOUw5LjUgMTg5LjRjLTUuOS02LTkuMy0xNC4xLTkuMy0yMi41ek0zMiA0NDhINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNpcmNsZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTg0MCwgXCJhcnJvdy1hbHQtY2lyY2xlLWxlZnRcIl0sIFwiZjM1OVwiLCBcIk01MTIgMjU2QTI1NiAyNTYgMCAxIDAgMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMHpNMjE3LjQgMzc2LjlMMTE3LjUgMjY5LjhjLTMuNS0zLjgtNS41LTguNy01LjUtMTMuOHMyLTEwLjEgNS41LTEzLjhsOTkuOS0xMDcuMWM0LjItNC41IDEwLjEtNy4xIDE2LjMtNy4xYzEyLjMgMCAyMi4zIDEwIDIyLjMgMjIuM2wwIDU3LjcgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTcuN2MwIDEyLjMtMTAgMjIuMy0yMi4zIDIyLjNjLTYuMiAwLTEyLjEtMi42LTE2LjMtNy4xelwiXVxufTtcbnZhciBmYUFycm93QWx0Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlTGVmdDtcbnZhciBmYVRyYWluU3Vid2F5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWluLXN1YndheScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wic3Vid2F5XCJdLCBcImYyMzlcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlYzNTJjMCA0OCAzNS4yIDg3LjcgODEuMSA5NC45bC00NiA0NkMyOC4xIDQ5OS45IDMzLjEgNTEyIDQzIDUxMkg4Mi43YzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDE2MCA0NDhIMjg4bDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRINDA1YzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjh6TTI3MiA5Nmg4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU3Vid2F5ID0gZmFUcmFpblN1YndheTtcbnZhciBmYUNoYXJ0R2FudHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtZ2FudHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwZTRcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTk2IDY0SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTE2MCA5Nmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhSW5kaWFuUnVwZWVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZGlhbi1ydXBlZS1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJpbmRpYW4tcnVwZWVcIiwgXCJpbnJcIl0sIFwiZTFiY1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDk2aDE2SDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMzEuOGM5LjYgMTQuNCAxNi43IDMwLjYgMjAuNyA0OEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjUyLjRjLTEzLjIgNTguMy02MS45IDEwMy4yLTEyMi4yIDExMC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmg4MGMzMi44IDAgNjEtMTkuNyA3My4zLTQ4SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDE4NS4zQzE3MyAxMTUuNyAxNDQuOCA5NiAxMTIgOTZIOTYgMzJDMTQuMyA5NiAwIDgxLjcgMCA2NHpcIl1cbn07XG52YXIgZmFJbmRpYW5SdXBlZSA9IGZhSW5kaWFuUnVwZWVTaWduO1xudmFyIGZhSW5yID0gZmFJbmRpYW5SdXBlZVNpZ247XG52YXIgZmFDcm9wU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3Atc2ltcGxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjcm9wLWFsdFwiXSwgXCJmNTY1XCIsIFwiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMyVjY0SDMyQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMkg2NFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzUyVjM4NEgxMjhWMzJ6TTM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDQ4bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCA2NHY2NGwyMjQgMCAwIDM1MnpcIl1cbn07XG52YXIgZmFDcm9wQWx0ID0gZmFDcm9wU2ltcGxlO1xudmFyIGZhTW9uZXlCaWxsMSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLTEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1vbmV5LWJpbGwtYWx0XCJdLCBcImYzZDFcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDMyMEg2NFYzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDE5MlYxMjhoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzODRjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek0xNzYgMjU2YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6bTc2LTQ4YzAgOS43IDYuOSAxNy43IDE2IDE5LjZWMjc2aC00Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGgyNCAyNGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBoLTRWMjA4YzAtMTEtOS0yMC0yMC0yMEgyNzJjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG52YXIgZmFNb25leUJpbGxBbHQgPSBmYU1vbmV5QmlsbDE7XG52YXIgZmFMZWZ0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZWZ0LWxvbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxvbmctYXJyb3ctYWx0LWxlZnRcIl0sIFwiZjMwYVwiLCBcIk0xNzcuNSA0MTRjLTguOCAzLjgtMTkgMi0yNi00LjZsLTE0NC0xMzZDMi43IDI2OC45IDAgMjYyLjYgMCAyNTZzMi43LTEyLjkgNy41LTE3LjRsMTQ0LTEzNmM3LTYuNiAxNy4yLTguNCAyNi00LjZzMTQuNSAxMi41IDE0LjUgMjJsMCA3MiAyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yODggMCAwIDcyYzAgOS42LTUuNyAxOC4yLTE0LjUgMjJ6XCJdXG59O1xudmFyIGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7XG52YXIgZmFEbmEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG5hJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NTE2XSwgXCJmNDcxXCIsIFwiTTQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyYzAgNTkuOC0zMC4zIDEwNy41LTY5LjQgMTQ2LjZjLTI4IDI4LTYyLjUgNTMuNS05Ny4zIDc3LjRsLTIuNSAxLjdjLTExLjkgOC4xLTIzLjggMTYuMS0zNS41IDIzLjlsMCAwIDAgMCAwIDAtMS42IDFjLTYgNC0xMS45IDcuOS0xNy44IDExLjljLTIwLjkgMTQtNDAuOCAyNy43LTU5LjMgNDEuNUgyODMuM2MtOS44LTcuNC0yMC4xLTE0LjctMzAuNy0yMi4xbDctNC43IDMtMmMxNS4xLTEwLjEgMzAuOS0yMC42IDQ2LjctMzEuNmMyNSAxOC4xIDQ4LjkgMzcuMyA2OS40IDU3LjdDNDE3LjcgMzcyLjUgNDQ4IDQyMC4yIDQ0OCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJINjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC01OS44IDMwLjMtMTA3LjUgNjkuNC0xNDYuNmMyOC0yOCA2Mi41LTUzLjUgOTcuMy03Ny40Yy0zNC44LTIzLjktNjkuMy00OS4zLTk3LjMtNzcuNEMzMC4zIDEzOS41IDAgOTEuOCAwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMySDM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzM4LjYgMzg0SDEwOS40Yy0xMC4xIDEwLjYtMTguNiAyMS4zLTI1LjUgMzJIMzY0LjFjLTYuOC0xMC43LTE1LjMtMjEuNC0yNS41LTMyek0xMDkuNCAxMjhIMzM4LjZjMTAuMS0xMC43IDE4LjYtMjEuMyAyNS41LTMySDgzLjljNi44IDEwLjcgMTUuMyAyMS4zIDI1LjUgMzJ6bTU1LjQgNDhjMTguNCAxMy44IDM4LjQgMjcuNSA1OS4zIDQxLjVjMjAuOS0xNCA0MC44LTI3LjcgNTkuMy00MS41SDE2NC43elwiXVxufTtcbnZhciBmYVZpcnVzU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXMtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNzVcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtMTU0LjMtMTIxYy0yLTMwLjEgMjAuOC02MC4xIDU2LTYwLjFINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDUzMi41Yy00OS45IDAtNzQuOS02MC4zLTM5LjYtOTUuNmw4LjItOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04LjIgOC4yQzQxMi4zIDExOC40IDM1MiA5My40IDM1MiA0My41VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzLjVjMCA0OS45LTYwLjMgNzQuOS05NS42IDM5LjZMMTg0LjIgNzVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwYy0xLjYgMS42LTMuMSAzLjQtNC4zIDUuM0wzOC44IDUuMXptMjI1LjggMTc3YzYuOS0zLjkgMTQuOS02LjEgMjMuNC02LjFjMjYuNSAwIDQ4IDIxLjUgNDggNDhjMCA0LjQtLjYgOC43LTEuNyAxMi43bC02OS43LTU0LjZ6TTQwMiA0MTIuN0wxNDQuNyAyMTBjLTkuNSA4LjUtMjIuMiAxNC0zNy4yIDE0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDExLjVjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTguMiA4LjJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOC4yLTguMmMzNS4zLTM1LjMgOTUuNi0xMC4zIDk1LjYgMzkuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NjguNWMwLTMxLjIgMjMuNi01Mi43IDUwLTU1Ljd6XCJdXG59O1xudmFyIGZhTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWludXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjExLCA4NzIyLCAxMDEzNCwgXCJzdWJ0cmFjdFwiXSwgXCJmMDY4XCIsIFwiTTQzMiAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVN1YnRyYWN0ID0gZmFNaW51cztcbnZhciBmYUNoZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDM5XCIsIFwiTTE0NCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlYzMkg5NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgxNlY5Nkg2MC4yQzQ5LjEgOTYgNDAgMTA1LjEgNDAgMTE2LjJjMCAyLjUgLjUgNC45IDEuMyA3LjNMNzMuOCAyMDhINzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNEw2MCAzODRIMTk2TDE4MCAyNTZoNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGgtMS44bDMyLjUtODQuNWMuOS0yLjMgMS4zLTQuOCAxLjMtNy4zYzAtMTEuMi05LjEtMjAuMi0yMC4yLTIwLjJIMTQ0VjY0aDE2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE0NFYxNnpNNDggNDE2TDQuOCA0NzMuNkMxLjcgNDc3LjggMCA0ODIuOCAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNEgyMzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC01LjItMS43LTEwLjItNC44LTE0LjRMMjA4IDQxNkg0OHptMjg4IDBsLTQzLjIgNTcuNmMtMy4xIDQuMi00LjggOS4yLTQuOCAxNC40YzAgMTMuMyAxMC43IDI0IDI0IDI0SDQ4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNGMwLTUuMi0xLjctMTAuMi00LjgtMTQuNEw0NjQgNDE2SDMzNnpNMzA0IDIwOHY1MS45YzAgNy44IDIuOCAxNS4zIDggMjEuMUwzMzkuMiAzMTIgMzM3IDM4NEg0NjIuNWwtMy4zLTcyIDI4LjMtMzAuOGM1LjQtNS45IDguNS0xMy42IDguNS0yMS43VjIwOGMwLTguOC03LjItMTYtMTYtMTZINDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MTZINDI0VjIwOGMwLTguOC03LjItMTYtMTYtMTZIMzkyYy04LjggMC0xNiA3LjItMTYgMTZ2MTZIMzUyVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMzIwYy04LjggMC0xNiA3LjItMTYgMTZ6bTgwIDk2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2MzJIMzg0VjMwNHpcIl1cbn07XG52YXIgZmFBcnJvd0xlZnRMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWxlZnQtbG9uZycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibG9uZy1hcnJvdy1sZWZ0XCJdLCBcImYxNzdcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4elwiXVxufTtcbnZhciBmYUxvbmdBcnJvd0xlZnQgPSBmYUFycm93TGVmdExvbmc7XG52YXIgZmFQbHVnQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWNcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTU3NiAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQxNiAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xudmFyIGZhU3RyZWV0VmlldyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdHJlZXQtdmlldycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjIxZFwiLCBcIk0zMjAgNjRBNjQgNjQgMCAxIDAgMTkyIDY0YTY0IDY0IDAgMSAwIDEyOCAwem0tOTYgOTZjLTM1LjMgMC02NCAyOC43LTY0IDY0djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDEuOGwxMS4xIDk5LjVjMS44IDE2LjIgMTUuNSAyOC41IDMxLjggMjguNWgzOC43YzE2LjMgMCAzMC0xMi4zIDMxLjgtMjguNUwzMTguMiAzMDRIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTM1LjMtMjguNy02NC02NC02NEgyMjR6TTEzMi4zIDM5NC4yYzEzLTIuNCAyMS43LTE0LjkgMTkuMy0yNy45cy0xNC45LTIxLjctMjcuOS0xOS4zYy0zMi40IDUuOS02MC45IDE0LjItODIgMjQuOGMtMTAuNSA1LjMtMjAuMyAxMS43LTI3LjggMTkuNkM2LjQgMzk5LjUgMCA0MTAuNSAwIDQyNGMwIDIxLjQgMTUuNSAzNi4xIDI5LjEgNDVjMTQuNyA5LjYgMzQuMyAxNy4zIDU2LjQgMjMuNEMxMzAuMiA1MDQuNyAxOTAuNCA1MTIgMjU2IDUxMnMxMjUuOC03LjMgMTcwLjQtMTkuNmMyMi4xLTYuMSA0MS44LTEzLjggNTYuNC0yMy40YzEzLjctOC45IDI5LjEtMjMuNiAyOS4xLTQ1YzAtMTMuNS02LjQtMjQuNS0xNC0zMi42Yy03LjUtNy45LTE3LjMtMTQuMy0yNy44LTE5LjZjLTIxLTEwLjYtNDkuNS0xOC45LTgyLTI0LjhjLTEzLTIuNC0yNS41IDYuMy0yNy45IDE5LjNzNi4zIDI1LjUgMTkuMyAyNy45YzMwLjIgNS41IDUzLjcgMTIuOCA2OSAyMC41YzMuMiAxLjYgNS44IDMuMSA3LjkgNC41YzMuNiAyLjQgMy42IDcuMiAwIDkuNmMtOC44IDUuNy0yMy4xIDExLjgtNDMgMTcuM0MzNzQuMyA0NTcgMzE4LjUgNDY0IDI1NiA0NjRzLTExOC4zLTctMTU3LjctMTcuOWMtMTkuOS01LjUtMzQuMi0xMS42LTQzLTE3LjNjLTMuNi0yLjQtMy42LTcuMiAwLTkuNmMyLjEtMS40IDQuOC0yLjkgNy45LTQuNWMxNS4zLTcuNyAzOC44LTE0LjkgNjktMjAuNXpcIl1cbn07XG52YXIgZmFGcmFuY1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZnJhbmMtc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTE4ZlwiLCBcIk04MCAzMkM2Mi4zIDMyIDQ4IDQ2LjMgNDggNjRWMjI0djk2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYyNTZIMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlY5NkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODB6XCJdXG59O1xudmFyIGZhVm9sdW1lT2ZmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS1vZmYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYwMjZcIiwgXCJNMzIwIDY0YzAtMTIuNi03LjQtMjQtMTguOS0yOS4ycy0yNS0zLjEtMzQuNCA1LjNMMTMxLjggMTYwSDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGg2Ny44TDI2Ni43IDQ3MS45YzkuNCA4LjQgMjIuOSAxMC40IDM0LjQgNS4zUzMyMCA0NjAuNiAzMjAgNDQ4VjY0elwiXVxufTtcbnZhciBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWFzbC1pbnRlcnByZXRpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCIsIFwiYXNsLWludGVycHJldGluZ1wiLCBcImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCJdLCBcImYyYTNcIiwgXCJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN1YyNTZjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhoNzIgOHYtLjNjMzUuMi0yLjcgNjUuNC0yMi44IDgyLjEtNTEuN2M4LjgtMTUuMyAzLjYtMzQuOS0xMS43LTQzLjdzLTM0LjktMy42LTQzLjcgMTEuN2MtNyAxMi0xOS45IDIwLTM0LjcgMjBjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBjMTQuOCAwIDI3LjcgOCAzNC43IDIwYzguOCAxNS4zIDI4LjQgMjAuNSA0My43IDExLjdzMjAuNS0yOC40IDExLjctNDMuN2MtMTIuOC0yMi4xLTMzLjYtMzkuMS01OC40LTQ3LjFsODAuOC0yMmMxNy00LjYgMjcuMS0yMi4yIDIyLjUtMzkuM3MtMjIuMi0yNy4xLTM5LjMtMjIuNUwxOTQuOSAxMjQuNmw4MS42LTY4YzEzLjYtMTEuMyAxNS40LTMxLjUgNC4xLTQ1LjFTMjQ5LjEtMy45IDIzNS41IDcuNEwxMzMuNiA5Mi4zbDIzLTQ2ek00ODMuNCA0NjUuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDg1LjktMTcxLjdjOC45LTE3LjggMTMuNS0zNy40IDEzLjUtNTcuMlYyNTZjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhINDQwaC04di4zYy0zNS4yIDIuNy02NS40IDIyLjgtODIuMSA1MS43Yy04LjkgMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdzMzQuOSAzLjYgNDMuNy0xMS43YzctMTIgMTkuOS0yMCAzNC43LTIwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwYy0xNC44IDAtMjcuNy04LTM0LjctMjBjLTguOS0xNS4zLTI4LjQtMjAuNS00My43LTExLjdzLTIwLjUgMjguNC0xMS43IDQzLjdjMTIuOCAyMi4xIDMzLjYgMzkuMSA1OC40IDQ3LjFsLTgwLjggMjJjLTE3LjEgNC43LTI3LjEgMjIuMi0yMi41IDM5LjNzMjIuMiAyNy4xIDM5LjMgMjIuNWwxMDAuNy0yNy41LTgxLjYgNjhjLTEzLjYgMTEuMy0xNS40IDMxLjUtNC4xIDQ1LjFzMzEuNSAxNS40IDQ1LjEgNC4xbDEwMS45LTg0LjktMjMgNDZ6XCJdXG59O1xudmFyIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nO1xudmFyIGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZztcbnZhciBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nO1xudmFyIGZhR2VhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnZWFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg4MSwgXCJjb2dcIl0sIFwiZjAxM1wiLCBcIk00OTUuOSAxNjYuNmMzLjIgOC43IC41IDE4LjQtNi40IDI0LjZsLTQzLjMgMzkuNGMxLjEgOC4zIDEuNyAxNi44IDEuNyAyNS40cy0uNiAxNy4xLTEuNyAyNS40bDQzLjMgMzkuNGM2LjkgNi4yIDkuNiAxNS45IDYuNCAyNC42Yy00LjQgMTEuOS05LjcgMjMuMy0xNS44IDM0LjNsLTQuNyA4LjFjLTYuNiAxMS0xNCAyMS40LTIyLjEgMzEuMmMtNS45IDcuMi0xNS43IDkuNi0yNC41IDYuOGwtNTUuNy0xNy43Yy0xMy40IDEwLjMtMjguMiAxOC45LTQ0IDI1LjRsLTEyLjUgNTcuMWMtMiA5LjEtOSAxNi4zLTE4LjIgMTcuOGMtMTMuOCAyLjMtMjggMy41LTQyLjUgMy41cy0yOC43LTEuMi00Mi41LTMuNWMtOS4yLTEuNS0xNi4yLTguNy0xOC4yLTE3LjhsLTEyLjUtNTcuMWMtMTUuOC02LjUtMzAuNi0xNS4xLTQ0LTI1LjRMODMuMSA0MjUuOWMtOC44IDIuOC0xOC42IC4zLTI0LjUtNi44Yy04LjEtOS44LTE1LjUtMjAuMi0yMi4xLTMxLjJsLTQuNy04LjFjLTYuMS0xMS0xMS40LTIyLjQtMTUuOC0zNC4zYy0zLjItOC43LS41LTE4LjQgNi40LTI0LjZsNDMuMy0zOS40QzY0LjYgMjczLjEgNjQgMjY0LjYgNjQgMjU2cy42LTE3LjEgMS43LTI1LjRMMjIuNCAxOTEuMmMtNi45LTYuMi05LjYtMTUuOS02LjQtMjQuNmM0LjQtMTEuOSA5LjctMjMuMyAxNS44LTM0LjNsNC43LTguMWM2LjYtMTEgMTQtMjEuNCAyMi4xLTMxLjJjNS45LTcuMiAxNS43LTkuNiAyNC41LTYuOGw1NS43IDE3LjdjMTMuNC0xMC4zIDI4LjItMTguOSA0NC0yNS40bDEyLjUtNTcuMWMyLTkuMSA5LTE2LjMgMTguMi0xNy44QzIyNy4zIDEuMiAyNDEuNSAwIDI1NiAwczI4LjcgMS4yIDQyLjUgMy41YzkuMiAxLjUgMTYuMiA4LjcgMTguMiAxNy44bDEyLjUgNTcuMWMxNS44IDYuNSAzMC42IDE1LjEgNDQgMjUuNGw1NS43LTE3LjdjOC44LTIuOCAxOC42LS4zIDI0LjUgNi44YzguMSA5LjggMTUuNSAyMC4yIDIyLjEgMzEuMmw0LjcgOC4xYzYuMSAxMSAxMS40IDIyLjQgMTUuOCAzNC4zek0yNTYgMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwelwiXVxufTtcbnZhciBmYUNvZyA9IGZhR2VhcjtcbnZhciBmYURyb3BsZXRTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcm9wbGV0LXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ0aW50LXNsYXNoXCJdLCBcImY1YzdcIiwgXCJNMzIwIDUxMmM1My4yIDAgMTAxLjQtMjEuNiAxMzYuMS01Ni42bC0yOTguMy0yMzVDMTQwIDI1Ny4xIDEyOCAyOTIuMyAxMjggMzIwYzAgMTA2IDg2IDE5MiAxOTIgMTkyek01MDUuMiAzNzAuN2M0LjQtMTYuMSA2LjgtMzMuMSA2LjgtNTAuN2MwLTkxLjItMTMwLjItMjYyLjMtMTY2LjYtMzA4LjNDMzM5LjQgNC4yIDMzMC41IDAgMzIwLjkgMGgtMS44Yy05LjYgMC0xOC41IDQuMi0yNC41IDExLjdDMjc3LjggMzMgMjQwLjcgODEuMyAyMDUuOCAxMzZMMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MDUuMiAzNzAuN3pNMjI0IDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFUaW50U2xhc2ggPSBmYURyb3BsZXRTbGFzaDtcbnZhciBmYU1vc3F1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3NxdWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzJdLCBcImY2NzhcIiwgXCJNNDAwIDBjNSAwIDkuOCAyLjQgMTIuOCA2LjRjMzQuNyA0Ni4zIDc4LjEgNzQuOSAxMzMuNSAxMTEuNWwwIDAgMCAwYzUuMiAzLjQgMTAuNSA3IDE2IDEwLjZjMjguOSAxOS4yIDQ1LjcgNTEuNyA0NS43IDg2LjFjMCAyOC42LTExLjMgNTQuNS0yOS44IDczLjRIMjIxLjhjLTE4LjQtMTktMjkuOC00NC45LTI5LjgtNzMuNGMwLTM0LjQgMTYuNy02Ni45IDQ1LjctODYuMWM1LjQtMy42IDEwLjgtNy4xIDE2LTEwLjZsMCAwIDAgMEMzMDkuMSA4MS4zIDM1Mi41IDUyLjcgMzg3LjIgNi40YzMtNCA3LjgtNi40IDEyLjgtNi40ek0yODggNTEyVjQ0MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY3MkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDU2MFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJINDQ4VjQ1NGMwLTE5LTguNC0zNy0yMy00OS4yTDQwMCAzODRsLTI1IDIwLjhDMzYwLjQgNDE3IDM1MiA0MzUgMzUyIDQ1NHY1OEgyODh6TTcwLjQgNS4yYzUuNy00LjMgMTMuNS00LjMgMTkuMiAwbDE2IDEyQzEzOS44IDQyLjkgMTYwIDgzLjIgMTYwIDEyNnYySDB2LTJDMCA4My4yIDIwLjIgNDIuOSA1NC40IDE3LjJsMTYtMTJ6TTAgMTYwSDE2MFYyOTYuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNFY0ODBjMCA5LjYgMi4xIDE4LjYgNS44IDI2LjhjLTYuNiAzLjQtMTQgNS4yLTIxLjggNS4ySDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxNzYgMTYwelwiXVxufTtcbnZhciBmYU1vc3F1aXRvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vc3F1aXRvJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTJiXCIsIFwiTTQ2My43IDUwNS45YzkuOC04LjkgMTAuNy0yNC4zIDIuMS0zNC4zbC00Mi4xLTQ5IDAtNTQuN2MwLTUuNS0xLjgtMTAuOC01LjEtMTUuMUwzNTIgMjY2LjNsMC0uM0w0ODUuNCAzODcuOEM1NDIuNCA0NDcuNiA2NDAgNDA1LjIgNjQwIDMyMC42YzAtNDcuOS0zNC04OC4zLTc5LjQtOTQuMmwtMTUzLTIzLjkgNDAuOC00MC45YzcuOC03LjggOS40LTIwLjEgMy45LTI5LjhMNDI4LjUgOTAuMWwzOC4yLTUwLjljOC0xMC42IDYuMS0yNS45LTQuMy0zNC4xcy0yNS4yLTYuMy0zMy4yIDQuNGwtNDggNjMuOWMtNS45IDcuOS02LjYgMTguNi0xLjcgMjcuMkw0MDIuMiAxNDAgMzUyIDE5MC4zbDAtMzguMmMwLTE0LjktMTAuMi0yNy40LTI0LTMxbDAtNTcuMmMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOGwwIDU3LjJjLTEzLjggMy42LTI0IDE2LjEtMjQgMzFsMCAzOC4xTDIzNy44IDE0MGwyMi42LTM5LjVjNC45LTguNiA0LjItMTkuMy0xLjctMjcuMmwtNDgtNjMuOWMtOC0xMC42LTIyLjgtMTIuNi0zMy4yLTQuNHMtMTIuMiAyMy41LTQuMyAzNC4xbDM4LjIgNTAuOS0yMy45IDQxLjdjLTUuNSA5LjctMy45IDIyIDMuOSAyOS44bDQwLjggNDAuOS0xNTMgMjMuOUMzNCAyMzIuMyAwIDI3Mi43IDAgMzIwLjZjMCA4NC42IDk3LjYgMTI3IDE1NC42IDY3LjFMMjg4IDI2NmwwIC4zLTY2LjUgODYuNGMtMy4zIDQuMy01LjEgOS42LTUuMSAxNS4xbDAgNTQuNy00Mi4xIDQ5Yy04LjYgMTAuMS03LjcgMjUuNSAyLjEgMzQuM3MyNC43IDcuOSAzMy40LTIuMWw0OC01NS45YzMuOC00LjQgNS45LTEwLjIgNS45LTE2LjFsMC01NS40TDI4OCAzNDQuN2wwIDYzLjFjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTYzLjEgMjQuMyAzMS42IDAgNTUuNGMwIDUuOSAyLjEgMTEuNyA1LjkgMTYuMWw0OCA1NS45YzguNiAxMC4xIDIzLjYgMTEgMzMuNCAyLjF6XCJdXG59O1xudmFyIGZhU3Rhck9mRGF2aWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Rhci1vZi1kYXZpZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEwMDE3XSwgXCJmNjlhXCIsIFwiTTQwNC4yIDMwOS41TDM4My4xIDM0NGg0Mi4zbC0yMS4xLTM0LjV6TTM3MS40IDI1NmwtNTQtODhIMTk0LjZsLTU0IDg4IDU0IDg4SDMxNy40bDU0LTg4em02NS43IDBsNTMuNCA4N2MzLjYgNS45IDUuNSAxMi43IDUuNSAxOS42YzAgMjAuNy0xNi44IDM3LjQtMzcuNCAzNy40SDM0OC43bC01Ni4yIDkxLjVDMjg0LjggNTA0LjMgMjcwLjkgNTEyIDI1NiA1MTJzLTI4LjgtNy43LTM2LjYtMjAuNUwxNjMuMyA0MDBINTMuNEMzMi44IDQwMCAxNiAzODMuMiAxNiAzNjIuNmMwLTYuOSAxLjktMTMuNyA1LjUtMTkuNmw1My40LTg3TDIxLjUgMTY5Yy0zLjYtNS45LTUuNS0xMi43LTUuNS0xOS42QzE2IDEyOC44IDMyLjggMTEyIDUzLjQgMTEySDE2My4zbDU2LjItOTEuNUMyMjcuMiA3LjcgMjQxLjEgMCAyNTYgMHMyOC44IDcuNyAzNi42IDIwLjVMMzQ4LjcgMTEySDQ1OC42YzIwLjcgMCAzNy40IDE2LjggMzcuNCAzNy40YzAgNi45LTEuOSAxMy43LTUuNSAxOS42bC01My40IDg3em0tNTQtODhsMjEuMSAzNC41TDQyNS40IDE2OEgzODMuMXpNMjgzIDExMkwyNTYgNjhsLTI3IDQ0aDU0ek0xMjguOSAxNjhIODYuNmwyMS4xIDM0LjVMMTI4LjkgMTY4ek0xMDcuOCAzMDkuNUw4Ni42IDM0NGg0Mi4zbC0yMS4xLTM0LjV6TTIyOSA0MDBsMjcgNDQgMjctNDRIMjI5elwiXVxufTtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5UmlmbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXJpZmxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRiXCIsIFwiTTE2MCAzOWMwLTEzIDEwLTIzLjggMjIuOS0yNC45TDMzNC43IDEuNEMzNDQgLjcgMzUyIDggMzUyIDE3LjRWNDhjMCA4LjgtNy4yIDE2LTE2IDE2SDE4NWMtMTMuOCAwLTI1LTExLjItMjUtMjV6bTE3LjYgNTdIMzM0LjRjMSA1LjIgMS42IDEwLjUgMS42IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtNS41IC42LTEwLjggMS42LTE2em0yMjggMzY0LjNMMzUyIDM2OS43VjQ4MGMwIDEuMy0uMSAyLjUtLjIgMy44TDE3Ny41IDIzNC45YzE2LjYtNy4xIDM0LjYtMTAuOSA1My4zLTEwLjloNTAuNGMxNS45IDAgMzEuMyAyLjggNDUuOCA3LjlMNDIxLjkgNjcuN2MtNy43LTQuNC0xMC4zLTE0LjItNS45LTIxLjlzMTQuMi0xMC4zIDIxLjktNS45bDEzLjkgOCAxMy45IDhjNy43IDQuNCAxMC4zIDE0LjIgNS45IDIxLjlMNDE2IDE3My45bDEuNiAuOWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43TDM5Mi42IDI4MmMyIDIuOCAzLjkgNS44IDUuNyA4LjhsNzYuMSAxMjguOGMxMS4yIDE5IDQuOSA0My41LTE0LjEgNTQuOHMtNDMuNSA0LjktNTQuOC0xNC4xek0zMjAgNTEySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzY5LjdsLTUzLjYgOTAuNmMtMTEuMiAxOS0zNS44IDI1LjMtNTQuOCAxNC4xcy0yNS4zLTM1LjgtMTQuMS01NC44bDc2LjEtMTI4LjhjOS40LTE1LjggMjEuNy0yOS4zIDM2LTQwTDMzMS4xIDUxMGMtMy41IDEuMy03LjIgMi0xMS4xIDJ6TTI5NiAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUNhcnRTaG9wcGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJ0LXNob3BwaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzIyLCBcInNob3BwaW5nLWNhcnRcIl0sIFwiZjA3YVwiLCBcIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEg2OS41YzIyIDAgNDEuNSAxMi44IDUwLjYgMzJoNDExYzI2LjMgMCA0NS41IDI1IDM4LjYgNTAuNGwtNDEgMTUyLjNjLTguNSAzMS40LTM3IDUzLjMtNjkuNSA1My4zSDE3MC43bDUuNCAyOC41YzIuMiAxMS4zIDEyLjEgMTkuNSAyMy42IDE5LjVINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE5OS43Yy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFTaG9wcGluZ0NhcnQgPSBmYUNhcnRTaG9wcGluZztcbnZhciBmYVZpYWxzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWxzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDkzXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIODhoNDggNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNDAwYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwVjk2QzE0LjMgOTYgMCA4MS43IDAgNjR6TTEzNiA5Nkg4OFYyNTZoNDhWOTZ6TTI4OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg1NiA0OCA1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMlY0MDBjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBWOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00MjQgOTZIMzc2VjI1Nmg0OFY5NnpcIl1cbn07XG52YXIgZmFQbHVnQ2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbHVnLWNpcmNsZS1wbHVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVmXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQ0OHY0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzODRIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDQ4VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYVBsYWNlT2ZXb3JzaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYWNlLW9mLXdvcnNoaXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2N2ZcIiwgXCJNMjI0IDEwOS4zVjIxNy42TDE4My4zIDI0MmMtMTQuNSA4LjctMjMuMyAyNC4zLTIzLjMgNDEuMlY1MTJoOTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR2OTZoOTZWMjgzLjJjMC0xNi45LTguOC0zMi41LTIzLjMtNDEuMkw0MTYgMjE3LjZWMTA5LjNjMC04LjUtMy40LTE2LjYtOS40LTIyLjZMMzMxLjMgMTEuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjMzLjQgODYuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42ek0yNC45IDMzMC4zQzkuNSAzMzguOCAwIDM1NC45IDAgMzcyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDgwVjI3My42TDI0LjkgMzMwLjN6TTU5MiA1MTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzcyLjRjMC0xNy41LTkuNS0zMy42LTI0LjktNDIuMUw1MTIgMjczLjZWNTEyaDgwelwiXVxufTtcbnZhciBmYUdyaXBWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmlwLXZlcnRpY2FsJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJmNThlXCIsIFwiTTQwIDM1Mmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTE5MiAwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNDAgMzIwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMHpNMjMyIDE5Mmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6TTQwIDE2MGMtMjIuMSAwLTQwLTE3LjktNDAtNDBMMCA3MkMwIDQ5LjkgMTcuOSAzMiA0MCAzMmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDB6TTIzMiAzMmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6XCJdXG59O1xudmFyIGZhQXJyb3dUdXJuVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdHVybi11cCcsXG4gIGljb246IFszODQsIDUxMiwgW1wibGV2ZWwtdXBcIl0sIFwiZjE0OFwiLCBcIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwelwiXVxufTtcbnZhciBmYUxldmVsVXAgPSBmYUFycm93VHVyblVwO1xudmFyIGZhVSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTE3XSwgXCI1NVwiLCBcIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODhjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOFY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjI4OGMwIDEwNi04NiAxOTItMTkyIDE5MlMwIDM5NCAwIDI4OFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpcIl1cbn07XG52YXIgZmFTcXVhcmVSb290VmFyaWFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXJvb3QtdmFyaWFibGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNxdWFyZS1yb290LWFsdFwiXSwgXCJmNjk4XCIsIFwiTTI4Mi42IDc4LjFjOC0yNy4zIDMzLTQ2LjEgNjEuNC00Ni4xSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzNDRMMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINzcuNmMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44TDI4Mi42IDc4LjF6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDQ4MCAyNzQuN2w0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0w1MjUuMyAzMjBsNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDQ4MCAzNjUuM2wtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAzMjBsLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhU3F1YXJlUm9vdEFsdCA9IGZhU3F1YXJlUm9vdFZhcmlhYmxlO1xudmFyIGZhQ2xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvY2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzksIFwiY2xvY2stZm91clwiXSwgXCJmMDE3XCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTJBMjU2IDI1NiAwIDEgMSAyNTYgMHpNMjMyIDEyMFYyNTZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjJWMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUNsb2NrRm91ciA9IGZhQ2xvY2s7XG52YXIgZmFCYWNrd2FyZFN0ZXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFja3dhcmQtc3RlcCcsXG4gIGljb246IFszMjAsIDUxMiwgW1wic3RlcC1iYWNrd2FyZFwiXSwgXCJmMDQ4XCIsIFwiTTI2Ny41IDQ0MC42YzkuNSA3LjkgMjIuOCA5LjcgMzQuMSA0LjRzMTguNC0xNi42IDE4LjQtMjlWOTZjMC0xMi40LTcuMi0yMy43LTE4LjQtMjlzLTI0LjUtMy42LTM0LjEgNC40bC0xOTIgMTYwTDY0IDI0MVY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDc4LjMgMCA5NlY0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNzFsMTEuNSA5LjYgMTkyIDE2MHpcIl1cbn07XG52YXIgZmFTdGVwQmFja3dhcmQgPSBmYUJhY2t3YXJkU3RlcDtcbnZhciBmYVBhbGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWxsZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0ODJcIiwgXCJNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djY0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2IDMyMCA1NDRoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTc2VjM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1NDQgMzIwIDk2IDMyem05NiA2NEgyODh2NjRIMTI4VjM4NHptMjI0IDBINTEydjY0SDM1MlYzODR6XCJdXG59O1xudmFyIGZhRmF1Y2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhdWNldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTAwNVwiLCBcIk0xOTIgOTZ2MTJMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYtMTIgMzEtMy45IDEtLjEgMSAuMSAzMSAzLjkgOTYgMTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDEyVjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek0zMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDEzMi4xYzIwLjIgMjkgNTMuOSA0OCA5MS45IDQ4czcxLjctMTkgOTEuOS00OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MEgzMjBsLTIyLjYtMjIuNmMtNi02LTE0LjEtOS40LTIyLjYtOS40SDI1NlYxODAuMmwtMzItNC0zMiA0VjIyNEgxNzMuM2MtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDI1NkgzMnpcIl1cbn07XG52YXIgZmFCYXNlYmFsbEJhdEJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFzZWJhbGwtYmF0LWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0MzJcIiwgXCJNNDI0IDBjLTEyLjQgMC0yNC4yIDQuOS0zMyAxMy43TDIzMy41IDE3MS4yYy0xMC41IDEwLjUtMTkuOCAyMi4xLTI3LjcgMzQuNkwxMzIuNyAzMjEuNmMtNy4zIDExLjUtMTUuOCAyMi4yLTI1LjUgMzEuOUw2OS45IDM5MC43bDUxLjMgNTEuMyAzNy4zLTM3LjNjOS42LTkuNiAyMC4zLTE4LjIgMzEuOS0yNS41bDExNS44LTczLjFjMTIuNS03LjkgMjQuMS0xNy4yIDM0LjYtMjcuN0w0OTguMyAxMjFjOC43LTguNyAxMy43LTIwLjYgMTMuNy0zM3MtNC45LTI0LjItMTMuNy0zM0w0NTcgMTMuN0M0NDguMiA0LjkgNDM2LjQgMCA0MjQgMHptODggNDMyYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMTUgMzk5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDkgMzk5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpcIl1cbn07XG52YXIgZmFTID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMTVdLCBcIjUzXCIsIFwiTTk5LjEgMTA1LjRDNzkgMTE0IDY4LjIgMTI3LjIgNjUuMiAxNDQuOGMtMi40IDE0LjEtLjcgMjMuMiAyIDI5LjRjMi44IDYuMyA3LjkgMTIuNCAxNi43IDE4LjZjMTkuMiAxMy40IDQ4LjMgMjIuMSA4NC45IDMyLjVjMSAuMyAxLjkgLjYgMi45IC44YzMyLjcgOS4zIDcyIDIwLjYgMTAwLjkgNDAuN2MxNS43IDEwLjkgMjkuOSAyNS41IDM4LjYgNDUuMWM4LjggMTkuOCAxMC44IDQyIDYuNiA2Ni4zYy03LjMgNDIuNS0zNS4zIDcxLjctNzEuOCA4Ny4zYy0zNS40IDE1LjItNzkuMSAxNy45LTEyMy43IDEwLjlsLS4yIDAgMCAwYy0yNC0zLjktNjIuNy0xNy4xLTg3LjYtMjUuNmMtNC44LTEuNy05LjItMy4xLTEyLjgtNC4zQzUuMSA0NDAuOC0zLjkgNDIyLjcgMS42IDQwNS45czIzLjctMjUuOCA0MC41LTIwLjNjNC45IDEuNiAxMC4yIDMuNCAxNS45IDUuNGMyNS40IDguNiA1Ni40IDE5LjIgNzQuNCAyMi4xYzM2LjggNS43IDY3LjUgMi41IDg4LjUtNi41YzIwLjEtOC42IDMwLjgtMjEuOCAzMy45LTM5LjRjMi40LTE0LjEgLjctMjMuMi0yLTI5LjRjLTIuOC02LjMtNy45LTEyLjQtMTYuNy0xOC42Yy0xOS4yLTEzLjQtNDguMy0yMi4xLTg0LjktMzIuNWMtMS0uMy0xLjktLjYtMi45LS44Yy0zMi43LTkuMy03Mi0yMC42LTEwMC45LTQwLjdjLTE1LjctMTAuOS0yOS45LTI1LjUtMzguNi00NS4xYy04LjgtMTkuOC0xMC44LTQyLTYuNi02Ni4zbDMxLjUgNS41TDIuMSAxMzMuOUM5LjQgOTEuNCAzNy40IDYyLjIgNzMuOSA0Ni42YzM1LjQtMTUuMiA3OS4xLTE3LjkgMTIzLjctMTAuOWMxMyAyIDUyLjQgOS42IDY2LjYgMTMuNGMxNy4xIDQuNSAyNy4yIDIyLjEgMjIuNyAzOS4ycy0yMi4xIDI3LjItMzkuMiAyMi43Yy0xMS4yLTMtNDguMS0xMC4yLTYwLjEtMTJsNC45LTMxLjUtNC45IDMxLjVjLTM2LjktNS44LTY3LjUtMi41LTg4LjYgNi41elwiXVxufTtcbnZhciBmYVRpbWVsaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RpbWVsaW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMjljXCIsIFwiTTEyOCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyIDk3LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuM2MwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDI4OHY1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM1YyODhINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDU0NFYxNjkuM2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMjI0SDE2MFYxNjkuM3pNNDg4IDk2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTMyMCAzOTJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUtleWJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleWJvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTAwMF0sIFwiZjExY1wiLCBcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTYgODBoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDR6bTE2IDgwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDMzNmMwLTguOCA3LjItMTYgMTYtMTZINDAwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2ek0yNzIgMTI4aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjU2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTM2OCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2ek0zNTIgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNNDY0IDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ0OCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDY0Yy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2FyZXREb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LWRvd24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYwZDdcIiwgXCJNMTM3LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEwzMiAxOTJjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDEyOCAxMjh6XCJdXG59O1xudmFyIGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNsaW5pYy1tZWRpY2FsXCJdLCBcImY3ZjJcIiwgXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFoLTMybC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTg1bDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6TTI3MiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMjBoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyelwiXVxufTtcbnZhciBmYUNsaW5pY01lZGljYWwgPSBmYUhvdXNlQ2hpbW5leU1lZGljYWw7XG52YXIgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtdGhyZWUtcXVhcnRlcnMnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInRlbXBlcmF0dXJlLTNcIiwgXCJ0aGVybW9tZXRlci0zXCIsIFwidGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnNcIl0sIFwiZjJjOFwiLCBcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YxNDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7XG52YXIgZmFUaGVybW9tZXRlcjMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycztcbnZhciBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzO1xudmFyIGZhTW9iaWxlU2NyZWVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vYmlsZS1zY3JlZW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1vYmlsZS1hbmRyb2lkLWFsdFwiXSwgXCJmM2NmXCIsIFwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBIMzA0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTE0NCA0NDhjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zMDQgNjRIODBWMzg0SDMwNFY2NHpcIl1cbn07XG52YXIgZmFNb2JpbGVBbmRyb2lkQWx0ID0gZmFNb2JpbGVTY3JlZW47XG52YXIgZmFQbGFuZVVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMjJkXCIsIFwiTTE5MiA5My43QzE5MiA1OS41IDIyMSAwIDI1NiAwYzM2IDAgNjQgNTkuNSA2NCA5My43bDAgNjYuM0w0OTcuOCAyNzguNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZ2NTYuN2MwIDEwLjktMTAuNyAxOC42LTIxLjEgMTUuMkwzMjAgMzIwdjgwbDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOHY0MmMwIDcuOC02LjMgMTQtMTQgMTRjLTEuMyAwLTIuNi0uMi0zLjktLjVMMjU2IDQ4MCAxNDUuOSA1MTEuNWMtMS4zIC40LTIuNiAuNS0zLjkgLjVjLTcuOCAwLTE0LTYuMy0xNC0xNFY0NTZjMC01IDIuNC05LjggNi40LTEyLjhMMTkyIDQwMFYzMjBMMjEuMSAzNzdDMTAuNyAzODAuNCAwIDM3Mi43IDAgMzYxLjhWMzA1LjFjMC0xMC43IDUuMy0yMC43IDE0LjItMjYuNkwxOTIgMTYwVjkzLjd6XCJdXG59O1xudmFyIGZhUGlnZ3lCYW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BpZ2d5LWJhbmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0ZDNcIiwgXCJNNDAwIDk2bDAgLjdjLTUuMy0uNC0xMC42LS43LTE2LS43SDI1NmMtMTYuNSAwLTMyLjUgMi4xLTQ3LjggNmMtLjEtMi0uMi00LS4yLTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptLTE2IDMyYzMuNSAwIDcgLjEgMTAuNCAuM2M0LjIgLjMgOC40IC43IDEyLjYgMS4zQzQyNC42IDEwOS4xIDQ1MC44IDk2IDQ4MCA5NmgxMS41YzEwLjQgMCAxOCA5LjggMTUuNSAxOS45bC0xMy44IDU1LjJjMTUuOCAxNC44IDI4LjcgMzIuOCAzNy41IDUyLjlINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUxMmMtOS4xIDEyLjEtMTkuOSAyMi45LTMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4SDI1NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNmMtMzQuOS0yNi4yLTU4LjctNjYuMy02My4yLTExMkg2OGMtMzcuNiAwLTY4LTMwLjQtNjgtNjhzMzAuNC02OCA2OC02OGg0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDY4Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMEg5OS4yYzEyLjEtNTkuOCA1Ny43LTEwNy41IDExNi4zLTEyMi44YzEyLjktMy40IDI2LjUtNS4yIDQwLjUtNS4ySDM4NHptNjQgMTM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xudmFyIGZhQmF0dGVyeUhhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1oYWxmJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTNcIl0sIFwiZjI0MlwiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNlYzMzZjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNkg0NjR6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NlYzMzZjMCA0NC4yIDM1LjggODAgODAgODBINDY0YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwSDgwem0yMDggOTZIOTZWMzIwSDI4OFYxOTJ6XCJdXG59O1xudmFyIGZhQmF0dGVyeTMgPSBmYUJhdHRlcnlIYWxmO1xudmFyIGZhTW91bnRhaW5DaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MmVcIiwgXCJNMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djkyLjFsNzEuNCAxMTguNGMyLjUtMS42IDUuNC0yLjUgOC42LTIuNWgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2aC0zLjVsNzMuOCAxMjIuNGMxMi40IDIwLjYgMTIuOSA0Ni4zIDEuMiA2Ny4zYy0uNCAuOC0uOSAxLjYtMS40IDIuM0g1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDU2OFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJINDgwVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNnptMzIgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlY4MGMwLTguOCA3LjItMTYgMTYtMTZ6TTM1MiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0xNjAgOTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINTI4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCAxODguOUwyODMuOCAyODhIMjIzbC00OCA2NC0yNC42LTQxLjJMMjI0IDE4OC45em0yOS40LTQ0LjJDMjQ3LjEgMTM0LjMgMjM2IDEyOCAyMjQgMTI4cy0yMy4xIDYuMy0yOS40IDE2LjdMNS4xIDQ1OC45Yy02LjUgMTAuOC02LjcgMjQuMy0uNyAzNS4zUzIyIDUxMiAzNC41IDUxMkg0MTMuNWMxMi41IDAgMjQtNi44IDMwLjEtMTcuOHM1LjgtMjQuNS0uNy0zNS4zTDI1My40IDE0NC43elwiXVxufTtcbnZhciBmYUNvaW5zID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvaW5zJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTFlXCIsIFwiTTUxMiA4MGMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0yOS4xIDE2LjEtNzIuNSAyNy41LTEyMi4zIDMwLjljLTMuNy0xLjgtNy40LTMuNS0xMS4zLTVDMzAwLjYgMTM3LjQgMjQ4LjIgMTI4IDE5MiAxMjhjLTguMyAwLTE2LjQgLjItMjQuNSAuNmwtMS4xLS42QzE0Mi4zIDExNC42IDEyOCA5OCAxMjggODBjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODB6TTE2MC43IDE2MS4xYzEwLjItLjcgMjAuNy0xLjEgMzEuMy0xLjFjNjIuMiAwIDExNy40IDEyLjMgMTUyLjUgMzEuNEMzNjkuMyAyMDQuOSAzODQgMjIxLjcgMzg0IDI0MGMwIDQtLjcgNy45LTIuMSAxMS43Yy00LjYgMTMuMi0xNyAyNS4zLTM1IDM1LjVjMCAwIDAgMCAwIDBjLS4xIC4xLS4zIC4xLS40IC4ybDAgMCAwIDBjLS4zIC4yLS42IC4zLS45IC41Yy0zNSAxOS40LTkwLjggMzItMTUzLjYgMzJjLTU5LjYgMC0xMTIuOS0xMS4zLTE0OC4yLTI5LjFjLTEuOS0uOS0zLjctMS45LTUuNS0yLjlDMTQuMyAyNzQuNiAwIDI1OCAwIDI0MGMwLTM0LjggNTMuNC02NC41IDEyOC03NS40YzEwLjUtMS41IDIxLjQtMi43IDMyLjctMy41ek00MTYgMjQwYzAtMjEuOS0xMC42LTM5LjktMjQuMS01My40YzI4LjMtNC40IDU0LjItMTEuNCA3Ni4yLTIwLjVjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYxNzZjMCAxOS4zLTE2LjUgMzcuMS00My44IDUwLjljLTE0LjYgNy40LTMyLjQgMTMuNy01Mi40IDE4LjVjLjEtMS44IC4yLTMuNSAuMi01LjN6bS0zMiA5NmMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0xLjggMS0zLjYgMS45LTUuNSAyLjlDMzA0LjkgNDA0LjcgMjUxLjYgNDE2IDE5MiA0MTZjLTYyLjggMC0xMTguNi0xMi42LTE1My42LTMyQzE0LjMgMzcwLjYgMCAzNTQgMCAzMzZWMzAwLjZjMTIuNSAxMC4zIDI3LjYgMTguNyA0My45IDI1LjVDODMuNCAzNDIuNiAxMzUuOCAzNTIgMTkyIDM1MnMxMDguNi05LjQgMTQ4LjEtMjUuOWM3LjgtMy4yIDE1LjMtNi45IDIyLjQtMTAuOWM2LjEtMy40IDExLjgtNy4yIDE3LjItMTEuMmMxLjUtMS4xIDIuOS0yLjMgNC4zLTMuNFYzMDR2NS43VjMzNnptMzIgMFYzMDQgMjc4LjFjMTktNC4yIDM2LjUtOS41IDUyLjEtMTZjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYyNzJjMCAxMC41LTUgMjEtMTQuOSAzMC45Yy0xNi4zIDE2LjMtNDUgMjkuNy04MS4zIDM4LjRjLjEtMS43IC4yLTMuNSAuMi01LjN6TTE5MiA0NDhjNTYuMiAwIDEwOC42LTkuNCAxNDguMS0yNS45YzE2LjMtNi44IDMxLjUtMTUuMiA0My45LTI1LjVWNDMyYzAgNDQuMi04NiA4MC0xOTIgODBTMCA0NzYuMiAwIDQzMlYzOTYuNmMxMi41IDEwLjMgMjcuNiAxOC43IDQzLjkgMjUuNUM4My40IDQzOC42IDEzNS44IDQ0OCAxOTIgNDQ4elwiXVxufTtcbnZhciBmYUtoYW5kYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraGFuZGEnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NzcyXSwgXCJmNjZkXCIsIFwiTTI0NS44IDMuN2M1LjktNC45IDE0LjYtNC45IDIwLjUgMGw0OCA0MGM1LjkgNC45IDcuNSAxMy4yIDMuOCAxOS45bDAgMCAwIDAgMCAwIDAgMC0uMSAuMS0uMyAuNmMtLjMgLjUtLjcgMS4zLTEuMiAyLjNjLTEgMi0yLjYgNS00LjQgOC42Yy0uNSAuOS0uOSAxLjktMS40IDIuOUMzNDQuOSA5Ny40IDM2OCAxMzQgMzY4IDE3NnMtMjMuMSA3OC42LTU3LjMgOTcuOGMuNSAxIDEgMiAxLjQgMi45YzEuOCAzLjcgMy4zIDYuNiA0LjQgOC42Yy41IDEgLjkgMS44IDEuMiAyLjNsLjMgLjYgLjEgLjEgMCAwIDAgMGMzLjYgNi43IDIgMTUtMy44IDE5LjlMMjcyIDM0My41djE5LjhsMzUuNi0yNC41IDQxLjEtMjguMmM0Mi44LTI5LjQgNjguNC03OCA2OC40LTEzMGMwLTMxLjEtOS4yLTYxLjYtMjYuNS04Ny41bC0yLjgtNC4yYy00LTYtMy41LTE0IDEuMy0xOS41czEyLjctNyAxOS4yLTMuN0w0MDEuMSA4MGM3LjItMTQuMyA3LjItMTQuMyA3LjItMTQuM2wwIDAgMCAwIC4xIDAgLjMgLjIgMSAuNWMuOCAuNCAyIDEuMSAzLjUgMS45YzIuOSAxLjcgNyA0LjEgMTEuOCA3LjNjOS42IDYuNCAyMi41IDE2LjEgMzUuNCAyOWMyNS43IDI1LjcgNTIuNyA2NS42IDUyLjcgMTE5LjNjMCA1My4xLTI2LjQgMTAwLjUtNTEuMiAxMzMuNmMtMTIuNiAxNi43LTI1LjEgMzAuMy0zNC41IDM5LjdjLTQuNyA0LjctOC43IDguNC0xMS41IDEwLjljLTEuNCAxLjMtMi41IDIuMi0zLjMgMi45bC0uOSAuOC0uMyAuMi0uMSAuMSAwIDAgMCAwczAgMC0xMC4yLTEyLjNsMTAuMiAxMi4zYy01LjEgNC4zLTEyLjQgNC45LTE4LjIgMS42bC03NS42LTQzLTMyLjcgMjIuNSA0NS41IDMxLjNjMS44LS40IDMuNy0uNyA1LjctLjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTEyLjIgMC0yMi4zLTkuMS0yMy44LTIxTDI3MiA0MjMuNHYyOC45YzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43VjQyNC4xbC00MC4zIDI3LjdDMTk3LjggNDYzLjMgMTg3LjkgNDcyIDE3NiA0NzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMi4yIDAgNC40IC4zIDYuNSAuOWw0NS44LTMxLjUtMzIuNy0yMi41LTc1LjYgNDNjLTUuOCAzLjMtMTMgMi43LTE4LjItMS42TDExMiA0MDBjLTEwLjIgMTIuMy0xMC4yIDEyLjMtMTAuMyAxMi4zbDAgMCAwIDAtLjEtLjEtLjMtLjItLjktLjhjLS44LS43LTEuOS0xLjctMy4zLTIuOWMtMi44LTIuNS02LjctNi4yLTExLjUtMTAuOWMtOS40LTkuNC0yMS45LTIzLTM0LjUtMzkuN0MyNi40IDMyNC41IDAgMjc3LjEgMCAyMjRjMC01My43IDI2LjktOTMuNiA1Mi43LTExOS4zYzEyLjktMTIuOSAyNS44LTIyLjYgMzUuNC0yOUM5MyA3Mi41IDk3IDcwIDk5LjkgNjguNGMxLjUtLjggMi42LTEuNSAzLjUtMS45bDEtLjUgLjMtLjIgLjEgMCAwIDAgMCAwczAgMCA3LjIgMTQuM2wtNy4yLTE0LjNjNi41LTMuMiAxNC4zLTEuNyAxOS4yIDMuN3M1LjMgMTMuNCAxLjMgMTkuNWwtMi44IDQuMkMxMDUuMiAxMTkgOTYgMTQ5LjUgOTYgMTgwLjZjMCA1MS45IDI1LjYgMTAwLjYgNjguNCAxMzBsNDEuMSAyOC4yTDI0MCAzNjIuNlYzNDMuNWwtNDIuMi0zNS4yYy01LjktNC45LTcuNS0xMy4yLTMuOC0xOS45bDAgMCAwIDAgMCAwIC4xLS4xIC4zLS42Yy4zLS41IC43LTEuMyAxLjItMi4zYzEtMiAyLjYtNSA0LjQtOC42Yy41LS45IC45LTEuOSAxLjQtMi45QzE2Ny4xIDI1NC42IDE0NCAyMTggMTQ0IDE3NnMyMy4xLTc4LjYgNTcuMy05Ny44Yy0uNS0xLTEtMi0xLjQtMi45Yy0xLjgtMy43LTMuMy02LjYtNC40LTguNmMtLjUtMS0uOS0xLjgtMS4yLTIuM2wtLjMtLjYtLjEtLjEgMCAwIDAgMCAwIDBjLTMuNi02LjctMi0xNSAzLjgtMTkuOWw0OC00MHpNMjIwLjIgMTIyLjljLTE3IDExLjUtMjguMiAzMS0yOC4yIDUzLjFzMTEuMiA0MS42IDI4LjIgNTMuMUMyMjcgMjEwLjIgMjMyIDE5MC45IDIzMiAxNzZzLTUtMzQuMi0xMS44LTUzLjF6bTcxLjUgMTA2LjJjMTctMTEuNSAyOC4yLTMxIDI4LjItNTMuMXMtMTEuMi00MS42LTI4LjItNTMuMUMyODUgMTQxLjggMjgwIDE2MS4xIDI4MCAxNzZzNSAzNC4yIDExLjggNTMuMXpcIl1cbn07XG52YXIgZmFTbGlkZXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NsaWRlcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNsaWRlcnMtaFwiXSwgXCJmMWRlXCIsIFwiTTAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMTI4IDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzIwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMi04MGMtMzIuOCAwLTYxIDE5LjctNzMuMyA0OEwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQ2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OGw1NC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU0LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHpNMTkyIDEyOGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTczLjMtNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDg2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDI2NS4zIDY0elwiXVxufTtcbnZhciBmYVNsaWRlcnNIID0gZmFTbGlkZXJzO1xudmFyIGZhRm9sZGVyVHJlZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItdHJlZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjgwMlwiLCBcIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMydjk2VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNTZWMzg0SDY0VjE2MEgyNTZWOTZINjRWMzJ6TTI4OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0NS4zYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNEw0MDkuNCA5LjRjLTYtNi0xNC4xLTkuNC0yMi42LTkuNEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjE5MnptMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NDUuM2MtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40SDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwelwiXVxufTtcbnZhciBmYU5ldHdvcmtXaXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICduZXR3b3JrLXdpcmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNmZmXCIsIFwiTTI1NiA2NEgzODR2NjRIMjU2VjY0ek0yNDAgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2OTZjMCAyNi41IDIxLjUgNDggNDggNDhoNDh2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZ2MzJIODBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDI0MGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTkyVjI4OEg0NDh2MzJINDAwYy0yNi41IDAtNDggMjEuNS00OCA0OHY5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1NjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUxMlYyODhoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzUyVjE5Mmg0OGMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgyNDB6TTk2IDQ0OFYzODRIMjI0djY0SDk2em0zMjAtNjRINTQ0djY0SDQxNlYzODR6XCJdXG59O1xudmFyIGZhTWFwUGluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcC1waW4nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjgyMDVdLCBcImYyNzZcIiwgXCJNMTYgMTQ0YTE0NCAxNDQgMCAxIDEgMjg4IDBBMTQ0IDE0NCAwIDEgMSAxNiAxNDR6TTE2MCA4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNTMgMC05NiA0My05NiA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0xMjggNDgwVjMxNy4xYzEwLjQgMS45IDIxLjEgMi45IDMyIDIuOXMyMS42LTEgMzItMi45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFIYW1zYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW1zYScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY2NVwiLCBcIk0zNC42IDI4OEg4MGM4LjggMCAxNi03LjIgMTYtMTZWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyNzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ1LjRjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjZjMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFzLTExOS40LTI1LjgtMTYwLjYtNzFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zQzAgMzAzLjUgMTUuNSAyODggMzQuNiAyODh6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yYy0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFDZW50U2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjZW50LXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUzZjVcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjYuN2MzMC45IDUuMiA1OS4yIDE3LjcgODMuMiAzNS44YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40QzI3OS40IDEzNy41IDI1Mi45IDEyOCAyMjQgMTI4Yy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI4LjkgMCA1NS40LTkuNSA3Ni44LTI1LjZjMTQuMS0xMC42IDM0LjItNy44IDQ0LjggNi40czcuOCAzNC4yLTYuNCA0NC44Yy0yNCAxOC01Mi40IDMwLjYtODMuMiAzNS44VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDUuM0MxMDEuMiA0MzAuMSAzMiAzNTEuMSAzMiAyNTZzNjkuMi0xNzQuMSAxNjAtMTg5LjNWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhRmxhc2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmxhc2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwYzNcIiwgXCJNMjg4IDBIMTYwIDEyOEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMlYxOTYuOGMwIDExLjgtMy4zIDIzLjUtOS41IDMzLjVMMTAuMyA0MDYuMkMzLjYgNDE3LjIgMCA0MjkuNyAwIDQ0Mi42QzAgNDgwLjkgMzEuMSA1MTIgNjkuNCA1MTJIMzc4LjZjMzguMyAwIDY5LjQtMzEuMSA2OS40LTY5LjRjMC0xMi44LTMuNi0yNS40LTEwLjMtMzYuNEwzMjkuNSAyMzAuNGMtNi4yLTEwLjEtOS41LTIxLjctOS41LTMzLjVWNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4ek0xOTIgMTk2LjhWNjRoNjRWMTk2LjhjMCAyMy43IDYuNiA0Ni45IDE5IDY3LjFMMzA5LjUgMzIwaC0xNzFMMTczIDI2My45YzEyLjQtMjAuMiAxOS00My40IDE5LTY3LjF6XCJdXG59O1xudmFyIGZhUGVyc29uUHJlZ25hbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXByZWduYW50JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMzFlXCIsIFwiTTE5MiAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMTIwIDM4M2MtMTMuOC0zLjYtMjQtMTYuMS0yNC0zMVYyOTYuOWwtNC42IDcuNmMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTUtMjQuOSA0MC4zLTQxLjUgNjguNy00NS42YzQuMS0uNiA4LjItMSAxMi41LTFoMS4xIDEyLjVIMTkyYzEuNCAwIDIuOCAuMSA0LjEgLjNjMzUuNyAyLjkgNjUuNCAyOS4zIDcyLjEgNjVsNi4xIDMyLjVjNDQuMyA4LjYgNzcuNyA0Ny41IDc3LjcgOTQuM3YzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMDQgMjY0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NGgtOC04djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4M3pcIl1cbn07XG52YXIgZmFXYW5kU3BhcmtsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FuZC1zcGFya2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcyYlwiLCBcIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43VjE3NmMwIDguOC03LjIgMTYtMTYgMTZIMzg0LjJjLTQuNiAwLTguOSAxLjktMTEuOSA1LjNMMTAwLjcgNTAwLjlDOTQuMyA1MDggODUuMyA1MTIgNzUuOCA1MTJjLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN0MzLjUgNDUzLjQgMCA0NDUgMCA0MzYuMmMwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOVYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDM0LjZjMy45IDAgNy43LTEuNSAxMC43LTQuMUw0NjQgNi4xek00MzIgMjg4YzMuNiAwIDYuNyAyLjQgNy43IDUuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOGwtMTQuOC01MS43LTUxLjctMTQuOGMtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHpNODcuNyA2OS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOEw4Ny43IDIxOC4yYy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOEw1Ny41IDE2Ni41IDUuOCAxNTEuN2MtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjhMNzIuMyA2OS44YzEtMy40IDQuMS01LjggNy43LTUuOHM2LjcgMi40IDcuNyA1Ljh6TTIwOCAwYzMuNyAwIDYuOSAyLjUgNy44IDYuMWw2LjggMjcuMyAyNy4zIDYuOGMzLjYgLjkgNi4xIDQuMSA2LjEgNy44cy0yLjUgNi45LTYuMSA3LjhsLTI3LjMgNi44LTYuOCAyNy4zYy0uOSAzLjYtNC4xIDYuMS03LjggNi4xcy02LjktMi41LTcuOC02LjFsLTYuOC0yNy4zLTI3LjMtNi44Yy0zLjYtLjktNi4xLTQuMS02LjEtNy44czIuNS02LjkgNi4xLTcuOGwyNy4zLTYuOCA2LjgtMjcuM2MuOS0zLjYgNC4xLTYuMSA3LjgtNi4xelwiXVxufTtcbnZhciBmYUVsbGlwc2lzVmVydGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWxsaXBzaXMtdmVydGljYWwnLFxuICBpY29uOiBbMTI4LCA1MTIsIFtcImVsbGlwc2lzLXZcIl0sIFwiZjE0MlwiLCBcIk02NCAzNjBhNTYgNTYgMCAxIDAgMCAxMTIgNTYgNTYgMCAxIDAgMC0xMTJ6bTAtMTYwYTU2IDU2IDAgMSAwIDAgMTEyIDU2IDU2IDAgMSAwIDAtMTEyek0xMjAgOTZBNTYgNTYgMCAxIDAgOCA5NmE1NiA1NiAwIDEgMCAxMTIgMHpcIl1cbn07XG52YXIgZmFFbGxpcHNpc1YgPSBmYUVsbGlwc2lzVmVydGljYWw7XG52YXIgZmFUaWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGlja2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTAzXSwgXCJmMTQ1XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4djY0YzAgOC44IDcuNCAxNS43IDE1LjcgMTguNkMzNC41IDIxNy4xIDQ4IDIzNSA0OCAyNTZzLTEzLjUgMzguOS0zMi4zIDQ1LjRDNy40IDMwNC4zIDAgMzExLjIgMCAzMjB2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjMyMGMwLTguOC03LjQtMTUuNy0xNS43LTE4LjZDNTQxLjUgMjk0LjkgNTI4IDI3NyA1MjggMjU2czEzLjUtMzguOSAzMi4zLTQ1LjRjOC4zLTIuOSAxNS43LTkuOCAxNS43LTE4LjZWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAxMTJsMCAxNjBjMCA4LjggNy4yIDE2IDE2IDE2SDQzMmM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgxNDRjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ0OGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjB6XCJdXG59O1xudmFyIGZhUG93ZXJPZmYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncG93ZXItb2ZmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTIxMV0sIFwiZjAxMVwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJ6TTE0My41IDEyMC42YzEzLjYtMTEuMyAxNS40LTMxLjUgNC4xLTQ1LjFzLTMxLjUtMTUuNC00NS4xLTQuMUM0OS43IDExNS40IDE2IDE4MS44IDE2IDI1NmMwIDEzMi41IDEwNy41IDI0MCAyNDAgMjQwczI0MC0xMDcuNSAyNDAtMjQwYzAtNzQuMi0zMy44LTE0MC42LTg2LjYtMTg0LjZjLTEzLjYtMTEuMy0zMy44LTkuNC00NS4xIDQuMXMtOS40IDMzLjggNC4xIDQ1LjFjMzguOSAzMi4zIDYzLjUgODEgNjMuNSAxMzUuNGMwIDk3LjItNzguOCAxNzYtMTc2IDE3NnMtMTc2LTc4LjgtMTc2LTE3NmMwLTU0LjQgMjQuNy0xMDMuMSA2My41LTEzNS40elwiXVxufTtcbnZhciBmYVJpZ2h0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyaWdodC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LWFsdC1yaWdodFwiXSwgXCJmMzBiXCIsIFwiTTMzNC41IDQxNGM4LjggMy44IDE5IDIgMjYtNC42bDE0NC0xMzZjNC44LTQuNSA3LjUtMTAuOCA3LjUtMTcuNHMtMi43LTEyLjktNy41LTE3LjRsLTE0NC0xMzZjLTctNi42LTE3LjItOC40LTI2LTQuNnMtMTQuNSAxMi41LTE0LjUgMjJsMCA3MkwzMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDAgMCA3MmMwIDkuNiA1LjcgMTguMiAxNC41IDIyelwiXVxufTtcbnZhciBmYUxvbmdBcnJvd0FsdFJpZ2h0ID0gZmFSaWdodExvbmc7XG52YXIgZmFGbGFnVXNhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZsYWctdXNhJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNzRkXCIsIFwiTTMyIDBDNDkuNyAwIDY0IDE0LjMgNjQgMzJWNDhsNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41YzQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xdjM2LjFsLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtMjAuMy05LTQxLjgtMTQuNy02My42LTE2Ljl2MzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNEw0NDggMTM2LjN2NjJsLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM0w2NCAyMDMuMXYzMi43bDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRMNDQ4IDIzMi4zdjYybC00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNMNjQgMjk5LjF2MzIuN2w3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40TDQ0OCAzMjguM3YzMy41YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNGMtMzcuOS0xOS04MS4zLTIzLjctMTIyLjUtMTMuNEw2NCA0MDB2ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDE2IDM0NS41IDMxMi44IDI0OS41IDIxNi44IDE1My41IDEyMC44IDY0IDMyQzAgMTQuMyAxNC4zIDAgMzIgMHptODAgOTZBMTYgMTYgMCAxIDAgODAgOTZhMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS0zMiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFMYXB0b3BGaWxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhcHRvcC1maWxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTFkXCIsIFwiTTEyOCAwQzkyLjcgMCA2NCAyOC43IDY0IDY0VjI4OEgxOS4yQzguNiAyODggMCAyOTYuNiAwIDMwNy4yQzAgMzQ5LjYgMzQuNCAzODQgNzYuOCAzODRIMzIwVjI4OEgxMjhWNjRINDQ4Vjk2aDY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDEyOHpNNTEyIDEyOEg0MDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjU2SDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTI4em0zMiAwdjk2aDk2bC05Ni05NnpcIl1cbn07XG52YXIgZmFUdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0ZWxldHlwZVwiXSwgXCJmMWU0XCIsIFwiTTM4LjMgMjQxLjNMMTUuMSAyMDAuNmMtOS4yLTE2LjItOC40LTM2LjUgNC41LTUwQzYxLjQgMTA2LjggMTQ0LjcgNDggMjU2IDQ4czE5NC42IDU4LjggMjM2LjQgMTAyLjZjMTIuOSAxMy41IDEzLjcgMzMuOCA0LjUgNTBsLTIzLjEgNDAuN2MtNy41IDEzLjItMjMuMyAxOS4zLTM3LjggMTQuNmwtODEuMS0yNi42Yy0xMy4xLTQuMy0yMi0xNi42LTIyLTMwLjRWMTQ0Yy00OS42LTE4LjEtMTA0LTE4LjEtMTUzLjYgMHY1NC44YzAgMTMuOC04LjkgMjYuMS0yMiAzMC40TDc2LjEgMjU1LjhjLTE0LjUgNC43LTMwLjMtMS40LTM3LjgtMTQuNnpNMzIgMzM2YzAtOC44IDcuMi0xNiAxNi0xNkg4MGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4Yy04LjggMC0xNi03LjItMTYtMTZWMzM2em0wIDk2YzAtOC44IDcuMi0xNiAxNi0xNkg4MGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4Yy04LjggMC0xNi03LjItMTYtMTZWNDMyek0xNDQgMzIwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzM2em0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlYzMzZ6bTE2IDgwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDMyYy04LjggMC0xNi03LjItMTYtMTZWNDMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDQzMmMwLTguOCA3LjItMTYgMTYtMTZIMzY4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWNDMyelwiXVxufTtcbnZhciBmYVRlbGV0eXBlID0gZmFUdHk7XG52YXIgZmFEaWFncmFtTmV4dCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFncmFtLW5leHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NzZcIiwgXCJNNTEyIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEgyODB2NjRoNDYuMWMyMS40IDAgMzIuMSAyNS45IDE3IDQxTDI3MyAzOTljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDE2OSAzMjljLTE1LjEtMTUuMS00LjQtNDEgMTctNDFIMjMyVjIyNEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0ek00NDggNDE2VjM1MkgzNjUuM2wuNC0uNGMxOC40LTE4LjQgMjAuNC00My43IDExLTYzLjZsNzEuMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDcxLjMgMGMtOS40IDE5LjktNy40IDQ1LjIgMTEgNjMuNmwuNCAuNEg2NHY2NEgyMTAuN2w1LjcgNS43YzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDUuNy01LjdINDQ4elwiXVxufTtcbnZhciBmYVBlcnNvblJpZmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1yaWZsZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0ZVwiLCBcIk0yNjUuMiAxOTJjMjUuNCAwIDQ5LjggNy4xIDcwLjggMTkuOVY1MTJIMTQ0VjMzNy43TDkwLjQgNDI4LjNjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMXMtMjUuMy0zNS44LTE0LjEtNTQuOEw5Ny43IDI1OC44YzI0LjUtNDEuNCA2OS02Ni44IDExNy4xLTY2LjhoNTAuNHpNMTYwIDgwYTgwIDgwIDAgMSAxIDE2MCAwQTgwIDgwIDAgMSAxIDE2MCA4MHpNNDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2VjEzMi4zYzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43VjI2OS4zbDE2LTUuM1YyMDhjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnY4NC41YzAgNi45LTQuNCAxMy0xMC45IDE1LjJMNDgwIDMyNS4zVjM1Mmg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4NGwyMyA5Mi4xYzIuNSAxMC4xLTUuMSAxOS45LTE1LjUgMTkuOUg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlY0MDBINDAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJWMTYwYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43VjMyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEyXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAyMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAtMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2ODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyODhjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNsb3NlZENhcHRpb25pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvc2VkLWNhcHRpb25pbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYyMGFcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnpNMjAwIDIwOGMxNC4yIDAgMjcgNi4xIDM1LjggMTZjOC44IDkuOSAyNCAxMC43IDMzLjkgMS45czEwLjctMjQgMS45LTMzLjljLTE3LjUtMTkuNi00My4xLTMyLTcxLjUtMzJjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjguNCAwIDU0LTEyLjQgNzEuNS0zMmM4LjgtOS45IDgtMjUtMS45LTMzLjlzLTI1LTgtMzMuOSAxLjljLTguOCA5LjktMjEuNiAxNi0zNS44IDE2Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4em0xNDQgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhjMTQuMiAwIDI3IDYuMSAzNS44IDE2YzguOCA5LjkgMjQgMTAuNyAzMy45IDEuOXMxMC43LTI0IDEuOS0zMy45Yy0xNy41LTE5LjYtNDMuMS0zMi03MS41LTMyYy01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzI4LjQgMCA1NC0xMi40IDcxLjUtMzJjOC44LTkuOSA4LTI1LTEuOS0zMy45cy0yNS04LTMzLjkgMS45Yy04LjggOS45LTIxLjYgMTYtMzUuOCAxNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6XCJdXG59O1xudmFyIGZhUGVyc29uSGlraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oaWtpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhpa2luZ1wiXSwgXCJmNmVjXCIsIFwiTTE5MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem01MS4zIDE4Mi43TDIyNC4yIDMwN2w0OS43IDQ5LjdjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM5Ny4zbC03My45LTczLjljLTE1LjgtMTUuOC0yMi4yLTM4LjYtMTYuOS02MC4zbDIwLjQtODRjOC4zLTM0LjEgNDIuNy01NC45IDc2LjctNDYuNGMxOSA0LjggMzUuNiAxNi40IDQ2LjQgMzIuN0wzMDUuMSAyMDhIMzM2VjE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djU1LjhjMCAuMSAwIC4yIDAgLjJzMCAuMiAwIC4yVjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNzJIMjk2LjZjLTE2IDAtMzEtOC0zOS45LTIxLjRsLTEzLjMtMjB6TTgxLjEgNDcxLjlMMTE3LjMgMzM0YzMgNC4yIDYuNCA4LjIgMTAuMSAxMS45bDQxLjkgNDEuOUwxNDIuOSA0ODguMWMtNC41IDE3LjEtMjIgMjcuMy0zOS4xIDIyLjhzLTI3LjMtMjItMjIuOC0zOS4xem01NS41LTM0NkwxMDEuNCAyNjYuNWMtMyAxMi4xLTE0LjkgMTkuOS0yNy4yIDE3LjlsLTQ3LjktOGMtMTQtMi4zLTIyLjktMTYuMy0xOS4yLTMwTDMxLjkgMTU1YzkuNS0zNC44IDQxLjEtNTkgNzcuMi01OWg0LjJjMTUuNiAwIDI3LjEgMTQuNyAyMy4zIDI5Ljh6XCJdXG59O1xudmFyIGZhSGlraW5nID0gZmFQZXJzb25IaWtpbmc7XG52YXIgZmFWZW51c0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ZW51cy1kb3VibGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5ODkwXSwgXCJmMjI2XCIsIFwiTTE5MiAyODhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0zNjggMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NCAxNzMuMVYzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjI0djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMzJWMzQ5LjFDNzguMSAzMzQuMSAxNiAyNjIuMyAxNiAxNzZDMTYgNzguOCA5NC44IDAgMTkyIDBzMTc2IDc4LjggMTc2IDE3NnpNMzQ0IDMxOGMxNC42LTE1LjYgMjYuOC0zMy40IDM2LTUzYzE4LjggMTQuNCA0Mi40IDIzIDY4IDIzYzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEyYy0yNS42IDAtNDkuMSA4LjYtNjggMjNjLTkuMy0xOS41LTIxLjUtMzcuNC0zNi01M0MzNzMuMSAxMi42IDQwOS4xIDAgNDQ4IDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xVjM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0ODB2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMlYzNDkuMWMtMjYuNi00LjktNTEuMS0xNS43LTcyLTMxLjF6XCJdXG59O1xudmFyIGZhSW1hZ2VzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ltYWdlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjMwMlwiLCBcIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTYwek0zOTYgMTM4LjdsOTYgMTQ0YzQuOSA3LjQgNS40IDE2LjggMS4yIDI0LjZTNDgwLjkgMzIwIDQ3MiAzMjBIMzI4IDI4MCAyMDBjLTkuMiAwLTE3LjYtNS4zLTIxLjYtMTMuNnMtMi45LTE4LjIgMi45LTI1LjRsNjQtODBjNC42LTUuNyAxMS40LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwxNy4zIDIxLjYgNTYtODRDMzYwLjUgMTMyIDM2OCAxMjggMzc2IDEyOHMxNS41IDQgMjAgMTAuN3pNMTkyIDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMFYzNDRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzZINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDEzNmMtNDguNiAwLTg4LTM5LjQtODgtODhWMTIwelwiXVxufTtcbnZhciBmYUNhbGN1bGF0b3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsY3VsYXRvcicsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQyNV0sIFwiZjFlY1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiA2NEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAxNjBhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNOTYgMzUyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTY0LTY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNMjg4IDQ0OGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xudmFyIGZhUGVvcGxlUHVsbGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtcHVsbGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUzNVwiLCBcIk04MCA5NkE0OCA0OCAwIDEgMCA4MCAwYTQ4IDQ4IDAgMSAwIDAgOTZ6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyYzkuOCAwIDE4LjUtNC40IDI0LjQtMTEuMkw4MC40IDQ4NS4zYzIuOSAxNy40IDE5LjQgMjkuMiAzNi44IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOEwxMjMuMSAzNTJoMTUuN2wzMCAxMzQuOWMzLjggMTcuMyAyMC45IDI4LjEgMzguMiAyNC4zczI4LjEtMjAuOSAyNC4zLTM4LjJsLTU3LjMtMjU4IDExNi4zIDUzLjhjLjUgLjMgMS4xIC41IDEuNiAuN2M4LjYgMy42IDE4IDMuMSAyNS45LS43YzMuNC0xLjYgNi42LTMuOSA5LjMtNi43YzMuMS0zLjIgNS41LTcgNy4xLTExLjRjLjEtLjMgLjItLjcgLjMtMWwyLjUtNy41YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDUzNyAyMzIuN2wtMTUuMy0zNi44QzUwNC41IDE1NC44IDQ2NC4zIDEyOCA0MTkuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOEg2NHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6XCJdXG59O1xudmFyIGZhTiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTEwXSwgXCI0ZVwiLCBcIk0yMS4xIDMzLjljMTIuNy00LjYgMjYuOS0uNyAzNS41IDkuNkwzMjAgMzU5LjZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0NDhjMCAxMy41LTguNCAyNS41LTIxLjEgMzAuMXMtMjYuOSAuNy0zNS41LTkuNkw2NCAxNTIuNFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjRDMCA1MC41IDguNCAzOC41IDIxLjEgMzMuOXpcIl1cbn07XG52YXIgZmFDYWJsZUNhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWJsZS1jYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NzMsIDU3NTUxLCBcInRyYW1cIl0sIFwiZjdkYVwiLCBcIk0yODggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCA1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjMyVjE1Ny41bC0yMDMuMSA0MmMtMTMgMi43LTI1LjctNS43LTI4LjQtMTguNnM1LjctMjUuNyAxOC42LTI4LjRsMjMyLTQ4IDIzMi00OGMxMy0yLjcgMjUuNyA1LjcgMjguNCAxOC42cy01LjcgMjUuNy0xOC42IDI4LjRMMjgwIDE0Ny41VjIyNEg0MTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyODh6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIOTZ6bTExMiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNkgzNTJ6XCJdXG59O1xudmFyIGZhVHJhbSA9IGZhQ2FibGVDYXI7XG52YXIgZmFDbG91ZFJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtcmFpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc4MywgOTkyNl0sIFwiZjczZFwiLCBcIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjJDNjQuNyAxMjYuMSA2NCAxMTkuMSA2NCAxMTJDNjQgNTAuMSAxMTQuMSAwIDE3NiAwYzQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MGMxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS41LS42IDEwLjgtMS42IDE2Yy41IDAgMS4xIDAgMS42IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIOTZ6bS02LjggNTJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zdjNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh2LTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjNMODkuMiAzNzJ6bTE2MCAwYzEuMy0yLjUgMy45LTQgNi44LTRzNS40IDEuNSA2LjggNGwzNS4xIDY0LjZjNC4xIDcuNSA2LjIgMTUuOCA2LjIgMjQuM3YzYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4di0zYzAtOC41IDIuMS0xNi45IDYuMi0yNC4zTDI0OS4yIDM3MnptMTI0LjkgNjQuNkw0MDkuMiAzNzJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zdjNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh2LTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjN6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDRcIiwgXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzE1LjEgMCAyOC41LTYuOSAzNy4zLTE3LjhDMzQwLjQgNDYyLjIgMzIwIDQxNy41IDMyMCAzNjhjMC01NC43IDI0LjktMTAzLjUgNjQtMTM1LjhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w1MTguNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDk2IDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDczLjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0OTYgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFTaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NzRdLCBcImYyMWFcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OFYyNDBsNDQuNCAxNC44YzIzLjEgNy43IDI5LjUgMzcuNSAxMS41IDUzLjlsLTEwMSA5Mi42Yy0xNi4yIDkuNC0zNC43IDE1LjEtNTAuOSAxNS4xYy0xOS42IDAtNDAuOC03LjctNTkuMi0yMC4zYy0yMi4xLTE1LjUtNTEuNi0xNS41LTczLjcgMGMtMTcuMSAxMS44LTM4IDIwLjMtNTkuMiAyMC4zYy0xNi4yIDAtMzQuNy01LjctNTAuOS0xNS4xbC0xMDEtOTIuNmMtMTgtMTYuNS0xMS42LTQ2LjIgMTEuNS01My45TDk2IDI0MFYxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWMzJ6TTE2MCAyMTguN2wxMDcuOC0zNS45YzEzLjEtNC40IDI3LjMtNC40IDQwLjUgMEw0MTYgMjE4LjdWMTI4SDE2MHY5MC43ek0zMDYuNSA0MjEuOUMzMjkgNDM3LjQgMzU2LjUgNDQ4IDM4NCA0NDhjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNTAxLjcgNDE3IDUxMiAzODQgNTEyYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgNDM3LjIgMTY1LjEgNDQ4IDE5MiA0NDhjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhQXJyb3dzRG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtZG93bi10by1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI4XCIsIFwiTTU0NCA0MTZMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem0yMi42LTEzNy40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQ4MCAyNzQuNyA0ODAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzIwLTQ1LjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE2MCAyNzQuNyAxNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuN0w1NC42IDIzMy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFEb3dubG9hZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3dubG9hZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAxOVwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjc0LjdsLTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAyNzQuN1YzMnpNNjQgMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHYzMmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM0Ni41bC00NS4zIDQ1LjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwTDE2NS41IDM1Mkg2NHptMzY4IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFGYWNlR3JpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsIFwiZ3JpblwiXSwgXCJmNTgwXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUdyaW4gPSBmYUZhY2VHcmluO1xudmFyIGZhRGVsZXRlTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkZWxldGUtbGVmdCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzkwMDMsIFwiYmFja3NwYWNlXCJdLCBcImY1NWFcIiwgXCJNNTc2IDEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyMDUuM2MtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdMOS40IDIzMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZMMTYwIDQyOS4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOHpNMjcxIDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG52YXIgZmFCYWNrc3BhY2UgPSBmYURlbGV0ZUxlZnQ7XG52YXIgZmFFeWVEcm9wcGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V5ZS1kcm9wcGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleWUtZHJvcHBlci1lbXB0eVwiLCBcImV5ZWRyb3BwZXJcIl0sIFwiZjFmYlwiLCBcIk0zNDEuNiAyOS4yTDI0MC4xIDEzMC44bC05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjRMNDgyLjggMTcwLjRjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNnY0Mi40TDUuNCA0NjIuMmMtOC41IDEyLjctNi44IDI5LjYgNCA0MC40czI3LjcgMTIuNSA0MC40IDRMODkuNyA0ODBoNDIuNGMyMS4yIDAgNDEuNi04LjQgNTYuNi0yMy40TDMwOS40IDMzNS45bC00NS4zLTQ1LjNMMTQzLjQgNDExLjNjLTMgMy03LjEgNC43LTExLjMgNC43SDk2VjM3OS45YzAtNC4yIDEuNy04LjMgNC43LTExLjNMMjIxLjQgMjQ3LjlsLTQ1LjMtNDUuM0w1NS40IDMyMy4zelwiXVxufTtcbnZhciBmYUV5ZURyb3BwZXJFbXB0eSA9IGZhRXllRHJvcHBlcjtcbnZhciBmYUV5ZWRyb3BwZXIgPSBmYUV5ZURyb3BwZXI7XG52YXIgZmFGaWxlQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1YTBcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4ek0yODggMzY4YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIxMS4zLTQzLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDQxNiAzODUuNGwtMjguNy0yOC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDcyLTcyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYUZvcndhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTNdLCBcImYwNGVcIiwgXCJNNTIuNSA0NDAuNmMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNFMwIDQyOC40IDAgNDE2Vjk2QzAgODMuNiA3LjIgNzIuMyAxOC40IDY3czI0LjUtMy42IDM0LjEgNC40TDIyNCAyMTQuM1YyNTZ2NDEuN0w1Mi41IDQ0MC42ek0yNTYgMzUyVjI1NiAxMjggOTZjMC0xMi40IDcuMi0yMy43IDE4LjQtMjlzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MGM3LjMgNi4xIDExLjUgMTUuMSAxMS41IDI0LjZzLTQuMiAxOC41LTExLjUgMjQuNmwtMTkyIDE2MGMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNHMtMTguNC0xNi42LTE4LjQtMjlWMzUyelwiXVxufTtcbnZhciBmYU1vYmlsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNDEsIFwibW9iaWxlLWFuZHJvaWRcIiwgXCJtb2JpbGUtcGhvbmVcIl0sIFwiZjNjZVwiLCBcIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMDRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIODB6bTgwIDQzMmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlO1xudmFyIGZhTW9iaWxlUGhvbmUgPSBmYU1vYmlsZTtcbnZhciBmYUZhY2VNZWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1tZWgnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsIFwibWVoXCJdLCBcImYxMWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xNjAgMzM2SDM1MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTWVoID0gZmFGYWNlTWVoO1xudmFyIGZhQWxpZ25DZW50ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tY2VudGVyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDM3XCIsIFwiTTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6XCJdXG59O1xudmFyIGZhQm9va1NrdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stc2t1bGwnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJvb2stZGVhZFwiXSwgXCJmNmI3XCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBIMzg0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQgOTZjLTUzIDAtOTYtNDMtOTYtOTZWOTZ6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJWMzg0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzIwIDExMmMwLTM1LjMtMzUuOC02NC04MC02NHMtODAgMjguNy04MCA2NGMwIDIwLjkgMTIuNiAzOS41IDMyIDUxLjJWMTc2YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMTYzLjJjMTkuNC0xMS43IDMyLTMwLjMgMzItNTEuMnpNMjA4IDk2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptNDggMTZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMTM0LjMgMjA5LjNjLTguMS0zLjUtMTcuNSAuMy0yMSA4LjRzLjMgMTcuNSA4LjQgMjFMMTk5LjQgMjcybC03Ny43IDMzLjNjLTguMSAzLjUtMTEuOSAxMi45LTguNCAyMXMxMi45IDExLjkgMjEgOC40TDI0MCAyODkuNGwxMDUuNyA0NS4zYzguMSAzLjUgMTcuNS0uMyAyMS04LjRzLS4zLTE3LjUtOC40LTIxTDI4MC42IDI3Mmw3Ny43LTMzLjNjOC4xLTMuNSAxMS45LTEyLjkgOC40LTIxcy0xMi45LTExLjktMjEtOC40TDI0MCAyNTQuNiAxMzQuMyAyMDkuM3pcIl1cbn07XG52YXIgZmFCb29rRGVhZCA9IGZhQm9va1NrdWxsO1xudmFyIGZhSWRDYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lkLWNhcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0NywgXCJkcml2ZXJzLWxpY2Vuc2VcIl0sIFwiZjJjMlwiLCBcIk0wIDk2bDU3NiAwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMzIgMCA2MC43IDAgOTZ6bTAgMzJWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhIMHpNNjQgNDA1LjNjMC0yOS41IDIzLjktNTMuMyA1My4zLTUzLjNIMjM0LjdjMjkuNSAwIDUzLjMgMjMuOSA1My4zIDUzLjNjMCA1LjktNC44IDEwLjctMTAuNyAxMC43SDc0LjdjLTUuOSAwLTEwLjctNC44LTEwLjctMTAuN3pNMTc2IDE5MmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMTc2IDE2YzAtOC44IDcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZ6bTAgNjRjMC04LjggNy4yLTE2IDE2LTE2SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYURyaXZlcnNMaWNlbnNlID0gZmFJZENhcmQ7XG52YXIgZmFPdXRkZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ291dGRlbnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImRlZGVudFwiXSwgXCJmMDNiXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6TTE5MiAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS4yIDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42VjMzNS4zYzAgMTMuMy0xNS4zIDIwLjgtMjUuOCAxMi42TC4yIDI2OC42elwiXVxufTtcbnZhciBmYURlZGVudCA9IGZhT3V0ZGVudDtcbnZhciBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGZlXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYUhvdXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTY4LCA2MzQ5OCwgNjM1MDAsIFwiaG9tZVwiLCBcImhvbWUtYWx0XCIsIFwiaG9tZS1sZy1hbHRcIl0sIFwiZjAxNVwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWgtMzJsLjcgMTYwLjJjMCAyLjctLjIgNS40LS41IDguMVY0NzJjMCAyMi4xLTE3LjkgNDAtNDAgNDBINDU2Yy0xLjEgMC0yLjIgMC0zLjMtLjFjLTEuNCAuMS0yLjggLjEtNC4yIC4xSDQxNiAzOTJjLTIyLjEgMC00MC0xNy45LTQwLTQwVjQ0OCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MEgxNjAgMTI4LjFjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMkgxMDRjLTIyLjEgMC00MC0xNy45LTQwLTQwVjM2MGMwLS45IDAtMS45IC4xLTIuOFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0elwiXVxufTtcbnZhciBmYUhvbWUgPSBmYUhvdXNlO1xudmFyIGZhSG9tZUFsdCA9IGZhSG91c2U7XG52YXIgZmFIb21lTGdBbHQgPSBmYUhvdXNlO1xudmFyIGZhQ2FsZW5kYXJXZWVrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbGVuZGFyLXdlZWsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3ODRcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZIMzY4YzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDgwelwiXVxufTtcbnZhciBmYUxhcHRvcE1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wLW1lZGljYWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY4MTJcIiwgXCJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1Mkg1MTJWOTZIMTI4VjM1Mkg2NFY5NnpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRINjIwLjhjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmMwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEg3Ni44QzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzUydjQ4YzAgOC44LTcuMiAxNi0xNiAxNkgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMjI0YzAtOC44IDcuMi0xNiAxNi0xNmg0OFYxNjB6XCJdXG59O1xudmFyIGZhQiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOThdLCBcIjQyXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWMjU2IDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgxOTJjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuN2MxOC43LTIyLjMgMzAtNTEgMzAtODIuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEg2NHptOTYgMTkySDY0Vjk2aDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek02NCAyODhoOTYgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRINjRWMjg4elwiXVxufTtcbnZhciBmYUZpbGVNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtbWVkaWNhbCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjQ3N1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDIyNHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMzUySDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjQwelwiXVxufTtcbnZhciBmYURpY2VPbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1vbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgXCJmNTI1XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhS2l3aUJpcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAna2l3aS1iaXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTM1XCIsIFwiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNEg0NDhjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMXMxMS4yLTguMyAxMS4yLTE1LjNWMjI0YzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4SDM5Mi4zYy0zNi40IDAtNjkuOS0xNy42LTEwMS4xLTM2LjRDMjYyLjMgNDIuMSAyMjguMyAzMiAxOTIgMzJDODYgMzIgMCAxMTggMCAyMjRjMCA3MS4xIDM4LjYgMTMzLjEgOTYgMTY2LjNWNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDEwYzE1LjMgMy45IDMxLjQgNiA0OCA2YzUuNCAwIDEwLjctLjIgMTYtLjdWNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDA1LjFjMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUFycm93UmlnaHRBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg2NDQsIFwiZXhjaGFuZ2VcIl0sIFwiZjBlY1wiLCBcIk00MzguNiAxNTAuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDMzOC43IDk2IDMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDMwNi43IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzMzLjMgMzUyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgNDE2IDQxNiA0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwNi43IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZ6XCJdXG59O1xudmFyIGZhRXhjaGFuZ2UgPSBmYUFycm93UmlnaHRBcnJvd0xlZnQ7XG52YXIgZmFSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJlZG8tYWx0XCIsIFwicm90YXRlLWZvcndhcmRcIl0sIFwiZjJmOVwiLCBcIk00NjMuNSAyMjRINDcyYzEzLjMgMCAyNC0xMC43IDI0LTI0VjcyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJMNDEzLjQgOTYuNmMtODcuNi04Ni41LTIyOC43LTg2LjItMzE1LjggMWMtODcuNSA4Ny41LTg3LjUgMjI5LjMgMCAzMTYuOHMyMjkuMyA4Ny41IDMxNi44IDBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBjLTYyLjUgNjIuNS0xNjMuOCA2Mi41LTIyNi4zIDBzLTYyLjUtMTYzLjggMC0yMjYuM2M2Mi4yLTYyLjIgMTYyLjctNjIuNSAyMjUuMy0xTDMyNyAxODNjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NjMuNXpcIl1cbn07XG52YXIgZmFSZWRvQWx0ID0gZmFSb3RhdGVSaWdodDtcbnZhciBmYVJvdGF0ZUZvcndhcmQgPSBmYVJvdGF0ZVJpZ2h0O1xudmFyIGZhVXRlbnNpbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXRlbnNpbHMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4NjAsIDYxNjg1LCBcImN1dGxlcnlcIl0sIFwiZjJlN1wiLCBcIk00MTYgMEM0MDAgMCAyODggMzIgMjg4IDE3NlYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyIDI0MCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNjQgMTZDNjQgNy44IDU3LjkgMSA0OS43IC4xUzM0LjIgNC42IDMyLjQgMTIuNUwyLjEgMTQ4LjhDLjcgMTU1LjEgMCAxNjEuNSAwIDE2Ny45YzAgNDUuOSAzNS4xIDgzLjYgODAgODcuN1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTUuNmM0NC45LTQuMSA4MC00MS44IDgwLTg3LjdjMC02LjQtLjctMTIuOC0yLjEtMTkuMUwxOTEuNiAxMi41Yy0xLjgtOC05LjMtMTMuMy0xNy40LTEyLjRTMTYwIDcuOCAxNjAgMTZWMTUwLjJjMCA1LjQtNC40IDkuOC05LjggOS44Yy01LjEgMC05LjMtMy45LTkuOC05TDEyNy45IDE0LjZDMTI3LjIgNi4zIDEyMC4zIDAgMTEyIDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw4My43IDE1MWMtLjUgNS4xLTQuNyA5LTkuOCA5Yy01LjQgMC05LjgtNC40LTkuOC05LjhWMTZ6bTQ4LjMgMTUybC0uMyAwLS4zIDAgLjMtLjcgLjMgLjd6XCJdXG59O1xudmFyIGZhQ3V0bGVyeSA9IGZhVXRlbnNpbHM7XG52YXIgZmFBcnJvd1VwV2lkZVNob3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXdpZGUtc2hvcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYW1vdW50LXVwXCJdLCBcImYxNjFcIiwgXCJNMTUxLjYgNDIuNEMxNDUuNSAzNS44IDEzNyAzMiAxMjggMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDk2IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA0ODBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4SDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdXG59O1xudmFyIGZhU29ydEFtb3VudFVwID0gZmFBcnJvd1VwV2lkZVNob3J0O1xudmFyIGZhTWlsbFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWlsbC1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMWVkXCIsIFwiTTMwMi4xIDQyLjhjNS45LTE2LjYtMi43LTM1LTE5LjQtNDAuOXMtMzUgMi43LTQwLjkgMTkuNEwyMDggMTE2LjFjLTUuNyA0LTExLjEgOC41LTE2IDEzLjVDMTcxLjcgMTA4LjkgMTQzLjMgOTYgMTEyIDk2Yy0xOS41IDAtMzcuOCA1LTUzLjcgMTMuN0M1Mi41IDEwMS40IDQyLjkgOTYgMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4djgwVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIwOGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djQyLjVMODEuOSA0NjkuMmMtNS45IDE2LjYgMi43IDM1IDE5LjQgNDAuOXMzNS0yLjcgNDAuOS0xOS40bDIxLjQtNjBDMTY4LjkgNDQxIDE3OS42IDQ0OCAxOTIgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI2MS41bDM1LjctMTAwYzMuOS0xIDguMS0xLjYgMTIuMy0xLjZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjA4YzAtNTguMi00NC4zLTEwNi0xMDEuMS0xMTEuNWwxOS4yLTUzLjh6XCJdXG59O1xudmFyIGZhQm93bFJpY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm93bC1yaWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMmViXCIsIFwiTTE3NiA1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yNCA0OGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE3Nkg3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2SDQ4NC42YzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40YzAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhIMTQwLjJjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40ek0yMjQgMjAwYzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS05NiAwYzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE1MmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS0yNC05NmgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTIxNiA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgzNDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTI0LTk2aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjk2IDMyaDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI5NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFTa3VsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdza3VsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODEyOF0sIFwiZjU0Y1wiLCBcIk00MTYgMzk4LjljNTguNS00MS4xIDk2LTEwNC4xIDk2LTE3NC45QzUxMiAxMDAuMyAzOTcuNCAwIDI1NiAwUzAgMTAwLjMgMCAyMjRjMCA3MC43IDM3LjUgMTMzLjggOTYgMTc0LjljMCAuNCAwIC43IDAgMS4xdjY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ4VjQ2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djQ4aDY0VjQ2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djQ4aDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQwMGMwLS40IDAtLjcgMC0xLjF6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA5NiAyNTZ6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFUb3dlckJyb2FkY2FzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3dlci1icm9hZGNhc3QnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJyb2FkY2FzdC10b3dlclwiXSwgXCJmNTE5XCIsIFwiTTgwLjMgNDRDNjkuOCA2OS45IDY0IDk4LjIgNjQgMTI4czUuOCA1OC4xIDE2LjMgODRjNi42IDE2LjQtMS4zIDM1LTE3LjcgNDEuN3MtMzUtMS4zLTQxLjctMTcuN0M3LjQgMjAyLjYgMCAxNjYuMSAwIDEyOFM3LjQgNTMuNCAyMC45IDIwQzI3LjYgMy42IDQ2LjItNC4zIDYyLjYgMi4zUzg2LjkgMjcuNiA4MC4zIDQ0ek01NTUuMSAyMEM1NjguNiA1My40IDU3NiA4OS45IDU3NiAxMjhzLTcuNCA3NC42LTIwLjkgMTA4Yy02LjYgMTYuNC0yNS4zIDI0LjMtNDEuNyAxNy43UzQ4OS4xIDIyOC40IDQ5NS43IDIxMmMxMC41LTI1LjkgMTYuMy01NC4yIDE2LjMtODRzLTUuOC01OC4xLTE2LjMtODRDNDg5LjEgMjcuNiA0OTcgOSA1MTMuNCAyLjNzMzUgMS4zIDQxLjcgMTcuN3pNMzUyIDEyOGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE4My40Yy0xOS4xLTExLjEtMzItMzEuNy0zMi01NS40YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTE3MC42IDc2LjhDMTYzLjggOTIuNCAxNjAgMTA5LjcgMTYwIDEyOHMzLjggMzUuNiAxMC42IDUxLjJjNy4xIDE2LjItLjMgMzUuMS0xNi41IDQyLjFzLTM1LjEtLjMtNDIuMS0xNi41Yy0xMC4zLTIzLjYtMTYtNDkuNi0xNi03Ni44czUuNy01My4yIDE2LTc2LjhjNy4xLTE2LjIgMjUuOS0yMy42IDQyLjEtMTYuNXMyMy42IDI1LjkgMTYuNSA0Mi4xek00NjQgNTEuMmMxMC4zIDIzLjYgMTYgNDkuNiAxNiA3Ni44cy01LjcgNTMuMi0xNiA3Ni44Yy03LjEgMTYuMi0yNS45IDIzLjYtNDIuMSAxNi41cy0yMy42LTI1LjktMTYuNS00Mi4xYzYuOC0xNS42IDEwLjYtMzIuOSAxMC42LTUxLjJzLTMuOC0zNS42LTEwLjYtNTEuMmMtNy4xLTE2LjIgLjMtMzUuMSAxNi41LTQyLjFzMzUuMSAuMyA0Mi4xIDE2LjV6XCJdXG59O1xudmFyIGZhQnJvYWRjYXN0VG93ZXIgPSBmYVRvd2VyQnJvYWRjYXN0O1xudmFyIGZhVHJ1Y2tQaWNrdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stcGlja3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzYzXSwgXCJmNjNjXCIsIFwiTTM2OC42IDk2bDc2LjggOTZIMjg4Vjk2aDgwLjZ6TTIyNCA4MFYxOTJINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY1LjFjLS43IDUuMi0xLjEgMTAuNi0xLjEgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmMwLTUuNC0uNC0xMC44LTEuMS0xNmg2Ni4zYy0uNyA1LjItMS4xIDEwLjYtMS4xIDE2YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJjMC01LjQtLjQtMTAuOC0xLjEtMTZINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkg1MjcuNEw0MTguNiA1NmMtMTIuMS0xNS4yLTMwLjUtMjQtNTAtMjRIMjcyYy0yNi41IDAtNDggMjEuNS00OCA0OHptMCAyODhhNDggNDggMCAxIDEgLTk2IDAgNDggNDggMCAxIDEgOTYgMHptMjg4IDBhNDggNDggMCAxIDEgLTk2IDAgNDggNDggMCAxIDEgOTYgMHpcIl1cbn07XG52YXIgZmFVcExvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtbG9uZycsXG4gIGljb246IFszMjAsIDUxMiwgW1wibG9uZy1hcnJvdy1hbHQtdXBcIl0sIFwiZjMwY1wiLCBcIk0zMTggMTc3LjVjMy44LTguOCAyLTE5LTQuNi0yNmwtMTM2LTE0NEMxNzIuOSAyLjcgMTY2LjYgMCAxNjAgMHMtMTIuOSAyLjctMTcuNCA3LjVsLTEzNiAxNDRjLTYuNiA3LTguNCAxNy4yLTQuNiAyNlMxNC40IDE5MiAyNCAxOTJIOTZsMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhoNzJjOS42IDAgMTguMi01LjcgMjItMTQuNXpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dBbHRVcCA9IGZhVXBMb25nO1xudmFyIGZhU3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9wJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbOTIwOV0sIFwiZjA0ZFwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6XCJdXG59O1xudmFyIGZhQ29kZU1lcmdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUtbWVyZ2UnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYzODdcIiwgXCJNODAgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMi40IDk3LjJjMjgtMTIuNCA0Ny42LTQwLjUgNDcuNi03My4yYzAtNDQuMi0zNS44LTgwLTgwLTgwUzAgMzUuOCAwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMzU4LjdDMTkuNyAzNzEgMCAzOTkuMiAwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNWMjcyYzI2LjcgMjAuMSA2MCAzMiA5NiAzMmg4Ni43YzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhIMjA4Yy00OS45IDAtOTEtMzguMS05NS42LTg2Ljh6TTgwIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTM0NCAyNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFVcGxvYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXBsb2FkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDkzXCIsIFwiTTI4OCAxMDkuM1YzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTA5LjNsLTczLjQgNzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDI4OCAxMDkuM3pNNjQgMzUySDE5MmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MzIgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG52YXIgZmFIdXJyaWNhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaHVycmljYW5lJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNzUxXCIsIFwiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNkMxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlWODEuMmMwIDguNCA2LjUgMTUuMyAxNC43IDE2LjVDMzA3IDExMi41IDM4NCAxOTkgMzg0IDMwMy40YzAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNGMtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJWNDMwLjJjMC04LjQtNi41LTE1LjMtMTQuNy0xNi41Qzc3IDM5OC45IDAgMzEyLjQgMCAyMDh6bTI4OCA0OEE5NiA5NiAwIDEgMCA5NiAyNTZhOTYgOTYgMCAxIDAgMTkyIDB6bS05Ni0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhTW91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW91bmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MmRcIiwgXCJNMTQ0LjEgMTc5LjJDMTczLjggMTI3LjcgMjI4LjYgOTYgMjg4IDk2czExNC4yIDMxLjcgMTQzLjkgODMuMkw1NDAuNCAzNjhjMTIuMyAyMS4zLTMuMSA0OC0yNy43IDQ4SDYzLjNjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTQ0LjEgMTc5LjJ6XCJdXG59O1xudmFyIGZhVG9pbGV0UG9ydGFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0LXBvcnRhYmxlJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTgzXCIsIFwiTTAgMzJWNjRIMzIwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgMCAwIDE0LjMgMCAzMnpNMjQgOTZIMHYyNFY0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHYtOEgyNzJ2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjEyMCA5NkgyOTYgMjR6TTI1NiAyNDB2NjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdXG59O1xudmFyIGZhQ29tcGFjdERpc2MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcGFjdC1kaXNjJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkxLCAxMjgxOTIsIDEyODQ0MF0sIFwiZjUxZlwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6TTk2IDI0MGMwLTM1IDE3LjUtNzEuMSA0NS4yLTk4LjhTMjA1IDk2IDI0MCA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNDUuNCAwLTg5LjIgMjIuMy0xMjEuNSA1NC41UzY0IDE5NC42IDY0IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYUZpbGVBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJmaWxlLWRvd25sb2FkXCJdLCBcImY1NmRcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0yMTYgMjMyVjMzNC4xbDMxLTMxYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC03Mi03MmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMxIDMxVjIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZpbGVEb3dubG9hZCA9IGZhRmlsZUFycm93RG93bjtcbnZhciBmYUNhcmF2YW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyYXZhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjhmZlwiLCBcIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMkg0MTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBWMzUyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwSDI4OGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTEyek0zMjAgMzUySDQ0OFYyNTZINDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjM1MnpNOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDk2em05NiAzMzZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVNoaWVsZENhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtY2F0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTcyXCIsIFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MCAxNTQuNGMwLTUuOCA0LjctMTAuNCAxMC40LTEwLjRoLjJjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRoNDhjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNoLjJjNS44IDAgMTAuNCA0LjcgMTAuNCAxMC40VjI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYxNTQuNHpNMjE2IDI4OGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTk2LTE2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6XCJdXG59O1xudmFyIGZhQm9sdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib2x0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg4OSwgXCJ6YXBcIl0sIFwiZjBlN1wiLCBcIk0zNDkuNCA0NC42YzUuOS0xMy43IDEuNS0yOS43LTEwLjYtMzguNXMtMjguNi04LTM5LjkgMS44bC0yNTYgMjI0Yy0xMCA4LjgtMTMuNiAyMi45LTguOSAzNS4zUzUwLjcgMjg4IDY0IDI4OEgxNzUuNUw5OC42IDQ2Ny40Yy01LjkgMTMuNy0xLjUgMjkuNyAxMC42IDM4LjVzMjguNiA4IDM5LjktMS44bDI1Ni0yMjRjMTAtOC44IDEzLjYtMjIuOSA4LjktMzUuM3MtMTYuNi0yMC43LTMwLTIwLjdIMjcyLjVMMzQ5LjQgNDQuNnpcIl1cbn07XG52YXIgZmFaYXAgPSBmYUJvbHQ7XG52YXIgZmFHbGFzc1dhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dsYXNzLXdhdGVyJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNGY0XCIsIFwiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM0gyNzUuM2M0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEgzMnpNNzMgMTU2LjVMNjYuNCA2NEgzMTcuNkwzMTEgMTU2LjVsLTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwYy0yMC45LTEwLjQtNDUuNS0xMC40LTY2LjQgMGMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwTDczIDE1Ni41elwiXVxufTtcbnZhciBmYU9pbFdlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLXdlbGwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MzJcIiwgXCJNNTI4LjMgNjEuM2MtMTEuNC00Mi43LTU1LjMtNjgtOTgtNTYuNkw0MTQuOSA4LjhDMzk3LjggMTMuNCAzODcuNyAzMSAzOTIuMyA0OGwyNC41IDkxLjRMMzA4LjUgMTY3LjVsLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzlMOTYgMjIyLjZWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDA2LjdMMzQwIDI1Ny41bC02Mi4yIDE2LjFMMzA1LjMgMzUySDIzOC43TDI2NSAyNzdsLTc0LjYgMTkuM0wxMzcuMyA0NDhIOTZWMjg4LjhsMzM3LjQtODcuNSAyNS4yIDk0YzQuNiAxNy4xIDIyLjEgMjcuMiAzOS4yIDIyLjZsMTUuNS00LjFjNDIuNy0xMS40IDY4LTU1LjMgNTYuNi05OEw1MjguMyA2MS4zek0yMDUuMSA0NDhsMTEuMi0zMkgzMjcuN2wxMS4yIDMySDIwNS4xelwiXVxufTtcbnZhciBmYVZhdWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZhdWx0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMmM1XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg4MGwxNiAzMmg2NGwxNi0zMkg0MDBsMTYgMzJoNjRsMTYtMzJoMTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyNCAzMjBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjQwYTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHpNNDgwIDIyMS4zVjMzNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyMjEuM2MtMTguNi02LjYtMzItMjQuNC0zMi00NS4zYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zelwiXVxufTtcbnZhciBmYU1hcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycycsXG4gIGljb246IFs0NDgsIDUxMiwgWzk3OTRdLCBcImYyMjJcIiwgXCJNMjg5LjggNDYuOGMzLjctOSAxMi41LTE0LjggMjIuMi0xNC44SDQyNGMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjhjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzMuNC0zMy40TDMyMSAyMDQuMmMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzAgNDAxLjIgMCAzMDRzNzguOC0xNzYgMTc2LTE3NmMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDUyLjYtNTIuNkwyOTUgNzNjLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJ6TTQwMCA4MGwwIDBoMHYwek0xNzYgNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHpcIl1cbn07XG52YXIgZmFUb2lsZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NzAxXSwgXCJmN2Q4XCIsIFwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhoOFYxOTYuOWMtMS45IDEuNC0zLjggMi45LTUuNiA0LjRDMTAuOSAyMTQuNSAwIDIzMi45IDAgMjU2YzAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjVjMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOHMxNS43IDEzLjMgMjYgMTMuM0gzNTJjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOGMyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNWMwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNmMtMS44LTEuNS0zLjctMy01LjYtNC40VjQ4aDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjR6TTM4NCAyNTYuM2MwIDEtLjMgMi42LTMuOCA1LjZjLTQuOCA0LjEtMTQgOS0yOS4zIDEzLjRDMzIwLjUgMjg0IDI3Ni4xIDI4OCAyMjQgMjg4cy05Ni41LTQtMTI2LjktMTIuOGMtMTUuMy00LjQtMjQuNS05LjMtMjkuMy0xMy40Yy0zLjUtMy0zLjgtNC42LTMuOC01LjZsMC0uMyAwLS4xYzAtMSAwLTIuNSAzLjgtNS44YzQuOC00LjEgMTQtOSAyOS4zLTEzLjRDMTI3LjUgMjI4IDE3MS45IDIyNCAyMjQgMjI0czk2LjUgNCAxMjYuOSAxMi44YzE1LjMgNC40IDI0LjUgOS4zIDI5LjMgMTMuNGMzLjggMy4yIDMuOCA0LjggMy44IDUuOGwwIC4xIDAgLjN6TTMyOC4yIDM4NGwtLjIgLjUgMC0uNWguMnpNMTEyIDY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFQbGFuZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1N1wiLCBcIk0yNTYgMGMtMzUgMC02NCA1OS41LTY0IDkzLjd2ODQuNkw4LjEgMjgzLjRjLTUgMi44LTguMSA4LjItOC4xIDEzLjl2NjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOHY0MmMwIDcuOCA2LjMgMTQgMTQgMTRjMS4zIDAgMi42LS4yIDMuOS0uNUwyNTYgNDgwbDExMC4xIDMxLjVjMS4zIC40IDIuNiAuNSAzLjkgLjVjNiAwIDExLjEtMy43IDEzLjEtOUMzNDQuNSA0NzAuNyAzMjAgNDIyLjIgMzIwIDM2OGMwLTYwLjYgMzAuNi0xMTQgNzcuMS0xNDUuNkwzMjAgMTc4LjNWOTMuN0MzMjAgNTkuNSAyOTIgMCAyNTYgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhWWVuU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd5ZW4tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgWzE2NSwgXCJjbnlcIiwgXCJqcHlcIiwgXCJybWJcIiwgXCJ5ZW5cIl0sIFwiZjE1N1wiLCBcIk01OC42IDQ2LjJDNDguOCAzMS41IDI5IDI3LjYgMTQuMyAzNy40Uy00LjQgNjcgNS40IDgxLjdMMTAwLjIgMjI0SDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjMySDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MlYyODhoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjE5LjhMMzE0LjYgODEuN2M5LjgtMTQuNyA1LjgtMzQuNi04LjktNDQuNHMtMzQuNi01LjgtNDQuNCA4LjlMMTYwIDE5OC4zIDU4LjYgNDYuMnpcIl1cbn07XG52YXIgZmFDbnkgPSBmYVllblNpZ247XG52YXIgZmFKcHkgPSBmYVllblNpZ247XG52YXIgZmFSbWIgPSBmYVllblNpZ247XG52YXIgZmFZZW4gPSBmYVllblNpZ247XG52YXIgZmFSdWJsZVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVibGUtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgWzgzODEsIFwicm91YmxlXCIsIFwicnViXCIsIFwicnVibGVcIl0sIFwiZjE1OFwiLCBcIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRWMjU2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDE2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMjhWMzIwSDI0MGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NEg5NnpNMjQwIDI1NkgxMjhWOTZIMjQwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXVxufTtcbnZhciBmYVJvdWJsZSA9IGZhUnVibGVTaWduO1xudmFyIGZhUnViID0gZmFSdWJsZVNpZ247XG52YXIgZmFSdWJsZSA9IGZhUnVibGVTaWduO1xudmFyIGZhU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1bicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MjhdLCBcImYxODVcIiwgXCJNMzYxLjUgMS4yYzUgMi4xIDguNiA2LjYgOS42IDExLjlMMzkxIDEyMWwxMDcuOSAxOS44YzUuMyAxIDkuOCA0LjYgMTEuOSA5LjZzMS41IDEwLjctMS42IDE1LjJMNDQ2LjkgMjU2bDYyLjMgOTAuM2MzLjEgNC41IDMuNyAxMC4yIDEuNiAxNS4ycy02LjYgOC42LTExLjkgOS42TDM5MSAzOTEgMzcxLjEgNDk4LjljLTEgNS4zLTQuNiA5LjgtOS42IDExLjlzLTEwLjcgMS41LTE1LjItMS42TDI1NiA0NDYuOWwtOTAuMyA2Mi4zYy00LjUgMy4xLTEwLjIgMy43LTE1LjIgMS42cy04LjYtNi42LTkuNi0xMS45TDEyMSAzOTEgMTMuMSAzNzEuMWMtNS4zLTEtOS44LTQuNi0xMS45LTkuNnMtMS41LTEwLjcgMS42LTE1LjJMNjUuMSAyNTYgMi44IDE2NS43Yy0zLjEtNC41LTMuNy0xMC4yLTEuNi0xNS4yczYuNi04LjYgMTEuOS05LjZMMTIxIDEyMSAxNDAuOSAxMy4xYzEtNS4zIDQuNi05LjggOS42LTExLjlzMTAuNy0xLjUgMTUuMiAxLjZMMjU2IDY1LjEgMzQ2LjMgMi44YzQuNS0zLjEgMTAuMi0zLjcgMTUuMi0xLjZ6TTE2MCAyNTZhOTYgOTYgMCAxIDEgMTkyIDAgOTYgOTYgMCAxIDEgLTE5MiAwem0yMjQgMGExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwelwiXVxufTtcbnZhciBmYUd1aXRhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndWl0YXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YTZcIiwgXCJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjZjLTExIDExLTE4IDI0LjYtMjEuNCAzOS42Yy0zLjcgMTYuNi0xOS4xIDMwLjctMzYuMSAzMS42Yy0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42Qy0xNiAzMjguNC03LjYgNDA5LjQgNDcuNSA0NjQuNXMxMzYuMSA2My41IDE4MC45IDE4LjdjMTcuOS0xNy45IDI3LjQtNDEuNyAyOC42LTY3LjNjLjktMTcgMTUtMzIuMyAzMS42LTM2LjFjMTUtMy40IDI4LjYtMTAuNSAzOS42LTIxLjRjMzEuOC0zMS44IDMxLTg1LjkgMS42LTEzMWw3Ny42LTc3LjYgNDEtMTUuNGMzLjItMS4yIDYuMS0zLjEgOC41LTUuNWw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NjUgN3pNMjA4IDI1NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhRmFjZUxhdWdoV2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWxhdWdoLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoLXdpbmtcIl0sIFwiZjU5Y1wiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTE0NC40IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNTYuNCAyNS42Yy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwelwiXVxufTtcbnZhciBmYUxhdWdoV2luayA9IGZhRmFjZUxhdWdoV2luaztcbnZhciBmYUhvcnNlSGVhZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3JzZS1oZWFkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmN2FiXCIsIFwiTTY0IDQ2NFYzMTYuOWMwLTEwOC40IDY4LjMtMjA1LjEgMTcwLjUtMjQxLjNMNDA0LjIgMTUuNUM0MjUuNiA3LjkgNDQ4IDIzLjggNDQ4IDQ2LjRjMCAxMS01LjUgMjEuMi0xNC42IDI3LjNMNDAwIDk2YzQ4LjEgMCA5MS4yIDI5LjggMTA4LjEgNzQuOWw0OC42IDEyOS41YzExLjggMzEuNCA0LjEgNjYuOC0xOS42IDkwLjVjLTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFoLTMuNGMtMjYuMSAwLTUwLjktMTEuNi02Ny42LTMxLjdsLTMyLjMtMzguN2MtMTEuNyA0LjEtMjQuMiA2LjQtMzcuMyA2LjRsLS4xIDAgMCAwYy02LjMgMC0xMi41LS41LTE4LjYtMS41Yy0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjJjLTQuNC03LjYtMTQuMi0xMC4zLTIxLjktNS44cy0xMC4zIDE0LjItNS44IDIxLjljMjQgNDEuNSA2OC4zIDcwIDExOS4zIDcxLjlsNDcuMiA3MC44YzQgNi4xIDYuMiAxMy4yIDYuMiAyMC40YzAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTM5MiAyMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUJvcmVIb2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvcmUtaG9sZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRjM1wiLCBcIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWMjk2LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTIzLjctMTIuOS00NC40LTMyLTU1LjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQ4IDEyOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlYzNTJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ4elwiXVxufTtcbnZhciBmYUluZHVzdHJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZHVzdHJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjc1XCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NFYzMDR2NDggODBjMCAyNi41IDIxLjUgNDggNDggNDhINDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjMwNCAxNTIuMmMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMUwzNTIgMjE1LjRWMTUyLjJjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMTYwIDIxNS40VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0elwiXVxufTtcbnZhciBmYUNpcmNsZURvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgXCJhcnJvdy1hbHQtY2lyY2xlLWRvd25cIl0sIFwiZjM1OFwiLCBcIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDB6TTM3Ni45IDI5NC42TDI2OS44IDM5NC41Yy0zLjggMy41LTguNyA1LjUtMTMuOCA1LjVzLTEwLjEtMi0xMy44LTUuNUwxMzUuMSAyOTQuNmMtNC41LTQuMi03LjEtMTAuMS03LjEtMTYuM2MwLTEyLjMgMTAtMjIuMyAyMi4zLTIyLjNsNTcuNyAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU3LjcgMGMxMi4zIDAgMjIuMyAxMCAyMi4zIDIyLjNjMCA2LjItMi42IDEyLjEtNy4xIDE2LjN6XCJdXG59O1xudmFyIGZhQXJyb3dBbHRDaXJjbGVEb3duID0gZmFDaXJjbGVEb3duO1xudmFyIGZhQXJyb3dzVHVyblRvRG90cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdHVybi10by1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGMxXCIsIFwiTTI0OS40IDI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyNjkuMyA5NiA0MTYgOTZjNTMgMCA5NiA0MyA5NiA5NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTE0Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bTEzLjMgMjU2bDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgNDE2IDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4YzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDB6TTM4NCAzODRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek02NCAxOTJBNjQgNjQgMCAxIDEgNjQgNjRhNjQgNjQgMCAxIDEgMCAxMjh6XCJdXG59O1xudmFyIGZhRmxvcmluU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbG9yaW4tc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTE4NFwiLCBcIk0zMTQuNyAzMmMtMzguOCAwLTczLjcgMjMuMy04OC42IDU5LjFMMTcwLjcgMjI0SDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwTDk4LjkgMzk2LjNjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY5LjNjMzguOCAwIDczLjctMjMuMyA4OC42LTU5LjFMMjEzLjMgMjg4SDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNDBsNDUuMS0xMDguM2M1LTExLjkgMTYuNi0xOS43IDI5LjUtMTkuN0gzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzE0Ljd6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duU2hvcnRXaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tc2hvcnQtd2lkZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbW91bnQtZGVzY1wiLCBcInNvcnQtYW1vdW50LWRvd24tYWx0XCJdLCBcImY4ODRcIiwgXCJNMTUxLjYgNDY5LjZDMTQ1LjUgNDc2LjIgMTM3IDQ4MCAxMjggNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkw5NiAzNjUuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM2NS43bDMyLjQtMzUuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTJzMTMuOSAzMi4yIDIgNDUuMmwtODggOTZ6TTMyMCAzMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4aDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTb3J0QW1vdW50RGVzYyA9IGZhQXJyb3dEb3duU2hvcnRXaWRlO1xudmFyIGZhU29ydEFtb3VudERvd25BbHQgPSBmYUFycm93RG93blNob3J0V2lkZTtcbnZhciBmYUxlc3NUaGFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlc3MtdGhhbicsXG4gIGljb246IFszODQsIDUxMiwgWzYyNzc0XSwgXCIzY1wiLCBcIk0zODAuNiA4MS43YzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlMMTAzLjYgMjU2IDM2Ni4zIDM4Ny40YzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNsLTMyMC0xNjBDNi44IDI3OS4yIDAgMjY4LjEgMCAyNTZzNi44LTIzLjIgMTcuNy0yOC42bDMyMC0xNjBjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3pcIl1cbn07XG52YXIgZmFBbmdsZURvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtZG93bicsXG4gIGljb246IFs0NDgsIDUxMiwgWzg5NjRdLCBcImYxMDdcIiwgXCJNMjAxLjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzA2LjcgODYuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl1cbn07XG52YXIgZmFDYXJUdW5uZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLXR1bm5lbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRkZVwiLCBcIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0aDQyLjhjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRWMzc2YzAtMjAuOCAxMS4zLTM4LjkgMjguMS00OC42bDIxLTY0LjdjNy41LTIzLjEgMjktMzguNyA1My4zLTM4LjdIMzEzLjZjMjQuMyAwIDQ1LjggMTUuNiA1My4zIDM4LjdsMjEgNjQuN2MxNi44IDkuNyAyOC4yIDI3LjggMjguMiA0OC42VjQ4OGMwIDkuNi00LjIgMTguMS0xMC44IDI0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDB6TTM2Mi44IDUxMmMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNFY0NDhIMTYwdjQwYzAgOS42LTQuMiAxOC4xLTEwLjggMjRIMzYyLjh6TTE5MC44IDI3Ny41TDE3NyAzMjBIMzM1bC0xMy44LTQyLjVjLTEuMS0zLjMtNC4xLTUuNS03LjYtNS41SDE5OC40Yy0zLjUgMC02LjUgMi4yLTcuNiA1LjV6TTE2OCA0MDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMDAtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFIZWFkU2lkZUNvdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MVwiLCBcIk0wIDIyNC4yQzAgMTAwLjYgMTAwLjIgMCAyMjQgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCAyNC4yLTE5LjYgNDMuOC00My44IDQzLjhINDQ4djAgMzJMMzM5LjIgMzY1LjZjLTExIDEuNC0xOS4yIDEwLjctMTkuMiAyMS44YzAgMTEuNiA5IDIxLjIgMjAuNiAyMS45TDQ0OCA0MTZ2MTZjMCAyNi41LTIxLjUgNDgtNDggNDhIMzIwdjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRIMjU2djBIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwNy4zYzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6bTM1Mi0uMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQ2NCAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTUyLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNTkyIDQ4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek01NTIgMzEyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNTUyIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhR3JpcExpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtbGluZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3YTRcIiwgXCJNMzIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI4OHptMC0xMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTYwelwiXVxufTtcbnZhciBmYVRodW1ic0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGh1bWJzLWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzgsIDYxNTc2XSwgXCJmMTY1XCIsIFwiTTMxMy40IDQ3OS4xYzI2LTUuMiA0Mi45LTMwLjUgMzcuNy01Ni41bC0yLjMtMTEuNGMtNS4zLTI2LjctMTUuMS01Mi4xLTI4LjgtNzUuMkg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0xOC41LTEwLjUtMzQuNi0yNS45LTQyLjZDNDk3IDIzNi42IDUwNCAyMjMuMSA1MDQgMjA4YzAtMjMuNC0xNi44LTQyLjktMzguOS00Ny4xYzQuNC03LjMgNi45LTE1LjggNi45LTI0LjljMC0yMS4zLTEzLjktMzkuNC0zMy4xLTQ1LjZjLjctMy4zIDEuMS02LjggMS4xLTEwLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjk0LjVjLTE5IDAtMzcuNSA1LjYtNTMuMyAxNi4xTDIwMi43IDczLjhDMTc2IDkxLjYgMTYwIDEyMS42IDE2MCAxNTMuN1YxOTJ2NDggMjQuOWMwIDI5LjIgMTMuMyA1Ni43IDM2IDc1bDcuNCA1LjljMjYuNSAyMS4yIDQ0LjYgNTEgNTEuMiA4NC4ybDIuMyAxMS40YzUuMiAyNiAzMC41IDQyLjkgNTYuNSAzNy43ek0zMiAzODRIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgOTYgMCAxMTAuMyAwIDEyOFYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJ6XCJdXG59O1xudmFyIGZhVXNlckxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTAyXCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkgzOTIuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMzUyYzAtMi4xIC4xLTQuMiAuMy02LjNjLTMxLTI2LTcxLTQxLjctMTE0LjYtNDEuN0gxNzguM3pNNTI4IDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LXJpZ2h0XCJdLCBcImYxNzhcIiwgXCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dSaWdodCA9IGZhQXJyb3dSaWdodExvbmc7XG52YXIgZmFBbmNob3JDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFjXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzguMiAwIDE2LjMtLjYgMjQuMi0xLjhjLTIyLjItMTYuMi00MC40LTM3LjUtNTMtNjIuMkgzMjBWMzY4IDI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhRWxsaXBzaXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWxsaXBzaXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImVsbGlwc2lzLWhcIl0sIFwiZjE0MVwiLCBcIk04IDI1NmE1NiA1NiAwIDEgMSAxMTIgMEE1NiA1NiAwIDEgMSA4IDI1NnptMTYwIDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yMTYtNTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6XCJdXG59O1xudmFyIGZhRWxsaXBzaXNIID0gZmFFbGxpcHNpcztcbnZhciBmYUNoZXNzUGF3biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1wYXduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTgyM10sIFwiZjQ0M1wiLCBcIk0yMTUuNSAyMjRjMjkuMi0xOC40IDQ4LjUtNTAuOSA0OC41LTg4YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0UzU2IDc4LjYgNTYgMTM2YzAgMzcuMSAxOS40IDY5LjYgNDguNSA4OEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJjMCAxNi41IDEyLjUgMzAgMjguNSAzMS44TDgwIDQwMEgyNDBMMjI3LjUgMjg3LjhjMTYtMS44IDI4LjUtMTUuMyAyOC41LTMxLjhjMC0xNy43LTE0LjMtMzItMzItMzJoLTguNXpNMjIuNiA0NzMuNGMtNC4yIDQuMi02LjYgMTAtNi42IDE2QzE2IDUwMS45IDI2LjEgNTEyIDM4LjYgNTEySDI4MS40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMjU2IDQzMkg2NEwyMi42IDQ3My40elwiXVxufTtcbnZhciBmYUtpdE1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAna2l0LW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImZpcnN0LWFpZFwiXSwgXCJmNDc5XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDk2VjMySDY0em02NCAwVjQ4MEg0NDhWMzJIMTI4ek01MTIgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0ODBoMzJ6TTI1NiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDMyMHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjg4SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZoNDhWMTc2elwiXVxufTtcbnZhciBmYUZpcnN0QWlkID0gZmFLaXRNZWRpY2FsO1xudmFyIGZhUGVyc29uVGhyb3VnaFdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tdGhyb3VnaC13aW5kb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1YTlcIiwgXCJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNEMxNjcuNiAxODYuNSAxMjggMjQ1IDEyOCAzMTAuMmwwIDczLjhzMCAwIDAgMEg2NFY2NHptMjg4IDBsMjI0IDBWMzg0SDUwOC4zbC0zLjctNC41LTc1LjItOTAuMmMtOS4xLTEwLjktMjIuNi0xNy4zLTM2LjktMTcuM2wtNzEuMSAwLTQxLTYzLjFjLS4zLS41LS42LTEtMS0xLjRjNDQuNy0yOSA3Mi41LTc5IDcyLjUtMTMzLjZsMC05Ljh6bTczIDMyMEgzNzkuMmw0Mi43IDY0SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OEMyMS41IDAgMCAyMS41IDAgNDhWNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwOC4ybDMzLjIgNDkuOGM5LjggMTQuNyAyOS43IDE4LjcgNDQuNCA4LjlzMTguNy0yOS43IDguOS00NC40TDMxMC41IDMzNmw3NC42IDAgNDAgNDh6bS0xNTkuNSAwSDE5MnMwIDAgMCAwbDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhVG9vbGJveCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b29sYm94JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIwXSwgXCJmNTUyXCIsIFwiTTE3NiA4OGwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA4MGMtNC40IDAtOCAzLjYtOCA4em0tNDggNDBsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NmwxNDQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDkyLjEtMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMkwwIDMyMGwwLTkyLjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFsMjguMSAwek0wIDQxNmwwLTY0IDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwxMjggMCAwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6XCJdXG59O1xudmFyIGZhSGFuZHNIb2xkaW5nQ2lyY2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWhvbGRpbmctY2lyY2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGZiXCIsIFwiTTMyMCAwYTEyOCAxMjggMCAxIDEgMCAyNTZBMTI4IDEyOCAwIDEgMSAzMjAgMHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NDAgODAgNDAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjFjMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44bC0xNS4yLTE1LjItMzItMzJjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMzIgMzIgMTUuMiAxNS4yIDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMlY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMTczLjNjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41VjIyNCAxNjAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHY1NiA2NFYzMjUuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdINDAwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzODUuMWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwIDE1LjItMTUuMiAzMi0zMmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0zMiAzMi0xNS4yIDE1LjJjLTExIDExLTkuMiAyOS4yIDMuNyAzNy44YzkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zVjIyNCAxNDQgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwelwiXVxufTtcbnZhciBmYUJ1ZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxODhcIiwgXCJNMjU2IDBjNTMgMCA5NiA0MyA5NiA5NnYzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRIMTg4LjRjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40Vjk2YzAtNTMgNDMtOTYgOTYtOTZ6TTQxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjLjcgLjcgMS4zIDEuNCAxLjkgMi4xYzE0LjItNy4zIDMwLjQtMTEuNCA0Ny41LTExLjRIMzEyYzE3LjEgMCAzMy4yIDQuMSA0Ny41IDExLjRjLjYtLjcgMS4yLTEuNCAxLjktMi4xbDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy0uNyAuNy0xLjQgMS4zLTIuMSAxLjljNi4yIDEyIDEwLjEgMjUuMyAxMS4xIDM5LjVINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQxNmMwIDI0LjYtNS41IDQ3LjgtMTUuNCA2OC42YzIuMiAxLjMgNC4yIDIuOSA2IDQuOGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNjMuMS02My4xYy0yNC41IDIxLjgtNTUuOCAzNi4yLTkwLjMgMzkuNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDc5LjJjLTM0LjUtMy40LTY1LjgtMTcuOC05MC4zLTM5LjZMODYuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjMS45LTEuOSAzLjktMy40IDYtNC44QzEwMS41IDM2Ny44IDk2IDM0NC42IDk2IDMyMEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5Ni4zYzEuMS0xNC4xIDUtMjcuNSAxMS4xLTM5LjVjLS43LS42LTEuNC0xLjItMi4xLTEuOWwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zelwiXVxufTtcbnZhciBmYUNyZWRpdENhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3JlZGl0LWNhcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxNzksIDYyMDgzLCBcImNyZWRpdC1jYXJkLWFsdFwiXSwgXCJmMDlkXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ2MzJINTc2Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek01NzYgMjI0SDBWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYyMjR6TTExMiAzNTJoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0xMTIgMTZjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl1cbn07XG52YXIgZmFDcmVkaXRDYXJkQWx0ID0gZmFDcmVkaXRDYXJkO1xudmFyIGZhQ2FyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY2NCwgXCJhdXRvbW9iaWxlXCJdLCBcImYxYjlcIiwgXCJNMTM1LjIgMTE3LjRMMTA5LjEgMTkySDQwMi45bC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZIMTY1LjRjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMkgzNDYuNmM0MC44IDAgNzcuMSAyNS44IDkwLjYgNjQuM2wzNS4yIDEwMC41YzIzLjIgOS42IDM5LjYgMzIuNSAzOS42IDU5LjJWNDAwdjQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwSDk2djQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDAgMjU2YzAtMjYuNyAxNi40LTQ5LjYgMzkuNi01OS4yek0xMjggMjg4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQXV0b21vYmlsZSA9IGZhQ2FyO1xudmFyIGZhSGFuZEhvbGRpbmdIYW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZy1oYW5kJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGY3XCIsIFwiTTcuOCAyMDcuN2MtMTMuMS0xNy44LTkuMy00Mi44IDguNS01NS45TDE0Mi45IDU4LjVDMTY2LjIgNDEuMyAxOTQuNSAzMiAyMjMuNSAzMkgzODQgNTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUwNy4ybC00NC45IDM2Yy0yMi43IDE4LjItNTAuOSAyOC04MCAyOEgzMDQgMjg4IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2NCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxODMuNEw2My43IDIxNi4yYy0xNy44IDEzLjEtNDIuOCA5LjMtNTUuOS04LjV6TTM4Mi40IDE2MGwwIDAgLjkgMGMtLjMgMC0uNiAwLS45IDB6TTU2OC4yIDMwNC4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0NTMuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzNTJsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhQm9va09wZW5SZWFkZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1vcGVuLXJlYWRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYm9vay1yZWFkZXJcIl0sIFwiZjVkYVwiLCBcIk0xNjAgOTZhOTYgOTYgMCAxIDEgMTkyIDBBOTYgOTYgMCAxIDEgMTYwIDk2em04MCAxNTJWNTEybC00OC40LTI0LjJjLTIwLjktMTAuNC00My41LTE3LTY2LjgtMTkuM2wtOTYtOS42QzEyLjUgNDU3LjIgMCA0NDMuNSAwIDQyN1YyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJINjIuM2M2My42IDAgMTI1LjYgMTkuNiAxNzcuNyA1NnptMzIgMjY0VjI0OGM1Mi4xLTM2LjQgMTE0LjEtNTYgMTc3LjctNTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQyN2MwIDE2LjQtMTIuNSAzMC4yLTI4LjggMzEuOGwtOTYgOS42Yy0yMy4yIDIuMy00NS45IDguOS02Ni44IDE5LjNMMjcyIDUxMnpcIl1cbn07XG52YXIgZmFCb29rUmVhZGVyID0gZmFCb29rT3BlblJlYWRlcjtcbnZhciBmYU1vdW50YWluU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLXN1bicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyZlwiLCBcIk01NjAgMTYwQTgwIDgwIDAgMSAwIDU2MCAwYTgwIDgwIDAgMSAwIDAgMTYwek01NS45IDUxMkgzODEuMWg3NUg1NzguOWMzMy44IDAgNjEuMS0yNy40IDYxLjEtNjEuMWMwLTExLjItMy4xLTIyLjItOC45LTMxLjhsLTEzMi0yMTYuM0M0OTUgMTk2LjEgNDg3LjggMTkyIDQ4MCAxOTJzLTE1IDQuMS0xOS4xIDEwLjdsLTQ4LjIgNzlMMjg2LjggODFjLTYuNi0xMC42LTE4LjMtMTctMzAuOC0xN3MtMjQuMSA2LjQtMzAuOCAxN0w4LjYgNDI2LjRDMyA0MzUuMyAwIDQ0NS42IDAgNDU2LjFDMCA0ODcgMjUgNTEyIDU1LjkgNTEyelwiXVxufTtcbnZhciBmYUFycm93c0xlZnRSaWdodFRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtbGVmdC1yaWdodC10by1saW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGJhXCIsIFwiTTMyIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2QzAgNzguMyAxNC4zIDY0IDMyIDY0em0yMTQuNiA3My40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDIwNS4zIDIyNGwyMjkuNSAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDQzNC43IDI4OGwtMjI5LjUgMCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHpNNjQwIDk2VjQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYURpY2VEMjAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1kMjAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY2Y2ZcIiwgXCJNNDguNyAxMjUuOGw1My4yIDMxLjljNy44IDQuNyAxNy44IDIgMjIuMi01LjlMMjAxLjYgMTIuMWMzLTUuNC0uOS0xMi4xLTcuMS0xMi4xYy0xLjYgMC0zLjIgLjUtNC42IDEuNEw0Ny45IDk4LjhjLTkuNiA2LjYtOS4yIDIwLjkgLjggMjYuOXpNMTYgMTcxLjdWMjk1LjNjMCA4IDEwLjQgMTEgMTQuNyA0LjRsNjAtOTJjNS03LjYgMi42LTE3LjgtNS4yLTIyLjVMNDAuMiAxNThDMjkuNiAxNTEuNiAxNiAxNTkuMyAxNiAxNzEuN3pNMzEwLjQgMTIuMWw3Ny42IDEzOS42YzQuNCA3LjkgMTQuNSAxMC42IDIyLjIgNS45bDUzLjItMzEuOWMxMC02IDEwLjQtMjAuMyAuOC0yNi45TDMyMi4xIDEuNGMtMS40LS45LTMtMS40LTQuNi0xLjRjLTYuMiAwLTEwLjEgNi43LTcuMSAxMi4xek00OTYgMTcxLjdjMC0xMi40LTEzLjYtMjAuMS0yNC4yLTEzLjdsLTQ1LjMgMjcuMmMtNy44IDQuNy0xMC4xIDE0LjktNS4yIDIyLjVsNjAgOTJjNC4zIDYuNyAxNC43IDMuNiAxNC43LTQuNFYxNzEuN3ptLTQ5LjMgMjQ2TDI4Ni4xIDQzNi42Yy04LjEgLjktMTQuMSA3LjgtMTQuMSAxNS45djUyLjhjMCAzLjcgMyA2LjggNi44IDYuOGMuOCAwIDEuNi0uMSAyLjQtLjRsMTcyLjctNjRjNi4xLTIuMiAxMC4xLTggMTAuMS0xNC41YzAtOS4zLTguMS0xNi41LTE3LjMtMTUuNHpNMjMzLjIgNTEyYzMuNyAwIDYuOC0zIDYuOC02LjhWNDUyLjZjMC04LjEtNi4xLTE0LjktMTQuMS0xNS45bC0xNjAuNi0xOWMtOS4yLTEuMS0xNy4zIDYuMS0xNy4zIDE1LjRjMCA2LjUgNCAxMi4zIDEwLjEgMTQuNWwxNzIuNyA2NGMuOCAuMyAxLjYgLjQgMi40IC40ek00MS43IDM4Mi45bDE3MC45IDIwLjJjNy44IC45IDEzLjQtNy41IDkuNS0xNC4zbC04NS43LTE1MGMtNS45LTEwLjQtMjAuNy0xMC44LTI3LjMtLjhMMzAuMiAzNTguMmMtNi41IDkuOS0uMyAyMy4zIDExLjUgMjQuN3ptNDM5LjYtMjQuOEw0MDIuOSAyMzguMWMtNi41LTEwLTIxLjQtOS42LTI3LjMgLjhMMjkwLjIgMzg4LjVjLTMuOSA2LjggMS42IDE1LjIgOS41IDE0LjNsMTcwLjEtMjBjMTEuOC0xLjQgMTgtMTQuNyAxMS41LTI0LjZ6bS0yMTYuOSAxMWw3OC40LTEzNy4yYzYuMS0xMC43LTEuNi0yMy45LTEzLjktMjMuOUgxODMuMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyMy45bDc4LjQgMTM3LjJjMy43IDYuNCAxMyA2LjQgMTYuNyAwek0xNzQuNCAxNzZIMzM3LjZjMTIuMiAwIDE5LjktMTMuMSAxNC0yMy44bC04MC0xNDRjLTIuOC01LjEtOC4yLTguMi0xNC04LjJoLTMuMmMtNS44IDAtMTEuMiAzLjItMTQgOC4ybC04MCAxNDRjLTUuOSAxMC43IDEuOCAyMy44IDE0IDIzLjh6XCJdXG59O1xudmFyIGZhVHJ1Y2tEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWRyb3BsZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OGNcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzY4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2aDUwLjdjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTg5LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNWMjU2djMyIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4ek00MTYgMjU2SDU0NFYyMzcuM0w0NjYuNyAxNjBINDE2djk2ek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMzY4LTQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTIwOCAyNzJjMzkuOCAwIDcyLTI5LjYgNzItNjZjMC0yNy0zOS40LTgyLjktNTkuOS0xMTAuM2MtNi4xLTguMi0xOC4xLTguMi0yNC4yIDBDMTc1LjQgMTIzIDEzNiAxNzkgMTM2IDIwNmMwIDM2LjUgMzIuMiA2NiA3MiA2NnpcIl1cbn07XG52YXIgZmFGaWxlQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1YTFcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWFycm93LXVwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS11cFwiXSwgXCJlMDQwXCIsIFwiTTEyOCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzI0OS44IDMzMi42IDI1NiAzNDkuNSAyNTYgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjljOC4yLTEwLjYgMTUuMy0yNS4yIDE1LjMtNDIuNVYxMTJ6TTE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJWMjc2LjRjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDNDMuMiAzMDQuMiAzMiAzMzQuOCAzMiAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI4OCA1MC4xIDIzNy45IDAgMTc2IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM1YxMTJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzIyLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHpNNDgwIDE2MGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXMxNi42IDE5LjggMjkuNiAxOS44aDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZVVwID0gZmFUZW1wZXJhdHVyZUFycm93VXA7XG52YXIgZmFNZWRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtZWRhbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk0MV0sIFwiZjVhMlwiLCBcIk00LjEgMzguMkMxLjQgMzQuMiAwIDI5LjQgMCAyNC42QzAgMTEgMTEgMCAyNC42IDBIMTMzLjljMTEuMiAwIDIxLjcgNS45IDI3LjQgMTUuNWw2OC41IDExNC4xYy00OC4yIDYuMS05MS4zIDI4LjYtMTIzLjQgNjEuOUw0LjEgMzguMnptNTAzLjcgMEw0MDUuNiAxOTEuNWMtMzIuMS0zMy4zLTc1LjItNTUuOC0xMjMuNC02MS45TDM1MC43IDE1LjVDMzU2LjUgNS45IDM2Ni45IDAgMzc4LjEgMEg0ODcuNEM1MDEgMCA1MTIgMTEgNTEyIDI0LjZjMCA0LjgtMS40IDkuNi00LjEgMTMuNnpNODAgMzM2YTE3NiAxNzYgMCAxIDEgMzUyIDBBMTc2IDE3NiAwIDEgMSA4MCAzMzZ6bTE4NC40LTk0LjljLTMuNC03LTEzLjMtNy0xNi44IDBsLTIyLjQgNDUuNGMtMS40IDIuOC00IDQuNy03IDUuMUwxNjggMjk4LjljLTcuNyAxLjEtMTAuNyAxMC41LTUuMiAxNmwzNi4zIDM1LjRjMi4yIDIuMiAzLjIgNS4yIDIuNyA4LjNsLTguNiA0OS45Yy0xLjMgNy42IDYuNyAxMy41IDEzLjYgOS45bDQ0LjgtMjMuNmMyLjctMS40IDYtMS40IDguNyAwbDQ0LjggMjMuNmM2LjkgMy42IDE0LjktMi4yIDEzLjYtOS45bC04LjYtNDkuOWMtLjUtMyAuNS02LjEgMi43LTguM2wzNi4zLTM1LjRjNS42LTUuNCAyLjUtMTQuOC01LjItMTZsLTUwLjEtNy4zYy0zLS40LTUuNy0yLjQtNy01LjFsLTIyLjQtNDUuNHpcIl1cbn07XG52YXIgZmFCZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzE2XSwgXCJmMjM2XCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMEgyODhWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDU0NGM1MyAwIDk2IDQzIDk2IDk2VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MTZIMzUyIDMyMCA2NHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptMTQ0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVNxdWFyZUggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImgtc3F1YXJlXCJdLCBcImYwZmRcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zMzYgMTUyVjI1NiAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDE2MGwwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjA4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2ODBIMjg4VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUhTcXVhcmUgPSBmYVNxdWFyZUg7XG52YXIgZmFQb2RjYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BvZGNhc3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyY2VcIiwgXCJNMzE5LjQgMzcyYzQ4LjUtMzEuMyA4MC42LTg1LjkgODAuNi0xNDhjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0YzAgNjIuMSAzMi4xIDExNi42IDgwLjYgMTQ4YzEuMiAxNy4zIDQgMzggNy4yIDU3LjFsLjIgMUM1NiAzOTUuOCAwIDMxNi41IDAgMjI0QzAgMTAwLjMgMTAwLjMgMCAyMjQgMFM0NDggMTAwLjMgNDQ4IDIyNGMwIDkyLjUtNTYgMTcxLjktMTM2IDIwNi4xbC4yLTEuMWMzLjEtMTkuMiA2LTM5LjggNy4yLTU3em0tMi4zLTM4LjFjLTEuNi01LjctMy45LTExLjEtNy0xNi4yYy01LjgtOS43LTEzLjUtMTctMjEuOS0yMi40YzE5LjUtMTcuNiAzMS44LTQzIDMxLjgtNzEuM2MwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDI4LjMgMTIuMyA1My44IDMxLjggNzEuM2MtOC40IDUuNC0xNi4xIDEyLjctMjEuOSAyMi40Yy0zLjEgNS4xLTUuNCAxMC41LTcgMTYuMkM5OS44IDMwNy41IDgwIDI2OCA4MCAyMjRjMC03OS41IDY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NGMwIDQ0LTE5LjggODMuNS01MC45IDEwOS45ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOGMwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOWMtNS4xIDE5LTI0LjUgMjMuNC00My40IDIzLjRzLTM4LjItNC40LTQzLjQtMjMuNGMtNy44LTI4LjUtMjAuNi05OS43LTIwLjYtMTMyLjhjMC0zNS4xIDMxLjEtNDMuOCA2NC00My44em0wLTE0NGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUZ1bGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtZnVsbCcsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtNFwiLCBcInRoZXJtb21ldGVyLTRcIiwgXCJ0aGVybW9tZXRlci1mdWxsXCJdLCBcImYyYzdcIiwgXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OFYyNzYuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNVYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEyVjI3Ni41YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42VjExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWMzIyLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zelwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlNCA9IGZhVGVtcGVyYXR1cmVGdWxsO1xudmFyIGZhVGhlcm1vbWV0ZXI0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7XG52YXIgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDtcbnZhciBmYUJlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVsbCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCBcImYwZjNcIiwgXCJNMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjUxLjJDMTE5IDY2IDY0IDEzMC42IDY0IDIwOHYxOC44YzAgNDctMTcuMyA5Mi40LTQ4LjUgMTI3LjZsLTcuNCA4LjNjLTguNCA5LjQtMTAuNCAyMi45LTUuMyAzNC40UzE5LjQgNDE2IDMyIDQxNkg0MTZjMTIuNiAwIDI0LTcuNCAyOS4yLTE4LjlzMy4xLTI1LTUuMy0zNC40bC03LjQtOC4zQzQwMS4zIDMxOS4yIDM4NCAyNzMuOSAzODQgMjI2LjhWMjA4YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyem00NS4zIDQ5My4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNIMjI0IDE2MGMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM3MyOC4zIDE4LjcgNDUuMyAxOC43czMzLjMtNi43IDQ1LjMtMTguN3pcIl1cbn07XG52YXIgZmFTdXBlcnNjcmlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdXBlcnNjcmlwdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEyYlwiLCBcIk00ODAgMzJjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2Yy0xNS44IDcuOS0yMi4yIDI3LjEtMTQuMyA0Mi45QzM5MyA3My41IDQwNC4zIDgwIDQxNiA4MHY4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMiAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzMnpNMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMySDQ3LjNsODkuNiAxMjhMNDcuMyAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwxNzYgMzExLjhsODUuOCAxMjIuNmM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMwNC43TDIxNS4xIDI1Nmw4OS42LTEyOEgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4Yy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDE3NiAyMDAuMiA5MC4yIDc3LjZDODQuMiA2OS4xIDc0LjQgNjQgNjQgNjRIMzJ6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTYwXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w0NTQuNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDMyIDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDA5LjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MzIgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFTdGFyT2ZMaWZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YXItb2YtbGlmZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjYyMVwiLCBcIk0yMDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTcyLjlsMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43TDM1MiAyNTZsMTIyIDcwLjRjMTUuMyA4LjggMjAuNSAyOC40IDExLjcgNDMuN2wtMTYgMjcuN2MtOC44IDE1LjMtMjguNCAyMC42LTQzLjcgMTEuN0wzMDQgMzM5LjFWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzM5LjFMODYgNDA5LjZjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43TDE2MCAyNTYgMzggMTg1LjZjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN0M1MS4xIDk4LjggNzAuNyA5My42IDg2IDEwMi40bDEyMiA3MC40VjMyelwiXVxufTtcbnZhciBmYVBob25lU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGhvbmUtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzZGRcIiwgXCJNNjAxLjIgNS4xYzEwLjQtOC4yIDI1LjUtNi4zIDMzLjcgNC4xczYuMyAyNS41LTQuMSAzMy43bC01OTIgNDY0Yy0xMC40IDguMi0yNS41IDYuMy0zMy43LTQuMXMtNi4zLTI1LjUgNC4xLTMzLjdsMTU1LjYtMTIyQzEwMS44IDI3MCA2NCAxNzEuNCA2NCA2NGMwLTE4IDEyLjEtMzMuOCAyOS41LTM4LjZsODgtMjRjMTkuNC01LjMgMzkuNyA0LjYgNDcuNCAyMy4ybDQwIDk2YzYuOCAxNi4zIDIuMSAzNS4yLTExLjYgNDYuM0wyMDggMjA3LjNjMTIgMjUuNSAyNy4yIDQ5LjIgNDUgNzAuN0w2MDEuMiA1LjF6TTIzNC4zIDQxNS42bDkxLjMtNzJjMTMuNyA5LjEgMjggMTcuMyA0MyAyNC4zTDQwOSAzMTguN2MxMS4yLTEzLjcgMzAtMTguNCA0Ni4zLTExLjZsOTYgNDBjMTguNiA3LjcgMjguNSAyOCAyMy4yIDQ3LjRsLTI0IDg4QzU0NS44IDQ5OS45IDUzMCA1MTIgNTEyIDUxMmMtMTA0LjkgMC0yMDEuMy0zNi0yNzcuNy05Ni40elwiXVxufTtcbnZhciBmYVBhaW50Um9sbGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhaW50LXJvbGxlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjVhYVwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xNjAgMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjMwNGMwLTQ0LjIgMzUuOC04MCA4MC04MEg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwIDY5LjVjMzcuMyAxMy4yIDY0IDQ4LjcgNjQgOTAuNXYzMmMwIDUzLTQzIDk2LTk2IDk2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MnpcIl1cbn07XG52YXIgZmFIYW5kc2hha2VBbmdsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kc2hha2UtYW5nbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImhhbmRzLWhlbHBpbmdcIl0sIFwiZjRjNFwiLCBcIk01NDQgMjQ4djMuM2w2OS43LTY5LjdjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNTM1LjYgMjQuNGMtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMNDE2LjMgNjQuNWMtMi43LS4zLTUuNS0uNS04LjMtLjVIMjk2Yy0zNy4xIDAtNjcuNiAyOC03MS42IDY0SDIyNFYyNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MFYxNzZjMCAwIDAtLjEgMC0uMVYxNjBsMTYgMCAxMzYgMGMwIDAgMCAwIC4xIDBINDY0YzQ0LjIgMCA4MCAzNS44IDgwIDgwdjh6TTMzNiAxOTJ2NTZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJWMTI5LjRjLTM1LjkgNi4yLTY1LjggMzIuMy03NiA2OC4yTDk5LjUgMjU1LjIgMjYuMyAzMjguNGMtMjEuOSAyMS45LTIxLjkgNTcuMyAwIDc5LjJsNzguMSA3OC4xYzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDM3LjctMzcuN2MuOSAwIDEuOCAuMSAyLjcgLjFIMzg0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2SDQzMmMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTEyLjgtNS0yNC40LTEzLjItMzNjMjUuNy01IDQ1LjEtMjcuNiA0NS4yLTU0Ljh2LS40Yy0uMS0zMC44LTI1LjEtNTUuOC01Ni01NS44YzAgMCAwIDAgMCAwbC0xMjAgMHpcIl1cbn07XG52YXIgZmFIYW5kc0hlbHBpbmcgPSBmYUhhbmRzaGFrZUFuZ2xlO1xudmFyIGZhTG9jYXRpb25Eb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jYXRpb24tZG90JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJtYXAtbWFya2VyLWFsdFwiXSwgXCJmM2M1XCIsIFwiTTIxNS43IDQ5OS4yQzI2NyA0MzUgMzg0IDI3OS40IDM4NCAxOTJDMzg0IDg2IDI5OCAwIDE5MiAwUzAgODYgMCAxOTJjMCA4Ny40IDExNyAyNDMgMTY4LjMgMzA3LjJjMTIuMyAxNS4zIDM1LjEgMTUuMyA0Ny40IDB6TTE5MiAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6XCJdXG59O1xudmFyIGZhTWFwTWFya2VyQWx0ID0gZmFMb2NhdGlvbkRvdDtcbnZhciBmYUZpbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZScsXG4gIGljb246IFszODQsIDUxMiwgWzEyODE5NiwgMTI4NDU5LCA2MTQ2Ml0sIFwiZjE1YlwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyMjRWMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHpcIl1cbn07XG52YXIgZmFHcmVhdGVyVGhhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmVhdGVyLXRoYW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs2Mjc2OV0sIFwiM2VcIiwgXCJNMy40IDgxLjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlMMjgwLjUgMjU2IDE3LjcgMzg3LjRDMS45IDM5NS4zLTQuNSA0MTQuNSAzLjQgNDMwLjNzMjcuMSAyMi4yIDQyLjkgMTQuM2wzMjAtMTYwYzEwLjgtNS40IDE3LjctMTYuNSAxNy43LTI4LjZzLTYuOC0yMy4yLTE3LjctMjguNmwtMzIwLTE2MGMtMTUuOC03LjktMzUtMS41LTQyLjkgMTQuM3pcIl1cbn07XG52YXIgZmFQZXJzb25Td2ltbWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc3dpbW1pbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NDYsIFwic3dpbW1lclwiXSwgXCJmNWM0XCIsIFwiTTMwOS41IDE3OC40TDQ0Ny45IDI5Ny4xYy0xLjYgLjktMy4yIDItNC44IDNjLTE4IDEyLjQtNDAuMSAyMC4zLTU5LjIgMjAuM2MtMTkuNiAwLTQwLjgtNy43LTU5LjItMjAuM2MtMjIuMS0xNS41LTUxLjYtMTUuNS03My43IDBjLTE3LjEgMTEuOC0zOCAyMC4zLTU5LjIgMjAuM2MtMTAuMSAwLTIxLjEtMi4yLTMxLjktNi4yQzE2My4xIDE5My4yIDI2Mi4yIDk2IDM4NCA5Nmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRjLTI2LjkgMC01Mi4zIDYuNi03NC41IDE4LjR6TTE2MCAxNjBBNjQgNjQgMCAxIDEgMzIgMTYwYTY0IDY0IDAgMSAxIDEyOCAwek0zMDYuNSAzMjUuOUMzMjkgMzQxLjQgMzU2LjUgMzUyIDM4NCAzNTJjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDA1LjcgNDE3IDQxNiAzODQgNDE2Yy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgMzQxLjIgMTY1LjEgMzUyIDE5MiAzNTJjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhU3dpbW1lciA9IGZhUGVyc29uU3dpbW1pbmc7XG52YXIgZmFBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bicsXG4gIGljb246IFszODQsIDUxMiwgWzg1OTVdLCBcImYwNjNcIiwgXCJNMTY5LjQgNDcwLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzcwLjggMjI0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzA2LjdMNTQuNiAyNjUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl1cbn07XG52YXIgZmFEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Ryb3BsZXQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsIFwidGludFwiXSwgXCJmMDQzXCIsIFwiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwQzAgMjI4LjggMTMwLjIgNTcuNyAxNjYuNiAxMS43QzE3Mi42IDQuMiAxODEuNSAwIDE5MS4xIDBoMS44YzkuNiAwIDE4LjUgNC4yIDI0LjUgMTEuN0MyNTMuOCA1Ny43IDM4NCAyMjguOCAzODQgMzIwYzAgMTA2LTg2IDE5Mi0xOTIgMTkyek05NiAzMzZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwelwiXVxufTtcbnZhciBmYVRpbnQgPSBmYURyb3BsZXQ7XG52YXIgZmFFcmFzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXJhc2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTJkXCIsIFwiTTI5MC43IDU3LjRMNTcuNCAyOTAuN2MtMjUgMjUtMjUgNjUuNSAwIDkwLjVsODAgODBjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0gyODhoOS40SDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODcuOUw1MTguNiAyODUuM2MyNS0yNSAyNS02NS41IDAtOTAuNUwzODEuMyA1Ny40Yy0yNS0yNS02NS41LTI1LTkwLjUgMHpNMjk3LjQgNDE2SDI4OGwtMTA1LjQgMC04MC04MEwyMjcuMyAyMTEuMyAzNjQuNyAzNDguNyAyOTcuNCA0MTZ6XCJdXG59O1xudmFyIGZhRWFydGhBbWVyaWNhcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1hbWVyaWNhcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OCwgXCJlYXJ0aFwiLCBcImVhcnRoLWFtZXJpY2FcIiwgXCJnbG9iZS1hbWVyaWNhc1wiXSwgXCJmNTdkXCIsIFwiTTU3LjcgMTkzbDkuNCAxNi40YzguMyAxNC41IDIxLjkgMjUuMiAzOCAyOS44TDE2MyAyNTUuN2MxNy4yIDQuOSAyOSAyMC42IDI5IDM4LjV2MzkuOWMwIDExIDYuMiAyMSAxNiAyNS45czE2IDE0LjkgMTYgMjUuOXYzOWMwIDE1LjYgMTQuOSAyNi45IDI5LjkgMjIuNmMxNi4xLTQuNiAyOC42LTE3LjUgMzIuNy0zMy44bDIuOC0xMS4yYzQuMi0xNi45IDE1LjItMzEuNCAzMC4zLTQwbDguMS00LjZjMTUtOC41IDI0LjItMjQuNSAyNC4yLTQxLjd2LTguM2MwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45bC0zLjktMy45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUgyNTdjLTExLjEgMC0yMi4xLTIuOS0zMS44LTguNGwtMzQuNS0xOS43Yy00LjMtMi41LTcuNi02LjUtOS4yLTExLjJjLTMuMi05LjYgMS4xLTIwIDEwLjItMjQuNWw1LjktM2M2LjYtMy4zIDE0LjMtMy45IDIxLjMtMS41bDIzLjIgNy43YzguMiAyLjcgMTcuMi0uNCAyMS45LTcuNWM0LjctNyA0LjItMTYuMy0xLjItMjIuOGwtMTMuNi0xNi4zYy0xMC0xMi05LjktMjkuNSAuMy00MS4zbDE1LjctMTguM2M4LjgtMTAuMyAxMC4yLTI1IDMuNS0zNi43bC0yLjQtNC4yYy0zLjUtLjItNi45LS4zLTEwLjQtLjNDMTYzLjEgNDggODQuNCAxMDguOSA1Ny43IDE5M3pNNDY0IDI1NmMwLTM2LjgtOS42LTcxLjQtMjYuNC0xMDEuNUw0MTIgMTY0LjhjLTE1LjcgNi4zLTIzLjggMjMuOC0xOC41IDM5LjhsMTYuOSA1MC43YzMuNSAxMC40IDEyIDE4LjMgMjIuNiAyMC45bDI5LjEgNy4zYzEuMi05IDEuOC0xOC4yIDEuOC0yNy41ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhRWFydGggPSBmYUVhcnRoQW1lcmljYXM7XG52YXIgZmFFYXJ0aEFtZXJpY2EgPSBmYUVhcnRoQW1lcmljYXM7XG52YXIgZmFHbG9iZUFtZXJpY2FzID0gZmFFYXJ0aEFtZXJpY2FzO1xudmFyIGZhUGVyc29uQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJ1cnN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTNiXCIsIFwiTTQ4MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDM4NFYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjU2LjlsMjguNiA0Ny41YzkuMSAxNS4xIDI4LjggMjAgNDMuOSAxMC45czIwLTI4LjggMTAuOS00My45bC01OC4zLTk3Yy0xNy40LTI4LjktNDguNi00Ni42LTgyLjMtNDYuNkg0NjUuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMNDA4IDI1Ni45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xOTAuOSAxOC4xQzE4OC40IDEyIDE4Mi42IDggMTc2IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMNTUuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMUwxMC45IDIwNi40Yy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yTDkwLjYgMzI3Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE3NiAyODYuMWw1OC42IDUzLjljNC44IDQuNCAxMS45IDUuNSAxNy44IDIuNnM5LjUtOSA5LTE1LjVsLTUuNi03OS40IDUwLjUtNy44IDI0LjMtNDAuNS01NS4yLTM4TDMxNSA5Mi4yYzMuMy01LjcgMi43LTEyLjgtMS40LTE3LjlzLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzR6XCJdXG59O1xudmFyIGZhRG92ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3ZlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzMwXSwgXCJmNGJhXCIsIFwiTTE2MC44IDk2LjVjMTQgMTcgMzEgMzAuOSA0OS41IDQyLjJjMjUuOSAxNS44IDUzLjcgMjUuOSA3Ny43IDMxLjZWMTM4LjhDMjY1LjggMTA4LjUgMjUwIDcxLjUgMjQ4LjYgMjhjLS40LTExLjMtNy41LTIxLjUtMTguNC0yNC40Yy03LjYtMi0xNS44LS4yLTIxIDUuOGMtMTMuMyAxNS40LTMyLjcgNDQuNi00OC40IDg3LjJ6TTMyMCAxNDR2MzAuNmwwIDB2MS4zbDAgMCAwIDMyLjFjLTYwLjgtNS4xLTE4NS00My44LTIxOS4zLTE1Ny4yQzk3LjQgNDAgODcuOSAzMiA3Ni42IDMyYy03LjkgMC0xNS4zIDMuOS0xOC44IDExQzQ2LjggNjUuOSAzMiAxMTIuMSAzMiAxNzZjMCAxMTYuOSA4MC4xIDE4MC41IDExOC40IDIwMi44TDExLjggNDE2LjZDNi43IDQxOCAyLjYgNDIxLjggLjkgNDI2LjhzLS44IDEwLjYgMi4zIDE0LjhDMjEuNyA0NjYuMiA3Ny4zIDUxMiAxNjAgNTEyYzMuNiAwIDcuMi0xLjIgMTAtMy41TDI0NS42IDQ0OEgzMjBjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMTI4bDI5LjktNDQuOWMxLjMtMiAyLjEtNC40IDIuMS02LjhjMC02LjgtNS41LTEyLjMtMTIuMy0xMi4zSDQwMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6bTgwLTE2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5RW1wdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1lbXB0eScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYmF0dGVyeS0wXCJdLCBcImYyNDRcIiwgXCJNODAgMTYwYy04LjggMC0xNiA3LjItMTYgMTZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNkg0NjRjOC44IDAgMTYtNy4yIDE2LTE2VjE3NmMwLTguOC03LjItMTYtMTYtMTZIODB6TTAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwSDQ2NGM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MEg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTc2elwiXVxufTtcbnZhciBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7XG52YXIgZmFTb2NrcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb2NrcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxMF0sIFwiZjY5NlwiLCBcIk0xNzUuMiA0NzYuNmMtOS43LTE4LTE1LjItMzguNy0xNS4yLTYwLjZjMC00MC4zIDE5LTc4LjIgNTEuMi0xMDIuNGw2NC00OGM4LjEtNiAxMi44LTE1LjUgMTIuOC0yNS42Vjk2SDEyOFYyNDBjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhDMTQuMiAzNTcuMyAwIDM4NS44IDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMjEuNi0xNi4yek0xMjggNjRIMjg4VjQ4YzAtMTQuNSAzLjktMjguMiAxMC43LTM5LjlDMjkxIDMgMjgxLjkgMCAyNzIgMEgxNzZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjY0ek0zMjAgOTZWMjQwYzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4QzIwNi4yIDM1Ny4zIDE5MiAzODUuOCAxOTIgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMTE1LjItODYuNEM0OTMgMzgyLjIgNTEyIDM0NC4zIDUxMiAzMDRWOTZIMzIwek01MTIgNjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzY4Yy0yNi41IDAtNDggMjEuNS00OCA0OFY2NEg1MTJ6XCJdXG59O1xudmFyIGZhSW5ib3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5ib3gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwMWNcIiwgXCJNMTIxIDMyQzkxLjYgMzIgNjYgNTIgNTguOSA4MC41TDEuOSAzMDguNEMuNiAzMTMuNSAwIDMxOC43IDAgMzIzLjlWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjMuOWMwLTUuMi0uNi0xMC40LTEuOS0xNS41bC01Ny0yMjcuOUM0NDYgNTIgNDIwLjQgMzIgMzkxIDMySDEyMXptMCA2NEgzOTFsNDggMTkySDM4Ny44Yy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC0xNC4zIDI4LjZjLTUuNCAxMC44LTE2LjUgMTcuNy0yOC42IDE3LjdIMTk1LjhjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdsLTE0LjMtMjguNmMtNS40LTEwLjgtMTYuNS0xNy43LTI4LjYtMTcuN0g3M0wxMjEgOTZ6XCJdXG59O1xudmFyIGZhU2VjdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZWN0aW9uJyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbXSwgXCJlNDQ3XCIsIFwiTTY0LjkgOTZDNjcuMSA4NC40IDczLjcgNzYuMiA4NiA3MC42YzEzLjgtNi4yIDM0LjgtOC45IDYxLjItNC41YzguOCAxLjQgMzYuMSA3LjEgNDQuMSA5LjNjMTcgNC44IDM0LjctNS4xIDM5LjUtMjIuMnMtNS4xLTM0LjctMjIuMi0zOS41Yy0xMS4xLTMuMS00MS05LjItNTAuOS0xMC44QzEyMy0yLjcgODguMy0uNiA1OS43IDEyLjNDMjkuOSAyNS44IDcuNSA1MC45IDEuNiA4Ni41Yy0uMSAuNS0uMiAxLjEtLjIgMS42Yy0yLjIgMTkuNyAuMyAzNy45IDguMSA1NC4xYzcuNyAxNi4xIDE5LjQgMjggMzIgMzYuOWMuNiAuNSAxLjMgLjkgMiAxLjRDMjIuMyAxOTQuMiA2LjUgMjE1LjEgMS43IDI0M2MtLjEgLjYtLjIgMS4xLS4yIDEuN2MtMi4zIDE5LjMgLjQgMzcuMSA4LjQgNTNjNy45IDE1LjYgMTkuOCAyNyAzMi4zIDM1LjVjMjIuNCAxNS4yIDUxLjkgMjQgNzUuNCAzMWwwIDAgMy43IDEuMWMyNy4yIDguMiA0Ni45IDE0LjYgNTkuNCAyMy44YzUuNSA0IDguMiA3LjYgOS41IDEwLjljMS4zIDMuMiAyLjYgOC42IC45IDE4LjFjLTEuNyAxMC4xLTcuNyAxOC0yMC43IDIzLjVjLTE0IDYtMzUuNCA4LjUtNjIgNC40Yy0xMi44LTIuMS0zNS4xLTkuNy01NC4xLTE2LjJsMCAwYy00LjMtMS41LTguNS0yLjktMTIuMy00LjJDMjUuMyA0MjAgNy4yIDQyOS4xIDEuNiA0NDUuOHMzLjUgMzQuOSAyMC4zIDQwLjVjMi42IC44IDUuNyAxLjkgOS4yIDMuMWMxOC42IDYuMyA0OC41IDE2LjYgNjcuMyAxOS42bDAgMCAuMiAwYzM0LjUgNS40IDY4LjggMy40IDk3LjItOC43YzI5LjQtMTIuNiA1Mi41LTM2LjUgNTguNS03MS41YzMuMy0xOS4zIDEuOS0zNy40LTUtNTMuOWMtNi4zLTE1LTE2LjQtMjYuNC0yNy42LTM1LjJjMTYuNS0xMy45IDI4LjUtMzMuMiAzMi42LTU4LjJjMy4yLTE5LjggMS45LTM4LjMtNC44LTU1LjFjLTYuNy0xNi44LTE3LjgtMjkuNC0zMC4yLTM5Yy0yMi44LTE3LjYtNTMuNi0yNy40LTc3LjctMzVsLTEuNC0uNWMtMjcuNC04LjctNDcuOC0xNS4zLTYxLjUtMjVjLTYuMS00LjQtOS41LTguNS0xMS40LTEyLjRjLTEuOC0zLjctMy4yLTkuMy0yLjMtMTguNXptNzYuNyAyMDguNWMtLjItLjEtLjQtLjEtLjYtLjJsLTEuNC0uNGMtMjcuNC04LjItNDcuOS0xNC41LTYxLjctMjMuOGMtNi4yLTQuMi05LjMtNy45LTExLTExLjNjLTEuNS0zLTIuOS03LjctMi4xLTE1LjdjMS45LTkuNyA3LjktMTcuMyAyMC41LTIyLjdjMTQtNiAzNS40LTguNSA2Mi4xLTQuM2wxNi40IDIuNmM2LjMgMi45IDExLjcgNiAxNi4yIDkuNWM1LjUgNC4yIDguNCA4LjIgMTAgMTIuMmMxLjYgNCAyLjggMTAuNCAxLjEgMjAuOWMtMi40IDE0LjctMTIuOCAyNi40LTM3LjEgMzFsLTEyLjQgMi4zelwiXVxufTtcbnZhciBmYUdhdWdlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1oaWdoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjEsIFwidGFjaG9tZXRlci1hbHRcIiwgXCJ0YWNob21ldGVyLWFsdC1mYXN0XCJdLCBcImY2MjVcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTE3LjQtNi45LTMzLjEtMTguMS00NC42TDM2NiAxNjEuN2M1LjMtMTIuMS0uMi0yNi4zLTEyLjMtMzEuNnMtMjYuMyAuMi0zMS42IDEyLjNMMjU3LjkgMjg4Yy0uNiAwLTEuMyAwLTEuOSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbnZhciBmYVRhY2hvbWV0ZXJBbHQgPSBmYUdhdWdlSGlnaDtcbnZhciBmYVRhY2hvbWV0ZXJBbHRGYXN0ID0gZmFHYXVnZUhpZ2g7XG52YXIgZmFFbnZlbG9wZU9wZW5UZXh0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3BlLW9wZW4tdGV4dCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY1OFwiLCBcIk0yMTUuNCA5NkgxNDQgMTA3LjggOTZ2OC44VjE0NHY0MC40IDg5TC4yIDIwMi41YzEuNi0xOC4xIDEwLjktMzQuOSAyNS43LTQ1LjhMNDggMTQwLjNWOTZjMC0yNi41IDIxLjUtNDggNDgtNDhoNzYuNmw0OS45LTM2LjlDMjMyLjIgMy45IDI0My45IDAgMjU2IDBzMjMuOCAzLjkgMzMuNSAxMUwzMzkuNCA0OEg0MTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDQuM2wyMi4xIDE2LjRjMTQuOCAxMC45IDI0LjEgMjcuNyAyNS43IDQ1LjhMNDE2IDI3My40di04OVYxNDQgMTA0LjggOTZINDA0LjIgMzY4IDI5Ni42IDIxNS40ek0wIDQ0OFYyNDIuMUwyMTcuNiA0MDMuM2MxMS4xIDguMiAyNC42IDEyLjcgMzguNCAxMi43czI3LjMtNC40IDM4LjQtMTIuN0w1MTIgMjQyLjFWNDQ4djBjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0djB6TTE3NiAxNjBIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NEgzMzZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYUhvc3BpdGFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvc3BpdGFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTczLCA2MjU4OSwgXCJob3NwaXRhbC1hbHRcIiwgXCJob3NwaXRhbC13aWRlXCJdLCBcImYwZjhcIiwgXCJNMTkyIDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDQwMGMyNi41IDAgNDggMjEuNSA0OCA0OFY1MTJIMzY4VjQzMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY4MEgxOTJWNDh6TTQ4IDk2SDE2MFY1MTJINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMyMEg4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgwVjIyNEg4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgwVjE0NGMwLTI2LjUgMjEuNS00OCA0OC00OHptNTQ0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhINTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjY0SDU2MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg4MFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDgwVjk2SDU5MnpNMzEyIDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MjRIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCA4LjggNy4yIDE2IDE2IDE2aDI0djI0YzAgOC44IDcuMiAxNiAxNiAxNmgxNmM4LjggMCAxNi03LjIgMTYtMTZWMTUyaDI0YzguOCAwIDE2LTcuMiAxNi0xNlYxMjBjMC04LjgtNy4yLTE2LTE2LTE2SDM0NFY4MGMwLTguOC03LjItMTYtMTYtMTZIMzEyelwiXVxufTtcbnZhciBmYUhvc3BpdGFsQWx0ID0gZmFIb3NwaXRhbDtcbnZhciBmYUhvc3BpdGFsV2lkZSA9IGZhSG9zcGl0YWw7XG52YXIgZmFXaW5lQm90dGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmUtYm90dGxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzJmXCIsIFwiTTM5My40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2MtMTEuOCAxMS44LTMwLjcgMTIuNS00My4yIDEuOWwtOS41IDkuNS00OC44IDQ4LjhjLTkuMiA5LjItMTEuNSAyMi45LTguNiAzNS42YzkuNCA0MC45LTEuOSA4NS42LTMzLjggMTE3LjVMMTk3LjMgNDkzLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC04OC04OGMtMjUtMjUtMjUtNjUuNSAwLTkwLjVMMTgwLjIgMTUzLjNjMzEuOS0zMS45IDc2LjYtNDMuMSAxMTcuNS0zMy44YzEyLjYgMi45IDI2LjQgLjUgMzUuNS04LjZsNDguOC00OC44IDkuNS05LjVjLTEwLjYtMTIuNi0xMC0zMS40IDEuOS00My4yek05OS4zIDM0Ny4zbDY1LjQgNjUuNGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw5Ny40LTk3LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTY1LjQtNjUuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMOTkuMyAzMjQuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhQ2hlc3NSb29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzLXJvb2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIwXSwgXCJmNDQ3XCIsIFwiTTMyIDE5MlY0OGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2Vjg4YzAgNC40IDMuNiA4IDggOGgzMmM0LjQgMCA4LTMuNiA4LThWNDhjMC04LjggNy4yLTE2IDE2LTE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNlY4OGMwIDQuNCAzLjYgOCA4IDhoMzJjNC40IDAgOC0zLjYgOC04VjQ4YzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZWMTkyYzAgMTAuMS00LjcgMTkuNi0xMi44IDI1LjZMMzUyIDI1NmwxNiAxNDRIODBMOTYgMjU2IDQ0LjggMjE3LjZDMzYuNyAyMTEuNiAzMiAyMDIuMSAzMiAxOTJ6bTE3NiA5NmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4YzAgOC44IDcuMiAxNiAxNiAxNnpNMjIuNiA0NzMuNEw2NCA0MzJIMzg0bDQxLjQgNDEuNGM0LjIgNC4yIDYuNiAxMCA2LjYgMTZjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjZIMzguNkMyNi4xIDUxMiAxNiA1MDEuOSAxNiA0ODkuNGMwLTYgMi40LTExLjggNi42LTE2elwiXVxufTtcbnZhciBmYUJhcnNTdGFnZ2VyZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFycy1zdGFnZ2VyZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJlb3JkZXJcIiwgXCJzdHJlYW1cIl0sIFwiZjU1MFwiLCBcIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTY0IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFSZW9yZGVyID0gZmFCYXJzU3RhZ2dlcmVkO1xudmFyIGZhU3RyZWFtID0gZmFCYXJzU3RhZ2dlcmVkO1xudmFyIGZhRGhhcm1hY2hha3JhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RoYXJtYWNoYWtyYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3ODRdLCBcImY2NTVcIiwgXCJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwIDYuNCAxOS41IDExLjYgMjhsLTQ4LjYgNDIuNXptMTAzLjggNjVjLTI0LjQtNC4xLTQ2LjktMTMuNy02Ni4yLTI3LjRsNDIuNS00OC42YzguNSA1LjMgMTggOS4yIDI4IDExLjZsLTQuMyA2NC40em0xMTkuNC0yNy40Yy0xOS4zIDEzLjgtNDEuOSAyMy40LTY2LjIgMjcuNGwtNC4zLTY0LjRjMTAtMi40IDE5LjUtNi40IDI4LTExLjZsNDIuNSA0OC42em02NS0xMDMuOGMtNC4xIDI0LjQtMTMuNyA0Ni45LTI3LjQgNjYuMmwtNDguNi00Mi41YzUuMy04LjUgOS4yLTE4IDExLjYtMjhsNjQuNCA0LjN6bS02NS0xNTYuOWwtNDIuNSA0OC42Yy04LjUtNS4zLTE4LTkuMi0yOC0xMS42bDQuMy02NC40YzI0LjQgNC4xIDQ2LjkgMTMuNyA2Ni4yIDI3LjV6TTI1NiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUhvdGRvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3Rkb2cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODldLCBcImY4MGZcIiwgXCJNNDg4LjYgMjMuNGMzMS4yIDMxLjIgMzEuMiA4MS45IDAgMTEzLjFsLTM1MiAzNTJjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMHMtMzEuMi04MS45IDAtMTEzLjFsMzUyLTM1MmMzMS4yLTMxLjIgODEuOS0zMS4yIDExMy4xIDB6TTQ0My4zIDkyLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwYy0xMi41IDEyLjUtMjMuOCAxNS4xLTM3LjUgMTcuNmwtMi41IC40Yy0xMy44IDIuNS0zMS42IDUuNi00OCAyMmMtMTYuNyAxNi43LTIwLjkgMzYtMjQuMSA1MC45bDAgMHYwbC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xcy0yMC41IDEyLjMtMzYuMSAxNS43bC0xIC4yYy0xNC45IDMuMi0zNC4yIDcuNC01MC45IDI0LjFzLTIwLjkgMzYtMjQuMSA1MC45bC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xYy05LjIgOS4yLTE4IDEwLjgtMzIuNyAxMy40bDAgMC0uOSAuMmMtMTUuNiAyLjgtMzQuOSA2LjktNTQuNCAyNi40Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBjMTIuNS0xMi41IDIzLjgtMTUuMSAzNy41LTE3LjZsMi41LS40YzEzLjgtMi41IDMxLjYtNS42IDQ4LTIyYzE2LjctMTYuNyAyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFzMjAuNS0xMi4zIDM2LjEtMTUuN2wxLS4yYzE0LjktMy4yIDM0LjItNy40IDUwLjktMjQuMXMyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFjOS4yLTkuMiAxOC0xMC44IDMyLjctMTMuNGwuOS0uMmMxNS42LTIuOCAzNC45LTYuOSA1NC40LTI2LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE5MS4yIDQ3OS4ybDI4OC0yODhMNDk1IDIwN2MxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFMMjg5IDQ5NWMtMTAuOSAxMC45LTI1LjYgMTctNDEgMTdzLTMwLjEtNi4xLTQxLTE3bC0xNS44LTE1Ljh6TTE3IDMwNUM2LjEgMjk0LjEgMCAyNzkuNCAwIDI2NHM2LjEtMzAuMSAxNy00MUwyMjMgMTdDMjMzLjkgNi4xIDI0OC42IDAgMjY0IDBzMzAuMSA2LjEgNDEgMTdsMTUuOCAxNS44LTI4OCAyODhMMTcgMzA1elwiXVxufTtcbnZhciBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24td2Fsa2luZy13aXRoLWNhbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImJsaW5kXCJdLCBcImYyOWRcIiwgXCJNMTc2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTguNCAzMmMtMzYuNCAwLTY5LjYgMjAuNS04NS45IDUzLjFMMzUuNCAyNzMuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDEyOCAyMzEuNnY0My4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zTDIyNCAzOTcuM1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzOTAuNmMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDIyNCAzMDYuN1YyMTMuM2w3MC40IDkzLjljMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOEwyNjguOCAxNjYuNEMyNTAuNyAxNDIuMiAyMjIuMiAxMjggMTkyIDEyOEgxNjcuNnpNMTI4LjMgMzQ2LjhMOTcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMjItODguMi01Mi44LTUyLjh6TTQ1MC44IDUwNS4xYzUgNy4zIDE1IDkuMSAyMi4zIDRzOS4xLTE1IDQtMjIuM0wzNTguOSAzMTYuMWMtMi44IDMuOC02LjEgNy4zLTEwLjEgMTAuM2MtNSAzLjgtMTAuNSA2LjQtMTYuMiA3LjlMNDUwLjggNTA1LjF6XCJdXG59O1xudmFyIGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTtcbnZhciBmYURydW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJ1bScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NV0sIFwiZjU2OVwiLCBcIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NkMxMTQuNiA5NiAwIDEyOCAwIDIwOFYzNjhjMCAzMS4zIDI3LjQgNTguOCA3MiA3OC43VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0VjQ2My40YzMzIDguOSA3MS4xIDE0LjUgMTEyIDE2LjFWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRWNDc5LjVjNDAuOS0xLjYgNzktNy4yIDExMi0xNi4xVjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0VjQ0Ni43YzQ0LjYtMTkuOSA3Mi00Ny40IDcyLTc4LjdWMjA4YzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjVDNDU4LjQgMTgxLjggNDY0IDE5Ny40IDQ2NCAyMDhjMCAuOC0yLjcgMTcuMi00NiAzNS45QzM3OS4xIDI2MC43IDMyMiAyNzIgMjU2IDI3MnMtMTIzLjEtMTEuMy0xNjItMjguMUM1MC43IDIyNS4yIDQ4IDIwOC44IDQ4IDIwOGMwLTEwLjYgNS42LTI2LjIgNDQuNC00MS4zQzEzMC42IDE1MS45IDE4Ny44IDE0NCAyNTYgMTQ0YzE4IDAgMzUuMSAuNSA1MS40IDEuNnpcIl1cbn07XG52YXIgZmFJY2VDcmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpY2UtY3JlYW0nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4NDhdLCBcImY4MTBcIiwgXCJNMzY3LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2QzM2OCA2NC41IDMwMy41IDAgMjI0IDBTODAgNjQuNSA4MCAxNDRjMCA1LjQgLjMgMTAuNyAuOSAxNkg4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGg1My41IDE4MUgzNjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhoLS45ek05NiAyODhMMjAwLjggNDk3LjdjNC40IDguOCAxMy4zIDE0LjMgMjMuMiAxNC4zczE4LjgtNS41IDIzLjItMTQuM0wzNTIgMjg4SDk2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlQm9sdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtYm9sdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRmY1wiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNnYtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjF2NS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZINDg4YzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwSDM3NmMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnpcIl1cbn07XG52YXIgZmFGYXggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmF4JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI0LCAxMjg0MzldLCBcImYxYWNcIiwgXCJNMTI4IDY0djk2aDY0VjY0SDM4Ni43TDQxNiA5My4zVjE2MGg2NFY5My4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQzMiAxOC43QzQyMCA2LjcgNDAzLjcgMCAzODYuNyAwSDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTAgMTYwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem00ODAgMzJIMTI4VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yNTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0yMjQgNDE2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUGFyYWdyYXBoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcmFncmFwaCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzE4Ml0sIFwiZjFkZFwiLCBcIk0xOTIgMzJoNjRINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NGwwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1MkgyODhWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxOTJjLTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwczcxLjYtMTYwIDE2MC0xNjB6XCJdXG59O1xudmFyIGZhQ2hlY2tUb1Nsb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlY2stdG8tc2xvdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm90ZS15ZWFcIl0sIFwiZjc3MlwiLCBcIk05NiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OEg0MzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMzg0SDk2Vjgwem0zMTMgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC0xMTEgMTExLTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDY0IDY0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDQwOSAxNjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDY0VjQxNkg1MTJWMjg4aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMzZ6XCJdXG59O1xudmFyIGZhVm90ZVllYSA9IGZhQ2hlY2tUb1Nsb3Q7XG52YXIgZmFTdGFySGFsZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWhhbGYnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sIFwiZjA4OVwiLCBcIk0yODggMGMtMTIuMiAuMS0yMy4zIDctMjguNiAxOEwxOTUgMTUwLjMgNTEuNCAxNzEuNWMtMTIgMS44LTIyIDEwLjItMjUuNyAyMS43cy0uNyAyNC4yIDcuOSAzMi43TDEzNy44IDMyOSAxMTMuMiA0NzQuN2MtMiAxMiAzIDI0LjIgMTIuOSAzMS4zczIzIDggMzMuOCAyLjNMMjg4IDQzOS44VjB6TTQyOS45IDUxMmMxLjEgLjEgMi4xIC4xIDMuMiAwaC0zLjJ6XCJdXG59O1xudmFyIGZhQm94ZXNTdGFja2VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JveGVzLXN0YWNrZWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MjYyNSwgXCJib3hlc1wiLCBcImJveGVzLWFsdFwiXSwgXCJmNDY4XCIsIFwiTTI0OCAwSDIwOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMTYwYzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMzNS4zIDAgNjQtMjguNyA2NC02NFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzMjhWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDI2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjB6TTY0IDI1NmMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDIyNGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTg0djgwYzAgOC44LTcuMiAxNi0xNiAxNkgxMjBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNTZINjR6TTM1MiA1MTJINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjMyMGMwLTM1LjMtMjguNy02NC02NC02NEg0NzJ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2SDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI1NkgzNTJjLTE1IDAtMjguOCA1LjEtMzkuNyAxMy44YzQuOSAxMC40IDcuNyAyMiA3LjcgMzQuMlY0NjRjMCAxMi4yLTIuOCAyMy44LTcuNyAzNC4yQzMyMy4yIDUwNi45IDMzNyA1MTIgMzUyIDUxMnpcIl1cbn07XG52YXIgZmFCb3hlcyA9IGZhQm94ZXNTdGFja2VkO1xudmFyIGZhQm94ZXNBbHQgPSBmYUJveGVzU3RhY2tlZDtcbnZhciBmYUxpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGluaycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI3OSwgXCJjaGFpblwiXSwgXCJmMGMxXCIsIFwiTTU3OS44IDI2Ny43YzU2LjUtNTYuNSA1Ni41LTE0OCAwLTIwNC41Yy01MC01MC0xMjguOC01Ni41LTE4Ni4zLTE1LjRsLTEuNiAxLjFjLTE0LjQgMTAuMy0xNy43IDMwLjMtNy40IDQ0LjZzMzAuMyAxNy43IDQ0LjYgNy40bDEuNi0xLjFjMzIuMS0yMi45IDc2LTE5LjMgMTAzLjggOC42YzMxLjUgMzEuNSAzMS41IDgyLjUgMCAxMTRMNDIyLjMgMzM0LjhjLTMxLjUgMzEuNS04Mi41IDMxLjUtMTE0IDBjLTI3LjktMjcuOS0zMS41LTcxLjgtOC42LTEwMy44bDEuMS0xLjZjMTAuMy0xNC40IDYuOS0zNC40LTcuNC00NC42cy0zNC40LTYuOS00NC42IDcuNGwtMS4xIDEuNkMyMDYuNSAyNTEuMiAyMTMgMzMwIDI2MyAzODBjNTYuNSA1Ni41IDE0OCA1Ni41IDIwNC41IDBMNTc5LjggMjY3Ljd6TTYwLjIgMjQ0LjNjLTU2LjUgNTYuNS01Ni41IDE0OCAwIDIwNC41YzUwIDUwIDEyOC44IDU2LjUgMTg2LjMgMTUuNGwxLjYtMS4xYzE0LjQtMTAuMyAxNy43LTMwLjMgNy40LTQ0LjZzLTMwLjMtMTcuNy00NC42LTcuNGwtMS42IDEuMWMtMzIuMSAyMi45LTc2IDE5LjMtMTAzLjgtOC42Qzc0IDM3MiA3NCAzMjEgMTA1LjUgMjg5LjVMMjE3LjcgMTc3LjJjMzEuNS0zMS41IDgyLjUtMzEuNSAxMTQgMGMyNy45IDI3LjkgMzEuNSA3MS44IDguNiAxMDMuOWwtMS4xIDEuNmMtMTAuMyAxNC40LTYuOSAzNC40IDcuNCA0NC42czM0LjQgNi45IDQ0LjYtNy40bDEuMS0xLjZDNDMzLjUgMjYwLjggNDI3IDE4MiAzNzcgMTMyYy01Ni41LTU2LjUtMTQ4LTU2LjUtMjA0LjUgMEw2MC4yIDI0NC4zelwiXVxufTtcbnZhciBmYUNoYWluID0gZmFMaW5rO1xudmFyIGZhRWFyTGlzdGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Vhci1saXN0ZW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtc1wiXSwgXCJmMmEyXCIsIFwiTTM5OC4zIDMuNGMtMTUuOC03LjktMzUtMS41LTQyLjkgMTQuM2MtNy45IDE1LjgtMS41IDM0LjkgMTQuMiA0Mi45bC40IC4yYy40IC4yIDEuMSAuNiAyLjEgMS4yYzIgMS4yIDUgMyA4LjcgNS42YzcuNSA1LjIgMTcuNiAxMy4yIDI3LjcgMjQuMkM0MjguNSAxMTMuNCA0NDggMTQ2IDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTY2LTI4LjUtMTEzLjQtNTYuNS0xNDMuN0M0NDEuNiAzMy4yIDQyNy43IDIyLjIgNDE3LjMgMTVjLTUuMy0zLjctOS43LTYuNC0xMy04LjNjLTEuNi0xLTMtMS43LTQtMi4yYy0uNS0uMy0uOS0uNS0xLjItLjdsLS40LS4yLS4yLS4xLS4xIDAgMCAwYzAgMCAwIDAtMTQuMyAyOC42TDM5OC4zIDMuNHpNMTI4LjcgMjI3LjVjNi4yLTU2IDUzLjctOTkuNSAxMTEuMy05OS41YzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgMjkuMy0xMS4yIDU1LjktMjkuNiA3NS45Yy0xNyAxOC40LTM0LjQgNDUuMS0zNC40IDc4VjQwMGMwIDI2LjUtMjEuNSA0OC00OCA0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnYtNi4xYzAtOS44IDUuNC0yMS43IDE3LjQtMzQuN0MzOTguMyAzMjcuOSA0MTYgMjg2IDQxNiAyNDBjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZDMTQ5LjQgNjQgNzQuOCAxMzIuNSA2NS4xIDIyMC41Yy0xLjkgMTcuNiAxMC43IDMzLjQgMjguMyAzNS4zczMzLjQtMTAuNyAzNS4zLTI4LjN6TTMyIDUxMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE5MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDEuNCAzNjEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwek0yMDggMjQwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0elwiXVxufTtcbnZhciBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMgPSBmYUVhckxpc3RlbjtcbnZhciBmYVRyZWVDaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyZWUtY2l0eScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4N1wiLCBcIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhoOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMTkyaDQwVjEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djcyaDI0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzIgMzM2Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHptNjQgMzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY4MGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDM2OHpNMzUyIDI3MnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNkg1Mjh6TTUxMiAzNjh2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDUyOGMtOC44IDAtMTYgNy4yLTE2IDE2ek0yMjQgMTYwYzAgNi0xIDExLTIgMTZjMjAgMTQgMzQgMzggMzQgNjRjMCA0NS0zNiA4MC04MCA4MEgxNjBWNDgwYzAgMTgtMTUgMzItMzIgMzJjLTE4IDAtMzItMTQtMzItMzJWMzIwSDgwYy00NSAwLTgwLTM1LTgwLTgwYzAtMjYgMTMtNTAgMzMtNjRjLTEtNS0xLTEwLTEtMTZjMC01MyA0Mi05NiA5Ni05NmM1MyAwIDk2IDQzIDk2IDk2elwiXVxufTtcbnZhciBmYVBsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxheScsXG4gIGljb246IFszODQsIDUxMiwgWzk2NTRdLCBcImYwNGJcIiwgXCJNNzMgMzljLTE0LjgtOS4xLTMzLjQtOS40LTQ4LjUtLjlTMCA2Mi42IDAgODBWNDMyYzAgMTcuNCA5LjQgMzMuNCAyNC41IDQxLjlzMzMuNyA4LjEgNDguNS0uOUwzNjEgMjk3YzE0LjMtOC43IDIzLTI0LjIgMjMtNDFzLTguNy0zMi4yLTIzLTQxTDczIDM5elwiXVxufTtcbnZhciBmYUZvbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9udCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzMVwiLCBcIk0yNTQgNTIuOEMyNDkuMyA0MC4zIDIzNy4zIDMyIDIyNCAzMnMtMjUuMyA4LjMtMzAgMjAuOEw1Ny44IDQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmgtMS44bDE4LTQ4SDMwMy44bDE4IDQ4SDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzOTAuMkwyNTQgNTIuOHpNMjc5LjggMzA0SDE2OC4yTDIyNCAxNTUuMSAyNzkuOCAzMDR6XCJdXG59O1xudmFyIGZhVGFibGVDZWxsc1Jvd0xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtY2VsbHMtcm93LWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU2N2FcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY1LjFjLTM3LjggNS40LTY5LjQgMjkuNi04NS4yIDYyLjlMMzYwIDIyNGwwIDY0IDU2IDAgMCA4LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRsLTI0IDAgMCA2NCAyNCAwIDAgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek02NCAyMjRsMCA2NCA4OCAwIDAtNjQtODggMHptMjMyIDBsLTg4IDAgMCA2NCA4OCAwIDAtNjR6TTE1MiAzNTJsLTg4IDAgMCA2NCA4OCAwIDAtNjR6bTU2IDBsMCA2NCA4OCAwIDAtNjQtODggMHpNNTI4IDI0MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTQ4elwiXVxufTtcbnZhciBmYVJ1cGlhaFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVwaWFoLXNpZ24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUyM2RcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnptMjU2LTk2aDgwYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEycy01MC4xIDExMi0xMTIgMTEySDM1MnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhIMzUydjk2aDQ4elwiXVxufTtcbnZhciBmYU1hZ25pZnlpbmdHbGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjY5LCBcInNlYXJjaFwiXSwgXCJmMDAyXCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4elwiXVxufTtcbnZhciBmYVNlYXJjaCA9IGZhTWFnbmlmeWluZ0dsYXNzO1xudmFyIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzk1NSwgXCJwaW5nLXBvbmctcGFkZGxlLWJhbGxcIiwgXCJ0YWJsZS10ZW5uaXNcIl0sIFwiZjQ1ZFwiLCBcIk00ODAgMjg4Yy01MC4xIDAtOTMuNiAyOC44LTExNC42IDcwLjhMMTMyLjkgMTI2LjNsLjYtLjYgNjAuMS02MC4xYzg3LjUtODcuNSAyMjkuMy04Ny41IDMxNi44IDBjNjcuMSA2Ny4xIDgyLjcgMTY2LjMgNDYuOCAyNDguM0M1MzUuOCAyOTcuNiA1MDkgMjg4IDQ4MCAyODh6TTExMy4zIDE1MS45TDM1NC4xIDM5Mi43Yy0xLjQgNy41LTIuMSAxNS4zLTIuMSAyMy4zYzAgMjMuMiA2LjIgNDQuOSAxNi45IDYzLjdjLTMgLjItNi4xIC4zLTkuMiAuM0gzNTdjLTMzLjkgMC02Ni41LTEzLjUtOTAuNS0zNy41bC05LjgtOS44Yy0xMy4xLTEzLjEtMzQuNi0xMi40LTQ2LjggMS43TDE1Mi4yIDUwMWMtNS44IDYuNy0xNC4yIDEwLjctMjMgMTFzLTE3LjUtMy4xLTIzLjgtOS40bC0zMi0zMmMtNi4zLTYuMy05LjctMTQuOS05LjQtMjMuOHM0LjMtMTcuMiAxMS0yM2w2Ni42LTU3LjdjMTQtMTIuMiAxNC44LTMzLjcgMS43LTQ2LjhsLTkuOC05LjhjLTI0LTI0LTM3LjUtNTYuNi0zNy41LTkwLjV2LTIuN2MwLTIyLjggNi4xLTQ0LjkgMTcuMy02NC4zek00ODAgMzIwYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyelwiXVxufTtcbnZhciBmYVBpbmdQb25nUGFkZGxlQmFsbCA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsO1xudmFyIGZhVGFibGVUZW5uaXMgPSBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbDtcbnZhciBmYVBlcnNvbkRvdHNGcm9tTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tZG90cy1mcm9tLWxpbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImRpYWdub3Nlc1wiXSwgXCJmNDcwXCIsIFwiTTI4OCAxNzZBODggODggMCAxIDAgMjg4IDBhODggODggMCAxIDAgMCAxNzZ6TTc4LjcgMzcyLjljMTUtMTIuNSA1MC0zNC40IDk3LjMtNTAuMVY0MzJINDAwVjMyMi43YzQ3LjMgMTUuOCA4Mi4zIDM3LjcgOTcuMyA1MC4xYzIwLjQgMTcgNTAuNiAxNC4yIDY3LjYtNi4xczE0LjItNTAuNi02LjEtNjcuNmMtMTItMTAtMzAuMS0yMi41LTUzLjItMzVDNDk3LjIgMjc4LjQgNDgxLjcgMjg4IDQ2NCAyODhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4YzAtNC4zIC42LTguNCAxLjYtMTIuNEMzNzkuMSAyMTUuOSAzMzUuMyAyMDggMjg4IDIwOGMtNjAuMiAwLTExNC45IDEyLjktMTYwIDI5LjljMCAuNyAwIDEuNCAwIDIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGMtMTEuOCAwLTIyLjctNC4zLTMxLTExLjRjLTEzLjEgOC4xLTIzLjcgMTUuOS0zMS43IDIyLjVjLTIwLjQgMTctMjMuMSA0Ny4yLTYuMSA2Ny42czQ3LjIgMjMuMSA2Ny42IDYuMXpNMjQgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDU1MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyNHpNMjI0IDI4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMDQgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek05NiAyNDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzY4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFEaWFnbm9zZXMgPSBmYVBlcnNvbkRvdHNGcm9tTGluZTtcbnZhciBmYVRyYXNoQ2FuQXJyb3dVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmFzaC1jYW4tYXJyb3ctdXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInRyYXNoLXJlc3RvcmUtYWx0XCJdLCBcImY4MmFcIiwgXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdXG59O1xudmFyIGZhVHJhc2hSZXN0b3JlQWx0ID0gZmFUcmFzaENhbkFycm93VXA7XG52YXIgZmFOYWlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmFpcmEtc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTFmNlwiLCBcIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0VjI1NkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBIMjI4LjJsOTcuMiAxNDUuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOXMyMi43LTE2LjUgMjIuNy0zMC42VjMyMGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjU2SDI2Mi41TDEyMi42IDQ2LjN6TTMwNS4xIDMyMEgzMjB2MjIuM0wzMDUuMSAzMjB6TTE4NS41IDI1NkgxMjhWMTY5LjdMMTg1LjUgMjU2elwiXVxufTtcbnZhciBmYUNhcnRBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjE4XCIsIFwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhINjkuNWMzLjggMCA3LjEgMi43IDcuOSA2LjVsNTEuNiAyNzFjNi41IDM0IDM2LjIgNTguNSA3MC43IDU4LjVINDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDE5OS43Yy0xMS41IDAtMjEuNC04LjItMjMuNi0xOS41TDE3MC43IDI4OEg0NTkuMmMzMi42IDAgNjEuMS0yMS44IDY5LjUtNTMuM2w0MS0xNTIuM0M1NzYuNiA1NyA1NTcuNCAzMiA1MzEuMSAzMkgzNjBWMTM0LjFsMjMtMjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02NCA2NGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjNWMzJIMTIwLjFDMTExIDEyLjggOTEuNiAwIDY5LjUgMEgyNHpNMTc2IDUxMmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTMzNi00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwelwiXVxufTtcbnZhciBmYVdhbGtpZVRhbGtpZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxraWUtdGFsa2llJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmOGVmXCIsIFwiTTExMiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0Vjk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NFYzMDAuMWMwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDMuOSAzLjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwNGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzEuOWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDMuOS0zLjljOS05IDE0LjEtMjEuMiAxNC4xLTMzLjlWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMkgyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJIMTEyVjI0em0wIDEzNkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFGaWxlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjIxLCBcImZpbGUtZWRpdFwiXSwgXCJmMzFjXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjI5OS42bC05NC43IDk0LjdjLTguMiA4LjItMTQgMTguNS0xNi44IDI5LjdsLTE1IDYwLjFjLTIuMyA5LjQtMS44IDE5IDEuNCAyNy44SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTU0OS44IDIzNS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjkuNCAyOS40LTcxLTcxIDI5LjQtMjkuNGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMzExLjkgNDE3TDQ0MS4xIDI4Ny44bDcxIDcxTDM4Mi45IDQ4Ny45Yy00LjEgNC4xLTkuMiA3LTE0LjkgOC40bC02MC4xIDE1Yy01LjUgMS40LTExLjItLjItMTUuMi00LjJzLTUuNi05LjctNC4yLTE1LjJsMTUtNjAuMWMxLjQtNS42IDQuMy0xMC44IDguNC0xNC45elwiXVxufTtcbnZhciBmYUZpbGVFZGl0ID0gZmFGaWxlUGVuO1xudmFyIGZhUmVjZWlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWNlaXB0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgXCJmNTQzXCIsIFwiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMy03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42czE0IDEyLjQgMTQgMjEuOFY0ODhjMCA5LjQtNS41IDE3LjktMTQgMjEuOHMtMTguNSAyLjUtMjUuNi0zLjZMMzA0IDQ3MS42bC00MC40IDM0LjZjLTkgNy43LTIyLjMgNy43LTMxLjIgMEwxOTIgNDcxLjZsLTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDgwIDQ3MS42IDM5LjYgNTA2LjJjLTcuMSA2LjEtMTcuMSA3LjUtMjUuNiAzLjZTMCA0OTcuNCAwIDQ4OFYyNEMwIDE0LjYgNS41IDYuMSAxNCAyLjJ6TTk2IDE0NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyODhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIOTZ6TTgwIDM1MmMwIDguOCA3LjIgMTYgMTYgMTZIMjg4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTk2IDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyODhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIOTZ6XCJdXG59O1xudmFyIGZhU3F1YXJlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBlbi1zcXVhcmVcIiwgXCJwZW5jaWwtc3F1YXJlXCJdLCBcImYxNGJcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zMjUuOCAxMzkuN2wxNC40IDE0LjRjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTIxLjQgMjEuNC03MS03MSAyMS40LTIxLjRjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDB6TTExOS45IDI4OUwyMjUuMSAxODMuOGw3MSA3MUwxOTAuOSAzNTkuOWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXpcIl1cbn07XG52YXIgZmFQZW5TcXVhcmUgPSBmYVNxdWFyZVBlbjtcbnZhciBmYVBlbmNpbFNxdWFyZSA9IGZhU3F1YXJlUGVuO1xudmFyIGZhU3VpdGNhc2VSb2xsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlLXJvbGxpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1YzFcIiwgXCJNMTQ0IDU2YzAtNC40IDMuNi04IDgtOGg4MGM0LjQgMCA4IDMuNiA4IDh2NzJIMTQ0VjU2em0xNzYgNzJIMjg4VjU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE1MkMxMjEuMSAwIDk2IDI1LjEgOTYgNTZ2NzJINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMySDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MmMwLTM1LjMtMjguNy02NC02NC02NHpNMTEyIDIyNEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDEyOEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1M2ZcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6TTQzMiAyMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAtMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2ODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyODhjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNoZXZyb25Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA3OFwiLCBcIk0yMzMuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxOTItMTkyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAzMzguNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyelwiXVxufTtcbnZhciBmYUJhdHRlcnlGdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdHRlcnktZnVsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODI2NywgXCJiYXR0ZXJ5XCIsIFwiYmF0dGVyeS01XCJdLCBcImYyNDBcIiwgXCJNNDY0IDE2MGM4LjggMCAxNiA3LjIgMTYgMTZWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZINDY0ek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZWMzM2YzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ2NGM0NC4yIDAgODAtMzUuOCA4MC04MFYzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyVjE3NmMwLTQ0LjItMzUuOC04MC04MC04MEg4MHptMzY4IDk2SDk2VjMyMEg0NDhWMTkyelwiXVxufTtcbnZhciBmYUJhdHRlcnkgPSBmYUJhdHRlcnlGdWxsO1xudmFyIGZhQmF0dGVyeTUgPSBmYUJhdHRlcnlGdWxsO1xudmFyIGZhU2t1bGxDcm9zc2JvbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NrdWxsLWNyb3NzYm9uZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNjksIDk3NjBdLCBcImY3MTRcIiwgXCJNMzY4IDEyOGMwIDQ0LjQtMjUuNCA4My41LTY0IDEwNi40VjI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNzZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIzNC40Yy0zOC42LTIzLTY0LTYyLjEtNjQtMTA2LjRDODAgNTcuMyAxNDQuNSAwIDIyNCAwczE0NCA1Ny4zIDE0NCAxMjh6TTE2OCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNDQtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMy40IDI3My43YzcuOS0xNS44IDI3LjEtMjIuMiA0Mi45LTE0LjNMMjI0IDM0OC4ybDE3Ny43LTg4LjhjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3MxLjUgMzUtMTQuMyA0Mi45TDI5NS42IDM4NGwxMzQuOCA2Ny40YzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNMMjI0IDQxOS44IDQ2LjMgNTA4LjZjLTE1LjggNy45LTM1IDEuNS00Mi45LTE0LjNzLTEuNS0zNSAxNC4zLTQyLjlMMTUyLjQgMzg0IDE3LjcgMzE2LjZDMS45IDMwOC43LTQuNSAyODkuNSAzLjQgMjczLjd6XCJdXG59O1xudmFyIGZhQ29kZUNvbXBhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1jb21wYXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMTNhXCIsIFwiTTMyMCA0ODhjMCA5LjUtNS42IDE4LjEtMTQuMiAyMS45cy0xOC44IDIuMy0yNS44LTQuMWwtODAtNzJjLTUuMS00LjYtNy45LTExLTcuOS0xNy44czIuOS0xMy4zIDcuOS0xNy44bDgwLTcyYzctNi4zIDE3LjItNy45IDI1LjgtNC4xczE0LjIgMTIuNCAxNC4yIDIxLjl2NDBoMTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTUzLjNDMzcxLjcgMTQxIDM1MiAxMTIuOCAzNTIgODBjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zVjMyMGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOEgzMjB2NDB6TTQ1NiA4MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xOTIgMjRjMC05LjUgNS42LTE4LjEgMTQuMi0yMS45czE4LjgtMi4zIDI1LjggNC4xbDgwIDcyYzUuMSA0LjYgNy45IDExIDcuOSAxNy44cy0yLjkgMTMuMy03LjkgMTcuOGwtODAgNzJjLTcgNi4zLTE3LjIgNy45LTI1LjggNC4xcy0xNC4yLTEyLjQtMTQuMi0yMS45VjEyOEgxNzZjLTM1LjMgMC02NCAyOC43LTY0IDY0VjM1OC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM1YxOTJjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhoMTZWMjR6TTU2IDQzMmEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAwelwiXVxufTtcbnZhciBmYUxpc3RVbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaXN0LXVsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsaXN0LWRvdHNcIl0sIFwiZjBjYVwiLCBcIk02NCAxNDRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnpNNjQgNDY0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDgtMjA4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhTGlzdERvdHMgPSBmYUxpc3RVbDtcbnZhciBmYVNjaG9vbExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NmZcIiwgXCJNMzAyLjIgNS40YzEwLjctNy4yIDI0LjgtNy4yIDM1LjUgMEw0NzMuNyA5Nkg1OTJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMjcyYzAtNjEuOS01MC4xLTExMi0xMTItMTEycy0xMTIgNTAuMS0xMTIgMTEydjI0LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRIMzIwLjNsLS4zIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2aDY0djBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE0NGMwLTI2LjUgMjEuNS00OCA0OC00OEgxNjYuM0wzMDIuMiA1LjR6TTgwIDIwOHY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZIOTZjLTguOCAwLTE2IDcuMi0xNiAxNnptMCAxMjh2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMzZjMC04LjgtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTI0MC03MmE4OCA4OCAwIDEgMCAwLTE3NiA4OCA4OCAwIDEgMCAwIDE3NnptMTYtMTIwdjE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDMyMGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0xOTIgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFUb3dlckNlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG93ZXItY2VsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4NVwiLCBcIk02Mi42IDIuM0M0Ni4yLTQuMyAyNy42IDMuNiAyMC45IDIwQzcuNCA1My40IDAgODkuOSAwIDEyOHM3LjQgNzQuNiAyMC45IDEwOGM2LjYgMTYuNCAyNS4zIDI0LjMgNDEuNyAxNy43Uzg2LjkgMjI4LjQgODAuMyAyMTJDNjkuOCAxODYuMSA2NCAxNTcuOCA2NCAxMjhzNS44LTU4LjEgMTYuMy04NEM4Ni45IDI3LjYgNzkgOSA2Mi42IDIuM3ptNDUwLjggMEM0OTcgOSA0ODkuMSAyNy42IDQ5NS43IDQ0QzUwNi4yIDY5LjkgNTEyIDk4LjIgNTEyIDEyOHMtNS44IDU4LjEtMTYuMyA4NGMtNi42IDE2LjQgMS4zIDM1IDE3LjcgNDEuN3MzNS0xLjMgNDEuNy0xNy43YzEzLjUtMzMuNCAyMC45LTY5LjkgMjAuOS0xMDhzLTcuNC03NC42LTIwLjktMTA4QzU0OC40IDMuNiA1MjkuOC00LjMgNTEzLjQgMi4zek0zNDAuMSAxNjUuMmM3LjUtMTAuNSAxMS45LTIzLjMgMTEuOS0zNy4yYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMTMuOSA0LjQgMjYuNyAxMS45IDM3LjJMOTguOSA0NjYuOGMtNy4zIDE2LjEtLjIgMzUuMSAxNS45IDQyLjRzMzUuMSAuMiA0Mi40LTE1LjlMMTc3LjcgNDQ4SDM5OC4zbDIwLjYgNDUuMmM3LjMgMTYuMSAyNi4zIDIzLjIgNDIuNCAxNS45czIzLjItMjYuMyAxNS45LTQyLjRMMzQwLjEgMTY1LjJ6TTM2OS4yIDM4NEgyMDYuOGwxNC41LTMySDM1NC43bDE0LjUgMzJ6TTI4OCAyMDUuM0wzMjUuNiAyODhIMjUwLjRMMjg4IDIwNS4zek0xNjMuMyA3My42YzUuMy0xMi4xLS4yLTI2LjMtMTIuNC0zMS42cy0yNi4zIC4yLTMxLjYgMTIuNEMxMDkuNSA3NyAxMDQgMTAxLjkgMTA0IDEyOHM1LjUgNTEgMTUuMyA3My42YzUuMyAxMi4xIDE5LjUgMTcuNyAzMS42IDEyLjRzMTcuNy0xOS41IDEyLjQtMzEuNkMxNTYgMTY1LjggMTUyIDE0Ny40IDE1MiAxMjhzNC0zNy44IDExLjMtNTQuNHpNNDU2LjcgNTQuNGMtNS4zLTEyLjEtMTkuNS0xNy43LTMxLjYtMTIuNHMtMTcuNyAxOS41LTEyLjQgMzEuNkM0MjAgOTAuMiA0MjQgMTA4LjYgNDI0IDEyOHMtNCAzNy44LTExLjMgNTQuNGMtNS4zIDEyLjEgLjIgMjYuMyAxMi40IDMxLjZzMjYuMy0uMiAzMS42LTEyLjRDNDY2LjUgMTc5IDQ3MiAxNTQuMSA0NzIgMTI4cy01LjUtNTEtMTUuMy03My42elwiXVxufTtcbnZhciBmYURvd25Mb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rvd24tbG9uZycsXG4gIGljb246IFszMjAsIDUxMiwgW1wibG9uZy1hcnJvdy1hbHQtZG93blwiXSwgXCJmMzA5XCIsIFwiTTIgMzM0LjVjLTMuOCA4LjgtMiAxOSA0LjYgMjZsMTM2IDE0NGM0LjUgNC44IDEwLjggNy41IDE3LjQgNy41czEyLjktMi43IDE3LjQtNy41bDEzNi0xNDRjNi42LTcgOC40LTE3LjIgNC42LTI2cy0xMi41LTE0LjUtMjItMTQuNWwtNzIgMCAwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJsMCAyODgtNzIgMGMtOS42IDAtMTguMiA1LjctMjIgMTQuNXpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dBbHREb3duID0gZmFEb3duTG9uZztcbnZhciBmYVJhbmtpbmdTdGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Jhbmtpbmctc3RhcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2MVwiLCBcIk0zNTMuOCA1NC4xTDMzMC4yIDYuM2MtMy45LTguMy0xNi4xLTguNi0yMC40IDBMMjg2LjIgNTQuMWwtNTIuMyA3LjVjLTkuMyAxLjQtMTMuMyAxMi45LTYuNCAxOS44bDM4IDM3LTkgNTIuMWMtMS40IDkuMyA4LjIgMTYuNSAxNi44IDEyLjJsNDYuOS0yNC44IDQ2LjYgMjQuNGM4LjYgNC4zIDE4LjMtMi45IDE2LjgtMTIuMmwtOS01Mi4xIDM4LTM2LjZjNi44LTYuOCAyLjktMTguMy02LjQtMTkuOGwtNTIuMy03LjV6TTI1NiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI1NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTYwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnptNDE2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlY0MTZjMC0xNy43LTE0LjMtMzItMzItMzJINDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG52YXIgZmFDaGVzc0tpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3Mta2luZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCBcImY0M2ZcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDhoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjU2djQ4SDQwOGMyMi4xIDAgNDAgMTcuOSA0MCA0MGMwIDUuMy0xIDEwLjUtMy4xIDE1LjRMMzY4IDQwMEg4MEwzLjEgMjE1LjRDMSAyMTAuNSAwIDIwNS4zIDAgMjAwYzAtMjIuMSAxNy45LTQwIDQwLTQwSDE5MlYxMTJIMTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zOC42IDQ3My40TDgwIDQzMkgzNjhsNDEuNCA0MS40YzQuMiA0LjIgNi42IDEwIDYuNiAxNmMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNkg1NC42QzQyLjEgNTEyIDMyIDUwMS45IDMyIDQ4OS40YzAtNiAyLjQtMTEuOCA2LjYtMTZ6XCJdXG59O1xudmFyIGZhUGVyc29uSGFyYXNzaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oYXJhc3NpbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NDlcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjM1LjNsNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN0gxNDUuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjl6TTQ4MCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNNDY0IDM0NHY1OC43bC00MS40LTQxLjRjLTcuMy03LjMtMTcuNi0xMC42LTI3LjgtOXMtMTguOSA4LjEtMjMuNSAxNy4zbC00OCA5NmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDQwOC44IDQzOGw1NC43IDU0LjdjMTIuNCAxMi40IDI5LjEgMTkuMyA0Ni42IDE5LjNjMzYuNCAwIDY1LjktMjkuNSA2NS45LTY1LjlWMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2aDU2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMwNGMtOC44IDAtMTYgNy4yLTE2IDE2em0tLjggNDkuN2MtNy45LTQtMTcuNS0uNy0yMS41IDcuMnMtLjcgMTcuNSA3LjIgMjEuNWw0OCAyNGM3LjkgNCAxNy41IC43IDIxLjUtNy4ycy43LTE3LjUtNy4yLTIxLjVsLTQ4LTI0elwiXVxufTtcbnZhciBmYUJyYXppbGlhblJlYWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyYXppbGlhbi1yZWFsLXNpZ24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NmNcIiwgXCJNNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNTAuMmMxMi41IDIuMyAyNC43IDYuNCAzNi4yIDEyLjFsMTAuMSA1LjFjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM2wtMTAuMi01LjFjLTkuOS01LTIwLjktNy41LTMyLTcuNWgtMS43Yy0yOS44IDAtNTMuOSAyNC4xLTUzLjkgNTMuOWMwIDIyIDEzLjQgNDEuOCAzMy45IDUwbDUyIDIwLjhjNDQuNyAxNy45IDc0LjEgNjEuMiA3NC4xIDEwOS40djMuNGMwIDUxLjItMzMuNiA5NC42LTgwIDEwOS4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NjAuNmMtMTUtMy41LTI5LjQtOS43LTQyLjMtMTguM2wtMjMuNC0xNS42Yy0xNC43LTkuOC0xOC43LTI5LjctOC45LTQ0LjRzMjkuNy0xOC43IDQ0LjQtOC45TDM2MS4yIDM4OWMxMC44IDcuMiAyMy40IDExIDM2LjMgMTFjMjcuOSAwIDUwLjUtMjIuNiA1MC41LTUwLjV2LTMuNGMwLTIyLTEzLjQtNDEuOC0zMy45LTUwbC01Mi0yMC44QzMxNy4zIDI1Ny40IDI4OCAyMTQuMSAyODggMTY1LjlDMjg4IDExNCAzMjEuNSA3MCAzNjggNTQuMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnpcIl1cbn07XG52YXIgZmFMYW5kbWFya0RvbWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmstZG9tZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGFuZG1hcmstYWx0XCJdLCBcImY3NTJcIiwgXCJNMjQ4IDBoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMzQuN0MzNjguNCA0OC4xIDQzMS45IDExMS42IDQ0NS4zIDE5Mkg0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMi43QzgwLjEgMTExLjYgMTQzLjYgNDguMSAyMjQgMzQuN1YyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNjQgMjg4aDY0VjQxNmg0MFYyODhoNjRWNDE2aDQ4VjI4OGg2NFY0MTZoNDBWMjg4aDY0VjQyMC4zYy42IC4zIDEuMiAuNyAxLjcgMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEySDMyYy0xNC4xIDAtMjYuNS05LjItMzAuNi0yMi43czEuMS0yOC4xIDEyLjktMzUuOWw0OC0zMmMuNi0uNCAxLjItLjcgMS44LTEuMVYyODh6XCJdXG59O1xudmFyIGZhTGFuZG1hcmtBbHQgPSBmYUxhbmRtYXJrRG9tZTtcbnZhciBmYUFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4NTkzXSwgXCJmMDYyXCIsIFwiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxNDEuMlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNDEuMkwzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwelwiXVxufTtcbnZhciBmYVR2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3R2JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbNjM3MTcsIFwidGVsZXZpc2lvblwiLCBcInR2LWFsdFwiXSwgXCJmMjZjXCIsIFwiTTY0IDY0VjM1Mkg1NzZWNjRINjR6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xMjggNDQ4SDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVGVsZXZpc2lvbiA9IGZhVHY7XG52YXIgZmFUdkFsdCA9IGZhVHY7XG52YXIgZmFTaHJpbXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hyaW1wJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NDI0XSwgXCJlNDQ4XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZzMjguNyA2NCA2NCA2NGgxYzMuNyA4OC45IDc3IDE2MCAxNjcgMTYwaDU2VjEyOEgyNjQgODguOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0NjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINjR6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoNzJWNDA3LjhsLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjN2NjkuOXpNNDcyLjYgNDE1YzI0LjYtMzAuMyAzOS40LTY4LjkgMzkuNC0xMTFjMC0xMi4zLTEuMy0yNC4zLTMuNy0zNS45TDM4Mi44IDM1NS4xYy44IDMuNCAxLjIgNyAxLjIgMTAuNmMwIDQuNi0uNyA5LTEuOSAxMy4xTDQ3Mi42IDQxNXpNMzM2IDEyOEgzMjBWMzIwaDE4LjNjOS45IDAgMTkuMSAzLjIgMjYuNiA4LjVsMTMzLjUtOTIuNEM0NzEuOCAxNzIuNiA0MDkuMSAxMjggMzM2IDEyOHpNMTY4IDE5MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYUxpc3RDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaXN0LWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0YXNrc1wiXSwgXCJmMGFlXCIsIFwiTTE1Mi4xIDM4LjJjOS45IDguOSAxMC43IDI0IDEuOCAzMy45bC03MiA4MGMtNC40IDQuOS0xMC42IDcuOC0xNy4yIDcuOXMtMTIuOS0yLjQtMTcuNi03TDcgMTEzQy0yLjMgMTAzLjYtMi4zIDg4LjQgNyA3OXMyNC42LTkuNCAzMy45IDBsMjIuMSAyMi4xIDU1LjEtNjEuMmM4LjktOS45IDI0LTEwLjcgMzMuOS0xLjh6bTAgMTYwYzkuOSA4LjkgMTAuNyAyNCAxLjggMzMuOWwtNzIgODBjLTQuNCA0LjktMTAuNiA3LjgtMTcuMiA3LjlzLTEyLjktMi40LTE3LjYtN0w3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDIyLjEgMjIuMSA1NS4xLTYxLjJjOC45LTkuOSAyNC0xMC43IDMzLjktMS44ek0yMjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00OCAzNjhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYVRhc2tzID0gZmFMaXN0Q2hlY2s7XG52YXIgZmFKdWdEZXRlcmdlbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnanVnLWRldGVyZ2VudCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTUxOVwiLCBcIk05NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0OGg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDg4Qzc0LjcgOTYgNjQgODUuMyA2NCA3MnMxMC43LTI0IDI0LTI0aDhWMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4SDI1NmM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NnptMjU2IDB2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhQ2lyY2xlVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtdXNlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCBcInVzZXItY2lyY2xlXCJdLCBcImYyYmRcIiwgXCJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwSDIyNGMtNDcuNCAwLTg4LjkgMjUuOC0xMTEgNjQuMmMzNS4yIDM5LjIgODYuMiA2My44IDE0MyA2My44czEwNy44LTI0LjcgMTQzLTYzLjh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptMjU2IDE2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0elwiXVxufTtcbnZhciBmYVVzZXJDaXJjbGUgPSBmYUNpcmNsZVVzZXI7XG52YXIgZmFVc2VyU2hpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItc2hpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTA1XCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkg0MTguM2MxLjggMCAzLjUtLjIgNS4zLS41Yy03Ni4zLTU1LjEtOTkuOC0xNDEtMTAzLjEtMjAwLjJjLTE2LjEtNC44LTMzLjEtNy4zLTUwLjctNy4zSDE3OC4zem0zMDguOC03OC4zbC0xMjAgNDhDMzU4IDI3Ny40IDM1MiAyODYuMiAzNTIgMjk2YzAgNjMuMyAyNS45IDE2OC44IDEzNC44IDIxNC4yYzUuOSAyLjUgMTIuNiAyLjUgMTguNSAwQzYxNC4xIDQ2NC44IDY0MCAzNTkuMyA2NDAgMjk2YzAtOS44LTYtMTguNi0xNS4xLTIyLjNsLTEyMC00OGMtNS43LTIuMy0xMi4xLTIuMy0xNy44IDB6TTU5MS40IDMxMmMtMy45IDUwLjctMjcuMiAxMTYuNy05NS40IDE0OS43VjI3My44TDU5MS40IDMxMnpcIl1cbn07XG52YXIgZmFXaW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3MmVcIiwgXCJNMjg4IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM1MmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTEyOCA1MTJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl1cbn07XG52YXIgZmFDYXJCdXJzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNhci1jcmFzaFwiXSwgXCJmNWUxXCIsIFwiTTE3NiA4Yy02LjYgMC0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNmwzNS4zLTMyLjUgOS41LTM1LjQgMTAuNC0zOC42YzgtMjkuOSAzMC41LTUyLjEgNTcuOS02MC45bDQxLTU5LjJjMTEuMy0xNi4zIDI2LjQtMjguOSA0My41LTM3LjJjLS40LS42LS44LTEuMi0xLjMtMS44Yy00LjEtNS4xLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzRDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHpNMzY3LjcgMTYxLjVsMTM1LjYgMzYuM2M2LjUgMS44IDExLjMgNy40IDExLjggMTQuMmw0LjYgNTYuNS0yMDEuNS01NCAzMi4yLTQ2LjZjMy44LTUuNiAxMC44LTguMSAxNy4zLTYuNHptLTY5LjktMzBsLTQ3LjkgNjkuM2MtMjEuNiAzLTQwLjMgMTguNi00Ni4zIDQxbC0xMC40IDM4LjYtMTYuNiA2MS44LTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI0Ny4zIDY2LjMtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjZsOC4zLTMwLjlMNTk1IDM4OGwxMC40LTM4LjZjNi0yMi40LTIuNS00NS4yLTE5LjYtNTguN2wtNi44LTg0Yy0yLjctMzMuNy0yNi40LTYyLTU5LTcwLjhMMzg0LjIgOTkuN2MtMzIuNy04LjgtNjcuMyA0LTg2LjUgMzEuOHptLTE3IDEzMWEyNCAyNCAwIDEgMSAtMTIuNCA0Ni40IDI0IDI0IDAgMSAxIDEyLjQtNDYuNHptMjE3LjkgODMuMkEyNCAyNCAwIDEgMSA1NDUgMzU4LjFhMjQgMjQgMCAxIDEgLTQ2LjQtMTIuNHpcIl1cbn07XG52YXIgZmFDYXJDcmFzaCA9IGZhQ2FyQnVyc3Q7XG52YXIgZmFZID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3knLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjFdLCBcIjU5XCIsIFwiTTU4IDQ1LjRDNDcuOCAzMSAyNy44IDI3LjcgMTMuNCAzOFMtNC4zIDY4LjIgNiA4Mi42TDE2MCAyOTguM1Y0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyOTguM0wzNzggODIuNmMxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZTMzM2LjIgMzEgMzI2IDQ1LjRMMTkyIDIzMi45IDU4IDQ1LjR6XCJdXG59O1xudmFyIGZhUGVyc29uU25vd2JvYXJkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1zbm93Ym9hcmRpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MzgsIFwic25vd2JvYXJkaW5nXCJdLCBcImY3Y2VcIiwgXCJNMjA5LjcgMy40YzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjNsMjUgNTAgNDIuNCA4LjVjMTkuNSAzLjkgMzcuOCAxMi4zIDUzLjUgMjQuNWwxMjYuMSA5OC4xYzE0IDEwLjkgMTYuNSAzMSA1LjYgNDQuOXMtMzEgMTYuNS00NC45IDUuNmwtNzIuMS01Ni4xLTcxLjUgMzEuOCAzMy4xIDI3LjZjMjMuMiAxOS4zIDMzLjUgNTAgMjYuNyA3OS40bC0xNy40IDc1LjJjLTIuMiA5LjQtOC4yIDE2LjgtMTYuMSAyMWw4Ni41IDMzLjFjNC42IDEuOCA5LjQgMi42IDE0LjMgMi42SDQ3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg0NDMuOGMtMTAuOCAwLTIxLjQtMi0zMS41LTUuOEw2MC4xIDM3MS4zYy0xMS41LTQuNC0yMi0xMS4yLTMwLjgtMjBMNyAzMjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMi40IDIyLjRjNCA0IDguNyA3LjEgMTQgOS4xbDIyLjQgOC42Yy0uOC0xLjYtMS41LTMuMi0yLjEtNC45Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjVMMTkyIDI2NC45bDAtNTMuMmMwLTI0LjIgMTMuNy00Ni40IDM1LjQtNTcuMmw0NS4yLTIyLjYtNy41LTEuNWMtMTkuNC0zLjktMzUuOS0xNi41LTQ0LjctMzQuMWwtMjUtNTBjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjl6TTEzOSAzNTAuMWwxNTkgNjAuOWMtMi4xLTUuNi0yLjYtMTEuOS0xLjEtMTguMmwxNy40LTc1LjJjMS40LTUuOS0uNy0xMi01LjMtMTUuOWwtNTIuOC00NCAwIDE4LjhjMCAyMC43LTEzLjIgMzktMzIuOCA0NS41TDEzOSAzNTAuMXpNNDMyIDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYVNub3dib2FyZGluZyA9IGZhUGVyc29uU25vd2JvYXJkaW5nO1xudmFyIGZhVHJ1Y2tGYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZhc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInNoaXBwaW5nLWZhc3RcIl0sIFwiZjQ4YlwiLCBcIk0xMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OFY5NkgxNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg2NCAyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINjQgMjQwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDY0IDE2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDY0IDIwOGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2NFY0MTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODggMjU2IDIzNy4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxMTQuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0g0MTZWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTEyek01NDQgMjM3LjNWMjU2SDQxNlYxNjBoNTAuN0w1NDQgMjM3LjN6TTE2MCAzNjhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpcIl1cbn07XG52YXIgZmFTaGlwcGluZ0Zhc3QgPSBmYVRydWNrRmFzdDtcbnZhciBmYUZpc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlzaCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODAzMV0sIFwiZjU3OFwiLCBcIk0xODAuNSAxNDEuNUMyMTkuNyAxMDguNSAyNzIuNiA4MCAzMzYgODBzMTE2LjMgMjguNSAxNTUuNSA2MS41YzM5LjEgMzMgNjYuOSA3Mi40IDgxIDk5LjhjNC43IDkuMiA0LjcgMjAuMSAwIDI5LjNjLTE0LjEgMjcuNC00MS45IDY2LjgtODEgOTkuOEM0NTIuMyA0MDMuNSAzOTkuNCA0MzIgMzM2IDQzMnMtMTE2LjMtMjguNS0xNTUuNS02MS41Yy0xNi4yLTEzLjctMzAuNS0yOC41LTQyLjctNDMuMUw0OC4xIDM3OS42Yy0xMi41IDcuMy0yOC40IDUuMy0zOC43LTQuOVMtMyAzNDguNyA0LjIgMzM2LjFMNTAgMjU2IDQuMiAxNzUuOWMtNy4yLTEyLjYtNS0yOC40IDUuMy0zOC42czI2LjEtMTIuMiAzOC43LTQuOWw4OS43IDUyLjNjMTIuMi0xNC42IDI2LjUtMjkuNCA0Mi43LTQzLjF6TTQ0OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFVc2VyR3JhZHVhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1ncmFkdWF0ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUwMVwiLCBcIk0yMTkuMyAuNWMzLjEtLjYgNi4zLS42IDkuNCAwbDIwMCA0MEM0MzkuOSA0Mi43IDQ0OCA1Mi42IDQ0OCA2NHMtOC4xIDIxLjMtMTkuMyAyMy41TDM1MiAxMDIuOVYxNjBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMTAyLjlMNDggOTMuM3Y2NS4xbDE1LjcgNzguNGMuOSA0LjctLjMgOS42LTMuMyAxMy4zcy03LjYgNS45LTEyLjQgNS45SDE2Yy00LjggMC05LjMtMi4xLTEyLjQtNS45cy00LjMtOC42LTMuMy0xMy4zTDE2IDE1OC40Vjg2LjZDNi41IDgzLjMgMCA3NC4zIDAgNjRDMCA1Mi42IDguMSA0Mi43IDE5LjMgNDAuNWwyMDAtNDB6TTExMS45IDMyNy43YzEwLjUtMy40IDIxLjggLjQgMjkuNCA4LjVsNzEgNzUuNWM2LjMgNi43IDE3IDYuNyAyMy4zIDBsNzEtNzUuNWM3LjYtOC4xIDE4LjktMTEuOSAyOS40LTguNUM0MDEgMzQ4LjYgNDQ4IDQwOS40IDQ0OCA0ODEuM2MwIDE3LTEzLjggMzAuNy0zMC43IDMwLjdIMzAuN0MxMy44IDUxMiAwIDQ5OC4yIDAgNDgxLjNjMC03MS45IDQ3LTEzMi43IDExMS45LTE1My42elwiXVxufTtcbnZhciBmYUNpcmNsZUhhbGZTdHJva2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWhhbGYtc3Ryb2tlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTY4MCwgXCJhZGp1c3RcIl0sIFwiZjA0MlwiLCBcIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyVjQ0OGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2elwiXVxufTtcbnZhciBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTtcbnZhciBmYUNsYXBwZXJib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGFwcGVyYm9hcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUxMzFcIiwgXCJNNDQ4IDMySDM2MS45bC0xIDEtMTI3IDEyN2g5Mi4xbDEtMUw0NTMuOCAzMi4zYy0xLjktLjItMy44LS4zLTUuOC0uM3ptNjQgMTI4Vjk2YzAtMTUuMS01LjMtMjkuMS0xNC00MGwtMTA0IDEwNEg1MTJ6TTI5NC4xIDMySDIwMS45bC0xIDFMNzMuOSAxNjBoOTIuMWwxLTEgMTI3LTEyN3pNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnY2NEg2LjFsMS0xIDEyNy0xMjdINjR6TTUxMiAxOTJIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MnpcIl1cbn07XG52YXIgZmFDaXJjbGVSYWRpYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXJhZGlhdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NjIsIFwicmFkaWF0aW9uLWFsdFwiXSwgXCJmN2JhXCIsIFwiTTI1NiA2NGExOTIgMTkyIDAgMSAxIDAgMzg0IDE5MiAxOTIgMCAxIDEgMC0zODR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDI1NmMwLTIwLjcgMTEuMy0zOC44IDI4LTQ4LjVsLTM2LTYyLjNjLTguOC0xNS4zLTI4LjctMjAuOC00Mi05Yy0yNS42IDIyLjYtNDMuOSA1My4zLTUwLjkgODguMUM5NS43IDI0MS41IDExMC4zIDI1NiAxMjggMjU2bDcyIDB6bTI4IDQ4LjVsLTM2IDYyLjRjLTguOCAxNS4zLTMuNiAzNS4yIDEzLjEgNDAuOGMxNiA1LjQgMzMuMSA4LjMgNTAuOSA4LjNzMzQuOS0yLjkgNTAuOS04LjNjMTYuNy01LjYgMjEuOS0yNS41IDEzLjEtNDAuOGwtMzYtNjIuNGMtOC4yIDQuOC0xNy44IDcuNS0yOCA3LjVzLTE5LjgtMi43LTI4LTcuNXpNMzEyIDI1Nmw3MiAwYzE3LjcgMCAzMi4zLTE0LjUgMjguOC0zMS44Yy03LTM0LjgtMjUuMy02NS41LTUwLjktODguMWMtMTMuMi0xMS43LTMzLjEtNi4zLTQyIDlsLTM2IDYyLjNjMTYuNyA5LjcgMjggMjcuOCAyOCA0OC41em0tNTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVJhZGlhdGlvbkFsdCA9IGZhQ2lyY2xlUmFkaWF0aW9uO1xudmFyIGZhQmFzZWJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFzZWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNTgsIDk5MTgsIFwiYmFzZWJhbGwtYmFsbFwiXSwgXCJmNDMzXCIsIFwiTTYyLjcgMjIzLjRjLTQuOCAuNC05LjcgLjYtMTQuNyAuNmMtMTUuNiAwLTMwLjgtMi00NS4yLTUuOUMxOS4yIDEwNy4xIDEwNy4xIDE5LjIgMjE4LjEgMi44QzIyMiAxNy4yIDIyNCAzMi40IDIyNCA0OGMwIDQuOS0uMiA5LjgtLjYgMTQuN2MtLjcgOC44IDUuOCAxNi41IDE0LjYgMTcuM3MxNi41LTUuOCAxNy4zLTE0LjZjLjUtNS43IC43LTExLjUgLjctMTcuM2MwLTE2LjUtMS45LTMyLjYtNS42LTQ3LjljMS44IDAgMy43LS4xIDUuNi0uMUMzOTcuNCAwIDUxMiAxMTQuNiA1MTIgMjU2YzAgMS45IDAgMy43LS4xIDUuNmMtMTUuNC0zLjYtMzEuNC01LjYtNDcuOS01LjZjLTUuOCAwLTExLjYgLjItMTcuMyAuN2MtOC44IC43LTE1LjQgOC41LTE0LjYgMTcuM3M4LjUgMTUuNCAxNy4zIDE0LjZjNC44LS40IDkuNy0uNiAxNC43LS42YzE1LjYgMCAzMC44IDIgNDUuMiA1LjlDNDkyLjggNDA0LjkgNDA0LjkgNDkyLjggMjkzLjkgNTA5LjJDMjkwIDQ5NC44IDI4OCA0NzkuNiAyODggNDY0YzAtNC45IC4yLTkuOCAuNi0xNC43Yy43LTguOC01LjgtMTYuNS0xNC42LTE3LjNzLTE2LjUgNS44LTE3LjMgMTQuNmMtLjUgNS43LS43IDExLjUtLjcgMTcuM2MwIDE2LjUgMS45IDMyLjYgNS42IDQ3LjljLTEuOCAwLTMuNyAuMS01LjYgLjFDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZjMC0xLjkgMC0zLjcgLjEtNS42QzE1LjQgMjU0LjEgMzEuNSAyNTYgNDggMjU2YzUuOCAwIDExLjYtLjIgMTcuMy0uN2M4LjgtLjcgMTUuNC04LjUgMTQuNi0xNy4zcy04LjUtMTUuNC0xNy4zLTE0LjZ6TTEyMS4zIDIwOGMtOCAzLjctMTEuNiAxMy4yLTcuOSAyMS4yczEzLjIgMTEuNiAyMS4yIDcuOWM0NS4yLTIwLjggODEuNy01Ny4yIDEwMi41LTEwMi41YzMuNy04IC4yLTE3LjUtNy45LTIxLjJzLTE3LjUtLjItMjEuMiA3LjljLTE3LjYgMzguMy00OC41IDY5LjItODYuNyA4Ni43em0yNzcuMiA3NC43Yy0zLjctOC0xMy4yLTExLjYtMjEuMi03LjljLTQ1LjIgMjAuOC04MS43IDU3LjItMTAyLjUgMTAyLjVjLTMuNyA4LS4yIDE3LjUgNy45IDIxLjJzMTcuNSAuMiAyMS4yLTcuOWMxNy42LTM4LjMgNDguNS02OS4yIDg2LjctODYuN2M4LTMuNyAxMS42LTEzLjIgNy45LTIxLjJ6XCJdXG59O1xudmFyIGZhQmFzZWJhbGxCYWxsID0gZmFCYXNlYmFsbDtcbnZhciBmYUpldEZpZ2h0ZXJVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqZXQtZmlnaHRlci11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUxOFwiLCBcIk0yNzAuNyA5LjdDMjY4LjIgMy44IDI2Mi40IDAgMjU2IDBzLTEyLjIgMy44LTE0LjcgOS43TDE5Ny4yIDExMi42Yy0zLjQgOC01LjIgMTYuNS01LjIgMjUuMnY3N2wtMTQ0IDg0VjI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY1NiAzMiAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0di04SDE5MnYzMi43TDEzMy41IDQ2OGMtMy41IDMtNS41IDcuNC01LjUgMTJ2MTZjMCA4LjggNy4yIDE2IDE2IDE2aDk2VjQ0OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0aDk2YzguOCAwIDE2LTcuMiAxNi0xNlY0ODBjMC00LjYtMi05LTUuNS0xMkwzMjAgNDE2LjdWMzg0SDQ2NHY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzY4IDMzNiAyODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTguOGwtMTQ0LTg0di03N2MwLTguNy0xLjgtMTcuMi01LjItMjUuMkwyNzAuNyA5Ljd6XCJdXG59O1xudmFyIGZhRGlhZ3JhbVByb2plY3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlhZ3JhbS1wcm9qZWN0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJwcm9qZWN0LWRpYWdyYW1cIl0sIFwiZjU0MlwiLCBcIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2SDM4NFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE2MEgxOTJ2MTZjMCAxLjctLjEgMy40LS4zIDVMMjcyIDI4OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMzNmMwLTEuNyAuMS0zLjQgLjMtNUwxNDQgMjI0SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MHpcIl1cbn07XG52YXIgZmFQcm9qZWN0RGlhZ3JhbSA9IGZhRGlhZ3JhbVByb2plY3Q7XG52YXIgZmFDb3B5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvcHknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwYzVcIiwgXCJNMjA4IDBIMzMyLjFjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDhjMC0yNi41IDIxLjUtNDggNDgtNDh6TTQ4IDEyOGg4MHY2NEg2NFY0NDhIMjU2VjQxNmg2NHY0OGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYVZvbHVtZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm9sdW1lLW11dGVcIiwgXCJ2b2x1bWUtdGltZXNcIl0sIFwiZjZhOVwiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQyNSAxNjdsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbnZhciBmYVZvbHVtZU11dGUgPSBmYVZvbHVtZVhtYXJrO1xudmFyIGZhVm9sdW1lVGltZXMgPSBmYVZvbHVtZVhtYXJrO1xudmFyIGZhSGFuZFNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BhcmtsZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNWRcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzMjMuMWMtMTEuOSA0LjgtMjEuMyAxNC45LTI1IDI3LjhsLTguOSAzMS4yTDQ3OC45IDM5MUM0NjAuNiAzOTYuMyA0NDggNDEzIDQ0OCA0MzJjMCAxOC45IDEyLjUgMzUuNiAzMC42IDQwLjlDNDQ4LjQgNDk3LjQgNDA5LjkgNTEyIDM2OCA1MTJIMzQ4LjhjLTU5LjYgMC0xMTYuOS0yMi45LTE2MC02NEw3Ni40IDM0MWMtMTYtMTUuMi0xNi42LTQwLjYtMS40LTU2LjZzNDAuNi0xNi42IDU2LjYtMS40bDYwLjUgNTcuNmMwLTEuNS0uMS0zLjEtLjEtNC42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZMMjg4IDM1MmwtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN0wyODggMzg0bDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNkwzMjAgMzg0bDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdMMzIwIDM1MmwtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2bC0xMy44IDQ4LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2bC00OC4zLTEzLjhjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDhsMTMuOC00OC4zYzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6XCJdXG59O1xudmFyIGZhR3JpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJncmlwLWhvcml6b250YWxcIl0sIFwiZjU4ZFwiLCBcIk0xMjggMTM2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDk2QzE3LjkgOTYgMCAxMTMuOSAwIDEzNmwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwSDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6bTAgMTkyYzAtMjIuMS0xNy45LTQwLTQwLTQwSDQwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwSDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjMyOHptMzItMTkydjQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjEzNmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTI4OCAzMjhjMC0yMi4xLTE3LjktNDAtNDAtNDBIMjAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjMyOHptMzItMTkydjQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjEzNmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTQ0OCAzMjhjMC0yMi4xLTE3LjktNDAtNDAtNDBIMzYwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHY0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGg0OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYzMjh6XCJdXG59O1xudmFyIGZhR3JpcEhvcml6b250YWwgPSBmYUdyaXA7XG52YXIgZmFTaGFyZUZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcmUtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgXCJzaGFyZS1zcXVhcmVcIl0sIFwiZjE0ZFwiLCBcIk0zNTIgMjI0SDMwNS41Yy00NSAwLTgxLjUgMzYuNS04MS41IDgxLjVjMCAyMi4zIDEwLjMgMzQuMyAxOS4yIDQwLjVjNi44IDQuNyAxMi44IDEyIDEyLjggMjAuM2MwIDkuOC04IDE3LjgtMTcuOCAxNy44aC0yLjVjLTIuNCAwLTQuOC0uNC03LjEtMS40QzIxMC44IDM3NC44IDEyOCAzMzMuNCAxMjggMjQwYzAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0aDgwVjM0LjdDMzUyIDE1LjUgMzY3LjUgMCAzODYuNyAwYzguNiAwIDE2LjggMy4yIDIzLjIgOC45TDU0OC4xIDEzMy4zYzcuNiA2LjggMTEuOSAxNi41IDExLjkgMjYuN3MtNC4zIDE5LjktMTEuOSAyNi43bC0xMzkgMTI1LjFjLTUuOSA1LjMtMTMuNSA4LjItMjEuNCA4LjJIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyMjR6TTgwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNkg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwSDgwYy00NC4yIDAtODAtMzUuOC04MC04MFYxMTJDMCA2Ny44IDM1LjggMzIgODAgMzJoNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODB6XCJdXG59O1xudmFyIGZhU2hhcmVTcXVhcmUgPSBmYVNoYXJlRnJvbVNxdWFyZTtcbnZhciBmYUNoaWxkQ29tYmF0YW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLWNvbWJhdGFudCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiY2hpbGQtcmlmbGVcIl0sIFwiZTRlMFwiLCBcIk0xNzYgMTI4QTY0IDY0IDAgMSAwIDE3NiAwYTY0IDY0IDAgMSAwIDAgMTI4em0tOCAzNTJWMzUyaDE2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMwMC41TDI2MC45IDMyMWM5LjQgMTUgMjkuMiAxOS40IDQ0LjEgMTBzMTkuNC0yOS4yIDEwLTQ0LjFsLTUxLjctODIuMWMtMTcuNi0yNy45LTQ4LjMtNDQuOS04MS4yLTQ0LjlIMTY5LjhjLTMzIDAtNjMuNyAxNi45LTgxLjIgNDQuOUwzNi45IDI4N2MtOS40IDE1LTQuOSAzNC43IDEwIDQ0LjFzMzQuNyA0LjkgNDQuMS0xMEwxMDQgMzAwLjVWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTQ0OCAwSDQzMiA0MTZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZWMTMyLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43djMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMlYzNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2aDU5LjVjMTAuNCAwIDE4LTkuOCAxNS41LTE5LjlMNDg0IDQwMGg0NGM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg0ODBWMzI1LjNsNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4yVjIwOGMwLTguOC03LjItMTYtMTYtMTZINTEyYy04LjggMC0xNiA3LjItMTYgMTZ2NTZsLTE2IDUuM1YxNjBjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdWMTZjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNoaWxkUmlmbGUgPSBmYUNoaWxkQ29tYmF0YW50O1xudmFyIGZhR3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2d1bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE5YlwiLCBcIk01MjggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2OEgzMkMxNC4zIDY0IDAgNzguMyAwIDk2VjIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MmMyMC44IDAgMzYuMSAxOS42IDMxIDM5LjhMMzMgNDQwLjJjLTIuNCA5LjYtLjIgMTkuNyA1LjggMjcuNVM1NC4xIDQ4MCA2NCA0ODBoOTZjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUySDMyMS40YzIzLjcgMCA0NC44LTE0LjkgNTIuNy0zNy4yTDQwMC45IDI0MEg0MzJjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMNDc3LjMgMjA4SDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkg1MjhWNTZ6TTMyMS40IDMwNEgyMjlsMTYtNjRoMTA1bC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4SDQ2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFTcXVhcmVQaG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcGhvbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBob25lLXNxdWFyZVwiXSwgXCJmMDk4XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptOTAuNyA5Ni43YzkuNy0yLjYgMTkuOSAyLjMgMjMuNyAxMS42bDIwIDQ4YzMuNCA4LjIgMSAxNy42LTUuOCAyMy4yTDE2OCAyMzEuN2MxNi42IDM1LjIgNDUuMSA2My43IDgwLjMgODAuM2wyMC4yLTI0LjdjNS42LTYuOCAxNS05LjIgMjMuMi01LjhsNDggMjBjOS4zIDMuOSAxNC4yIDE0IDExLjYgMjMuN2wtMTIgNDRDMzM2LjkgMzc4IDMyOSAzODQgMzIwIDM4NEMxOTYuMyAzODQgOTYgMjgzLjcgOTYgMTYwYzAtOSA2LTE2LjkgMTQuNy0xOS4zbDQ0LTEyelwiXVxufTtcbnZhciBmYVBob25lU3F1YXJlID0gZmFTcXVhcmVQaG9uZTtcbnZhciBmYVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1cycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMTMzLCA2MTU0MywgXCJhZGRcIl0sIFwiMmJcIiwgXCJNMjU2IDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjIyNEg0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgxOTJWNDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNTZWODB6XCJdXG59O1xudmFyIGZhQWRkID0gZmFQbHVzO1xudmFyIGZhRXhwYW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4cGFuZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjA2NVwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFYzNTJ6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyelwiXVxufTtcbnZhciBmYUNvbXB1dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXB1dGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGU1XCIsIFwiTTM4NCA5NlYzMjBINjRMNjQgOTZIMzg0ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEgxODEuM2wtMTAuNyAzMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjc3LjNsLTEwLjctMzJIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em00NjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUyOHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINTQ0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tMTYgODBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDU0NGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3htYXJrJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDczLCAxMDAwNSwgMTAwMDYsIDEwMDYwLCAyMTUsIFwiY2xvc2VcIiwgXCJtdWx0aXBseVwiLCBcInJlbW92ZVwiLCBcInRpbWVzXCJdLCBcImYwMGRcIiwgXCJNMzQyLjYgMTUwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDIxMC43IDg2LjYgMTA1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ni43IDI1NiA0MS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAzMDEuMyAyOTcuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy4zIDI1NiAzNDIuNiAxNTAuNnpcIl1cbn07XG52YXIgZmFDbG9zZSA9IGZhWG1hcms7XG52YXIgZmFNdWx0aXBseSA9IGZhWG1hcms7XG52YXIgZmFSZW1vdmUgPSBmYVhtYXJrO1xudmFyIGZhVGltZXMgPSBmYVhtYXJrO1xudmFyIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy11cC1kb3duLWxlZnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93c1wiXSwgXCJmMDQ3XCIsIFwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjRWMjI0SDEwOS4zbDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40SDIyNFY0MDIuN2wtOS40LTkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjRWMjg4SDQwMi43bC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNEgyODhWMTA5LjNsOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpcIl1cbn07XG52YXIgZmFBcnJvd3MgPSBmYUFycm93c1VwRG93bkxlZnRSaWdodDtcbnZhciBmYUNoYWxrYm9hcmRVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYWxrYm9hcmQtdXNlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY2hhbGtib2FyZC10ZWFjaGVyXCJdLCBcImY1MWNcIiwgXCJNMTYwIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzM2LjhjLTExLjgtMjUuNS0yOS45LTQ3LjUtNTIuNC02NEgzODRWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjMyaDY0VjY0TDIyNCA2NHY0OS4xQzIwNS4yIDEwMi4yIDE4My4zIDk2IDE2MCA5NlY2NHptMCA2NGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNMTMzLjMgMzUyaDUzLjNDMjYwLjMgMzUyIDMyMCA0MTEuNyAzMjAgNDg1LjNjMCAxNC43LTExLjkgMjYuNy0yNi43IDI2LjdIMjYuN0MxMS45IDUxMiAwIDUwMC4xIDAgNDg1LjNDMCA0MTEuNyA1OS43IDM1MiAxMzMuMyAzNTJ6XCJdXG59O1xudmFyIGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyO1xudmFyIGZhUGVzb1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVzby1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMjIyXCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHY2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNjR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoODBjNjguNCAwIDEyNy43LTM5IDE1Ni44LTk2SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmgtLjdjLjUtNS4zIC43LTEwLjYgLjctMTZzLS4yLTEwLjctLjctMTZoLjdjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzMyLjhDMzAzLjcgNzEgMjQ0LjQgMzIgMTc2IDMySDY0em0xOTAuNCA5Nkg5NlY5Nmg4MGMzMC41IDAgNTguMiAxMi4yIDc4LjQgMzJ6TTk2IDE5MkgyODYuOWMuNyA1LjIgMS4xIDEwLjYgMS4xIDE2cy0uNCAxMC44LTEuMSAxNkg5NlYxOTJ6bTE1OC40IDk2Yy0yMC4yIDE5LjgtNDcuOSAzMi03OC40IDMySDk2VjI4OEgyNTQuNHpcIl1cbn07XG52YXIgZmFCdWlsZGluZ1NoaWVsZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1zaGllbGQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZDhcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjIwN2wtNDIuNCAxN0gzMDQgMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2MzIgMjQuMlYzMDRjMCAuOSAuMSAxLjcgLjIgMi42YzIuMyA1OC4xIDI0LjEgMTQ0LjggOTguNyAyMDEuNWMtNS44IDIuNS0xMi4yIDMuOS0xOC45IDMuOUgyNDBWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTY0IDExMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDE3NnptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjMuMSAyMjUuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOFY0NjEuN2M2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl1cbn07XG52YXIgZmFCYWJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhYnknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3N2NcIiwgXCJNMTUyIDg4YTcyIDcyIDAgMSAxIDE0NCAwQTcyIDcyIDAgMSAxIDE1MiA4OHpNMzkuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMMTMxLjggMTYyYzI2LjggMTkuNSA1OS4xIDMwIDkyLjIgMzBzNjUuNC0xMC41IDkyLjItMzBsMzYuMi0yNi40YzE3LjktMTMgNDIuOS05IDU1LjkgOC44czkgNDIuOS04LjggNTUuOWwtMzYuMiAyNi40Yy0xMy42IDkuOS0yOC4xIDE4LjItNDMuMyAyNVYyODhIMTI4VjI1MS43Yy0xNS4yLTYuNy0yOS43LTE1LjEtNDMuMy0yNUw0OC41IDIwMC4zYy0xNy45LTEzLTIxLjgtMzgtOC44LTU1Ljl6bTg5LjggMTg0LjhsNjAuNiA1My0yNiAzNy4yIDI0LjMgMjQuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtNDgtNDhDNzAgNDM4LjYgNjguMSA0MTcgNzkuMiA0MDEuMWw1MC4yLTcxLjh6bTEyOC41IDUzbDYwLjYtNTMgNTAuMiA3MS44YzExLjEgMTUuOSA5LjIgMzcuNS00LjUgNTEuMmwtNDggNDhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42TDI4NCA0MTkuNGwtMjYtMzcuMnpcIl1cbn07XG52YXIgZmFVc2Vyc0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5MlwiLCBcIk0yMTEuMiA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTMyIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4NS42YzEwLjEtMzkuNCAzOC42LTcxLjUgNzUuOC04Ni42Yy05LjctNi0yMS4yLTkuNC0zMy40LTkuNEg5NmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTQ2MS42IDMySDU3NmMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTM1LjMtMjguNy02NC02NC02NEg0NDhjLTExLjcgMC0yMi43IDMuMS0zMi4xIDguNmMzOC4xIDE0LjggNjcuNCA0Ny4zIDc3LjcgODcuNHpNMzkxLjIgMjI2LjRjLTYuOS0xLjYtMTQuMi0yLjQtMjEuNi0yLjRoLTk2Yy04LjUgMC0xNi43IDEuMS0yNC41IDMuMWMtMzAuOCA4LjEtNTUuNiAzMS4xLTY2LjEgNjAuOWMtMy41IDEwLTUuNSAyMC44LTUuNSAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMC0xMS4yLTEuOS0yMi01LjUtMzJjLTEwLjgtMzAuNy0zNi44LTU0LjItNjguOS02MS42ek01NjMuMiA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTMyMS42IDE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFRdW90ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVvdGUtbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzgyMjAsIFwicXVvdGUtbGVmdC1hbHRcIl0sIFwiZjEwZFwiLCBcIk0wIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2aDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJoLThjLTMwLjkgMC01NiAyNS4xLTU2IDU2djhoNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjMyMCAyODggMjE2em0yNTYgMGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyaC04Yy0zMC45IDAtNTYgMjUuMS01NiA1NnY4aDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDMyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzIwIDI4OCAyMTZ6XCJdXG59O1xudmFyIGZhUXVvdGVMZWZ0QWx0ID0gZmFRdW90ZUxlZnQ7XG52YXIgZmFUcmFjdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWN0b3InLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2NjhdLCBcImY3MjJcIiwgXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjY2LjNjMjYuMiAwIDQ5LjcgMTUuOSA1OS40IDQwLjJMMzczLjcgMTYwSDQ4MFYxMjYuMmMwLTI0LjggNS44LTQ5LjMgMTYuOS03MS42bDIuNS01YzcuOS0xNS44IDI3LjEtMjIuMiA0Mi45LTE0LjNzMjIuMiAyNy4xIDE0LjMgNDIuOWwtMi41IDVjLTYuNyAxMy4zLTEwLjEgMjgtMTAuMSA0Mi45VjE2MGg1NmMyMi4xIDAgNDAgMTcuOSA0MCA0MHY0NS40YzAgMTYuNS04LjUgMzEuOS0yMi42IDQwLjdsLTQzLjMgMjcuMWMtMTQuMi01LjktMjkuOC05LjItNDYuMS05LjJjLTM5LjMgMC03NC4xIDE4LjktOTYgNDhIMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMyaC04LjJjLTEuNyA0LjgtMy43IDkuNS01LjggMTQuMWw1LjggNS44YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0yMi42IDIyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01LjgtNS44Yy00LjYgMi4yLTkuMyA0LjEtMTQuMSA1LjhWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LTguMmMtNC44LTEuNy05LjUtMy43LTE0LjEtNS44bC01LjggNS44Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0MC4yIDQ0OS4xYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w1LjgtNS44Yy0yLjItNC42LTQuMS05LjMtNS44LTE0LjFIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg4LjJjMS43LTQuOCAzLjctOS41IDUuOC0xNC4xbC01LjgtNS44Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wyMi42LTIyLjZjOS05IDIxLjktMTEuNSAzMy4xLTcuNlYxOTIgMTYwIDY0em0xNzAuMyAwSDE2MHY5NmgzMkgzMDQuN0wyNjYuMyA2NHpNMTc2IDI1NmE4MCA4MCAwIDEgMCAwIDE2MCA4MCA4MCAwIDEgMCAwLTE2MHpNNTI4IDQ0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAgNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4YzAtMjkuOCAxNC44LTU2LjEgMzcuNC03MmMxNC4zLTEwLjEgMzEuOC0xNiA1MC42LTE2YzIuNyAwIDUuMyAuMSA3LjkgLjNjNDQuOSA0IDgwLjEgNDEuNyA4MC4xIDg3LjdjMCA0OC42LTM5LjQgODgtODggODh6XCJdXG59O1xudmFyIGZhVHJhc2hBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoLWFycm93LXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0cmFzaC1yZXN0b3JlXCJdLCBcImY4MjlcIiwgXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNkwzOTQuOCA0NjdjLTEuNiAyNS4zLTIyLjYgNDUtNDcuOSA0NUgxMDEuMWMtMjUuMyAwLTQ2LjMtMTkuNy00Ny45LTQ1TDMyIDEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdXG59O1xudmFyIGZhVHJhc2hSZXN0b3JlID0gZmFUcmFzaEFycm93VXA7XG52YXIgZmFBcnJvd0Rvd25VcExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi11cC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGIwXCIsIFwiTTE1MC42IDUwMi42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuN1YyODhINDE2VjI3MmMwLTE3LjIgMy45LTMzLjUgMTAuOC00OEgzNTJWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMTA5LjNWMjI0bC0xMjggMEg5NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NlY0MDIuN0w1NC42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHpNMTYwIDE5MlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjR6TTI4OCAzMjBWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzIwSDI4OHptMjQwLTgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUxpbmVzTGVhbmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaW5lcy1sZWFuaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTFlXCIsIFwiTTE5MC40IDc0LjFjNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTEyOCAzODRjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMTI4LTM4NHptNzAuOS00MS43Yy0xNy40LTIuOS0zMy45IDguOS0zNi44IDI2LjNsLTY0IDM4NGMtMi45IDE3LjQgOC45IDMzLjkgMjYuMyAzNi44czMzLjktOC45IDM2LjgtMjYuM2w2NC0zODRjMi45LTE3LjQtOC45LTMzLjktMjYuMy0zNi44ek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbnZhciBmYVJ1bGVyQ29tYmluZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVsZXItY29tYmluZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NDZcIiwgXCJNLjIgNDY4LjlDMi43IDQ5My4xIDIzLjEgNTEyIDQ4IDUxMmw5NiAwIDMyMCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzY4bDAgOTZjMCAxLjcgLjEgMy4zIC4yIDQuOXpcIl1cbn07XG52YXIgZmFDb3B5cmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29weXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgXCJmMWY5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xOTkuNCAzMTIuNmMzMS4yIDMxLjIgODEuOSAzMS4yIDExMy4xIDBjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy01MCA1MC0xMzEgNTAtMTgxIDBzLTUwLTEzMSAwLTE4MXMxMzEtNTAgMTgxIDBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMzEuMi0zMS4yLTgxLjktMzEuMi0xMTMuMSAwcy0zMS4yIDgxLjkgMCAxMTMuMXpcIl1cbn07XG52YXIgZmFFcXVhbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjI3NjRdLCBcIjNkXCIsIFwiTTQ4IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0OHpcIl1cbn07XG52YXIgZmFCbGVuZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JsZW5kZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1MTdcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBoNjQgMzJINDcwLjFjMjEuMSAwIDM2LjQgMjAuMSAzMC45IDQwLjRMNDk0LjUgNjRIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ4NS44bC0xNy41IDY0SDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0NTkuNmwtMTcuNSA2NEgzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoOTcuNUw0MTYgMzUySDE2MGwtOC43LTk2SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMTQ1LjUgMTkyTDEzMy44IDY0SDY0VjE5Mmg4MS41ek0xNDQgMzg0SDQzMmMyNi41IDAgNDggMjEuNSA0OCA0OHYzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEgxNDRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHptMTQ0IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFUZWV0aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZWV0aCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjYyZVwiLCBcIk0wIDEyOEMwIDc1IDQzIDMyIDk2IDMySDQ4MGM1MyAwIDk2IDQzIDk2IDk2VjM4NGMwIDUzLTQzIDk2LTk2IDk2SDk2Yy01MyAwLTk2LTQzLTk2LTk2VjEyOHptMTc2IDQ4djU2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE3NmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTc2LTQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDIwOHYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTk2IDM4NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em04MC00OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4VjMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyMDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0em0xNzYgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MjRjMCAyNi41IDIxLjUgNDggNDggNDh6bTgwLTE3NnYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6bTQ4IDE3NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINDU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl1cbn07XG52YXIgZmFTaGVrZWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoZWtlbC1zaWduJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MiwgXCJpbHNcIiwgXCJzaGVrZWxcIiwgXCJzaGVxZWxcIiwgXCJzaGVxZWwtc2lnblwiXSwgXCJmMjBiXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZIMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgzMnpNMzIwIDQ4MGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMTkyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwelwiXVxufTtcbnZhciBmYUlscyA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZWtlbCA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZXFlbCA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZXFlbFNpZ24gPSBmYVNoZWtlbFNpZ247XG52YXIgZmFNYXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sIFwiZjI3OVwiLCBcIk0zODQgNDc2LjFMMTkyIDQyMS4yVjM1LjlMMzg0IDkwLjhWNDc2LjF6bTMyLTEuMlY4OC40TDU0My4xIDM3LjVjMTUuOC02LjMgMzIuOSA1LjMgMzIuOSAyMi4zVjM5NC42YzAgOS44LTYgMTguNi0xNS4xIDIyLjNMNDE2IDQ3NC44ek0xNS4xIDk1LjFMMTYwIDM3LjJWNDIzLjZMMzIuOSA0NzQuNUMxNy4xIDQ4MC44IDAgNDY5LjIgMCA0NTIuMlYxMTcuNGMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zelwiXVxufTtcbnZhciBmYVJvY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2NrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMzVcIiwgXCJNMTU2LjYgMzg0LjlMMTI1LjcgMzU0Yy04LjUtOC41LTExLjUtMjAuOC03LjctMzIuMmMzLTguOSA3LTIwLjUgMTEuOC0zMy44TDI0IDI4OGMtOC42IDAtMTYuNi00LjYtMjAuOS0xMi4xcy00LjItMTYuNyAuMi0yNC4xbDUyLjUtODguNWMxMy0yMS45IDM2LjUtMzUuMyA2MS45LTM1LjNsODIuMyAwYzIuNC00IDQuOC03LjcgNy4yLTExLjNDMjg5LjEtNC4xIDQxMS4xLTguMSA0ODMuOSA1LjNjMTEuNiAyLjEgMjAuNiAxMS4yIDIyLjggMjIuOGMxMy40IDcyLjkgOS4zIDE5NC44LTExMS40IDI3Ni43Yy0zLjUgMi40LTcuMyA0LjgtMTEuMyA3LjJ2ODIuM2MwIDI1LjQtMTMuNCA0OS0zNS4zIDYxLjlsLTg4LjUgNTIuNWMtNy40IDQuNC0xNi42IDQuNS0yNC4xIC4ycy0xMi4xLTEyLjItMTIuMS0yMC45VjM4MC44Yy0xNC4xIDQuOS0yNi40IDguOS0zNS43IDExLjljLTExLjIgMy42LTIzLjQgLjUtMzEuOC03Ljh6TTM4NCAxNjhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbnZhciBmYVBob3RvRmlsbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG90by1maWxtJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwaG90by12aWRlb1wiXSwgXCJmODdjXCIsIFwiTTI1NiAwSDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMjU2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDc2IDEwNi43QzQ3MS41IDEwMCA0NjQgOTYgNDU2IDk2cy0xNS41IDQtMjAgMTAuN2wtNTYgODRMMzYyLjcgMTY5Yy00LjYtNS43LTExLjUtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRzMTIuNCAxMy42IDIxLjYgMTMuNmg4MCA0OEg1NTJjOC45IDAgMTctNC45IDIxLjItMTIuN3MzLjctMTcuMy0xLjItMjQuNmwtOTYtMTQ0ek0zMzYgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNjQgMTI4aDk2VjM4NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzg0SDUxMnY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0em04IDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCA4LjggNy4yIDE2IDE2IDE2SDg4YzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDcyem0wIDEwNGMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzAgOC44IDcuMiAxNiAxNiAxNkg4OGM4LjggMCAxNi03LjIgMTYtMTZWMzEyYzAtOC44LTcuMi0xNi0xNi0xNkg3MnptMCAxMDRjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZIODhjOC44IDAgMTYtNy4yIDE2LTE2VjQxNmMwLTguOC03LjItMTYtMTYtMTZINzJ6bTMzNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMTZjOC44IDAgMTYtNy4yIDE2LTE2VjQxNmMwLTguOC03LjItMTYtMTYtMTZINDI0Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUGhvdG9WaWRlbyA9IGZhUGhvdG9GaWxtO1xudmFyIGZhRm9sZGVyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjVkXCIsIFwiTTQ0OCA0ODBINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDE5MmMyMC4xIDAgMzkuMSA5LjUgNTEuMiAyNS42bDE5LjIgMjUuNmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDE4NHpcIl1cbn07XG52YXIgZmFTdG9yZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9yZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU0ZVwiLCBcIk01NDcuNiAxMDMuOEw0OTAuMyAxMy4xQzQ4NS4yIDUgNDc2LjEgMCA0NjYuNCAwSDEwOS42Qzk5LjkgMCA5MC44IDUgODUuNyAxMy4xTDI4LjMgMTAzLjhjLTI5LjYgNDYuOC0zLjQgMTExLjkgNTEuOSAxMTkuNGM0IC41IDguMSAuOCAxMi4xIC44YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjIgMCA0OS4zLTExLjQgNjUuMi0yOWMxNiAxNy42IDM5LjEgMjkgNjUuMiAyOWM0LjEgMCA4LjEtLjMgMTIuMS0uOGM1NS41LTcuNCA4MS44LTcyLjUgNTIuMS0xMTkuNHpNNDk5LjcgMjU0LjlsLS4xIDBjLTUuMyAuNy0xMC43IDEuMS0xNi4yIDEuMWMtMTIuNCAwLTI0LjMtMS45LTM1LjQtNS4zVjM4NEgxMjhWMjUwLjZjLTExLjIgMy41LTIzLjIgNS40LTM1LjYgNS40Yy01LjUgMC0xMS0uNC0xNi4zLTEuMWwtLjEgMGMtNC4xLS42LTguMS0xLjMtMTItMi4zVjM4NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMzg0IDI1Mi42Yy00IDEtOCAxLjgtMTIuMyAyLjN6XCJdXG59O1xudmFyIGZhQXJyb3dUcmVuZFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXRyZW5kLXVwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDk4XCIsIFwiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMDUuM0wzNDIuNiAzNzQuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMMTkyIDI2OS4zIDU0LjYgNDA2LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzIwIDMwNi43IDQ2Ni43IDE2MEgzODR6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVlXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek01NzYgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFTaWduSGFuZ2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaWduLWhhbmdpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ25cIl0sIFwiZjRkOVwiLCBcIk05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0bDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNTIgMFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTI4SDMyQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0SDY0VjMyQzY0IDE0LjMgNzguMyAwIDk2IDB6bTk2IDE2MEg0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVNpZ24gPSBmYVNpZ25IYW5naW5nO1xudmFyIGZhQmV6aWVyQ3VydmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmV6aWVyLWN1cnZlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTViXCIsIFwiTTI5NiAxMzZWODhoNDh2NDhIMjk2ek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djRIMTIxLjZDMTExLjIgNjIuNyA4OS4zIDQ4IDY0IDQ4QzI4LjcgNDggMCA3Ni43IDAgMTEyczI4LjcgNjQgNjQgNjRjMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2aDY2LjljLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwSDgwYy0yNi41IDAtNDggMjEuNS00OCA0OHY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC0yNi41LTIxLjUtNDgtNDgtNDhoLTMuM2M1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMWM4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xaDY0YzE2LjYgMCAzMS4xLTguNCAzOS44LTIxLjFjNTkgMjUuNyAxMDEuNiA4Mi4xIDEwNy41IDE0OS4xSDQ5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4aC00LjVjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwaDY2LjljMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2SDQwMFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgyODh6TTg4IDM3Nmg0OHY0OEg4OFYzNzZ6bTQxNiA0OFYzNzZoNDh2NDhINTA0elwiXVxufTtcbnZhciBmYUJlbGxTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sIFwiZjFmNlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC05MC4yLTcwLjdjLjItLjQgLjQtLjkgLjYtMS4zYzUuMi0xMS41IDMuMS0yNS01LjMtMzQuNGwtNy40LTguM0M0OTcuMyAzMTkuMiA0ODAgMjczLjkgNDgwIDIyNi44VjIwOGMwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY1MS4yYy00Mi42IDguNi03OSAzNC4yLTEwMiA2OS4zTDM4LjggNS4xek00MDYuMiA0MTZMMTYwIDIyMi4xdjQuOGMwIDQ3LTE3LjMgOTIuNC00OC41IDEyNy42bC03LjQgOC4zYy04LjQgOS40LTEwLjQgMjIuOS01LjMgMzQuNFMxMTUuNCA0MTYgMTI4IDQxNkg0MDYuMnptLTQwLjkgNzcuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zSDMyMCAyNTZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNzMjguMyAxOC43IDQ1LjMgMTguN3MzMy4zLTYuNyA0NS4zLTE4Ljd6XCJdXG59O1xudmFyIGZhVGFibGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxldCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1widGFibGV0LWFuZHJvaWRcIl0sIFwiZjNmYlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xNzYgNDMyaDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFUYWJsZXRBbmRyb2lkID0gZmFUYWJsZXQ7XG52YXIgZmFTY2hvb2xGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjaG9vbC1mbGFnJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTZlXCIsIFwiTTI4OCAwSDQwMGM4LjggMCAxNiA3LjIgMTYgMTZWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDMyMC43bDg5LjYgNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMzZWNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4VjUxMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDE2NS43TDI1NiA5NS41VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem00OCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem0zNjggMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDQ2NGMtOC44IDAtMTYgNy4yLTE2IDE2ek04MCAzNTJjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZIODB6bTM4NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDQ2NHpcIl1cbn07XG52YXIgZmFGaWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NzVcIiwgXCJNODYuNiA5LjRDNzQuMS0zLjEgNTMuOS0zLjEgNDEuNCA5LjRzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2IDMwLjYgMjI4LjFjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOEwxNDguMSA0ODEuNGMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBMNDc0LjMgMjkwLjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDMyMi45IDM3LjdjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMEwxNjggOTAuNyA4Ni42IDkuNHpNMTY4IDE4MS4zbDQ5LjQgNDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNmw1My4xLTUzLjFjMy4xLTMuMSA4LjItMy4xIDExLjMgMEw0MjkuMSAyMzQuM2MzLjEgMy4xIDMuMSA4LjIgMCAxMS4zTDM4Ni43IDI4OEg2Ny41YzEuNC01LjQgNC4yLTEwLjQgOC40LTE0LjZMMTY4IDE4MS4zelwiXVxufTtcbnZhciBmYUFuZ2xlVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtdXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4OTYzXSwgXCJmMTA2XCIsIFwiTTIwMS40IDEzNy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjI0IDIwNS4zIDg2LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjB6XCJdXG59O1xudmFyIGZhRHJ1bXN0aWNrQml0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcnVtc3RpY2stYml0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZkN1wiLCBcIk0xNjAgMjY1LjJjMCA4LjUtMy40IDE2LjYtOS40IDIyLjZsLTI2LjggMjYuOGMtMTIuMyAxMi4zLTMyLjUgMTEuNC00OS40IDcuMkM2OS44IDMyMC42IDY1IDMyMCA2MCAzMjBjLTMzLjEgMC02MCAyNi45LTYwIDYwczI2LjkgNjAgNjAgNjBjNi4zIDAgMTIgNS43IDEyIDEyYzAgMzMuMSAyNi45IDYwIDYwIDYwczYwLTI2LjkgNjAtNjBjMC01LS42LTkuOC0xLjgtMTQuNWMtNC4yLTE2LjktNS4yLTM3LjEgNy4yLTQ5LjRsMjYuOC0yNi44YzYtNiAxNC4xLTkuNCAyMi42LTkuNEgzMzZjNi4zIDAgMTIuNC0uMyAxOC41LTFjMTEuOS0xLjIgMTYuNC0xNS41IDEwLjgtMjZjLTguNS0xNS44LTEzLjMtMzMuOC0xMy4zLTUzYzAtNjEuOSA1MC4xLTExMiAxMTItMTEyYzggMCAxNS43IC44IDIzLjIgMi40YzExLjcgMi41IDI0LjEtNS45IDIyLTE3LjZDNDk0LjUgNjIuNSA0MjIuNSAwIDMzNiAwQzIzOC44IDAgMTYwIDc4LjggMTYwIDE3NnY4OS4yelwiXVxufTtcbnZhciBmYUhvbGx5QmVycnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG9sbHktYmVycnknLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YWFcIiwgXCJNMjU2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjc2LjggMzgzLjhjMSAuMSAyLjEgLjIgMy4yIC4yYzM5LjggMCA3MiAzMi4yIDcyIDcydjIyLjdjMCAxNi40IDE2IDI3LjkgMzEuNiAyMi44bDEyLjgtNC4zYzE4LTYgMzcuMy02LjUgNTUuNi0xLjVsMTkuNCA1LjNjMTcuOSA0LjkgMzQuNC0xMS42IDI5LjUtMjkuNUw0OTUuNiA0NTJjLTUtMTguMy00LjQtMzcuNiAxLjUtNTUuNmw0LjMtMTIuOGM1LjItMTUuNS02LjQtMzEuNi0yMi44LTMxLjZjLTM0LjYgMC02Mi43LTI4LjEtNjIuNy02Mi43di0zMmMwLTE2LjQtMTYtMjcuOS0zMS42LTIyLjhsLTEyLjggNC4zYy0xOCA2LTM3LjMgNi41LTU1LjYgMS41bC0yOS42LTguMWMtMi45LS44LTUuOS0xLTguNy0uN2M0LjIgOS43IDUuOCAyMC44IDMuNyAzMi4zTDI3NSAyOTguN2MtMS41IDguNC0xLjQgMTcgLjUgMjUuM2w1LjMgMjMuOWMyLjggMTIuNyAxLjEgMjUuMi00IDM1Ljl6TTEyNy42IDIzNC41Yy0xNS41LTUuMi0zMS42IDYuNC0zMS42IDIyLjh2MzJDOTYgMzIzLjkgNjcuOSAzNTIgMzMuMyAzNTJjLTE2LjQgMC0yNy45IDE2LTIyLjggMzEuNmw0LjMgMTIuOGM2IDE4IDYuNSAzNy4zIDEuNSA1NS42bC01LjMgMTkuNEM2LjIgNDg5LjQgMjIuNiA1MDUuOCA0MC41IDUwMUw2MCA0OTUuNmMxOC4zLTUgMzcuNi00LjUgNTUuNiAxLjVsMTIuOCA0LjNjMTUuNSA1LjIgMzEuNi02LjQgMzEuNi0yMi44di0zMmMwLTM0LjYgMjguMS02Mi43IDYyLjctNjIuN2MxNi40IDAgMjcuOS0xNiAyMi44LTMxLjZsLTQuMy0xMi44Yy02LTE4LTYuNS0zNy4zLTEuNS01NS42bDUuMy0xOS40YzQuOS0xNy45LTExLjYtMzQuNC0yOS41LTI5LjVMMTk2IDI0MC40Yy0xOC4zIDUtMzcuNiA0LjQtNTUuNi0xLjVsLTEyLjgtNC4zek0zODQgMTQ0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhQ2hldnJvbkxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hldnJvbi1sZWZ0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMV0sIFwiZjA1M1wiLCBcIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyNDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyelwiXVxufTtcbnZhciBmYUJhY3RlcmlhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY3RlcmlhJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDU5XCIsIFwiTTMwNC45IC43Yy05LjYtMi43LTE5LjUgMi44LTIyLjMgMTIuNGwtNC4zIDE1LjJjLTguMy0uNi0xNi44IDAtMjUuMiAxLjljLTcuMyAxLjctMTQuMyAzLjUtMjEuMSA1LjVsLTUuNS0xMi43Yy0zLjktOS4xLTE0LjUtMTMuNC0yMy42LTkuNXMtMTMuNCAxNC41LTkuNSAyMy42bDQuNCAxMC40Yy0xNi42IDYuNy0zMS43IDE0LjQtNDUuNCAyMi44TDE0NyA2MmMtNS41LTguMy0xNi43LTEwLjUtMjUtNXMtMTAuNSAxNi43LTUgMjVsNiA5Yy0xMy43IDExLTI1LjUgMjIuOC0zNS44IDM0LjlsLTEwLThjLTcuOC02LjItMTkuMS01LTI1LjMgMi44cy01IDE5LjEgMi44IDI1LjNMNjUuOSAxNTVjLTEuOCAyLjgtMy41IDUuNy01LjEgOC41Yy02LjYgMTEuNC0xMS44IDIyLjYtMTYgMzNsLTgtMy4yYy05LjItMy43LTE5LjcgLjgtMjMuNCAxMHMuOCAxOS43IDEwIDIzLjRsMTAuNCA0LjJjLS4yIC44LS40IDEuNS0uNSAyLjNjLTIuMiA5LjMtMy40IDE3LjMtNC4xIDIzLjRjLS40IDMuMS0uNiA1LjctLjggNy44Yy0uMSAxLjEtLjEgMi0uMiAyLjhsLS4xIDEuMSAwIC41IDAgLjIgMCAuMWMwIDAgMCAuMSAyOS4xIDFsLS4xIDBMMjggMjY5LjNjLS4xIDMuMSAwIDYuMSAuMiA5LjFsLTE1LjIgNC4zQzMuNSAyODUuNC0yIDI5NS40IC43IDMwNC45czEyLjcgMTUuMSAyMi4zIDEyLjRsMTUuNi00LjVjNy42IDEzLjYgMTguOSAyNSAzMi42IDMyLjZMNjYuNyAzNjFjLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjMtMTIuNGw0LjMtMTUuMmMxLjIgLjEgMi40IC4yIDMuNiAuMmMxNS42IC41IDMwLjMtMy4zIDQzLTEwLjJsOSA5YzcgNyAxOC40IDcgMjUuNSAwczctMTguNCAwLTI1LjVsLTcuMi03LjJjOS4zLTEyLjYgMTUuMi0yNy44IDE2LjMtNDQuNWw3LjEgM2M5LjEgMy45IDE5LjctLjMgMjMuNi05LjVzLS4zLTE5LjctOS41LTIzLjZsLTguNi0zLjdjNi40LTkuOSAxNy4zLTIyLjQgMzYuOS0zMy4zbDEuMyA0LjRjMi43IDkuNiAxMi43IDE1LjEgMjIuMyAxMi40czE1LjEtMTIuNyAxMi40LTIyLjNsLTIuMy04LjFjMy44LTEuMSA3LjctMi4xIDExLjktMy4xYzExLjYtMi43IDIyLjEtNy43IDMxLjEtMTQuNGw3LjIgNy4yYzcgNyAxOC40IDcgMjUuNSAwczctMTguNCAwLTI1LjVsLTktOWM3LjYtMTMuOSAxMS4zLTMwLjEgMTAuMS00Ni42bDE1LjItNC4zYzkuNi0yLjcgMTUuMS0xMi43IDEyLjQtMjIuM1MzNzAuNiA2NCAzNjEgNjYuN2wtMTUuNiA0LjVjLTcuNy0xMy45LTE5LjEtMjUuMS0zMi42LTMyLjZsNC41LTE1LjZjMi43LTkuNi0yLjgtMTkuNS0xMi40LTIyLjN6TTExMiAyNzJsLTQ4LTEuNSAwIDBjMTEuNyAuNCAyNy4zIC45IDQ4IDEuNnptMTYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC00OGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0zMjIuNyA0ODljLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjItMTIuNGw0LjMtMTUuMmM4LjMgLjYgMTYuOCAwIDI1LjItMS45YzcuMy0xLjcgMTQuMy0zLjUgMjEuMS01LjVsNS41IDEyLjdjMy45IDkuMSAxNC41IDEzLjQgMjMuNiA5LjVzMTMuNC0xNC41IDkuNS0yMy42bC00LjQtMTAuNGMxNi42LTYuNyAzMS43LTE0LjQgNDUuNC0yMi44TDQ5MyA0NTBjNS41IDguMyAxNi43IDEwLjUgMjUgNXMxMC41LTE2LjcgNS0yNWwtNi05YzEzLjctMTEgMjUuNS0yMi44IDM1LjgtMzQuOWwxMCA4YzcuOCA2LjIgMTkuMSA1IDI1LjMtMi44czUtMTkuMS0yLjgtMjUuM0w1NzQuMSAzNTdjMS44LTIuOCAzLjUtNS43IDUuMS04LjVjNi42LTExLjQgMTEuOC0yMi42IDE2LTMzbDggMy4yYzkuMiAzLjcgMTkuNy0uOCAyMy40LTEwcy0uOC0xOS43LTEwLTIzLjRsLTEwLjQtNC4yYy4yLS44IC40LTEuNSAuNS0yLjNjMi4yLTkuMyAzLjQtMTcuMyA0LjEtMjMuNGMuNC0zLjEgLjYtNS43IC44LTcuOGMuMS0xLjEgLjEtMiAuMi0yLjhsLjEtMS4xIDAtLjUgMC0uMiAwLS4xYzAgMCAwLS4xLTI5LjEtMWwuMSAwIDI5LjEgLjljLjEtMy4xIDAtNi4xLS4yLTkuMWwxNS4yLTQuM2M5LjYtMi43IDE1LjEtMTIuNyAxMi40LTIyLjNzLTEyLjctMTUuMS0yMi4zLTEyLjRsLTE1LjYgNC41Yy03LjYtMTMuNi0xOC45LTI1LTMyLjYtMzIuNmw0LjUtMTUuNmMyLjctOS42LTIuOC0xOS41LTEyLjQtMjIuM3MtMTkuNSAyLjgtMjIuMyAxMi40bC00LjMgMTUuMmMtMS4yLS4xLTIuNC0uMi0zLjYtLjJjLTE1LjYtLjUtMzAuMyAzLjMtNDMgMTAuMmwtOS05Yy03LTctMTguNC03LTI1LjUgMHMtNyAxOC40IDAgMjUuNWw3LjIgNy4yYy05LjMgMTIuNi0xNS4yIDI3LjgtMTYuMyA0NC41bC03LjEtM2MtOS4xLTMuOS0xOS43IC4zLTIzLjYgOS41cy4zIDE5LjcgOS41IDIzLjZsOC42IDMuN2MtNi40IDkuOS0xNy4zIDIyLjQtMzYuOSAzMy4zbC0xLjMtNC40Yy0yLjctOS42LTEyLjctMTUuMS0yMi4zLTEyLjRzLTE1LjEgMTIuNy0xMi40IDIyLjNsMi4zIDguMWMtMy44IDEuMS03LjcgMi4xLTExLjkgMy4xYy0xMS42IDIuNy0yMi4xIDcuNy0zMS4xIDE0LjRsLTcuMi03LjJjLTctNy0xOC40LTctMjUuNSAwcy03IDE4LjQgMCAyNS41bDkgOWMtNy42IDEzLjktMTEuMyAzMC4xLTEwLjEgNDYuNmwtMTUuMiA0LjNjLTkuNiAyLjctMTUuMSAxMi43LTEyLjQgMjIuMnMxMi43IDE1LjEgMjIuMyAxMi40bDE1LjYtNC41YzcuNyAxMy45IDE5LjEgMjUuMSAzMi42IDMyLjZMMzIyLjcgNDg5ek01NzYgMjQxLjVsMCAwYy0xMS43LS40LTI3LjMtLjktNDgtMS42bDQ4IDEuNXpNNDQ4IDM4NGEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwelwiXVxufTtcbnZhciBmYUhhbmRMaXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1saXphcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyNThcIiwgXCJNMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIMTYwaDgwIDQ2LjVjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44djEyIDE2IDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAyLjJMMjczLjkgMzUySDI0MCAxNjAgMTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4aDQ4IDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDE2MCA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6XCJdXG59O1xudmFyIGZhTm90ZGVmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25vdGRlZicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFmZVwiLCBcIk02NCAzOTAuM0wxNTMuNSAyNTYgNjQgMTIxLjdWMzkwLjN6TTEwMi41IDQ0OEgyODEuNUwxOTIgMzEzLjcgMTAyLjUgNDQ4em0xMjgtMTkyTDMyMCAzOTAuM1YxMjEuN0wyMzAuNSAyNTZ6TTI4MS41IDY0SDEwMi41TDE5MiAxOTguMyAyODEuNSA2NHpNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6XCJdXG59O1xudmFyIGZhRGlzZWFzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaXNlYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2ZhXCIsIFwiTTIzNi40IDYxLjRMMjI3IDc1LjVjLTIxLjMgMzItNTkuNCA0OC41LTk3LjMgNDIuMWwtNTkuNi05LjlDMzMuNCAxMDEuNiAwIDEyOS45IC4xIDE2Ny4xYzAgMTUuOSA2LjQgMzEuMiAxNy42IDQyLjVsMjkuMiAyOS4yYzExIDExIDE3LjIgMjUuOSAxNy4yIDQxLjVjMCAxNS44LTYuNCAzMC45LTE3LjcgNDJMMzMuMyAzMzUuMUMyMi4yIDM0NS45IDE2IDM2MC43IDE2IDM3Ni4yYzAgMzYuOCAzNC4xIDY0LjIgNzAuMSA1Ni4ybDYyLjMtMTMuOGM3LjctMS43IDE1LjctMi42IDIzLjYtMi42aDEwYzI3LjIgMCA1My43IDkuMyA3NSAyNi4zTDI4Ny44IDQ2N2MxMC41IDguNCAyMy42IDEzIDM3IDEzYzMyLjcgMCA1OS4zLTI2LjUgNTkuMy01OS4zbDAtMjUuMmMwLTM0LjkgMjEuNC02Ni4yIDUzLjktNzguOGwzNi45LTE0LjNjMjIuNC04LjcgMzcuMi0zMC4zIDM3LjItNTQuM2MwLTI4LjEtMjAuMS01Mi4zLTQ3LjgtNTcuM2wtMjgtNS4xYy0zNi41LTYuNy02NS40LTM0LjUtNzMuNi03MC43bC03LjEtMzEuNUMzNDguOSA1My40IDMyMi4xIDMyIDI5MS4zIDMyYy0yMiAwLTQyLjYgMTEtNTQuOSAyOS40ek0xNjAgMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTAgODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJyaWVmY2FzZU1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJpZWZjYXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0NjlcIiwgXCJNMTg0IDQ4SDMyOGM0LjQgMCA4IDMuNiA4IDhWOTZIMTc2VjU2YzAtNC40IDMuNi04IDgtOHptLTU2IDhWOTZINjRDMjguNyA5NiAwIDEyNC43IDAgMTYwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDM4NFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxODRjLTMwLjkgMC01NiAyNS4xLTU2IDU2em05NiAxNTJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI4OHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjA4elwiXVxufTtcbnZhciBmYUdlbmRlcmxlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VuZGVybGVzcycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjIyZFwiLCBcIk0xOTIgMTQ0YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptMCAyODhhMTc2IDE3NiAwIDEgMCAwLTM1MiAxNzYgMTc2IDAgMSAwIDAgMzUyelwiXVxufTtcbnZhciBmYUNoZXZyb25SaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGV2cm9uLXJpZ2h0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMl0sIFwiZjA1NFwiLCBcIk0zMTAuNiAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgMjU2IDczLjQgODYuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyelwiXVxufTtcbnZhciBmYVJldHdlZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmV0d2VldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjA3OVwiLCBcIk0yNzIgNDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyaDMyYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMzIgMCAwIDEyOGMwIDUzIDQzIDk2IDk2IDk2SDI3MnpNMzA0IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4SDQxNmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhsLTMyIDBWMTkyYzAtNTMtNDMtOTYtOTYtOTZMMzA0IDk2elwiXVxufTtcbnZhciBmYUNhclJlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLXJlYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNhci1hbHRcIl0sIFwiZjVkZVwiLCBcIk0xNjUuNCA5NkgzNDYuNmMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40TDQwMi45IDE5MkgxMDkuMWwyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHptLTkwLjYgLjNMMzkuNiAxOTYuOEMxNi40IDIwNi40IDAgMjI5LjMgMCAyNTZ2ODBjMCAyMy43IDEyLjkgNDQuNCAzMiA1NS40VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY0MDBIMzg0djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM5MS40YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjRWMjU2YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDk2LjNDNDIzLjcgNTcuOCAzODcuNCAzMiAzNDYuNiAzMkgxNjUuNGMtNDAuOCAwLTc3LjEgMjUuOC05MC42IDY0LjN6TTIwOCAyNzJoOTZjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2ek00OCAyODBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zNjAtMjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDA4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbnZhciBmYUNhckFsdCA9IGZhQ2FyUmVhcjtcbnZhciBmYVB1bXBTb2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3B1bXAtc29hcCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2YlwiLCBcIk0xMjggMzJ2OTZIMjU2Vjk2aDYwLjFjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40SDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMTcuNCAxNjBjLTMzLjMgMC02MSAyNS41LTYzLjggNTguN0wzNSA0NDIuN0MzMS45IDQ4MCA2MS4zIDUxMiA5OC44IDUxMkgyODUuMmMzNy40IDAgNjYuOS0zMiA2My44LTY5LjNsLTE4LjctMjI0Yy0yLjgtMzMuMi0zMC41LTU4LjctNjMuOC01OC43SDExNy40ek0yNTYgMzYwYzAgMzUuMy0yOC43IDU2LTY0IDU2cy02NC0yMC43LTY0LTU2YzAtMzIuNSAzNy04MC45IDUwLjktOTcuOWMzLjItMy45IDguMS02LjEgMTMuMS02LjFzOS45IDIuMiAxMy4xIDYuMUMyMTkgMjc5LjEgMjU2IDMyNy41IDI1NiAzNjB6XCJdXG59O1xudmFyIGZhVmlkZW9TbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWRlby1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRlMlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC04Ni40LTY3LjcgMTMuOCA5LjJjOS44IDYuNSAyMi40IDcuMiAzMi45IDEuNnMxNi45LTE2LjQgMTYuOS0yOC4yVjEyOGMwLTExLjgtNi41LTIyLjYtMTYuOS0yOC4ycy0yMy01LTMyLjkgMS42bC05NiA2NEw0NDggMTc0LjlWMTkyIDMyMHY1LjhsLTMyLTI1LjFWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDExMy45TDM4LjggNS4xek00MDcgNDE2LjdMMzIuMyAxMjEuNWMtLjIgMi4xLS4zIDQuMy0uMyA2LjVWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMyMy40IDAgNDMuOS0xMi42IDU1LTMxLjN6XCJdXG59O1xudmFyIGZhQmF0dGVyeVF1YXJ0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1xdWFydGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTJcIl0sIFwiZjI0M1wiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNlYzMzZjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNkg0NjR6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NlYzMzZjMCA0NC4yIDM1LjggODAgODAgODBINDY0YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwSDgwem0xMTIgOTZIOTZWMzIwaDk2VjE5MnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5MiA9IGZhQmF0dGVyeVF1YXJ0ZXI7XG52YXIgZmFSYWRpbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWRpbycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI1MV0sIFwiZjhkN1wiLCBcIk00OTQuOCA0N2MxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMi44IDQ4MS4yIDFMNTEuNyAxMjYuOWMtOS40IDIuNy0xNy45IDcuMy0yNS4xIDEzLjJDMTAuNSAxNTEuNyAwIDE3MC42IDAgMTkydjRWMzA0IDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0SDIxOC41TDQ5NC44IDQ3ek0zNjggMjQwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek04MCAyNTZjMC04LjggNy4yLTE2IDE2LTE2aDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyMGMwLTguOCA3LjItMTYgMTYtMTZIMjA4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTE2IDY0YzAtOC44IDcuMi0xNiAxNi0xNmg5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYUJhYnlDYXJyaWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWJ5LWNhcnJpYWdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjYXJyaWFnZS1iYWJ5XCJdLCBcImY3N2RcIiwgXCJNMjU2IDE5MkguMUMyLjcgMTE3LjkgNDEuMyA1Mi45IDk5IDE0LjFjMTMuMy04LjkgMzAuOC00LjMgMzkuOSA4LjhMMjU2IDE5MnptMTI4LTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwdjY0YzAgMjUuMi01LjggNTAuMi0xNyA3My41cy0yNy44IDQ0LjUtNDguNiA2Mi4zcy00NS41IDMyLTcyLjcgNDEuNlMyNTMuNCA0MTYgMjI0IDQxNnMtNTguNS01LTg1LjctMTQuNnMtNTEuOS0yMy44LTcyLjctNDEuNnMtMzcuMy0zOS00OC42LTYyLjNTMCAyNDkuMiAwIDIyNGwyMjQgMCAxNjAgMFYxNjB6TTgwIDQxNmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTI0MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwelwiXVxufTtcbnZhciBmYUNhcnJpYWdlQmFieSA9IGZhQmFieUNhcnJpYWdlO1xudmFyIGZhVHJhZmZpY0xpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWZmaWMtbGlnaHQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjg2NzhdLCBcImY2MzdcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDQxNmE0OCA0OCAwIDEgMSAwLTk2IDQ4IDQ4IDAgMSAxIDAgOTZ6bTQ4LTE3NmE0OCA0OCAwIDEgMSAtOTYgMCA0OCA0OCAwIDEgMSA5NiAwem0tNDgtODBhNDggNDggMCAxIDEgMC05NiA0OCA0OCAwIDEgMSAwIDk2elwiXVxufTtcbnZhciBmYVRoZXJtb21ldGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RoZXJtb21ldGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDkxXCIsIFwiTTk2IDM4Mi4xVjI5My4zYzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjcuMy0yNy4zIDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDUuNS00NS41QzM1NS4yIDEwLjkgMzgxLjQgMCA0MDguOCAwQzQ2NS44IDAgNTEyIDQ2LjIgNTEyIDEwMy4yYzAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRIMTI5LjlMNDEgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg5LTg5elwiXVxufTtcbnZhciBmYVZyQ2FyZGJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZyLWNhcmRib2FyZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjcyOVwiLCBcIk01NzYgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDE4NC40YzI0LjIgMCA0Ni40LTEzLjcgNTcuMi0zNS40bDMyLTY0YzguOC0xNy41IDI2LjctMjguNiA0Ni4zLTI4LjZzMzcuNSAxMS4xIDQ2LjMgMjguNmwzMiA2NGMxMC44IDIxLjcgMzMgMzUuNCA1Ny4yIDM1LjRINTc2YzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NHpNOTYgMjQwYTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDk2IDI0MHptMzg0LTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4elwiXVxufTtcbnZhciBmYUhhbmRNaWRkbGVGaW5nZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1taWRkbGUtZmluZ2VyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NDA1XSwgXCJmODA2XCIsIFwiTTIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MFYyMDQuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NyA3M2MwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyNjQuM2MtMiAxLjQtMy45IDMtNS44IDQuNUw1NSAyODQuOEM0MC40IDI5NyAzMiAzMTUgMzIgMzM0VjM3MmMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zbDUuNCA0LjVjMjguOCAyNCA2NSAzNy4xIDEwMi40IDM3LjFIMzA0YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4VjMyMCAyODhjMC0yNi41LTIxLjUtNDgtNDgtNDhjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMzUwIDIyNy41IDMyOS4zIDIwOCAzMDQgMjA4Yy0xMi4zIDAtMjMuNSA0LjYtMzIgMTIuMlY0MGMwLTIyLjEtMTcuOS00MC00MC00MHpcIl1cbn07XG52YXIgZmFQZXJjZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcmNlbnQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs2MjEwMSwgNjI3ODUsIFwicGVyY2VudGFnZVwiXSwgXCIyNVwiLCBcIk0zNzQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMzIwIDMyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwzMjAtMzIwek0xMjggMTI4QTY0IDY0IDAgMSAwIDAgMTI4YTY0IDY0IDAgMSAwIDEyOCAwek0zODQgMzg0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFQZXJjZW50YWdlID0gZmFQZXJjZW50O1xudmFyIGZhVHJ1Y2tNb3ZpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbW92aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGRmXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWMzA0djgwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwYzI2LjIgMCA0OS40LTEyLjYgNjQtMzJjMTQuNiAxOS40IDM3LjggMzIgNjQgMzJjNDQuMiAwIDgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZINDE2aDMzLjZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYyODggMjcyIDI2MS43YzAtOS4yLTMuMi0xOC4yLTktMjUuM2wtNTguOC03MS44Yy0xMC42LTEzLTI2LjUtMjAuNS00My4zLTIwLjVINDgwVjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek01ODUgMjU2SDQ4MFYxOTJoNDguOGMyLjQgMCA0LjcgMS4xIDYuMiAyLjlMNTg1IDI1NnpNNTI4IDM2OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE3NiA0MDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNODAgMzY4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFHbGFzc1dhdGVyRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbGFzcy13YXRlci1kcm9wbGV0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNGY1XCIsIFwiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM0gyNzUuM2M0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEgzMnpNODMgMjk3LjVMNjYuNCA2NEgzMTcuNkwzMDEgMjk3LjUgMjg4IDMwNGMtMjAuMSAxMC4xLTQzLjkgMTAuMS02NCAwcy00My45LTEwLjEtNjQgMHMtNDMuOSAxMC4xLTY0IDBsLTEzLTYuNXpNMjU2IDE5NmMwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjVjLTYuMS03LjctMTcuNS03LjctMjMuNiAwQzE2MS43IDEyNS45IDEyOCAxNzIgMTI4IDE5NmMwIDMzLjEgMjguNyA2MCA2NCA2MHM2NC0yNi45IDY0LTYwelwiXVxufTtcbnZhciBmYURpc3BsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlzcGxheScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE2M1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFYzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjQwbC0xMC43IDMySDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQ2LjdMMzM2IDQxNkg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTUxMiA2NFYzNTJINjRWNjRINTEyelwiXVxufTtcbnZhciBmYUZhY2VTbWlsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXNtaWxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCBcInNtaWxlXCJdLCBcImYxMThcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU21pbGUgPSBmYUZhY2VTbWlsZTtcbnZhciBmYVRodW1idGFjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aHVtYnRhY2snLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDQsIDEyODM5MiwgXCJ0aHVtYi10YWNrXCJdLCBcImYwOGRcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEgzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjkwLjVsMTEuNCAxNDguMmMzNi43IDE5LjkgNjUuNyA1My4yIDc5LjUgOTQuN2wxIDNjMy4zIDkuOCAxLjYgMjAuNS00LjQgMjguOHMtMTUuNyAxMy4zLTI2IDEzLjNIMzJjLTEwLjMgMC0xOS45LTQuOS0yNi0xMy4zcy03LjctMTkuMS00LjQtMjguOGwxLTNjMTMuOC00MS41IDQyLjgtNzQuOCA3OS41LTk0LjdMOTMuNSA2NEg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTE2MCAzODRoNjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0elwiXVxufTtcbnZhciBmYVRodW1iVGFjayA9IGZhVGh1bWJ0YWNrO1xudmFyIGZhVHJvcGh5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Ryb3BoeScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyNzk0Ml0sIFwiZjA5MVwiLCBcIk00MDAgMEgxNzZjLTI2LjUgMC00OC4xIDIxLjgtNDcuMSA0OC4yYy4yIDUuMyAuNCAxMC42IC43IDE1LjhIMjRDMTAuNyA2NCAwIDc0LjcgMCA4OGMwIDkyLjYgMzMuNSAxNTcgNzguNSAyMDAuN2M0NC4zIDQzLjEgOTguMyA2NC44IDEzOC4xIDc1LjhjMjMuNCA2LjUgMzkuNCAyNiAzOS40IDQ1LjZjMCAyMC45LTE3IDM3LjktMzcuOSAzNy45SDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzU3LjlDMzM3IDQ0OCAzMjAgNDMxIDMyMCA0MTAuMWMwLTE5LjYgMTUuOS0zOS4yIDM5LjQtNDUuNmMzOS45LTExIDkzLjktMzIuNyAxMzguMi03NS44QzU0Mi41IDI0NSA1NzYgMTgwLjYgNTc2IDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0SDQ0Ni40Yy4zLTUuMiAuNS0xMC40IC43LTE1LjhDNDQ4LjEgMjEuOCA0MjYuNSAwIDQwMCAwek00OC45IDExMmg4NC40YzkuMSA5MC4xIDI5LjIgMTUwLjMgNTEuOSAxOTAuNmMtMjQuOS0xMS01MC44LTI2LjUtNzMuMi00OC4zYy0zMi0zMS4xLTU4LTc2LTYzLTE0Mi4zek00NjQuMSAyNTQuM2MtMjIuNCAyMS44LTQ4LjMgMzcuMy03My4yIDQ4LjNjMjIuNy00MC4zIDQyLjgtMTAwLjUgNTEuOS0xOTAuNmg4NC40Yy01LjEgNjYuMy0zMS4xIDExMS4yLTYzIDE0Mi4zelwiXVxufTtcbnZhciBmYVBlcnNvblByYXlpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXByYXlpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg3MjAsIFwicHJheVwiXSwgXCJmNjgzXCIsIFwiTTM1MiA2NEE2NCA2NCAwIDEgMCAyMjQgNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTIzMi43IDI2NGwyMi45IDMxLjVjNi41IDguOSAxNi4zIDE0LjcgMjcuMiAxNi4xczIxLjktMS43IDMwLjQtOC43bDg4LTcyYzE3LjEtMTQgMTkuNi0zOS4yIDUuNi01Ni4zcy0zOS4yLTE5LjYtNTYuMy01LjZsLTU1LjIgNDUuMi0yNi4yLTM2QzI1My42IDE1Ni43IDIyOC42IDE0NCAyMDIgMTQ0Yy0zMC45IDAtNTkuMiAxNy4xLTczLjYgNDQuNEw3OS44IDI4MC45Yy0yMC4yIDM4LjUtOS40IDg1LjkgMjUuNiAxMTEuOEwxNTguNiA0MzJINzJjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBIMjgwYzE3LjMgMCAzMi42LTExLjEgMzgtMjcuNXMtLjMtMzQuNC0xNC4yLTQ0LjdMMTg3LjcgMzU0bDQ1LTkwelwiXVxufTtcbnZhciBmYVByYXkgPSBmYVBlcnNvblByYXlpbmc7XG52YXIgZmFIYW1tZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFtbWVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjk2XSwgXCJmNmUzXCIsIFwiTTQxMy41IDIzNy41Yy0yOC4yIDQuOC01OC4yLTMuNi04MC0yNS40bC0zOC4xLTM4LjFDMjgwLjQgMTU5IDI3MiAxMzguOCAyNzIgMTE3LjZWMTA1LjVMMTkyLjMgNjJjLTUuMy0yLjktOC42LTguNi04LjMtMTQuN3MzLjktMTEuNSA5LjUtMTRsNDcuMi0yMUMyNTkuMSA0LjIgMjc5IDAgMjk5LjIgMGgxOC4xYzM2LjcgMCA3MiAxNCA5OC43IDM5LjFsNDQuNiA0MmMyNC4yIDIyLjggMzMuMiA1NS43IDI2LjYgODZMNTAzIDE4M2w4LThjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg4IDg4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMjQtMjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDgtOC0xNy41LTE3LjV6TTI3LjQgMzc3LjFMMjYwLjkgMTgyLjZjMy41IDQuOSA3LjUgOS42IDExLjggMTRsMzguMSAzOC4xYzYgNiAxMi40IDExLjIgMTkuMiAxNS43TDEzNC45IDQ4NC42Yy0xNC41IDE3LjQtMzYgMjcuNC01OC42IDI3LjRDMzQuMSA1MTIgMCA0NzcuOCAwIDQzNS43YzAtMjIuNiAxMC4xLTQ0LjEgMjcuNC01OC42elwiXVxufTtcbnZhciBmYUhhbmRQZWFjZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXBlYWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTk5Nl0sIFwiZjI1YlwiLCBcIk0yMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYyNDBIMTkyVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNHpNOTMuMyA1MS4yTDE3NS45IDI0MEgxMDYuMUwzNC43IDc2LjhDMjcuNiA2MC42IDM1IDQxLjggNTEuMiAzNC43czM1LjEgLjMgNDIuMSAxNi41em0yNyAyMjEuM2wtLjItLjVoNjkuOUgyMTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBIMTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDU2YzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjZjMTMuMiAwIDI1LjQtNCAzNS42LTEwLjhjOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOGMxMS43IDAgMjIuNi0zLjEgMzItOC42VjM1MmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MEgyMjYuM2MtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45bC0xMS42LTExLjZDNzcuNSA0MjkuNSA2NCAzOTYuOSA2NCAzNjNWMzM2YzAtMzIuNyAyNC42LTU5LjcgNTYuMy02My41elwiXVxufTtcbnZhciBmYVJvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3RhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjAsIFwic3luYy1hbHRcIl0sIFwiZjJmMVwiLCBcIk0xNDIuOSAxNDIuOWM2Mi4yLTYyLjIgMTYyLjctNjIuNSAyMjUuMy0xTDMyNyAxODNjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NjMuNWMwIDAgMCAwIDAgMEg0NzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNzJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMkw0MTMuNCA5Ni42Yy04Ny42LTg2LjUtMjI4LjctODYuMi0zMTUuOCAxQzczLjIgMTIyIDU1LjYgMTUwLjcgNDQuOCAxODEuNGMtNS45IDE2LjcgMi45IDM0LjkgMTkuNSA0MC44czM0LjktMi45IDQwLjgtMTkuNWM3LjctMjEuOCAyMC4yLTQyLjMgMzcuOC01OS44ek0xNiAzMTJ2Ny42IC43VjQ0MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsNDEuNi00MS42Yzg3LjYgODYuNSAyMjguNyA4Ni4yIDMxNS44LTFjMjQuNC0yNC40IDQyLjEtNTMuMSA1Mi45LTgzLjdjNS45LTE2LjctMi45LTM0LjktMTkuNS00MC44cy0zNC45IDIuOS00MC44IDE5LjVjLTcuNyAyMS44LTIwLjIgNDIuMy0zNy44IDU5LjhjLTYyLjIgNjIuMi0xNjIuNyA2Mi41LTIyNS4zIDFMMTg1IDMyOWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4ycy0xMi41LTE0LjgtMjIuMi0xNC44SDQ4LjRoLS43SDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG52YXIgZmFTeW5jQWx0ID0gZmFSb3RhdGU7XG52YXIgZmFTcGlubmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwaW5uZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMTBcIiwgXCJNMzA0IDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTAgNDE2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ4IDMwNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ2NC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNDIuOSA0MzdBNDggNDggMCAxIDAgNzUgMzY5LjEgNDggNDggMCAxIDAgMTQyLjkgNDM3em0wLTI5NC4yQTQ4IDQ4IDAgMSAwIDc1IDc1YTQ4IDQ4IDAgMSAwIDY3LjkgNjcuOXpNMzY5LjEgNDM3QTQ4IDQ4IDAgMSAwIDQzNyAzNjkuMSA0OCA0OCAwIDEgMCAzNjkuMSA0Mzd6XCJdXG59O1xudmFyIGZhUm9ib3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9ib3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDJdLCBcImY1NDRcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZINDcyYzM5LjggMCA3MiAzMi4yIDcyIDcyVjQ0MGMwIDM5LjgtMzIuMiA3Mi03MiA3MkgxNjhjLTM5LjggMC03Mi0zMi4yLTcyLTcyVjE2OGMwLTM5LjggMzIuMi03MiA3Mi03MkgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTIwOCAzODRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjA4em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMwNHptOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0MDB6TTI2NCAyNTZhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMTUyIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNNDggMjI0SDY0VjQxNkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em01NDQgMGMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1NzZWMjI0aDE2elwiXVxufTtcbnZhciBmYVBlYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlYWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NF0sIFwiZjY3Y1wiLCBcIk0yMjQgNDQ1LjNWMzIzLjVsLTk0LjMgNzcuMWMyNi4xIDIyLjggNTguNSAzOC43IDk0LjMgNDQuN3pNODkuMiAzNTEuMUwyMjQgMjQwLjhWNjYuN0MxMzMuMiA4MS45IDY0IDE2MC45IDY0IDI1NmMwIDM0LjYgOS4yIDY3LjEgMjUuMiA5NS4xem0yOTMuMSA0OS41TDI4OCAzMjMuNVY0NDUuM2MzNS43LTYgNjguMS0yMS45IDk0LjMtNDQuN3ptNDAuNi00OS41YzE2LTI4IDI1LjItNjAuNSAyNS4yLTk1LjFjMC05NS4xLTY5LjItMTc0LjEtMTYwLTE4OS4zVjI0MC44TDQyMi44IDM1MS4xek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhR2VhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VhcnMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNvZ3NcIl0sIFwiZjA4NVwiLCBcIk0zMDguNSAxMzUuM2M3LjEtNi4zIDkuOS0xNi4yIDYuMi0yNWMtMi4zLTUuMy00LjgtMTAuNS03LjYtMTUuNUwzMDQgODkuNGMtMy01LTYuMy05LjktOS44LTE0LjZjLTUuNy03LjYtMTUuNy0xMC4xLTI0LjctNy4xbC0yOC4yIDkuM2MtMTAuNy04LjgtMjMtMTYtMzYuMi0yMC45TDE5OSAyNy4xYy0xLjktOS4zLTkuMS0xNi43LTE4LjUtMTcuOEMxNzMuOSA4LjQgMTY3LjIgOCAxNjAuNCA4aC0uN2MtNi44IDAtMTMuNSAuNC0yMC4xIDEuMmMtOS40IDEuMS0xNi42IDguNi0xOC41IDE3LjhMMTE1IDU2LjFjLTEzLjMgNS0yNS41IDEyLjEtMzYuMiAyMC45TDUwLjUgNjcuOGMtOS0zLTE5LS41LTI0LjcgNy4xYy0zLjUgNC43LTYuOCA5LjYtOS45IDE0LjZsLTMgNS4zYy0yLjggNS01LjMgMTAuMi03LjYgMTUuNmMtMy43IDguNy0uOSAxOC42IDYuMiAyNWwyMi4yIDE5LjhDMzIuNiAxNjEuOSAzMiAxNjguOSAzMiAxNzZzLjYgMTQuMSAxLjcgMjAuOUwxMS41IDIxNi43Yy03LjEgNi4zLTkuOSAxNi4yLTYuMiAyNWMyLjMgNS4zIDQuOCAxMC41IDcuNiAxNS42bDMgNS4yYzMgNS4xIDYuMyA5LjkgOS45IDE0LjZjNS43IDcuNiAxNS43IDEwLjEgMjQuNyA3LjFsMjguMi05LjNjMTAuNyA4LjggMjMgMTYgMzYuMiAyMC45bDYuMSAyOS4xYzEuOSA5LjMgOS4xIDE2LjcgMTguNSAxNy44YzYuNyAuOCAxMy41IDEuMiAyMC40IDEuMnMxMy43LS40IDIwLjQtMS4yYzkuNC0xLjEgMTYuNi04LjYgMTguNS0xNy44bDYuMS0yOS4xYzEzLjMtNSAyNS41LTEyLjEgMzYuMi0yMC45bDI4LjIgOS4zYzkgMyAxOSAuNSAyNC43LTcuMWMzLjUtNC43IDYuOC05LjUgOS44LTE0LjZsMy4xLTUuNGMyLjgtNSA1LjMtMTAuMiA3LjYtMTUuNWMzLjctOC43IC45LTE4LjYtNi4yLTI1bC0yMi4yLTE5LjhjMS4xLTYuOCAxLjctMTMuOCAxLjctMjAuOXMtLjYtMTQuMS0xLjctMjAuOWwyMi4yLTE5Ljh6TTExMiAxNzZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNTA0LjcgNTAwLjVjNi4zIDcuMSAxNi4yIDkuOSAyNSA2LjJjNS4zLTIuMyAxMC41LTQuOCAxNS41LTcuNmw1LjQtMy4xYzUtMyA5LjktNi4zIDE0LjYtOS44YzcuNi01LjcgMTAuMS0xNS43IDcuMS0yNC43bC05LjMtMjguMmM4LjgtMTAuNyAxNi0yMyAyMC45LTM2LjJsMjkuMS02LjFjOS4zLTEuOSAxNi43LTkuMSAxNy44LTE4LjVjLjgtNi43IDEuMi0xMy41IDEuMi0yMC40cy0uNC0xMy43LTEuMi0yMC40Yy0xLjEtOS40LTguNi0xNi42LTE3LjgtMTguNUw1ODMuOSAzMDdjLTUtMTMuMy0xMi4xLTI1LjUtMjAuOS0zNi4ybDkuMy0yOC4yYzMtOSAuNS0xOS03LjEtMjQuN2MtNC43LTMuNS05LjYtNi44LTE0LjYtOS45bC01LjMtM2MtNS0yLjgtMTAuMi01LjMtMTUuNi03LjZjLTguNy0zLjctMTguNi0uOS0yNSA2LjJsLTE5LjggMjIuMmMtNi44LTEuMS0xMy44LTEuNy0yMC45LTEuN3MtMTQuMSAuNi0yMC45IDEuN2wtMTkuOC0yMi4yYy02LjMtNy4xLTE2LjItOS45LTI1LTYuMmMtNS4zIDIuMy0xMC41IDQuOC0xNS42IDcuNmwtNS4yIDNjLTUuMSAzLTkuOSA2LjMtMTQuNiA5LjljLTcuNiA1LjctMTAuMSAxNS43LTcuMSAyNC43bDkuMyAyOC4yYy04LjggMTAuNy0xNiAyMy0yMC45IDM2LjJMMzE1LjEgMzEzYy05LjMgMS45LTE2LjcgOS4xLTE3LjggMTguNWMtLjggNi43LTEuMiAxMy41LTEuMiAyMC40cy40IDEzLjcgMS4yIDIwLjRjMS4xIDkuNCA4LjYgMTYuNiAxNy44IDE4LjVsMjkuMSA2LjFjNSAxMy4zIDEyLjEgMjUuNSAyMC45IDM2LjJsLTkuMyAyOC4yYy0zIDktLjUgMTkgNy4xIDI0LjdjNC43IDMuNSA5LjUgNi44IDE0LjYgOS44bDUuNCAzLjFjNSAyLjggMTAuMiA1LjMgMTUuNSA3LjZjOC43IDMuNyAxOC42IC45IDI1LTYuMmwxOS44LTIyLjJjNi44IDEuMSAxMy44IDEuNyAyMC45IDEuN3MxNC4xLS42IDIwLjktMS43bDE5LjggMjIuMnpNNDY0IDMwNGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhQ29ncyA9IGZhR2VhcnM7XG52YXIgZmFXYXJlaG91c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FyZWhvdXNlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDk0XCIsIFwiTTAgNDg4VjE3MS4zYzAtMjYuMiAxNS45LTQ5LjcgNDAuMi01OS40TDMwOC4xIDQuOGM3LjYtMy4xIDE2LjEtMy4xIDIzLjggMEw1OTkuOCAxMTEuOWMyNC4zIDkuNyA0MC4yIDMzLjMgNDAuMiA1OS40VjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg1NjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4OCAyNGwtMzM2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjQzMkg1MTJsMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMTI4IDQwMFYzMzZINTEydjY0SDEyOHptMC05NlYyMjRINTEybDAgODBIMTI4elwiXVxufTtcbnZhciBmYUFycm93VXBSaWdodERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtcmlnaHQtZG90cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRiN1wiLCBcIk0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg1MC43TDkuNCAyNjUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNTYgMTA5LjNWMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwek01NzYgODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNNDQ4IDIwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00MDAgMzg0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDggODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMTI4IDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMjcyIDM4NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ4IDgwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTE0NCA1MTJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01NzYgMzM2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bS00OC04MGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhU3Bsb3RjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGxvdGNoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWJjXCIsIFwiTTIwOC41IDYyLjNsMjguMS0zNi45QzI0OC44IDkuNCAyNjcuOCAwIDI4OCAwYzI4LjUgMCA1My42IDE4LjcgNjEuOCA0NmwxNy44IDU5LjRjMTAuMyAzNC40IDM2LjEgNjIgNjkuOCA3NC42bDM5LjggMTQuOWMyMC45IDcuOSAzNC44IDI3LjkgMzQuOCA1MC4yYzAgMTYuOS03LjkgMzIuOC0yMS41IDQyLjlsLTY3LjMgNTAuNWMtMjQuMyAxOC4yLTM3LjIgNDcuOS0zMy44IDc4LjFsMi41IDIyLjdjNC4zIDM4LjctMjYgNzIuNi02NSA3Mi42Yy0xNC44IDAtMjkuMy01LjEtNDAuOC0xNC4zbC01NS40LTQ0LjNjLTQuNS0zLjYtOS4zLTYuNy0xNC41LTkuMmMtMTUuOC03LjktMzMuNy0xMC40LTUxLTcuM0w4Mi40IDQ1MS45QzQ3LjggNDU4LjIgMTYgNDMxLjYgMTYgMzk2LjVjMC0xMy4yIDQuNy0yNiAxMy4xLTM2LjJsMTEuMi0xMy40YzE0LjYtMTcuNCAyMi42LTM5LjQgMjIuNi02Mi4xYzAtMTguOC01LjUtMzcuMi0xNS44LTUzTDguOCAxNzMuNUMzLjEgMTY0LjcgMCAxNTQuNCAwIDE0My45YzAtMzMuNCAzMC4xLTU4LjggNjMtNTMuMmw1MS4zIDguN2MzNS45IDYuMSA3Mi4yLTguMiA5NC4yLTM3LjF6XCJdXG59O1xudmFyIGZhRmFjZUdyaW5IZWFydHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLWhlYXJ0cycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgXCJncmluLWhlYXJ0c1wiXSwgXCJmNTg0XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTE5OS4zIDEyOS4xYzE3LjggNC44IDI4LjQgMjMuMSAyMy42IDQwLjhsLTE3LjQgNjVjLTIuMyA4LjUtMTEuMSAxMy42LTE5LjYgMTEuM2wtNjUuMS0xNy40Yy0xNy44LTQuOC0yOC40LTIzLjEtMjMuNi00MC44czIzLjEtMjguNCA0MC44LTIzLjZsMTYuMSA0LjMgNC4zLTE2LjFjNC44LTE3LjggMjMuMS0yOC40IDQwLjgtMjMuNnptMTU0LjMgMjMuNmw0LjMgMTYuMSAxNi4xLTQuM2MxNy44LTQuOCAzNi4xIDUuOCA0MC44IDIzLjZzLTUuOCAzNi4xLTIzLjYgNDAuOGwtNjUuMSAxNy40Yy04LjUgMi4zLTE3LjMtMi44LTE5LjYtMTEuM2wtMTcuNC02NWMtNC44LTE3LjggNS44LTM2LjEgMjMuNi00MC44czM2LjEgNS44IDQwLjkgMjMuNnpcIl1cbn07XG52YXIgZmFHcmluSGVhcnRzID0gZmFGYWNlR3JpbkhlYXJ0cztcbnZhciBmYURpY2VGb3VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtZm91cicsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NTldLCBcImY1MjRcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgzODRjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zNTIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVNpbUNhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2ltLWNhcmQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY3YzRcIiwgXCJNNjQgMEgyNDIuN2MxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyA5NmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjRDMCAyOC43IDI4LjcgMCA2NCAwek05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDY0VjE5Mkg5NnpNNjQgMzUyaDgwIDk2IDgwVjI4OEgyNDAgMTQ0IDY0djY0ek0zMjAgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI1NnY2NGg2NFYyMjR6TTE2MCAxOTJ2NjRoNjRWMTkySDE2MHpNMjg4IDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRIMjU2djY0aDMyek0xNjAgMzg0djY0aDY0VjM4NEgxNjB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMlYzODRINjR2MzJ6XCJdXG59O1xudmFyIGZhVHJhbnNnZW5kZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhbnNnZW5kZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODk1LCBcInRyYW5zZ2VuZGVyLWFsdFwiXSwgXCJmMjI1XCIsIFwiTTExMiAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC0zMSAzMUwxMTIgNzguMWw3LTdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03IDcgMTUuMiAxNS4yQzE4Ny43IDEwNy42IDIyMC41IDk2IDI1NiA5NnM2OC4zIDExLjYgOTQuOSAzMS4ybDY4LjgtNjguOC0zMS0zMWMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHM4LjMtOS45IDE0LjgtOS45aDk2YzguOCAwIDE2IDcuMiAxNiAxNnY5NmMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVsLTMxLTMxLTY4LjggNjguOEM0MDQuNCAxODcuNyA0MTYgMjIwLjUgNDE2IDI1NmMwIDgwLjItNTkgMTQ2LjYtMTM2IDE1OC4yVjQzMmgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyODB2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHYtOEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMTZWNDE0LjJDMTU1IDQwMi42IDk2IDMzNi4yIDk2IDI1NmMwLTM1LjUgMTEuNi02OC4zIDMxLjItOTQuOUwxMTIgMTQ1LjlsLTcgN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw3LTdMNTguMyA5Mi4zbC0zMSAzMWMtNC42IDQuNi0xMS41IDUuOS0xNy40IDMuNVMwIDExOC41IDAgMTEyVjE2QzAgNy4yIDcuMiAwIDE2IDBoOTZ6TTM1MiAyNTZhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwelwiXVxufTtcbnZhciBmYVRyYW5zZ2VuZGVyQWx0ID0gZmFUcmFuc2dlbmRlcjtcbnZhciBmYU1lcmN1cnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWVyY3VyeScsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTFdLCBcImYyMjNcIiwgXCJNNzIuMSA3Qzg1LjgtNCAxMDYtMS44IDExNyAxMmMxNy42IDIyIDQ0LjcgMzYgNzUgMzZzNTcuMy0xNCA3NS0zNmMxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNy44IDkuNy0xNi42IDE4LjQtMjYuNCAyNi4xQzMzNy4zIDEwOS43IDM2OCAxNjMuMyAzNjggMjI0YzAgODkuMS02Ni4yIDE2Mi43LTE1MiAxNzQuNFY0MjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2djE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQ3MkgxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMzJWMzk4LjRDODIuMiAzODYuNyAxNiAzMTMuMSAxNiAyMjRjMC02MC43IDMwLjctMTE0LjMgNzcuNS0xNDUuOUM4My43IDcwLjUgNzQuOSA2MS43IDY3LjEgNTJjLTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1ek04MCAyMjRhMTEyIDExMiAwIDEgMCAyMjQgMEExMTIgMTEyIDAgMSAwIDgwIDIyNHpcIl1cbn07XG52YXIgZmFBcnJvd1R1cm5Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXR1cm4tZG93bicsXG4gIGljb246IFszODQsIDUxMiwgW1wibGV2ZWwtZG93blwiXSwgXCJmMTQ5XCIsIFwiTTMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJTMTQuMyAwIDMyIDBsOTYgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMzA2LjcgNzMuNC03My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE2MCA0MDIuNyAxNjAgOTZjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNjR6XCJdXG59O1xudmFyIGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duO1xudmFyIGZhUGVyc29uRmFsbGluZ0J1cnN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1mYWxsaW5nLWJ1cnN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTQ3XCIsIFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40QzcxLjYgMTU0LjUgMzIgMjEzIDMyIDI3OC4yVjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNzMuOGMwLTEwIDEuNi0xOS44IDQuNS0yOUwyNjEuMSA0OTcuNGM5LjYgMTQuOCAyOS40IDE5LjEgNDQuMyA5LjVzMTkuMS0yOS40IDkuNS00NC4zTDIyMi42IDMyMEgyMjRsODAgMCAzOC40IDUxLjJjMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOGwtNDMuMi01Ny42QzM0MS4zIDI2My4xIDMyNy4xIDI1NiAzMTIgMjU2bC03MS41IDAtNTYuOC04MC4yLS4yLS4zYzQ0LjctMjkgNzIuNS03OSA3Mi41LTEzMy42bDAtOS44ek05NiA4MEE0OCA0OCAwIDEgMCAwIDgwYTQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAyODYuMWw1OC42IDUzLjljNC44IDQuNCAxMS45IDUuNSAxNy44IDIuNnM5LjUtOSA5LTE1LjVsLTUuNi03OS40IDc4LjctMTIuMmM2LjUtMSAxMS43LTUuOSAxMy4xLTEyLjJzLTEuMS0xMy02LjUtMTYuN2wtNjUuNi00NS4xTDYwMyA5Mi4yYzMuMy01LjcgMi43LTEyLjgtMS40LTE3LjlzLTEwLjktNy4yLTE3LjItNS4zTDUwOC4zIDkyLjFsLTI5LjQtNzRDNDc2LjQgMTIgNDcwLjYgOCA0NjQgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEwzNDMuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMS02NS42IDQ1LjFjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43Yy4xIC4zIC4xIC42IC4yIC44bDE5LjQgMGMyMC4xIDAgMzkuMiA3LjUgNTMuOCAyMC44bDE4LjQgMi45TDM4MyAyNjUuM2wzNi4yIDQ4LjNjMi4xIDIuOCAzLjkgNS43IDUuNSA4LjZMNDY0IDI4Ni4xelwiXVxufTtcbnZhciBmYUF3YXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F3YXJkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNTU5XCIsIFwiTTE3My44IDUuNWMxMS03LjMgMjUuNC03LjMgMzYuNCAwTDIyOCAxNy4yYzYgMy45IDEzIDUuOCAyMC4xIDUuNGwyMS4zLTEuM2MxMy4yLS44IDI1LjYgNi40IDMxLjUgMTguMmw5LjYgMTkuMWMzLjIgNi40IDguNCAxMS41IDE0LjcgMTQuN0wzNDQuNSA4M2MxMS44IDUuOSAxOSAxOC4zIDE4LjIgMzEuNWwtMS4zIDIxLjNjLS40IDcuMSAxLjUgMTQuMiA1LjQgMjAuMWwxMS44IDE3LjhjNy4zIDExIDcuMyAyNS40IDAgMzYuNEwzNjYuOCAyMjhjLTMuOSA2LTUuOCAxMy01LjQgMjAuMWwxLjMgMjEuM2MuOCAxMy4yLTYuNCAyNS42LTE4LjIgMzEuNWwtMTkuMSA5LjZjLTYuNCAzLjItMTEuNSA4LjQtMTQuNyAxNC43TDMwMSAzNDQuNWMtNS45IDExLjgtMTguMyAxOS0zMS41IDE4LjJsLTIxLjMtMS4zYy03LjEtLjQtMTQuMiAxLjUtMjAuMSA1LjRsLTE3LjggMTEuOGMtMTEgNy4zLTI1LjQgNy4zLTM2LjQgMEwxNTYgMzY2LjhjLTYtMy45LTEzLTUuOC0yMC4xLTUuNGwtMjEuMyAxLjNjLTEzLjIgLjgtMjUuNi02LjQtMzEuNS0xOC4ybC05LjYtMTkuMWMtMy4yLTYuNC04LjQtMTEuNS0xNC43LTE0LjdMMzkuNSAzMDFjLTExLjgtNS45LTE5LTE4LjMtMTguMi0zMS41bDEuMy0yMS4zYy40LTcuMS0xLjUtMTQuMi01LjQtMjAuMUw1LjUgMjEwLjJjLTcuMy0xMS03LjMtMjUuNCAwLTM2LjRMMTcuMiAxNTZjMy45LTYgNS44LTEzIDUuNC0yMC4xbC0xLjMtMjEuM2MtLjgtMTMuMiA2LjQtMjUuNiAxOC4yLTMxLjVsMTkuMS05LjZDNjUgNzAuMiA3MC4yIDY1IDczLjQgNTguNkw4MyAzOS41YzUuOS0xMS44IDE4LjMtMTkgMzEuNS0xOC4ybDIxLjMgMS4zYzcuMSAuNCAxNC4yLTEuNSAyMC4xLTUuNEwxNzMuOCA1LjV6TTI3MiAxOTJhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwek0xLjMgNDQxLjhMNDQuNCAzMzkuM2MuMiAuMSAuMyAuMiAuNCAuNGw5LjYgMTkuMWMxMS43IDIzLjIgMzYgMzcuMyA2MiAzNS44bDIxLjMtMS4zYy4yIDAgLjUgMCAuNyAuMmwxNy44IDExLjhjNS4xIDMuMyAxMC41IDUuOSAxNi4xIDcuN2wtMzcuNiA4OS4zYy0yLjMgNS41LTcuNCA5LjItMTMuMyA5LjdzLTExLjYtMi4yLTE0LjgtNy4yTDc0LjQgNDU1LjVsLTU2LjEgOC4zYy01LjcgLjgtMTEuNC0xLjUtMTUtNnMtNC4zLTEwLjctMi4xLTE2em0yNDggNjAuNEwyMTEuNyA0MTNjNS42LTEuOCAxMS00LjMgMTYuMS03LjdsMTcuOC0xMS44Yy4yLS4xIC40LS4yIC43LS4ybDIxLjMgMS4zYzI2IDEuNSA1MC4zLTEyLjYgNjItMzUuOGw5LjYtMTkuMWMuMS0uMiAuMi0uMyAuNC0uNGw0My4yIDEwMi41YzIuMiA1LjMgMS40IDExLjQtMi4xIDE2cy05LjMgNi45LTE1IDZsLTU2LjEtOC4zLTMyLjIgNDkuMmMtMy4yIDUtOC45IDcuNy0xNC44IDcuMnMtMTEtNC4zLTEzLjMtOS43elwiXVxufTtcbnZhciBmYVRpY2tldFNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aWNrZXQtc2ltcGxlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0aWNrZXQtYWx0XCJdLCBcImYzZmZcIiwgXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNkM1NDEuNSAyMTcuMSA1MjggMjM1IDUyOCAyNTZzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNnY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzIwYzAtOC44IDcuNC0xNS43IDE1LjctMTguNkMzNC41IDI5NC45IDQ4IDI3NyA0OCAyNTZzLTEzLjUtMzguOS0zMi4zLTQ1LjRDNy40IDIwNy43IDAgMjAwLjggMCAxOTJWMTI4elwiXVxufTtcbnZhciBmYVRpY2tldEFsdCA9IGZhVGlja2V0U2ltcGxlO1xudmFyIGZhQnVpbGRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc5NzAsIDYxNjg3XSwgXCJmMWFkXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQW5nbGVzTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZXMtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE3MSwgXCJhbmdsZS1kb3VibGUtbGVmdFwiXSwgXCJmMTAwXCIsIFwiTTQxLjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyNTYgMjQ2LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6bTM1Mi0xNjBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMDEuMyAyNTYgNDM4LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDB6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVMZWZ0ID0gZmFBbmdsZXNMZWZ0O1xudmFyIGZhUXJjb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3FyY29kZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAyOVwiLCBcIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MHpNNjQgOTZ2NjRoNjRWOTZINjR6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMzZ6bTY0IDE2djY0aDY0VjM1Mkg2NHpNMzA0IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDMwNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDh6bTgwIDY0SDMyMHY2NGg2NFY5NnpNMjU2IDMwNGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYzMDR6TTM2OCA0ODBhMTYgMTYgMCAxIDEgMC0zMiAxNiAxNiAwIDEgMSAwIDMyem02NCAwYTE2IDE2IDAgMSAxIDAtMzIgMTYgMTYgMCAxIDEgMCAzMnpcIl1cbn07XG52YXIgZmFDbG9ja1JvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvY2stcm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhpc3RvcnlcIl0sIFwiZjFkYVwiLCBcIk03NSA3NUw0MSA0MUMyNS45IDI1LjkgMCAzNi42IDAgNTcuOVYxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMTM0LjFjMjEuNCAwIDMyLjEtMjUuOSAxNy00MWwtMzAuOC0zMC44QzE1NSA4NS41IDIwMyA2NCAyNTYgNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJzLTg2IDE5Mi0xOTIgMTkyYy00MC44IDAtNzguNi0xMi43LTEwOS43LTM0LjRjLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZDMTUxLjIgNDk1IDIwMS43IDUxMiAyNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMEMxODUuMyAwIDEyMS4zIDI4LjcgNzUgNzV6bTE4MSA1M2MtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjU2YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NVYxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdXG59O1xudmFyIGZhSGlzdG9yeSA9IGZhQ2xvY2tSb3RhdGVMZWZ0O1xudmFyIGZhRmFjZUdyaW5CZWFtU3dlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLWJlYW0tc3dlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTcsIFwiZ3Jpbi1iZWFtLXN3ZWF0XCJdLCBcImY1ODNcIiwgXCJNNDc2LjggMTI2LjNjLTQuMSAxLjEtOC40IDEuNy0xMi44IDEuN2MtMjYuNSAwLTQ4LTIxLTQ4LTQ3YzAtNSAxLjgtMTEuMyA0LjYtMTguMWMuMy0uNyAuNi0xLjQgLjktMi4xYzktMjAuMiAyNi41LTQ0LjkgMzYtNTcuNWMzLjItNC40IDkuNi00LjQgMTIuOCAwQzQ4My40IDIwLjYgNTEyIDYxIDUxMiA4MWMwIDIxLjctMTQuOSAzOS44LTM1LjIgNDUuM3pNMjU2IDBjNTEuNCAwIDk5LjMgMTUuMiAxMzkuNCA0MS4yYy0xLjUgMy4xLTMgNi4yLTQuMyA5LjNjLTMuNCA4LTcuMSAxOS03LjEgMzAuNWMwIDQ0LjMgMzYuNiA3OSA4MCA3OWM5LjYgMCAxOC44LTEuNyAyNy40LTQuOGMxMy4zIDMwLjkgMjAuNiA2NSAyMC42IDEwMC44YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwek0zODguMSAzMTIuOGMtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjVjNS0xMS44LTctMjIuNS0xOS4zLTE4Ljd6bS0xNzAuNS04NGwwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxMjYuNyAxODguNCAxMjAgMjA2LjEgMTIwIDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDAgMCAwem0xNjAgMGwwIDAgMCAwIDAgMGMyLjEgMi44IDUuNyAzLjkgOC45IDIuOHM1LjUtNC4xIDUuNS03LjZjMC0xNy45LTYuNy0zNS42LTE2LjYtNDguOGMtOS44LTEzLTIzLjktMjMuMi0zOS40LTIzLjJzLTI5LjYgMTAuMi0zOS40IDIzLjJDMjg2LjcgMTg4LjQgMjgwIDIwNi4xIDI4MCAyMjRjMCAzLjQgMi4yIDYuNSA1LjUgNy42czYuOSAwIDguOS0yLjhsMCAwIDAgMCAwIDAgLjItLjJjLjItLjIgLjQtLjUgLjctLjljLjYtLjggMS42LTIgMi44LTMuNGMyLjUtMi44IDYtNi42IDEwLjItMTAuM2M4LjgtNy44IDE4LjgtMTQgMjcuNy0xNHMxOC45IDYuMiAyNy43IDE0YzQuMiAzLjcgNy43IDcuNSAxMC4yIDEwLjNjMS4yIDEuNCAyLjIgMi42IDIuOCAzLjRjLjMgLjQgLjYgLjcgLjcgLjlsLjIgLjIgMCAwelwiXVxufTtcbnZhciBmYUdyaW5CZWFtU3dlYXQgPSBmYUZhY2VHcmluQmVhbVN3ZWF0O1xudmFyIGZhRmlsZUV4cG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWV4cG9ydCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYXJyb3ctcmlnaHQtZnJvbS1maWxlXCJdLCBcImY1NmVcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODRWMjg4SDIxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgzODRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMzg0IDMzNlYyODhINDk0LjFsLTM5LTM5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5SDM4NHptMC0yMDhIMjU2VjBMMzg0IDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0RnJvbUZpbGUgPSBmYUZpbGVFeHBvcnQ7XG52YXIgZmFTaGllbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpZWxkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzM3LCBcInNoaWVsZC1ibGFua1wiXSwgXCJmMTMyXCIsIFwiTTI1NiAwYzQuNiAwIDkuMiAxIDEzLjQgMi45TDQ1Ny43IDgyLjhjMjIgOS4zIDM4LjQgMzEgMzguMyA1Ny4yYy0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjJjLTE2LjcgOC0zNi4xIDgtNTIuOCAwQzU3LjMgNDIwLjcgMTYuNSAyMzkuMiAxNiAxNDBjLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjggMSAyNTEuNCAwIDI1NiAwelwiXVxufTtcbnZhciBmYVNoaWVsZEJsYW5rID0gZmFTaGllbGQ7XG52YXIgZmFBcnJvd1VwU2hvcnRXaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXNob3J0LXdpZGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYW1vdW50LXVwLWFsdFwiXSwgXCJmODg1XCIsIFwiTTE1MS42IDQyLjRDMTQ1LjUgMzUuOCAxMzcgMzIgMTI4IDMycy0xNy41IDMuOC0yMy42IDEwLjRsLTg4IDk2Yy0xMS45IDEzLTExLjEgMzMuMyAyIDQ1LjJzMzMuMyAxMS4xIDQ1LjItMkw5NiAxNDYuM1Y0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNDYuM2wzMi40IDM1LjRjMTEuOSAxMyAzMi4yIDEzLjkgNDUuMiAyczEzLjktMzIuMiAyLTQ1LjJsLTg4LTk2ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6XCJdXG59O1xudmFyIGZhU29ydEFtb3VudFVwQWx0ID0gZmFBcnJvd1VwU2hvcnRXaWRlO1xudmFyIGZhSG91c2VNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUzYjJcIiwgXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDguNWMzNS41IDAgNjQuMi0yOC44IDY0LTY0LjNsLS43LTE2MC4yaDMyek0yNTYgMjA4YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhoNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzMjB2NDhjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjMyMEgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDQ4VjIwOHpcIl1cbn07XG52YXIgZmFHb2xmQmFsbFRlZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnb2xmLWJhbGwtdGVlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJnb2xmLWJhbGxcIl0sIFwiZjQ1MFwiLCBcIk0zODQgMTkyYzAgNjYuOC0zNC4xIDEyNS42LTg1LjggMTYwSDg1LjhDMzQuMSAzMTcuNiAwIDI1OC44IDAgMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MnpNMjQyLjEgMjU2LjZjMCAxOC41LTE1IDMzLjUtMzMuNSAzMy41Yy00LjkgMC05LjEgNS4xLTUuNCA4LjRjNS45IDUuMiAxMy43IDguNCAyMi4xIDguNGMxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC04LjUtMy4yLTE2LjItOC40LTIyLjFjLTMuMy0zLjctOC40IC41LTguNCA1LjR6bS01Mi4zLTQ5LjNjLTQuOSAwLTkuMSA1LjEtNS40IDguNGM1LjkgNS4yIDEzLjcgOC40IDIyLjEgOC40YzE4LjUgMCAzMy41LTE1IDMzLjUtMzMuNWMwLTguNS0zLjItMTYuMi04LjQtMjIuMWMtMy4zLTMuNy04LjQgLjUtOC40IDUuNGMwIDE4LjUtMTUgMzMuNS0zMy41IDMzLjV6bTExMy41LTE3LjVjMCAxOC41LTE1IDMzLjUtMzMuNSAzMy41Yy00LjkgMC05LjEgNS4xLTUuNCA4LjRjNS45IDUuMiAxMy43IDguNCAyMi4xIDguNGMxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC04LjUtMy4yLTE2LjItOC40LTIyLjFjLTMuMy0zLjctOC40IC41LTguNCA1LjR6TTk2IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NjRjMC04LjgtNy4yLTE2LTE2LTE2SDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xudmFyIGZhR29sZkJhbGwgPSBmYUdvbGZCYWxsVGVlO1xudmFyIGZhQ2lyY2xlQ2hldnJvbkxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2hldnJvbi1jaXJjbGUtbGVmdFwiXSwgXCJmMTM3XCIsIFwiTTUxMiAyNTZBMjU2IDI1NiAwIDEgMCAwIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwek0yNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODcgODcgODcgODdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxNjcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwyNzEgMTM1elwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVMZWZ0ID0gZmFDaXJjbGVDaGV2cm9uTGVmdDtcbnZhciBmYUhvdXNlQ2hpbW5leVdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LXdpbmRvdycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTAwZFwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWgtMzJsLjcgMTYwLjJjLjIgMzUuNS0yOC41IDY0LjMtNjQgNjQuM0gxMjguMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQxNiAxMDAuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYxODVsNTIuOCA0Ni40YzggNyAxMiAxNSAxMSAyNHpNMjQ4IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjR2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMjE2YzAtMTMuMy0xMC43LTI0LTI0LTI0SDI0OHpcIl1cbn07XG52YXIgZmFQZW5OaWIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLW5pYicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEwMDAxXSwgXCJmNWFkXCIsIFwiTTM2OC40IDE4LjNMMzEyLjcgNzQuMSA0MzcuOSAxOTkuM2w1NS43LTU1LjdjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNDQ3LjYgMTguM2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDB6TTI4OCA5NC42bC05LjIgMi44TDEzNC43IDE0MC42Yy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0zLjggMTEuMy0xIDIzLjkgNy4zIDMyLjRMMTY0LjcgMzI0LjdjLTMtNi4zLTQuNy0xMy4zLTQuNy0yMC43YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhjLTcuNCAwLTE0LjQtMS43LTIwLjctNC43TDMzLjcgNTAwLjljOC42IDguMyAyMS4xIDExLjIgMzIuNCA3LjNsMjY0LjMtODguNmMxOS43LTYuNiAzNS0yMi40IDQxLTQyLjNsNDMuMi0xNDQuMSAyLjgtOS4yTDI4OCA5NC42elwiXVxufTtcbnZhciBmYVRlbnRBcnJvd1R1cm5MZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbnQtYXJyb3ctdHVybi1sZWZ0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTgwXCIsIFwiTTEyMC4xIDQxLjhjOS45LTguOSAxMC43LTI0IDEuOC0zMy45Uzk3LjgtMi43IDg3LjkgNi4ybC04MCA3MkMyLjkgODIuNyAwIDg5LjIgMCA5NnMyLjkgMTMuMyA3LjkgMTcuOGw4MCA3MmM5LjkgOC45IDI1IDguMSAzMy45LTEuOHM4LjEtMjUtMS44LTMzLjlMODYuNSAxMjAgNDU2IDEyMGMzOS44IDAgNzIgMzIuMiA3MiA3MnY0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjE5MmMwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMEw4Ni41IDcybDMzLjUtMzAuMnpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJIMjQwaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM2MS45YzAtNS41IDQuNC05LjkgOS45LTkuOWMzLjcgMCA3LjIgMi4xIDguOCA1LjVsNjguNCAxMzYuOGM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43SDQ2NGgxNmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xudmFyIGZhVGVudHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1ODJcIiwgXCJNMzk2LjYgNi41TDIzNS44IDEyOS4xYzkuNiAxLjggMTguOSA1LjggMjcgMTJsMTY4IDEyOGMxMy4yIDEwLjEgMjIgMjQuOSAyNC41IDQxLjRsNi4yIDQxLjVINjA4YzkuMyAwIDE4LjItNC4xIDI0LjItMTEuMXM4LjgtMTYuNCA3LjQtMjUuNmwtMjQtMTYwYy0xLjItOC4yLTUuNi0xNS43LTEyLjMtMjAuN2wtMTY4LTEyOGMtMTEuNS04LjctMjcuMy04LjctMzguOCAwem0tMTUzLjIgMTYwYy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTMjIuNyA1MTIgMzIgNTEySDE3NmgxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzNjEuOWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN0g0MDBoMTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXVxufTtcbnZhciBmYVdhbmRNYWdpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YW5kLW1hZ2ljJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJtYWdpY1wiXSwgXCJmMGQwXCIsIFwiTTE0LjEgNDYzLjNjLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45TDM5NS40IDE0LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsMzQuNiAzNC42YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDExNi41IDQ5Ny45Yy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwxNC4xIDQ2My4zek0zNDcuNiAxODcuNmwxMDUtMTA1TDQyOS40IDU5LjNsLTEwNSAxMDUgMjMuMyAyMy4zelwiXVxufTtcbnZhciBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7XG52YXIgZmFEb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDIxXSwgXCJmNmQzXCIsIFwiTTMwOS42IDE1OC41TDMzMi43IDE5LjhDMzM0LjYgOC40IDM0NC41IDAgMzU2LjEgMGM3LjUgMCAxNC41IDMuNSAxOSA5LjVMMzkyIDMyaDUyLjFjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMUw0OTYgNjRoNTZjMTMuMyAwIDI0IDEwLjcgMjQgMjR2MjRjMCA0NC4yLTM1LjggODAtODAgODBINDY0IDQ0OCA0MjYuN2wtNS4xIDMwLjUtMTEyLTY0ek00MTYgMjU2LjFMNDE2IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM2NC44Yy0yNCAxMi4zLTUxLjIgMTkuMi04MCAxOS4ycy01Ni02LjktODAtMTkuMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI0OS44Yy0yOC44LTEwLjktNTEuNC0zNS4zLTU5LjItNjYuNUwxIDE2Ny44Yy00LjMtMTcuMSA2LjEtMzQuNSAyMy4zLTM4LjhzMzQuNSA2LjEgMzguOCAyMy4zbDMuOSAxNS41QzcwLjUgMTgyIDgzLjMgMTkyIDk4IDE5MmgzMCAxNkgzMDMuOEw0MTYgMjU2LjF6TTQ2NCA4MGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYUNhcnJvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJyb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNjVdLCBcImY3ODdcIiwgXCJNMzQ2LjcgNkMzMzcuNiAxNyAzMjAgNDIuMyAzMjAgNzJjMCA0MCAxNS4zIDU1LjMgNDAgODBzNDAgNDAgODAgNDBjMjkuNyAwIDU1LTE3LjYgNjYtMjYuN2M0LTMuMyA2LTguMiA2LTEzLjNzLTItMTAtNi0xMy4yYy0xMS40LTkuMS0zOC4zLTI2LjgtNzQtMjYuOGMtMzIgMC00MCA4LTQwIDhzOC04IDgtNDBjMC0zNS43LTE3LjctNjIuNi0yNi44LTc0QzM3MCAyIDM2NS4xIDAgMzYwIDBzLTEwIDItMTMuMyA2ek0yNDQuNiAxMzZjLTQwIDAtNzcuMSAxOC4xLTEwMS43IDQ4LjJsNjAuNSA2MC41YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTU1LjMtNTUuMyAwIC4xTDIuMiA0NzcuOUMtMiA0ODctLjEgNDk3LjggNyA1MDVzMTcuOSA5IDI3LjEgNC44bDEzNC43LTYyLjQtNTIuMS01Mi4xYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMMTk5LjcgNDMzbDEwMC4yLTQ2LjRjNDYuNC0yMS41IDc2LjItNjggNzYuMi0xMTkuMkMzNzYgMTk0LjggMzE3LjIgMTM2IDI0NC42IDEzNnpcIl1cbn07XG52YXIgZmFNb29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vb24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc3NjksIDkyMTRdLCBcImYxODZcIiwgXCJNMjIzLjUgMzJDMTAwIDMyIDAgMTMyLjMgMCAyNTZTMTAwIDQ4MCAyMjMuNSA0ODBjNjAuNiAwIDExNS41LTI0LjIgMTU1LjgtNjMuNGM1LTQuOSA2LjMtMTIuNSAzLjEtMTguN3MtMTAuMS05LjctMTctOC41Yy05LjggMS43LTE5LjggMi42LTMwLjEgMi42Yy05Ni45IDAtMTc1LjUtNzguOC0xNzUuNS0xNzZjMC02NS44IDM2LTEyMy4xIDg5LjMtMTUzLjNjNi4xLTMuNSA5LjItMTAuNSA3LjctMTcuM3MtNy4zLTExLjktMTQuMy0xMi41Yy02LjMtLjUtMTIuNi0uOC0xOS0uOHpcIl1cbn07XG52YXIgZmFXaW5lR2xhc3NFbXB0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5lLWdsYXNzLWVtcHR5JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJ3aW5lLWdsYXNzLWFsdFwiXSwgXCJmNWNlXCIsIFwiTTY0IDBDNDcuNCAwIDMzLjUgMTIuOCAzMi4xIDI5LjNsLTE0IDE2OC40Yy02IDcyIDQyLjUgMTM1LjIgMTA5LjkgMTUwLjZWNDQ4SDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwIDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MlYzNDguNGM2Ny40LTE1LjQgMTE1LjktNzguNiAxMDkuOS0xNTAuNmwtMTQtMTY4LjRDMjg2LjUgMTIuOCAyNzIuNiAwIDI1NiAwSDY0ek04MS45IDIwMy4xTDkzLjQgNjRIMjI2LjZsMTEuNiAxMzkuMUMyNDIgMjQ4LjggMjA1LjkgMjg4IDE2MCAyODhzLTgyLTM5LjItNzguMS04NC45elwiXVxufTtcbnZhciBmYVdpbmVHbGFzc0FsdCA9IGZhV2luZUdsYXNzRW1wdHk7XG52YXIgZmFDaGVlc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlZXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2VmXCIsIFwiTTUxMiAyNDAuMlYyNTZIMGMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguN0M0MTguOCAzMiA1MTIgMTI1LjIgNTEyIDI0MC4yem0wIDQ3LjhWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyODhINTEyelwiXVxufTtcbnZhciBmYVlpbllhbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneWluLXlhbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgXCJmNmFkXCIsIFwiTTI1NiA2NGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMzItMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG52YXIgZmFNdXNpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtdXNpYycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkyNV0sIFwiZjAwMVwiLCBcIk00OTkuMSA2LjNjOC4xIDYgMTIuOSAxNS42IDEyLjkgMjUuN3Y3MlYzNjhjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwczQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42VjE0N0wxOTIgMjIzLjhWNDMyYzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MHM0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNlYyMDAgMTI4YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjdsMzIwLTk2YzkuNy0yLjkgMjAuMi0xLjEgMjguMyA1elwiXVxufTtcbnZhciBmYUNvZGVDb21taXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1jb21taXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzODZcIiwgXCJNMzIwIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDYyIDM2MSAzOTcuNCA0MTYgMzIwIDQxNnMtMTQyLTU1LTE1Ni44LTEyOEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNjMuMkMxNzggMTUxIDI0Mi42IDk2IDMyMCA5NnMxNDIgNTUgMTU2LjggMTI4SDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NzYuOHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1sb3cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3NmJcIiwgXCJNNDQ4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCA5NmE5NiA5NiAwIDEgMSAxOTIgMEE5NiA5NiAwIDEgMSAzMjAgOTZ6TTE0NCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMjc2LjVjMCAxNy4zLTcuMSAzMS45LTE1LjMgNDIuNUM3MC4yIDMzMi42IDY0IDM0OS41IDY0IDM2OGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMTguNS02LjItMzUuNC0xNi43LTQ4LjljLTguMi0xMC42LTE1LjMtMjUuMi0xNS4zLTQyLjVWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMiAxMTJDMzIgNTAuMiA4Mi4xIDAgMTQ0IDBzMTEyIDUwLjEgMTEyIDExMlYyNzYuNWMwIC4xIC4xIC4zIC4yIC42Yy4yIC42IC44IDEuNiAxLjcgMi44YzE4LjkgMjQuNCAzMC4xIDU1IDMwLjEgODguMWMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMwIDQ0Ny41IDAgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0xOTIgMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY1MC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3pcIl1cbn07XG52YXIgZmFQZXJzb25CaWtpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJpa2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MiwgXCJiaWtpbmdcIl0sIFwiZjg0YVwiLCBcIk00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI4OCAzMDUuMVY0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyOTUgMjMyLjlsNjAuMy00OC41TDM5NiAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2g2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MjcuMnpNNTYgMzg0YTcyIDcyIDAgMSAxIDE0NCAwQTcyIDcyIDAgMSAxIDU2IDM4NHptMjAwIDBBMTI4IDEyOCAwIDEgMCAwIDM4NGExMjggMTI4IDAgMSAwIDI1NiAwem0xODQgMGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6bTIwMCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6XCJdXG59O1xudmFyIGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7XG52YXIgZmFCcm9vbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicm9vbScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyOTUyOV0sIFwiZjUxYVwiLCBcIk01NjYuNiA1NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyLTM0LjctMzQuN2MtNC4yLTQuMi0xMC02LjYtMTYtNi42Yy0xMi41IDAtMjIuNiAxMC4xLTIyLjYgMjIuNnYyOS4xTDM2NC4zIDMyMGgyOS4xYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZsLTM0LjctMzQuNyAxOTItMTkyek0zNDEuMSAzNTMuNEwyMjIuNiAyMzQuOWMtNDIuNy0zLjctODUuMiAxMS43LTExNS44IDQyLjNsLTggOEM3Ni41IDMwNy41IDY0IDMzNy43IDY0IDM2OS4yYzAgNi44IDcuMSAxMS4yIDEzLjIgOC4ybDUxLjEtMjUuNWM1LTIuNSA5LjUgNC4xIDUuNCA3LjlMNy4zIDQ3My40QzIuNyA0NzcuNiAwIDQ4My42IDAgNDg5LjlDMCA1MDIuMSA5LjkgNTEyIDIyLjEgNTEybDE3My4zIDBjMzguOCAwIDc1LjktMTUuNCAxMDMuNC00Mi44YzMwLjYtMzAuNiA0NS45LTczLjEgNDIuMy0xMTUuOHpcIl1cbn07XG52YXIgZmFTaGllbGRIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtaGVhcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NzRcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTQ0IDIyMS4zYzAtMzMuOCAyNy40LTYxLjMgNjEuMy02MS4zYzE2LjIgMCAzMS44IDYuNSA0My4zIDE3LjlsNy40IDcuNCA3LjQtNy40YzExLjUtMTEuNSAyNy4xLTE3LjkgNDMuMy0xNy45YzMzLjggMCA2MS4zIDI3LjQgNjEuMyA2MS4zYzAgMTYuMi02LjUgMzEuOC0xNy45IDQzLjNsLTgyLjcgODIuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTgyLjctODIuN2MtMTEuNS0xMS41LTE3LjktMjcuMS0xNy45LTQzLjN6XCJdXG59O1xudmFyIGZhR29wdXJhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnb3B1cmFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjY0XCIsIFwiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0djhoNDBWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4aDQ4VjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2OGg0MFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djhWNjR2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJINDE2VjM1MkgzODRWMjI0SDM1MlYxMjhIMzIwdjk2aDMyVjM1MmgzMlY1MTJIMzA0VjQ2NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY0OEgxMjhWMzUyaDMyVjIyNGgzMlYxMjhIMTYwdjk2SDEyOFYzNTJIOTZWNTEySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMlY2NCAzMiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjU2IDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NDhoNjRWMzA0YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMzItODB2MzJoNjRWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUVhcnRoT2NlYW5pYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1vY2VhbmlhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJnbG9iZS1vY2VhbmlhXCJdLCBcImU0N2JcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwOC42IDM1Ny4zbC0zOS0xMy41Yy02LjUtMi4yLTEzLjYtMi4zLTIwLjEtLjNsLTE1LjMgNC45Yy0xOC41IDUuOS0zOC41LTIuNC00Ny41LTE5LjVsLTMuMy02LjJjLTEwLjYtMjAuMS0yLjMtNDUgMTguMi01NC43bDM1LjMtMTYuOGMyLjMtMS4xIDQuNC0yLjggNS45LTQuOGw1LjMtN2M3LjItOS42IDE4LjYtMTUuMyAzMC42LTE1LjNzMjMuNCA1LjcgMzAuNiAxNS4zbDQuNiA2LjFjMiAyLjYgNC45IDQuNSA4LjEgNS4xYzcuOCAxLjYgMTUuNy0xLjUgMjAuNC03LjlsMTAuNC0xNC4yYzItMi44IDUuMy00LjQgOC43LTQuNGM0LjQgMCA4LjQgMi43IDEwIDYuOGwxMC4xIDI1LjljMi44IDcuMiA2LjcgMTQgMTEuNSAyMC4yTDMxMSAyOTkuOGM1LjggNy40IDkgMTYuNiA5IDI2cy0zLjIgMTguNi05IDI2TDI5OSAzNjcuMmMtOC4zIDEwLjYtMjEgMTYuOC0zNC40IDE2LjhjLTguNCAwLTE2LjYtMi40LTIzLjctN2wtMjUuNC0xNi40Yy0yLjItMS40LTQuNS0yLjUtNi45LTMuNHptNjUuMi0yMTQuOEwyOTYgMTY0LjdjMTAuMSAxMC4xIDIuOSAyNy4zLTExLjMgMjcuM0gyNTQuOGMtNS42IDAtMTEuMS0xLjItMTYuMi0zLjRsLTQyLjgtMTljLTE0LjMtNi4zLTExLjktMjcuMyAzLjQtMzAuM2wzOC41LTcuN2MxMy4xLTIuNiAyNi43IDEuNSAzNi4xIDEwLjl6TTI0OCA0MzJjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI2NGMtOC44IDAtMTYtNy4yLTE2LTE2ek00MzEuMiAyOTguOWw4IDI0YzIuOCA4LjQtMS43IDE3LjQtMTAuMSAyMC4ycy0xNy40LTEuNy0yMC4yLTEwLjFsLTgtMjRjLTIuOC04LjQgMS43LTE3LjQgMTAuMS0yMC4yczE3LjQgMS43IDIwLjIgMTAuMXptLTE5LjkgODAuNGwtMzIgMzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzItMzJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbnZhciBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhO1xudmFyIGZhU3F1YXJlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXhtYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwNjIsIFwidGltZXMtc3F1YXJlXCIsIFwieG1hcmstc3F1YXJlXCJdLCBcImYyZDNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em03OSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdXG59O1xudmFyIGZhVGltZXNTcXVhcmUgPSBmYVNxdWFyZVhtYXJrO1xudmFyIGZhWG1hcmtTcXVhcmUgPSBmYVNxdWFyZVhtYXJrO1xudmFyIGZhSGFzaHRhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYXNodGFnJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjIwOThdLCBcIjIzXCIsIFwiTTE4MS4zIDMyLjRjMTcuNCAyLjkgMjkuMiAxOS40IDI2LjMgMzYuOEwxOTcuOCAxMjhoOTUuMWwxMS41LTY5LjNjMi45LTE3LjQgMTkuNC0yOS4yIDM2LjgtMjYuM3MyOS4yIDE5LjQgMjYuMyAzNi44TDM1Ny44IDEyOEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzQ3LjFMMzI1LjggMzIwSDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMTUuMWwtMTEuNSA2OS4zYy0yLjkgMTcuNC0xOS40IDI5LjItMzYuOCAyNi4zcy0yOS4yLTE5LjQtMjYuMy0zNi44bDkuOC01OC43SDE1NS4xbC0xMS41IDY5LjNjLTIuOSAxNy40LTE5LjQgMjkuMi0zNi44IDI2LjNzLTI5LjItMTkuNC0yNi4zLTM2LjhMOTAuMiAzODRIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNjguOWwyMS4zLTEyOEg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2OC45bDExLjUtNjkuM2MyLjktMTcuNCAxOS40LTI5LjIgMzYuOC0yNi4zek0xODcuMSAxOTJMMTY1LjggMzIwaDk1LjFsMjEuMy0xMjhIMTg3LjF6XCJdXG59O1xudmFyIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleHBhbmQtYWx0XCJdLCBcImY0MjRcIiwgXCJNMzQ0IDBINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0VjE2OGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOS04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTMyLTMyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04N0wzMjcgNDFjLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTMzM0LjMgMCAzNDQgMHpNMTY4IDUxMkgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMzQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMiAzMmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODcgODcgMzkgMzljNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOHpcIl1cbn07XG52YXIgZmFFeHBhbmRBbHQgPSBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXI7XG52YXIgZmFPaWxDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjYxM1wiLCBcIk0zMjAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMnYzMkgxNDQgOTYgNDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzBWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQwMy4xYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkybC01MC41LTI1LjJjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhIMjg4VjEyOGgzMnpNOTYgMjA4djg2LjFMNDggMjcyLjhWMjA4SDk2elwiXVxufTtcbnZhciBmYVQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndCcsXG4gIGljb246IFszODQsIDUxMiwgWzExNl0sIFwiNTRcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDE2MFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY5NkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyIDMyelwiXVxufTtcbnZhciBmYUhpcHBvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hpcHBvJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDM1XSwgXCJmNmVkXCIsIFwiTTQwNyA0N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNy4yIDE3LjJjMS45LS4xIDMuOS0uMiA1LjgtLjJoMzJjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMWMwIDEwLjIgNy40IDE4LjggMTYuNyAyM2MyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzNjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NHYzMmMwIDguOC03LjIgMTYtMTYgMTZINTYwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDQ4MHYxNmMwIDguOC03LjIgMTYtMTYgMTZINDMyYy04LjggMC0xNi03LjItMTYtMTZWMzE4LjRjLTExLjgtMi40LTIyLjctNy40LTMyLTE0LjRjLTEuNS0xLjEtMi45LTIuMy00LjMtMy41Yy0xNy0xNC43LTI3LjctMzYuNC0yNy43LTYwLjVjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA0NC43IDI2LjIgODMuMiA2NCAxMDEuMlYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzNzJjLTE5LjggNy43LTQxLjQgMTItNjQgMTJzLTQ0LjItNC4zLTY0LTEydjc2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYzMjkuMUw0NS45IDM2OS43Yy01LjQgMTIuMS0xOS42IDE3LjYtMzEuNyAxMi4yUy0zLjMgMzYyLjQgMi4xIDM1MC4zTDI0IDMwMC45YzUuMy0xMS45IDgtMjQuNyA4LTM3LjdDMzIgMTU1LjcgMTE3LjIgNjggMjIzLjggNjQuMWwuMi0uMWg3LjJIMjU2aDMyYzQxLjcgMCA4My40IDEyLjEgMTE3LjIgMjUuN2MxLjctMS44IDMuNS0zLjYgNS4zLTUuMkw0MDcgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em03MyAxODVhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptODggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek00ODAgMTQ0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFDaGFydENvbHVtbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1jb2x1bW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwZTNcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0xNjAgMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTI4LTY0VjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00ODAgOTZWMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhSW5maW5pdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5maW5pdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFs4NzM0LCA5ODU0XSwgXCJmNTM0XCIsIFwiTTAgMjQxLjFDMCAxNjEgNjUgOTYgMTQ1LjEgOTZjMzguNSAwIDc1LjQgMTUuMyAxMDIuNiA0Mi41TDMyMCAyMTAuN2w3Mi4yLTcyLjJDNDE5LjUgMTExLjMgNDU2LjQgOTYgNDk0LjkgOTZDNTc1IDk2IDY0MCAxNjEgNjQwIDI0MS4xdjI5LjdDNjQwIDM1MSA1NzUgNDE2IDQ5NC45IDQxNmMtMzguNSAwLTc1LjQtMTUuMy0xMDIuNi00Mi41TDMyMCAzMDEuM2wtNzIuMiA3Mi4yQzIyMC41IDQwMC43IDE4My42IDQxNiAxNDUuMSA0MTZDNjUgNDE2IDAgMzUxIDAgMjcwLjlWMjQxLjF6TTI3NC43IDI1NmwtNzIuMi03Mi4yYy0xNS4yLTE1LjItMzUuOS0yMy44LTU3LjQtMjMuOEMxMDAuMyAxNjAgNjQgMTk2LjMgNjQgMjQxLjF2MjkuN2MwIDQ0LjggMzYuMyA4MS4xIDgxLjEgODEuMWMyMS41IDAgNDIuMi04LjUgNTcuNC0yMy44TDI3NC43IDI1NnptOTAuNSAwbDcyLjIgNzIuMmMxNS4yIDE1LjIgMzUuOSAyMy44IDU3LjQgMjMuOGM0NC44IDAgODEuMS0zNi4zIDgxLjEtODEuMVYyNDEuMWMwLTQ0LjgtMzYuMy04MS4xLTgxLjEtODEuMWMtMjEuNSAwLTQyLjIgOC41LTU3LjQgMjMuOEwzNjUuMyAyNTZ6XCJdXG59O1xudmFyIGZhVmlhbENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTk2XCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIOTZoNjQgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWMjY2LjhjLTIwLjIgMjguNi0zMiA2My41LTMyIDEwMS4yYzAgMjUuMiA1LjMgNDkuMSAxNC44IDcwLjhDMTg5LjUgNDYzLjcgMTYwLjYgNDgwIDEyOCA0ODBjLTUzIDAtOTYtNDMtOTYtOTZWOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNOTYgOTZ2OTZoNjRWOTZIOTZ6TTIyNCAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMzUyIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1hcnJvdy1kb3duLXRvLWxpbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MzhcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTQ2NCA2NFYzMDYuN2wtMjUuNC0yNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w4MCA4MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw4MC04MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw1MjggMzA2LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhVm9pY2VtYWlsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvaWNlbWFpbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjg5N1wiLCBcIk0xNDQgMzIwYTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwem0xMTkuOCAwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwczY0LjUgMTQ0IDE0NCAxNDRINDk2Yzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0YzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwSDI2My44ek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYUZhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4NjNcIiwgXCJNMjU4LjYgMGMtMS43IDAtMy40IC4xLTUuMSAuNUMxNjggMTcgMTE1LjYgMTAyLjMgMTMwLjUgMTg5LjNjMi45IDE3IDguNCAzMi45IDE1LjkgNDcuNEwzMiAyMjRIMjkuNEMxMy4yIDIyNCAwIDIzNy4yIDAgMjUzLjRjMCAxLjcgLjEgMy40IC41IDUuMUMxNyAzNDQgMTAyLjMgMzk2LjQgMTg5LjMgMzgxLjVjMTctMi45IDMyLjktOC40IDQ3LjQtMTUuOUwyMjQgNDgwdjIuNmMwIDE2LjIgMTMuMiAyOS40IDI5LjQgMjkuNGMxLjcgMCAzLjQtLjEgNS4xLS41QzM0NCA0OTUgMzk2LjQgNDA5LjcgMzgxLjUgMzIyLjdjLTIuOS0xNy04LjQtMzIuOS0xNS45LTQ3LjRMNDgwIDI4OGgyLjZjMTYuMiAwIDI5LjQtMTMuMiAyOS40LTI5LjRjMC0xLjctLjEtMy40LS41LTUuMUM0OTUgMTY4IDQwOS43IDExNS42IDMyMi43IDEzMC41Yy0xNyAyLjktMzIuOSA4LjQtNDcuNCAxNS45TDI4OCAzMlYyOS40QzI4OCAxMy4yIDI3NC44IDAgMjU4LjYgMHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctbHVnZ2FnZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU1NFwiLCBcIk00MzIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0zNDcuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMNTA1IDIzMi43bC0xNS4zLTM2LjhDNDcyLjUgMTU0LjggNDMyLjMgMTI4IDM4Ny43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMWwtMjUgNjIuNC01OS40IDU5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzQwLjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnpNMjU2IDI3NC4xYy03LjctNC40LTE3LjQtMS44LTIxLjkgNS45bC0zMiA1NS40TDE0Ny43IDMwNGMtMTUuMy04LjgtMzQuOS0zLjYtNDMuNyAxMS43TDQwIDQyNi42Yy04LjggMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdsNTUuNCAzMmMxNS4zIDguOCAzNC45IDMuNiA0My43LTExLjdsNjQtMTEwLjljMS41LTIuNiAyLjYtNS4yIDMuMy04TDI2MS45IDI5NmM0LjQtNy43IDEuOC0xNy40LTUuOS0yMS45elwiXVxufTtcbnZhciBmYVVwRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cC1kb3duJyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbODU5NywgMTEwMjEsIFwiYXJyb3dzLWFsdC12XCJdLCBcImYzMzhcIiwgXCJNMTQ1LjYgNy43QzE0MSAyLjggMTM0LjcgMCAxMjggMHMtMTMgMi44LTE3LjYgNy43bC0xMDQgMTEyYy02LjUgNy04LjIgMTcuMi00LjQgMjUuOVMxNC41IDE2MCAyNCAxNjBIODBWMzUySDI0Yy05LjUgMC0xOC4yIDUuNy0yMiAxNC40cy0yLjEgMTguOSA0LjQgMjUuOWwxMDQgMTEyYzQuNSA0LjkgMTAuOSA3LjcgMTcuNiA3LjdzMTMtMi44IDE3LjYtNy43bDEwNC0xMTJjNi41LTcgOC4yLTE3LjIgNC40LTI1LjlzLTEyLjUtMTQuNC0yMi0xNC40SDE3NlYxNjBoNTZjOS41IDAgMTguMi01LjcgMjItMTQuNHMyLjEtMTguOS00LjQtMjUuOWwtMTA0LTExMnpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHRWID0gZmFVcERvd247XG52YXIgZmFDbG91ZE1vb25SYWluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLW1vb24tcmFpbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjczY1wiLCBcIk00ODEuMiAwQzQxNyAwIDM2My41IDQ2LjUgMzUzLjcgMTA3LjZjMzUuNCAxNy42IDYwLjIgNTMuMyA2Mi4xIDk1LjFjMjMuMiAxMSA0MiAyOS43IDUzLjEgNTIuN2M0IC40IDguMSAuNiAxMi4zIC42YzM0LjkgMCA2Ni43LTEzLjggODkuOS0zNi4xYzUuMS00LjkgNi40LTEyLjUgMy4yLTE4LjdzLTEwLjEtOS43LTE3LTguNmMtNC45IC44LTEwIDEuMy0xNS4yIDEuM2MtNDkgMC04OC40LTM5LjMtODguNC04Ny40YzAtMzIuNiAxOC02MS4xIDQ0LjktNzYuMWM2LjEtMy40IDkuMy0xMC41IDcuOC0xNy40cy03LjMtMTItMTQuMy0xMi42Yy0zLjYtLjMtNy4zLS41LTEwLjktLjV6TTM2Ny45IDM4My45YzQ0LjIgMCA4MC0zNS44IDgwLTgwYzAtMzkuMy0yOC40LTcyLjEtNjUuOC03OC43YzEuMi01LjYgMS45LTExLjMgMS45LTE3LjJjMC00NC4yLTM1LjgtODAtODAtODBjLTE3IDAtMzIuOCA1LjMtNDUuOCAxNC40QzI0MS4zIDExNC42IDIxMC44IDk2IDE3NiA5NmMtNTMgMC05NiA0My05NiA5NmwwIDEuM2MtNDUuNCA3LjYtODAgNDcuMS04MCA5NC42YzAgNTMgNDMgOTYgOTYgOTZIMzY3Ljl6TTg1LjQgNDIwLjFjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6XCJdXG59O1xudmFyIGZhQ2FsZW5kYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sIFwiZjEzM1wiLCBcIk05NiAzMlY2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnY0OEg0NDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDM1MlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY2NEgxNjBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkgwVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTkyelwiXVxufTtcbnZhciBmYVRyYWlsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaWxlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA0MVwiLCBcIk00OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwVjMzNmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg2NS4xYzcuOC01NC4zIDU0LjQtOTYgMTEwLjktOTZzMTAzLjEgNDEuNyAxMTAuOSA5Nkg0ODhoOEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTQ0VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek04MCA5NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxMzEuMmMtMTEuNCA1LjktMjIuMiAxMi45LTMyIDIxVjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTk2IDEyOGMtNS40IDAtMTAuNyAuMi0xNiAuN0wxNjAgMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMTIuN2MtNS4zLS41LTEwLjYtLjctMTYtLjd6bTgwIDE5LjJMMjU2IDExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTUyLjJjLTkuOC04LjEtMjAuNi0xNS4yLTMyLTIxek0zNjggOTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTkyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTkyYzAtOC44IDcuMi0xNiAxNi0xNnptMTEyIDE2bDAgMTkyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6TTE3NiA0ODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMTEyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFCYWhhaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWhhaScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGF5a2FsXCJdLCBcImY2NjZcIiwgXCJNMjg4IDBjMTQuNSAwIDI3LjIgOS43IDMwLjkgMjMuOGwyMy45IDg5LjYgNzUuOS01My4zYzExLjktOC4zIDI3LjgtNy42IDM5IDEuN3MxNC42IDI0LjkgOC40IDM4LjFsLTM5LjMgODQgOTIuNCA4YzE0LjQgMS4yIDI2LjIgMTIgMjguOCAyNi4zcy00LjkgMjguNS0xOCAzNC42bC04NC4xIDM5LjEgNjUuNyA2NS41YzEwLjMgMTAuMiAxMi40IDI2LjEgNS4xIDM4LjdzLTIyIDE4LjctMzYgMTQuOUwzOTEgMzg2LjhsOC4yIDkyLjRjMS4zIDE0LjQtNy4zIDI3LjktMjAuOSAzMi45cy0yOC45IC4xLTM3LjItMTEuN2wtNTMuMS03Ni01My4xIDc2Yy04LjMgMTEuOS0yMy42IDE2LjctMzcuMiAxMS43cy0yMi4yLTE4LjUtMjAuOS0zMi45bDguMi05Mi40TDk1LjQgNDEwLjljLTE0IDMuOC0yOC44LTIuMy0zNi0xNC45cy01LjItMjguNCA1LjEtMzguN2w2NS43LTY1LjVMNDYgMjUyLjdjLTEzLjEtNi4xLTIwLjUtMjAuMy0xOC0zNC42czE0LjMtMjUuMSAyOC44LTI2LjNsOTIuNC04LTM5LjMtODRjLTYuMS0xMy4xLTIuNy0yOC44IDguNC0zOC4xczI3LjEtMTAgMzktMS43bDc1LjkgNTMuMyAyMy45LTg5LjZDMjYwLjggOS43IDI3My41IDAgMjg4IDB6bTAgMTU2LjJsLTQuOCAxOGMtMi43IDEwLjEtMTAuMiAxOC4yLTIwIDIxLjhzLTIwLjggMi4xLTI5LjMtMy45bC0xNS4yLTEwLjcgNy45IDE2LjhjNC40IDkuNSA0IDIwLjUtMS4zIDI5LjZzLTE0LjUgMTUtMjUgMTUuOWwtMTguNSAxLjYgMTYuOCA3LjhjOS41IDQuNCAxNi4yIDEzLjIgMTggMjMuNXMtMS41IDIwLjgtOC45IDI4LjJsLTEzLjIgMTMuMSAxNy45LTQuOGMxMC4xLTIuNyAyMC45LS4zIDI4LjkgNi40czEyLjIgMTYuOSAxMS4zIDI3LjNsLTEuNiAxOC41IDEwLjYtMTUuMmM2LTguNiAxNS44LTEzLjcgMjYuMi0xMy43czIwLjIgNS4xIDI2LjIgMTMuN2wxMC42IDE1LjItMS42LTE4LjVjLS45LTEwLjQgMy4zLTIwLjYgMTEuMy0yNy4zczE4LjgtOS4xIDI4LjktNi40bDE3LjkgNC44LTEzLjItMTMuMWMtNy40LTcuNC0xMC43LTE3LjktOC45LTI4LjJzOC41LTE5LjEgMTgtMjMuNWwxNi44LTcuOC0xOC41LTEuNmMtMTAuNC0uOS0xOS43LTYuOC0yNS0xNS45cy01LjctMjAuMS0xLjMtMjkuNmw3LjktMTYuOC0xNS4yIDEwLjdjLTguNiA2LTE5LjUgNy41LTI5LjMgMy45cy0xNy4zLTExLjctMjAtMjEuOGwtNC44LTE4elwiXVxufTtcbnZhciBmYUhheWthbCA9IGZhQmFoYWk7XG52YXIgZmFTZENhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2QtY2FyZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjdjMlwiLCBcIk0zMjAgMEgxNDEuM0MxMjQuMyAwIDEwOCA2LjcgOTYgMTguN0wxOC43IDk2QzYuNyAxMDggMCAxMjQuMyAwIDE0MS4zVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTE2MCA4OHY0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04MCAwdjQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTgwIDB2NDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWODhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl1cbn07XG52YXIgZmFEcmFnb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJhZ29uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA5XSwgXCJmNmQ1XCIsIFwiTTM1MiAxMjQuNWwtNTEuOS0xM2MtNi41LTEuNi0xMS4zLTcuMS0xMi0xMy44czIuOC0xMy4xIDguNy0xNi4xbDQwLjgtMjAuNEwyOTQuNCAyOC44Yy01LjUtNC4xLTcuOC0xMS4zLTUuNi0xNy45UzI5Ny4xIDAgMzA0IDBINDE2aDMyIDE2YzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40bDU3LjYgNzYuOGM2LjIgOC4zIDkuNiAxOC40IDkuNiAyOC44YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDUzOC41Yy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0w0ODAgMTYwSDQ0OHYyMS41YzAgMjQuOCAxMi44IDQ3LjkgMzMuOCA2MS4xbDEwNi42IDY2LjZjMzIuMSAyMC4xIDUxLjYgNTUuMiA1MS42IDkzLjFDNjQwIDQ2Mi45IDU5MC45IDUxMiA1MzAuMiA1MTJINDk2IDQzMiAzMi4zYy0zLjMgMC02LjYtLjQtOS42LTEuNEMxMy41IDUwNy44IDYgNTAxIDIuNCA0OTIuMUMxIDQ4OC43IC4yIDQ4NS4yIDAgNDgxLjRjLS4yLTMuNyAuMy03LjMgMS4zLTEwLjdjMi44LTkuMiA5LjYtMTYuNyAxOC42LTIwLjRjMy0xLjIgNi4yLTIgOS41LTIuMkw0MzMuMyA0MTJjOC4zLS43IDE0LjctNy43IDE0LjctMTYuMWMwLTQuMy0xLjctOC40LTQuNy0xMS40bC00NC40LTQ0LjRjLTMwLTMwLTQ2LjktNzAuNy00Ni45LTExMy4xVjE4MS41di01N3pNNTEyIDcyLjNjMC0uMSAwLS4yIDAtLjNzMC0uMiAwLS4zdi42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNGMxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3VjIyN2MwIDMyLjggOC40IDY0LjggMjQgOTNIMTEyYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlzLTEuNS0xNC4xIDMuOC0xOC44TDEzMC45IDExNi41elwiXVxufTtcbnZhciBmYVNob2VQcmludHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hvZS1wcmludHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1NGJcIiwgXCJNNDE2IDBDMzUyLjMgMCAyNTYgMzIgMjU2IDMyVjE2MGM0OCAwIDc2IDE2IDEwNCAzMnM1NiAzMiAxMDQgMzJjNTYuNCAwIDE3Ni0xNiAxNzYtOTZTNTEyIDAgNDE2IDB6TTEyOCA5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGgzMlYzMkgxOTJjLTM1LjMgMC02NCAyOC43LTY0IDY0ek0yODggNTEyYzk2IDAgMjI0LTQ4IDIyNC0xMjhzLTExOS42LTk2LTE3Ni05NmMtNDggMC03NiAxNi0xMDQgMzJzLTU2IDMyLTEwNCAzMlY0ODBzOTYuMyAzMiAxNjAgMzJ6TTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDk2VjM1Mkg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6XCJdXG59O1xudmFyIGZhQ2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wicGx1cy1jaXJjbGVcIl0sIFwiZjA1NVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjMyIDM0NFYyODBIMTY4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjE2OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI4MHY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFQbHVzQ2lyY2xlID0gZmFDaXJjbGVQbHVzO1xudmFyIGZhRmFjZUdyaW5Ub25ndWVXaW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi10b25ndWUtd2luaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU0MCwgXCJncmluLXRvbmd1ZS13aW5rXCJdLCBcImY1OGJcIiwgXCJNMTc0LjUgNDk4LjhDNzMuMSA0NjQuNyAwIDM2OC45IDAgMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDExMi45LTczLjEgMjA4LjctMTc0LjUgMjQyLjhDMzQ2LjcgNDg0IDM1MiA0NjYuNiAzNTIgNDQ4VjQwMS4xYzI0LjMtMTcuNSA0My42LTQxLjYgNTUuNC02OS42YzUtMTEuOC03LTIyLjUtMTkuMy0xOC43Yy0zOS43IDEyLjItODQuNSAxOS0xMzEuOCAxOXMtOTIuMS02LjgtMTMxLjgtMTljLTEyLjMtMy44LTI0LjMgNi45LTE5LjMgMTguN2MxMS43IDI3LjggMzAuOCA1MS43IDU0LjggNjkuMlY0NDhjMCAxOC42IDUuMyAzNiAxNC41IDUwLjh6bTIwLjctMjY1LjJjNS4zIDcuMSAxNS4zIDguNSAyMi40IDMuMnM4LjUtMTUuMyAzLjItMjIuNGMtMzAuNC00MC41LTkxLjItNDAuNS0xMjEuNiAwYy01LjMgNy4xLTMuOSAxNy4xIDMuMiAyMi40czE3LjEgMy45IDIyLjQtMy4yYzE3LjYtMjMuNSA1Mi44LTIzLjUgNzAuNCAwek0zMzYgMjcyYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMjAgNDAyLjZWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0VjQwMi42YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42aDJjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOWMyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwYzIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjloMmMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMzM2IDE4NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhR3JpblRvbmd1ZVdpbmsgPSBmYUZhY2VHcmluVG9uZ3VlV2luaztcbnZhciBmYUhhbmRIb2xkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjRiZFwiLCBcIk01NTkuNyAzOTIuMmMxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODggMjcyIDE5My43Yy0yOS4xIDAtNTcuMyA5LjktODAgMjhMNjguOCAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MiAzNTIuNWMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY2LjEtOC4zYS41IC41IDAgMSAxIC0uOSAuMiAuNSAuNSAwIDEgMSAuOS0uMnpcIl1cbn07XG52YXIgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWRcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTQzMiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTGlua1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpbmstc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNoYWluLWJyb2tlblwiLCBcImNoYWluLXNsYXNoXCIsIFwidW5saW5rXCJdLCBcImYxMjdcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0ODkuMyAzNTguMmw5MC41LTkwLjVjNTYuNS01Ni41IDU2LjUtMTQ4IDAtMjA0LjVjLTUwLTUwLTEyOC44LTU2LjUtMTg2LjMtMTUuNGwtMS42IDEuMWMtMTQuNCAxMC4zLTE3LjcgMzAuMy03LjQgNDQuNnMzMC4zIDE3LjcgNDQuNiA3LjRsMS42LTEuMWMzMi4xLTIyLjkgNzYtMTkuMyAxMDMuOCA4LjZjMzEuNSAzMS41IDMxLjUgODIuNSAwIDExNGwtOTYgOTYtMzEuOS0yNUM0MzAuOSAyMzkuNiA0MjAuMSAxNzUuMSAzNzcgMTMyYy01Mi4yLTUyLjMtMTM0LjUtNTYuMi0xOTEuMy0xMS43TDM4LjggNS4xek0yMzkgMTYyYzMwLjEtMTQuOSA2Ny43LTkuOSA5Mi44IDE1LjNjMjAgMjAgMjcuNSA0OC4zIDIxLjcgNzQuNUwyMzkgMTYyek0xMTYuNiAxODcuOUw2MC4yIDI0NC4zYy01Ni41IDU2LjUtNTYuNSAxNDggMCAyMDQuNWM1MCA1MCAxMjguOCA1Ni41IDE4Ni4zIDE1LjRsMS42LTEuMWMxNC40LTEwLjMgMTcuNy0zMC4zIDcuNC00NC42cy0zMC4zLTE3LjctNDQuNi03LjRsLTEuNiAxLjFjLTMyLjEgMjIuOS03NiAxOS4zLTEwMy44LTguNkM3NCAzNzIgNzQgMzIxIDEwNS41IDI4OS41bDYxLjgtNjEuOC01MC42LTM5Ljl6TTIyMC45IDI3MGMtMi4xIDM5LjggMTIuMiA4MC4xIDQyLjIgMTEwYzM4LjkgMzguOSA5NC40IDUxIDE0My42IDM2LjNMMjIwLjkgMjcwelwiXVxufTtcbnZhciBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7XG52YXIgZmFDaGFpblNsYXNoID0gZmFMaW5rU2xhc2g7XG52YXIgZmFVbmxpbmsgPSBmYUxpbmtTbGFzaDtcbnZhciBmYUNsb25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb25lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjRkXCIsIFwiTTI4OCA0NDhINjRWMjI0aDY0VjE2MEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI4OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODRIMjg4djY0em0tNjQtOTZINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDIyNGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0elwiXVxufTtcbnZhciBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nLWFycm93LWxvb3AtbGVmdCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1MVwiLCBcIk0yMDggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xMjMuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMMjgxIDIzMi43bC0xNS4zLTM2LjhDMjQ4LjUgMTU0LjggMjA4LjMgMTI4IDE2My43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMUw2OC43IDM5OCA5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTE2LjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnptMzQ3LjcgMTE5YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNDYxLjMgMzg0SDQ4MGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MHMtNzEuNi0xNjAtMTYwLTE2MEwzNTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZINDYxLjNsMjUuNC0yNS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsODAgODB6XCJdXG59O1xudmFyIGZhQXJyb3dVcFpBID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXotYScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS11cC1hbHRcIl0sIFwiZjg4MlwiLCBcIk0xODMuNiA0Mi40QzE3Ny41IDM1LjggMTY5IDMyIDE2MCAzMnMtMTcuNSAzLjgtMjMuNiAxMC40bC04OCA5NmMtMTEuOSAxMy0xMS4xIDMzLjMgMiA0NS4yczMzLjMgMTEuMSA0NS4yLTJMMTI4IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg1MC43bC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyOS4zbDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxOTJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zaDg4LjRsNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMjYyLjggNDI4LjEgMjU2IDQxNiAyNTZ6TTM5NS44IDQwMEw0MTYgMzU5LjYgNDM2LjIgNDAwSDM5NS44elwiXVxufTtcbnZhciBmYVNvcnRBbHBoYVVwQWx0ID0gZmFBcnJvd1VwWkE7XG52YXIgZmFGaXJlRmxhbWVDdXJ2ZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlyZS1mbGFtZS1jdXJ2ZWQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpcmUtYWx0XCJdLCBcImY3ZTRcIiwgXCJNMTUzLjYgMjkuOWwxNi0yMS4zQzE3My42IDMuMiAxODAgMCAxODYuNyAwQzE5OC40IDAgMjA4IDkuNiAyMDggMjEuM1Y0My41YzAgMTMuMSA1LjQgMjUuNyAxNC45IDM0LjdMMzA3LjYgMTU5QzM1Ni40IDIwNS42IDM4NCAyNzAuMiAzODQgMzM3LjdDMzg0IDQzNCAzMDYgNTEyIDIwOS43IDUxMkgxOTJDODYgNTEyIDAgNDI2IDAgMzIwdi0zLjhjMC00OC44IDE5LjQtOTUuNiA1My45LTEzMC4xbDMuNS0zLjVjNC4yLTQuMiAxMC02LjYgMTYtNi42Qzg1LjkgMTc2IDk2IDE4Ni4xIDk2IDE5OC42VjI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0di0zLjljMC0xOC03LjItMzUuMy0xOS45LTQ4bC0zOC42LTM4LjZjLTI0LTI0LTM3LjUtNTYuNy0zNy41LTkwLjdjMC0yNy43IDktNTQuOCAyNS42LTc2Ljl6XCJdXG59O1xudmFyIGZhRmlyZUFsdCA9IGZhRmlyZUZsYW1lQ3VydmVkO1xudmFyIGZhVG9ybmFkbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3JuYWRvJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzg2XSwgXCJmNzZmXCIsIFwiTTAgMzJWNDUuNkMwIDYyLjcgMS43IDc5LjYgNSA5NkgzNTcuOGMzLjItNi45IDcuNS0xMy4zIDEzLTE4LjhsMzguNi0zOC42YzQuMi00LjIgNi42LTEwIDYuNi0xNkM0MTYgMTAuMSA0MDUuOSAwIDM5My40IDBIMzJDMTQuMyAwIDAgMTQuMyAwIDMyem0zNTIuMiA5NkgxMy42YzEyLjIgMzUuOSAzMi4zIDY4LjcgNTguOCA5Nkg0MTJsLTQ3LjItNjIuOWMtNy4zLTkuNy0xMS42LTIxLjItMTIuNi0zMy4xem0tMjI2IDEzOC4ybDExNi40IDY4LjVjOC4yIDQuOCAxNS44IDEwLjcgMjIuNSAxNy4zSDQ0NWMyLTkuOCAzLTE5LjkgMy0zMC4xYzAtMjMtNS4zLTQ1LjUtMTUuMy02NS45SDExMC4yYzUuMiAzLjYgMTAuNSA3IDE2IDEwLjJ6TTI4OCAzODRjMTAuMyAyMS40IDEzLjggNDUuNSA5LjkgNjlsLTUuOSAzNS43Yy0yIDEyLjIgNy40IDIzLjQgMTkuOCAyMy40YzUuMyAwIDEwLjQtMi4xIDE0LjItNS45bDc4LjItNzguMmMxMi44LTEyLjggMjMuMS0yNy43IDMwLjQtNDMuOUgyODh6XCJdXG59O1xudmFyIGZhRmlsZUNpcmNsZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzU4NjA2XSwgXCJlNDk0XCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0djM4LjZDMzEwLjEgMjE5LjUgMjU2IDI4Ny40IDI1NiAzNjhjMCA1OS4xIDI5LjEgMTExLjMgNzMuNyAxNDMuM2MtMy4yIC41LTYuNCAuNy05LjcgLjdINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHptNDggOTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEgzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzODRoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINDQ4VjMwNHpcIl1cbn07XG52YXIgZmFCb29rUXVyYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1xdXJhbicsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicXVyYW5cIl0sIFwiZjY4N1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2VjQxNmMwIDUzLTQzIDk2LTk2IDk2SDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDY0IDM1MnptMCAzODRIOTZ2NjRIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0yNzQuMSAxNTAuMmwtOC45IDIxLjQtMjMuMSAxLjljLTUuNyAuNS04IDcuNS0zLjcgMTEuMkwyNTYgMTk5LjhsLTUuNCAyMi42Yy0xLjMgNS41IDQuNyA5LjkgOS42IDYuOUwyODAgMjE3LjJsMTkuOCAxMi4xYzQuOSAzIDEwLjktMS40IDkuNi02LjlMMzA0IDE5OS44bDE3LjYtMTUuMWM0LjMtMy43IDItMTAuOC0zLjctMTEuMmwtMjMuMS0xLjktOC45LTIxLjRjLTIuMi01LjMtOS42LTUuMy0xMS44IDB6TTk2IDE5MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGMyNS42IDAgNDkuNS03LjUgNjkuNS0yMC41YzMuMi0yLjEgNC41LTYuMiAzLjEtOS43cy01LjItNS42LTktNC44Yy02LjEgMS4yLTEyLjUgMS45LTE5IDEuOWMtNTIuNCAwLTk0LjktNDIuNS05NC45LTk0LjlzNDIuNS05NC45IDk0LjktOTQuOWM2LjUgMCAxMi44IC43IDE5IDEuOWMzLjggLjggNy41LTEuMyA5LTQuOHMuMi03LjYtMy4xLTkuN0MyNzMuNSA3MS41IDI0OS42IDY0IDIyNCA2NEMxNTMuMyA2NCA5NiAxMjEuMyA5NiAxOTJ6XCJdXG59O1xudmFyIGZhUXVyYW4gPSBmYUJvb2tRdXJhbjtcbnZhciBmYUFuY2hvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3InLFxuICBpY29uOiBbNTc2LCA1MTIsIFs5ODc1XSwgXCJmMTNkXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwdi02LjFsNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC01NiA1NmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctN1YzNTJjMCA1My00MyA5Ni05NiA5NkgzMjBWMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xelwiXVxufTtcbnZhciBmYUJvcmRlckFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItYWxsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmODRjXCIsIFwiTTM4NCA5NlYyMjRIMjU2Vjk2SDM4NHptMCAxOTJWNDE2SDI1NlYyODhIMzg0ek0xOTIgMjI0SDY0Vjk2SDE5MlYyMjR6TTY0IDI4OEgxOTJWNDE2SDY0VjI4OHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0elwiXVxufTtcbnZhciBmYUZhY2VBbmdyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWFuZ3J5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCBcImFuZ3J5XCJdLCBcImY1NTZcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0zMzguNyAzOTUuOWM2LjYtNS45IDcuMS0xNiAxLjItMjIuNkMzMjMuOCAzNTUuNCAyOTUuNyAzMzYgMjU2IDMzNnMtNjcuOCAxOS40LTgzLjkgMzcuM2MtNS45IDYuNi01LjQgMTYuNyAxLjIgMjIuNnMxNi43IDUuNCAyMi42LTEuMmMxMS43LTEzIDMxLjYtMjYuNyA2MC4xLTI2LjdzNDguNCAxMy43IDYwLjEgMjYuN2M1LjkgNi42IDE2IDcuMSAyMi42IDEuMnpNMTc2LjQgMjcyYzE3LjcgMCAzMi0xNC4zIDMyLTMyYzAtMS41LS4xLTMtLjMtNC40bDEwLjkgMy42YzguNCAyLjggMTcuNC0xLjcgMjAuMi0xMC4xcy0xLjctMTcuNC0xMC4xLTIwLjJsLTk2LTMyYy04LjQtMi44LTE3LjQgMS43LTIwLjIgMTAuMXMxLjcgMTcuNCAxMC4xIDIwLjJsMzAuNyAxMC4yYy01LjggNS44LTkuMyAxMy44LTkuMyAyMi42YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC04LjktMy42LTE3LTkuNS0yMi44bDMwLjItMTAuMWM4LjQtMi44IDEyLjktMTEuOSAxMC4xLTIwLjJzLTExLjktMTIuOS0yMC4yLTEwLjFsLTk2IDMyYy04LjQgMi44LTEyLjkgMTEuOS0xMC4xIDIwLjJzMTEuOSAxMi45IDIwLjIgMTAuMWwxMS43LTMuOWMtLjIgMS41LS4zIDMuMS0uMyA0LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFBbmdyeSA9IGZhRmFjZUFuZ3J5O1xudmFyIGZhQ29va2llQml0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb29raWUtYml0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU2NFwiLCBcIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjZ2MGMtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45djBjLS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMWMtNTEuNS04LjItOTIuOC00Ny4xLTEwNC41LTk3LjRjLTEuOC03LjYtOC0xMy40LTE1LjctMTQuNmMtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFBcnJvd1RyZW5kRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy10cmVuZC1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDk3XCIsIFwiTTM4NCAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY4Mi43TDM0Mi42IDEzNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMjQyLjcgNTQuNiAxMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEwzMjAgMjA1LjMgNDY2LjcgMzUySDM4NHpcIl1cbn07XG52YXIgZmFSc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJmZWVkXCJdLCBcImYwOWVcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmMyMjkuOCAwIDQxNiAxODYuMiA0MTYgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyQzM4NCAyNTMuNiAyMjYuNCA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDQxNmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSAwIDQxNnpNMzIgMTYwYzE1OS4xIDAgMjg4IDEyOC45IDI4OCAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGZWVkID0gZmFSc3M7XG52YXIgZmFEcmF3UG9seWdvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcmF3LXBvbHlnb24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1ZWVcIiwgXCJNOTYgMTUxLjRWMzYwLjZjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40SDMyOC42YzAtLjEgLjEtLjIgLjEtLjNsLTQuNS03LjktMzItNTYgMCAwYy0xLjQgLjEtMi44IC4xLTQuMiAuMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxLjQgMCAyLjggMCA0LjIgLjFsMCAwIDMyLTU2IDQuNS03LjktLjEtLjNIMTE5LjRjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNHpNMzg0LjMgMzUyYzM1LjIgLjIgNjMuNyAyOC43IDYzLjcgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgxMTkuNGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjE1MS40QzEyLjkgMTQwLjQgMCAxMTkuNyAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMkgzMjguNmMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC41IDYzLjgtNjMuNyA2NGwtNC41IDcuOS0zMiA1Ni0yLjMgNGM0LjIgOC41IDYuNSAxOCA2LjUgMjguMXMtMi4zIDE5LjYtNi41IDI4LjFsMi4zIDQgMzIgNTYgNC41IDcuOXpcIl1cbn07XG52YXIgZmFTY2FsZUJhbGFuY2VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjYWxlLWJhbGFuY2VkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg3OCwgXCJiYWxhbmNlLXNjYWxlXCJdLCBcImYyNGVcIiwgXCJNMzg0IDMySDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzOTguNGMtNS4yIDI1LjgtMjIuOSA0Ny4xLTQ2LjQgNTcuM1Y0NDhINTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjE1My4zYy0yMy41LTEwLjMtNDEuMi0zMS42LTQ2LjQtNTcuM0gxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjU2YzE0LjYtMTkuNCAzNy44LTMyIDY0LTMyczQ5LjQgMTIuNiA2NCAzMnptNTUuNiAyODhINTg0LjRMNTEyIDE5NS44IDQzOS42IDMyMHpNNTEyIDQxNmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzYyNy4yIDM4MiA1NzQuOSA0MTYgNTEyIDQxNnpNMTI2LjggMTk1LjhMNTQuNCAzMjBIMTk5LjNMMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzI0MiAzODIgMTg5LjcgNDE2IDEyNi44IDQxNlMxMS43IDM4MiAuOSAzMzcuMXpcIl1cbn07XG52YXIgZmFCYWxhbmNlU2NhbGUgPSBmYVNjYWxlQmFsYW5jZWQ7XG52YXIgZmFHYXVnZVNpbXBsZUhpZ2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2F1Z2Utc2ltcGxlLWhpZ2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTY2OCwgXCJ0YWNob21ldGVyXCIsIFwidGFjaG9tZXRlci1mYXN0XCJdLCBcImY2MmFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0zMjAgOTZjMC0xNS45LTUuOC0zMC40LTE1LjMtNDEuNmw3Ni42LTE0Ny40YzYuMS0xMS44IDEuNS0yNi4zLTEwLjItMzIuNHMtMjYuMi0xLjUtMzIuNCAxMC4yTDI2Mi4xIDI4OC4zYy0yLS4yLTQtLjMtNi4xLS4zYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhVGFjaG9tZXRlciA9IGZhR2F1Z2VTaW1wbGVIaWdoO1xudmFyIGZhVGFjaG9tZXRlckZhc3QgPSBmYUdhdWdlU2ltcGxlSGlnaDtcbnZhciBmYVNob3dlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG93ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDNdLCBcImYyY2NcIiwgXCJNNjQgMTMxLjlDNjQgMTEyLjEgODAuMSA5NiA5OS45IDk2YzkuNSAwIDE4LjYgMy44IDI1LjQgMTAuNWwxNi4yIDE2LjJjLTIxIDM4LjktMTcuNCA4Ny41IDEwLjkgMTIzTDE1MSAyNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwzNDUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTEuMyAxLjNjLTM1LjUtMjguMy04NC4yLTMxLjktMTIzLTEwLjlMMTcwLjUgNjEuM0MxNTEuOCA0Mi41IDEyNi40IDMyIDk5LjkgMzJDNDQuNyAzMiAwIDc2LjcgMCAxMzEuOVY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMzEuOXpNMjU2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMi0zMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhRGVza3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkZXNrdG9wJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDIxLCA2MTcwNCwgXCJkZXNrdG9wLWFsdFwiXSwgXCJmMzkwXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNDBsLTEwLjcgMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDYuN0wzMzYgNDE2SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTEyIDY0VjI4OEg2NFY2NEg1MTJ6XCJdXG59O1xudmFyIGZhRGVza3RvcEFsdCA9IGZhRGVza3RvcDtcbnZhciBmYU0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwOV0sIFwiNGRcIiwgXCJNMjIuNyAzMy40YzEzLjUtNC4xIDI4LjEgMS4xIDM1LjkgMTIuOUwyMjQgMjk0LjMgMzg5LjQgNDYuMmM3LjgtMTEuNyAyMi40LTE3IDM1LjktMTIuOVM0NDggNDkuOSA0NDggNjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2OS43TDI1MC42IDM2OS44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuN1Y0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjRDMCA0OS45IDkuMiAzNy41IDIyLjcgMzMuNHpcIl1cbn07XG52YXIgZmFUYWJsZUxpc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtbGlzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGgtbGlzdFwiXSwgXCJmMDBiXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTY0IDB2NjRoNjRWOTZINjR6bTM4NCAwSDE5MnY2NEg0NDhWOTZ6TTY0IDIyNHY2NGg2NFYyMjRINjR6bTM4NCAwSDE5MnY2NEg0NDhWMjI0ek02NCAzNTJ2NjRoNjRWMzUySDY0em0zODQgMEgxOTJ2NjRINDQ4VjM1MnpcIl1cbn07XG52YXIgZmFUaExpc3QgPSBmYVRhYmxlTGlzdDtcbnZhciBmYUNvbW1lbnRTbXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1zbXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNtc1wiXSwgXCJmN2NkXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjMgMCAwIDAgMCAwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXpNOTYgMjEyLjhjMC0yMC4zIDE2LjUtMzYuOCAzNi44LTM2LjhIMTUyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDEzMi44Yy0yLjcgMC00LjggMi4yLTQuOCA0LjhjMCAxLjYgLjggMy4xIDIuMiA0bDI5LjQgMTkuNmMxMC4zIDYuOCAxNi40IDE4LjMgMTYuNCAzMC43YzAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgyNy4yYzIuNyAwIDQuOC0yLjIgNC44LTQuOGMwLTEuNi0uOC0zLjEtMi4yLTRsLTI5LjQtMTkuNkMxMDIuMiAyMzYuNyA5NiAyMjUuMiA5NiAyMTIuOHpNMzcyLjggMTc2SDM5MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNzIuOGMtMi43IDAtNC44IDIuMi00LjggNC44YzAgMS42IC44IDMuMSAyLjIgNGwyOS40IDE5LjZjMTAuMiA2LjggMTYuNCAxOC4zIDE2LjQgMzAuN2MwIDIwLjMtMTYuNSAzNi44LTM2LjggMzYuOEgzNTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMjcuMmMyLjcgMCA0LjgtMi4yIDQuOC00LjhjMC0xLjYtLjgtMy4xLTIuMi00bC0yOS40LTE5LjZjLTEwLjItNi44LTE2LjQtMTguMy0xNi40LTMwLjdjMC0yMC4zIDE2LjUtMzYuOCAzNi44LTM2Ljh6bS0xNTIgNi40TDI1NiAyMjkuM2wzNS4yLTQ2LjljNC4xLTUuNSAxMS4zLTcuOCAxNy45LTUuNnMxMC45IDguMyAxMC45IDE1LjJ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjQwbC0xOS4yIDI1LjZjLTMgNC03LjggNi40LTEyLjggNi40cy05LjgtMi40LTEyLjgtNi40TDIyNCAyNDB2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTkyYzAtNi45IDQuNC0xMyAxMC45LTE1LjJzMTMuNyAuMSAxNy45IDUuNnpcIl1cbn07XG52YXIgZmFTbXMgPSBmYUNvbW1lbnRTbXM7XG52YXIgZmFCb29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMTJdLCBcImYwMmRcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlY0MTZjMCA1MyA0MyA5NiA5NiA5NkgzODRoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDM4NCA5NnptMCAzODRIMzUydjY0SDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0zMi0yNDBjMC04LjggNy4yLTE2IDE2LTE2SDMzNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNDRjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNDhIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFVc2VyUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXBsdXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYyMzRcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNTA0IDMxMlYyNDhINDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU1MnY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVjaycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMDAzLCAxMDAwNF0sIFwiZjAwY1wiLCBcIk00MzguNiAxMDUuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMjU2IDI1NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDMzOC43IDM5My40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdHRlcnktdGhyZWUtcXVhcnRlcnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJhdHRlcnktNFwiXSwgXCJmMjQxXCIsIFwiTTQ2NCAxNjBjOC44IDAgMTYgNy4yIDE2IDE2VjMzNmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2SDQ2NHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2VjMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0NjRjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMlYxNzZjMC00NC4yLTM1LjgtODAtODAtODBIODB6bTI3MiA5Nkg5NlYzMjBIMzUyVjE5MnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5NCA9IGZhQmF0dGVyeVRocmVlUXVhcnRlcnM7XG52YXIgZmFIb3VzZUNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUwOVwiLCBcIk0zMjAuNyAzNTJjOC4xLTg5LjcgODMuNS0xNjAgMTc1LjMtMTYwYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRsLjcgMHpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG52YXIgZmFBbmdsZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtbGVmdCcsXG4gIGljb246IFszMjAsIDUxMiwgWzgyNDldLCBcImYxMDRcIiwgXCJNNDEuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI1NiAyNDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHpcIl1cbn07XG52YXIgZmFEaWFncmFtU3VjY2Vzc29yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tc3VjY2Vzc29yJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNDdhXCIsIFwiTTUxMiA0MTZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTY0IDE2MGwwLTY0IDE0NCAwIDE2IDAgMCA2NEw2NCAxNjB6bTIyNCAwbDAtNjQgODAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNi0zOC4xIDBjLTIxLjQgMC0zMi4xIDI1LjktMTcgNDFMMzk5IDIzOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEw1MDMgMTY5YzE1LjEtMTUuMSA0LjQtNDEtMTctNDFMNDQ4IDEyOGwwLTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwTDIyNCAzMmwtMTYgMEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhVHJ1Y2tBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThiXCIsIFwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwSDM2OGMyNi41IDAgNDggMjEuNSA0OCA0OFY5Nmg1MC43YzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU4OS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zVjI1NnYzMiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1NzZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMjU2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNNDE2IDI1Nkg1NDRWMjM3LjNMNDY2LjcgMTYwSDQxNnY5NnpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTM2OC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0yNTcgOTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlIOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjYyLjFsLTM5IDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMjU3IDk1elwiXVxufTtcbnZhciBmYUFycm93c1NwbGl0VXBBbmRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1zcGxpdC11cC1hbmQtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRiY1wiLCBcIk0yNDYuNiAxNTAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzUyIDEwOS4zVjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MTZjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDEwOS4zbDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMjU2SDIyNGMyMy4zIDAgNDUuMiA2LjIgNjQgMTcuMVYxMDkuM2wtNDEuNCA0MS40elwiXVxufTtcbnZhciBmYUhhbmRGaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtZmlzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzk5OTQsIFwiZmlzdC1yYWlzZWRcIl0sIFwiZjZkZVwiLCBcIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNDRIMTYwVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjgwSDY0VjY0em0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjY0em05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjEyOHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjZjMTMuMiAwIDI1LjQtNCAzNS42LTEwLjhjOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOGMxMS43IDAgMjIuNi0zLjEgMzItOC42VjI1NmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwMS42Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDY5LjUgMzU3LjVDNDUuNSAzMzMuNSAzMiAzMDAuOSAzMiAyNjdWMjQwYzAtMzUuMyAyOC43LTY0IDY0LTY0aDg4YzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwSDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg1NmMzOS44IDAgNzItMzIuMiA3Mi03MnpcIl1cbn07XG52YXIgZmFGaXN0UmFpc2VkID0gZmFIYW5kRmlzdDtcbnZhciBmYUNsb3VkTW9vbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1tb29uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNmMzXCIsIFwiTTQ5NS44IDBjNS41IDAgMTAuOSAuMiAxNi4zIC43YzcgLjYgMTIuOCA1LjcgMTQuMyAxMi41cy0xLjYgMTMuOS03LjcgMTcuM2MtNDQuNCAyNS4yLTc0LjQgNzMtNzQuNCAxMjcuOGMwIDgxIDY1LjUgMTQ2LjYgMTQ2LjIgMTQ2LjZjOC42IDAgMTctLjcgMjUuMS0yLjFjNi45LTEuMiAxMy44IDIuMiAxNyA4LjVzMS45IDEzLjgtMy4xIDE4LjdjLTM0LjUgMzMuNi04MS43IDU0LjQtMTMzLjYgNTQuNGMtOS4zIDAtMTguNC0uNy0yNy40LTEuOWMtMTEuMi0yMi42LTI5LjgtNDAuOS01Mi42LTUxLjdjLTIuNy01OC41LTUwLjMtMTA1LjMtMTA5LjItMTA2LjdjLTEuNy0xMC40LTIuNi0yMS0yLjYtMzEuOEMzMDQgODYuMSAzODkuOCAwIDQ5NS44IDB6TTQ0Ny45IDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwSDk2Yy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3IDgwLTk0LjZsMC0xLjNjMC01MyA0My05NiA5Ni05NmMzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNGMxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDUuOS0uNiAxMS43LTEuOSAxNy4yYzM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6XCJdXG59O1xudmFyIGZhQnJpZWZjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWVmY2FzZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE4OF0sIFwiZjBiMVwiLCBcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjB2OTZIMTkyIDMyMCA1MTJWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDM4NFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxODRjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek01MTIgMjg4SDMyMHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OEgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjg4elwiXVxufTtcbnZhciBmYVBlcnNvbkZhbGxpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWZhbGxpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NDZcIiwgXCJNMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5LjhjMCA1NC42LTI3LjkgMTA0LjYtNzIuNSAxMzMuNmwuMiAuM0wzMDQuNSAyNTZsODcuNSAwYzE1LjEgMCAyOS4zIDcuMSAzOC40IDE5LjJsNDMuMiA1Ny42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRMMzg0IDMyMGwtOTYgMGgtMS40bDkyLjMgMTQyLjZjOS42IDE0LjggNS40IDM0LjYtOS41IDQ0LjNzLTM0LjYgNS40LTQ0LjMtOS41TDE2NC41IDI0OS4yYy0yLjkgOS4yLTQuNSAxOS00LjUgMjlsMCA3My44YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI3OC4yYzAtNjUuMSAzOS42LTEyMy43IDEwMC4xLTE0Ny45QzIzMi4zIDExNS44IDI1NiA4MC44IDI1NiA0MS44bDAtOS44YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMTIgMzJhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUltYWdlUG9ydHJhaXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW1hZ2UtcG9ydHJhaXQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcInBvcnRyYWl0XCJdLCBcImYzZTBcIiwgXCJNMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0xMjggMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNODAgMzU2LjZjMC0zNy45IDMwLjctNjguNiA2OC42LTY4LjZoODYuOWMzNy45IDAgNjguNiAzMC43IDY4LjYgNjguNmMwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEgxMDcuNEM5Mi4zIDM4NCA4MCAzNzEuNyA4MCAzNTYuNnpcIl1cbn07XG52YXIgZmFQb3J0cmFpdCA9IGZhSW1hZ2VQb3J0cmFpdDtcbnZhciBmYVVzZXJUYWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci10YWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MDdcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS00NS43IDQ4Qzc5LjggMzA0IDAgMzgzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzEwIDAgMTguOC00LjkgMjQuMi0xMi41bC05OS4yLTk5LjJjLTE0LjktMTQuOS0yMy4zLTM1LjEtMjMuMy01Ni4xdi0zM2MtMTUuOS00LjctMzIuOC03LjItNTAuMy03LjJIMTc4LjN6TTM4NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjgyLjdjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNDc4LjEgNDkxLjNjMTguNyAxOC43IDQ5LjEgMTguNyA2Ny45IDBsNzMuNC03My40YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45TDUxMiAyNDIuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0gzODR6bTI0IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xudmFyIGZhUnVnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1ZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2OVwiLCBcIk0yNCA2NEg1NiA4MFY4OHY4OCA4MCA4MCA4OCAyNEg1NiAyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjM2MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjI4MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjIwMEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjExMkgyNEMxMC43IDExMiAwIDEwMS4zIDAgODhTMTAuNyA2NCAyNCA2NHptODggMEg1MjhWNDQ4SDExMlY2NHpNNjQwIDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRoLTh2MzJoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGgtOHYzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTg0IDU2MFY0MjQgMzM2IDI1NiAxNzYgODggNjRoMjQgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjR6XCJdXG59O1xudmFyIGZhRWFydGhFdXJvcGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFydGgtZXVyb3BlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJnbG9iZS1ldXJvcGVcIl0sIFwiZjdhMlwiLCBcIk0yNjYuMyA0OC4zTDIzMi41IDczLjZjLTUuNCA0LTguNSAxMC40LTguNSAxNy4xdjkuMWMwIDYuOCA1LjUgMTIuMyAxMi4zIDEyLjNjMi40IDAgNC44LS43IDYuOC0yLjFsNDEuOC0yNy45YzItMS4zIDQuNC0yLjEgNi44LTIuMWgxYzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2MwIDMtMS4yIDUuOS0zLjMgOGwtMTkuOSAxOS45Yy01LjggNS44LTEyLjkgMTAuMi0yMC43IDEyLjhsLTI2LjUgOC44Yy01LjggMS45LTkuNiA3LjMtOS42IDEzLjRjMCAzLjctMS41IDcuMy00LjEgMTBsLTE3LjkgMTcuOWMtNi40IDYuNC05LjkgMTUtOS45IDI0djQuM2MwIDE2LjQgMTMuNiAyOS43IDI5LjkgMjkuN2MxMSAwIDIxLjItNi4yIDI2LjEtMTZsNC04LjFjMi40LTQuOCA3LjQtNy45IDEyLjgtNy45YzQuNSAwIDguNyAyLjEgMTEuNCA1LjdsMTYuMyAyMS43YzIuMSAyLjkgNS41IDQuNSA5LjEgNC41YzguNCAwIDEzLjktOC45IDEwLjEtMTYuNGwtMS4xLTIuM2MtMy41LTcgMC0xNS41IDcuNS0xOGwyMS4yLTcuMWM3LjYtMi41IDEyLjctOS42IDEyLjctMTcuNmMwLTEwLjMgOC4zLTE4LjYgMTguNi0xOC42SDQwMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNzkuM2MtNy4yIDAtMTQuMiAyLjktMTkuMyA4bC00LjcgNC43Yy0yLjEgMi4xLTMuMyA1LTMuMyA4YzAgNi4yIDUuMSAxMS4zIDExLjMgMTEuM2gxMS4zYzYgMCAxMS44IDIuNCAxNiA2LjZsNi41IDYuNWMxLjggMS44IDIuOCA0LjMgMi44IDYuOHMtMSA1LTIuOCA2LjhsLTcuNSA3LjVDMzg2IDI2MiAzODQgMjY2LjkgMzg0IDI3MnMyIDEwIDUuNyAxMy43TDQwOCAzMDRjMTAuMiAxMC4yIDI0LjEgMTYgMzguNiAxNkg0NTRjNi41LTIwLjIgMTAtNDEuNyAxMC02NGMwLTExMS40LTg3LjYtMjAyLjQtMTk3LjctMjA3Ljd6bTE3MiAzMDcuOWMtMy43LTIuNi04LjItNC4xLTEzLTQuMWMtNiAwLTExLjgtMi40LTE2LTYuNkwzOTYgMzMyYy03LjctNy43LTE4LTEyLTI4LjktMTJjLTkuNyAwLTE5LjItMy41LTI2LjYtOS44TDMxNCAyODcuNGMtMTEuNi05LjktMjYuNC0xNS40LTQxLjctMTUuNEgyNTEuNGMtMTIuNiAwLTI1IDMuNy0zNS41IDEwLjdMMTg4LjUgMzAxYy0xNy44IDExLjktMjguNSAzMS45LTI4LjUgNTMuM3YzLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTYgMTZjOC41IDguNSAyMCAxMy4zIDMyIDEzLjNIMjQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMi41IC40IDUgMS4xIDcuM2M3MS4zLTUuOCAxMzIuNS00Ny42IDE2NS4yLTEwNy4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE4Ny4zIDEwMC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMzIgMzJjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzMi0zMmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFHbG9iZUV1cm9wZSA9IGZhRWFydGhFdXJvcGU7XG52YXIgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnQtZmxhdGJlZC1zdWl0Y2FzZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wibHVnZ2FnZS1jYXJ0XCJdLCBcImY1OWRcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBINDhjNDQuMiAwIDgwIDM1LjggODAgODBWMzY4YzAgOC44IDcuMiAxNiAxNiAxNkg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTQxLjNjMS44IDUgMi43IDEwLjQgMi43IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2SDI1My4zYzEuOCA1IDIuNyAxMC40IDIuNyAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTUuNiAxLTExIDIuNy0xNkgxNDRjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjgwYzAtOC44LTcuMi0xNi0xNi0xNkgzMkMxNC4zIDY0IDAgNDkuNyAwIDMyek00MzIgOTZWNTZjMC00LjQtMy42LTgtOC04SDM0NGMtNC40IDAtOCAzLjYtOCA4Vjk2aDk2ek0yODggOTZWNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZoODBjMzAuOSAwIDU2IDI1LjEgNTYgNTZWOTYgMzIwSDI4OFY5NnpNNTEyIDMyMFY5NmgxNmMyNi41IDAgNDggMjEuNSA0OCA0OFYyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhINTEyek0yNDAgOTZoMTZWMzIwSDI0MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYUx1Z2dhZ2VDYXJ0ID0gZmFDYXJ0RmxhdGJlZFN1aXRjYXNlO1xudmFyIGZhUmVjdGFuZ2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVjdGFuZ2xlLXhtYXJrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsIFwicmVjdGFuZ2xlLXRpbWVzXCIsIFwidGltZXMtcmVjdGFuZ2xlXCIsIFwid2luZG93LWNsb3NlXCJdLCBcImY0MTBcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXVxufTtcbnZhciBmYVJlY3RhbmdsZVRpbWVzID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYVRpbWVzUmVjdGFuZ2xlID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYVdpbmRvd0Nsb3NlID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYUJhaHRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhaHQtc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTBhY1wiLCBcIk0xNDQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNjRIMzcuNkMxNi44IDY0IDAgODAuOCAwIDEwMS42VjIyNHY0MS43VjI4OCA0MDYuM2MwIDIzIDE4LjcgNDEuNyA0MS43IDQxLjdIMTEydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4aDMyYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtNDAuMS0yMS4xLTc1LjMtNTIuNy05NS4xQzI4MC4zIDIyMi42IDI4OCAyMDAuMiAyODggMTc2YzAtNjEuOS01MC4xLTExMi0xMTItMTEyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xMTIgMTI4djk2SDY0VjEyOGg0OHptNjQgOTZWMTI4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4em0tNjQgNjR2OTZINjRWMjg4aDQ4em02NCA5NlYyODhoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhIMTc2elwiXVxufTtcbnZhciBmYUJvb2tPcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODIxNCwgMTI4MzY2XSwgXCJmNTE4XCIsIFwiTTI0OS42IDQ3MS41YzEwLjggMy44IDIyLjQtNC4xIDIyLjQtMTUuNVY3OC42YzAtNC4yLTEuNi04LjQtNS0xMUMyNDcuNCA1MiAyMDIuNCAzMiAxNDQgMzJDOTMuNSAzMiA0Ni4zIDQ1LjMgMTguMSA1Ni4xQzYuOCA2MC41IDAgNzEuNyAwIDgzLjhWNDU0LjFjMCAxMS45IDEyLjggMjAuMiAyNC4xIDE2LjVDNTUuNiA0NjAuMSAxMDUuNSA0NDggMTQ0IDQ0OGMzMy45IDAgNzkgMTQgMTA1LjYgMjMuNXptNzYuOCAwQzM1MyA0NjIgMzk4LjEgNDQ4IDQzMiA0NDhjMzguNSAwIDg4LjQgMTIuMSAxMTkuOSAyMi42YzExLjMgMy44IDI0LjEtNC42IDI0LjEtMTYuNVY4My44YzAtMTIuMS02LjgtMjMuMy0xOC4xLTI3LjZDNTI5LjcgNDUuMyA0ODIuNSAzMiA0MzIgMzJjLTU4LjQgMC0xMDMuNCAyMC0xMjMgMzUuNmMtMy4zIDIuNi01IDYuOC01IDExVjQ1NmMwIDExLjQgMTEuNyAxOS4zIDIyLjQgMTUuNXpcIl1cbn07XG52YXIgZmFCb29rSm91cm5hbFdoaWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLWpvdXJuYWwtd2hpbGxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJqb3VybmFsLXdoaWxsc1wiXSwgXCJmNjZhXCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBIMzg0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQgOTZjLTUzIDAtOTYtNDMtOTYtOTZWOTZ6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJWMzg0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTAuNC0yMzQuNGwtMjEuMi0yMS4yYy0zIDEwLjEtNS4xIDIwLjYtNS4xIDMxLjZjMCAuMiAwIC41IC4xIC44cy4xIC41IC4xIC44TDE2NS4yIDIyNmMyLjUgMi4xIDMuNCA1LjggMi4zIDguOWMtMS4zIDMtNC4xIDUuMS03LjUgNS4xYy0xLjktLjEtMy44LS44LTUuMi0ybC0yMy42LTIwLjZDMTQyLjggMjY3IDE4Ni45IDMwNCAyNDAgMzA0czk3LjMtMzcgMTA4LjktODYuNkwzMjUuMyAyMzhjLTEuNCAxLjItMy4zIDItNS4zIDJjLTIuMi0uMS00LjQtMS4xLTYtMi44Yy0xLjItMS41LTEuOS0zLjQtMi01LjJjLjEtMi4yIDEuMS00LjQgMi44LTZsMzcuMS0zMi41YzAtLjMgMC0uNSAuMS0uOHMuMS0uNSAuMS0uOGMwLTExLTIuMS0yMS41LTUuMS0zMS42bC0yMS4yIDIxLjJjLTMuMSAzLjEtOC4xIDMuMS0xMS4zIDBzLTMuMS04LjEgMC0xMS4ybDI2LjQtMjYuNWMtOC4yLTE3LTIwLjUtMzEuNy0zNS45LTQyLjZjLTIuNy0xLjktNi4yIDEuNC01IDQuNWM4LjUgMjIuNCAzLjYgNDgtMTMgNjUuNmMtMy4yIDMuNC0zLjYgOC45LS45IDEyLjdjOS44IDE0IDEyLjcgMzEuOSA3LjUgNDguNWMtNS45IDE5LjQtMjIgMzQuMS00MS45IDM4LjNsLTEuNC0zNC4zIDEyLjYgOC42Yy42IC40IDEuNSAuNiAyLjMgLjZjMS41IDAgMi43LS44IDMuNS0ycy42LTIuOC0uMS00TDI2MCAyMjUuNGwxOC0zLjZjMS44LS40IDMuMS0yLjEgMy4xLTRzLTEuNC0zLjUtMy4xLTMuOWwtMTgtMy43IDguNS0xNC4zYy44LTEuMiAuOS0yLjkgLjEtNC4xcy0yLTItMy41LTJsLS4xIDBjLS43IC4xLTEuNSAuMy0yLjEgLjdsLTE0LjEgOS42TDI0NCA4Ny45Yy0uMS0yLjItMS45LTMuOS00LTMuOXMtMy45IDEuNi00IDMuOWwtNC42IDExMC44LTEyLTguMWMtMS41LTEuMS0zLjYtLjktNSAuNHMtMS42IDMuNC0uOCA1bDguNiAxNC4zLTE4IDMuN2MtMS44IC40LTMuMSAyLTMuMSAzLjlzMS40IDMuNiAzLjEgNGwxOCAzLjgtOC42IDE0LjJjLS4yIC42LS41IDEuNC0uNSAyYzAgMS4xIC41IDIuMSAxLjIgM2MuOCAuNiAxLjggMSAyLjggMWMuNyAwIDEuNi0uMiAyLjItLjZsMTAuNC03LjEtMS40IDMyLjhjLTE5LjktNC4xLTM2LTE4LjktNDEuOS0zOC4zYy01LjEtMTYuNi0yLjItMzQuNCA3LjYtNDguNWMyLjctMy45IDIuMy05LjMtLjktMTIuN2MtMTYuNi0xNy41LTIxLjYtNDMuMS0xMy4xLTY1LjVjMS4yLTMuMS0yLjMtNi40LTUtNC41Yy0xNS4zIDEwLjktMjcuNiAyNS42LTM1LjggNDIuNmwyNi40IDI2LjVjMy4xIDMuMSAzLjEgOC4xIDAgMTEuMnMtOC4xIDMuMS0xMS4yIDB6XCJdXG59O1xudmFyIGZhSm91cm5hbFdoaWxscyA9IGZhQm9va0pvdXJuYWxXaGlsbHM7XG52YXIgZmFIYW5kY3VmZnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZGN1ZmZzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGY4XCIsIFwiTTI0MCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xOTIgNDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0tMzIgODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYxNmMwIDEuNy0uMiAzLjQtLjUgNS4xQzI4MC4zIDIyOS42IDMyMCAyODYuMiAzMjAgMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJjMC02NS44IDM5LjctMTIyLjQgOTYuNS0xNDYuOWMtLjQtMS42LS41LTMuMy0uNS01LjFWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMzIwYTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyem0xOTItOTZjMC0yNS45LTUuMS01MC41LTE0LjQtNzMuMWMxNi45LTMyLjkgNDQuOC01OS4xIDc4LjktNzMuOWMtLjQtMS42LS41LTMuMy0uNS01LjFWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0djE2YzAgMS43LS4yIDMuNC0uNSA1LjFDNjAwLjMgMjI5LjYgNjQwIDI4Ni4yIDY0MCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBjLTYyIDAtMTE1LjgtMzUuMy0xNDIuNC04Ni45YzkuMy0yMi41IDE0LjQtNDcuMiAxNC40LTczLjF6bTIyNCAwYTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNMzY4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em04MCA0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmlhbmdsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4ODgsIFwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIiwgXCJ3YXJuaW5nXCJdLCBcImYwNzFcIiwgXCJNMjU2IDMyYzE0LjIgMCAyNy4zIDcuNSAzNC41IDE5LjhsMjE2IDM2OGM3LjMgMTIuNCA3LjMgMjcuNyAuMiA0MC4xUzQ4Ni4zIDQ4MCA0NzIgNDgwSDQwYy0xNC4zIDAtMjcuNi03LjctMzQuNy0yMC4xcy03LTI3LjggLjItNDAuMWwyMTYtMzY4QzIyOC43IDM5LjUgMjQxLjggMzIgMjU2IDMyem0wIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMiAyMjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uO1xudmFyIGZhV2FybmluZyA9IGZhVHJpYW5nbGVFeGNsYW1hdGlvbjtcbnZhciBmYURhdGFiYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RhdGFiYXNlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMWMwXCIsIFwiTTQ0OCA4MHY0OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMTcyLjIgMCAxMjhWODBDMCAzNS44IDEwMC4zIDAgMjI0IDBTNDQ4IDM1LjggNDQ4IDgwek0zOTMuMiAyMTQuN2MyMC44LTcuNCAzOS45LTE2LjkgNTQuOC0yOC42VjI4OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMzMyLjIgMCAyODhWMTg2LjFjMTQuOSAxMS44IDM0IDIxLjIgNTQuOCAyOC42Qzk5LjcgMjMwLjcgMTU5LjUgMjQwIDIyNCAyNDBzMTI0LjMtOS4zIDE2OS4yLTI1LjN6TTAgMzQ2LjFjMTQuOSAxMS44IDM0IDIxLjIgNTQuOCAyOC42Qzk5LjcgMzkwLjcgMTU5LjUgNDAwIDIyNCA0MDBzMTI0LjMtOS4zIDE2OS4yLTI1LjNjMjAuOC03LjQgMzkuOS0xNi45IDU0LjgtMjguNlY0MzJjMCA0NC4yLTEwMC4zIDgwLTIyNCA4MFMwIDQ3Ni4yIDAgNDMyVjM0Ni4xelwiXVxufTtcbnZhciBmYVNoYXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoYXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJtYWlsLWZvcndhcmRcIl0sIFwiZjA2NFwiLCBcIk0zMDcgMzQuOGMtMTEuNSA1LjEtMTkgMTYuNi0xOSAyOS4ydjY0SDE3NkM3OC44IDEyOCAwIDIwNi44IDAgMzA0QzAgNDE3LjMgODEuNSA0NjcuOSAxMDAuMiA0NzguMWMyLjUgMS40IDUuMyAxLjkgOC4xIDEuOWMxMC45IDAgMTkuNy04LjkgMTkuNy0xOS43YzAtNy41LTQuMy0xNC40LTkuOC0xOS41QzEwOC44IDQzMS45IDk2IDQxNC40IDk2IDM4NGMwLTUzIDQzLTk2IDk2LTk2aDk2djY0YzAgMTIuNiA3LjQgMjQuMSAxOSAyOS4yczI1IDMgMzQuNC01LjRsMTYwLTE0NGM2LjctNi4xIDEwLjYtMTQuNyAxMC42LTIzLjhzLTMuOC0xNy43LTEwLjYtMjMuOGwtMTYwLTE0NGMtOS40LTguNS0yMi45LTEwLjYtMzQuNC01LjR6XCJdXG59O1xudmFyIGZhTWFpbEZvcndhcmQgPSBmYVNoYXJlO1xudmFyIGZhQm90dGxlRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3R0bGUtZHJvcGxldCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTRjNFwiLCBcIk05NiAwQzgyLjcgMCA3MiAxMC43IDcyIDI0czEwLjcgMjQgMjQgMjRjNC40IDAgOCAzLjYgOCA4djY0LjljMCAxMi4yLTcuMiAyMy4xLTE3LjIgMzAuMUM1My43IDE3NC4xIDMyIDIxMi41IDMyIDI1NlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjI1NmMwLTQzLjUtMjEuNy04MS45LTU0LjgtMTA1Yy0xMC03LTE3LjItMTcuOS0xNy4yLTMwLjFWNTZjMC00LjQgMy42LTggOC04YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMCAwIDAgMEgxMDRsMCAwIDAgMEw5NiAwem02NCAzODJjLTI2LjUgMC00OC0yMC4xLTQ4LTQ1YzAtMTYuOCAyMi4xLTQ4LjEgMzYuMy02Ni40YzYtNy44IDE3LjUtNy44IDIzLjUgMEMxODUuOSAyODguOSAyMDggMzIwLjIgMjA4IDMzN2MwIDI0LjktMjEuNSA0NS00OCA0NXpcIl1cbn07XG52YXIgZmFNYXNrRmFjZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrLWZhY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUxZDdcIiwgXCJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUgxNDQgMTI4IDU2Yy0zMC45IDAtNTYgMjUuMS01NiA1NnY4NWMwIDU1LjEgMzcuNSAxMDMuMSA5MC45IDExNi40bDEwOCAyN0MyMzMuOCA0MzUgMjc1LjQgNDQ4IDMyMCA0NDhzODYuMi0xMyAxMjEuMS0zNS41bDEwOC0yN0M2MDIuNSAzNzIuMSA2NDAgMzI0LjEgNjQwIDI2OVYxODRjMC0zMC45LTI1LjEtNTYtNTYtNTZINTEyIDQ5NmgtOS4yYy0xOSAwLTM3LjUtNS42LTUzLjMtMTYuMUwzOTYuNCA4Ny4xQzM3My44IDcyIDM0Ny4yIDY0IDMyMCA2NHpNMTMyLjMgMzQ2LjNsLTI5LjgtNy40QzcwLjUgMzMwLjkgNDggMzAyLjEgNDggMjY5VjE4NGMwLTQuNCAzLjYtOCA4LThIOTZ2NDhjMCA0NS4xIDEzLjQgODcuMiAzNi4zIDEyMi4zem00MDUuMS03LjRsLTI5LjggNy40YzIzLTM1LjIgMzYuMy03Ny4yIDM2LjMtMTIyLjNWMTc2aDQwYzQuNCAwIDggMy42IDggOHY4NWMwIDMzLTIyLjUgNjEuOC01NC41IDY5Ljl6TTE5MiAyMDhjMC04LjggNy4yLTE2IDE2LTE2SDQzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNDhINDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMTYgODBjMC04LjggNy4yLTE2IDE2LTE2SDQwMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl1cbn07XG52YXIgZmFIaWxsUm9ja3NsaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hpbGwtcm9ja3NsaWRlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTA4XCIsIFwiTTI1Mi40IDEwMy44bDI3IDQ4YzIuOCA1IDguMiA4LjIgMTMuOSA4LjJsNTMuMyAwYzUuOCAwIDExLjEtMy4xIDEzLjktOC4ybDI3LTQ4YzIuNy00LjkgMi43LTEwLjggMC0xNS43bC0yNy00OGMtMi44LTUtOC4yLTguMi0xMy45LTguMkgyOTMuNGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNWNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwSDM5Ni43YzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6TTUwNC4yIDQwMy42YzQuOSAyLjcgMTAuOCAyLjcgMTUuNyAwbDQ4LTI3YzUtMi44IDguMi04LjIgOC4yLTEzLjlWMzA5LjRjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjl2NTMuM2MwIDUuOCAzLjEgMTEuMSA4LjIgMTMuOWw0OCAyN3pNMTkyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVJpZ2h0TGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyaWdodC1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleGNoYW5nZS1hbHRcIl0sIFwiZjM2MlwiLCBcIk0zMiA5NmwzMjAgMFYzMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDk2IDk2YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYxNjBMMzIgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek00ODAgMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MHY2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZjLTYtNi05LjQtMTQuMS05LjQtMjIuNnMzLjQtMTYuNiA5LjQtMjIuNmw5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXMxOS44IDE2LjYgMTkuOCAyOS42bDAgNjRINDgwelwiXVxufTtcbnZhciBmYUV4Y2hhbmdlQWx0ID0gZmFSaWdodExlZnQ7XG52YXIgZmFQYXBlclBsYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcGVyLXBsYW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE5MTNdLCBcImYxZDhcIiwgXCJNNDk4LjEgNS42YzEwLjEgNyAxNS40IDE5LjEgMTMuNSAzMS4ybC02NCA0MTZjLTEuNSA5LjctNy40IDE4LjItMTYgMjNzLTE4LjkgNS40LTI4IDEuNkwyODQgNDI3LjdsLTY4LjUgNzQuMWMtOC45IDkuNy0yMi45IDEyLjktMzUuMiA4LjFTMTYwIDQ5My4yIDE2MCA0ODBWMzk2LjRjMC00IDEuNS03LjggNC4yLTEwLjdMMzMxLjggMjAyLjhjNS44LTYuMyA1LjYtMTYtLjQtMjJzLTE1LjctNi40LTIyLS43TDEwNiAzNjAuOCAxNy43IDMxNi42QzcuMSAzMTEuMyAuMyAzMDAuNyAwIDI4OC45czUuOS0yMi44IDE2LjEtMjguN2w0NDgtMjU2YzEwLjctNi4xIDIzLjktNS41IDM0IDEuNHpcIl1cbn07XG52YXIgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjVcIiwgXCJNMjEzLjIgMzJIMjg4Vjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJoNzQuOGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzIuMyAwIDQuNi0uMyA2LjgtLjdjLTQuNSAxNS41LTYuOCAzMS44LTYuOCA0OC43YzAgNS40IC4yIDEwLjcgLjcgMTZsLS43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDg2LjZDNTYuNSA0ODAgMzIgNDU1LjUgMzIgNDI1LjRjMC02LjIgMS4xLTEyLjQgMy4xLTE4LjJMMTUyLjkgNzQuNkMxNjIgNDkuMSAxODYuMSAzMiAyMTMuMiAzMnpNNDk2IDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhRHVuZ2VvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkdW5nZW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmQ5XCIsIFwiTTMzNi42IDE1Ni41YzEuMyAxLjEgMi43IDIuMiAzLjkgMy4zYzkuMyA4LjIgMjMgMTAuNSAzMy40IDMuNmw2Ny42LTQ1LjFjMTEuNC03LjYgMTQuMi0yMy4yIDUuMS0zMy40QzQzMCA2Ni42IDQxMC45IDUwLjYgMzg5LjcgMzcuNmMtMTEuOS03LjMtMjYuOS0xLjQtMzIuMSAxMS42bC0zMC41IDc2LjJjLTQuNSAxMS4xIC4yIDIzLjYgOS41IDMxLjJ6TTMyOCAzNi44YzUuMS0xMi44LTEuNi0yNy40LTE1LTMwLjVDMjk0LjcgMi4yIDI3NS42IDAgMjU2IDBzLTM4LjcgMi4yLTU3IDYuNEMxODUuNSA5LjQgMTc4LjggMjQgMTg0IDM2LjhsMzAuMyA3NS44YzQuNSAxMS4zIDE2LjggMTcuMiAyOSAxNmM0LjItLjQgOC40LS42IDEyLjctLjZzOC42IC4yIDEyLjcgLjZjMTIuMSAxLjIgMjQuNC00LjcgMjktMTZMMzI4IDM2Ljh6TTY1LjUgODVjLTkuMSAxMC4yLTYuMyAyNS44IDUuMSAzMy40bDY3LjYgNDUuMWMxMC4zIDYuOSAyNC4xIDQuNiAzMy40LTMuNmMxLjMtMS4xIDIuNi0yLjMgNC0zLjNjOS4zLTcuNSAxMy45LTIwLjEgOS41LTMxLjJMMTU0LjQgNDkuMmMtNS4yLTEyLjktMjAuMy0xOC44LTMyLjEtMTEuNkMxMDEuMSA1MC42IDgyIDY2LjYgNjUuNSA4NXptMzE0IDEzNy4xYy45IDMuMyAxLjcgNi42IDIuMyAxMGMyLjUgMTMgMTMgMjMuOSAyNi4yIDIzLjloODBjMTMuMyAwIDI0LjEtMTAuOCAyMi45LTI0Yy0yLjUtMjcuMi05LjMtNTMuMi0xOS43LTc3LjNjLTUuNS0xMi45LTIxLjQtMTYuNi0zMy4xLTguOWwtNjguNiA0NS43Yy05LjggNi41LTEzLjIgMTkuMi0xMCAzMC41ek01My45IDE0NS44Yy0xMS42LTcuOC0yNy42LTQtMzMuMSA4LjlDMTAuNCAxNzguOCAzLjYgMjA0LjggMS4xIDIzMmMtMS4yIDEzLjIgOS42IDI0IDIyLjkgMjRoODBjMTMuMyAwIDIzLjgtMTAuOCAyNi4yLTIzLjljLjYtMy40IDEuNC02LjcgMi4zLTEwYzMuMS0xMS40LS4yLTI0LTEwLTMwLjVMNTMuOSAxNDUuOHpNMTA0IDI4OEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwOHpNMjQgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTM4NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRINDA4ek0yNzIgMTkyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE5MnptLTY0IDMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIyNHptMTI4IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjI0elwiXVxufTtcbnZhciBmYUFsaWduUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzhcIiwgXCJNNDQ4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYU1vbmV5QmlsbDFXYXZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtMS13YXZlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtb25leS1iaWxsLXdhdmUtYWx0XCJdLCBcImY1M2JcIiwgXCJNMCAxMTIuNVY0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNFY4OS43YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMTI4IDQxNkg2NFYzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDIyNFYxNjBoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzNTJjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek0zODQgMjU2YzAgNjEuOS00MyAxMTItOTYgMTEycy05Ni01MC4xLTk2LTExMnM0My0xMTIgOTYtMTEyczk2IDUwLjEgOTYgMTEyek0yNTIgMjA4YzAgOS43IDYuOSAxNy43IDE2IDE5LjZWMjc2aC00Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGgyNCAyNGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBoLTRWMjA4YzAtMTEtOS0yMC0yMC0yMEgyNzJjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG52YXIgZmFNb25leUJpbGxXYXZlQWx0ID0gZmFNb25leUJpbGwxV2F2ZTtcbnZhciBmYUxpZmVSaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpZmUtcmluZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFjZFwiLCBcIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM3MtMjAuMi0xMTMuOS01NC0xNTcuM2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZzMjAuMiAxMTMuOSA1NCAxNTcuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6XCJdXG59O1xudmFyIGZhSGFuZHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNpZ24tbGFuZ3VhZ2VcIiwgXCJzaWduaW5nXCJdLCBcImYyYTdcIiwgXCJNNTQ0IDE2MGwtLjEgNzIuNmMtLjEgNTIuMi0yNCAxMDEtNjQgMTMzLjFjLjEtMS45IC4xLTMuOCAuMS01Ljd2LThjMC03MS44LTM3LTEzOC42LTk3LjktMTc2LjdsLTYwLjItMzcuNmMtOC42LTUuNC0xNy45LTguNC0yNy4zLTkuNEwyNDguNyA0OC44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOGw3OCAxMzUuMWMzLjMgNS43IDEwLjcgNy43IDE2LjQgNC40czcuNy0xMC43IDQuNC0xNi40bC02Mi0xMDcuNGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhTMzYyIDUgMzY4LjYgMTYuNWw2OCAxMTcuOCAwIDAgMCAwIDQzLjMgNzVMNDgwIDE2MGMwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yNDMuOSA4OC41TDI2OC41IDEzMWMtMTMuOSA0LjUtMjYuNCAxMy43LTM0LjcgMjdjLS45IDEuNC0xLjcgMi45LTIuNSA0LjRsLTI4LjktNTBjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDI2LjggNDYuNGMuNiA2IDIuMSAxMS44IDQuMyAxNy40SDIyNCAyMTAuN2wwIDBIMTc5bC0yMy0zOS44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjYwLjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkM0MTYuNyAyMzQuNyA0NDggMjkxLjIgNDQ4IDM1MnY4YzAgODMuOS02OC4xIDE1Mi0xNTIgMTUySDEyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg5MmM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkg4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEgyMTJjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJINTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMjEyYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEySDg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0SDIyNGwwIDAgMCAwaDkzLjJMMjcxIDIxOS4xYy0xNS05LjQtMTkuNS0yOS4xLTEwLjItNDQuMXpcIl1cbn07XG52YXIgZmFTaWduTGFuZ3VhZ2UgPSBmYUhhbmRzO1xudmFyIGZhU2lnbmluZyA9IGZhSGFuZHM7XG52YXIgZmFDYWxlbmRhckRheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1kYXknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3ODNcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODB6XCJdXG59O1xudmFyIGZhV2F0ZXJMYWRkZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2F0ZXItbGFkZGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJsYWRkZXItd2F0ZXJcIiwgXCJzd2ltbWluZy1wb29sXCJdLCBcImY1YzVcIiwgXCJNMTI4IDEyNy43QzEyOCA3NC45IDE3MC45IDMyIDIyMy43IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOGMtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjdWMjI0SDM4NFYxMjcuN0MzODQgNzQuOSA0MjYuOSAzMiA0NzkuNyAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjhjLTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS43VjM2MWMtMS42IDEtMy4zIDItNC44IDMuMWMtMTggMTIuNC00MC4xIDIwLjMtNTkuMiAyMC4zaDBWMjg4SDE5MnY5Ni41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMS42LTEuMS0zLjItMi4yLTQuOS0zLjFWMTI3Ljd6TTMwNi41IDM4OS45QzMyOSA0MDUuNCAzNTYuNSA0MTYgMzg0IDQxNmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA0NjkuNyA0MTcgNDgwIDM4NCA0ODBjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MDUuMiAxNjUuMSA0MTYgMTkyIDQxNmMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG52YXIgZmFMYWRkZXJXYXRlciA9IGZhV2F0ZXJMYWRkZXI7XG52YXIgZmFTd2ltbWluZ1Bvb2wgPSBmYVdhdGVyTGFkZGVyO1xudmFyIGZhQXJyb3dzVXBEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy11cC1kb3duJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJhcnJvd3MtdlwiXSwgXCJmMDdkXCIsIFwiTTE4Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCAxMDkuM1Y0MDIuN0w4Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjdWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2elwiXVxufTtcbnZhciBmYUFycm93c1YgPSBmYUFycm93c1VwRG93bjtcbnZhciBmYUZhY2VHcmltYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3JpbWFjZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NiwgXCJncmltYWNlXCJdLCBcImY1N2ZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTk2LTExMmgtOFYzNjBsNTUuMyAwYy0zLjggMjIuNy0yMy42IDQwLTQ3LjMgNDB6bTQ3LjMtNTZMMzQ0IDM0NFYzMDRoOGMyMy44IDAgNDMuNSAxNy4zIDQ3LjMgNDB6TTMyOCAzNDRIMjY0VjMwNGg2NHY0MHptMCA1NkgyNjRWMzYwaDY0djQwem0tODAtOTZ2NDBsLTY0IDBWMzA0aDY0em0wIDU2djQwSDE4NFYzNjBsNjQgMHptLTgwLTE2SDExMi43YzMuOC0yMi43IDIzLjYtNDAgNDcuMy00MGg4djQwem0wIDU2aC04Yy0yMy44IDAtNDMuNS0xNy4zLTQ3LjMtNDBIMTY4djQwek0xNDQuNCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFHcmltYWNlID0gZmFGYWNlR3JpbWFjZTtcbnZhciBmYVdoZWVsY2hhaXJNb3ZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWVsY2hhaXItbW92ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wid2hlZWxjaGFpci1hbHRcIl0sIFwiZTJjZVwiLCBcIk0zMjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjA0LjUgMTIxLjNjLTUuNC0yLjUtMTEuNy0xLjktMTYuNCAxLjdsLTQwLjkgMzAuN2MtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw0MC45LTMwLjdjMjMuNy0xNy44IDU1LjMtMjEgODIuMS04LjRsOTAuNCA0Mi41YzI5LjEgMTMuNyAzNi44IDUxLjYgMTUuMiA3NS41TDI5OS4xIDIyNGg5Ny40YzMwLjMgMCA1MyAyNy43IDQ3LjEgNTcuNEw0MTUuNCA0MjIuM2MtMy41IDE3LjMtMjAuMyAyOC42LTM3LjcgMjUuMXMtMjguNi0yMC4zLTI1LjEtMzcuN0wzNzcgMjg4SDMwNi43YzguNiAxOS42IDEzLjMgNDEuMiAxMy4zIDY0YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJzNzEuNi0xNjAgMTYwLTE2MGMxMS4xIDAgMjIgMS4xIDMyLjQgMy4zbDU0LjItNTQuMi00Mi4xLTE5Ljh6TTE2MCA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6XCJdXG59O1xudmFyIGZhV2hlZWxjaGFpckFsdCA9IGZhV2hlZWxjaGFpck1vdmU7XG52YXIgZmFUdXJuRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJuLWRvd24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDU0OSwgXCJsZXZlbC1kb3duLWFsdFwiXSwgXCJmM2JlXCIsIFwiTTM1MCAzMzQuNWMzLjggOC44IDIgMTktNC42IDI2bC0xMzYgMTQ0Yy00LjUgNC44LTEwLjggNy41LTE3LjQgNy41cy0xMi45LTIuNy0xNy40LTcuNWwtMTM2LTE0NGMtNi42LTctOC40LTE3LjItNC42LTI2czEyLjUtMTQuNSAyMi0xNC41aDg4bDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRWMzJDMCAxNC4zIDE0LjMgMCAzMiAwbDgwIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTJoODhjOS42IDAgMTguMiA1LjcgMjIgMTQuNXpcIl1cbn07XG52YXIgZmFMZXZlbERvd25BbHQgPSBmYVR1cm5Eb3duO1xudmFyIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTJcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6TTU1MC42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1MzAuNyAyMjRIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDUzMC43bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwelwiXVxufTtcbnZhciBmYVNxdWFyZUVudmVsb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1lbnZlbG9wZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZW52ZWxvcGUtc3F1YXJlXCJdLCBcImYxOTlcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yMTggMjcxLjdMNjQuMiAxNzIuNEM2NiAxNTYuNCA3OS41IDE0NCA5NiAxNDRIMzUyYzE2LjUgMCAzMCAxMi40IDMxLjggMjguNEwyMzAgMjcxLjdjLTEuOCAxLjItMy45IDEuOC02IDEuOHMtNC4yLS42LTYtMS44em0yOS40IDI2LjlMMzg0IDIxMC40VjMzNmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjEwLjRsMTM2LjYgODguMmM3IDQuNSAxNS4xIDYuOSAyMy40IDYuOXMxNi40LTIuNCAyMy40LTYuOXpcIl1cbn07XG52YXIgZmFFbnZlbG9wZVNxdWFyZSA9IGZhU3F1YXJlRW52ZWxvcGU7XG52YXIgZmFEaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5MjJdLCBcImY1MjJcIiwgXCJNMjc0LjkgMzQuM2MtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDM0LjMgMTczLjFjLTI4LjEgMjguMS0yOC4xIDczLjcgMCAxMDEuOEwxNzMuMSA0MTMuN2MyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDBMNDEzLjcgMjc0LjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDI3NC45IDM0LjN6TTIwMCAyMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNOTYgMjAwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjI0IDM3NmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTM1MiAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMjQgMTIwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptOTYgMzI4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINDYxLjdjMTEuNiAzNiAzLjEgNzctMjUuNCAxMDUuNUwzMjAgNDEzLjhWNDQ4ek00ODAgMzI4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFCb3dsaW5nQmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsaW5nLWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0MzZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCA4MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIwOCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTY0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFCcmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmFpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUwNF0sIFwiZjVkY1wiLCBcIk0xODQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NlY0NTZjMCAzMC45LTI1LjEgNTYtNTYgNTZjLTI4LjkgMC01Mi43LTIxLjktNTUuNy01MC4xYy01LjIgMS40LTEwLjcgMi4xLTE2LjMgMi4xYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTcuNCAxLjMtMTQuNiAzLjYtMjEuMkMyMS40IDM2Ny40IDAgMzM4LjIgMCAzMDRjMC0zMS45IDE4LjctNTkuNSA0NS44LTcyLjNDMzcuMSAyMjAuOCAzMiAyMDcgMzIgMTkyYzAtMzAuNyAyMS42LTU2LjMgNTAuNC02Mi42QzgwLjggMTIzLjkgODAgMTE4IDgwIDExMmMwLTI5LjkgMjAuNi01NS4xIDQ4LjMtNjIuMUMxMzEuMyAyMS45IDE1NS4xIDAgMTg0IDB6TTMyOCAwYzI4LjkgMCA1Mi42IDIxLjkgNTUuNyA0OS45YzI3LjggNyA0OC4zIDMyLjEgNDguMyA2Mi4xYzAgNi0uOCAxMS45LTIuNCAxNy40YzI4LjggNi4yIDUwLjQgMzEuOSA1MC40IDYyLjZjMCAxNS01LjEgMjguOC0xMy44IDM5LjdDNDkzLjMgMjQ0LjUgNTEyIDI3Mi4xIDUxMiAzMDRjMCAzNC4yLTIxLjQgNjMuNC01MS42IDc0LjhjMi4zIDYuNiAzLjYgMTMuOCAzLjYgMjEuMmMwIDM1LjMtMjguNyA2NC02NCA2NGMtNS42IDAtMTEuMS0uNy0xNi4zLTIuMWMtMyAyOC4yLTI2LjggNTAuMS01NS43IDUwLjFjLTMwLjkgMC01Ni0yNS4xLTU2LTU2VjU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2elwiXVxufTtcbnZhciBmYUJhbmRhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFuZGFnZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTY1NywgXCJiYW5kLWFpZFwiXSwgXCJmNDYyXCIsIFwiTTQ4MCA0MTZoOTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0MTZ6TTQ0OCA5NkgxOTJWNDE2SDQ0OFY5NnpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwVjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NlY5Nkg2NHpNMjQ4IDIwOGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yNDggMzA0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhQmFuZEFpZCA9IGZhQmFuZGFnZTtcbnZhciBmYUNhbGVuZGFyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItbWludXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyNzJcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzEyIDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMzEyelwiXVxufTtcbnZhciBmYUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS14bWFyaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNTMyLCBcInRpbWVzLWNpcmNsZVwiLCBcInhtYXJrLWNpcmNsZVwiXSwgXCJmMDU3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXVxufTtcbnZhciBmYVRpbWVzQ2lyY2xlID0gZmFDaXJjbGVYbWFyaztcbnZhciBmYVhtYXJrQ2lyY2xlID0gZmFDaXJjbGVYbWFyaztcbnZhciBmYUdpZnRzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dpZnRzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzljXCIsIFwiTTIwMC42IDMyQzIwNSAxOS41IDE5OC41IDUuOCAxODYgMS40UzE1OS44IDMuNSAxNTUuNCAxNkwxNDQuNyA0Ni4ybC05LjktMjkuOEMxMzAuNiAzLjggMTE3LTMgMTA0LjQgMS4yUzg1IDE5IDg5LjIgMzEuNmw4LjMgMjUtMjcuNC0yMGMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNzLTUuNCAyNS43IDUuMyAzMy41TDcwLjIgOTZINDhDMjEuNSA5NiAwIDExNy41IDAgMTQ0VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyMDAuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMjU2YzAtMjkuOSAyMC41LTU1IDQ4LjItNjJjMS44LTMxIDE3LjEtNTguMiA0MC4xLTc2LjFDMjcxLjcgMTA0LjcgMjU2LjkgOTYgMjQwIDk2SDIxNy44bDI4LjMtMjAuNmMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM0wxOTIuNSA1NS4xIDIwMC42IDMyek0zNjMuNSAxODUuNUwzOTMuMSAyMjRIMzQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGMwLTEzLjEgMTAuOC0yNCAyNC4yLTI0YzcuNiAwIDE0LjcgMy41IDE5LjMgOS41ek0yNzIgMjAwYzAgOC40IDEuNCAxNi41IDQuMSAyNEgyNzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djgwSDQxNlYyNTZoMzJ2OTZINjQwVjI3MmMwLTI2LjUtMjEuNS00OC00OC00OGgtNC4xYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0YzAtMzkuOS0zMi41LTcyLTcyLjItNzJjLTIyLjQgMC00My42IDEwLjQtNTcuMyAyOC4yTDQzMiAxOTUuOGwtMzAuNS0zOS42Yy0xMy43LTE3LjgtMzUtMjguMi01Ny4zLTI4LjJjLTM5LjcgMC03Mi4yIDMyLjEtNzIuMiA3MnpNMjI0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MTZWMzg0SDIyNHY4MHptMjI0IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYzODRINDQ4VjUxMnptOTYtMzEyYzAgMTMuMy0xMC43IDI0LTI0IDI0SDQ3MC45bDI5LjYtMzguNWM0LjYtNS45IDExLjctOS41IDE5LjMtOS41YzEzLjQgMCAyNC4yIDEwLjkgMjQuMiAyNHpcIl1cbn07XG52YXIgZmFIb3RlbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3RlbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk3Nl0sIFwiZjU5NFwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMwNFY0NjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh2NDhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnptOTYgODB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDExMmMtOC44IDAtMTYgNy4yLTE2IDE2ek0yNDAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIMjQwem0xMTIgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMTIgMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDExMnptMTEyIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDM2OHpNMzI4IDM4NGMxMy4zIDAgMjQuMy0xMC45IDIxLTIzLjhjLTEwLjYtNDEuNS00OC4yLTcyLjItOTMtNzIuMnMtODIuNSAzMC43LTkzIDcyLjJjLTMuMyAxMi44IDcuOCAyMy44IDIxIDIzLjhIMzI4elwiXVxufTtcbnZhciBmYUVhcnRoQXNpYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1hc2lhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU5LCBcImdsb2JlLWFzaWFcIl0sIFwiZjU3ZVwiLCBcIk01MS43IDI5NS4xbDMxLjcgNi4zYzcuOSAxLjYgMTYtLjkgMjEuNy02LjZsMTUuNC0xNS40YzExLjYtMTEuNiAzMS4xLTguNCAzOC40IDYuMmw5LjMgMTguNWM0LjggOS42IDE0LjYgMTUuNyAyNS40IDE1LjdjMTUuMiAwIDI2LjEtMTQuNiAyMS43LTI5LjJsLTYtMTkuOWMtNC42LTE1LjQgNi45LTMwLjkgMjMtMzAuOWgyLjNjMTMuNCAwIDI1LjktNi43IDMzLjMtMTcuOGwxMC43LTE2LjFjNS42LTguNSA1LjMtMTkuNi0uOC0yNy43bC0xNi4xLTIxLjVjLTEwLjMtMTMuNy0zLjMtMzMuNSAxMy40LTM3LjdsMTctNC4zYzcuNS0xLjkgMTMuNi03LjIgMTYuNS0xNC40bDE2LjQtNDAuOUMzMDMuNCA1Mi4xIDI4MC4yIDQ4IDI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZjMCAxMy40IDEuMyAyNi41IDMuNyAzOS4xem00MDcuNyA0LjZjLTMtLjMtNi0uMS05IC44bC0xNS44IDQuNGMtNi43IDEuOS0xMy44LS45LTE3LjUtNi43bC0yLTMuMWMtNi05LjQtMTYuNC0xNS4xLTI3LjYtMTUuMXMtMjEuNiA1LjctMjcuNiAxNS4xbC02LjEgOS41Yy0xLjQgMi4yLTMuNCA0LjEtNS43IDUuM0wzMTIgMzMwLjFjLTE4LjEgMTAuMS0yNS41IDMyLjQtMTcgNTEuM2w1LjUgMTIuNGM4LjYgMTkuMiAzMC43IDI4LjUgNTAuNSAyMS4xbDIuNi0xYzEwLTMuNyAyMS4zLTIuMiAyOS45IDQuMWwxLjUgMS4xYzM3LjItMjkuNSA2NC4xLTcxLjQgNzQuNC0xMTkuNXpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0xNDQuNSA5Mi4xYy0yLjEgOC42IDMuMSAxNy4zIDExLjYgMTkuNGwzMiA4YzguNiAyLjEgMTcuMy0zLjEgMTkuNC0xMS42cy0zLjEtMTcuMy0xMS42LTE5LjRsLTMyLThjLTguNi0yLjEtMTcuMyAzLjEtMTkuNCAxMS42em05Mi0yMGMtMi4xIDguNiAzLjEgMTcuMyAxMS42IDE5LjRzMTcuMy0zLjEgMTkuNC0xMS42bDgtMzJjMi4xLTguNi0zLjEtMTcuMy0xMS42LTE5LjRzLTE3LjMgMy4xLTE5LjQgMTEuNmwtOCAzMnpNMzQzLjIgMTEzLjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJsLTE2IDMyYy00IDcuOS0uNyAxNy41IDcuMiAyMS41czE3LjUgLjcgMjEuNS03LjJsMTYtMzJjNC03LjkgLjctMTcuNS03LjItMjEuNXpcIl1cbn07XG52YXIgZmFHbG9iZUFzaWEgPSBmYUVhcnRoQXNpYTtcbnZhciBmYUlkQ2FyZENsaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWQtY2FyZC1jbGlwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJpZC1jYXJkLWFsdFwiXSwgXCJmNDdmXCIsIFwiTTI1NiAwaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDY0SDE5MnY0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY2NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjR6TTE3NiA0MzcuM2MwIDUuOSA0LjggMTAuNyAxMC43IDEwLjdIMzg5LjNjNS45IDAgMTAuNy00LjggMTAuNy0xMC43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zSDIyOS4zYy0yOS41IDAtNTMuMyAyMy45LTUzLjMgNTMuM3pNMjg4IDM1MmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFJZENhcmRBbHQgPSBmYUlkQ2FyZENsaXA7XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2VhcmNoLXBsdXNcIl0sIFwiZjAwZVwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xODQgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjMyaDY0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIzMlYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NjRIMTIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDY0djY0elwiXVxufTtcbnZhciBmYVNlYXJjaFBsdXMgPSBmYU1hZ25pZnlpbmdHbGFzc1BsdXM7XG52YXIgZmFUaHVtYnNVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aHVtYnMtdXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzcsIDYxNTc1XSwgXCJmMTY0XCIsIFwiTTMxMy40IDMyLjljMjYgNS4yIDQyLjkgMzAuNSAzNy43IDU2LjVsLTIuMyAxMS40Yy01LjMgMjYuNy0xNS4xIDUyLjEtMjguOCA3NS4ySDQ2NGMyNi41IDAgNDggMjEuNSA0OCA0OGMwIDE4LjUtMTAuNSAzNC42LTI1LjkgNDIuNkM0OTcgMjc1LjQgNTA0IDI4OC45IDUwNCAzMDRjMCAyMy40LTE2LjggNDIuOS0zOC45IDQ3LjFjNC40IDcuMyA2LjkgMTUuOCA2LjkgMjQuOWMwIDIxLjMtMTMuOSAzOS40LTMzLjEgNDUuNmMuNyAzLjMgMS4xIDYuOCAxLjEgMTAuNGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyOTQuNWMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFsLTM4LjUtMjUuN0MxNzYgNDIwLjQgMTYwIDM5MC40IDE2MCAzNTguM1YzMjAgMjcyIDI0Ny4xYzAtMjkuMiAxMy4zLTU2LjcgMzYtNzVsNy40LTUuOWMyNi41LTIxLjIgNDQuNi01MSA1MS4yLTg0LjJsMi4zLTExLjRjNS4yLTI2IDMwLjUtNDIuOSA1Ni41LTM3Ljd6TTMyIDE5Mkg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFVc2VyQ2xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1jbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRmZFwiLCBcIk0yMjQgMGExMjggMTI4IDAgMSAxIDAgMjU2QTEyOCAxMjggMCAxIDEgMjI0IDB6TTE3OC4zIDMwNGg5MS40YzIwLjYgMCA0MC40IDMuNSA1OC44IDkuOUMzMjMgMzMxIDMyMCAzNDkuMSAzMjAgMzY4YzAgNTkuNSAyOS41IDExMi4xIDc0LjggMTQ0SDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek0zNTIgMzY4YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC04MGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg1MTJWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG52YXIgZmFIYW5kRG90cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWRvdHMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFsbGVyZ2llc1wiXSwgXCJmNDYxXCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzM2YzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRzLTE0LjYgNDEuMyAxLjQgNTYuNkwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NEgzMDRjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjI0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzJ6TTI0MCAzMzZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHptODAgMTZhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem00OC0xNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem0tMTYgODBhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyek0yNDAgNDMyYTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bS00OC00OGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6XCJdXG59O1xudmFyIGZhQWxsZXJnaWVzID0gZmFIYW5kRG90cztcbnZhciBmYUZpbGVJbnZvaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtaW52b2ljZScsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTgwIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0xNiA5NkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAzMnY2NEgyODhWMjU2SDk2ek0yNDAgNDE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFXaW5kb3dNaW5pbWl6ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5kb3ctbWluaW1pemUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NjldLCBcImYyZDFcIiwgXCJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFNdWdTYXVjZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbXVnLXNhdWNlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY29mZmVlXCJdLCBcImYwZjRcIiwgXCJNOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJINDQ4aDY0YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4SDQ4MGMwIDUzLTQzIDk2LTk2IDk2SDE5MmMtNTMgMC05Ni00My05Ni05NlY2NHpNNDgwIDIyNGgzMmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEg0ODBWMjI0ek0zMiA0MTZINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUNvZmZlZSA9IGZhTXVnU2F1Y2VyO1xudmFyIGZhQnJ1c2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJ1c2gnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1NWRcIiwgXCJNMTYyLjQgNmMtMS41LTMuNi01LTYtOC45LTZoLTE5Yy0zLjkgMC03LjUgMi40LTguOSA2TDEwNC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMNjYuNCA2Yy0xLjUtMy42LTUtNi04LjktNkg0OEMyMS41IDAgMCAyMS41IDAgNDhWMjI0djIyLjRWMjU2SDkuNiAzNzQuNCAzODR2LTkuNlYyMjQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjMwLjVjLTMuOSAwLTcuNSAyLjQtOC45IDZMMjAwLjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEwxNjIuNCA2ek0wIDI4OHYzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0VjM4NGg2NGMzNS4zIDAgNjQtMjguNyA2NC02NFYyODhIMHpNMTkyIDQzMmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6XCJdXG59O1xudmFyIGZhTWFzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNmZhXCIsIFwiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGg4LjRjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMjMuMi00Ni4zYzQuNC04LjggMTMuMy0xNC4zIDIzLjItMTQuM3MxOC44IDUuNSAyMy4yIDE0LjNsMjMuMiA0Ni4zYzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNEg0MDBjOTYgMCAxNzYtNjQgMTc2LTE3NnMtNjQtMjA4LTI4OC0yMDh6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA5NiAyNTZ6bTMyMC02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzZWFyY2gtbWludXNcIl0sIFwiZjAxMFwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDI4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxMzZ6XCJdXG59O1xudmFyIGZhU2VhcmNoTWludXMgPSBmYU1hZ25pZnlpbmdHbGFzc01pbnVzO1xudmFyIGZhUnVsZXJWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci12ZXJ0aWNhbCcsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjU0OFwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgyMDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWOTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjY0SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg4MHY2NEgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODB2NjRIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpcIl1cbn07XG52YXIgZmFVc2VyTGFyZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sYXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widXNlci1hbHRcIl0sIFwiZjQwNlwiLCBcIk0yNTYgMjg4QTE0NCAxNDQgMCAxIDAgMjU2IDBhMTQ0IDE0NCAwIDEgMCAwIDI4OHptLTk0LjcgMzJDNzIuMiAzMjAgMCAzOTIuMiAwIDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN0g0ODEuM2MxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdDNTEyIDM5Mi4yIDQzOS44IDMyMCAzNTAuNyAzMjBIMTYxLjN6XCJdXG59O1xudmFyIGZhVXNlckFsdCA9IGZhVXNlckxhcmdlO1xudmFyIGZhVHJhaW5UcmFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWluLXRyYW0nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NTBdLCBcImU1YjRcIiwgXCJNODYuOCA0OGMtMTIuMiAwLTIzLjYgNS41LTMxLjIgMTVMNDIuNyA3OUMzNC41IDg5LjMgMTkuNCA5MSA5IDgyLjdTLTMgNTkuNCA1LjMgNDlMMTggMzNDMzQuNyAxMi4yIDYwIDAgODYuOCAwSDM2MS4yYzI2LjcgMCA1MiAxMi4yIDY4LjcgMzNsMTIuOCAxNmM4LjMgMTAuNCA2LjYgMjUuNS0zLjggMzMuN3MtMjUuNSA2LjYtMzMuNy0zLjdMMzkyLjUgNjNjLTcuNi05LjUtMTkuMS0xNS0zMS4yLTE1SDI0OFY5Nmg0MGM1MyAwIDk2IDQzIDk2IDk2VjM1MmMwIDMwLjYtMTQuMyA1Ny44LTM2LjYgNzUuNGw2NS41IDY1LjVjNy4xIDcuMSAyLjEgMTkuMS03LjkgMTkuMUgzNjUuM2MtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMjg4IDQ0OEgxNjBsLTU0LjYgNTQuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDQzYy0xMCAwLTE1LTEyLjEtNy45LTE5LjFsNjUuNS02NS41Qzc4LjMgNDA5LjggNjQgMzgyLjYgNjQgMzUyVjE5MmMwLTUzIDQzLTk2IDk2LTk2aDQwVjQ4SDg2Ljh6TTE2MCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwem0zMiAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVVzZXJOdXJzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLW51cnNlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmODJmXCIsIFwiTTk2IDEyOFY3MC4yYzAtMTMuMyA4LjMtMjUuMyAyMC44LTMwbDk2LTM2YzcuMi0yLjcgMTUuMi0yLjcgMjIuNSAwbDk2IDM2YzEyLjUgNC43IDIwLjggMTYuNiAyMC44IDMwVjEyOGgtLjNjLjIgMi42IC4zIDUuMyAuMyA4djQwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4VjEzNmMwLTIuNyAuMS01LjQgLjMtOEg5NnptNDggNDhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MFYxNjBIMTQ0djE2ek0xMTEuOSAzMjcuN2MxMC41LTMuNCAyMS44IC40IDI5LjQgOC41bDcxIDc1LjVjNi4zIDYuNyAxNyA2LjcgMjMuMyAwbDcxLTc1LjVjNy42LTguMSAxOC45LTExLjkgMjkuNC04LjVDNDAxIDM0OC42IDQ0OCA0MDkuNCA0NDggNDgxLjNjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43SDMwLjdDMTMuOCA1MTIgMCA0OTguMiAwIDQ4MS4zYzAtNzEuOSA0Ny0xMzIuNyAxMTEuOS0xNTMuNnpNMjA4IDQ4VjY0SDE5MmMtNC40IDAtOCAzLjYtOCA4Vjg4YzAgNC40IDMuNiA4IDggOGgxNnYxNmMwIDQuNCAzLjYgOCA4IDhoMTZjNC40IDAgOC0zLjYgOC04Vjk2aDE2YzQuNCAwIDgtMy42IDgtOFY3MmMwLTQuNC0zLjYtOC04LThIMjQwVjQ4YzAtNC40LTMuNi04LTgtOEgyMTZjLTQuNCAwLTggMy42LTggOHpcIl1cbn07XG52YXIgZmFTeXJpbmdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N5cmluZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxMzddLCBcImY0OGVcIiwgXCJNNDQxIDdsMzIgMzIgMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTUtMTVMNDE3LjkgMTI4bDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTcyLTcyTDI5NSA3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDU1IDU1TDQyMi4xIDU2IDQwNyA0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwek0yMTAuMyAxNTUuN2w2MS4xLTYxLjFjLjMgLjMgLjYgLjcgMSAxbDE2IDE2IDU2IDU2IDU2IDU2IDE2IDE2Yy4zIC4zIC42IC42IDEgMWwtMTkxIDE5MWMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRIOTcuOUw0MSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTctNTdWMzI1LjNjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmw0My4zLTQzLjMgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01NyA0MS40LTQxLjQgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01N3pcIl1cbn07XG52YXIgZmFDbG91ZFN1biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1zdW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5OTI1XSwgXCJmNmM0XCIsIFwiTTI5NC4yIDEuMmM1LjEgMi4xIDguNyA2LjcgOS42IDEyLjFsMTQuMSA4NC43IDg0LjcgMTQuMWM1LjQgLjkgMTAgNC41IDEyLjEgOS42czEuNSAxMC45LTEuNiAxNS40bC0zOC41IDU1Yy0yLjItLjEtNC40LS4yLTYuNy0uMmMtMjMuMyAwLTQ1LjEgNi4yLTY0IDE3LjFsMC0xLjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjOC4xIDAgMTUuOS0xIDIzLjQtMi45Yy0zNi42IDE4LjEtNjMuMyA1My4xLTY5LjggOTQuOWwtMjQuNCAxN2MtNC41IDMuMS0xMC4zIDMuOC0xNS40IDEuNnMtOC43LTYuNy05LjYtMTIuMUw5OC4xIDMxNy45IDEzLjQgMzAzLjhjLTUuNC0uOS0xMC00LjUtMTIuMS05LjZzLTEuNS0xMC45IDEuNi0xNS40TDUyLjUgMjA4IDIuOSAxMzcuMmMtMy4yLTQuNS0zLjgtMTAuMy0xLjYtMTUuNHM2LjctOC43IDEyLjEtOS42TDk4LjEgOTguMWwxNC4xLTg0LjdjLjktNS40IDQuNS0xMCA5LjYtMTIuMXMxMC45LTEuNSAxNS40IDEuNkwyMDggNTIuNSAyNzguOCAyLjljNC41LTMuMiAxMC4zLTMuOCAxNS40LTEuNnpNMTQ0IDIwOGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTYzOS45IDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwSDI4OGMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04NyA4MC05NC42bDAtMS4zYzAtNTMgNDMtOTYgOTYtOTZjMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjRjMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjktLjYgMTEuNy0xLjkgMTcuMmMzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43elwiXVxufTtcbnZhciBmYVN0b3B3YXRjaDIwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaC0yMCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2ZlwiLCBcIk0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgxNlY5OC40QzkyLjMgMTEzLjggMTYgMjAwIDE2IDMwNGMwIDExNC45IDkzLjEgMjA4IDIwOCAyMDhzMjA4LTkzLjEgMjA4LTIwOGMwLTQxLjgtMTIuMy04MC43LTMzLjUtMTEzLjJsMjQuMS0yNC4xYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDM1NS43IDE0M2MtMjguMS0yMy02Mi4yLTM4LjgtOTkuNy00NC42VjY0aDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE3NnpNMjg4IDIwNGMyOC43IDAgNTIgMjMuMyA1MiA1MnY5NmMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MlYyNTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MnY5NmMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEyVjI1NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnpNMTU5LjUgMjQ0Yy01LjQgMC0xMC4yIDMuNS0xMS45IDguNmwtLjYgMS43Yy0zLjUgMTAuNS0xNC44IDE2LjEtMjUuMyAxMi42cy0xNi4xLTE0LjgtMTIuNi0yNS4zbC42LTEuN2M3LjItMjEuNSAyNy4yLTM1LjkgNDkuOC0zNS45YzI5IDAgNTIuNSAyMy41IDUyLjUgNTIuNXYyLjJjMCAxMy40LTQuOSAyNi40LTEzLjggMzYuNGwtMzkgNDMuOWMtNi4yIDctMTAgMTUuNy0xMC45IDI0LjlIMTkyYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMEgxMjhjLTExIDAtMjAtOS0yMC0yMFYzNjguM2MwLTIwLjYgNy41LTQwLjQgMjEuMi01NS44bDM5LTQzLjljMi40LTIuNyAzLjctNi4yIDMuNy05Ljh2LTIuMmMwLTYuOS01LjYtMTIuNS0xMi41LTEyLjV6XCJdXG59O1xudmFyIGZhU3F1YXJlRnVsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtZnVsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOTAwMCwgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgXCJmNDVjXCIsIFwiTTAgMEg1MTJWNTEySDBWMHpcIl1cbn07XG52YXIgZmFNYWduZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmV0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NTIyXSwgXCJmMDc2XCIsIFwiTTAgMTYwdjk2QzAgMzc5LjcgMTAwLjMgNDgwIDIyNCA0ODBzMjI0LTEwMC4zIDIyNC0yMjRWMTYwSDMyMHY5NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYxNjBIMHptMC0zMkgxMjhWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NHY2NHptMzIwIDBINDQ4VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjR6XCJdXG59O1xudmFyIGZhSmFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2phcicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTUxNlwiLCBcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwSDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0SDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MHptOTYgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIOTZ6XCJdXG59O1xudmFyIGZhTm90ZVN0aWNreSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3RlLXN0aWNreScsXG4gIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCBcInN0aWNreS1ub3RlXCJdLCBcImYyNDlcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjg4VjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NDhWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTQ0OCAzNTJINDAyLjcgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ2NjYuN1Y0ODBsMzItMzIgNjQtNjQgMzItMzJ6XCJdXG59O1xudmFyIGZhU3RpY2t5Tm90ZSA9IGZhTm90ZVN0aWNreTtcbnZhciBmYUJ1Z1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1Zy1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTQ5MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Ny40IDM0OC45YzEuNy05LjQgMi42LTE5IDIuNi0yOC45aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ3OS43Yy0xLjEtMTQuMS01LTI3LjUtMTEuMS0zOS41Yy43LS42IDEuNC0xLjIgMi4xLTEuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLS43IC43LTEuMyAxLjQtMS45IDIuMUM0MDkuMiAxNjQuMSAzOTMuMSAxNjAgMzc2IDE2MEgyNjRjLTguMyAwLTE2LjMgMS0yNCAyLjhMMzguOCA1LjF6bTM5MiA0MzAuM0wzMzYgMzYwLjdWNDc5LjJjMzYuNi0zLjYgNjkuNy0xOS42IDk0LjgtNDMuOHpNMTY2LjcgMjI3LjNjLTMuNCA5LTUuNiAxOC43LTYuNCAyOC43SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDY0YzAgMjQuNiA1LjUgNDcuOCAxNS40IDY4LjZjLTIuMiAxLjMtNC4yIDIuOS02IDQuOGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjMuMS02My4xYzI0LjUgMjEuOCA1NS44IDM2LjIgOTAuMyAzOS42VjMzNS41TDE2Ni43IDIyNy4zek0zMjAgMGMtNTMgMC05NiA0My05NiA5NnYzLjZjMCAxNS43IDEyLjcgMjguNCAyOC40IDI4LjRIMzg3LjZjMTUuNyAwIDI4LjQtMTIuNyAyOC40LTI4LjRWOTZjMC01My00My05Ni05Ni05NnpcIl1cbn07XG52YXIgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLXdhdGVyLXB1bXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YjZcIiwgXCJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhWMjU2SDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY5NmMwIDggMiAxNS42IDUuNCAyMi4yYzMuOC0xLjcgNy44LTMuMSAxMi00LjFjMTMuMS0zLjEgMjYuNy05LjggMzcuMy0xOC42YzIyLjItMTguNyA1NC4zLTIwLjEgNzguMS0zLjRjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjMgNzguMSAzLjRjMTAuNiA4LjggMjQuMiAxNS42IDM3LjMgMTguNmM0LjIgMSA4LjIgMi40IDEyIDQuMUM1NzQgNDE1LjYgNTc2IDQwOCA1NzYgNDAwVjMwNGMwLTI2LjUtMjEuNS00OC00OC00OEg0ODBsMC0xNDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0MTYgMTA5LjMgNDE2IDI1NkgyODhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTEyek0zMDYuNSA0MjEuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNDcgNDM3LjQgMjE5LjUgNDQ4IDE5MiA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA1MDEuNyAxNTkgNTEyIDE5MiA1MTJjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdXG59O1xudmFyIGZhQm9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib25lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NDYwXSwgXCJmNWQ3XCIsIFwiTTE1My43IDE0NC44YzYuOSAxNi4zIDIwLjYgMzEuMiAzOC4zIDMxLjJIMzg0YzE3LjcgMCAzMS40LTE0LjkgMzguMy0zMS4yQzQzNC40IDExNi4xIDQ2Mi45IDk2IDQ5NiA5NmM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDMwLjQtMTcgNTYuOS00MiA3MC40Yy0zLjYgMS45LTYgNS41LTYgOS42czIuNCA3LjcgNiA5LjZjMjUgMTMuNSA0MiA0MCA0MiA3MC40YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0zMy4xIDAtNjEuNi0yMC4xLTczLjctNDguOEM0MTUuNCAzNTAuOSA0MDEuNyAzMzYgMzg0IDMzNkgxOTJjLTE3LjcgMC0zMS40IDE0LjktMzguMyAzMS4yQzE0MS42IDM5NS45IDExMy4xIDQxNiA4MCA0MTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtMzAuNCAxNy01Ni45IDQyLTcwLjRjMy42LTEuOSA2LTUuNSA2LTkuNnMtMi40LTcuNy02LTkuNkMxNyAyMzIuOSAwIDIwNi40IDAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzMzLjEgMCA2MS42IDIwLjEgNzMuNyA0OC44elwiXVxufTtcbnZhciBmYVVzZXJJbmp1cmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItaW5qdXJlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjcyOFwiLCBcIk0yNDAgODBIMzQyLjdjLTcuOS0xOS41LTIwLjQtMzYuNS0zNi4yLTQ5LjlMMjQwIDgwem0zNy43LTY4LjJDMjYxLjMgNC4yIDI0My4yIDAgMjI0IDBjLTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBoODEuNGw5MS02OC4yek0yMjQgMjU2YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4YzAtNS40LS4zLTEwLjgtMS0xNkg5N2MtLjcgNS4yLTEgMTAuNi0xIDE2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4ek0xMjQgMzEyLjRjLTkuNyAzLjEtMTkuMSA3LTI4IDExLjdWNTEySDI0My43TDE4MS41IDQwOC4yIDEyNCAzMTIuNHptMzMtNy4yTDIwNC4zIDM4NEgyNzJjNDQuMiAwIDgwIDM1LjggODAgODBjMCAxOC02IDM0LjYtMTYgNDhoODIuM2MxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN0M0NDggMzgzLjggMzY4LjIgMzA0IDI2OS43IDMwNEgxNzguM2MtNy4yIDAtMTQuMyAuNC0yMS4zIDEuM3pNMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDY0VjM0NS40QzI0LjkgMzc4LjEgMCA0MjcuMyAwIDQ4Mi4zek0zMjAgNDY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDIyMy41bDU3LjEgOTUuMkMzMDMgNTA3LjIgMzIwIDQ4Ny42IDMyMCA0NjR6XCJdXG59O1xudmFyIGZhRmFjZVNhZFRlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zYWQtdGVhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgXCJzYWQtdGVhclwiXSwgXCJmNWI0XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnptMjQwIDgwYzAtOC44IDcuMi0xNiAxNi0xNmM0NSAwIDg1LjYgMjAuNSAxMTUuNyA1My4xYzYgNi41IDUuNiAxNi42LS45IDIyLjZzLTE2LjYgNS42LTIyLjYtLjljLTI1LTI3LjEtNTcuNC00Mi45LTkyLjMtNDIuOWMtOC44IDAtMTYtNy4yLTE2LTE2em0tODAgODBjLTI2LjUgMC00OC0yMS00OC00N2MwLTIwIDI4LjYtNjAuNCA0MS42LTc3LjdjMy4yLTQuNCA5LjYtNC40IDEyLjggMEMxNzkuNiAzMDguNiAyMDggMzQ5IDIwOCAzNjljMCAyNi0yMS41IDQ3LTQ4IDQ3ek0zNjcuNiAyMDhhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU2FkVGVhciA9IGZhRmFjZVNhZFRlYXI7XG52YXIgZmFQbGFuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjA3MlwiLCBcIk00ODIuMyAxOTJjMzQuMiAwIDkzLjcgMjkgOTMuNyA2NGMwIDM2LTU5LjUgNjQtOTMuNyA2NGwtMTE2LjYgMEwyNjUuMiA0OTUuOWMtNS43IDEwLTE2LjMgMTYuMS0yNy44IDE2LjFsLTU2LjIgMGMtMTAuNiAwLTE4LjMtMTAuMi0xNS40LTIwLjRsNDktMTcxLjZMMTEyIDMyMCA2OC44IDM3Ny42Yy0zIDQtNy44IDYuNC0xMi44IDYuNGwtNDIgMGMtNy44IDAtMTQtNi4zLTE0LTE0YzAtMS4zIC4yLTIuNiAuNS0zLjlMMzIgMjU2IC41IDE0NS45Yy0uNC0xLjMtLjUtMi42LS41LTMuOWMwLTcuOCA2LjMtMTQgMTQtMTRsNDIgMGM1IDAgOS44IDIuNCAxMi44IDYuNEwxMTIgMTkybDEwMi45IDAtNDktMTcxLjZDMTYyLjkgMTAuMiAxNzAuNiAwIDE4MS4yIDBsNTYuMiAwYzExLjUgMCAyMi4xIDYuMiAyNy44IDE2LjFMMzY1LjcgMTkybDExNi42IDB6XCJdXG59O1xudmFyIGZhVGVudEFycm93c0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudC1hcnJvd3MtZG93bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4MVwiLCBcIk0yMDkuOCAxMTEuOWMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2TDEzNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM4OCAxMC43IDg4IDI0bDAgMTIyLjEtMzkuOS0zNmMtOS45LTguOS0yNS04LjEtMzMuOSAxLjhzLTguMSAyNSAxLjggMzMuOWw4MCA3MmM5LjEgOC4yIDIzIDguMiAzMi4xIDBsODAtNzJjOS45LTguOSAxMC43LTI0IDEuOC0zMy45em0zNTIgMGMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2VjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjE0Ni4xbC0zOS45LTM2Yy05LjktOC45LTI1LTguMS0zMy45IDEuOHMtOC4xIDI1IDEuOCAzMy45bDgwIDcyYzkuMSA4LjIgMjMgOC4yIDMyLjEgMGw4MC03MmM5LjktOC45IDEwLjctMjQgMS44LTMzLjl6TTMwNy40IDE2Ni41Yy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTODYuNyA1MTIgOTYgNTEySDI0MGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzNjEuOWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN0g0NjRoMTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXVxufTtcbnZhciBmYUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0LCA1MTIsIFsxMDA2OSwgMTAwNzEsIDYxNzM4XSwgXCIyMVwiLCBcIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NFYzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY2NHpNMzIgNDgwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpcIl1cbn07XG52YXIgZmFBcnJvd3NTcGluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1zcGluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGJiXCIsIFwiTTI1NiA5NmMzOC40IDAgNzMuNyAxMy41IDEwMS4zIDM2LjFsLTMyLjYgMzIuNmMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45SDQ0OGM4LjggMCAxNi03LjIgMTYtMTZWNjRjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0zNCAzNEMzNjMuNCA1Mi42IDMxMi4xIDMyIDI1NiAzMmMtMTAuOSAwLTIxLjUgLjgtMzIgMi4zVjk5LjJjMTAuMy0yLjEgMjEtMy4yIDMyLTMuMnpNMTMyLjEgMTU0LjdsMzIuNiAzMi42YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOFY2NGMwLTguOC03LjItMTYtMTYtMTZINjRjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGwzNCAzNEM1Mi42IDE0OC42IDMyIDE5OS45IDMyIDI1NmMwIDEwLjkgLjggMjEuNSAyLjMgMzJIOTkuMmMtMi4xLTEwLjMtMy4yLTIxLTMuMi0zMmMwLTM4LjQgMTMuNS03My43IDM2LjEtMTAxLjN6TTQ3Ny43IDIyNEg0MTIuOGMyLjEgMTAuMyAzLjIgMjEgMy4yIDMyYzAgMzguNC0xMy41IDczLjctMzYuMSAxMDEuM2wtMzIuNi0zMi42Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41cy05LjkgOC4zLTkuOSAxNC44VjQ0OGMwIDguOCA3LjIgMTYgMTYgMTZINDQ4YzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0zNC0zNEM0NTkuNCAzNjMuNCA0ODAgMzEyLjEgNDgwIDI1NmMwLTEwLjktLjgtMjEuNS0yLjMtMzJ6TTI1NiA0MTZjLTM4LjQgMC03My43LTEzLjUtMTAxLjMtMzYuMWwzMi42LTMyLjZjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNHMtOC4zLTkuOS0xNC44LTkuOUg2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyYzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDM0LTM0QzE0OC42IDQ1OS40IDE5OS45IDQ4MCAyNTYgNDgwYzEwLjkgMCAyMS41LS44IDMyLTIuM1Y0MTIuOGMtMTAuMyAyLjEtMjEgMy4yLTMyIDMuMnpcIl1cbn07XG52YXIgZmFQcmludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmludCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQyNCwgMTI4NDM4LCA5MTEzXSwgXCJmMDJmXCIsIFwiTTEyOCAwQzkyLjcgMCA2NCAyOC43IDY0IDY0djk2aDY0VjY0SDM1NC43TDM4NCA5My4zVjE2MGg2NFY5My4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQwMCAxOC43QzM4OCA2LjcgMzcxLjcgMCAzNTQuNyAwSDEyOHpNMzg0IDM1MnYzMiA2NEgxMjhWMzg0IDM2OCAzNTJIMzg0em02NCAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODR6TTQzMiAyNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYVR1cmtpc2hMaXJhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJraXNoLWxpcmEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW1widHJ5XCIsIFwidHVya2lzaC1saXJhXCJdLCBcImUyYmJcIiwgXCJNOTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTkuM0wyNDcuMiA2NS4yYzE3LTQuOSAzNC43IDUgMzkuNiAyMnMtNSAzNC43LTIyIDM5LjZMMTI4IDE2NS45djI5LjRsMTE5LjItMzQuMWMxNy00LjkgMzQuNyA1IDM5LjYgMjJzLTUgMzQuNy0yMiAzOS42TDEyOCAyNjEuOVY0MTZoNjMuOGM2OC4yIDAgMTI0LjQtNTMuNSAxMjcuOC0xMjEuNmwuNC04Yy45LTE3LjcgMTUuOS0zMS4yIDMzLjYtMzAuNHMzMS4yIDE1LjkgMzAuNCAzMy42bC0uNCA4QzM3OC41IDM5OS44IDI5NC4xIDQ4MCAxOTEuOCA0ODBIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4MC4xbC0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDIxMy42VjE4NC4xbC0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDExNy42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVRyeSA9IGZhVHVya2lzaExpcmFTaWduO1xudmFyIGZhVHVya2lzaExpcmEgPSBmYVR1cmtpc2hMaXJhU2lnbjtcbnZhciBmYURvbGxhclNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9sbGFyLXNpZ24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjgxNzgsIDYxNzgxLCBcImRvbGxhclwiLCBcInVzZFwiXSwgXCIyNFwiLCBcIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2Ny43YzEuNiAuMiAzLjEgLjQgNC43IC43Yy40IC4xIC43IC4xIDEuMSAuMmw0OCA4LjhjMTcuNCAzLjIgMjguOSAxOS45IDI1LjcgMzcuMnMtMTkuOSAyOC45LTM3LjIgMjUuN2wtNDcuNS04LjdjLTMxLjMtNC42LTU4LjktMS41LTc4LjMgNi4ycy0yNy4yIDE4LjMtMjkgMjguMWMtMiAxMC43LS41IDE2LjcgMS4yIDIwLjRjMS44IDMuOSA1LjUgOC4zIDEyLjggMTMuMmMxNi4zIDEwLjcgNDEuMyAxNy43IDczLjcgMjYuM2wyLjkgLjhjMjguNiA3LjYgNjMuNiAxNi44IDg5LjYgMzMuOGMxNC4yIDkuMyAyNy42IDIxLjkgMzUuOSAzOS41YzguNSAxNy45IDEwLjMgMzcuOSA2LjQgNTkuMmMtNi45IDM4LTMzLjEgNjMuNC02NS42IDc2LjdjLTEzLjcgNS42LTI4LjYgOS4yLTQ0LjQgMTFWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0NS4xYy0uNC0uMS0uOS0uMS0xLjMtLjJsLS4yIDAgMCAwYy0yNC40LTMuOC02NC41LTE0LjMtOTEuNS0yNi4zYy0xNi4xLTcuMi0yMy40LTI2LjEtMTYuMi00Mi4yczI2LjEtMjMuNCA0Mi4yLTE2LjJjMjAuOSA5LjMgNTUuMyAxOC41IDc1LjIgMjEuNmMzMS45IDQuNyA1OC4yIDIgNzYtNS4zYzE2LjktNi45IDI0LjYtMTYuOSAyNi44LTI4LjljMS45LTEwLjYgLjQtMTYuNy0xLjMtMjAuNGMtMS45LTQtNS42LTguNC0xMy0xMy4zYy0xNi40LTEwLjctNDEuNS0xNy43LTc0LTI2LjNsLTIuOC0uNyAwIDBDMTE5LjQgMjc5LjMgODQuNCAyNzAgNTguNCAyNTNjLTE0LjItOS4zLTI3LjUtMjItMzUuOC0zOS42Yy04LjQtMTcuOS0xMC4xLTM3LjktNi4xLTU5LjJDMjMuNyAxMTYgNTIuMyA5MS4yIDg0LjggNzguM2MxMy4zLTUuMyAyNy45LTguOSA0My4yLTExVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYURvbGxhciA9IGZhRG9sbGFyU2lnbjtcbnZhciBmYVVzZCA9IGZhRG9sbGFyU2lnbjtcbnZhciBmYVggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneCcsXG4gIGljb246IFszODQsIDUxMiwgWzEyMF0sIFwiNThcIiwgXCJNMzc2LjYgODQuNWMxMS4zLTEzLjYgOS41LTMzLjgtNC4xLTQ1LjFzLTMzLjgtOS41LTQ1LjEgNC4xTDE5MiAyMDYgNTYuNiA0My41QzQ1LjMgMjkuOSAyNS4xIDI4LjEgMTEuNSAzOS40Uy0zLjkgNzAuOSA3LjQgODQuNUwxNTAuMyAyNTYgNy40IDQyNy41Yy0xMS4zIDEzLjYtOS41IDMzLjggNC4xIDQ1LjFzMzMuOCA5LjUgNDUuMS00LjFMMTkyIDMwNiAzMjcuNCA0NjguNWMxMS4zIDEzLjYgMzEuNSAxNS40IDQ1LjEgNC4xczE1LjQtMzEuNSA0LjEtNDUuMUwyMzMuNyAyNTYgMzc2LjYgODQuNXpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmlmeWluZy1nbGFzcy1kb2xsYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNlYXJjaC1kb2xsYXJcIl0sIFwiZjY4OFwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0yMjggMTA0YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjMxMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyOTguMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjEwNHpcIl1cbn07XG52YXIgZmFTZWFyY2hEb2xsYXIgPSBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcjtcbnZhciBmYVVzZXJzR2VhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1nZWFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2Vycy1jb2dcIl0sIFwiZjUwOVwiLCBcIk0xNDQgMTYwQTgwIDgwIDAgMSAwIDE0NCAwYTgwIDgwIDAgMSAwIDAgMTYwem0zNjggMEE4MCA4MCAwIDEgMCA1MTIgMGE4MCA4MCAwIDEgMCAwIDE2MHpNMCAyOTguN0MwIDMxMC40IDkuNiAzMjAgMjEuMyAzMjBIMjM0LjdjLjIgMCAuNCAwIC43IDBjLTI2LjYtMjMuNS00My4zLTU3LjgtNDMuMy05NmMwLTcuNiAuNy0xNSAxLjktMjIuM2MtMTMuNi02LjMtMjguNy05LjctNDQuNi05LjdIMTA2LjdDNDcuOCAxOTIgMCAyMzkuOCAwIDI5OC43ek0zMjAgMzIwYzI0IDAgNDUuOS04LjggNjIuNy0yMy4zYzIuNS0zLjcgNS4yLTcuMyA4LTEwLjdjMi43LTMuMyA1LjctNi4xIDktOC4zQzQxMCAyNjIuMyA0MTYgMjQzLjkgNDE2IDIyNGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnptNjUuNCA2MC4yYy0xMC4zLTUuOS0xOC4xLTE2LjItMjAuOC0yOC4ySDI2MS4zQzE4Ny43IDM1MiAxMjggNDExLjcgMTI4IDQ4NS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43SDQ1NS4yYy0yLjEtNS4yLTMuMi0xMC45LTMuMi0xNi40di0zYy0xLjMtLjctMi43LTEuNS00LTIuM2wtMi42IDEuNWMtMTYuOCA5LjctNDAuNSA4LTU0LjctOS43Yy00LjUtNS42LTguNi0xMS41LTEyLjQtMTcuNmwtLjEtLjItLjEtLjItMi40LTQuMS0uMS0uMi0uMS0uMmMtMy40LTYuMi02LjQtMTIuNi05LTE5LjNjLTguMi0yMS4yIDIuMi00Mi42IDE5LTUyLjNsMi43LTEuNWMwLS44IDAtMS41IDAtMi4zczAtMS41IDAtMi4zbC0yLjctMS41ek01MzMuMyAxOTJINDkwLjdjLTE1LjkgMC0zMSAzLjUtNDQuNiA5LjdjMS4zIDcuMiAxLjkgMTQuNyAxLjkgMjIuM2MwIDE3LjQtMy41IDMzLjktOS43IDQ5YzIuNSAuOSA0LjkgMiA3LjEgMy4zbDIuNiAxLjVjMS4zLS44IDIuNi0xLjYgNC0yLjN2LTNjMC0xOS40IDEzLjMtMzkuMSAzNS44LTQyLjZjNy45LTEuMiAxNi0xLjkgMjQuMi0xLjlzMTYuMyAuNiAyNC4yIDEuOWMyMi41IDMuNSAzNS44IDIzLjIgMzUuOCA0Mi42djNjMS4zIC43IDIuNyAxLjUgNCAyLjNsMi42LTEuNWMxNi44LTkuNyA0MC41LTggNTQuNyA5LjdjMi4zIDIuOCA0LjUgNS44IDYuNiA4LjdjLTIuMS01Ny4xLTQ5LTEwMi43LTEwNi42LTEwMi43em05MS4zIDE2My45YzYuMy0zLjYgOS41LTExLjEgNi44LTE4Yy0yLjEtNS41LTQuNi0xMC44LTcuNC0xNS45bC0yLjMtNGMtMy4xLTUuMS02LjUtOS45LTEwLjItMTQuNWMtNC42LTUuNy0xMi43LTYuNy0xOS0zbC0yLjkgMS43Yy05LjIgNS4zLTIwLjQgNC0yOS42LTEuM3MtMTYuMS0xNC41LTE2LjEtMjUuMXYtMy40YzAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOWMtNi41LTEtMTMuMS0xLjUtMTkuOS0xLjVzLTEzLjQgLjUtMTkuOSAxLjVjLTcuMiAxLjEtMTIuMSA3LjYtMTIuMSAxNC45djMuNGMwIDEwLjYtNi45IDE5LjgtMTYuMSAyNS4xcy0yMC40IDYuNi0yOS42IDEuM2wtMi45LTEuN2MtNi4zLTMuNi0xNC40LTIuNi0xOSAzYy0zLjcgNC42LTcuMSA5LjUtMTAuMiAxNC42bC0yLjMgMy45Yy0yLjggNS4xLTUuMyAxMC40LTcuNCAxNS45Yy0yLjYgNi44IC41IDE0LjMgNi44IDE3LjlsMi45IDEuN2M5LjIgNS4zIDEzLjcgMTUuOCAxMy43IDI2LjRzLTQuNSAyMS4xLTEzLjcgMjYuNGwtMyAxLjdjLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjljMi4xIDUuNSA0LjYgMTAuNyA3LjQgMTUuOGwyLjQgNC4xYzMgNS4xIDYuNCA5LjkgMTAuMSAxNC41YzQuNiA1LjcgMTIuNyA2LjcgMTkgM2wyLjktMS43YzkuMi01LjMgMjAuNC00IDI5LjYgMS4zczE2LjEgMTQuNSAxNi4xIDI1LjF2My40YzAgNy4zIDQuOSAxMy44IDEyLjEgMTQuOWM2LjUgMSAxMy4xIDEuNSAxOS45IDEuNXMxMy40LS41IDE5LjktMS41YzcuMi0xLjEgMTIuMS03LjYgMTIuMS0xNC45di0zLjRjMC0xMC42IDYuOS0xOS44IDE2LjEtMjUuMXMyMC40LTYuNiAyOS42LTEuM2wyLjkgMS43YzYuMyAzLjYgMTQuNCAyLjYgMTktM2MzLjctNC42IDcuMS05LjQgMTAuMS0xNC41bDIuNC00LjJjMi44LTUuMSA1LjMtMTAuMyA3LjQtMTUuOGMyLjYtNi44LS41LTE0LjMtNi44LTE3LjlsLTMtMS43Yy05LjItNS4zLTEzLjctMTUuOC0xMy43LTI2LjRzNC41LTIxLjEgMTMuNy0yNi40bDMtMS43ek00NzIgMzg0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6XCJdXG59O1xudmFyIGZhVXNlcnNDb2cgPSBmYVVzZXJzR2VhcjtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXBvaW50aW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTRhXCIsIFwiTTI0Ni45IDE0LjFDMjM0IDE1LjIgMjI0IDI2IDIyNCAzOWMwIDEzLjggMTEuMiAyNSAyNSAyNUg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjE3LjRDNDE2IDggNDA4IC43IDM5OC43IDEuNEwyNDYuOSAxNC4xek0yNDAgMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZIMjQxLjZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNzIgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwSDIyNHY4OS40TDM4Ni44IDIzMC41Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUgyNDAgNzJ6bTM0NS43IDIwLjlMMjQ2LjYgNDE2SDQxNlYzNjkuN2w1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDYyLjMgMjkwLjhjLTExLjItMTguOS0yNi42LTM0LjUtNDQuNi00NS45ek0yMjQgNDQ4djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDhIMjI0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ29sdW1ucyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jb2x1bW5zJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiYW5rXCIsIFwiaW5zdGl0dXRpb25cIiwgXCJtdXNldW1cIiwgXCJ1bml2ZXJzaXR5XCJdLCBcImYxOWNcIiwgXCJNMjQzLjQgMi42bC0yMjQgOTZjLTE0IDYtMjEuOCAyMS0xOC43IDM1LjhTMTYuOCAxNjAgMzIgMTYwdjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0di04YzE1LjIgMCAyOC4zLTEwLjcgMzEuMy0yNS42cy00LjgtMjkuOS0xOC43LTM1LjhsLTIyNC05NmMtOC0zLjQtMTcuMi0zLjQtMjUuMiAwek0xMjggMjI0SDY0VjQyMC4zYy0uNiAuMy0xLjIgLjctMS44IDEuMWwtNDggMzJjLTExLjcgNy44LTE3IDIyLjQtMTIuOSAzNS45UzE3LjkgNTEyIDMyIDUxMkg0ODBjMTQuMSAwIDI2LjUtOS4yIDMwLjYtMjIuN3MtMS4xLTI4LjEtMTIuOS0zNS45bC00OC0zMmMtLjYtLjQtMS4yLS43LTEuOC0xLjFWMjI0SDM4NFY0MTZIMzQ0VjIyNEgyODBWNDE2SDIzMlYyMjRIMTY4VjQxNkgxMjhWMjI0ek0yNTYgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJhbmsgPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYUluc3RpdHV0aW9uID0gZmFCdWlsZGluZ0NvbHVtbnM7XG52YXIgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYVVuaXZlcnNpdHkgPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYVVtYnJlbGxhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VtYnJlbGxhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGU5XCIsIFwiTTI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ5LjdDNDUxLjggNjMuNCA1NTcuNyAxNjEgNTczLjkgMjg1LjljMiAxNS42LTE3LjMgMjQuNC0yNy44IDEyLjdDNTMyLjEgMjgzIDUwNC44IDI3MiA0ODAgMjcyYy0zOC43IDAtNzEgMjcuNS03OC40IDY0LjFjLTEuNyA4LjctOC43IDE1LjktMTcuNiAxNS45cy0xNS44LTcuMi0xNy42LTE1LjlDMzU5IDI5OS41IDMyNi43IDI3MiAyODggMjcycy03MSAyNy41LTc4LjQgNjQuMWMtMS43IDguNy04LjcgMTUuOS0xNy42IDE1LjlzLTE1LjgtNy4yLTE3LjYtMTUuOUMxNjcgMjk5LjUgMTM0LjcgMjcyIDk2IDI3MmMtMjQuOCAwLTUyLjEgMTEtNjYuMSAyNi43QzE5LjQgMzEwLjQgLjEgMzAxLjUgMi4xIDI4NS45QzE4LjMgMTYxIDEyNC4yIDYzLjQgMjU2IDQ5LjdWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMzA0YzEyLjMgMCAyMy41IDQuNiAzMiAxMi4yVjQzMC42YzAgNDUtMzYuNSA4MS40LTgxLjQgODEuNGMtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjZjOS42IDAgMTcuNC03LjggMTcuNC0xNy40VjMxNi4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjJ6XCJdXG59O1xudmFyIGZhVHJvd2VsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Ryb3dlbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU4OVwiLCBcIk0zNDMuOSAyMTMuNEwyNDUuMyAzMTJsNjUuNCA2NS40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlTLTIuMSA0ODEuOCAxLjUgNDcwLjVsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjAwIDI2Ni43bDk4LjYtOTguNmMtMTQuMy0xNC42LTE0LjItMzggLjMtNTIuNWw5NS40LTk1LjRjMjYuOS0yNi45IDcwLjUtMjYuOSA5Ny41IDBzMjYuOSA3MC41IDAgOTcuNWwtOTUuNCA5NS40Yy0xNC41IDE0LjUtMzcuOSAxNC42LTUyLjUgLjN6XCJdXG59O1xudmFyIGZhRCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTAwXSwgXCI0NFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyaDk2YzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRzLTEwMC4zIDIyNC0yMjQgMjI0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnptMTYwIDBINjRWNDE2aDk2Yzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwcy03MS42LTE2MC0xNjAtMTYwelwiXVxufTtcbnZhciBmYVN0YXBsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhcGxlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTVhZlwiLCBcIk02NDAgMjk5LjNWMzA0IDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1MTIgNDQ4IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ0OFYzNjhIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIxOS40TDMzLjggMjE0QzE0LjIgMjEwLjUgMCAxOTMuNSAwIDE3My43YzAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNUM3Ni43IDU3LjggMTI4LjIgMzIgMTgyLjkgMzJjMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRWMjg4TDEyOCAyMzAuOVYzMDRINDQ4elwiXVxufTtcbnZhciBmYU1hc2tzVGhlYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrcy10aGVhdGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTE3LCBcInRoZWF0ZXItbWFza3NcIl0sIFwiZjYzMFwiLCBcIk03NC42IDM3My4yYzQxLjcgMzYuMSAxMDggODIuNSAxNjYuMSA3My43YzYuMS0uOSAxMi4xLTIuNSAxOC00LjVjLTkuMi0xMi4zLTE3LjMtMjQuNC0yNC4yLTM1LjRjLTIxLjktMzUtMjguOC03NS4yLTI1LjktMTEzLjZjLTIwLjYgNC4xLTM5LjIgMTMtNTQuNyAyNS40Yy02LjUgNS4yLTE2LjMgMS4zLTE0LjgtN2M2LjQtMzMuNSAzMy02MC45IDY4LjItNjYuM2MyLjYtLjQgNS4zLS43IDcuOS0uOGwxOS40LTEzMS4zYzItMTMuOCA4LTMyLjcgMjUtNDUuOUMyNzguMiA1My4yIDMxMC41IDM3IDM2My4yIDMyLjJjLS44LS43LTEuNi0xLjQtMi40LTIuMUMzNDAuNiAxNC41IDI4OC40LTExLjUgMTc1LjcgNS42UzIwLjUgNjMgNS43IDgzLjlDMCA5MS45LS44IDEwMiAuNiAxMTEuOEwyNC44IDI3Ni4xYzUuNSAzNy4zIDIxLjUgNzIuNiA0OS44IDk3LjJ6bTg3LjctMjE5LjZjNC40LTMuMSAxMC44LTIgMTEuOCAzLjNjLjEgLjUgLjIgMS4xIC4zIDEuNmMzLjIgMjEuOC0xMS42IDQyLTMzLjEgNDUuM3MtNDEuNS0xMS44LTQ0LjctMzMuNWMtLjEtLjUtLjEtMS4xLS4yLTEuNmMtLjYtNS40IDUuMi04LjQgMTAuMy02LjdjOSAzIDE4LjggMy45IDI4LjcgMi40czE5LjEtNS4zIDI2LjgtMTAuOHpNMjYxLjYgMzkwYzI5LjQgNDYuOSA3OS41IDExMC45IDEzNy42IDExOS43czEyNC41LTM3LjUgMTY2LjEtNzMuN2MyOC4zLTI0LjUgNDQuMy01OS44IDQ5LjgtOTcuMmwyNC4yLTE2NC4zYzEuNC05LjggLjYtMTkuOS01LjEtMjcuOWMtMTQuOC0yMC45LTU3LjMtNjEuMi0xNzAtNzguM1MyOTkuNCA3Ny4yIDI3OS4yIDkyLjhjLTcuOCA2LTExLjUgMTUuNC0xMi45IDI1LjJMMjQyLjEgMjgyLjNjLTUuNSAzNy4zLS40IDc1LjggMTkuNiAxMDcuN3pNNDA0LjUgMjM1LjNjLTcuNy01LjUtMTYuOC05LjMtMjYuOC0xMC44cy0xOS44LS42LTI4LjcgMi40Yy01LjEgMS43LTEwLjktMS4zLTEwLjMtNi43Yy4xLS41IC4xLTEuMSAuMi0xLjZjMy4yLTIxLjggMjMuMi0zNi44IDQ0LjctMzMuNXMzNi4zIDIzLjUgMzMuMSA0NS4zYy0uMSAuNS0uMiAxLjEtLjMgMS42Yy0xIDUuMy03LjQgNi40LTExLjggMy4zem0xMzYuMiAxNS41Yy0xIDUuMy03LjQgNi40LTExLjggMy4zYy03LjctNS41LTE2LjgtOS4zLTI2LjgtMTAuOHMtMTkuOC0uNi0yOC43IDIuNGMtNS4xIDEuNy0xMC45LTEuMy0xMC4zLTYuN2MuMS0uNSAuMS0xLjEgLjItMS42YzMuMi0yMS44IDIzLjItMzYuOCA0NC43LTMzLjVzMzYuMyAyMy41IDMzLjEgNDUuM2MtLjEgLjUtLjIgMS4xLS4zIDEuNnpNNTMwIDM1MC4yYy0xOS42IDQ0LjctNjYuOCA3Mi41LTExNi44IDY0LjlzLTg3LjEtNDguMi05My05Ni43Yy0xLTguMyA4LjktMTIuMSAxNS4yLTYuN2MyMy45IDIwLjggNTMuNiAzNS4zIDg3IDQwLjNzNjYuMSAuMSA5NC45LTEyLjhjNy42LTMuNCAxNiAzLjIgMTIuNiAxMC45elwiXVxufTtcbnZhciBmYVRoZWF0ZXJNYXNrcyA9IGZhTWFza3NUaGVhdGVyO1xudmFyIGZhS2lwU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraXAtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFjNFwiLCBcIk0zNDAuOCA4OC4zYzEzLjQtMTEuNSAxNS0zMS43IDMuNS00NS4xcy0zMS43LTE1LTQ1LjEtMy41TDEyOCAxODYuNFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0VjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjUuNkwyOTkuMiA0NzIuM2MxMy40IDExLjUgMzMuNiA5LjkgNDUuMS0zLjVzOS45LTMzLjYtMy41LTQ1LjFMMTgyLjUgMjg4SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxODIuNUwzNDAuOCA4OC4zelwiXVxufTtcbnZhciBmYUhhbmRQb2ludExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1wb2ludC1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGE1XCIsIFwiTTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDIwOCAwIDAtNjRMMzIgOTZ6TTE5MiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHptLTY0LTY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHptODgtOTZsLS42IDBjNS40IDkuNCA4LjYgMjAuMyA4LjYgMzJjMCAxMy4yLTQgMjUuNC0xMC44IDM1LjZjMjQuOSA4LjcgNDIuOCAzMi41IDQyLjggNjAuNGMwIDExLjctMy4xIDIyLjYtOC42IDMybDguNiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwbDAtNjEuN2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTExLjYtMTEuNkM0MjkuNSA3Ny41IDM5Ni45IDY0IDM2MyA2NGwtMjcgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4OGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtNTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDU2YzAgMzkuOC0zMi4yIDcyLTcyIDcyelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kc2hha2Utc2ltcGxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzA5LCBcImhhbmRzaGFrZS1hbHRcIl0sIFwiZjRjNlwiLCBcIk0zMjMuNCA4NS4ybC05Ni44IDc4LjRjLTE2LjEgMTMtMTkuMiAzNi40LTcgNTMuMWMxMi45IDE3LjggMzggMjEuMyA1NS4zIDcuOGw5OS4zLTc3LjJjNy01LjQgMTctNC4yIDIyLjUgMi44czQuMiAxNy0yLjggMjIuNWwtMjAuOSAxNi4yTDU1MC4yIDM1Mkg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUxNmgtNC0uN2wtMy45LTIuNUw0MzQuOCA3OWMtMTUuMy05LjgtMzMuMi0xNS01MS40LTE1Yy0yMS44IDAtNDMgNy41LTYwIDIxLjJ6bTIyLjggMTI0LjRsLTUxLjcgNDAuMkMyNjMgMjc0LjQgMjE3LjMgMjY4IDE5My43IDIzNS42Yy0yMi4yLTMwLjUtMTYuNi03My4xIDEyLjctOTYuOGw4My4yLTY3LjNjLTExLjYtNC45LTI0LjEtNy40LTM2LjgtNy40QzIzNCA2NCAyMTUuNyA2OS42IDIwMCA4MGwtNzIgNDhINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgxNTYuMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljNC41LTQuOSA3LjgtMTAuNiA5LjktMTYuNWMxOS40IDEzIDQ1LjggMTAuMyA2Mi4xLTcuNWMxNy45LTE5LjUgMTYuNi00OS45LTIuOS02Ny44bC0xMzQuMi0xMjN6XCJdXG59O1xudmFyIGZhSGFuZHNoYWtlQWx0ID0gZmFIYW5kc2hha2VTaW1wbGU7XG52YXIgZmFKZXRGaWdodGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2pldC1maWdodGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJmaWdodGVyLWpldFwiXSwgXCJmMGZiXCIsIFwiTTE2MCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNEgyOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwTDM4NCAxOTJINTAwLjRjNy43IDAgMTUuMyAxLjQgMjIuNSA0LjFMNjI1IDIzNC40YzkgMy40IDE1IDEyIDE1IDIxLjZzLTYgMTguMi0xNSAyMS42TDUyMi45IDMxNS45Yy03LjIgMi43LTE0LjggNC4xLTIyLjUgNC4xSDM4NEwyODAgNDY0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjMyMEgxNjBsLTU0LjYgNTQuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDgyLjdjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRMMTYwIDE5MmgzMlY0OGgtOGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTgwIDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg4MHpcIl1cbn07XG52YXIgZmFGaWdodGVySmV0ID0gZmFKZXRGaWdodGVyO1xudmFyIGZhU3F1YXJlU2hhcmVOb2RlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtc2hhcmUtbm9kZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNoYXJlLWFsdC1zcXVhcmVcIl0sIFwiZjFlMVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTM4NCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTE1LjQgMC0yOS41LTUuNC00MC42LTE0LjVMMTk0LjEgMjU2bDg1LjMgNDYuNWMxMS05LjEgMjUuMi0xNC41IDQwLjYtMTQuNWMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTIuNSAuMS00LjkgLjQtNy4zTDE3NC41IDMwMGMtMTEuNyAxMi4zLTI4LjIgMjAtNDYuNSAyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6XCJdXG59O1xudmFyIGZhU2hhcmVBbHRTcXVhcmUgPSBmYVNxdWFyZVNoYXJlTm9kZXM7XG52YXIgZmFCYXJjb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhcmNvZGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwMmFcIiwgXCJNMjQgMzJDMTAuNyAzMiAwIDQyLjcgMCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNlY0NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZ6bTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgxODR6bTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyODB6TTQ0OCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRINDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptLTY0LThWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUGx1c01pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdXMtbWludXMnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImU0M2NcIiwgXCJNMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjE0NEg0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgxNjBWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjA4SDMzNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMjRWMzJ6TTAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhVmlkZW8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlkZW8nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInZpZGVvLWNhbWVyYVwiXSwgXCJmMDNkXCIsIFwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NFYzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpNNTU5LjEgOTkuOGMxMC40IDUuNiAxNi45IDE2LjQgMTYuOSAyOC4yVjM4NGMwIDExLjgtNi41IDIyLjYtMTYuOSAyOC4ycy0yMyA1LTMyLjktMS42bC05Ni02NEw0MTYgMzM3LjFWMzIwIDE5MiAxNzQuOWwxNC4yLTkuNSA5Ni02NGM5LjgtNi41IDIyLjQtNy4yIDMyLjktMS42elwiXVxufTtcbnZhciBmYVZpZGVvQ2FtZXJhID0gZmFWaWRlbztcbnZhciBmYUdyYWR1YXRpb25DYXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ3JhZHVhdGlvbi1jYXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc4OTEsIFwibW9ydGFyLWJvYXJkXCJdLCBcImYxOWRcIiwgXCJNMzIwIDMyYy04LjEgMC0xNi4xIDEuNC0yMy43IDQuMUwxNS44IDEzNy40QzYuMyAxNDAuOSAwIDE0OS45IDAgMTYwczYuMyAxOS4xIDE1LjggMjIuNmw1Ny45IDIwLjlDNTcuMyAyMjkuMyA0OCAyNTkuOCA0OCAyOTEuOXYyOC4xYzAgMjguNC0xMC44IDU3LjctMjIuMyA4MC44Yy02LjUgMTMtMTMuOSAyNS44LTIyLjUgMzcuNkMwIDQ0Mi43LS45IDQ0OC4zIC45IDQ1My40czYgOC45IDExLjIgMTAuMmw2NCAxNmM0LjIgMS4xIDguNyAuMyAxMi40LTJzNi4zLTYuMSA3LjEtMTAuNGM4LjYtNDIuOCA0LjMtODEuMi0yLjEtMTA4LjdDOTAuMyAzNDQuMyA4NiAzMjkuOCA4MCAzMTYuNVYyOTEuOWMwLTMwLjIgMTAuMi01OC43IDI3LjktODEuNWMxMi45LTE1LjUgMjkuNi0yOCA0OS4yLTM1LjdsMTU3LTYxLjdjOC4yLTMuMiAxNy41IC44IDIwLjcgOXMtLjggMTcuNS05IDIwLjdsLTE1NyA2MS43Yy0xMi40IDQuOS0yMy4zIDEyLjQtMzIuMiAyMS42bDE1OS42IDU3LjZjNy42IDIuNyAxNS42IDQuMSAyMy43IDQuMXMxNi4xLTEuNCAyMy43LTQuMUw2MjQuMiAxODIuNmM5LjUtMy40IDE1LjgtMTIuNSAxNS44LTIyLjZzLTYuMy0xOS4xLTE1LjgtMjIuNkwzNDMuNyAzNi4xQzMzNi4xIDMzLjQgMzI4LjEgMzIgMzIwIDMyek0xMjggNDA4YzAgMzUuMyA4NiA3MiAxOTIgNzJzMTkyLTM2LjcgMTkyLTcyTDQ5Ni43IDI2Mi42IDM1NC41IDMxNGMtMTEuMSA0LTIyLjggNi0zNC41IDZzLTIzLjUtMi0zNC41LTZMMTQzLjMgMjYyLjYgMTI4IDQwOHpcIl1cbn07XG52YXIgZmFNb3J0YXJCb2FyZCA9IGZhR3JhZHVhdGlvbkNhcDtcbnZhciBmYUhhbmRIb2xkaW5nTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctbWVkaWNhbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTA1Y1wiLCBcIk0yMjQgMjRWODBIMTY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg1NnY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNzZoNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDMyMFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek01NTkuNyAzOTIuMmMxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODggMjcyIDE5My43Yy0yOS4xIDAtNTcuMyA5LjktODAgMjhMNjguOCAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MiAzNTIuNWMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY3LTguMmwuOSAwIDAgMGMtLjMgMC0uNiAwLS45IDB6XCJdXG59O1xudmFyIGZhUGVyc29uQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUzZVwiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnptMTM2IDE2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIxMS4zLTQzLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDQxNiAzODUuNGwtMjguNy0yOC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDcyLTcyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYVR1cm5VcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJuLXVwJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDgsIFwibGV2ZWwtdXAtYWx0XCJdLCBcImYzYmZcIiwgXCJNMzUwIDE3Ny41YzMuOC04LjggMi0xOS00LjYtMjZsLTEzNi0xNDRDMjA0LjkgMi43IDE5OC42IDAgMTkyIDBzLTEyLjkgMi43LTE3LjQgNy41bC0xMzYgMTQ0Yy02LjYgNy04LjQgMTcuMi00LjYgMjZzMTIuNSAxNC41IDIyIDE0LjVoODhsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDgwIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xOTJoODhjOS42IDAgMTguMi01LjcgMjItMTQuNXpcIl1cbn07XG52YXIgZmFMZXZlbFVwQWx0ID0gZmFUdXJuVXA7XG52YXIgaWNvbnMgPSB7XG4gIGZhMDogZmEwLFxuICBmYTE6IGZhMSxcbiAgZmEyOiBmYTIsXG4gIGZhMzogZmEzLFxuICBmYTQ6IGZhNCxcbiAgZmE1OiBmYTUsXG4gIGZhNjogZmE2LFxuICBmYTc6IGZhNyxcbiAgZmE4OiBmYTgsXG4gIGZhOTogZmE5LFxuICBmYUZpbGxEcmlwOiBmYUZpbGxEcmlwLFxuICBmYUFycm93c1RvQ2lyY2xlOiBmYUFycm93c1RvQ2lyY2xlLFxuICBmYUNpcmNsZUNoZXZyb25SaWdodDogZmFDaXJjbGVDaGV2cm9uUmlnaHQsXG4gIGZhQ2hldnJvbkNpcmNsZVJpZ2h0OiBmYUNoZXZyb25DaXJjbGVSaWdodCxcbiAgZmFBdDogZmFBdCxcbiAgZmFUcmFzaENhbjogZmFUcmFzaENhbixcbiAgZmFUcmFzaEFsdDogZmFUcmFzaEFsdCxcbiAgZmFUZXh0SGVpZ2h0OiBmYVRleHRIZWlnaHQsXG4gIGZhVXNlclhtYXJrOiBmYVVzZXJYbWFyayxcbiAgZmFVc2VyVGltZXM6IGZhVXNlclRpbWVzLFxuICBmYVN0ZXRob3Njb3BlOiBmYVN0ZXRob3Njb3BlLFxuICBmYU1lc3NhZ2U6IGZhTWVzc2FnZSxcbiAgZmFDb21tZW50QWx0OiBmYUNvbW1lbnRBbHQsXG4gIGZhSW5mbzogZmFJbmZvLFxuICBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyOiBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLFxuICBmYUNvbXByZXNzQWx0OiBmYUNvbXByZXNzQWx0LFxuICBmYUV4cGxvc2lvbjogZmFFeHBsb3Npb24sXG4gIGZhRmlsZUxpbmVzOiBmYUZpbGVMaW5lcyxcbiAgZmFGaWxlQWx0OiBmYUZpbGVBbHQsXG4gIGZhRmlsZVRleHQ6IGZhRmlsZVRleHQsXG4gIGZhV2F2ZVNxdWFyZTogZmFXYXZlU3F1YXJlLFxuICBmYVJpbmc6IGZhUmluZyxcbiAgZmFCdWlsZGluZ1VuOiBmYUJ1aWxkaW5nVW4sXG4gIGZhRGljZVRocmVlOiBmYURpY2VUaHJlZSxcbiAgZmFDYWxlbmRhckRheXM6IGZhQ2FsZW5kYXJEYXlzLFxuICBmYUNhbGVuZGFyQWx0OiBmYUNhbGVuZGFyQWx0LFxuICBmYUFuY2hvckNpcmNsZUNoZWNrOiBmYUFuY2hvckNpcmNsZUNoZWNrLFxuICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodDogZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsXG4gIGZhVm9sbGV5YmFsbDogZmFWb2xsZXliYWxsLFxuICBmYVZvbGxleWJhbGxCYWxsOiBmYVZvbGxleWJhbGxCYWxsLFxuICBmYUFycm93c1VwVG9MaW5lOiBmYUFycm93c1VwVG9MaW5lLFxuICBmYVNvcnREb3duOiBmYVNvcnREb3duLFxuICBmYVNvcnREZXNjOiBmYVNvcnREZXNjLFxuICBmYUNpcmNsZU1pbnVzOiBmYUNpcmNsZU1pbnVzLFxuICBmYU1pbnVzQ2lyY2xlOiBmYU1pbnVzQ2lyY2xlLFxuICBmYURvb3JPcGVuOiBmYURvb3JPcGVuLFxuICBmYVJpZ2h0RnJvbUJyYWNrZXQ6IGZhUmlnaHRGcm9tQnJhY2tldCxcbiAgZmFTaWduT3V0QWx0OiBmYVNpZ25PdXRBbHQsXG4gIGZhQXRvbTogZmFBdG9tLFxuICBmYVNvYXA6IGZhU29hcCxcbiAgZmFJY29uczogZmFJY29ucyxcbiAgZmFIZWFydE11c2ljQ2FtZXJhQm9sdDogZmFIZWFydE11c2ljQ2FtZXJhQm9sdCxcbiAgZmFNaWNyb3Bob25lTGluZXNTbGFzaDogZmFNaWNyb3Bob25lTGluZXNTbGFzaCxcbiAgZmFNaWNyb3Bob25lQWx0U2xhc2g6IGZhTWljcm9waG9uZUFsdFNsYXNoLFxuICBmYUJyaWRnZUNpcmNsZUNoZWNrOiBmYUJyaWRnZUNpcmNsZUNoZWNrLFxuICBmYVB1bXBNZWRpY2FsOiBmYVB1bXBNZWRpY2FsLFxuICBmYUZpbmdlcnByaW50OiBmYUZpbmdlcnByaW50LFxuICBmYUhhbmRQb2ludFJpZ2h0OiBmYUhhbmRQb2ludFJpZ2h0LFxuICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uOiBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uLFxuICBmYVNlYXJjaExvY2F0aW9uOiBmYVNlYXJjaExvY2F0aW9uLFxuICBmYUZvcndhcmRTdGVwOiBmYUZvcndhcmRTdGVwLFxuICBmYVN0ZXBGb3J3YXJkOiBmYVN0ZXBGb3J3YXJkLFxuICBmYUZhY2VTbWlsZUJlYW06IGZhRmFjZVNtaWxlQmVhbSxcbiAgZmFTbWlsZUJlYW06IGZhU21pbGVCZWFtLFxuICBmYUZsYWdDaGVja2VyZWQ6IGZhRmxhZ0NoZWNrZXJlZCxcbiAgZmFGb290YmFsbDogZmFGb290YmFsbCxcbiAgZmFGb290YmFsbEJhbGw6IGZhRm9vdGJhbGxCYWxsLFxuICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uOiBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYUNyb3A6IGZhQ3JvcCxcbiAgZmFBbmdsZXNEb3duOiBmYUFuZ2xlc0Rvd24sXG4gIGZhQW5nbGVEb3VibGVEb3duOiBmYUFuZ2xlRG91YmxlRG93bixcbiAgZmFVc2Vyc1JlY3RhbmdsZTogZmFVc2Vyc1JlY3RhbmdsZSxcbiAgZmFQZW9wbGVSb29mOiBmYVBlb3BsZVJvb2YsXG4gIGZhUGVvcGxlTGluZTogZmFQZW9wbGVMaW5lLFxuICBmYUJlZXJNdWdFbXB0eTogZmFCZWVyTXVnRW1wdHksXG4gIGZhQmVlcjogZmFCZWVyLFxuICBmYURpYWdyYW1QcmVkZWNlc3NvcjogZmFEaWFncmFtUHJlZGVjZXNzb3IsXG4gIGZhQXJyb3dVcExvbmc6IGZhQXJyb3dVcExvbmcsXG4gIGZhTG9uZ0Fycm93VXA6IGZhTG9uZ0Fycm93VXAsXG4gIGZhRmlyZUZsYW1lU2ltcGxlOiBmYUZpcmVGbGFtZVNpbXBsZSxcbiAgZmFCdXJuOiBmYUJ1cm4sXG4gIGZhUGVyc29uOiBmYVBlcnNvbixcbiAgZmFNYWxlOiBmYU1hbGUsXG4gIGZhTGFwdG9wOiBmYUxhcHRvcCxcbiAgZmFGaWxlQ3N2OiBmYUZpbGVDc3YsXG4gIGZhTWVub3JhaDogZmFNZW5vcmFoLFxuICBmYVRydWNrUGxhbmU6IGZhVHJ1Y2tQbGFuZSxcbiAgZmFSZWNvcmRWaW55bDogZmFSZWNvcmRWaW55bCxcbiAgZmFGYWNlR3JpblN0YXJzOiBmYUZhY2VHcmluU3RhcnMsXG4gIGZhR3JpblN0YXJzOiBmYUdyaW5TdGFycyxcbiAgZmFCb25nOiBmYUJvbmcsXG4gIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzogZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLFxuICBmYVBhc3RhZmFyaWFuaXNtOiBmYVBhc3RhZmFyaWFuaXNtLFxuICBmYUFycm93RG93blVwQWNyb3NzTGluZTogZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsXG4gIGZhU3Bvb246IGZhU3Bvb24sXG4gIGZhVXRlbnNpbFNwb29uOiBmYVV0ZW5zaWxTcG9vbixcbiAgZmFKYXJXaGVhdDogZmFKYXJXaGVhdCxcbiAgZmFFbnZlbG9wZXNCdWxrOiBmYUVudmVsb3Blc0J1bGssXG4gIGZhTWFpbEJ1bGs6IGZhTWFpbEJ1bGssXG4gIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uOiBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDaXJjbGVIOiBmYUNpcmNsZUgsXG4gIGZhSG9zcGl0YWxTeW1ib2w6IGZhSG9zcGl0YWxTeW1ib2wsXG4gIGZhUGFnZXI6IGZhUGFnZXIsXG4gIGZhQWRkcmVzc0Jvb2s6IGZhQWRkcmVzc0Jvb2ssXG4gIGZhQ29udGFjdEJvb2s6IGZhQ29udGFjdEJvb2ssXG4gIGZhU3RyaWtldGhyb3VnaDogZmFTdHJpa2V0aHJvdWdoLFxuICBmYUs6IGZhSyxcbiAgZmFMYW5kbWFya0ZsYWc6IGZhTGFuZG1hcmtGbGFnLFxuICBmYVBlbmNpbDogZmFQZW5jaWwsXG4gIGZhUGVuY2lsQWx0OiBmYVBlbmNpbEFsdCxcbiAgZmFCYWNrd2FyZDogZmFCYWNrd2FyZCxcbiAgZmFDYXJldFJpZ2h0OiBmYUNhcmV0UmlnaHQsXG4gIGZhQ29tbWVudHM6IGZhQ29tbWVudHMsXG4gIGZhUGFzdGU6IGZhUGFzdGUsXG4gIGZhRmlsZUNsaXBib2FyZDogZmFGaWxlQ2xpcGJvYXJkLFxuICBmYUNvZGVQdWxsUmVxdWVzdDogZmFDb2RlUHVsbFJlcXVlc3QsXG4gIGZhQ2xpcGJvYXJkTGlzdDogZmFDbGlwYm9hcmRMaXN0LFxuICBmYVRydWNrUmFtcEJveDogZmFUcnVja1JhbXBCb3gsXG4gIGZhVHJ1Y2tMb2FkaW5nOiBmYVRydWNrTG9hZGluZyxcbiAgZmFVc2VyQ2hlY2s6IGZhVXNlckNoZWNrLFxuICBmYVZpYWxWaXJ1czogZmFWaWFsVmlydXMsXG4gIGZhU2hlZXRQbGFzdGljOiBmYVNoZWV0UGxhc3RpYyxcbiAgZmFCbG9nOiBmYUJsb2csXG4gIGZhVXNlck5pbmphOiBmYVVzZXJOaW5qYSxcbiAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmU6IGZhUGVyc29uQXJyb3dVcEZyb21MaW5lLFxuICBmYVNjcm9sbFRvcmFoOiBmYVNjcm9sbFRvcmFoLFxuICBmYVRvcmFoOiBmYVRvcmFoLFxuICBmYUJyb29tQmFsbDogZmFCcm9vbUJhbGwsXG4gIGZhUXVpZGRpdGNoOiBmYVF1aWRkaXRjaCxcbiAgZmFRdWlkZGl0Y2hCcm9vbUJhbGw6IGZhUXVpZGRpdGNoQnJvb21CYWxsLFxuICBmYVRvZ2dsZU9mZjogZmFUb2dnbGVPZmYsXG4gIGZhQm94QXJjaGl2ZTogZmFCb3hBcmNoaXZlLFxuICBmYUFyY2hpdmU6IGZhQXJjaGl2ZSxcbiAgZmFQZXJzb25Ecm93bmluZzogZmFQZXJzb25Ecm93bmluZyxcbiAgZmFBcnJvd0Rvd245MTogZmFBcnJvd0Rvd245MSxcbiAgZmFTb3J0TnVtZXJpY0Rlc2M6IGZhU29ydE51bWVyaWNEZXNjLFxuICBmYVNvcnROdW1lcmljRG93bkFsdDogZmFTb3J0TnVtZXJpY0Rvd25BbHQsXG4gIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsXG4gIGZhR3JpblRvbmd1ZVNxdWludDogZmFHcmluVG9uZ3VlU3F1aW50LFxuICBmYVNwcmF5Q2FuOiBmYVNwcmF5Q2FuLFxuICBmYVRydWNrTW9uc3RlcjogZmFUcnVja01vbnN0ZXIsXG4gIGZhVzogZmFXLFxuICBmYUVhcnRoQWZyaWNhOiBmYUVhcnRoQWZyaWNhLFxuICBmYUdsb2JlQWZyaWNhOiBmYUdsb2JlQWZyaWNhLFxuICBmYVJhaW5ib3c6IGZhUmFpbmJvdyxcbiAgZmFDaXJjbGVOb3RjaDogZmFDaXJjbGVOb3RjaCxcbiAgZmFUYWJsZXRTY3JlZW5CdXR0b246IGZhVGFibGV0U2NyZWVuQnV0dG9uLFxuICBmYVRhYmxldEFsdDogZmFUYWJsZXRBbHQsXG4gIGZhUGF3OiBmYVBhdyxcbiAgZmFDbG91ZDogZmFDbG91ZCxcbiAgZmFUcm93ZWxCcmlja3M6IGZhVHJvd2VsQnJpY2tzLFxuICBmYUZhY2VGbHVzaGVkOiBmYUZhY2VGbHVzaGVkLFxuICBmYUZsdXNoZWQ6IGZhRmx1c2hlZCxcbiAgZmFIb3NwaXRhbFVzZXI6IGZhSG9zcGl0YWxVc2VyLFxuICBmYVRlbnRBcnJvd0xlZnRSaWdodDogZmFUZW50QXJyb3dMZWZ0UmlnaHQsXG4gIGZhR2F2ZWw6IGZhR2F2ZWwsXG4gIGZhTGVnYWw6IGZhTGVnYWwsXG4gIGZhQmlub2N1bGFyczogZmFCaW5vY3VsYXJzLFxuICBmYU1pY3JvcGhvbmVTbGFzaDogZmFNaWNyb3Bob25lU2xhc2gsXG4gIGZhQm94VGlzc3VlOiBmYUJveFRpc3N1ZSxcbiAgZmFNb3RvcmN5Y2xlOiBmYU1vdG9yY3ljbGUsXG4gIGZhQmVsbENvbmNpZXJnZTogZmFCZWxsQ29uY2llcmdlLFxuICBmYUNvbmNpZXJnZUJlbGw6IGZhQ29uY2llcmdlQmVsbCxcbiAgZmFQZW5SdWxlcjogZmFQZW5SdWxlcixcbiAgZmFQZW5jaWxSdWxlcjogZmFQZW5jaWxSdWxlcixcbiAgZmFQZW9wbGVBcnJvd3M6IGZhUGVvcGxlQXJyb3dzLFxuICBmYVBlb3BsZUFycm93c0xlZnRSaWdodDogZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhTWFyc0FuZFZlbnVzQnVyc3Q6IGZhTWFyc0FuZFZlbnVzQnVyc3QsXG4gIGZhU3F1YXJlQ2FyZXRSaWdodDogZmFTcXVhcmVDYXJldFJpZ2h0LFxuICBmYUNhcmV0U3F1YXJlUmlnaHQ6IGZhQ2FyZXRTcXVhcmVSaWdodCxcbiAgZmFTY2lzc29yczogZmFTY2lzc29ycyxcbiAgZmFDdXQ6IGZhQ3V0LFxuICBmYVN1blBsYW50V2lsdDogZmFTdW5QbGFudFdpbHQsXG4gIGZhVG9pbGV0c1BvcnRhYmxlOiBmYVRvaWxldHNQb3J0YWJsZSxcbiAgZmFIb2NrZXlQdWNrOiBmYUhvY2tleVB1Y2ssXG4gIGZhVGFibGU6IGZhVGFibGUsXG4gIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodDogZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LFxuICBmYVRhY2hvZ3JhcGhEaWdpdGFsOiBmYVRhY2hvZ3JhcGhEaWdpdGFsLFxuICBmYURpZ2l0YWxUYWNob2dyYXBoOiBmYURpZ2l0YWxUYWNob2dyYXBoLFxuICBmYVVzZXJzU2xhc2g6IGZhVXNlcnNTbGFzaCxcbiAgZmFDbG92ZXI6IGZhQ2xvdmVyLFxuICBmYVJlcGx5OiBmYVJlcGx5LFxuICBmYU1haWxSZXBseTogZmFNYWlsUmVwbHksXG4gIGZhU3RhckFuZENyZXNjZW50OiBmYVN0YXJBbmRDcmVzY2VudCxcbiAgZmFIb3VzZUZpcmU6IGZhSG91c2VGaXJlLFxuICBmYVNxdWFyZU1pbnVzOiBmYVNxdWFyZU1pbnVzLFxuICBmYU1pbnVzU3F1YXJlOiBmYU1pbnVzU3F1YXJlLFxuICBmYUhlbGljb3B0ZXI6IGZhSGVsaWNvcHRlcixcbiAgZmFDb21wYXNzOiBmYUNvbXBhc3MsXG4gIGZhU3F1YXJlQ2FyZXREb3duOiBmYVNxdWFyZUNhcmV0RG93bixcbiAgZmFDYXJldFNxdWFyZURvd246IGZhQ2FyZXRTcXVhcmVEb3duLFxuICBmYUZpbGVDaXJjbGVRdWVzdGlvbjogZmFGaWxlQ2lyY2xlUXVlc3Rpb24sXG4gIGZhTGFwdG9wQ29kZTogZmFMYXB0b3BDb2RlLFxuICBmYVN3YXRjaGJvb2s6IGZhU3dhdGNoYm9vayxcbiAgZmFQcmVzY3JpcHRpb25Cb3R0bGU6IGZhUHJlc2NyaXB0aW9uQm90dGxlLFxuICBmYUJhcnM6IGZhQmFycyxcbiAgZmFOYXZpY29uOiBmYU5hdmljb24sXG4gIGZhUGVvcGxlR3JvdXA6IGZhUGVvcGxlR3JvdXAsXG4gIGZhSG91cmdsYXNzRW5kOiBmYUhvdXJnbGFzc0VuZCxcbiAgZmFIb3VyZ2xhc3MzOiBmYUhvdXJnbGFzczMsXG4gIGZhSGVhcnRDcmFjazogZmFIZWFydENyYWNrLFxuICBmYUhlYXJ0QnJva2VuOiBmYUhlYXJ0QnJva2VuLFxuICBmYVNxdWFyZVVwUmlnaHQ6IGZhU3F1YXJlVXBSaWdodCxcbiAgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQ6IGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LFxuICBmYUZhY2VLaXNzQmVhbTogZmFGYWNlS2lzc0JlYW0sXG4gIGZhS2lzc0JlYW06IGZhS2lzc0JlYW0sXG4gIGZhRmlsbTogZmFGaWxtLFxuICBmYVJ1bGVySG9yaXpvbnRhbDogZmFSdWxlckhvcml6b250YWwsXG4gIGZhUGVvcGxlUm9iYmVyeTogZmFQZW9wbGVSb2JiZXJ5LFxuICBmYUxpZ2h0YnVsYjogZmFMaWdodGJ1bGIsXG4gIGZhQ2FyZXRMZWZ0OiBmYUNhcmV0TGVmdCxcbiAgZmFDaXJjbGVFeGNsYW1hdGlvbjogZmFDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFFeGNsYW1hdGlvbkNpcmNsZTogZmFFeGNsYW1hdGlvbkNpcmNsZSxcbiAgZmFTY2hvb2xDaXJjbGVYbWFyazogZmFTY2hvb2xDaXJjbGVYbWFyayxcbiAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ6IGZhQXJyb3dSaWdodEZyb21CcmFja2V0LFxuICBmYVNpZ25PdXQ6IGZhU2lnbk91dCxcbiAgZmFDaXJjbGVDaGV2cm9uRG93bjogZmFDaXJjbGVDaGV2cm9uRG93bixcbiAgZmFDaGV2cm9uQ2lyY2xlRG93bjogZmFDaGV2cm9uQ2lyY2xlRG93bixcbiAgZmFVbmxvY2tLZXlob2xlOiBmYVVubG9ja0tleWhvbGUsXG4gIGZhVW5sb2NrQWx0OiBmYVVubG9ja0FsdCxcbiAgZmFDbG91ZFNob3dlcnNIZWF2eTogZmFDbG91ZFNob3dlcnNIZWF2eSxcbiAgZmFIZWFkcGhvbmVzU2ltcGxlOiBmYUhlYWRwaG9uZXNTaW1wbGUsXG4gIGZhSGVhZHBob25lc0FsdDogZmFIZWFkcGhvbmVzQWx0LFxuICBmYVNpdGVtYXA6IGZhU2l0ZW1hcCxcbiAgZmFDaXJjbGVEb2xsYXJUb1Nsb3Q6IGZhQ2lyY2xlRG9sbGFyVG9TbG90LFxuICBmYURvbmF0ZTogZmFEb25hdGUsXG4gIGZhTWVtb3J5OiBmYU1lbW9yeSxcbiAgZmFSb2FkU3Bpa2VzOiBmYVJvYWRTcGlrZXMsXG4gIGZhRmlyZUJ1cm5lcjogZmFGaXJlQnVybmVyLFxuICBmYUZsYWc6IGZhRmxhZyxcbiAgZmFIYW51a2lhaDogZmFIYW51a2lhaCxcbiAgZmFGZWF0aGVyOiBmYUZlYXRoZXIsXG4gIGZhVm9sdW1lTG93OiBmYVZvbHVtZUxvdyxcbiAgZmFWb2x1bWVEb3duOiBmYVZvbHVtZURvd24sXG4gIGZhQ29tbWVudFNsYXNoOiBmYUNvbW1lbnRTbGFzaCxcbiAgZmFDbG91ZFN1blJhaW46IGZhQ2xvdWRTdW5SYWluLFxuICBmYUNvbXByZXNzOiBmYUNvbXByZXNzLFxuICBmYVdoZWF0QXduOiBmYVdoZWF0QXduLFxuICBmYVdoZWF0QWx0OiBmYVdoZWF0QWx0LFxuICBmYUFua2g6IGZhQW5raCxcbiAgZmFIYW5kc0hvbGRpbmdDaGlsZDogZmFIYW5kc0hvbGRpbmdDaGlsZCxcbiAgZmFBc3RlcmlzazogZmFBc3RlcmlzayxcbiAgZmFTcXVhcmVDaGVjazogZmFTcXVhcmVDaGVjayxcbiAgZmFDaGVja1NxdWFyZTogZmFDaGVja1NxdWFyZSxcbiAgZmFQZXNldGFTaWduOiBmYVBlc2V0YVNpZ24sXG4gIGZhSGVhZGluZzogZmFIZWFkaW5nLFxuICBmYUhlYWRlcjogZmFIZWFkZXIsXG4gIGZhR2hvc3Q6IGZhR2hvc3QsXG4gIGZhTGlzdDogZmFMaXN0LFxuICBmYUxpc3RTcXVhcmVzOiBmYUxpc3RTcXVhcmVzLFxuICBmYVNxdWFyZVBob25lRmxpcDogZmFTcXVhcmVQaG9uZUZsaXAsXG4gIGZhUGhvbmVTcXVhcmVBbHQ6IGZhUGhvbmVTcXVhcmVBbHQsXG4gIGZhQ2FydFBsdXM6IGZhQ2FydFBsdXMsXG4gIGZhR2FtZXBhZDogZmFHYW1lcGFkLFxuICBmYUNpcmNsZURvdDogZmFDaXJjbGVEb3QsXG4gIGZhRG90Q2lyY2xlOiBmYURvdENpcmNsZSxcbiAgZmFGYWNlRGl6enk6IGZhRmFjZURpenp5LFxuICBmYURpenp5OiBmYURpenp5LFxuICBmYUVnZzogZmFFZ2csXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcms6IGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssXG4gIGZhQ2FtcGdyb3VuZDogZmFDYW1wZ3JvdW5kLFxuICBmYUZvbGRlclBsdXM6IGZhRm9sZGVyUGx1cyxcbiAgZmFGdXRib2w6IGZhRnV0Ym9sLFxuICBmYUZ1dGJvbEJhbGw6IGZhRnV0Ym9sQmFsbCxcbiAgZmFTb2NjZXJCYWxsOiBmYVNvY2NlckJhbGwsXG4gIGZhUGFpbnRicnVzaDogZmFQYWludGJydXNoLFxuICBmYVBhaW50QnJ1c2g6IGZhUGFpbnRCcnVzaCxcbiAgZmFMb2NrOiBmYUxvY2ssXG4gIGZhR2FzUHVtcDogZmFHYXNQdW1wLFxuICBmYUhvdFR1YlBlcnNvbjogZmFIb3RUdWJQZXJzb24sXG4gIGZhSG90VHViOiBmYUhvdFR1YixcbiAgZmFNYXBMb2NhdGlvbjogZmFNYXBMb2NhdGlvbixcbiAgZmFNYXBNYXJrZWQ6IGZhTWFwTWFya2VkLFxuICBmYUhvdXNlRmxvb2RXYXRlcjogZmFIb3VzZUZsb29kV2F0ZXIsXG4gIGZhVHJlZTogZmFUcmVlLFxuICBmYUJyaWRnZUxvY2s6IGZhQnJpZGdlTG9jayxcbiAgZmFTYWNrRG9sbGFyOiBmYVNhY2tEb2xsYXIsXG4gIGZhUGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUsXG4gIGZhRWRpdDogZmFFZGl0LFxuICBmYUNhclNpZGU6IGZhQ2FyU2lkZSxcbiAgZmFTaGFyZU5vZGVzOiBmYVNoYXJlTm9kZXMsXG4gIGZhU2hhcmVBbHQ6IGZhU2hhcmVBbHQsXG4gIGZhSGVhcnRDaXJjbGVNaW51czogZmFIZWFydENpcmNsZU1pbnVzLFxuICBmYUhvdXJnbGFzc0hhbGY6IGZhSG91cmdsYXNzSGFsZixcbiAgZmFIb3VyZ2xhc3MyOiBmYUhvdXJnbGFzczIsXG4gIGZhTWljcm9zY29wZTogZmFNaWNyb3Njb3BlLFxuICBmYVNpbms6IGZhU2luayxcbiAgZmFCYWdTaG9wcGluZzogZmFCYWdTaG9wcGluZyxcbiAgZmFTaG9wcGluZ0JhZzogZmFTaG9wcGluZ0JhZyxcbiAgZmFBcnJvd0Rvd25aQTogZmFBcnJvd0Rvd25aQSxcbiAgZmFTb3J0QWxwaGFEZXNjOiBmYVNvcnRBbHBoYURlc2MsXG4gIGZhU29ydEFscGhhRG93bkFsdDogZmFTb3J0QWxwaGFEb3duQWx0LFxuICBmYU1pdHRlbjogZmFNaXR0ZW4sXG4gIGZhUGVyc29uUmF5czogZmFQZXJzb25SYXlzLFxuICBmYVVzZXJzOiBmYVVzZXJzLFxuICBmYUV5ZVNsYXNoOiBmYUV5ZVNsYXNoLFxuICBmYUZsYXNrVmlhbDogZmFGbGFza1ZpYWwsXG4gIGZhSGFuZDogZmFIYW5kLFxuICBmYUhhbmRQYXBlcjogZmFIYW5kUGFwZXIsXG4gIGZhT206IGZhT20sXG4gIGZhV29ybTogZmFXb3JtLFxuICBmYUhvdXNlQ2lyY2xlWG1hcms6IGZhSG91c2VDaXJjbGVYbWFyayxcbiAgZmFQbHVnOiBmYVBsdWcsXG4gIGZhQ2hldnJvblVwOiBmYUNoZXZyb25VcCxcbiAgZmFIYW5kU3BvY2s6IGZhSGFuZFNwb2NrLFxuICBmYVN0b3B3YXRjaDogZmFTdG9wd2F0Y2gsXG4gIGZhRmFjZUtpc3M6IGZhRmFjZUtpc3MsXG4gIGZhS2lzczogZmFLaXNzLFxuICBmYUJyaWRnZUNpcmNsZVhtYXJrOiBmYUJyaWRnZUNpcmNsZVhtYXJrLFxuICBmYUZhY2VHcmluVG9uZ3VlOiBmYUZhY2VHcmluVG9uZ3VlLFxuICBmYUdyaW5Ub25ndWU6IGZhR3JpblRvbmd1ZSxcbiAgZmFDaGVzc0Jpc2hvcDogZmFDaGVzc0Jpc2hvcCxcbiAgZmFGYWNlR3Jpbldpbms6IGZhRmFjZUdyaW5XaW5rLFxuICBmYUdyaW5XaW5rOiBmYUdyaW5XaW5rLFxuICBmYUVhckRlYWY6IGZhRWFyRGVhZixcbiAgZmFEZWFmOiBmYURlYWYsXG4gIGZhRGVhZm5lc3M6IGZhRGVhZm5lc3MsXG4gIGZhSGFyZE9mSGVhcmluZzogZmFIYXJkT2ZIZWFyaW5nLFxuICBmYVJvYWRDaXJjbGVDaGVjazogZmFSb2FkQ2lyY2xlQ2hlY2ssXG4gIGZhRGljZUZpdmU6IGZhRGljZUZpdmUsXG4gIGZhU3F1YXJlUnNzOiBmYVNxdWFyZVJzcyxcbiAgZmFSc3NTcXVhcmU6IGZhUnNzU3F1YXJlLFxuICBmYUxhbmRNaW5lT246IGZhTGFuZE1pbmVPbixcbiAgZmFJQ3Vyc29yOiBmYUlDdXJzb3IsXG4gIGZhU3RhbXA6IGZhU3RhbXAsXG4gIGZhU3RhaXJzOiBmYVN0YWlycyxcbiAgZmFJOiBmYUksXG4gIGZhSHJ5dm5pYVNpZ246IGZhSHJ5dm5pYVNpZ24sXG4gIGZhSHJ5dm5pYTogZmFIcnl2bmlhLFxuICBmYVBpbGxzOiBmYVBpbGxzLFxuICBmYUZhY2VHcmluV2lkZTogZmFGYWNlR3JpbldpZGUsXG4gIGZhR3JpbkFsdDogZmFHcmluQWx0LFxuICBmYVRvb3RoOiBmYVRvb3RoLFxuICBmYVY6IGZhVixcbiAgZmFCYW5nbGFkZXNoaVRha2FTaWduOiBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sXG4gIGZhQmljeWNsZTogZmFCaWN5Y2xlLFxuICBmYVN0YWZmU25ha2U6IGZhU3RhZmZTbmFrZSxcbiAgZmFSb2RBc2NsZXBpdXM6IGZhUm9kQXNjbGVwaXVzLFxuICBmYVJvZFNuYWtlOiBmYVJvZFNuYWtlLFxuICBmYVN0YWZmQWVzY3VsYXBpdXM6IGZhU3RhZmZBZXNjdWxhcGl1cyxcbiAgZmFIZWFkU2lkZUNvdWdoU2xhc2g6IGZhSGVhZFNpZGVDb3VnaFNsYXNoLFxuICBmYVRydWNrTWVkaWNhbDogZmFUcnVja01lZGljYWwsXG4gIGZhQW1idWxhbmNlOiBmYUFtYnVsYW5jZSxcbiAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uOiBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhU25vd21hbjogZmFTbm93bWFuLFxuICBmYU1vcnRhclBlc3RsZTogZmFNb3J0YXJQZXN0bGUsXG4gIGZhUm9hZEJhcnJpZXI6IGZhUm9hZEJhcnJpZXIsXG4gIGZhU2Nob29sOiBmYVNjaG9vbCxcbiAgZmFJZ2xvbzogZmFJZ2xvbyxcbiAgZmFKb2ludDogZmFKb2ludCxcbiAgZmFBbmdsZVJpZ2h0OiBmYUFuZ2xlUmlnaHQsXG4gIGZhSG9yc2U6IGZhSG9yc2UsXG4gIGZhUTogZmFRLFxuICBmYUc6IGZhRyxcbiAgZmFOb3Rlc01lZGljYWw6IGZhTm90ZXNNZWRpY2FsLFxuICBmYVRlbXBlcmF0dXJlSGFsZjogZmFUZW1wZXJhdHVyZUhhbGYsXG4gIGZhVGVtcGVyYXR1cmUyOiBmYVRlbXBlcmF0dXJlMixcbiAgZmFUaGVybW9tZXRlcjI6IGZhVGhlcm1vbWV0ZXIyLFxuICBmYVRoZXJtb21ldGVySGFsZjogZmFUaGVybW9tZXRlckhhbGYsXG4gIGZhRG9uZ1NpZ246IGZhRG9uZ1NpZ24sXG4gIGZhQ2Fwc3VsZXM6IGZhQ2Fwc3VsZXMsXG4gIGZhUG9vU3Rvcm06IGZhUG9vU3Rvcm0sXG4gIGZhUG9vQm9sdDogZmFQb29Cb2x0LFxuICBmYUZhY2VGcm93bk9wZW46IGZhRmFjZUZyb3duT3BlbixcbiAgZmFGcm93bk9wZW46IGZhRnJvd25PcGVuLFxuICBmYUhhbmRQb2ludFVwOiBmYUhhbmRQb2ludFVwLFxuICBmYU1vbmV5QmlsbDogZmFNb25leUJpbGwsXG4gIGZhQm9va21hcms6IGZhQm9va21hcmssXG4gIGZhQWxpZ25KdXN0aWZ5OiBmYUFsaWduSnVzdGlmeSxcbiAgZmFVbWJyZWxsYUJlYWNoOiBmYVVtYnJlbGxhQmVhY2gsXG4gIGZhSGVsbWV0VW46IGZhSGVsbWV0VW4sXG4gIGZhQnVsbHNleWU6IGZhQnVsbHNleWUsXG4gIGZhQmFjb246IGZhQmFjb24sXG4gIGZhSGFuZFBvaW50RG93bjogZmFIYW5kUG9pbnREb3duLFxuICBmYUFycm93VXBGcm9tQnJhY2tldDogZmFBcnJvd1VwRnJvbUJyYWNrZXQsXG4gIGZhRm9sZGVyOiBmYUZvbGRlcixcbiAgZmFGb2xkZXJCbGFuazogZmFGb2xkZXJCbGFuayxcbiAgZmFGaWxlV2F2ZWZvcm06IGZhRmlsZVdhdmVmb3JtLFxuICBmYUZpbGVNZWRpY2FsQWx0OiBmYUZpbGVNZWRpY2FsQWx0LFxuICBmYVJhZGlhdGlvbjogZmFSYWRpYXRpb24sXG4gIGZhQ2hhcnRTaW1wbGU6IGZhQ2hhcnRTaW1wbGUsXG4gIGZhTWFyc1N0cm9rZTogZmFNYXJzU3Ryb2tlLFxuICBmYVZpYWw6IGZhVmlhbCxcbiAgZmFHYXVnZTogZmFHYXVnZSxcbiAgZmFEYXNoYm9hcmQ6IGZhRGFzaGJvYXJkLFxuICBmYUdhdWdlTWVkOiBmYUdhdWdlTWVkLFxuICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlOiBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLFxuICBmYVdhbmRNYWdpY1NwYXJrbGVzOiBmYVdhbmRNYWdpY1NwYXJrbGVzLFxuICBmYU1hZ2ljV2FuZFNwYXJrbGVzOiBmYU1hZ2ljV2FuZFNwYXJrbGVzLFxuICBmYUU6IGZhRSxcbiAgZmFQZW5DbGlwOiBmYVBlbkNsaXAsXG4gIGZhUGVuQWx0OiBmYVBlbkFsdCxcbiAgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbjogZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFVc2VyOiBmYVVzZXIsXG4gIGZhU2Nob29sQ2lyY2xlQ2hlY2s6IGZhU2Nob29sQ2lyY2xlQ2hlY2ssXG4gIGZhRHVtcHN0ZXI6IGZhRHVtcHN0ZXIsXG4gIGZhVmFuU2h1dHRsZTogZmFWYW5TaHV0dGxlLFxuICBmYVNodXR0bGVWYW46IGZhU2h1dHRsZVZhbixcbiAgZmFCdWlsZGluZ1VzZXI6IGZhQnVpbGRpbmdVc2VyLFxuICBmYVNxdWFyZUNhcmV0TGVmdDogZmFTcXVhcmVDYXJldExlZnQsXG4gIGZhQ2FyZXRTcXVhcmVMZWZ0OiBmYUNhcmV0U3F1YXJlTGVmdCxcbiAgZmFIaWdobGlnaHRlcjogZmFIaWdobGlnaHRlcixcbiAgZmFLZXk6IGZhS2V5LFxuICBmYUJ1bGxob3JuOiBmYUJ1bGxob3JuLFxuICBmYUdsb2JlOiBmYUdsb2JlLFxuICBmYVN5bmFnb2d1ZTogZmFTeW5hZ29ndWUsXG4gIGZhUGVyc29uSGFsZkRyZXNzOiBmYVBlcnNvbkhhbGZEcmVzcyxcbiAgZmFSb2FkQnJpZGdlOiBmYVJvYWRCcmlkZ2UsXG4gIGZhTG9jYXRpb25BcnJvdzogZmFMb2NhdGlvbkFycm93LFxuICBmYUM6IGZhQyxcbiAgZmFUYWJsZXRCdXR0b246IGZhVGFibGV0QnV0dG9uLFxuICBmYUJ1aWxkaW5nTG9jazogZmFCdWlsZGluZ0xvY2ssXG4gIGZhUGl6emFTbGljZTogZmFQaXp6YVNsaWNlLFxuICBmYU1vbmV5QmlsbFdhdmU6IGZhTW9uZXlCaWxsV2F2ZSxcbiAgZmFDaGFydEFyZWE6IGZhQ2hhcnRBcmVhLFxuICBmYUFyZWFDaGFydDogZmFBcmVhQ2hhcnQsXG4gIGZhSG91c2VGbGFnOiBmYUhvdXNlRmxhZyxcbiAgZmFQZXJzb25DaXJjbGVNaW51czogZmFQZXJzb25DaXJjbGVNaW51cyxcbiAgZmFCYW46IGZhQmFuLFxuICBmYUNhbmNlbDogZmFDYW5jZWwsXG4gIGZhQ2FtZXJhUm90YXRlOiBmYUNhbWVyYVJvdGF0ZSxcbiAgZmFTcHJheUNhblNwYXJrbGVzOiBmYVNwcmF5Q2FuU3BhcmtsZXMsXG4gIGZhQWlyRnJlc2hlbmVyOiBmYUFpckZyZXNoZW5lcixcbiAgZmFTdGFyOiBmYVN0YXIsXG4gIGZhUmVwZWF0OiBmYVJlcGVhdCxcbiAgZmFDcm9zczogZmFDcm9zcyxcbiAgZmFCb3g6IGZhQm94LFxuICBmYVZlbnVzTWFyczogZmFWZW51c01hcnMsXG4gIGZhQXJyb3dQb2ludGVyOiBmYUFycm93UG9pbnRlcixcbiAgZmFNb3VzZVBvaW50ZXI6IGZhTW91c2VQb2ludGVyLFxuICBmYU1heGltaXplOiBmYU1heGltaXplLFxuICBmYUV4cGFuZEFycm93c0FsdDogZmFFeHBhbmRBcnJvd3NBbHQsXG4gIGZhQ2hhcmdpbmdTdGF0aW9uOiBmYUNoYXJnaW5nU3RhdGlvbixcbiAgZmFTaGFwZXM6IGZhU2hhcGVzLFxuICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlOiBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlLFxuICBmYVNodWZmbGU6IGZhU2h1ZmZsZSxcbiAgZmFSYW5kb206IGZhUmFuZG9tLFxuICBmYVBlcnNvblJ1bm5pbmc6IGZhUGVyc29uUnVubmluZyxcbiAgZmFSdW5uaW5nOiBmYVJ1bm5pbmcsXG4gIGZhTW9iaWxlUmV0cm86IGZhTW9iaWxlUmV0cm8sXG4gIGZhR3JpcExpbmVzVmVydGljYWw6IGZhR3JpcExpbmVzVmVydGljYWwsXG4gIGZhU3BpZGVyOiBmYVNwaWRlcixcbiAgZmFIYW5kc0JvdW5kOiBmYUhhbmRzQm91bmQsXG4gIGZhRmlsZUludm9pY2VEb2xsYXI6IGZhRmlsZUludm9pY2VEb2xsYXIsXG4gIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbjogZmFQbGFuZUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYVhSYXk6IGZhWFJheSxcbiAgZmFTcGVsbENoZWNrOiBmYVNwZWxsQ2hlY2ssXG4gIGZhU2xhc2g6IGZhU2xhc2gsXG4gIGZhQ29tcHV0ZXJNb3VzZTogZmFDb21wdXRlck1vdXNlLFxuICBmYU1vdXNlOiBmYU1vdXNlLFxuICBmYUFycm93UmlnaHRUb0JyYWNrZXQ6IGZhQXJyb3dSaWdodFRvQnJhY2tldCxcbiAgZmFTaWduSW46IGZhU2lnbkluLFxuICBmYVNob3BTbGFzaDogZmFTaG9wU2xhc2gsXG4gIGZhU3RvcmVBbHRTbGFzaDogZmFTdG9yZUFsdFNsYXNoLFxuICBmYVNlcnZlcjogZmFTZXJ2ZXIsXG4gIGZhVmlydXNDb3ZpZFNsYXNoOiBmYVZpcnVzQ292aWRTbGFzaCxcbiAgZmFTaG9wTG9jazogZmFTaG9wTG9jayxcbiAgZmFIb3VyZ2xhc3NTdGFydDogZmFIb3VyZ2xhc3NTdGFydCxcbiAgZmFIb3VyZ2xhc3MxOiBmYUhvdXJnbGFzczEsXG4gIGZhQmxlbmRlclBob25lOiBmYUJsZW5kZXJQaG9uZSxcbiAgZmFCdWlsZGluZ1doZWF0OiBmYUJ1aWxkaW5nV2hlYXQsXG4gIGZhUGVyc29uQnJlYXN0ZmVlZGluZzogZmFQZXJzb25CcmVhc3RmZWVkaW5nLFxuICBmYVJpZ2h0VG9CcmFja2V0OiBmYVJpZ2h0VG9CcmFja2V0LFxuICBmYVNpZ25JbkFsdDogZmFTaWduSW5BbHQsXG4gIGZhVmVudXM6IGZhVmVudXMsXG4gIGZhUGFzc3BvcnQ6IGZhUGFzc3BvcnQsXG4gIGZhSGVhcnRQdWxzZTogZmFIZWFydFB1bHNlLFxuICBmYUhlYXJ0YmVhdDogZmFIZWFydGJlYXQsXG4gIGZhUGVvcGxlQ2FycnlCb3g6IGZhUGVvcGxlQ2FycnlCb3gsXG4gIGZhUGVvcGxlQ2Fycnk6IGZhUGVvcGxlQ2FycnksXG4gIGZhVGVtcGVyYXR1cmVIaWdoOiBmYVRlbXBlcmF0dXJlSGlnaCxcbiAgZmFNaWNyb2NoaXA6IGZhTWljcm9jaGlwLFxuICBmYUNyb3duOiBmYUNyb3duLFxuICBmYVdlaWdodEhhbmdpbmc6IGZhV2VpZ2h0SGFuZ2luZyxcbiAgZmFYbWFya3NMaW5lczogZmFYbWFya3NMaW5lcyxcbiAgZmFGaWxlUHJlc2NyaXB0aW9uOiBmYUZpbGVQcmVzY3JpcHRpb24sXG4gIGZhV2VpZ2h0U2NhbGU6IGZhV2VpZ2h0U2NhbGUsXG4gIGZhV2VpZ2h0OiBmYVdlaWdodCxcbiAgZmFVc2VyR3JvdXA6IGZhVXNlckdyb3VwLFxuICBmYVVzZXJGcmllbmRzOiBmYVVzZXJGcmllbmRzLFxuICBmYUFycm93VXBBWjogZmFBcnJvd1VwQVosXG4gIGZhU29ydEFscGhhVXA6IGZhU29ydEFscGhhVXAsXG4gIGZhQ2hlc3NLbmlnaHQ6IGZhQ2hlc3NLbmlnaHQsXG4gIGZhRmFjZUxhdWdoU3F1aW50OiBmYUZhY2VMYXVnaFNxdWludCxcbiAgZmFMYXVnaFNxdWludDogZmFMYXVnaFNxdWludCxcbiAgZmFXaGVlbGNoYWlyOiBmYVdoZWVsY2hhaXIsXG4gIGZhQ2lyY2xlQXJyb3dVcDogZmFDaXJjbGVBcnJvd1VwLFxuICBmYUFycm93Q2lyY2xlVXA6IGZhQXJyb3dDaXJjbGVVcCxcbiAgZmFUb2dnbGVPbjogZmFUb2dnbGVPbixcbiAgZmFQZXJzb25XYWxraW5nOiBmYVBlcnNvbldhbGtpbmcsXG4gIGZhV2Fsa2luZzogZmFXYWxraW5nLFxuICBmYUw6IGZhTCxcbiAgZmFGaXJlOiBmYUZpcmUsXG4gIGZhQmVkUHVsc2U6IGZhQmVkUHVsc2UsXG4gIGZhUHJvY2VkdXJlczogZmFQcm9jZWR1cmVzLFxuICBmYVNodXR0bGVTcGFjZTogZmFTaHV0dGxlU3BhY2UsXG4gIGZhU3BhY2VTaHV0dGxlOiBmYVNwYWNlU2h1dHRsZSxcbiAgZmFGYWNlTGF1Z2g6IGZhRmFjZUxhdWdoLFxuICBmYUxhdWdoOiBmYUxhdWdoLFxuICBmYUZvbGRlck9wZW46IGZhRm9sZGVyT3BlbixcbiAgZmFIZWFydENpcmNsZVBsdXM6IGZhSGVhcnRDaXJjbGVQbHVzLFxuICBmYUNvZGVGb3JrOiBmYUNvZGVGb3JrLFxuICBmYUNpdHk6IGZhQ2l0eSxcbiAgZmFNaWNyb3Bob25lTGluZXM6IGZhTWljcm9waG9uZUxpbmVzLFxuICBmYU1pY3JvcGhvbmVBbHQ6IGZhTWljcm9waG9uZUFsdCxcbiAgZmFQZXBwZXJIb3Q6IGZhUGVwcGVySG90LFxuICBmYVVubG9jazogZmFVbmxvY2ssXG4gIGZhQ29sb25TaWduOiBmYUNvbG9uU2lnbixcbiAgZmFIZWFkc2V0OiBmYUhlYWRzZXQsXG4gIGZhU3RvcmVTbGFzaDogZmFTdG9yZVNsYXNoLFxuICBmYVJvYWRDaXJjbGVYbWFyazogZmFSb2FkQ2lyY2xlWG1hcmssXG4gIGZhVXNlck1pbnVzOiBmYVVzZXJNaW51cyxcbiAgZmFNYXJzU3Ryb2tlVXA6IGZhTWFyc1N0cm9rZVVwLFxuICBmYU1hcnNTdHJva2VWOiBmYU1hcnNTdHJva2VWLFxuICBmYUNoYW1wYWduZUdsYXNzZXM6IGZhQ2hhbXBhZ25lR2xhc3NlcyxcbiAgZmFHbGFzc0NoZWVyczogZmFHbGFzc0NoZWVycyxcbiAgZmFDbGlwYm9hcmQ6IGZhQ2xpcGJvYXJkLFxuICBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb246IGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFGaWxlQXJyb3dVcDogZmFGaWxlQXJyb3dVcCxcbiAgZmFGaWxlVXBsb2FkOiBmYUZpbGVVcGxvYWQsXG4gIGZhV2lmaTogZmFXaWZpLFxuICBmYVdpZmkzOiBmYVdpZmkzLFxuICBmYVdpZmlTdHJvbmc6IGZhV2lmaVN0cm9uZyxcbiAgZmFCYXRoOiBmYUJhdGgsXG4gIGZhQmF0aHR1YjogZmFCYXRodHViLFxuICBmYVVuZGVybGluZTogZmFVbmRlcmxpbmUsXG4gIGZhVXNlclBlbjogZmFVc2VyUGVuLFxuICBmYVVzZXJFZGl0OiBmYVVzZXJFZGl0LFxuICBmYVNpZ25hdHVyZTogZmFTaWduYXR1cmUsXG4gIGZhU3Ryb29wd2FmZWw6IGZhU3Ryb29wd2FmZWwsXG4gIGZhQm9sZDogZmFCb2xkLFxuICBmYUFuY2hvckxvY2s6IGZhQW5jaG9yTG9jayxcbiAgZmFCdWlsZGluZ05nbzogZmFCdWlsZGluZ05nbyxcbiAgZmFNYW5hdFNpZ246IGZhTWFuYXRTaWduLFxuICBmYU5vdEVxdWFsOiBmYU5vdEVxdWFsLFxuICBmYUJvcmRlclRvcExlZnQ6IGZhQm9yZGVyVG9wTGVmdCxcbiAgZmFCb3JkZXJTdHlsZTogZmFCb3JkZXJTdHlsZSxcbiAgZmFNYXBMb2NhdGlvbkRvdDogZmFNYXBMb2NhdGlvbkRvdCxcbiAgZmFNYXBNYXJrZWRBbHQ6IGZhTWFwTWFya2VkQWx0LFxuICBmYUplZGk6IGZhSmVkaSxcbiAgZmFTcXVhcmVQb2xsVmVydGljYWw6IGZhU3F1YXJlUG9sbFZlcnRpY2FsLFxuICBmYVBvbGw6IGZhUG9sbCxcbiAgZmFNdWdIb3Q6IGZhTXVnSG90LFxuICBmYUNhckJhdHRlcnk6IGZhQ2FyQmF0dGVyeSxcbiAgZmFCYXR0ZXJ5Q2FyOiBmYUJhdHRlcnlDYXIsXG4gIGZhR2lmdDogZmFHaWZ0LFxuICBmYURpY2VUd286IGZhRGljZVR3byxcbiAgZmFDaGVzc1F1ZWVuOiBmYUNoZXNzUXVlZW4sXG4gIGZhR2xhc3NlczogZmFHbGFzc2VzLFxuICBmYUNoZXNzQm9hcmQ6IGZhQ2hlc3NCb2FyZCxcbiAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrOiBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uQ2hhbGtib2FyZDogZmFQZXJzb25DaGFsa2JvYXJkLFxuICBmYU1hcnNTdHJva2VSaWdodDogZmFNYXJzU3Ryb2tlUmlnaHQsXG4gIGZhTWFyc1N0cm9rZUg6IGZhTWFyc1N0cm9rZUgsXG4gIGZhSGFuZEJhY2tGaXN0OiBmYUhhbmRCYWNrRmlzdCxcbiAgZmFIYW5kUm9jazogZmFIYW5kUm9jayxcbiAgZmFTcXVhcmVDYXJldFVwOiBmYVNxdWFyZUNhcmV0VXAsXG4gIGZhQ2FyZXRTcXVhcmVVcDogZmFDYXJldFNxdWFyZVVwLFxuICBmYUNsb3VkU2hvd2Vyc1dhdGVyOiBmYUNsb3VkU2hvd2Vyc1dhdGVyLFxuICBmYUNoYXJ0QmFyOiBmYUNoYXJ0QmFyLFxuICBmYUJhckNoYXJ0OiBmYUJhckNoYXJ0LFxuICBmYUhhbmRzQnViYmxlczogZmFIYW5kc0J1YmJsZXMsXG4gIGZhSGFuZHNXYXNoOiBmYUhhbmRzV2FzaCxcbiAgZmFMZXNzVGhhbkVxdWFsOiBmYUxlc3NUaGFuRXF1YWwsXG4gIGZhVHJhaW46IGZhVHJhaW4sXG4gIGZhRXllTG93VmlzaW9uOiBmYUV5ZUxvd1Zpc2lvbixcbiAgZmFMb3dWaXNpb246IGZhTG93VmlzaW9uLFxuICBmYUNyb3c6IGZhQ3JvdyxcbiAgZmFTYWlsYm9hdDogZmFTYWlsYm9hdCxcbiAgZmFXaW5kb3dSZXN0b3JlOiBmYVdpbmRvd1Jlc3RvcmUsXG4gIGZhU3F1YXJlUGx1czogZmFTcXVhcmVQbHVzLFxuICBmYVBsdXNTcXVhcmU6IGZhUGx1c1NxdWFyZSxcbiAgZmFUb3JpaUdhdGU6IGZhVG9yaWlHYXRlLFxuICBmYUZyb2c6IGZhRnJvZyxcbiAgZmFCdWNrZXQ6IGZhQnVja2V0LFxuICBmYUltYWdlOiBmYUltYWdlLFxuICBmYU1pY3JvcGhvbmU6IGZhTWljcm9waG9uZSxcbiAgZmFDb3c6IGZhQ293LFxuICBmYUNhcmV0VXA6IGZhQ2FyZXRVcCxcbiAgZmFTY3Jld2RyaXZlcjogZmFTY3Jld2RyaXZlcixcbiAgZmFGb2xkZXJDbG9zZWQ6IGZhRm9sZGVyQ2xvc2VkLFxuICBmYUhvdXNlVHN1bmFtaTogZmFIb3VzZVRzdW5hbWksXG4gIGZhU3F1YXJlTmZpOiBmYVNxdWFyZU5maSxcbiAgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyOiBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsXG4gIGZhTWFydGluaUdsYXNzOiBmYU1hcnRpbmlHbGFzcyxcbiAgZmFHbGFzc01hcnRpbmlBbHQ6IGZhR2xhc3NNYXJ0aW5pQWx0LFxuICBmYVJvdGF0ZUxlZnQ6IGZhUm90YXRlTGVmdCxcbiAgZmFSb3RhdGVCYWNrOiBmYVJvdGF0ZUJhY2ssXG4gIGZhUm90YXRlQmFja3dhcmQ6IGZhUm90YXRlQmFja3dhcmQsXG4gIGZhVW5kb0FsdDogZmFVbmRvQWx0LFxuICBmYVRhYmxlQ29sdW1uczogZmFUYWJsZUNvbHVtbnMsXG4gIGZhQ29sdW1uczogZmFDb2x1bW5zLFxuICBmYUxlbW9uOiBmYUxlbW9uLFxuICBmYUhlYWRTaWRlTWFzazogZmFIZWFkU2lkZU1hc2ssXG4gIGZhSGFuZHNoYWtlOiBmYUhhbmRzaGFrZSxcbiAgZmFHZW06IGZhR2VtLFxuICBmYURvbGx5OiBmYURvbGx5LFxuICBmYURvbGx5Qm94OiBmYURvbGx5Qm94LFxuICBmYVNtb2tpbmc6IGZhU21va2luZyxcbiAgZmFNaW5pbWl6ZTogZmFNaW5pbWl6ZSxcbiAgZmFDb21wcmVzc0Fycm93c0FsdDogZmFDb21wcmVzc0Fycm93c0FsdCxcbiAgZmFNb251bWVudDogZmFNb251bWVudCxcbiAgZmFTbm93cGxvdzogZmFTbm93cGxvdyxcbiAgZmFBbmdsZXNSaWdodDogZmFBbmdsZXNSaWdodCxcbiAgZmFBbmdsZURvdWJsZVJpZ2h0OiBmYUFuZ2xlRG91YmxlUmlnaHQsXG4gIGZhQ2FubmFiaXM6IGZhQ2FubmFiaXMsXG4gIGZhQ2lyY2xlUGxheTogZmFDaXJjbGVQbGF5LFxuICBmYVBsYXlDaXJjbGU6IGZhUGxheUNpcmNsZSxcbiAgZmFUYWJsZXRzOiBmYVRhYmxldHMsXG4gIGZhRXRoZXJuZXQ6IGZhRXRoZXJuZXQsXG4gIGZhRXVyb1NpZ246IGZhRXVyb1NpZ24sXG4gIGZhRXVyOiBmYUV1cixcbiAgZmFFdXJvOiBmYUV1cm8sXG4gIGZhQ2hhaXI6IGZhQ2hhaXIsXG4gIGZhQ2lyY2xlQ2hlY2s6IGZhQ2lyY2xlQ2hlY2ssXG4gIGZhQ2hlY2tDaXJjbGU6IGZhQ2hlY2tDaXJjbGUsXG4gIGZhQ2lyY2xlU3RvcDogZmFDaXJjbGVTdG9wLFxuICBmYVN0b3BDaXJjbGU6IGZhU3RvcENpcmNsZSxcbiAgZmFDb21wYXNzRHJhZnRpbmc6IGZhQ29tcGFzc0RyYWZ0aW5nLFxuICBmYURyYWZ0aW5nQ29tcGFzczogZmFEcmFmdGluZ0NvbXBhc3MsXG4gIGZhUGxhdGVXaGVhdDogZmFQbGF0ZVdoZWF0LFxuICBmYUljaWNsZXM6IGZhSWNpY2xlcyxcbiAgZmFQZXJzb25TaGVsdGVyOiBmYVBlcnNvblNoZWx0ZXIsXG4gIGZhTmV1dGVyOiBmYU5ldXRlcixcbiAgZmFJZEJhZGdlOiBmYUlkQmFkZ2UsXG4gIGZhTWFya2VyOiBmYU1hcmtlcixcbiAgZmFGYWNlTGF1Z2hCZWFtOiBmYUZhY2VMYXVnaEJlYW0sXG4gIGZhTGF1Z2hCZWFtOiBmYUxhdWdoQmVhbSxcbiAgZmFIZWxpY29wdGVyU3ltYm9sOiBmYUhlbGljb3B0ZXJTeW1ib2wsXG4gIGZhVW5pdmVyc2FsQWNjZXNzOiBmYVVuaXZlcnNhbEFjY2VzcyxcbiAgZmFDaXJjbGVDaGV2cm9uVXA6IGZhQ2lyY2xlQ2hldnJvblVwLFxuICBmYUNoZXZyb25DaXJjbGVVcDogZmFDaGV2cm9uQ2lyY2xlVXAsXG4gIGZhTGFyaVNpZ246IGZhTGFyaVNpZ24sXG4gIGZhVm9sY2FubzogZmFWb2xjYW5vLFxuICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodDogZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsXG4gIGZhU3RlcmxpbmdTaWduOiBmYVN0ZXJsaW5nU2lnbixcbiAgZmFHYnA6IGZhR2JwLFxuICBmYVBvdW5kU2lnbjogZmFQb3VuZFNpZ24sXG4gIGZhVmlydXNlczogZmFWaXJ1c2VzLFxuICBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkOiBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLFxuICBmYVVzZXJUaWU6IGZhVXNlclRpZSxcbiAgZmFBcnJvd0Rvd25Mb25nOiBmYUFycm93RG93bkxvbmcsXG4gIGZhTG9uZ0Fycm93RG93bjogZmFMb25nQXJyb3dEb3duLFxuICBmYVRlbnRBcnJvd0Rvd25Ub0xpbmU6IGZhVGVudEFycm93RG93blRvTGluZSxcbiAgZmFDZXJ0aWZpY2F0ZTogZmFDZXJ0aWZpY2F0ZSxcbiAgZmFSZXBseUFsbDogZmFSZXBseUFsbCxcbiAgZmFNYWlsUmVwbHlBbGw6IGZhTWFpbFJlcGx5QWxsLFxuICBmYVN1aXRjYXNlOiBmYVN1aXRjYXNlLFxuICBmYVBlcnNvblNrYXRpbmc6IGZhUGVyc29uU2thdGluZyxcbiAgZmFTa2F0aW5nOiBmYVNrYXRpbmcsXG4gIGZhRmlsdGVyQ2lyY2xlRG9sbGFyOiBmYUZpbHRlckNpcmNsZURvbGxhcixcbiAgZmFGdW5uZWxEb2xsYXI6IGZhRnVubmVsRG9sbGFyLFxuICBmYUNhbWVyYVJldHJvOiBmYUNhbWVyYVJldHJvLFxuICBmYUNpcmNsZUFycm93RG93bjogZmFDaXJjbGVBcnJvd0Rvd24sXG4gIGZhQXJyb3dDaXJjbGVEb3duOiBmYUFycm93Q2lyY2xlRG93bixcbiAgZmFGaWxlSW1wb3J0OiBmYUZpbGVJbXBvcnQsXG4gIGZhQXJyb3dSaWdodFRvRmlsZTogZmFBcnJvd1JpZ2h0VG9GaWxlLFxuICBmYVNxdWFyZUFycm93VXBSaWdodDogZmFTcXVhcmVBcnJvd1VwUmlnaHQsXG4gIGZhRXh0ZXJuYWxMaW5rU3F1YXJlOiBmYUV4dGVybmFsTGlua1NxdWFyZSxcbiAgZmFCb3hPcGVuOiBmYUJveE9wZW4sXG4gIGZhU2Nyb2xsOiBmYVNjcm9sbCxcbiAgZmFTcGE6IGZhU3BhLFxuICBmYUxvY2F0aW9uUGluTG9jazogZmFMb2NhdGlvblBpbkxvY2ssXG4gIGZhUGF1c2U6IGZhUGF1c2UsXG4gIGZhSGlsbEF2YWxhbmNoZTogZmFIaWxsQXZhbGFuY2hlLFxuICBmYVRlbXBlcmF0dXJlRW1wdHk6IGZhVGVtcGVyYXR1cmVFbXB0eSxcbiAgZmFUZW1wZXJhdHVyZTA6IGZhVGVtcGVyYXR1cmUwLFxuICBmYVRoZXJtb21ldGVyMDogZmFUaGVybW9tZXRlcjAsXG4gIGZhVGhlcm1vbWV0ZXJFbXB0eTogZmFUaGVybW9tZXRlckVtcHR5LFxuICBmYUJvbWI6IGZhQm9tYixcbiAgZmFSZWdpc3RlcmVkOiBmYVJlZ2lzdGVyZWQsXG4gIGZhQWRkcmVzc0NhcmQ6IGZhQWRkcmVzc0NhcmQsXG4gIGZhQ29udGFjdENhcmQ6IGZhQ29udGFjdENhcmQsXG4gIGZhVmNhcmQ6IGZhVmNhcmQsXG4gIGZhU2NhbGVVbmJhbGFuY2VkRmxpcDogZmFTY2FsZVVuYmFsYW5jZWRGbGlwLFxuICBmYUJhbGFuY2VTY2FsZVJpZ2h0OiBmYUJhbGFuY2VTY2FsZVJpZ2h0LFxuICBmYVN1YnNjcmlwdDogZmFTdWJzY3JpcHQsXG4gIGZhRGlhbW9uZFR1cm5SaWdodDogZmFEaWFtb25kVHVyblJpZ2h0LFxuICBmYURpcmVjdGlvbnM6IGZhRGlyZWN0aW9ucyxcbiAgZmFCdXJzdDogZmFCdXJzdCxcbiAgZmFIb3VzZUxhcHRvcDogZmFIb3VzZUxhcHRvcCxcbiAgZmFMYXB0b3BIb3VzZTogZmFMYXB0b3BIb3VzZSxcbiAgZmFGYWNlVGlyZWQ6IGZhRmFjZVRpcmVkLFxuICBmYVRpcmVkOiBmYVRpcmVkLFxuICBmYU1vbmV5QmlsbHM6IGZhTW9uZXlCaWxscyxcbiAgZmFTbW9nOiBmYVNtb2csXG4gIGZhQ3J1dGNoOiBmYUNydXRjaCxcbiAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZSxcbiAgZmFGb250QXdlc29tZUZsYWc6IGZhRm9udEF3ZXNvbWVGbGFnLFxuICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbCxcbiAgZmFDbG91ZEFycm93VXA6IGZhQ2xvdWRBcnJvd1VwLFxuICBmYUNsb3VkVXBsb2FkOiBmYUNsb3VkVXBsb2FkLFxuICBmYUNsb3VkVXBsb2FkQWx0OiBmYUNsb3VkVXBsb2FkQWx0LFxuICBmYVBhbGV0dGU6IGZhUGFsZXR0ZSxcbiAgZmFBcnJvd3NUdXJuUmlnaHQ6IGZhQXJyb3dzVHVyblJpZ2h0LFxuICBmYVZlc3Q6IGZhVmVzdCxcbiAgZmFGZXJyeTogZmFGZXJyeSxcbiAgZmFBcnJvd3NEb3duVG9QZW9wbGU6IGZhQXJyb3dzRG93blRvUGVvcGxlLFxuICBmYVNlZWRsaW5nOiBmYVNlZWRsaW5nLFxuICBmYVNwcm91dDogZmFTcHJvdXQsXG4gIGZhTGVmdFJpZ2h0OiBmYUxlZnRSaWdodCxcbiAgZmFBcnJvd3NBbHRIOiBmYUFycm93c0FsdEgsXG4gIGZhQm94ZXNQYWNraW5nOiBmYUJveGVzUGFja2luZyxcbiAgZmFDaXJjbGVBcnJvd0xlZnQ6IGZhQ2lyY2xlQXJyb3dMZWZ0LFxuICBmYUFycm93Q2lyY2xlTGVmdDogZmFBcnJvd0NpcmNsZUxlZnQsXG4gIGZhR3JvdXBBcnJvd3NSb3RhdGU6IGZhR3JvdXBBcnJvd3NSb3RhdGUsXG4gIGZhQm93bEZvb2Q6IGZhQm93bEZvb2QsXG4gIGZhQ2FuZHlDYW5lOiBmYUNhbmR5Q2FuZSxcbiAgZmFBcnJvd0Rvd25XaWRlU2hvcnQ6IGZhQXJyb3dEb3duV2lkZVNob3J0LFxuICBmYVNvcnRBbW91bnRBc2M6IGZhU29ydEFtb3VudEFzYyxcbiAgZmFTb3J0QW1vdW50RG93bjogZmFTb3J0QW1vdW50RG93bixcbiAgZmFDbG91ZEJvbHQ6IGZhQ2xvdWRCb2x0LFxuICBmYVRodW5kZXJzdG9ybTogZmFUaHVuZGVyc3Rvcm0sXG4gIGZhVGV4dFNsYXNoOiBmYVRleHRTbGFzaCxcbiAgZmFSZW1vdmVGb3JtYXQ6IGZhUmVtb3ZlRm9ybWF0LFxuICBmYUZhY2VTbWlsZVdpbms6IGZhRmFjZVNtaWxlV2luayxcbiAgZmFTbWlsZVdpbms6IGZhU21pbGVXaW5rLFxuICBmYUZpbGVXb3JkOiBmYUZpbGVXb3JkLFxuICBmYUZpbGVQb3dlcnBvaW50OiBmYUZpbGVQb3dlcnBvaW50LFxuICBmYUFycm93c0xlZnRSaWdodDogZmFBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhQXJyb3dzSDogZmFBcnJvd3NILFxuICBmYUhvdXNlTG9jazogZmFIb3VzZUxvY2ssXG4gIGZhQ2xvdWRBcnJvd0Rvd246IGZhQ2xvdWRBcnJvd0Rvd24sXG4gIGZhQ2xvdWREb3dubG9hZDogZmFDbG91ZERvd25sb2FkLFxuICBmYUNsb3VkRG93bmxvYWRBbHQ6IGZhQ2xvdWREb3dubG9hZEFsdCxcbiAgZmFDaGlsZHJlbjogZmFDaGlsZHJlbixcbiAgZmFDaGFsa2JvYXJkOiBmYUNoYWxrYm9hcmQsXG4gIGZhQmxhY2tib2FyZDogZmFCbGFja2JvYXJkLFxuICBmYVVzZXJMYXJnZVNsYXNoOiBmYVVzZXJMYXJnZVNsYXNoLFxuICBmYVVzZXJBbHRTbGFzaDogZmFVc2VyQWx0U2xhc2gsXG4gIGZhRW52ZWxvcGVPcGVuOiBmYUVudmVsb3BlT3BlbixcbiAgZmFIYW5kc2hha2VTaW1wbGVTbGFzaDogZmFIYW5kc2hha2VTaW1wbGVTbGFzaCxcbiAgZmFIYW5kc2hha2VBbHRTbGFzaDogZmFIYW5kc2hha2VBbHRTbGFzaCxcbiAgZmFNYXR0cmVzc1BpbGxvdzogZmFNYXR0cmVzc1BpbGxvdyxcbiAgZmFHdWFyYW5pU2lnbjogZmFHdWFyYW5pU2lnbixcbiAgZmFBcnJvd3NSb3RhdGU6IGZhQXJyb3dzUm90YXRlLFxuICBmYVJlZnJlc2g6IGZhUmVmcmVzaCxcbiAgZmFTeW5jOiBmYVN5bmMsXG4gIGZhRmlyZUV4dGluZ3Vpc2hlcjogZmFGaXJlRXh0aW5ndWlzaGVyLFxuICBmYUNydXplaXJvU2lnbjogZmFDcnV6ZWlyb1NpZ24sXG4gIGZhR3JlYXRlclRoYW5FcXVhbDogZmFHcmVhdGVyVGhhbkVxdWFsLFxuICBmYVNoaWVsZEhhbHZlZDogZmFTaGllbGRIYWx2ZWQsXG4gIGZhU2hpZWxkQWx0OiBmYVNoaWVsZEFsdCxcbiAgZmFCb29rQXRsYXM6IGZhQm9va0F0bGFzLFxuICBmYUF0bGFzOiBmYUF0bGFzLFxuICBmYVZpcnVzOiBmYVZpcnVzLFxuICBmYUVudmVsb3BlQ2lyY2xlQ2hlY2s6IGZhRW52ZWxvcGVDaXJjbGVDaGVjayxcbiAgZmFMYXllckdyb3VwOiBmYUxheWVyR3JvdXAsXG4gIGZhQXJyb3dzVG9Eb3Q6IGZhQXJyb3dzVG9Eb3QsXG4gIGZhQXJjaHdheTogZmFBcmNod2F5LFxuICBmYUhlYXJ0Q2lyY2xlQ2hlY2s6IGZhSGVhcnRDaXJjbGVDaGVjayxcbiAgZmFIb3VzZUNoaW1uZXlDcmFjazogZmFIb3VzZUNoaW1uZXlDcmFjayxcbiAgZmFIb3VzZURhbWFnZTogZmFIb3VzZURhbWFnZSxcbiAgZmFGaWxlWmlwcGVyOiBmYUZpbGVaaXBwZXIsXG4gIGZhRmlsZUFyY2hpdmU6IGZhRmlsZUFyY2hpdmUsXG4gIGZhU3F1YXJlOiBmYVNxdWFyZSxcbiAgZmFNYXJ0aW5pR2xhc3NFbXB0eTogZmFNYXJ0aW5pR2xhc3NFbXB0eSxcbiAgZmFHbGFzc01hcnRpbmk6IGZhR2xhc3NNYXJ0aW5pLFxuICBmYUNvdWNoOiBmYUNvdWNoLFxuICBmYUNlZGlTaWduOiBmYUNlZGlTaWduLFxuICBmYUl0YWxpYzogZmFJdGFsaWMsXG4gIGZhVGFibGVDZWxsc0NvbHVtbkxvY2s6IGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssXG4gIGZhQ2h1cmNoOiBmYUNodXJjaCxcbiAgZmFDb21tZW50c0RvbGxhcjogZmFDb21tZW50c0RvbGxhcixcbiAgZmFEZW1vY3JhdDogZmFEZW1vY3JhdCxcbiAgZmFaOiBmYVosXG4gIGZhUGVyc29uU2tpaW5nOiBmYVBlcnNvblNraWluZyxcbiAgZmFTa2lpbmc6IGZhU2tpaW5nLFxuICBmYVJvYWRMb2NrOiBmYVJvYWRMb2NrLFxuICBmYUE6IGZhQSxcbiAgZmFUZW1wZXJhdHVyZUFycm93RG93bjogZmFUZW1wZXJhdHVyZUFycm93RG93bixcbiAgZmFUZW1wZXJhdHVyZURvd246IGZhVGVtcGVyYXR1cmVEb3duLFxuICBmYUZlYXRoZXJQb2ludGVkOiBmYUZlYXRoZXJQb2ludGVkLFxuICBmYUZlYXRoZXJBbHQ6IGZhRmVhdGhlckFsdCxcbiAgZmFQOiBmYVAsXG4gIGZhU25vd2ZsYWtlOiBmYVNub3dmbGFrZSxcbiAgZmFOZXdzcGFwZXI6IGZhTmV3c3BhcGVyLFxuICBmYVJlY3RhbmdsZUFkOiBmYVJlY3RhbmdsZUFkLFxuICBmYUFkOiBmYUFkLFxuICBmYUNpcmNsZUFycm93UmlnaHQ6IGZhQ2lyY2xlQXJyb3dSaWdodCxcbiAgZmFBcnJvd0NpcmNsZVJpZ2h0OiBmYUFycm93Q2lyY2xlUmlnaHQsXG4gIGZhRmlsdGVyQ2lyY2xlWG1hcms6IGZhRmlsdGVyQ2lyY2xlWG1hcmssXG4gIGZhTG9jdXN0OiBmYUxvY3VzdCxcbiAgZmFTb3J0OiBmYVNvcnQsXG4gIGZhVW5zb3J0ZWQ6IGZhVW5zb3J0ZWQsXG4gIGZhTGlzdE9sOiBmYUxpc3RPbCxcbiAgZmFMaXN0MTI6IGZhTGlzdDEyLFxuICBmYUxpc3ROdW1lcmljOiBmYUxpc3ROdW1lcmljLFxuICBmYVBlcnNvbkRyZXNzQnVyc3Q6IGZhUGVyc29uRHJlc3NCdXJzdCxcbiAgZmFNb25leUNoZWNrRG9sbGFyOiBmYU1vbmV5Q2hlY2tEb2xsYXIsXG4gIGZhTW9uZXlDaGVja0FsdDogZmFNb25leUNoZWNrQWx0LFxuICBmYVZlY3RvclNxdWFyZTogZmFWZWN0b3JTcXVhcmUsXG4gIGZhQnJlYWRTbGljZTogZmFCcmVhZFNsaWNlLFxuICBmYUxhbmd1YWdlOiBmYUxhbmd1YWdlLFxuICBmYUZhY2VLaXNzV2lua0hlYXJ0OiBmYUZhY2VLaXNzV2lua0hlYXJ0LFxuICBmYUtpc3NXaW5rSGVhcnQ6IGZhS2lzc1dpbmtIZWFydCxcbiAgZmFGaWx0ZXI6IGZhRmlsdGVyLFxuICBmYVF1ZXN0aW9uOiBmYVF1ZXN0aW9uLFxuICBmYUZpbGVTaWduYXR1cmU6IGZhRmlsZVNpZ25hdHVyZSxcbiAgZmFVcERvd25MZWZ0UmlnaHQ6IGZhVXBEb3duTGVmdFJpZ2h0LFxuICBmYUFycm93c0FsdDogZmFBcnJvd3NBbHQsXG4gIGZhSG91c2VDaGltbmV5VXNlcjogZmFIb3VzZUNoaW1uZXlVc2VyLFxuICBmYUhhbmRIb2xkaW5nSGVhcnQ6IGZhSGFuZEhvbGRpbmdIZWFydCxcbiAgZmFQdXp6bGVQaWVjZTogZmFQdXp6bGVQaWVjZSxcbiAgZmFNb25leUNoZWNrOiBmYU1vbmV5Q2hlY2ssXG4gIGZhU3RhckhhbGZTdHJva2U6IGZhU3RhckhhbGZTdHJva2UsXG4gIGZhU3RhckhhbGZBbHQ6IGZhU3RhckhhbGZBbHQsXG4gIGZhQ29kZTogZmFDb2RlLFxuICBmYVdoaXNrZXlHbGFzczogZmFXaGlza2V5R2xhc3MsXG4gIGZhR2xhc3NXaGlza2V5OiBmYUdsYXNzV2hpc2tleSxcbiAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uOiBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQ6IGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsXG4gIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLFxuICBmYUV4dGVybmFsTGluazogZmFFeHRlcm5hbExpbmssXG4gIGZhQ3ViZXNTdGFja2VkOiBmYUN1YmVzU3RhY2tlZCxcbiAgZmFXb25TaWduOiBmYVdvblNpZ24sXG4gIGZhS3J3OiBmYUtydyxcbiAgZmFXb246IGZhV29uLFxuICBmYVZpcnVzQ292aWQ6IGZhVmlydXNDb3ZpZCxcbiAgZmFBdXN0cmFsU2lnbjogZmFBdXN0cmFsU2lnbixcbiAgZmFGOiBmYUYsXG4gIGZhTGVhZjogZmFMZWFmLFxuICBmYVJvYWQ6IGZhUm9hZCxcbiAgZmFUYXhpOiBmYVRheGksXG4gIGZhQ2FiOiBmYUNhYixcbiAgZmFQZXJzb25DaXJjbGVQbHVzOiBmYVBlcnNvbkNpcmNsZVBsdXMsXG4gIGZhQ2hhcnRQaWU6IGZhQ2hhcnRQaWUsXG4gIGZhUGllQ2hhcnQ6IGZhUGllQ2hhcnQsXG4gIGZhQm9sdExpZ2h0bmluZzogZmFCb2x0TGlnaHRuaW5nLFxuICBmYVNhY2tYbWFyazogZmFTYWNrWG1hcmssXG4gIGZhRmlsZUV4Y2VsOiBmYUZpbGVFeGNlbCxcbiAgZmFGaWxlQ29udHJhY3Q6IGZhRmlsZUNvbnRyYWN0LFxuICBmYUZpc2hGaW5zOiBmYUZpc2hGaW5zLFxuICBmYUJ1aWxkaW5nRmxhZzogZmFCdWlsZGluZ0ZsYWcsXG4gIGZhRmFjZUdyaW5CZWFtOiBmYUZhY2VHcmluQmVhbSxcbiAgZmFHcmluQmVhbTogZmFHcmluQmVhbSxcbiAgZmFPYmplY3RVbmdyb3VwOiBmYU9iamVjdFVuZ3JvdXAsXG4gIGZhUG9vcDogZmFQb29wLFxuICBmYUxvY2F0aW9uUGluOiBmYUxvY2F0aW9uUGluLFxuICBmYU1hcE1hcmtlcjogZmFNYXBNYXJrZXIsXG4gIGZhS2FhYmE6IGZhS2FhYmEsXG4gIGZhVG9pbGV0UGFwZXI6IGZhVG9pbGV0UGFwZXIsXG4gIGZhSGVsbWV0U2FmZXR5OiBmYUhlbG1ldFNhZmV0eSxcbiAgZmFIYXJkSGF0OiBmYUhhcmRIYXQsXG4gIGZhSGF0SGFyZDogZmFIYXRIYXJkLFxuICBmYUVqZWN0OiBmYUVqZWN0LFxuICBmYUNpcmNsZVJpZ2h0OiBmYUNpcmNsZVJpZ2h0LFxuICBmYUFycm93QWx0Q2lyY2xlUmlnaHQ6IGZhQXJyb3dBbHRDaXJjbGVSaWdodCxcbiAgZmFQbGFuZUNpcmNsZUNoZWNrOiBmYVBsYW5lQ2lyY2xlQ2hlY2ssXG4gIGZhRmFjZVJvbGxpbmdFeWVzOiBmYUZhY2VSb2xsaW5nRXllcyxcbiAgZmFNZWhSb2xsaW5nRXllczogZmFNZWhSb2xsaW5nRXllcyxcbiAgZmFPYmplY3RHcm91cDogZmFPYmplY3RHcm91cCxcbiAgZmFDaGFydExpbmU6IGZhQ2hhcnRMaW5lLFxuICBmYUxpbmVDaGFydDogZmFMaW5lQ2hhcnQsXG4gIGZhTWFza1ZlbnRpbGF0b3I6IGZhTWFza1ZlbnRpbGF0b3IsXG4gIGZhQXJyb3dSaWdodDogZmFBcnJvd1JpZ2h0LFxuICBmYVNpZ25zUG9zdDogZmFTaWduc1Bvc3QsXG4gIGZhTWFwU2lnbnM6IGZhTWFwU2lnbnMsXG4gIGZhQ2FzaFJlZ2lzdGVyOiBmYUNhc2hSZWdpc3RlcixcbiAgZmFQZXJzb25DaXJjbGVRdWVzdGlvbjogZmFQZXJzb25DaXJjbGVRdWVzdGlvbixcbiAgZmFIOiBmYUgsXG4gIGZhVGFycDogZmFUYXJwLFxuICBmYVNjcmV3ZHJpdmVyV3JlbmNoOiBmYVNjcmV3ZHJpdmVyV3JlbmNoLFxuICBmYVRvb2xzOiBmYVRvb2xzLFxuICBmYUFycm93c1RvRXllOiBmYUFycm93c1RvRXllLFxuICBmYVBsdWdDaXJjbGVCb2x0OiBmYVBsdWdDaXJjbGVCb2x0LFxuICBmYUhlYXJ0OiBmYUhlYXJ0LFxuICBmYU1hcnNBbmRWZW51czogZmFNYXJzQW5kVmVudXMsXG4gIGZhSG91c2VVc2VyOiBmYUhvdXNlVXNlcixcbiAgZmFIb21lVXNlcjogZmFIb21lVXNlcixcbiAgZmFEdW1wc3RlckZpcmU6IGZhRHVtcHN0ZXJGaXJlLFxuICBmYUhvdXNlQ3JhY2s6IGZhSG91c2VDcmFjayxcbiAgZmFNYXJ0aW5pR2xhc3NDaXRydXM6IGZhTWFydGluaUdsYXNzQ2l0cnVzLFxuICBmYUNvY2t0YWlsOiBmYUNvY2t0YWlsLFxuICBmYUZhY2VTdXJwcmlzZTogZmFGYWNlU3VycHJpc2UsXG4gIGZhU3VycHJpc2U6IGZhU3VycHJpc2UsXG4gIGZhQm90dGxlV2F0ZXI6IGZhQm90dGxlV2F0ZXIsXG4gIGZhQ2lyY2xlUGF1c2U6IGZhQ2lyY2xlUGF1c2UsXG4gIGZhUGF1c2VDaXJjbGU6IGZhUGF1c2VDaXJjbGUsXG4gIGZhVG9pbGV0UGFwZXJTbGFzaDogZmFUb2lsZXRQYXBlclNsYXNoLFxuICBmYUFwcGxlV2hvbGU6IGZhQXBwbGVXaG9sZSxcbiAgZmFBcHBsZUFsdDogZmFBcHBsZUFsdCxcbiAgZmFLaXRjaGVuU2V0OiBmYUtpdGNoZW5TZXQsXG4gIGZhUjogZmFSLFxuICBmYVRlbXBlcmF0dXJlUXVhcnRlcjogZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsXG4gIGZhVGVtcGVyYXR1cmUxOiBmYVRlbXBlcmF0dXJlMSxcbiAgZmFUaGVybW9tZXRlcjE6IGZhVGhlcm1vbWV0ZXIxLFxuICBmYVRoZXJtb21ldGVyUXVhcnRlcjogZmFUaGVybW9tZXRlclF1YXJ0ZXIsXG4gIGZhQ3ViZTogZmFDdWJlLFxuICBmYUJpdGNvaW5TaWduOiBmYUJpdGNvaW5TaWduLFxuICBmYVNoaWVsZERvZzogZmFTaGllbGREb2csXG4gIGZhU29sYXJQYW5lbDogZmFTb2xhclBhbmVsLFxuICBmYUxvY2tPcGVuOiBmYUxvY2tPcGVuLFxuICBmYUVsZXZhdG9yOiBmYUVsZXZhdG9yLFxuICBmYU1vbmV5QmlsbFRyYW5zZmVyOiBmYU1vbmV5QmlsbFRyYW5zZmVyLFxuICBmYU1vbmV5QmlsbFRyZW5kVXA6IGZhTW9uZXlCaWxsVHJlbmRVcCxcbiAgZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0OiBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsXG4gIGZhU3F1YXJlUG9sbEhvcml6b250YWw6IGZhU3F1YXJlUG9sbEhvcml6b250YWwsXG4gIGZhUG9sbEg6IGZhUG9sbEgsXG4gIGZhQ2lyY2xlOiBmYUNpcmNsZSxcbiAgZmFCYWNrd2FyZEZhc3Q6IGZhQmFja3dhcmRGYXN0LFxuICBmYUZhc3RCYWNrd2FyZDogZmFGYXN0QmFja3dhcmQsXG4gIGZhUmVjeWNsZTogZmFSZWN5Y2xlLFxuICBmYVVzZXJBc3Ryb25hdXQ6IGZhVXNlckFzdHJvbmF1dCxcbiAgZmFQbGFuZVNsYXNoOiBmYVBsYW5lU2xhc2gsXG4gIGZhVHJhZGVtYXJrOiBmYVRyYWRlbWFyayxcbiAgZmFCYXNrZXRiYWxsOiBmYUJhc2tldGJhbGwsXG4gIGZhQmFza2V0YmFsbEJhbGw6IGZhQmFza2V0YmFsbEJhbGwsXG4gIGZhU2F0ZWxsaXRlRGlzaDogZmFTYXRlbGxpdGVEaXNoLFxuICBmYUNpcmNsZVVwOiBmYUNpcmNsZVVwLFxuICBmYUFycm93QWx0Q2lyY2xlVXA6IGZhQXJyb3dBbHRDaXJjbGVVcCxcbiAgZmFNb2JpbGVTY3JlZW5CdXR0b246IGZhTW9iaWxlU2NyZWVuQnV0dG9uLFxuICBmYU1vYmlsZUFsdDogZmFNb2JpbGVBbHQsXG4gIGZhVm9sdW1lSGlnaDogZmFWb2x1bWVIaWdoLFxuICBmYVZvbHVtZVVwOiBmYVZvbHVtZVVwLFxuICBmYVVzZXJzUmF5czogZmFVc2Vyc1JheXMsXG4gIGZhV2FsbGV0OiBmYVdhbGxldCxcbiAgZmFDbGlwYm9hcmRDaGVjazogZmFDbGlwYm9hcmRDaGVjayxcbiAgZmFGaWxlQXVkaW86IGZhRmlsZUF1ZGlvLFxuICBmYUJ1cmdlcjogZmFCdXJnZXIsXG4gIGZhSGFtYnVyZ2VyOiBmYUhhbWJ1cmdlcixcbiAgZmFXcmVuY2g6IGZhV3JlbmNoLFxuICBmYUJ1Z3M6IGZhQnVncyxcbiAgZmFSdXBlZVNpZ246IGZhUnVwZWVTaWduLFxuICBmYVJ1cGVlOiBmYVJ1cGVlLFxuICBmYUZpbGVJbWFnZTogZmFGaWxlSW1hZ2UsXG4gIGZhQ2lyY2xlUXVlc3Rpb246IGZhQ2lyY2xlUXVlc3Rpb24sXG4gIGZhUXVlc3Rpb25DaXJjbGU6IGZhUXVlc3Rpb25DaXJjbGUsXG4gIGZhUGxhbmVEZXBhcnR1cmU6IGZhUGxhbmVEZXBhcnR1cmUsXG4gIGZhSGFuZHNoYWtlU2xhc2g6IGZhSGFuZHNoYWtlU2xhc2gsXG4gIGZhQm9va0Jvb2ttYXJrOiBmYUJvb2tCb29rbWFyayxcbiAgZmFDb2RlQnJhbmNoOiBmYUNvZGVCcmFuY2gsXG4gIGZhSGF0Q293Ym95OiBmYUhhdENvd2JveSxcbiAgZmFCcmlkZ2U6IGZhQnJpZGdlLFxuICBmYVBob25lRmxpcDogZmFQaG9uZUZsaXAsXG4gIGZhUGhvbmVBbHQ6IGZhUGhvbmVBbHQsXG4gIGZhVHJ1Y2tGcm9udDogZmFUcnVja0Zyb250LFxuICBmYUNhdDogZmFDYXQsXG4gIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb246IGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhVHJ1Y2tGaWVsZDogZmFUcnVja0ZpZWxkLFxuICBmYVJvdXRlOiBmYVJvdXRlLFxuICBmYUNsaXBib2FyZFF1ZXN0aW9uOiBmYUNsaXBib2FyZFF1ZXN0aW9uLFxuICBmYVBhbm9yYW1hOiBmYVBhbm9yYW1hLFxuICBmYUNvbW1lbnRNZWRpY2FsOiBmYUNvbW1lbnRNZWRpY2FsLFxuICBmYVRlZXRoT3BlbjogZmFUZWV0aE9wZW4sXG4gIGZhRmlsZUNpcmNsZU1pbnVzOiBmYUZpbGVDaXJjbGVNaW51cyxcbiAgZmFUYWdzOiBmYVRhZ3MsXG4gIGZhV2luZUdsYXNzOiBmYVdpbmVHbGFzcyxcbiAgZmFGb3J3YXJkRmFzdDogZmFGb3J3YXJkRmFzdCxcbiAgZmFGYXN0Rm9yd2FyZDogZmFGYXN0Rm9yd2FyZCxcbiAgZmFGYWNlTWVoQmxhbms6IGZhRmFjZU1laEJsYW5rLFxuICBmYU1laEJsYW5rOiBmYU1laEJsYW5rLFxuICBmYVNxdWFyZVBhcmtpbmc6IGZhU3F1YXJlUGFya2luZyxcbiAgZmFQYXJraW5nOiBmYVBhcmtpbmcsXG4gIGZhSG91c2VTaWduYWw6IGZhSG91c2VTaWduYWwsXG4gIGZhQmFyc1Byb2dyZXNzOiBmYUJhcnNQcm9ncmVzcyxcbiAgZmFUYXNrc0FsdDogZmFUYXNrc0FsdCxcbiAgZmFGYXVjZXREcmlwOiBmYUZhdWNldERyaXAsXG4gIGZhQ2FydEZsYXRiZWQ6IGZhQ2FydEZsYXRiZWQsXG4gIGZhRG9sbHlGbGF0YmVkOiBmYURvbGx5RmxhdGJlZCxcbiAgZmFCYW5TbW9raW5nOiBmYUJhblNtb2tpbmcsXG4gIGZhU21va2luZ0JhbjogZmFTbW9raW5nQmFuLFxuICBmYVRlcm1pbmFsOiBmYVRlcm1pbmFsLFxuICBmYU1vYmlsZUJ1dHRvbjogZmFNb2JpbGVCdXR0b24sXG4gIGZhSG91c2VNZWRpY2FsRmxhZzogZmFIb3VzZU1lZGljYWxGbGFnLFxuICBmYUJhc2tldFNob3BwaW5nOiBmYUJhc2tldFNob3BwaW5nLFxuICBmYVNob3BwaW5nQmFza2V0OiBmYVNob3BwaW5nQmFza2V0LFxuICBmYVRhcGU6IGZhVGFwZSxcbiAgZmFCdXNTaW1wbGU6IGZhQnVzU2ltcGxlLFxuICBmYUJ1c0FsdDogZmFCdXNBbHQsXG4gIGZhRXllOiBmYUV5ZSxcbiAgZmFGYWNlU2FkQ3J5OiBmYUZhY2VTYWRDcnksXG4gIGZhU2FkQ3J5OiBmYVNhZENyeSxcbiAgZmFBdWRpb0Rlc2NyaXB0aW9uOiBmYUF1ZGlvRGVzY3JpcHRpb24sXG4gIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbjogZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uLFxuICBmYUZpbGVTaGllbGQ6IGZhRmlsZVNoaWVsZCxcbiAgZmFVc2VyU2xhc2g6IGZhVXNlclNsYXNoLFxuICBmYVBlbjogZmFQZW4sXG4gIGZhVG93ZXJPYnNlcnZhdGlvbjogZmFUb3dlck9ic2VydmF0aW9uLFxuICBmYUZpbGVDb2RlOiBmYUZpbGVDb2RlLFxuICBmYVNpZ25hbDogZmFTaWduYWwsXG4gIGZhU2lnbmFsNTogZmFTaWduYWw1LFxuICBmYVNpZ25hbFBlcmZlY3Q6IGZhU2lnbmFsUGVyZmVjdCxcbiAgZmFCdXM6IGZhQnVzLFxuICBmYUhlYXJ0Q2lyY2xlWG1hcms6IGZhSGVhcnRDaXJjbGVYbWFyayxcbiAgZmFIb3VzZUNoaW1uZXk6IGZhSG91c2VDaGltbmV5LFxuICBmYUhvbWVMZzogZmFIb21lTGcsXG4gIGZhV2luZG93TWF4aW1pemU6IGZhV2luZG93TWF4aW1pemUsXG4gIGZhRmFjZUZyb3duOiBmYUZhY2VGcm93bixcbiAgZmFGcm93bjogZmFGcm93bixcbiAgZmFQcmVzY3JpcHRpb246IGZhUHJlc2NyaXB0aW9uLFxuICBmYVNob3A6IGZhU2hvcCxcbiAgZmFTdG9yZUFsdDogZmFTdG9yZUFsdCxcbiAgZmFGbG9wcHlEaXNrOiBmYUZsb3BweURpc2ssXG4gIGZhU2F2ZTogZmFTYXZlLFxuICBmYVZpaGFyYTogZmFWaWhhcmEsXG4gIGZhU2NhbGVVbmJhbGFuY2VkOiBmYVNjYWxlVW5iYWxhbmNlZCxcbiAgZmFCYWxhbmNlU2NhbGVMZWZ0OiBmYUJhbGFuY2VTY2FsZUxlZnQsXG4gIGZhU29ydFVwOiBmYVNvcnRVcCxcbiAgZmFTb3J0QXNjOiBmYVNvcnRBc2MsXG4gIGZhQ29tbWVudERvdHM6IGZhQ29tbWVudERvdHMsXG4gIGZhQ29tbWVudGluZzogZmFDb21tZW50aW5nLFxuICBmYVBsYW50V2lsdDogZmFQbGFudFdpbHQsXG4gIGZhRGlhbW9uZDogZmFEaWFtb25kLFxuICBmYUZhY2VHcmluU3F1aW50OiBmYUZhY2VHcmluU3F1aW50LFxuICBmYUdyaW5TcXVpbnQ6IGZhR3JpblNxdWludCxcbiAgZmFIYW5kSG9sZGluZ0RvbGxhcjogZmFIYW5kSG9sZGluZ0RvbGxhcixcbiAgZmFIYW5kSG9sZGluZ1VzZDogZmFIYW5kSG9sZGluZ1VzZCxcbiAgZmFCYWN0ZXJpdW06IGZhQmFjdGVyaXVtLFxuICBmYUhhbmRQb2ludGVyOiBmYUhhbmRQb2ludGVyLFxuICBmYURydW1TdGVlbHBhbjogZmFEcnVtU3RlZWxwYW4sXG4gIGZhSGFuZFNjaXNzb3JzOiBmYUhhbmRTY2lzc29ycyxcbiAgZmFIYW5kc1ByYXlpbmc6IGZhSGFuZHNQcmF5aW5nLFxuICBmYVByYXlpbmdIYW5kczogZmFQcmF5aW5nSGFuZHMsXG4gIGZhQXJyb3dSb3RhdGVSaWdodDogZmFBcnJvd1JvdGF0ZVJpZ2h0LFxuICBmYUFycm93UmlnaHRSb3RhdGU6IGZhQXJyb3dSaWdodFJvdGF0ZSxcbiAgZmFBcnJvd1JvdGF0ZUZvcndhcmQ6IGZhQXJyb3dSb3RhdGVGb3J3YXJkLFxuICBmYVJlZG86IGZhUmVkbyxcbiAgZmFCaW9oYXphcmQ6IGZhQmlvaGF6YXJkLFxuICBmYUxvY2F0aW9uQ3Jvc3NoYWlyczogZmFMb2NhdGlvbkNyb3NzaGFpcnMsXG4gIGZhTG9jYXRpb246IGZhTG9jYXRpb24sXG4gIGZhTWFyc0RvdWJsZTogZmFNYXJzRG91YmxlLFxuICBmYUNoaWxkRHJlc3M6IGZhQ2hpbGREcmVzcyxcbiAgZmFVc2Vyc0JldHdlZW5MaW5lczogZmFVc2Vyc0JldHdlZW5MaW5lcyxcbiAgZmFMdW5nc1ZpcnVzOiBmYUx1bmdzVmlydXMsXG4gIGZhRmFjZUdyaW5UZWFyczogZmFGYWNlR3JpblRlYXJzLFxuICBmYUdyaW5UZWFyczogZmFHcmluVGVhcnMsXG4gIGZhUGhvbmU6IGZhUGhvbmUsXG4gIGZhQ2FsZW5kYXJYbWFyazogZmFDYWxlbmRhclhtYXJrLFxuICBmYUNhbGVuZGFyVGltZXM6IGZhQ2FsZW5kYXJUaW1lcyxcbiAgZmFDaGlsZFJlYWNoaW5nOiBmYUNoaWxkUmVhY2hpbmcsXG4gIGZhSGVhZFNpZGVWaXJ1czogZmFIZWFkU2lkZVZpcnVzLFxuICBmYVVzZXJHZWFyOiBmYVVzZXJHZWFyLFxuICBmYVVzZXJDb2c6IGZhVXNlckNvZyxcbiAgZmFBcnJvd1VwMTk6IGZhQXJyb3dVcDE5LFxuICBmYVNvcnROdW1lcmljVXA6IGZhU29ydE51bWVyaWNVcCxcbiAgZmFEb29yQ2xvc2VkOiBmYURvb3JDbG9zZWQsXG4gIGZhU2hpZWxkVmlydXM6IGZhU2hpZWxkVmlydXMsXG4gIGZhRGljZVNpeDogZmFEaWNlU2l4LFxuICBmYU1vc3F1aXRvTmV0OiBmYU1vc3F1aXRvTmV0LFxuICBmYUJyaWRnZVdhdGVyOiBmYUJyaWRnZVdhdGVyLFxuICBmYVBlcnNvbkJvb3RoOiBmYVBlcnNvbkJvb3RoLFxuICBmYVRleHRXaWR0aDogZmFUZXh0V2lkdGgsXG4gIGZhSGF0V2l6YXJkOiBmYUhhdFdpemFyZCxcbiAgZmFQZW5GYW5jeTogZmFQZW5GYW5jeSxcbiAgZmFQZXJzb25EaWdnaW5nOiBmYVBlcnNvbkRpZ2dpbmcsXG4gIGZhRGlnZ2luZzogZmFEaWdnaW5nLFxuICBmYVRyYXNoOiBmYVRyYXNoLFxuICBmYUdhdWdlU2ltcGxlOiBmYUdhdWdlU2ltcGxlLFxuICBmYUdhdWdlU2ltcGxlTWVkOiBmYUdhdWdlU2ltcGxlTWVkLFxuICBmYVRhY2hvbWV0ZXJBdmVyYWdlOiBmYVRhY2hvbWV0ZXJBdmVyYWdlLFxuICBmYUJvb2tNZWRpY2FsOiBmYUJvb2tNZWRpY2FsLFxuICBmYVBvbzogZmFQb28sXG4gIGZhUXVvdGVSaWdodDogZmFRdW90ZVJpZ2h0LFxuICBmYVF1b3RlUmlnaHRBbHQ6IGZhUXVvdGVSaWdodEFsdCxcbiAgZmFTaGlydDogZmFTaGlydCxcbiAgZmFUU2hpcnQ6IGZhVFNoaXJ0LFxuICBmYVRzaGlydDogZmFUc2hpcnQsXG4gIGZhQ3ViZXM6IGZhQ3ViZXMsXG4gIGZhRGl2aWRlOiBmYURpdmlkZSxcbiAgZmFUZW5nZVNpZ246IGZhVGVuZ2VTaWduLFxuICBmYVRlbmdlOiBmYVRlbmdlLFxuICBmYUhlYWRwaG9uZXM6IGZhSGVhZHBob25lcyxcbiAgZmFIYW5kc0hvbGRpbmc6IGZhSGFuZHNIb2xkaW5nLFxuICBmYUhhbmRzQ2xhcHBpbmc6IGZhSGFuZHNDbGFwcGluZyxcbiAgZmFSZXB1YmxpY2FuOiBmYVJlcHVibGljYW4sXG4gIGZhQXJyb3dMZWZ0OiBmYUFycm93TGVmdCxcbiAgZmFQZXJzb25DaXJjbGVYbWFyazogZmFQZXJzb25DaXJjbGVYbWFyayxcbiAgZmFSdWxlcjogZmFSdWxlcixcbiAgZmFBbGlnbkxlZnQ6IGZhQWxpZ25MZWZ0LFxuICBmYURpY2VENjogZmFEaWNlRDYsXG4gIGZhUmVzdHJvb206IGZhUmVzdHJvb20sXG4gIGZhSjogZmFKLFxuICBmYVVzZXJzVmlld2ZpbmRlcjogZmFVc2Vyc1ZpZXdmaW5kZXIsXG4gIGZhRmlsZVZpZGVvOiBmYUZpbGVWaWRlbyxcbiAgZmFVcFJpZ2h0RnJvbVNxdWFyZTogZmFVcFJpZ2h0RnJvbVNxdWFyZSxcbiAgZmFFeHRlcm5hbExpbmtBbHQ6IGZhRXh0ZXJuYWxMaW5rQWx0LFxuICBmYVRhYmxlQ2VsbHM6IGZhVGFibGVDZWxscyxcbiAgZmFUaDogZmFUaCxcbiAgZmFGaWxlUGRmOiBmYUZpbGVQZGYsXG4gIGZhQm9va0JpYmxlOiBmYUJvb2tCaWJsZSxcbiAgZmFCaWJsZTogZmFCaWJsZSxcbiAgZmFPOiBmYU8sXG4gIGZhU3VpdGNhc2VNZWRpY2FsOiBmYVN1aXRjYXNlTWVkaWNhbCxcbiAgZmFNZWRraXQ6IGZhTWVka2l0LFxuICBmYVVzZXJTZWNyZXQ6IGZhVXNlclNlY3JldCxcbiAgZmFPdHRlcjogZmFPdHRlcixcbiAgZmFQZXJzb25EcmVzczogZmFQZXJzb25EcmVzcyxcbiAgZmFGZW1hbGU6IGZhRmVtYWxlLFxuICBmYUNvbW1lbnREb2xsYXI6IGZhQ29tbWVudERvbGxhcixcbiAgZmFCdXNpbmVzc1RpbWU6IGZhQnVzaW5lc3NUaW1lLFxuICBmYUJyaWVmY2FzZUNsb2NrOiBmYUJyaWVmY2FzZUNsb2NrLFxuICBmYVRhYmxlQ2VsbHNMYXJnZTogZmFUYWJsZUNlbGxzTGFyZ2UsXG4gIGZhVGhMYXJnZTogZmFUaExhcmdlLFxuICBmYUJvb2tUYW5ha2g6IGZhQm9va1RhbmFraCxcbiAgZmFUYW5ha2g6IGZhVGFuYWtoLFxuICBmYVBob25lVm9sdW1lOiBmYVBob25lVm9sdW1lLFxuICBmYVZvbHVtZUNvbnRyb2xQaG9uZTogZmFWb2x1bWVDb250cm9sUGhvbmUsXG4gIGZhSGF0Q293Ym95U2lkZTogZmFIYXRDb3dib3lTaWRlLFxuICBmYUNsaXBib2FyZFVzZXI6IGZhQ2xpcGJvYXJkVXNlcixcbiAgZmFDaGlsZDogZmFDaGlsZCxcbiAgZmFMaXJhU2lnbjogZmFMaXJhU2lnbixcbiAgZmFTYXRlbGxpdGU6IGZhU2F0ZWxsaXRlLFxuICBmYVBsYW5lTG9jazogZmFQbGFuZUxvY2ssXG4gIGZhVGFnOiBmYVRhZyxcbiAgZmFDb21tZW50OiBmYUNvbW1lbnQsXG4gIGZhQ2FrZUNhbmRsZXM6IGZhQ2FrZUNhbmRsZXMsXG4gIGZhQmlydGhkYXlDYWtlOiBmYUJpcnRoZGF5Q2FrZSxcbiAgZmFDYWtlOiBmYUNha2UsXG4gIGZhRW52ZWxvcGU6IGZhRW52ZWxvcGUsXG4gIGZhQW5nbGVzVXA6IGZhQW5nbGVzVXAsXG4gIGZhQW5nbGVEb3VibGVVcDogZmFBbmdsZURvdWJsZVVwLFxuICBmYVBhcGVyY2xpcDogZmFQYXBlcmNsaXAsXG4gIGZhQXJyb3dSaWdodFRvQ2l0eTogZmFBcnJvd1JpZ2h0VG9DaXR5LFxuICBmYVJpYmJvbjogZmFSaWJib24sXG4gIGZhTHVuZ3M6IGZhTHVuZ3MsXG4gIGZhQXJyb3dVcDkxOiBmYUFycm93VXA5MSxcbiAgZmFTb3J0TnVtZXJpY1VwQWx0OiBmYVNvcnROdW1lcmljVXBBbHQsXG4gIGZhTGl0ZWNvaW5TaWduOiBmYUxpdGVjb2luU2lnbixcbiAgZmFCb3JkZXJOb25lOiBmYUJvcmRlck5vbmUsXG4gIGZhQ2lyY2xlTm9kZXM6IGZhQ2lyY2xlTm9kZXMsXG4gIGZhUGFyYWNodXRlQm94OiBmYVBhcmFjaHV0ZUJveCxcbiAgZmFJbmRlbnQ6IGZhSW5kZW50LFxuICBmYVRydWNrRmllbGRVbjogZmFUcnVja0ZpZWxkVW4sXG4gIGZhSG91cmdsYXNzOiBmYUhvdXJnbGFzcyxcbiAgZmFIb3VyZ2xhc3NFbXB0eTogZmFIb3VyZ2xhc3NFbXB0eSxcbiAgZmFNb3VudGFpbjogZmFNb3VudGFpbixcbiAgZmFVc2VyRG9jdG9yOiBmYVVzZXJEb2N0b3IsXG4gIGZhVXNlck1kOiBmYVVzZXJNZCxcbiAgZmFDaXJjbGVJbmZvOiBmYUNpcmNsZUluZm8sXG4gIGZhSW5mb0NpcmNsZTogZmFJbmZvQ2lyY2xlLFxuICBmYUNsb3VkTWVhdGJhbGw6IGZhQ2xvdWRNZWF0YmFsbCxcbiAgZmFDYW1lcmE6IGZhQ2FtZXJhLFxuICBmYUNhbWVyYUFsdDogZmFDYW1lcmFBbHQsXG4gIGZhU3F1YXJlVmlydXM6IGZhU3F1YXJlVmlydXMsXG4gIGZhTWV0ZW9yOiBmYU1ldGVvcixcbiAgZmFDYXJPbjogZmFDYXJPbixcbiAgZmFTbGVpZ2g6IGZhU2xlaWdoLFxuICBmYUFycm93RG93bjE5OiBmYUFycm93RG93bjE5LFxuICBmYVNvcnROdW1lcmljQXNjOiBmYVNvcnROdW1lcmljQXNjLFxuICBmYVNvcnROdW1lcmljRG93bjogZmFTb3J0TnVtZXJpY0Rvd24sXG4gIGZhSGFuZEhvbGRpbmdEcm9wbGV0OiBmYUhhbmRIb2xkaW5nRHJvcGxldCxcbiAgZmFIYW5kSG9sZGluZ1dhdGVyOiBmYUhhbmRIb2xkaW5nV2F0ZXIsXG4gIGZhV2F0ZXI6IGZhV2F0ZXIsXG4gIGZhQ2FsZW5kYXJDaGVjazogZmFDYWxlbmRhckNoZWNrLFxuICBmYUJyYWlsbGU6IGZhQnJhaWxsZSxcbiAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsOiBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsXG4gIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0OiBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCxcbiAgZmFMYW5kbWFyazogZmFMYW5kbWFyayxcbiAgZmFUcnVjazogZmFUcnVjayxcbiAgZmFDcm9zc2hhaXJzOiBmYUNyb3NzaGFpcnMsXG4gIGZhUGVyc29uQ2FuZTogZmFQZXJzb25DYW5lLFxuICBmYVRlbnQ6IGZhVGVudCxcbiAgZmFWZXN0UGF0Y2hlczogZmFWZXN0UGF0Y2hlcyxcbiAgZmFDaGVja0RvdWJsZTogZmFDaGVja0RvdWJsZSxcbiAgZmFBcnJvd0Rvd25BWjogZmFBcnJvd0Rvd25BWixcbiAgZmFTb3J0QWxwaGFBc2M6IGZhU29ydEFscGhhQXNjLFxuICBmYVNvcnRBbHBoYURvd246IGZhU29ydEFscGhhRG93bixcbiAgZmFNb25leUJpbGxXaGVhdDogZmFNb25leUJpbGxXaGVhdCxcbiAgZmFDb29raWU6IGZhQ29va2llLFxuICBmYUFycm93Um90YXRlTGVmdDogZmFBcnJvd1JvdGF0ZUxlZnQsXG4gIGZhQXJyb3dMZWZ0Um90YXRlOiBmYUFycm93TGVmdFJvdGF0ZSxcbiAgZmFBcnJvd1JvdGF0ZUJhY2s6IGZhQXJyb3dSb3RhdGVCYWNrLFxuICBmYUFycm93Um90YXRlQmFja3dhcmQ6IGZhQXJyb3dSb3RhdGVCYWNrd2FyZCxcbiAgZmFVbmRvOiBmYVVuZG8sXG4gIGZhSGFyZERyaXZlOiBmYUhhcmREcml2ZSxcbiAgZmFIZGQ6IGZhSGRkLFxuICBmYUZhY2VHcmluU3F1aW50VGVhcnM6IGZhRmFjZUdyaW5TcXVpbnRUZWFycyxcbiAgZmFHcmluU3F1aW50VGVhcnM6IGZhR3JpblNxdWludFRlYXJzLFxuICBmYUR1bWJiZWxsOiBmYUR1bWJiZWxsLFxuICBmYVJlY3RhbmdsZUxpc3Q6IGZhUmVjdGFuZ2xlTGlzdCxcbiAgZmFMaXN0QWx0OiBmYUxpc3RBbHQsXG4gIGZhVGFycERyb3BsZXQ6IGZhVGFycERyb3BsZXQsXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2s6IGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uU2tpaW5nTm9yZGljOiBmYVBlcnNvblNraWluZ05vcmRpYyxcbiAgZmFTa2lpbmdOb3JkaWM6IGZhU2tpaW5nTm9yZGljLFxuICBmYUNhbGVuZGFyUGx1czogZmFDYWxlbmRhclBsdXMsXG4gIGZhUGxhbmVBcnJpdmFsOiBmYVBsYW5lQXJyaXZhbCxcbiAgZmFDaXJjbGVMZWZ0OiBmYUNpcmNsZUxlZnQsXG4gIGZhQXJyb3dBbHRDaXJjbGVMZWZ0OiBmYUFycm93QWx0Q2lyY2xlTGVmdCxcbiAgZmFUcmFpblN1YndheTogZmFUcmFpblN1YndheSxcbiAgZmFTdWJ3YXk6IGZhU3Vid2F5LFxuICBmYUNoYXJ0R2FudHQ6IGZhQ2hhcnRHYW50dCxcbiAgZmFJbmRpYW5SdXBlZVNpZ246IGZhSW5kaWFuUnVwZWVTaWduLFxuICBmYUluZGlhblJ1cGVlOiBmYUluZGlhblJ1cGVlLFxuICBmYUlucjogZmFJbnIsXG4gIGZhQ3JvcFNpbXBsZTogZmFDcm9wU2ltcGxlLFxuICBmYUNyb3BBbHQ6IGZhQ3JvcEFsdCxcbiAgZmFNb25leUJpbGwxOiBmYU1vbmV5QmlsbDEsXG4gIGZhTW9uZXlCaWxsQWx0OiBmYU1vbmV5QmlsbEFsdCxcbiAgZmFMZWZ0TG9uZzogZmFMZWZ0TG9uZyxcbiAgZmFMb25nQXJyb3dBbHRMZWZ0OiBmYUxvbmdBcnJvd0FsdExlZnQsXG4gIGZhRG5hOiBmYURuYSxcbiAgZmFWaXJ1c1NsYXNoOiBmYVZpcnVzU2xhc2gsXG4gIGZhTWludXM6IGZhTWludXMsXG4gIGZhU3VidHJhY3Q6IGZhU3VidHJhY3QsXG4gIGZhQ2hlc3M6IGZhQ2hlc3MsXG4gIGZhQXJyb3dMZWZ0TG9uZzogZmFBcnJvd0xlZnRMb25nLFxuICBmYUxvbmdBcnJvd0xlZnQ6IGZhTG9uZ0Fycm93TGVmdCxcbiAgZmFQbHVnQ2lyY2xlQ2hlY2s6IGZhUGx1Z0NpcmNsZUNoZWNrLFxuICBmYVN0cmVldFZpZXc6IGZhU3RyZWV0VmlldyxcbiAgZmFGcmFuY1NpZ246IGZhRnJhbmNTaWduLFxuICBmYVZvbHVtZU9mZjogZmFWb2x1bWVPZmYsXG4gIGZhSGFuZHNBc2xJbnRlcnByZXRpbmc6IGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsXG4gIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmc6IGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsXG4gIGZhQXNsSW50ZXJwcmV0aW5nOiBmYUFzbEludGVycHJldGluZyxcbiAgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nOiBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsXG4gIGZhR2VhcjogZmFHZWFyLFxuICBmYUNvZzogZmFDb2csXG4gIGZhRHJvcGxldFNsYXNoOiBmYURyb3BsZXRTbGFzaCxcbiAgZmFUaW50U2xhc2g6IGZhVGludFNsYXNoLFxuICBmYU1vc3F1ZTogZmFNb3NxdWUsXG4gIGZhTW9zcXVpdG86IGZhTW9zcXVpdG8sXG4gIGZhU3Rhck9mRGF2aWQ6IGZhU3Rhck9mRGF2aWQsXG4gIGZhUGVyc29uTWlsaXRhcnlSaWZsZTogZmFQZXJzb25NaWxpdGFyeVJpZmxlLFxuICBmYUNhcnRTaG9wcGluZzogZmFDYXJ0U2hvcHBpbmcsXG4gIGZhU2hvcHBpbmdDYXJ0OiBmYVNob3BwaW5nQ2FydCxcbiAgZmFWaWFsczogZmFWaWFscyxcbiAgZmFQbHVnQ2lyY2xlUGx1czogZmFQbHVnQ2lyY2xlUGx1cyxcbiAgZmFQbGFjZU9mV29yc2hpcDogZmFQbGFjZU9mV29yc2hpcCxcbiAgZmFHcmlwVmVydGljYWw6IGZhR3JpcFZlcnRpY2FsLFxuICBmYUFycm93VHVyblVwOiBmYUFycm93VHVyblVwLFxuICBmYUxldmVsVXA6IGZhTGV2ZWxVcCxcbiAgZmFVOiBmYVUsXG4gIGZhU3F1YXJlUm9vdFZhcmlhYmxlOiBmYVNxdWFyZVJvb3RWYXJpYWJsZSxcbiAgZmFTcXVhcmVSb290QWx0OiBmYVNxdWFyZVJvb3RBbHQsXG4gIGZhQ2xvY2s6IGZhQ2xvY2ssXG4gIGZhQ2xvY2tGb3VyOiBmYUNsb2NrRm91cixcbiAgZmFCYWNrd2FyZFN0ZXA6IGZhQmFja3dhcmRTdGVwLFxuICBmYVN0ZXBCYWNrd2FyZDogZmFTdGVwQmFja3dhcmQsXG4gIGZhUGFsbGV0OiBmYVBhbGxldCxcbiAgZmFGYXVjZXQ6IGZhRmF1Y2V0LFxuICBmYUJhc2ViYWxsQmF0QmFsbDogZmFCYXNlYmFsbEJhdEJhbGwsXG4gIGZhUzogZmFTLFxuICBmYVRpbWVsaW5lOiBmYVRpbWVsaW5lLFxuICBmYUtleWJvYXJkOiBmYUtleWJvYXJkLFxuICBmYUNhcmV0RG93bjogZmFDYXJldERvd24sXG4gIGZhSG91c2VDaGltbmV5TWVkaWNhbDogZmFIb3VzZUNoaW1uZXlNZWRpY2FsLFxuICBmYUNsaW5pY01lZGljYWw6IGZhQ2xpbmljTWVkaWNhbCxcbiAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM6IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLFxuICBmYVRlbXBlcmF0dXJlMzogZmFUZW1wZXJhdHVyZTMsXG4gIGZhVGhlcm1vbWV0ZXIzOiBmYVRoZXJtb21ldGVyMyxcbiAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnM6IGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLFxuICBmYU1vYmlsZVNjcmVlbjogZmFNb2JpbGVTY3JlZW4sXG4gIGZhTW9iaWxlQW5kcm9pZEFsdDogZmFNb2JpbGVBbmRyb2lkQWx0LFxuICBmYVBsYW5lVXA6IGZhUGxhbmVVcCxcbiAgZmFQaWdneUJhbms6IGZhUGlnZ3lCYW5rLFxuICBmYUJhdHRlcnlIYWxmOiBmYUJhdHRlcnlIYWxmLFxuICBmYUJhdHRlcnkzOiBmYUJhdHRlcnkzLFxuICBmYU1vdW50YWluQ2l0eTogZmFNb3VudGFpbkNpdHksXG4gIGZhQ29pbnM6IGZhQ29pbnMsXG4gIGZhS2hhbmRhOiBmYUtoYW5kYSxcbiAgZmFTbGlkZXJzOiBmYVNsaWRlcnMsXG4gIGZhU2xpZGVyc0g6IGZhU2xpZGVyc0gsXG4gIGZhRm9sZGVyVHJlZTogZmFGb2xkZXJUcmVlLFxuICBmYU5ldHdvcmtXaXJlZDogZmFOZXR3b3JrV2lyZWQsXG4gIGZhTWFwUGluOiBmYU1hcFBpbixcbiAgZmFIYW1zYTogZmFIYW1zYSxcbiAgZmFDZW50U2lnbjogZmFDZW50U2lnbixcbiAgZmFGbGFzazogZmFGbGFzayxcbiAgZmFQZXJzb25QcmVnbmFudDogZmFQZXJzb25QcmVnbmFudCxcbiAgZmFXYW5kU3BhcmtsZXM6IGZhV2FuZFNwYXJrbGVzLFxuICBmYUVsbGlwc2lzVmVydGljYWw6IGZhRWxsaXBzaXNWZXJ0aWNhbCxcbiAgZmFFbGxpcHNpc1Y6IGZhRWxsaXBzaXNWLFxuICBmYVRpY2tldDogZmFUaWNrZXQsXG4gIGZhUG93ZXJPZmY6IGZhUG93ZXJPZmYsXG4gIGZhUmlnaHRMb25nOiBmYVJpZ2h0TG9uZyxcbiAgZmFMb25nQXJyb3dBbHRSaWdodDogZmFMb25nQXJyb3dBbHRSaWdodCxcbiAgZmFGbGFnVXNhOiBmYUZsYWdVc2EsXG4gIGZhTGFwdG9wRmlsZTogZmFMYXB0b3BGaWxlLFxuICBmYVR0eTogZmFUdHksXG4gIGZhVGVsZXR5cGU6IGZhVGVsZXR5cGUsXG4gIGZhRGlhZ3JhbU5leHQ6IGZhRGlhZ3JhbU5leHQsXG4gIGZhUGVyc29uUmlmbGU6IGZhUGVyc29uUmlmbGUsXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb246IGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhQ2xvc2VkQ2FwdGlvbmluZzogZmFDbG9zZWRDYXB0aW9uaW5nLFxuICBmYVBlcnNvbkhpa2luZzogZmFQZXJzb25IaWtpbmcsXG4gIGZhSGlraW5nOiBmYUhpa2luZyxcbiAgZmFWZW51c0RvdWJsZTogZmFWZW51c0RvdWJsZSxcbiAgZmFJbWFnZXM6IGZhSW1hZ2VzLFxuICBmYUNhbGN1bGF0b3I6IGZhQ2FsY3VsYXRvcixcbiAgZmFQZW9wbGVQdWxsaW5nOiBmYVBlb3BsZVB1bGxpbmcsXG4gIGZhTjogZmFOLFxuICBmYUNhYmxlQ2FyOiBmYUNhYmxlQ2FyLFxuICBmYVRyYW06IGZhVHJhbSxcbiAgZmFDbG91ZFJhaW46IGZhQ2xvdWRSYWluLFxuICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcms6IGZhQnVpbGRpbmdDaXJjbGVYbWFyayxcbiAgZmFTaGlwOiBmYVNoaXAsXG4gIGZhQXJyb3dzRG93blRvTGluZTogZmFBcnJvd3NEb3duVG9MaW5lLFxuICBmYURvd25sb2FkOiBmYURvd25sb2FkLFxuICBmYUZhY2VHcmluOiBmYUZhY2VHcmluLFxuICBmYUdyaW46IGZhR3JpbixcbiAgZmFEZWxldGVMZWZ0OiBmYURlbGV0ZUxlZnQsXG4gIGZhQmFja3NwYWNlOiBmYUJhY2tzcGFjZSxcbiAgZmFFeWVEcm9wcGVyOiBmYUV5ZURyb3BwZXIsXG4gIGZhRXllRHJvcHBlckVtcHR5OiBmYUV5ZURyb3BwZXJFbXB0eSxcbiAgZmFFeWVkcm9wcGVyOiBmYUV5ZWRyb3BwZXIsXG4gIGZhRmlsZUNpcmNsZUNoZWNrOiBmYUZpbGVDaXJjbGVDaGVjayxcbiAgZmFGb3J3YXJkOiBmYUZvcndhcmQsXG4gIGZhTW9iaWxlOiBmYU1vYmlsZSxcbiAgZmFNb2JpbGVBbmRyb2lkOiBmYU1vYmlsZUFuZHJvaWQsXG4gIGZhTW9iaWxlUGhvbmU6IGZhTW9iaWxlUGhvbmUsXG4gIGZhRmFjZU1laDogZmFGYWNlTWVoLFxuICBmYU1laDogZmFNZWgsXG4gIGZhQWxpZ25DZW50ZXI6IGZhQWxpZ25DZW50ZXIsXG4gIGZhQm9va1NrdWxsOiBmYUJvb2tTa3VsbCxcbiAgZmFCb29rRGVhZDogZmFCb29rRGVhZCxcbiAgZmFJZENhcmQ6IGZhSWRDYXJkLFxuICBmYURyaXZlcnNMaWNlbnNlOiBmYURyaXZlcnNMaWNlbnNlLFxuICBmYU91dGRlbnQ6IGZhT3V0ZGVudCxcbiAgZmFEZWRlbnQ6IGZhRGVkZW50LFxuICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb246IGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFIb3VzZTogZmFIb3VzZSxcbiAgZmFIb21lOiBmYUhvbWUsXG4gIGZhSG9tZUFsdDogZmFIb21lQWx0LFxuICBmYUhvbWVMZ0FsdDogZmFIb21lTGdBbHQsXG4gIGZhQ2FsZW5kYXJXZWVrOiBmYUNhbGVuZGFyV2VlayxcbiAgZmFMYXB0b3BNZWRpY2FsOiBmYUxhcHRvcE1lZGljYWwsXG4gIGZhQjogZmFCLFxuICBmYUZpbGVNZWRpY2FsOiBmYUZpbGVNZWRpY2FsLFxuICBmYURpY2VPbmU6IGZhRGljZU9uZSxcbiAgZmFLaXdpQmlyZDogZmFLaXdpQmlyZCxcbiAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OiBmYUFycm93UmlnaHRBcnJvd0xlZnQsXG4gIGZhRXhjaGFuZ2U6IGZhRXhjaGFuZ2UsXG4gIGZhUm90YXRlUmlnaHQ6IGZhUm90YXRlUmlnaHQsXG4gIGZhUmVkb0FsdDogZmFSZWRvQWx0LFxuICBmYVJvdGF0ZUZvcndhcmQ6IGZhUm90YXRlRm9yd2FyZCxcbiAgZmFVdGVuc2lsczogZmFVdGVuc2lscyxcbiAgZmFDdXRsZXJ5OiBmYUN1dGxlcnksXG4gIGZhQXJyb3dVcFdpZGVTaG9ydDogZmFBcnJvd1VwV2lkZVNob3J0LFxuICBmYVNvcnRBbW91bnRVcDogZmFTb3J0QW1vdW50VXAsXG4gIGZhTWlsbFNpZ246IGZhTWlsbFNpZ24sXG4gIGZhQm93bFJpY2U6IGZhQm93bFJpY2UsXG4gIGZhU2t1bGw6IGZhU2t1bGwsXG4gIGZhVG93ZXJCcm9hZGNhc3Q6IGZhVG93ZXJCcm9hZGNhc3QsXG4gIGZhQnJvYWRjYXN0VG93ZXI6IGZhQnJvYWRjYXN0VG93ZXIsXG4gIGZhVHJ1Y2tQaWNrdXA6IGZhVHJ1Y2tQaWNrdXAsXG4gIGZhVXBMb25nOiBmYVVwTG9uZyxcbiAgZmFMb25nQXJyb3dBbHRVcDogZmFMb25nQXJyb3dBbHRVcCxcbiAgZmFTdG9wOiBmYVN0b3AsXG4gIGZhQ29kZU1lcmdlOiBmYUNvZGVNZXJnZSxcbiAgZmFVcGxvYWQ6IGZhVXBsb2FkLFxuICBmYUh1cnJpY2FuZTogZmFIdXJyaWNhbmUsXG4gIGZhTW91bmQ6IGZhTW91bmQsXG4gIGZhVG9pbGV0UG9ydGFibGU6IGZhVG9pbGV0UG9ydGFibGUsXG4gIGZhQ29tcGFjdERpc2M6IGZhQ29tcGFjdERpc2MsXG4gIGZhRmlsZUFycm93RG93bjogZmFGaWxlQXJyb3dEb3duLFxuICBmYUZpbGVEb3dubG9hZDogZmFGaWxlRG93bmxvYWQsXG4gIGZhQ2FyYXZhbjogZmFDYXJhdmFuLFxuICBmYVNoaWVsZENhdDogZmFTaGllbGRDYXQsXG4gIGZhQm9sdDogZmFCb2x0LFxuICBmYVphcDogZmFaYXAsXG4gIGZhR2xhc3NXYXRlcjogZmFHbGFzc1dhdGVyLFxuICBmYU9pbFdlbGw6IGZhT2lsV2VsbCxcbiAgZmFWYXVsdDogZmFWYXVsdCxcbiAgZmFNYXJzOiBmYU1hcnMsXG4gIGZhVG9pbGV0OiBmYVRvaWxldCxcbiAgZmFQbGFuZUNpcmNsZVhtYXJrOiBmYVBsYW5lQ2lyY2xlWG1hcmssXG4gIGZhWWVuU2lnbjogZmFZZW5TaWduLFxuICBmYUNueTogZmFDbnksXG4gIGZhSnB5OiBmYUpweSxcbiAgZmFSbWI6IGZhUm1iLFxuICBmYVllbjogZmFZZW4sXG4gIGZhUnVibGVTaWduOiBmYVJ1YmxlU2lnbixcbiAgZmFSb3VibGU6IGZhUm91YmxlLFxuICBmYVJ1YjogZmFSdWIsXG4gIGZhUnVibGU6IGZhUnVibGUsXG4gIGZhU3VuOiBmYVN1bixcbiAgZmFHdWl0YXI6IGZhR3VpdGFyLFxuICBmYUZhY2VMYXVnaFdpbms6IGZhRmFjZUxhdWdoV2luayxcbiAgZmFMYXVnaFdpbms6IGZhTGF1Z2hXaW5rLFxuICBmYUhvcnNlSGVhZDogZmFIb3JzZUhlYWQsXG4gIGZhQm9yZUhvbGU6IGZhQm9yZUhvbGUsXG4gIGZhSW5kdXN0cnk6IGZhSW5kdXN0cnksXG4gIGZhQ2lyY2xlRG93bjogZmFDaXJjbGVEb3duLFxuICBmYUFycm93QWx0Q2lyY2xlRG93bjogZmFBcnJvd0FsdENpcmNsZURvd24sXG4gIGZhQXJyb3dzVHVyblRvRG90czogZmFBcnJvd3NUdXJuVG9Eb3RzLFxuICBmYUZsb3JpblNpZ246IGZhRmxvcmluU2lnbixcbiAgZmFBcnJvd0Rvd25TaG9ydFdpZGU6IGZhQXJyb3dEb3duU2hvcnRXaWRlLFxuICBmYVNvcnRBbW91bnREZXNjOiBmYVNvcnRBbW91bnREZXNjLFxuICBmYVNvcnRBbW91bnREb3duQWx0OiBmYVNvcnRBbW91bnREb3duQWx0LFxuICBmYUxlc3NUaGFuOiBmYUxlc3NUaGFuLFxuICBmYUFuZ2xlRG93bjogZmFBbmdsZURvd24sXG4gIGZhQ2FyVHVubmVsOiBmYUNhclR1bm5lbCxcbiAgZmFIZWFkU2lkZUNvdWdoOiBmYUhlYWRTaWRlQ291Z2gsXG4gIGZhR3JpcExpbmVzOiBmYUdyaXBMaW5lcyxcbiAgZmFUaHVtYnNEb3duOiBmYVRodW1ic0Rvd24sXG4gIGZhVXNlckxvY2s6IGZhVXNlckxvY2ssXG4gIGZhQXJyb3dSaWdodExvbmc6IGZhQXJyb3dSaWdodExvbmcsXG4gIGZhTG9uZ0Fycm93UmlnaHQ6IGZhTG9uZ0Fycm93UmlnaHQsXG4gIGZhQW5jaG9yQ2lyY2xlWG1hcms6IGZhQW5jaG9yQ2lyY2xlWG1hcmssXG4gIGZhRWxsaXBzaXM6IGZhRWxsaXBzaXMsXG4gIGZhRWxsaXBzaXNIOiBmYUVsbGlwc2lzSCxcbiAgZmFDaGVzc1Bhd246IGZhQ2hlc3NQYXduLFxuICBmYUtpdE1lZGljYWw6IGZhS2l0TWVkaWNhbCxcbiAgZmFGaXJzdEFpZDogZmFGaXJzdEFpZCxcbiAgZmFQZXJzb25UaHJvdWdoV2luZG93OiBmYVBlcnNvblRocm91Z2hXaW5kb3csXG4gIGZhVG9vbGJveDogZmFUb29sYm94LFxuICBmYUhhbmRzSG9sZGluZ0NpcmNsZTogZmFIYW5kc0hvbGRpbmdDaXJjbGUsXG4gIGZhQnVnOiBmYUJ1ZyxcbiAgZmFDcmVkaXRDYXJkOiBmYUNyZWRpdENhcmQsXG4gIGZhQ3JlZGl0Q2FyZEFsdDogZmFDcmVkaXRDYXJkQWx0LFxuICBmYUNhcjogZmFDYXIsXG4gIGZhQXV0b21vYmlsZTogZmFBdXRvbW9iaWxlLFxuICBmYUhhbmRIb2xkaW5nSGFuZDogZmFIYW5kSG9sZGluZ0hhbmQsXG4gIGZhQm9va09wZW5SZWFkZXI6IGZhQm9va09wZW5SZWFkZXIsXG4gIGZhQm9va1JlYWRlcjogZmFCb29rUmVhZGVyLFxuICBmYU1vdW50YWluU3VuOiBmYU1vdW50YWluU3VuLFxuICBmYUFycm93c0xlZnRSaWdodFRvTGluZTogZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsXG4gIGZhRGljZUQyMDogZmFEaWNlRDIwLFxuICBmYVRydWNrRHJvcGxldDogZmFUcnVja0Ryb3BsZXQsXG4gIGZhRmlsZUNpcmNsZVhtYXJrOiBmYUZpbGVDaXJjbGVYbWFyayxcbiAgZmFUZW1wZXJhdHVyZUFycm93VXA6IGZhVGVtcGVyYXR1cmVBcnJvd1VwLFxuICBmYVRlbXBlcmF0dXJlVXA6IGZhVGVtcGVyYXR1cmVVcCxcbiAgZmFNZWRhbDogZmFNZWRhbCxcbiAgZmFCZWQ6IGZhQmVkLFxuICBmYVNxdWFyZUg6IGZhU3F1YXJlSCxcbiAgZmFIU3F1YXJlOiBmYUhTcXVhcmUsXG4gIGZhUG9kY2FzdDogZmFQb2RjYXN0LFxuICBmYVRlbXBlcmF0dXJlRnVsbDogZmFUZW1wZXJhdHVyZUZ1bGwsXG4gIGZhVGVtcGVyYXR1cmU0OiBmYVRlbXBlcmF0dXJlNCxcbiAgZmFUaGVybW9tZXRlcjQ6IGZhVGhlcm1vbWV0ZXI0LFxuICBmYVRoZXJtb21ldGVyRnVsbDogZmFUaGVybW9tZXRlckZ1bGwsXG4gIGZhQmVsbDogZmFCZWxsLFxuICBmYVN1cGVyc2NyaXB0OiBmYVN1cGVyc2NyaXB0LFxuICBmYVBsdWdDaXJjbGVYbWFyazogZmFQbHVnQ2lyY2xlWG1hcmssXG4gIGZhU3Rhck9mTGlmZTogZmFTdGFyT2ZMaWZlLFxuICBmYVBob25lU2xhc2g6IGZhUGhvbmVTbGFzaCxcbiAgZmFQYWludFJvbGxlcjogZmFQYWludFJvbGxlcixcbiAgZmFIYW5kc2hha2VBbmdsZTogZmFIYW5kc2hha2VBbmdsZSxcbiAgZmFIYW5kc0hlbHBpbmc6IGZhSGFuZHNIZWxwaW5nLFxuICBmYUxvY2F0aW9uRG90OiBmYUxvY2F0aW9uRG90LFxuICBmYU1hcE1hcmtlckFsdDogZmFNYXBNYXJrZXJBbHQsXG4gIGZhRmlsZTogZmFGaWxlLFxuICBmYUdyZWF0ZXJUaGFuOiBmYUdyZWF0ZXJUaGFuLFxuICBmYVBlcnNvblN3aW1taW5nOiBmYVBlcnNvblN3aW1taW5nLFxuICBmYVN3aW1tZXI6IGZhU3dpbW1lcixcbiAgZmFBcnJvd0Rvd246IGZhQXJyb3dEb3duLFxuICBmYURyb3BsZXQ6IGZhRHJvcGxldCxcbiAgZmFUaW50OiBmYVRpbnQsXG4gIGZhRXJhc2VyOiBmYUVyYXNlcixcbiAgZmFFYXJ0aEFtZXJpY2FzOiBmYUVhcnRoQW1lcmljYXMsXG4gIGZhRWFydGg6IGZhRWFydGgsXG4gIGZhRWFydGhBbWVyaWNhOiBmYUVhcnRoQW1lcmljYSxcbiAgZmFHbG9iZUFtZXJpY2FzOiBmYUdsb2JlQW1lcmljYXMsXG4gIGZhUGVyc29uQnVyc3Q6IGZhUGVyc29uQnVyc3QsXG4gIGZhRG92ZTogZmFEb3ZlLFxuICBmYUJhdHRlcnlFbXB0eTogZmFCYXR0ZXJ5RW1wdHksXG4gIGZhQmF0dGVyeTA6IGZhQmF0dGVyeTAsXG4gIGZhU29ja3M6IGZhU29ja3MsXG4gIGZhSW5ib3g6IGZhSW5ib3gsXG4gIGZhU2VjdGlvbjogZmFTZWN0aW9uLFxuICBmYUdhdWdlSGlnaDogZmFHYXVnZUhpZ2gsXG4gIGZhVGFjaG9tZXRlckFsdDogZmFUYWNob21ldGVyQWx0LFxuICBmYVRhY2hvbWV0ZXJBbHRGYXN0OiBmYVRhY2hvbWV0ZXJBbHRGYXN0LFxuICBmYUVudmVsb3BlT3BlblRleHQ6IGZhRW52ZWxvcGVPcGVuVGV4dCxcbiAgZmFIb3NwaXRhbDogZmFIb3NwaXRhbCxcbiAgZmFIb3NwaXRhbEFsdDogZmFIb3NwaXRhbEFsdCxcbiAgZmFIb3NwaXRhbFdpZGU6IGZhSG9zcGl0YWxXaWRlLFxuICBmYVdpbmVCb3R0bGU6IGZhV2luZUJvdHRsZSxcbiAgZmFDaGVzc1Jvb2s6IGZhQ2hlc3NSb29rLFxuICBmYUJhcnNTdGFnZ2VyZWQ6IGZhQmFyc1N0YWdnZXJlZCxcbiAgZmFSZW9yZGVyOiBmYVJlb3JkZXIsXG4gIGZhU3RyZWFtOiBmYVN0cmVhbSxcbiAgZmFEaGFybWFjaGFrcmE6IGZhRGhhcm1hY2hha3JhLFxuICBmYUhvdGRvZzogZmFIb3Rkb2csXG4gIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lOiBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSxcbiAgZmFCbGluZDogZmFCbGluZCxcbiAgZmFEcnVtOiBmYURydW0sXG4gIGZhSWNlQ3JlYW06IGZhSWNlQ3JlYW0sXG4gIGZhSGVhcnRDaXJjbGVCb2x0OiBmYUhlYXJ0Q2lyY2xlQm9sdCxcbiAgZmFGYXg6IGZhRmF4LFxuICBmYVBhcmFncmFwaDogZmFQYXJhZ3JhcGgsXG4gIGZhQ2hlY2tUb1Nsb3Q6IGZhQ2hlY2tUb1Nsb3QsXG4gIGZhVm90ZVllYTogZmFWb3RlWWVhLFxuICBmYVN0YXJIYWxmOiBmYVN0YXJIYWxmLFxuICBmYUJveGVzU3RhY2tlZDogZmFCb3hlc1N0YWNrZWQsXG4gIGZhQm94ZXM6IGZhQm94ZXMsXG4gIGZhQm94ZXNBbHQ6IGZhQm94ZXNBbHQsXG4gIGZhTGluazogZmFMaW5rLFxuICBmYUNoYWluOiBmYUNoYWluLFxuICBmYUVhckxpc3RlbjogZmFFYXJMaXN0ZW4sXG4gIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtczogZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLFxuICBmYVRyZWVDaXR5OiBmYVRyZWVDaXR5LFxuICBmYVBsYXk6IGZhUGxheSxcbiAgZmFGb250OiBmYUZvbnQsXG4gIGZhVGFibGVDZWxsc1Jvd0xvY2s6IGZhVGFibGVDZWxsc1Jvd0xvY2ssXG4gIGZhUnVwaWFoU2lnbjogZmFSdXBpYWhTaWduLFxuICBmYU1hZ25pZnlpbmdHbGFzczogZmFNYWduaWZ5aW5nR2xhc3MsXG4gIGZhU2VhcmNoOiBmYVNlYXJjaCxcbiAgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw6IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLFxuICBmYVBpbmdQb25nUGFkZGxlQmFsbDogZmFQaW5nUG9uZ1BhZGRsZUJhbGwsXG4gIGZhVGFibGVUZW5uaXM6IGZhVGFibGVUZW5uaXMsXG4gIGZhUGVyc29uRG90c0Zyb21MaW5lOiBmYVBlcnNvbkRvdHNGcm9tTGluZSxcbiAgZmFEaWFnbm9zZXM6IGZhRGlhZ25vc2VzLFxuICBmYVRyYXNoQ2FuQXJyb3dVcDogZmFUcmFzaENhbkFycm93VXAsXG4gIGZhVHJhc2hSZXN0b3JlQWx0OiBmYVRyYXNoUmVzdG9yZUFsdCxcbiAgZmFOYWlyYVNpZ246IGZhTmFpcmFTaWduLFxuICBmYUNhcnRBcnJvd0Rvd246IGZhQ2FydEFycm93RG93bixcbiAgZmFXYWxraWVUYWxraWU6IGZhV2Fsa2llVGFsa2llLFxuICBmYUZpbGVQZW46IGZhRmlsZVBlbixcbiAgZmFGaWxlRWRpdDogZmFGaWxlRWRpdCxcbiAgZmFSZWNlaXB0OiBmYVJlY2VpcHQsXG4gIGZhU3F1YXJlUGVuOiBmYVNxdWFyZVBlbixcbiAgZmFQZW5TcXVhcmU6IGZhUGVuU3F1YXJlLFxuICBmYVBlbmNpbFNxdWFyZTogZmFQZW5jaWxTcXVhcmUsXG4gIGZhU3VpdGNhc2VSb2xsaW5nOiBmYVN1aXRjYXNlUm9sbGluZyxcbiAgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbjogZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDaGV2cm9uRG93bjogZmFDaGV2cm9uRG93bixcbiAgZmFCYXR0ZXJ5RnVsbDogZmFCYXR0ZXJ5RnVsbCxcbiAgZmFCYXR0ZXJ5OiBmYUJhdHRlcnksXG4gIGZhQmF0dGVyeTU6IGZhQmF0dGVyeTUsXG4gIGZhU2t1bGxDcm9zc2JvbmVzOiBmYVNrdWxsQ3Jvc3Nib25lcyxcbiAgZmFDb2RlQ29tcGFyZTogZmFDb2RlQ29tcGFyZSxcbiAgZmFMaXN0VWw6IGZhTGlzdFVsLFxuICBmYUxpc3REb3RzOiBmYUxpc3REb3RzLFxuICBmYVNjaG9vbExvY2s6IGZhU2Nob29sTG9jayxcbiAgZmFUb3dlckNlbGw6IGZhVG93ZXJDZWxsLFxuICBmYURvd25Mb25nOiBmYURvd25Mb25nLFxuICBmYUxvbmdBcnJvd0FsdERvd246IGZhTG9uZ0Fycm93QWx0RG93bixcbiAgZmFSYW5raW5nU3RhcjogZmFSYW5raW5nU3RhcixcbiAgZmFDaGVzc0tpbmc6IGZhQ2hlc3NLaW5nLFxuICBmYVBlcnNvbkhhcmFzc2luZzogZmFQZXJzb25IYXJhc3NpbmcsXG4gIGZhQnJhemlsaWFuUmVhbFNpZ246IGZhQnJhemlsaWFuUmVhbFNpZ24sXG4gIGZhTGFuZG1hcmtEb21lOiBmYUxhbmRtYXJrRG9tZSxcbiAgZmFMYW5kbWFya0FsdDogZmFMYW5kbWFya0FsdCxcbiAgZmFBcnJvd1VwOiBmYUFycm93VXAsXG4gIGZhVHY6IGZhVHYsXG4gIGZhVGVsZXZpc2lvbjogZmFUZWxldmlzaW9uLFxuICBmYVR2QWx0OiBmYVR2QWx0LFxuICBmYVNocmltcDogZmFTaHJpbXAsXG4gIGZhTGlzdENoZWNrOiBmYUxpc3RDaGVjayxcbiAgZmFUYXNrczogZmFUYXNrcyxcbiAgZmFKdWdEZXRlcmdlbnQ6IGZhSnVnRGV0ZXJnZW50LFxuICBmYUNpcmNsZVVzZXI6IGZhQ2lyY2xlVXNlcixcbiAgZmFVc2VyQ2lyY2xlOiBmYVVzZXJDaXJjbGUsXG4gIGZhVXNlclNoaWVsZDogZmFVc2VyU2hpZWxkLFxuICBmYVdpbmQ6IGZhV2luZCxcbiAgZmFDYXJCdXJzdDogZmFDYXJCdXJzdCxcbiAgZmFDYXJDcmFzaDogZmFDYXJDcmFzaCxcbiAgZmFZOiBmYVksXG4gIGZhUGVyc29uU25vd2JvYXJkaW5nOiBmYVBlcnNvblNub3dib2FyZGluZyxcbiAgZmFTbm93Ym9hcmRpbmc6IGZhU25vd2JvYXJkaW5nLFxuICBmYVRydWNrRmFzdDogZmFUcnVja0Zhc3QsXG4gIGZhU2hpcHBpbmdGYXN0OiBmYVNoaXBwaW5nRmFzdCxcbiAgZmFGaXNoOiBmYUZpc2gsXG4gIGZhVXNlckdyYWR1YXRlOiBmYVVzZXJHcmFkdWF0ZSxcbiAgZmFDaXJjbGVIYWxmU3Ryb2tlOiBmYUNpcmNsZUhhbGZTdHJva2UsXG4gIGZhQWRqdXN0OiBmYUFkanVzdCxcbiAgZmFDbGFwcGVyYm9hcmQ6IGZhQ2xhcHBlcmJvYXJkLFxuICBmYUNpcmNsZVJhZGlhdGlvbjogZmFDaXJjbGVSYWRpYXRpb24sXG4gIGZhUmFkaWF0aW9uQWx0OiBmYVJhZGlhdGlvbkFsdCxcbiAgZmFCYXNlYmFsbDogZmFCYXNlYmFsbCxcbiAgZmFCYXNlYmFsbEJhbGw6IGZhQmFzZWJhbGxCYWxsLFxuICBmYUpldEZpZ2h0ZXJVcDogZmFKZXRGaWdodGVyVXAsXG4gIGZhRGlhZ3JhbVByb2plY3Q6IGZhRGlhZ3JhbVByb2plY3QsXG4gIGZhUHJvamVjdERpYWdyYW06IGZhUHJvamVjdERpYWdyYW0sXG4gIGZhQ29weTogZmFDb3B5LFxuICBmYVZvbHVtZVhtYXJrOiBmYVZvbHVtZVhtYXJrLFxuICBmYVZvbHVtZU11dGU6IGZhVm9sdW1lTXV0ZSxcbiAgZmFWb2x1bWVUaW1lczogZmFWb2x1bWVUaW1lcyxcbiAgZmFIYW5kU3BhcmtsZXM6IGZhSGFuZFNwYXJrbGVzLFxuICBmYUdyaXA6IGZhR3JpcCxcbiAgZmFHcmlwSG9yaXpvbnRhbDogZmFHcmlwSG9yaXpvbnRhbCxcbiAgZmFTaGFyZUZyb21TcXVhcmU6IGZhU2hhcmVGcm9tU3F1YXJlLFxuICBmYVNoYXJlU3F1YXJlOiBmYVNoYXJlU3F1YXJlLFxuICBmYUNoaWxkQ29tYmF0YW50OiBmYUNoaWxkQ29tYmF0YW50LFxuICBmYUNoaWxkUmlmbGU6IGZhQ2hpbGRSaWZsZSxcbiAgZmFHdW46IGZhR3VuLFxuICBmYVNxdWFyZVBob25lOiBmYVNxdWFyZVBob25lLFxuICBmYVBob25lU3F1YXJlOiBmYVBob25lU3F1YXJlLFxuICBmYVBsdXM6IGZhUGx1cyxcbiAgZmFBZGQ6IGZhQWRkLFxuICBmYUV4cGFuZDogZmFFeHBhbmQsXG4gIGZhQ29tcHV0ZXI6IGZhQ29tcHV0ZXIsXG4gIGZhWG1hcms6IGZhWG1hcmssXG4gIGZhQ2xvc2U6IGZhQ2xvc2UsXG4gIGZhTXVsdGlwbHk6IGZhTXVsdGlwbHksXG4gIGZhUmVtb3ZlOiBmYVJlbW92ZSxcbiAgZmFUaW1lczogZmFUaW1lcyxcbiAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQ6IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LFxuICBmYUFycm93czogZmFBcnJvd3MsXG4gIGZhQ2hhbGtib2FyZFVzZXI6IGZhQ2hhbGtib2FyZFVzZXIsXG4gIGZhQ2hhbGtib2FyZFRlYWNoZXI6IGZhQ2hhbGtib2FyZFRlYWNoZXIsXG4gIGZhUGVzb1NpZ246IGZhUGVzb1NpZ24sXG4gIGZhQnVpbGRpbmdTaGllbGQ6IGZhQnVpbGRpbmdTaGllbGQsXG4gIGZhQmFieTogZmFCYWJ5LFxuICBmYVVzZXJzTGluZTogZmFVc2Vyc0xpbmUsXG4gIGZhUXVvdGVMZWZ0OiBmYVF1b3RlTGVmdCxcbiAgZmFRdW90ZUxlZnRBbHQ6IGZhUXVvdGVMZWZ0QWx0LFxuICBmYVRyYWN0b3I6IGZhVHJhY3RvcixcbiAgZmFUcmFzaEFycm93VXA6IGZhVHJhc2hBcnJvd1VwLFxuICBmYVRyYXNoUmVzdG9yZTogZmFUcmFzaFJlc3RvcmUsXG4gIGZhQXJyb3dEb3duVXBMb2NrOiBmYUFycm93RG93blVwTG9jayxcbiAgZmFMaW5lc0xlYW5pbmc6IGZhTGluZXNMZWFuaW5nLFxuICBmYVJ1bGVyQ29tYmluZWQ6IGZhUnVsZXJDb21iaW5lZCxcbiAgZmFDb3B5cmlnaHQ6IGZhQ29weXJpZ2h0LFxuICBmYUVxdWFsczogZmFFcXVhbHMsXG4gIGZhQmxlbmRlcjogZmFCbGVuZGVyLFxuICBmYVRlZXRoOiBmYVRlZXRoLFxuICBmYVNoZWtlbFNpZ246IGZhU2hla2VsU2lnbixcbiAgZmFJbHM6IGZhSWxzLFxuICBmYVNoZWtlbDogZmFTaGVrZWwsXG4gIGZhU2hlcWVsOiBmYVNoZXFlbCxcbiAgZmFTaGVxZWxTaWduOiBmYVNoZXFlbFNpZ24sXG4gIGZhTWFwOiBmYU1hcCxcbiAgZmFSb2NrZXQ6IGZhUm9ja2V0LFxuICBmYVBob3RvRmlsbTogZmFQaG90b0ZpbG0sXG4gIGZhUGhvdG9WaWRlbzogZmFQaG90b1ZpZGVvLFxuICBmYUZvbGRlck1pbnVzOiBmYUZvbGRlck1pbnVzLFxuICBmYVN0b3JlOiBmYVN0b3JlLFxuICBmYUFycm93VHJlbmRVcDogZmFBcnJvd1RyZW5kVXAsXG4gIGZhUGx1Z0NpcmNsZU1pbnVzOiBmYVBsdWdDaXJjbGVNaW51cyxcbiAgZmFTaWduSGFuZ2luZzogZmFTaWduSGFuZ2luZyxcbiAgZmFTaWduOiBmYVNpZ24sXG4gIGZhQmV6aWVyQ3VydmU6IGZhQmV6aWVyQ3VydmUsXG4gIGZhQmVsbFNsYXNoOiBmYUJlbGxTbGFzaCxcbiAgZmFUYWJsZXQ6IGZhVGFibGV0LFxuICBmYVRhYmxldEFuZHJvaWQ6IGZhVGFibGV0QW5kcm9pZCxcbiAgZmFTY2hvb2xGbGFnOiBmYVNjaG9vbEZsYWcsXG4gIGZhRmlsbDogZmFGaWxsLFxuICBmYUFuZ2xlVXA6IGZhQW5nbGVVcCxcbiAgZmFEcnVtc3RpY2tCaXRlOiBmYURydW1zdGlja0JpdGUsXG4gIGZhSG9sbHlCZXJyeTogZmFIb2xseUJlcnJ5LFxuICBmYUNoZXZyb25MZWZ0OiBmYUNoZXZyb25MZWZ0LFxuICBmYUJhY3RlcmlhOiBmYUJhY3RlcmlhLFxuICBmYUhhbmRMaXphcmQ6IGZhSGFuZExpemFyZCxcbiAgZmFOb3RkZWY6IGZhTm90ZGVmLFxuICBmYURpc2Vhc2U6IGZhRGlzZWFzZSxcbiAgZmFCcmllZmNhc2VNZWRpY2FsOiBmYUJyaWVmY2FzZU1lZGljYWwsXG4gIGZhR2VuZGVybGVzczogZmFHZW5kZXJsZXNzLFxuICBmYUNoZXZyb25SaWdodDogZmFDaGV2cm9uUmlnaHQsXG4gIGZhUmV0d2VldDogZmFSZXR3ZWV0LFxuICBmYUNhclJlYXI6IGZhQ2FyUmVhcixcbiAgZmFDYXJBbHQ6IGZhQ2FyQWx0LFxuICBmYVB1bXBTb2FwOiBmYVB1bXBTb2FwLFxuICBmYVZpZGVvU2xhc2g6IGZhVmlkZW9TbGFzaCxcbiAgZmFCYXR0ZXJ5UXVhcnRlcjogZmFCYXR0ZXJ5UXVhcnRlcixcbiAgZmFCYXR0ZXJ5MjogZmFCYXR0ZXJ5MixcbiAgZmFSYWRpbzogZmFSYWRpbyxcbiAgZmFCYWJ5Q2FycmlhZ2U6IGZhQmFieUNhcnJpYWdlLFxuICBmYUNhcnJpYWdlQmFieTogZmFDYXJyaWFnZUJhYnksXG4gIGZhVHJhZmZpY0xpZ2h0OiBmYVRyYWZmaWNMaWdodCxcbiAgZmFUaGVybW9tZXRlcjogZmFUaGVybW9tZXRlcixcbiAgZmFWckNhcmRib2FyZDogZmFWckNhcmRib2FyZCxcbiAgZmFIYW5kTWlkZGxlRmluZ2VyOiBmYUhhbmRNaWRkbGVGaW5nZXIsXG4gIGZhUGVyY2VudDogZmFQZXJjZW50LFxuICBmYVBlcmNlbnRhZ2U6IGZhUGVyY2VudGFnZSxcbiAgZmFUcnVja01vdmluZzogZmFUcnVja01vdmluZyxcbiAgZmFHbGFzc1dhdGVyRHJvcGxldDogZmFHbGFzc1dhdGVyRHJvcGxldCxcbiAgZmFEaXNwbGF5OiBmYURpc3BsYXksXG4gIGZhRmFjZVNtaWxlOiBmYUZhY2VTbWlsZSxcbiAgZmFTbWlsZTogZmFTbWlsZSxcbiAgZmFUaHVtYnRhY2s6IGZhVGh1bWJ0YWNrLFxuICBmYVRodW1iVGFjazogZmFUaHVtYlRhY2ssXG4gIGZhVHJvcGh5OiBmYVRyb3BoeSxcbiAgZmFQZXJzb25QcmF5aW5nOiBmYVBlcnNvblByYXlpbmcsXG4gIGZhUHJheTogZmFQcmF5LFxuICBmYUhhbW1lcjogZmFIYW1tZXIsXG4gIGZhSGFuZFBlYWNlOiBmYUhhbmRQZWFjZSxcbiAgZmFSb3RhdGU6IGZhUm90YXRlLFxuICBmYVN5bmNBbHQ6IGZhU3luY0FsdCxcbiAgZmFTcGlubmVyOiBmYVNwaW5uZXIsXG4gIGZhUm9ib3Q6IGZhUm9ib3QsXG4gIGZhUGVhY2U6IGZhUGVhY2UsXG4gIGZhR2VhcnM6IGZhR2VhcnMsXG4gIGZhQ29nczogZmFDb2dzLFxuICBmYVdhcmVob3VzZTogZmFXYXJlaG91c2UsXG4gIGZhQXJyb3dVcFJpZ2h0RG90czogZmFBcnJvd1VwUmlnaHREb3RzLFxuICBmYVNwbG90Y2g6IGZhU3Bsb3RjaCxcbiAgZmFGYWNlR3JpbkhlYXJ0czogZmFGYWNlR3JpbkhlYXJ0cyxcbiAgZmFHcmluSGVhcnRzOiBmYUdyaW5IZWFydHMsXG4gIGZhRGljZUZvdXI6IGZhRGljZUZvdXIsXG4gIGZhU2ltQ2FyZDogZmFTaW1DYXJkLFxuICBmYVRyYW5zZ2VuZGVyOiBmYVRyYW5zZ2VuZGVyLFxuICBmYVRyYW5zZ2VuZGVyQWx0OiBmYVRyYW5zZ2VuZGVyQWx0LFxuICBmYU1lcmN1cnk6IGZhTWVyY3VyeSxcbiAgZmFBcnJvd1R1cm5Eb3duOiBmYUFycm93VHVybkRvd24sXG4gIGZhTGV2ZWxEb3duOiBmYUxldmVsRG93bixcbiAgZmFQZXJzb25GYWxsaW5nQnVyc3Q6IGZhUGVyc29uRmFsbGluZ0J1cnN0LFxuICBmYUF3YXJkOiBmYUF3YXJkLFxuICBmYVRpY2tldFNpbXBsZTogZmFUaWNrZXRTaW1wbGUsXG4gIGZhVGlja2V0QWx0OiBmYVRpY2tldEFsdCxcbiAgZmFCdWlsZGluZzogZmFCdWlsZGluZyxcbiAgZmFBbmdsZXNMZWZ0OiBmYUFuZ2xlc0xlZnQsXG4gIGZhQW5nbGVEb3VibGVMZWZ0OiBmYUFuZ2xlRG91YmxlTGVmdCxcbiAgZmFRcmNvZGU6IGZhUXJjb2RlLFxuICBmYUNsb2NrUm90YXRlTGVmdDogZmFDbG9ja1JvdGF0ZUxlZnQsXG4gIGZhSGlzdG9yeTogZmFIaXN0b3J5LFxuICBmYUZhY2VHcmluQmVhbVN3ZWF0OiBmYUZhY2VHcmluQmVhbVN3ZWF0LFxuICBmYUdyaW5CZWFtU3dlYXQ6IGZhR3JpbkJlYW1Td2VhdCxcbiAgZmFGaWxlRXhwb3J0OiBmYUZpbGVFeHBvcnQsXG4gIGZhQXJyb3dSaWdodEZyb21GaWxlOiBmYUFycm93UmlnaHRGcm9tRmlsZSxcbiAgZmFTaGllbGQ6IGZhU2hpZWxkLFxuICBmYVNoaWVsZEJsYW5rOiBmYVNoaWVsZEJsYW5rLFxuICBmYUFycm93VXBTaG9ydFdpZGU6IGZhQXJyb3dVcFNob3J0V2lkZSxcbiAgZmFTb3J0QW1vdW50VXBBbHQ6IGZhU29ydEFtb3VudFVwQWx0LFxuICBmYUhvdXNlTWVkaWNhbDogZmFIb3VzZU1lZGljYWwsXG4gIGZhR29sZkJhbGxUZWU6IGZhR29sZkJhbGxUZWUsXG4gIGZhR29sZkJhbGw6IGZhR29sZkJhbGwsXG4gIGZhQ2lyY2xlQ2hldnJvbkxlZnQ6IGZhQ2lyY2xlQ2hldnJvbkxlZnQsXG4gIGZhQ2hldnJvbkNpcmNsZUxlZnQ6IGZhQ2hldnJvbkNpcmNsZUxlZnQsXG4gIGZhSG91c2VDaGltbmV5V2luZG93OiBmYUhvdXNlQ2hpbW5leVdpbmRvdyxcbiAgZmFQZW5OaWI6IGZhUGVuTmliLFxuICBmYVRlbnRBcnJvd1R1cm5MZWZ0OiBmYVRlbnRBcnJvd1R1cm5MZWZ0LFxuICBmYVRlbnRzOiBmYVRlbnRzLFxuICBmYVdhbmRNYWdpYzogZmFXYW5kTWFnaWMsXG4gIGZhTWFnaWM6IGZhTWFnaWMsXG4gIGZhRG9nOiBmYURvZyxcbiAgZmFDYXJyb3Q6IGZhQ2Fycm90LFxuICBmYU1vb246IGZhTW9vbixcbiAgZmFXaW5lR2xhc3NFbXB0eTogZmFXaW5lR2xhc3NFbXB0eSxcbiAgZmFXaW5lR2xhc3NBbHQ6IGZhV2luZUdsYXNzQWx0LFxuICBmYUNoZWVzZTogZmFDaGVlc2UsXG4gIGZhWWluWWFuZzogZmFZaW5ZYW5nLFxuICBmYU11c2ljOiBmYU11c2ljLFxuICBmYUNvZGVDb21taXQ6IGZhQ29kZUNvbW1pdCxcbiAgZmFUZW1wZXJhdHVyZUxvdzogZmFUZW1wZXJhdHVyZUxvdyxcbiAgZmFQZXJzb25CaWtpbmc6IGZhUGVyc29uQmlraW5nLFxuICBmYUJpa2luZzogZmFCaWtpbmcsXG4gIGZhQnJvb206IGZhQnJvb20sXG4gIGZhU2hpZWxkSGVhcnQ6IGZhU2hpZWxkSGVhcnQsXG4gIGZhR29wdXJhbTogZmFHb3B1cmFtLFxuICBmYUVhcnRoT2NlYW5pYTogZmFFYXJ0aE9jZWFuaWEsXG4gIGZhR2xvYmVPY2VhbmlhOiBmYUdsb2JlT2NlYW5pYSxcbiAgZmFTcXVhcmVYbWFyazogZmFTcXVhcmVYbWFyayxcbiAgZmFUaW1lc1NxdWFyZTogZmFUaW1lc1NxdWFyZSxcbiAgZmFYbWFya1NxdWFyZTogZmFYbWFya1NxdWFyZSxcbiAgZmFIYXNodGFnOiBmYUhhc2h0YWcsXG4gIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjogZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLFxuICBmYUV4cGFuZEFsdDogZmFFeHBhbmRBbHQsXG4gIGZhT2lsQ2FuOiBmYU9pbENhbixcbiAgZmFUOiBmYVQsXG4gIGZhSGlwcG86IGZhSGlwcG8sXG4gIGZhQ2hhcnRDb2x1bW46IGZhQ2hhcnRDb2x1bW4sXG4gIGZhSW5maW5pdHk6IGZhSW5maW5pdHksXG4gIGZhVmlhbENpcmNsZUNoZWNrOiBmYVZpYWxDaXJjbGVDaGVjayxcbiAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmU6IGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLFxuICBmYVZvaWNlbWFpbDogZmFWb2ljZW1haWwsXG4gIGZhRmFuOiBmYUZhbixcbiAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZTogZmFQZXJzb25XYWxraW5nTHVnZ2FnZSxcbiAgZmFVcERvd246IGZhVXBEb3duLFxuICBmYUFycm93c0FsdFY6IGZhQXJyb3dzQWx0VixcbiAgZmFDbG91ZE1vb25SYWluOiBmYUNsb3VkTW9vblJhaW4sXG4gIGZhQ2FsZW5kYXI6IGZhQ2FsZW5kYXIsXG4gIGZhVHJhaWxlcjogZmFUcmFpbGVyLFxuICBmYUJhaGFpOiBmYUJhaGFpLFxuICBmYUhheWthbDogZmFIYXlrYWwsXG4gIGZhU2RDYXJkOiBmYVNkQ2FyZCxcbiAgZmFEcmFnb246IGZhRHJhZ29uLFxuICBmYVNob2VQcmludHM6IGZhU2hvZVByaW50cyxcbiAgZmFDaXJjbGVQbHVzOiBmYUNpcmNsZVBsdXMsXG4gIGZhUGx1c0NpcmNsZTogZmFQbHVzQ2lyY2xlLFxuICBmYUZhY2VHcmluVG9uZ3VlV2luazogZmFGYWNlR3JpblRvbmd1ZVdpbmssXG4gIGZhR3JpblRvbmd1ZVdpbms6IGZhR3JpblRvbmd1ZVdpbmssXG4gIGZhSGFuZEhvbGRpbmc6IGZhSGFuZEhvbGRpbmcsXG4gIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uOiBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFMaW5rU2xhc2g6IGZhTGlua1NsYXNoLFxuICBmYUNoYWluQnJva2VuOiBmYUNoYWluQnJva2VuLFxuICBmYUNoYWluU2xhc2g6IGZhQ2hhaW5TbGFzaCxcbiAgZmFVbmxpbms6IGZhVW5saW5rLFxuICBmYUNsb25lOiBmYUNsb25lLFxuICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0OiBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LFxuICBmYUFycm93VXBaQTogZmFBcnJvd1VwWkEsXG4gIGZhU29ydEFscGhhVXBBbHQ6IGZhU29ydEFscGhhVXBBbHQsXG4gIGZhRmlyZUZsYW1lQ3VydmVkOiBmYUZpcmVGbGFtZUN1cnZlZCxcbiAgZmFGaXJlQWx0OiBmYUZpcmVBbHQsXG4gIGZhVG9ybmFkbzogZmFUb3JuYWRvLFxuICBmYUZpbGVDaXJjbGVQbHVzOiBmYUZpbGVDaXJjbGVQbHVzLFxuICBmYUJvb2tRdXJhbjogZmFCb29rUXVyYW4sXG4gIGZhUXVyYW46IGZhUXVyYW4sXG4gIGZhQW5jaG9yOiBmYUFuY2hvcixcbiAgZmFCb3JkZXJBbGw6IGZhQm9yZGVyQWxsLFxuICBmYUZhY2VBbmdyeTogZmFGYWNlQW5ncnksXG4gIGZhQW5ncnk6IGZhQW5ncnksXG4gIGZhQ29va2llQml0ZTogZmFDb29raWVCaXRlLFxuICBmYUFycm93VHJlbmREb3duOiBmYUFycm93VHJlbmREb3duLFxuICBmYVJzczogZmFSc3MsXG4gIGZhRmVlZDogZmFGZWVkLFxuICBmYURyYXdQb2x5Z29uOiBmYURyYXdQb2x5Z29uLFxuICBmYVNjYWxlQmFsYW5jZWQ6IGZhU2NhbGVCYWxhbmNlZCxcbiAgZmFCYWxhbmNlU2NhbGU6IGZhQmFsYW5jZVNjYWxlLFxuICBmYUdhdWdlU2ltcGxlSGlnaDogZmFHYXVnZVNpbXBsZUhpZ2gsXG4gIGZhVGFjaG9tZXRlcjogZmFUYWNob21ldGVyLFxuICBmYVRhY2hvbWV0ZXJGYXN0OiBmYVRhY2hvbWV0ZXJGYXN0LFxuICBmYVNob3dlcjogZmFTaG93ZXIsXG4gIGZhRGVza3RvcDogZmFEZXNrdG9wLFxuICBmYURlc2t0b3BBbHQ6IGZhRGVza3RvcEFsdCxcbiAgZmFNOiBmYU0sXG4gIGZhVGFibGVMaXN0OiBmYVRhYmxlTGlzdCxcbiAgZmFUaExpc3Q6IGZhVGhMaXN0LFxuICBmYUNvbW1lbnRTbXM6IGZhQ29tbWVudFNtcyxcbiAgZmFTbXM6IGZhU21zLFxuICBmYUJvb2s6IGZhQm9vayxcbiAgZmFVc2VyUGx1czogZmFVc2VyUGx1cyxcbiAgZmFDaGVjazogZmFDaGVjayxcbiAgZmFCYXR0ZXJ5VGhyZWVRdWFydGVyczogZmFCYXR0ZXJ5VGhyZWVRdWFydGVycyxcbiAgZmFCYXR0ZXJ5NDogZmFCYXR0ZXJ5NCxcbiAgZmFIb3VzZUNpcmNsZUNoZWNrOiBmYUhvdXNlQ2lyY2xlQ2hlY2ssXG4gIGZhQW5nbGVMZWZ0OiBmYUFuZ2xlTGVmdCxcbiAgZmFEaWFncmFtU3VjY2Vzc29yOiBmYURpYWdyYW1TdWNjZXNzb3IsXG4gIGZhVHJ1Y2tBcnJvd1JpZ2h0OiBmYVRydWNrQXJyb3dSaWdodCxcbiAgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdDogZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCxcbiAgZmFIYW5kRmlzdDogZmFIYW5kRmlzdCxcbiAgZmFGaXN0UmFpc2VkOiBmYUZpc3RSYWlzZWQsXG4gIGZhQ2xvdWRNb29uOiBmYUNsb3VkTW9vbixcbiAgZmFCcmllZmNhc2U6IGZhQnJpZWZjYXNlLFxuICBmYVBlcnNvbkZhbGxpbmc6IGZhUGVyc29uRmFsbGluZyxcbiAgZmFJbWFnZVBvcnRyYWl0OiBmYUltYWdlUG9ydHJhaXQsXG4gIGZhUG9ydHJhaXQ6IGZhUG9ydHJhaXQsXG4gIGZhVXNlclRhZzogZmFVc2VyVGFnLFxuICBmYVJ1ZzogZmFSdWcsXG4gIGZhRWFydGhFdXJvcGU6IGZhRWFydGhFdXJvcGUsXG4gIGZhR2xvYmVFdXJvcGU6IGZhR2xvYmVFdXJvcGUsXG4gIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZTogZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLFxuICBmYUx1Z2dhZ2VDYXJ0OiBmYUx1Z2dhZ2VDYXJ0LFxuICBmYVJlY3RhbmdsZVhtYXJrOiBmYVJlY3RhbmdsZVhtYXJrLFxuICBmYVJlY3RhbmdsZVRpbWVzOiBmYVJlY3RhbmdsZVRpbWVzLFxuICBmYVRpbWVzUmVjdGFuZ2xlOiBmYVRpbWVzUmVjdGFuZ2xlLFxuICBmYVdpbmRvd0Nsb3NlOiBmYVdpbmRvd0Nsb3NlLFxuICBmYUJhaHRTaWduOiBmYUJhaHRTaWduLFxuICBmYUJvb2tPcGVuOiBmYUJvb2tPcGVuLFxuICBmYUJvb2tKb3VybmFsV2hpbGxzOiBmYUJvb2tKb3VybmFsV2hpbGxzLFxuICBmYUpvdXJuYWxXaGlsbHM6IGZhSm91cm5hbFdoaWxscyxcbiAgZmFIYW5kY3VmZnM6IGZhSGFuZGN1ZmZzLFxuICBmYVRyaWFuZ2xlRXhjbGFtYXRpb246IGZhVHJpYW5nbGVFeGNsYW1hdGlvbixcbiAgZmFFeGNsYW1hdGlvblRyaWFuZ2xlOiBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsXG4gIGZhV2FybmluZzogZmFXYXJuaW5nLFxuICBmYURhdGFiYXNlOiBmYURhdGFiYXNlLFxuICBmYVNoYXJlOiBmYVNoYXJlLFxuICBmYU1haWxGb3J3YXJkOiBmYU1haWxGb3J3YXJkLFxuICBmYUJvdHRsZURyb3BsZXQ6IGZhQm90dGxlRHJvcGxldCxcbiAgZmFNYXNrRmFjZTogZmFNYXNrRmFjZSxcbiAgZmFIaWxsUm9ja3NsaWRlOiBmYUhpbGxSb2Nrc2xpZGUsXG4gIGZhUmlnaHRMZWZ0OiBmYVJpZ2h0TGVmdCxcbiAgZmFFeGNoYW5nZUFsdDogZmFFeGNoYW5nZUFsdCxcbiAgZmFQYXBlclBsYW5lOiBmYVBhcGVyUGxhbmUsXG4gIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uOiBmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFEdW5nZW9uOiBmYUR1bmdlb24sXG4gIGZhQWxpZ25SaWdodDogZmFBbGlnblJpZ2h0LFxuICBmYU1vbmV5QmlsbDFXYXZlOiBmYU1vbmV5QmlsbDFXYXZlLFxuICBmYU1vbmV5QmlsbFdhdmVBbHQ6IGZhTW9uZXlCaWxsV2F2ZUFsdCxcbiAgZmFMaWZlUmluZzogZmFMaWZlUmluZyxcbiAgZmFIYW5kczogZmFIYW5kcyxcbiAgZmFTaWduTGFuZ3VhZ2U6IGZhU2lnbkxhbmd1YWdlLFxuICBmYVNpZ25pbmc6IGZhU2lnbmluZyxcbiAgZmFDYWxlbmRhckRheTogZmFDYWxlbmRhckRheSxcbiAgZmFXYXRlckxhZGRlcjogZmFXYXRlckxhZGRlcixcbiAgZmFMYWRkZXJXYXRlcjogZmFMYWRkZXJXYXRlcixcbiAgZmFTd2ltbWluZ1Bvb2w6IGZhU3dpbW1pbmdQb29sLFxuICBmYUFycm93c1VwRG93bjogZmFBcnJvd3NVcERvd24sXG4gIGZhQXJyb3dzVjogZmFBcnJvd3NWLFxuICBmYUZhY2VHcmltYWNlOiBmYUZhY2VHcmltYWNlLFxuICBmYUdyaW1hY2U6IGZhR3JpbWFjZSxcbiAgZmFXaGVlbGNoYWlyTW92ZTogZmFXaGVlbGNoYWlyTW92ZSxcbiAgZmFXaGVlbGNoYWlyQWx0OiBmYVdoZWVsY2hhaXJBbHQsXG4gIGZhVHVybkRvd246IGZhVHVybkRvd24sXG4gIGZhTGV2ZWxEb3duQWx0OiBmYUxldmVsRG93bkFsdCxcbiAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodDogZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCxcbiAgZmFTcXVhcmVFbnZlbG9wZTogZmFTcXVhcmVFbnZlbG9wZSxcbiAgZmFFbnZlbG9wZVNxdWFyZTogZmFFbnZlbG9wZVNxdWFyZSxcbiAgZmFEaWNlOiBmYURpY2UsXG4gIGZhQm93bGluZ0JhbGw6IGZhQm93bGluZ0JhbGwsXG4gIGZhQnJhaW46IGZhQnJhaW4sXG4gIGZhQmFuZGFnZTogZmFCYW5kYWdlLFxuICBmYUJhbmRBaWQ6IGZhQmFuZEFpZCxcbiAgZmFDYWxlbmRhck1pbnVzOiBmYUNhbGVuZGFyTWludXMsXG4gIGZhQ2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmssXG4gIGZhVGltZXNDaXJjbGU6IGZhVGltZXNDaXJjbGUsXG4gIGZhWG1hcmtDaXJjbGU6IGZhWG1hcmtDaXJjbGUsXG4gIGZhR2lmdHM6IGZhR2lmdHMsXG4gIGZhSG90ZWw6IGZhSG90ZWwsXG4gIGZhRWFydGhBc2lhOiBmYUVhcnRoQXNpYSxcbiAgZmFHbG9iZUFzaWE6IGZhR2xvYmVBc2lhLFxuICBmYUlkQ2FyZENsaXA6IGZhSWRDYXJkQ2xpcCxcbiAgZmFJZENhcmRBbHQ6IGZhSWRDYXJkQWx0LFxuICBmYU1hZ25pZnlpbmdHbGFzc1BsdXM6IGZhTWFnbmlmeWluZ0dsYXNzUGx1cyxcbiAgZmFTZWFyY2hQbHVzOiBmYVNlYXJjaFBsdXMsXG4gIGZhVGh1bWJzVXA6IGZhVGh1bWJzVXAsXG4gIGZhVXNlckNsb2NrOiBmYVVzZXJDbG9jayxcbiAgZmFIYW5kRG90czogZmFIYW5kRG90cyxcbiAgZmFBbGxlcmdpZXM6IGZhQWxsZXJnaWVzLFxuICBmYUZpbGVJbnZvaWNlOiBmYUZpbGVJbnZvaWNlLFxuICBmYVdpbmRvd01pbmltaXplOiBmYVdpbmRvd01pbmltaXplLFxuICBmYU11Z1NhdWNlcjogZmFNdWdTYXVjZXIsXG4gIGZhQ29mZmVlOiBmYUNvZmZlZSxcbiAgZmFCcnVzaDogZmFCcnVzaCxcbiAgZmFNYXNrOiBmYU1hc2ssXG4gIGZhTWFnbmlmeWluZ0dsYXNzTWludXM6IGZhTWFnbmlmeWluZ0dsYXNzTWludXMsXG4gIGZhU2VhcmNoTWludXM6IGZhU2VhcmNoTWludXMsXG4gIGZhUnVsZXJWZXJ0aWNhbDogZmFSdWxlclZlcnRpY2FsLFxuICBmYVVzZXJMYXJnZTogZmFVc2VyTGFyZ2UsXG4gIGZhVXNlckFsdDogZmFVc2VyQWx0LFxuICBmYVRyYWluVHJhbTogZmFUcmFpblRyYW0sXG4gIGZhVXNlck51cnNlOiBmYVVzZXJOdXJzZSxcbiAgZmFTeXJpbmdlOiBmYVN5cmluZ2UsXG4gIGZhQ2xvdWRTdW46IGZhQ2xvdWRTdW4sXG4gIGZhU3RvcHdhdGNoMjA6IGZhU3RvcHdhdGNoMjAsXG4gIGZhU3F1YXJlRnVsbDogZmFTcXVhcmVGdWxsLFxuICBmYU1hZ25ldDogZmFNYWduZXQsXG4gIGZhSmFyOiBmYUphcixcbiAgZmFOb3RlU3RpY2t5OiBmYU5vdGVTdGlja3ksXG4gIGZhU3RpY2t5Tm90ZTogZmFTdGlja3lOb3RlLFxuICBmYUJ1Z1NsYXNoOiBmYUJ1Z1NsYXNoLFxuICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wOiBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLFxuICBmYUJvbmU6IGZhQm9uZSxcbiAgZmFVc2VySW5qdXJlZDogZmFVc2VySW5qdXJlZCxcbiAgZmFGYWNlU2FkVGVhcjogZmFGYWNlU2FkVGVhcixcbiAgZmFTYWRUZWFyOiBmYVNhZFRlYXIsXG4gIGZhUGxhbmU6IGZhUGxhbmUsXG4gIGZhVGVudEFycm93c0Rvd246IGZhVGVudEFycm93c0Rvd24sXG4gIGZhRXhjbGFtYXRpb246IGZhRXhjbGFtYXRpb24sXG4gIGZhQXJyb3dzU3BpbjogZmFBcnJvd3NTcGluLFxuICBmYVByaW50OiBmYVByaW50LFxuICBmYVR1cmtpc2hMaXJhU2lnbjogZmFUdXJraXNoTGlyYVNpZ24sXG4gIGZhVHJ5OiBmYVRyeSxcbiAgZmFUdXJraXNoTGlyYTogZmFUdXJraXNoTGlyYSxcbiAgZmFEb2xsYXJTaWduOiBmYURvbGxhclNpZ24sXG4gIGZhRG9sbGFyOiBmYURvbGxhcixcbiAgZmFVc2Q6IGZhVXNkLFxuICBmYVg6IGZhWCxcbiAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXI6IGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyLFxuICBmYVNlYXJjaERvbGxhcjogZmFTZWFyY2hEb2xsYXIsXG4gIGZhVXNlcnNHZWFyOiBmYVVzZXJzR2VhcixcbiAgZmFVc2Vyc0NvZzogZmFVc2Vyc0NvZyxcbiAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nOiBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsXG4gIGZhQnVpbGRpbmdDb2x1bW5zOiBmYUJ1aWxkaW5nQ29sdW1ucyxcbiAgZmFCYW5rOiBmYUJhbmssXG4gIGZhSW5zdGl0dXRpb246IGZhSW5zdGl0dXRpb24sXG4gIGZhTXVzZXVtOiBmYU11c2V1bSxcbiAgZmFVbml2ZXJzaXR5OiBmYVVuaXZlcnNpdHksXG4gIGZhVW1icmVsbGE6IGZhVW1icmVsbGEsXG4gIGZhVHJvd2VsOiBmYVRyb3dlbCxcbiAgZmFEOiBmYUQsXG4gIGZhU3RhcGxlcjogZmFTdGFwbGVyLFxuICBmYU1hc2tzVGhlYXRlcjogZmFNYXNrc1RoZWF0ZXIsXG4gIGZhVGhlYXRlck1hc2tzOiBmYVRoZWF0ZXJNYXNrcyxcbiAgZmFLaXBTaWduOiBmYUtpcFNpZ24sXG4gIGZhSGFuZFBvaW50TGVmdDogZmFIYW5kUG9pbnRMZWZ0LFxuICBmYUhhbmRzaGFrZVNpbXBsZTogZmFIYW5kc2hha2VTaW1wbGUsXG4gIGZhSGFuZHNoYWtlQWx0OiBmYUhhbmRzaGFrZUFsdCxcbiAgZmFKZXRGaWdodGVyOiBmYUpldEZpZ2h0ZXIsXG4gIGZhRmlnaHRlckpldDogZmFGaWdodGVySmV0LFxuICBmYVNxdWFyZVNoYXJlTm9kZXM6IGZhU3F1YXJlU2hhcmVOb2RlcyxcbiAgZmFTaGFyZUFsdFNxdWFyZTogZmFTaGFyZUFsdFNxdWFyZSxcbiAgZmFCYXJjb2RlOiBmYUJhcmNvZGUsXG4gIGZhUGx1c01pbnVzOiBmYVBsdXNNaW51cyxcbiAgZmFWaWRlbzogZmFWaWRlbyxcbiAgZmFWaWRlb0NhbWVyYTogZmFWaWRlb0NhbWVyYSxcbiAgZmFHcmFkdWF0aW9uQ2FwOiBmYUdyYWR1YXRpb25DYXAsXG4gIGZhTW9ydGFyQm9hcmQ6IGZhTW9ydGFyQm9hcmQsXG4gIGZhSGFuZEhvbGRpbmdNZWRpY2FsOiBmYUhhbmRIb2xkaW5nTWVkaWNhbCxcbiAgZmFQZXJzb25DaXJjbGVDaGVjazogZmFQZXJzb25DaXJjbGVDaGVjayxcbiAgZmFUdXJuVXA6IGZhVHVyblVwLFxuICBmYUxldmVsVXBBbHQ6IGZhTGV2ZWxVcEFsdFxufTtcblxuZXhwb3J0IHsgaWNvbnMgYXMgZmFzLCBwcmVmaXgsIGZhMCwgZmExLCBmYTIsIGZhMywgZmE0LCBmYTUsIGZhNiwgZmE3LCBmYTgsIGZhOSwgZmFGaWxsRHJpcCwgZmFBcnJvd3NUb0NpcmNsZSwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUF0LCBmYVRyYXNoQ2FuLCBmYVRyYXNoQWx0LCBmYVRleHRIZWlnaHQsIGZhVXNlclhtYXJrLCBmYVVzZXJUaW1lcywgZmFTdGV0aG9zY29wZSwgZmFNZXNzYWdlLCBmYUNvbW1lbnRBbHQsIGZhSW5mbywgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciwgZmFDb21wcmVzc0FsdCwgZmFFeHBsb3Npb24sIGZhRmlsZUxpbmVzLCBmYUZpbGVBbHQsIGZhRmlsZVRleHQsIGZhV2F2ZVNxdWFyZSwgZmFSaW5nLCBmYUJ1aWxkaW5nVW4sIGZhRGljZVRocmVlLCBmYUNhbGVuZGFyRGF5cywgZmFDYWxlbmRhckFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsIGZhVm9sbGV5YmFsbCwgZmFWb2xsZXliYWxsQmFsbCwgZmFBcnJvd3NVcFRvTGluZSwgZmFTb3J0RG93biwgZmFTb3J0RGVzYywgZmFDaXJjbGVNaW51cywgZmFNaW51c0NpcmNsZSwgZmFEb29yT3BlbiwgZmFSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXRBbHQsIGZhQXRvbSwgZmFTb2FwLCBmYUljb25zLCBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFQdW1wTWVkaWNhbCwgZmFGaW5nZXJwcmludCwgZmFIYW5kUG9pbnRSaWdodCwgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbiwgZmFTZWFyY2hMb2NhdGlvbiwgZmFGb3J3YXJkU3RlcCwgZmFTdGVwRm9yd2FyZCwgZmFGYWNlU21pbGVCZWFtLCBmYVNtaWxlQmVhbSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUZvb3RiYWxsLCBmYUZvb3RiYWxsQmFsbCwgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwgZmFDcm9wLCBmYUFuZ2xlc0Rvd24sIGZhQW5nbGVEb3VibGVEb3duLCBmYVVzZXJzUmVjdGFuZ2xlLCBmYVBlb3BsZVJvb2YsIGZhUGVvcGxlTGluZSwgZmFCZWVyTXVnRW1wdHksIGZhQmVlciwgZmFEaWFncmFtUHJlZGVjZXNzb3IsIGZhQXJyb3dVcExvbmcsIGZhTG9uZ0Fycm93VXAsIGZhRmlyZUZsYW1lU2ltcGxlLCBmYUJ1cm4sIGZhUGVyc29uLCBmYU1hbGUsIGZhTGFwdG9wLCBmYUZpbGVDc3YsIGZhTWVub3JhaCwgZmFUcnVja1BsYW5lLCBmYVJlY29yZFZpbnlsLCBmYUZhY2VHcmluU3RhcnMsIGZhR3JpblN0YXJzLCBmYUJvbmcsIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZywgZmFQYXN0YWZhcmlhbmlzbSwgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsIGZhU3Bvb24sIGZhVXRlbnNpbFNwb29uLCBmYUphcldoZWF0LCBmYUVudmVsb3Blc0J1bGssIGZhTWFpbEJ1bGssIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhUGFnZXIsIGZhQWRkcmVzc0Jvb2ssIGZhQ29udGFjdEJvb2ssIGZhU3RyaWtldGhyb3VnaCwgZmFLLCBmYUxhbmRtYXJrRmxhZywgZmFQZW5jaWwsIGZhUGVuY2lsQWx0LCBmYUJhY2t3YXJkLCBmYUNhcmV0UmlnaHQsIGZhQ29tbWVudHMsIGZhUGFzdGUsIGZhRmlsZUNsaXBib2FyZCwgZmFDb2RlUHVsbFJlcXVlc3QsIGZhQ2xpcGJvYXJkTGlzdCwgZmFUcnVja1JhbXBCb3gsIGZhVHJ1Y2tMb2FkaW5nLCBmYVVzZXJDaGVjaywgZmFWaWFsVmlydXMsIGZhU2hlZXRQbGFzdGljLCBmYUJsb2csIGZhVXNlck5pbmphLCBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwgZmFTY3JvbGxUb3JhaCwgZmFUb3JhaCwgZmFCcm9vbUJhbGwsIGZhUXVpZGRpdGNoLCBmYVF1aWRkaXRjaEJyb29tQmFsbCwgZmFUb2dnbGVPZmYsIGZhQm94QXJjaGl2ZSwgZmFBcmNoaXZlLCBmYVBlcnNvbkRyb3duaW5nLCBmYUFycm93RG93bjkxLCBmYVNvcnROdW1lcmljRGVzYywgZmFTb3J0TnVtZXJpY0Rvd25BbHQsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsIGZhR3JpblRvbmd1ZVNxdWludCwgZmFTcHJheUNhbiwgZmFUcnVja01vbnN0ZXIsIGZhVywgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFSYWluYm93LCBmYUNpcmNsZU5vdGNoLCBmYVRhYmxldFNjcmVlbkJ1dHRvbiwgZmFUYWJsZXRBbHQsIGZhUGF3LCBmYUNsb3VkLCBmYVRyb3dlbEJyaWNrcywgZmFGYWNlRmx1c2hlZCwgZmFGbHVzaGVkLCBmYUhvc3BpdGFsVXNlciwgZmFUZW50QXJyb3dMZWZ0UmlnaHQsIGZhR2F2ZWwsIGZhTGVnYWwsIGZhQmlub2N1bGFycywgZmFNaWNyb3Bob25lU2xhc2gsIGZhQm94VGlzc3VlLCBmYU1vdG9yY3ljbGUsIGZhQmVsbENvbmNpZXJnZSwgZmFDb25jaWVyZ2VCZWxsLCBmYVBlblJ1bGVyLCBmYVBlbmNpbFJ1bGVyLCBmYVBlb3BsZUFycm93cywgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsIGZhTWFyc0FuZFZlbnVzQnVyc3QsIGZhU3F1YXJlQ2FyZXRSaWdodCwgZmFDYXJldFNxdWFyZVJpZ2h0LCBmYVNjaXNzb3JzLCBmYUN1dCwgZmFTdW5QbGFudFdpbHQsIGZhVG9pbGV0c1BvcnRhYmxlLCBmYUhvY2tleVB1Y2ssIGZhVGFibGUsIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwgZmFUYWNob2dyYXBoRGlnaXRhbCwgZmFEaWdpdGFsVGFjaG9ncmFwaCwgZmFVc2Vyc1NsYXNoLCBmYUNsb3ZlciwgZmFSZXBseSwgZmFNYWlsUmVwbHksIGZhU3RhckFuZENyZXNjZW50LCBmYUhvdXNlRmlyZSwgZmFTcXVhcmVNaW51cywgZmFNaW51c1NxdWFyZSwgZmFIZWxpY29wdGVyLCBmYUNvbXBhc3MsIGZhU3F1YXJlQ2FyZXREb3duLCBmYUNhcmV0U3F1YXJlRG93biwgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sIGZhTGFwdG9wQ29kZSwgZmFTd2F0Y2hib29rLCBmYVByZXNjcmlwdGlvbkJvdHRsZSwgZmFCYXJzLCBmYU5hdmljb24sIGZhUGVvcGxlR3JvdXAsIGZhSG91cmdsYXNzRW5kLCBmYUhvdXJnbGFzczMsIGZhSGVhcnRDcmFjaywgZmFIZWFydEJyb2tlbiwgZmFTcXVhcmVVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwgZmFGYWNlS2lzc0JlYW0sIGZhS2lzc0JlYW0sIGZhRmlsbSwgZmFSdWxlckhvcml6b250YWwsIGZhUGVvcGxlUm9iYmVyeSwgZmFMaWdodGJ1bGIsIGZhQ2FyZXRMZWZ0LCBmYUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uQ2lyY2xlLCBmYVNjaG9vbENpcmNsZVhtYXJrLCBmYUFycm93UmlnaHRGcm9tQnJhY2tldCwgZmFTaWduT3V0LCBmYUNpcmNsZUNoZXZyb25Eb3duLCBmYUNoZXZyb25DaXJjbGVEb3duLCBmYVVubG9ja0tleWhvbGUsIGZhVW5sb2NrQWx0LCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYUhlYWRwaG9uZXNTaW1wbGUsIGZhSGVhZHBob25lc0FsdCwgZmFTaXRlbWFwLCBmYUNpcmNsZURvbGxhclRvU2xvdCwgZmFEb25hdGUsIGZhTWVtb3J5LCBmYVJvYWRTcGlrZXMsIGZhRmlyZUJ1cm5lciwgZmFGbGFnLCBmYUhhbnVraWFoLCBmYUZlYXRoZXIsIGZhVm9sdW1lTG93LCBmYVZvbHVtZURvd24sIGZhQ29tbWVudFNsYXNoLCBmYUNsb3VkU3VuUmFpbiwgZmFDb21wcmVzcywgZmFXaGVhdEF3biwgZmFXaGVhdEFsdCwgZmFBbmtoLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUFzdGVyaXNrLCBmYVNxdWFyZUNoZWNrLCBmYUNoZWNrU3F1YXJlLCBmYVBlc2V0YVNpZ24sIGZhSGVhZGluZywgZmFIZWFkZXIsIGZhR2hvc3QsIGZhTGlzdCwgZmFMaXN0U3F1YXJlcywgZmFTcXVhcmVQaG9uZUZsaXAsIGZhUGhvbmVTcXVhcmVBbHQsIGZhQ2FydFBsdXMsIGZhR2FtZXBhZCwgZmFDaXJjbGVEb3QsIGZhRG90Q2lyY2xlLCBmYUZhY2VEaXp6eSwgZmFEaXp6eSwgZmFFZ2csIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhQ2FtcGdyb3VuZCwgZmFGb2xkZXJQbHVzLCBmYUZ1dGJvbCwgZmFGdXRib2xCYWxsLCBmYVNvY2NlckJhbGwsIGZhUGFpbnRicnVzaCwgZmFQYWludEJydXNoLCBmYUxvY2ssIGZhR2FzUHVtcCwgZmFIb3RUdWJQZXJzb24sIGZhSG90VHViLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFIb3VzZUZsb29kV2F0ZXIsIGZhVHJlZSwgZmFCcmlkZ2VMb2NrLCBmYVNhY2tEb2xsYXIsIGZhUGVuVG9TcXVhcmUsIGZhRWRpdCwgZmFDYXJTaWRlLCBmYVNoYXJlTm9kZXMsIGZhU2hhcmVBbHQsIGZhSGVhcnRDaXJjbGVNaW51cywgZmFIb3VyZ2xhc3NIYWxmLCBmYUhvdXJnbGFzczIsIGZhTWljcm9zY29wZSwgZmFTaW5rLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUFycm93RG93blpBLCBmYVNvcnRBbHBoYURlc2MsIGZhU29ydEFscGhhRG93bkFsdCwgZmFNaXR0ZW4sIGZhUGVyc29uUmF5cywgZmFVc2VycywgZmFFeWVTbGFzaCwgZmFGbGFza1ZpYWwsIGZhSGFuZCwgZmFIYW5kUGFwZXIsIGZhT20sIGZhV29ybSwgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYVBsdWcsIGZhQ2hldnJvblVwLCBmYUhhbmRTcG9jaywgZmFTdG9wd2F0Y2gsIGZhRmFjZUtpc3MsIGZhS2lzcywgZmFCcmlkZ2VDaXJjbGVYbWFyaywgZmFGYWNlR3JpblRvbmd1ZSwgZmFHcmluVG9uZ3VlLCBmYUNoZXNzQmlzaG9wLCBmYUZhY2VHcmluV2luaywgZmFHcmluV2luaywgZmFFYXJEZWFmLCBmYURlYWYsIGZhRGVhZm5lc3MsIGZhSGFyZE9mSGVhcmluZywgZmFSb2FkQ2lyY2xlQ2hlY2ssIGZhRGljZUZpdmUsIGZhU3F1YXJlUnNzLCBmYVJzc1NxdWFyZSwgZmFMYW5kTWluZU9uLCBmYUlDdXJzb3IsIGZhU3RhbXAsIGZhU3RhaXJzLCBmYUksIGZhSHJ5dm5pYVNpZ24sIGZhSHJ5dm5pYSwgZmFQaWxscywgZmFGYWNlR3JpbldpZGUsIGZhR3JpbkFsdCwgZmFUb290aCwgZmFWLCBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sIGZhQmljeWNsZSwgZmFTdGFmZlNuYWtlLCBmYVJvZEFzY2xlcGl1cywgZmFSb2RTbmFrZSwgZmFTdGFmZkFlc2N1bGFwaXVzLCBmYUhlYWRTaWRlQ291Z2hTbGFzaCwgZmFUcnVja01lZGljYWwsIGZhQW1idWxhbmNlLCBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sIGZhU25vd21hbiwgZmFNb3J0YXJQZXN0bGUsIGZhUm9hZEJhcnJpZXIsIGZhU2Nob29sLCBmYUlnbG9vLCBmYUpvaW50LCBmYUFuZ2xlUmlnaHQsIGZhSG9yc2UsIGZhUSwgZmFHLCBmYU5vdGVzTWVkaWNhbCwgZmFUZW1wZXJhdHVyZUhhbGYsIGZhVGVtcGVyYXR1cmUyLCBmYVRoZXJtb21ldGVyMiwgZmFUaGVybW9tZXRlckhhbGYsIGZhRG9uZ1NpZ24sIGZhQ2Fwc3VsZXMsIGZhUG9vU3Rvcm0sIGZhUG9vQm9sdCwgZmFGYWNlRnJvd25PcGVuLCBmYUZyb3duT3BlbiwgZmFIYW5kUG9pbnRVcCwgZmFNb25leUJpbGwsIGZhQm9va21hcmssIGZhQWxpZ25KdXN0aWZ5LCBmYVVtYnJlbGxhQmVhY2gsIGZhSGVsbWV0VW4sIGZhQnVsbHNleWUsIGZhQmFjb24sIGZhSGFuZFBvaW50RG93biwgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhRm9sZGVyLCBmYUZvbGRlckJsYW5rLCBmYUZpbGVXYXZlZm9ybSwgZmFGaWxlTWVkaWNhbEFsdCwgZmFSYWRpYXRpb24sIGZhQ2hhcnRTaW1wbGUsIGZhTWFyc1N0cm9rZSwgZmFWaWFsLCBmYUdhdWdlLCBmYURhc2hib2FyZCwgZmFHYXVnZU1lZCwgZmFUYWNob21ldGVyQWx0QXZlcmFnZSwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFFLCBmYVBlbkNsaXAsIGZhUGVuQWx0LCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVVzZXIsIGZhU2Nob29sQ2lyY2xlQ2hlY2ssIGZhRHVtcHN0ZXIsIGZhVmFuU2h1dHRsZSwgZmFTaHV0dGxlVmFuLCBmYUJ1aWxkaW5nVXNlciwgZmFTcXVhcmVDYXJldExlZnQsIGZhQ2FyZXRTcXVhcmVMZWZ0LCBmYUhpZ2hsaWdodGVyLCBmYUtleSwgZmFCdWxsaG9ybiwgZmFHbG9iZSwgZmFTeW5hZ29ndWUsIGZhUGVyc29uSGFsZkRyZXNzLCBmYVJvYWRCcmlkZ2UsIGZhTG9jYXRpb25BcnJvdywgZmFDLCBmYVRhYmxldEJ1dHRvbiwgZmFCdWlsZGluZ0xvY2ssIGZhUGl6emFTbGljZSwgZmFNb25leUJpbGxXYXZlLCBmYUNoYXJ0QXJlYSwgZmFBcmVhQ2hhcnQsIGZhSG91c2VGbGFnLCBmYVBlcnNvbkNpcmNsZU1pbnVzLCBmYUJhbiwgZmFDYW5jZWwsIGZhQ2FtZXJhUm90YXRlLCBmYVNwcmF5Q2FuU3BhcmtsZXMsIGZhQWlyRnJlc2hlbmVyLCBmYVN0YXIsIGZhUmVwZWF0LCBmYUNyb3NzLCBmYUJveCwgZmFWZW51c01hcnMsIGZhQXJyb3dQb2ludGVyLCBmYU1vdXNlUG9pbnRlciwgZmFNYXhpbWl6ZSwgZmFFeHBhbmRBcnJvd3NBbHQsIGZhQ2hhcmdpbmdTdGF0aW9uLCBmYVNoYXBlcywgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSwgZmFTaHVmZmxlLCBmYVJhbmRvbSwgZmFQZXJzb25SdW5uaW5nLCBmYVJ1bm5pbmcsIGZhTW9iaWxlUmV0cm8sIGZhR3JpcExpbmVzVmVydGljYWwsIGZhU3BpZGVyLCBmYUhhbmRzQm91bmQsIGZhRmlsZUludm9pY2VEb2xsYXIsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFYUmF5LCBmYVNwZWxsQ2hlY2ssIGZhU2xhc2gsIGZhQ29tcHV0ZXJNb3VzZSwgZmFNb3VzZSwgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LCBmYVNpZ25JbiwgZmFTaG9wU2xhc2gsIGZhU3RvcmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVmlydXNDb3ZpZFNsYXNoLCBmYVNob3BMb2NrLCBmYUhvdXJnbGFzc1N0YXJ0LCBmYUhvdXJnbGFzczEsIGZhQmxlbmRlclBob25lLCBmYUJ1aWxkaW5nV2hlYXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFSaWdodFRvQnJhY2tldCwgZmFTaWduSW5BbHQsIGZhVmVudXMsIGZhUGFzc3BvcnQsIGZhSGVhcnRQdWxzZSwgZmFIZWFydGJlYXQsIGZhUGVvcGxlQ2FycnlCb3gsIGZhUGVvcGxlQ2FycnksIGZhVGVtcGVyYXR1cmVIaWdoLCBmYU1pY3JvY2hpcCwgZmFDcm93biwgZmFXZWlnaHRIYW5naW5nLCBmYVhtYXJrc0xpbmVzLCBmYUZpbGVQcmVzY3JpcHRpb24sIGZhV2VpZ2h0U2NhbGUsIGZhV2VpZ2h0LCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFBcnJvd1VwQVosIGZhU29ydEFscGhhVXAsIGZhQ2hlc3NLbmlnaHQsIGZhRmFjZUxhdWdoU3F1aW50LCBmYUxhdWdoU3F1aW50LCBmYVdoZWVsY2hhaXIsIGZhQ2lyY2xlQXJyb3dVcCwgZmFBcnJvd0NpcmNsZVVwLCBmYVRvZ2dsZU9uLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFMLCBmYUZpcmUsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFTaHV0dGxlU3BhY2UsIGZhU3BhY2VTaHV0dGxlLCBmYUZhY2VMYXVnaCwgZmFMYXVnaCwgZmFGb2xkZXJPcGVuLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFDb2RlRm9yaywgZmFDaXR5LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVBlcHBlckhvdCwgZmFVbmxvY2ssIGZhQ29sb25TaWduLCBmYUhlYWRzZXQsIGZhU3RvcmVTbGFzaCwgZmFSb2FkQ2lyY2xlWG1hcmssIGZhVXNlck1pbnVzLCBmYU1hcnNTdHJva2VVcCwgZmFNYXJzU3Ryb2tlViwgZmFDaGFtcGFnbmVHbGFzc2VzLCBmYUdsYXNzQ2hlZXJzLCBmYUNsaXBib2FyZCwgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUZpbGVBcnJvd1VwLCBmYUZpbGVVcGxvYWQsIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFVbmRlcmxpbmUsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFTaWduYXR1cmUsIGZhU3Ryb29wd2FmZWwsIGZhQm9sZCwgZmFBbmNob3JMb2NrLCBmYUJ1aWxkaW5nTmdvLCBmYU1hbmF0U2lnbiwgZmFOb3RFcXVhbCwgZmFCb3JkZXJUb3BMZWZ0LCBmYUJvcmRlclN0eWxlLCBmYU1hcExvY2F0aW9uRG90LCBmYU1hcE1hcmtlZEFsdCwgZmFKZWRpLCBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwgZmFQb2xsLCBmYU11Z0hvdCwgZmFDYXJCYXR0ZXJ5LCBmYUJhdHRlcnlDYXIsIGZhR2lmdCwgZmFEaWNlVHdvLCBmYUNoZXNzUXVlZW4sIGZhR2xhc3NlcywgZmFDaGVzc0JvYXJkLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhUGVyc29uQ2hhbGtib2FyZCwgZmFNYXJzU3Ryb2tlUmlnaHQsIGZhTWFyc1N0cm9rZUgsIGZhSGFuZEJhY2tGaXN0LCBmYUhhbmRSb2NrLCBmYVNxdWFyZUNhcmV0VXAsIGZhQ2FyZXRTcXVhcmVVcCwgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFDaGFydEJhciwgZmFCYXJDaGFydCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYUxlc3NUaGFuRXF1YWwsIGZhVHJhaW4sIGZhRXllTG93VmlzaW9uLCBmYUxvd1Zpc2lvbiwgZmFDcm93LCBmYVNhaWxib2F0LCBmYVdpbmRvd1Jlc3RvcmUsIGZhU3F1YXJlUGx1cywgZmFQbHVzU3F1YXJlLCBmYVRvcmlpR2F0ZSwgZmFGcm9nLCBmYUJ1Y2tldCwgZmFJbWFnZSwgZmFNaWNyb3Bob25lLCBmYUNvdywgZmFDYXJldFVwLCBmYVNjcmV3ZHJpdmVyLCBmYUZvbGRlckNsb3NlZCwgZmFIb3VzZVRzdW5hbWksIGZhU3F1YXJlTmZpLCBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsIGZhTWFydGluaUdsYXNzLCBmYUdsYXNzTWFydGluaUFsdCwgZmFSb3RhdGVMZWZ0LCBmYVJvdGF0ZUJhY2ssIGZhUm90YXRlQmFja3dhcmQsIGZhVW5kb0FsdCwgZmFUYWJsZUNvbHVtbnMsIGZhQ29sdW1ucywgZmFMZW1vbiwgZmFIZWFkU2lkZU1hc2ssIGZhSGFuZHNoYWtlLCBmYUdlbSwgZmFEb2xseSwgZmFEb2xseUJveCwgZmFTbW9raW5nLCBmYU1pbmltaXplLCBmYUNvbXByZXNzQXJyb3dzQWx0LCBmYU1vbnVtZW50LCBmYVNub3dwbG93LCBmYUFuZ2xlc1JpZ2h0LCBmYUFuZ2xlRG91YmxlUmlnaHQsIGZhQ2FubmFiaXMsIGZhQ2lyY2xlUGxheSwgZmFQbGF5Q2lyY2xlLCBmYVRhYmxldHMsIGZhRXRoZXJuZXQsIGZhRXVyb1NpZ24sIGZhRXVyLCBmYUV1cm8sIGZhQ2hhaXIsIGZhQ2lyY2xlQ2hlY2ssIGZhQ2hlY2tDaXJjbGUsIGZhQ2lyY2xlU3RvcCwgZmFTdG9wQ2lyY2xlLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhUGxhdGVXaGVhdCwgZmFJY2ljbGVzLCBmYVBlcnNvblNoZWx0ZXIsIGZhTmV1dGVyLCBmYUlkQmFkZ2UsIGZhTWFya2VyLCBmYUZhY2VMYXVnaEJlYW0sIGZhTGF1Z2hCZWFtLCBmYUhlbGljb3B0ZXJTeW1ib2wsIGZhVW5pdmVyc2FsQWNjZXNzLCBmYUNpcmNsZUNoZXZyb25VcCwgZmFDaGV2cm9uQ2lyY2xlVXAsIGZhTGFyaVNpZ24sIGZhVm9sY2FubywgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhVmlydXNlcywgZmFTcXVhcmVQZXJzb25Db25maW5lZCwgZmFVc2VyVGllLCBmYUFycm93RG93bkxvbmcsIGZhTG9uZ0Fycm93RG93biwgZmFUZW50QXJyb3dEb3duVG9MaW5lLCBmYUNlcnRpZmljYXRlLCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFTdWl0Y2FzZSwgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLCBmYUZ1bm5lbERvbGxhciwgZmFDYW1lcmFSZXRybywgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUJveE9wZW4sIGZhU2Nyb2xsLCBmYVNwYSwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGF1c2UsIGZhSGlsbEF2YWxhbmNoZSwgZmFUZW1wZXJhdHVyZUVtcHR5LCBmYVRlbXBlcmF0dXJlMCwgZmFUaGVybW9tZXRlcjAsIGZhVGhlcm1vbWV0ZXJFbXB0eSwgZmFCb21iLCBmYVJlZ2lzdGVyZWQsIGZhQWRkcmVzc0NhcmQsIGZhQ29udGFjdENhcmQsIGZhVmNhcmQsIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwgZmFCYWxhbmNlU2NhbGVSaWdodCwgZmFTdWJzY3JpcHQsIGZhRGlhbW9uZFR1cm5SaWdodCwgZmFEaXJlY3Rpb25zLCBmYUJ1cnN0LCBmYUhvdXNlTGFwdG9wLCBmYUxhcHRvcEhvdXNlLCBmYUZhY2VUaXJlZCwgZmFUaXJlZCwgZmFNb25leUJpbGxzLCBmYVNtb2csIGZhQ3J1dGNoLCBmYUZvbnRBd2Vzb21lLCBmYUZvbnRBd2Vzb21lRmxhZywgZmFGb250QXdlc29tZUxvZ29GdWxsLCBmYUNsb3VkQXJyb3dVcCwgZmFDbG91ZFVwbG9hZCwgZmFDbG91ZFVwbG9hZEFsdCwgZmFQYWxldHRlLCBmYUFycm93c1R1cm5SaWdodCwgZmFWZXN0LCBmYUZlcnJ5LCBmYUFycm93c0Rvd25Ub1Blb3BsZSwgZmFTZWVkbGluZywgZmFTcHJvdXQsIGZhTGVmdFJpZ2h0LCBmYUFycm93c0FsdEgsIGZhQm94ZXNQYWNraW5nLCBmYUNpcmNsZUFycm93TGVmdCwgZmFBcnJvd0NpcmNsZUxlZnQsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQm93bEZvb2QsIGZhQ2FuZHlDYW5lLCBmYUFycm93RG93bldpZGVTaG9ydCwgZmFTb3J0QW1vdW50QXNjLCBmYVNvcnRBbW91bnREb3duLCBmYUNsb3VkQm9sdCwgZmFUaHVuZGVyc3Rvcm0sIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFGYWNlU21pbGVXaW5rLCBmYVNtaWxlV2luaywgZmFGaWxlV29yZCwgZmFGaWxlUG93ZXJwb2ludCwgZmFBcnJvd3NMZWZ0UmlnaHQsIGZhQXJyb3dzSCwgZmFIb3VzZUxvY2ssIGZhQ2xvdWRBcnJvd0Rvd24sIGZhQ2xvdWREb3dubG9hZCwgZmFDbG91ZERvd25sb2FkQWx0LCBmYUNoaWxkcmVuLCBmYUNoYWxrYm9hcmQsIGZhQmxhY2tib2FyZCwgZmFVc2VyTGFyZ2VTbGFzaCwgZmFVc2VyQWx0U2xhc2gsIGZhRW52ZWxvcGVPcGVuLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYU1hdHRyZXNzUGlsbG93LCBmYUd1YXJhbmlTaWduLCBmYUFycm93c1JvdGF0ZSwgZmFSZWZyZXNoLCBmYVN5bmMsIGZhRmlyZUV4dGluZ3Vpc2hlciwgZmFDcnV6ZWlyb1NpZ24sIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFTaGllbGRIYWx2ZWQsIGZhU2hpZWxkQWx0LCBmYUJvb2tBdGxhcywgZmFBdGxhcywgZmFWaXJ1cywgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLCBmYUxheWVyR3JvdXAsIGZhQXJyb3dzVG9Eb3QsIGZhQXJjaHdheSwgZmFIZWFydENpcmNsZUNoZWNrLCBmYUhvdXNlQ2hpbW5leUNyYWNrLCBmYUhvdXNlRGFtYWdlLCBmYUZpbGVaaXBwZXIsIGZhRmlsZUFyY2hpdmUsIGZhU3F1YXJlLCBmYU1hcnRpbmlHbGFzc0VtcHR5LCBmYUdsYXNzTWFydGluaSwgZmFDb3VjaCwgZmFDZWRpU2lnbiwgZmFJdGFsaWMsIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssIGZhQ2h1cmNoLCBmYUNvbW1lbnRzRG9sbGFyLCBmYURlbW9jcmF0LCBmYVosIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFSb2FkTG9jaywgZmFBLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFGZWF0aGVyUG9pbnRlZCwgZmFGZWF0aGVyQWx0LCBmYVAsIGZhU25vd2ZsYWtlLCBmYU5ld3NwYXBlciwgZmFSZWN0YW5nbGVBZCwgZmFBZCwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhRmlsdGVyQ2lyY2xlWG1hcmssIGZhTG9jdXN0LCBmYVNvcnQsIGZhVW5zb3J0ZWQsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFQZXJzb25EcmVzc0J1cnN0LCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFWZWN0b3JTcXVhcmUsIGZhQnJlYWRTbGljZSwgZmFMYW5ndWFnZSwgZmFGYWNlS2lzc1dpbmtIZWFydCwgZmFLaXNzV2lua0hlYXJ0LCBmYUZpbHRlciwgZmFRdWVzdGlvbiwgZmFGaWxlU2lnbmF0dXJlLCBmYVVwRG93bkxlZnRSaWdodCwgZmFBcnJvd3NBbHQsIGZhSG91c2VDaGltbmV5VXNlciwgZmFIYW5kSG9sZGluZ0hlYXJ0LCBmYVB1enpsZVBpZWNlLCBmYU1vbmV5Q2hlY2ssIGZhU3RhckhhbGZTdHJva2UsIGZhU3RhckhhbGZBbHQsIGZhQ29kZSwgZmFXaGlza2V5R2xhc3MsIGZhR2xhc3NXaGlza2V5LCBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmssIGZhQ3ViZXNTdGFja2VkLCBmYVdvblNpZ24sIGZhS3J3LCBmYVdvbiwgZmFWaXJ1c0NvdmlkLCBmYUF1c3RyYWxTaWduLCBmYUYsIGZhTGVhZiwgZmFSb2FkLCBmYVRheGksIGZhQ2FiLCBmYVBlcnNvbkNpcmNsZVBsdXMsIGZhQ2hhcnRQaWUsIGZhUGllQ2hhcnQsIGZhQm9sdExpZ2h0bmluZywgZmFTYWNrWG1hcmssIGZhRmlsZUV4Y2VsLCBmYUZpbGVDb250cmFjdCwgZmFGaXNoRmlucywgZmFCdWlsZGluZ0ZsYWcsIGZhRmFjZUdyaW5CZWFtLCBmYUdyaW5CZWFtLCBmYU9iamVjdFVuZ3JvdXAsIGZhUG9vcCwgZmFMb2NhdGlvblBpbiwgZmFNYXBNYXJrZXIsIGZhS2FhYmEsIGZhVG9pbGV0UGFwZXIsIGZhSGVsbWV0U2FmZXR5LCBmYUhhcmRIYXQsIGZhSGF0SGFyZCwgZmFFamVjdCwgZmFDaXJjbGVSaWdodCwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhRmFjZVJvbGxpbmdFeWVzLCBmYU1laFJvbGxpbmdFeWVzLCBmYU9iamVjdEdyb3VwLCBmYUNoYXJ0TGluZSwgZmFMaW5lQ2hhcnQsIGZhTWFza1ZlbnRpbGF0b3IsIGZhQXJyb3dSaWdodCwgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhQ2FzaFJlZ2lzdGVyLCBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLCBmYUgsIGZhVGFycCwgZmFTY3Jld2RyaXZlcldyZW5jaCwgZmFUb29scywgZmFBcnJvd3NUb0V5ZSwgZmFQbHVnQ2lyY2xlQm9sdCwgZmFIZWFydCwgZmFNYXJzQW5kVmVudXMsIGZhSG91c2VVc2VyLCBmYUhvbWVVc2VyLCBmYUR1bXBzdGVyRmlyZSwgZmFIb3VzZUNyYWNrLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFGYWNlU3VycHJpc2UsIGZhU3VycHJpc2UsIGZhQm90dGxlV2F0ZXIsIGZhQ2lyY2xlUGF1c2UsIGZhUGF1c2VDaXJjbGUsIGZhVG9pbGV0UGFwZXJTbGFzaCwgZmFBcHBsZVdob2xlLCBmYUFwcGxlQWx0LCBmYUtpdGNoZW5TZXQsIGZhUiwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhQ3ViZSwgZmFCaXRjb2luU2lnbiwgZmFTaGllbGREb2csIGZhU29sYXJQYW5lbCwgZmFMb2NrT3BlbiwgZmFFbGV2YXRvciwgZmFNb25leUJpbGxUcmFuc2ZlciwgZmFNb25leUJpbGxUcmVuZFVwLCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsIGZhU3F1YXJlUG9sbEhvcml6b250YWwsIGZhUG9sbEgsIGZhQ2lyY2xlLCBmYUJhY2t3YXJkRmFzdCwgZmFGYXN0QmFja3dhcmQsIGZhUmVjeWNsZSwgZmFVc2VyQXN0cm9uYXV0LCBmYVBsYW5lU2xhc2gsIGZhVHJhZGVtYXJrLCBmYUJhc2tldGJhbGwsIGZhQmFza2V0YmFsbEJhbGwsIGZhU2F0ZWxsaXRlRGlzaCwgZmFDaXJjbGVVcCwgZmFBcnJvd0FsdENpcmNsZVVwLCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwgZmFNb2JpbGVBbHQsIGZhVm9sdW1lSGlnaCwgZmFWb2x1bWVVcCwgZmFVc2Vyc1JheXMsIGZhV2FsbGV0LCBmYUNsaXBib2FyZENoZWNrLCBmYUZpbGVBdWRpbywgZmFCdXJnZXIsIGZhSGFtYnVyZ2VyLCBmYVdyZW5jaCwgZmFCdWdzLCBmYVJ1cGVlU2lnbiwgZmFSdXBlZSwgZmFGaWxlSW1hZ2UsIGZhQ2lyY2xlUXVlc3Rpb24sIGZhUXVlc3Rpb25DaXJjbGUsIGZhUGxhbmVEZXBhcnR1cmUsIGZhSGFuZHNoYWtlU2xhc2gsIGZhQm9va0Jvb2ttYXJrLCBmYUNvZGVCcmFuY2gsIGZhSGF0Q293Ym95LCBmYUJyaWRnZSwgZmFQaG9uZUZsaXAsIGZhUGhvbmVBbHQsIGZhVHJ1Y2tGcm9udCwgZmFDYXQsIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sIGZhVHJ1Y2tGaWVsZCwgZmFSb3V0ZSwgZmFDbGlwYm9hcmRRdWVzdGlvbiwgZmFQYW5vcmFtYSwgZmFDb21tZW50TWVkaWNhbCwgZmFUZWV0aE9wZW4sIGZhRmlsZUNpcmNsZU1pbnVzLCBmYVRhZ3MsIGZhV2luZUdsYXNzLCBmYUZvcndhcmRGYXN0LCBmYUZhc3RGb3J3YXJkLCBmYUZhY2VNZWhCbGFuaywgZmFNZWhCbGFuaywgZmFTcXVhcmVQYXJraW5nLCBmYVBhcmtpbmcsIGZhSG91c2VTaWduYWwsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUZhdWNldERyaXAsIGZhQ2FydEZsYXRiZWQsIGZhRG9sbHlGbGF0YmVkLCBmYUJhblNtb2tpbmcsIGZhU21va2luZ0JhbiwgZmFUZXJtaW5hbCwgZmFNb2JpbGVCdXR0b24sIGZhSG91c2VNZWRpY2FsRmxhZywgZmFCYXNrZXRTaG9wcGluZywgZmFTaG9wcGluZ0Jhc2tldCwgZmFUYXBlLCBmYUJ1c1NpbXBsZSwgZmFCdXNBbHQsIGZhRXllLCBmYUZhY2VTYWRDcnksIGZhU2FkQ3J5LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwgZmFGaWxlU2hpZWxkLCBmYVVzZXJTbGFzaCwgZmFQZW4sIGZhVG93ZXJPYnNlcnZhdGlvbiwgZmFGaWxlQ29kZSwgZmFTaWduYWwsIGZhU2lnbmFsNSwgZmFTaWduYWxQZXJmZWN0LCBmYUJ1cywgZmFIZWFydENpcmNsZVhtYXJrLCBmYUhvdXNlQ2hpbW5leSwgZmFIb21lTGcsIGZhV2luZG93TWF4aW1pemUsIGZhRmFjZUZyb3duLCBmYUZyb3duLCBmYVByZXNjcmlwdGlvbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZsb3BweURpc2ssIGZhU2F2ZSwgZmFWaWhhcmEsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU29ydFVwLCBmYVNvcnRBc2MsIGZhQ29tbWVudERvdHMsIGZhQ29tbWVudGluZywgZmFQbGFudFdpbHQsIGZhRGlhbW9uZCwgZmFGYWNlR3JpblNxdWludCwgZmFHcmluU3F1aW50LCBmYUhhbmRIb2xkaW5nRG9sbGFyLCBmYUhhbmRIb2xkaW5nVXNkLCBmYUJhY3Rlcml1bSwgZmFIYW5kUG9pbnRlciwgZmFEcnVtU3RlZWxwYW4sIGZhSGFuZFNjaXNzb3JzLCBmYUhhbmRzUHJheWluZywgZmFQcmF5aW5nSGFuZHMsIGZhQXJyb3dSb3RhdGVSaWdodCwgZmFBcnJvd1JpZ2h0Um90YXRlLCBmYUFycm93Um90YXRlRm9yd2FyZCwgZmFSZWRvLCBmYUJpb2hhemFyZCwgZmFMb2NhdGlvbkNyb3NzaGFpcnMsIGZhTG9jYXRpb24sIGZhTWFyc0RvdWJsZSwgZmFDaGlsZERyZXNzLCBmYVVzZXJzQmV0d2VlbkxpbmVzLCBmYUx1bmdzVmlydXMsIGZhRmFjZUdyaW5UZWFycywgZmFHcmluVGVhcnMsIGZhUGhvbmUsIGZhQ2FsZW5kYXJYbWFyaywgZmFDYWxlbmRhclRpbWVzLCBmYUNoaWxkUmVhY2hpbmcsIGZhSGVhZFNpZGVWaXJ1cywgZmFVc2VyR2VhciwgZmFVc2VyQ29nLCBmYUFycm93VXAxOSwgZmFTb3J0TnVtZXJpY1VwLCBmYURvb3JDbG9zZWQsIGZhU2hpZWxkVmlydXMsIGZhRGljZVNpeCwgZmFNb3NxdWl0b05ldCwgZmFCcmlkZ2VXYXRlciwgZmFQZXJzb25Cb290aCwgZmFUZXh0V2lkdGgsIGZhSGF0V2l6YXJkLCBmYVBlbkZhbmN5LCBmYVBlcnNvbkRpZ2dpbmcsIGZhRGlnZ2luZywgZmFUcmFzaCwgZmFHYXVnZVNpbXBsZSwgZmFHYXVnZVNpbXBsZU1lZCwgZmFUYWNob21ldGVyQXZlcmFnZSwgZmFCb29rTWVkaWNhbCwgZmFQb28sIGZhUXVvdGVSaWdodCwgZmFRdW90ZVJpZ2h0QWx0LCBmYVNoaXJ0LCBmYVRTaGlydCwgZmFUc2hpcnQsIGZhQ3ViZXMsIGZhRGl2aWRlLCBmYVRlbmdlU2lnbiwgZmFUZW5nZSwgZmFIZWFkcGhvbmVzLCBmYUhhbmRzSG9sZGluZywgZmFIYW5kc0NsYXBwaW5nLCBmYVJlcHVibGljYW4sIGZhQXJyb3dMZWZ0LCBmYVBlcnNvbkNpcmNsZVhtYXJrLCBmYVJ1bGVyLCBmYUFsaWduTGVmdCwgZmFEaWNlRDYsIGZhUmVzdHJvb20sIGZhSiwgZmFVc2Vyc1ZpZXdmaW5kZXIsIGZhRmlsZVZpZGVvLCBmYVVwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGlua0FsdCwgZmFUYWJsZUNlbGxzLCBmYVRoLCBmYUZpbGVQZGYsIGZhQm9va0JpYmxlLCBmYUJpYmxlLCBmYU8sIGZhU3VpdGNhc2VNZWRpY2FsLCBmYU1lZGtpdCwgZmFVc2VyU2VjcmV0LCBmYU90dGVyLCBmYVBlcnNvbkRyZXNzLCBmYUZlbWFsZSwgZmFDb21tZW50RG9sbGFyLCBmYUJ1c2luZXNzVGltZSwgZmFCcmllZmNhc2VDbG9jaywgZmFUYWJsZUNlbGxzTGFyZ2UsIGZhVGhMYXJnZSwgZmFCb29rVGFuYWtoLCBmYVRhbmFraCwgZmFQaG9uZVZvbHVtZSwgZmFWb2x1bWVDb250cm9sUGhvbmUsIGZhSGF0Q293Ym95U2lkZSwgZmFDbGlwYm9hcmRVc2VyLCBmYUNoaWxkLCBmYUxpcmFTaWduLCBmYVNhdGVsbGl0ZSwgZmFQbGFuZUxvY2ssIGZhVGFnLCBmYUNvbW1lbnQsIGZhQ2FrZUNhbmRsZXMsIGZhQmlydGhkYXlDYWtlLCBmYUNha2UsIGZhRW52ZWxvcGUsIGZhQW5nbGVzVXAsIGZhQW5nbGVEb3VibGVVcCwgZmFQYXBlcmNsaXAsIGZhQXJyb3dSaWdodFRvQ2l0eSwgZmFSaWJib24sIGZhTHVuZ3MsIGZhQXJyb3dVcDkxLCBmYVNvcnROdW1lcmljVXBBbHQsIGZhTGl0ZWNvaW5TaWduLCBmYUJvcmRlck5vbmUsIGZhQ2lyY2xlTm9kZXMsIGZhUGFyYWNodXRlQm94LCBmYUluZGVudCwgZmFUcnVja0ZpZWxkVW4sIGZhSG91cmdsYXNzLCBmYUhvdXJnbGFzc0VtcHR5LCBmYU1vdW50YWluLCBmYVVzZXJEb2N0b3IsIGZhVXNlck1kLCBmYUNpcmNsZUluZm8sIGZhSW5mb0NpcmNsZSwgZmFDbG91ZE1lYXRiYWxsLCBmYUNhbWVyYSwgZmFDYW1lcmFBbHQsIGZhU3F1YXJlVmlydXMsIGZhTWV0ZW9yLCBmYUNhck9uLCBmYVNsZWlnaCwgZmFBcnJvd0Rvd24xOSwgZmFTb3J0TnVtZXJpY0FzYywgZmFTb3J0TnVtZXJpY0Rvd24sIGZhSGFuZEhvbGRpbmdEcm9wbGV0LCBmYUhhbmRIb2xkaW5nV2F0ZXIsIGZhV2F0ZXIsIGZhQ2FsZW5kYXJDaGVjaywgZmFCcmFpbGxlLCBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LCBmYUxhbmRtYXJrLCBmYVRydWNrLCBmYUNyb3NzaGFpcnMsIGZhUGVyc29uQ2FuZSwgZmFUZW50LCBmYVZlc3RQYXRjaGVzLCBmYUNoZWNrRG91YmxlLCBmYUFycm93RG93bkFaLCBmYVNvcnRBbHBoYUFzYywgZmFTb3J0QWxwaGFEb3duLCBmYU1vbmV5QmlsbFdoZWF0LCBmYUNvb2tpZSwgZmFBcnJvd1JvdGF0ZUxlZnQsIGZhQXJyb3dMZWZ0Um90YXRlLCBmYUFycm93Um90YXRlQmFjaywgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLCBmYVVuZG8sIGZhSGFyZERyaXZlLCBmYUhkZCwgZmFGYWNlR3JpblNxdWludFRlYXJzLCBmYUdyaW5TcXVpbnRUZWFycywgZmFEdW1iYmVsbCwgZmFSZWN0YW5nbGVMaXN0LCBmYUxpc3RBbHQsIGZhVGFycERyb3BsZXQsIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssIGZhUGVyc29uU2tpaW5nTm9yZGljLCBmYVNraWluZ05vcmRpYywgZmFDYWxlbmRhclBsdXMsIGZhUGxhbmVBcnJpdmFsLCBmYUNpcmNsZUxlZnQsIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LCBmYVRyYWluU3Vid2F5LCBmYVN1YndheSwgZmFDaGFydEdhbnR0LCBmYUluZGlhblJ1cGVlU2lnbiwgZmFJbmRpYW5SdXBlZSwgZmFJbnIsIGZhQ3JvcFNpbXBsZSwgZmFDcm9wQWx0LCBmYU1vbmV5QmlsbDEsIGZhTW9uZXlCaWxsQWx0LCBmYUxlZnRMb25nLCBmYUxvbmdBcnJvd0FsdExlZnQsIGZhRG5hLCBmYVZpcnVzU2xhc2gsIGZhTWludXMsIGZhU3VidHJhY3QsIGZhQ2hlc3MsIGZhQXJyb3dMZWZ0TG9uZywgZmFMb25nQXJyb3dMZWZ0LCBmYVBsdWdDaXJjbGVDaGVjaywgZmFTdHJlZXRWaWV3LCBmYUZyYW5jU2lnbiwgZmFWb2x1bWVPZmYsIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhQXNsSW50ZXJwcmV0aW5nLCBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhR2VhciwgZmFDb2csIGZhRHJvcGxldFNsYXNoLCBmYVRpbnRTbGFzaCwgZmFNb3NxdWUsIGZhTW9zcXVpdG8sIGZhU3Rhck9mRGF2aWQsIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwgZmFDYXJ0U2hvcHBpbmcsIGZhU2hvcHBpbmdDYXJ0LCBmYVZpYWxzLCBmYVBsdWdDaXJjbGVQbHVzLCBmYVBsYWNlT2ZXb3JzaGlwLCBmYUdyaXBWZXJ0aWNhbCwgZmFBcnJvd1R1cm5VcCwgZmFMZXZlbFVwLCBmYVUsIGZhU3F1YXJlUm9vdFZhcmlhYmxlLCBmYVNxdWFyZVJvb3RBbHQsIGZhQ2xvY2ssIGZhQ2xvY2tGb3VyLCBmYUJhY2t3YXJkU3RlcCwgZmFTdGVwQmFja3dhcmQsIGZhUGFsbGV0LCBmYUZhdWNldCwgZmFCYXNlYmFsbEJhdEJhbGwsIGZhUywgZmFUaW1lbGluZSwgZmFLZXlib2FyZCwgZmFDYXJldERvd24sIGZhSG91c2VDaGltbmV5TWVkaWNhbCwgZmFDbGluaWNNZWRpY2FsLCBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycywgZmFUZW1wZXJhdHVyZTMsIGZhVGhlcm1vbWV0ZXIzLCBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycywgZmFNb2JpbGVTY3JlZW4sIGZhTW9iaWxlQW5kcm9pZEFsdCwgZmFQbGFuZVVwLCBmYVBpZ2d5QmFuaywgZmFCYXR0ZXJ5SGFsZiwgZmFCYXR0ZXJ5MywgZmFNb3VudGFpbkNpdHksIGZhQ29pbnMsIGZhS2hhbmRhLCBmYVNsaWRlcnMsIGZhU2xpZGVyc0gsIGZhRm9sZGVyVHJlZSwgZmFOZXR3b3JrV2lyZWQsIGZhTWFwUGluLCBmYUhhbXNhLCBmYUNlbnRTaWduLCBmYUZsYXNrLCBmYVBlcnNvblByZWduYW50LCBmYVdhbmRTcGFya2xlcywgZmFFbGxpcHNpc1ZlcnRpY2FsLCBmYUVsbGlwc2lzViwgZmFUaWNrZXQsIGZhUG93ZXJPZmYsIGZhUmlnaHRMb25nLCBmYUxvbmdBcnJvd0FsdFJpZ2h0LCBmYUZsYWdVc2EsIGZhTGFwdG9wRmlsZSwgZmFUdHksIGZhVGVsZXR5cGUsIGZhRGlhZ3JhbU5leHQsIGZhUGVyc29uUmlmbGUsIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ2xvc2VkQ2FwdGlvbmluZywgZmFQZXJzb25IaWtpbmcsIGZhSGlraW5nLCBmYVZlbnVzRG91YmxlLCBmYUltYWdlcywgZmFDYWxjdWxhdG9yLCBmYVBlb3BsZVB1bGxpbmcsIGZhTiwgZmFDYWJsZUNhciwgZmFUcmFtLCBmYUNsb3VkUmFpbiwgZmFCdWlsZGluZ0NpcmNsZVhtYXJrLCBmYVNoaXAsIGZhQXJyb3dzRG93blRvTGluZSwgZmFEb3dubG9hZCwgZmFGYWNlR3JpbiwgZmFHcmluLCBmYURlbGV0ZUxlZnQsIGZhQmFja3NwYWNlLCBmYUV5ZURyb3BwZXIsIGZhRXllRHJvcHBlckVtcHR5LCBmYUV5ZWRyb3BwZXIsIGZhRmlsZUNpcmNsZUNoZWNrLCBmYUZvcndhcmQsIGZhTW9iaWxlLCBmYU1vYmlsZUFuZHJvaWQsIGZhTW9iaWxlUGhvbmUsIGZhRmFjZU1laCwgZmFNZWgsIGZhQWxpZ25DZW50ZXIsIGZhQm9va1NrdWxsLCBmYUJvb2tEZWFkLCBmYUlkQ2FyZCwgZmFEcml2ZXJzTGljZW5zZSwgZmFPdXRkZW50LCBmYURlZGVudCwgZmFIZWFydENpcmNsZUV4Y2xhbWF0aW9uLCBmYUhvdXNlLCBmYUhvbWUsIGZhSG9tZUFsdCwgZmFIb21lTGdBbHQsIGZhQ2FsZW5kYXJXZWVrLCBmYUxhcHRvcE1lZGljYWwsIGZhQiwgZmFGaWxlTWVkaWNhbCwgZmFEaWNlT25lLCBmYUtpd2lCaXJkLCBmYUFycm93UmlnaHRBcnJvd0xlZnQsIGZhRXhjaGFuZ2UsIGZhUm90YXRlUmlnaHQsIGZhUmVkb0FsdCwgZmFSb3RhdGVGb3J3YXJkLCBmYVV0ZW5zaWxzLCBmYUN1dGxlcnksIGZhQXJyb3dVcFdpZGVTaG9ydCwgZmFTb3J0QW1vdW50VXAsIGZhTWlsbFNpZ24sIGZhQm93bFJpY2UsIGZhU2t1bGwsIGZhVG93ZXJCcm9hZGNhc3QsIGZhQnJvYWRjYXN0VG93ZXIsIGZhVHJ1Y2tQaWNrdXAsIGZhVXBMb25nLCBmYUxvbmdBcnJvd0FsdFVwLCBmYVN0b3AsIGZhQ29kZU1lcmdlLCBmYVVwbG9hZCwgZmFIdXJyaWNhbmUsIGZhTW91bmQsIGZhVG9pbGV0UG9ydGFibGUsIGZhQ29tcGFjdERpc2MsIGZhRmlsZUFycm93RG93biwgZmFGaWxlRG93bmxvYWQsIGZhQ2FyYXZhbiwgZmFTaGllbGRDYXQsIGZhQm9sdCwgZmFaYXAsIGZhR2xhc3NXYXRlciwgZmFPaWxXZWxsLCBmYVZhdWx0LCBmYU1hcnMsIGZhVG9pbGV0LCBmYVBsYW5lQ2lyY2xlWG1hcmssIGZhWWVuU2lnbiwgZmFDbnksIGZhSnB5LCBmYVJtYiwgZmFZZW4sIGZhUnVibGVTaWduLCBmYVJvdWJsZSwgZmFSdWIsIGZhUnVibGUsIGZhU3VuLCBmYUd1aXRhciwgZmFGYWNlTGF1Z2hXaW5rLCBmYUxhdWdoV2luaywgZmFIb3JzZUhlYWQsIGZhQm9yZUhvbGUsIGZhSW5kdXN0cnksIGZhQ2lyY2xlRG93biwgZmFBcnJvd0FsdENpcmNsZURvd24sIGZhQXJyb3dzVHVyblRvRG90cywgZmFGbG9yaW5TaWduLCBmYUFycm93RG93blNob3J0V2lkZSwgZmFTb3J0QW1vdW50RGVzYywgZmFTb3J0QW1vdW50RG93bkFsdCwgZmFMZXNzVGhhbiwgZmFBbmdsZURvd24sIGZhQ2FyVHVubmVsLCBmYUhlYWRTaWRlQ291Z2gsIGZhR3JpcExpbmVzLCBmYVRodW1ic0Rvd24sIGZhVXNlckxvY2ssIGZhQXJyb3dSaWdodExvbmcsIGZhTG9uZ0Fycm93UmlnaHQsIGZhQW5jaG9yQ2lyY2xlWG1hcmssIGZhRWxsaXBzaXMsIGZhRWxsaXBzaXNILCBmYUNoZXNzUGF3biwgZmFLaXRNZWRpY2FsLCBmYUZpcnN0QWlkLCBmYVBlcnNvblRocm91Z2hXaW5kb3csIGZhVG9vbGJveCwgZmFIYW5kc0hvbGRpbmdDaXJjbGUsIGZhQnVnLCBmYUNyZWRpdENhcmQsIGZhQ3JlZGl0Q2FyZEFsdCwgZmFDYXIsIGZhQXV0b21vYmlsZSwgZmFIYW5kSG9sZGluZ0hhbmQsIGZhQm9va09wZW5SZWFkZXIsIGZhQm9va1JlYWRlciwgZmFNb3VudGFpblN1biwgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsIGZhRGljZUQyMCwgZmFUcnVja0Ryb3BsZXQsIGZhRmlsZUNpcmNsZVhtYXJrLCBmYVRlbXBlcmF0dXJlQXJyb3dVcCwgZmFUZW1wZXJhdHVyZVVwLCBmYU1lZGFsLCBmYUJlZCwgZmFTcXVhcmVILCBmYUhTcXVhcmUsIGZhUG9kY2FzdCwgZmFUZW1wZXJhdHVyZUZ1bGwsIGZhVGVtcGVyYXR1cmU0LCBmYVRoZXJtb21ldGVyNCwgZmFUaGVybW9tZXRlckZ1bGwsIGZhQmVsbCwgZmFTdXBlcnNjcmlwdCwgZmFQbHVnQ2lyY2xlWG1hcmssIGZhU3Rhck9mTGlmZSwgZmFQaG9uZVNsYXNoLCBmYVBhaW50Um9sbGVyLCBmYUhhbmRzaGFrZUFuZ2xlLCBmYUhhbmRzSGVscGluZywgZmFMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZXJBbHQsIGZhRmlsZSwgZmFHcmVhdGVyVGhhbiwgZmFQZXJzb25Td2ltbWluZywgZmFTd2ltbWVyLCBmYUFycm93RG93biwgZmFEcm9wbGV0LCBmYVRpbnQsIGZhRXJhc2VyLCBmYUVhcnRoQW1lcmljYXMsIGZhRWFydGgsIGZhRWFydGhBbWVyaWNhLCBmYUdsb2JlQW1lcmljYXMsIGZhUGVyc29uQnVyc3QsIGZhRG92ZSwgZmFCYXR0ZXJ5RW1wdHksIGZhQmF0dGVyeTAsIGZhU29ja3MsIGZhSW5ib3gsIGZhU2VjdGlvbiwgZmFHYXVnZUhpZ2gsIGZhVGFjaG9tZXRlckFsdCwgZmFUYWNob21ldGVyQWx0RmFzdCwgZmFFbnZlbG9wZU9wZW5UZXh0LCBmYUhvc3BpdGFsLCBmYUhvc3BpdGFsQWx0LCBmYUhvc3BpdGFsV2lkZSwgZmFXaW5lQm90dGxlLCBmYUNoZXNzUm9vaywgZmFCYXJzU3RhZ2dlcmVkLCBmYVJlb3JkZXIsIGZhU3RyZWFtLCBmYURoYXJtYWNoYWtyYSwgZmFIb3Rkb2csIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLCBmYUJsaW5kLCBmYURydW0sIGZhSWNlQ3JlYW0sIGZhSGVhcnRDaXJjbGVCb2x0LCBmYUZheCwgZmFQYXJhZ3JhcGgsIGZhQ2hlY2tUb1Nsb3QsIGZhVm90ZVllYSwgZmFTdGFySGFsZiwgZmFCb3hlc1N0YWNrZWQsIGZhQm94ZXMsIGZhQm94ZXNBbHQsIGZhTGluaywgZmFDaGFpbiwgZmFFYXJMaXN0ZW4sIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcywgZmFUcmVlQ2l0eSwgZmFQbGF5LCBmYUZvbnQsIGZhVGFibGVDZWxsc1Jvd0xvY2ssIGZhUnVwaWFoU2lnbiwgZmFNYWduaWZ5aW5nR2xhc3MsIGZhU2VhcmNoLCBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsIGZhVGFibGVUZW5uaXMsIGZhUGVyc29uRG90c0Zyb21MaW5lLCBmYURpYWdub3NlcywgZmFUcmFzaENhbkFycm93VXAsIGZhVHJhc2hSZXN0b3JlQWx0LCBmYU5haXJhU2lnbiwgZmFDYXJ0QXJyb3dEb3duLCBmYVdhbGtpZVRhbGtpZSwgZmFGaWxlUGVuLCBmYUZpbGVFZGl0LCBmYVJlY2VpcHQsIGZhU3F1YXJlUGVuLCBmYVBlblNxdWFyZSwgZmFQZW5jaWxTcXVhcmUsIGZhU3VpdGNhc2VSb2xsaW5nLCBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNoZXZyb25Eb3duLCBmYUJhdHRlcnlGdWxsLCBmYUJhdHRlcnksIGZhQmF0dGVyeTUsIGZhU2t1bGxDcm9zc2JvbmVzLCBmYUNvZGVDb21wYXJlLCBmYUxpc3RVbCwgZmFMaXN0RG90cywgZmFTY2hvb2xMb2NrLCBmYVRvd2VyQ2VsbCwgZmFEb3duTG9uZywgZmFMb25nQXJyb3dBbHREb3duLCBmYVJhbmtpbmdTdGFyLCBmYUNoZXNzS2luZywgZmFQZXJzb25IYXJhc3NpbmcsIGZhQnJhemlsaWFuUmVhbFNpZ24sIGZhTGFuZG1hcmtEb21lLCBmYUxhbmRtYXJrQWx0LCBmYUFycm93VXAsIGZhVHYsIGZhVGVsZXZpc2lvbiwgZmFUdkFsdCwgZmFTaHJpbXAsIGZhTGlzdENoZWNrLCBmYVRhc2tzLCBmYUp1Z0RldGVyZ2VudCwgZmFDaXJjbGVVc2VyLCBmYVVzZXJDaXJjbGUsIGZhVXNlclNoaWVsZCwgZmFXaW5kLCBmYUNhckJ1cnN0LCBmYUNhckNyYXNoLCBmYVksIGZhUGVyc29uU25vd2JvYXJkaW5nLCBmYVNub3dib2FyZGluZywgZmFUcnVja0Zhc3QsIGZhU2hpcHBpbmdGYXN0LCBmYUZpc2gsIGZhVXNlckdyYWR1YXRlLCBmYUNpcmNsZUhhbGZTdHJva2UsIGZhQWRqdXN0LCBmYUNsYXBwZXJib2FyZCwgZmFDaXJjbGVSYWRpYXRpb24sIGZhUmFkaWF0aW9uQWx0LCBmYUJhc2ViYWxsLCBmYUJhc2ViYWxsQmFsbCwgZmFKZXRGaWdodGVyVXAsIGZhRGlhZ3JhbVByb2plY3QsIGZhUHJvamVjdERpYWdyYW0sIGZhQ29weSwgZmFWb2x1bWVYbWFyaywgZmFWb2x1bWVNdXRlLCBmYVZvbHVtZVRpbWVzLCBmYUhhbmRTcGFya2xlcywgZmFHcmlwLCBmYUdyaXBIb3Jpem9udGFsLCBmYVNoYXJlRnJvbVNxdWFyZSwgZmFTaGFyZVNxdWFyZSwgZmFDaGlsZENvbWJhdGFudCwgZmFDaGlsZFJpZmxlLCBmYUd1biwgZmFTcXVhcmVQaG9uZSwgZmFQaG9uZVNxdWFyZSwgZmFQbHVzLCBmYUFkZCwgZmFFeHBhbmQsIGZhQ29tcHV0ZXIsIGZhWG1hcmssIGZhQ2xvc2UsIGZhTXVsdGlwbHksIGZhUmVtb3ZlLCBmYVRpbWVzLCBmYUFycm93c1VwRG93bkxlZnRSaWdodCwgZmFBcnJvd3MsIGZhQ2hhbGtib2FyZFVzZXIsIGZhQ2hhbGtib2FyZFRlYWNoZXIsIGZhUGVzb1NpZ24sIGZhQnVpbGRpbmdTaGllbGQsIGZhQmFieSwgZmFVc2Vyc0xpbmUsIGZhUXVvdGVMZWZ0LCBmYVF1b3RlTGVmdEFsdCwgZmFUcmFjdG9yLCBmYVRyYXNoQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmUsIGZhQXJyb3dEb3duVXBMb2NrLCBmYUxpbmVzTGVhbmluZywgZmFSdWxlckNvbWJpbmVkLCBmYUNvcHlyaWdodCwgZmFFcXVhbHMsIGZhQmxlbmRlciwgZmFUZWV0aCwgZmFTaGVrZWxTaWduLCBmYUlscywgZmFTaGVrZWwsIGZhU2hlcWVsLCBmYVNoZXFlbFNpZ24sIGZhTWFwLCBmYVJvY2tldCwgZmFQaG90b0ZpbG0sIGZhUGhvdG9WaWRlbywgZmFGb2xkZXJNaW51cywgZmFTdG9yZSwgZmFBcnJvd1RyZW5kVXAsIGZhUGx1Z0NpcmNsZU1pbnVzLCBmYVNpZ25IYW5naW5nLCBmYVNpZ24sIGZhQmV6aWVyQ3VydmUsIGZhQmVsbFNsYXNoLCBmYVRhYmxldCwgZmFUYWJsZXRBbmRyb2lkLCBmYVNjaG9vbEZsYWcsIGZhRmlsbCwgZmFBbmdsZVVwLCBmYURydW1zdGlja0JpdGUsIGZhSG9sbHlCZXJyeSwgZmFDaGV2cm9uTGVmdCwgZmFCYWN0ZXJpYSwgZmFIYW5kTGl6YXJkLCBmYU5vdGRlZiwgZmFEaXNlYXNlLCBmYUJyaWVmY2FzZU1lZGljYWwsIGZhR2VuZGVybGVzcywgZmFDaGV2cm9uUmlnaHQsIGZhUmV0d2VldCwgZmFDYXJSZWFyLCBmYUNhckFsdCwgZmFQdW1wU29hcCwgZmFWaWRlb1NsYXNoLCBmYUJhdHRlcnlRdWFydGVyLCBmYUJhdHRlcnkyLCBmYVJhZGlvLCBmYUJhYnlDYXJyaWFnZSwgZmFDYXJyaWFnZUJhYnksIGZhVHJhZmZpY0xpZ2h0LCBmYVRoZXJtb21ldGVyLCBmYVZyQ2FyZGJvYXJkLCBmYUhhbmRNaWRkbGVGaW5nZXIsIGZhUGVyY2VudCwgZmFQZXJjZW50YWdlLCBmYVRydWNrTW92aW5nLCBmYUdsYXNzV2F0ZXJEcm9wbGV0LCBmYURpc3BsYXksIGZhRmFjZVNtaWxlLCBmYVNtaWxlLCBmYVRodW1idGFjaywgZmFUaHVtYlRhY2ssIGZhVHJvcGh5LCBmYVBlcnNvblByYXlpbmcsIGZhUHJheSwgZmFIYW1tZXIsIGZhSGFuZFBlYWNlLCBmYVJvdGF0ZSwgZmFTeW5jQWx0LCBmYVNwaW5uZXIsIGZhUm9ib3QsIGZhUGVhY2UsIGZhR2VhcnMsIGZhQ29ncywgZmFXYXJlaG91c2UsIGZhQXJyb3dVcFJpZ2h0RG90cywgZmFTcGxvdGNoLCBmYUZhY2VHcmluSGVhcnRzLCBmYUdyaW5IZWFydHMsIGZhRGljZUZvdXIsIGZhU2ltQ2FyZCwgZmFUcmFuc2dlbmRlciwgZmFUcmFuc2dlbmRlckFsdCwgZmFNZXJjdXJ5LCBmYUFycm93VHVybkRvd24sIGZhTGV2ZWxEb3duLCBmYVBlcnNvbkZhbGxpbmdCdXJzdCwgZmFBd2FyZCwgZmFUaWNrZXRTaW1wbGUsIGZhVGlja2V0QWx0LCBmYUJ1aWxkaW5nLCBmYUFuZ2xlc0xlZnQsIGZhQW5nbGVEb3VibGVMZWZ0LCBmYVFyY29kZSwgZmFDbG9ja1JvdGF0ZUxlZnQsIGZhSGlzdG9yeSwgZmFGYWNlR3JpbkJlYW1Td2VhdCwgZmFHcmluQmVhbVN3ZWF0LCBmYUZpbGVFeHBvcnQsIGZhQXJyb3dSaWdodEZyb21GaWxlLCBmYVNoaWVsZCwgZmFTaGllbGRCbGFuaywgZmFBcnJvd1VwU2hvcnRXaWRlLCBmYVNvcnRBbW91bnRVcEFsdCwgZmFIb3VzZU1lZGljYWwsIGZhR29sZkJhbGxUZWUsIGZhR29sZkJhbGwsIGZhQ2lyY2xlQ2hldnJvbkxlZnQsIGZhQ2hldnJvbkNpcmNsZUxlZnQsIGZhSG91c2VDaGltbmV5V2luZG93LCBmYVBlbk5pYiwgZmFUZW50QXJyb3dUdXJuTGVmdCwgZmFUZW50cywgZmFXYW5kTWFnaWMsIGZhTWFnaWMsIGZhRG9nLCBmYUNhcnJvdCwgZmFNb29uLCBmYVdpbmVHbGFzc0VtcHR5LCBmYVdpbmVHbGFzc0FsdCwgZmFDaGVlc2UsIGZhWWluWWFuZywgZmFNdXNpYywgZmFDb2RlQ29tbWl0LCBmYVRlbXBlcmF0dXJlTG93LCBmYVBlcnNvbkJpa2luZywgZmFCaWtpbmcsIGZhQnJvb20sIGZhU2hpZWxkSGVhcnQsIGZhR29wdXJhbSwgZmFFYXJ0aE9jZWFuaWEsIGZhR2xvYmVPY2VhbmlhLCBmYVNxdWFyZVhtYXJrLCBmYVRpbWVzU3F1YXJlLCBmYVhtYXJrU3F1YXJlLCBmYUhhc2h0YWcsIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciwgZmFFeHBhbmRBbHQsIGZhT2lsQ2FuLCBmYVQsIGZhSGlwcG8sIGZhQ2hhcnRDb2x1bW4sIGZhSW5maW5pdHksIGZhVmlhbENpcmNsZUNoZWNrLCBmYVBlcnNvbkFycm93RG93blRvTGluZSwgZmFWb2ljZW1haWwsIGZhRmFuLCBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLCBmYVVwRG93biwgZmFBcnJvd3NBbHRWLCBmYUNsb3VkTW9vblJhaW4sIGZhQ2FsZW5kYXIsIGZhVHJhaWxlciwgZmFCYWhhaSwgZmFIYXlrYWwsIGZhU2RDYXJkLCBmYURyYWdvbiwgZmFTaG9lUHJpbnRzLCBmYUNpcmNsZVBsdXMsIGZhUGx1c0NpcmNsZSwgZmFGYWNlR3JpblRvbmd1ZVdpbmssIGZhR3JpblRvbmd1ZVdpbmssIGZhSGFuZEhvbGRpbmcsIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLCBmYUxpbmtTbGFzaCwgZmFDaGFpbkJyb2tlbiwgZmFDaGFpblNsYXNoLCBmYVVubGluaywgZmFDbG9uZSwgZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdCwgZmFBcnJvd1VwWkEsIGZhU29ydEFscGhhVXBBbHQsIGZhRmlyZUZsYW1lQ3VydmVkLCBmYUZpcmVBbHQsIGZhVG9ybmFkbywgZmFGaWxlQ2lyY2xlUGx1cywgZmFCb29rUXVyYW4sIGZhUXVyYW4sIGZhQW5jaG9yLCBmYUJvcmRlckFsbCwgZmFGYWNlQW5ncnksIGZhQW5ncnksIGZhQ29va2llQml0ZSwgZmFBcnJvd1RyZW5kRG93biwgZmFSc3MsIGZhRmVlZCwgZmFEcmF3UG9seWdvbiwgZmFTY2FsZUJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZSwgZmFHYXVnZVNpbXBsZUhpZ2gsIGZhVGFjaG9tZXRlciwgZmFUYWNob21ldGVyRmFzdCwgZmFTaG93ZXIsIGZhRGVza3RvcCwgZmFEZXNrdG9wQWx0LCBmYU0sIGZhVGFibGVMaXN0LCBmYVRoTGlzdCwgZmFDb21tZW50U21zLCBmYVNtcywgZmFCb29rLCBmYVVzZXJQbHVzLCBmYUNoZWNrLCBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzLCBmYUJhdHRlcnk0LCBmYUhvdXNlQ2lyY2xlQ2hlY2ssIGZhQW5nbGVMZWZ0LCBmYURpYWdyYW1TdWNjZXNzb3IsIGZhVHJ1Y2tBcnJvd1JpZ2h0LCBmYUFycm93c1NwbGl0VXBBbmRMZWZ0LCBmYUhhbmRGaXN0LCBmYUZpc3RSYWlzZWQsIGZhQ2xvdWRNb29uLCBmYUJyaWVmY2FzZSwgZmFQZXJzb25GYWxsaW5nLCBmYUltYWdlUG9ydHJhaXQsIGZhUG9ydHJhaXQsIGZhVXNlclRhZywgZmFSdWcsIGZhRWFydGhFdXJvcGUsIGZhR2xvYmVFdXJvcGUsIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwgZmFMdWdnYWdlQ2FydCwgZmFSZWN0YW5nbGVYbWFyaywgZmFSZWN0YW5nbGVUaW1lcywgZmFUaW1lc1JlY3RhbmdsZSwgZmFXaW5kb3dDbG9zZSwgZmFCYWh0U2lnbiwgZmFCb29rT3BlbiwgZmFCb29rSm91cm5hbFdoaWxscywgZmFKb3VybmFsV2hpbGxzLCBmYUhhbmRjdWZmcywgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsIGZhV2FybmluZywgZmFEYXRhYmFzZSwgZmFTaGFyZSwgZmFNYWlsRm9yd2FyZCwgZmFCb3R0bGVEcm9wbGV0LCBmYU1hc2tGYWNlLCBmYUhpbGxSb2Nrc2xpZGUsIGZhUmlnaHRMZWZ0LCBmYUV4Y2hhbmdlQWx0LCBmYVBhcGVyUGxhbmUsIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLCBmYUR1bmdlb24sIGZhQWxpZ25SaWdodCwgZmFNb25leUJpbGwxV2F2ZSwgZmFNb25leUJpbGxXYXZlQWx0LCBmYUxpZmVSaW5nLCBmYUhhbmRzLCBmYVNpZ25MYW5ndWFnZSwgZmFTaWduaW5nLCBmYUNhbGVuZGFyRGF5LCBmYVdhdGVyTGFkZGVyLCBmYUxhZGRlcldhdGVyLCBmYVN3aW1taW5nUG9vbCwgZmFBcnJvd3NVcERvd24sIGZhQXJyb3dzViwgZmFGYWNlR3JpbWFjZSwgZmFHcmltYWNlLCBmYVdoZWVsY2hhaXJNb3ZlLCBmYVdoZWVsY2hhaXJBbHQsIGZhVHVybkRvd24sIGZhTGV2ZWxEb3duQWx0LCBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LCBmYVNxdWFyZUVudmVsb3BlLCBmYUVudmVsb3BlU3F1YXJlLCBmYURpY2UsIGZhQm93bGluZ0JhbGwsIGZhQnJhaW4sIGZhQmFuZGFnZSwgZmFCYW5kQWlkLCBmYUNhbGVuZGFyTWludXMsIGZhQ2lyY2xlWG1hcmssIGZhVGltZXNDaXJjbGUsIGZhWG1hcmtDaXJjbGUsIGZhR2lmdHMsIGZhSG90ZWwsIGZhRWFydGhBc2lhLCBmYUdsb2JlQXNpYSwgZmFJZENhcmRDbGlwLCBmYUlkQ2FyZEFsdCwgZmFNYWduaWZ5aW5nR2xhc3NQbHVzLCBmYVNlYXJjaFBsdXMsIGZhVGh1bWJzVXAsIGZhVXNlckNsb2NrLCBmYUhhbmREb3RzLCBmYUFsbGVyZ2llcywgZmFGaWxlSW52b2ljZSwgZmFXaW5kb3dNaW5pbWl6ZSwgZmFNdWdTYXVjZXIsIGZhQ29mZmVlLCBmYUJydXNoLCBmYU1hc2ssIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsIGZhU2VhcmNoTWludXMsIGZhUnVsZXJWZXJ0aWNhbCwgZmFVc2VyTGFyZ2UsIGZhVXNlckFsdCwgZmFUcmFpblRyYW0sIGZhVXNlck51cnNlLCBmYVN5cmluZ2UsIGZhQ2xvdWRTdW4sIGZhU3RvcHdhdGNoMjAsIGZhU3F1YXJlRnVsbCwgZmFNYWduZXQsIGZhSmFyLCBmYU5vdGVTdGlja3ksIGZhU3RpY2t5Tm90ZSwgZmFCdWdTbGFzaCwgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwgZmFCb25lLCBmYVVzZXJJbmp1cmVkLCBmYUZhY2VTYWRUZWFyLCBmYVNhZFRlYXIsIGZhUGxhbmUsIGZhVGVudEFycm93c0Rvd24sIGZhRXhjbGFtYXRpb24sIGZhQXJyb3dzU3BpbiwgZmFQcmludCwgZmFUdXJraXNoTGlyYVNpZ24sIGZhVHJ5LCBmYVR1cmtpc2hMaXJhLCBmYURvbGxhclNpZ24sIGZhRG9sbGFyLCBmYVVzZCwgZmFYLCBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciwgZmFTZWFyY2hEb2xsYXIsIGZhVXNlcnNHZWFyLCBmYVVzZXJzQ29nLCBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsIGZhQnVpbGRpbmdDb2x1bW5zLCBmYUJhbmssIGZhSW5zdGl0dXRpb24sIGZhTXVzZXVtLCBmYVVuaXZlcnNpdHksIGZhVW1icmVsbGEsIGZhVHJvd2VsLCBmYUQsIGZhU3RhcGxlciwgZmFNYXNrc1RoZWF0ZXIsIGZhVGhlYXRlck1hc2tzLCBmYUtpcFNpZ24sIGZhSGFuZFBvaW50TGVmdCwgZmFIYW5kc2hha2VTaW1wbGUsIGZhSGFuZHNoYWtlQWx0LCBmYUpldEZpZ2h0ZXIsIGZhRmlnaHRlckpldCwgZmFTcXVhcmVTaGFyZU5vZGVzLCBmYVNoYXJlQWx0U3F1YXJlLCBmYUJhcmNvZGUsIGZhUGx1c01pbnVzLCBmYVZpZGVvLCBmYVZpZGVvQ2FtZXJhLCBmYUdyYWR1YXRpb25DYXAsIGZhTW9ydGFyQm9hcmQsIGZhSGFuZEhvbGRpbmdNZWRpY2FsLCBmYVBlcnNvbkNpcmNsZUNoZWNrLCBmYVR1cm5VcCwgZmFMZXZlbFVwQWx0IH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfd3JhcFJlZ0V4cCgpIHtcbiAgX3dyYXBSZWdFeHAgPSBmdW5jdGlvbiAocmUsIGdyb3Vwcykge1xuICAgIHJldHVybiBuZXcgQmFiZWxSZWdFeHAocmUsIHZvaWQgMCwgZ3JvdXBzKTtcbiAgfTtcblxuICB2YXIgX3N1cGVyID0gUmVnRXhwLnByb3RvdHlwZSxcbiAgICAgIF9ncm91cHMgPSBuZXcgV2Vha01hcCgpO1xuXG4gIGZ1bmN0aW9uIEJhYmVsUmVnRXhwKHJlLCBmbGFncywgZ3JvdXBzKSB7XG4gICAgdmFyIF90aGlzID0gbmV3IFJlZ0V4cChyZSwgZmxhZ3MpO1xuXG4gICAgcmV0dXJuIF9ncm91cHMuc2V0KF90aGlzLCBncm91cHMgfHwgX2dyb3Vwcy5nZXQocmUpKSwgX3NldFByb3RvdHlwZU9mKF90aGlzLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRHcm91cHMocmVzdWx0LCByZSkge1xuICAgIHZhciBnID0gX2dyb3Vwcy5nZXQocmUpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGcpLnJlZHVjZShmdW5jdGlvbiAoZ3JvdXBzLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZ3JvdXBzW25hbWVdID0gcmVzdWx0W2dbbmFtZV1dLCBncm91cHM7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgcmVzdWx0ID0gX3N1cGVyLmV4ZWMuY2FsbCh0aGlzLCBzdHIpO1xuXG4gICAgcmV0dXJuIHJlc3VsdCAmJiAocmVzdWx0Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHJlc3VsdCwgdGhpcykpLCByZXN1bHQ7XG4gIH0sIEJhYmVsUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wucmVwbGFjZV0gPSBmdW5jdGlvbiAoc3RyLCBzdWJzdGl0dXRpb24pIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2Ygc3Vic3RpdHV0aW9uKSB7XG4gICAgICB2YXIgZ3JvdXBzID0gX2dyb3Vwcy5nZXQodGhpcyk7XG5cbiAgICAgIHJldHVybiBfc3VwZXJbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgc3RyLCBzdWJzdGl0dXRpb24ucmVwbGFjZSgvXFwkPChbXj5dKyk+L2csIGZ1bmN0aW9uIChfLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBcIiRcIiArIGdyb3Vwc1tuYW1lXTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBzdWJzdGl0dXRpb24pIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBfc3VwZXJbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgc3RyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gXCJvYmplY3RcIiAhPSB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdICYmIChhcmdzID0gW10uc2xpY2UuY2FsbChhcmdzKSkucHVzaChidWlsZEdyb3VwcyhhcmdzLCBfdGhpcykpLCBzdWJzdGl0dXRpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3N1cGVyW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHN0ciwgc3Vic3RpdHV0aW9uKTtcbiAgfSwgX3dyYXBSZWdFeHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbnZhciBfV0lORE9XID0ge307XG52YXIgX0RPQ1VNRU5UID0ge307XG52YXIgX01VVEFUSU9OX09CU0VSVkVSID0gbnVsbDtcbnZhciBfUEVSRk9STUFOQ0UgPSB7XG4gIG1hcms6IG5vb3AsXG4gIG1lYXN1cmU6IG5vb3Bcbn07XG5cbnRyeSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgX1dJTkRPVyA9IHdpbmRvdztcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIF9ET0NVTUVOVCA9IGRvY3VtZW50O1xuICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSBfTVVUQVRJT05fT0JTRVJWRVIgPSBNdXRhdGlvbk9ic2VydmVyO1xuICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJykgX1BFUkZPUk1BTkNFID0gcGVyZm9ybWFuY2U7XG59IGNhdGNoIChlKSB7fVxuXG52YXIgX3JlZiA9IF9XSU5ET1cubmF2aWdhdG9yIHx8IHt9LFxuICAgIF9yZWYkdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQsXG4gICAgdXNlckFnZW50ID0gX3JlZiR1c2VyQWdlbnQgPT09IHZvaWQgMCA/ICcnIDogX3JlZiR1c2VyQWdlbnQ7XG52YXIgV0lORE9XID0gX1dJTkRPVztcbnZhciBET0NVTUVOVCA9IF9ET0NVTUVOVDtcbnZhciBNVVRBVElPTl9PQlNFUlZFUiA9IF9NVVRBVElPTl9PQlNFUlZFUjtcbnZhciBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTtcbnZhciBJU19CUk9XU0VSID0gISFXSU5ET1cuZG9jdW1lbnQ7XG52YXIgSVNfRE9NID0gISFET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQgJiYgISFET0NVTUVOVC5oZWFkICYmIHR5cGVvZiBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBET0NVTUVOVC5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xudmFyIElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG52YXIgX2ZhbWlseVByb3h5LCBfZmFtaWx5UHJveHkyLCBfZmFtaWx5UHJveHkzLCBfZmFtaWx5UHJveHk0LCBfZmFtaWx5UHJveHk1O1xuXG52YXIgTkFNRVNQQUNFX0lERU5USUZJRVIgPSAnX19fRk9OVF9BV0VTT01FX19fJztcbnZhciBVTklUU19JTl9HUklEID0gMTY7XG52YXIgREVGQVVMVF9DU1NfUFJFRklYID0gJ2ZhJztcbnZhciBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTID0gJ3N2Zy1pbmxpbmUtLWZhJztcbnZhciBEQVRBX0ZBX0kyU1ZHID0gJ2RhdGEtZmEtaTJzdmcnO1xudmFyIERBVEFfRkFfUFNFVURPX0VMRU1FTlQgPSAnZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCc7XG52YXIgREFUQV9GQV9QU0VVRE9fRUxFTUVOVF9QRU5ESU5HID0gJ2RhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZyc7XG52YXIgREFUQV9QUkVGSVggPSAnZGF0YS1wcmVmaXgnO1xudmFyIERBVEFfSUNPTiA9ICdkYXRhLWljb24nO1xudmFyIEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUyA9ICdmb250YXdlc29tZS1pMnN2Zyc7XG52YXIgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAnYXN5bmMnO1xudmFyIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTID0gWydIVE1MJywgJ0hFQUQnLCAnU1RZTEUnLCAnU0NSSVBUJ107XG52YXIgUFJPRFVDVElPTiA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSgpO1xudmFyIEZBTUlMWV9DTEFTU0lDID0gJ2NsYXNzaWMnO1xudmFyIEZBTUlMWV9TSEFSUCA9ICdzaGFycCc7XG52YXIgRkFNSUxJRVMgPSBbRkFNSUxZX0NMQVNTSUMsIEZBTUlMWV9TSEFSUF07XG5cbmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikge1xuICAvLyBEZWZhdWx0cyB0byB0aGUgY2xhc3NpYyBmYW1pbHkgaWYgZmFtaWx5IGlzIG5vdCBhdmFpbGFibGVcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldCA/IHRhcmdldFtwcm9wXSA6IHRhcmdldFtGQU1JTFlfQ0xBU1NJQ107XG4gICAgfVxuICB9KTtcbn1cbnZhciBQUkVGSVhfVE9fU1RZTEUgPSBmYW1pbHlQcm94eSgoX2ZhbWlseVByb3h5ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHksIEZBTUlMWV9DTEFTU0lDLCB7XG4gICdmYSc6ICdzb2xpZCcsXG4gICdmYXMnOiAnc29saWQnLFxuICAnZmEtc29saWQnOiAnc29saWQnLFxuICAnZmFyJzogJ3JlZ3VsYXInLFxuICAnZmEtcmVndWxhcic6ICdyZWd1bGFyJyxcbiAgJ2ZhbCc6ICdsaWdodCcsXG4gICdmYS1saWdodCc6ICdsaWdodCcsXG4gICdmYXQnOiAndGhpbicsXG4gICdmYS10aGluJzogJ3RoaW4nLFxuICAnZmFkJzogJ2R1b3RvbmUnLFxuICAnZmEtZHVvdG9uZSc6ICdkdW90b25lJyxcbiAgJ2ZhYic6ICdicmFuZHMnLFxuICAnZmEtYnJhbmRzJzogJ2JyYW5kcycsXG4gICdmYWsnOiAna2l0JyxcbiAgJ2Zha2QnOiAna2l0JyxcbiAgJ2ZhLWtpdCc6ICdraXQnLFxuICAnZmEta2l0LWR1b3RvbmUnOiAna2l0J1xufSksIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHksIEZBTUlMWV9TSEFSUCwge1xuICAnZmEnOiAnc29saWQnLFxuICAnZmFzcyc6ICdzb2xpZCcsXG4gICdmYS1zb2xpZCc6ICdzb2xpZCcsXG4gICdmYXNyJzogJ3JlZ3VsYXInLFxuICAnZmEtcmVndWxhcic6ICdyZWd1bGFyJyxcbiAgJ2Zhc2wnOiAnbGlnaHQnLFxuICAnZmEtbGlnaHQnOiAnbGlnaHQnLFxuICAnZmFzdCc6ICd0aGluJyxcbiAgJ2ZhLXRoaW4nOiAndGhpbidcbn0pLCBfZmFtaWx5UHJveHkpKTtcbnZhciBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eSgoX2ZhbWlseVByb3h5MiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5MiwgRkFNSUxZX0NMQVNTSUMsIHtcbiAgc29saWQ6ICdmYXMnLFxuICByZWd1bGFyOiAnZmFyJyxcbiAgbGlnaHQ6ICdmYWwnLFxuICB0aGluOiAnZmF0JyxcbiAgZHVvdG9uZTogJ2ZhZCcsXG4gIGJyYW5kczogJ2ZhYicsXG4gIGtpdDogJ2Zhaydcbn0pLCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5MiwgRkFNSUxZX1NIQVJQLCB7XG4gIHNvbGlkOiAnZmFzcycsXG4gIHJlZ3VsYXI6ICdmYXNyJyxcbiAgbGlnaHQ6ICdmYXNsJyxcbiAgdGhpbjogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5MikpO1xudmFyIFBSRUZJWF9UT19MT05HX1NUWUxFID0gZmFtaWx5UHJveHkoKF9mYW1pbHlQcm94eTMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTMsIEZBTUlMWV9DTEFTU0lDLCB7XG4gIGZhYjogJ2ZhLWJyYW5kcycsXG4gIGZhZDogJ2ZhLWR1b3RvbmUnLFxuICBmYWs6ICdmYS1raXQnLFxuICBmYWw6ICdmYS1saWdodCcsXG4gIGZhcjogJ2ZhLXJlZ3VsYXInLFxuICBmYXM6ICdmYS1zb2xpZCcsXG4gIGZhdDogJ2ZhLXRoaW4nXG59KSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTMsIEZBTUlMWV9TSEFSUCwge1xuICBmYXNzOiAnZmEtc29saWQnLFxuICBmYXNyOiAnZmEtcmVndWxhcicsXG4gIGZhc2w6ICdmYS1saWdodCcsXG4gIGZhc3Q6ICdmYS10aGluJ1xufSksIF9mYW1pbHlQcm94eTMpKTtcbnZhciBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KChfZmFtaWx5UHJveHk0ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHk0LCBGQU1JTFlfQ0xBU1NJQywge1xuICAnZmEtYnJhbmRzJzogJ2ZhYicsXG4gICdmYS1kdW90b25lJzogJ2ZhZCcsXG4gICdmYS1raXQnOiAnZmFrJyxcbiAgJ2ZhLWxpZ2h0JzogJ2ZhbCcsXG4gICdmYS1yZWd1bGFyJzogJ2ZhcicsXG4gICdmYS1zb2xpZCc6ICdmYXMnLFxuICAnZmEtdGhpbic6ICdmYXQnXG59KSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTQsIEZBTUlMWV9TSEFSUCwge1xuICAnZmEtc29saWQnOiAnZmFzcycsXG4gICdmYS1yZWd1bGFyJzogJ2Zhc3InLFxuICAnZmEtbGlnaHQnOiAnZmFzbCcsXG4gICdmYS10aGluJzogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5NCkpO1xudmFyIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOID0gL2ZhKHN8cnxsfHR8ZHxifGt8c3N8c3J8c2x8c3QpP1tcXC1cXCBdLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuXG52YXIgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FID0gJ2ZhLWxheWVycy10ZXh0JztcbnZhciBGT05UX0ZBTUlMWV9QQVRURVJOID0gL0ZvbnQgP0F3ZXNvbWUgPyhbNTYgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycHxLaXQpPy4qL2k7XG52YXIgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoKF9mYW1pbHlQcm94eTUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTUsIEZBTUlMWV9DTEFTU0lDLCB7XG4gIDkwMDogJ2ZhcycsXG4gIDQwMDogJ2ZhcicsXG4gIG5vcm1hbDogJ2ZhcicsXG4gIDMwMDogJ2ZhbCcsXG4gIDEwMDogJ2ZhdCdcbn0pLCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5NSwgRkFNSUxZX1NIQVJQLCB7XG4gIDkwMDogJ2Zhc3MnLFxuICA0MDA6ICdmYXNyJyxcbiAgMzAwOiAnZmFzbCcsXG4gIDEwMDogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5NSkpO1xudmFyIG9uZVRvVGVuID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbnZhciBvbmVUb1R3ZW50eSA9IG9uZVRvVGVuLmNvbmNhdChbMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdKTtcbnZhciBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWydjbGFzcycsICdkYXRhLXByZWZpeCcsICdkYXRhLWljb24nLCAnZGF0YS1mYS10cmFuc2Zvcm0nLCAnZGF0YS1mYS1tYXNrJ107XG52YXIgRFVPVE9ORV9DTEFTU0VTID0ge1xuICBHUk9VUDogJ2R1b3RvbmUtZ3JvdXAnLFxuICBTV0FQX09QQUNJVFk6ICdzd2FwLW9wYWNpdHknLFxuICBQUklNQVJZOiAncHJpbWFyeScsXG4gIFNFQ09OREFSWTogJ3NlY29uZGFyeSdcbn07XG52YXIgcHJlZml4ZXMgPSBuZXcgU2V0KCk7XG5PYmplY3Qua2V5cyhTVFlMRV9UT19QUkVGSVhbRkFNSUxZX0NMQVNTSUNdKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbk9iamVjdC5rZXlzKFNUWUxFX1RPX1BSRUZJWFtGQU1JTFlfU0hBUlBdKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbnZhciBSRVNFUlZFRF9DTEFTU0VTID0gW10uY29uY2F0KEZBTUlMSUVTLCBfdG9Db25zdW1hYmxlQXJyYXkocHJlZml4ZXMpLCBbJzJ4cycsICd4cycsICdzbScsICdsZycsICd4bCcsICcyeGwnLCAnYmVhdCcsICdib3JkZXInLCAnZmFkZScsICdiZWF0LWZhZGUnLCAnYm91bmNlJywgJ2ZsaXAtYm90aCcsICdmbGlwLWhvcml6b250YWwnLCAnZmxpcC12ZXJ0aWNhbCcsICdmbGlwJywgJ2Z3JywgJ2ludmVyc2UnLCAnbGF5ZXJzLWNvdW50ZXInLCAnbGF5ZXJzLXRleHQnLCAnbGF5ZXJzJywgJ2xpJywgJ3B1bGwtbGVmdCcsICdwdWxsLXJpZ2h0JywgJ3B1bHNlJywgJ3JvdGF0ZS0xODAnLCAncm90YXRlLTI3MCcsICdyb3RhdGUtOTAnLCAncm90YXRlLWJ5JywgJ3NoYWtlJywgJ3NwaW4tcHVsc2UnLCAnc3Bpbi1yZXZlcnNlJywgJ3NwaW4nLCAnc3RhY2stMXgnLCAnc3RhY2stMngnLCAnc3RhY2snLCAndWwnLCBEVU9UT05FX0NMQVNTRVMuR1JPVVAsIERVT1RPTkVfQ0xBU1NFUy5TV0FQX09QQUNJVFksIERVT1RPTkVfQ0xBU1NFUy5QUklNQVJZLCBEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZXSkuY29uY2F0KG9uZVRvVGVuLm1hcChmdW5jdGlvbiAobikge1xuICByZXR1cm4gXCJcIi5jb25jYXQobiwgXCJ4XCIpO1xufSkpLmNvbmNhdChvbmVUb1R3ZW50eS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIFwidy1cIi5jb25jYXQobik7XG59KSk7XG5cbnZhciBpbml0aWFsID0gV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnIHx8IHt9O1xuXG5mdW5jdGlvbiBnZXRBdHRyQ29uZmlnKGF0dHIpIHtcbiAgdmFyIGVsZW1lbnQgPSBET0NVTUVOVC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbJyArIGF0dHIgKyAnXScpO1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgLy8gR2V0dGluZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBvY2N1ciBpZiB0aGUgYXR0cmlidXRlIGlzIHNldCBvbiB0aGUgSFRNTCB0YWcgYnV0IHdpdGhvdXQgYSB2YWx1ZVxuICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB0aGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCBpdCBzaG91bGQgYmUgdG9nZ2xlZCB0byB0cnVlXG4gIGlmICh2YWwgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodmFsID09PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdmFsO1xufVxuXG5pZiAoRE9DVU1FTlQgJiYgdHlwZW9mIERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGF0dHJzID0gW1snZGF0YS1mYW1pbHktcHJlZml4JywgJ2ZhbWlseVByZWZpeCddLCBbJ2RhdGEtY3NzLXByZWZpeCcsICdjc3NQcmVmaXgnXSwgWydkYXRhLWZhbWlseS1kZWZhdWx0JywgJ2ZhbWlseURlZmF1bHQnXSwgWydkYXRhLXN0eWxlLWRlZmF1bHQnLCAnc3R5bGVEZWZhdWx0J10sIFsnZGF0YS1yZXBsYWNlbWVudC1jbGFzcycsICdyZXBsYWNlbWVudENsYXNzJ10sIFsnZGF0YS1hdXRvLXJlcGxhY2Utc3ZnJywgJ2F1dG9SZXBsYWNlU3ZnJ10sIFsnZGF0YS1hdXRvLWFkZC1jc3MnLCAnYXV0b0FkZENzcyddLCBbJ2RhdGEtYXV0by1hMTF5JywgJ2F1dG9BMTF5J10sIFsnZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzJywgJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJ10sIFsnZGF0YS1vYnNlcnZlLW11dGF0aW9ucycsICdvYnNlcnZlTXV0YXRpb25zJ10sIFsnZGF0YS1tdXRhdGUtYXBwcm9hY2gnLCAnbXV0YXRlQXBwcm9hY2gnXSwgWydkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlJywgJ2tlZXBPcmlnaW5hbFNvdXJjZSddLCBbJ2RhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZScsICdtZWFzdXJlUGVyZm9ybWFuY2UnXSwgWydkYXRhLXNob3ctbWlzc2luZy1pY29ucycsICdzaG93TWlzc2luZ0ljb25zJ11dO1xuICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGF0dHIgPSBfcmVmMlswXSxcbiAgICAgICAga2V5ID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpO1xuXG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHtcbiAgc3R5bGVEZWZhdWx0OiAnc29saWQnLFxuICBmYW1pbHlEZWZhdWx0OiAnY2xhc3NpYycsXG4gIGNzc1ByZWZpeDogREVGQVVMVF9DU1NfUFJFRklYLFxuICByZXBsYWNlbWVudENsYXNzOiBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTLFxuICBhdXRvUmVwbGFjZVN2ZzogdHJ1ZSxcbiAgYXV0b0FkZENzczogdHJ1ZSxcbiAgYXV0b0ExMXk6IHRydWUsXG4gIHNlYXJjaFBzZXVkb0VsZW1lbnRzOiBmYWxzZSxcbiAgb2JzZXJ2ZU11dGF0aW9uczogdHJ1ZSxcbiAgbXV0YXRlQXBwcm9hY2g6ICdhc3luYycsXG4gIGtlZXBPcmlnaW5hbFNvdXJjZTogdHJ1ZSxcbiAgbWVhc3VyZVBlcmZvcm1hbmNlOiBmYWxzZSxcbiAgc2hvd01pc3NpbmdJY29uczogdHJ1ZVxufTsgLy8gZmFtaWx5UHJlZml4IGlzIGRlcHJlY2F0ZWQgYnV0IHdlIG11c3Qgc3RpbGwgc3VwcG9ydCBpdCBpZiBwcmVzZW50XG5cbmlmIChpbml0aWFsLmZhbWlseVByZWZpeCkge1xuICBpbml0aWFsLmNzc1ByZWZpeCA9IGluaXRpYWwuZmFtaWx5UHJlZml4O1xufVxuXG52YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfZGVmYXVsdCksIGluaXRpYWwpO1xuXG5pZiAoIV9jb25maWcuYXV0b1JlcGxhY2VTdmcpIF9jb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlO1xudmFyIGNvbmZpZyA9IHt9O1xuT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgX2NvbmZpZ1trZXldID0gdmFsO1xuXG4gICAgICBfb25DaGFuZ2VDYi5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICByZXR1cm4gY2IoY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbmZpZ1trZXldO1xuICAgIH1cbiAgfSk7XG59KTsgLy8gZmFtaWx5UHJlZml4IGlzIGRlcHJlY2F0ZWQgYXMgb2YgNi4yLjAgYW5kIHNob3VsZCBiZSByZW1vdmVkIGluIDcuMC4wXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcsICdmYW1pbHlQcmVmaXgnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIF9jb25maWcuY3NzUHJlZml4ID0gdmFsO1xuXG4gICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgIHJldHVybiBjYihjb25maWcpO1xuICAgIH0pO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmZpZy5jc3NQcmVmaXg7XG4gIH1cbn0pO1xuV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnID0gY29uZmlnO1xudmFyIF9vbkNoYW5nZUNiID0gW107XG5mdW5jdGlvbiBvbkNoYW5nZShjYikge1xuICBfb25DaGFuZ2VDYi5wdXNoKGNiKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIF9vbkNoYW5nZUNiLnNwbGljZShfb25DaGFuZ2VDYi5pbmRleE9mKGNiKSwgMSk7XG4gIH07XG59XG5cbnZhciBkID0gVU5JVFNfSU5fR1JJRDtcbnZhciBtZWFuaW5nbGVzc1RyYW5zZm9ybSA9IHtcbiAgc2l6ZTogMTYsXG4gIHg6IDAsXG4gIHk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgZmxpcFg6IGZhbHNlLFxuICBmbGlwWTogZmFsc2Vcbn07XG5mdW5jdGlvbiBpbnNlcnRDc3MoY3NzKSB7XG4gIGlmICghY3NzIHx8ICFJU19ET00pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICB2YXIgaGVhZENoaWxkcmVuID0gRE9DVU1FTlQuaGVhZC5jaGlsZE5vZGVzO1xuICB2YXIgYmVmb3JlQ2hpbGQgPSBudWxsO1xuXG4gIGZvciAodmFyIGkgPSBoZWFkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICB2YXIgY2hpbGQgPSBoZWFkQ2hpbGRyZW5baV07XG4gICAgdmFyIHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChbJ1NUWUxFJywgJ0xJTksnXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHtcbiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7XG4gICAgfVxuICB9XG5cbiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTtcbiAgcmV0dXJuIGNzcztcbn1cbnZhciBpZFBvb2wgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuZnVuY3Rpb24gbmV4dFVuaXF1ZUlkKCkge1xuICB2YXIgc2l6ZSA9IDEyO1xuICB2YXIgaWQgPSAnJztcblxuICB3aGlsZSAoc2l6ZS0tID4gMCkge1xuICAgIGlkICs9IGlkUG9vbFtNYXRoLnJhbmRvbSgpICogNjIgfCAwXTtcbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAob2JqIHx8IFtdKS5sZW5ndGggPj4+IDA7IGktLTspIHtcbiAgICBhcnJheVtpXSA9IG9ialtpXTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbmZ1bmN0aW9uIGNsYXNzQXJyYXkobm9kZSkge1xuICBpZiAobm9kZS5jbGFzc0xpc3QpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlLmNsYXNzTGlzdCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBodG1sRXNjYXBlKHN0cikge1xuICByZXR1cm4gXCJcIi5jb25jYXQoc3RyKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5mdW5jdGlvbiBqb2luQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgYXR0cmlidXRlTmFtZSkge1xuICAgIHJldHVybiBhY2MgKyBcIlwiLmNvbmNhdChhdHRyaWJ1dGVOYW1lLCBcIj1cXFwiXCIpLmNvbmNhdChodG1sRXNjYXBlKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pLCBcIlxcXCIgXCIpO1xuICB9LCAnJykudHJpbSgpO1xufVxuZnVuY3Rpb24gam9pblN0eWxlcyhzdHlsZXMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN0eWxlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHN0eWxlTmFtZSkge1xuICAgIHJldHVybiBhY2MgKyBcIlwiLmNvbmNhdChzdHlsZU5hbWUsIFwiOiBcIikuY29uY2F0KHN0eWxlc1tzdHlsZU5hbWVdLnRyaW0oKSwgXCI7XCIpO1xuICB9LCAnJyk7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtKSB7XG4gIHJldHVybiB0cmFuc2Zvcm0uc2l6ZSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0uc2l6ZSB8fCB0cmFuc2Zvcm0ueCAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueCB8fCB0cmFuc2Zvcm0ueSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueSB8fCB0cmFuc2Zvcm0ucm90YXRlICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5yb3RhdGUgfHwgdHJhbnNmb3JtLmZsaXBYIHx8IHRyYW5zZm9ybS5mbGlwWTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUZvclN2ZyhfcmVmKSB7XG4gIHZhciB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybSxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gX3JlZi5jb250YWluZXJXaWR0aCxcbiAgICAgIGljb25XaWR0aCA9IF9yZWYuaWNvbldpZHRoO1xuICB2YXIgb3V0ZXIgPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCBcIiAyNTYpXCIpXG4gIH07XG4gIHZhciBpbm5lclRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ueCAqIDMyLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAqIDMyLCBcIikgXCIpO1xuICB2YXIgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICB2YXIgaW5uZXJSb3RhdGUgPSBcInJvdGF0ZShcIi5jb25jYXQodHJhbnNmb3JtLnJvdGF0ZSwgXCIgMCAwKVwiKTtcbiAgdmFyIGlubmVyID0ge1xuICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgfTtcbiAgdmFyIHBhdGggPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICB9O1xuICByZXR1cm4ge1xuICAgIG91dGVyOiBvdXRlcixcbiAgICBpbm5lcjogaW5uZXIsXG4gICAgcGF0aDogcGF0aFxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtRm9yQ3NzKF9yZWYyKSB7XG4gIHZhciB0cmFuc2Zvcm0gPSBfcmVmMi50cmFuc2Zvcm0sXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJHdpZHRoLFxuICAgICAgX3JlZjIkaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgaGVpZ2h0ID0gX3JlZjIkaGVpZ2h0ID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkaGVpZ2h0LFxuICAgICAgX3JlZjIkc3RhcnRDZW50ZXJlZCA9IF9yZWYyLnN0YXJ0Q2VudGVyZWQsXG4gICAgICBzdGFydENlbnRlcmVkID0gX3JlZjIkc3RhcnRDZW50ZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdGFydENlbnRlcmVkO1xuICB2YXIgdmFsID0gJyc7XG5cbiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCAtIHdpZHRoIC8gMiwgXCJlbSwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQgLSBoZWlnaHQgLyAyLCBcImVtKSBcIik7XG4gIH0gZWxzZSBpZiAoc3RhcnRDZW50ZXJlZCkge1xuICAgIHZhbCArPSBcInRyYW5zbGF0ZShjYWxjKC01MCUgKyBcIi5jb25jYXQodHJhbnNmb3JtLnggLyBkLCBcImVtKSwgY2FsYygtNTAlICsgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQsIFwiZW0pKSBcIik7XG4gIH0gZWxzZSB7XG4gICAgdmFsICs9IFwidHJhbnNsYXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ueCAvIGQsIFwiZW0sIFwiKS5jb25jYXQodHJhbnNmb3JtLnkgLyBkLCBcImVtKSBcIik7XG4gIH1cblxuICB2YWwgKz0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkICogKHRyYW5zZm9ybS5mbGlwWCA/IC0xIDogMSksIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gZCAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICB2YWwgKz0gXCJyb3RhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS5yb3RhdGUsIFwiZGVnKSBcIik7XG4gIHJldHVybiB2YWw7XG59XG5cbnZhciBiYXNlU3R5bGVzID0gXCI6cm9vdCwgOmhvc3Qge1xcbiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTb2xpZFxcXCI7XFxuICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgUmVndWxhclxcXCI7XFxuICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IExpZ2h0XFxcIjtcXG4gIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBUaGluXFxcIjtcXG4gIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBEdW90b25lXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnBcXFwiO1xcbiAgLS1mYS1mb250LXNoYXJwLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnBcXFwiO1xcbiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1xcXCI7XFxufVxcblxcbnN2Zzpub3QoOnJvb3QpLnN2Zy1pbmxpbmUtLWZhLCBzdmc6bm90KDpob3N0KS5zdmctaW5saW5lLS1mYSB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEge1xcbiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTtcXG4gIGhlaWdodDogMWVtO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xcbiAgdmVydGljYWwtYWxpZ246IDAuMWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xcbiAgdmVydGljYWwtYWxpZ246IDBlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzA1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIHRvcDogMC4yNWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEtZncge1xcbiAgd2lkdGg6IHZhcigtLWZhLWZ3LXdpZHRoLCAxLjI1ZW0pO1xcbn1cXG5cXG4uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYSB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG4gIHdpZHRoOiAxZW07XFxufVxcbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycy10ZXh0IHtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTtcXG4gIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7XFxuICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xcbn1cXG5cXG4uZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7XFxuICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7XFxuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xcbiAgdG9wOiBhdXRvO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7XFxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSByaWdodDtcXG59XFxuXFxuLmZhLWxheWVycy1ib3R0b20tbGVmdCB7XFxuICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7XFxuICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdG9wOiBhdXRvO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7XFxufVxcblxcbi5mYS1sYXllcnMtdG9wLXJpZ2h0IHtcXG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcXG4gIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xcbn1cXG5cXG4uZmEtbGF5ZXJzLXRvcC1sZWZ0IHtcXG4gIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApO1xcbiAgcmlnaHQ6IGF1dG87XFxuICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcXG59XFxuXFxuLmZhLTF4IHtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5cXG4uZmEtMngge1xcbiAgZm9udC1zaXplOiAyZW07XFxufVxcblxcbi5mYS0zeCB7XFxuICBmb250LXNpemU6IDNlbTtcXG59XFxuXFxuLmZhLTR4IHtcXG4gIGZvbnQtc2l6ZTogNGVtO1xcbn1cXG5cXG4uZmEtNXgge1xcbiAgZm9udC1zaXplOiA1ZW07XFxufVxcblxcbi5mYS02eCB7XFxuICBmb250LXNpemU6IDZlbTtcXG59XFxuXFxuLmZhLTd4IHtcXG4gIGZvbnQtc2l6ZTogN2VtO1xcbn1cXG5cXG4uZmEtOHgge1xcbiAgZm9udC1zaXplOiA4ZW07XFxufVxcblxcbi5mYS05eCB7XFxuICBmb250LXNpemU6IDllbTtcXG59XFxuXFxuLmZhLTEweCB7XFxuICBmb250LXNpemU6IDEwZW07XFxufVxcblxcbi5mYS0yeHMge1xcbiAgZm9udC1zaXplOiAwLjYyNWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjI1ZW07XFxufVxcblxcbi5mYS14cyB7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA4MzMzMzMzMzdlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAwLjEyNWVtO1xcbn1cXG5cXG4uZmEtc20ge1xcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMDcxNDI4NTcxOGVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMDUzNTcxNDI5NWVtO1xcbn1cXG5cXG4uZmEtbGcge1xcbiAgZm9udC1zaXplOiAxLjI1ZW07XFxuICBsaW5lLWhlaWdodDogMC4wNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3NWVtO1xcbn1cXG5cXG4uZmEteGwge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA0MTY2NjY2ODJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG59XFxuXFxuLmZhLTJ4bCB7XFxuICBmb250LXNpemU6IDJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjAzMTI1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTg3NWVtO1xcbn1cXG5cXG4uZmEtZncge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDEuMjVlbTtcXG59XFxuXFxuLmZhLXVsIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmZhLXVsID4gbGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZmEtbGkge1xcbiAgbGVmdDogY2FsYyh2YXIoLS1mYS1saS13aWR0aCwgMmVtKSAqIC0xKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uZmEtYm9yZGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTtcXG4gIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wOGVtKTtcXG4gIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjJlbSAwLjI1ZW0gMC4xNWVtKTtcXG59XFxuXFxuLmZhLXB1bGwtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTtcXG59XFxuXFxuLmZhLXB1bGwtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxufVxcblxcbi5mYS1iZWF0IHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQ7XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0O1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XFxufVxcblxcbi5mYS1ib3VuY2Uge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYm91bmNlO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTtcXG59XFxuXFxuLmZhLWZhZGUge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtZmFkZTtcXG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XFxufVxcblxcbi5mYS1iZWF0LWZhZGUge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xcbn1cXG5cXG4uZmEtZmxpcCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbn1cXG5cXG4uZmEtc2hha2Uge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtc2hha2U7XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxufVxcblxcbi5mYS1zcGluIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTtcXG59XFxuXFxuLmZhLXNwaW4tcmV2ZXJzZSB7XFxuICAtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7XFxufVxcblxcbi5mYS1wdWxzZSxcXG4uZmEtc3Bpbi1wdWxzZSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZhLWJlYXQsXFxuLmZhLWJvdW5jZSxcXG4uZmEtZmFkZSxcXG4uZmEtYmVhdC1mYWRlLFxcbi5mYS1mbGlwLFxcbi5mYS1wdWxzZSxcXG4uZmEtc2hha2UsXFxuLmZhLXNwaW4sXFxuLmZhLXNwaW4tcHVsc2Uge1xcbiAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLTFtcztcXG4gICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0xbXM7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAxbXM7XFxuICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxbXM7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcXG4gICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDBzO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtYmVhdCB7XFxuICAwJSwgOTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA0NSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWJlYXQge1xcbiAgMCUsIDkwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNDUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWJvdW5jZSB7XFxuICAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDEwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAzMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNTclIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgfVxcbiAgNjQlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1ib3VuY2Uge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAxMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMzAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDU3JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTtcXG4gIH1cXG4gIDY0JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7XFxuICAwJSwgMTAwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHtcXG4gIDAlLCAxMDAlIHtcXG4gICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWZsaXAge1xcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mbGlwIHtcXG4gIDUwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zaGFrZSB7XFxuICAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgfVxcbiAgNCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7XFxuICB9XFxuICA4JSwgMjQlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XFxuICB9XFxuICAxMiUsIDI4JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcXG4gIH1cXG4gIDE2JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpO1xcbiAgfVxcbiAgMjAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjJkZWcpO1xcbiAgfVxcbiAgMzIlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICB9XFxuICAzNiUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7XFxuICB9XFxuICA0MCUsIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLXNoYWtlIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7XFxuICB9XFxuICA0JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcXG4gIH1cXG4gIDglLCAyNCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTtcXG4gIH1cXG4gIDEyJSwgMjglIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxOGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgfVxcbiAgMTYlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZyk7XFxuICB9XFxuICAyMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7XFxuICB9XFxuICAzMiUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTtcXG4gIH1cXG4gIDM2JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcXG4gIH1cXG4gIDQwJSwgMTAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuLmZhLXJvdGF0ZS05MCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcbn1cXG5cXG4uZmEtcm90YXRlLTE4MCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMjcwIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG59XFxuXFxuLmZhLWZsaXAtaG9yaXpvbnRhbCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcXG59XFxuXFxuLmZhLWZsaXAtdmVydGljYWwge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XFxufVxcblxcbi5mYS1mbGlwLWJvdGgsXFxuLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgLTEpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7XFxufVxcblxcbi5mYS1yb3RhdGUtYnkge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1yb3RhdGUtYW5nbGUsIDApKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7XFxufVxcblxcbi5mYS1zdGFjayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgaGVpZ2h0OiAyZW07XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMi41ZW07XFxufVxcblxcbi5mYS1zdGFjay0xeCxcXG4uZmEtc3RhY2stMngge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG1hcmdpbjogYXV0bztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHdpZHRoOiAxLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7XFxuICBoZWlnaHQ6IDJlbTtcXG4gIHdpZHRoOiAyLjVlbTtcXG59XFxuXFxuLmZhLWludmVyc2Uge1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbn1cXG5cXG4uc3Itb25seSxcXG4uZmEtc3Itb25seSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAtMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG5cXG4uc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cyksXFxuLmZhLXNyLW9ubHktZm9jdXNhYmxlOm5vdCg6Zm9jdXMpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IC0xcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7XFxuICBmaWxsOiB2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcXG59XFxuXFxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xcbiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXByaW1hcnkge1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XFxuICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpO1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSxcXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtc2Vjb25kYXJ5IHtcXG4gIGZpbGw6IGJsYWNrO1xcbn1cXG5cXG4uZmFkLmZhLWludmVyc2UsXFxuLmZhLWR1b3RvbmUuZmEtaW52ZXJzZSB7XFxuICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7XFxufVwiO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIHZhciBkY3AgPSBERUZBVUxUX0NTU19QUkVGSVg7XG4gIHZhciBkcmMgPSBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTO1xuICB2YXIgZnAgPSBjb25maWcuY3NzUHJlZml4O1xuICB2YXIgcmMgPSBjb25maWcucmVwbGFjZW1lbnRDbGFzcztcbiAgdmFyIHMgPSBiYXNlU3R5bGVzO1xuXG4gIGlmIChmcCAhPT0gZGNwIHx8IHJjICE9PSBkcmMpIHtcbiAgICB2YXIgZFBhdHQgPSBuZXcgUmVnRXhwKFwiXFxcXC5cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIHZhciBjdXN0b21Qcm9wUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLS1cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIHZhciByUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLlwiLmNvbmNhdChkcmMpLCAnZycpO1xuICAgIHMgPSBzLnJlcGxhY2UoZFBhdHQsIFwiLlwiLmNvbmNhdChmcCwgXCItXCIpKS5yZXBsYWNlKGN1c3RvbVByb3BQYXR0LCBcIi0tXCIuY29uY2F0KGZwLCBcIi1cIikpLnJlcGxhY2UoclBhdHQsIFwiLlwiLmNvbmNhdChyYykpO1xuICB9XG5cbiAgcmV0dXJuIHM7XG59XG5cbnZhciBfY3NzSW5zZXJ0ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW5zdXJlQ3NzKCkge1xuICBpZiAoY29uZmlnLmF1dG9BZGRDc3MgJiYgIV9jc3NJbnNlcnRlZCkge1xuICAgIGluc2VydENzcyhjc3MoKSk7XG4gICAgX2Nzc0luc2VydGVkID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgSW5qZWN0Q1NTID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIGNzczogY3NzLFxuICAgICAgICBpbnNlcnRDc3M6IGVuc3VyZUNzc1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOiBmdW5jdGlvbiBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZUkyc3ZnOiBmdW5jdGlvbiBiZWZvcmVJMnN2ZygpIHtcbiAgICAgICAgZW5zdXJlQ3NzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIHcgPSBXSU5ET1cgfHwge307XG5pZiAoIXdbTkFNRVNQQUNFX0lERU5USUZJRVJdKSB3W05BTUVTUEFDRV9JREVOVElGSUVSXSA9IHt9O1xuaWYgKCF3W05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMpIHdbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcyA9IHt9O1xuaWYgKCF3W05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcykgd1tOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MgPSB7fTtcbmlmICghd1tOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMpIHdbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zID0gW107XG52YXIgbmFtZXNwYWNlID0gd1tOQU1FU1BBQ0VfSURFTlRJRklFUl07XG5cbnZhciBmdW5jdGlvbnMgPSBbXTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gIERPQ1VNRU5ULnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBsaXN0ZW5lcik7XG4gIGxvYWRlZCA9IDE7XG4gIGZ1bmN0aW9ucy5tYXAoZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0pO1xufTtcblxudmFyIGxvYWRlZCA9IGZhbHNlO1xuXG5pZiAoSVNfRE9NKSB7XG4gIGxvYWRlZCA9IChET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoRE9DVU1FTlQucmVhZHlTdGF0ZSk7XG4gIGlmICghbG9hZGVkKSBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgbGlzdGVuZXIpO1xufVxuXG5mdW5jdGlvbiBkb21yZWFkeSAoZm4pIHtcbiAgaWYgKCFJU19ET00pIHJldHVybjtcbiAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmdW5jdGlvbnMucHVzaChmbik7XG59XG5cbmZ1bmN0aW9uIHRvSHRtbChhYnN0cmFjdE5vZGVzKSB7XG4gIHZhciB0YWcgPSBhYnN0cmFjdE5vZGVzLnRhZyxcbiAgICAgIF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9IGFic3RyYWN0Tm9kZXMuYXR0cmlidXRlcyxcbiAgICAgIGF0dHJpYnV0ZXMgPSBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPT09IHZvaWQgMCA/IHt9IDogX2Fic3RyYWN0Tm9kZXMkYXR0cmliLFxuICAgICAgX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID0gYWJzdHJhY3ROb2Rlcy5jaGlsZHJlbixcbiAgICAgIGNoaWxkcmVuID0gX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID09PSB2b2lkIDAgPyBbXSA6IF9hYnN0cmFjdE5vZGVzJGNoaWxkcjtcblxuICBpZiAodHlwZW9mIGFic3RyYWN0Tm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGh0bWxFc2NhcGUoYWJzdHJhY3ROb2Rlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiPFwiLmNvbmNhdCh0YWcsIFwiIFwiKS5jb25jYXQoam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyksIFwiPlwiKS5jb25jYXQoY2hpbGRyZW4ubWFwKHRvSHRtbCkuam9pbignJyksIFwiPC9cIikuY29uY2F0KHRhZywgXCI+XCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGljb25Gcm9tTWFwcGluZyhtYXBwaW5nLCBwcmVmaXgsIGljb25OYW1lKSB7XG4gIGlmIChtYXBwaW5nICYmIG1hcHBpbmdbcHJlZml4XSAmJiBtYXBwaW5nW3ByZWZpeF1baWNvbk5hbWVdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgICAgaWNvbjogbWFwcGluZ1twcmVmaXhdW2ljb25OYW1lXVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgdG8gYmluZCBhIGZ1bmN0aW9uIGtub3duIHRvIGhhdmUgNCBhcmd1bWVudHNcbiAqIHRvIGEgZ2l2ZW4gY29udGV4dC5cbiAqL1xuXG52YXIgYmluZEludGVybmFsNCA9IGZ1bmN0aW9uIGJpbmRJbnRlcm5hbDQoZnVuYywgdGhpc0NvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQ29udGV4dCwgYSwgYiwgYywgZCk7XG4gIH07XG59O1xuXG4vKipcbiAqICMgUmVkdWNlXG4gKlxuICogQSBmYXN0IG9iamVjdCBgLnJlZHVjZSgpYCBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgc3ViamVjdCAgICAgIFRoZSBvYmplY3QgdG8gcmVkdWNlIG92ZXIuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gICAgICAgICAgIFRoZSByZWR1Y2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7bWl4ZWR9ICAgIGluaXRpYWxWYWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHJlZHVjZXIsIGRlZmF1bHRzIHRvIHN1YmplY3RbMF0uXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgdGhpc0NvbnRleHQgIFRoZSBjb250ZXh0IGZvciB0aGUgcmVkdWNlci5cbiAqIEByZXR1cm4ge21peGVkfSAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHJlc3VsdC5cbiAqL1xuXG5cbnZhciByZWR1Y2UgPSBmdW5jdGlvbiBmYXN0UmVkdWNlT2JqZWN0KHN1YmplY3QsIGZuLCBpbml0aWFsVmFsdWUsIHRoaXNDb250ZXh0KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3ViamVjdCksXG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgIGl0ZXJhdG9yID0gdGhpc0NvbnRleHQgIT09IHVuZGVmaW5lZCA/IGJpbmRJbnRlcm5hbDQoZm4sIHRoaXNDb250ZXh0KSA6IGZuLFxuICAgICAgaSxcbiAgICAgIGtleSxcbiAgICAgIHJlc3VsdDtcblxuICBpZiAoaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMTtcbiAgICByZXN1bHQgPSBzdWJqZWN0W2tleXNbMF1dO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICAgIHJlc3VsdCA9IGluaXRpYWxWYWx1ZTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgc3ViamVjdFtrZXldLCBrZXksIHN1YmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogdWNzMmRlY29kZSgpIGFuZCBjb2RlUG9pbnRBdCgpIGFyZSBib3RoIHdvcmtzIG9mIE1hdGhpYXMgQnluZW5zIGFuZCBsaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBDb3B5cmlnaHQgTWF0aGlhcyBCeW5lbnMgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS8+XG5cbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4gKiBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xuICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG4gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbiAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKi9cbmZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXG4gICAgICBpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gdG9IZXgodW5pY29kZSkge1xuICB2YXIgZGVjb2RlZCA9IHVjczJkZWNvZGUodW5pY29kZSk7XG4gIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMSA/IGRlY29kZWRbMF0udG9TdHJpbmcoMTYpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgaW5kZXgpIHtcbiAgdmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgZmlyc3QgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG4gIHZhciBzZWNvbmQ7XG5cbiAgaWYgKGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgc2l6ZSA+IGluZGV4ICsgMSkge1xuICAgIHNlY29uZCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cbiAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICByZXR1cm4gKGZpcnN0IC0gMHhEODAwKSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlyc3Q7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUljb25zKGljb25zKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhpY29ucykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGljb25OYW1lKSB7XG4gICAgdmFyIGljb24gPSBpY29uc1tpY29uTmFtZV07XG4gICAgdmFyIGV4cGFuZGVkID0gISFpY29uLmljb247XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIGFjY1tpY29uLmljb25OYW1lXSA9IGljb24uaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2ljb25OYW1lXSA9IGljb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXgsIGljb25zKSB7XG4gIHZhciBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICB2YXIgX3BhcmFtcyRza2lwSG9va3MgPSBwYXJhbXMuc2tpcEhvb2tzLFxuICAgICAgc2tpcEhvb2tzID0gX3BhcmFtcyRza2lwSG9va3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwSG9va3M7XG4gIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplSWNvbnMoaWNvbnMpO1xuXG4gIGlmICh0eXBlb2YgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2sgPT09ICdmdW5jdGlvbicgJiYgIXNraXBIb29rcykge1xuICAgIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrKHByZWZpeCwgbm9ybWFsaXplSWNvbnMoaWNvbnMpKTtcbiAgfSBlbHNlIHtcbiAgICBuYW1lc3BhY2Uuc3R5bGVzW3ByZWZpeF0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdIHx8IHt9KSwgbm9ybWFsaXplZCk7XG4gIH1cbiAgLyoqXG4gICAqIEZvbnQgQXdlc29tZSA0IHVzZWQgdGhlIHByZWZpeCBvZiBgZmFgIGZvciBhbGwgaWNvbnMuIFdpdGggdGhlIGludHJvZHVjdGlvblxuICAgKiBvZiBuZXcgc3R5bGVzIHdlIG5lZWRlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlbS4gUHJlZml4IGBmYWAgaXMgbm93IGFuIGFsaWFzXG4gICAqIGZvciBgZmFzYCBzbyB3ZSdsbCBlYXNlIHRoZSB1cGdyYWRlIHByb2Nlc3MgZm9yIG91ciB1c2VycyBieSBhdXRvbWF0aWNhbGx5IGRlZmluaW5nXG4gICAqIHRoaXMgYXMgd2VsbC5cbiAgICovXG5cblxuICBpZiAocHJlZml4ID09PSAnZmFzJykge1xuICAgIGRlZmluZUljb25zKCdmYScsIGljb25zKTtcbiAgfVxufVxuXG52YXIgZHVvdG9uZVBhdGhSZSA9IFsvKiNfX1BVUkVfXyovX3dyYXBSZWdFeHAoL3BhdGggZD1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipwYXRoIGQ9XCIoKD86KD8hXCIpW1xcc1xcU10pKylcIi8sIHtcbiAgZDE6IDEsXG4gIGQyOiAyXG59KSwgLyojX19QVVJFX18qL193cmFwUmVnRXhwKC9wYXRoIGNsYXNzPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIuKmQ9XCIoKD86KD8hXCIpW1xcc1xcU10pKylcIi4qcGF0aCBjbGFzcz1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipkPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIvLCB7XG4gIGNsczE6IDEsXG4gIGQxOiAyLFxuICBjbHMyOiAzLFxuICBkMjogNFxufSksIC8qI19fUFVSRV9fKi9fd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipkPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIvLCB7XG4gIGNsczE6IDEsXG4gIGQxOiAyXG59KV07XG5cbnZhciBfTE9OR19TVFlMRSwgX1BSRUZJWEVTLCBfUFJFRklYRVNfRk9SX0ZBTUlMWTtcbnZhciBzdHlsZXMgPSBuYW1lc3BhY2Uuc3R5bGVzLFxuICAgIHNoaW1zID0gbmFtZXNwYWNlLnNoaW1zO1xudmFyIExPTkdfU1RZTEUgPSAoX0xPTkdfU1RZTEUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9MT05HX1NUWUxFLCBGQU1JTFlfQ0xBU1NJQywgT2JqZWN0LnZhbHVlcyhQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9MT05HX1NUWUxFLCBGQU1JTFlfU0hBUlAsIE9iamVjdC52YWx1ZXMoUFJFRklYX1RPX0xPTkdfU1RZTEVbRkFNSUxZX1NIQVJQXSkpLCBfTE9OR19TVFlMRSk7XG52YXIgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBudWxsO1xudmFyIF9ieVVuaWNvZGUgPSB7fTtcbnZhciBfYnlMaWdhdHVyZSA9IHt9O1xudmFyIF9ieU9sZE5hbWUgPSB7fTtcbnZhciBfYnlPbGRVbmljb2RlID0ge307XG52YXIgX2J5QWxpYXMgPSB7fTtcbnZhciBQUkVGSVhFUyA9IChfUFJFRklYRVMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFUywgRkFNSUxZX0NMQVNTSUMsIE9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFUywgRkFNSUxZX1NIQVJQLCBPYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX1NIQVJQXSkpLCBfUFJFRklYRVMpO1xuXG5mdW5jdGlvbiBpc1Jlc2VydmVkKG5hbWUpIHtcbiAgcmV0dXJuIH5SRVNFUlZFRF9DTEFTU0VTLmluZGV4T2YobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lKGNzc1ByZWZpeCwgY2xzKSB7XG4gIHZhciBwYXJ0cyA9IGNscy5zcGxpdCgnLScpO1xuICB2YXIgcHJlZml4ID0gcGFydHNbMF07XG4gIHZhciBpY29uTmFtZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJy0nKTtcblxuICBpZiAocHJlZml4ID09PSBjc3NQcmVmaXggJiYgaWNvbk5hbWUgIT09ICcnICYmICFpc1Jlc2VydmVkKGljb25OYW1lKSkge1xuICAgIHJldHVybiBpY29uTmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxudmFyIGJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoKSB7XG4gIHZhciBsb29rdXAgPSBmdW5jdGlvbiBsb29rdXAocmVkdWNlcikge1xuICAgIHJldHVybiByZWR1Y2Uoc3R5bGVzLCBmdW5jdGlvbiAobywgc3R5bGUsIHByZWZpeCkge1xuICAgICAgb1twcmVmaXhdID0gcmVkdWNlKHN0eWxlLCByZWR1Y2VyLCB7fSk7XG4gICAgICByZXR1cm4gbztcbiAgICB9LCB7fSk7XG4gIH07XG5cbiAgX2J5VW5pY29kZSA9IGxvb2t1cChmdW5jdGlvbiAoYWNjLCBpY29uLCBpY29uTmFtZSkge1xuICAgIGlmIChpY29uWzNdKSB7XG4gICAgICBhY2NbaWNvblszXV0gPSBpY29uTmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgdmFyIGFsaWFzZXMgPSBpY29uWzJdLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIGFjY1thbGlhcy50b1N0cmluZygxNildID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5TGlnYXR1cmUgPSBsb29rdXAoZnVuY3Rpb24gKGFjYywgaWNvbiwgaWNvbk5hbWUpIHtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgdmFyIGFsaWFzZXMgPSBpY29uWzJdLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdzdHJpbmcnO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0pO1xuICBfYnlBbGlhcyA9IGxvb2t1cChmdW5jdGlvbiAoYWNjLCBpY29uLCBpY29uTmFtZSkge1xuICAgIHZhciBhbGlhc2VzID0gaWNvblsyXTtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG4gICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgYWNjW2FsaWFzXSA9IGljb25OYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0pOyAvLyBJZiB3ZSBoYXZlIGEgS2l0LCB3ZSBjYW4ndCBkZXRlcm1pbmUgaWYgcmVndWxhciBpcyBhdmFpbGFibGUgc2luY2Ugd2VcbiAgLy8gY291bGQgYmUgYXV0by1mZXRjaGluZyBpdC4gV2UnbGwgaGF2ZSB0byBhc3N1bWUgdGhhdCBpdCBpcyBhdmFpbGFibGUuXG5cbiAgdmFyIGhhc1JlZ3VsYXIgPSAnZmFyJyBpbiBzdHlsZXMgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZztcbiAgdmFyIHNoaW1Mb29rdXBzID0gcmVkdWNlKHNoaW1zLCBmdW5jdGlvbiAoYWNjLCBzaGltKSB7XG4gICAgdmFyIG1heWJlTmFtZU1heWJlVW5pY29kZSA9IHNoaW1bMF07XG4gICAgdmFyIHByZWZpeCA9IHNoaW1bMV07XG4gICAgdmFyIGljb25OYW1lID0gc2hpbVsyXTtcblxuICAgIGlmIChwcmVmaXggPT09ICdmYXInICYmICFoYXNSZWd1bGFyKSB7XG4gICAgICBwcmVmaXggPSAnZmFzJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFjYy5uYW1lc1ttYXliZU5hbWVNYXliZVVuaWNvZGVdID0ge1xuICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0ge1xuICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHtcbiAgICBuYW1lczoge30sXG4gICAgdW5pY29kZXM6IHt9XG4gIH0pO1xuICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7XG4gIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlcztcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnLnN0eWxlRGVmYXVsdCwge1xuICAgIGZhbWlseTogY29uZmlnLmZhbWlseURlZmF1bHRcbiAgfSk7XG59O1xub25DaGFuZ2UoZnVuY3Rpb24gKGMpIHtcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoYy5zdHlsZURlZmF1bHQsIHtcbiAgICBmYW1pbHk6IGNvbmZpZy5mYW1pbHlEZWZhdWx0XG4gIH0pO1xufSk7XG5idWlsZCgpO1xuZnVuY3Rpb24gYnlVbmljb2RlKHByZWZpeCwgdW5pY29kZSkge1xuICByZXR1cm4gKF9ieVVuaWNvZGVbcHJlZml4XSB8fCB7fSlbdW5pY29kZV07XG59XG5mdW5jdGlvbiBieUxpZ2F0dXJlKHByZWZpeCwgbGlnYXR1cmUpIHtcbiAgcmV0dXJuIChfYnlMaWdhdHVyZVtwcmVmaXhdIHx8IHt9KVtsaWdhdHVyZV07XG59XG5mdW5jdGlvbiBieUFsaWFzKHByZWZpeCwgYWxpYXMpIHtcbiAgcmV0dXJuIChfYnlBbGlhc1twcmVmaXhdIHx8IHt9KVthbGlhc107XG59XG5mdW5jdGlvbiBieU9sZE5hbWUobmFtZSkge1xuICByZXR1cm4gX2J5T2xkTmFtZVtuYW1lXSB8fCB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBieU9sZFVuaWNvZGUodW5pY29kZSkge1xuICB2YXIgb2xkVW5pY29kZSA9IF9ieU9sZFVuaWNvZGVbdW5pY29kZV07XG4gIHZhciBuZXdVbmljb2RlID0gYnlVbmljb2RlKCdmYXMnLCB1bmljb2RlKTtcbiAgcmV0dXJuIG9sZFVuaWNvZGUgfHwgKG5ld1VuaWNvZGUgPyB7XG4gICAgcHJlZml4OiAnZmFzJyxcbiAgICBpY29uTmFtZTogbmV3VW5pY29kZVxuICB9IDogbnVsbCkgfHwge1xuICAgIHByZWZpeDogbnVsbCxcbiAgICBpY29uTmFtZTogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpIHtcbiAgcmV0dXJuIF9kZWZhdWx0VXNhYmxlUHJlZml4O1xufVxudmFyIGVtcHR5Q2Fub25pY2FsSWNvbiA9IGZ1bmN0aW9uIGVtcHR5Q2Fub25pY2FsSWNvbigpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmaXg6IG51bGwsXG4gICAgaWNvbk5hbWU6IG51bGwsXG4gICAgcmVzdDogW11cbiAgfTtcbn07XG5mdW5jdGlvbiBnZXRDYW5vbmljYWxQcmVmaXgoc3R5bGVPclByZWZpeCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkZmFtaWx5ID0gcGFyYW1zLmZhbWlseSxcbiAgICAgIGZhbWlseSA9IF9wYXJhbXMkZmFtaWx5ID09PSB2b2lkIDAgPyBGQU1JTFlfQ0xBU1NJQyA6IF9wYXJhbXMkZmFtaWx5O1xuICB2YXIgc3R5bGUgPSBQUkVGSVhfVE9fU1RZTEVbZmFtaWx5XVtzdHlsZU9yUHJlZml4XTtcbiAgdmFyIHByZWZpeCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTtcbiAgdmFyIGRlZmluZWQgPSBzdHlsZU9yUHJlZml4IGluIG5hbWVzcGFjZS5zdHlsZXMgPyBzdHlsZU9yUHJlZml4IDogbnVsbDtcbiAgcmV0dXJuIHByZWZpeCB8fCBkZWZpbmVkIHx8IG51bGw7XG59XG52YXIgUFJFRklYRVNfRk9SX0ZBTUlMWSA9IChfUFJFRklYRVNfRk9SX0ZBTUlMWSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX1BSRUZJWEVTX0ZPUl9GQU1JTFksIEZBTUlMWV9DTEFTU0lDLCBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFU19GT1JfRkFNSUxZLCBGQU1JTFlfU0hBUlAsIE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW0ZBTUlMWV9TSEFSUF0pKSwgX1BSRUZJWEVTX0ZPUl9GQU1JTFkpO1xuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsSWNvbih2YWx1ZXMpIHtcbiAgdmFyIF9mYW1Qcm9wcztcblxuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkc2tpcExvb2t1cHMgPSBwYXJhbXMuc2tpcExvb2t1cHMsXG4gICAgICBza2lwTG9va3VwcyA9IF9wYXJhbXMkc2tpcExvb2t1cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwTG9va3VwcztcbiAgdmFyIGZhbVByb3BzID0gKF9mYW1Qcm9wcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2ZhbVByb3BzLCBGQU1JTFlfQ0xBU1NJQywgXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChGQU1JTFlfQ0xBU1NJQykpLCBfZGVmaW5lUHJvcGVydHkoX2ZhbVByb3BzLCBGQU1JTFlfU0hBUlAsIFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRkFNSUxZX1NIQVJQKSksIF9mYW1Qcm9wcyk7XG4gIHZhciBnaXZlblByZWZpeCA9IG51bGw7XG4gIHZhciBmYW1pbHkgPSBGQU1JTFlfQ0xBU1NJQztcblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW0ZBTUlMWV9DTEFTU0lDXSkgfHwgdmFsdWVzLnNvbWUoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gUFJFRklYRVNfRk9SX0ZBTUlMWVtGQU1JTFlfQ0xBU1NJQ10uaW5jbHVkZXModik7XG4gIH0pKSB7XG4gICAgZmFtaWx5ID0gRkFNSUxZX0NMQVNTSUM7XG4gIH1cblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW0ZBTUlMWV9TSEFSUF0pIHx8IHZhbHVlcy5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIFBSRUZJWEVTX0ZPUl9GQU1JTFlbRkFNSUxZX1NIQVJQXS5pbmNsdWRlcyh2KTtcbiAgfSkpIHtcbiAgICBmYW1pbHkgPSBGQU1JTFlfU0hBUlA7XG4gIH1cblxuICB2YXIgY2Fub25pY2FsID0gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjbHMpIHtcbiAgICB2YXIgaWNvbk5hbWUgPSBnZXRJY29uTmFtZShjb25maWcuY3NzUHJlZml4LCBjbHMpO1xuXG4gICAgaWYgKHN0eWxlc1tjbHNdKSB7XG4gICAgICBjbHMgPSBMT05HX1NUWUxFW2ZhbWlseV0uaW5jbHVkZXMoY2xzKSA/IExPTkdfU1RZTEVfVE9fUFJFRklYW2ZhbWlseV1bY2xzXSA6IGNscztcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGNscztcbiAgICB9IGVsc2UgaWYgKFBSRUZJWEVTW2ZhbWlseV0uaW5kZXhPZihjbHMpID4gLTEpIHtcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjbHMsIHtcbiAgICAgICAgZmFtaWx5OiBmYW1pbHlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaWNvbk5hbWUpIHtcbiAgICAgIGFjYy5pY29uTmFtZSA9IGljb25OYW1lO1xuICAgIH0gZWxzZSBpZiAoY2xzICE9PSBjb25maWcucmVwbGFjZW1lbnRDbGFzcyAmJiBjbHMgIT09IGZhbVByb3BzW0ZBTUlMWV9DTEFTU0lDXSAmJiBjbHMgIT09IGZhbVByb3BzW0ZBTUlMWV9TSEFSUF0pIHtcbiAgICAgIGFjYy5yZXN0LnB1c2goY2xzKTtcbiAgICB9XG5cbiAgICBpZiAoIXNraXBMb29rdXBzICYmIGFjYy5wcmVmaXggJiYgYWNjLmljb25OYW1lKSB7XG4gICAgICB2YXIgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAnZmEnID8gYnlPbGROYW1lKGFjYy5pY29uTmFtZSkgOiB7fTtcbiAgICAgIHZhciBhbGlhc0ljb25OYW1lID0gYnlBbGlhcyhhY2MucHJlZml4LCBhY2MuaWNvbk5hbWUpO1xuXG4gICAgICBpZiAoc2hpbS5wcmVmaXgpIHtcbiAgICAgICAgZ2l2ZW5QcmVmaXggPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhY2MuaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGFsaWFzSWNvbk5hbWUgfHwgYWNjLmljb25OYW1lO1xuICAgICAgYWNjLnByZWZpeCA9IHNoaW0ucHJlZml4IHx8IGFjYy5wcmVmaXg7XG5cbiAgICAgIGlmIChhY2MucHJlZml4ID09PSAnZmFyJyAmJiAhc3R5bGVzWydmYXInXSAmJiBzdHlsZXNbJ2ZhcyddICYmICFjb25maWcuYXV0b0ZldGNoU3ZnKSB7XG4gICAgICAgIC8vIEFsbG93IGEgZmFsbGJhY2sgZnJvbSB0aGUgcmVndWxhciBzdHlsZSB0byBzb2xpZCBpZiByZWd1bGFyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgLy8gYnV0IG9ubHkgaWYgd2UgYXJlbid0IGF1dG8tZmV0Y2hpbmcgU1ZHc1xuICAgICAgICBhY2MucHJlZml4ID0gJ2Zhcyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgZW1wdHlDYW5vbmljYWxJY29uKCkpO1xuXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMoJ2ZhLWJyYW5kcycpIHx8IHZhbHVlcy5pbmNsdWRlcygnZmFiJykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2ZhYic7XG4gIH1cblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKCdmYS1kdW90b25lJykgfHwgdmFsdWVzLmluY2x1ZGVzKCdmYWQnKSkge1xuICAgIGNhbm9uaWNhbC5wcmVmaXggPSAnZmFkJztcbiAgfVxuXG4gIGlmICghY2Fub25pY2FsLnByZWZpeCAmJiBmYW1pbHkgPT09IEZBTUlMWV9TSEFSUCAmJiAoc3R5bGVzWydmYXNzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc3MnO1xuICAgIGNhbm9uaWNhbC5pY29uTmFtZSA9IGJ5QWxpYXMoY2Fub25pY2FsLnByZWZpeCwgY2Fub25pY2FsLmljb25OYW1lKSB8fCBjYW5vbmljYWwuaWNvbk5hbWU7XG4gIH1cblxuICBpZiAoY2Fub25pY2FsLnByZWZpeCA9PT0gJ2ZhJyB8fCBnaXZlblByZWZpeCA9PT0gJ2ZhJykge1xuICAgIC8vIFRoZSBmYSBwcmVmaXggaXMgbm90IGNhbm9uaWNhbC4gU28gaWYgaXQgaGFzIG1hZGUgaXQgdGhyb3VnaCB1bnRpbCB0aGlzIHBvaW50XG4gICAgLy8gd2Ugd2lsbCBzaGlmdCBpdCB0byB0aGUgY29ycmVjdCBwcmVmaXguXG4gICAgY2Fub25pY2FsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB8fCAnZmFzJztcbiAgfVxuXG4gIHJldHVybiBjYW5vbmljYWw7XG59XG5cbnZhciBMaWJyYXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGlicmFyeSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlicmFyeSk7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGlicmFyeSwgW3tcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgZGVmaW5pdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBhZGRpdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLCB7fSk7XG4gICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfdGhpcy5kZWZpbml0aW9uc1trZXldID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmRlZmluaXRpb25zW2tleV0gfHwge30pLCBhZGRpdGlvbnNba2V5XSk7XG4gICAgICAgIGRlZmluZUljb25zKGtleSwgYWRkaXRpb25zW2tleV0pOyAvLyBUT0RPIGNhbiB3ZSBzdG9wIGRvaW5nIHRoaXM/IFdlIGNhbid0IGdldCB0aGUgaWNvbnMgYnkgJ2ZhLXNvbGlkJyBhbnkgbG9uZ2VyIHNvIHRoaXMgcHJvYmFibHkgbmVlZHMgdG8gY2hhbmdlXG5cbiAgICAgICAgdmFyIGxvbmdQcmVmaXggPSBQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ11ba2V5XTtcbiAgICAgICAgaWYgKGxvbmdQcmVmaXgpIGRlZmluZUljb25zKGxvbmdQcmVmaXgsIGFkZGl0aW9uc1trZXldKTtcbiAgICAgICAgYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3B1bGxEZWZpbml0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcHVsbERlZmluaXRpb25zKGFkZGl0aW9ucywgZGVmaW5pdGlvbikge1xuICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBkZWZpbml0aW9uLnByZWZpeCAmJiBkZWZpbml0aW9uLmljb25OYW1lICYmIGRlZmluaXRpb24uaWNvbiA/IHtcbiAgICAgICAgMDogZGVmaW5pdGlvblxuICAgICAgfSA6IGRlZmluaXRpb247XG4gICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgX25vcm1hbGl6ZWQka2V5ID0gbm9ybWFsaXplZFtrZXldLFxuICAgICAgICAgICAgcHJlZml4ID0gX25vcm1hbGl6ZWQka2V5LnByZWZpeCxcbiAgICAgICAgICAgIGljb25OYW1lID0gX25vcm1hbGl6ZWQka2V5Lmljb25OYW1lLFxuICAgICAgICAgICAgaWNvbiA9IF9ub3JtYWxpemVkJGtleS5pY29uO1xuICAgICAgICB2YXIgYWxpYXNlcyA9IGljb25bMl07XG4gICAgICAgIGlmICghYWRkaXRpb25zW3ByZWZpeF0pIGFkZGl0aW9uc1twcmVmaXhdID0ge307XG5cbiAgICAgICAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXhdW2FsaWFzXSA9IGljb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRpdGlvbnNbcHJlZml4XVtpY29uTmFtZV0gPSBpY29uO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWRkaXRpb25zO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaWJyYXJ5O1xufSgpO1xuXG52YXIgX3BsdWdpbnMgPSBbXTtcbnZhciBfaG9va3MgPSB7fTtcbnZhciBwcm92aWRlcnMgPSB7fTtcbnZhciBkZWZhdWx0UHJvdmlkZXJLZXlzID0gT2JqZWN0LmtleXMocHJvdmlkZXJzKTtcbmZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2lucyhuZXh0UGx1Z2lucywgX3JlZikge1xuICB2YXIgb2JqID0gX3JlZi5taXhvdXRzVG87XG4gIF9wbHVnaW5zID0gbmV4dFBsdWdpbnM7XG4gIF9ob29rcyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBpZiAoZGVmYXVsdFByb3ZpZGVyS2V5cy5pbmRleE9mKGspID09PSAtMSkge1xuICAgICAgZGVsZXRlIHByb3ZpZGVyc1trXTtcbiAgICB9XG4gIH0pO1xuXG4gIF9wbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBtaXhvdXQgPSBwbHVnaW4ubWl4b3V0ID8gcGx1Z2luLm1peG91dCgpIDoge307XG4gICAgT2JqZWN0LmtleXMobWl4b3V0KS5mb3JFYWNoKGZ1bmN0aW9uICh0aykge1xuICAgICAgaWYgKHR5cGVvZiBtaXhvdXRbdGtdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9ialt0a10gPSBtaXhvdXRbdGtdO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3R5cGVvZihtaXhvdXRbdGtdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0W3RrXSkuZm9yRWFjaChmdW5jdGlvbiAoc2spIHtcbiAgICAgICAgICBpZiAoIW9ialt0a10pIHtcbiAgICAgICAgICAgIG9ialt0a10gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmpbdGtdW3NrXSA9IG1peG91dFt0a11bc2tdO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwbHVnaW4uaG9va3MpIHtcbiAgICAgIHZhciBob29rcyA9IHBsdWdpbi5ob29rcygpO1xuICAgICAgT2JqZWN0LmtleXMoaG9va3MpLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgaWYgKCFfaG9va3NbaG9va10pIHtcbiAgICAgICAgICBfaG9va3NbaG9va10gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9ob29rc1tob29rXS5wdXNoKGhvb2tzW2hvb2tdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwbHVnaW4ucHJvdmlkZXMpIHtcbiAgICAgIHBsdWdpbi5wcm92aWRlcyhwcm92aWRlcnMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGNoYWluSG9va3MoaG9vaywgYWNjdW11bGF0b3IpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbiAoaG9va0ZuKSB7XG4gICAgYWNjdW11bGF0b3IgPSBob29rRm4uYXBwbHkobnVsbCwgW2FjY3VtdWxhdG9yXS5jb25jYXQoYXJncykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbiAoaG9va0ZuKSB7XG4gICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNhbGxQcm92aWRlZCgpIHtcbiAgdmFyIGhvb2sgPSBhcmd1bWVudHNbMF07XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIHByb3ZpZGVyc1tob29rXSA/IHByb3ZpZGVyc1tob29rXS5hcHBseShudWxsLCBhcmdzKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZEljb25EZWZpbml0aW9uKGljb25Mb29rdXApIHtcbiAgaWYgKGljb25Mb29rdXAucHJlZml4ID09PSAnZmEnKSB7XG4gICAgaWNvbkxvb2t1cC5wcmVmaXggPSAnZmFzJztcbiAgfVxuXG4gIHZhciBpY29uTmFtZSA9IGljb25Mb29rdXAuaWNvbk5hbWU7XG4gIHZhciBwcmVmaXggPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybjtcbiAgaWNvbk5hbWUgPSBieUFsaWFzKHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25OYW1lO1xuICByZXR1cm4gaWNvbkZyb21NYXBwaW5nKGxpYnJhcnkuZGVmaW5pdGlvbnMsIHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXgsIGljb25OYW1lKTtcbn1cbnZhciBsaWJyYXJ5ID0gbmV3IExpYnJhcnkoKTtcbnZhciBub0F1dG8gPSBmdW5jdGlvbiBub0F1dG8oKSB7XG4gIGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9IGZhbHNlO1xuICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlO1xuICBjYWxsSG9va3MoJ25vQXV0bycpO1xufTtcbnZhciBkb20gPSB7XG4gIGkyc3ZnOiBmdW5jdGlvbiBpMnN2ZygpIHtcbiAgICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIGlmIChJU19ET00pIHtcbiAgICAgIGNhbGxIb29rcygnYmVmb3JlSTJzdmcnLCBwYXJhbXMpO1xuICAgICAgY2FsbFByb3ZpZGVkKCdwc2V1ZG9FbGVtZW50czJzdmcnLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnaTJzdmcnLCBwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ09wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuJyk7XG4gICAgfVxuICB9LFxuICB3YXRjaDogZnVuY3Rpb24gd2F0Y2goKSB7XG4gICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGF1dG9SZXBsYWNlU3ZnUm9vdCA9IHBhcmFtcy5hdXRvUmVwbGFjZVN2Z1Jvb3Q7XG5cbiAgICBpZiAoY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7XG4gICAgZG9tcmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgYXV0b1JlcGxhY2Uoe1xuICAgICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3Q6IGF1dG9SZXBsYWNlU3ZnUm9vdFxuICAgICAgfSk7XG4gICAgICBjYWxsSG9va3MoJ3dhdGNoJywgcGFyYW1zKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBwYXJzZSA9IHtcbiAgaWNvbjogZnVuY3Rpb24gaWNvbihfaWNvbikge1xuICAgIGlmIChfaWNvbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlb2YoX2ljb24pID09PSAnb2JqZWN0JyAmJiBfaWNvbi5wcmVmaXggJiYgX2ljb24uaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogX2ljb24ucHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfaWNvbi5wcmVmaXgsIF9pY29uLmljb25OYW1lKSB8fCBfaWNvbi5pY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShfaWNvbikgJiYgX2ljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgaWNvbk5hbWUgPSBfaWNvblsxXS5pbmRleE9mKCdmYS0nKSA9PT0gMCA/IF9pY29uWzFdLnNsaWNlKDMpIDogX2ljb25bMV07XG4gICAgICB2YXIgcHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KF9pY29uWzBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhwcmVmaXgsIGljb25OYW1lKSB8fCBpY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9pY29uID09PSAnc3RyaW5nJyAmJiAoX2ljb24uaW5kZXhPZihcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikpID4gLTEgfHwgX2ljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkge1xuICAgICAgdmFyIGNhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKF9pY29uLnNwbGl0KCcgJyksIHtcbiAgICAgICAgc2tpcExvb2t1cHM6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBjYW5vbmljYWxJY29uLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCksXG4gICAgICAgIGljb25OYW1lOiBieUFsaWFzKGNhbm9uaWNhbEljb24ucHJlZml4LCBjYW5vbmljYWxJY29uLmljb25OYW1lKSB8fCBjYW5vbmljYWxJY29uLmljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2ljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgX3ByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBfcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfcHJlZml4LCBfaWNvbikgfHwgX2ljb25cbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xudmFyIGFwaSA9IHtcbiAgbm9BdXRvOiBub0F1dG8sXG4gIGNvbmZpZzogY29uZmlnLFxuICBkb206IGRvbSxcbiAgcGFyc2U6IHBhcnNlLFxuICBsaWJyYXJ5OiBsaWJyYXJ5LFxuICBmaW5kSWNvbkRlZmluaXRpb246IGZpbmRJY29uRGVmaW5pdGlvbixcbiAgdG9IdG1sOiB0b0h0bWxcbn07XG5cbnZhciBhdXRvUmVwbGFjZSA9IGZ1bmN0aW9uIGF1dG9SZXBsYWNlKCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkYXV0b1JlcGxhY2VTdiA9IHBhcmFtcy5hdXRvUmVwbGFjZVN2Z1Jvb3QsXG4gICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3QgPSBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRhdXRvUmVwbGFjZVN2O1xuICBpZiAoKE9iamVjdC5rZXlzKG5hbWVzcGFjZS5zdHlsZXMpLmxlbmd0aCA+IDAgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykgJiYgSVNfRE9NICYmIGNvbmZpZy5hdXRvUmVwbGFjZVN2ZykgYXBpLmRvbS5pMnN2Zyh7XG4gICAgbm9kZTogYXV0b1JlcGxhY2VTdmdSb290XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9tVmFyaWFudHModmFsLCBhYnN0cmFjdENyZWF0b3IpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ2Fic3RyYWN0Jywge1xuICAgIGdldDogYWJzdHJhY3RDcmVhdG9yXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAnaHRtbCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB2YWwuYWJzdHJhY3QubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiB0b0h0bWwoYSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAnbm9kZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICghSVNfRE9NKSByZXR1cm47XG4gICAgICB2YXIgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdmFsLmh0bWw7XG4gICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGFzSWNvbiAoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgbWFpbiA9IF9yZWYubWFpbixcbiAgICAgIG1hc2sgPSBfcmVmLm1hc2ssXG4gICAgICBhdHRyaWJ1dGVzID0gX3JlZi5hdHRyaWJ1dGVzLFxuICAgICAgc3R5bGVzID0gX3JlZi5zdHlsZXMsXG4gICAgICB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybTtcblxuICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybSkgJiYgbWFpbi5mb3VuZCAmJiAhbWFzay5mb3VuZCkge1xuICAgIHZhciB3aWR0aCA9IG1haW4ud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IG1haW4uaGVpZ2h0O1xuICAgIHZhciBvZmZzZXQgPSB7XG4gICAgICB4OiB3aWR0aCAvIGhlaWdodCAvIDIsXG4gICAgICB5OiAwLjVcbiAgICB9O1xuICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBqb2luU3R5bGVzKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdHlsZXMpLCB7fSwge1xuICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nOiBcIlwiLmNvbmNhdChvZmZzZXQueCArIHRyYW5zZm9ybS54IC8gMTYsIFwiZW0gXCIpLmNvbmNhdChvZmZzZXQueSArIHRyYW5zZm9ybS55IC8gMTYsIFwiZW1cIilcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gW3tcbiAgICB0YWc6ICdzdmcnLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBhc1N5bWJvbCAoX3JlZikge1xuICB2YXIgcHJlZml4ID0gX3JlZi5wcmVmaXgsXG4gICAgICBpY29uTmFtZSA9IF9yZWYuaWNvbk5hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBhdHRyaWJ1dGVzID0gX3JlZi5hdHRyaWJ1dGVzLFxuICAgICAgc3ltYm9sID0gX3JlZi5zeW1ib2w7XG4gIHZhciBpZCA9IHN5bWJvbCA9PT0gdHJ1ZSA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCItXCIpLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KGljb25OYW1lKSA6IHN5bWJvbDtcbiAgcmV0dXJuIFt7XG4gICAgdGFnOiAnc3ZnJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBzdHlsZTogJ2Rpc3BsYXk6IG5vbmU7J1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFt7XG4gICAgICB0YWc6ICdzeW1ib2wnLFxuICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGF0dHJpYnV0ZXMpLCB7fSwge1xuICAgICAgICBpZDogaWRcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfV1cbiAgfV07XG59XG5cbmZ1bmN0aW9uIG1ha2VJbmxpbmVTdmdBYnN0cmFjdChwYXJhbXMpIHtcbiAgdmFyIF9wYXJhbXMkaWNvbnMgPSBwYXJhbXMuaWNvbnMsXG4gICAgICBtYWluID0gX3BhcmFtcyRpY29ucy5tYWluLFxuICAgICAgbWFzayA9IF9wYXJhbXMkaWNvbnMubWFzayxcbiAgICAgIHByZWZpeCA9IHBhcmFtcy5wcmVmaXgsXG4gICAgICBpY29uTmFtZSA9IHBhcmFtcy5pY29uTmFtZSxcbiAgICAgIHRyYW5zZm9ybSA9IHBhcmFtcy50cmFuc2Zvcm0sXG4gICAgICBzeW1ib2wgPSBwYXJhbXMuc3ltYm9sLFxuICAgICAgdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICBtYXNrSWQgPSBwYXJhbXMubWFza0lkLFxuICAgICAgdGl0bGVJZCA9IHBhcmFtcy50aXRsZUlkLFxuICAgICAgZXh0cmEgPSBwYXJhbXMuZXh0cmEsXG4gICAgICBfcGFyYW1zJHdhdGNoYWJsZSA9IHBhcmFtcy53YXRjaGFibGUsXG4gICAgICB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTtcblxuICB2YXIgX3JlZiA9IG1hc2suZm91bmQgPyBtYXNrIDogbWFpbixcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0O1xuXG4gIHZhciBpc1VwbG9hZGVkSWNvbiA9IHByZWZpeCA9PT0gJ2Zhayc7XG4gIHZhciBhdHRyQ2xhc3MgPSBbY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiAnJ10uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGV4dHJhLmNsYXNzZXMuaW5kZXhPZihjKSA9PT0gLTE7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjICE9PSAnJyB8fCAhIWM7XG4gIH0pLmNvbmNhdChleHRyYS5jbGFzc2VzKS5qb2luKCcgJyk7XG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7XG4gICAgICAnZGF0YS1wcmVmaXgnOiBwcmVmaXgsXG4gICAgICAnZGF0YS1pY29uJzogaWNvbk5hbWUsXG4gICAgICAnY2xhc3MnOiBhdHRyQ2xhc3MsXG4gICAgICAncm9sZSc6IGV4dHJhLmF0dHJpYnV0ZXMucm9sZSB8fCAnaW1nJyxcbiAgICAgICd4bWxucyc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gICAgICAndmlld0JveCc6IFwiMCAwIFwiLmNvbmNhdCh3aWR0aCwgXCIgXCIpLmNvbmNhdChoZWlnaHQpXG4gICAgfSlcbiAgfTtcbiAgdmFyIHVwbG9hZGVkSWNvbldpZHRoU3R5bGUgPSBpc1VwbG9hZGVkSWNvbiAmJiAhfmV4dHJhLmNsYXNzZXMuaW5kZXhPZignZmEtZncnKSA/IHtcbiAgICB3aWR0aDogXCJcIi5jb25jYXQod2lkdGggLyBoZWlnaHQgKiAxNiAqIDAuMDYyNSwgXCJlbVwiKVxuICB9IDoge307XG5cbiAgaWYgKHdhdGNoYWJsZSkge1xuICAgIGNvbnRlbnQuYXR0cmlidXRlc1tEQVRBX0ZBX0kyU1ZHXSA9ICcnO1xuICB9XG5cbiAgaWYgKHRpdGxlKSB7XG4gICAgY29udGVudC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgIHRhZzogJ3RpdGxlJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGNvbnRlbnQuYXR0cmlidXRlc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgXCJ0aXRsZS1cIi5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSlcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3RpdGxlXVxuICAgIH0pO1xuICAgIGRlbGV0ZSBjb250ZW50LmF0dHJpYnV0ZXMudGl0bGU7XG4gIH1cblxuICB2YXIgYXJncyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZW50KSwge30sIHtcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBpY29uTmFtZTogaWNvbk5hbWUsXG4gICAgbWFpbjogbWFpbixcbiAgICBtYXNrOiBtYXNrLFxuICAgIG1hc2tJZDogbWFza0lkLFxuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgIHN5bWJvbDogc3ltYm9sLFxuICAgIHN0eWxlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHVwbG9hZGVkSWNvbldpZHRoU3R5bGUpLCBleHRyYS5zdHlsZXMpXG4gIH0pO1xuXG4gIHZhciBfcmVmMiA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdE1hc2snLCBhcmdzKSB8fCB7XG4gICAgY2hpbGRyZW46IFtdLFxuICAgIGF0dHJpYnV0ZXM6IHt9XG4gIH0gOiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RJY29uJywgYXJncykgfHwge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuICB9LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzO1xuXG4gIGFyZ3MuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgYXJncy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcblxuICBpZiAoc3ltYm9sKSB7XG4gICAgcmV0dXJuIGFzU3ltYm9sKGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc0ljb24oYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1ha2VMYXllcnNUZXh0QWJzdHJhY3QocGFyYW1zKSB7XG4gIHZhciBjb250ZW50ID0gcGFyYW1zLmNvbnRlbnQsXG4gICAgICB3aWR0aCA9IHBhcmFtcy53aWR0aCxcbiAgICAgIGhlaWdodCA9IHBhcmFtcy5oZWlnaHQsXG4gICAgICB0cmFuc2Zvcm0gPSBwYXJhbXMudHJhbnNmb3JtLFxuICAgICAgdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICBleHRyYSA9IHBhcmFtcy5leHRyYSxcbiAgICAgIF9wYXJhbXMkd2F0Y2hhYmxlMiA9IHBhcmFtcy53YXRjaGFibGUsXG4gICAgICB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZTIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyR3YXRjaGFibGUyO1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB0aXRsZSA/IHtcbiAgICAndGl0bGUnOiB0aXRsZVxuICB9IDoge30pLCB7fSwge1xuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH0pO1xuXG4gIGlmICh3YXRjaGFibGUpIHtcbiAgICBhdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gJyc7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLnN0eWxlcyk7XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgc3R5bGVzWyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybUZvckNzcyh7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICAgIHN0YXJ0Q2VudGVyZWQ6IHRydWUsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0pO1xuICAgIHN0eWxlc1snLXdlYmtpdC10cmFuc2Zvcm0nXSA9IHN0eWxlc1sndHJhbnNmb3JtJ107XG4gIH1cblxuICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICB2YXIgdmFsID0gW107XG4gIHZhbC5wdXNoKHtcbiAgICB0YWc6ICdzcGFuJyxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgIGNoaWxkcmVuOiBbY29udGVudF1cbiAgfSk7XG5cbiAgaWYgKHRpdGxlKSB7XG4gICAgdmFsLnB1c2goe1xuICAgICAgdGFnOiAnc3BhbicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnc3Itb25seSdcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3RpdGxlXVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3QocGFyYW1zKSB7XG4gIHZhciBjb250ZW50ID0gcGFyYW1zLmNvbnRlbnQsXG4gICAgICB0aXRsZSA9IHBhcmFtcy50aXRsZSxcbiAgICAgIGV4dHJhID0gcGFyYW1zLmV4dHJhO1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB0aXRsZSA/IHtcbiAgICAndGl0bGUnOiB0aXRsZVxuICB9IDoge30pLCB7fSwge1xuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH0pO1xuXG4gIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoZXh0cmEuc3R5bGVzKTtcblxuICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBzdHlsZVN0cmluZztcbiAgfVxuXG4gIHZhciB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG52YXIgc3R5bGVzJDEgPSBuYW1lc3BhY2Uuc3R5bGVzO1xuZnVuY3Rpb24gYXNGb3VuZEljb24oaWNvbikge1xuICB2YXIgd2lkdGggPSBpY29uWzBdO1xuICB2YXIgaGVpZ2h0ID0gaWNvblsxXTtcblxuICB2YXIgX2ljb24kc2xpY2UgPSBpY29uLnNsaWNlKDQpLFxuICAgICAgX2ljb24kc2xpY2UyID0gX3NsaWNlZFRvQXJyYXkoX2ljb24kc2xpY2UsIDEpLFxuICAgICAgdmVjdG9yRGF0YSA9IF9pY29uJHNsaWNlMlswXTtcblxuICB2YXIgZWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmVjdG9yRGF0YSkpIHtcbiAgICBlbGVtZW50ID0ge1xuICAgICAgdGFnOiAnZycsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5HUk9VUClcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZKSxcbiAgICAgICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgICAgICBkOiB2ZWN0b3JEYXRhWzBdXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuUFJJTUFSWSksXG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgZDogdmVjdG9yRGF0YVsxXVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudCA9IHtcbiAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgICAgZDogdmVjdG9yRGF0YVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvdW5kOiB0cnVlLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBpY29uOiBlbGVtZW50XG4gIH07XG59XG52YXIgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7XG4gIGZvdW5kOiBmYWxzZSxcbiAgd2lkdGg6IDUxMixcbiAgaGVpZ2h0OiA1MTJcbn07XG5cbmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4KSB7XG4gIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSWNvbiB3aXRoIG5hbWUgXFxcIlwiLmNvbmNhdChpY29uTmFtZSwgXCJcXFwiIGFuZCBwcmVmaXggXFxcIlwiKS5jb25jYXQocHJlZml4LCBcIlxcXCIgaXMgbWlzc2luZy5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpIHtcbiAgdmFyIGdpdmVuUHJlZml4ID0gcHJlZml4O1xuXG4gIGlmIChwcmVmaXggPT09ICdmYScgJiYgY29uZmlnLnN0eWxlRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgIHByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHZhbCA9IHtcbiAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgIHdpZHRoOiA1MTIsXG4gICAgICBoZWlnaHQ6IDUxMixcbiAgICAgIGljb246IGNhbGxQcm92aWRlZCgnbWlzc2luZ0ljb25BYnN0cmFjdCcpIHx8IHt9XG4gICAgfTtcblxuICAgIGlmIChnaXZlblByZWZpeCA9PT0gJ2ZhJykge1xuICAgICAgdmFyIHNoaW0gPSBieU9sZE5hbWUoaWNvbk5hbWUpIHx8IHt9O1xuICAgICAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGljb25OYW1lO1xuICAgICAgcHJlZml4ID0gc2hpbS5wcmVmaXggfHwgcHJlZml4O1xuICAgIH1cblxuICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXggJiYgc3R5bGVzJDFbcHJlZml4XSAmJiBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXSkge1xuICAgICAgdmFyIGljb24gPSBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXTtcbiAgICAgIHJldHVybiByZXNvbHZlKGFzRm91bmRJY29uKGljb24pKTtcbiAgICB9XG5cbiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeCk7XG4gICAgcmVzb2x2ZShfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4pLCB7fSwge1xuICAgICAgaWNvbjogY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUgPyBjYWxsUHJvdmlkZWQoJ21pc3NpbmdJY29uQWJzdHJhY3QnKSB8fCB7fSA6IHt9XG4gICAgfSkpO1xuICB9KTtcbn1cblxudmFyIG5vb3AkMSA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxudmFyIHAgPSBjb25maWcubWVhc3VyZVBlcmZvcm1hbmNlICYmIFBFUkZPUk1BTkNFICYmIFBFUkZPUk1BTkNFLm1hcmsgJiYgUEVSRk9STUFOQ0UubWVhc3VyZSA/IFBFUkZPUk1BTkNFIDoge1xuICBtYXJrOiBub29wJDEsXG4gIG1lYXN1cmU6IG5vb3AkMVxufTtcbnZhciBwcmVhbWJsZSA9IFwiRkEgXFxcIjYuNS4yXFxcIlwiO1xuXG52YXIgYmVnaW4gPSBmdW5jdGlvbiBiZWdpbihuYW1lKSB7XG4gIHAubWFyayhcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBiZWdpbnNcIikpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBlbmQobmFtZSk7XG4gIH07XG59O1xuXG52YXIgZW5kID0gZnVuY3Rpb24gZW5kKG5hbWUpIHtcbiAgcC5tYXJrKFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGVuZHNcIikpO1xuICBwLm1lYXN1cmUoXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSksIFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGJlZ2luc1wiKSwgXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSwgXCIgZW5kc1wiKSk7XG59O1xuXG52YXIgcGVyZiA9IHtcbiAgYmVnaW46IGJlZ2luLFxuICBlbmQ6IGVuZFxufTtcblxudmFyIG5vb3AkMiA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxuZnVuY3Rpb24gaXNXYXRjaGVkKG5vZGUpIHtcbiAgdmFyIGkyc3ZnID0gbm9kZS5nZXRBdHRyaWJ1dGUgPyBub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX0kyU1ZHKSA6IG51bGw7XG4gIHJldHVybiB0eXBlb2YgaTJzdmcgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBoYXNQcmVmaXhBbmRJY29uKG5vZGUpIHtcbiAgdmFyIHByZWZpeCA9IG5vZGUuZ2V0QXR0cmlidXRlID8gbm9kZS5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpIDogbnVsbDtcbiAgdmFyIGljb24gPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsO1xuICByZXR1cm4gcHJlZml4ICYmIGljb247XG59XG5cbmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUuY2xhc3NMaXN0ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHtcbiAgaWYgKGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlO1xuICB9XG5cbiAgdmFyIG11dGF0b3IgPSBtdXRhdG9yc1tjb25maWcuYXV0b1JlcGxhY2VTdmddO1xuICByZXR1cm4gbXV0YXRvciB8fCBtdXRhdG9ycy5yZXBsYWNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlModGFnKSB7XG4gIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcpIHtcbiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQodGFnKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFNWRyhhYnN0cmFjdE9iaikge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkY2VGbiA9IHBhcmFtcy5jZUZuLFxuICAgICAgY2VGbiA9IF9wYXJhbXMkY2VGbiA9PT0gdm9pZCAwID8gYWJzdHJhY3RPYmoudGFnID09PSAnc3ZnJyA/IGNyZWF0ZUVsZW1lbnROUyA6IGNyZWF0ZUVsZW1lbnQgOiBfcGFyYW1zJGNlRm47XG5cbiAgaWYgKHR5cGVvZiBhYnN0cmFjdE9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopO1xuICB9XG5cbiAgdmFyIHRhZyA9IGNlRm4oYWJzdHJhY3RPYmoudGFnKTtcbiAgT2JqZWN0LmtleXMoYWJzdHJhY3RPYmouYXR0cmlidXRlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZShrZXksIGFic3RyYWN0T2JqLmF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuICB2YXIgY2hpbGRyZW4gPSBhYnN0cmFjdE9iai5jaGlsZHJlbiB8fCBbXTtcbiAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICB0YWcuYXBwZW5kQ2hpbGQoY29udmVydFNWRyhjaGlsZCwge1xuICAgICAgY2VGbjogY2VGblxuICAgIH0pKTtcbiAgfSk7XG4gIHJldHVybiB0YWc7XG59XG5cbmZ1bmN0aW9uIG5vZGVBc0NvbW1lbnQobm9kZSkge1xuICB2YXIgY29tbWVudCA9IFwiIFwiLmNvbmNhdChub2RlLm91dGVySFRNTCwgXCIgXCIpO1xuICAvKiBCRUdJTi5BVFRSSUJVVElPTiAqL1xuXG4gIGNvbW1lbnQgPSBcIlwiLmNvbmNhdChjb21tZW50LCBcIkZvbnQgQXdlc29tZSBmb250YXdlc29tZS5jb20gXCIpO1xuICAvKiBFTkQuQVRUUklCVVRJT04gKi9cblxuICByZXR1cm4gY29tbWVudDtcbn1cblxudmFyIG11dGF0b3JzID0ge1xuICByZXBsYWNlOiBmdW5jdGlvbiByZXBsYWNlKG11dGF0aW9uKSB7XG4gICAgdmFyIG5vZGUgPSBtdXRhdGlvblswXTtcblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG11dGF0aW9uWzFdLmZvckVhY2goZnVuY3Rpb24gKF9hYnN0cmFjdCkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnZlcnRTVkcoX2Fic3RyYWN0KSwgbm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZy5rZWVwT3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZSkpO1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbW1lbnQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5lc3Q6IGZ1bmN0aW9uIG5lc3QobXV0YXRpb24pIHtcbiAgICB2YXIgbm9kZSA9IG11dGF0aW9uWzBdO1xuICAgIHZhciBfYWJzdHJhY3QyID0gbXV0YXRpb25bMV07IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcGxhY2VkIG5vZGUgd2UgZG8gbm90IHdhbnQgdG8gY29udGludWUgbmVzdGluZyB3aXRoaW4gaXQuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCB0byB0aGUgc3RhbmRhcmQgcmVwbGFjZW1lbnRcblxuICAgIGlmICh+Y2xhc3NBcnJheShub2RlKS5pbmRleE9mKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKSkge1xuICAgICAgcmV0dXJuIG11dGF0b3JzLnJlcGxhY2UobXV0YXRpb24pO1xuICAgIH1cblxuICAgIHZhciBmb3JTdmcgPSBuZXcgUmVnRXhwKFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLS4qXCIpKTtcbiAgICBkZWxldGUgX2Fic3RyYWN0MlswXS5hdHRyaWJ1dGVzLmlkO1xuXG4gICAgaWYgKF9hYnN0cmFjdDJbMF0uYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgdmFyIHNwbGl0Q2xhc3NlcyA9IF9hYnN0cmFjdDJbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgnICcpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjbHMpIHtcbiAgICAgICAgaWYgKGNscyA9PT0gY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgfHwgY2xzLm1hdGNoKGZvclN2ZykpIHtcbiAgICAgICAgICBhY2MudG9TdmcucHVzaChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy50b05vZGUucHVzaChjbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHtcbiAgICAgICAgdG9Ob2RlOiBbXSxcbiAgICAgICAgdG9Tdmc6IFtdXG4gICAgICB9KTtcblxuICAgICAgX2Fic3RyYWN0MlswXS5hdHRyaWJ1dGVzLmNsYXNzID0gc3BsaXRDbGFzc2VzLnRvU3ZnLmpvaW4oJyAnKTtcblxuICAgICAgaWYgKHNwbGl0Q2xhc3Nlcy50b05vZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgc3BsaXRDbGFzc2VzLnRvTm9kZS5qb2luKCcgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdJbm5lckhUTUwgPSBfYWJzdHJhY3QyLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIHRvSHRtbChhKTtcbiAgICB9KS5qb2luKCdcXG4nKTtcblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICcnKTtcbiAgICBub2RlLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDtcbiAgfVxufTtcblxuZnVuY3Rpb24gcGVyZm9ybU9wZXJhdGlvblN5bmMob3ApIHtcbiAgb3AoKTtcbn1cblxuZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsYmFja0Z1bmN0aW9uID0gdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBub29wJDI7XG5cbiAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZyYW1lID0gcGVyZm9ybU9wZXJhdGlvblN5bmM7XG5cbiAgICBpZiAoY29uZmlnLm11dGF0ZUFwcHJvYWNoID09PSBNVVRBVElPTl9BUFBST0FDSF9BU1lOQykge1xuICAgICAgZnJhbWUgPSBXSU5ET1cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHBlcmZvcm1PcGVyYXRpb25TeW5jO1xuICAgIH1cblxuICAgIGZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtdXRhdG9yID0gZ2V0TXV0YXRvcigpO1xuICAgICAgdmFyIG1hcmsgPSBwZXJmLmJlZ2luKCdtdXRhdGUnKTtcbiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7XG4gICAgICBtYXJrKCk7XG4gICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgfSk7XG4gIH1cbn1cbnZhciBkaXNhYmxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkge1xuICBkaXNhYmxlZCA9IHRydWU7XG59XG5mdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbn1cbnZhciBtbyA9IG51bGw7XG5mdW5jdGlvbiBvYnNlcnZlKG9wdGlvbnMpIHtcbiAgaWYgKCFNVVRBVElPTl9PQlNFUlZFUikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghY29uZmlnLm9ic2VydmVNdXRhdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkdHJlZUNhbGxiYWNrID0gb3B0aW9ucy50cmVlQ2FsbGJhY2ssXG4gICAgICB0cmVlQ2FsbGJhY2sgPSBfb3B0aW9ucyR0cmVlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHRyZWVDYWxsYmFjayxcbiAgICAgIF9vcHRpb25zJG5vZGVDYWxsYmFjayA9IG9wdGlvbnMubm9kZUNhbGxiYWNrLFxuICAgICAgbm9kZUNhbGxiYWNrID0gX29wdGlvbnMkbm9kZUNhbGxiYWNrID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRub2RlQ2FsbGJhY2ssXG4gICAgICBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPSBvcHRpb25zLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssXG4gICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrID0gX29wdGlvbnMkcHNldWRvRWxlbWVuID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4sXG4gICAgICBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPSBvcHRpb25zLm9ic2VydmVNdXRhdGlvbnNSb290LFxuICAgICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX29wdGlvbnMkb2JzZXJ2ZU11dGF0O1xuICBtbyA9IG5ldyBNVVRBVElPTl9PQlNFUlZFUihmdW5jdGlvbiAob2JqZWN0cykge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgIHZhciBkZWZhdWx0UHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICAgIHRvQXJyYXkob2JqZWN0cykuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb25SZWNvcmQpIHtcbiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgJiYgIWlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzWzBdKSkge1xuICAgICAgICBpZiAoY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgcHNldWRvRWxlbWVudHNDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJlZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAnYXR0cmlidXRlcycgJiYgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUgJiYgY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIGlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC50YXJnZXQpICYmIH5BVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OLmluZGV4T2YobXV0YXRpb25SZWNvcmQuYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT09ICdjbGFzcycgJiYgaGFzUHJlZml4QW5kSWNvbihtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgdmFyIF9nZXRDYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG11dGF0aW9uUmVjb3JkLnRhcmdldCkpLFxuICAgICAgICAgICAgICBwcmVmaXggPSBfZ2V0Q2Fub25pY2FsSWNvbi5wcmVmaXgsXG4gICAgICAgICAgICAgIGljb25OYW1lID0gX2dldENhbm9uaWNhbEljb24uaWNvbk5hbWU7XG5cbiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXggfHwgZGVmYXVsdFByZWZpeCk7XG4gICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgbm9kZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIG1vLm9ic2VydmUob2JzZXJ2ZU11dGF0aW9uc1Jvb3QsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgIHN1YnRyZWU6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBkaXNjb25uZWN0KCkge1xuICBpZiAoIW1vKSByZXR1cm47XG4gIG1vLmRpc2Nvbm5lY3QoKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVQYXJzZXIgKG5vZGUpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gIHZhciB2YWwgPSBbXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICB2YWwgPSBzdHlsZS5zcGxpdCgnOycpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBzdHlsZSkge1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgcHJvcCA9IHN0eWxlc1swXTtcbiAgICAgIHZhciB2YWx1ZSA9IHN0eWxlcy5zbGljZSgxKTtcblxuICAgICAgaWYgKHByb3AgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBhY2NbcHJvcF0gPSB2YWx1ZS5qb2luKCc6JykudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGNsYXNzUGFyc2VyIChub2RlKSB7XG4gIHZhciBleGlzdGluZ1ByZWZpeCA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWZpeCcpO1xuICB2YXIgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgdmFyIGlubmVyVGV4dCA9IG5vZGUuaW5uZXJUZXh0ICE9PSB1bmRlZmluZWQgPyBub2RlLmlubmVyVGV4dC50cmltKCkgOiAnJztcbiAgdmFyIHZhbCA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShub2RlKSk7XG5cbiAgaWYgKCF2YWwucHJlZml4KSB7XG4gICAgdmFsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1ByZWZpeCAmJiBleGlzdGluZ0ljb25OYW1lKSB7XG4gICAgdmFsLnByZWZpeCA9IGV4aXN0aW5nUHJlZml4O1xuICAgIHZhbC5pY29uTmFtZSA9IGV4aXN0aW5nSWNvbk5hbWU7XG4gIH1cblxuICBpZiAodmFsLmljb25OYW1lICYmIHZhbC5wcmVmaXgpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgaWYgKHZhbC5wcmVmaXggJiYgaW5uZXJUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICB2YWwuaWNvbk5hbWUgPSBieUxpZ2F0dXJlKHZhbC5wcmVmaXgsIG5vZGUuaW5uZXJUZXh0KSB8fCBieVVuaWNvZGUodmFsLnByZWZpeCwgdG9IZXgobm9kZS5pbm5lclRleHQpKTtcbiAgfVxuXG4gIGlmICghdmFsLmljb25OYW1lICYmIGNvbmZpZy5hdXRvRmV0Y2hTdmcgJiYgbm9kZS5maXJzdENoaWxkICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICB2YWwuaWNvbk5hbWUgPSBub2RlLmZpcnN0Q2hpbGQuZGF0YTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZXNQYXJzZXIgKG5vZGUpIHtcbiAgdmFyIGV4dHJhQXR0cmlidXRlcyA9IHRvQXJyYXkobm9kZS5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgYXR0cikge1xuICAgIGlmIChhY2MubmFtZSAhPT0gJ2NsYXNzJyAmJiBhY2MubmFtZSAhPT0gJ3N0eWxlJykge1xuICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIHRpdGxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIHZhciB0aXRsZUlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtdGl0bGUtaWQnKTtcblxuICBpZiAoY29uZmlnLmF1dG9BMTF5KSB7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snYXJpYS1oaWRkZW4nXSA9ICd0cnVlJztcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snZm9jdXNhYmxlJ10gPSAnZmFsc2UnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHRyYUF0dHJpYnV0ZXM7XG59XG5cbmZ1bmN0aW9uIGJsYW5rTWV0YSgpIHtcbiAgcmV0dXJuIHtcbiAgICBpY29uTmFtZTogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0aXRsZUlkOiBudWxsLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIGV4dHJhOiB7XG4gICAgICBjbGFzc2VzOiBbXSxcbiAgICAgIHN0eWxlczoge30sXG4gICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlTWV0YShub2RlKSB7XG4gIHZhciBwYXJzZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICBzdHlsZVBhcnNlcjogdHJ1ZVxuICB9O1xuXG4gIHZhciBfY2xhc3NQYXJzZXIgPSBjbGFzc1BhcnNlcihub2RlKSxcbiAgICAgIGljb25OYW1lID0gX2NsYXNzUGFyc2VyLmljb25OYW1lLFxuICAgICAgcHJlZml4ID0gX2NsYXNzUGFyc2VyLnByZWZpeCxcbiAgICAgIGV4dHJhQ2xhc3NlcyA9IF9jbGFzc1BhcnNlci5yZXN0O1xuXG4gIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUpO1xuICB2YXIgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoJ3BhcnNlTm9kZUF0dHJpYnV0ZXMnLCB7fSwgbm9kZSk7XG4gIHZhciBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUpIDogW107XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMih7XG4gICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgIHRpdGxlOiBub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSxcbiAgICB0aXRsZUlkOiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10aXRsZS1pZCcpLFxuICAgIHByZWZpeDogcHJlZml4LFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcyxcbiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBleHRyYUF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sIHBsdWdpbk1ldGEpO1xufVxuXG52YXIgc3R5bGVzJDIgPSBuYW1lc3BhY2Uuc3R5bGVzO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpIHtcbiAgdmFyIG5vZGVNZXRhID0gY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSAnbmVzdCcgPyBwYXJzZU1ldGEobm9kZSwge1xuICAgIHN0eWxlUGFyc2VyOiBmYWxzZVxuICB9KSA6IHBhcnNlTWV0YShub2RlKTtcblxuICBpZiAofm5vZGVNZXRhLmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMQVlFUlNfVEVYVF9DTEFTU05BTUUpKSB7XG4gICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVMYXllcnNUZXh0Jywgbm9kZSwgbm9kZU1ldGEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbicsIG5vZGUsIG5vZGVNZXRhKTtcbiAgfVxufVxuXG52YXIga25vd25QcmVmaXhlcyA9IG5ldyBTZXQoKTtcbkZBTUlMSUVTLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gIGtub3duUHJlZml4ZXMuYWRkKFwiZmEtXCIuY29uY2F0KGZhbWlseSkpO1xufSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX0NMQVNTSUNdKS5tYXAoa25vd25QcmVmaXhlcy5hZGQuYmluZChrbm93blByZWZpeGVzKSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX1NIQVJQXSkubWFwKGtub3duUHJlZml4ZXMuYWRkLmJpbmQoa25vd25QcmVmaXhlcykpO1xua25vd25QcmVmaXhlcyA9IF90b0NvbnN1bWFibGVBcnJheShrbm93blByZWZpeGVzKTtcblxuZnVuY3Rpb24gb25UcmVlKHJvb3QpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICBpZiAoIUlTX0RPTSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB2YXIgaHRtbENsYXNzTGlzdCA9IERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgdmFyIGhjbEFkZCA9IGZ1bmN0aW9uIGhjbEFkZChzdWZmaXgpIHtcbiAgICByZXR1cm4gaHRtbENsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCBcIi1cIikuY29uY2F0KHN1ZmZpeCkpO1xuICB9O1xuXG4gIHZhciBoY2xSZW1vdmUgPSBmdW5jdGlvbiBoY2xSZW1vdmUoc3VmZml4KSB7XG4gICAgcmV0dXJuIGh0bWxDbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgXCItXCIpLmNvbmNhdChzdWZmaXgpKTtcbiAgfTtcblxuICB2YXIgcHJlZml4ZXMgPSBjb25maWcuYXV0b0ZldGNoU3ZnID8ga25vd25QcmVmaXhlcyA6IEZBTUlMSUVTLm1hcChmdW5jdGlvbiAoZikge1xuICAgIHJldHVybiBcImZhLVwiLmNvbmNhdChmKTtcbiAgfSkuY29uY2F0KE9iamVjdC5rZXlzKHN0eWxlcyQyKSk7XG5cbiAgaWYgKCFwcmVmaXhlcy5pbmNsdWRlcygnZmEnKSkge1xuICAgIHByZWZpeGVzLnB1c2goJ2ZhJyk7XG4gIH1cblxuICB2YXIgcHJlZml4ZXNEb21RdWVyeSA9IFtcIi5cIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKV0uY29uY2F0KHByZWZpeGVzLm1hcChmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBcIi5cIi5jb25jYXQocCwgXCI6bm90KFtcIikuY29uY2F0KERBVEFfRkFfSTJTVkcsIFwiXSlcIik7XG4gIH0pKS5qb2luKCcsICcpO1xuXG4gIGlmIChwcmVmaXhlc0RvbVF1ZXJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gW107XG5cbiAgdHJ5IHtcbiAgICBjYW5kaWRhdGVzID0gdG9BcnJheShyb290LnF1ZXJ5U2VsZWN0b3JBbGwocHJlZml4ZXNEb21RdWVyeSkpO1xuICB9IGNhdGNoIChlKSB7Ly8gbm9vcFxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGhjbEFkZCgncGVuZGluZycpO1xuICAgIGhjbFJlbW92ZSgnY29tcGxldGUnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICB2YXIgbWFyayA9IHBlcmYuYmVnaW4oJ29uVHJlZScpO1xuICB2YXIgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgbXV0YXRpb24gPSBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpO1xuXG4gICAgICBpZiAobXV0YXRpb24pIHtcbiAgICAgICAgYWNjLnB1c2gobXV0YXRpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghUFJPRFVDVElPTikge1xuICAgICAgICBpZiAoZS5uYW1lID09PSAnTWlzc2luZ0ljb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBQcm9taXNlLmFsbChtdXRhdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHJlc29sdmVkTXV0YXRpb25zKSB7XG4gICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhjbEFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhjbEFkZCgnY29tcGxldGUnKTtcbiAgICAgICAgaGNsUmVtb3ZlKCdwZW5kaW5nJyk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIG1hcmsoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIG1hcmsoKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uTm9kZShub2RlKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgZ2VuZXJhdGVNdXRhdGlvbihub2RlKS50aGVuKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgIGlmIChtdXRhdGlvbikge1xuICAgICAgcGVyZm9ybShbbXV0YXRpb25dLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUljb25zKG5leHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtYXliZUljb25EZWZpbml0aW9uKSB7XG4gICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGljb25EZWZpbml0aW9uID0gKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pLmljb24gPyBtYXliZUljb25EZWZpbml0aW9uIDogZmluZEljb25EZWZpbml0aW9uKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pO1xuICAgIHZhciBtYXNrID0gcGFyYW1zLm1hc2s7XG5cbiAgICBpZiAobWFzaykge1xuICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChpY29uRGVmaW5pdGlvbiwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhcmFtcyksIHt9LCB7XG4gICAgICBtYXNrOiBtYXNrXG4gICAgfSkpO1xuICB9O1xufVxuXG52YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGljb25EZWZpbml0aW9uKSB7XG4gIHZhciBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgX3BhcmFtcyR0cmFuc2Zvcm0gPSBwYXJhbXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNmb3JtID0gX3BhcmFtcyR0cmFuc2Zvcm0gPT09IHZvaWQgMCA/IG1lYW5pbmdsZXNzVHJhbnNmb3JtIDogX3BhcmFtcyR0cmFuc2Zvcm0sXG4gICAgICBfcGFyYW1zJHN5bWJvbCA9IHBhcmFtcy5zeW1ib2wsXG4gICAgICBzeW1ib2wgPSBfcGFyYW1zJHN5bWJvbCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHN5bWJvbCxcbiAgICAgIF9wYXJhbXMkbWFzayA9IHBhcmFtcy5tYXNrLFxuICAgICAgbWFzayA9IF9wYXJhbXMkbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkbWFzayxcbiAgICAgIF9wYXJhbXMkbWFza0lkID0gcGFyYW1zLm1hc2tJZCxcbiAgICAgIG1hc2tJZCA9IF9wYXJhbXMkbWFza0lkID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyRtYXNrSWQsXG4gICAgICBfcGFyYW1zJHRpdGxlID0gcGFyYW1zLnRpdGxlLFxuICAgICAgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSxcbiAgICAgIF9wYXJhbXMkdGl0bGVJZCA9IHBhcmFtcy50aXRsZUlkLFxuICAgICAgdGl0bGVJZCA9IF9wYXJhbXMkdGl0bGVJZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkdGl0bGVJZCxcbiAgICAgIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsXG4gICAgICBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMuYXR0cmlidXRlcyxcbiAgICAgIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLFxuICAgICAgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMuc3R5bGVzLFxuICAgICAgc3R5bGVzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7XG4gIGlmICghaWNvbkRlZmluaXRpb24pIHJldHVybjtcbiAgdmFyIHByZWZpeCA9IGljb25EZWZpbml0aW9uLnByZWZpeCxcbiAgICAgIGljb25OYW1lID0gaWNvbkRlZmluaXRpb24uaWNvbk5hbWUsXG4gICAgICBpY29uID0gaWNvbkRlZmluaXRpb24uaWNvbjtcbiAgcmV0dXJuIGRvbVZhcmlhbnRzKF9vYmplY3RTcHJlYWQyKHtcbiAgICB0eXBlOiAnaWNvbidcbiAgfSwgaWNvbkRlZmluaXRpb24pLCBmdW5jdGlvbiAoKSB7XG4gICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICBpY29uRGVmaW5pdGlvbjogaWNvbkRlZmluaXRpb24sXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hdXRvQTExeSkge1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgICBhdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJbmxpbmVTdmdBYnN0cmFjdCh7XG4gICAgICBpY29uczoge1xuICAgICAgICBtYWluOiBhc0ZvdW5kSWNvbihpY29uKSxcbiAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7XG4gICAgICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJlZml4OiBwcmVmaXgsXG4gICAgICBpY29uTmFtZTogaWNvbk5hbWUsXG4gICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybSksXG4gICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIG1hc2tJZDogbWFza0lkLFxuICAgICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgICBjbGFzc2VzOiBjbGFzc2VzXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcbnZhciBSZXBsYWNlRWxlbWVudHMgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiByZXNvbHZlSWNvbnMocmVuZGVyKVxuICAgIH07XG4gIH0sXG4gIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikge1xuICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7XG4gICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zLm5vZGUsXG4gICAgICAgICAgbm9kZSA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGUsXG4gICAgICAgICAgX3BhcmFtcyRjYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjayxcbiAgICAgICAgICBjYWxsYmFjayA9IF9wYXJhbXMkY2FsbGJhY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3BhcmFtcyRjYWxsYmFjaztcbiAgICAgIHJldHVybiBvblRyZWUobm9kZSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICB2YXIgaWNvbk5hbWUgPSBub2RlTWV0YS5pY29uTmFtZSxcbiAgICAgICAgICB0aXRsZSA9IG5vZGVNZXRhLnRpdGxlLFxuICAgICAgICAgIHRpdGxlSWQgPSBub2RlTWV0YS50aXRsZUlkLFxuICAgICAgICAgIHByZWZpeCA9IG5vZGVNZXRhLnByZWZpeCxcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBub2RlTWV0YS50cmFuc2Zvcm0sXG4gICAgICAgICAgc3ltYm9sID0gbm9kZU1ldGEuc3ltYm9sLFxuICAgICAgICAgIG1hc2sgPSBub2RlTWV0YS5tYXNrLFxuICAgICAgICAgIG1hc2tJZCA9IG5vZGVNZXRhLm1hc2tJZCxcbiAgICAgICAgICBleHRyYSA9IG5vZGVNZXRhLmV4dHJhO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLCBtYXNrLmljb25OYW1lID8gZmluZEljb24obWFzay5pY29uTmFtZSwgbWFzay5wcmVmaXgpIDogUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBmb3VuZDogZmFsc2UsXG4gICAgICAgICAgd2lkdGg6IDUxMixcbiAgICAgICAgICBoZWlnaHQ6IDUxMixcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9KV0pLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAgICAgICAgbWFpbiA9IF9yZWYyWzBdLFxuICAgICAgICAgICAgICBtYXNrID0gX3JlZjJbMV07XG5cbiAgICAgICAgICByZXNvbHZlKFtub2RlLCBtYWtlSW5saW5lU3ZnQWJzdHJhY3Qoe1xuICAgICAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgICAgbWFpbjogbWFpbixcbiAgICAgICAgICAgICAgbWFzazogbWFza1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgIG1hc2tJZDogbWFza0lkLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcbiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pXSk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlQWJzdHJhY3RJY29uID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgICAgICBhdHRyaWJ1dGVzID0gX3JlZjMuYXR0cmlidXRlcyxcbiAgICAgICAgICBtYWluID0gX3JlZjMubWFpbixcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBfcmVmMy50cmFuc2Zvcm0sXG4gICAgICAgICAgc3R5bGVzID0gX3JlZjMuc3R5bGVzO1xuICAgICAgdmFyIHN0eWxlU3RyaW5nID0gam9pblN0eWxlcyhzdHlsZXMpO1xuXG4gICAgICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0Q2hpbGQ7XG5cbiAgICAgIGlmICh0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtKSkge1xuICAgICAgICBuZXh0Q2hpbGQgPSBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZycsIHtcbiAgICAgICAgICBtYWluOiBtYWluLFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLFxuICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgTGF5ZXJzID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF5ZXI6IGZ1bmN0aW9uIGxheWVyKGFzc2VtYmxlcikge1xuICAgICAgICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgICAgdmFyIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ2xheWVyJ1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBhc3NlbWJsZXI6IGFzc2VtYmxlcixcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgICAgYXNzZW1ibGVyKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYS5hYnN0cmFjdCk7XG4gICAgICAgICAgICB9KSA6IGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFyZ3MuYWJzdHJhY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzXCIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzZXMpKS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIExheWVyc0NvdW50ZXIgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudGVyOiBmdW5jdGlvbiBjb3VudGVyKGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIHZhciBfcGFyYW1zJHRpdGxlID0gcGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSxcbiAgICAgICAgICAgIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsXG4gICAgICAgICAgICBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMuc3R5bGVzLFxuICAgICAgICAgICAgc3R5bGVzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxIb29rcygnYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uJywge1xuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3Qoe1xuICAgICAgICAgICAgY29udGVudDogY29udGVudC50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtY291bnRlclwiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIExheWVyc1RleHQgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBmdW5jdGlvbiB0ZXh0KGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIHZhciBfcGFyYW1zJHRyYW5zZm9ybSA9IHBhcmFtcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICB0cmFuc2Zvcm0gPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSxcbiAgICAgICAgICAgIF9wYXJhbXMkdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICAgICAgICB0aXRsZSA9IF9wYXJhbXMkdGl0bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJHRpdGxlLFxuICAgICAgICAgICAgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXMsXG4gICAgICAgICAgICBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcyxcbiAgICAgICAgICAgIF9wYXJhbXMkYXR0cmlidXRlcyA9IHBhcmFtcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlcyA9IF9wYXJhbXMkYXR0cmlidXRlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtcy5zdHlsZXMsXG4gICAgICAgICAgICBzdHlsZXMgPSBfcGFyYW1zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJHN0eWxlcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgY29udGVudDogY29udGVudFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7XG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWVhbmluZ2xlc3NUcmFuc2Zvcm0pLCB0cmFuc2Zvcm0pLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtdGV4dFwiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzKHByb3ZpZGVycyQkMSkge1xuICAgIHByb3ZpZGVycyQkMS5nZW5lcmF0ZUxheWVyc1RleHQgPSBmdW5jdGlvbiAobm9kZSwgbm9kZU1ldGEpIHtcbiAgICAgIHZhciB0aXRsZSA9IG5vZGVNZXRhLnRpdGxlLFxuICAgICAgICAgIHRyYW5zZm9ybSA9IG5vZGVNZXRhLnRyYW5zZm9ybSxcbiAgICAgICAgICBleHRyYSA9IG5vZGVNZXRhLmV4dHJhO1xuICAgICAgdmFyIHdpZHRoID0gbnVsbDtcbiAgICAgIHZhciBoZWlnaHQgPSBudWxsO1xuXG4gICAgICBpZiAoSVNfSUUpIHtcbiAgICAgICAgdmFyIGNvbXB1dGVkRm9udFNpemUgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLmZvbnRTaXplLCAxMCk7XG4gICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB3aWR0aCA9IGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCAvIGNvbXB1dGVkRm9udFNpemU7XG4gICAgICAgIGhlaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLyBjb21wdXRlZEZvbnRTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmF1dG9BMTF5ICYmICF0aXRsZSkge1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgY29udGVudDogbm9kZS5pbm5lckhUTUwsXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGV4dHJhOiBleHRyYSxcbiAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICB9KV0pO1xuICAgIH07XG4gIH1cbn07XG5cbnZhciBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXFxcIlwiLCAndWcnKTtcbnZhciBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTtcbmZ1bmN0aW9uIGhleFZhbHVlRnJvbUNvbnRlbnQoY29udGVudCkge1xuICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQucmVwbGFjZShDTEVBTl9DT05URU5UX1BBVFRFUk4sICcnKTtcbiAgdmFyIGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KGNsZWFuZWQsIDApO1xuICB2YXIgaXNQcmVwZW5kVGVuID0gY29kZVBvaW50ID49IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzBdICYmIGNvZGVQb2ludCA8PSBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRVsxXTtcbiAgdmFyIGlzRG91YmxlZCA9IGNsZWFuZWQubGVuZ3RoID09PSAyID8gY2xlYW5lZFswXSA9PT0gY2xlYW5lZFsxXSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBpc0RvdWJsZWQgPyB0b0hleChjbGVhbmVkWzBdKSA6IHRvSGV4KGNsZWFuZWQpLFxuICAgIGlzU2Vjb25kYXJ5OiBpc1ByZXBlbmRUZW4gfHwgaXNEb3VibGVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCBwb3NpdGlvbikge1xuICB2YXIgcGVuZGluZ0F0dHJpYnV0ZSA9IFwiXCIuY29uY2F0KERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORykuY29uY2F0KHBvc2l0aW9uLnJlcGxhY2UoJzonLCAnLScpKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUocGVuZGluZ0F0dHJpYnV0ZSkgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgbm9kZSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0b0FycmF5KG5vZGUuY2hpbGRyZW4pO1xuICAgIHZhciBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMuZ2V0QXR0cmlidXRlKERBVEFfRkFfUFNFVURPX0VMRU1FTlQpID09PSBwb3NpdGlvbjtcbiAgICB9KVswXTtcbiAgICB2YXIgc3R5bGVzID0gV0lORE9XLmdldENvbXB1dGVkU3R5bGUobm9kZSwgcG9zaXRpb24pO1xuICAgIHZhciBmb250RmFtaWx5ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtZmFtaWx5JykubWF0Y2goRk9OVF9GQU1JTFlfUEFUVEVSTik7XG4gICAgdmFyIGZvbnRXZWlnaHQgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC13ZWlnaHQnKTtcbiAgICB2YXIgY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgJiYgIWZvbnRGYW1pbHkpIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIGl0IGJ1dCB0aGUgY3VycmVudCBjb21wdXRlZCBzdHlsZSBkb2VzIG5vdCByZXN1bHQgaW4gYSBmb250LWZhbWlseSxcbiAgICAgIC8vIHRoYXQgcHJvYmFibHkgbWVhbnMgdGhhdCBhIGNsYXNzIG5hbWUgdGhhdCB3YXMgcHJldmlvdXNseSBwcmVzZW50IHRvIG1ha2UgdGhlIGljb24gaGFzIGJlZW5cbiAgICAgIC8vIHJlbW92ZWQuIFNvIHdlIG5vdyBzaG91bGQgZGVsZXRlIHRoZSBpY29uLlxuICAgICAgbm9kZS5yZW1vdmVDaGlsZChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZm9udEZhbWlseSAmJiBjb250ZW50ICE9PSAnbm9uZScgJiYgY29udGVudCAhPT0gJycpIHtcbiAgICAgIHZhciBfY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICAgIHZhciBmYW1pbHkgPSB+WydTaGFycCddLmluZGV4T2YoZm9udEZhbWlseVsyXSkgPyBGQU1JTFlfU0hBUlAgOiBGQU1JTFlfQ0xBU1NJQztcbiAgICAgIHZhciBwcmVmaXggPSB+WydTb2xpZCcsICdSZWd1bGFyJywgJ0xpZ2h0JywgJ1RoaW4nLCAnRHVvdG9uZScsICdCcmFuZHMnLCAnS2l0J10uaW5kZXhPZihmb250RmFtaWx5WzJdKSA/IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW2ZvbnRGYW1pbHlbMl0udG9Mb3dlckNhc2UoKV0gOiBGT05UX1dFSUdIVF9UT19QUkVGSVhbZmFtaWx5XVtmb250V2VpZ2h0XTtcblxuICAgICAgdmFyIF9oZXhWYWx1ZUZyb21Db250ZW50ID0gaGV4VmFsdWVGcm9tQ29udGVudChfY29udGVudCksXG4gICAgICAgICAgaGV4VmFsdWUgPSBfaGV4VmFsdWVGcm9tQ29udGVudC52YWx1ZSxcbiAgICAgICAgICBpc1NlY29uZGFyeSA9IF9oZXhWYWx1ZUZyb21Db250ZW50LmlzU2Vjb25kYXJ5O1xuXG4gICAgICB2YXIgaXNWNCA9IGZvbnRGYW1pbHlbMF0uc3RhcnRzV2l0aCgnRm9udEF3ZXNvbWUnKTtcbiAgICAgIHZhciBpY29uTmFtZSA9IGJ5VW5pY29kZShwcmVmaXgsIGhleFZhbHVlKTtcbiAgICAgIHZhciBpY29uSWRlbnRpZmllciA9IGljb25OYW1lO1xuXG4gICAgICBpZiAoaXNWNCkge1xuICAgICAgICB2YXIgaWNvbk5hbWU0ID0gYnlPbGRVbmljb2RlKGhleFZhbHVlKTtcblxuICAgICAgICBpZiAoaWNvbk5hbWU0Lmljb25OYW1lICYmIGljb25OYW1lNC5wcmVmaXgpIHtcbiAgICAgICAgICBpY29uTmFtZSA9IGljb25OYW1lNC5pY29uTmFtZTtcbiAgICAgICAgICBwcmVmaXggPSBpY29uTmFtZTQucHJlZml4O1xuICAgICAgICB9XG4gICAgICB9IC8vIE9ubHkgY29udmVydCB0aGUgcHNldWRvIGVsZW1lbnQgaW4gdGhpcyA6OmJlZm9yZS86OmFmdGVyIHBvc2l0aW9uIGludG8gYW4gaWNvbiBpZiB3ZSBoYXZlbid0XG4gICAgICAvLyBhbHJlYWR5IGRvbmUgc28gd2l0aCB0aGUgc2FtZSBwcmVmaXggYW5kIGljb25OYW1lXG5cblxuICAgICAgaWYgKGljb25OYW1lICYmICFpc1NlY29uZGFyeSAmJiAoIWFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50IHx8IGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50LmdldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCkgIT09IHByZWZpeCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSAhPT0gaWNvbklkZW50aWZpZXIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUsIGljb25JZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpIHtcbiAgICAgICAgICAvLyBEZWxldGUgdGhlIG9sZCBvbmUsIHNpbmNlIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGEgbmV3IG9uZVxuICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1ldGEgPSBibGFua01ldGEoKTtcbiAgICAgICAgdmFyIGV4dHJhID0gbWV0YS5leHRyYTtcbiAgICAgICAgZXh0cmEuYXR0cmlidXRlc1tEQVRBX0ZBX1BTRVVET19FTEVNRU5UXSA9IHBvc2l0aW9uO1xuICAgICAgICBmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4KS50aGVuKGZ1bmN0aW9uIChtYWluKSB7XG4gICAgICAgICAgdmFyIF9hYnN0cmFjdCA9IG1ha2VJbmxpbmVTdmdBYnN0cmFjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7XG4gICAgICAgICAgICBpY29uczoge1xuICAgICAgICAgICAgICBtYWluOiBtYWluLFxuICAgICAgICAgICAgICBtYXNrOiBlbXB0eUNhbm9uaWNhbEljb24oKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgaWNvbk5hbWU6IGljb25JZGVudGlmaWVyLFxuICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxuICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQub3V0ZXJIVE1MID0gX2Fic3RyYWN0Lm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvSHRtbChhKTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgJzo6YmVmb3JlJyksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCAnOjphZnRlcicpXSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuaGVhZCAmJiAhflRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLmluZGV4T2Yobm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gJ3N2ZycpO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hQc2V1ZG9FbGVtZW50cyhyb290KSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIG9wZXJhdGlvbnMgPSB0b0FycmF5KHJvb3QucXVlcnlTZWxlY3RvckFsbCgnKicpKS5maWx0ZXIocHJvY2Vzc2FibGUpLm1hcChyZXBsYWNlKTtcbiAgICB2YXIgZW5kID0gcGVyZi5iZWdpbignc2VhcmNoUHNldWRvRWxlbWVudHMnKTtcbiAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTtcbiAgICBQcm9taXNlLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGVuZCgpO1xuICAgICAgZW5hYmxlT2JzZXJ2YXRpb24oKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBlbmQoKTtcbiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICByZWplY3QoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbnZhciBQc2V1ZG9FbGVtZW50cyA9IHtcbiAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOiBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50cztcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtcy5ub2RlLFxuICAgICAgICAgIG5vZGUgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlO1xuXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbnZhciBfdW53YXRjaGVkID0gZmFsc2U7XG52YXIgTXV0YXRpb25PYnNlcnZlciQxID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIHVud2F0Y2g6IGZ1bmN0aW9uIHVud2F0Y2goKSB7XG4gICAgICAgICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICAgICAgX3Vud2F0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKCkge1xuICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoJ211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MnLCB7fSkpO1xuICAgICAgfSxcbiAgICAgIG5vQXV0bzogZnVuY3Rpb24gbm9BdXRvKCkge1xuICAgICAgICBkaXNjb25uZWN0KCk7XG4gICAgICB9LFxuICAgICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKHBhcmFtcykge1xuICAgICAgICB2YXIgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBwYXJhbXMub2JzZXJ2ZU11dGF0aW9uc1Jvb3Q7XG5cbiAgICAgICAgaWYgKF91bndhdGNoZWQpIHtcbiAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygnbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcycsIHtcbiAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290OiBvYnNlcnZlTXV0YXRpb25zUm9vdFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbnZhciBwYXJzZVRyYW5zZm9ybVN0cmluZyA9IGZ1bmN0aW9uIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZykge1xuICB2YXIgdHJhbnNmb3JtID0ge1xuICAgIHNpemU6IDE2LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBmbGlwWDogZmFsc2UsXG4gICAgZmxpcFk6IGZhbHNlLFxuICAgIHJvdGF0ZTogMFxuICB9O1xuICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbikge1xuICAgIHZhciBwYXJ0cyA9IG4udG9Mb3dlckNhc2UoKS5zcGxpdCgnLScpO1xuICAgIHZhciBmaXJzdCA9IHBhcnRzWzBdO1xuICAgIHZhciByZXN0ID0gcGFydHMuc2xpY2UoMSkuam9pbignLScpO1xuXG4gICAgaWYgKGZpcnN0ICYmIHJlc3QgPT09ICdoJykge1xuICAgICAgYWNjLmZsaXBYID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0ICYmIHJlc3QgPT09ICd2Jykge1xuICAgICAgYWNjLmZsaXBZID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgcmVzdCA9IHBhcnNlRmxvYXQocmVzdCk7XG5cbiAgICBpZiAoaXNOYU4ocmVzdCkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaXJzdCkge1xuICAgICAgY2FzZSAnZ3Jvdyc6XG4gICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2hyaW5rJzpcbiAgICAgICAgYWNjLnNpemUgPSBhY2Muc2l6ZSAtIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgYWNjLnggPSBhY2MueCAtIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGFjYy54ID0gYWNjLnggKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndXAnOlxuICAgICAgICBhY2MueSA9IGFjYy55IC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICBhY2MueSA9IGFjYy55ICsgcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6XG4gICAgICAgIGFjYy5yb3RhdGUgPSBhY2Mucm90YXRlICsgcmVzdDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgdHJhbnNmb3JtKTtcbn07XG52YXIgUG93ZXJUcmFuc2Zvcm1zID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IHtcbiAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmluZyA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWZhLXRyYW5zZm9ybScpO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHJpbmcpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci50cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICBwcm92aWRlcnMuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBtYWluID0gX3JlZi5tYWluLFxuICAgICAgICAgIHRyYW5zZm9ybSA9IF9yZWYudHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoID0gX3JlZi5jb250YWluZXJXaWR0aCxcbiAgICAgICAgICBpY29uV2lkdGggPSBfcmVmLmljb25XaWR0aDtcbiAgICAgIHZhciBvdXRlciA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCBcIiAyNTYpXCIpXG4gICAgICB9O1xuICAgICAgdmFyIGlubmVyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54ICogMzIsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS55ICogMzIsIFwiKSBcIik7XG4gICAgICB2YXIgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICAgICAgdmFyIGlubmVyUm90YXRlID0gXCJyb3RhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS5yb3RhdGUsIFwiIDAgMClcIik7XG4gICAgICB2YXIgaW5uZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgICAgIH07XG4gICAgICB2YXIgcGF0aCA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICAgICAgfTtcbiAgICAgIHZhciBvcGVyYXRpb25zID0ge1xuICAgICAgICBvdXRlcjogb3V0ZXIsXG4gICAgICAgIGlubmVyOiBpbm5lcixcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgb3BlcmF0aW9ucy5vdXRlciksXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHRhZzogJ2cnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLmlubmVyKSxcbiAgICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICAgIHRhZzogbWFpbi5pY29uLnRhZyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluLmljb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpbi5pY29uLmF0dHJpYnV0ZXMpLCBvcGVyYXRpb25zLnBhdGgpXG4gICAgICAgICAgfV1cbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxufTtcblxudmFyIEFMTF9TUEFDRSA9IHtcbiAgeDogMCxcbiAgeTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn07XG5cbmZ1bmN0aW9uIGZpbGxCbGFjayhfYWJzdHJhY3QpIHtcbiAgdmFyIGZvcmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gIGlmIChfYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoX2Fic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCB8fCBmb3JjZSkpIHtcbiAgICBfYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsID0gJ2JsYWNrJztcbiAgfVxuXG4gIHJldHVybiBfYWJzdHJhY3Q7XG59XG5cbmZ1bmN0aW9uIGRlR3JvdXAoX2Fic3RyYWN0Mikge1xuICBpZiAoX2Fic3RyYWN0Mi50YWcgPT09ICdnJykge1xuICAgIHJldHVybiBfYWJzdHJhY3QyLmNoaWxkcmVuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbX2Fic3RyYWN0Ml07XG4gIH1cbn1cblxudmFyIE1hc2tzID0ge1xuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgdmFyIG1hc2tEYXRhID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtbWFzaycpO1xuICAgICAgICB2YXIgbWFzayA9ICFtYXNrRGF0YSA/IGVtcHR5Q2Fub25pY2FsSWNvbigpIDogZ2V0Q2Fub25pY2FsSWNvbihtYXNrRGF0YS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBpLnRyaW0oKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmICghbWFzay5wcmVmaXgpIHtcbiAgICAgICAgICBtYXNrLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrO1xuICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrLWlkJyk7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgICAgYXR0cmlidXRlcyA9IF9yZWYuYXR0cmlidXRlcyxcbiAgICAgICAgICBtYWluID0gX3JlZi5tYWluLFxuICAgICAgICAgIG1hc2sgPSBfcmVmLm1hc2ssXG4gICAgICAgICAgZXhwbGljaXRNYXNrSWQgPSBfcmVmLm1hc2tJZCxcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybTtcbiAgICAgIHZhciBtYWluV2lkdGggPSBtYWluLndpZHRoLFxuICAgICAgICAgIG1haW5QYXRoID0gbWFpbi5pY29uO1xuICAgICAgdmFyIG1hc2tXaWR0aCA9IG1hc2sud2lkdGgsXG4gICAgICAgICAgbWFza1BhdGggPSBtYXNrLmljb247XG4gICAgICB2YXIgdHJhbnMgPSB0cmFuc2Zvcm1Gb3JTdmcoe1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IG1hc2tXaWR0aCxcbiAgICAgICAgaWNvbldpZHRoOiBtYWluV2lkdGhcbiAgICAgIH0pO1xuICAgICAgdmFyIG1hc2tSZWN0ID0ge1xuICAgICAgICB0YWc6ICdyZWN0JyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7XG4gICAgICAgICAgZmlsbDogJ3doaXRlJ1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIHZhciBtYXNrSW5uZXJHcm91cENoaWxkcmVuTWl4aW4gPSBtYWluUGF0aC5jaGlsZHJlbiA/IHtcbiAgICAgICAgY2hpbGRyZW46IG1haW5QYXRoLmNoaWxkcmVuLm1hcChmaWxsQmxhY2spXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbWFza0lubmVyR3JvdXAgPSB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgdHJhbnMuaW5uZXIpLFxuICAgICAgICBjaGlsZHJlbjogW2ZpbGxCbGFjayhfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgdGFnOiBtYWluUGF0aC50YWcsXG4gICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1haW5QYXRoLmF0dHJpYnV0ZXMpLCB0cmFucy5wYXRoKVxuICAgICAgICB9LCBtYXNrSW5uZXJHcm91cENoaWxkcmVuTWl4aW4pKV1cbiAgICAgIH07XG4gICAgICB2YXIgbWFza091dGVyR3JvdXAgPSB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgdHJhbnMub3V0ZXIpLFxuICAgICAgICBjaGlsZHJlbjogW21hc2tJbm5lckdyb3VwXVxuICAgICAgfTtcbiAgICAgIHZhciBtYXNrSWQgPSBcIm1hc2stXCIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICAgIHZhciBjbGlwSWQgPSBcImNsaXAtXCIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICAgIHZhciBtYXNrVGFnID0ge1xuICAgICAgICB0YWc6ICdtYXNrJyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7XG4gICAgICAgICAgaWQ6IG1hc2tJZCxcbiAgICAgICAgICBtYXNrVW5pdHM6ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgbWFza0NvbnRlbnRVbml0czogJ3VzZXJTcGFjZU9uVXNlJ1xuICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRyZW46IFttYXNrUmVjdCwgbWFza091dGVyR3JvdXBdXG4gICAgICB9O1xuICAgICAgdmFyIGRlZnMgPSB7XG4gICAgICAgIHRhZzogJ2RlZnMnLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0YWc6ICdjbGlwUGF0aCcsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgaWQ6IGNsaXBJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW46IGRlR3JvdXAobWFza1BhdGgpXG4gICAgICAgIH0sIG1hc2tUYWddXG4gICAgICB9O1xuICAgICAgY2hpbGRyZW4ucHVzaChkZWZzLCB7XG4gICAgICAgIHRhZzogJ3JlY3QnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgJ2NsaXAtcGF0aCc6IFwidXJsKCNcIi5jb25jYXQoY2xpcElkLCBcIilcIiksXG4gICAgICAgICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChtYXNrSWQsIFwiKVwiKVxuICAgICAgICB9LCBBTExfU1BBQ0UpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgTWlzc2luZ0ljb25JbmRpY2F0b3IgPSB7XG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICB2YXIgcmVkdWNlTW90aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoV0lORE9XLm1hdGNoTWVkaWEpIHtcbiAgICAgIHJlZHVjZU1vdGlvbiA9IFdJTkRPVy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7XG4gICAgfVxuXG4gICAgcHJvdmlkZXJzLm1pc3NpbmdJY29uQWJzdHJhY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZ0NoaWxkcmVuID0gW107XG4gICAgICB2YXIgRklMTCA9IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcidcbiAgICAgIH07XG4gICAgICB2YXIgQU5JTUFUSU9OX0JBU0UgPSB7XG4gICAgICAgIGF0dHJpYnV0ZVR5cGU6ICdYTUwnLFxuICAgICAgICByZXBlYXRDb3VudDogJ2luZGVmaW5pdGUnLFxuICAgICAgICBkdXI6ICcycydcbiAgICAgIH07IC8vIFJpbmdcblxuICAgICAgZ0NoaWxkcmVuLnB1c2goe1xuICAgICAgICB0YWc6ICdwYXRoJyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwge1xuICAgICAgICAgIGQ6ICdNMTU2LjUsNDQ3LjdsLTEyLjYsMjkuNWMtMTguNy05LjUtMzUuOS0yMS4yLTUxLjUtMzQuOWwyMi43LTIyLjdDMTI3LjYsNDMwLjUsMTQxLjUsNDQwLDE1Ni41LDQ0Ny43eiBNNDAuNiwyNzJIOC41IGMxLjQsMjEuMiw1LjQsNDEuNywxMS43LDYxLjFMNTAsMzIxLjJDNDUuMSwzMDUuNSw0MS44LDI4OSw0MC42LDI3MnogTTQwLjYsMjQwYzEuNC0xOC44LDUuMi0zNywxMS4xLTU0LjFsLTI5LjUtMTIuNiBDMTQuNywxOTQuMywxMCwyMTYuNyw4LjUsMjQwSDQwLjZ6IE02NC4zLDE1Ni41YzcuOC0xNC45LDE3LjItMjguOCwyOC4xLTQxLjVMNjkuNyw5Mi4zYy0xMy43LDE1LjYtMjUuNSwzMi44LTM0LjksNTEuNSBMNjQuMywxNTYuNXogTTM5Nyw0MTkuNmMtMTMuOSwxMi0yOS40LDIyLjMtNDYuMSwzMC40bDExLjksMjkuOGMyMC43LTkuOSwzOS44LTIyLjYsNTYuOS0zNy42TDM5Nyw0MTkuNnogTTExNSw5Mi40IGMxMy45LTEyLDI5LjQtMjIuMyw0Ni4xLTMwLjRsLTExLjktMjkuOGMtMjAuNyw5LjktMzkuOCwyMi42LTU2LjgsMzcuNkwxMTUsOTIuNHogTTQ0Ny43LDM1NS41Yy03LjgsMTQuOS0xNy4yLDI4LjgtMjguMSw0MS41IGwyMi43LDIyLjdjMTMuNy0xNS42LDI1LjUtMzIuOSwzNC45LTUxLjVMNDQ3LjcsMzU1LjV6IE00NzEuNCwyNzJjLTEuNCwxOC44LTUuMiwzNy0xMS4xLDU0LjFsMjkuNSwxMi42IGM3LjUtMjEuMSwxMi4yLTQzLjUsMTMuNi02Ni44SDQ3MS40eiBNMzIxLjIsNDYyYy0xNS43LDUtMzIuMiw4LjItNDkuMiw5LjR2MzIuMWMyMS4yLTEuNCw0MS43LTUuNCw2MS4xLTExLjdMMzIxLjIsNDYyeiBNMjQwLDQ3MS40Yy0xOC44LTEuNC0zNy01LjItNTQuMS0xMS4xbC0xMi42LDI5LjVjMjEuMSw3LjUsNDMuNSwxMi4yLDY2LjgsMTMuNlY0NzEuNHogTTQ2MiwxOTAuOGM1LDE1LjcsOC4yLDMyLjIsOS40LDQ5LjJoMzIuMSBjLTEuNC0yMS4yLTUuNC00MS43LTExLjctNjEuMUw0NjIsMTkwLjh6IE05Mi40LDM5N2MtMTItMTMuOS0yMi4zLTI5LjQtMzAuNC00Ni4xbC0yOS44LDExLjljOS45LDIwLjcsMjIuNiwzOS44LDM3LjYsNTYuOSBMOTIuNCwzOTd6IE0yNzIsNDAuNmMxOC44LDEuNCwzNi45LDUuMiw1NC4xLDExLjFsMTIuNi0yOS41QzMxNy43LDE0LjcsMjk1LjMsMTAsMjcyLDguNVY0MC42eiBNMTkwLjgsNTAgYzE1LjctNSwzMi4yLTguMiw0OS4yLTkuNFY4LjVjLTIxLjIsMS40LTQxLjcsNS40LTYxLjEsMTEuN0wxOTAuOCw1MHogTTQ0Mi4zLDkyLjNMNDE5LjYsMTE1YzEyLDEzLjksMjIuMywyOS40LDMwLjUsNDYuMSBsMjkuOC0xMS45QzQ3MCwxMjguNSw0NTcuMywxMDkuNCw0NDIuMyw5Mi4zeiBNMzk3LDkyLjRsMjIuNy0yMi43Yy0xNS42LTEzLjctMzIuOC0yNS41LTUxLjUtMzQuOWwtMTIuNiwyOS41IEMzNzAuNCw3Mi4xLDM4NC40LDgxLjUsMzk3LDkyLjR6J1xuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBPUEFDSVRZX0FOSU1BVEUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwge1xuICAgICAgICBhdHRyaWJ1dGVOYW1lOiAnb3BhY2l0eSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZG90ID0ge1xuICAgICAgICB0YWc6ICdjaXJjbGUnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7XG4gICAgICAgICAgY3g6ICcyNTYnLFxuICAgICAgICAgIGN5OiAnMzY0JyxcbiAgICAgICAgICByOiAnMjgnXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgIH07XG5cbiAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7XG4gICAgICAgIGRvdC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICB0YWc6ICdhbmltYXRlJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwge1xuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogJ3InLFxuICAgICAgICAgICAgdmFsdWVzOiAnMjg7MTQ7Mjg7Mjg7MTQ7Mjg7J1xuICAgICAgICAgIH0pXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0YWc6ICdhbmltYXRlJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHtcbiAgICAgICAgICAgIHZhbHVlczogJzE7MDsxOzE7MDsxOydcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTtcbiAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHtcbiAgICAgICAgICBvcGFjaXR5OiAnMScsXG4gICAgICAgICAgZDogJ00yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnonXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogcmVkdWNlTW90aW9uID8gW10gOiBbe1xuICAgICAgICAgIHRhZzogJ2FuaW1hdGUnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwge1xuICAgICAgICAgICAgdmFsdWVzOiAnMTswOzA7MDswOzE7J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHtcbiAgICAgICAgLy8gRXhjbGFtYXRpb25cbiAgICAgICAgZ0NoaWxkcmVuLnB1c2goe1xuICAgICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHtcbiAgICAgICAgICAgIG9wYWNpdHk6ICcwJyxcbiAgICAgICAgICAgIGQ6ICdNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6J1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHtcbiAgICAgICAgICAgICAgdmFsdWVzOiAnMDswOzE7MTswOzA7J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnZycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnY2xhc3MnOiAnbWlzc2luZydcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IGdDaGlsZHJlblxuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgU3ZnU3ltYm9scyA9IHtcbiAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlKSB7XG4gICAgICAgIHZhciBzeW1ib2xEYXRhID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtc3ltYm9sJyk7XG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xEYXRhID09PSBudWxsID8gZmFsc2UgOiBzeW1ib2xEYXRhID09PSAnJyA/IHRydWUgOiBzeW1ib2xEYXRhO1xuICAgICAgICBhY2N1bXVsYXRvclsnc3ltYm9sJ10gPSBzeW1ib2w7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG52YXIgcGx1Z2lucyA9IFtJbmplY3RDU1MsIFJlcGxhY2VFbGVtZW50cywgTGF5ZXJzLCBMYXllcnNDb3VudGVyLCBMYXllcnNUZXh0LCBQc2V1ZG9FbGVtZW50cywgTXV0YXRpb25PYnNlcnZlciQxLCBQb3dlclRyYW5zZm9ybXMsIE1hc2tzLCBNaXNzaW5nSWNvbkluZGljYXRvciwgU3ZnU3ltYm9sc107XG5cbnJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5zLCB7XG4gIG1peG91dHNUbzogYXBpXG59KTtcbnZhciBub0F1dG8kMSA9IGFwaS5ub0F1dG87XG52YXIgY29uZmlnJDEgPSBhcGkuY29uZmlnO1xudmFyIGxpYnJhcnkkMSA9IGFwaS5saWJyYXJ5O1xudmFyIGRvbSQxID0gYXBpLmRvbTtcbnZhciBwYXJzZSQxID0gYXBpLnBhcnNlO1xudmFyIGZpbmRJY29uRGVmaW5pdGlvbiQxID0gYXBpLmZpbmRJY29uRGVmaW5pdGlvbjtcbnZhciB0b0h0bWwkMSA9IGFwaS50b0h0bWw7XG52YXIgaWNvbiA9IGFwaS5pY29uO1xudmFyIGxheWVyID0gYXBpLmxheWVyO1xudmFyIHRleHQgPSBhcGkudGV4dDtcbnZhciBjb3VudGVyID0gYXBpLmNvdW50ZXI7XG5cbmV4cG9ydCB7IG5vQXV0byQxIGFzIG5vQXV0bywgY29uZmlnJDEgYXMgY29uZmlnLCBsaWJyYXJ5JDEgYXMgbGlicmFyeSwgZG9tJDEgYXMgZG9tLCBwYXJzZSQxIGFzIHBhcnNlLCBmaW5kSWNvbkRlZmluaXRpb24kMSBhcyBmaW5kSWNvbkRlZmluaXRpb24sIHRvSHRtbCQxIGFzIHRvSHRtbCwgaWNvbiwgbGF5ZXIsIHRleHQsIGNvdW50ZXIsIGFwaSB9O1xuIiwgImltcG9ydCB7IHBhcnNlLCBpY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuLy8gR2V0IENTUyBjbGFzcyBsaXN0IGZyb20gYSBwcm9wcyBvYmplY3RcbmZ1bmN0aW9uIGNsYXNzTGlzdChwcm9wcykge1xuICB2YXIgX2NsYXNzZXM7XG5cbiAgdmFyIGJlYXQgPSBwcm9wcy5iZWF0LFxuICAgICAgZmFkZSA9IHByb3BzLmZhZGUsXG4gICAgICBiZWF0RmFkZSA9IHByb3BzLmJlYXRGYWRlLFxuICAgICAgYm91bmNlID0gcHJvcHMuYm91bmNlLFxuICAgICAgc2hha2UgPSBwcm9wcy5zaGFrZSxcbiAgICAgIGZsYXNoID0gcHJvcHMuZmxhc2gsXG4gICAgICBzcGluID0gcHJvcHMuc3BpbixcbiAgICAgIHNwaW5QdWxzZSA9IHByb3BzLnNwaW5QdWxzZSxcbiAgICAgIHNwaW5SZXZlcnNlID0gcHJvcHMuc3BpblJldmVyc2UsXG4gICAgICBwdWxzZSA9IHByb3BzLnB1bHNlLFxuICAgICAgZml4ZWRXaWR0aCA9IHByb3BzLmZpeGVkV2lkdGgsXG4gICAgICBpbnZlcnNlID0gcHJvcHMuaW52ZXJzZSxcbiAgICAgIGJvcmRlciA9IHByb3BzLmJvcmRlcixcbiAgICAgIGxpc3RJdGVtID0gcHJvcHMubGlzdEl0ZW0sXG4gICAgICBmbGlwID0gcHJvcHMuZmxpcCxcbiAgICAgIHNpemUgPSBwcm9wcy5zaXplLFxuICAgICAgcm90YXRpb24gPSBwcm9wcy5yb3RhdGlvbixcbiAgICAgIHB1bGwgPSBwcm9wcy5wdWxsOyAvLyBtYXAgb2YgQ1NTIGNsYXNzIG5hbWVzIHRvIHByb3BlcnRpZXNcblxuICB2YXIgY2xhc3NlcyA9IChfY2xhc3NlcyA9IHtcbiAgICAnZmEtYmVhdCc6IGJlYXQsXG4gICAgJ2ZhLWZhZGUnOiBmYWRlLFxuICAgICdmYS1iZWF0LWZhZGUnOiBiZWF0RmFkZSxcbiAgICAnZmEtYm91bmNlJzogYm91bmNlLFxuICAgICdmYS1zaGFrZSc6IHNoYWtlLFxuICAgICdmYS1mbGFzaCc6IGZsYXNoLFxuICAgICdmYS1zcGluJzogc3BpbixcbiAgICAnZmEtc3Bpbi1yZXZlcnNlJzogc3BpblJldmVyc2UsXG4gICAgJ2ZhLXNwaW4tcHVsc2UnOiBzcGluUHVsc2UsXG4gICAgJ2ZhLXB1bHNlJzogcHVsc2UsXG4gICAgJ2ZhLWZ3JzogZml4ZWRXaWR0aCxcbiAgICAnZmEtaW52ZXJzZSc6IGludmVyc2UsXG4gICAgJ2ZhLWJvcmRlcic6IGJvcmRlcixcbiAgICAnZmEtbGknOiBsaXN0SXRlbSxcbiAgICAnZmEtZmxpcCc6IGZsaXAgPT09IHRydWUsXG4gICAgJ2ZhLWZsaXAtaG9yaXpvbnRhbCc6IGZsaXAgPT09ICdob3Jpem9udGFsJyB8fCBmbGlwID09PSAnYm90aCcsXG4gICAgJ2ZhLWZsaXAtdmVydGljYWwnOiBmbGlwID09PSAndmVydGljYWwnIHx8IGZsaXAgPT09ICdib3RoJ1xuICB9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsIFwiZmEtXCIuY29uY2F0KHNpemUpLCB0eXBlb2Ygc2l6ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2l6ZSAhPT0gbnVsbCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1yb3RhdGUtXCIuY29uY2F0KHJvdGF0aW9uKSwgdHlwZW9mIHJvdGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiByb3RhdGlvbiAhPT0gbnVsbCAmJiByb3RhdGlvbiAhPT0gMCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1wdWxsLVwiLmNvbmNhdChwdWxsKSwgdHlwZW9mIHB1bGwgIT09ICd1bmRlZmluZWQnICYmIHB1bGwgIT09IG51bGwpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsICdmYS1zd2FwLW9wYWNpdHknLCBwcm9wcy5zd2FwT3BhY2l0eSksIF9jbGFzc2VzKTsgLy8gbWFwIG92ZXIgYWxsIHRoZSBrZXlzIGluIHRoZSBjbGFzc2VzIG9iamVjdFxuICAvLyByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGtleXMgd2hlcmUgdGhlIHZhbHVlIGZvciB0aGUga2V5IGlzIG5vdCBudWxsXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGNsYXNzZXNba2V5XSA/IGtleSA6IG51bGw7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG59XG5cbi8vIENhbWVsaXplIHRha2VuIGZyb20gaHVtcHNcbi8vIGh1bXBzIGlzIGNvcHlyaWdodCBcdTAwQTkgMjAxMisgRG9tIENocmlzdGllXG4vLyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBQZXJmb3JtYW50IHdheSB0byBkZXRlcm1pbmUgaWYgb2JqZWN0IGNvZXJjZXMgdG8gYSBudW1iZXJcbmZ1bmN0aW9uIF9pc051bWVyaWNhbChvYmopIHtcbiAgb2JqID0gb2JqIC0gMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXG4gIHJldHVybiBvYmogPT09IG9iajtcbn1cblxuZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gIGlmIChfaXNOdW1lcmljYWwoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5cblxuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvW1xcLV9cXHNdKyguKT8vZywgZnVuY3Rpb24gKG1hdGNoLCBjaHIpIHtcbiAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgfSk7IC8vIEVuc3VyZSAxc3QgY2hhciBpcyBhbHdheXMgbG93ZXJjYXNlXG5cbiAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zdWJzdHIoMSk7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWwpIHtcbiAgcmV0dXJuIHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbC5zbGljZSgxKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUb09iamVjdChzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc3BsaXQoJzsnKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy50cmltKCk7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzO1xuICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFpcikge1xuICAgIHZhciBpID0gcGFpci5pbmRleE9mKCc6Jyk7XG4gICAgdmFyIHByb3AgPSBjYW1lbGl6ZShwYWlyLnNsaWNlKDAsIGkpKTtcbiAgICB2YXIgdmFsdWUgPSBwYWlyLnNsaWNlKGkgKyAxKS50cmltKCk7XG4gICAgcHJvcC5zdGFydHNXaXRoKCd3ZWJraXQnKSA/IGFjY1tjYXBpdGFsaXplKHByb3ApXSA9IHZhbHVlIDogYWNjW3Byb3BdID0gdmFsdWU7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0KGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGV4dHJhUHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IChlbGVtZW50LmNoaWxkcmVuIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNvbnZlcnQoY3JlYXRlRWxlbWVudCwgY2hpbGQpO1xuICB9KTtcbiAgLyogZXNsaW50LWRpc2FibGUgZG90LW5vdGF0aW9uICovXG5cbiAgdmFyIG1peGlucyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgIHZhciB2YWwgPSBlbGVtZW50LmF0dHJpYnV0ZXNba2V5XTtcblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgIGFjYy5hdHRyc1snY2xhc3NOYW1lJ10gPSB2YWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmF0dHJpYnV0ZXNbJ2NsYXNzJ107XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdHlsZSc6XG4gICAgICAgIGFjYy5hdHRyc1snc3R5bGUnXSA9IHN0eWxlVG9PYmplY3QodmFsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZignYXJpYS0nKSA9PT0gMCB8fCBrZXkuaW5kZXhPZignZGF0YS0nKSA9PT0gMCkge1xuICAgICAgICAgIGFjYy5hdHRyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjLmF0dHJzW2NhbWVsaXplKGtleSldID0gdmFsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7XG4gICAgYXR0cnM6IHt9XG4gIH0pO1xuXG4gIHZhciBfZXh0cmFQcm9wcyRzdHlsZSA9IGV4dHJhUHJvcHMuc3R5bGUsXG4gICAgICBleGlzdGluZ1N0eWxlID0gX2V4dHJhUHJvcHMkc3R5bGUgPT09IHZvaWQgMCA/IHt9IDogX2V4dHJhUHJvcHMkc3R5bGUsXG4gICAgICByZW1haW5pbmcgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZXh0cmFQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBtaXhpbnMuYXR0cnNbJ3N0eWxlJ10gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWl4aW5zLmF0dHJzWydzdHlsZSddKSwgZXhpc3RpbmdTdHlsZSk7XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudC5hcHBseSh2b2lkIDAsIFtlbGVtZW50LnRhZywgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1peGlucy5hdHRycyksIHJlbWFpbmluZyldLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2hpbGRyZW4pKSk7XG59XG5cbnZhciBQUk9EVUNUSU9OID0gZmFsc2U7XG5cbnRyeSB7XG4gIFBST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xufSBjYXRjaCAoZSkge31cblxuZnVuY3Rpb24gbG9nICgpIHtcbiAgaWYgKCFQUk9EVUNUSU9OICYmIGNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgX2NvbnNvbGU7XG5cbiAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS5lcnJvci5hcHBseShfY29uc29sZSwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJY29uQXJncyhpY29uKSB7XG4gIC8vIHRoaXMgaGFzIGV2ZXJ5dGhpbmcgdGhhdCBpdCBuZWVkcyB0byBiZSByZW5kZXJlZCB3aGljaCBtZWFucyBpdCB3YXMgcHJvYmFibHkgaW1wb3J0ZWRcbiAgLy8gZGlyZWN0bHkgZnJvbSBhbiBpY29uIHN2ZyBwYWNrYWdlXG4gIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUgJiYgaWNvbi5pY29uKSB7XG4gICAgcmV0dXJuIGljb247XG4gIH1cblxuICBpZiAocGFyc2UuaWNvbikge1xuICAgIHJldHVybiBwYXJzZS5pY29uKGljb24pO1xuICB9IC8vIGlmIHRoZSBpY29uIGlzIG51bGwsIHRoZXJlJ3Mgbm90aGluZyB0byBkb1xuXG5cbiAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBpZiB0aGUgaWNvbiBpcyBhbiBvYmplY3QgYW5kIGhhcyBhIHByZWZpeCBhbmQgYW4gaWNvbiBuYW1lLCByZXR1cm4gaXRcblxuXG4gIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUpIHtcbiAgICByZXR1cm4gaWNvbjtcbiAgfSAvLyBpZiBpdCdzIGFuIGFycmF5IHdpdGggbGVuZ3RoIG9mIHR3b1xuXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAvLyB1c2UgdGhlIGZpcnN0IGl0ZW0gYXMgcHJlZml4LCBzZWNvbmQgYXMgaWNvbiBuYW1lXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZWZpeDogaWNvblswXSxcbiAgICAgIGljb25OYW1lOiBpY29uWzFdXG4gICAgfTtcbiAgfSAvLyBpZiBpdCdzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIGljb24gbmFtZVxuXG5cbiAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXg6ICdmYXMnLFxuICAgICAgaWNvbk5hbWU6IGljb25cbiAgICB9O1xuICB9XG59XG5cbi8vIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggYSBrZXkgb2Yga2V5XG4vLyBhbmQgYSB2YWx1ZSBvZiB2YWx1ZVxuLy8gaWYgY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXRcbmZ1bmN0aW9uIG9iamVjdFdpdGhLZXkoa2V5LCB2YWx1ZSkge1xuICAvLyBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXlcbiAgLy8gb3IgaXQncyBub3QgYW4gYXJyYXkgYnV0IGl0IGlzIHRydXRoeVxuICAvLyB0aGVuIGNyZWF0ZSB0aGUgb2JqZWN0IHdpdGggdGhlIGtleSBhbmQgdGhlIHZhbHVlXG4gIC8vIGlmIG5vdCwgcmV0dXJuIGFuIGVtcHR5IGFycmF5XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCB2YWx1ZSkgOiB7fTtcbn1cblxudmFyIEZvbnRBd2Vzb21lSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBpY29uQXJncyA9IHByb3BzLmljb24sXG4gICAgICBtYXNrQXJncyA9IHByb3BzLm1hc2ssXG4gICAgICBzeW1ib2wgPSBwcm9wcy5zeW1ib2wsXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IHByb3BzLnRpdGxlSWQsXG4gICAgICBtYXNrSWQgPSBwcm9wcy5tYXNrSWQ7XG4gIHZhciBpY29uTG9va3VwID0gbm9ybWFsaXplSWNvbkFyZ3MoaWNvbkFyZ3MpO1xuICB2YXIgY2xhc3NlcyA9IG9iamVjdFdpdGhLZXkoJ2NsYXNzZXMnLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTGlzdChwcm9wcykpLCBfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NOYW1lLnNwbGl0KCcgJykpKSk7XG4gIHZhciB0cmFuc2Zvcm0gPSBvYmplY3RXaXRoS2V5KCd0cmFuc2Zvcm0nLCB0eXBlb2YgcHJvcHMudHJhbnNmb3JtID09PSAnc3RyaW5nJyA/IHBhcnNlLnRyYW5zZm9ybShwcm9wcy50cmFuc2Zvcm0pIDogcHJvcHMudHJhbnNmb3JtKTtcbiAgdmFyIG1hc2sgPSBvYmplY3RXaXRoS2V5KCdtYXNrJywgbm9ybWFsaXplSWNvbkFyZ3MobWFza0FyZ3MpKTtcbiAgdmFyIHJlbmRlcmVkSWNvbiA9IGljb24oaWNvbkxvb2t1cCwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGNsYXNzZXMpLCB0cmFuc2Zvcm0pLCBtYXNrKSwge30sIHtcbiAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICB0aXRsZTogdGl0bGUsXG4gICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICBtYXNrSWQ6IG1hc2tJZFxuICB9KSk7XG5cbiAgaWYgKCFyZW5kZXJlZEljb24pIHtcbiAgICBsb2coJ0NvdWxkIG5vdCBmaW5kIGljb24nLCBpY29uTG9va3VwKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhYnN0cmFjdCA9IHJlbmRlcmVkSWNvbi5hYnN0cmFjdDtcbiAgdmFyIGV4dHJhUHJvcHMgPSB7XG4gICAgcmVmOiByZWZcbiAgfTtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoIUZvbnRBd2Vzb21lSWNvbi5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZXh0cmFQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udmVydEN1cnJ5KGFic3RyYWN0WzBdLCBleHRyYVByb3BzKTtcbn0pO1xuRm9udEF3ZXNvbWVJY29uLmRpc3BsYXlOYW1lID0gJ0ZvbnRBd2Vzb21lSWNvbic7XG5Gb250QXdlc29tZUljb24ucHJvcFR5cGVzID0ge1xuICBiZWF0OiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgYmVhdEZhZGU6IFByb3BUeXBlcy5ib29sLFxuICBib3VuY2U6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZhZGU6IFByb3BUeXBlcy5ib29sLFxuICBmbGFzaDogUHJvcFR5cGVzLmJvb2wsXG4gIG1hc2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICBtYXNrSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZpeGVkV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpbnZlcnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZmxpcDogUHJvcFR5cGVzLm9uZU9mKFt0cnVlLCBmYWxzZSwgJ2hvcml6b250YWwnLCAndmVydGljYWwnLCAnYm90aCddKSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIGxpc3RJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHVsbDogUHJvcFR5cGVzLm9uZU9mKFsncmlnaHQnLCAnbGVmdCddKSxcbiAgcHVsc2U6IFByb3BUeXBlcy5ib29sLFxuICByb3RhdGlvbjogUHJvcFR5cGVzLm9uZU9mKFswLCA5MCwgMTgwLCAyNzBdKSxcbiAgc2hha2U6IFByb3BUeXBlcy5ib29sLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWycyeHMnLCAneHMnLCAnc20nLCAnbGcnLCAneGwnLCAnMnhsJywgJzF4JywgJzJ4JywgJzN4JywgJzR4JywgJzV4JywgJzZ4JywgJzd4JywgJzh4JywgJzl4JywgJzEweCddKSxcbiAgc3BpbjogUHJvcFR5cGVzLmJvb2wsXG4gIHNwaW5QdWxzZTogUHJvcFR5cGVzLmJvb2wsXG4gIHNwaW5SZXZlcnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgc3ltYm9sOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGl0bGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNmb3JtOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIHN3YXBPcGFjaXR5OiBQcm9wVHlwZXMuYm9vbFxufTtcbkZvbnRBd2Vzb21lSWNvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGJvcmRlcjogZmFsc2UsXG4gIGNsYXNzTmFtZTogJycsXG4gIG1hc2s6IG51bGwsXG4gIG1hc2tJZDogbnVsbCxcbiAgZml4ZWRXaWR0aDogZmFsc2UsXG4gIGludmVyc2U6IGZhbHNlLFxuICBmbGlwOiBmYWxzZSxcbiAgaWNvbjogbnVsbCxcbiAgbGlzdEl0ZW06IGZhbHNlLFxuICBwdWxsOiBudWxsLFxuICBwdWxzZTogZmFsc2UsXG4gIHJvdGF0aW9uOiBudWxsLFxuICBzaXplOiBudWxsLFxuICBzcGluOiBmYWxzZSxcbiAgc3BpblB1bHNlOiBmYWxzZSxcbiAgc3BpblJldmVyc2U6IGZhbHNlLFxuICBiZWF0OiBmYWxzZSxcbiAgZmFkZTogZmFsc2UsXG4gIGJlYXRGYWRlOiBmYWxzZSxcbiAgYm91bmNlOiBmYWxzZSxcbiAgc2hha2U6IGZhbHNlLFxuICBzeW1ib2w6IGZhbHNlLFxuICB0aXRsZTogJycsXG4gIHRpdGxlSWQ6IG51bGwsXG4gIHRyYW5zZm9ybTogbnVsbCxcbiAgc3dhcE9wYWNpdHk6IGZhbHNlXG59O1xudmFyIGNvbnZlcnRDdXJyeSA9IGNvbnZlcnQuYmluZChudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KTtcblxuZXhwb3J0IHsgRm9udEF3ZXNvbWVJY29uIH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IEdyb3VwRWxlbWVudCwgR3JvdXBpbmcsIEdyb3VwaW5ncywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBEaXNwYXRjaCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENVUlJFTlRfRklMRV9DT05URVhULCBMaXQgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IHVzZUludGVybmluZyB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tIFwicHJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBWTm9kZSwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBDb250cm9sbGVkUGFnZXIsIHVzZURhdGFjb3JlUGFnaW5nIH0gZnJvbSBcIi4vcGFnaW5nXCI7XG5cbmltcG9ydCBcIi4vdGFibGUuY3NzXCI7XG5pbXBvcnQgeyBFZGl0YWJsZSwgRWRpdGFibGVBY3Rpb24sIHVzZUVkaXRhYmxlRGlzcGF0Y2ggfSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBmYVNvcnREb3duLCBmYVNvcnRVcCwgZmFTb3J0IH0gZnJvbSBcIkBmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29uc1wiO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSBcIkBmb3J0YXdlc29tZS9yZWFjdC1mb250YXdlc29tZVwiO1xuXG4vKiogQSBzaW1wbGUgY29sdW1uIGRlZmluaXRpb24gd2hpY2ggYWxsb3dzIGZvciBjdXN0b20gcmVuZGVyZXJzIGFuZCB0aXRsZXMuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqIEB0eXBlUGFyYW0gVCAtIHRoZSB0eXBlIG9mIGVhY2ggcm93XG4gKiBAdHlwZVBhcmFtIFYgLSB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgaW4gdGhpcyBjb2x1bW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYW5pbGxhQ29sdW1uPFQsIFYgPSBMaXRlcmFsPiB7XG4gICAgLyoqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB0YWJsZSBjb2x1bW47IHlvdSBjYW5ub3QgaGF2ZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgSUQgaW4gYSBnaXZlbiB0YWJsZS4gKi9cbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSB0aXRsZSB3aGljaCB3aWxsIGRpc3BsYXkgYXQgdGhlIHRvcCBvZiB0aGUgY29sdW1uIGlmIHByZXNlbnQuICovXG4gICAgdGl0bGU/OiBzdHJpbmcgfCBWTm9kZSB8ICgoKSA9PiBzdHJpbmcgfCBWTm9kZSk7XG5cbiAgICAvKiogSWYgcHJlc2VudCwgdGhlIENTUyB3aWR0aCB0byBhcHBseSB0byB0aGUgY29sdW1uLiAnbWluaW11bScgd2lsbCBzZXQgdGhlIGNvbHVtbiBzaXplIHRvIGl0J3Mgc21hbGxlc3QgcG9zc2libGUgdmFsdWUsIHdoaWxlICdtYXhpbXVtJyB3aWxsIGRvIHRoZSBvcHBvc2l0ZS4gKi9cbiAgICB3aWR0aD86IFwibWluaW11bVwiIHwgXCJtYXhpbXVtXCIgfCBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgcm93IHRvIHRoZSB2YWx1ZSBiZWluZyByZW5kZXJlZC4gKi9cbiAgICB2YWx1ZTogKG9iamVjdDogVCkgPT4gVjtcblxuICAgIC8qKiBDYWxsZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiBjb2x1bW4gdmFsdWUuIENhbiBkZXBlbmQgb24gYm90aCB0aGUgc3BlY2lmaWMgdmFsdWUgYW5kIHRoZSByb3cgb2JqZWN0LiAqL1xuICAgIHJlbmRlcj86ICh2YWx1ZTogViwgb2JqZWN0OiBUKSA9PiBMaXRlcmFsIHwgVk5vZGU7XG5cbiAgICAvKiogd2hldGhlciB0aGlzIGNvbHVtbiBpcyBlZGl0YWJsZSBvciBub3QgKi9cbiAgICBlZGl0YWJsZT86IGJvb2xlYW47XG5cbiAgICAvKiogUmVuZGVyZWQgd2hlbiBlZGl0aW5nIHRoZSBjb2x1bW4gKi9cbiAgICBlZGl0b3I/OiAodmFsdWU6IFYsIG9iamVjdDogVCkgPT4gSlNYLkVsZW1lbnQ7XG5cbiAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIGNvbHVtbiB2YWx1ZSB1cGRhdGVzLiAqL1xuICAgIG9uVXBkYXRlPzogKHZhbHVlOiBWLCBvYmplY3Q6IFQpID0+IHVua25vd247XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgY29uZmlndXJpbmcgaG93IGdyb3VwaW5ncyBpbiB0aGUgZGF0YSBzaG91bGQgYmUgaGFuZGxlZC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwaW5nQ29uZmlnPFQ+IHtcbiAgICAvKiogSG93IGEgZ3JvdXBpbmcgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBzZXQgb2Ygcm93cyBzaG91bGQgYmUgaGFuZGxlZC4gKi9cbiAgICByZW5kZXI/OiAoa2V5OiBMaXRlcmFsLCByb3dzOiBHcm91cGluZzxUPikgPT4gTGl0ZXJhbCB8IFZOb2RlO1xufVxuXG4vKiogQWxsIGF2YWlsYWJsZSBwcm9wcyBmb3IgYSB2YW5pbGxhIHRhYmxlLlxuICogQGdyb3VwIFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFuaWxsYVRhYmxlUHJvcHM8VD4ge1xuICAgIC8qKiBUaGUgY29sdW1ucyB0byByZW5kZXIgaW4gdGhlIHRhYmxlLiAqL1xuICAgIGNvbHVtbnM6IFZhbmlsbGFDb2x1bW48VD5bXTtcblxuICAgIC8qKiBUaGUgcm93cyB0byByZW5kZXI7IG1heSBwb3RlbnRpYWxseSBiZSBncm91cGVkIG9yIGp1c3QgYSBwbGFpbiBhcnJheS4gKi9cbiAgICByb3dzOiBHcm91cGluZzxUPjtcblxuICAgIC8qKiBBbGxvd3MgZm9yIGdyb3VwaW5nIGhlYWRlciBjb2x1bW5zIHRvIGJlIG92ZXJyaWRkZW4gd2l0aCBjdXN0b20gcmVuZGVyaW5nL2xvZ2ljLiAqL1xuICAgIGdyb3VwaW5ncz86IEdyb3VwaW5nQ29uZmlnPFQ+IHwgR3JvdXBpbmdDb25maWc8VD5bXSB8ICgoa2V5OiBMaXRlcmFsLCByb3dzOiBHcm91cGluZzxUPikgPT4gTGl0ZXJhbCB8IFZOb2RlKTtcblxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBhIGJvb2xlYW4gLSBlbmFibGVzIG9yIGRpc2FibGVzIHBhZ2luZy5cbiAgICAgKiBJZiBzZXQgdG8gYSBudW1iZXIsIHBhZ2luZyB3aWxsIGJlIGVuYWJsZWQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuXG4gICAgICovXG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHZpZXcgd2lsbCBzY3JvbGwgdG8gdGhlIHRvcCBhdXRvbWF0aWNhbGx5IG9uIHBhZ2UgY2hhbmdlcy4gSWYgdHJ1ZSwgd2lsbCBhbHdheXMgc2Nyb2xsIG9uIHBhZ2UgY2hhbmdlcy5cbiAgICAgKiBJZiBhIG51bWJlciwgd2lsbCBzY3JvbGwgb25seSBpZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBwYWdlIHNpemUuXG4gICAgICoqL1xuICAgIHNjcm9sbE9uUGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcbn1cblxuLyoqIEEgc2ltcGxlIHRhYmxlIHdoaWNoIHN1cHBvcnRzIGdyb3VwaW5nLCBzb3J0aW5nLCBwYWdpbmcsIGFuZCBjdXN0b20gY29sdW1ucy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZhbmlsbGFUYWJsZTxUPihwcm9wczogVmFuaWxsYVRhYmxlUHJvcHM8VD4pIHtcbiAgICAvLyBDYWNoZSBjb2x1bW5zIGJ5IHJlZmVyZW5jZSBlcXVhbGl0eSBvZiB0aGUgc3BlY2lmaWMgY29sdW1ucy4gQ29sdW1ucyBoYXZlIHZhcmlvdXMgZnVuY3Rpb24gcmVmZXJlbmNlc1xuICAgIC8vIGluc2lkZSB0aGVtIGFuZCBzbyBjYW5ub3QgYmUgY29tcGFyZWQgYnkgdmFsdWUgZXF1YWxpdHkuXG4gICAgY29uc3QgY29sdW1ucyA9IHVzZUludGVybmluZyhwcm9wcy5jb2x1bW5zLCAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT0gYltpbmRleF0pO1xuICAgIH0pO1xuXG4gICAgLy8gQ291bnQgdG90YWwgZWxlbWVudHMgYW5kIHRoZW4gcGFnZSBhcHByb3ByaWF0ZWx5LlxuICAgIGNvbnN0IHRhYmxlUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gdXNlTWVtbygoKSA9PiBHcm91cGluZ3MuY291bnQocHJvcHMucm93cyksIFtwcm9wcy5yb3dzXSk7XG4gICAgY29uc3QgcGFnaW5nID0gdXNlRGF0YWNvcmVQYWdpbmcoe1xuICAgICAgICBpbml0aWFsUGFnZTogMCxcbiAgICAgICAgcGFnaW5nOiBwcm9wcy5wYWdpbmcsXG4gICAgICAgIHNjcm9sbE9uUGFnZUNoYW5nZTogcHJvcHMuc2Nyb2xsT25QYWdpbmcsXG4gICAgICAgIGVsZW1lbnRzOiB0b3RhbEVsZW1lbnRzLFxuICAgICAgICBjb250YWluZXI6IHRhYmxlUmVmLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFnZWRSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmcuZW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybiBHcm91cGluZ3Muc2xpY2UocHJvcHMucm93cywgcGFnaW5nLnBhZ2UgKiBwYWdpbmcucGFnZVNpemUsIChwYWdpbmcucGFnZSArIDEpICogcGFnaW5nLnBhZ2VTaXplKTtcbiAgICAgICAgZWxzZSByZXR1cm4gcHJvcHMucm93cztcbiAgICB9LCBbcGFnaW5nLnBhZ2UsIHBhZ2luZy5wYWdlU2l6ZSwgcGFnaW5nLmVuYWJsZWQsIHByb3BzLnJvd3NdKTtcblxuICAgIGNvbnN0IGdyb3VwaW5ncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzLmdyb3VwaW5ncykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIHByb3BzLmdyb3VwaW5ncztcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbihwcm9wcy5ncm91cGluZ3MpKSByZXR1cm4gW3sgcmVuZGVyOiBwcm9wcy5ncm91cGluZ3MgfV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtwcm9wcy5ncm91cGluZ3NdO1xuICAgIH0sIFtwcm9wcy5ncm91cGluZ3NdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgcmVmPXt0YWJsZVJlZn0+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWYW5pbGxhVGFibGVIZWFkZXJDZWxsIGNvbHVtbj17Y29sfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtwYWdlZFJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxWYW5pbGxhUm93R3JvdXAgbGV2ZWw9ezB9IGdyb3VwaW5ncz17Z3JvdXBpbmdzfSBjb2x1bW5zPXtjb2x1bW5zfSBlbGVtZW50PXtyb3d9IC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAge3BhZ2luZy5lbmFibGVkICYmIChcbiAgICAgICAgICAgICAgICA8Q29udHJvbGxlZFBhZ2VyIHBhZ2U9e3BhZ2luZy5wYWdlfSB0b3RhbFBhZ2VzPXtwYWdpbmcudG90YWxQYWdlc30gc2V0UGFnZT17cGFnaW5nLnNldFBhZ2V9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKiogQW4gaW5kaXZpZHVhbCBjb2x1bW4gY2VsbCBpbiB0aGUgdGFibGUuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhVGFibGVIZWFkZXJDZWxsPFQ+KHsgY29sdW1uIH06IHsgY29sdW1uOiBWYW5pbGxhQ29sdW1uPFQ+IH0pIHtcbiAgICBjb25zdCBoZWFkZXI6IHN0cmluZyB8IFZOb2RlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uLmlkO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2x1bW4udGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi50aXRsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi50aXRsZTtcbiAgICAgICAgfVxuICAgIH0sIFtjb2x1bW4uaWQsIGNvbHVtbi50aXRsZV0pO1xuXG4gICAgY29uc3QgcmVhbFdpZHRoID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gKGNvbHVtbi53aWR0aCA9PT0gXCJtaW5pbXVtXCIgPyBcIjFweFwiIDogY29sdW1uLndpZHRoID09PSBcIm1heGltdW1cIiA/IFwiYXV0b1wiIDogY29sdW1uLndpZHRoKSxcbiAgICAgICAgW2NvbHVtbi53aWR0aF1cbiAgICApO1xuXG4gICAgLy8gV2UgdXNlIGFuIGludGVybmFsIGRpdiB0byBhdm9pZCBmbGV4IG1lc3Npbmcgd2l0aCB0aGUgdGFibGUgbGF5b3V0LlxuICAgIHJldHVybiAoXG4gICAgICAgIDx0aCB3aWR0aD17cmVhbFdpZHRofSBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItdGl0bGVcIj57aGVhZGVyfTwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICk7XG59XG5cbi8qKiBBIGdyb3VwaW5nIGluIHRoZSB0YWJsZSwgb3IgYW4gaW5kaXZpZHVhbCByb3cuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhUm93R3JvdXA8VD4oe1xuICAgIGxldmVsLFxuICAgIGNvbHVtbnMsXG4gICAgZWxlbWVudCxcbiAgICBncm91cGluZ3MsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICBjb2x1bW5zOiBWYW5pbGxhQ29sdW1uPFQ+W107XG4gICAgZWxlbWVudDogVCB8IEdyb3VwRWxlbWVudDxUPjtcbiAgICBncm91cGluZ3M/OiBHcm91cGluZ0NvbmZpZzxUPltdO1xufSkge1xuICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdDb25maWcgPSBncm91cGluZ3MgPyBncm91cGluZ3NbTWF0aC5taW4oZ3JvdXBpbmdzLmxlbmd0aCAtIDEsIGxldmVsKV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8VGFibGVHcm91cEhlYWRlciBsZXZlbD17bGV2ZWx9IHZhbHVlPXtlbGVtZW50fSB3aWR0aD17Y29sdW1ucy5sZW5ndGh9IGNvbmZpZz17Z3JvdXBpbmdDb25maWd9IC8+XG4gICAgICAgICAgICAgICAge2VsZW1lbnQucm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VmFuaWxsYVJvd0dyb3VwIGxldmVsPXtsZXZlbCArIDF9IGNvbHVtbnM9e2NvbHVtbnN9IGVsZW1lbnQ9e3Jvd30gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxUYWJsZVJvdyBsZXZlbD17bGV2ZWx9IHJvdz17ZWxlbWVudH0gY29sdW1ucz17Y29sdW1uc30gLz47XG4gICAgfVxufVxuXG4vKiogQSBoZWFkZXIgb2YgYSBncm91cGVkIHNldCBvZiBjb2x1bW5zLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVHcm91cEhlYWRlcjxUPih7XG4gICAgbGV2ZWwsXG4gICAgdmFsdWUsXG4gICAgd2lkdGgsXG4gICAgY29uZmlnLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgdmFsdWU6IEdyb3VwRWxlbWVudDxUPjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGNvbmZpZz86IEdyb3VwaW5nQ29uZmlnPFQ+O1xufSkge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCByYXdSZW5kZXJhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LnJlbmRlcikgcmV0dXJuIGNvbmZpZy5yZW5kZXIodmFsdWUua2V5LCB2YWx1ZS5yb3dzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIDxMaXQgc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXt0cnVlfSB2YWx1ZT17dmFsdWUua2V5fSAvPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICApO1xuICAgIH0sIFtjb25maWc/LnJlbmRlciwgdmFsdWUua2V5LCB2YWx1ZS5yb3dzXSk7XG4gICAgY29uc3QgcmVuZGVyYWJsZSA9IHVzZUFzRWxlbWVudChyYXdSZW5kZXJhYmxlKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDx0ZCBjb2xTcGFuPXt3aWR0aH0+e3JlbmRlcmFibGV9PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICApO1xufVxuXG4vKiogQSBzaW5nbGUgcm93IGluc2lkZSB0aGUgdGFibGUuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUYWJsZVJvdzxUPih7IGxldmVsLCByb3csIGNvbHVtbnMgfTogeyBsZXZlbDogbnVtYmVyOyByb3c6IFQ7IGNvbHVtbnM6IFZhbmlsbGFDb2x1bW48VD5bXSB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLXJvd1wiIHN0eWxlPXtsZXZlbCA/IGBwYWRkaW5nLWxlZnQ6ICR7bGV2ZWwgKiA1fXB4YCA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCkgPT4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZVJvd0NlbGwgcm93PXtyb3d9IGNvbHVtbj17Y29sfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvdHI+XG4gICAgKTtcbn1cblxuLyoqIEEgc2luZ2xlIGNlbGwgaW5zaWRlIG9mIGEgcm93IG9mIHRoZSB0YWJsZS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhYmxlUm93Q2VsbDxUPih7IHJvdywgY29sdW1uIH06IHsgcm93OiBUOyBjb2x1bW46IFZhbmlsbGFDb2x1bW48VD4gfSkge1xuICAgIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiBjb2x1bW4udmFsdWUocm93KSwgW3JvdywgY29sdW1uLnZhbHVlXSk7XG4gICAgY29uc3QgW2VkaXRhYmxlU3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8dHlwZW9mIHZhbHVlPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB1cGRhdGVyOiAodikgPT4gY29sdW1uLm9uVXBkYXRlICYmIGNvbHVtbi5vblVwZGF0ZSh2LCByb3cpLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5yZW5kZXIpIHtcbiAgICAgICAgICAgIGxldCByID0gY29sdW1uLnJlbmRlcihlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJvdyk7XG4gICAgICAgICAgICBpZiAociAmJiB0eXBlb2YgciA9PSBcIm9iamVjdFwiICYmIFwicHJvcHNcIiBpbiByKSByZXR1cm4geyAuLi5yLCBwcm9wczogeyAuLi5yLnByb3BzLCBkaXNwYXRjaCB9IH07XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHJldHVybiB2YWx1ZTtcbiAgICB9LCBbcm93LCBjb2x1bW4ucmVuZGVyLCB2YWx1ZV0pO1xuXG4gICAgY29uc3QgcmVuZGVyZWQgPSB1c2VBc0VsZW1lbnQocmVuZGVyYWJsZSk7XG5cbiAgICBjb25zdCBFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGU7XG4gICAgICAgIGlmIChjb2x1bW4uZWRpdGFibGUgJiYgY29sdW1uLmVkaXRvcikgZSA9IGNvbHVtbi5lZGl0b3IoZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cpO1xuICAgICAgICBlbHNlIGUgPSBudWxsO1xuICAgICAgICBpZiAoZSkgcmV0dXJuIHsgLi4uZSwgcHJvcHM6IHsgLi4uZS5wcm9wcywgZGlzcGF0Y2ggfSB9O1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9LCBbcm93LCBjb2x1bW4uZWRpdG9yLCBjb2x1bW4uZWRpdGFibGUsIHZhbHVlXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgICBvbkRibENsaWNrPXsoKSA9PiBkaXNwYXRjaCh7IHR5cGU6IFwiZWRpdGluZy10b2dnbGVkXCIsIG5ld1ZhbHVlOiAhZWRpdGFibGVTdGF0ZS5pc0VkaXRpbmcgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1jZWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge2NvbHVtbi5lZGl0YWJsZSA/IChcbiAgICAgICAgICAgICAgICA8RWRpdGFibGU8dHlwZW9mIHZhbHVlPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVuZGVyPXtyZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yPXtFZGl0b3J9XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdGU9e2VkaXRhYmxlU3RhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvdGQ+XG4gICAgKTtcbn1cblxuLyoqIEVuc3VyZSB0aGF0IGEgZ2l2ZW4gbGl0ZXJhbCBvciBlbGVtZW50IGlucHV0IGlzIHJlbmRlcmVkIGFzIGEgSlNYLkVsZW1lbnQuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBc0VsZW1lbnQoZWxlbWVudDogVk5vZGUgfCBMaXRlcmFsKTogVk5vZGUge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcblxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCBhcyBWTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiA8TGl0IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17dHJ1ZX0gdmFsdWU9e2VsZW1lbnQgYXMgYW55fSAvPjtcbiAgICAgICAgfVxuICAgIH0sIFtlbGVtZW50XSk7XG59XG4vKiogUHJvdmlkZXMgYSBzb3J0IGJ1dHRvbiB0aGF0IGhhcyBhIGNsaWNrIGhhbmRsZXIuICovXG5leHBvcnQgZnVuY3Rpb24gU29ydEJ1dHRvbih7XG4gICAgZGlyZWN0aW9uLFxuICAgIG9uQ2xpY2ssXG4gICAgY2xhc3NOYW1lLFxufToge1xuICAgIGRpcmVjdGlvbj86IFNvcnREaXJlY3Rpb247XG4gICAgb25DbGljaz86IChldnQ6IE1vdXNlRXZlbnQpID0+IGFueTtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgaWNvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiYXNjZW5kaW5nXCIpIHJldHVybiBmYVNvcnREb3duO1xuICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gXCJkZXNjZW5kaW5nXCIpIHJldHVybiBmYVNvcnRVcDtcbiAgICAgICAgcmV0dXJuIGZhU29ydDtcbiAgICB9LCBbZGlyZWN0aW9uXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2xpY2t9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17aWNvbn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqIERlZmF1bHQgY29tcGFyYXRvciBmb3Igc29ydGluZyBvbiBhIHRhYmxlIGNvbHVtbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RBQkxFX0NPTVBBUkFUT1I6IDxUPihhOiBMaXRlcmFsLCBiOiBMaXRlcmFsLCBhbzogVCwgYm86IFQpID0+IG51bWJlciA9IChhLCBiLCBfYW8sIF9ibykgPT5cbiAgICBMaXRlcmFscy5jb21wYXJlKGEsIGIpO1xuXG4vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVGFibGUgSG9va3MgLy9cbi8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFRhYmxlQWN0aW9uID1cbiAgICB8IHsgdHlwZTogXCJyZXNldC1hbGxcIiB9XG4gICAgfCB7IHR5cGU6IFwic2V0LXBhZ2VcIjsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogXCJzb3J0LWNvbHVtblwiOyBjb2x1bW46IHN0cmluZzsgZGlyZWN0aW9uPzogXCJhc2NlbmRpbmdcIiB8IFwiZGVzY2VuZGluZ1wiIH07XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSBcImFzY2VuZGluZ1wiIHwgXCJkZXNjZW5kaW5nXCI7XG5cbi8qKiBUaGUgd2F5cyB0aGF0IHRoZSB0YWJsZSBjYW4gYmUgc29ydGVkLiAqL1xuZXhwb3J0IHR5cGUgU29ydE9uID0geyB0eXBlOiBcImNvbHVtblwiOyBpZDogc3RyaW5nOyBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gfTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdmlld3NcbiAqL1xuaW1wb3J0IHsgVk5vZGUgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wc1dpdGhDaGlsZHJlbiB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUgfSBmcm9tIFwidWkvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9jYWxsb3V0LmNzc1wiO1xuaW1wb3J0IHsgY29tYmluZUNsYXNzZXMgfSBmcm9tIFwiLi4vYmFzaWNzXCI7XG5cbi8qKiBHZW5lcmFsIHByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIGEgY2FsbG91dC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxvdXRQcm9wcyB7XG4gICAgLyoqIFRpdGxlIG9mIHRoZSBjYWxsb3V0LiAqL1xuICAgIHRpdGxlOiBzdHJpbmcgfCBWTm9kZTtcbiAgICAvKiogQXJiaXRyYXJ5IGljb24gdG8gc2hvdyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0aXRsZSBpbiB0aGUgY2FsbG91dC4gKi9cbiAgICBpY29uPzogVk5vZGU7XG4gICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBjYWxsb3V0LiAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGxvdXQgaXMgY29sbGFwc2libGUgKGRlZmF1bHRzIHRvIHRydWUpLiAqL1xuICAgIGNvbGxhcHNpYmxlPzogYm9vbGVhbjtcblxuICAgIC8qKiBDb250cm9sbGVkIHByb3AgZm9yIHNldHRpbmcgd2hldGhlciB0aGUgY2FsbG91dCBpcyBvcGVuLiAqL1xuICAgIG9wZW46IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGxvdXQgaXMgaW5pdGlhbGx5IG9wZW4gaWYgdW5jb250cm9sbGVkLiAqL1xuICAgIGluaXRpYWxPcGVuPzogYm9vbGVhbjtcbiAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZSBvcGVuIHN0YXRlIG9mIHRoZSBjYWxsb3V0IGNoYW5nZXMgZHVlIHRvIHVzZXIgYWN0aW9uLiAqL1xuICAgIG9uT3BlbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuLyoqIFNwbGl0cyBvbiBgfDxzdHVmZj5gLiAqL1xuY29uc3QgTUVUQURBVEFfU1BMSVRfUkVHRVggPSAvXFx8KC4qKS9zO1xuXG4vKipcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHMge0Bpbmhlcml0RG9jIENhbGxvdXRQcm9wc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhbGxvdXQoe1xuICAgIGNvbGxhcHNpYmxlID0gdHJ1ZSxcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICBpbml0aWFsT3BlbixcbiAgICBvbk9wZW5DaGFuZ2UsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBjaGlsZHJlbixcbiAgICB0eXBlLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48Q2FsbG91dFByb3BzPikge1xuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShpbml0aWFsT3BlbiA/PyB0cnVlLCBvcGVuUHJvcCwgb25PcGVuQ2hhbmdlKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBkYXRhLWNhbGxvdXQtbWV0YWRhdGE9e3R5cGU/LnNwbGl0KE1FVEFEQVRBX1NQTElUX1JFR0VYKT8uWzFdfVxuICAgICAgICAgICAgZGF0YS1jYWxsb3V0PXt0eXBlPy5zcGxpdChNRVRBREFUQV9TUExJVF9SRUdFWCk/LlswXX1cbiAgICAgICAgICAgIGRhdGEtY2FsbG91dC1mb2xkPXtvcGVuID8gXCIrXCIgOiBcIi1cIn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYXRhY29yZVwiLCBcImNhbGxvdXRcIiwgY29sbGFwc2libGUgPyBcImlzLWNvbGxhcHNpYmxlXCIgOiB1bmRlZmluZWQpfVxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhbGxvdXQtdGl0bGVcIiBvbkNsaWNrPXsoKSA9PiBjb2xsYXBzaWJsZSAmJiBzZXRPcGVuKCFvcGVuKX0+XG4gICAgICAgICAgICAgICAge2ljb24gJiYgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LWljb25cIj57aWNvbn08L2Rpdj59XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LXRpdGxlLWlubmVyXCI+e3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgIHtjb2xsYXBzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImNhbGxvdXQtZm9sZFwiLCAhb3BlbiA/IFwiaXMtY29sbGFwc2VkXCIgOiB1bmRlZmluZWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gbHVjaWRlLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7b3BlbiAmJiA8ZGl2IGNsYXNzTmFtZT1cImNhbGxvdXQtY29udGVudFwiPntjaGlsZHJlbn08L2Rpdj59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cblxuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9jYXJkcy5jc3NcIjtcbi8qKlxuICogUHJvcHMgZm9yIHRoZSBjYXJkIGNvbXBvbmVudFxuICpcbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcmRQcm9wczxUPiB7XG4gICAgLyoqIHRoZSBhY3R1YWwgdmFsdWUgaGVsZCBpbiB0aGlzIGNhcmQuICovXG4gICAgdmFsdWU6IFQ7XG5cbiAgICAvKiogVGhlIHRpdGxlIG9mIHRoZSBjYXJkLiAqL1xuICAgIHRpdGxlOiBMaXRlcmFsIHwgKCh2YWw6IFQpID0+IExpdGVyYWwgfCBWTm9kZSk7XG5cbiAgICAvKiogVGhlIHJhdyBjb250ZW50IG9mIHRoZSBjYXJkLiAqL1xuICAgIGNvbnRlbnQ6IExpdGVyYWwgfCAoKHZhbDogVCkgPT4gTGl0ZXJhbCB8IFZOb2RlKTtcblxuICAgIC8qKiBvcHRpb25hbCBmb290ZXIgKGJlY2F1c2Ugd2h5IG5vdD8pICovXG4gICAgZm9vdGVyPzogTGl0ZXJhbCB8ICgodmFsOiBUKSA9PiBMaXRlcmFsIHwgVk5vZGUpO1xuXG4gICAgLyoqIElmIHRydWUsIHRoZSB0aXRsZSB3aWxsIGJlIHJlbmRlcmVkIGNlbnRlcmVkLiAqL1xuICAgIGNlbnRlclRpdGxlPzogYm9vbGVhbjtcbn1cbi8qKlxuICogQSBjYXJkIHdpdGggYSB0aXRsZSBhbmQgY29udGVudFxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDYXJkPFQ+KHByb3BzOiBDYXJkUHJvcHM8VD4pIHtcbiAgICBjb25zdCBjYXJkVGl0bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy50aXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGl0bGUocHJvcHMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRpdGxlO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZhbHVlLCBwcm9wcy50aXRsZV0pO1xuXG4gICAgY29uc3QgaW5uZXJDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gcHJvcHMuY29udGVudChwcm9wcy52YWx1ZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByb3BzLmNvbnRlbnQ7XG4gICAgfSwgW3Byb3BzLnZhbHVlLCBwcm9wcy5jb250ZW50XSk7XG5cbiAgICBjb25zdCBmb290ZXJDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5mb290ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5mb290ZXIocHJvcHMudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuZm9vdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sIFtwcm9wcy5mb290ZXIsIHByb3BzLnZhbHVlXSk7XG5cbiAgICBjb25zdCB0aXRsZUNsYXNzZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGJhc2UgPSBbXCJkYXRhY29yZS1jYXJkLXRpdGxlXCJdO1xuICAgICAgICBpZiAocHJvcHMuY2VudGVyVGl0bGUpIGJhc2UgPSBiYXNlLmNvbmNhdChcImNlbnRlcmVkXCIpO1xuICAgICAgICByZXR1cm4gYmFzZTtcbiAgICB9LCBbcHJvcHMuY2VudGVyVGl0bGUsIHByb3BzLnRpdGxlLCBwcm9wcy5jb250ZW50LCBwcm9wcy52YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGl0bGVDbGFzc2VzLmpvaW4oXCIgXCIpfT57Y2FyZFRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkLWlubmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkLWNvbnRlbnRcIj57aW5uZXJDb250ZW50fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtY2FyZC1mb290ZXJcIj57Zm9vdGVyQ29udGVudH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuaW1wb3J0IHsgR3JvdXBpbmdzLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLyoqIEEgZnVuY3Rpb24gd2hpY2ggbWFwcyBhbiBhcnJheSBlbGVtZW50IHRvIHNvbWUgdmFsdWUuICovXG5leHBvcnQgdHlwZSBBcnJheUZ1bmM8VCwgTz4gPSAoZWxlbTogVCwgaW5kZXg6IG51bWJlciwgYXJyOiBUW10pID0+IE87XG5cbi8qKiBBIGZ1bmN0aW9uIHdoaWNoIGNvbXBhcmVzIHR3byB0eXBlcy4gKi9cbmV4cG9ydCB0eXBlIEFycmF5Q29tcGFyYXRvcjxUPiA9IChhOiBULCBiOiBUKSA9PiBudW1iZXI7XG5cbi8qKiBGaW5kcyB0aGUgdmFsdWUgb2YgdGhlIGxvd2VzdCB2YWx1ZSB0eXBlIGluIGEgZ3JvdXBpbmcuICovXG5leHBvcnQgdHlwZSBMb3dlc3RLZXk8VD4gPSBUIGV4dGVuZHMgeyBrZXk6IGFueTsgcm93czogYW55IH0gPyBMb3dlc3RLZXk8VFtcInJvd3NcIl1bMF0+IDogVDtcblxuLyoqIEEgcmlkaWN1bG91cyB0eXBlIHdoaWNoIHByb3Blcmx5IHR5cGVzIHRoZSByZXN1bHQgb2YgdGhlICdncm91cEluJyBjb21tYW5kLiAqL1xuZXhwb3J0IHR5cGUgSW5ncm91cGVkPFUsIFQ+ID0gVCBleHRlbmRzIHsga2V5OiBhbnk7IHJvd3M6IGFueSB9XG4gICAgPyB7IGtleTogVFtcImtleVwiXTsgcm93czogSW5ncm91cGVkPFUsIFRbXCJyb3dzXCJdWzBdPiB9XG4gICAgOiB7IGtleTogVTsgcm93czogVFtdIH07XG5cbi8qKlxuICogUHJveGllZCBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIG1hbmlwdWxhdGluZyBhcnJheS1iYXNlZCBkYXRhLiBBbGwgZnVuY3Rpb25zIG9uIGEgZGF0YSBhcnJheSBwcm9kdWNlIGEgTkVXIGFycmF5XG4gKiAoaS5lLiwgdGhlIGFycmF5cyBhcmUgaW1tdXRhYmxlKS5cbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhQXJyYXk8VD4ge1xuICAgIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4gKi9cbiAgICBsZW5ndGg6IG51bWJlcjtcblxuICAgIC8qKiBBcHBsaWVzIHRoZSBnaXZlbiBmdW5jdGlvbiB0byB0aGUgZW50aXJlIGRhdGEgYXJyYXkuIEFsbG93cyB1c2luZyBmdW5jdGlvbiBjaGFpbmluZyB3aGlsZSBhcHBseWluZyBhbiBhcmJpdHJhcnkgaW50ZXJtZWRpYXRlIGZ1bmN0aW9uLiAqL1xuICAgIGNoYWluPFU+KG9wOiAoYXJyOiBEYXRhQXJyYXk8VD4pID0+IERhdGFBcnJheTxVPik6IERhdGFBcnJheTxVPjtcblxuICAgIC8qKiBGaWx0ZXIgdGhlIGRhdGEgYXJyYXkgZG93biB0byBqdXN0IGVsZW1lbnRzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiBwcmVkaWNhdGUuICovXG4gICAgd2hlcmUocHJlZGljYXRlOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqIEFsaWFzIGZvciAnd2hlcmUnIGZvciBwZW9wbGUgd2hvIHdhbnQgYXJyYXkgc2VtYW50aWNzLiAqL1xuICAgIGZpbHRlcihwcmVkaWNhdGU6IEFycmF5RnVuYzxULCBib29sZWFuPik6IERhdGFBcnJheTxUPjtcblxuICAgIC8qKiBNYXAgZWxlbWVudHMgaW4gdGhlIGRhdGEgYXJyYXkgYnkgYXBwbHlpbmcgYSBmdW5jdGlvbiB0byBlYWNoLiAqL1xuICAgIG1hcDxVPihmOiBBcnJheUZ1bmM8VCwgVT4pOiBEYXRhQXJyYXk8VT47XG4gICAgLyoqIE1hcCBlbGVtZW50cyBpbiB0aGUgZGF0YSBhcnJheSBieSBhcHBseWluZyBhIGZ1bmN0aW9uIHRvIGVhY2gsIHRoZW4gZmxhdHRlbiB0aGUgcmVzdWx0cyB0byBwcm9kdWNlIGEgbmV3IGFycmF5LiAqL1xuICAgIGZsYXRNYXA8VT4oZjogQXJyYXlGdW5jPFQsIFVbXT4pOiBEYXRhQXJyYXk8VT47XG4gICAgLyoqIE11dGFibHkgY2hhbmdlIGVhY2ggdmFsdWUgaW4gdGhlIGFycmF5LCByZXR1cm5pbmcgdGhlIHNhbWUgYXJyYXkgd2hpY2ggeW91IGNhbiBmdXJ0aGVyIGNoYWluIG9mZiBvZi4gKi9cbiAgICBtdXRhdGUoZjogQXJyYXlGdW5jPFQsIHZvaWQ+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqIExpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkgdG8gdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGxpbWl0KGNvdW50OiBudW1iZXIpOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqXG4gICAgICogVGFrZSBhIHNsaWNlIG9mIHRoZSBhcnJheS4gSWYgYHN0YXJ0YCBpcyB1bmRlZmluZWQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgMDsgaWYgYGVuZGAgaXMgdW5kZWZpbmVkLCBpdCBpcyBhc3N1bWJlZFxuICAgICAqIHRvIGJlIHRoZSBlbmQgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqIENvbmNhdGVuYXRlIHRoZSB2YWx1ZXMgaW4gdGhpcyBkYXRhIGFycmF5IHdpdGggdGhvc2Ugb2YgYW5vdGhlciBpdGVyYWJsZSAvIGRhdGEgYXJyYXkgLyBhcnJheS4gKi9cbiAgICBjb25jYXQob3RoZXI6IEl0ZXJhYmxlPFQ+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgdGhlIGdpdmVuIChvcHRpb25hbGx5IHN0YXJ0aW5nIHRoZSBzZWFyY2gpICovXG4gICAgaW5kZXhPZihlbGVtZW50OiBULCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG4gICAgLyoqIFJldHVybiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLiAqL1xuICAgIGZpbmQocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogVCB8IHVuZGVmaW5lZDtcbiAgICAvKiogRmluZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gUmV0dXJucyAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC4gKi9cbiAgICBmaW5kSW5kZXgocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+LCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgY29udGFpbnMgdGhlIGdpdmVuIGVsZW1lbnQsIGFuZCBmYWxzZSBvdGhlcndpc2UuICovXG4gICAgaW5jbHVkZXMoZWxlbWVudDogVCk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgb2J0YWluZWQgYnkgY29udmVydGluZyBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIGEgc3RyaW5nLCBhbmQgam9pbmluZyBpdCB3aXRoIHRoZVxuICAgICAqIGdpdmVuIHNlcGFyYXRvciAod2hpY2ggZGVmYXVsdHMgdG8gJywgJykuXG4gICAgICovXG4gICAgam9pbihzZXA/OiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzb3J0ZWQgYXJyYXkgc29ydGVkIGJ5IHRoZSBnaXZlbiBrZXk7IGFuIG9wdGlvbmFsIGNvbXBhcmF0b3IgY2FuIGJlIHByb3ZpZGVkLCB3aGljaCB3aWxsXG4gICAgICogYmUgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIGxlaXUgb2YgdGhlIGRlZmF1bHQgZGF0YXZpZXcgY29tcGFyYXRvci5cbiAgICAgKi9cbiAgICBzb3J0PFU+KGtleTogQXJyYXlGdW5jPFQsIFU+LCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKipcbiAgICAgKiBNdXRhYmx5IG1vZGlmeSB0aGUgY3VycmVudCBhcnJheSB3aXRoIGFuIGluIHBsYWNlIHNvcnQ7IHRoaXMgaXMgbGVzcyBmbGV4aWJsZSB0aGFuIGEgcmVndWxhciBzb3J0IGluIGV4Y2hhbmdlXG4gICAgICogZm9yIGJlaW5nIGEgbGl0dGxlIG1vcmUgcGVyZm9ybWFudC4gT25seSB1c2UgdGhpcyBpcyBwZXJmb3JtYW5jZSBpcyBhIHNlcmlvdXMgY29uc2lkZXJhdGlvbi5cbiAgICAgKi9cbiAgICBzb3J0SW5QbGFjZTxVPihrZXk6ICh2OiBUKSA9PiBVLCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWxlbWVudHMgYXJlIGdyb3VwZWQgYnkgdGhlIGdpdmVuIGtleTsgdGhlIHJlc3VsdGluZyBhcnJheSB3aWxsIGhhdmUgb2JqZWN0cyBvZiB0aGUgZm9ybVxuICAgICAqIFxcYHsga2V5OiBcXDxrZXkgdmFsdWVcXD4sIHJvd3M6IERhdGFBcnJheSB9YC5cbiAgICAgKi9cbiAgICBncm91cEJ5PFU+KGtleTogQXJyYXlGdW5jPFQsIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PHsga2V5OiBVOyByb3dzOiBUW10gfT47XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgYXJyYXkgaXMgbm90IGdyb3VwZWQsIGdyb3VwcyBpdCBhcyBgZ3JvdXBCeWAgZG9lczsgb3RoZXJ3aXNlLCBncm91cHMgdGhlIGVsZW1lbnRzIGluc2lkZSBlYWNoIGN1cnJlbnRcbiAgICAgKiBncm91cC4gVGhpcyBhbGxvd3MgZm9yIHRvcC1kb3duIHJlY3Vyc2l2ZSBncm91cGluZyB3aGljaCBtYXkgYmUgZWFzaWVyIHRoYW4gYm90dG9tLXVwIGdyb3VwaW5nLlxuICAgICAqL1xuICAgIGdyb3VwSW48VT4oa2V5OiBBcnJheUZ1bmM8TG93ZXN0S2V5PFQ+LCBVPiwgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPik6IERhdGFBcnJheTxJbmdyb3VwZWQ8VSwgVD4+O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRpc3RpbmN0IGVudHJpZXMuIElmIGEga2V5IGlzIHByb3ZpZGVkLCB0aGVuIHJvd3Mgd2l0aCBkaXN0aW5jdCBrZXlzIGFyZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBkaXN0aW5jdDxVPihrZXk/OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBpcyB0cnVlIGZvciBhbGwgdmFsdWVzLiAqL1xuICAgIGV2ZXJ5KGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW47XG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlLiAqL1xuICAgIHNvbWUoZjogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogYm9vbGVhbjtcbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBpcyBGQUxTRSBmb3IgYWxsIHZhbHVlcy4gKi9cbiAgICBub25lKGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW47XG5cbiAgICAvKiogUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkYXRhIGFycmF5LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuICovXG4gICAgZmlyc3QoKTogVDtcbiAgICAvKiogUmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGRhdGEgYXJyYXkuIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBhcnJheSBpcyBlbXB0eS4gKi9cbiAgICBsYXN0KCk6IFQ7XG5cbiAgICAvKiogTWFwIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBkYXRhIGFycmF5IHRvIHRoZSBnaXZlbiBrZXksIGFuZCB0aGVuIGZsYXR0ZW4gaXQuKi9cbiAgICB0byhrZXk6IHN0cmluZyk6IERhdGFBcnJheTxhbnk+O1xuICAgIC8qKiBNYXAgZXZlcnkgZWxlbWVudCBpbiB0aGlzIGRhdGEgYXJyYXkgdG8gdGhlIGdpdmVuIGtleTsgdW5saWtlIHRvKCksIGRvZXMgbm90IGZsYXR0ZW4gdGhlIHJlc3VsdC4gKi9cbiAgICBpbnRvKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT47XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBleHBhbmQgdGhlIGdpdmVuIGtleSwgZmxhdHRlbmluZyBhIHRyZWUgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBrZXkgaW50byBhIGZsYXQgYXJyYXkuIFVzZWZ1bCBmb3IgaGFuZGxpbmdcbiAgICAgKiBoZWlyYXJjaGljYWwgZGF0YSBsaWtlIHRhc2tzIHdpdGggJ3N1YnRhc2tzJy5cbiAgICAgKi9cbiAgICBleHBhbmQoa2V5OiBzdHJpbmcpOiBEYXRhQXJyYXk8YW55PjtcblxuICAgIC8qKiBSdW4gYSBsYW1iZGEgb24gZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheS4gKi9cbiAgICBmb3JFYWNoKGY6IEFycmF5RnVuYzxULCB2b2lkPik6IHZvaWQ7XG5cbiAgICAvKiogQ29udmVydCB0aGlzIHRvIGEgcGxhaW4gamF2YXNjcmlwdCBhcnJheS4gKi9cbiAgICBhcnJheSgpOiBUW107XG5cbiAgICAvKiogQWxsb3cgaXRlcmF0aW5nIGRpcmVjdGx5IG92ZXIgdGhlIGFycmF5LiAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFQ+O1xuXG4gICAgLyoqIE1hcCBpbmRleGVzIHRvIHZhbHVlcy4gKi9cbiAgICBbaW5kZXg6IG51bWJlcl06IGFueTtcbiAgICAvKiogQXV0b21hdGljIGZsYXR0ZW5pbmcgb2YgZmllbGRzLiBFcXVpdmFsZW50IHRvIGltcGxpY2l0bHkgY2FsbGluZyBgYXJyYXkudG8oXCJmaWVsZFwiKWAgKi9cbiAgICBbZmllbGQ6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBoaWRkZW5cbiAqIEltcGxlbWVudGF0aW9uIG9mIERhdGFBcnJheSwgbWludXMgdGhlIGR5bmFtaWMgdmFyaWFibGUgYWNjZXNzLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgcHJveHkuXG4gKiAqL1xuY2xhc3MgRGF0YUFycmF5SW1wbDxUPiBpbXBsZW1lbnRzIERhdGFBcnJheTxUPiB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgQVJSQVlfRlVOQ1RJT05TOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICAgICBcImNoYWluXCIsXG4gICAgICAgIFwid2hlcmVcIixcbiAgICAgICAgXCJmaWx0ZXJcIixcbiAgICAgICAgXCJtYXBcIixcbiAgICAgICAgXCJmbGF0TWFwXCIsXG4gICAgICAgIFwibXV0YXRlXCIsXG4gICAgICAgIFwic2xpY2VcIixcbiAgICAgICAgXCJjb25jYXRcIixcbiAgICAgICAgXCJpbmRleE9mXCIsXG4gICAgICAgIFwibGltaXRcIixcbiAgICAgICAgXCJmaW5kXCIsXG4gICAgICAgIFwiZmluZEluZGV4XCIsXG4gICAgICAgIFwiaW5jbHVkZXNcIixcbiAgICAgICAgXCJqb2luXCIsXG4gICAgICAgIFwic29ydFwiLFxuICAgICAgICBcInNvcnRJblBsYWNlXCIsXG4gICAgICAgIFwiZ3JvdXBCeVwiLFxuICAgICAgICBcImdyb3VwSW5cIixcbiAgICAgICAgXCJkaXN0aW5jdFwiLFxuICAgICAgICBcImV2ZXJ5XCIsXG4gICAgICAgIFwic29tZVwiLFxuICAgICAgICBcIm5vbmVcIixcbiAgICAgICAgXCJmaXJzdFwiLFxuICAgICAgICBcImxhc3RcIixcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICBcImludG9cIixcbiAgICAgICAgXCJsd3JhcFwiLFxuICAgICAgICBcImV4cGFuZFwiLFxuICAgICAgICBcImZvckVhY2hcIixcbiAgICAgICAgXCJsZW5ndGhcIixcbiAgICAgICAgXCJ2YWx1ZXNcIixcbiAgICAgICAgXCJhcnJheVwiLFxuICAgICAgICBcImRlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgICAgIFwidG9TdHJpbmdcIixcbiAgICAgICAgXCJzZXR0aW5nc1wiLFxuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgQVJSQVlfUFJPWFk6IFByb3h5SGFuZGxlcjxEYXRhQXJyYXlJbXBsPGFueT4+ID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIHByb3AsIHJlY2lldmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiAodGFyZ2V0IGFzIGFueSlbcHJvcF07XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHRhcmdldC52YWx1ZXNbcHJvcF07XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcImNvbnN0cnVjdG9yXCIpIHJldHVybiB0YXJnZXQudmFsdWVzLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KHByb3ApKSkgcmV0dXJuIHRhcmdldC52YWx1ZXNbcGFyc2VJbnQocHJvcCldO1xuICAgICAgICAgICAgZWxzZSBpZiAoRGF0YUFycmF5SW1wbC5BUlJBWV9GVU5DVElPTlMuaGFzKHByb3AudG9TdHJpbmcoKSkpIHJldHVybiB0YXJnZXRbcHJvcC50b1N0cmluZygpXTtcblxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC50byhwcm9wKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcHVibGljIHN0YXRpYyB3cmFwPFQ+KGFycjogVFtdLCBkZWZhdWx0Q29tcGFyYXRvcjogQXJyYXlDb21wYXJhdG9yPGFueT4gPSBMaXRlcmFscy5jb21wYXJlKTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eTxEYXRhQXJyYXlJbXBsPFQ+PihuZXcgRGF0YUFycmF5SW1wbDxUPihhcnIsIGRlZmF1bHRDb21wYXJhdG9yKSwgRGF0YUFycmF5SW1wbC5BUlJBWV9QUk9YWSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHZhbHVlczogYW55W10sIHB1YmxpYyBkZWZhdWx0Q29tcGFyYXRvcjogQXJyYXlDb21wYXJhdG9yPGFueT4gPSBMaXRlcmFscy5jb21wYXJlKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGx3cmFwPFU+KHZhbHVlczogVVtdKTogRGF0YUFycmF5PFU+IHtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheUltcGwud3JhcCh2YWx1ZXMsIHRoaXMuZGVmYXVsdENvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFpbjxVPihvcDogKGFycjogRGF0YUFycmF5PFQ+KSA9PiBEYXRhQXJyYXk8VT4pOiBEYXRhQXJyYXk8VT4ge1xuICAgICAgICByZXR1cm4gb3AodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdoZXJlKHByZWRpY2F0ZTogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMuZmlsdGVyKHByZWRpY2F0ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXIocHJlZGljYXRlOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53aGVyZShwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oZjogQXJyYXlGdW5jPFQsIFU+KTogRGF0YUFycmF5PFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMubWFwKGYpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxhdE1hcDxVPihmOiBBcnJheUZ1bmM8VCwgVVtdPik6IERhdGFBcnJheTxVPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBmb3IgKGxldCByIG9mIHZhbHVlKSByZXN1bHQucHVzaChyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIG11dGF0ZShmOiBBcnJheUZ1bmM8VCwgdm9pZD4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGltaXQoY291bnQ6IG51bWJlcik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHRoaXMudmFsdWVzLnNsaWNlKDAsIGNvdW50KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcCh0aGlzLnZhbHVlcy5zbGljZShzdGFydCwgZW5kKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmNhdChvdGhlcjogRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMuY29uY2F0KG90aGVyLnZhbHVlcykpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSBnaXZlbiAob3B0aW9uYWxseSBzdGFydGluZyB0aGUgc2VhcmNoKSAqL1xuICAgIHB1YmxpYyBpbmRleE9mKGVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJbmRleCgoZSkgPT4gdGhpcy5kZWZhdWx0Q29tcGFyYXRvcihlLCBlbGVtZW50KSA9PSAwLCBmcm9tSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gKi9cbiAgICBwdWJsaWMgZmluZChwcmVkOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5maW5kSW5kZXgocHJlZCk7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kSW5kZXgocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+LCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IGZyb21JbmRleCA/PyAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAocHJlZCh0aGlzLnZhbHVlc1tpbmRleF0sIGluZGV4LCB0aGlzLnZhbHVlcykpIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5jbHVkZXMoZWxlbWVudDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKGVsZW1lbnQsIDApICE9IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBqb2luKHNlcD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcCgocykgPT4gTGl0ZXJhbHMudG9TdHJpbmcocykpXG4gICAgICAgICAgICAuYXJyYXkoKVxuICAgICAgICAgICAgLmpvaW4oc2VwID8/IFwiLCBcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQ8VT4oa2V5PzogQXJyYXlGdW5jPFQsIFU+LCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzO1xuICAgICAgICBsZXQgcmVhbENvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG4gICAgICAgIGxldCByZWFsS2V5ID0ga2V5ID8/ICgobDogVCkgPT4gbCBhcyBhbnkgYXMgVSk7XG5cbiAgICAgICAgLy8gQXNzb2NpYXRlIGVhY2ggZW50cnkgd2l0aCBpdCdzIGluZGV4IGZvciB0aGUga2V5IGZ1bmN0aW9uLCBhbmQgdGhlbiBkbyBhIG5vcm1hbCBzb3J0LlxuICAgICAgICBsZXQgY29weSA9IChbXSBhcyBhbnlbXSkuY29uY2F0KHRoaXMuYXJyYXkoKSkubWFwKChlbGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGluZGV4LCB2YWx1ZTogZWxlbSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29weS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgYUtleSA9IHJlYWxLZXkoYS52YWx1ZSwgYS5pbmRleCwgdGhpcy52YWx1ZXMpO1xuICAgICAgICAgICAgbGV0IGJLZXkgPSByZWFsS2V5KGIudmFsdWUsIGIuaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IFwiZGVzY1wiID8gLXJlYWxDb21wYXJhdG9yKGFLZXksIGJLZXkpIDogcmVhbENvbXBhcmF0b3IoYUtleSwgYktleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKGNvcHkubWFwKChlKSA9PiBlLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnRJblBsYWNlPFU+KFxuICAgICAgICBrZXk/OiAodmFsdWU6IFQpID0+IFUsXG4gICAgICAgIGRpcmVjdGlvbj86IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgICAgICAgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPlxuICAgICk6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGxldCByZWFsQ29tcGFyYXRvciA9IGNvbXBhcmF0b3IgPz8gdGhpcy5kZWZhdWx0Q29tcGFyYXRvcjtcbiAgICAgICAgbGV0IHJlYWxLZXkgPSBrZXkgPz8gKChsOiBUKSA9PiBsIGFzIGFueSBhcyBVKTtcblxuICAgICAgICB0aGlzLnZhbHVlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgYUtleSA9IHJlYWxLZXkoYSk7XG4gICAgICAgICAgICBsZXQgYktleSA9IHJlYWxLZXkoYik7XG5cbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gXCJkZXNjXCIgPyAtcmVhbENvbXBhcmF0b3IoYUtleSwgYktleSkgOiByZWFsQ29tcGFyYXRvcihhS2V5LCBiS2V5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwQnk8VT4oa2V5OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8eyBrZXk6IFU7IHJvd3M6IFRbXSB9PiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuIHRoaXMubHdyYXAoW10pO1xuXG4gICAgICAgIC8vIEphdmFTY3JpcHQgc3Vja3MgYW5kIHdlIGNhbid0IG1ha2UgaGFzaCBtYXBzIG92ZXIgYXJiaXRyYXJ5IHR5cGVzIChvbmx5IHN0cmluZ3MvaW50cyksIHNvXG4gICAgICAgIC8vIHdlIGRvIGEgcG9vciBtYW4gYWxnb3JpdGhtIHdoZXJlIHdlIFNPUlQsIGZvbGxvd2VkIGJ5IGdyb3VwaW5nLlxuICAgICAgICBsZXQgaW50ZXJtZWRpYXRlID0gdGhpcy5zb3J0KGtleSwgXCJhc2NcIiwgY29tcGFyYXRvcik7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogeyBrZXk6IFU7IHJvd3M6IFRbXSB9W10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSBbaW50ZXJtZWRpYXRlWzBdXTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBrZXkoaW50ZXJtZWRpYXRlWzBdLCAwLCBpbnRlcm1lZGlhdGUudmFsdWVzKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGludGVybWVkaWF0ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGxldCBuZXdLZXkgPSBrZXkoaW50ZXJtZWRpYXRlW2luZGV4XSwgaW5kZXgsIGludGVybWVkaWF0ZS52YWx1ZXMpO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoY3VycmVudCwgbmV3S2V5KSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBrZXk6IGN1cnJlbnQsIHJvd3M6IGN1cnJlbnRSb3cgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG5ld0tleTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93ID0gW2ludGVybWVkaWF0ZVtpbmRleF1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93LnB1c2goaW50ZXJtZWRpYXRlW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goeyBrZXk6IGN1cnJlbnQsIHJvd3M6IGN1cnJlbnRSb3cgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBJbjxVPihrZXk6IEFycmF5RnVuYzxMb3dlc3RLZXk8VD4sIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PEluZ3JvdXBlZDxVLCBUPj4ge1xuICAgICAgICBpZiAoR3JvdXBpbmdzLmlzR3JvdXBpbmcodGhpcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICh2IGFzIGFueSkua2V5LFxuICAgICAgICAgICAgICAgICAgICByb3dzOiBEYXRhQXJyYXkud3JhcCgodiBhcyBhbnkpLnJvd3MpLmdyb3VwSW4oa2V5IGFzIGFueSwgY29tcGFyYXRvciBhcyBhbnkpLFxuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cEJ5KGtleSBhcyBhbnksIGNvbXBhcmF0b3IpIGFzIGFueTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXN0aW5jdDxVPihrZXk/OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzO1xuICAgICAgICBsZXQgcmVhbEtleSA9IGtleSA/PyAoKHgpID0+IHggYXMgYW55IGFzIFUpO1xuXG4gICAgICAgIC8vIEZvciBzaW1pbGFyIHJlYXNvbnMgdG8gZ3JvdXBCeSwgZG8gYSBzb3J0IGFuZCB0YWtlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggYmxvY2suXG4gICAgICAgIGxldCBpbnRlcm1lZGlhdGUgPSB0aGlzLm1hcCgoeCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleTogcmVhbEtleSh4LCBpbmRleCwgdGhpcy52YWx1ZXMpLCB2YWx1ZTogeCB9O1xuICAgICAgICB9KS5zb3J0KCh4KSA9PiB4LmtleSwgXCJhc2NcIiwgY29tcGFyYXRvcik7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogVFtdID0gW2ludGVybWVkaWF0ZVswXS52YWx1ZV07XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpbnRlcm1lZGlhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyYXRvcihpbnRlcm1lZGlhdGVbaW5kZXggLSAxXS5rZXksIGludGVybWVkaWF0ZVtpbmRleF0ua2V5KSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW50ZXJtZWRpYXRlW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBldmVyeShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmV2ZXJ5KGYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb21lKGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuc29tZShmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9uZShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmV2ZXJ5KCh2LCBpLCBhKSA9PiAhZih2LCBpLCBhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpcnN0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMudmFsdWVzWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgbGFzdCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG8oa2V5OiBzdHJpbmcpOiBEYXRhQXJyYXk8YW55PiB7XG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHRoaXMudmFsdWVzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBjaGlsZFtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgRGF0YUFycmF5LmlzRGF0YUFycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodikgPT4gcmVzdWx0LnB1c2godikpO1xuICAgICAgICAgICAgZWxzZSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnRvKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gY2hpbGRba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBxdWV1ZTogYW55W10gPSAoW10gYXMgYW55W10pLmNvbmNhdCh0aGlzLnZhbHVlcyk7XG5cbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gcXVldWUucG9wKCk7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBuZXh0W2tleV07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodikgPT4gcXVldWUucHVzaCh2KSk7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFBcnJheUltcGwpIHZhbHVlLmZvckVhY2goKHYpID0+IHF1ZXVlLnB1c2godikpO1xuICAgICAgICAgICAgZWxzZSBxdWV1ZS5wdXNoKHZhbHVlKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JFYWNoKGY6IEFycmF5RnVuYzxULCB2b2lkPikge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhcnJheSgpOiBUW10ge1xuICAgICAgICByZXR1cm4gKFtdIGFzIGFueVtdKS5jb25jYXQodGhpcy52YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYXRvcjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIltcIiArIHRoaXMudmFsdWVzLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xuICAgIH1cbn1cblxuLyoqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIGRhdGEgYXJyYXlzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIERhdGFBcnJheSB7XG4gICAgLyoqIENyZWF0ZSBhIG5ldyBEYXRhdmlldyBkYXRhIGFycmF5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwPFQ+KHJhdzogVFtdIHwgRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKGlzRGF0YUFycmF5KHJhdykpIHJldHVybiByYXc7XG4gICAgICAgIHJldHVybiBEYXRhQXJyYXlJbXBsLndyYXAocmF3KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbmV3IERhdGFBcnJheSBmcm9tIGFuIGl0ZXJhYmxlIG9iamVjdC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZnJvbTxUPihyYXc6IEl0ZXJhYmxlPFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKGlzRGF0YUFycmF5KHJhdykpIHJldHVybiByYXc7XG5cbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbSBvZiByYXcpIGRhdGEucHVzaChlbGVtKTtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheUltcGwud3JhcChkYXRhKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIGRhdGEgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUFycmF5KG9iajogYW55KTogb2JqIGlzIERhdGFBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGFBcnJheUltcGw7XG4gICAgfVxufVxuXG4vLyBBIHNjYXJ5IGxvb2tpbmcgcG9seWZpbGwsIHN1cmUsIGJ1dCBpdCBmaXhlcyB1cCBkYXRhIGFycmF5L2FycmF5IGludGVyb3AgZm9yIHVzLlxuY29uc3Qgb2xkQXJyYXlJc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbkFycmF5LmlzQXJyYXkgPSAoYXJnKTogYXJnIGlzIGFueVtdID0+IHtcbiAgICByZXR1cm4gb2xkQXJyYXlJc0FycmF5KGFyZykgfHwgRGF0YUFycmF5LmlzRGF0YUFycmF5KGFyZyk7XG59O1xuIiwgIi8qKiBAaWdub3JlICovXG4vLyEgVXRpbGl0aWVzIGZvciBmb3JjaW5nIHR5cGVzIHRvIGJlIG9mIGEgc3BlY2lmaWMgdHlwZSBvciByZXR1cm5pbmcgJ3VuZGVmaW5lZCcgaWYgbm90LCBhbGxvd2luZyBmb3IgbXVjaCBtb3JlIGNvbmNpc2UgdHlwaW5nLlxuXG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFBSSU1JVElWRVMgfSBmcm9tIFwiZXhwcmVzc2lvbi9wYXJzZXJcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgcmVuZGVyTWluaW1hbERhdGUgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBDb2VyY2Uge1xuICAgIC8qKiBDb2VyY2VzIGNvbW1vbiB0eXBlcyB0byBzdHJpbmcgb3Igb3RoZXJ3aXNlIHVuZGVmaW5lZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc3RyaW5nKHZhbHVlOiBMaXRlcmFsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1pbmltYWxEYXRlKHdyYXBwZWQudmFsdWUsIFwieXl5eS1NTS1kZFwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIik7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcmtkb3duKCk7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGJvb2xlYW5zIGFuZCBzdHJpbmctYm9vbGVhbnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4odmFsdWU6IExpdGVyYWwpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgbnVtYmVycyBhbmQgc3RyaW5ncyB0byBudW1iZXJzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBudW1iZXIodmFsdWU6IExpdGVyYWwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGRhdGVzIGFuZCBzdHJpbmdzIGludG8gZGF0ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGRhdGUodmFsdWU6IExpdGVyYWwpOiBEYXRlVGltZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGVUaW1lKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5kYXRlUGx1cy5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgZHVyYXRpb25zIGFuZCBzdHJpbmdzIGludG8gZHVyYXRpb25zLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvbih2YWx1ZTogTGl0ZXJhbCk6IER1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRHVyYXRpb24pIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3RhdHVzKSByZXR1cm4gcGFyc2VkLnZhbHVlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQ29lcmNlcyBsaW5rcyBhbmQgc3RyaW5ncyBpbnRvIGxpbmtzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsaW5rKHZhbHVlOiBMaXRlcmFsKTogTGluayB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpbmspIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBQUklNSVRJVkVTLmVtYmVkTGluay5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgYW55dGhpbmcgaW50byBhbiBhcnJheSwgYnkgY29udmVydGluZyBub24tYXJyYXlzIGludG8gdW5pdCBsZW5ndGggYXJyYXlzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhcnJheSh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBlbHNlIHJldHVybiBbdmFsdWVdO1xuICAgIH1cbn1cbiIsICIvKiogQSBwcm9taXNlIHRoYXQgY2FuIGJlIHJlc29sdmVkIGRpcmVjdGx5LiAqL1xuZXhwb3J0IHR5cGUgRGVmZXJyZWQ8VD4gPSBQcm9taXNlPFQ+ICYge1xuICAgIHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkO1xufTtcblxuLyoqIENyZWF0ZSBhIG5ldyBkZWZlcnJlZCBvYmplY3QsIHdoaWNoIGlzIGEgcmVzb2x2YWJsZSBwcm9taXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmVycmVkPFQ+KCk6IERlZmVycmVkPFQ+IHtcbiAgICBsZXQgcmVzb2x2ZTogKHZhbHVlOiBUKSA9PiB2b2lkO1xuICAgIGxldCByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkO1xuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZlcnJlZCA9IHByb21pc2UgYXMgYW55IGFzIERlZmVycmVkPFQ+O1xuICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZlITtcbiAgICBkZWZlcnJlZC5yZWplY3QgPSByZWplY3QhO1xuXG4gICAgcmV0dXJuIGRlZmVycmVkO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRhc3RvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRcIjtcbmltcG9ydCB7IE1hcmtkb3duQ29kZWJsb2NrLCBNYXJrZG93blNlY3Rpb24gfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IERlZmVycmVkLCBkZWZlcnJlZCB9IGZyb20gXCJ1dGlscy9kZWZlcnJlZFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEZyYWdtZW50LCBoIH0gZnJvbSBcInByZWFjdFwiO1xuXG4vKiogQSBzY3JpcHQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkaW5nU2NyaXB0IHtcbiAgICB0eXBlOiBcImxvYWRpbmdcIjtcblxuICAgIHBhdGg6IHN0cmluZztcbiAgICBwcm9taXNlOiBEZWZlcnJlZDxSZXN1bHQ8YW55LCBzdHJpbmc+Pjtcbn1cblxuLyoqIEEgc2NyaXB0IHRoYXQgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlZFNjcmlwdCB7XG4gICAgdHlwZTogXCJsb2FkZWRcIjtcblxuICAgIHBhdGg6IHN0cmluZztcbiAgICBvYmplY3Q6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YWNvcmVTY3JpcHQgPSBMb2FkaW5nU2NyaXB0IHwgTG9hZGVkU2NyaXB0O1xuXG4vKiogQSBzaW1wbGUgY2FjaGluZyBzY3JpcHQgbG9hZGVyIHRoYXQgY2FuIGxvYWQgYW55IERBRyBvZiBzY3JpcHQgZGVwZW5kZW5jaWVzLiAqL1xuZXhwb3J0IGNsYXNzIFNjcmlwdENhY2hlIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0YWdzIHdlIHJlY29nbml6ZSBmb3Igc2NyaXB0cy4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBTQ1JJUFRfTEFOR1VBR0VTOiBSZWNvcmQ8c3RyaW5nLCBTY3JpcHRMYW5ndWFnZT4gPSB7XG4gICAgICAgIGpzOiBcImpzXCIsXG4gICAgICAgIGphdmFzY3JpcHQ6IFwianNcIixcbiAgICAgICAgZGF0YWNvcmVqczogXCJqc1wiLFxuICAgICAgICB0eXBlc2NyaXB0OiBcInRzXCIsXG4gICAgICAgIHRzOiBcInRzXCIsXG4gICAgICAgIGRhdGFjb3JldHM6IFwidHNcIixcbiAgICAgICAganN4OiBcImpzeFwiLFxuICAgICAgICBkYXRhY29yZWpzeDogXCJqc3hcIixcbiAgICAgICAgdHN4OiBcInRzeFwiLFxuICAgICAgICBkYXRhY29yZXRzeDogXCJ0c3hcIixcbiAgICB9O1xuXG4gICAgLyoqIEFsbCBvZiB0aGUgZGlyZWN0IGZpbGUgZXh0ZW5zaW9ucyB3ZSBjYW4gbG9hZC4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBGSUxFX0VYVEVOU0lPTlM6IFJlY29yZDxzdHJpbmcsIFNjcmlwdExhbmd1YWdlPiA9IHtcbiAgICAgICAgdHN4OiBcInRzeFwiLFxuICAgICAgICBqc3g6IFwianN4XCIsXG4gICAgICAgIGpzOiBcImpzXCIsXG4gICAgICAgIHRzOiBcInRzXCIsXG4gICAgfTtcblxuICAgIC8qKiBDYWNoZXMgc2NyaXB0cyBieSBmdWxseSBxdWFsaWZpZWQgcGF0aC4gKi9cbiAgICBwdWJsaWMgc2NyaXB0czogTWFwPHN0cmluZywgRGF0YWNvcmVTY3JpcHQ+ID0gbmV3IE1hcDxzdHJpbmcsIERhdGFjb3JlU2NyaXB0PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IERhdGFzdG9yZSkge31cblxuICAgIC8qKiBMb2FkIHRoZSBnaXZlbiBzY3JpcHQgYXQgdGhlIGdpdmVuIHBhdGgsIHJlY3Vyc2l2ZWx5IGxvYWRpbmcgYW55IHN1YnNjcmlwdHMgYXMgd2VsbC4gICovXG4gICAgcHVibGljIGFzeW5jIGxvYWQocGF0aDogc3RyaW5nIHwgTGluaywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8UmVzdWx0PGFueSwgc3RyaW5nPj4ge1xuICAgICAgICAvLyBBbHdheXMgY2hlY2sgdGhlIGNhY2hlIGZpcnN0LlxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnBhdGhrZXkocGF0aCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY3JpcHQgPSB0aGlzLnNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChjdXJyZW50U2NyaXB0KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFNjcmlwdC50eXBlID09PSBcImxvYWRlZFwiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY3VycmVudFNjcmlwdC5vYmplY3QpO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBJZiB3ZSB0cnkgdG8gbG9hZCBhbiBhbHJlYWR5LWxvYWRpbmcgc2NyaXB0LCB3ZSBhcmUgYWxtb3N0IGNlcnRhaW5seSBkb2luZyBzb21ldGhpbmdcbiAgICAgICAgICAgIC8vIHdlaXJkLiBFaXRoZXIgdGhlIGNhbGxlciBpcyBub3QgYGF3YWl0YC1pbmcgdGhlIGxvYWQgYW5kIGxvYWRpbmcgbXVsdGlwbGUgdGltZXMsIE9SXG4gICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYSBgcmVxdWlyZSgpYCBsb29wLiBFaXRoZXIgd2F5LCB3ZSdsbCBlcnJvciBvdXQgZm9yIG5vdyBzaW5jZSB3ZSBjYW4ndCBoYW5kbGVcbiAgICAgICAgICAgIC8vIGVpdGhlciBjYXNlIGN1cnJlbnRseS5cbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShcbiAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIGltcG9ydCBzY3JpcHQgXCIke3BhdGgudG9TdHJpbmcoKX1cIiwgYXMgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBsb2FkZWQuIERvIHlvdSBoYXZlXG4gICAgICAgICAgICAgICAgIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiB5b3VyIHJlcXVpcmUoKSBjYWxscz8gVGhlIGN1cnJlbnRseSBsb2FkZWQgb3IgbG9hZGluZyBzY3JpcHRzIGFyZTogXG4gICAgICAgICAgICAgICAgICR7QXJyYXkuZnJvbSh0aGlzLnNjcmlwdHMudmFsdWVzKCkpXG4gICAgICAgICAgICAgICAgICAgICAubWFwKChzYykgPT4gXCJcXHRcIiArIHNjLnBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FjaGUgaGFzIG1pc3NlZCwgc28gYWRkIG91cnNlbHZlcyB0byB0aGUgY2FjaGUgYW5kIHRyeSBhbmQgbG9hZCBpdCBkaXJlY3RseS5cbiAgICAgICAgY29uc3QgZGVmZXJyYWwgPSBkZWZlcnJlZDxSZXN1bHQ8YW55LCBzdHJpbmc+PigpO1xuICAgICAgICB0aGlzLnNjcmlwdHMuc2V0KGtleSwgeyB0eXBlOiBcImxvYWRpbmdcIiwgcHJvbWlzZTogZGVmZXJyYWwsIHBhdGg6IGtleSB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxvYWRVbmNhY2hlZChwYXRoLCBjb250ZXh0KTtcbiAgICAgICAgZGVmZXJyYWwucmVzb2x2ZShyZXN1bHQpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgdGhpcy5zY3JpcHRzLnNldChrZXksIHsgdHlwZTogXCJsb2FkZWRcIiwgcGF0aDoga2V5LCBvYmplY3Q6IHJlc3VsdC52YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0cy5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqIExvYWQgYSBzY3JpcHQsIGRpcmVjdGx5IGJ5cGFzc2luZyB0aGUgY2FjaGUuICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkVW5jYWNoZWQocGF0aDogc3RyaW5nIHwgTGluaywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8UmVzdWx0PGFueSwgc3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBtYXliZVNvdXJjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVNvdXJjZShwYXRoKTtcbiAgICAgICAgaWYgKCFtYXliZVNvdXJjZS5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVTb3VyY2U7XG5cbiAgICAgICAgLy8gVHJhbnNwaWxlIHRvIHZhbmlsbGEgamF2YXNjcmlwdCBmaXJzdC4uLlxuICAgICAgICBjb25zdCB7IGNvZGUsIGxhbmd1YWdlIH0gPSBtYXliZVNvdXJjZS52YWx1ZTtcbiAgICAgICAgbGV0IGJhc2ljO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYmFzaWMgPSB0cmFuc3BpbGUoY29kZSwgbGFuZ3VhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGYWlsZWQgdG8gaW1wb3J0ICR7cGF0aC50b1N0cmluZygpfSB3aGlsZSB0cmFuc3BpbGluZyBmcm9tICR7bGFuZ3VhZ2V9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlbiBmaW5hbGx5IGV4ZWN1dGUgdGhlIHNjcmlwdCB0byAnbG9hZCcgaXQuXG4gICAgICAgIGNvbnN0IGZpbmFsQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oeyBoOiBoLCBGcmFnbWVudDogRnJhZ21lbnQgfSwgY29udGV4dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoYXdhaXQgYXN5bmNFdmFsSW5Db250ZXh0KGJhc2ljLCBmaW5hbENvbnRleHQpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmFpbGVkIHRvIGV4ZWN1dGUgc2NyaXB0ICcke3BhdGgudG9TdHJpbmcoKX0nOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE5vcm1hbGl6ZSBhIHBhdGggb3IgbGluayB0byBhIHRleHR1YWwgcGF0aC4gKi9cbiAgICBwcml2YXRlIHBhdGhrZXkocGF0aDogc3RyaW5nIHwgTGluayk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXRoIGluc3RhbmNlb2YgTGluaykgcmV0dXJuIHBhdGgub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLyoqIEF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHNvdXJjZSB0byBsb2FkIGdpdmVuIGEgcGF0aCBvciBsaW5rIHRvIGEgbWFya2Rvd24gc2VjdGlvbi4gKi9cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVTb3VyY2UoXG4gICAgICAgIHBhdGg6IHN0cmluZyB8IExpbmtcbiAgICApOiBQcm9taXNlPFJlc3VsdDx7IGNvZGU6IHN0cmluZzsgbGFuZ3VhZ2U6IFNjcmlwdExhbmd1YWdlIH0sIHN0cmluZz4+IHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5zdG9yZS5yZXNvbHZlTGluayhwYXRoKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHJldHVybiBSZXN1bHQuZmFpbHVyZShcIkNvdWxkIG5vdCBmaW5kIGEgc2NyaXB0IGF0IHRoZSBnaXZlbiBwYXRoOiBcIiArIHBhdGgudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgY29uc3QgdGZpbGUgPSB0aGlzLnN0b3JlLnZhdWx0LmdldEZpbGVCeVBhdGgob2JqZWN0LiRmaWxlISk7XG4gICAgICAgIGlmICghdGZpbGUpIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmlsZSBcIiR7b2JqZWN0LiRmaWxlfVwiIG5vdCBmb3VuZC5gKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgSlMgZmlsZSB3ZSBzaG91bGQgbG9hZCBkaXJlY3RseS5cbiAgICAgICAgaWYgKHRmaWxlLmV4dGVuc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLkZJTEVfRVhURU5TSU9OUykge1xuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBTY3JpcHRDYWNoZS5GSUxFX0VYVEVOU0lPTlNbdGZpbGUuZXh0ZW5zaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCldO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLnN0b3JlLnZhdWx0LmNhY2hlZFJlYWQodGZpbGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7IGNvZGUsIGxhbmd1YWdlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoXCJGYWlsZWQgdG8gbG9hZCBqYXZhc2NyaXB0L3R5cGVzY3JpcHQgc291cmNlIGZpbGU6IFwiICsgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBhIG1hcmtkb3duIHNlY3Rpb24sIHNlYXJjaCBmb3IgYW55IGphdmFzY3JpcHQgY29kZWJsb2Nrczsgb3RoZXJ3aXNlLCBjaGVjayBpZiBpdCBpcyBhIGZ1bGwgc2NyaXB0IGZpbGUuXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXJrZG93blNlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQmxvY2sgPSBvYmplY3QuJGJsb2Nrc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGIpOiBiIGlzIE1hcmtkb3duQ29kZWJsb2NrID0+IGIuJHR5cGUgPT09IFwiY29kZWJsb2NrXCIpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGNiKSA9PlxuICAgICAgICAgICAgICAgICAgICBjYi4kbGFuZ3VhZ2VzLnNvbWUoKGxhbmd1YWdlKSA9PiBsYW5ndWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVMpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFtYXliZUJsb2NrKVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShcIkNvdWxkIG5vdCBmaW5kIGEgc2NyaXB0IGluIHRoZSBnaXZlbiBtYXJrZG93biBzZWN0aW9uOiBcIiArIHBhdGgudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID1cbiAgICAgICAgICAgICAgICBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTW1xuICAgICAgICAgICAgICAgICAgICBtYXliZUJsb2NrLiRsYW5ndWFnZXMuZmluZCgobGFuZykgPT4gbGFuZy50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVMpIVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMucmVhZENvZGVibG9jayh0ZmlsZSwgbWF5YmVCbG9jaykpLm1hcCgoY29kZSkgPT4gKHsgY29kZSwgbGFuZ3VhZ2UgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1hcmtkb3duQ29kZWJsb2NrKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUxhbmd1YWdlID0gb2JqZWN0LiRsYW5ndWFnZXMuZmluZChcbiAgICAgICAgICAgICAgICAobGFuZykgPT4gbGFuZy50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIW1heWJlTGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBUaGUgY29kZWJsb2NrIHJlZmVyZW5jZWQgYnkgJyR7cGF0aH0nIGlzIG5vdCBhIEpTL1RTIGNvZGVibG9jay5gKTtcblxuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTW21heWJlTGFuZ3VhZ2VdO1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnJlYWRDb2RlYmxvY2sodGZpbGUsIG9iamVjdCkpLm1hcCgoY29kZSkgPT4gKHsgY29kZSwgbGFuZ3VhZ2UgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBDYW5ub3QgaW1wb3J0ICcke3BhdGgudG9TdHJpbmcoKX06IG5vdCBhIEpTL1RTIGZpbGUgb3IgY29kZWJsb2NrIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCB0aGUgY29udGVudHMgb2YgYSBjb2RlYmxvY2sgZnJvbSBhIGZpbGUuICovXG4gICAgcHJpdmF0ZSBhc3luYyByZWFkQ29kZWJsb2NrKGZpbGU6IFRGaWxlLCBibG9jazogTWFya2Rvd25Db2RlYmxvY2spOiBQcm9taXNlPFJlc3VsdDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxpbmVSYW5nZShcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSksXG4gICAgICAgICAgICAgICAgYmxvY2suJGNvbnRlbnRQb3NpdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgICBibG9jay4kY29udGVudFBvc2l0aW9uLmVuZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrLiRzdHlsZSA9PT0gXCJmZW5jZWRcIikgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJhdyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICByYXdcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltU3RhcnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmFpbGVkIHRvIHJlYWQgYSBjb2RlYmxvY2sgZnJvbSAke2ZpbGUucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ2hlY2tib3gsIE9taXR0YWJsZSwgU2xpZGVyLCBTd2l0Y2ggfSBmcm9tIFwiYXBpL3VpL2Jhc2ljc1wiO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHVzZUZpbmFsaXplciwgdXNlU2V0RmllbGQgfSBmcm9tIFwidXRpbHMvZmllbGRzXCI7XG5pbXBvcnQgeyBFZGl0YWJsZUFjdGlvbiwgVW5jb250cm9sbGVkVGV4dEVkaXRhYmxlIH0gZnJvbSBcIi4vZWRpdGFibGVcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdFwiO1xuZXhwb3J0IGZ1bmN0aW9uIEZpZWxkQ2hlY2tib3goXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBmaWVsZDogRmllbGQ7XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPEZpZWxkPj47XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGVmYXVsdENoZWNrZWQgPSBmYWxzZSwgZGlzcGF0Y2gsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBkaXNhYmxlZD17dW5kZWZpbmVkfVxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9eyhmaWVsZD8udmFsdWUgPz8gZGVmYXVsdENoZWNrZWQpIGFzIGJvb2xlYW59XG4gICAgICAgICAgICBvbkNoZWNrQ2hhbmdlPXt1c2VTZXRGaWVsZChmaWVsZCwgKGIpID0+XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogeyAuLi5maWVsZCwgdmFsdWU6IGIgfSB9KVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3VuZGVmaW5lZH1cbiAgICAgICAgLz5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRWRpdGFibGVUZXh0RmllbGQocHJvcHM6IHtcbiAgICBmaWVsZDogRmllbGQ7XG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxzdHJpbmc+Pjtcbn0pIHtcbiAgICBjb25zdCB7IGZpZWxkLCBkZWZhdWx0VmFsdWUgPSBcIlwiLCBpbmxpbmUsIGRpc3BhdGNoIH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29udHJvbGxlZEVkaXRhYmxlVGV4dEZpZWxkXG4gICAgICAgICAgICB0ZXh0PXsoZmllbGQ/LnZhbHVlID8/IGRlZmF1bHRWYWx1ZSkgYXMgc3RyaW5nfVxuICAgICAgICAgICAgaW5saW5lPXtpbmxpbmV9XG4gICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZWRFZGl0YWJsZVRleHRGaWVsZChwcm9wczoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpbmxpbmU6IGJvb2xlYW47XG4gICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPHN0cmluZz4+O1xufSkge1xuICAgIGNvbnN0IHsgdGV4dCwgaW5saW5lLCBkaXNwYXRjaCB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3RleHRTdGF0ZSwgc2V0VGV4dF0gPSB1c2VTdGF0ZSh0ZXh0KTtcbiAgICBjb25zdCBvbklucHV0ID0gYXN5bmMgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgc2V0VGV4dCgoZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5saW5lKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB1c2VGaW5hbGl6ZXIodGV4dFN0YXRlLCBkaXNwYXRjaCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiICYmIGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB1c2VGaW5hbGl6ZXIodGV4dFN0YXRlLCBkaXNwYXRjaCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIDxVbmNvbnRyb2xsZWRUZXh0RWRpdGFibGUgdGV4dD17dGV4dH0gaW5saW5lPXtpbmxpbmV9IGRpc3BhdGNoPXtkaXNwYXRjaH0gb25JbnB1dD17b25JbnB1dH0gLz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZFNsaWRlcihcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICAgICAgbWluOiBudW1iZXI7XG4gICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICBzdGVwOiBudW1iZXI7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyO1xuICAgICAgICBmaWVsZDogRmllbGQ7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxGaWVsZD4+O1xuICAgIH0gJiBPbWl0PFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PiwgT21pdHRhYmxlPlxuKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGlzcGF0Y2gsIGRlZmF1bHRWYWx1ZSA9IDAsIG1pbiwgbWF4LCBzdGVwLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IChmaWVsZD8udmFsdWUgPz8gZGVmYXVsdFZhbHVlKSBhcyBudW1iZXI7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNsaWRlclxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgbWluPXttaW59XG4gICAgICAgICAgICBtYXg9e21heH1cbiAgICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgICB2YWx1ZT17dW5kZWZpbmVkfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17dXNlU2V0RmllbGQoZmllbGQsIChiKSA9PlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHsgLi4uZmllbGQsIHZhbHVlOiBiIH0gfSlcbiAgICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpZWxkU3dpdGNoKFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGJvb2xlYW47XG4gICAgICAgIGZpZWxkOiBGaWVsZDtcbiAgICAgICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPEZpZWxkPj47XG4gICAgfSAmIE9taXQ8UmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+LCBPbWl0dGFibGU+XG4pIHtcbiAgICBjb25zdCB7IGZpZWxkLCBkaXNwYXRjaCwgZGVmYXVsdFZhbHVlID0gZmFsc2UsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgb25Ub2dnbGVDaGFuZ2U9e3VzZVNldEZpZWxkKGZpZWxkLCAoYikgPT5cbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB7IC4uLmZpZWxkLCB2YWx1ZTogYiB9IH0pXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9eyhmaWVsZD8udmFsdWUgPz8gZGVmYXVsdFZhbHVlKSBhcyBib29sZWFufVxuICAgICAgICAgICAgY2hlY2tlZD17dW5kZWZpbmVkfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZFNlbGVjdCh7XG4gICAgbXVsdGkgPSBmYWxzZSxcbiAgICBvcHRpb25zLFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBmaWVsZCxcbiAgICBkaXNwYXRjaCxcbn06IHtcbiAgICBtdWx0aT86IGJvb2xlYW47XG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBmaWVsZDogRmllbGQ7XG4gICAgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RmllbGQ+Pjtcbn0pIHtcbiAgICBjb25zdCBpbm5lckNhbGxiYWNrID0gdXNlU2V0RmllbGQoZmllbGQsIChiKSA9PlxuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB7IC4uLmZpZWxkLCB2YWx1ZTogYiB9IH0pXG4gICAgKTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gbmV3VmFsdWUubWFwKCh4KSA9PiB4LnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5ld1ZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5uZXJDYWxsYmFjayhub3JtYWxpemVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgW2ZpZWxkLCBpbm5lckNhbGxiYWNrXVxuICAgICk7XG5cbiAgICBjb25zdCBhcnJheVZhbCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IChBcnJheS5pc0FycmF5KGZpZWxkPy52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6ICEhZmllbGQgPyBbZmllbGQudmFsdWVdIDogW2RlZmF1bHRWYWx1ZV0pLFxuICAgICAgICBbZmllbGRdXG4gICAgKTtcbiAgICBjb25zdCBkZWZWYWwgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgbXVsdGlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKChhKSA9PiBhcnJheVZhbC5maW5kSW5kZXgoKGIpID0+IGIgPT0gYS52YWx1ZSkgIT0gLTEpXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmZpbmQoKGEpID0+IGEudmFsdWUgPT0gZmllbGQ/LnZhbHVlKSxcbiAgICAgICAgW29wdGlvbnMsIG11bHRpXVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lUHJlZml4PVwiZGF0YWNvcmUtc2VsZWN0YWJsZVwiXG4gICAgICAgICAgICBvbkNoYW5nZT17KG4pID0+IG9uQ2hhbmdlKG4pfVxuICAgICAgICAgICAgdW5zdHlsZWRcbiAgICAgICAgICAgIGlzTXVsdGk9e211bHRpID8/IGZhbHNlfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZlZhbH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXM9e3tcbiAgICAgICAgICAgICAgICBpbnB1dDogKCkgPT4gXCJwcm9tcHQtaW5wdXRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRhaW5lcjogKCkgPT4gXCJzdWdnZXN0aW9uLWl0ZW0gdmFsdWUtY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiAoKSA9PiBcInN1Z2dlc3Rpb24tY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgbWVudTogKCkgPT4gXCJzdWdnZXN0aW9uLWNvbnRlbnQgc3VnZ2VzdGlvbi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBvcHRpb246IChwcm9wczogYW55KSA9PiBgc3VnZ2VzdGlvbi1pdGVtJHtwcm9wcy5pc1NlbGVjdGVkID8gXCIgaXMtc2VsZWN0ZWRcIiA6IFwiXCJ9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgeyBHcm91cEVsZW1lbnQsIEdyb3VwaW5nLCBHcm91cGluZ3MsIExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgR3JvdXBpbmdDb25maWcsIHVzZUFzRWxlbWVudCwgVmFuaWxsYUNvbHVtbiwgVmFuaWxsYVRhYmxlUHJvcHMgfSBmcm9tIFwiLi90YWJsZVwiO1xuaW1wb3J0IHsgdXNlSW50ZXJuaW5nLCB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIFJlZHVjZXIsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZHVjZXIsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENvbnRyb2xsZWRQYWdlciwgdXNlRGF0YWNvcmVQYWdpbmcgfSBmcm9tIFwiLi9wYWdpbmdcIjtcbmltcG9ydCB7IERFRkFVTFRfVEFCTEVfQ09NUEFSQVRPUiwgU29ydEJ1dHRvbiwgU29ydERpcmVjdGlvbiwgU29ydE9uIH0gZnJvbSBcIi4vdGFibGVcIjtcbmltcG9ydCB7IENvbnRleHQsIGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IENVUlJFTlRfRklMRV9DT05URVhULCBMaXQgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEVkaXRhYmxlLCB1c2VFZGl0YWJsZURpc3BhdGNoIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgY29tYmluZUNsYXNzZXMgfSBmcm9tIFwiLi4vYmFzaWNzXCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlUm93RGF0YTxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgY2hpbGRyZW46IFRyZWVUYWJsZVJvd0RhdGE8VD5bXTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmVlVXRpbHMge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RyZWVUYWJsZVJvd0RhdGE8VD4oZGF0YTogYW55KTogZGF0YSBpcyBUcmVlVGFibGVSb3dEYXRhPFQ+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiY2hpbGRyZW5cIiBpbiBkYXRhICYmXG4gICAgICAgICAgICBcInZhbHVlXCIgaW4gZGF0YSAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PSAyICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudEluVHJlZVJvdzxUPihub2RlOiBUcmVlVGFibGVSb3dEYXRhPFQ+LCB0b3A6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGlmICghdG9wKSByZXN1bHQrKztcbiAgICAgICAgZm9yIChsZXQgbiBvZiBub2RlLmNoaWxkcmVuKSByZXN1bHQgKz0gY291bnRJblRyZWVSb3cobiwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBleHBvcnQgZnVuY3Rpb24gb2ZBcnJheTxUPihzb3VyY2U6IFRbXSwgY2hpbGRGbjogKGVsOiBUKSA9PiBUW10pOiBUcmVlVGFibGVSb3dEYXRhPFQ+W10ge1xuICAgICAgICBjb25zdCBtYXBwZXIgPSAoZWw6IFQpOiBUcmVlVGFibGVSb3dEYXRhPFQ+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGVsLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZEZuKGVsKS5tYXAobWFwcGVyKSxcbiAgICAgICAgICAgIH0gYXMgVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAobWFwcGVyKTtcbiAgICB9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9mTm9kZTxUPihzb3VyY2U6IFQsIGNoaWxkRm46IChlbDogVCkgPT4gVFtdKTogVHJlZVRhYmxlUm93RGF0YTxUPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogc291cmNlLFxuICAgICAgICAgICAgY2hpbGRyZW46IG9mQXJyYXkoY2hpbGRGbihzb3VyY2UpLCBjaGlsZEZuKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gb2ZHcm91cGluZzxUPihlbGVtZW50czogR3JvdXBpbmc8VD4sIGNoaWxkRm46IChlbDogVCkgPT4gVFtdKTogR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj4ge1xuICAgICAgICBjb25zdCBtYXBwZXIgPSAobDogVCB8IEdyb3VwRWxlbWVudDxUPik6IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PiB8IFRyZWVUYWJsZVJvd0RhdGE8VD4gPT4ge1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChsKSlcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXk6IGwua2V5LCByb3dzOiBsLnJvd3MubWFwKG1hcHBlcikgfSBhcyBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBsLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZEZuKGwpLm1hcChtYXBwZXIpLFxuICAgICAgICAgICAgfSBhcyBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKG1hcHBlcikgYXMgR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+Pik6IG51bWJlciB7XG4gICAgICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoR3JvdXBpbmdzLmlzR3JvdXBpbmcoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGdyb3VwIG9mIGVsZW1lbnRzKSByZXN1bHQgKz0gY291bnQoZ3JvdXAucm93cyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLnJlZHVjZSgocHYsIGN2KSA9PiBwdiArIGNvdW50SW5UcmVlUm93KGN2KSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzbGljZUluVHJlZVJvdzxUPihlbGVtZW50czogVHJlZVRhYmxlUm93RGF0YTxUPltdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRyZWVUYWJsZVJvd0RhdGE8VD5bXSB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcblxuICAgICAgICBsZXQgaW5kZXggPSAwLFxuICAgICAgICAgICAgc2VlbiA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuICsgY291bnRJblRyZWVSb3coZWxlbWVudHNbaW5kZXhdKSA8PSBzdGFydCkge1xuICAgICAgICAgICAgc2VlbiArPSBjb3VudEluVHJlZVJvdyhlbGVtZW50c1tpbmRleF0pO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA+PSBlbGVtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVUYWJsZVJvd0RhdGE8VD5bXSA9IFtdO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbGVtZW50cy5sZW5ndGggJiYgc2VlbiA8IGVuZCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBncm91cFNpemUgPSBjb3VudEluVHJlZVJvdyhncm91cCk7XG4gICAgICAgICAgICBjb25zdCBncm91cFN0YXJ0ID0gTWF0aC5tYXgoc2Vlbiwgc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBFbmQgPSBNYXRoLm1pbihncm91cFNpemUgKyBzZWVuLCBlbmQpO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBzbGljZUluVHJlZVJvdyhncm91cC5jaGlsZHJlbiwgZ3JvdXBTdGFydCAtIHNlZW4sIGdyb3VwRW5kIC0gc2VlbiksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VlbiArPSBncm91cFNpemU7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gc2xpY2U8VD4oXG4gICAgICAgIGVsZW1lbnRzOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PixcbiAgICAgICAgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgZW5kOiBudW1iZXJcbiAgICApOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PiB7XG4gICAgICAgIGxldCBpbml0aWFsID0gWy4uLkdyb3VwaW5ncy5zbGljZShlbGVtZW50cywgc3RhcnQsIGVuZCldIGFzIEdyb3VwaW5nPFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgICAgICBsZXQgaW5kZXggPSAwLFxuICAgICAgICAgICAgc2VlbiA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBpbml0aWFsKSB7XG4gICAgICAgICAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwU2l6ZSA9IEdyb3VwaW5ncy5jb3VudChlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwU3RhcnQgPSBNYXRoLm1pbihzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwRW5kID0gTWF0aC5taW4oZ3JvdXBTaXplLCBlbmQpO1xuICAgICAgICAgICAgICAgIChpbml0aWFsW2luZGV4XSBhcyBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pLnJvd3MgPSBHcm91cGluZ3Muc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucm93cyxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBFbmRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlZW4gKz0gZ3JvdXBTaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWVuICs9IGNvdW50SW5UcmVlUm93KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICB9XG4gICAgLyoqIHJlY3Vyc2l2ZWx5IHNvcnQgYSB0cmVlICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNvcnQ8VCwgViA9IExpdGVyYWw+KFxuICAgICAgICByb3dzOiAoVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PilbXSxcbiAgICAgICAgY29tcGFyYXRvcnM6IHtcbiAgICAgICAgICAgIGZuOiAoYTogViwgYjogViwgYW86IFQsIGFiOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBhY3R1YWxWYWx1ZTogKG9iajogVCkgPT4gVjtcbiAgICAgICAgfVtdXG4gICAgKTogKFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pW10ge1xuICAgICAgICBjb25zdCByZWFsQ29tcGFyYXRvciA9IChcbiAgICAgICAgICAgIGE6IFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4sXG4gICAgICAgICAgICBiOiBUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+XG4gICAgICAgICk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb21wIG9mIGNvbXBhcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29tcC5kaXJlY3Rpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJhc2NlbmRpbmdcIiA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGEpICYmIEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChhKSAmJiAhR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gKiBjb21wLmZuKGNvbXAuYWN0dWFsVmFsdWUoYS52YWx1ZSksIGNvbXAuYWN0dWFsVmFsdWUoYi52YWx1ZSksIGEudmFsdWUsIGIudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWFwID0gKFxuICAgICAgICAgICAgdDogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PlxuICAgICAgICApOiBUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+ID0+IHtcbiAgICAgICAgICAgIGxldCByO1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cCh0KSlcbiAgICAgICAgICAgICAgICByID0geyAuLi50LCByb3dzOiBzb3J0KHQucm93cywgY29tcGFyYXRvcnMpLm1hcChtYXApIH0gYXMgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgICAgICAgICAgZWxzZSByID0geyAuLi50LCBjaGlsZHJlbjogc29ydCh0LmNoaWxkcmVuLCBjb21wYXJhdG9ycykubWFwKG1hcCkgfSBhcyBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByb3dzLm1hcChtYXApLnNvcnQocmVhbENvbXBhcmF0b3IpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdXNlS2V5Rm48VD4oaWQ6IFRyZWVUYWJsZVN0YXRlPFQ+W1wiaWRcIl0sIC4uLmRlcHM6IGFueVtdKSB7XG4gICAgY29uc3QgcmV0ID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChlbDogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PikgPT4ge1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwua2V5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWQoZWwudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbLi4uZGVwc11cbiAgICApO1xuICAgIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlQ29sdW1uPFQsIFYgPSBMaXRlcmFsPiBleHRlbmRzIFZhbmlsbGFDb2x1bW48VCwgVj4ge1xuICAgIHNvcnRhYmxlPzogYm9vbGVhbjtcblxuICAgIGNvbXBhcmF0b3I/OiAoZmlyc3Q6IFYsIHNlY29uZDogViwgZmlyc3RPYmplY3Q6IFQsIHNlY29uZE9iamVjdDogVCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVUYWJsZVN0YXRlPFQ+IHtcbiAgICBzb3J0T24/OiBTb3J0T25bXTtcbiAgICBvcGVuTWFwPzogTWFwPHN0cmluZywgYm9vbGVhbj47XG4gICAgaWQ6IChvYmo6IFQpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmVlVGFibGVQcm9wczxUPiB7XG4gICAgY29sdW1uczogVHJlZVRhYmxlQ29sdW1uPFQ+W107XG4gICAgcm93czogVFtdIHwgR3JvdXBpbmc8VD47XG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgICBzY3JvbGxPblBhZ2luZz86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgZ3JvdXBpbmdzPzogVmFuaWxsYVRhYmxlUHJvcHM8VHJlZVRhYmxlUm93RGF0YTxUPj5bXCJncm91cGluZ3NcIl07XG4gICAgc29ydE9uPzogU29ydE9uW107XG4gICAgY2hpbGRTZWxlY3RvcjogKHJhdzogVCkgPT4gVFtdO1xuICAgIGlkPzogKG9iajogVCkgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUcmVlVGFibGVBY3Rpb248VD4gPVxuICAgIHwgeyB0eXBlOiBcInNvcnQtY29sdW1uXCI7IGNvbHVtbjogc3RyaW5nOyBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gfCB1bmRlZmluZWQgfVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwicm93LWV4cGFuZFwiO1xuICAgICAgICAgIHJvdzogVDtcbiAgICAgICAgICBuZXdWYWx1ZTogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogXCJvcGVuLW1hcC1jaGFuZ2VkXCI7IG5ld1ZhbHVlOiBNYXA8c3RyaW5nLCBib29sZWFuPiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlUmVkdWNlcjxUPihzdGF0ZTogVHJlZVRhYmxlU3RhdGU8VD4sIGFjdGlvbjogVHJlZVRhYmxlQWN0aW9uPFQ+KTogVHJlZVRhYmxlU3RhdGU8VD4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInNvcnQtY29sdW1uXCI6XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmRpcmVjdGlvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc29ydE9uOiB1bmRlZmluZWQgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRPbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBhY3Rpb24uZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwicm93LWV4cGFuZFwiOlxuICAgICAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLm9wZW5NYXApIHJldHVybiB7IC4uLnN0YXRlIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3RhdGUub3Blbk1hcC5rZXlzKCkpIG5ld01hcC5zZXQoaywgc3RhdGUub3Blbk1hcC5nZXQoaykhKTtcbiAgICAgICAgICAgIG5ld01hcC5zZXQoc3RhdGUuaWQoYWN0aW9uLnJvdyksIGFjdGlvbi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3Blbk1hcDogbmV3TWFwIH07XG4gICAgICAgIGNhc2UgXCJvcGVuLW1hcC1jaGFuZ2VkXCI6XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3Blbk1hcDogYWN0aW9uLm5ld1ZhbHVlIH07XG4gICAgfVxuICAgIGNvbnNvbGUud2FybihcImRhdGFjb3JlOiBFbmNvdW50ZXJlZCB1bnJlY29nbml6ZWQgb3BlcmF0aW9uOiBcIiArIChhY3Rpb24gYXMgVHJlZVRhYmxlQWN0aW9uPFQ+KS50eXBlKTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmVlVGFibGVEaXNwYXRjaDxUPihcbiAgICBpbml0aWFsOiBUcmVlVGFibGVTdGF0ZTxUPiB8ICgoKSA9PiBUcmVlVGFibGVTdGF0ZTxUPilcbik6IFtUcmVlVGFibGVTdGF0ZTxUPiwgRGlzcGF0Y2g8VHJlZVRhYmxlQWN0aW9uPFQ+Pl0ge1xuICAgIGNvbnN0IGluaXQgPSB1c2VNZW1vKCgpID0+ICh0eXBlb2YgaW5pdGlhbCA9PSBcImZ1bmN0aW9uXCIgPyBpbml0aWFsKCkgOiBpbml0aWFsKSwgW10pO1xuICAgIHJldHVybiB1c2VSZWR1Y2VyKHRyZWVUYWJsZVJlZHVjZXIgYXMgUmVkdWNlcjxUcmVlVGFibGVTdGF0ZTxUPiwgVHJlZVRhYmxlQWN0aW9uPFQ+PiwgaW5pdCk7XG59XG5cbmV4cG9ydCB0eXBlIFJvd0V4cGFuc2lvbkNvbnRleHRUeXBlPFQ+ID0ge1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxUcmVlVGFibGVBY3Rpb248VD4+O1xuICAgIG9wZW5NYXA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIGlkOiAob2JqOiBUKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgRVhQQU5ERURfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Um93RXhwYW5zaW9uQ29udGV4dFR5cGU8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCkge1xuICAgIHJldHVybiBFWFBBTkRFRF9DT05URVhUIGFzIENvbnRleHQ8Um93RXhwYW5zaW9uQ29udGV4dFR5cGU8VD4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlSGVhZGVyQ2VsbDxUPih7XG4gICAgY29sdW1uLFxuICAgIHNvcnQsXG4gICAgc29ydGFibGUsXG59OiB7XG4gICAgY29sdW1uOiBUcmVlVGFibGVDb2x1bW48VD47XG4gICAgc29ydD86IFNvcnREaXJlY3Rpb247XG4gICAgc29ydGFibGU6IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgeyBkaXNwYXRjaCB9ID0gdXNlQ29udGV4dChUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpKTtcbiAgICBjb25zdCBoZWFkZXI6IHN0cmluZyB8IFZOb2RlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghY29sdW1uLnRpdGxlKSByZXR1cm4gY29sdW1uLmlkO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uLnRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb2x1bW4udGl0bGUoKTtcbiAgICAgICAgZWxzZSByZXR1cm4gY29sdW1uLnRpdGxlO1xuICAgIH0sIFtjb2x1bW4uaWQsIGNvbHVtbi50aXRsZV0pO1xuXG4gICAgY29uc3Qgc29ydENsaWNrZWQgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKF9ldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvcnQgPT0gdW5kZWZpbmVkKSBkaXNwYXRjaCh7IHR5cGU6IFwic29ydC1jb2x1bW5cIiwgY29sdW1uOiBjb2x1bW4uaWQsIGRpcmVjdGlvbjogXCJhc2NlbmRpbmdcIiB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHNvcnQgPT0gXCJhc2NlbmRpbmdcIikgZGlzcGF0Y2goeyB0eXBlOiBcInNvcnQtY29sdW1uXCIsIGNvbHVtbjogY29sdW1uLmlkLCBkaXJlY3Rpb246IFwiZGVzY2VuZGluZ1wiIH0pO1xuICAgICAgICAgICAgZWxzZSBkaXNwYXRjaCh7IHR5cGU6IFwic29ydC1jb2x1bW5cIiwgY29sdW1uOiBjb2x1bW4uaWQsIGRpcmVjdGlvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbY29sdW1uLmlkXVxuICAgICk7XG5cbiAgICBjb25zdCByZWFsV2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiAoY29sdW1uLndpZHRoID09PSBcIm1pbmltdW1cIiA/IFwiMXB4XCIgOiBjb2x1bW4ud2lkdGggPT09IFwibWF4aW11bVwiID8gXCJhdXRvXCIgOiBjb2x1bW4ud2lkdGggKyBcInB4XCIpLFxuICAgICAgICBbY29sdW1uLndpZHRoXVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRoIHdpZHRoPXtyZWFsV2lkdGh9IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICB7c29ydGFibGUgJiYgPFNvcnRCdXR0b24gY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtc29ydFwiIGRpcmVjdGlvbj17c29ydH0gb25DbGljaz17c29ydENsaWNrZWR9IC8+fVxuICAgICAgICAgICAgICAgIDxkaXYgb25DbGljaz17c29ydENsaWNrZWR9IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZUdyb3VwSGVhZGVyPFQ+KHtcbiAgICBsZXZlbCxcbiAgICB2YWx1ZSxcbiAgICB3aWR0aCxcbiAgICBjb25maWcsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB2YWx1ZTogR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgY29uZmlnPzogR3JvdXBpbmdDb25maWc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG59KSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHJhd1JlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZz8ucmVuZGVyKSByZXR1cm4gY29uZmlnLnJlbmRlcih2YWx1ZS5rZXksIHZhbHVlLnJvd3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgICAgICAgPExpdCBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e3RydWV9IHZhbHVlPXt2YWx1ZS5rZXl9IC8+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICk7XG4gICAgfSwgW2NvbmZpZz8ucmVuZGVyLCB2YWx1ZS5rZXksIHZhbHVlLnJvd3NdKTtcbiAgICBjb25zdCByZW5kZXJhYmxlID0gdXNlQXNFbGVtZW50KHJhd1JlbmRlcmFibGUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgPHRkIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiBgJHtsZXZlbCAqIDEuMTJ9ZW1gIH19IGNvbFNwYW49e3dpZHRoICsgMX0+XG4gICAgICAgICAgICAgICAge3JlbmRlcmFibGV9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlUm93R3JvdXA8VD4oe1xuICAgIGxldmVsLFxuICAgIGNvbHVtbnMsXG4gICAgZWxlbWVudCxcbiAgICBncm91cGluZ3MsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICBjb2x1bW5zOiBUcmVlVGFibGVDb2x1bW48VD5bXTtcbiAgICBlbGVtZW50OiBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4gfCBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGdyb3VwaW5ncz86IEdyb3VwaW5nQ29uZmlnPFRyZWVUYWJsZVJvd0RhdGE8VD4+W107XG59KSB7XG4gICAgY29uc3QgeyBpZCB9ID0gdXNlQ29udGV4dChUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpKTtcbiAgICBjb25zdCBrZXlGbiA9IHVzZUtleUZuKGlkKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBpbmdzID8gTWF0aC5taW4oZ3JvdXBpbmdzLmxlbmd0aCAtIDEsIGxldmVsKSA6IDA7XG4gICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBncm91cGluZ0NvbmZpZyA9IGdyb3VwaW5ncyA/IGdyb3VwaW5nc1tncm91cEluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2tleUZuKGVsZW1lbnQpfT5cbiAgICAgICAgICAgICAgICA8VHJlZVRhYmxlR3JvdXBIZWFkZXIgbGV2ZWw9e2xldmVsfSB2YWx1ZT17ZWxlbWVudH0gd2lkdGg9e2NvbHVtbnMubGVuZ3RofSBjb25maWc9e2dyb3VwaW5nQ29uZmlnfSAvPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50LnJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFRyZWVUYWJsZVJvd0dyb3VwPFQ+IGxldmVsPXtsZXZlbCArIDF9IGNvbHVtbnM9e2NvbHVtbnN9IGVsZW1lbnQ9e3Jvd30gZ3JvdXBpbmdzPXtncm91cGluZ3N9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8VHJlZVRhYmxlUm93IHJvdz17ZWxlbWVudH0gY29sdW1ucz17Y29sdW1uc30gbGV2ZWw9e2xldmVsIC0gZ3JvdXBJbmRleCArIDF9IGtleT17a2V5Rm4oZWxlbWVudCl9IC8+O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZVJvd0V4cGFuZGVyPFQ+KHsgcm93LCBsZXZlbCB9OiB7IHJvdzogVDsgbGV2ZWw6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyBvcGVuTWFwLCBkaXNwYXRjaCwgaWQgfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3Qgb3BlbiA9IHVzZU1lbW8oKCkgPT4gb3Blbk1hcC5nZXQoaWQocm93KSkgPz8gZmFsc2UsIFtyb3csIG9wZW5NYXAsIG9wZW5NYXAuZ2V0KGlkKHJvdykpLCBkaXNwYXRjaF0pO1xuICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcInJvdy1leHBhbmRcIiwgcm93LCBuZXdWYWx1ZTogIW9wZW4gfSl9XG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogYCR7KGxldmVsIC0gMSkgKiAxLjEyNX1lbWAgfX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGF0YWNvcmUtY29sbGFwc2VyXCIsICFvcGVuID8gXCJpcy1jb2xsYXBzZWRcIiA6IHVuZGVmaW5lZCl9IGRpcj1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZnLWljb24gcmlnaHQtdHJpYW5nbGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhMMTIgMTdMMjEgOFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmVlVGFibGVSb3c8VD4oe1xuICAgIGxldmVsLFxuICAgIHJvdyxcbiAgICBjb2x1bW5zLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgcm93OiBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGNvbHVtbnM6IFRyZWVUYWJsZUNvbHVtbjxUPltdO1xufSkge1xuICAgIGNvbnN0IHsgb3Blbk1hcCwgaWQgfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3Qgb3BlbiA9IHVzZU1lbW8oKCkgPT4gb3Blbk1hcC5nZXQoaWQocm93LnZhbHVlKSksIFtvcGVuTWFwLCBvcGVuTWFwLmdldChpZChyb3cudmFsdWUpKSwgcm93LCByb3cudmFsdWVdKTtcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IHVzZU1lbW8oKCkgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCA+IDAsIFtyb3csIHJvdy5jaGlsZHJlbiwgcm93LnZhbHVlXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgIHtoYXNDaGlsZHJlbiA/IDxUcmVlVGFibGVSb3dFeHBhbmRlcjxUPiBsZXZlbD17bGV2ZWx9IHJvdz17cm93LnZhbHVlfSAvPiA6IDx0ZD48L3RkPn1cbiAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VHJlZVRhYmxlUm93Q2VsbDxUPiByb3c9e3Jvd30gY29sdW1uPXtjb2x9IGxldmVsPXtsZXZlbH0gaXNGaXJzdD17aSA9PSAwfSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIHtvcGVuXG4gICAgICAgICAgICAgICAgPyByb3cuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVSb3cgcm93PXtjaGlsZH0gY29sdW1ucz17Y29sdW1uc30gbGV2ZWw9e2xldmVsICsgMX0ga2V5PXtpZChjaGlsZC52YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlUm93Q2VsbDxUPih7XG4gICAgcm93LFxuICAgIGNvbHVtbixcbiAgICBsZXZlbCxcbiAgICBpc0ZpcnN0ID0gZmFsc2UsXG59OiB7XG4gICAgcm93OiBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGNvbHVtbjogVHJlZVRhYmxlQ29sdW1uPFQ+O1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgaXNGaXJzdDogYm9vbGVhbjtcbn0pIHtcbiAgICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCkgPT4gY29sdW1uLnZhbHVlKHJvdy52YWx1ZSksIFtyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSwgY29sdW1uLnZhbHVlKHJvdy52YWx1ZSldKTtcbiAgICBjb25zdCB1cGRhdGVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICh2OiBMaXRlcmFsKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4ub25VcGRhdGUgJiYgY29sdW1uLm9uVXBkYXRlKHYsIHJvdy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt2YWx1ZSwgcm93LnZhbHVlXVxuICAgICk7XG4gICAgY29uc3QgW2VkaXRhYmxlU3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8dHlwZW9mIHZhbHVlPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB1cGRhdGVyOiAodikgPT4gY29sdW1uLm9uVXBkYXRlICYmIGNvbHVtbi5vblVwZGF0ZSh2LCByb3cudmFsdWUpLFxuICAgIH0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHZhbHVlIH0pO1xuICAgIH0sIFt2YWx1ZSwgdXBkYXRlcl0pO1xuICAgIGxldCByZW5kZXJlZENvbHVtbiA9IGNvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGVkaXRhYmxlU3RhdGUuY29udGVudCwgcm93LnZhbHVlKSA6IHZhbHVlO1xuICAgIGNvbnN0IHJlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHJlbmRlcmVkQ29sdW1uICYmIHR5cGVvZiByZW5kZXJlZENvbHVtbiA9PSBcIm9iamVjdFwiICYmIFwicHJvcHNcIiBpbiByZW5kZXJlZENvbHVtbilcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlbmRlcmVkQ29sdW1uLCB7IHByb3BzOiBPYmplY3QuYXNzaWduKHJlbmRlcmVkQ29sdW1uLnByb3BzLCB7IGRpc3BhdGNoIH0pIH0pO1xuICAgICAgICBlbHNlIHJldHVybiByZW5kZXJlZENvbHVtbjtcbiAgICB9LCBbY29sdW1uLnJlbmRlciwgdmFsdWUsIGVkaXRhYmxlU3RhdGUuY29udGVudCwgcmVuZGVyZWRDb2x1bW4sIHJvdy52YWx1ZSwgdXBkYXRlcl0pO1xuXG4gICAgY29uc3QgcmVuZGVyZWQgPSB1c2VBc0VsZW1lbnQocmVuZGVyYWJsZSk7XG5cbiAgICBjb25zdCBFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGU7XG4gICAgICAgIGlmIChjb2x1bW4uZWRpdGFibGUgJiYgY29sdW1uLmVkaXRvcikgZSA9IGNvbHVtbi5lZGl0b3IoZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cudmFsdWUpO1xuICAgICAgICBlbHNlIGUgPSBudWxsO1xuICAgICAgICBpZiAoZSkgcmV0dXJuIE9iamVjdC5hc3NpZ24oZSwgeyBwcm9wczogT2JqZWN0LmFzc2lnbihlLnByb3BzLCB7IGRpc3BhdGNoIH0pIH0pO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9LCBbY29sdW1uLmVkaXRvciwgY29sdW1uLmVkaXRhYmxlLCBlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJvdy52YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogaXNGaXJzdCA/IGAkeyhsZXZlbCAtIDEpICogMS4yfWVtYCA6IHVuZGVmaW5lZCB9fVxuICAgICAgICAgICAgb25EYmxDbGljaz17KCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIWVkaXRhYmxlU3RhdGUuaXNFZGl0aW5nIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtY2VsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHtjb2x1bW4uZWRpdGFibGUgPyAoXG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlPHR5cGVvZiB2YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcj17RWRpdG9yfVxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPXtlZGl0YWJsZVN0YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkXG4gICAgICAgICAgICApfVxuICAgICAgICA8L3RkPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVkVHJlZVRhYmxlVmlldzxUPihcbiAgICBwcm9wczogVHJlZVRhYmxlU3RhdGU8VD4gJiBUcmVlVGFibGVQcm9wczxUPiAmIHsgZGlzcGF0Y2g6IERpc3BhdGNoPFRyZWVUYWJsZUFjdGlvbjxUPj4gfVxuKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHVzZUludGVybmluZyhwcm9wcy5jb2x1bW5zLCAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT0gYltpbmRleF0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRvdGFsRWxlbWVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0dyb3VwaW5nKHByb3BzLnJvd3MpKSByZXR1cm4gR3JvdXBpbmdzLmNvdW50KHByb3BzLnJvd3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMucm93cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKHB2LCBjdikgPT4gcHYgKyBUcmVlVXRpbHMuY291bnRJblRyZWVSb3coVHJlZVV0aWxzLm9mTm9kZShjdiwgcHJvcHMuY2hpbGRTZWxlY3RvcikpLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgfSwgW3Byb3BzLnJvd3NdKTtcbiAgICBjb25zdCB0YWJsZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gICAgY29uc3QgcGFnaW5nID0gdXNlRGF0YWNvcmVQYWdpbmcoe1xuICAgICAgICBpbml0aWFsUGFnZTogMCxcbiAgICAgICAgcGFnaW5nOiBwcm9wcy5wYWdpbmcsXG4gICAgICAgIHNjcm9sbE9uUGFnZUNoYW5nZTogcHJvcHMuc2Nyb2xsT25QYWdpbmcsXG4gICAgICAgIGVsZW1lbnRzOiB0b3RhbEVsZW1lbnRzLFxuICAgICAgICBjb250YWluZXI6IHRhYmxlUmVmLFxuICAgIH0pO1xuICAgIGNvbnN0IHJhd1NvcnRzID0gdXNlSW50ZXJuaW5nKHByb3BzLnNvcnRPbiwgKGEsIGIpID0+IExpdGVyYWxzLmNvbXBhcmUoYSwgYikgPT0gMCk7XG4gICAgY29uc3Qgc29ydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJhd1NvcnRzPy5maWx0ZXIoKHNvcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT0gc29ydC5pZCk7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uICYmIChjb2x1bW4uc29ydGFibGUgPz8gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtjb2x1bW5zLCByYXdTb3J0c10pO1xuICAgIGNvbnN0IGdyb3VwaW5ncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzLmdyb3VwaW5ncykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIHByb3BzLmdyb3VwaW5ncztcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbihwcm9wcy5ncm91cGluZ3MpKSByZXR1cm4gW3sgcmVuZGVyOiBwcm9wcy5ncm91cGluZ3MgfV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtwcm9wcy5ncm91cGluZ3NdO1xuICAgIH0sIFtwcm9wcy5ncm91cGluZ3NdKTtcbiAgICBjb25zdCByYXdSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghR3JvdXBpbmdzLmlzR3JvdXBpbmcocHJvcHMucm93cykpIHJldHVybiBUcmVlVXRpbHMub2ZBcnJheShwcm9wcy5yb3dzLCBwcm9wcy5jaGlsZFNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuIFRyZWVVdGlscy5vZkdyb3VwaW5nKHByb3BzLnJvd3MsIHByb3BzLmNoaWxkU2VsZWN0b3IpO1xuICAgIH0sIFtwcm9wcy5yb3dzXSk7XG4gICAgY29uc3Qgcm93cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc29ydHMgPT0gdW5kZWZpbmVkIHx8IHNvcnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gcmF3Um93cztcbiAgICAgICAgY29uc3QgY29tcGFyYXRvcnMgPSBzb3J0cy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnMuZmluZCgoeSkgPT4geS5pZCA9PSB4LmlkKSE7XG4gICAgICAgICAgICBjb25zdCBjb21wID0gY29sPy5jb21wYXJhdG9yID8/IERFRkFVTFRfVEFCTEVfQ09NUEFSQVRPUjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm46IGNvbXAsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB4LmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZTogY29sLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUcmVlVXRpbHMuc29ydDxULCBMaXRlcmFsPihyYXdSb3dzLCBjb21wYXJhdG9ycykgYXMgR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgfSwgW3Jhd1Jvd3MsIHNvcnRzXSk7XG5cbiAgICBjb25zdCBwYWdlZFJvd3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHBhZ2luZy5lbmFibGVkKVxuICAgICAgICAgICAgcmV0dXJuIFRyZWVVdGlscy5zbGljZShyb3dzLCBwYWdpbmcucGFnZSAqIHBhZ2luZy5wYWdlU2l6ZSwgKHBhZ2luZy5wYWdlICsgMSkgKiBwYWdpbmcucGFnZVNpemUpO1xuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9LCBbcGFnaW5nLnBhZ2UsIHBhZ2luZy5wYWdlU2l6ZSwgcGFnaW5nLmVuYWJsZWQsIHByb3BzLnJvd3MsIHJvd3NdKTtcblxuICAgIGNvbnN0IGtleUZuID0gdXNlS2V5Rm4ocHJvcHMuaWQsIHBhZ2VkUm93cyk7XG4gICAgY29uc3QgQ29udGV4dCA9IFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb3Blbk1hcDogcHJvcHMub3Blbk1hcCEsIGRpc3BhdGNoOiBwcm9wcy5kaXNwYXRjaCwgaWQ6IHByb3BzLmlkIH19PlxuICAgICAgICAgICAgPGRpdiByZWY9e3RhYmxlUmVmfT5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtaGVhZGVyLWNlbGxcIiB3aWR0aD1cIjFweFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKCh4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVIZWFkZXJDZWxsPFQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0PXtwcm9wcy5zb3J0T24/LmZpbmQoKHMpID0+IHMuaWQgPT09IHguaWQpPy5kaXJlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW49e3h9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZT17eC5zb3J0YWJsZSA/PyB0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhZ2VkUm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVSb3dHcm91cDxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtyb3d9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ3M9e2dyb3VwaW5nc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrZXlGbihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIHtwYWdpbmcuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxDb250cm9sbGVkUGFnZXIgcGFnZT17cGFnaW5nLnBhZ2V9IHRvdGFsUGFnZXM9e3BhZ2luZy50b3RhbFBhZ2VzfSBzZXRQYWdlPXtwYWdpbmcuc2V0UGFnZX0gLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlVmlldzxUPihwcm9wczogVHJlZVRhYmxlUHJvcHM8VD4pIHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVRyZWVUYWJsZURpc3BhdGNoPFQ+KHtcbiAgICAgICAgc29ydE9uOiBwcm9wcy5zb3J0T24gPz8gW10sXG4gICAgICAgIGlkOiBwcm9wcy5pZCA/IHByb3BzLmlkIDogKHgpID0+ICh4IGFzIEluZGV4YWJsZSkuJGlkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVmU3RhdGUgPSB1c2VNZW1vKCgpID0+IHVzZVJlZihzdGF0ZSksIFtzdGF0ZV0pO1xuICAgIGlmIChzdGF0ZS5vcGVuTWFwICE9PSB1bmRlZmluZWQpIHJlZlN0YXRlLmN1cnJlbnQgPSBzdGF0ZTtcbiAgICBlbHNlIHJlZlN0YXRlLmN1cnJlbnQub3Blbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJvcGVuLW1hcC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiByZWZTdGF0ZS5jdXJyZW50Lm9wZW5NYXAgPz8gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCkgfSk7XG4gICAgfSwgW2Rpc3BhdGNoXSk7XG4gICAgZGVsZXRlIHByb3BzLnNvcnRPbjtcbiAgICByZXR1cm4gPENvbnRyb2xsZWRUcmVlVGFibGVWaWV3PFQ+IGRpc3BhdGNoPXtkaXNwYXRjaH0gey4uLnN0YXRlfSB7Li4ucHJvcHN9IC8+O1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuaW1wb3J0IHsgRGF0YWNvcmVBcGkgfSBmcm9tIFwiYXBpL2FwaVwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBJbmRleFF1ZXJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBNYXJrZG93blBhZ2UsIE1hcmtkb3duVGFza0l0ZW0gfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgdXNlRmlsZU1ldGFkYXRhLCB1c2VGdWxsUXVlcnksIHVzZUluZGV4VXBkYXRlcywgdXNlSW50ZXJuaW5nLCB1c2VRdWVyeSB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0ICogYXMgbHV4b24gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgKiBhcyBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0ICogYXMgaG9va3MgZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4vcmVzdWx0XCI7XG5pbXBvcnQgeyBHcm91cCwgU3RhY2sgfSBmcm9tIFwiLi91aS9sYXlvdXRcIjtcbmltcG9ydCB7IEVtYmVkLCBMaW5lU3BhbkVtYmVkIH0gZnJvbSBcImFwaS91aS9lbWJlZFwiO1xuaW1wb3J0IHsgQ1VSUkVOVF9GSUxFX0NPTlRFWFQsIExpdCwgTWFya2Rvd24sIE9ic2lkaWFuTGluayB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBMaXRlcmFsIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgQnV0dG9uLCBDaGVja2JveCwgSWNvbiwgU2xpZGVyLCBTd2l0Y2gsIFRleHRib3gsIFZhbmlsbGFTZWxlY3QgfSBmcm9tIFwiLi91aS9iYXNpY3NcIjtcbmltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSBcIi4vdWkvdmlld3MvdGFza1wiO1xuaW1wb3J0IHsgVmFuaWxsYVRhYmxlIH0gZnJvbSBcIi4vdWkvdmlld3MvdGFibGVcIjtcbmltcG9ydCB7IENhbGxvdXQgfSBmcm9tIFwiLi91aS92aWV3cy9jYWxsb3V0XCI7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSBcIi4vdWkvdmlld3MvY2FyZHNcIjtcbmltcG9ydCB7IERhdGFBcnJheSB9IGZyb20gXCIuL2RhdGEtYXJyYXlcIjtcbmltcG9ydCB7IENvZXJjZSB9IGZyb20gXCIuL2NvZXJjZVwiO1xuaW1wb3J0IHsgU2NyaXB0Q2FjaGUgfSBmcm9tIFwiLi9zY3JpcHQtY2FjaGVcIjtcbmltcG9ydCB7IHNldFRhc2tUZXh0LCB1c2VTZXRGaWVsZCB9IGZyb20gXCJ1dGlscy9maWVsZHNcIjtcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlZEVkaXRhYmxlVGV4dEZpZWxkLFxuICAgIEZpZWxkQ2hlY2tib3gsXG4gICAgRWRpdGFibGVUZXh0RmllbGQsXG4gICAgRmllbGRTbGlkZXIsXG4gICAgRmllbGRTZWxlY3QsXG4gICAgRmllbGRTd2l0Y2gsXG59IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGUtZmllbGRzXCI7XG5pbXBvcnQgeyBjb21wbGV0ZVRhc2sgfSBmcm9tIFwidXRpbHMvdGFza1wiO1xuaW1wb3J0IHsgVHJlZVRhYmxlVmlldyB9IGZyb20gXCIuL3VpL3ZpZXdzL3RyZWUtdGFibGVcIjtcblxuLyoqIExvY2FsIEFQSSBwcm92aWRlZCB0byBzcGVjaWZpYyBjb2RlYmxvY2tzIHdoZW4gdGhleSBhcmUgZXhlY3V0aW5nLlxuICogQGdyb3VwIENvcmVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFjb3JlTG9jYWxBcGkge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzY3JpcHRDYWNoZTogU2NyaXB0Q2FjaGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGFwaTogRGF0YWNvcmVBcGksIHB1YmxpYyBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zY3JpcHRDYWNoZSA9IG5ldyBTY3JpcHRDYWNoZSh0aGlzLmNvcmUuZGF0YXN0b3JlKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgZmlsZSBwYXRoIGZvciB0aGUgbG9jYWwgQVBJLiAqL1xuICAgIHB1YmxpYyBjdXJyZW50UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZnVsbCBtYXJrZG93biBmaWxlIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBmaWxlLiAqL1xuICAgIHB1YmxpYyBjdXJyZW50RmlsZSgpOiBNYXJrZG93blBhZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucGFnZSh0aGlzLnBhdGgpITtcbiAgICB9XG5cbiAgICAvKiogR2V0IGFjZXNzIHRvIGx1eG9uIGZ1bmN0aW9ucy4gKi9cbiAgICBnZXQgbHV4b24oKTogdHlwZW9mIGx1eG9uIHtcbiAgICAgICAgcmV0dXJuIGx1eG9uO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWNjZXNzIHRvIHByZWFjdCBmdW5jdGlvbnMuICovXG4gICAgZ2V0IHByZWFjdCgpOiB0eXBlb2YgcHJlYWN0IHtcbiAgICAgICAgcmV0dXJuIHByZWFjdDtcbiAgICB9XG5cbiAgICAvKiogQ2VudHJhbCBPYnNpZGlhbiBhcHAgb2JqZWN0LiAqL1xuICAgIGdldCBhcHAoKTogQXBwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5hcHA7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBpbnRlcm5hbCBwbHVnaW4gY2VudHJhbCBkYXRhc3RydWN0dXJlLiAqL1xuICAgIGdldCBjb3JlKCk6IERhdGFjb3JlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmNvcmU7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2NyaXB0IGxvYWRpbmcgdXRpbGl0aWVzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBsb2FkIGEgamF2YXNjcmlwdCBibG9jayBmcm9tIHRoZSBnaXZlbiBwYXRoIG9yIGxpbms7IHlvdSBjYW4gZWl0aGVyIGxvYWQgZnJvbSBKUy9UUy9KU1gvVFNYIGZpbGVzXG4gICAgICogZGlyZWN0bHksIG9yIGZyb20gY29kZWJsb2NrcyBieSBsb2FkaW5nIGZyb20gdGhlIHNlY3Rpb24gdGhlIGNvZGVibG9jayBpcyBpbnNpZGUgb2YuIFRoZXJlIGFyZSBhIGZldyBzdGlwdWxhdGlvbnNcbiAgICAgKiB0byBsb2FkaW5nOlxuICAgICAqIC0gWW91IGNhbm5vdCBsb2FkIGN5Y2xpY2FsIGRlcGVuZGVuY2llcy5cbiAgICAgKiAtIFRoaXMgaXMgc2ltaWxhciB0byB2YW5pbGxhIGpzIGByZXF1aXJlKClgLCBub3QgYGltcG9ydCAuLi4gYC4gWW91ciBzY3JpcHRzIHlvdSBhcmUgcmVxdWlyaW5nIG5lZWQgdG8gZXhwbGljaXRseVxuICAgICAqICAgcmV0dXJuIHRoZSB0aGluZ3MgdGhleSBhcmUgZXhwb3J0aW5nLCBsaWtlIHRoZSBleGFtcGxlIGJlbG93LiBUaGUgYGV4cG9ydGAga2V5d29yZCBkb2VzIG5vdCB3b3JrLlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBmdW5jdGlvbiBNeUVsZW1lbnQoKSB7XG4gICAgICogIC4uLlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHJldHVybiB7IE15RWxlbWVudCB9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyByZXF1aXJlKHBhdGg6IHN0cmluZyB8IExpbmspOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNjcmlwdENhY2hlLmxvYWQocGF0aCwgeyBkYzogdGhpcyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gR2VuZXJhbCB1dGlsaXRpZXMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIFV0aWxpdGllcyBmb3IgY29lcmNpbmcgdHlwZXMgaW50byBvbmUgc3BlY2lmaWMgdHlwZSBmb3IgZWFzaWVyIHByb2dyYW1taW5nLiAqL1xuICAgIHB1YmxpYyBjb2VyY2UgPSBDb2VyY2U7XG5cbiAgICAvKiogUmVzb2x2ZSBhIGxvY2FsIG9yIGFic29sdXRlIHBhdGggb3IgbGluayB0byBhbiBhYnNvbHV0ZSBwYXRoLiAqL1xuICAgIHB1YmxpYyByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcgfCBMaW5rLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc29sdmVQYXRoKHBhdGgsIHNvdXJjZVBhdGggPz8gdGhpcy5wYXRoKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogUmVzdWx0PEluZGV4UXVlcnksIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkudHJ5UGFyc2VRdWVyeShxdWVyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gcXVlcnksIHRocm93aW5nIGFuIGVycm9yIGlmIGl0IGlzIGludmFsaWQuICovXG4gICAgcHVibGljIHBhcnNlUXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBJbmRleFF1ZXJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UGFyc2VRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKGUpID0+IFwiRmFpbGVkIHRvIHBhcnNlIHF1ZXJ5OiBcIiArIGUpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBmaWxlIGxpbmsgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIHBhdGguICovXG4gICAgcHVibGljIGZpbGVMaW5rKHBhdGg6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgaGVhZGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuICovXG4gICAgcHVibGljIGhlYWRlckxpbmsocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5oZWFkZXIocGF0aCwgaGVhZGVyKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIGJsb2NrIHdpdGggdGhlIGdpdmVuIHBhdGggYW5kIGJsb2NrIElELiAqL1xuICAgIHB1YmxpYyBibG9ja0xpbmsocGF0aDogc3RyaW5nLCBibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHBhdGgsIGJsb2NrKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBsaW5rLCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpcyBpbnZhbGlkLiAqL1xuICAgIHB1YmxpYyBwYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucGFyc2VMaW5rKGxpbmt0ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIGEgbGluaywgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IFJlc3VsdDxMaW5rLCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnRyeVBhcnNlTGluayhsaW5rdGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGRhdGEgYXJyYXkgZnJvbSBhIHJlZ3VsYXIgYXJyYXkuICovXG4gICAgcHVibGljIGFycmF5PFQ+KGlucHV0OiBUW10gfCBEYXRhQXJyYXk8VD4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gRGF0YUFycmF5LndyYXAoaW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHRoZSB0ZXh0IG9mIGEgZ2l2ZW4gdGFzayBwcm9ncmFtbWF0aWNhbGx5LiAqL1xuXG4gICAgcHVibGljIHNldFRhc2tUZXh0KG5ld1RleHQ6IHN0cmluZywgdGFzazogTWFya2Rvd25UYXNrSXRlbSk6IHZvaWQge1xuICAgICAgICBzZXRUYXNrVGV4dCh0aGlzLmFwcCwgdGhpcy5jb3JlLCBuZXdUZXh0LCB0YXNrKTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBnaXZlbiB0YXNrIHByb2dyYW1tYXRpY2FsbHkuICovXG4gICAgcHVibGljIHNldFRhc2tDb21wbGV0aW9uKGNvbXBsZXRlZDogYm9vbGVhbiwgdGFzazogTWFya2Rvd25UYXNrSXRlbSk6IHZvaWQge1xuICAgICAgICBjb21wbGV0ZVRhc2soY29tcGxldGVkLCB0YXNrLCB0aGlzLmFwcC52YXVsdCwgdGhpcy5jb3JlKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vXG4gICAgLy8gIEhvb2tzICAvL1xuICAgIC8vLy8vLy8vLy8vLy9cblxuICAgIC8vIEV4cG9ydCB0aGUgY29tbW9uIHByZWFjdCBob29rcyBmb3IgcGVvcGxlIHRvIHVzZSB2aWEgYGRjLmA6XG4gICAgcHVibGljIHVzZVN0YXRlID0gaG9va3MudXNlU3RhdGU7XG4gICAgcHVibGljIHVzZUNhbGxiYWNrID0gaG9va3MudXNlQ2FsbGJhY2s7XG4gICAgcHVibGljIHVzZVJlZHVjZXIgPSBob29rcy51c2VSZWR1Y2VyO1xuICAgIHB1YmxpYyB1c2VNZW1vID0gaG9va3MudXNlTWVtbztcbiAgICBwdWJsaWMgdXNlRWZmZWN0ID0gaG9va3MudXNlRWZmZWN0O1xuICAgIHB1YmxpYyBjcmVhdGVDb250ZXh0ID0gcHJlYWN0LmNyZWF0ZUNvbnRleHQ7XG4gICAgcHVibGljIHVzZUNvbnRleHQgPSBob29rcy51c2VDb250ZXh0O1xuICAgIHB1YmxpYyB1c2VSZWYgPSBob29rcy51c2VSZWY7XG4gICAgcHVibGljIHVzZUludGVybmluZyA9IHVzZUludGVybmluZztcbiAgICBwdWJsaWMgdXNlU2V0RmllbGQgPSB1c2VTZXRGaWVsZDtcblxuICAgIC8qKiBNZW1vaXplIHRoZSBpbnB1dCBhdXRvbWF0aWNhbGx5IGFuZCBwcm9jZXNzIGl0IHVzaW5nIGEgRGF0YSBBcnJheTsgcmV0dXJucyBhIHZhbmlsbGEgYXJyYXkgYmFjay4gKi9cbiAgICBwdWJsaWMgdXNlQXJyYXk8VCwgVT4oaW5wdXQ6IFRbXSB8IERhdGFBcnJheTxUPiwgcHJvY2VzczogKGRhdGE6IERhdGFBcnJheTxUPikgPT4gRGF0YUFycmF5PFU+LCBkZXBzPzogYW55W10pOiBVW10ge1xuICAgICAgICByZXR1cm4gaG9va3MudXNlTWVtbygoKSA9PiBwcm9jZXNzKERhdGFBcnJheS53cmFwKGlucHV0KSkuYXJyYXkoKSwgW2lucHV0LCAuLi4oZGVwcyA/PyBbXSldKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBmaWxlIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBmaWxlLiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHZpZXcgd2hlbiB0aGUgY3VycmVudCBmaWxlIG1ldGFkYXRhIGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZUN1cnJlbnRGaWxlKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHVzZUZpbGVNZXRhZGF0YSh0aGlzLmNvcmUsIHRoaXMucGF0aCwgc2V0dGluZ3MpIGFzIE1hcmtkb3duUGFnZTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBjdXJyZW50IHBhdGguIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgdmlldyBpZiB0aGUgcGF0aCBjaGFuZ2VzICh0aG91Z2ggdGhhdCB3b3VsZCBiZSB3ZWlyZCkuICovXG4gICAgcHVibGljIHVzZUN1cnJlbnRQYXRoKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMudXNlQ3VycmVudEZpbGUoc2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4gbWV0YS4kcGF0aDtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBmaWxlIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGZpbGUuIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgdmlldyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZUZpbGUocGF0aDogc3RyaW5nLCBzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1c2VGaWxlTWV0YWRhdGEodGhpcy5jb3JlLCBwYXRoLCBzZXR0aW5ncykhO1xuICAgIH1cblxuICAgIC8qKiBBdXRvbWF0aWNhbGx5IHJlZnJlc2ggdGhlIHZpZXcgd2hlbmV2ZXIgdGhlIGluZGV4IHVwZGF0ZXM7IHJldHVybnMgdGhlIGxhdGVzdCBpbmRleCByZXZpc2lvbiBJRC4gKi9cbiAgICBwdWJsaWMgdXNlSW5kZXhVcGRhdGVzKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHVzZUluZGV4VXBkYXRlcyh0aGlzLmNvcmUsIHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gYSBxdWVyeSwgYXV0b21hdGljYWxseSByZS1ydW5uaW5nIGl0IHdoZW5ldmVyIHRoZSB2YXVsdCBjaGFuZ2VzLiBSZXR1cm5zIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5XG4gICAgICogZXhlY3V0aW9uLCBzdWNoIGFzIGluZGV4IHJldmlzaW9uIGFuZCB0b3RhbCBzZWFyY2ggZHVyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHVzZUZ1bGxRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiB7XG4gICAgICAgIHJldHVybiB1c2VGdWxsUXVlcnkodGhpcy5jb3JlLCB0aGlzLnBhcnNlUXVlcnkocXVlcnkpLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFJ1biBhIHF1ZXJ5LCBhdXRvbWF0aWNhbGx5IHJlLXJ1bm5pbmcgaXQgd2hlbmV2ZXIgdGhlIHZhdWx0IGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IEluZGV4YWJsZVtdIHtcbiAgICAgICAgLy8gSG9va3MgbmVlZCB0byBiZSBjYWxsZWQgaW4gYSBjb25zaXN0ZW50IG9yZGVyLCBzbyB3ZSBkb24ndCBuZXN0IHRoZSBgdXNlUXVlcnlgIGNhbGwgaW4gdGhlIERhdGFBcnJheS53cmFwIF9qdXN0XyBpbiBjYXNlLlxuICAgICAgICByZXR1cm4gdXNlUXVlcnkodGhpcy5jb3JlLCB0aGlzLnBhcnNlUXVlcnkocXVlcnkpLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVmlzdWFsIEVsZW1lbnRzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKiogVmVydGljYWwgZmxleGJveCBjb250YWluZXI7IGdvb2QgZm9yIHB1dHRpbmcgaXRlbXMgdG9nZXRoZXIgaW4gYSBjb2x1bW4uICovXG4gICAgcHVibGljIFN0YWNrID0gU3RhY2s7XG4gICAgLyoqIEhvcml6b250YWwgZmxleGJveCBjb250YWluZXI7IGdvb2QgZm9yIHB1dHRpbmcgaXRlbXMgdG9nZXRoZXIgaW4gYSByb3cuICovXG4gICAgcHVibGljIEdyb3VwID0gR3JvdXA7XG5cbiAgICAvKiogUmVuZGVycyBhIGxpdGVyYWwgdmFsdWUgaW4gYSBwcmV0dHkgd2F5IHRoYXQgcmVzcGVjdHMgc2V0dGluZ3MuICovXG4gICAgcHVibGljIExpdGVyYWwgPSAoKHsgdmFsdWUsIHNvdXJjZVBhdGgsIGlubGluZSB9OiB7IHZhbHVlOiBMaXRlcmFsOyBzb3VyY2VQYXRoPzogc3RyaW5nOyBpbmxpbmU/OiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRTb3VyY2VQYXRoID0gaG9va3MudXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiA8TGl0IHZhbHVlPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aCA/PyBpbXBsaWNpdFNvdXJjZVBhdGggPz8gdGhpcy5wYXRofSBpbmxpbmU9e2lubGluZX0gLz47XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIG1hcmtkb3duIHVzaW5nIHRoZSBPYnNpZGlhbiBtYXJrZG93biByZW5kZXJlciwgb3B0aW9uYWxseSBhdHRhY2hpbmcgYWRkaXRpb25hbCBzdHlsZXMuICovXG4gICAgcHVibGljIE1hcmtkb3duID0gKCh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgIGlubGluZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICB9OiB7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgc291cmNlUGF0aD86IHN0cmluZztcbiAgICAgICAgaW5saW5lPzogYm9vbGVhbjtcbiAgICAgICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbXBsaWNpdFNvdXJjZVBhdGggPSBob29rcy51c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgc291cmNlUGF0aD17c291cmNlUGF0aCA/PyBpbXBsaWNpdFNvdXJjZVBhdGggPz8gdGhpcy5wYXRofVxuICAgICAgICAgICAgICAgIGlubGluZT17aW5saW5lfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgICAgICBjbHM9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIGFuIG9ic2lkaWFuLXN0eWxlIGxpbmsgZGlyZWN0bHkgYW5kIG1vcmUgZWZmaWVpY250bHkgdGhhbiByZW5kZXJpbmcgbWFya2Rvd24uICovXG4gICAgcHVibGljIExpbmsgPSBPYnNpZGlhbkxpbms7XG5cbiAgICAvKiogQ3JlYXRlIGEgdmFuaWxsYSBPYnNpZGlhbiBlbWJlZCBmb3IgdGhlIGdpdmVuIGxpbmsuICovXG4gICAgcHVibGljIExpbmtFbWJlZCA9ICgoe1xuICAgICAgICBsaW5rLFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIHNvdXJjZVBhdGgsXG4gICAgfToge1xuICAgICAgICBsaW5rOiBzdHJpbmcgfCBMaW5rO1xuICAgICAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgICAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVhbExpbmsgPSBob29rcy51c2VNZW1vKCgpID0+ICh0eXBlb2YgbGluayA9PT0gXCJzdHJpbmdcIiA/IExpbmsuZmlsZShsaW5rKSA6IGxpbmspLCBbbGlua10pO1xuICAgICAgICBjb25zdCBpbXBsaWNpdFNvdXJjZVBhdGggPSBob29rcy51c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFbWJlZFxuICAgICAgICAgICAgICAgIGxpbms9e3JlYWxMaW5rfVxuICAgICAgICAgICAgICAgIGlubGluZT17aW5saW5lID8/IGZhbHNlfVxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGggPz8gaW1wbGljaXRTb3VyY2VQYXRoID8/IHRoaXMucGF0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBDcmVhdGUgYW4gZXhwbGljaXQgJ3NwYW4nIGVtYmVkIHdoaWNoIGV4dHJhY3RzIGEgc3BhbiBvZiBsaW5lcyBmcm9tIGEgbWFya2Rvd24gZmlsZS4gKi9cbiAgICBwdWJsaWMgU3BhbkVtYmVkID0gKCh7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGV4cGxhaW4sXG4gICAgICAgIHNob3dFeHBsYWluLFxuICAgICAgICBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGgsXG4gICAgfToge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgICAgIGV4cGxhaW4/OiBzdHJpbmc7XG4gICAgICAgIHNob3dFeHBsYWluPzogYm9vbGVhbjtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfSkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBwYXRoIHRvIHRoZSBjb3JyZWN0IHBhdGggaWYgYSBzb3VyY2UgcGF0aCBpcyBwcm92aWRlZC5cbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyB0aGlzLnBhdGg7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGhvb2tzLnVzZU1lbW8oKCkgPT4gdGhpcy5yZXNvbHZlUGF0aChwYXRoLCBzb3VyY2VQYXRoKSwgW3BhdGgsIHNvdXJjZVBhdGhdKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPExpbmVTcGFuRW1iZWQgcGF0aD17cmVzb2x2ZWRQYXRofSBzdGFydD17c3RhcnR9IGVuZD17ZW5kfSBleHBsYWluPXtleHBsYWlufSBzaG93RXhwbGFpbj17c2hvd0V4cGxhaW59IC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIGFuIG9ic2lkaWFuIGx1Y2lkZSBpY29uLiAqL1xuICAgIHB1YmxpYyBJY29uID0gSWNvbjtcblxuICAgIC8vLy8vLy8vLy8vXG4gICAgLy8gVmlld3MgLy9cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgcHVibGljIFRhc2tMaXN0ID0gVGFza0xpc3Q7XG4gICAgcHVibGljIFZhbmlsbGFUYWJsZSA9IFZhbmlsbGFUYWJsZTtcbiAgICBwdWJsaWMgVHJlZVRhYmxlID0gVHJlZVRhYmxlVmlldztcbiAgICBwdWJsaWMgQ2FyZCA9IENhcmQ7XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJhdGl2ZSBlbGVtZW50cyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHB1YmxpYyBCdXR0b24gPSBCdXR0b247XG4gICAgcHVibGljIFRleHRib3ggPSBUZXh0Ym94O1xuICAgIHB1YmxpYyBDYWxsb3V0ID0gQ2FsbG91dDtcbiAgICBwdWJsaWMgQ2hlY2tib3ggPSBDaGVja2JveDtcbiAgICBwdWJsaWMgU2xpZGVyID0gU2xpZGVyO1xuICAgIHB1YmxpYyBTd2l0Y2ggPSBTd2l0Y2g7XG4gICAgcHVibGljIFZhbmlsbGFTZWxlY3QgPSBWYW5pbGxhU2VsZWN0O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vICAgIGZpZWxkIGVkaXRvcnMgICAgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgcHVibGljIEZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94O1xuICAgIHB1YmxpYyBGaWVsZFNsaWRlciA9IEZpZWxkU2xpZGVyO1xuICAgIHB1YmxpYyBGaWVsZFNlbGVjdCA9IEZpZWxkU2VsZWN0O1xuICAgIHB1YmxpYyBGaWVsZFN3aXRjaCA9IEZpZWxkU3dpdGNoO1xuICAgIHB1YmxpYyBUZXh0RmllbGQgPSBFZGl0YWJsZVRleHRGaWVsZDtcbiAgICBwdWJsaWMgVmFuaWxsYVRleHRCb3ggPSBDb250cm9sbGVkRWRpdGFibGVUZXh0RmllbGQ7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGFwaVxuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJpbmRleC9kYXRhc3RvcmVcIjtcbmltcG9ydCB7IFBSSU1JVElWRVMsIFFVRVJZIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBJbmRleFF1ZXJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBNYXJrZG93blBhZ2UgfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQXBwLCBDb21wb25lbnQsIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duUmVuZGVyQ2hpbGQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERhdGFjb3JlSlNSZW5kZXJlciB9IGZyb20gXCJ1aS9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBEYXRhY29yZUxvY2FsQXBpIH0gZnJvbSBcIi4vbG9jYWwtYXBpXCI7XG5pbXBvcnQgUGFyc2ltbW9uIGZyb20gXCJwYXJzaW1tb25cIjtcbmltcG9ydCB7IENvZXJjZSB9IGZyb20gXCIuL2NvZXJjZVwiO1xuaW1wb3J0IHsgRGF0YUFycmF5IH0gZnJvbSBcIi4vZGF0YS1hcnJheVwiO1xuaW1wb3J0ICogYXMgbHV4b24gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgKiBhcyBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuXG4vKiogRXh0ZXJhbGx5IHZpc2libGUgQVBJIGZvciBkYXRhY29yZS5cbiAqIEBncm91cCBDb3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZUFwaSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjb3JlOiBEYXRhY29yZSkge31cblxuICAgIC8qKiBHZXQgYWNlc3MgdG8gbHV4b24gZnVuY3Rpb25zLiAqL1xuICAgIGdldCBsdXhvbigpOiB0eXBlb2YgbHV4b24ge1xuICAgICAgICByZXR1cm4gbHV4b247XG4gICAgfVxuXG4gICAgLyoqIEdldCBhY2Nlc3MgdG8gcHJlYWN0IGZ1bmN0aW9ucy4gKi9cbiAgICBnZXQgcHJlYWN0KCk6IHR5cGVvZiBwcmVhY3Qge1xuICAgICAgICByZXR1cm4gcHJlYWN0O1xuICAgIH1cblxuICAgIC8qKiBDZW50cmFsIE9ic2lkaWFuIGFwcCBvYmplY3QuICovXG4gICAgZ2V0IGFwcCgpOiBBcHAge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmFwcDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbCBBUEkgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBsb2NhbCBBUEkgZm9yIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoLiAqL1xuICAgIHB1YmxpYyBsb2NhbChwYXRoOiBzdHJpbmcpOiBEYXRhY29yZUxvY2FsQXBpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhY29yZUxvY2FsQXBpKHRoaXMsIHBhdGgpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRdWVyeWluZyArIEZldGNoaW5nIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIExvYWQgYSBtYXJrZG93biBmaWxlIGJ5IGZ1bGwgcGF0aCBvciBsaW5rLiAqL1xuICAgIHB1YmxpYyBwYWdlKHBhdGg6IHN0cmluZyB8IExpbmspOiBNYXJrZG93blBhZ2UgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWFsUGF0aCA9IHBhdGggaW5zdGFuY2VvZiBMaW5rID8gcGF0aC5wYXRoIDogcGF0aDtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmRhdGFzdG9yZS5sb2FkKHJlYWxQYXRoKSBhcyBNYXJrZG93blBhZ2UgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgYWxsIHJlc3VsdHMuICovXG4gICAgcHVibGljIHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogSW5kZXhhYmxlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0ZSBhIHRleHR1YWwgb3IgdHlwZWQgaW5kZXggcXVlcnksIHJldHVybmluZyBhbGwgcmVzdWx0cy4gKi9cbiAgICBwdWJsaWMgdHJ5UXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBSZXN1bHQ8SW5kZXhhYmxlW10sIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlGdWxsUXVlcnkocXVlcnkpLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgcmVzdWx0cyBwbHVzIHBlcmZvcm1hbmNlIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBmdWxscXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeUZ1bGxRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0ZSBhIHRleHR1YWwgb3IgdHlwZWQgaW5kZXggcXVlcnksIHJldHVybmluZyByZXN1bHRzIHBsdXMgcGVyZm9ybWFuY2UgbWV0YWRhdGEuICovXG4gICAgcHVibGljIHRyeUZ1bGxRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gUVVFUlkucXVlcnkudHJ5UGFyc2UocXVlcnkpIDogcXVlcnk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcmUuZGF0YXN0b3JlLnNlYXJjaChwYXJzZWRRdWVyeSk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBHZW5lcmFsIHV0aWxpdGllcyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKiogVXRpbGl0aWVzIGZvciBjb2VyY2luZyB0eXBlcyBpbnRvIG9uZSBzcGVjaWZpYyB0eXBlIGZvciBlYXNpZXIgcHJvZ3JhbW1pbmcuICovXG4gICAgcHVibGljIGNvZXJjZSA9IENvZXJjZTtcblxuICAgIC8qKiBSZXNvbHZlIGEgbG9jYWwgb3IgYWJzb2x1dGUgcGF0aCBvciBsaW5rIHRvIGFuIGFic29sdXRlIHBhdGguICovXG4gICAgcHVibGljIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyB8IExpbmssIHNvdXJjZVBhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXdwYXRoID0gcGF0aCBpbnN0YW5jZW9mIExpbmsgPyBwYXRoLnBhdGggOiBwYXRoO1xuICAgICAgICBpZiAocmF3cGF0aC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHJhd3BhdGguc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlID0gdGhpcy5jb3JlLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QocmF3cGF0aCwgc291cmNlUGF0aCA/PyBcIlwiKTtcbiAgICAgICAgaWYgKGFic29sdXRlKSByZXR1cm4gYWJzb2x1dGUucGF0aDtcblxuICAgICAgICByZXR1cm4gcmF3cGF0aDtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogUmVzdWx0PEluZGV4UXVlcnksIHN0cmluZz4ge1xuICAgICAgICBpZiAoISh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocXVlcnkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFFVRVJZLnF1ZXJ5LnBhcnNlKHF1ZXJ5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQudmFsdWUpO1xuICAgICAgICBlbHNlIHJldHVybiBSZXN1bHQuZmFpbHVyZShQYXJzaW1tb24uZm9ybWF0RXJyb3IocXVlcnksIHJlc3VsdCkpO1xuICAgIH1cblxuICAgIC8qKiBUcnkgdG8gcGFyc2UgdGhlIGdpdmVuIHF1ZXJ5LCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpcyBpbnZhbGlkLiAqL1xuICAgIHB1YmxpYyBwYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeVBhcnNlUXVlcnkocXVlcnkpLm9yRWxzZVRocm93KChlKSA9PiBcIkZhaWxlZCB0byBwYXJzZSBxdWVyeTogXCIgKyBlKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgZmlsZSBsaW5rIHBvaW50aW5nIHRvIHRoZSBnaXZlbiBwYXRoLiAqL1xuICAgIHB1YmxpYyBmaWxlTGluayhwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZShwYXRoKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIHB1YmxpYyBoZWFkZXJMaW5rKHBhdGg6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHBhdGgsIGhlYWRlcik7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBibG9jayB3aXRoIHRoZSBnaXZlbiBwYXRoIGFuZCBibG9jayBJRC4gKi9cbiAgICBwdWJsaWMgYmxvY2tMaW5rKHBhdGg6IHN0cmluZywgYmxvY2s6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5ibG9jayhwYXRoLCBibG9jayk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gbGluaywgdGhyb3dpbmcgYW4gZXJyb3IgaWYgaXQgaXMgaW52YWxpZC4gKi9cbiAgICBwdWJsaWMgcGFyc2VMaW5rKGxpbmt0ZXh0OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UGFyc2VMaW5rKGxpbmt0ZXh0KS5vckVsc2VUaHJvdygoZSkgPT4gXCJGYWlsZWQgdG8gcGFyc2UgbGluazogXCIgKyBlKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIGEgbGluaywgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IFJlc3VsdDxMaW5rLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5lbWJlZExpbmsucGFyc2UobGlua3RleHQpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdGF0dXMpIHJldHVybiBSZXN1bHQuZmFpbHVyZShQYXJzaW1tb24uZm9ybWF0RXJyb3IobGlua3RleHQsIHBhcnNlZCkpO1xuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhwYXJzZWQudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBkYXRhIGFycmF5IGZyb20gYSByZWd1bGFyIGFycmF5LiAqL1xuICAgIHB1YmxpYyBhcnJheTxUPihpbnB1dDogVFtdIHwgRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheS53cmFwKGlucHV0KTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBWaXN1YWwgRWxlbWVudHMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgZ2l2ZW4gRGF0YWNvcmVKUyBzY3JpcHQsIHJlbmRlcmluZyBpdCBpbnRvIHRoZSBnaXZlbiBjb250YWluZXIuIFRoaXMgZnVuY3Rpb25cbiAgICAgKiB3aWxsIHJldHVybiBxdWlja2x5OyBhY3R1YWwgcmVuZGVyaW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGEgbWFya2Rvd24gcmVuZGVyIGNoaWxkIHJlcHJlc2VudGluZyB0aGUgcmVuZGVyZWQgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlSnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCB8IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsXG4gICAgICAgIHNvdXJjZVBhdGg6IHN0cmluZ1xuICAgICk6IE1hcmtkb3duUmVuZGVyQ2hpbGQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVySmF2YXNjcmlwdChzb3VyY2UsIGNvbnRhaW5lciwgY29tcG9uZW50LCBzb3VyY2VQYXRoLCBcImpzXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbWlsYXIgdG8gYGV4ZWN1dGVKc2AsIGJ1dCBmb3IgSlNYIHNjcmlwdHMuIElmIHlvdSBhcmUgdW5zdXJlIGlmIHlvdXIgaW5wdXQgd2lsbCBiZSBKU1xuICAgICAqIG9yIEpTWCwgdXNlIHRoaXMgb25lLCBhcyBpdCBhbHNvIHN1cHBvcnRzIHJlZ3VsYXIgamF2YXNjcmlwdCAoYWxiZWl0IGF0IGF0IGEgbWlsZCBwZXJmb3JtYW5jZVxuICAgICAqIGhpdCB0byByZW5kZXJpbmcpLlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlSnN4KFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmdcbiAgICApOiBNYXJrZG93blJlbmRlckNoaWxkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckphdmFzY3JpcHQoc291cmNlLCBjb250YWluZXIsIGNvbXBvbmVudCwgc291cmNlUGF0aCwgXCJqc3hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2ltaWxhciB0byBgZXhlY3V0ZUpzYCwgYnV0IGZvciBUeXBlU2NyaXB0IHNjcmlwdHMuIFVzZSB0aGUgVFNYIHZhcmlhbnQgZm9yIFRTWCBzdXBwcm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlVHMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCB8IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsXG4gICAgICAgIHNvdXJjZVBhdGg6IHN0cmluZ1xuICAgICk6IE1hcmtkb3duUmVuZGVyQ2hpbGQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVySmF2YXNjcmlwdChzb3VyY2UsIGNvbnRhaW5lciwgY29tcG9uZW50LCBzb3VyY2VQYXRoLCBcInRzXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbWlsYXIgdG8gYGV4ZWN1dGVUc2AsIGJ1dCBmb3IgVFNYIHNjcmlwdHMuIElmIHlvdSBhcmUgdW5zdXJlIGlmIHlvdXIgaW5wdXQgd2lsbCBiZSBUU1xuICAgICAqIG9yIFRTWCwgdXNlIHRoaXMgb25lLCBhcyBpdCBhbHNvIHN1cHBvcnRzIHJlZ3VsYXIgamF2YXNjcmlwdCAoYWxiZWl0IGF0IGF0IGEgbWlsZCBwZXJmb3JtYW5jZVxuICAgICAqIGhpdCB0byByZW5kZXJpbmcpLlxuICAgICAqXG4gICAgICogVGhpcyBnZW5lcmFsbHkgd2lsbCBhbHNvIHdvcmsgaWYgeW91IGFyZSB1bnN1cmUgaWYgeW91ciBpbnB1dCBpcyBqYXZhc2NyaXB0IG9yIHR5cGVzY3JpcHQsXG4gICAgICogdGhvdWdoIGJld2FyZSB0aGVyZSBhcmUgYSBmZXcgbmljaGUgY2FzZXMgd2hlcmUgamF2YXNjcmlwdCBhbmQgdHlwZXNjcmlwdCBkaXZlcmdlIGluIHN5bnRheC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZVRzeChcbiAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50IHwgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgICAgICAgc291cmNlUGF0aDogc3RyaW5nXG4gICAgKTogTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJKYXZhc2NyaXB0KHNvdXJjZSwgY29udGFpbmVyLCBjb21wb25lbnQsIHNvdXJjZVBhdGgsIFwidHN4XCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU2hhcmVkIGxvZ2ljIGZvciByZW5kZXJpbmcgYW55IEpTL1RTIHNjcmlwdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW5kZXJKYXZhc2NyaXB0KFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gICAgICAgIGxhbmd1YWdlOiBcImpzXCIgfCBcInRzXCIgfCBcImpzeFwiIHwgXCJ0c3hcIlxuICAgICkge1xuICAgICAgICBsZXQgbG9jYWwgPSBuZXcgRGF0YWNvcmVMb2NhbEFwaSh0aGlzLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgRGF0YWNvcmVKU1JlbmRlcmVyKGxvY2FsLCBjb250YWluZXIsIHNvdXJjZVBhdGgsIHNvdXJjZSwgbGFuZ3VhZ2UpO1xuICAgICAgICBjb21wb25lbnQuYWRkQ2hpbGQocmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0UGFyZW50Rm9sZGVyIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBURmlsZSwgVEZvbGRlciwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuLyoqIFNwZWNpZmljIGluZGV4IGZvciB0cmFja2luZyBvYmplY3RzIGluIHJlbGF0aXZlIHBhdGhzLiBTcGVjaWZpY2FsbHkgdHJhY2tzIHRvcC1sZXZlbCBwYWdlIG9iamVjdHMuICovXG5leHBvcnQgY2xhc3MgRm9sZGVySW5kZXgge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YXVsdDogVmF1bHQpIHt9XG5cbiAgICAvKiogR2V0IHRoZSBsaXN0IG9mIGFsbCBmaWxlcyB1bmRlciB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgZ2V0KHByZWZpeDogc3RyaW5nLCBmaWx0ZXI/OiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocHJlZml4IHx8IFwiL1wiKTtcbiAgICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy53YWxrKGZvbGRlciwgZmlsdGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIocHJlZml4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KHByZWZpeCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBsaXN0IG9mIGZpbGVzIHNwZWNpZmljYWxseSB1bmRlciB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgZ2V0RXhhY3QocHJlZml4OiBzdHJpbmcsIGZpbHRlcj86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIGxldCBmb2xkZXIgPSB0aGlzLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwcmVmaXggfHwgXCIvXCIpO1xuICAgICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICAgICAgcmV0dXJuIEZvbGRlckluZGV4LkVNUFRZX1NFVDtcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZvbGRlci5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihmaWxlLnBhdGgpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLmFkZChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIocHJlZml4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KHByZWZpeCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMgaW4gdGhlIGluZGV4LiAqL1xuICAgIHB1YmxpYyBwYXRoRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocGF0aCB8fCBcIi9cIikgIT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZm9sZGVyIGV4aXN0cyBpbiB0aGUgaW5kZXguICovXG4gICAgcHVibGljIGZvbGRlckV4aXN0cyhmb2xkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZm9sZGVyIHx8IFwiL1wiKSBpbnN0YW5jZW9mIFRGb2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlIHRoZSBpbi1tZW1vcnkgcHJlZml4IGluZGV4IHRvIGNvbnZlcnQgYSByZWxhdGl2ZSBwYXRoIHRvIGFuIGFic29sdXRlIG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZVJlbGF0aXZlKHBhdGg6IHN0cmluZywgb3JpZ2luPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFvcmlnaW4pIHJldHVybiBwYXRoO1xuICAgICAgICBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IGdldFBhcmVudEZvbGRlcihvcmlnaW4pICsgXCIvXCIgKyBwYXRoO1xuICAgICAgICBpZiAodGhpcy5wYXRoRXhpc3RzKHJlbGF0aXZlUGF0aCkpIHJldHVybiByZWxhdGl2ZVBhdGg7XG4gICAgICAgIGVsc2UgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSAqd2Fsayhmb2xkZXI6IFRGb2xkZXIsIGZpbHRlcj86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmb2xkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLndhbGsoZmlsZSwgZmlsdGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyID8gZmlsdGVyKGZpbGUucGF0aCkgOiB0cnVlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZmlsZS5wYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVtcHR5IHBsYWNlaG9sZGVyIHNldC4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBFTVBUWV9TRVQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xufVxuIiwgIi8qKiBUcmFja3MgYW4gaW52ZXJ0ZWQgaW5kZXggb2YgdmFsdWUgLT4gc2V0XFw8aWRzXFw+LiAqL1xuZXhwb3J0IGNsYXNzIEludmVydGVkSW5kZXg8Vj4ge1xuICAgIHByaXZhdGUgaW52ZXJ0ZWQ6IE1hcDxWLCBTZXQ8c3RyaW5nPj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW52ZXJ0ZWQgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUga2V5IHRvIHRoZSBnaXZlbiB2YWx1ZXMuICovXG4gICAgcHVibGljIHNldChrZXk6IHN0cmluZywgdmFsdWVzOiBJdGVyYWJsZTxWPikge1xuICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnZlcnRlZC5oYXModmFsdWUpKSB0aGlzLmludmVydGVkLnNldCh2YWx1ZSwgbmV3IFNldCgpKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0ZWQuZ2V0KHZhbHVlKSEuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IGFsbCBrZXlzIHRoYXQgbWFwIHRvIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgICBwdWJsaWMgZ2V0KHZhbHVlOiBWKTogU2V0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZlcnRlZC5nZXQodmFsdWUpID8/IEludmVydGVkSW5kZXguRU1QVFlfU0VUO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYSBrZXkgZnJvbSB0aGUgc2V0IG9mIGFzc29jaWF0ZWQgdmFsdWVzLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBzdHJpbmcsIHZhbHVlczogSXRlcmFibGU8Vj4pIHtcbiAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLmludmVydGVkLmdldCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc2V0KSB7XG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2V0ICYmIHNldC5zaXplID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmVydGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuaW52ZXJ0ZWQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBFTVBUWV9TRVQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xufVxuIiwgIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhdFF1ZXVlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlkcyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBwdXNoKGlkLCB2YWx1ZSkge1xuICAgICAgICBsZXQgcG9zID0gdGhpcy5sZW5ndGgrKztcblxuICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMudmFsdWVzW3BhcmVudF07XG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gcGFyZW50VmFsdWUpIGJyZWFrO1xuICAgICAgICAgICAgdGhpcy5pZHNbcG9zXSA9IHRoaXMuaWRzW3BhcmVudF07XG4gICAgICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICBwb3MgPSBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlkc1twb3NdID0gaWQ7XG4gICAgICAgIHRoaXMudmFsdWVzW3Bvc10gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmlkc1swXTtcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuaWRzWzBdID0gdGhpcy5pZHNbdGhpcy5sZW5ndGhdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlc1swXSA9IHRoaXMudmFsdWVzW3RoaXMubGVuZ3RoXTtcbiAgICAgICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSB0aGlzLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3MgPCBoYWxmTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSAocG9zIDw8IDEpICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyAxO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0SW5kZXggPSB0aGlzLmlkc1tsZWZ0XTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdFZhbHVlID0gdGhpcy52YWx1ZXNbbGVmdF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRWYWx1ZSA9IHRoaXMudmFsdWVzW3JpZ2h0XTtcblxuICAgICAgICAgICAgICAgIGlmIChyaWdodCA8IHRoaXMubGVuZ3RoICYmIHJpZ2h0VmFsdWUgPCBiZXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBiZXN0SW5kZXggPSB0aGlzLmlkc1tyaWdodF07XG4gICAgICAgICAgICAgICAgICAgIGJlc3RWYWx1ZSA9IHJpZ2h0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiZXN0VmFsdWUgPj0gdmFsdWUpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pZHNbcG9zXSA9IGJlc3RJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gYmVzdFZhbHVlO1xuICAgICAgICAgICAgICAgIHBvcyA9IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaWRzW3Bvc10gPSBpZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW3Bvc10gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgcGVlaygpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5pZHNbMF07XG4gICAgfVxuXG4gICAgcGVla1ZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBzaHJpbmsoKSB7XG4gICAgICAgIHRoaXMuaWRzLmxlbmd0aCA9IHRoaXMudmFsdWVzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCBCVHJlZSBmcm9tIFwic29ydGVkLWJ0cmVlXCI7XG5cbi8qKiBHZW5lcmFsIGFic3RyYWN0aW9uIGZvciBhbGwgZmllbGQgaW5kaWNlczsgc29tZSBtYXkgYmUgb3B0aW1pemVkIGZvciBzb21lIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZEluZGV4IHtcbiAgICAvLyBUT0RPOiBDaGFuZ2UgYWxsKCkgYW5kIGVxdWFscygpIHRvIHJldHVybiBGaWx0ZXI8c3RyaW5nPiBpbnN0ZWFkIGZvciBwZXJmb3JtYW5jZSBvbiBzb21lIGluZGV4IHR5cGVzLlxuXG4gICAgLyoqIEFkZCBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyB0byB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkO1xuXG4gICAgLyoqIERlbGV0ZSBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyBmcm9tIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQ7XG5cbiAgICAvKiogUmV0dXJuIGEgc2V0IG9mIGFsbCBwYWdlcyBpbiB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBhbGwoKTogU2V0PHN0cmluZz47XG5cbiAgICAvKiogRm9yIGluZGljZXMgd2hpY2ggc3VwcG9ydCBmYXN0IHZhbHVlIGxvb2t1cHMsIHJldHVybnMgdGhlIHNldCBvZiBhbGwgZG9jdW1lbnRzIHdpdGggdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGVxdWFscyh2YWx1ZTogTGl0ZXJhbCk6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkO1xufVxuXG4vKiogRmllbGQgaW5kZXggZm9yIGFueSBmaWVsZCB3aGljaCBpcyBhbHdheXMgb3IgYWxtb3N0IGFsd2F5cyBwcmVzZW50ICgkcmV2aXNpb24sICR0eXBlcykuICovXG5leHBvcnQgY2xhc3MgRXZlcnl0aGluZ0ZpZWxkSW5kZXggaW1wbGVtZW50cyBGaWVsZEluZGV4IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGFsbDogKCkgPT4gU2V0PHN0cmluZz4pIHt9XG5cbiAgICBwdWJsaWMgYWRkKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7fVxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqIFNwZWNpYWxpemVkIGZpZWxkIGluZGV4IGZvciBJRHMgd2hpY2gga25vd3MgdG8gZGlyZWN0bHkganVzdCByZXR1cm4gdGhlIElELiAqL1xuZXhwb3J0IGNsYXNzIElkRmllbGRJbmRleCBpbXBsZW1lbnRzIEZpZWxkSW5kZXgge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgYWxsOiAoKSA9PiBTZXQ8c3RyaW5nPiwgcHVibGljIGxvb2t1cDogKGlkOiBzdHJpbmcpID0+IGJvb2xlYW4pIHt9XG5cbiAgICBwdWJsaWMgYWRkKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7fVxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIUxpdGVyYWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5sb29rdXAodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoW3ZhbHVlIGFzIHN0cmluZ10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIERlZmF1bHQgZmllbGQgaW5kZXggd2hpY2ggdHJhY2tzIGZpZWxkIGxvY2F0aW9ucyB1c2luZyBhIHNldC4gKi9cbmV4cG9ydCBjbGFzcyBTZXRGaWVsZEluZGV4IGltcGxlbWVudHMgRmllbGRJbmRleCB7XG4gICAgLyoqIFRoZSBJRCBvZiBldmVyeSBvYmplY3QgdGhhdCB0aGlzIGZpZWxkIGlzIHByZXNlbnQgb24uICovXG4gICAgcHJpdmF0ZSBwcmVzZW50OiBTZXQ8c3RyaW5nPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmVzZW50ID0gbmV3IFNldCgpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgdG8gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIGFkZChpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNlbnQuYWRkKGlkKTtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNlbnQuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgc2V0IG9mIGFsbCBwYWdlcyBpbiB3aGljaCB0aGUgZmllbGQgZXhpc3RzIGF0IGFsbCAoZXZlbiBpZiB1bmRlZmluZWQpLiAqL1xuICAgIHB1YmxpYyBhbGwoKTogU2V0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZW50O1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYWxsIHBhZ2VzIHdpdGggYSB2YWx1ZSBleGFjdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqIEZpZWxkIGluZGV4IHdoaWNoIHRyYWNrcyBmaWVsZCBsb2NhdGlvbnMgdXNpbmcgYm90aCBhbiBvdmVyYWxsIHNldCBhbmQgYSBCVHJlZSBvZiB2YWx1ZXMuICovXG5leHBvcnQgY2xhc3MgQlRyZWVGaWVsZEluZGV4IGltcGxlbWVudHMgRmllbGRJbmRleCB7XG4gICAgLyoqIFRoZSBJRCBvZiBldmVyeSBvYmplY3QgdGhhdCB0aGlzIGZpZWxkIGlzIHByZXNlbnQgb24uICovXG4gICAgcHJpdmF0ZSBwcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICAvKiogTWFwcyAodmFsdWUsIHNldCBvZiBwYWdlcyBjb250YWluaW5nIHRoYXQgdmFsdWUpLiAqL1xuICAgIHByaXZhdGUgdmFsdWVzOiBCVHJlZTxMaXRlcmFsLCBTZXQ8c3RyaW5nPj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJlc2VudCA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgQlRyZWUoW10sIChhLCBiKSA9PiBMaXRlcmFscy5jb21wYXJlKGEsIGIpKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIHRvIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmVzZW50LmFkZChpZCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0SWZOb3RQcmVzZW50KHZhbHVlLCBuZXcgU2V0KCkpO1xuICAgICAgICB0aGlzLnZhbHVlcy5nZXQodmFsdWUpIS5hZGQoaWQpO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgZnJvbSB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgZGVsZXRlKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc2VudC5kZWxldGUoaWQpO1xuXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMudmFsdWVzLmdldCh2YWx1ZSk7XG4gICAgICAgIHNldD8uZGVsZXRlKGlkKTtcblxuICAgICAgICBpZiAoc2V0ID09IG51bGwgfHwgc2V0LnNpemUgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBzZXQgb2YgYWxsIHBhZ2VzIGluIHdoaWNoIHRoZSBmaWVsZCBleGlzdHMgYXQgYWxsIChldmVuIGlmIHVuZGVmaW5lZCkuICovXG4gICAgcHVibGljIGFsbCgpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbnQ7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhbGwgcGFnZXMgd2l0aCBhIHZhbHVlIGV4YWN0bHkgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExpdGVyYWwpOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQodmFsdWUsIEJUcmVlRmllbGRJbmRleC5FTVBUWV9TRVQpO1xuICAgIH1cblxuICAgIC8qKiBQbGFjZWhvbGRlciBlbXB0eSBzZXQuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgRU1QVFlfU0VUID0gbmV3IFNldDxzdHJpbmc+KCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGEgZ2xvYmFsIGRpc3BhdGNoIHRhYmxlIGZvciBldmFsdWF0aW5nIGJpbmFyeSBvcGVyYXRvcnMsIGluY2x1ZGluZyBjb21wYXJpc29uLiAqL1xuaW1wb3J0IHsgTGl0ZXJhbFJlcHIsIExpdGVyYWxUeXBlLCBMaXRlcmFsLCBMaXRlcmFscywgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUR1cmF0aW9uIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQmluYXJ5T3AsIEV4cHJlc3Npb25zIH0gZnJvbSBcImV4cHJlc3Npb24vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3IgfSBmcm9tIFwiZXhwcmVzc2lvbi9ldmFsdWF0b3JcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tIFwic2V0dGluZ3NcIjtcbmltcG9ydCB7IEZpZWxkYmVhcmluZ3MgfSBmcm9tIFwiLi9maWVsZFwiO1xuXG4vKiogQSBsaXRlcmFsIHR5cGUgb3IgYSBjYXRjaC1hbGwgJyonLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFR5cGVPckFsbCA9IExpdGVyYWxUeXBlIHwgXCIqXCI7XG5cbi8qKiBNYXBzIGEgbGl0ZXJhbCB0eXBlIG9yIHRoZSBjYXRjaC1hbGwgJyonLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHJBbGw8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+ID0gVCBleHRlbmRzIFwiKlwiXG4gICAgPyBMaXRlcmFsXG4gICAgOiBUIGV4dGVuZHMgTGl0ZXJhbFR5cGVcbiAgICA/IExpdGVyYWxSZXByPFQ+XG4gICAgOiBhbnk7XG5cbi8qKiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBiaW5hcnkgb3BlcmF0b3IuICovXG5leHBvcnQgdHlwZSBCaW5hcnlPcEltcGw8QSBleHRlbmRzIExpdGVyYWwsIEIgZXh0ZW5kcyBMaXRlcmFsPiA9IChmaXJzdDogQSwgc2Vjb25kOiBCLCBjdHg6IEV2YWx1YXRvcikgPT4gTGl0ZXJhbDtcbi8qKiBCaW5hcnkgb3BlcmF0b3Igd2hpY2ggY2FuIGZhaWwgYW5kIHByb2R1Y2UgYW4gZXJyb3IuICovXG5leHBvcnQgdHlwZSBCaW5hcnlPcFJlc3VsdEltcGw8QSBleHRlbmRzIExpdGVyYWwsIEIgZXh0ZW5kcyBMaXRlcmFsPiA9IChcbiAgICBmaXJzdDogQSxcbiAgICBzZWNvbmQ6IEIsXG4gICAgY3R4OiBFdmFsdWF0b3JcbikgPT4gUmVzdWx0PExpdGVyYWwsIHN0cmluZz47XG4vKiogQW4gaW1wbGVtZW50YXRpb24gb2YgYSBjb21wYXJhdG9yIChyZXR1cm5pbmcgYSBudW1iZXIpIHdoaWNoIHRoZW4gYXV0b21hdGljYWxseSBkZWZpbmVzIGFsbCBvZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuICovXG5leHBvcnQgdHlwZSBDb21wYXJlSW1wbDxUIGV4dGVuZHMgTGl0ZXJhbD4gPSAoZmlyc3Q6IFQsIHNlY29uZDogVCwgY3R4OiBFdmFsdWF0b3IpID0+IG51bWJlcjtcblxuLyoqIFByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBmb3IgYmluYXJ5IG9wZXJhdG9ycyBvbiB0d28gdHlwZXMgdXNpbmcgYSByZWdpc3RyeS4gKi9cbmV4cG9ydCBjbGFzcyBCaW5hcnlPcEhhbmRsZXIge1xuICAgIHByaXZhdGUgbWFwOiBNYXA8c3RyaW5nLCBCaW5hcnlPcFJlc3VsdEltcGw8YW55LCBhbnk+PjtcbiAgICBwcml2YXRlIGhhbmRsZURlZmF1bHROdWxsczogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJpbmFyeU9wSGFuZGxlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRGVmYXVsdE51bGxzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGxlZnQ6IFQsXG4gICAgICAgIG9wOiBCaW5hcnlPcCxcbiAgICAgICAgcmlnaHQ6IFUsXG4gICAgICAgIGZ1bmM6IEJpbmFyeU9wSW1wbDxMaXRlcmFsUmVwckFsbDxUPiwgTGl0ZXJhbFJlcHJBbGw8VT4+XG4gICAgKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgdGhpcy5tYXAuc2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBsZWZ0LCByaWdodCksIChhLCBiLCBjKSA9PiBSZXN1bHQuc3VjY2VzcyhmdW5jKGEsIGIsIGMpKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclJlc3VsdDxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgVSBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBsZWZ0OiBULFxuICAgICAgICBvcDogQmluYXJ5T3AsXG4gICAgICAgIHJpZ2h0OiBVLFxuICAgICAgICBmdW5jOiBCaW5hcnlPcFJlc3VsdEltcGw8TGl0ZXJhbFJlcHJBbGw8VD4sIExpdGVyYWxSZXByQWxsPFU+PlxuICAgICk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHRoaXMubWFwLnNldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgbGVmdCwgcmlnaHQpLCBmdW5jKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyQ29tbTxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgVSBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBsZWZ0OiBULFxuICAgICAgICBvcDogQmluYXJ5T3AsXG4gICAgICAgIHJpZ2h0OiBVLFxuICAgICAgICBmdW5jOiBCaW5hcnlPcEltcGw8TGl0ZXJhbFJlcHJBbGw8VD4sIExpdGVyYWxSZXByQWxsPFU+PlxuICAgICk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyKGxlZnQsIG9wLCByaWdodCwgZnVuYykucmVnaXN0ZXIocmlnaHQsIG9wLCBsZWZ0LCAoYSwgYiwgY3R4KSA9PiBmdW5jKGIsIGEsIGN0eCkpO1xuICAgIH1cblxuICAgIC8qKiBJZiBlbmFibGVkLCBhbGwgbnVsbCAob3ApIG51bGwgb3BlcmF0aW9ucyBwcm9kdWNlIG51bGwuICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0TnVsbEhhbmRsaW5nKCk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHRoaXMuaGFuZGxlRGVmYXVsdE51bGxzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudCBhIGNvbXBhcmlzb24gZnVuY3Rpb24uICovXG4gICAgcHVibGljIGNvbXBhcmU8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KHR5cGU6IFQsIGNvbXBhcmU6IENvbXBhcmVJbXBsPExpdGVyYWxSZXByQWxsPFQ+Pik6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyKHR5cGUsIFwiPFwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPCAwKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKHR5cGUsIFwiPD1cIiwgdHlwZSwgKGEsIGIsIGN0eCkgPT4gY29tcGFyZShhLCBiLCBjdHgpIDw9IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCI+XCIsIHR5cGUsIChhLCBiLCBjdHgpID0+IGNvbXBhcmUoYSwgYiwgY3R4KSA+IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCI+PVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPj0gMClcbiAgICAgICAgICAgIC5yZWdpc3Rlcih0eXBlLCBcIj1cIiwgdHlwZSwgKGEsIGIsIGN0eCkgPT4gY29tcGFyZShhLCBiLCBjdHgpID09IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCIhPVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgIT0gMCk7XG4gICAgfVxuXG4gICAgLyoqIEF0dGVtcHQgdG8gZXZhbHVhdGUgdGhlIGdpdmVuIGJpbmFyeSBvcGVyYXRvciBvbiB0aGUgdHdvIGxpdGVyYWwgZmllbGRzLiAqL1xuICAgIHB1YmxpYyBldmFsdWF0ZShvcDogQmluYXJ5T3AsIGxlZnQ6IExpdGVyYWwsIHJpZ2h0OiBMaXRlcmFsLCBjdHg6IEV2YWx1YXRvcik6IFJlc3VsdDxMaXRlcmFsLCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IGxlZnRUeXBlID0gTGl0ZXJhbHMudHlwZU9mKGxlZnQpO1xuICAgICAgICBsZXQgcmlnaHRUeXBlID0gTGl0ZXJhbHMudHlwZU9mKHJpZ2h0KTtcbiAgICAgICAgaWYgKCFsZWZ0VHlwZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBVbnJlY29nbml6ZWQgdmFsdWUgJyR7bGVmdH0nYCk7XG4gICAgICAgIGVsc2UgaWYgKCFyaWdodFR5cGUpIHJldHVybiBSZXN1bHQuZmFpbHVyZShgVW5yZWNvZ25pemVkIHZhbHVlICcke3JpZ2h0fSdgKTtcblxuICAgICAgICAvLyBRdWljayBjYXNlOiBoYW5kbGUgbnVsbCAob3ApIG51bGwgYnkgZGVmYXVsdCBpZiBlbmFibGVkLlxuICAgICAgICBpZiAodGhpcy5oYW5kbGVEZWZhdWx0TnVsbHMgJiYgbGVmdFR5cGUgPT09IFwibnVsbFwiICYmIHJpZ2h0VHlwZSA9PT0gXCJudWxsXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgICAgICBsZXQgaGFuZGxlciA9IHRoaXMubWFwLmdldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgbGVmdFR5cGUsIHJpZ2h0VHlwZSkpO1xuICAgICAgICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIobGVmdCwgcmlnaHQsIGN0eCk7XG5cbiAgICAgICAgLy8gUmlnaHQtJyonIGZhbGxiYWNrOlxuICAgICAgICBsZXQgaGFuZGxlcjIgPSB0aGlzLm1hcC5nZXQoQmluYXJ5T3BIYW5kbGVyLnJlcHIob3AsIGxlZnRUeXBlLCBcIipcIikpO1xuICAgICAgICBpZiAoaGFuZGxlcjIpIHJldHVybiBoYW5kbGVyMihsZWZ0LCByaWdodCwgY3R4KTtcblxuICAgICAgICAvLyBMZWZ0LScqJyBmYWxsYmFjazpcbiAgICAgICAgbGV0IGhhbmRsZXIzID0gdGhpcy5tYXAuZ2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBcIipcIiwgcmlnaHRUeXBlKSk7XG4gICAgICAgIGlmIChoYW5kbGVyMykgcmV0dXJuIGhhbmRsZXIzKGxlZnQsIHJpZ2h0LCBjdHgpO1xuXG4gICAgICAgIC8vIERvdWJsZSAnKicgZmFsbGJhY2suXG4gICAgICAgIGxldCBoYW5kbGVyNCA9IHRoaXMubWFwLmdldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgXCIqXCIsIFwiKlwiKSk7XG4gICAgICAgIGlmIChoYW5kbGVyNCkgcmV0dXJuIGhhbmRsZXI0KGxlZnQsIHJpZ2h0LCBjdHgpO1xuXG4gICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgTm8gaW1wbGVtZW50YXRpb24gZm91bmQgZm9yICcke2xlZnRUeXBlfSAke29wfSAke3JpZ2h0VHlwZX0nYCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gdHJpcGxldCBmb3IgdW5pcXVlIGxvb2t1cCBpbiB0aGUgbWFwLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVwcihvcDogQmluYXJ5T3AsIGxlZnQ6IExpdGVyYWxUeXBlT3JBbGwsIHJpZ2h0OiBMaXRlcmFsVHlwZU9yQWxsKSB7XG4gICAgICAgIHJldHVybiBgJHtsZWZ0fSwke29wfSwke3JpZ2h0fWA7XG4gICAgfVxufVxuXG4vKiogQ29uZmlndXJlIGFuZCBjcmVhdGUgYSBiaW5hcnkgT1AgaGFuZGxlciB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJpbmFyeU9wcyhsaW5rTm9ybWFsaXplcjogKHg6IHN0cmluZykgPT4gc3RyaW5nKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBCaW5hcnlPcEhhbmRsZXIuY3JlYXRlKClcbiAgICAgICAgICAgIC5jb21wYXJlKFwiKlwiLCAoYSwgYikgPT4gTGl0ZXJhbHMuY29tcGFyZShhLCBiLCBsaW5rTm9ybWFsaXplcikpXG4gICAgICAgICAgICAvLyBHbG9iYWwgYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiKlwiLCBcIiZcIiwgXCIqXCIsIChhLCBiKSA9PiBMaXRlcmFscy5pc1RydXRoeShhKSAmJiBMaXRlcmFscy5pc1RydXRoeShiKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIipcIiwgXCJ8XCIsIFwiKlwiLCAoYSwgYikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoYSkgfHwgTGl0ZXJhbHMuaXNUcnV0aHkoYikpXG4gICAgICAgICAgICAvLyBOdW1iZXIgaW1wbGVtZW50YXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwibnVtYmVyXCIsIFwiK1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gYSArIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCItXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm51bWJlclwiLCBcIipcIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IGEgKiBiKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwibnVtYmVyXCIsIFwiL1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gYSAvIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCIlXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhICUgYilcbiAgICAgICAgICAgIC8vIFN0cmluZyBpbXBsZW1lbnRhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJzdHJpbmdcIiwgXCIrXCIsIFwiKlwiLCAoYSwgYiwgY3R4KSA9PiBhICsgTGl0ZXJhbHMudG9TdHJpbmcoYiwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCIqXCIsIFwiK1wiLCBcInN0cmluZ1wiLCAoYSwgYiwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhhLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSArIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXJDb21tKFwic3RyaW5nXCIsIFwiKlwiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gKGIgPCAwID8gXCJcIiA6IGEucmVwZWF0KGIpKSlcbiAgICAgICAgICAgIC8vIERhdGUgT3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcImRhdGVcIiwgXCItXCIsIFwiZGF0ZVwiLCAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVEdXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgYS5kaWZmKGIsIFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIiwgXCJtaWxsaXNlY29uZHNcIl0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkYXRlXCIsIFwiLVwiLCBcImR1cmF0aW9uXCIsIChhLCBiKSA9PiBhLm1pbnVzKGIpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyQ29tbShcImRhdGVcIiwgXCIrXCIsIFwiZHVyYXRpb25cIiwgKGEsIGIpID0+IGEucGx1cyhiKSlcbiAgICAgICAgICAgIC8vIER1cmF0aW9uIE9wZXJhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkdXJhdGlvblwiLCBcIitcIiwgXCJkdXJhdGlvblwiLCAoYSwgYikgPT4gbm9ybWFsaXplRHVyYXRpb24oYS5wbHVzKGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiLVwiLCBcImR1cmF0aW9uXCIsIChhLCBiKSA9PiBub3JtYWxpemVEdXJhdGlvbihhLm1pbnVzKGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiL1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gbm9ybWFsaXplRHVyYXRpb24oYS5tYXBVbml0cygoeCkgPT4geCAvIGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlckNvbW0oXCJkdXJhdGlvblwiLCBcIipcIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGEubWFwVW5pdHMoKHgpID0+IHggKiBiKSkpXG4gICAgICAgICAgICAvLyBBcnJheSBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiYXJyYXlcIiwgXCIrXCIsIFwiYXJyYXlcIiwgKGEsIGIpID0+IChbXSBhcyBMaXRlcmFsW10pLmNvbmNhdChhKS5jb25jYXQoYikpXG4gICAgICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm9iamVjdFwiLCBcIitcIiwgXCJvYmplY3RcIiwgKGEsIGIpID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpKVxuICAgICAgICAgICAgLy8gSW5kZXggb3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcImFycmF5XCIsIFwiaW5kZXhcIiwgXCJudW1iZXJcIiwgKGFyciwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IGFyci5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJbaWR4XTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXJSZXN1bHQoXCJhcnJheVwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIChhcnIsIGtleSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBSZXN1bHQuc3VjY2VzcyhbXSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gY29udGV4dC5ldmFsdWF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLmluZGV4KEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbWVudCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZC5zdWNjZXNzZnVsKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUocmVzb2x2ZWQuZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc29sdmVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJvYmplY3RcIiwgXCJpbmRleFwiLCBcInN0cmluZ1wiLCAob2JqLCBrZXkpID0+IEZpZWxkYmVhcmluZ3MuZ2V0KG9iaiwga2V5KSA/PyBudWxsKVxuICAgICAgICAgICAgLnJlZ2lzdGVyUmVzdWx0KFwibGlua1wiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIGluZGV4TGluaylcbiAgICAgICAgICAgIC5yZWdpc3RlclJlc3VsdChcImxpbmtcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCBpbmRleExpbmspXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJvYmplY3RcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCAob2JqLCBrZXkpID0+IG9ialtrZXldID8/IG51bGwpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJzdHJpbmdcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCAoc3RyLCBpZHgpID0+IChpZHggPCAwIHx8IGlkeCA+PSBzdHIubGVuZ3RoID8gbnVsbCA6IHN0cltpZHhdKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImRhdGVcIiwgXCJpbmRleFwiLCBcInN0cmluZ1wiLCBpbmRleERhdGUpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkdXJhdGlvblwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIGluZGV4RHVyYXRpb24pXG4gICAgICAgICAgICAud2l0aERlZmF1bHROdWxsSGFuZGxpbmcoKVxuICAgICk7XG59XG5cbi8qKiBDb252ZXJ0IGhpZ2ggbGV2ZWwgc2V0dGluZ3MgdG8gc2V0dGluZ3MgdXNlZCBmb3Igc3RyaW5nIHJlbmRlcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBMaXRlcmFscy5Ub1N0cmluZ1NldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkYXRlRm9ybWF0OiBzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCxcbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCxcbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzZXR0aW5ncy5yZW5kZXJOdWxsQXMsXG4gICAgfTtcbn1cblxuLyoqIEFsbG93cyB5b3UgdG8gaW5kZXggaW50byBsaW5rcyB0byBnZXQgbWV0YWRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhMaW5rKGxpbms6IExpbmssIGtleTogc3RyaW5nIHwgbnVtYmVyLCBjb250ZXh0OiBFdmFsdWF0b3IpOiBSZXN1bHQ8TGl0ZXJhbCwgc3RyaW5nPiB7XG4gICAgY29uc3Qgb2JqZWN0ID0gY29udGV4dC5saW5rSGFuZGxlci5yZXNvbHZlKGxpbmspO1xuICAgIGlmICghb2JqZWN0KSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobnVsbCk7XG5cbiAgICByZXR1cm4gY29udGV4dC5ldmFsdWF0ZShFeHByZXNzaW9ucy5pbmRleChFeHByZXNzaW9ucy5saXRlcmFsKG9iamVjdCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSkpO1xufVxuXG4vKiogSW5kZXggaW50byBhIGRhdGUsIHByb2R1Y2luZyB2YXJpb3VzIHVzZWZ1bCBmaWVsZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhEYXRlKGRhdGU6IERhdGVUaW1lLCBrZXk6IHN0cmluZykge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS55ZWFyO1xuICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLm1vbnRoO1xuICAgICAgICBjYXNlIFwiZGF5XCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5kYXk7XG4gICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5ob3VyO1xuICAgICAgICBjYXNlIFwibWludXRlXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5taW51dGU7XG4gICAgICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnNlY29uZDtcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5taWxsaXNlY29uZDtcbiAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLndlZWtOdW1iZXI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbi8qKiBJbmRleCBpbnRvIGEgZHVyYXRpb24sIHByb2R1Y2luZyB2YXJpb3VzIHVzZWZ1bCBmaWVsZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhEdXJhdGlvbihkdXI6IER1cmF0aW9uLCBrZXk6IHN0cmluZykge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci55ZWFycztcbiAgICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5tb250aHM7XG4gICAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLmRheXM7XG4gICAgICAgIGNhc2UgXCJob3Vyc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5ob3VycztcbiAgICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgICAgIHJldHVybiBkdXIubWludXRlcztcbiAgICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgICAgIHJldHVybiBkdXIuc2Vjb25kcztcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5taWxsaXNlY29uZHM7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiLyoqIERlZmF1bHQgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0b3IuICovXG5cbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBMaXRlcmFsVHlwZSwgTGluaywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBlc2NhcGVSZWdleCwgY3VycmVudExvY2FsZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbFJlcHJBbGwsIExpdGVyYWxUeXBlT3JBbGwsIHN0cmluZ1NldHRpbmdzIH0gZnJvbSBcImV4cHJlc3Npb24vYmluYXJ5b3BcIjtcbmltcG9ydCB7IEV2YWx1YXRvciB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgRXhwcmVzc2lvbnMgfSBmcm9tIFwiZXhwcmVzc2lvbi9leHByZXNzaW9uXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5cbi8qKlxuICogQSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB3aGljaCB0YWtlcyBpbiBhIGZ1bmN0aW9uIGNvbnRleHQgYW5kIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gVGhyb3dzIGFuIGVycm9yIGlmIGFuXG4gKiBpbnZhbGlkIG51bWJlci90eXBlIG9mIGFyZ3VtZW50cyBhcmUgcGFzc2VkLlxuICovXG5leHBvcnQgdHlwZSBGdW5jdGlvbkltcGwgPSAoY29udGV4dDogRXZhbHVhdG9yLCAuLi5yZXN0OiBMaXRlcmFsW10pID0+IExpdGVyYWw7XG4vKiogQSBcImJvdW5kXCIgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gd2hpY2ggaGFzIGFscmVhZHkgaGFkIGEgZnVuY3Rpb24gY29udGV4dCBwYXNzZWQgdG8gaXQuICovXG5leHBvcnQgdHlwZSBCb3VuZEZ1bmN0aW9uSW1wbCA9ICguLi5hcmdzOiBMaXRlcmFsW10pID0+IExpdGVyYWw7XG5cbi8qKiBBIGZ1bmN0aW9uIHZhcmlhbnQgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYnVpbGRlciB3aGljaCBob2xkcyB0aGUgYXJndW1lbnQgdHlwZXMuICovXG5pbnRlcmZhY2UgRnVuY3Rpb25WYXJpYW50IHtcbiAgICBhcmdzOiBMaXRlcmFsVHlwZU9yQWxsW107XG4gICAgdmFyYXJnczogYm9vbGVhbjtcbiAgICAvKiogVGhlIGltcGxlbWVudGluZyBmdW5jdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyB2YXJpYW50LiAqL1xuICAgIGltcGw6IEZ1bmN0aW9uSW1wbDtcbn1cblxuLyoqXG4gKiBBbGxvd3MgZm9yIHRoZSBjcmVhdGlvbiBvZiBmdW5jdGlvbnMgdGhhdCBjaGVjayB0aGUgbnVtYmVyIGFuZCB0eXBlIG9mIHRoZWlyIGFyZ3VtZW50cywgYW5kIGRpc3BhdGNoXG4gKiB0byBkaWZmZXJlbnQgaW1wbGVtZW5hdGlvbnMgYmFzZWQgb24gdGhlIHR5cGVzIG9mIHRoZSBpbnB1dHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIge1xuICAgIHZhcmlhbnRzOiBGdW5jdGlvblZhcmlhbnRbXTtcbiAgICB2ZWN0b3JpemVkOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXJbXT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnZhcmlhbnRzID0gW107XG4gICAgICAgIHRoaXMudmVjdG9yaXplZCA9IHt9O1xuICAgIH1cblxuICAgIC8qKiBBZGQgYSBnZW5lcmFsIGZ1bmN0aW9uIHZhcmlhbnQgd2hpY2ggYWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBvZiBhbnkgdHlwZS4gKi9cbiAgICBwdWJsaWMgdmFyYXJnKGltcGw6IEZ1bmN0aW9uSW1wbCk6IEZ1bmN0aW9uQnVpbGRlciB7XG4gICAgICAgIHRoaXMudmFyaWFudHMucHVzaCh7IGFyZ3M6IFtdLCB2YXJhcmdzOiB0cnVlLCBpbXBsIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQWRkIGEgZnVuY3Rpb24gdmFyaWFudCB3aGljaCB0YWtlcyBpbiBhIHNpbmdsZSBhcmd1bWVudC4gKi9cbiAgICBwdWJsaWMgYWRkMTxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGFyZ1R5cGU6IFQsXG4gICAgICAgIGltcGw6IChhOiBMaXRlcmFsUmVwckFsbDxUPiwgY29udGV4dDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsXG4gICAgKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IFthcmdUeXBlXSxcbiAgICAgICAgICAgIHZhcmFyZ3M6IGZhbHNlLFxuICAgICAgICAgICAgaW1wbDogKGMsIC4uLnJlc3QpID0+IGltcGwocmVzdFswXSBhcyBMaXRlcmFsUmVwckFsbDxUPiwgYyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQWRkIGEgZnVuY3Rpb24gdmFyaWFudCB3aGljaCB0YWtlcyBpbiB0d28gdHlwZWQgYXJndW1lbnRzLiAqL1xuICAgIHB1YmxpYyBhZGQyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGFyZzE6IFQsXG4gICAgICAgIGFyZzI6IFUsXG4gICAgICAgIGltcGw6IChhOiBMaXRlcmFsUmVwckFsbDxUPiwgYjogTGl0ZXJhbFJlcHJBbGw8VT4sIGNvbnRleHQ6IEV2YWx1YXRvcikgPT4gTGl0ZXJhbFxuICAgICk6IEZ1bmN0aW9uQnVpbGRlciB7XG4gICAgICAgIHRoaXMudmFyaWFudHMucHVzaCh7XG4gICAgICAgICAgICBhcmdzOiBbYXJnMSwgYXJnMl0sXG4gICAgICAgICAgICB2YXJhcmdzOiBmYWxzZSxcbiAgICAgICAgICAgIGltcGw6IChjLCAuLi5yZXN0KSA9PiBpbXBsKHJlc3RbMF0gYXMgTGl0ZXJhbFJlcHJBbGw8VD4sIHJlc3RbMV0gYXMgTGl0ZXJhbFJlcHJBbGw8VT4sIGMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhIGZ1bmN0aW9uIHZhcmlhbnQgd2hpY2ggdGFrZXMgaW4gdGhyZWUgdHlwZWQgYXJndW1lbnRzLiAqL1xuICAgIHB1YmxpYyBhZGQzPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgViBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBhcmcxOiBULFxuICAgICAgICBhcmcyOiBVLFxuICAgICAgICBhcmczOiBWLFxuICAgICAgICBpbXBsOiAoYTogTGl0ZXJhbFJlcHJBbGw8VD4sIGI6IExpdGVyYWxSZXByQWxsPFU+LCBjOiBMaXRlcmFsUmVwckFsbDxWPiwgY29udGV4dDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsXG4gICAgKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IFthcmcxLCBhcmcyLCBhcmczXSxcbiAgICAgICAgICAgIHZhcmFyZ3M6IGZhbHNlLFxuICAgICAgICAgICAgaW1wbDogKGMsIC4uLnJlc3QpID0+XG4gICAgICAgICAgICAgICAgaW1wbChyZXN0WzBdIGFzIExpdGVyYWxSZXByQWxsPFQ+LCByZXN0WzFdIGFzIExpdGVyYWxSZXByQWxsPFU+LCByZXN0WzJdIGFzIExpdGVyYWxSZXByQWxsPFY+LCBjKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBBZGQgdmVjdG9yaXplZCB2YXJpYW50cyB3aGljaCBhY2NlcHQgdGhlIGdpdmVuIG51bWJlciBvZiBhcmd1bWVudHMgYW5kIGRlbGVnYXRlLiAqL1xuICAgIHB1YmxpYyB2ZWN0b3JpemUobnVtQXJnczogbnVtYmVyLCBwb3NpdGlvbnM6IG51bWJlcltdKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52ZWN0b3JpemVkW251bUFyZ3NdID0gcG9zaXRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIHRoZSBudW1iZXIgYW5kIHR5cGUgb2YgYXJndW1lbnRzLCBwYXNzaW5nIHRoZW0gb24gdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHZhcmlhbnQuICovXG4gICAgcHVibGljIGJ1aWxkKCk6IEZ1bmN0aW9uSW1wbCB7XG4gICAgICAgIGxldCBzZWxmOiBGdW5jdGlvbkltcGwgPSAoY29udGV4dDogRXZhbHVhdG9yLCAuLi5hcmdzOiBMaXRlcmFsW10pID0+IHtcbiAgICAgICAgICAgIGxldCB0eXBlczogTGl0ZXJhbFR5cGVbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnVHlwZSA9IExpdGVyYWxzLnR5cGVPZihhcmcpO1xuICAgICAgICAgICAgICAgIGlmICghYXJnVHlwZSkgdGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCBhcmd1bWVudCB0eXBlIGZvciBhcmd1bWVudCAnJHthcmd9J2ApO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goYXJnVHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSB2ZWN0b3JpemF0aW9uLCBwb3NzaWJseSBpbiBtdWx0aXBsZSBmaWVsZHMuXG4gICAgICAgICAgICBpZiAodGhpcy52ZWN0b3JpemVkW3R5cGVzLmxlbmd0aF0pIHtcbiAgICAgICAgICAgICAgICBsZXQgdmVjdG9yaXplZFBvc2l0aW9ucyA9IHRoaXMudmVjdG9yaXplZFt0eXBlcy5sZW5ndGhdLmZpbHRlcigoaykgPT4gdHlwZXNba10gPT0gXCJhcnJheVwiKTtcbiAgICAgICAgICAgICAgICBpZiAodmVjdG9yaXplZFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaW5MZW5ndGggPSB2ZWN0b3JpemVkUG9zaXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwKSA9PiAoYXJnc1twXSBhcyBhbnlbXSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gTWF0aC5taW4ocCwgYykpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIHN1YmZ1bmN0aW9uIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIGxvbmdlc3QgYXJyYXkuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHlvdSBjYWxsIGEgdmVjdG9yaXplZCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudC1sZW5ndGggYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3V0cHV0IGlzIGxpbWl0ZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgYXJyYXkuXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdnBvcyA9IDA7IHZwb3MgPCBtaW5MZW5ndGg7IHZwb3MrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZWN0b3JpemVkUG9zaXRpb25zLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gYXJnc1tpbmRleF0gYXMgYW55W107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFyZ3MucHVzaChhcnJbdnBvc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFyZ3MucHVzaChhcmdzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzZWxmKGNvbnRleHQsIC4uLnN1YmFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRlcjogZm9yIChsZXQgdmFyaWFudCBvZiB0aGlzLnZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQudmFyYXJncykgcmV0dXJuIHZhcmlhbnQuaW1wbChjb250ZXh0LCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hcmdzLmxlbmd0aCAhPSB0eXBlcy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhcmlhbnQuYXJncy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYXJnc1tpbmRleF0gIT0gXCIqXCIgJiYgdmFyaWFudC5hcmdzW2luZGV4XSAhPSB0eXBlc1tpbmRleF0pIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LmltcGwoY29udGV4dCwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBpbXBsZW1lbnRhdGlvbiBvZiAnJHt0aGlzLm5hbWV9JyBmb3VuZCBmb3IgYXJndW1lbnRzOiAke3R5cGVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG59XG5cbi8qKiBVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgRnVuY3Rpb25zIHtcbiAgICAvKiogQmluZCBhIGNvbnRleHQgdG8gYSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiwgeWllbGRpbmcgYSBmdW5jdGlvbiB3aGljaCBkb2VzIG5vdCBuZWVkIHRoZSBjb250ZXh0IGFyZ3VtZW50LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBiaW5kKGZ1bmM6IEZ1bmN0aW9uSW1wbCwgY29udGV4dDogRXZhbHVhdG9yKTogQm91bmRGdW5jdGlvbkltcGwge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4gZnVuYyhjb250ZXh0LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvKiogQmluZCBhIGNvbnRleHQgdG8gYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZ2l2ZW4gbWFwLCB5aWVsZGluZyBhIG5ldyBtYXAgb2YgYm91bmQgZnVuY3Rpb25zLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBiaW5kQWxsKFxuICAgICAgICBmdW5jczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb25JbXBsPixcbiAgICAgICAgY29udGV4dDogRXZhbHVhdG9yXG4gICAgKTogUmVjb3JkPHN0cmluZywgQm91bmRGdW5jdGlvbkltcGw+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQm91bmRGdW5jdGlvbkltcGw+ID0ge307XG4gICAgICAgIGZvciAobGV0IFtrZXksIGZ1bmNdIG9mIE9iamVjdC5lbnRyaWVzKGZ1bmNzKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBGdW5jdGlvbnMuYmluZChmdW5jLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgYWxsIGRlZmluZWQgZnVuY3Rpb25zOyBkZWZpbmVkIGhlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZGF0YXZpZXcsXG4gKiBhbmQgdGVzdCBjb2RlLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIERlZmF1bHRGdW5jdGlvbnMge1xuICAgIGV4cG9ydCBjb25zdCB0eXBlT2YgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwidHlwZVwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChfKSA9PiBcImFycmF5XCIpXG4gICAgICAgIC5hZGQxKFwiYm9vbGVhblwiLCAoXykgPT4gXCJib29sZWFuXCIpXG4gICAgICAgIC5hZGQxKFwiZGF0ZVwiLCAoXykgPT4gXCJkYXRlXCIpXG4gICAgICAgIC5hZGQxKFwiZHVyYXRpb25cIiwgKF8pID0+IFwiZHVyYXRpb25cIilcbiAgICAgICAgLmFkZDEoXCJmdW5jdGlvblwiLCAoXykgPT4gXCJmdW5jdGlvblwiKVxuICAgICAgICAuYWRkMShcImxpbmtcIiwgKF8pID0+IFwibGlua1wiKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKF8pID0+IFwibnVsbFwiKVxuICAgICAgICAuYWRkMShcIm51bWJlclwiLCAoXykgPT4gXCJudW1iZXJcIilcbiAgICAgICAgLmFkZDEoXCJvYmplY3RcIiwgKF8pID0+IFwib2JqZWN0XCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChfKSA9PiBcInN0cmluZ1wiKVxuICAgICAgICAuYWRkMShcIipcIiwgKF8pID0+IFwidW5rbm93blwiKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBDb21wdXRlIHRoZSBsZW5ndGggb2YgYSBkYXRhIHR5cGUuICovXG4gICAgZXhwb3J0IGNvbnN0IGxlbmd0aCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJsZW5ndGhcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYSkgPT4gYS5sZW5ndGgpXG4gICAgICAgIC5hZGQxKFwib2JqZWN0XCIsIChhKSA9PiBPYmplY3Qua2V5cyhhKS5sZW5ndGgpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChhKSA9PiBhLmxlbmd0aClcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfYSkgPT4gMClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogTGlzdCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3QgbGlzdDogRnVuY3Rpb25JbXBsID0gKF9jb250ZXh0LCAuLi5hcmdzKSA9PiBhcmdzO1xuXG4gICAgLyoqIE9iamVjdCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3Qgb2JqZWN0OiBGdW5jdGlvbkltcGwgPSAoX2NvbnRleHQsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICUgMiAhPSAwKSB0aHJvdyBFcnJvcihcIm9iamVjdCgpIHJlcXVpcmVzIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgTGl0ZXJhbD4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gYXJnc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIUxpdGVyYWxzLmlzU3RyaW5nKGtleSkpIHRocm93IEVycm9yKFwia2V5cyBzaG91bGQgYmUgb2YgdHlwZSBzdHJpbmcgZm9yIG9iamVjdChrZXkxLCB2YWx1ZTEsIC4uLilcIik7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGFyZ3NbaW5kZXggKyAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qKiBJbnRlcm5hbCBsaW5rIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBsaW5rOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibGlua1wiKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAoYSwgYykgPT4gTGluay5maWxlKGMubGlua0hhbmRsZXIubm9ybWFsaXplKGEpLCBmYWxzZSkpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAoYSkgPT4gYSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfYSkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsICh0LCBkLCBjKSA9PiBMaW5rLmZpbGUoYy5saW5rSGFuZGxlci5ub3JtYWxpemUodCksIGZhbHNlLCBkKSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsICh0LCBkLCBlLCBjKSA9PiBMaW5rLmZpbGUoYy5saW5rSGFuZGxlci5ub3JtYWxpemUodCksIGUsIGQpKVxuICAgICAgICAuYWRkMihcImxpbmtcIiwgXCJzdHJpbmdcIiwgKHQsIGQpID0+IHQud2l0aERpc3BsYXkoZCkpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAodCwgX24sIGMpID0+IGxpbmsoYywgdCkpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBFbWJlZCBhbmQgdW4tZW1iZWQgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBjb25zdCBlbWJlZDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImVtYmVkXCIpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAobCkgPT4gbC50b0VtYmVkKCkpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYWRkMihcImxpbmtcIiwgXCJib29sZWFuXCIsIChsLCBlLCBjKSA9PiAoZSA/IGwudG9FbWJlZCgpIDogbC5mcm9tRW1iZWQoKSkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIERhdGUgY29uc3RydWN0b3IgZnVuY3Rpb24uICovXG4gICAgZXhwb3J0IGNvbnN0IGRhdGUgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZGF0ZVwiKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAoc3RyKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IFBSSU1JVElWRVMuZGF0ZVBsdXMucGFyc2Uoc3RyKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLnN0YXR1cykgcmV0dXJuIHBhcnNlZERhdGUudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcImRhdGVcIiwgKGQpID0+IGQpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAobGluaywgYykgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGZyb20gdGhlIGRpc3BsYXkuLi5cbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IFBSSU1JVElWRVMuZGF0ZS5wYXJzZShsaW5rLmRpc3BsYXkpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLnN0YXR1cykgcmV0dXJuIHBhcnNlZERhdGUudmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHRvIHBhcnNlIGZyb20gdGhlIHBhdGguLi5cbiAgICAgICAgICAgIGxldCBwYXJzZWREYXRlID0gUFJJTUlUSVZFUy5kYXRlLnBhcnNlKGxpbmsucGF0aCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkRGF0ZS5zdGF0dXMpIHJldHVybiBwYXJzZWREYXRlLnZhbHVlO1xuXG4gICAgICAgICAgICAvLyBUaGVuIHB1bGwgaXQgZnJvbSB0aGUgZmlsZS5cbiAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IGMubGlua0hhbmRsZXIucmVzb2x2ZShsaW5rLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHJlc29sdmVkICYmIChyZXNvbHZlZCBhcyBhbnkpPy5maWxlPy5kYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc29sdmVkIGFzIGFueSk/LmZpbGU/LmRheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChkLCBmKSA9PiB7XG4gICAgICAgICAgICBpZiAoZiA9PT0gXCJ4XCIgfHwgZiA9PT0gXCJYXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2ggPSBOVU1CRVJfUkVHRVguZXhlYyhkKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHJldHVybiBEYXRlVGltZS5mcm9tTWlsbGlzKE51bWJlci5wYXJzZUludChtYXRjaFswXSkgKiAoZiA9PT0gXCJYXCIgPyAxMDAwIDogMSkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk5vdCBhIG51bWJlciBmb3IgZm9ybWF0KCAoJHsgZiB9KTogJHsgZCB9XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZERhdGUgPSBEYXRlVGltZS5mcm9tRm9ybWF0KGQsIGYpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLmlzVmFsaWQpIHJldHVybiBwYXJzZWREYXRlO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FuJ3QgaGFuZGxlIGZvcm1hdCAoJHtmfSkgb24gZGF0ZSBzdHJpbmcgKCR7ZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIER1cmF0aW9uIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBkdXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZHVyXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChzdHIpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWREdXIgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHN0ci50cmltKCkpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZER1ci5zdGF0dXMpIHJldHVybiBwYXJzZWREdXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcImR1cmF0aW9uXCIsIChkKSA9PiBkKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKGQpID0+IGQpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBGb3JtYXQgYSBkYXRlIHVzaW5nIGEgbHV4b24vbW9tZW50LXN0eWxlIGRhdGUgZm9ybWF0LiAqL1xuICAgIGV4cG9ydCBjb25zdCBkYXRlZm9ybWF0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImRhdGVmb3JtYXRcIilcbiAgICAgICAgLmFkZDIoXCJkYXRlXCIsIFwic3RyaW5nXCIsIChkYXRlLCBmb3JtYXQpID0+IGRhdGUudG9Gb3JtYXQoZm9ybWF0LCB7IGxvY2FsZTogY3VycmVudExvY2FsZSgpIH0pKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCJzdHJpbmdcIiwgKF9udWwsIF9mb3JtYXQpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBsb2NhbHRpbWUgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibG9jYWx0aW1lXCIpXG4gICAgICAgIC5hZGQxKFwiZGF0ZVwiLCAoZCkgPT4gZC50b0xvY2FsKCkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBjb25zdCBOVU1CRVJfUkVHRVggPSAvLT9bMC05XSsoXFwuWzAtOV0rKT8vO1xuXG4gICAgLyoqIE51bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3QgbnVtYmVyID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm51bWJlclwiKVxuICAgICAgICAuYWRkMShcIm51bWJlclwiLCAoYSkgPT4gYSlcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHN0cikgPT4ge1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gTlVNQkVSX1JFR0VYLmV4ZWMoc3RyKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KG1hdGNoWzBdKTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFueSB2YWx1ZSB0byBhIHJlYXNvbmFibGUgaW50ZXJuYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBNb3N0IHVzZWZ1bCBmb3IgZGF0ZXMsIHN0cmluZ3MsIG51bWJlcnMsIGFuZFxuICAgICAqIHNvIG9uLlxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBzdHJpbmcgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3RyaW5nXCIpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoYSwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhhLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgcm91bmQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicm91bmRcIilcbiAgICAgICAgLmFkZDEoXCJudW1iZXJcIiwgKG4pID0+IE1hdGgucm91bmQobikpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmFkZDIoXCJudW1iZXJcIiwgXCJudW1iZXJcIiwgKG4sIHApID0+IHtcbiAgICAgICAgICAgIGlmIChwIDw9IDApIHJldHVybiBNYXRoLnJvdW5kKG4pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobi50b0ZpeGVkKHApKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudW1iZXJcIiwgXCJudWxsXCIsIChuKSA9PiBNYXRoLnJvdW5kKG4pKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtaW46IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJtaW5cIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoYSwgX24pID0+IGEpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKF9uLCBhKSA9PiBhKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChhLCBiLCBjdHgpID0+IChMaXRlcmFscy5jb21wYXJlKGEsIGIsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpIDw9IDAgPyBhIDogYikpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGEsIGN0eCkgPT4gbWluKGN0eCwgLi4uYSkpXG4gICAgICAgIC52YXJhcmcoKGN0eCwgLi4uYXJncykgPT4gKGFyZ3MubGVuZ3RoID09IDAgPyBudWxsIDogYXJncy5yZWR1Y2UoKHAsIGMpID0+IG1pbihjdHgsIHAsIGMpKSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1heDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1heFwiKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChhLCBfbikgPT4gYSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIGEpID0+IGEpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIipcIiwgKGEsIGIsIGN0eCkgPT4gKExpdGVyYWxzLmNvbXBhcmUoYSwgYiwgY3R4LmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSkgPiAwID8gYSA6IGIpKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhLCBjdHgpID0+IG1heChjdHgsIC4uLmEpKVxuICAgICAgICAudmFyYXJnKChjdHgsIC4uLmFyZ3MpID0+IChhcmdzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGFyZ3MucmVkdWNlKChwLCBjKSA9PiBtYXgoY3R4LCBwLCBjKSkpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtaW5ieTogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1pbmJ5XCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmdW5jLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWVzID0gYXJyLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBtYXBwZWQ6IGZ1bmMoY3R4LCB2KSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZmlsdGVyZWQgPSB2YWx1ZXMuZmlsdGVyKCh2KSA9PiAhTGl0ZXJhbHMuaXNOdWxsKHYubWFwcGVkKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDApIHJldHVybiBhcnJbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuY29tcGFyZShwLm1hcHBlZCwgYy5tYXBwZWQsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpIDw9IDApIHJldHVybiBwO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KS52YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiZnVuY3Rpb25cIiwgKF9hcnIsIF9mdW5jLCBfY3R4KSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtYXhieTogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1heGJ5XCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmdW5jLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWVzID0gYXJyLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBtYXBwZWQ6IGZ1bmMoY3R4LCB2KSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZmlsdGVyZWQgPSB2YWx1ZXMuZmlsdGVyKCh2KSA9PiAhTGl0ZXJhbHMuaXNOdWxsKHYubWFwcGVkKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDApIHJldHVybiBhcnJbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuY29tcGFyZShwLm1hcHBlZCwgYy5tYXBwZWQsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpID4gMCkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYztcbiAgICAgICAgICAgIH0pLnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCJmdW5jdGlvblwiLCAoX2FyciwgX2Z1bmMsIF9jdHgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHN0cmlwdGltZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdHJpcHRpbWVcIilcbiAgICAgICAgLmFkZDEoXCJkYXRlXCIsIChkKSA9PiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogZC55ZWFyLCBtb250aDogZC5tb250aCwgZGF5OiBkLmRheSB9KSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfbikgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gRGVmYXVsdCBjb250YWlucywgd2hpY2ggbG9va3MgdGhyb3VnaCBkYXRhIHN0cnVjdHVyZXMgcmVjdXJzaXZlbHkuXG4gICAgZXhwb3J0IGNvbnN0IGNvbnRhaW5zOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiY29udGFpbnNcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIipcIiwgKGwsIGVsZW0sIGNvbnRleHQpID0+IGwuc29tZSgoZSkgPT4gY29udGFpbnMoY29udGV4dCwgZSwgZWxlbSkpKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoaGF5c3RhY2ssIG5lZWRsZSkgPT4gaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSlcbiAgICAgICAgLmFkZDIoXCJvYmplY3RcIiwgXCJzdHJpbmdcIiwgKG9iaiwga2V5KSA9PiBrZXkgaW4gb2JqKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChlbGVtMSwgZWxlbTIsIGNvbnRleHQpID0+XG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTEpLCBcIj1cIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMikpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpXG4gICAgICAgIClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gQ2FzZSBpbnNlbnNpdGl2ZSB2ZXJzaW9uIG9mIGNvbnRhaW5zLlxuICAgIGV4cG9ydCBjb25zdCBpY29udGFpbnM6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJpY29udGFpbnNcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIipcIiwgKGwsIGVsZW0sIGNvbnRleHQpID0+IGwuc29tZSgoZSkgPT4gaWNvbnRhaW5zKGNvbnRleHQsIGUsIGVsZW0pKSlcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKGhheXN0YWNrLCBuZWVkbGUpID0+XG4gICAgICAgICAgICBoYXlzdGFjay50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKG5lZWRsZS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwib2JqZWN0XCIsIFwic3RyaW5nXCIsIChvYmosIGtleSkgPT4ga2V5IGluIG9iailcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAoZWxlbTEsIGVsZW0yLCBjb250ZXh0KSA9PlxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGVsZW0xKSwgXCI9XCIsIEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTIpKSlcbiAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKVxuICAgICAgICApXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIFwiZXhhY3RcIiBjb250YWlucywgZG9lcyBub3QgbG9vayByZWN1cnNpdmVseS5cbiAgICBleHBvcnQgY29uc3QgZWNvbnRhaW5zOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZWNvbnRhaW5zXCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCIqXCIsIChsLCBlbGVtLCBjb250ZXh0KSA9PlxuICAgICAgICAgICAgbC5zb21lKChlKSA9PlxuICAgICAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGUpKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoaGF5c3RhY2ssIG5lZWRsZSkgPT4gaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSlcbiAgICAgICAgLmFkZDIoXCJvYmplY3RcIiwgXCJzdHJpbmdcIiwgKG9iaiwga2V5KSA9PiBrZXkgaW4gb2JqKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChlbGVtMSwgZWxlbTIsIGNvbnRleHQpID0+XG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTEpLCBcIj1cIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMikpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpXG4gICAgICAgIClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gQ2FzZSBpbnNlbnNpdGl2ZSBjb250YWlucyB3aGljaCBsb29rcyBmb3IgZXhhY3Qgd29yZCBtYXRjaGVzIChpLmUuLCBib3VuZHJ5LXRvLWJvdW5kcnkgbWF0Y2gpLlxuICAgIGV4cG9ydCBjb25zdCBjb250YWluc3dvcmQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJjb250YWluc3dvcmRcIilcbiAgICAgICAgLmFkZDIoXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIChoYXksIG5lZWRsZSkgPT4gISFoYXkubWF0Y2gobmV3IFJlZ0V4cChcIi4qXFxcXGJcIiArIGVzY2FwZVJlZ2V4KG5lZWRsZSkgKyBcIlxcXFxiLipcIiwgXCJpXCIpKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKF9hLCBfYikgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9iKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogRXh0cmFjdCAwIG9yIG1vcmUga2V5cyBmcm9tIGEgZ2l2ZW4gb2JqZWN0IHZpYSBpbmRleGluZy4gKi9cbiAgICBleHBvcnQgY29uc3QgZXh0cmFjdDogRnVuY3Rpb25JbXBsID0gKGNvbnRleHQ6IEV2YWx1YXRvciwgLi4uYXJnczogTGl0ZXJhbFtdKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJleHRyYWN0KG9iamVjdCwga2V5MSwgLi4uKSByZXF1aXJlcyBhdCBsZWFzdCAxIGFyZ3VtZW50XCI7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgaGFuZGxlIHZlY3Rvcml6YXRpb24gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgICAgICBsZXQgb2JqZWN0ID0gYXJnc1swXTtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzQXJyYXkob2JqZWN0KSkgcmV0dXJuIG9iamVjdC5tYXAoKHYpID0+IGV4dHJhY3QoY29udGV4dCwgdiwgLi4uYXJncy5zbGljZSgxKSkpO1xuXG4gICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFMaXRlcmFscy5pc1N0cmluZyhrZXkpKSB0aHJvdyBFcnJvcihcImV4dHJhY3Qob2JqZWN0LCBrZXkxLCAuLi4pIG11c3QgYmUgY2FsbGVkIHdpdGggc3RyaW5nIGtleXNcIik7XG5cbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5pbmRleChFeHByZXNzaW9ucy5saXRlcmFsKG9iamVjdCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSkpXG4gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBSZXZlcnNlIGFuIGFycmF5IG9yIHN0cmluZy5cbiAgICBleHBvcnQgY29uc3QgcmV2ZXJzZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZXZlcnNlXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGwpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gbC5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSByZXN1bHQucHVzaChsW2luZGV4XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAobCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGwubGVuZ3RoOyBjKyspIHJlc3VsdCArPSBsW2wubGVuZ3RoIC0gYyAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIFNvcnQgYW4gYXJyYXk7IGlmIGdpdmVuIHR3byBhcmd1bWVudHMsIHNvcnRzIGJ5IHRoZSBrZXkgcmV0dXJuZWQuXG4gICAgZXhwb3J0IGNvbnN0IHNvcnQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzb3J0XCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGxpc3QsIGNvbnRleHQpID0+IHNvcnQoY29udGV4dCwgbGlzdCwgKF9jdHg6IEV2YWx1YXRvciwgYTogTGl0ZXJhbCkgPT4gYSkpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAobGlzdCwga2V5LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKFtdIGFzIExpdGVyYWxbXSkuY29uY2F0KGxpc3QpO1xuICAgICAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYWtleSA9IGtleShjb250ZXh0LCBhKTtcbiAgICAgICAgICAgICAgICBsZXQgYmtleSA9IGtleShjb250ZXh0LCBiKTtcbiAgICAgICAgICAgICAgICBsZXQgbGUgPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGFrZXkpLCBcIjxcIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChia2V5KSkpXG4gICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpO1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5pc1RydXRoeShsZSkpIHJldHVybiAtMTtcblxuICAgICAgICAgICAgICAgIGxldCBlcSA9IGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoYWtleSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGJrZXkpKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzVHJ1dGh5KGVxKSkgcmV0dXJuIDA7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCByZWdleHRlc3QgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicmVnZXh0ZXN0XCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChwYXR0ZXJuOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpID0+IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KGZpZWxkKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIF9hKSA9PiBmYWxzZSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9uKSA9PiBmYWxzZSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZ2V4bWF0Y2ggPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicmVnZXhtYXRjaFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAocGF0dGVybjogc3RyaW5nLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uc3RhcnRzV2l0aChcIl5cIikgJiYgIXBhdHRlcm4uZW5kc1dpdGgoXCIkXCIpKSBwYXR0ZXJuID0gXCJeXCIgKyBwYXR0ZXJuICsgXCIkXCI7XG4gICAgICAgICAgICByZXR1cm4gISFmaWVsZC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIF9hKSA9PiBmYWxzZSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9uKSA9PiBmYWxzZSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZ2V4cmVwbGFjZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWdleHJlcGxhY2VcIilcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKGZpZWxkOiBzdHJpbmcsIHBhdDogc3RyaW5nLCByZXA6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVnID0gbmV3IFJlZ0V4cChwYXQsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQucmVwbGFjZShyZWcsIHJlcCk7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHJlZ2V4cCAnJHtwYXR9JyBpbiByZWdleHJlcGxhY2VgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGxvd2VyID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImxvd2VyXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChzKSA9PiBzLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgdXBwZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwidXBwZXJcIilcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHMpID0+IHMudG9Mb2NhbGVVcHBlckNhc2UoKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCByZXBsYWNlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInJlcGxhY2VcIilcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0ciwgcGF0LCByZXByKSA9PiBzdHIuc3BsaXQocGF0KS5qb2luKHJlcHIpKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyBFbnN1cmUgdW5kZWZpbmVkIG1hdGNoZXMgdHVybiBpbnRvIGVtcHR5IHN0cmluZ3MgZm9yIHNwbGl0LzIgYW5kIHNwbGl0LzMuXG4gICAgY29uc3Qgc3BsaXRJbXBsID0gKHN0cjogc3RyaW5nLCBkZWxpbTogc3RyaW5nLCBsaW1pdD86IG51bWJlcik6IHN0cmluZ1tdID0+XG4gICAgICAgIHN0ci5zcGxpdChuZXcgUmVnRXhwKGRlbGltKSwgbGltaXQpLm1hcCgoc3RyKSA9PiBzdHIgfHwgXCJcIik7XG5cbiAgICAvKiogU3BsaXQgYSBzdHJpbmcgb24gYSBnaXZlbiBzdHJpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IHNwbGl0OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3BsaXRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0cmluZywgc3BsaXR0ZXIpID0+IHNwbGl0SW1wbChzdHJpbmcsIHNwbGl0dGVyKSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0cmluZywgc3BsaXR0ZXIsIGxpbWl0KSA9PiBzcGxpdEltcGwoc3RyaW5nLCBzcGxpdHRlciwgbGltaXQpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3RhcnRzd2l0aDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInN0YXJ0c3dpdGhcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0ciwgc3RhcnRpbmcpID0+IHN0ci5zdGFydHNXaXRoKHN0YXJ0aW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBlbmRzd2l0aDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImVuZHN3aXRoXCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChzdHIsIGVuZGluZykgPT4gc3RyLmVuZHNXaXRoKGVuZGluZykpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcGFkbGVmdDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInBhZGxlZnRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0ciwgbGVuKSA9PiBzdHIucGFkU3RhcnQobGVuLCBcIiBcIikpXG4gICAgICAgIC5hZGQzKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIChzdHIsIGxlbiwgcGFkZGluZykgPT4gc3RyLnBhZFN0YXJ0KGxlbiwgcGFkZGluZykpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHBhZHJpZ2h0OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicGFkcmlnaHRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0ciwgbGVuKSA9PiBzdHIucGFkRW5kKGxlbiwgXCIgXCIpKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN0cmluZ1wiLCAoc3RyLCBsZW4sIHBhZGRpbmcpID0+IHN0ci5wYWRFbmQobGVuLCBwYWRkaW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3Vic3RyaW5nOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3Vic3RyaW5nXCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIChzdHIsIHN0YXJ0KSA9PiBzdHIuc3Vic3RyaW5nKHN0YXJ0KSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJudW1iZXJcIiwgKHN0ciwgc3RhcnQsIGVuZCkgPT4gc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgdHJ1bmNhdGU6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJ0cnVuY2F0ZVwiKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN0cmluZ1wiLCAoc3RyLCBsZW5ndGgsIHN1ZmZpeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiBsZW5ndGggLSBzdWZmaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkpICsgc3VmZml4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcIm51bWJlclwiLCAoc3RyLCBsZW5ndGgsIGN0eCkgPT4gdHJ1bmNhdGUoY3R4LCBzdHIsIGxlbmd0aCwgXCIuLi5cIikpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGZkZWZhdWx0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImRlZmF1bHRcIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAodiwgYmspID0+IChMaXRlcmFscy5pc051bGwodikgPyBiayA6IHYpKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgbGRlZmF1bHQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibGRlZmF1bHRcIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAodiwgYmspID0+IChMaXRlcmFscy5pc051bGwodikgPyBiayA6IHYpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBjaG9pY2UgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiY2hvaWNlXCIpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCIqXCIsIChiLCBsZWZ0LCByaWdodCkgPT4gKExpdGVyYWxzLmlzVHJ1dGh5KGIpID8gbGVmdCA6IHJpZ2h0KSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZHVjZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWR1Y2VcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcInN0cmluZ1wiLCAobGlzLCBvcCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvcCAhPSBcIitcIiAmJiBvcCAhPSBcIi1cIiAmJiBvcCAhPSBcIipcIiAmJiBvcCAhPSBcIi9cIiAmJiBvcCAhPSBcIiZcIiAmJiBvcCAhPSBcInxcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcInJlZHVjZShhcnJheSwgb3ApIHN1cHBvcnRzICcrJywgJy0nLCAnLycsICcqJywgJyYnLCBhbmQgJ3wnXCIpO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBsaXNbMF07XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbCh2YWx1ZSksIG9wLCBFeHByZXNzaW9ucy5saXRlcmFsKGxpc1tpbmRleF0pKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChsaXMsIG9wLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAobGlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbGlzWzBdO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxpcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG51bGwgdmFsdWVzIHRvIHJlZHVjZSB0aGUgcGFpbiBvZiBzdW1taW5nIG92ZXIgZmllbGRzIHRoYXQgbWF5IG9yIG1heSBub3QgZXhpc3QuXG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzTnVsbChsaXNbaW5kZXhdKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG9wKGNvbnRleHQsIHZhbHVlLCBsaXNbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHN1bSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdW1cIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyLCBjKSA9PiByZWR1Y2UoYywgYXJyLCBcIitcIikpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoZSkgPT4gZSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgYXZlcmFnZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhdmVyYWdlXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFycmF5LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBhZGQgPSBzdW0oY29udGV4dCwgYXJyYXkpO1xuICAgICAgICAgICAgaWYgKGFkZCA9PSBudWxsIHx8IGFkZCA9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGFkZCksIFwiL1wiLCBFeHByZXNzaW9ucy5saXRlcmFsKGFycmF5Lmxlbmd0aCkpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIipcIiwgKGUpID0+IGUpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHByb2R1Y3QgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicHJvZHVjdFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIsIGMpID0+IHJlZHVjZShjLCBhcnIsIFwiKlwiKSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBqb2luOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiam9pblwiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwic3RyaW5nXCIsIChhcnIsIHNlcCwgY3R4KSA9PlxuICAgICAgICAgICAgYXJyLm1hcCgoZSkgPT4gTGl0ZXJhbHMudG9TdHJpbmcoZSwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpLmpvaW4oc2VwKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJudWxsXCIsIChhcnIsIF9zLCBjb250ZXh0KSA9PiBqb2luKGNvbnRleHQsIGFyciwgXCIsIFwiKSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwic3RyaW5nXCIsIChlbGVtLCBzZXAsIGN0eCkgPT4gTGl0ZXJhbHMudG9TdHJpbmcoZWxlbSwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFyciwgY29udGV4dCkgPT4gam9pbihjb250ZXh0LCBhcnIsIFwiLCBcIikpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoZSwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhlLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGFueSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhbnlcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiBhcnIuc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiZnVuY3Rpb25cIiwgKGFyciwgZiwgY3R4KSA9PiBhcnIuc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoZihjdHgsIHYpKSkpXG4gICAgICAgIC52YXJhcmcoKF9jdHgsIC4uLmFyZ3MpID0+IGFyZ3Muc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBhbGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiYWxsXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFycikgPT4gYXJyLmV2ZXJ5KCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeSh2KSkpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmLCBjdHgpID0+IGFyci5ldmVyeSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoZihjdHgsIHYpKSkpXG4gICAgICAgIC52YXJhcmcoKF9jdHgsIC4uLmFyZ3MpID0+IGFyZ3MuZXZlcnkoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KHYpKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgbm9uZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhbGxcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiAhYXJyLnNvbWUoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KHYpKSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gIWFyci5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeShmKGN0eCwgdikpKSlcbiAgICAgICAgLnZhcmFyZygoX2N0eCwgLi4uYXJncykgPT4gIWFyZ3Muc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBmaWx0ZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZmlsdGVyXCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmLCBjdHgpID0+IGFyci5maWx0ZXIoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KGYoY3R4LCB2KSkpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1hcCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJtYXBcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gYXJyLm1hcCgodikgPT4gZihjdHgsIHYpKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBub25udWxsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm5vbm51bGxcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiBhcnIuZmlsdGVyKCh2KSA9PiBMaXRlcmFscy50eXBlT2YodikgIT0gXCJudWxsXCIpKVxuICAgICAgICAudmFyYXJnKChfY3R4LCAuLi5hcmdzKSA9PiBhcmdzLmZpbHRlcigodikgPT4gTGl0ZXJhbHMudHlwZU9mKHYpICE9IFwibnVsbFwiKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogR2V0cyBhbiBvYmplY3QgY29udGFpbmluZyBhIGxpbmsncyBvd24gcHJvcGVydGllcyAqL1xuICAgIGV4cG9ydCBjb25zdCBtZXRhOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibWV0YVwiKVxuICAgICAgICAuYWRkMShcImxpbmtcIiwgKGxpbmspID0+ICh7XG4gICAgICAgICAgICBkaXNwbGF5OiBsaW5rLmRpc3BsYXkgPz8gbnVsbCxcbiAgICAgICAgICAgIGVtYmVkOiBsaW5rLmVtYmVkLFxuICAgICAgICAgICAgcGF0aDogbGluay5wYXRoLFxuICAgICAgICAgICAgc3VicGF0aDogbGluay5zdWJwYXRoID8/IG51bGwsXG4gICAgICAgICAgICB0eXBlOiBsaW5rLnR5cGUsXG4gICAgICAgIH0pKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIENvbmNhdGVuYXRlcyBzdWItYXJyYXkgZWxlbWVudHMgaW50byBhIG5ldyBhcnJheVxuICAgIGV4cG9ydCBjb25zdCBmbGF0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImZsYXRcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEuZmxhdCgpO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwibnVtYmVyXCIsIChhLCBuKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gYS5mbGF0KG4pO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG59XG5cbi8qKiBEZWZhdWx0IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdG9yLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlVOQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkltcGw+ID0ge1xuICAgIC8vIENvbnN0cnVjdG9ycy5cbiAgICBsaXN0OiBEZWZhdWx0RnVuY3Rpb25zLmxpc3QsXG4gICAgYXJyYXk6IERlZmF1bHRGdW5jdGlvbnMubGlzdCxcbiAgICBsaW5rOiBEZWZhdWx0RnVuY3Rpb25zLmxpbmssXG4gICAgZW1iZWQ6IERlZmF1bHRGdW5jdGlvbnMuZW1iZWQsXG4gICAgZGF0ZTogRGVmYXVsdEZ1bmN0aW9ucy5kYXRlLFxuICAgIGR1cjogRGVmYXVsdEZ1bmN0aW9ucy5kdXIsXG4gICAgZGF0ZWZvcm1hdDogRGVmYXVsdEZ1bmN0aW9ucy5kYXRlZm9ybWF0LFxuICAgIGxvY2FsdGltZTogRGVmYXVsdEZ1bmN0aW9ucy5sb2NhbHRpbWUsXG4gICAgbnVtYmVyOiBEZWZhdWx0RnVuY3Rpb25zLm51bWJlcixcbiAgICBzdHJpbmc6IERlZmF1bHRGdW5jdGlvbnMuc3RyaW5nLFxuICAgIG9iamVjdDogRGVmYXVsdEZ1bmN0aW9ucy5vYmplY3QsXG4gICAgdHlwZW9mOiBEZWZhdWx0RnVuY3Rpb25zLnR5cGVPZixcblxuICAgIC8vIE1hdGggT3BlcmF0aW9ucy5cbiAgICByb3VuZDogRGVmYXVsdEZ1bmN0aW9ucy5yb3VuZCxcbiAgICBtaW46IERlZmF1bHRGdW5jdGlvbnMubWluLFxuICAgIG1heDogRGVmYXVsdEZ1bmN0aW9ucy5tYXgsXG4gICAgbWluYnk6IERlZmF1bHRGdW5jdGlvbnMubWluYnksXG4gICAgbWF4Ynk6IERlZmF1bHRGdW5jdGlvbnMubWF4YnksXG5cbiAgICAvLyBTdHJpbmcgb3BlcmF0aW9ucy5cbiAgICByZWdleHJlcGxhY2U6IERlZmF1bHRGdW5jdGlvbnMucmVnZXhyZXBsYWNlLFxuICAgIHJlZ2V4dGVzdDogRGVmYXVsdEZ1bmN0aW9ucy5yZWdleHRlc3QsXG4gICAgcmVnZXhtYXRjaDogRGVmYXVsdEZ1bmN0aW9ucy5yZWdleG1hdGNoLFxuICAgIHJlcGxhY2U6IERlZmF1bHRGdW5jdGlvbnMucmVwbGFjZSxcbiAgICBsb3dlcjogRGVmYXVsdEZ1bmN0aW9ucy5sb3dlcixcbiAgICB1cHBlcjogRGVmYXVsdEZ1bmN0aW9ucy51cHBlcixcbiAgICBzcGxpdDogRGVmYXVsdEZ1bmN0aW9ucy5zcGxpdCxcbiAgICBzdGFydHN3aXRoOiBEZWZhdWx0RnVuY3Rpb25zLnN0YXJ0c3dpdGgsXG4gICAgZW5kc3dpdGg6IERlZmF1bHRGdW5jdGlvbnMuZW5kc3dpdGgsXG4gICAgcGFkbGVmdDogRGVmYXVsdEZ1bmN0aW9ucy5wYWRsZWZ0LFxuICAgIHBhZHJpZ2h0OiBEZWZhdWx0RnVuY3Rpb25zLnBhZHJpZ2h0LFxuICAgIHN1YnN0cmluZzogRGVmYXVsdEZ1bmN0aW9ucy5zdWJzdHJpbmcsXG4gICAgdHJ1bmNhdGU6IERlZmF1bHRGdW5jdGlvbnMudHJ1bmNhdGUsXG5cbiAgICAvLyBEYXRlIE9wZXJhdGlvbnMuXG4gICAgc3RyaXB0aW1lOiBEZWZhdWx0RnVuY3Rpb25zLnN0cmlwdGltZSxcblxuICAgIC8vIExpc3Qgb3BlcmF0aW9ucy5cbiAgICBsZW5ndGg6IERlZmF1bHRGdW5jdGlvbnMubGVuZ3RoLFxuICAgIGNvbnRhaW5zOiBEZWZhdWx0RnVuY3Rpb25zLmNvbnRhaW5zLFxuICAgIGljb250YWluczogRGVmYXVsdEZ1bmN0aW9ucy5pY29udGFpbnMsXG4gICAgZWNvbnRhaW5zOiBEZWZhdWx0RnVuY3Rpb25zLmVjb250YWlucyxcbiAgICBjb250YWluc3dvcmQ6IERlZmF1bHRGdW5jdGlvbnMuY29udGFpbnN3b3JkLFxuICAgIHJldmVyc2U6IERlZmF1bHRGdW5jdGlvbnMucmV2ZXJzZSxcbiAgICBzb3J0OiBEZWZhdWx0RnVuY3Rpb25zLnNvcnQsXG4gICAgZmxhdDogRGVmYXVsdEZ1bmN0aW9ucy5mbGF0LFxuXG4gICAgLy8gQWdncmVnYXRpb24gb3BlcmF0aW9ucyBsaWtlIHJlZHVjZS5cbiAgICByZWR1Y2U6IERlZmF1bHRGdW5jdGlvbnMucmVkdWNlLFxuICAgIGpvaW46IERlZmF1bHRGdW5jdGlvbnMuam9pbixcbiAgICBzdW06IERlZmF1bHRGdW5jdGlvbnMuc3VtLFxuICAgIHByb2R1Y3Q6IERlZmF1bHRGdW5jdGlvbnMucHJvZHVjdCxcbiAgICBhdmVyYWdlOiBEZWZhdWx0RnVuY3Rpb25zLmF2ZXJhZ2UsXG4gICAgYWxsOiBEZWZhdWx0RnVuY3Rpb25zLmFsbCxcbiAgICBhbnk6IERlZmF1bHRGdW5jdGlvbnMuYW55LFxuICAgIG5vbmU6IERlZmF1bHRGdW5jdGlvbnMubm9uZSxcbiAgICBmaWx0ZXI6IERlZmF1bHRGdW5jdGlvbnMuZmlsdGVyLFxuICAgIG1hcDogRGVmYXVsdEZ1bmN0aW9ucy5tYXAsXG4gICAgbm9ubnVsbDogRGVmYXVsdEZ1bmN0aW9ucy5ub25udWxsLFxuXG4gICAgLy8gT2JqZWN0L1V0aWxpdHkgb3BlcmF0aW9ucy5cbiAgICBleHRyYWN0OiBEZWZhdWx0RnVuY3Rpb25zLmV4dHJhY3QsXG4gICAgZGVmYXVsdDogRGVmYXVsdEZ1bmN0aW9ucy5mZGVmYXVsdCxcbiAgICBsZGVmYXVsdDogRGVmYXVsdEZ1bmN0aW9ucy5sZGVmYXVsdCxcbiAgICBjaG9pY2U6IERlZmF1bHRGdW5jdGlvbnMuY2hvaWNlLFxuICAgIG1ldGE6IERlZmF1bHRGdW5jdGlvbnMubWV0YSxcbn07XG4iLCAiLyoqIENvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHF1ZXJ5IGxhbmd1YWdlIGV2YWx1YXRpb24gZW5naW5lLiAqL1xuXG5pbXBvcnQgeyBEYXRhT2JqZWN0LCBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBCaW5hcnlPcEhhbmRsZXIsIGNyZWF0ZUJpbmFyeU9wcyB9IGZyb20gXCIuL2JpbmFyeW9wXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uLCBFeHByZXNzaW9ucyB9IGZyb20gXCJleHByZXNzaW9uL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IERFRkFVTFRfRlVOQ1RJT05TLCBGdW5jdGlvbkltcGwgfSBmcm9tIFwiLi9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBGaWVsZGJlYXJpbmcsIEZpZWxkYmVhcmluZ3MgfSBmcm9tIFwiLi9maWVsZFwiO1xuXG4vKiogSGFuZGxlcyBsaW5rIHJlc29sdXRpb24gYW5kIG5vcm1hbGl6YXRpb24gaW5zaWRlIG9mIGEgY29udGV4dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0hhbmRsZXIge1xuICAgIC8qKiBSZXNvbHZlIGEgbGluayB0byB0aGUgbWV0YWRhdGEgaXQgY29udGFpbnMuICovXG4gICAgcmVzb2x2ZShwYXRoOiBzdHJpbmcgfCBMaW5rKTogRGF0YU9iamVjdCB8IG51bGw7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGEgbGluayB0byBpdCdzIGZ1bGx5LXF1YWxpZmllZCBwYXRoIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgICAqIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICAgKi9cbiAgICBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGF0aCBhY3R1YWxseSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgICBleGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqIFNvdXJjZSBvZiB2YXJpYWJsZXMgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gdGhlIGV2YWx1YXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzIHtcbiAgICAvKiogUmVuZGVyIHRoZSBlbnRpcmUgdmFyaWFibGUgc3RvcmUgdG8gYSBrZXktdmFsdWUgbWFwLiAqL1xuICAgIGFsbCgpOiBEYXRhT2JqZWN0O1xuXG4gICAgLyoqIFJlc29sdmUgYSB2YXJpYWJsZSBieSBuYW1lLiAqL1xuICAgIHJlc29sdmUobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFdmFsdWF0aW9uIGNvbnRleHQgdGhhdCBleHByZXNzaW9ucyBjYW4gYmUgZXZhbHVhdGVkIGluLiBJbmNsdWRlcyBnbG9iYWwgc3RhdGUsIGFzIHdlbGwgYXMgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgYSBoYW5kbGVyXG4gKiBmb3IgYmluYXJ5IG9wZXJhdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2YWx1YXRvciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIG9mIGdsb2JhbHMsIGFzIHdlbGwgYXMgb3B0aW9uYWxseSB3aXRoIGN1c3RvbSBiaW5hcnkgb3BlcmF0b3IsIGZ1bmN0aW9uLFxuICAgICAqIGFuZCBsaW5rIGhhbmRsZXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGxpbmtIYW5kbGVyOiBMaW5rSGFuZGxlcixcbiAgICAgICAgcHVibGljIHNldHRpbmdzOiBTZXR0aW5ncyxcbiAgICAgICAgcHVibGljIGdsb2JhbHM6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge30sXG4gICAgICAgIHB1YmxpYyBiaW5hcnlPcHM6IEJpbmFyeU9wSGFuZGxlciA9IGNyZWF0ZUJpbmFyeU9wcyhsaW5rSGFuZGxlci5ub3JtYWxpemUpLFxuICAgICAgICBwdWJsaWMgZnVuY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkltcGw+ID0gREVGQVVMVF9GVU5DVElPTlNcbiAgICApIHt9XG5cbiAgICAvKiogU2V0IGEgZ2xvYmFsIHZhbHVlIGluIHRoaXMgY29udGV4dC4gKi9cbiAgICBwdWJsaWMgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiBFdmFsdWF0b3Ige1xuICAgICAgICB0aGlzLmdsb2JhbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgdmFsdWUgb2YgYSBnbG9iYWwgdmFyaWFibGUgYnkgbmFtZS4gUmV0dXJucyBudWxsIGlmIG5vdCBwcmVzZW50LiAqL1xuICAgIHB1YmxpYyBnZXQobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbHNbbmFtZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIGV2YWx1YXRlIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGluIHRoaXMgY29udGV4dCwgcmFpc2luZyBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4gKi9cbiAgICBwdWJsaWMgdHJ5RXZhbHVhdGUoZXhwcjogRXhwcmVzc2lvbiwgdmFyaWFibGVzOiBWYXJpYWJsZXMgPSBWYXJpYWJsZXMuZW1wdHkoKSk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShleHByLCB2YXJpYWJsZXMpLm9yRWxzZVRocm93KCk7XG4gICAgfVxuXG4gICAgLyoqIEV2YWx1YXRlIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGluIHRoaXMgY29udGV4dC4gKi9cbiAgICBwdWJsaWMgZXZhbHVhdGUoZXhwcjogRXhwcmVzc2lvbiwgdmFyaWFibGVzOiBWYXJpYWJsZXMgPSBWYXJpYWJsZXMuZW1wdHkoKSk6IFJlc3VsdDxMaXRlcmFsLCBzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubmFtZSA9PT0gRXhwcmVzc2lvbnMuUk9XKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3ModmFyaWFibGVzLmFsbCgpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gdmFyaWFibGVzLnJlc29sdmUoZXhwci5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5uYW1lIGluIHRoaXMuZ2xvYmFscykgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHRoaXMuZ2xvYmFsc1tleHByLm5hbWVdKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGUoZXhwci5jaGlsZCwgdmFyaWFibGVzKS5tYXAoKHMpID0+ICFMaXRlcmFscy5pc1RydXRoeShzKSk7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZsYXRNYXAyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlKGV4cHIubGVmdCwgdmFyaWFibGVzKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZShleHByLnJpZ2h0LCB2YXJpYWJsZXMpLFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gdGhpcy5iaW5hcnlPcHMuZXZhbHVhdGUoZXhwci5vcCwgYSwgYiwgdGhpcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgZXhwci52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmV2YWwgPSB0aGlzLmV2YWx1YXRlKGNoaWxkLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YmV2YWwuc3VjY2Vzc2Z1bCkgcmV0dXJuIHN1YmV2YWw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN1YmV2YWwudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICBsZXQgb2JqUmVzdWx0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGV4cHIudmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViZXZhbCA9IHRoaXMuZXZhbHVhdGUoY2hpbGQsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViZXZhbC5zdWNjZXNzZnVsKSByZXR1cm4gc3ViZXZhbDtcbiAgICAgICAgICAgICAgICAgICAgb2JqUmVzdWx0W2tleV0gPSBzdWJldmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3Mob2JqUmVzdWx0KTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICAvLyBKdXN0IHJlbHlpbmcgb24gSlMgdG8gY2FwdHVyZSAnZGF0YScgZm9yIHVzIGltcGxpY2l0bHk7IHVuc3VyZVxuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgY29ycmVjdCB0aGluZyB0byBkby4gQ291bGQgY2F1c2Ugd2VpcmQgYmVoYXZpb3JzLlxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcygoY3R4OiBFdmFsdWF0b3IsIC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhcmcgPSAwOyBhcmcgPCBNYXRoLm1pbihhcmdzLmxlbmd0aCwgZXhwci5hcmd1bWVudHMubGVuZ3RoKTsgYXJnKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsc1tleHByLmFyZ3VtZW50c1thcmddXSA9IGFyZ3NbYXJnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZXZhbHVhdGUoZXhwci52YWx1ZSwgVmFyaWFibGVzLmxhbWJkYSh2YXJpYWJsZXMsIGxvY2FscykpLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICBsZXQgcmF3RnVuYyA9XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuZnVuYy50eXBlID09IFwidmFyaWFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBSZXN1bHQuc3VjY2VzczxzdHJpbmcsIHN0cmluZz4oZXhwci5mdW5jLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZXZhbHVhdGUoZXhwci5mdW5jLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghcmF3RnVuYy5zdWNjZXNzZnVsKSByZXR1cm4gcmF3RnVuYztcbiAgICAgICAgICAgICAgICBsZXQgZnVuYyA9IHJhd0Z1bmMudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJnczogTGl0ZXJhbFtdID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXJnIG9mIGV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IHRoaXMuZXZhbHVhdGUoYXJnLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLnN1Y2Nlc3NmdWwpIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHJlc29sdmVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY2FsbDogRnVuY3Rpb25JbXBsO1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5pc0Z1bmN0aW9uKGZ1bmMpKSBjYWxsID0gZnVuYyBhcyBGdW5jdGlvbkltcGw7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoTGl0ZXJhbHMuaXNTdHJpbmcoZnVuYykgJiYgZnVuYyBpbiB0aGlzLmZ1bmN0aW9ucykgY2FsbCA9IHRoaXMuZnVuY3Rpb25zW2Z1bmNdO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKExpdGVyYWxzLmlzU3RyaW5nKGZ1bmMpKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYFVucmVjb2duaXplZCBmdW5jdGlvbiBuYW1lICcke2Z1bmN9J2ApO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBDYW5ub3QgY2FsbCB0eXBlICcke0xpdGVyYWxzLnR5cGVPZihmdW5jKX0nIGFzIGEgZnVuY3Rpb25gKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhjYWxsKHRoaXMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEdldCB2YXJpYWJsZXMgZnJvbSBhIHBsYWluIG9iamVjdC4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RWYXJpYWJsZXMgaW1wbGVtZW50cyBWYXJpYWJsZXMge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqZWN0OiBEYXRhT2JqZWN0KSB7fVxuXG4gICAgcHVibGljIGFsbCgpOiBEYXRhT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RbbmFtZV07XG4gICAgfVxufVxuXG4vKiogR2V0IHZhcmlhYmxlcyBmcm9tIGEgZmllbGQtYmVhcmluZyBvYmplY3QgKHdoaWNoIHN1cHBvcnRzIGNhc2UgaW5zZW5zaXRpdml0eSkuICovXG5leHBvcnQgY2xhc3MgRmllbGRiZWFyaW5nVmFyaWFibGVzIGltcGxlbWVudHMgVmFyaWFibGVzIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG9iamVjdDogRmllbGRiZWFyaW5nKSB7fVxuXG4gICAgcHVibGljIGFsbCgpOiBEYXRhT2JqZWN0IHtcbiAgICAgICAgY29uc3Qgb2JqZWN0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5vYmplY3QuZmllbGRzKSB7XG4gICAgICAgICAgICBvYmplY3RbZmllbGQua2V5XSA9IGZpZWxkLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0LmZpZWxkKG5hbWUpPy52YWx1ZTtcbiAgICB9XG59XG5cbi8qKiBEZWxlZ2F0ZSB0byBsb2NhbCBjb250ZXh0IGZpcnN0LCB0aGVuIHRvIHBhcmVudCBjb250ZXh0IGlmIG5vdCBhdmFpbGFibGUuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhVmFyaWFibGVzIGltcGxlbWVudHMgVmFyaWFibGVzIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhcmVudDogVmFyaWFibGVzLCBwdWJsaWMgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPikge31cblxuICAgIHB1YmxpYyBhbGwoKTogRGF0YU9iamVjdCB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMucGFyZW50LmFsbCgpLCAuLi50aGlzLmxvY2FscyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbHNbbmFtZV0gPz8gdGhpcy5wYXJlbnQucmVzb2x2ZShuYW1lKTtcbiAgICB9XG59XG5cbi8qKiBEZWZhdWx0IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYWtpbmcgdmFyaWFibGUgc3RvcmVzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBWYXJpYWJsZXMge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RWYXJpYWJsZXMoe30pO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmZlcihvYmplY3Q6IGFueSk6IFZhcmlhYmxlcyB7XG4gICAgICAgIGlmIChGaWVsZGJlYXJpbmdzLmlzRmllbGRiZWFyaW5nKG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRiZWFyaW5nVmFyaWFibGVzKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdFZhcmlhYmxlcyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGxhbWJkYShwYXJlbnQ6IFZhcmlhYmxlcywgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPik6IFZhcmlhYmxlcyB7XG4gICAgICAgIHJldHVybiBuZXcgTGFtYmRhVmFyaWFibGVzKHBhcmVudCwgbG9jYWxzKTtcbiAgICB9XG59XG4iLCAiLy8hIFByb3ZpZGVzIHV0aWxpdGllcyBmb3IgZXhlY3V0aW5nIHF1ZXJpZXMgYWdhaW5zdCB0aGUgc3RvcmFnZSBsYXllci5cbmltcG9ydCB7IEluZGV4UHJpbWl0aXZlLCBJbmRleFF1ZXJ5LCBJbmRleFNvdXJjZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJzIH0gZnJvbSBcImV4cHJlc3Npb24vZmlsdGVyc1wiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcbmltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25zIH0gZnJvbSBcImV4cHJlc3Npb24vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRXZhbHVhdG9yLCBWYXJpYWJsZXMgfSBmcm9tIFwiZXhwcmVzc2lvbi9ldmFsdWF0b3JcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEluZGV4IFF1ZXJ5IE9wdGltaXphdGlvbiAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBQZXJmb3JtIHNpbXBsZSByZWN1cnNpdmUgb3B0aW1pemF0aW9ucyBvdmVyIGFuIGluZGV4IHF1ZXJ5LCBzdWNoIGFzIGNvbnN0YW50IGZvbGRpbmcgYW5kIGRlLW5lc3RpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pemVRdWVyeShxdWVyeTogSW5kZXhRdWVyeSk6IEluZGV4UXVlcnkge1xuICAgIHF1ZXJ5ID0gZGVuZXN0KHF1ZXJ5KTtcbiAgICBxdWVyeSA9IGNvbnN0YW50Zm9sZChxdWVyeSk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG59XG5cbi8qKiBEZS1uZXN0IHJlY3Vyc2l2ZWx5IG5lc3RlZCBBTkQgYW5kIE9SIHF1ZXJpZXMgaW50byBhIHNpbmdsZSB0b3AtbGV2ZWwgYW5kL29yLiAqL1xuZnVuY3Rpb24gZGVuZXN0KHF1ZXJ5OiBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IGFuZHMgPSBxdWVyeS5lbGVtZW50cy5mbGF0TWFwKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4ZWQgPSBkZW5lc3QoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpeGVkLnR5cGUgPT09IFwiYW5kXCIpIHJldHVybiBmaXhlZC5lbGVtZW50cztcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBbZml4ZWRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImFuZFwiLCBlbGVtZW50czogYW5kcyB9O1xuICAgICAgICBjYXNlIFwib3JcIjpcbiAgICAgICAgICAgIGNvbnN0IG9ycyA9IHF1ZXJ5LmVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXhlZCA9IGRlbmVzdChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZml4ZWQudHlwZSA9PT0gXCJvclwiKSByZXR1cm4gZml4ZWQuZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gW2ZpeGVkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJvclwiLCBlbGVtZW50czogb3JzIH07XG4gICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwibm90XCIsIGVsZW1lbnQ6IGRlbmVzdChxdWVyeS5lbGVtZW50KSB9O1xuICAgICAgICBjYXNlIFwiY2hpbGQtb2ZcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBwYXJlbnRzOiBkZW5lc3QocXVlcnkucGFyZW50cykgfSk7XG4gICAgICAgIGNhc2UgXCJwYXJlbnQtb2ZcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBjaGlsZHJlbjogZGVuZXN0KHF1ZXJ5LmNoaWxkcmVuKSB9KTtcbiAgICAgICAgY2FzZSBcImxpbmtlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5LCB7IHNvdXJjZTogZGVuZXN0KHF1ZXJ5LnNvdXJjZSkgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxufVxuXG4vKiogUGVyZm9ybSBjb25zdGFudCBmb2xkaW5nIGJ5IGVsaW1pbmF0aW5nIGRlYWQgJ3RydWUnIGFuZCAnZmFsc2UnIHRlcm1zLiAqL1xuZnVuY3Rpb24gY29uc3RhbnRmb2xkKHF1ZXJ5OiBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IGFjaGlsZHJlbiA9IFtdIGFzIEluZGV4UXVlcnlbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcXVlcnkuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2xkZWQgPSBjb25zdGFudGZvbGQoY2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gRWxpbWluYXRlICd0cnVlJyBjb25zdGFudHMgYW5kIGVsaW1pbmF0ZSB0aGUgZW50aXJlIGFuZCBvbiBhICdmYWxzZScgY29uc3RhbnQuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlZC50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZC5jb25zdGFudCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhY2hpbGRyZW4ucHVzaChmb2xkZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImFuZFwiLCBlbGVtZW50czogYWNoaWxkcmVuIH07XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgY29uc3Qgb2NoaWxkcmVuID0gW10gYXMgSW5kZXhRdWVyeVtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBxdWVyeS5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9IGNvbnN0YW50Zm9sZChjaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbGltaW5hdGUgJ2ZhbHNlJyBjb25zdGFudHMgYW5kIHNob3J0IGNpcmN1aXQgb24gYSAndHJ1ZScgY29uc3RhbnQuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlZC50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2xkZWQuY29uc3RhbnQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvY2hpbGRyZW4ucHVzaChmb2xkZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9yXCIsIGVsZW1lbnRzOiBvY2hpbGRyZW4gfTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gY29uc3RhbnRmb2xkKHF1ZXJ5LmVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZm9sZGVkLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6ICFmb2xkZWQuY29uc3RhbnQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3RcIiwgZWxlbWVudDogZm9sZGVkIH07XG4gICAgICAgIGNhc2UgXCJjaGlsZC1vZlwiOlxuICAgICAgICAgICAgLy8gcGFyZW50cyA9IEVNUFRZIG1lYW5zIHRoaXMgd2lsbCBhbHNvIGJlIGVtcHR5LlxuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IGNvbnN0YW50Zm9sZChxdWVyeS5wYXJlbnRzKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRzLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghcGFyZW50cy5jb25zdGFudCkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJlbnRzLmNvbnN0YW50ICYmIHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnksIHsgcGFyZW50cyB9KTtcbiAgICAgICAgY2FzZSBcInBhcmVudC1vZlwiOlxuICAgICAgICAgICAgLy8gY2hpbGRyZW4gPSBFTVBUWSBtZWFucyB0aGlzIHdpbGwgYWxzbyBiZSBlbXB0eS5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY29uc3RhbnRmb2xkKHF1ZXJ5LmNoaWxkcmVuKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmNvbnN0YW50KSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmNvbnN0YW50ICYmIHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnksIHsgY2hpbGRyZW4gfSk7XG4gICAgICAgIGNhc2UgXCJsaW5rZWRcIjpcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnN0YW50Zm9sZChxdWVyeS5zb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5jb25zdGFudCkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UuY29uc3RhbnQgJiYgcXVlcnkuaW5jbHVzaXZlKSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBzb3VyY2UgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW5kZXggUXVlcnkgRXhlY3V0b3IgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBJbnRlcmZhY2UgcHJvdmlkZWQgdG8gdGhlIHF1ZXJ5IGV4ZWN1dG9yIHRvIHJlc29sdmUgcXVlcnkgbGVhZiBub2RlcyAobGlrZSBcImZpbmQgYWxsIHBhZ2VzIG1hdGNoaW5nICcjdGFnJ1wiKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhSZXNvbHZlcjxUPiB7XG4gICAgLyoqIFRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIG9iamVjdHMuICovXG4gICAgdW5pdmVyc2U6IFNldDxUPjtcblxuICAgIC8qKiBSZXNvbHZlIGFuIGFyYml0cmFyeSBpbmRleCBzb3VyY2UgKGxpa2UgXCJmaW5kIGFsbCBwYWdlcyBtYXRjaGluZyAnI3RhZydcIikgaW50byBhIGZpbHRlci4gICovXG4gICAgcmVzb2x2ZShsZWFmOiBJbmRleFNvdXJjZSk6IFJlc3VsdDxGaWx0ZXI8VD4sIHN0cmluZz47XG5cbiAgICAvKiogUmVzb2x2ZSBhbiBpbmRleCBwcmltaXRpdmUsIHdoaWNoIGlzIGdhcmF1bnRlZWQgdG8gbmV2ZXIgcmFpc2UgYW4gZXhjZXB0aW9uLiAqL1xuICAgIHJlc29sdmVQcmltaXRpdmUobGVhZjogSW5kZXhQcmltaXRpdmUpOiBGaWx0ZXI8VD47XG5cbiAgICAvKiogTG9hZCBhIHNwZWNpZmljIG9iamVjdCBpZiBhdmFpbGFibGUuICovXG4gICAgbG9hZChpZDogVCk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEV4ZWN1dGUgYSBxdWVyeSwgdXNpbmcgdGhlIGdpdmVuIHJlc29sdmVyIHRvIGV4ZWN1dGUgdGhlIGxlYWYgbm9kZXMgYW5kIHRoZSBnaXZlbiBldmFsdWF0b3IgdG8gcmVzb2x2ZSBleHByZXNzaW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlPFQ+KFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+LFxuICAgIGV2YWx1YXRvcjogRXZhbHVhdG9yXG4pOiBSZXN1bHQ8RmlsdGVyPFQ+LCBzdHJpbmc+IHtcbiAgICByZXR1cm4gc2ltcGxpZnkocXVlcnksIHJlc29sdmVyKS5mbGF0TWFwKCh0cmVlKSA9PiBjb2xsYXBzZSh0cmVlLCByZXNvbHZlciwgZXZhbHVhdG9yKSk7XG59XG5cbi8qKiBTaW1wbGlmeSBhIHRyZWUsIGNvbWJpbmluZyBwcmltaXRpdmVzIGluIEFORHMvT1JzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5PFQ+KHF1ZXJ5OiBJbmRleFF1ZXJ5LCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxUPik6IFJlc3VsdDxGaWx0ZXJUcmVlPFQ+LCBzdHJpbmc+IHtcbiAgICBzd2l0Y2ggKHF1ZXJ5LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgLy8gVE9ETzogRWFybHkgcmV0dXJuIG9uIGEgTk9USElORyBpbnNpZGUgdGhlIG1hcEFsbCBsb29wLlxuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5tYXBBbGwocXVlcnkuZWxlbWVudHMsIChjaGlsZCkgPT4gc2ltcGxpZnkoY2hpbGQsIHJlc29sdmVyKSkubWFwKChlbGVtZW50cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IGVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJhbmRcIiA/IGVsZW1lbnQuZWxlbWVudHMgOiBbZWxlbWVudF1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXI6IEZpbHRlclRyZWU8VD5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZSA9IEZpbHRlcnMubGF6eUludGVyc2VjdChmbGF0dGVuZWQsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiZmlsdGVyXCIpIHJldHVybiBlbGVtZW50LmZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIG9uIE5PVEhJTkcgKG5vdGhpbmcgd2lsbCBtYXRjaCksIGFuZCBza2lwIG9uIE5PVEhJTkcuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS50eXBlID09PSBcIm5vdGhpbmdcIikgcmV0dXJuIHsgdHlwZTogXCJmaWx0ZXJcIiwgZmlsdGVyOiBGaWx0ZXJzLk5PVEhJTkcgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmUudHlwZSAhPSBcImV2ZXJ5dGhpbmdcIikgb3RoZXIucHVzaChGaWx0ZXJUcmVlcy5maWx0ZXIocHJpbWl0aXZlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyVHJlZXMuYW5kKG90aGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwib3JcIjpcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQubWFwQWxsKHF1ZXJ5LmVsZW1lbnRzLCAoY2hpbGQpID0+IHNpbXBsaWZ5KGNoaWxkLCByZXNvbHZlcikpLm1hcCgoZWxlbWVudHMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBlbGVtZW50cy5mbGF0TWFwKChlbGVtZW50KSA9PiAoZWxlbWVudC50eXBlID09PSBcIm9yXCIgPyBlbGVtZW50LmVsZW1lbnRzIDogW2VsZW1lbnRdKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcjogRmlsdGVyVHJlZTxUPltdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWl0aXZlID0gRmlsdGVycy5sYXp5VW5pb24oZmxhdHRlbmVkLCAoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImZpbHRlclwiKSByZXR1cm4gZWxlbWVudC5maWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIEVhcmx5IHJldHVybiBvbiBFVkVSWVRISU5HIChhbGwgd2lsbCBtYXRjaCksIGFuZCBza2lwIG9uIE5PVEhJTkcuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikgcmV0dXJuIHsgdHlwZTogXCJmaWx0ZXJcIiwgZmlsdGVyOiBGaWx0ZXJzLkVWRVJZVEhJTkcgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmUudHlwZSAhPSBcIm5vdGhpbmdcIikgb3RoZXIucHVzaChGaWx0ZXJUcmVlcy5maWx0ZXIocHJpbWl0aXZlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyVHJlZXMub3Iob3RoZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeShxdWVyeS5lbGVtZW50LCByZXNvbHZlcikubWFwKEZpbHRlclRyZWVzLm5vdCk7XG4gICAgICAgIGNhc2UgXCJleHByZXNzaW9uXCI6XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gaGFzVmFyaWFibGVzKHF1ZXJ5LmV4cHJlc3Npb24sIHJlc29sdmVyKTtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7IHR5cGU6IFwic2NhblwiLCBjYW5kaWRhdGVzLCBleHByZXNzaW9uOiBxdWVyeS5leHByZXNzaW9uIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUocXVlcnkpLm1hcCgoZmlsdGVyKSA9PiAoeyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXIgfSkpO1xuICAgIH1cbn1cblxuLyoqIENvbGxhcHNlIGEgZmlsdGVyIHRyZWUgYnkgZXZhbHVhdGluZyBhbGwgc2NhbnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZTxUPihcbiAgICB0cmVlOiBGaWx0ZXJUcmVlPFQ+LFxuICAgIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+LFxuICAgIGV2YWx1YXRvcjogRXZhbHVhdG9yLFxuICAgIGxpbWl0OiBGaWx0ZXI8VD4gPSBGaWx0ZXJzLkVWRVJZVEhJTkdcbik6IFJlc3VsdDxGaWx0ZXI8VD4sIHN0cmluZz4ge1xuICAgIHN3aXRjaCAodHJlZS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubGF6eUZhaWxhYmxlVW5pb24odHJlZS5lbGVtZW50cywgKGVsZW1lbnQpID0+IGNvbGxhcHNlKGVsZW1lbnQsIHJlc29sdmVyLCBldmFsdWF0b3IsIGxpbWl0KSk7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZXMgPSB0cmVlLmVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZWxlbSk6IGVsZW0gaXMgeyB0eXBlOiBcImZpbHRlclwiOyBmaWx0ZXI6IEZpbHRlcjxUPiB9ID0+IGVsZW0udHlwZSA9PT0gXCJmaWx0ZXJcIilcbiAgICAgICAgICAgICAgICAubWFwKChmKSA9PiBmLmZpbHRlcik7XG4gICAgICAgICAgICBsZXQgcmVzdHJpY3RlZExpbWl0ID0gRmlsdGVycy5pbnRlcnNlY3QoW2xpbWl0LCAuLi5wcmltaXRpdmVzXSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmVlLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJmaWx0ZXJcIikgY29udGludWU7IC8vIEFscmVhZHkgaW4gdGhlIGludGVyc2VjdGlvbi5cblxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRXZhbHVhdGVkID0gY29sbGFwc2UoZWxlbWVudCwgcmVzb2x2ZXIsIGV2YWx1YXRvciwgcmVzdHJpY3RlZExpbWl0KTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlRXZhbHVhdGVkLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUV2YWx1YXRlZC5jYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWQgPSBtYXliZUV2YWx1YXRlZC52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXN0cmljdGVkTGltaXQgPSBGaWx0ZXJzLmludGVyc2VjdChbcmVzdHJpY3RlZExpbWl0LCBldmFsdWF0ZWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTGltaXQudHlwZSA9PT0gXCJub3RoaW5nXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdHJpY3RlZExpbWl0KTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxhcHNlKHRyZWUuZWxlbWVudCwgcmVzb2x2ZXIsIGV2YWx1YXRvciwgbGltaXQpLm1hcChGaWx0ZXJzLm5lZ2F0ZSk7XG4gICAgICAgIGNhc2UgXCJmaWx0ZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh0cmVlLmZpbHRlcik7XG4gICAgICAgIGNhc2UgXCJzY2FuXCI6XG4gICAgICAgICAgICAvLyBMb2NhbCB0cmVlIGNhbmRpZGF0ZXMgKyBleGlzdGluZyBsaW1pdCB0byBwcm9kdWNlIHRoZSBtaW5pbWFsIHNldCBvZiBjYW5kaWRhdGVzLlxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IEZpbHRlcnMucmVzb2x2ZShGaWx0ZXJzLmludGVyc2VjdChbdHJlZS5jYW5kaWRhdGVzLCBsaW1pdF0pLCByZXNvbHZlci51bml2ZXJzZSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU2NhbihjYW5kaWRhdGVzLCB0cmVlLmV4cHJlc3Npb24sIGV2YWx1YXRvciwgcmVzb2x2ZXIpLm1hcChGaWx0ZXJzLmF0b20pO1xuICAgIH1cbn1cblxuLyoqIFNjYW4gb3ZlciBhbGwgY2FuZGlkYXRlIG9iamVjdHMsIHJldHVybmluZyBvYmplY3RzIGZvciB3aGljaCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiByZXNvbHZlcyB0byB0cnVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNjYW48VD4oXG4gICAgY2FuZGlkYXRlczogU2V0PFQ+LFxuICAgIGV4cHI6IEV4cHJlc3Npb24sXG4gICAgZXZhbHVhdG9yOiBFdmFsdWF0b3IsXG4gICAgcmVzb2x2ZXI6IEluZGV4UmVzb2x2ZXI8VD5cbik6IFJlc3VsdDxTZXQ8VD4sIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHJlc29sdmVyLmxvYWQoY2FuZGlkYXRlKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIsIFZhcmlhYmxlcy5pbmZlcihvYmplY3QpKTtcbiAgICAgICAgaWYgKCF2YWx1ZS5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYEVycm9yIHdoaWxlIGV2YWx1YXRpbmcgZXhwcmVzc2lvbiBcIiR7RXhwcmVzc2lvbnMudG9TdHJpbmcoZXhwcil9XCI6ICR7dmFsdWUuZXJyb3J9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoTGl0ZXJhbHMuaXNUcnV0aHkodmFsdWUudmFsdWUpKSByZXN1bHQuYWRkKGNhbmRpZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gZXhwcmVzc2lvbiB0byBmaW5kIHBhZ2VzIHRoYXQgaGF2ZSB0aGUgdmFyaWFibGVzIGZvciB0aGF0IGV4cHJlc3Npb24uICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhcmlhYmxlczxUPihleHByOiBFeHByZXNzaW9uLCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxUPik6IEZpbHRlcjxUPiB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gRXhwcmVzc2lvbnMudW5ib3VuZFZhcmlhYmxlcyhleHByLCBuZXcgU2V0KFtFeHByZXNzaW9ucy5ST1csIFwidGhpc1wiXSkpO1xuXG4gICAgLy8gdmFyaWFibGVzID0gMCBpbXBsaWVzcyBzb21lIHdlaXJkIGZ1bmN0aW9uIG9yIGNvbnN0YW50IGV4cHJlc3Npb24uXG4gICAgLy8gVE9ETzogd2UgY2FuIHByb2JhYmx5IGV2YWx1YXRlIGl0IHdpdGhvdXQgZXZlbiBzY2FubmluZyB0byBgdHJ1ZWAgb3IgYGZhbHNlYCBidXQgdG8gYmUgZGVmZW5zaXZlIGhhdmUgdG8gcmV0dXJuIGV2ZXJ5dGhpbmcgZm9yIG5vdy5cbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT0gMCkgcmV0dXJuIEZpbHRlcnMuRVZFUllUSElORztcblxuICAgIHJldHVybiBGaWx0ZXJzLmxhenlVbmlvbih2YXJpYWJsZXMsICh2YXJpYWJsZSkgPT4gcmVzb2x2ZXIucmVzb2x2ZVByaW1pdGl2ZSh7IHR5cGU6IFwiZmllbGRcIiwgdmFsdWU6IHZhcmlhYmxlIH0pKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBGaWx0ZXIgVHJlZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJUcmVlPFQ+ID1cbiAgICB8IHsgdHlwZTogXCJhbmRcIjsgZWxlbWVudHM6IEZpbHRlclRyZWU8VD5bXSB9XG4gICAgfCB7IHR5cGU6IFwib3JcIjsgZWxlbWVudHM6IEZpbHRlclRyZWU8VD5bXSB9XG4gICAgfCB7IHR5cGU6IFwibm90XCI7IGVsZW1lbnQ6IEZpbHRlclRyZWU8VD4gfVxuICAgIHwgeyB0eXBlOiBcImZpbHRlclwiOyBmaWx0ZXI6IEZpbHRlcjxUPiB9XG4gICAgfCB7IHR5cGU6IFwic2NhblwiOyBjYW5kaWRhdGVzOiBGaWx0ZXI8VD47IGV4cHJlc3Npb246IEV4cHJlc3Npb24gfTtcblxuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJUcmVlcyB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IEZpbHRlclRyZWU8VD4ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXIgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gYW5kPFQ+KGNoaWxkcmVuOiBGaWx0ZXJUcmVlPFQ+W10pOiBGaWx0ZXJUcmVlPFQ+IHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKSByZXR1cm4gZmlsdGVyKEZpbHRlcnMuRVZFUllUSElORyk7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSByZXR1cm4gY2hpbGRyZW5bMF07XG4gICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJhbmRcIiwgZWxlbWVudHM6IGNoaWxkcmVuIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9yPFQ+KGNoaWxkcmVuOiBGaWx0ZXJUcmVlPFQ+W10pOiBGaWx0ZXJUcmVlPFQ+IHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKSByZXR1cm4gZmlsdGVyKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSByZXR1cm4gY2hpbGRyZW5bMF07XG4gICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJvclwiLCBlbGVtZW50czogY2hpbGRyZW4gfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbm90PFQ+KGNoaWxkOiBGaWx0ZXJUcmVlPFQ+KTogRmlsdGVyVHJlZTxUPiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSBcImZpbHRlclwiKSByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXI6IEZpbHRlcnMubmVnYXRlKGNoaWxkLmZpbHRlcikgfTtcbiAgICAgICAgZWxzZSByZXR1cm4geyB0eXBlOiBcIm5vdFwiLCBlbGVtZW50OiBjaGlsZCB9O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaW5rLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVycyB9IGZyb20gXCJleHByZXNzaW9uL2ZpbHRlcnNcIjtcbmltcG9ydCB7IEZvbGRlckluZGV4IH0gZnJvbSBcImluZGV4L3N0b3JhZ2UvZm9sZGVyXCI7XG5pbXBvcnQgeyBJbnZlcnRlZEluZGV4IH0gZnJvbSBcImluZGV4L3N0b3JhZ2UvaW52ZXJ0ZWRcIjtcbmltcG9ydCB7IEluZGV4UHJpbWl0aXZlLCBJbmRleFF1ZXJ5LCBJbmRleFNvdXJjZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBUQUdHQUJMRV9UWVBFIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDYWNoZSwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IE1hcmtkb3duUGFnZSB9IGZyb20gXCIuL3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBleHRyYWN0U3VidGFncywgbm9ybWFsaXplSGVhZGVyRm9yTGluayB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IEZsYXRRdWV1ZSBmcm9tIFwiZmxhdHF1ZXVlXCI7XG5pbXBvcnQgeyBCVHJlZUZpZWxkSW5kZXgsIEV2ZXJ5dGhpbmdGaWVsZEluZGV4LCBGaWVsZEluZGV4LCBJZEZpZWxkSW5kZXgsIFNldEZpZWxkSW5kZXggfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9maWVsZHNcIjtcbmltcG9ydCB7IEZJRUxEQkVBUklOR19UWVBFLCBGaWVsZCwgRmllbGRiZWFyaW5nIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IEluZGV4UmVzb2x2ZXIsIGV4ZWN1dGUsIG9wdGltaXplUXVlcnkgfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9xdWVyeS1leGVjdXRvclwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcbmltcG9ydCB7IEV2YWx1YXRvciB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tIFwic2V0dGluZ3NcIjtcblxuLyoqIENlbnRyYWwsIGluZGV4IHN0b3JhZ2UgZm9yIGRhdGFjb3JlIHZhbHVlcy4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhc3RvcmUge1xuICAgIC8qKiBUaGUgY3VycmVudCBzdG9yZSByZXZpc2lvbi4gKi9cbiAgICBwdWJsaWMgcmV2aXNpb246IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBNYXN0ZXIgY29sbGVjdGlvbiBvZiBhbGwgb2JqZWN0IElEcy4gVGhpcyBpcyB0ZWNobmljYWxseSByZWR1bmRhbnQgd2l0aCBvYmplY3RzLmtleXMoKSBidXQgdGhpcyBpcyBhIGZhc3Qgc2V0XG4gICAgICogY29tcGFyZWQgdG8gYW4gaXRlcmF0b3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpZHM6IFNldDxzdHJpbmc+O1xuICAgIC8qKiBUaGUgbWFzdGVyIGNvbGxlY3Rpb24gb2YgQUxMIGluZGV4ZWQgb2JqZWN0cywgbWFwcGluZyBJRCAtPiB0aGUgb2JqZWN0LiAqL1xuICAgIHByaXZhdGUgb2JqZWN0czogTWFwPHN0cmluZywgSW5kZXhhYmxlPjtcbiAgICAvKiogTWFwIHBhcmVudCBvYmplY3QgdG8gaXQncyBkaXJlY3QgY2hpbGQgb2JqZWN0cy4gKi9cbiAgICBwcml2YXRlIGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj47XG5cbiAgICAvLyBJbmRpY2VzIGZvciB0aGUgdmFyaW91cyBhY2NlcHRlZCBxdWVyeSB0eXBlcy4gVGhlc2Ugd2lsbCBwcm9iYWJseSBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCB0eXBlIGxhdGVyLlxuICAgIC8qKiBHbG9iYWwgbWFwIG9mIG9iamVjdCB0eXBlIC0+IGxpc3Qgb2YgYWxsIG9iamVjdHMgb2YgdGhhdCB0eXBlLiAqL1xuICAgIHByaXZhdGUgdHlwZXM6IEludmVydGVkSW5kZXg8c3RyaW5nPjtcbiAgICAvKiogVHJhY2tzIGV4YWN0IHRhZyBvY2N1cmVuY2UgaW4gb2JqZWN0cy4gKi9cbiAgICBwcml2YXRlIGV0YWdzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIFRyYWNrcyB0YWcgb2NjdXJlbmNlIGluIG9iamVjdHMuICovXG4gICAgcHJpdmF0ZSB0YWdzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIE1hcHMgbGluayBzdHJpbmdzIHRvIHRoZSBvYmplY3QgSURzIHRoYXQgbGluayB0byB0aG9zZSBsaW5rcy4gKi9cbiAgICBwcml2YXRlIGxpbmtzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIFRyYWNrcyB0aGUgZXhpc3RlbmNlIG9mIGZpZWxkcyAoaW5kZXhlZCBieSBub3JtYWxpemVkIGtleSBuYW1lKS4gKi9cbiAgICBwcml2YXRlIGZpZWxkczogTWFwPHN0cmluZywgRmllbGRJbmRleD47XG4gICAgLyoqXG4gICAgICogUXVpY2sgc2VhcmNoZXMgZm9yIG9iamVjdHMgaW4gZm9sZGVycy4gVGhpcyBpbmRleCBvbmx5IHRyYWNrcyB0b3AtbGV2ZWwgb2JqZWN0cyAtIGl0IGlzIGV4cGFuZGVkIHJlY3Vyc2l2ZWx5IHRvXG4gICAgICogZmluZCBjaGlsZCBvYmplY3RzLlxuICAgICAqL1xuICAgIHByaXZhdGUgZm9sZGVyOiBGb2xkZXJJbmRleDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0LCBwdWJsaWMgbWV0YWRhdGFDYWNoZTogTWV0YWRhdGFDYWNoZSwgcHVibGljIHNldHRpbmdzOiBTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnJldmlzaW9uID0gMDtcbiAgICAgICAgdGhpcy5pZHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMub2JqZWN0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBNYXAoKTtcblxuICAgICAgICB0aGlzLnR5cGVzID0gbmV3IEludmVydGVkSW5kZXgoKTtcbiAgICAgICAgdGhpcy5ldGFncyA9IG5ldyBJbnZlcnRlZEluZGV4KCk7XG4gICAgICAgIHRoaXMudGFncyA9IG5ldyBJbnZlcnRlZEluZGV4KCk7XG4gICAgICAgIHRoaXMubGlua3MgPSBuZXcgSW52ZXJ0ZWRJbmRleCgpO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuX2luaXRpYWxpemVGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb2xkZXIgPSBuZXcgRm9sZGVySW5kZXgodmF1bHQpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdG9yZS4gKi9cbiAgICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5zaXplO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgdGhlIHJldmlzaW9uIG9mIHRoZSBkYXRhc3RvcmUgZHVlIHRvIGFuIGV4dGVybmFsIHVwZGF0ZS4gKi9cbiAgICBwdWJsaWMgdG91Y2goKSB7XG4gICAgICAgIHRoaXMucmV2aXNpb24gKz0gMTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhbiBvYmplY3QgYnkgSUQuICovXG4gICAgcHVibGljIGxvYWQoaWQ6IHN0cmluZyk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZDtcbiAgICAvKiogTG9hZCBhIGxpc3Qgb2Ygb2JqZWN0cyBieSBJRC4gKi9cbiAgICBwdWJsaWMgbG9hZChpZHM6IHN0cmluZ1tdKTogSW5kZXhhYmxlW107XG5cbiAgICAvKiogTG9hZCBhbiBvYmplY3QgYnkgSUQgb3IgbGlzdCBvZiBJRHMuICovXG4gICAgbG9hZChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiBJbmRleGFibGUgfCBJbmRleGFibGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkLm1hcCgoYSkgPT4gdGhpcy5sb2FkKGEpKS5maWx0ZXIoKG9iaik6IG9iaiBpcyBJbmRleGFibGUgPT4gb2JqICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5nZXQoaWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHVwIHNhbmUgZmllbGQgZGVmYXVsdHMgZm9yIHNldmVyYWwgaW5kZXhhYmxlIGZpZWxkcy4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRmllbGRzKCk6IE1hcDxzdHJpbmcsIEZpZWxkSW5kZXg+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gbmV3IE1hcDxzdHJpbmcsIEZpZWxkSW5kZXg+KCk7XG5cbiAgICAgICAgLy8gU3BlY2lhbGl6ZSBpbmRpY2VzIGZvciAkaWQgYW5kIHRoZSBvdGhlciBvbW5pcHJlc2VudCBmaWVsZCB2YWx1ZXMuXG4gICAgICAgIGZpZWxkcy5zZXQoXG4gICAgICAgICAgICBcIiRpZFwiLFxuICAgICAgICAgICAgbmV3IElkRmllbGRJbmRleChcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmlkcyxcbiAgICAgICAgICAgICAgICAoaWQpID0+IHRoaXMub2JqZWN0cy5oYXMoaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkdHlwZXNcIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkdHlwZW5hbWVcIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkcmV2aXNpb25cIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG5cbiAgICAgICAgLy8gT3B0aW1pemUgb3ZlciAkY29tcGxldGVkIGFuZCAkc3RhdHVzIGxvb2t1cHMgZm9yIHRhc2tzLlxuICAgICAgICBmaWVsZHMuc2V0KFwiJGNvbXBsZXRlZFwiLCBuZXcgQlRyZWVGaWVsZEluZGV4KCkpO1xuICAgICAgICBmaWVsZHMuc2V0KFwiJHN0YXR1c1wiLCBuZXcgQlRyZWVGaWVsZEluZGV4KCkpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmUgdGhlIGdpdmVuIG9iamVjdCwgbWFraW5nIGl0IGltbWVkaWF0ZWx5IHF1ZXJ5YWJsZS4gU3RvcmluZyBhbiBvYmplY3RcbiAgICAgKiB0YWtlcyBvd25lcnNoaXAgb3ZlciBpdCwgYW5kIGluZGV4LXNwZWNpZmljIHZhcmlhYmxlcyAocHJlZml4ZWQgdmlhICckJykgbWF5IGJlXG4gICAgICogYWRkZWQgdG8gdGhlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcmU8VCBleHRlbmRzIEluZGV4YWJsZT4ob2JqZWN0OiBUIHwgVFtdLCBzdWJzdG9yZXI/OiBTdWJzdG9yZXI8VD4pIHtcbiAgICAgICAgdGhpcy5fcmVjdXJzaXZlU3RvcmUob2JqZWN0LCB0aGlzLnJldmlzaW9uKyssIHN1YnN0b3JlciwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgc3RvcmUgb2JqZWN0cyB1c2luZyBhIHBvdGVudGlhbCBzdWJpbmRleGVyLiAqL1xuICAgIHByaXZhdGUgX3JlY3Vyc2l2ZVN0b3JlPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBvYmplY3Q6IFQgfCBUW10sXG4gICAgICAgIHJldmlzaW9uOiBudW1iZXIsXG4gICAgICAgIHN1YnN0b3Jlcj86IFN1YnN0b3JlcjxUPixcbiAgICAgICAgcGFyZW50PzogSW5kZXhhYmxlXG4gICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBhcnJheSBpbnB1dHMuXG4gICAgICAgIGlmIChMaXRlcmFscy5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjdXJzaXZlU3RvcmUoZWxlbWVudCwgcmV2aXNpb24sIHN1YnN0b3JlciwgcGFyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVsZXRlIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpZiBwcmVzZW50LlxuICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBvbmx5IGFjdHVhbGx5IG5lZWQgdG8gZGVsZXRlIHRoZSByb290IG9iamVjdHMuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVJlY3Vyc2l2ZShvYmplY3QuJGlkKTtcblxuICAgICAgICAvLyBBc3NpZ24gdGhlIG5leHQgcmV2aXNpb24gdG8gdGhpcyBvYmplY3Q7IGluZGV4ZWQgb2JqZWN0cyBhcmUgaW1wbGllZCB0byBiZSByb290IG9iamVjdHMuXG4gICAgICAgIG9iamVjdC4kcmV2aXNpb24gPSByZXZpc2lvbjtcbiAgICAgICAgb2JqZWN0LiRwYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGFwcHJvcHJpYXRlIG9iamVjdCBtYXBzLlxuICAgICAgICB0aGlzLmlkcy5hZGQob2JqZWN0LiRpZCk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5zZXQob2JqZWN0LiRpZCwgb2JqZWN0KTtcblxuICAgICAgICAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgcGFyZW50IGNoaWxkcmVuIG1hcC5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhwYXJlbnQuJGlkKSkgdGhpcy5jaGlsZHJlbi5zZXQocGFyZW50LiRpZCwgbmV3IFNldCgpKTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZ2V0KHBhcmVudC4kaWQpIS5hZGQob2JqZWN0LiRpZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbmRleChvYmplY3QpO1xuXG4gICAgICAgIC8vIEluZGV4IGFueSBzdWJvcmRpbmF0ZSBvYmplY3RzIGluIHRoaXMgb2JqZWN0LlxuICAgICAgICBzdWJzdG9yZXI/LihvYmplY3QsIChpbmNvbWluZywgc3ViaW5kZXgpID0+IHRoaXMuX3JlY3Vyc2l2ZVN0b3JlKGluY29taW5nLCByZXZpc2lvbiwgc3ViaW5kZXgsIG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYW4gb2JqZWN0IGJ5IElEIGZyb20gdGhlIGluZGV4LCByZWN1cnNpdmVseSBkZWxldGluZyBhbnkgY2hpbGQgb2JqZWN0cyBhcyB3ZWxsLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlUmVjdXJzaXZlKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5yZXZpc2lvbisrO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEludGVybmFsIG1ldGhvZCB0aGF0IGRvZXMgbm90IGJ1bXAgdGhlIHJldmlzaW9uLiAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZVJlY3Vyc2l2ZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0cy5nZXQoaWQpO1xuICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBjaGlsZCBvYmplY3RzLlxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZ2V0KGlkKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVJlY3Vyc2l2ZShjaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyb3AgdGhpcyBvYmplY3QgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbWFwcy5cbiAgICAgICAgdGhpcy5fdW5pbmRleChvYmplY3QpO1xuICAgICAgICB0aGlzLmlkcy5kZWxldGUoaWQpO1xuICAgICAgICB0aGlzLm9iamVjdHMuZGVsZXRlKGlkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEFkZCB0aGUgZ2l2ZW4gaW5kZXhhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZSBpbmRpY2VzLiAqL1xuICAgIHByaXZhdGUgX2luZGV4KG9iamVjdDogSW5kZXhhYmxlKSB7XG4gICAgICAgIHRoaXMudHlwZXMuc2V0KG9iamVjdC4kaWQsIG9iamVjdC4kdHlwZXMpO1xuXG4gICAgICAgIC8vIEV4YWN0IGFuZCBkZXJpdmVkIHRhZ3MuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKFRBR0dBQkxFX1RZUEUpICYmIGl0ZXJhYmxlRXhpc3RzKG9iamVjdCwgXCIkdGFnc1wiKSkge1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IG9iamVjdC4kdGFncyBhcyBTZXQ8c3RyaW5nPjtcblxuICAgICAgICAgICAgdGhpcy5ldGFncy5zZXQob2JqZWN0LiRpZCwgdGFncyk7XG4gICAgICAgICAgICB0aGlzLnRhZ3Muc2V0KG9iamVjdC4kaWQsIGV4dHJhY3RTdWJ0YWdzKHRhZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4YWN0IGFuZCBkZXJpdmVkIGxpbmtzLlxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhMSU5LQkVBUklOR19UWVBFKSAmJiBpdGVyYWJsZUV4aXN0cyhvYmplY3QsIFwiJGxpbmtzXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtzLnNldChcbiAgICAgICAgICAgICAgICBvYmplY3QuJGlkLFxuICAgICAgICAgICAgICAgIChvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkubWFwKChsaW5rKSA9PiBsaW5rLm9ic2lkaWFuTGluaygpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsbCBmaWVsZHMgb24gYW4gb2JqZWN0LlxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhGSUVMREJFQVJJTkdfVFlQRSkgJiYgXCJmaWVsZHNcIiBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2Ygb2JqZWN0LmZpZWxkcyBhcyBJdGVyYWJsZTxGaWVsZD4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtID0gZmllbGQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkcy5oYXMobm9ybSkpIHRoaXMuZmllbGRzLnNldChub3JtLCBuZXcgU2V0RmllbGRJbmRleCgpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLmdldChub3JtKSEuYWRkKG9iamVjdC4kaWQsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIGdpdmVuIGluZGV4YWJsZSBmcm9tIGFsbCBpbmRpY2VzLiAqL1xuICAgIHByaXZhdGUgX3VuaW5kZXgob2JqZWN0OiBJbmRleGFibGUpIHtcbiAgICAgICAgdGhpcy50eXBlcy5kZWxldGUob2JqZWN0LiRpZCwgb2JqZWN0LiR0eXBlcyk7XG5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoVEFHR0FCTEVfVFlQRSkgJiYgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiR0YWdzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdzID0gb2JqZWN0LiR0YWdzIGFzIFNldDxzdHJpbmc+O1xuXG4gICAgICAgICAgICB0aGlzLmV0YWdzLmRlbGV0ZShvYmplY3QuJGlkLCB0YWdzKTtcbiAgICAgICAgICAgIHRoaXMudGFncy5kZWxldGUob2JqZWN0LiRpZCwgZXh0cmFjdFN1YnRhZ3ModGFncykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoTElOS0JFQVJJTkdfVFlQRSkgJiYgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiRsaW5rc1wiKSkge1xuICAgICAgICAgICAgLy8gQXNzdW1lIGxpbmtzIGFyZSBub3JtYWxpemVkIHdoZW4gZGVsZXRpbmcgdGhlbS4gQ291bGQgYmUgYnJva2VuIGJ1dCBJIGhvcGUgbm90LiBXZSBjYW4gYWx3YXlzIHVzZSBhIDItd2F5IGluZGV4IHRvXG4gICAgICAgICAgICAvLyBmaXggdGhpcyBpZiB3ZSBlbmNvdW50ZXIgbm9uLW5vcm1hbGl6ZWQgbGlua3MuXG4gICAgICAgICAgICB0aGlzLmxpbmtzLmRlbGV0ZShcbiAgICAgICAgICAgICAgICBvYmplY3QuJGlkLFxuICAgICAgICAgICAgICAgIChvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkubWFwKChsaW5rKSA9PiBsaW5rLm9ic2lkaWFuTGluaygpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKEZJRUxEQkVBUklOR19UWVBFKSAmJiBcImZpZWxkc1wiIGluIG9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBvYmplY3QuZmllbGRzIGFzIEl0ZXJhYmxlPEZpZWxkPikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm0gPSBmaWVsZC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmllbGRzLmhhcyhub3JtKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5nZXQobm9ybSkhLmRlbGV0ZShvYmplY3QuJGlkLCBmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29tcGxldGVseSBjbGVhciB0aGUgZGF0YXN0b3JlIG9mIGFsbCB2YWx1ZXMuICovXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmlkcy5jbGVhcigpO1xuICAgICAgICB0aGlzLm9iamVjdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMudHlwZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy50YWdzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZXRhZ3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5saW5rcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmZpZWxkcy5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMucmV2aXNpb24rKztcbiAgICB9XG5cbiAgICAvKiogRmluZCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QgZm9yIGEgZ2l2ZW4gbGluay4gKi9cbiAgICBwdWJsaWMgcmVzb2x2ZUxpbmsocmF3TGluazogc3RyaW5nIHwgTGluaywgc291cmNlUGF0aD86IHN0cmluZyk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBsaW5rID0gdHlwZW9mIHJhd0xpbmsgPT09IFwic3RyaW5nXCIgPyBMaW5rLnBhcnNlSW5uZXIocmF3TGluaykgOiByYXdMaW5rO1xuXG4gICAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZGVzdCA9IHRoaXMubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChsaW5rLnBhdGgsIHNvdXJjZVBhdGgpO1xuICAgICAgICAgICAgaWYgKGxpbmtkZXN0KSBsaW5rID0gbGluay53aXRoUGF0aChsaW5rZGVzdC5wYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9iamVjdHMuZ2V0KGxpbmsucGF0aCk7XG4gICAgICAgIGlmICghZmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobGluay50eXBlID09PSBcImZpbGVcIikgcmV0dXJuIGZpbGU7XG5cbiAgICAgICAgLy8gQmxvY2tzIGFuZCBoZWFkZXIgbGlua3MgY2FuIG9ubHkgcmVzb2x2ZSBpbnNpZGUgb2YgbWFya2Rvd24gZmlsZXMuXG4gICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBNYXJrZG93blBhZ2UpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChsaW5rLnR5cGUgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBmaWxlLiRzZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChzZWMpID0+IG5vcm1hbGl6ZUhlYWRlckZvckxpbmsoc2VjLiR0aXRsZSkgPT0gbGluay5zdWJwYXRoIHx8IHNlYy4kdGl0bGUgPT0gbGluay5zdWJwYXRoXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoc2VjdGlvbikgcmV0dXJuIHNlY3Rpb247XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAobGluay50eXBlID09PSBcImJsb2NrXCIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmaWxlLiRzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gc2VjdGlvbi4kYmxvY2tzLmZpbmQoKGJsKSA9PiBibC4kYmxvY2tJZCA9PT0gbGluay5zdWJwYXRoKTtcblxuICAgICAgICAgICAgICAgIGlmIChibG9jaykgcmV0dXJuIGJsb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgbGluayB0eXBlOiAke2xpbmsudHlwZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aGUgZGF0YXN0b3JlIGZvciBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIHRoZW1cbiAgICAgKiBhcyBhIGxpc3Qgb2YgaW5kZXhlZCBvYmplY3RzIGFsb25nIHdpdGggcGVyZm9ybWFuY2UgbWV0YWRhdGEuXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaChxdWVyeTogSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHRoaXMuX3NlYXJjaChxdWVyeSwgc2V0dGluZ3MpO1xuICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEZpbHRlcnMucmVzb2x2ZShtYXliZUZpbHRlci52YWx1ZSwgdGhpcy5pZHMpO1xuXG4gICAgICAgIGNvbnN0IG9iamVjdHM6IEluZGV4YWJsZVtdID0gW107XG4gICAgICAgIGxldCBtYXhSZXZpc2lvbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHJlc3VsdCkge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChpZCk7XG4gICAgICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgbWF4UmV2aXNpb24gPSBNYXRoLm1heChtYXhSZXZpc2lvbiwgb2JqZWN0LiRyZXZpc2lvbiA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICByZXN1bHRzOiBvYmplY3RzLFxuICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMC4wLFxuICAgICAgICAgICAgcmV2aXNpb246IG1heFJldmlzaW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJuYWwgc2VhcmNoIHdoaWNoIHlpZWxkcyBhIGZpbHRlciBvZiByZXN1bHRzLiAqL1xuICAgIHByaXZhdGUgX3NlYXJjaChxdWVyeTogSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxGaWx0ZXI8c3RyaW5nPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBzZXR0aW5ncz8uc291cmNlUGF0aDtcbiAgICAgICAgY29uc3QgZmlsZSA9IHNvdXJjZVBhdGggPyB0aGlzLm9iamVjdHMuZ2V0KHNvdXJjZVBhdGgpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGV2YWx1YXRvciA9IG5ldyBFdmFsdWF0b3IoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhpc3RzOiAocGF0aDogc3RyaW5nIHwgTGluaykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGluayh0eXBlb2YgcGF0aCA9PSBcInN0cmluZ1wiID8gTGluay5maWxlKHBhdGgpIDogcGF0aCwgc291cmNlUGF0aCkgIT0gbnVsbCxcbiAgICAgICAgICAgICAgICByZXNvbHZlOiAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMaW5rKHR5cGVvZiBwYXRoID09IFwic3RyaW5nXCIgPyBMaW5rLmZpbGUocGF0aCkgOiBwYXRoLCBzb3VyY2VQYXRoKSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZTogKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHBhdGgsIHNvdXJjZVBhdGggPz8gXCJcIik/LnBhdGggPz8gcGF0aCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU2V0IGB0aGlzYCBvbiB0aGUgZmlsZSBpZiBuZWVkZWQuXG4gICAgICAgIGlmIChmaWxlKSBldmFsdWF0b3Iuc2V0KFwidGhpc1wiLCBmaWxlKTtcblxuICAgICAgICBjb25zdCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxzdHJpbmc+ID0ge1xuICAgICAgICAgICAgdW5pdmVyc2U6IHRoaXMuaWRzLFxuICAgICAgICAgICAgcmVzb2x2ZTogKGxlYWYpID0+IHRoaXMuX3Jlc29sdmVTb3VyY2UobGVhZiwgc2V0dGluZ3MpLFxuICAgICAgICAgICAgcmVzb2x2ZVByaW1pdGl2ZTogKGxlYWYpID0+IHRoaXMuX3Jlc29sdmVQcmltaXRpdmUobGVhZiwgc2V0dGluZ3MpLFxuICAgICAgICAgICAgbG9hZDogKGlkKSA9PiB0aGlzLmxvYWQoaWQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBleGVjdXRlKG9wdGltaXplUXVlcnkocXVlcnkpLCByZXNvbHZlciwgZXZhbHVhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlU291cmNlKHF1ZXJ5OiBJbmRleFNvdXJjZSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxGaWx0ZXI8c3RyaW5nPiwgc3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAocXVlcnkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImNoaWxkLW9mXCI6XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY29udmVydGluZyB0aGlzIHRvIGJlIGEgc2NhbiBpbnN0ZWFkIGZvciBhIG5vdGljYWJsZSBzcGVlZHVwLlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlUGFyZW50cyA9IHRoaXMuX3NlYXJjaChxdWVyeS5wYXJlbnRzLCBzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXliZVBhcmVudHMuc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlUGFyZW50cy5jYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gbWF5YmVQYXJlbnRzLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChGaWx0ZXJzLmVtcHR5KHBhcmVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50cy50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaW5jbHVzaXZlKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5FVkVSWVRISU5HKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHNldCBhbGwgY2hpbGRyZW4uIFRPRE86IENvbnNpZGVyIGNhY2hpbmcgdmlhIGEgYHBhcmVudHNgIG1hcC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMub2JqZWN0cy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuJHBhcmVudCkgYWxsQ2hpbGRyZW4uYWRkKGVsZW1lbnQuJGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oYWxsQ2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhcmVudHMgPSBGaWx0ZXJzLnJlc29sdmUocGFyZW50cywgdGhpcy5pZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IG5ldyBTZXQ8c3RyaW5nPihxdWVyeS5pbmNsdXNpdmUgPyByZXNvbHZlZFBhcmVudHMgOiBbXSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiByZXNvbHZlZFBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4ocGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRSZXN1bHRzLmFkZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKGNoaWxkUmVzdWx0cykpO1xuICAgICAgICAgICAgY2FzZSBcInBhcmVudC1vZlwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNvbnZlcnRpbmcgdGhpcyB0byBiZSBhIHNjYW4gaW5zdGVhZCBmb3IgYSBub3RpY2FibGUgc3BlZWR1cC5cbiAgICAgICAgICAgICAgICBjb25zdCBtYXliZUNoaWxkcmVuID0gdGhpcy5fc2VhcmNoKHF1ZXJ5LmNoaWxkcmVuLCBzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXliZUNoaWxkcmVuLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUNoaWxkcmVuLmNhc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG1heWJlQ2hpbGRyZW4udmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoRmlsdGVycy5lbXB0eShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaW5jbHVzaXZlKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5FVkVSWVRISU5HKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKG5ldyBTZXQodGhpcy5jaGlsZHJlbi5rZXlzKCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDaGlsZHJlbiA9IEZpbHRlcnMucmVzb2x2ZShjaGlsZHJlbiwgdGhpcy5pZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlc3VsdHMgPSBuZXcgU2V0PHN0cmluZz4ocXVlcnkuaW5jbHVzaXZlID8gcmVzb2x2ZWRDaGlsZHJlbiA6IFtdKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcmVzb2x2ZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLl9pdGVyYXRlUGFyZW50cyhjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlc3VsdHMuYWRkKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHBhcmVudFJlc3VsdHMpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZGlzdGFuY2UgJiYgcXVlcnkuZGlzdGFuY2UgPCAwKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5OT1RISU5HKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBvYmplY3RzIGZpcnN0LlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlU291cmNlcyA9IHRoaXMuX3NlYXJjaChxdWVyeS5zb3VyY2UsIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlU291cmNlcy5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVTb3VyY2VzLmNhc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gbWF5YmVTb3VyY2VzLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKEZpbHRlcnMuZW1wdHkoc291cmNlcykpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZXMudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuRVZFUllUSElORyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRTb3VyY2VzID0gRmlsdGVycy5yZXNvbHZlKHNvdXJjZXMsIHRoaXMuaWRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBxdWVyeS5kaXJlY3Rpb24gPz8gXCJib3RoXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuX3RyYXZlcnNlTGlua2VkKHJlc29sdmVkU291cmNlcywgcXVlcnkuZGlzdGFuY2UgPz8gMSwgKGlkKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVyYXRlQWRqYWNlbnRMaW5rZWQoaWQsIGRpcmVjdGlvbilcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeS5pbmNsdXNpdmUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oRmlsdGVycy5zZXRJbnRlcnNlY3ROZWdhdGlvbihyZXN1bHRzLCByZXNvbHZlZFNvdXJjZXMpKSk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHJlc3VsdHMpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHRoaXMuX3Jlc29sdmVQcmltaXRpdmUocXVlcnksIHNldHRpbmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBsZWFmIG5vZGVzIGluIGEgc2VhcmNoIEFTVCwgeWllbGRpbmcgcmF3IHNldHMgb2YgcmVzdWx0cy4gKi9cbiAgICBwcml2YXRlIF9yZXNvbHZlUHJpbWl0aXZlKHF1ZXJ5OiBJbmRleFByaW1pdGl2ZSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IEZpbHRlcjxzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiY29uc3RhbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5jb25zdGFudChxdWVyeS5jb25zdGFudCk7XG4gICAgICAgICAgICBjYXNlIFwiaWRcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBleGFjdE9iamVjdCA9IHRoaXMub2JqZWN0cy5nZXQocXVlcnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGFjdE9iamVjdCA/IEZpbHRlcnMuYXRvbShuZXcgU2V0KFtleGFjdE9iamVjdC4kaWRdKSkgOiBGaWx0ZXJzLk5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M/LnNvdXJjZVBhdGggPz8gXCJcIlxuICAgICAgICAgICAgICAgICk/LnBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZFBhdGggPyBxdWVyeS52YWx1ZS53aXRoUGF0aChyZXNvbHZlZFBhdGgpIDogcXVlcnkudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLnJlc29sdmVMaW5rKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gRmlsdGVycy5hdG9tKG5ldyBTZXQoW29iamVjdC4kaWRdKSkgOiBGaWx0ZXJzLk5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwidHlwZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5udWxsYWJsZUF0b20odGhpcy50eXBlcy5nZXQocXVlcnkudmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0YWdnZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZXhhY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubnVsbGFibGVBdG9tKHRoaXMuZXRhZ3MuZ2V0KHF1ZXJ5LnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubnVsbGFibGVBdG9tKHRoaXMudGFncy5nZXQocXVlcnkudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICAgICAgICAgIGxldCB0b3BsZXZlbDtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZXhhY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0aGlzLmZvbGRlci5nZXRFeGFjdChxdWVyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5LnZhbHVlID09IFwiXCIgfHwgcXVlcnkudmFsdWUgPT0gXCIvXCIpIHJldHVybiBGaWx0ZXJzLkVWRVJZVEhJTkc7XG5cbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0aGlzLmZvbGRlci5nZXQocXVlcnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbC5zaXplID09IDApIHJldHVybiBGaWx0ZXJzLk5PVEhJTkc7XG5cbiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYWxsIGNoaWxkcmVuLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQodG9wbGV2ZWwpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRvcCBvZiB0b3BsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4odG9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKHJlc3VsdCk7XG4gICAgICAgICAgICBjYXNlIFwiZmllbGRcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBub3Jta2V5ID0gcXVlcnkudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5maWVsZHMuZ2V0KG5vcm1rZXkpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZEluZGV4ID09IG51bGwpIHJldHVybiBGaWx0ZXJzLk5PVEhJTkc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKGZpZWxkSW5kZXguYWxsKCkpO1xuICAgICAgICAgICAgY2FzZSBcImVxdWFsLXZhbHVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubGF6eVVuaW9uKHF1ZXJ5LnZhbHVlcywgKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJGaWVsZHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZXF1YWxzKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZCkgPT4gTGl0ZXJhbHMuY29tcGFyZSh2YWx1ZSwgZmllbGQudmFsdWUpID09IDBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRmlsdGVyIGRvY3VtZW50cyBieSBmaWVsZCB2YWx1ZXMsIHVzaW5nIHRoZSBmYXN0IGxvb2t1cCBpZiBpdCByZXR1cm5zIGEgcmVzdWx0IGFuZCBvdGhlcndpc2UgZmlsdGVyaW5nIG92ZXIgZXZlcnkgZG9jdW1lbnQgdXNpbmcgdGhlIHNsb3cgcHJlZGljYXRlLiAqL1xuICAgIHByaXZhdGUgX2ZpbHRlckZpZWxkcyhcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGZhc3Q6IChpbmRleDogRmllbGRJbmRleCkgPT4gU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIHNsb3c6IChmaWVsZDogRmllbGQpID0+IGJvb2xlYW5cbiAgICApOiBGaWx0ZXI8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IG5vcm1rZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpZWxkcy5nZXQobm9ybWtleSk7XG4gICAgICAgIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gRmlsdGVycy5OT1RISU5HO1xuXG4gICAgICAgIGNvbnN0IGZhc3Rsb29rdXAgPSBmYXN0KGluZGV4KTtcbiAgICAgICAgaWYgKGZhc3Rsb29rdXAgIT0gbnVsbCkgcmV0dXJuIEZpbHRlcnMuYXRvbShmYXN0bG9va3VwKTtcblxuICAgICAgICAvLyBDb21wdXRlIGJ5IGl0ZXJhdGluZyBvdmVyIGVhY2ggZmllbGQuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBvYmplY3RJZCBvZiBpbmRleC5hbGwoKSkge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChvYmplY3RJZCk7XG4gICAgICAgICAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LiR0eXBlcy5jb250YWlucyhGSUVMREJFQVJJTkdfVFlQRSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IChvYmplY3QgYXMgYW55IGFzIEZpZWxkYmVhcmluZykuZmllbGQobm9ybWtleSk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHNsb3coZmllbGQpKSBtYXRjaGVzLmFkZChvYmplY3RJZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKG1hdGNoZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvZXMgQnJlYWR0aC1maXJzdCBTZWFyY2ggdG8gZmluZCBhbGwgbGlua2VkIGZpbGVzIHdpdGhpbiBkaXN0YW5jZSA8ZGlzdGFuY2U+LiBUaGlzIGluY2x1ZGVzIGFsbCBzb3VyY2Ugbm9kZXMsXG4gICAgICogc28gcmVtb3ZlIHRoZW0gYWZ0ZXJ3YXJkcyBpZiB5b3UgZG8gbm90IHdhbnQgdGhlbS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF90cmF2ZXJzZUxpbmtlZChcbiAgICAgICAgc291cmNlSWRzOiBTZXQ8c3RyaW5nPixcbiAgICAgICAgZGlzdGFuY2U6IG51bWJlcixcbiAgICAgICAgYWRqYWNlbnQ6IChpZDogc3RyaW5nKSA9PiBJdGVyYWJsZTxzdHJpbmc+XG4gICAgKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBpZiAoZGlzdGFuY2UgPCAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBpZiAoc291cmNlSWRzLnNpemUgPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcblxuICAgICAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KHNvdXJjZUlkcyk7XG5cbiAgICAgICAgY29uc3QgcXVldWUgPSBuZXcgRmxhdFF1ZXVlPHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNvdXJjZUlkcykgcXVldWUucHVzaChlbGVtZW50LCAwKTtcblxuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZGlzdCA9IHF1ZXVlLnBlZWtWYWx1ZSgpITtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBxdWV1ZS5wb3AoKSE7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmVpZ2hib3Igb2YgYWRqYWNlbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlzaXRlZC5oYXMobmVpZ2hib3IpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IGRpc3RhbmNlKSBxdWV1ZS5wdXNoKG5laWdoYm9yLCBkaXN0ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICB9XG5cbiAgICAvKiogSXRlcmF0ZSBhbGwgbGlua2VkIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBvYmplY3QuICovXG4gICAgcHJpdmF0ZSAqX2l0ZXJhdGVBZGphY2VudExpbmtlZChpZDogc3RyaW5nLCBkaXJlY3Rpb246IFwiaW5jb21pbmdcIiB8IFwib3V0Z29pbmdcIiB8IFwiYm90aFwiKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHJldHVybjtcblxuICAgICAgICBpZiAoKGRpcmVjdGlvbiA9PT0gXCJib3RoXCIgfHwgZGlyZWN0aW9uID09PSBcImluY29taW5nXCIpICYmIFwiJGxpbmtcIiBpbiBvYmplY3QgJiYgb2JqZWN0W1wiJGxpbmtcIl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluY29taW5nID0gdGhpcy5saW5rcy5nZXQoKG9iamVjdC4kbGluayBhcyBMaW5rKS5vYnNpZGlhbkxpbmsoKSk7XG4gICAgICAgICAgICBpZiAoaW5jb21pbmcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGluY29taW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaXJlY3Rpb24gPT09IFwiYm90aFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJvdXRnb2luZ1wiKSAmJlxuICAgICAgICAgICAgb2JqZWN0LiR0eXBlcy5jb250YWlucyhMSU5LQUJMRV9UWVBFKSAmJlxuICAgICAgICAgICAgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiRsaW5rc1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlTGluayhsaW5rKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWQpIHlpZWxkIHJlc29sdmVkLiRpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJdGVyYXRvciB3aGljaCBwcm9kdWNlcyBhbGwgcGFyZW50cyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAqL1xuICAgIHByaXZhdGUgKl9pdGVyYXRlUGFyZW50cyhjaGlsZDogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChjaGlsZCk7XG4gICAgICAgIHdoaWxlIChvYmplY3QgJiYgb2JqZWN0Py4kcGFyZW50KSB7XG4gICAgICAgICAgICB5aWVsZCBvYmplY3QuJHBhcmVudC4kaWQ7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3QuJHBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJdGVyYXRpdmUgd2hpY2ggcHJvZHVjZXMgYWxsIGNoaWxkcmVuIChyZWN1cnNpdmVseSkgb2YgdGhlIGdpdmVuIG9iamVjdC4gKi9cbiAgICBwcml2YXRlICpfaXRlcmF0ZUNoaWxkcmVuKHBhcmVudDogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZ2V0KHBhcmVudCk7XG4gICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zaXplID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5faXRlcmF0ZUNoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEEgZ2VuZXJhbCBmdW5jdGlvbiBmb3Igc3RvcmluZyBzdWItb2JqZWN0cyBpbiBhIGdpdmVuIG9iamVjdC4gKi9cbmV4cG9ydCB0eXBlIFN1YnN0b3JlcjxUIGV4dGVuZHMgSW5kZXhhYmxlPiA9IChcbiAgICBvYmplY3Q6IFQsXG4gICAgYWRkOiA8VSBleHRlbmRzIEluZGV4YWJsZT4ob2JqZWN0OiBVIHwgVVtdLCBzdWJpbmRleD86IFN1YnN0b3JlcjxVPikgPT4gdm9pZFxuKSA9PiB2b2lkO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBzZWFyY2hpbmcgZ2l2ZW4gYW4gaW5kZXggcXVlcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdDxPPiB7XG4gICAgLyoqIFRoZSBxdWVyeSB1c2VkIHRvIHNlYXJjaC4gKi9cbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbiAgICAvKiogQWxsIG9mIHRoZSByZXR1cm5lZCByZXN1bHRzLiAqL1xuICAgIHJlc3VsdHM6IE9bXTtcbiAgICAvKiogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgc2VhcmNoIHRvb2suICovXG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICAvKiogVGhlIG1heGltdW0gcmV2aXNpb24gb2YgYW55IGRvY3VtZW50IGluIHRoZSByZXN1bHQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZGlmZmluZy4gKi9cbiAgICByZXZpc2lvbjogbnVtYmVyO1xufVxuXG4vKiogRXh0cmEgc2V0dGluZ3MgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gYSBzZWFyY2guICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFNldHRpbmdzIHtcbiAgICAvKiogVGhlIHBhdGggdG8gcnVuIGZyb20gd2hlbiByZXNvbHZpbmcgbGlua3MgYW5kIGB0aGlzYCBzZWN0aW9ucy4gKi9cbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKiogVHlwZSBndWFyZCB3aGljaCBjaGVja3MgaWYgb2JqZWN0W2tleV0gZXhpc3RzIGFuZCBpcyBhbiBpdGVyYWJsZS4gKi9cbmZ1bmN0aW9uIGl0ZXJhYmxlRXhpc3RzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFQsXG4gICAga2V5OiBLXG4pOiBvYmplY3QgaXMgVCAmIFJlY29yZDxLLCBJdGVyYWJsZTxhbnk+PiB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmplY3QgJiYgb2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gb2JqZWN0W2tleV07XG59XG4iLCAiaW1wb3J0IGxvY2FsZm9yYWdlIGZyb20gXCJsb2NhbGZvcmFnZVwiO1xuXG4vKiogQSBwaWVjZSBvZiBkYXRhIHRoYXQgaGFzIGJlZW4gY2FjaGVkIGZvciBhIHNwZWNpZmljIHZlcnNpb24gYW5kIHRpbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZDxUPiB7XG4gICAgLyoqIFRoZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gdGhhdCB0aGUgZGF0YSB3YXMgd3JpdHRlbiB0byBjYWNoZSB3aXRoLiAqL1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICAvKiogVGhlIFVOSVggZXBvY2ggdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgZGF0YSB3YXMgd3JpdHRlbiB0byBjYWNoZS4gKi9cbiAgICB0aW1lOiBudW1iZXI7XG4gICAgLyoqIFRoZSBkYXRhIHRoYXQgd2FzIGNhY2hlZC4gKi9cbiAgICBkYXRhOiBUO1xufVxuXG4vKiogU2ltcGxlciB3cmFwcGVyIGZvciBhIGZpbGUtYmFja2VkIGNhY2hlIGZvciBhcmJpdHJhcnkgbWV0YWRhdGEuICovXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlQ2FjaGUge1xuICAgIHB1YmxpYyBwZXJzaXN0ZXI6IExvY2FsRm9yYWdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBhcHBJZDogc3RyaW5nLCBwdWJsaWMgdmVyc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbG9jYWxmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICAgICAgbmFtZTogXCJkYXRhY29yZS9jYWNoZS9cIiArIGFwcElkLFxuICAgICAgICAgICAgZHJpdmVyOiBbbG9jYWxmb3JhZ2UuSU5ERVhFRERCXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNhY2hlIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBzZWN0aW9ucyBpbiB0aGUgZGF0YWNvcmUgaW5kZXguXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEcm9wIHRoZSBlbnRpcmUgY2FjaGUgaW5zdGFuY2UgYW5kIHJlLWNyZWF0ZSBhIG5ldyBmcmVzaCBpbnN0YW5jZS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVjcmVhdGUoKSB7XG4gICAgICAgIGF3YWl0IGxvY2FsZm9yYWdlLmRyb3BJbnN0YW5jZSh7IG5hbWU6IFwiZGF0YWNvcmUvY2FjaGUvXCIgKyB0aGlzLmFwcElkIH0pO1xuXG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbG9jYWxmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICAgICAgbmFtZTogXCJkYXRhY29yZS9jYWNoZS9cIiArIHRoaXMuYXBwSWQsXG4gICAgICAgICAgICBkcml2ZXI6IFtsb2NhbGZvcmFnZS5JTkRFWEVEREJdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2FjaGUgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIHNlY3Rpb25zIGluIHRoZSBkYXRhY29yZSBpbmRleC5cIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIExvYWQgZmlsZSBtZXRhZGF0YSBieSBwYXRoLiAqL1xuICAgIHB1YmxpYyBhc3luYyBsb2FkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlZDxQYXJ0aWFsPGFueT4+IHwgbnVsbCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZXIuZ2V0SXRlbSh0aGlzLmZpbGVLZXkocGF0aCkpLnRoZW4oKHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJhdyBhcyBhbnkgYXMgQ2FjaGVkPFBhcnRpYWw8YW55Pj47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZSBmaWxlIG1ldGFkYXRhIGJ5IHBhdGguICovXG4gICAgcHVibGljIGFzeW5jIHN0b3JlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBlcnNpc3Rlci5zZXRJdGVtKHRoaXMuZmlsZUtleShwYXRoKSwge1xuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEcm9wIG9sZCBmaWxlIGtleXMgdGhhdCBubyBsb25nZXIgZXhpc3QuICovXG4gICAgcHVibGljIGFzeW5jIHN5bmNocm9uaXplKGV4aXN0aW5nOiBzdHJpbmdbXSB8IFNldDxzdHJpbmc+KTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICAgICAgICBsZXQga2V5cyA9IG5ldyBTZXQoYXdhaXQgdGhpcy5hbGxGaWxlcygpKTtcbiAgICAgICAgZm9yIChsZXQgZXhpc3Qgb2YgZXhpc3RpbmcpIGtleXMuZGVsZXRlKGV4aXN0KTtcblxuICAgICAgICAvLyBBbnkga2V5cyByZW1haW5pbmcgYWZ0ZXIgZGVsZXRpbmcgZXhpc3Rpbmcga2V5cyBhcmUgbm9uLWV4aXN0ZW50IGtleXMgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmcm9tIGNhY2hlLlxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykgYXdhaXQgdGhpcy5wZXJzaXN0ZXIucmVtb3ZlSXRlbSh0aGlzLmZpbGVLZXkoa2V5KSk7XG5cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhIGxpc3Qgb2YgYWxsIG1ldGFkYXRhIGtleXMuICovXG4gICAgcHVibGljIGFzeW5jIGFsbEtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZXIua2V5cygpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gYSBsaXN0IG9mIGFsbCBwZXJzaXN0ZWQgZmlsZXMuICovXG4gICAgcHVibGljIGFzeW5jIGFsbEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgbGV0IGtleXMgPSBhd2FpdCB0aGlzLmFsbEtleXMoKTtcbiAgICAgICAgcmV0dXJuIGtleXMuZmlsdGVyKChrKSA9PiBrLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkubWFwKChrKSA9PiBrLnN1YnN0cmluZyg1KSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBhIHVuaXF1ZSBrZXkgZm9yIGEgZ2l2ZW4gZmlsZSBwYXRoLiAqL1xuICAgIHB1YmxpYyBmaWxlS2V5KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcImZpbGU6XCIgKyBwYXRoO1xuICAgIH1cbn1cbiIsICJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlubGluZVdvcmtlcihzY3JpcHRUZXh0KSB7XG4gIGxldCBibG9iID0gbmV3IEJsb2IoW3NjcmlwdFRleHRdLCB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KTtcbiAgbGV0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIGxldCB3b3JrZXIgPSBuZXcgV29ya2VyKHVybCwge1wibmFtZVwiOlwiRGF0YWNvcmUgSW5kZXhlclwifSk7XG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cbiIsICJpbXBvcnQgaW5saW5lV29ya2VyIGZyb20gJ19faW5saW5lLXdvcmtlcidcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFdvcmtlcigpIHtcbiAgcmV0dXJuIGlubGluZVdvcmtlcihcInZhciBpbD1PYmplY3QuY3JlYXRlO3ZhciBXcz1PYmplY3QuZGVmaW5lUHJvcGVydHksb2w9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsYWw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix1bD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxsbD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxWcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGNsPU9iamVjdC5nZXRQcm90b3R5cGVPZixIcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHZvPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7dmFyIE9vPShuLGUsdCk9PmUgaW4gbj9XcyhuLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpuW2VdPXQsJD0obixlKT0+e2Zvcih2YXIgdCBpbiBlfHwoZT17fSkpSHMuY2FsbChlLHQpJiZPbyhuLHQsZVt0XSk7aWYoVnIpZm9yKHZhciB0IG9mIFZyKGUpKXZvLmNhbGwoZSx0KSYmT28obix0LGVbdF0pO3JldHVybiBufSxGZT0obixlKT0+b2wobix1bChlKSk7dmFyIEtzPShuLGUpPT57dmFyIHQ9e307Zm9yKHZhciByIGluIG4pSHMuY2FsbChuLHIpJiZlLmluZGV4T2Yocik8MCYmKHRbcl09bltyXSk7aWYobiE9bnVsbCYmVnIpZm9yKHZhciByIG9mIFZyKG4pKWUuaW5kZXhPZihyKTwwJiZ2by5jYWxsKG4scikmJih0W3JdPW5bcl0pO3JldHVybiB0fTt2YXIgSW89KG4sZSk9PigpPT4oZXx8bigoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKTt2YXIgZmw9KG4sZSx0LHIpPT57aWYoZSYmdHlwZW9mIGU9PVxcXCJvYmplY3RcXFwifHx0eXBlb2YgZT09XFxcImZ1bmN0aW9uXFxcIilmb3IobGV0IHMgb2YgbGwoZSkpIUhzLmNhbGwobixzKSYmcyE9PXQmJldzKG4scyx7Z2V0OigpPT5lW3NdLGVudW1lcmFibGU6IShyPWFsKGUscykpfHxyLmVudW1lcmFibGV9KTtyZXR1cm4gbn07dmFyIHFyPShuLGUsdCk9Pih0PW4hPW51bGw/aWwoY2wobikpOnt9LGZsKGV8fCFufHwhbi5fX2VzTW9kdWxlP1dzKHQsXFxcImRlZmF1bHRcXFwiLHt2YWx1ZTpuLGVudW1lcmFibGU6ITB9KTp0LG4pKTt2YXIgbnM9SW8oKGhyLElpKT0+eyhmdW5jdGlvbihuLGUpe3R5cGVvZiBocj09XFxcIm9iamVjdFxcXCImJnR5cGVvZiBJaT09XFxcIm9iamVjdFxcXCI/SWkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09XFxcImZ1bmN0aW9uXFxcIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6dHlwZW9mIGhyPT1cXFwib2JqZWN0XFxcIj9oci5QYXJzaW1tb249ZSgpOm4uUGFyc2ltbW9uPWUoKX0pKHR5cGVvZiBzZWxmIT1cXFwidW5kZWZpbmVkXFxcIj9zZWxmOmhyLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPXt9O2Z1bmN0aW9uIHQocil7aWYoZVtyXSlyZXR1cm4gZVtyXS5leHBvcnRzO3ZhciBzPWVbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBuW3JdLmNhbGwocy5leHBvcnRzLHMscy5leHBvcnRzLHQpLHMubD0hMCxzLmV4cG9ydHN9cmV0dXJuIHQubT1uLHQuYz1lLHQuZD1mdW5jdGlvbihyLHMsaSl7dC5vKHIscyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHMse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDppfSl9LHQucj1mdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcXFwiX19lc01vZHVsZVxcXCIse3ZhbHVlOiEwfSl9LHQubj1mdW5jdGlvbihyKXt2YXIgcz1yJiZyLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiByfTtyZXR1cm4gdC5kKHMsXFxcImFcXFwiLHMpLHN9LHQubz1mdW5jdGlvbihyLHMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzKX0sdC5wPVxcXCJcXFwiLHQodC5zPTApfShbZnVuY3Rpb24obixlLHQpe1xcXCJ1c2Ugc3RyaWN0XFxcIjtmdW5jdGlvbiByKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihjKTt0aGlzLl89Y312YXIgcz1yLnByb3RvdHlwZTtmdW5jdGlvbiBpKGMsbSl7Zm9yKHZhciBFPTA7RTxjO0UrKyltKEUpfWZ1bmN0aW9uIG8oYyxtLEUpe3JldHVybiBmdW5jdGlvbihrLEkpe2koSS5sZW5ndGgsZnVuY3Rpb24oTil7ayhJW05dLE4sSSl9KX0oZnVuY3Rpb24oayxJLE4pe209YyhtLGssSSxOKX0sRSksbX1mdW5jdGlvbiBhKGMsbSl7cmV0dXJuIG8oZnVuY3Rpb24oRSxrLEksTil7cmV0dXJuIEUuY29uY2F0KFtjKGssSSxOKV0pfSxbXSxtKX1mdW5jdGlvbiB1KGMsbSl7dmFyIEU9e3Y6MCxidWY6bX07cmV0dXJuIGkoYyxmdW5jdGlvbigpe3ZhciBrO0U9e3Y6RS52PDwxfChrPUUuYnVmLGtbMF0+PjcpLGJ1ZjpmdW5jdGlvbihJKXt2YXIgTj1vKGZ1bmN0aW9uKEwscSxuZSxTZSl7cmV0dXJuIEwuY29uY2F0KG5lPT09U2UubGVuZ3RoLTE/QnVmZmVyLmZyb20oW3EsMF0pLnJlYWRVSW50MTZCRSgwKTpTZS5yZWFkVUludDE2QkUobmUpKX0sW10sSSk7cmV0dXJuIEJ1ZmZlci5mcm9tKGEoZnVuY3Rpb24oTCl7cmV0dXJuKEw8PDEmNjU1MzUpPj44fSxOKSl9KEUuYnVmKX19KSxFfWZ1bmN0aW9uIGwoKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlciE9XFxcInVuZGVmaW5lZFxcXCJ9ZnVuY3Rpb24gZCgpe2lmKCFsKCkpdGhyb3cgbmV3IEVycm9yKFxcXCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci5cXFwiKX1mdW5jdGlvbiBoKGMpe2QoKTt2YXIgbT1vKGZ1bmN0aW9uKE4sTCl7cmV0dXJuIE4rTH0sMCxjKTtpZihtJTghPTApdGhyb3cgbmV3IEVycm9yKFxcXCJUaGUgYml0cyBbXFxcIitjLmpvaW4oXFxcIiwgXFxcIikrXFxcIl0gYWRkIHVwIHRvIFxcXCIrbStcXFwiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFxcXCIpO3ZhciBFLGs9bS84LEk9KEU9ZnVuY3Rpb24oTil7cmV0dXJuIE4+NDh9LG8oZnVuY3Rpb24oTixMKXtyZXR1cm4gTnx8KEUoTCk/TDpOKX0sbnVsbCxjKSk7aWYoSSl0aHJvdyBuZXcgRXJyb3IoSStcXFwiIGJpdCByYW5nZSByZXF1ZXN0ZWQgZXhjZWVkcyA0OCBiaXQgKDYgYnl0ZSkgTnVtYmVyIG1heC5cXFwiKTtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oTixMKXt2YXIgcT1rK0w7cmV0dXJuIHE+Ti5sZW5ndGg/VChMLGsudG9TdHJpbmcoKStcXFwiIGJ5dGVzXFxcIik6dyhxLG8oZnVuY3Rpb24obmUsU2Upe3ZhciBnZT11KFNlLG5lLmJ1Zik7cmV0dXJue2NvbGw6bmUuY29sbC5jb25jYXQoZ2UudiksYnVmOmdlLmJ1Zn19LHtjb2xsOltdLGJ1ZjpOLnNsaWNlKEwscSl9LGMpLmNvbGwpfSl9ZnVuY3Rpb24gcChjLG0pe3JldHVybiBuZXcgcihmdW5jdGlvbihFLGspe3JldHVybiBkKCksayttPkUubGVuZ3RoP1QoayxtK1xcXCIgYnl0ZXMgZm9yIFxcXCIrYyk6dyhrK20sRS5zbGljZShrLGsrbSkpfSl9ZnVuY3Rpb24gZihjLG0pe2lmKHR5cGVvZihFPW0pIT1cXFwibnVtYmVyXFxcInx8TWF0aC5mbG9vcihFKSE9PUV8fG08MHx8bT42KXRocm93IG5ldyBFcnJvcihjK1xcXCIgcmVxdWlyZXMgaW50ZWdlciBsZW5ndGggaW4gcmFuZ2UgWzAsIDZdLlxcXCIpO3ZhciBFfWZ1bmN0aW9uIEYoYyl7cmV0dXJuIGYoXFxcInVpbnRCRVxcXCIsYykscChcXFwidWludEJFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLnJlYWRVSW50QkUoMCxjKX0pfWZ1bmN0aW9uIGcoYyl7cmV0dXJuIGYoXFxcInVpbnRMRVxcXCIsYykscChcXFwidWludExFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLnJlYWRVSW50TEUoMCxjKX0pfWZ1bmN0aW9uIHkoYyl7cmV0dXJuIGYoXFxcImludEJFXFxcIixjKSxwKFxcXCJpbnRCRShcXFwiK2MrXFxcIilcXFwiLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS5yZWFkSW50QkUoMCxjKX0pfWZ1bmN0aW9uIFMoYyl7cmV0dXJuIGYoXFxcImludExFXFxcIixjKSxwKFxcXCJpbnRMRShcXFwiK2MrXFxcIilcXFwiLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS5yZWFkSW50TEUoMCxjKX0pfWZ1bmN0aW9uIE8oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiByfWZ1bmN0aW9uIHYoYyl7cmV0dXJue30udG9TdHJpbmcuY2FsbChjKT09PVxcXCJbb2JqZWN0IEFycmF5XVxcXCJ9ZnVuY3Rpb24gRChjKXtyZXR1cm4gbCgpJiZCdWZmZXIuaXNCdWZmZXIoYyl9ZnVuY3Rpb24gdyhjLG0pe3JldHVybntzdGF0dXM6ITAsaW5kZXg6Yyx2YWx1ZTptLGZ1cnRoZXN0Oi0xLGV4cGVjdGVkOltdfX1mdW5jdGlvbiBUKGMsbSl7cmV0dXJuIHYobSl8fChtPVttXSkse3N0YXR1czohMSxpbmRleDotMSx2YWx1ZTpudWxsLGZ1cnRoZXN0OmMsZXhwZWN0ZWQ6bX19ZnVuY3Rpb24gQyhjLG0pe2lmKCFtfHxjLmZ1cnRoZXN0Pm0uZnVydGhlc3QpcmV0dXJuIGM7dmFyIEU9Yy5mdXJ0aGVzdD09PW0uZnVydGhlc3Q/ZnVuY3Rpb24oayxJKXtpZihmdW5jdGlvbigpe2lmKHIuX3N1cHBvcnRzU2V0IT09dm9pZCAwKXJldHVybiByLl9zdXBwb3J0c1NldDt2YXIgaHQ9dHlwZW9mIFNldCE9XFxcInVuZGVmaW5lZFxcXCI7cmV0dXJuIHIuX3N1cHBvcnRzU2V0PWh0LGh0fSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIE49bmV3IFNldChrKSxMPTA7TDxJLmxlbmd0aDtMKyspTi5hZGQoSVtMXSk7dmFyIHE9QXJyYXkuZnJvbShOKTtyZXR1cm4gcS5zb3J0KCkscX1mb3IodmFyIG5lPXt9LFNlPTA7U2U8ay5sZW5ndGg7U2UrKyluZVtrW1NlXV09ITA7Zm9yKHZhciBnZT0wO2dlPEkubGVuZ3RoO2dlKyspbmVbSVtnZV1dPSEwO3ZhciBkdD1bXTtmb3IodmFyIHZlIGluIG5lKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuZSx2ZSkmJmR0LnB1c2godmUpO3JldHVybiBkdC5zb3J0KCksZHR9KGMuZXhwZWN0ZWQsbS5leHBlY3RlZCk6bS5leHBlY3RlZDtyZXR1cm57c3RhdHVzOmMuc3RhdHVzLGluZGV4OmMuaW5kZXgsdmFsdWU6Yy52YWx1ZSxmdXJ0aGVzdDptLmZ1cnRoZXN0LGV4cGVjdGVkOkV9fXZhciBNPXt9O2Z1bmN0aW9uIFYoYyxtKXtpZihEKGMpKXJldHVybntvZmZzZXQ6bSxsaW5lOi0xLGNvbHVtbjotMX07YyBpbiBNfHwoTVtjXT17fSk7Zm9yKHZhciBFPU1bY10saz0wLEk9MCxOPTAsTD1tO0w+PTA7KXtpZihMIGluIEUpe2s9RVtMXS5saW5lLE49PT0wJiYoTj1FW0xdLmxpbmVTdGFydCk7YnJlYWt9KGMuY2hhckF0KEwpPT09YFxcbmB8fGMuY2hhckF0KEwpPT09XFxcIlxcXFxyXFxcIiYmYy5jaGFyQXQoTCsxKSE9PWBcXG5gKSYmKEkrKyxOPT09MCYmKE49TCsxKSksTC0tfXZhciBxPWsrSSxuZT1tLU47cmV0dXJuIEVbbV09e2xpbmU6cSxsaW5lU3RhcnQ6Tn0se29mZnNldDptLGxpbmU6cSsxLGNvbHVtbjpuZSsxfX1mdW5jdGlvbiBqKGMpe2lmKCFPKGMpKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgcGFyc2VyOiBcXFwiK2MpfWZ1bmN0aW9uIHooYyxtKXtyZXR1cm4gdHlwZW9mIGM9PVxcXCJzdHJpbmdcXFwiP2MuY2hhckF0KG0pOmNbbV19ZnVuY3Rpb24gcmUoYyl7aWYodHlwZW9mIGMhPVxcXCJudW1iZXJcXFwiKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgbnVtYmVyOiBcXFwiK2MpfWZ1bmN0aW9uIGxlKGMpe2lmKHR5cGVvZiBjIT1cXFwiZnVuY3Rpb25cXFwiKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgZnVuY3Rpb246IFxcXCIrYyl9ZnVuY3Rpb24geChjKXtpZih0eXBlb2YgYyE9XFxcInN0cmluZ1xcXCIpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBzdHJpbmc6IFxcXCIrYyl9dmFyIFI9MixRPTMsY2U9OCxFZT01KmNlLFZlPTQqY2UsdG49XFxcIiAgXFxcIjtmdW5jdGlvbiBCdChjLG0pe3JldHVybiBuZXcgQXJyYXkobSsxKS5qb2luKGMpfWZ1bmN0aW9uIFB0KGMsbSxFKXt2YXIgaz1tLWMubGVuZ3RoO3JldHVybiBrPD0wP2M6QnQoRSxrKStjfWZ1bmN0aW9uIEFlKGMsbSxFLGspe3JldHVybntmcm9tOmMtbT4wP2MtbTowLHRvOmMrRT5rP2s6YytFfX1mdW5jdGlvbiAkdChjLG0pe3ZhciBFLGssSSxOLEwscT1tLmluZGV4LG5lPXEub2Zmc2V0LFNlPTE7aWYobmU9PT1jLmxlbmd0aClyZXR1cm5cXFwiR290IHRoZSBlbmQgb2YgdGhlIGlucHV0XFxcIjtpZihEKGMpKXt2YXIgZ2U9bmUtbmUlY2UsZHQ9bmUtZ2UsdmU9QWUoZ2UsRWUsVmUrY2UsYy5sZW5ndGgpLGh0PWEoZnVuY3Rpb24oZGUpe3JldHVybiBhKGZ1bmN0aW9uKHJuKXtyZXR1cm4gUHQocm4udG9TdHJpbmcoMTYpLDIsXFxcIjBcXFwiKX0sZGUpfSxmdW5jdGlvbihkZSxybil7dmFyIHNuPWRlLmxlbmd0aCxWdD1bXSxvbj0wO2lmKHNuPD1ybilyZXR1cm5bZGUuc2xpY2UoKV07Zm9yKHZhciBhbj0wO2FuPHNuO2FuKyspVnRbb25dfHxWdC5wdXNoKFtdKSxWdFtvbl0ucHVzaChkZVthbl0pLChhbisxKSVybj09MCYmb24rKztyZXR1cm4gVnR9KGMuc2xpY2UodmUuZnJvbSx2ZS50bykudG9KU09OKCkuZGF0YSxjZSkpO049ZnVuY3Rpb24oZGUpe3JldHVybiBkZS5mcm9tPT09MCYmZGUudG89PT0xP3tmcm9tOmRlLmZyb20sdG86ZGUudG99Ontmcm9tOmRlLmZyb20vY2UsdG86TWF0aC5mbG9vcihkZS50by9jZSl9fSh2ZSksaz1nZS9jZSxFPTMqZHQsZHQ+PTQmJihFKz0xKSxTZT0yLEk9YShmdW5jdGlvbihkZSl7cmV0dXJuIGRlLmxlbmd0aDw9ND9kZS5qb2luKFxcXCIgXFxcIik6ZGUuc2xpY2UoMCw0KS5qb2luKFxcXCIgXFxcIikrXFxcIiAgXFxcIitkZS5zbGljZSg0KS5qb2luKFxcXCIgXFxcIil9LGh0KSwoTD0oOCooTi50bz4wP04udG8tMTpOLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKEw9Mil9ZWxzZXt2YXIgbm49Yy5zcGxpdCgvXFxcXHJcXFxcbnxbXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOV0vKTtFPXEuY29sdW1uLTEsaz1xLmxpbmUtMSxOPUFlKGssUixRLG5uLmxlbmd0aCksST1ubi5zbGljZShOLmZyb20sTi50byksTD1OLnRvLnRvU3RyaW5nKCkubGVuZ3RofXZhciBzbD1rLU4uZnJvbTtyZXR1cm4gRChjKSYmKEw9KDgqKE4udG8+MD9OLnRvLTE6Ti50bykpLnRvU3RyaW5nKDE2KS5sZW5ndGgpPDImJihMPTIpLG8oZnVuY3Rpb24oZGUscm4sc24pe3ZhciBWdCxvbj1zbj09PXNsLGFuPW9uP1xcXCI+IFxcXCI6dG47cmV0dXJuIFZ0PUQoYyk/UHQoKDgqKE4uZnJvbStzbikpLnRvU3RyaW5nKDE2KSxMLFxcXCIwXFxcIik6UHQoKE4uZnJvbStzbisxKS50b1N0cmluZygpLEwsXFxcIiBcXFwiKSxbXS5jb25jYXQoZGUsW2FuK1Z0K1xcXCIgfCBcXFwiK3JuXSxvbj9bdG4rQnQoXFxcIiBcXFwiLEwpK1xcXCIgfCBcXFwiK1B0KFxcXCJcXFwiLEUsXFxcIiBcXFwiKStCdChcXFwiXlxcXCIsU2UpXTpbXSl9LFtdLEkpLmpvaW4oYFxcbmApfWZ1bmN0aW9uIGJvKGMsbSl7cmV0dXJuW2BcXG5gLFxcXCItLSBQQVJTSU5HIEZBSUxFRCBcXFwiK0J0KFxcXCItXFxcIiw1MCksYFxcblxcbmAsJHQoYyxtKSxgXFxuXFxuYCwoRT1tLmV4cGVjdGVkLEUubGVuZ3RoPT09MT9gRXhwZWN0ZWQ6XFxuXFxuYCtFWzBdOmBFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuYCtFLmpvaW4oXFxcIiwgXFxcIikpLGBcXG5gXS5qb2luKFxcXCJcXFwiKTt2YXIgRX1mdW5jdGlvbiBFbyhjKXtyZXR1cm4gYy5mbGFncyE9PXZvaWQgMD9jLmZsYWdzOltjLmdsb2JhbD9cXFwiZ1xcXCI6XFxcIlxcXCIsYy5pZ25vcmVDYXNlP1xcXCJpXFxcIjpcXFwiXFxcIixjLm11bHRpbGluZT9cXFwibVxcXCI6XFxcIlxcXCIsYy51bmljb2RlP1xcXCJ1XFxcIjpcXFwiXFxcIixjLnN0aWNreT9cXFwieVxcXCI6XFxcIlxcXCJdLmpvaW4oXFxcIlxcXCIpfWZ1bmN0aW9uIEJyKCl7Zm9yKHZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxtPWMubGVuZ3RoLEU9MDtFPG07RSs9MSlqKGNbRV0pO3JldHVybiByKGZ1bmN0aW9uKGssSSl7Zm9yKHZhciBOLEw9bmV3IEFycmF5KG0pLHE9MDtxPG07cSs9MSl7aWYoIShOPUMoY1txXS5fKGssSSksTikpLnN0YXR1cylyZXR1cm4gTjtMW3FdPU4udmFsdWUsST1OLmluZGV4fXJldHVybiBDKHcoSSxMKSxOKX0pfWZ1bmN0aW9uIFJ0KCl7dmFyIGM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKGMubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoXFxcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcXFwiKTt2YXIgbT1jLnBvcCgpO3JldHVybiBsZShtKSxCci5hcHBseShudWxsLGMpLm1hcChmdW5jdGlvbihFKXtyZXR1cm4gbS5hcHBseShudWxsLEUpfSl9ZnVuY3Rpb24gUHIoKXt2YXIgYz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksbT1jLmxlbmd0aDtpZihtPT09MClyZXR1cm4gJHIoXFxcInplcm8gYWx0ZXJuYXRlc1xcXCIpO2Zvcih2YXIgRT0wO0U8bTtFKz0xKWooY1tFXSk7cmV0dXJuIHIoZnVuY3Rpb24oayxJKXtmb3IodmFyIE4sTD0wO0w8Yy5sZW5ndGg7TCs9MSlpZigoTj1DKGNbTF0uXyhrLEkpLE4pKS5zdGF0dXMpcmV0dXJuIE47cmV0dXJuIE59KX1mdW5jdGlvbiBGbyhjLG0pe3JldHVybiBWcyhjLG0pLm9yKGp0KFtdKSl9ZnVuY3Rpb24gVnMoYyxtKXtyZXR1cm4gaihjKSxqKG0pLFJ0KGMsbS50aGVuKGMpLm1hbnkoKSxmdW5jdGlvbihFLGspe3JldHVybltFXS5jb25jYXQoayl9KX1mdW5jdGlvbiBfbihjKXt4KGMpO3ZhciBtPVxcXCInXFxcIitjK1xcXCInXFxcIjtyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBJPWsrYy5sZW5ndGgsTj1FLnNsaWNlKGssSSk7cmV0dXJuIE49PT1jP3coSSxOKTpUKGssbSl9KX1mdW5jdGlvbiBmdChjLG0peyhmdW5jdGlvbihJKXtpZighKEkgaW5zdGFuY2VvZiBSZWdFeHApKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgcmVnZXhwOiBcXFwiK0kpO2Zvcih2YXIgTj1FbyhJKSxMPTA7TDxOLmxlbmd0aDtMKyspe3ZhciBxPU4uY2hhckF0KEwpO2lmKHEhPT1cXFwiaVxcXCImJnEhPT1cXFwibVxcXCImJnEhPT1cXFwidVxcXCImJnEhPT1cXFwic1xcXCIpdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCByZWdleHAgZmxhZyBcXFwiJytxKydcXFwiOiAnK0kpfX0pKGMpLGFyZ3VtZW50cy5sZW5ndGg+PTI/cmUobSk6bT0wO3ZhciBFPWZ1bmN0aW9uKEkpe3JldHVybiBSZWdFeHAoXFxcIl4oPzpcXFwiK0kuc291cmNlK1xcXCIpXFxcIixFbyhJKSl9KGMpLGs9XFxcIlxcXCIrYztyZXR1cm4gcihmdW5jdGlvbihJLE4pe3ZhciBMPUUuZXhlYyhJLnNsaWNlKE4pKTtpZihMKXtpZigwPD1tJiZtPD1MLmxlbmd0aCl7dmFyIHE9TFswXSxuZT1MW21dO3JldHVybiB3KE4rcS5sZW5ndGgsbmUpfXJldHVybiBUKE4sXFxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFxcXCIrTC5sZW5ndGgrXFxcIikgaW4gXFxcIitrKX1yZXR1cm4gVChOLGspfSl9ZnVuY3Rpb24ganQoYyl7cmV0dXJuIHIoZnVuY3Rpb24obSxFKXtyZXR1cm4gdyhFLGMpfSl9ZnVuY3Rpb24gJHIoYyl7cmV0dXJuIHIoZnVuY3Rpb24obSxFKXtyZXR1cm4gVChFLGMpfSl9ZnVuY3Rpb24gUnIoYyl7aWYoTyhjKSlyZXR1cm4gcihmdW5jdGlvbihtLEUpe3ZhciBrPWMuXyhtLEUpO3JldHVybiBrLmluZGV4PUUsay52YWx1ZT1cXFwiXFxcIixrfSk7aWYodHlwZW9mIGM9PVxcXCJzdHJpbmdcXFwiKXJldHVybiBScihfbihjKSk7aWYoYyBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUnIoZnQoYykpO3Rocm93IG5ldyBFcnJvcihcXFwibm90IGEgc3RyaW5nLCByZWdleHAsIG9yIHBhcnNlcjogXFxcIitjKX1mdW5jdGlvbiB3byhjKXtyZXR1cm4gaihjKSxyKGZ1bmN0aW9uKG0sRSl7dmFyIGs9Yy5fKG0sRSksST1tLnNsaWNlKEUsay5pbmRleCk7cmV0dXJuIGsuc3RhdHVzP1QoRSwnbm90IFxcXCInK0krJ1xcXCInKTp3KEUsbnVsbCl9KX1mdW5jdGlvbiBqcihjKXtyZXR1cm4gbGUoYykscihmdW5jdGlvbihtLEUpe3ZhciBrPXoobSxFKTtyZXR1cm4gRTxtLmxlbmd0aCYmYyhrKT93KEUrMSxrKTpUKEUsXFxcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXFxcIitjKX0pfWZ1bmN0aW9uIFRvKGMsbSl7YXJndW1lbnRzLmxlbmd0aDwyJiYobT1jLGM9dm9pZCAwKTt2YXIgRT1yKGZ1bmN0aW9uKGssSSl7cmV0dXJuIEUuXz1tKCkuXyxFLl8oayxJKX0pO3JldHVybiBjP0UuZGVzYyhjKTpFfWZ1bmN0aW9uIHFzKCl7cmV0dXJuICRyKFxcXCJmYW50YXN5LWxhbmQvZW1wdHlcXFwiKX1zLnBhcnNlPWZ1bmN0aW9uKGMpe2lmKHR5cGVvZiBjIT1cXFwic3RyaW5nXFxcIiYmIUQoYykpdGhyb3cgbmV3IEVycm9yKFxcXCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50XFxcIik7dmFyIG0sRT10aGlzLnNraXAoVXMpLl8oYywwKTtyZXR1cm4gbT1FLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOkUudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6VihjLEUuZnVydGhlc3QpLGV4cGVjdGVkOkUuZXhwZWN0ZWR9LGRlbGV0ZSBNW2NdLG19LHMudHJ5UGFyc2U9ZnVuY3Rpb24oYyl7dmFyIG09dGhpcy5wYXJzZShjKTtpZihtLnN0YXR1cylyZXR1cm4gbS52YWx1ZTt2YXIgRT1ibyhjLG0pLGs9bmV3IEVycm9yKEUpO3Rocm93IGsudHlwZT1cXFwiUGFyc2ltbW9uRXJyb3JcXFwiLGsucmVzdWx0PW0sa30scy5hc3NlcnQ9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5jaGFpbihmdW5jdGlvbihFKXtyZXR1cm4gYyhFKT9qdChFKTokcihtKX0pfSxzLm9yPWZ1bmN0aW9uKGMpe3JldHVybiBQcih0aGlzLGMpfSxzLnRyaW09ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMud3JhcChjLGMpfSxzLndyYXA9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gUnQoYyx0aGlzLG0sZnVuY3Rpb24oRSxrKXtyZXR1cm4ga30pfSxzLnRocnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGModGhpcyl9LHMudGhlbj1mdW5jdGlvbihjKXtyZXR1cm4gaihjKSxCcih0aGlzLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbVsxXX0pfSxzLm1hbnk9ZnVuY3Rpb24oKXt2YXIgYz10aGlzO3JldHVybiByKGZ1bmN0aW9uKG0sRSl7Zm9yKHZhciBrPVtdLEk9dm9pZCAwOzspe2lmKCEoST1DKGMuXyhtLEUpLEkpKS5zdGF0dXMpcmV0dXJuIEModyhFLGspLEkpO2lmKEU9PT1JLmluZGV4KXRocm93IG5ldyBFcnJvcihcXFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXFxcIik7RT1JLmluZGV4LGsucHVzaChJLnZhbHVlKX19KX0scy50aWVXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB4KGMpLHRoaXMubWFwKGZ1bmN0aW9uKG0pe2lmKGZ1bmN0aW9uKEkpe2lmKCF2KEkpKXRocm93IG5ldyBFcnJvcihcXFwibm90IGFuIGFycmF5OiBcXFwiK0kpfShtKSxtLmxlbmd0aCl7eChtWzBdKTtmb3IodmFyIEU9bVswXSxrPTE7azxtLmxlbmd0aDtrKyspeChtW2tdKSxFKz1jK21ba107cmV0dXJuIEV9cmV0dXJuXFxcIlxcXCJ9KX0scy50aWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWVXaXRoKFxcXCJcXFwiKX0scy50aW1lcz1mdW5jdGlvbihjLG0pe3ZhciBFPXRoaXM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKG09YykscmUoYykscmUobSkscihmdW5jdGlvbihrLEkpe2Zvcih2YXIgTj1bXSxMPXZvaWQgMCxxPXZvaWQgMCxuZT0wO25lPGM7bmUrPTEpe2lmKHE9QyhMPUUuXyhrLEkpLHEpLCFMLnN0YXR1cylyZXR1cm4gcTtJPUwuaW5kZXgsTi5wdXNoKEwudmFsdWUpfWZvcig7bmU8bSYmKHE9QyhMPUUuXyhrLEkpLHEpLEwuc3RhdHVzKTtuZSs9MSlJPUwuaW5kZXgsTi5wdXNoKEwudmFsdWUpO3JldHVybiBDKHcoSSxOKSxxKX0pfSxzLnJlc3VsdD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxzLmF0TW9zdD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50aW1lcygwLGMpfSxzLmF0TGVhc3Q9ZnVuY3Rpb24oYyl7cmV0dXJuIFJ0KHRoaXMudGltZXMoYyksdGhpcy5tYW55KCksZnVuY3Rpb24obSxFKXtyZXR1cm4gbS5jb25jYXQoRSl9KX0scy5tYXA9ZnVuY3Rpb24oYyl7bGUoYyk7dmFyIG09dGhpcztyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBJPW0uXyhFLGspO3JldHVybiBJLnN0YXR1cz9DKHcoSS5pbmRleCxjKEkudmFsdWUpKSxJKTpJfSl9LHMuY29udHJhbWFwPWZ1bmN0aW9uKGMpe2xlKGMpO3ZhciBtPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST1tLnBhcnNlKGMoRS5zbGljZShrKSkpO3JldHVybiBJLnN0YXR1cz93KGsrRS5sZW5ndGgsSS52YWx1ZSk6SX0pfSxzLnByb21hcD1mdW5jdGlvbihjLG0pe3JldHVybiBsZShjKSxsZShtKSx0aGlzLmNvbnRyYW1hcChjKS5tYXAobSl9LHMuc2tpcD1mdW5jdGlvbihjKXtyZXR1cm4gQnIodGhpcyxjKS5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG1bMF19KX0scy5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KEJuLHRoaXMsQm4sZnVuY3Rpb24oYyxtLEUpe3JldHVybntzdGFydDpjLHZhbHVlOm0sZW5kOkV9fSl9LHMubm9kZT1mdW5jdGlvbihjKXtyZXR1cm4gUnQoQm4sdGhpcyxCbixmdW5jdGlvbihtLEUsayl7cmV0dXJue25hbWU6Yyx2YWx1ZTpFLHN0YXJ0Om0sZW5kOmt9fSl9LHMuc2VwQnk9ZnVuY3Rpb24oYyl7cmV0dXJuIEZvKHRoaXMsYyl9LHMuc2VwQnkxPWZ1bmN0aW9uKGMpe3JldHVybiBWcyh0aGlzLGMpfSxzLmxvb2thaGVhZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5za2lwKFJyKGMpKX0scy5ub3RGb2xsb3dlZEJ5PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnNraXAod28oYykpfSxzLmRlc2M9ZnVuY3Rpb24oYyl7dihjKXx8KGM9W2NdKTt2YXIgbT10aGlzO3JldHVybiByKGZ1bmN0aW9uKEUsayl7dmFyIEk9bS5fKEUsayk7cmV0dXJuIEkuc3RhdHVzfHwoSS5leHBlY3RlZD1jKSxJfSl9LHMuZmFsbGJhY2s9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMub3IoanQoYykpfSxzLmFwPWZ1bmN0aW9uKGMpe3JldHVybiBSdChjLHRoaXMsZnVuY3Rpb24obSxFKXtyZXR1cm4gbShFKX0pfSxzLmNoYWluPWZ1bmN0aW9uKGMpe3ZhciBtPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST1tLl8oRSxrKTtyZXR1cm4gSS5zdGF0dXM/QyhjKEkudmFsdWUpLl8oRSxJLmluZGV4KSxJKTpJfSl9LHMuY29uY2F0PXMub3Iscy5lbXB0eT1xcyxzLm9mPWp0LHNbXFxcImZhbnRhc3ktbGFuZC9hcFxcXCJdPXMuYXAsc1tcXFwiZmFudGFzeS1sYW5kL2NoYWluXFxcIl09cy5jaGFpbixzW1xcXCJmYW50YXN5LWxhbmQvY29uY2F0XFxcIl09cy5jb25jYXQsc1tcXFwiZmFudGFzeS1sYW5kL2VtcHR5XFxcIl09cy5lbXB0eSxzW1xcXCJmYW50YXN5LWxhbmQvb2ZcXFwiXT1zLm9mLHNbXFxcImZhbnRhc3ktbGFuZC9tYXBcXFwiXT1zLm1hcDt2YXIgQm49cihmdW5jdGlvbihjLG0pe3JldHVybiB3KG0sVihjLG0pKX0pLFl1PXIoZnVuY3Rpb24oYyxtKXtyZXR1cm4gbT49Yy5sZW5ndGg/VChtLFxcXCJhbnkgY2hhcmFjdGVyL2J5dGVcXFwiKTp3KG0rMSx6KGMsbSkpfSksR3U9cihmdW5jdGlvbihjLG0pe3JldHVybiB3KGMubGVuZ3RoLGMuc2xpY2UobSkpfSksVXM9cihmdW5jdGlvbihjLG0pe3JldHVybiBtPGMubGVuZ3RoP1QobSxcXFwiRU9GXFxcIik6dyhtLG51bGwpfSksWnU9ZnQoL1swLTldLykuZGVzYyhcXFwiYSBkaWdpdFxcXCIpLFF1PWZ0KC9bMC05XSovKS5kZXNjKFxcXCJvcHRpb25hbCBkaWdpdHNcXFwiKSxYdT1mdCgvW2Etel0vaSkuZGVzYyhcXFwiYSBsZXR0ZXJcXFwiKSxlbD1mdCgvW2Etel0qL2kpLmRlc2MoXFxcIm9wdGlvbmFsIGxldHRlcnNcXFwiKSx0bD1mdCgvXFxcXHMqLykuZGVzYyhcXFwib3B0aW9uYWwgd2hpdGVzcGFjZVxcXCIpLG5sPWZ0KC9cXFxccysvKS5kZXNjKFxcXCJ3aGl0ZXNwYWNlXFxcIiksU289X24oXFxcIlxcXFxyXFxcIiksa289X24oYFxcbmApLENvPV9uKGBcXFxcclxcbmApLHhvPVByKENvLGtvLFNvKS5kZXNjKFxcXCJuZXdsaW5lXFxcIikscmw9UHIoeG8sVXMpO3IuYWxsPUd1LHIuYWx0PVByLHIuYW55PVl1LHIuY3I9U28sci5jcmVhdGVMYW5ndWFnZT1mdW5jdGlvbihjKXt2YXIgbT17fTtmb3IodmFyIEUgaW4gYykoe30pLmhhc093blByb3BlcnR5LmNhbGwoYyxFKSYmZnVuY3Rpb24oayl7bVtrXT1UbyhmdW5jdGlvbigpe3JldHVybiBjW2tdKG0pfSl9KEUpO3JldHVybiBtfSxyLmNybGY9Q28sci5jdXN0b209ZnVuY3Rpb24oYyl7cmV0dXJuIHIoYyh3LFQpKX0sci5kaWdpdD1adSxyLmRpZ2l0cz1RdSxyLmVtcHR5PXFzLHIuZW5kPXJsLHIuZW9mPVVzLHIuZmFpbD0kcixyLmZvcm1hdEVycm9yPWJvLHIuaW5kZXg9Qm4sci5pc1BhcnNlcj1PLHIubGF6eT1UbyxyLmxldHRlcj1YdSxyLmxldHRlcnM9ZWwsci5sZj1rbyxyLmxvb2thaGVhZD1ScixyLm1ha2VGYWlsdXJlPVQsci5tYWtlU3VjY2Vzcz13LHIubmV3bGluZT14byxyLm5vbmVPZj1mdW5jdGlvbihjKXtyZXR1cm4ganIoZnVuY3Rpb24obSl7cmV0dXJuIGMuaW5kZXhPZihtKTwwfSkuZGVzYyhcXFwibm9uZSBvZiAnXFxcIitjK1xcXCInXFxcIil9LHIubm90Rm9sbG93ZWRCeT13byxyLm9mPWp0LHIub25lT2Y9ZnVuY3Rpb24oYyl7Zm9yKHZhciBtPWMuc3BsaXQoXFxcIlxcXCIpLEU9MDtFPG0ubGVuZ3RoO0UrKyltW0VdPVxcXCInXFxcIittW0VdK1xcXCInXFxcIjtyZXR1cm4ganIoZnVuY3Rpb24oayl7cmV0dXJuIGMuaW5kZXhPZihrKT49MH0pLmRlc2MobSl9LHIub3B0V2hpdGVzcGFjZT10bCxyLlBhcnNlcj1yLHIucmFuZ2U9ZnVuY3Rpb24oYyxtKXtyZXR1cm4ganIoZnVuY3Rpb24oRSl7cmV0dXJuIGM8PUUmJkU8PW19KS5kZXNjKGMrXFxcIi1cXFwiK20pfSxyLnJlZ2V4PWZ0LHIucmVnZXhwPWZ0LHIuc2VwQnk9Rm8sci5zZXBCeTE9VnMsci5zZXE9QnIsci5zZXFNYXA9UnQsci5zZXFPYmo9ZnVuY3Rpb24oKXtmb3IodmFyIGMsbT17fSxFPTAsaz0oYz1hcmd1bWVudHMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYykpLEk9ay5sZW5ndGgsTj0wO048STtOKz0xKXt2YXIgTD1rW05dO2lmKCFPKEwpKXtpZih2KEwpJiZMLmxlbmd0aD09PTImJnR5cGVvZiBMWzBdPT1cXFwic3RyaW5nXFxcIiYmTyhMWzFdKSl7dmFyIHE9TFswXTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxxKSl0aHJvdyBuZXcgRXJyb3IoXFxcInNlcU9iajogZHVwbGljYXRlIGtleSBcXFwiK3EpO21bcV09ITAsRSsrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcXFwic2VxT2JqIGFyZ3VtZW50cyBtdXN0IGJlIHBhcnNlcnMgb3IgW3N0cmluZywgcGFyc2VyXSBhcnJheSBwYWlycy5cXFwiKX19aWYoRT09PTApdGhyb3cgbmV3IEVycm9yKFxcXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXFxcIik7cmV0dXJuIHIoZnVuY3Rpb24obmUsU2Upe2Zvcih2YXIgZ2UsZHQ9e30sdmU9MDt2ZTxJO3ZlKz0xKXt2YXIgaHQsbm47aWYodihrW3ZlXSk/KGh0PWtbdmVdWzBdLG5uPWtbdmVdWzFdKTooaHQ9bnVsbCxubj1rW3ZlXSksIShnZT1DKG5uLl8obmUsU2UpLGdlKSkuc3RhdHVzKXJldHVybiBnZTtodCYmKGR0W2h0XT1nZS52YWx1ZSksU2U9Z2UuaW5kZXh9cmV0dXJuIEModyhTZSxkdCksZ2UpfSl9LHIuc3RyaW5nPV9uLHIuc3VjY2VlZD1qdCxyLnRha2VXaGlsZT1mdW5jdGlvbihjKXtyZXR1cm4gbGUoYykscihmdW5jdGlvbihtLEUpe2Zvcih2YXIgaz1FO2s8bS5sZW5ndGgmJmMoeihtLGspKTspaysrO3JldHVybiB3KGssbS5zbGljZShFLGspKX0pfSxyLnRlc3Q9anIsci53aGl0ZXNwYWNlPW5sLHJbXFxcImZhbnRhc3ktbGFuZC9lbXB0eVxcXCJdPXFzLHJbXFxcImZhbnRhc3ktbGFuZC9vZlxcXCJdPWp0LHIuQmluYXJ5PXtiaXRTZXE6aCxiaXRTZXFPYmo6ZnVuY3Rpb24oYyl7ZCgpO3ZhciBtPXt9LEU9MCxrPWEoZnVuY3Rpb24oTil7aWYodihOKSl7dmFyIEw9TjtpZihMLmxlbmd0aCE9PTIpdGhyb3cgbmV3IEVycm9yKFxcXCJbXFxcIitMLmpvaW4oXFxcIiwgXFxcIikrXFxcIl0gc2hvdWxkIGJlIGxlbmd0aCAyLCBnb3QgbGVuZ3RoIFxcXCIrTC5sZW5ndGgpO2lmKHgoTFswXSkscmUoTFsxXSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sTFswXSkpdGhyb3cgbmV3IEVycm9yKFxcXCJkdXBsaWNhdGUga2V5IGluIGJpdFNlcU9iajogXFxcIitMWzBdKTtyZXR1cm4gbVtMWzBdXT0hMCxFKyssTH1yZXR1cm4gcmUoTiksW251bGwsTl19LGMpO2lmKEU8MSl0aHJvdyBuZXcgRXJyb3IoXFxcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1xcXCIrYy5qb2luKFxcXCIsIFxcXCIpK1xcXCJdXFxcIik7dmFyIEk9YShmdW5jdGlvbihOKXtyZXR1cm4gTlswXX0sayk7cmV0dXJuIGgoYShmdW5jdGlvbihOKXtyZXR1cm4gTlsxXX0saykpLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gbyhmdW5jdGlvbihMLHEpe3JldHVybiBxWzBdIT09bnVsbCYmKExbcVswXV09cVsxXSksTH0se30sYShmdW5jdGlvbihMLHEpe3JldHVybltMLE5bcV1dfSxJKSl9KX0sYnl0ZTpmdW5jdGlvbihjKXtpZihkKCkscmUoYyksYz4yNTUpdGhyb3cgbmV3IEVycm9yKFxcXCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoXFxcIitjK1xcXCI9MHhcXFwiK2MudG9TdHJpbmcoMTYpK1xcXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXFxcIik7dmFyIG09KGM+MTU/XFxcIjB4XFxcIjpcXFwiMHgwXFxcIikrYy50b1N0cmluZygxNik7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST16KEUsayk7cmV0dXJuIEk9PT1jP3coaysxLEkpOlQoayxtKX0pfSxidWZmZXI6ZnVuY3Rpb24oYyl7cmV0dXJuIHAoXFxcImJ1ZmZlclxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBCdWZmZXIuZnJvbShtKX0pfSxlbmNvZGVkU3RyaW5nOmZ1bmN0aW9uKGMsbSl7cmV0dXJuIHAoXFxcInN0cmluZ1xcXCIsbSkubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnRvU3RyaW5nKGMpfSl9LHVpbnRCRTpGLHVpbnQ4QkU6RigxKSx1aW50MTZCRTpGKDIpLHVpbnQzMkJFOkYoNCksdWludExFOmcsdWludDhMRTpnKDEpLHVpbnQxNkxFOmcoMiksdWludDMyTEU6Zyg0KSxpbnRCRTp5LGludDhCRTp5KDEpLGludDE2QkU6eSgyKSxpbnQzMkJFOnkoNCksaW50TEU6UyxpbnQ4TEU6UygxKSxpbnQxNkxFOlMoMiksaW50MzJMRTpTKDQpLGZsb2F0QkU6cChcXFwiZmxvYXRCRVxcXCIsNCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWRGbG9hdEJFKDApfSksZmxvYXRMRTpwKFxcXCJmbG9hdExFXFxcIiw0KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZEZsb2F0TEUoMCl9KSxkb3VibGVCRTpwKFxcXCJkb3VibGVCRVxcXCIsOCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOnAoXFxcImRvdWJsZUxFXFxcIiw4KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZERvdWJsZUxFKDApfSl9LG4uZXhwb3J0cz1yfV0pfSl9KTt2YXIgTXU9SW8oTGU9PntcXFwidXNlIHN0cmljdFxcXCI7dmFyIGdmPUxlJiZMZS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ocixzKXtyLl9fcHJvdG9fXz1zfXx8ZnVuY3Rpb24ocixzKXtmb3IodmFyIGkgaW4gcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyxpKSYmKHJbaV09c1tpXSl9LG4oZSx0KX07cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQhPVxcXCJmdW5jdGlvblxcXCImJnQhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXFxcIitTdHJpbmcodCkrXFxcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXFxcIik7bihlLHQpO2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9ZS5wcm90b3R5cGU9dD09PW51bGw/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUsXFxcIl9fZXNNb2R1bGVcXFwiLHt2YWx1ZTohMH0pO0xlLkVtcHR5QlRyZWU9TGUuYXNTZXQ9TGUuc2ltcGxlQ29tcGFyYXRvcj1MZS5kZWZhdWx0Q29tcGFyYXRvcj12b2lkIDA7ZnVuY3Rpb24gTnUobixlKXtpZihOdW1iZXIuaXNGaW5pdGUobikmJk51bWJlci5pc0Zpbml0ZShlKSlyZXR1cm4gbi1lO3ZhciB0PXR5cGVvZiBuLHI9dHlwZW9mIGU7aWYodCE9PXIpcmV0dXJuIHQ8cj8tMToxO2lmKHQ9PT1cXFwib2JqZWN0XFxcIil7aWYobj09PW51bGwpcmV0dXJuIGU9PT1udWxsPzA6LTE7aWYoZT09PW51bGwpcmV0dXJuIDE7aWYobj1uLnZhbHVlT2YoKSxlPWUudmFsdWVPZigpLHQ9dHlwZW9mIG4scj10eXBlb2YgZSx0IT09cilyZXR1cm4gdDxyPy0xOjF9cmV0dXJuIG48ZT8tMTpuPmU/MTpuPT09ZT8wOk51bWJlci5pc05hTihuKT9OdW1iZXIuaXNOYU4oZSk/MDotMTpOdW1iZXIuaXNOYU4oZSk/MTpBcnJheS5pc0FycmF5KG4pPzA6TnVtYmVyLk5hTn1MZS5kZWZhdWx0Q29tcGFyYXRvcj1OdTtmdW5jdGlvbiBiZihuLGUpe3JldHVybiBuPmU/MTpuPGU/LTE6MH1MZS5zaW1wbGVDb21wYXJhdG9yPWJmO3ZhciBsdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oZSx0LHIpe3RoaXMuX3Jvb3Q9dW8sdGhpcy5fc2l6ZT0wLHRoaXMuX21heE5vZGVTaXplPXI+PTQ/TWF0aC5taW4ociwyNTYpOjMyLHRoaXMuX2NvbXBhcmU9dHx8TnUsZSYmdGhpcy5zZXRQYWlycyhlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJzaXplXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJsZW5ndGhcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImlzRW1wdHlcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZT09PTB9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9yb290PXVvLHRoaXMuX3NpemU9MH0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7cmV0dXJuIHQhPT12b2lkIDAmJihlPWUuYmluZCh0KSksdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbihzLGkpe3JldHVybiBlKGkscyxyKX0pfSxuLnByb3RvdHlwZS5mb3JFYWNoUGFpcj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubWluS2V5KCkscz10aGlzLm1heEtleSgpO3JldHVybiB0aGlzLmZvclJhbmdlKHIscywhMCxlLHQpfSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcm9vdC5nZXQoZSx0LHRoaXMpfSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX3Jvb3QuaXNTaGFyZWQmJih0aGlzLl9yb290PXRoaXMuX3Jvb3QuY2xvbmUoKSk7dmFyIHM9dGhpcy5fcm9vdC5zZXQoZSx0LHIsdGhpcyk7cmV0dXJuIHM9PT0hMHx8cz09PSExP3M6KHRoaXMuX3Jvb3Q9bmV3IEZmKFt0aGlzLl9yb290LHNdKSwhMCl9LG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mb3JSYW5nZShlLGUsITAsdm9pZCAwKSE9PTB9LG4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lZGl0UmFuZ2UoZSxlLCEwLHZ1KSE9PTB9LG4ucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMuY2xvbmUoKTtyZXR1cm4gcy5zZXQoZSx0LHIpfHxyP3M6dGhpc30sbi5wcm90b3R5cGUud2l0aFBhaXJzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jbG9uZSgpO3JldHVybiByLnNldFBhaXJzKGUsdCkhPT0wfHx0P3I6dGhpc30sbi5wcm90b3R5cGUud2l0aEtleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jbG9uZSgpLHM9ITEsaT0wO2k8ZS5sZW5ndGg7aSsrKXM9ci5zZXQoZVtpXSx2b2lkIDAsITEpfHxzO3JldHVybiB0JiYhcz90aGlzOnJ9LG4ucHJvdG90eXBlLndpdGhvdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy53aXRob3V0UmFuZ2UoZSxlLCEwLHQpfSxuLnByb3RvdHlwZS53aXRob3V0S2V5cz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY2xvbmUoKTtyZXR1cm4gci5kZWxldGVLZXlzKGUpfHwhdD9yOnRoaXN9LG4ucHJvdG90eXBlLndpdGhvdXRSYW5nZT1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmNsb25lKCk7cmV0dXJuIGkuZGVsZXRlUmFuZ2UoZSx0LHIpPT09MCYmcz90aGlzOml9LG4ucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ3JlZWR5Q2xvbmUoKSxzO3JldHVybiByLmVkaXRBbGwoZnVuY3Rpb24oaSxvLGEpe2lmKCFlKGksbyxhKSlyZXR1cm4gcz1BdX0pLCFzJiZ0P3RoaXM6cn0sbi5wcm90b3R5cGUubWFwVmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9LHI9dGhpcy5ncmVlZHlDbG9uZSgpO3JldHVybiByLmVkaXRBbGwoZnVuY3Rpb24ocyxpLG8pe3JldHVybiB0LnZhbHVlPWUoaSxzLG8pLHR9KSxyfSxuLnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxzPXQsaT10aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSxMciksbzshKG89aS5uZXh0KCkpLmRvbmU7KXM9ZShzLG8udmFsdWUscisrLHRoaXMpO3JldHVybiBzfSxuLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5maW5kUGF0aChlKTtpZihyPT09dm9pZCAwKXJldHVybiBMbigpO3ZhciBzPXIubm9kZXF1ZXVlLGk9ci5ub2RlaW5kZXgsbz1yLmxlYWYsYT10IT09dm9pZCAwPzE6MCx1PWU9PT12b2lkIDA/LTE6by5pbmRleE9mKGUsMCx0aGlzLl9jb21wYXJlKS0xO3JldHVybiBMbihmdW5jdGlvbigpe2U6Zm9yKDs7KXN3aXRjaChhKXtjYXNlIDA6aWYoKyt1PG8ua2V5cy5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6W28ua2V5c1t1XSxvLnZhbHVlc1t1XV19O2E9Mjtjb250aW51ZTtjYXNlIDE6aWYoKyt1PG8ua2V5cy5sZW5ndGgpcmV0dXJuIHRbMF09by5rZXlzW3VdLHRbMV09by52YWx1ZXNbdV0se2RvbmU6ITEsdmFsdWU6dH07YT0yO2Nhc2UgMjpmb3IodmFyIGw9LTE7Oyl7aWYoKytsPj1zLmxlbmd0aCl7YT0zO2NvbnRpbnVlIGV9aWYoKytpW2xdPHNbbF0ubGVuZ3RoKWJyZWFrfWZvcig7bD4wO2wtLSlzW2wtMV09c1tsXVtpW2xdXS5jaGlsZHJlbixpW2wtMV09MDtvPXNbMF1baVswXV0sdT0tMSxhPXQhPT12b2lkIDA/MTowO2NvbnRpbnVlO2Nhc2UgMzpyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fX0pfSxuLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKGU9PT12b2lkIDAmJihlPXRoaXMubWF4S2V5KCkscj12b2lkIDAsZT09PXZvaWQgMCkpcmV0dXJuIExuKCk7dmFyIHM9dGhpcy5maW5kUGF0aChlKXx8dGhpcy5maW5kUGF0aCh0aGlzLm1heEtleSgpKSxpPXMubm9kZXF1ZXVlLG89cy5ub2RlaW5kZXgsYT1zLmxlYWY7TmUoIWlbMF18fGE9PT1pWzBdW29bMF1dLFxcXCJ3YXQhXFxcIik7dmFyIHU9YS5pbmRleE9mKGUsMCx0aGlzLl9jb21wYXJlKTshciYmdTxhLmtleXMubGVuZ3RoJiZ0aGlzLl9jb21wYXJlKGEua2V5c1t1XSxlKTw9MCYmdSsrO3ZhciBsPXQhPT12b2lkIDA/MTowO3JldHVybiBMbihmdW5jdGlvbigpe2U6Zm9yKDs7KXN3aXRjaChsKXtjYXNlIDA6aWYoLS11Pj0wKXJldHVybntkb25lOiExLHZhbHVlOlthLmtleXNbdV0sYS52YWx1ZXNbdV1dfTtsPTI7Y29udGludWU7Y2FzZSAxOmlmKC0tdT49MClyZXR1cm4gdFswXT1hLmtleXNbdV0sdFsxXT1hLnZhbHVlc1t1XSx7ZG9uZTohMSx2YWx1ZTp0fTtsPTI7Y2FzZSAyOmZvcih2YXIgZD0tMTs7KXtpZigrK2Q+PWkubGVuZ3RoKXtsPTM7Y29udGludWUgZX1pZigtLW9bZF0+PTApYnJlYWt9Zm9yKDtkPjA7ZC0tKWlbZC0xXT1pW2RdW29bZF1dLmNoaWxkcmVuLG9bZC0xXT1pW2QtMV0ubGVuZ3RoLTE7YT1pWzBdW29bMF1dLHU9YS5rZXlzLmxlbmd0aCxsPXQhPT12b2lkIDA/MTowO2NvbnRpbnVlO2Nhc2UgMzpyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fX0pfSxuLnByb3RvdHlwZS5maW5kUGF0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yb290LHIscztpZih0LmlzTGVhZilyPUl1LHM9SXU7ZWxzZXtyPVtdLHM9W107Zm9yKHZhciBpPTA7IXQuaXNMZWFmO2krKyl7aWYocltpXT10LmNoaWxkcmVuLHNbaV09ZT09PXZvaWQgMD8wOnQuaW5kZXhPZihlLDAsdGhpcy5fY29tcGFyZSksc1tpXT49cltpXS5sZW5ndGgpcmV0dXJuO3Q9cltpXVtzW2ldXX1yLnJldmVyc2UoKSxzLnJldmVyc2UoKX1yZXR1cm57bm9kZXF1ZXVlOnIsbm9kZWluZGV4OnMsbGVhZjp0fX0sbi5wcm90b3R5cGUuZGlmZkFnYWluc3Q9ZnVuY3Rpb24oZSx0LHIscyl7aWYoZS5fY29tcGFyZSE9PXRoaXMuX2NvbXBhcmUpdGhyb3cgbmV3IEVycm9yKFxcXCJUcmVlIGNvbXBhcmF0b3JzIGFyZSBub3QgdGhlIHNhbWUuXFxcIik7aWYodGhpcy5pc0VtcHR5fHxlLmlzRW1wdHkpcmV0dXJuIHRoaXMuaXNFbXB0eSYmZS5pc0VtcHR5P3ZvaWQgMDp0aGlzLmlzRW1wdHk/cj09PXZvaWQgMD92b2lkIDA6bi5zdGVwVG9FbmQobi5tYWtlRGlmZkN1cnNvcihlKSxyKTp0PT09dm9pZCAwP3ZvaWQgMDpuLnN0ZXBUb0VuZChuLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLHQpO2Zvcih2YXIgaT10aGlzLl9jb21wYXJlLG89bi5tYWtlRGlmZkN1cnNvcih0aGlzKSxhPW4ubWFrZURpZmZDdXJzb3IoZSksdT0hMCxsPSEwLGQ9bi5jb21wYXJlKG8sYSxpKTt1JiZsOyl7dmFyIGg9bi5jb21wYXJlKG8sYSxpKSxwPW8ubGVhZixmPW8uaW50ZXJuYWxTcGluZSxGPW8ubGV2ZWxJbmRpY2VzLGc9YS5sZWFmLHk9YS5pbnRlcm5hbFNwaW5lLFM9YS5sZXZlbEluZGljZXM7aWYocHx8Zyl7aWYoZCE9PTApe2lmKGg9PT0wKXtpZihwJiZnJiZzKXt2YXIgTz1wLnZhbHVlc1tGW0YubGVuZ3RoLTFdXSx2PWcudmFsdWVzW1NbUy5sZW5ndGgtMV1dO2lmKCFPYmplY3QuaXMoTyx2KSl7dmFyIEQ9cyhvLmN1cnJlbnRLZXksTyx2KTtpZihEJiZELmJyZWFrKXJldHVybiBELmJyZWFrfX19ZWxzZSBpZihoPjApe2lmKGcmJnIpe3ZhciB3PWcudmFsdWVzW1NbUy5sZW5ndGgtMV1dLEQ9cihhLmN1cnJlbnRLZXksdyk7aWYoRCYmRC5icmVhaylyZXR1cm4gRC5icmVha319ZWxzZSBpZih0JiZwJiZkIT09MCl7dmFyIE89cC52YWx1ZXNbRltGLmxlbmd0aC0xXV0sRD10KG8uY3VycmVudEtleSxPKTtpZihEJiZELmJyZWFrKXJldHVybiBELmJyZWFrfX19ZWxzZSBpZighcCYmIWcmJmg9PT0wKXt2YXIgVD1mLmxlbmd0aC0xLEM9eS5sZW5ndGgtMSxNPWZbVF1bRltUXV0sVj15W0NdW1NbQ11dO2lmKFY9PT1NKXtkPTAsdT1uLnN0ZXAobywhMCksbD1uLnN0ZXAoYSwhMCk7Y29udGludWV9fWQ9aCxoPDA/dT1uLnN0ZXAobyk6bD1uLnN0ZXAoYSl9aWYodSYmdClyZXR1cm4gbi5maW5pc2hDdXJzb3JXYWxrKG8sYSxpLHQpO2lmKGwmJnIpcmV0dXJuIG4uZmluaXNoQ3Vyc29yV2FsayhhLG8saSxyKX0sbi5maW5pc2hDdXJzb3JXYWxrPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPW4uY29tcGFyZShlLHQscik7aWYoaT09PTApe2lmKCFuLnN0ZXAoZSkpcmV0dXJufWVsc2UgaTwwJiZOZSghMSxcXFwiY3Vyc29yIHdhbGsgdGVybWluYXRlZCBlYXJseVxcXCIpO3JldHVybiBuLnN0ZXBUb0VuZChlLHMpfSxuLnN0ZXBUb0VuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0hMDtyOyl7dmFyIHM9ZS5sZWFmLGk9ZS5sZXZlbEluZGljZXMsbz1lLmN1cnJlbnRLZXk7aWYocyl7dmFyIGE9cy52YWx1ZXNbaVtpLmxlbmd0aC0xXV0sdT10KG8sYSk7aWYodSYmdS5icmVhaylyZXR1cm4gdS5icmVha31yPW4uc3RlcChlKX19LG4ubWFrZURpZmZDdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fcm9vdCxyPWUuaGVpZ2h0O3JldHVybntoZWlnaHQ6cixpbnRlcm5hbFNwaW5lOltbdF1dLGxldmVsSW5kaWNlczpbMF0sbGVhZjp2b2lkIDAsY3VycmVudEtleTp0Lm1heEtleSgpfX0sbi5zdGVwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbnRlcm5hbFNwaW5lLHM9ZS5sZXZlbEluZGljZXMsaT1lLmxlYWY7aWYodD09PSEwfHxpKXt2YXIgbz1zLmxlbmd0aDtpZih0PT09ITB8fHNbby0xXT09PTApe3ZhciBhPXIubGVuZ3RoO2lmKGE9PT0wKXJldHVybiExO2Zvcih2YXIgdT1hLTEsbD11O2w+PTA7KXtpZihzW2xdPjApcmV0dXJuIGw8by0xJiYoZS5sZWFmPXZvaWQgMCxzLnBvcCgpKSxsPHUmJihlLmludGVybmFsU3BpbmU9ci5zbGljZSgwLGwrMSkpLGUuY3VycmVudEtleT1yW2xdWy0tc1tsXV0ubWF4S2V5KCksITA7bC0tfXJldHVybiExfWVsc2V7dmFyIGQ9LS1zW28tMV07cmV0dXJuIGUuY3VycmVudEtleT1pLmtleXNbZF0sITB9fWVsc2V7dmFyIGg9ci5sZW5ndGgscD1oLTEsZj1yW3BdW3NbcF1dO2lmKGYuaXNMZWFmKXtlLmxlYWY9Zjt2YXIgZD1zW2hdPWYudmFsdWVzLmxlbmd0aC0xO2UuY3VycmVudEtleT1mLmtleXNbZF19ZWxzZXt2YXIgRj1mLmNoaWxkcmVuO3JbaF09Rjt2YXIgZz1GLmxlbmd0aC0xO3NbaF09ZyxlLmN1cnJlbnRLZXk9RltnXS5tYXhLZXkoKX1yZXR1cm4hMH19LG4uY29tcGFyZT1mdW5jdGlvbihlLHQscil7dmFyIHM9ZS5oZWlnaHQsaT1lLmN1cnJlbnRLZXksbz1lLmxldmVsSW5kaWNlcyxhPXQuaGVpZ2h0LHU9dC5jdXJyZW50S2V5LGw9dC5sZXZlbEluZGljZXMsZD1yKHUsaSk7aWYoZCE9PTApcmV0dXJuIGQ7dmFyIGg9czxhP3M6YSxwPW8ubGVuZ3RoLShzLWgpLGY9bC5sZW5ndGgtKGEtaCk7cmV0dXJuIHAtZn0sbi5wcm90b3R5cGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXMoZSxMcik7cmV0dXJuIExuKGZ1bmN0aW9uKCl7dmFyIHI9dC5uZXh0KCk7cmV0dXJuIHIudmFsdWUmJihyLnZhbHVlPXIudmFsdWVbMF0pLHJ9KX0sbi5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW50cmllcyhlLExyKTtyZXR1cm4gTG4oZnVuY3Rpb24oKXt2YXIgcj10Lm5leHQoKTtyZXR1cm4gci52YWx1ZSYmKHIudmFsdWU9ci52YWx1ZVsxXSkscn0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcIm1heE5vZGVTaXplXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heE5vZGVTaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290Lm1pbktleSgpfSxuLnByb3RvdHlwZS5tYXhLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LmlzU2hhcmVkPSEwO3ZhciBlPW5ldyBuKHZvaWQgMCx0aGlzLl9jb21wYXJlLHRoaXMuX21heE5vZGVTaXplKTtyZXR1cm4gZS5fcm9vdD10aGlzLl9yb290LGUuX3NpemU9dGhpcy5fc2l6ZSxlfSxuLnByb3RvdHlwZS5ncmVlZHlDbG9uZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgbih2b2lkIDAsdGhpcy5fY29tcGFyZSx0aGlzLl9tYXhOb2RlU2l6ZSk7cmV0dXJuIHQuX3Jvb3Q9dGhpcy5fcm9vdC5ncmVlZHlDbG9uZShlKSx0Ll9zaXplPXRoaXMuX3NpemUsdH0sbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihlKXtlPT09dm9pZCAwJiYoZT0yMTQ3NDgzNjQ3KTt2YXIgdD10aGlzLm1pbktleSgpLHI9dGhpcy5tYXhLZXkoKTtyZXR1cm4gdCE9PXZvaWQgMD90aGlzLmdldFJhbmdlKHQsciwhMCxlKTpbXX0sbi5wcm90b3R5cGUua2V5c0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSx0aGlzLm1heEtleSgpLCEwLCExLHRoaXMsMCxmdW5jdGlvbih0LHIpe2UucHVzaCh0KX0pLGV9LG4ucHJvdG90eXBlLnZhbHVlc0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSx0aGlzLm1heEtleSgpLCEwLCExLHRoaXMsMCxmdW5jdGlvbih0LHIpe2UucHVzaChyKX0pLGV9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9BcnJheSgpLnRvU3RyaW5nKCl9LG4ucHJvdG90eXBlLnNldElmTm90UHJlc2VudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNldChlLHQsITEpfSxuLnByb3RvdHlwZS5uZXh0SGlnaGVyUGFpcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtdLGU9PT12b2lkIDA/dGhpcy5fcm9vdC5taW5QYWlyKHQpOnRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihlLHRoaXMuX2NvbXBhcmUsITEsdCl9LG4ucHJvdG90eXBlLm5leHRIaWdoZXJLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0SGlnaGVyUGFpcihlLExyKTtyZXR1cm4gdCYmdFswXX0sbi5wcm90b3R5cGUubmV4dExvd2VyUGFpcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtdLGU9PT12b2lkIDA/dGhpcy5fcm9vdC5tYXhQYWlyKHQpOnRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGUsdGhpcy5fY29tcGFyZSwhMSx0KX0sbi5wcm90b3R5cGUubmV4dExvd2VyS2V5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubmV4dExvd2VyUGFpcihlLExyKTtyZXR1cm4gdCYmdFswXX0sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGUsdGhpcy5fY29tcGFyZSwhMCx0fHxbXSl9LG4ucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGUsdGhpcy5fY29tcGFyZSwhMCx0fHxbXSl9LG4ucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVkaXRSYW5nZShlLGUsITAsZnVuY3Rpb24ocixzKXtyZXR1cm57dmFsdWU6dH19KSE9PTB9LG4ucHJvdG90eXBlLmdldFJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMpe3M9PT12b2lkIDAmJihzPTY3MTA4ODYzKTt2YXIgaT1bXTtyZXR1cm4gdGhpcy5fcm9vdC5mb3JSYW5nZShlLHQsciwhMSx0aGlzLDAsZnVuY3Rpb24obyxhKXtyZXR1cm4gaS5wdXNoKFtvLGFdKSxpLmxlbmd0aD5zP3dmOnZvaWQgMH0pLGl9LG4ucHJvdG90eXBlLnNldFBhaXJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAscz0wO3M8ZS5sZW5ndGg7cysrKXRoaXMuc2V0KGVbc11bMF0sZVtzXVsxXSx0KSYmcisrO3JldHVybiByfSxuLnByb3RvdHlwZS5mb3JSYW5nZT1mdW5jdGlvbihlLHQscixzLGkpe3ZhciBvPXRoaXMuX3Jvb3QuZm9yUmFuZ2UoZSx0LHIsITEsdGhpcyxpfHwwLHMpO3JldHVybiB0eXBlb2Ygbz09XFxcIm51bWJlclxcXCI/bzpvLmJyZWFrfSxuLnByb3RvdHlwZS5lZGl0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIscyxpKXt2YXIgbz10aGlzLl9yb290O28uaXNTaGFyZWQmJih0aGlzLl9yb290PW89by5jbG9uZSgpKTt0cnl7dmFyIGE9by5mb3JSYW5nZShlLHQsciwhMCx0aGlzLGl8fDAscyk7cmV0dXJuIHR5cGVvZiBhPT1cXFwibnVtYmVyXFxcIj9hOmEuYnJlYWt9ZmluYWxseXtmb3IodmFyIHU9dm9pZCAwO28ua2V5cy5sZW5ndGg8PTEmJiFvLmlzTGVhZjspdXx8KHU9by5pc1NoYXJlZCksdGhpcy5fcm9vdD1vPW8ua2V5cy5sZW5ndGg9PT0wP3VvOm8uY2hpbGRyZW5bMF07dSYmKG8uaXNTaGFyZWQ9ITApfX0sbi5wcm90b3R5cGUuZWRpdEFsbD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLHRoaXMubWF4S2V5KCksITAsZSx0KX0sbi5wcm90b3R5cGUuZGVsZXRlUmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmVkaXRSYW5nZShlLHQscix2dSl9LG4ucHJvdG90eXBlLmRlbGV0ZUtleXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuZGVsZXRlKGVbdF0pJiZyKys7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcXFwiaGVpZ2h0XFxcIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX3Jvb3QsdD0tMTtlOyl0KyssZT1lLmlzTGVhZj92b2lkIDA6ZS5jaGlsZHJlblswXTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuY2xlYXI9ZS5zZXQ9ZS5lZGl0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXFxcIkF0dGVtcHRlZCB0byBtb2RpZnkgYSBmcm96ZW4gQlRyZWVcXFwiKX19LG4ucHJvdG90eXBlLnVuZnJlZXplPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2xlYXIsZGVsZXRlIHRoaXMuc2V0LGRlbGV0ZSB0aGlzLmVkaXRSYW5nZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJpc0Zyb3plblxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KFxcXCJlZGl0UmFuZ2VcXFwiKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcm9vdC5jaGVja1ZhbGlkKDAsdGhpcywwKTtOZShlPT09dGhpcy5zaXplLFxcXCJzaXplIG1pc21hdGNoOiBjb3VudGVkIFxcXCIsZSxcXFwiYnV0IHN0b3JlZFxcXCIsdGhpcy5zaXplKX0sbn0oKTtMZS5kZWZhdWx0PWx0O2Z1bmN0aW9uIEVmKG4pe3JldHVybiBufUxlLmFzU2V0PUVmO1N5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiYobHQucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09bHQucHJvdG90eXBlLmVudHJpZXMpO2x0LnByb3RvdHlwZS53aGVyZT1sdC5wcm90b3R5cGUuZmlsdGVyO2x0LnByb3RvdHlwZS5zZXRSYW5nZT1sdC5wcm90b3R5cGUuc2V0UGFpcnM7bHQucHJvdG90eXBlLmFkZD1sdC5wcm90b3R5cGUuc2V0O2Z1bmN0aW9uIExuKG4pe249PT12b2lkIDAmJihuPWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pO3ZhciBlPXtuZXh0Om59O3JldHVybiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmKGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZX12YXIgTHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7ZT09PXZvaWQgMCYmKGU9W10pLHRoaXMua2V5cz1lLHRoaXMudmFsdWVzPXR8fGJlLHRoaXMuaXNTaGFyZWQ9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImlzTGVhZlxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuPT09dm9pZCAwfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXNbdGhpcy5rZXlzLmxlbmd0aC0xXX0sbi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBzPXRoaXMua2V5cyxpPTAsbz1zLmxlbmd0aCxhPW8+PjE7aTxvOyl7dmFyIHU9cihzW2FdLGUpO2lmKHU8MClpPWErMTtlbHNlIGlmKHU+MClvPWE7ZWxzZXtpZih1PT09MClyZXR1cm4gYTtpZihlPT09ZSlyZXR1cm4gcy5sZW5ndGg7dGhyb3cgbmV3IEVycm9yKFxcXCJCVHJlZTogTmFOIHdhcyB1c2VkIGFzIGEga2V5XFxcIil9YT1pK28+PjF9cmV0dXJuIGFedH0sbi5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c1swXX0sbi5wcm90b3R5cGUubWluUGFpcj1mdW5jdGlvbihlKXtpZih0aGlzLmtleXMubGVuZ3RoIT09MClyZXR1cm4gZVswXT10aGlzLmtleXNbMF0sZVsxXT10aGlzLnZhbHVlc1swXSxlfSxuLnByb3RvdHlwZS5tYXhQYWlyPWZ1bmN0aW9uKGUpe2lmKHRoaXMua2V5cy5sZW5ndGghPT0wKXt2YXIgdD10aGlzLmtleXMubGVuZ3RoLTE7cmV0dXJuIGVbMF09dGhpcy5rZXlzW3RdLGVbMV09dGhpcy52YWx1ZXNbdF0sZX19LG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZXM7cmV0dXJuIG5ldyBuKHRoaXMua2V5cy5zbGljZSgwKSxlPT09YmU/ZTplLnNsaWNlKDApKX0sbi5wcm90b3R5cGUuZ3JlZWR5Q2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNTaGFyZWQmJiFlP3RoaXM6dGhpcy5jbG9uZSgpfSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMuaW5kZXhPZihlLC0xLHIuX2NvbXBhcmUpO3JldHVybiBzPDA/dDp0aGlzLnZhbHVlc1tzXX0sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPXRoaXMuaW5kZXhPZihlLC0xLHQpLG89aTwwP35pLTE6cj9pOmktMTtpZihvPj0wKXJldHVybiBzWzBdPXRoaXMua2V5c1tvXSxzWzFdPXRoaXMudmFsdWVzW29dLHN9LG4ucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGk9dGhpcy5pbmRleE9mKGUsLTEsdCksbz1pPDA/fmk6cj9pOmkrMSxhPXRoaXMua2V5cztpZihvPGEubGVuZ3RoKXJldHVybiBzWzBdPWFbb10sc1sxXT10aGlzLnZhbHVlc1tvXSxzfSxuLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz10aGlzLmtleXMubGVuZ3RoLGk9dGhpcy52YWx1ZXMubGVuZ3RoO3JldHVybiBOZSh0aGlzLnZhbHVlcz09PWJlP3M8PWk6cz09PWksXFxcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcXFwiLGUsXFxcIndpdGggbGVuZ3Roc1xcXCIscyxpLFxcXCJhbmQgYmFzZUluZGV4XFxcIixyKSxOZShlPT0wfHxzPjAsXFxcImVtcHR5IGxlYWYgYXQgZGVwdGhcXFwiLGUsXFxcImFuZCBiYXNlSW5kZXhcXFwiLHIpLHN9LG4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmluZGV4T2YoZSwtMSxzLl9jb21wYXJlKTtpZihpPDApe2lmKGk9fmkscy5fc2l6ZSsrLHRoaXMua2V5cy5sZW5ndGg8cy5fbWF4Tm9kZVNpemUpcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksZSx0LHMpO3ZhciBvPXRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSxhPXRoaXM7cmV0dXJuIGk+dGhpcy5rZXlzLmxlbmd0aCYmKGktPXRoaXMua2V5cy5sZW5ndGgsYT1vKSxhLmluc2VydEluTGVhZihpLGUsdCxzKSxvfWVsc2UgcmV0dXJuIHIhPT0hMSYmKHQhPT12b2lkIDAmJnRoaXMucmVpZnlWYWx1ZXMoKSx0aGlzLmtleXNbaV09ZSx0aGlzLnZhbHVlc1tpXT10KSwhMX0sbi5wcm90b3R5cGUucmVpZnlWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXM9PT1iZT90aGlzLnZhbHVlcz10aGlzLnZhbHVlcy5zbGljZSgwLHRoaXMua2V5cy5sZW5ndGgpOnRoaXMudmFsdWVzfSxuLnByb3RvdHlwZS5pbnNlcnRJbkxlYWY9ZnVuY3Rpb24oZSx0LHIscyl7aWYodGhpcy5rZXlzLnNwbGljZShlLDAsdCksdGhpcy52YWx1ZXM9PT1iZSl7Zm9yKDtiZS5sZW5ndGg8cy5fbWF4Tm9kZVNpemU7KWJlLnB1c2godm9pZCAwKTtpZihyPT09dm9pZCAwKXJldHVybiEwO3RoaXMudmFsdWVzPWJlLnNsaWNlKDAsdGhpcy5rZXlzLmxlbmd0aC0xKX1yZXR1cm4gdGhpcy52YWx1ZXMuc3BsaWNlKGUsMCxyKSwhMH0sbi5wcm90b3R5cGUudGFrZUZyb21SaWdodD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnZhbHVlcztlLnZhbHVlcz09PWJlP3QhPT1iZSYmdC5wdXNoKHZvaWQgMCk6KHQ9dGhpcy5yZWlmeVZhbHVlcygpLHQucHVzaChlLnZhbHVlcy5zaGlmdCgpKSksdGhpcy5rZXlzLnB1c2goZS5rZXlzLnNoaWZ0KCkpfSxuLnByb3RvdHlwZS50YWtlRnJvbUxlZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52YWx1ZXM7ZS52YWx1ZXM9PT1iZT90IT09YmUmJnQudW5zaGlmdCh2b2lkIDApOih0PXRoaXMucmVpZnlWYWx1ZXMoKSx0LnVuc2hpZnQoZS52YWx1ZXMucG9wKCkpKSx0aGlzLmtleXMudW5zaGlmdChlLmtleXMucG9wKCkpfSxuLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cy5sZW5ndGg+PjEsdD10aGlzLmtleXMuc3BsaWNlKGUpLHI9dGhpcy52YWx1ZXM9PT1iZT9iZTp0aGlzLnZhbHVlcy5zcGxpY2UoZSk7cmV0dXJuIG5ldyBuKHQscil9LG4ucHJvdG90eXBlLmZvclJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMsaSxvLGEpe3ZhciB1PWkuX2NvbXBhcmUsbCxkO2lmKHQ9PT1lKXtpZighcnx8KGQ9KGw9dGhpcy5pbmRleE9mKGUsLTEsdSkpKzEsbDwwKSlyZXR1cm4gb31lbHNlIGw9dGhpcy5pbmRleE9mKGUsMCx1KSxkPXRoaXMuaW5kZXhPZih0LC0xLHUpLGQ8MD9kPX5kOnI9PT0hMCYmZCsrO3ZhciBoPXRoaXMua2V5cyxwPXRoaXMudmFsdWVzO2lmKGEhPT12b2lkIDApZm9yKHZhciBmPWw7ZjxkO2YrKyl7dmFyIEY9aFtmXSxnPWEoRixwW2ZdLG8rKyk7aWYoZyE9PXZvaWQgMCl7aWYocz09PSEwKXtpZihGIT09aFtmXXx8dGhpcy5pc1NoYXJlZD09PSEwKXRocm93IG5ldyBFcnJvcihcXFwiQlRyZWUgaWxsZWdhbGx5IGNoYW5nZWQgb3IgY2xvbmVkIGluIGVkaXRSYW5nZVxcXCIpO2cuZGVsZXRlPyh0aGlzLmtleXMuc3BsaWNlKGYsMSksdGhpcy52YWx1ZXMhPT1iZSYmdGhpcy52YWx1ZXMuc3BsaWNlKGYsMSksaS5fc2l6ZS0tLGYtLSxkLS0pOmcuaGFzT3duUHJvcGVydHkoXFxcInZhbHVlXFxcIikmJihwW2ZdPWcudmFsdWUpfWlmKGcuYnJlYWshPT12b2lkIDApcmV0dXJuIGd9fWVsc2Ugbys9ZC1sO3JldHVybiBvfSxuLnByb3RvdHlwZS5tZXJnZVNpYmxpbmc9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsZS5rZXlzKSx0aGlzLnZhbHVlcz09PWJlKXtpZihlLnZhbHVlcz09PWJlKXJldHVybjt0aGlzLnZhbHVlcz10aGlzLnZhbHVlcy5zbGljZSgwLHRoaXMua2V5cy5sZW5ndGgpfXRoaXMudmFsdWVzLnB1c2guYXBwbHkodGhpcy52YWx1ZXMsZS5yZWlmeVZhbHVlcygpKX0sbn0oKSxGZj1mdW5jdGlvbihuKXtnZihlLG4pO2Z1bmN0aW9uIGUodCxyKXt2YXIgcz10aGlzO2lmKCFyKXtyPVtdO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXJbaV09dFtpXS5tYXhLZXkoKX1yZXR1cm4gcz1uLmNhbGwodGhpcyxyKXx8dGhpcyxzLmNoaWxkcmVuPXQsc31yZXR1cm4gZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jaGlsZHJlbi5zbGljZSgwKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pc1NoYXJlZD0hMDtyZXR1cm4gbmV3IGUodCx0aGlzLmtleXMuc2xpY2UoMCkpfSxlLnByb3RvdHlwZS5ncmVlZHlDbG9uZT1mdW5jdGlvbih0KXtpZih0aGlzLmlzU2hhcmVkJiYhdClyZXR1cm4gdGhpcztmb3IodmFyIHI9bmV3IGUodGhpcy5jaGlsZHJlbi5zbGljZSgwKSx0aGlzLmtleXMuc2xpY2UoMCkpLHM9MDtzPHIuY2hpbGRyZW4ubGVuZ3RoO3MrKylyLmNoaWxkcmVuW3NdPXIuY2hpbGRyZW5bc10uZ3JlZWR5Q2xvbmUodCk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pbktleSgpfSxlLnByb3RvdHlwZS5taW5QYWlyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pblBhaXIodCl9LGUucHJvdG90eXBlLm1heFBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV0ubWF4UGFpcih0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQscixzKXt2YXIgaT10aGlzLmluZGV4T2YodCwwLHMuX2NvbXBhcmUpLG89dGhpcy5jaGlsZHJlbjtyZXR1cm4gaTxvLmxlbmd0aD9vW2ldLmdldCh0LHIscyk6dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXI9ZnVuY3Rpb24odCxyLHMsaSl7dmFyIG89dGhpcy5pbmRleE9mKHQsMCxyKSxhPXRoaXMuY2hpbGRyZW47aWYobz49YS5sZW5ndGgpcmV0dXJuIHRoaXMubWF4UGFpcihpKTt2YXIgdT1hW29dLmdldFBhaXJPck5leHRMb3dlcih0LHIscyxpKTtyZXR1cm4gdT09PXZvaWQgMCYmbz4wP2Fbby0xXS5tYXhQYWlyKGkpOnV9LGUucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24odCxyLHMsaSl7dmFyIG89dGhpcy5pbmRleE9mKHQsMCxyKSxhPXRoaXMuY2hpbGRyZW4sdT1hLmxlbmd0aDtpZighKG8+PXUpKXt2YXIgbD1hW29dLmdldFBhaXJPck5leHRIaWdoZXIodCxyLHMsaSk7cmV0dXJuIGw9PT12b2lkIDAmJm88dS0xP2FbbysxXS5taW5QYWlyKGkpOmx9fSxlLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKHQscixzKXt2YXIgaT10aGlzLmtleXMubGVuZ3RoLG89dGhpcy5jaGlsZHJlbi5sZW5ndGg7TmUoaT09PW8sXFxcImtleXMvY2hpbGRyZW4gbGVuZ3RoIG1pc21hdGNoOiBkZXB0aFxcXCIsdCxcXFwibGVuZ3Roc1xcXCIsaSxvLFxcXCJiYXNlSW5kZXhcXFwiLHMpLE5lKGk+MXx8dD4wLFxcXCJpbnRlcm5hbCBub2RlIGhhcyBsZW5ndGhcXFwiLGksXFxcImF0IGRlcHRoXFxcIix0LFxcXCJiYXNlSW5kZXhcXFwiLHMpO2Zvcih2YXIgYT0wLHU9dGhpcy5jaGlsZHJlbixsPXRoaXMua2V5cyxkPTAsaD0wO2g8bztoKyspYSs9dVtoXS5jaGVja1ZhbGlkKHQrMSxyLHMrYSksZCs9dVtoXS5rZXlzLmxlbmd0aCxOZShhPj1kLFxcXCJ3dGZcXFwiLHMpLE5lKGg9PT0wfHx1W2gtMV0uY29uc3RydWN0b3I9PT11W2hdLmNvbnN0cnVjdG9yLFxcXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XFxcIixzKSx1W2hdLm1heEtleSgpIT1sW2hdJiZOZSghMSxcXFwia2V5c1tcXFwiLGgsXFxcIl0gPVxcXCIsbFtoXSxcXFwiaXMgd3JvbmcsIHNob3VsZCBiZSBcXFwiLHVbaF0ubWF4S2V5KCksXFxcImF0IGRlcHRoXFxcIix0LFxcXCJiYXNlSW5kZXhcXFwiLHMpLGg9PT0wfHxyLl9jb21wYXJlKGxbaC0xXSxsW2hdKTwwfHxOZSghMSxcXFwic29ydCB2aW9sYXRpb24gYXQgZGVwdGhcXFwiLHQsXFxcImluZGV4XFxcIixoLFxcXCJrZXlzXFxcIixsW2gtMV0sbFtoXSk7dmFyIHA9ZD09PTA7cmV0dXJuKHB8fGQ+ci5tYXhOb2RlU2l6ZSpvKSYmTmUoITEscD9cXFwidG9vIGZld1xcXCI6XFxcInRvbyBtYW55XFxcIixcXFwiY2hpbGRyZW4gKFxcXCIsZCxhLFxcXCIpIGF0IGRlcHRoXFxcIix0LFxcXCJtYXhOb2RlU2l6ZTpcXFwiLHIubWF4Tm9kZVNpemUsXFxcImNoaWxkcmVuLmxlbmd0aDpcXFwiLG8sXFxcImJhc2VJbmRleDpcXFwiLHMpLGF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIscyxpKXt2YXIgbz10aGlzLmNoaWxkcmVuLGE9aS5fbWF4Tm9kZVNpemUsdT1pLl9jb21wYXJlLGw9TWF0aC5taW4odGhpcy5pbmRleE9mKHQsMCx1KSxvLmxlbmd0aC0xKSxkPW9bbF07aWYoZC5pc1NoYXJlZCYmKG9bbF09ZD1kLmNsb25lKCkpLGQua2V5cy5sZW5ndGg+PWEpe3ZhciBoO2w+MCYmKGg9b1tsLTFdKS5rZXlzLmxlbmd0aDxhJiZ1KGQua2V5c1swXSx0KTwwPyhoLmlzU2hhcmVkJiYob1tsLTFdPWg9aC5jbG9uZSgpKSxoLnRha2VGcm9tUmlnaHQoZCksdGhpcy5rZXlzW2wtMV09aC5tYXhLZXkoKSk6KGg9b1tsKzFdKSE9PXZvaWQgMCYmaC5rZXlzLmxlbmd0aDxhJiZ1KGQubWF4S2V5KCksdCk8MCYmKGguaXNTaGFyZWQmJihvW2wrMV09aD1oLmNsb25lKCkpLGgudGFrZUZyb21MZWZ0KGQpLHRoaXMua2V5c1tsXT1vW2xdLm1heEtleSgpKX12YXIgcD1kLnNldCh0LHIscyxpKTtpZihwPT09ITEpcmV0dXJuITE7aWYodGhpcy5rZXlzW2xdPWQubWF4S2V5KCkscD09PSEwKXJldHVybiEwO2lmKHRoaXMua2V5cy5sZW5ndGg8YSlyZXR1cm4gdGhpcy5pbnNlcnQobCsxLHApLCEwO3ZhciBmPXRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSxGPXRoaXM7cmV0dXJuIHUocC5tYXhLZXkoKSx0aGlzLm1heEtleSgpKT4wJiYoRj1mLGwtPXRoaXMua2V5cy5sZW5ndGgpLEYuaW5zZXJ0KGwrMSxwKSxmfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxyKXt0aGlzLmNoaWxkcmVuLnNwbGljZSh0LDAsciksdGhpcy5rZXlzLnNwbGljZSh0LDAsci5tYXhLZXkoKSl9LGUucHJvdG90eXBlLnNwbGl0T2ZmUmlnaHRTaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jaGlsZHJlbi5sZW5ndGg+PjE7cmV0dXJuIG5ldyBlKHRoaXMuY2hpbGRyZW4uc3BsaWNlKHQpLHRoaXMua2V5cy5zcGxpY2UodCkpfSxlLnByb3RvdHlwZS50YWtlRnJvbVJpZ2h0PWZ1bmN0aW9uKHQpe3RoaXMua2V5cy5wdXNoKHQua2V5cy5zaGlmdCgpKSx0aGlzLmNoaWxkcmVuLnB1c2godC5jaGlsZHJlbi5zaGlmdCgpKX0sZS5wcm90b3R5cGUudGFrZUZyb21MZWZ0PWZ1bmN0aW9uKHQpe3RoaXMua2V5cy51bnNoaWZ0KHQua2V5cy5wb3AoKSksdGhpcy5jaGlsZHJlbi51bnNoaWZ0KHQuY2hpbGRyZW4ucG9wKCkpfSxlLnByb3RvdHlwZS5mb3JSYW5nZT1mdW5jdGlvbih0LHIscyxpLG8sYSx1KXt2YXIgbD1vLl9jb21wYXJlLGQ9dGhpcy5rZXlzLGg9dGhpcy5jaGlsZHJlbixwPXRoaXMuaW5kZXhPZih0LDAsbCksZj1wLEY9TWF0aC5taW4ocj09PXQ/cDp0aGlzLmluZGV4T2YociwwLGwpLGQubGVuZ3RoLTEpO2lmKGkpe2lmKGY8PUYpdHJ5e2Zvcig7Zjw9RjtmKyspe2hbZl0uaXNTaGFyZWQmJihoW2ZdPWhbZl0uY2xvbmUoKSk7dmFyIGc9aFtmXS5mb3JSYW5nZSh0LHIscyxpLG8sYSx1KTtpZihkW2ZdPWhbZl0ubWF4S2V5KCksdHlwZW9mIGchPVxcXCJudW1iZXJcXFwiKXJldHVybiBnO2E9Z319ZmluYWxseXt2YXIgeT1vLl9tYXhOb2RlU2l6ZT4+MTtmb3IocD4wJiZwLS0sZj1GO2Y+PXA7Zi0tKWhbZl0ua2V5cy5sZW5ndGg8PXkmJihoW2ZdLmtleXMubGVuZ3RoIT09MD90aGlzLnRyeU1lcmdlKGYsby5fbWF4Tm9kZVNpemUpOihkLnNwbGljZShmLDEpLGguc3BsaWNlKGYsMSkpKTtoLmxlbmd0aCE9PTAmJmhbMF0ua2V5cy5sZW5ndGg9PT0wJiZOZSghMSxcXFwiZW1wdGluZXNzIGJ1Z1xcXCIpfX1lbHNlIGZvcig7Zjw9RjtmKyspe3ZhciBnPWhbZl0uZm9yUmFuZ2UodCxyLHMsaSxvLGEsdSk7aWYodHlwZW9mIGchPVxcXCJudW1iZXJcXFwiKXJldHVybiBnO2E9Z31yZXR1cm4gYX0sZS5wcm90b3R5cGUudHJ5TWVyZ2U9ZnVuY3Rpb24odCxyKXt2YXIgcz10aGlzLmNoaWxkcmVuO3JldHVybiB0Pj0wJiZ0KzE8cy5sZW5ndGgmJnNbdF0ua2V5cy5sZW5ndGgrc1t0KzFdLmtleXMubGVuZ3RoPD1yPyhzW3RdLmlzU2hhcmVkJiYoc1t0XT1zW3RdLmNsb25lKCkpLHNbdF0ubWVyZ2VTaWJsaW5nKHNbdCsxXSxyKSxzLnNwbGljZSh0KzEsMSksdGhpcy5rZXlzLnNwbGljZSh0KzEsMSksdGhpcy5rZXlzW3RdPXNbdF0ubWF4S2V5KCksITApOiExfSxlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmc9ZnVuY3Rpb24odCxyKXt2YXIgcz10aGlzLmtleXMubGVuZ3RoO3RoaXMua2V5cy5wdXNoLmFwcGx5KHRoaXMua2V5cyx0LmtleXMpO3ZhciBpPXQuY2hpbGRyZW47aWYodGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4saSksdC5pc1NoYXJlZCYmIXRoaXMuaXNTaGFyZWQpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5pc1NoYXJlZD0hMDt0aGlzLnRyeU1lcmdlKHMtMSxyKX0sZX0oTHUpLGJlPVtdLEF1PXtkZWxldGU6ITB9LHZ1PWZ1bmN0aW9uKCl7cmV0dXJuIEF1fSx3Zj17YnJlYWs6ITB9LHVvPWZ1bmN0aW9uKCl7dmFyIG49bmV3IEx1O3JldHVybiBuLmlzU2hhcmVkPSEwLG59KCksSXU9W10sTHI9W107ZnVuY3Rpb24gTmUobil7Zm9yKHZhciBlPVtdLHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdC0xXT1hcmd1bWVudHNbdF07aWYoIW4pdGhyb3cgZS51bnNoaWZ0KFxcXCJCKyB0cmVlXFxcIiksbmV3IEVycm9yKGUuam9pbihcXFwiIFxcXCIpKX1MZS5FbXB0eUJUcmVlPWZ1bmN0aW9uKCl7dmFyIG49bmV3IGx0O3JldHVybiBuLmZyZWV6ZSgpLG59KCl9KTt2YXIgcHQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcnt9LFVyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgRGF0ZVRpbWU6ICR7ZS50b01lc3NhZ2UoKX1gKX19LFdyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7ZS50b01lc3NhZ2UoKX1gKX19LEhyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7ZS50b01lc3NhZ2UoKX1gKX19LG10PWNsYXNzIGV4dGVuZHMgcHR7fSx1bj1jbGFzcyBleHRlbmRzIHB0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBJbnZhbGlkIHVuaXQgJHtlfWApfX0sRGU9Y2xhc3MgZXh0ZW5kcyBwdHt9LHFlPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoKXtzdXBlcihcXFwiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzc1xcXCIpfX07dmFyIF89XFxcIm51bWVyaWNcXFwiLFVlPVxcXCJzaG9ydFxcXCIsSWU9XFxcImxvbmdcXFwiLGxuPXt5ZWFyOl8sbW9udGg6XyxkYXk6X30sUG49e3llYXI6Xyxtb250aDpVZSxkYXk6X30sSnM9e3llYXI6Xyxtb250aDpVZSxkYXk6Xyx3ZWVrZGF5OlVlfSwkbj17eWVhcjpfLG1vbnRoOkllLGRheTpffSxSbj17eWVhcjpfLG1vbnRoOkllLGRheTpfLHdlZWtkYXk6SWV9LGpuPXtob3VyOl8sbWludXRlOl99LFZuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl99LHFuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOlVlfSxVbj17aG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLHRpbWVab25lTmFtZTpJZX0sV249e2hvdXI6XyxtaW51dGU6Xyxob3VyQ3ljbGU6XFxcImgyM1xcXCJ9LEhuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8saG91ckN5Y2xlOlxcXCJoMjNcXFwifSxLbj17aG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLGhvdXJDeWNsZTpcXFwiaDIzXFxcIix0aW1lWm9uZU5hbWU6VWV9LEpuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8saG91ckN5Y2xlOlxcXCJoMjNcXFwiLHRpbWVab25lTmFtZTpJZX0sem49e3llYXI6Xyxtb250aDpfLGRheTpfLGhvdXI6XyxtaW51dGU6X30sWW49e3llYXI6Xyxtb250aDpfLGRheTpfLGhvdXI6XyxtaW51dGU6XyxzZWNvbmQ6X30sR249e3llYXI6Xyxtb250aDpVZSxkYXk6Xyxob3VyOl8sbWludXRlOl99LFpuPXt5ZWFyOl8sbW9udGg6VWUsZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHNlY29uZDpffSx6cz17eWVhcjpfLG1vbnRoOlVlLGRheTpfLHdlZWtkYXk6VWUsaG91cjpfLG1pbnV0ZTpffSxRbj17eWVhcjpfLG1vbnRoOkllLGRheTpfLGhvdXI6XyxtaW51dGU6Xyx0aW1lWm9uZU5hbWU6VWV9LFhuPXt5ZWFyOl8sbW9udGg6SWUsZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLHRpbWVab25lTmFtZTpVZX0sZXI9e3llYXI6Xyxtb250aDpJZSxkYXk6Xyx3ZWVrZGF5OkllLGhvdXI6XyxtaW51dGU6Xyx0aW1lWm9uZU5hbWU6SWV9LHRyPXt5ZWFyOl8sbW9udGg6SWUsZGF5Ol8sd2Vla2RheTpJZSxob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOkllfTtmdW5jdGlvbiBVKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcInVuZGVmaW5lZFxcXCJ9ZnVuY3Rpb24gbnQobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIn1mdW5jdGlvbiBucihuKXtyZXR1cm4gdHlwZW9mIG49PVxcXCJudW1iZXJcXFwiJiZuJTE9PT0wfWZ1bmN0aW9uIE5vKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcInN0cmluZ1xcXCJ9ZnVuY3Rpb24gTG8obil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PVxcXCJbb2JqZWN0IERhdGVdXFxcIn1mdW5jdGlvbiBLcigpe3RyeXtyZXR1cm4gdHlwZW9mIEludGwhPVxcXCJ1bmRlZmluZWRcXFwiJiYhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0fWNhdGNoKG4pe3JldHVybiExfX1mdW5jdGlvbiBBbyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBHcyhuLGUsdCl7aWYobi5sZW5ndGghPT0wKXJldHVybiBuLnJlZHVjZSgocixzKT0+e2xldCBpPVtlKHMpLHNdO3JldHVybiByJiZ0KHJbMF0saVswXSk9PT1yWzBdP3I6aX0sbnVsbClbMV19ZnVuY3Rpb24gTW8obixlKXtyZXR1cm4gZS5yZWR1Y2UoKHQscik9Pih0W3JdPW5bcl0sdCkse30pfWZ1bmN0aW9uIGt0KG4sZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpfWZ1bmN0aW9uIHJ0KG4sZSx0KXtyZXR1cm4gbnIobikmJm4+PWUmJm48PXR9ZnVuY3Rpb24gZGwobixlKXtyZXR1cm4gbi1lKk1hdGguZmxvb3Iobi9lKX1mdW5jdGlvbiBpZShuLGU9Mil7bGV0IHQ9bjwwLHI7cmV0dXJuIHQ/cj1cXFwiLVxcXCIrKFxcXCJcXFwiKy1uKS5wYWRTdGFydChlLFxcXCIwXFxcIik6cj0oXFxcIlxcXCIrbikucGFkU3RhcnQoZSxcXFwiMFxcXCIpLHJ9ZnVuY3Rpb24gRHQobil7aWYoIShVKG4pfHxuPT09bnVsbHx8bj09PVxcXCJcXFwiKSlyZXR1cm4gcGFyc2VJbnQobiwxMCl9ZnVuY3Rpb24gQ3Qobil7aWYoIShVKG4pfHxuPT09bnVsbHx8bj09PVxcXCJcXFwiKSlyZXR1cm4gcGFyc2VGbG9hdChuKX1mdW5jdGlvbiBycihuKXtpZighKFUobil8fG49PT1udWxsfHxuPT09XFxcIlxcXCIpKXtsZXQgZT1wYXJzZUZsb2F0KFxcXCIwLlxcXCIrbikqMWUzO3JldHVybiBNYXRoLmZsb29yKGUpfX1mdW5jdGlvbiBjbihuLGUsdD0hMSl7bGV0IHI9MTAqKmU7cmV0dXJuKHQ/TWF0aC50cnVuYzpNYXRoLnJvdW5kKShuKnIpL3J9ZnVuY3Rpb24gcXQobil7cmV0dXJuIG4lND09PTAmJihuJTEwMCE9PTB8fG4lNDAwPT09MCl9ZnVuY3Rpb24gVXQobil7cmV0dXJuIHF0KG4pPzM2NjozNjV9ZnVuY3Rpb24gZm4obixlKXtsZXQgdD1kbChlLTEsMTIpKzEscj1uKyhlLXQpLzEyO3JldHVybiB0PT09Mj9xdChyKT8yOToyODpbMzEsbnVsbCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bdC0xXX1mdW5jdGlvbiBzcihuKXtsZXQgZT1EYXRlLlVUQyhuLnllYXIsbi5tb250aC0xLG4uZGF5LG4uaG91cixuLm1pbnV0ZSxuLnNlY29uZCxuLm1pbGxpc2Vjb25kKTtyZXR1cm4gbi55ZWFyPDEwMCYmbi55ZWFyPj0wJiYoZT1uZXcgRGF0ZShlKSxlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKS0xOTAwKSksK2V9ZnVuY3Rpb24gZG4obil7bGV0IGU9KG4rTWF0aC5mbG9vcihuLzQpLU1hdGguZmxvb3Iobi8xMDApK01hdGguZmxvb3Iobi80MDApKSU3LHQ9bi0xLHI9KHQrTWF0aC5mbG9vcih0LzQpLU1hdGguZmxvb3IodC8xMDApK01hdGguZmxvb3IodC80MDApKSU3O3JldHVybiBlPT09NHx8cj09PTM/NTM6NTJ9ZnVuY3Rpb24gaXIobil7cmV0dXJuIG4+OTk/bjpuPjYwPzE5MDArbjoyZTMrbn1mdW5jdGlvbiBKcihuLGUsdCxyPW51bGwpe2xldCBzPW5ldyBEYXRlKG4pLGk9e2hvdXJDeWNsZTpcXFwiaDIzXFxcIix5ZWFyOlxcXCJudW1lcmljXFxcIixtb250aDpcXFwiMi1kaWdpdFxcXCIsZGF5OlxcXCIyLWRpZ2l0XFxcIixob3VyOlxcXCIyLWRpZ2l0XFxcIixtaW51dGU6XFxcIjItZGlnaXRcXFwifTtyJiYoaS50aW1lWm9uZT1yKTtsZXQgbz0kKHt0aW1lWm9uZU5hbWU6ZX0saSksYT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0LG8pLmZvcm1hdFRvUGFydHMocykuZmluZCh1PT51LnR5cGUudG9Mb3dlckNhc2UoKT09PVxcXCJ0aW1lem9uZW5hbWVcXFwiKTtyZXR1cm4gYT9hLnZhbHVlOm51bGx9ZnVuY3Rpb24gV3QobixlKXtsZXQgdD1wYXJzZUludChuLDEwKTtOdW1iZXIuaXNOYU4odCkmJih0PTApO2xldCByPXBhcnNlSW50KGUsMTApfHwwLHM9dDwwfHxPYmplY3QuaXModCwtMCk/LXI6cjtyZXR1cm4gdCo2MCtzfWZ1bmN0aW9uIFpzKG4pe2xldCBlPU51bWJlcihuKTtpZih0eXBlb2Ygbj09XFxcImJvb2xlYW5cXFwifHxuPT09XFxcIlxcXCJ8fE51bWJlci5pc05hTihlKSl0aHJvdyBuZXcgRGUoYEludmFsaWQgdW5pdCB2YWx1ZSAke259YCk7cmV0dXJuIGV9ZnVuY3Rpb24gaG4obixlKXtsZXQgdD17fTtmb3IobGV0IHIgaW4gbilpZihrdChuLHIpKXtsZXQgcz1uW3JdO2lmKHM9PW51bGwpY29udGludWU7dFtlKHIpXT1acyhzKX1yZXR1cm4gdH1mdW5jdGlvbiB4dChuLGUpe2xldCB0PU1hdGgudHJ1bmMoTWF0aC5hYnMobi82MCkpLHI9TWF0aC50cnVuYyhNYXRoLmFicyhuJTYwKSkscz1uPj0wP1xcXCIrXFxcIjpcXFwiLVxcXCI7c3dpdGNoKGUpe2Nhc2VcXFwic2hvcnRcXFwiOnJldHVybmAke3N9JHtpZSh0LDIpfToke2llKHIsMil9YDtjYXNlXFxcIm5hcnJvd1xcXCI6cmV0dXJuYCR7c30ke3R9JHtyPjA/YDoke3J9YDpcXFwiXFxcIn1gO2Nhc2VcXFwidGVjaGllXFxcIjpyZXR1cm5gJHtzfSR7aWUodCwyKX0ke2llKHIsMil9YDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBWYWx1ZSBmb3JtYXQgJHtlfSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApfX1mdW5jdGlvbiBvcihuKXtyZXR1cm4gTW8obixbXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdKX12YXIgUXM9L1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XFxcXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXFxcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vO3ZhciBobD1bXFxcIkphbnVhcnlcXFwiLFxcXCJGZWJydWFyeVxcXCIsXFxcIk1hcmNoXFxcIixcXFwiQXByaWxcXFwiLFxcXCJNYXlcXFwiLFxcXCJKdW5lXFxcIixcXFwiSnVseVxcXCIsXFxcIkF1Z3VzdFxcXCIsXFxcIlNlcHRlbWJlclxcXCIsXFxcIk9jdG9iZXJcXFwiLFxcXCJOb3ZlbWJlclxcXCIsXFxcIkRlY2VtYmVyXFxcIl0sWHM9W1xcXCJKYW5cXFwiLFxcXCJGZWJcXFwiLFxcXCJNYXJcXFwiLFxcXCJBcHJcXFwiLFxcXCJNYXlcXFwiLFxcXCJKdW5cXFwiLFxcXCJKdWxcXFwiLFxcXCJBdWdcXFwiLFxcXCJTZXBcXFwiLFxcXCJPY3RcXFwiLFxcXCJOb3ZcXFwiLFxcXCJEZWNcXFwiXSxwbD1bXFxcIkpcXFwiLFxcXCJGXFxcIixcXFwiTVxcXCIsXFxcIkFcXFwiLFxcXCJNXFxcIixcXFwiSlxcXCIsXFxcIkpcXFwiLFxcXCJBXFxcIixcXFwiU1xcXCIsXFxcIk9cXFwiLFxcXCJOXFxcIixcXFwiRFxcXCJdO2Z1bmN0aW9uIGVpKG4pe3N3aXRjaChuKXtjYXNlXFxcIm5hcnJvd1xcXCI6cmV0dXJuWy4uLnBsXTtjYXNlXFxcInNob3J0XFxcIjpyZXR1cm5bLi4uWHNdO2Nhc2VcXFwibG9uZ1xcXCI6cmV0dXJuWy4uLmhsXTtjYXNlXFxcIm51bWVyaWNcXFwiOnJldHVybltcXFwiMVxcXCIsXFxcIjJcXFwiLFxcXCIzXFxcIixcXFwiNFxcXCIsXFxcIjVcXFwiLFxcXCI2XFxcIixcXFwiN1xcXCIsXFxcIjhcXFwiLFxcXCI5XFxcIixcXFwiMTBcXFwiLFxcXCIxMVxcXCIsXFxcIjEyXFxcIl07Y2FzZVxcXCIyLWRpZ2l0XFxcIjpyZXR1cm5bXFxcIjAxXFxcIixcXFwiMDJcXFwiLFxcXCIwM1xcXCIsXFxcIjA0XFxcIixcXFwiMDVcXFwiLFxcXCIwNlxcXCIsXFxcIjA3XFxcIixcXFwiMDhcXFwiLFxcXCIwOVxcXCIsXFxcIjEwXFxcIixcXFwiMTFcXFwiLFxcXCIxMlxcXCJdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciB0aT1bXFxcIk1vbmRheVxcXCIsXFxcIlR1ZXNkYXlcXFwiLFxcXCJXZWRuZXNkYXlcXFwiLFxcXCJUaHVyc2RheVxcXCIsXFxcIkZyaWRheVxcXCIsXFxcIlNhdHVyZGF5XFxcIixcXFwiU3VuZGF5XFxcIl0sbmk9W1xcXCJNb25cXFwiLFxcXCJUdWVcXFwiLFxcXCJXZWRcXFwiLFxcXCJUaHVcXFwiLFxcXCJGcmlcXFwiLFxcXCJTYXRcXFwiLFxcXCJTdW5cXFwiXSxtbD1bXFxcIk1cXFwiLFxcXCJUXFxcIixcXFwiV1xcXCIsXFxcIlRcXFwiLFxcXCJGXFxcIixcXFwiU1xcXCIsXFxcIlNcXFwiXTtmdW5jdGlvbiByaShuKXtzd2l0Y2gobil7Y2FzZVxcXCJuYXJyb3dcXFwiOnJldHVyblsuLi5tbF07Y2FzZVxcXCJzaG9ydFxcXCI6cmV0dXJuWy4uLm5pXTtjYXNlXFxcImxvbmdcXFwiOnJldHVyblsuLi50aV07Y2FzZVxcXCJudW1lcmljXFxcIjpyZXR1cm5bXFxcIjFcXFwiLFxcXCIyXFxcIixcXFwiM1xcXCIsXFxcIjRcXFwiLFxcXCI1XFxcIixcXFwiNlxcXCIsXFxcIjdcXFwiXTtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgc2k9W1xcXCJBTVxcXCIsXFxcIlBNXFxcIl0sRGw9W1xcXCJCZWZvcmUgQ2hyaXN0XFxcIixcXFwiQW5ubyBEb21pbmlcXFwiXSx5bD1bXFxcIkJDXFxcIixcXFwiQURcXFwiXSxnbD1bXFxcIkJcXFwiLFxcXCJBXFxcIl07ZnVuY3Rpb24gaWkobil7c3dpdGNoKG4pe2Nhc2VcXFwibmFycm93XFxcIjpyZXR1cm5bLi4uZ2xdO2Nhc2VcXFwic2hvcnRcXFwiOnJldHVyblsuLi55bF07Y2FzZVxcXCJsb25nXFxcIjpyZXR1cm5bLi4uRGxdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIF9vKG4pe3JldHVybiBzaVtuLmhvdXI8MTI/MDoxXX1mdW5jdGlvbiBCbyhuLGUpe3JldHVybiByaShlKVtuLndlZWtkYXktMV19ZnVuY3Rpb24gUG8obixlKXtyZXR1cm4gZWkoZSlbbi5tb250aC0xXX1mdW5jdGlvbiAkbyhuLGUpe3JldHVybiBpaShlKVtuLnllYXI8MD8wOjFdfWZ1bmN0aW9uIFJvKG4sZSx0PVxcXCJhbHdheXNcXFwiLHI9ITEpe2xldCBzPXt5ZWFyczpbXFxcInllYXJcXFwiLFxcXCJ5ci5cXFwiXSxxdWFydGVyczpbXFxcInF1YXJ0ZXJcXFwiLFxcXCJxdHIuXFxcIl0sbW9udGhzOltcXFwibW9udGhcXFwiLFxcXCJtby5cXFwiXSx3ZWVrczpbXFxcIndlZWtcXFwiLFxcXCJ3ay5cXFwiXSxkYXlzOltcXFwiZGF5XFxcIixcXFwiZGF5XFxcIixcXFwiZGF5c1xcXCJdLGhvdXJzOltcXFwiaG91clxcXCIsXFxcImhyLlxcXCJdLG1pbnV0ZXM6W1xcXCJtaW51dGVcXFwiLFxcXCJtaW4uXFxcIl0sc2Vjb25kczpbXFxcInNlY29uZFxcXCIsXFxcInNlYy5cXFwiXX0saT1bXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiXS5pbmRleE9mKG4pPT09LTE7aWYodD09PVxcXCJhdXRvXFxcIiYmaSl7bGV0IGg9bj09PVxcXCJkYXlzXFxcIjtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBoP1xcXCJ0b21vcnJvd1xcXCI6YG5leHQgJHtzW25dWzBdfWA7Y2FzZS0xOnJldHVybiBoP1xcXCJ5ZXN0ZXJkYXlcXFwiOmBsYXN0ICR7c1tuXVswXX1gO2Nhc2UgMDpyZXR1cm4gaD9cXFwidG9kYXlcXFwiOmB0aGlzICR7c1tuXVswXX1gO2RlZmF1bHQ6fX1sZXQgbz1PYmplY3QuaXMoZSwtMCl8fGU8MCxhPU1hdGguYWJzKGUpLHU9YT09PTEsbD1zW25dLGQ9cj91P2xbMV06bFsyXXx8bFsxXTp1P3Nbbl1bMF06bjtyZXR1cm4gbz9gJHthfSAke2R9IGFnb2A6YGluICR7YX0gJHtkfWB9ZnVuY3Rpb24gam8obixlKXtsZXQgdD1cXFwiXFxcIjtmb3IobGV0IHIgb2YgbilyLmxpdGVyYWw/dCs9ci52YWw6dCs9ZShyLnZhbCk7cmV0dXJuIHR9dmFyIGJsPXtEOmxuLEREOlBuLERERDokbixEREREOlJuLHQ6am4sdHQ6Vm4sdHR0OnFuLHR0dHQ6VW4sVDpXbixUVDpIbixUVFQ6S24sVFRUVDpKbixmOnpuLGZmOkduLGZmZjpRbixmZmZmOmVyLEY6WW4sRkY6Wm4sRkZGOlhuLEZGRkY6dHJ9LGZlPWNsYXNze3N0YXRpYyBjcmVhdGUoZSx0PXt9KXtyZXR1cm4gbmV3IGZlKGUsdCl9c3RhdGljIHBhcnNlRm9ybWF0KGUpe2xldCB0PW51bGwscj1cXFwiXFxcIixzPSExLGk9W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWUuY2hhckF0KG8pO2E9PT1cXFwiJ1xcXCI/KHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksdD1udWxsLHI9XFxcIlxcXCIscz0hcyk6c3x8YT09PXQ/cis9YTooci5sZW5ndGg+MCYmaS5wdXNoKHtsaXRlcmFsOiExLHZhbDpyfSkscj1hLHQ9YSl9cmV0dXJuIHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksaX1zdGF0aWMgbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyhlKXtyZXR1cm4gYmxbZV19Y29uc3RydWN0b3IoZSx0KXt0aGlzLm9wdHM9dCx0aGlzLmxvYz1lLHRoaXMuc3lzdGVtTG9jPW51bGx9Zm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZSx0KXtyZXR1cm4gdGhpcy5zeXN0ZW1Mb2M9PT1udWxsJiYodGhpcy5zeXN0ZW1Mb2M9dGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKSksdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZSwkKCQoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWUoZSx0PXt9KXtyZXR1cm4gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZSwkKCQoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWVQYXJ0cyhlLHQ9e30pe3JldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihlLCQoJCh7fSx0aGlzLm9wdHMpLHQpKS5mb3JtYXRUb1BhcnRzKCl9cmVzb2x2ZWRPcHRpb25zKGUsdD17fSl7cmV0dXJuIHRoaXMubG9jLmR0Rm9ybWF0dGVyKGUsJCgkKHt9LHRoaXMub3B0cyksdCkpLnJlc29sdmVkT3B0aW9ucygpfW51bShlLHQ9MCl7aWYodGhpcy5vcHRzLmZvcmNlU2ltcGxlKXJldHVybiBpZShlLHQpO2xldCByPSQoe30sdGhpcy5vcHRzKTtyZXR1cm4gdD4wJiYoci5wYWRUbz10KSx0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIocikuZm9ybWF0KGUpfWZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhlLHQpe2xldCByPXRoaXMubG9jLmxpc3RpbmdNb2RlKCk9PT1cXFwiZW5cXFwiLHM9dGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXImJnRoaXMubG9jLm91dHB1dENhbGVuZGFyIT09XFxcImdyZWdvcnlcXFwiLGk9KGYsRik9PnRoaXMubG9jLmV4dHJhY3QoZSxmLEYpLG89Zj0+ZS5pc09mZnNldEZpeGVkJiZlLm9mZnNldD09PTAmJmYuYWxsb3daP1xcXCJaXFxcIjplLmlzVmFsaWQ/ZS56b25lLmZvcm1hdE9mZnNldChlLnRzLGYuZm9ybWF0KTpcXFwiXFxcIixhPSgpPT5yP19vKGUpOmkoe2hvdXI6XFxcIm51bWVyaWNcXFwiLGhvdXJDeWNsZTpcXFwiaDEyXFxcIn0sXFxcImRheXBlcmlvZFxcXCIpLHU9KGYsRik9PnI/UG8oZSxmKTppKEY/e21vbnRoOmZ9Onttb250aDpmLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpLGw9KGYsRik9PnI/Qm8oZSxmKTppKEY/e3dlZWtkYXk6Zn06e3dlZWtkYXk6Zixtb250aDpcXFwibG9uZ1xcXCIsZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcIndlZWtkYXlcXFwiKSxkPWY9PntsZXQgRj1mZS5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKGYpO3JldHVybiBGP3RoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZSxGKTpmfSxoPWY9PnI/JG8oZSxmKTppKHtlcmE6Zn0sXFxcImVyYVxcXCIpLHA9Zj0+e3N3aXRjaChmKXtjYXNlXFxcIlNcXFwiOnJldHVybiB0aGlzLm51bShlLm1pbGxpc2Vjb25kKTtjYXNlXFxcInVcXFwiOmNhc2VcXFwiU1NTXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5taWxsaXNlY29uZCwzKTtjYXNlXFxcInNcXFwiOnJldHVybiB0aGlzLm51bShlLnNlY29uZCk7Y2FzZVxcXCJzc1xcXCI6cmV0dXJuIHRoaXMubnVtKGUuc2Vjb25kLDIpO2Nhc2VcXFwidXVcXFwiOnJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGUubWlsbGlzZWNvbmQvMTApLDIpO2Nhc2VcXFwidXV1XFxcIjpyZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihlLm1pbGxpc2Vjb25kLzEwMCkpO2Nhc2VcXFwibVxcXCI6cmV0dXJuIHRoaXMubnVtKGUubWludXRlKTtjYXNlXFxcIm1tXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5taW51dGUsMik7Y2FzZVxcXCJoXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5ob3VyJTEyPT09MD8xMjplLmhvdXIlMTIpO2Nhc2VcXFwiaGhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIlMTI9PT0wPzEyOmUuaG91ciUxMiwyKTtjYXNlXFxcIkhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIpO2Nhc2VcXFwiSEhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIsMik7Y2FzZVxcXCJaXFxcIjpyZXR1cm4gbyh7Zm9ybWF0OlxcXCJuYXJyb3dcXFwiLGFsbG93Wjp0aGlzLm9wdHMuYWxsb3dafSk7Y2FzZVxcXCJaWlxcXCI6cmV0dXJuIG8oe2Zvcm1hdDpcXFwic2hvcnRcXFwiLGFsbG93Wjp0aGlzLm9wdHMuYWxsb3dafSk7Y2FzZVxcXCJaWlpcXFwiOnJldHVybiBvKHtmb3JtYXQ6XFxcInRlY2hpZVxcXCIsYWxsb3daOnRoaXMub3B0cy5hbGxvd1p9KTtjYXNlXFxcIlpaWlpcXFwiOnJldHVybiBlLnpvbmUub2Zmc2V0TmFtZShlLnRzLHtmb3JtYXQ6XFxcInNob3J0XFxcIixsb2NhbGU6dGhpcy5sb2MubG9jYWxlfSk7Y2FzZVxcXCJaWlpaWlxcXCI6cmV0dXJuIGUuem9uZS5vZmZzZXROYW1lKGUudHMse2Zvcm1hdDpcXFwibG9uZ1xcXCIsbG9jYWxlOnRoaXMubG9jLmxvY2FsZX0pO2Nhc2VcXFwielxcXCI6cmV0dXJuIGUuem9uZU5hbWU7Y2FzZVxcXCJhXFxcIjpyZXR1cm4gYSgpO2Nhc2VcXFwiZFxcXCI6cmV0dXJuIHM/aSh7ZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcImRheVxcXCIpOnRoaXMubnVtKGUuZGF5KTtjYXNlXFxcImRkXFxcIjpyZXR1cm4gcz9pKHtkYXk6XFxcIjItZGlnaXRcXFwifSxcXFwiZGF5XFxcIik6dGhpcy5udW0oZS5kYXksMik7Y2FzZVxcXCJjXFxcIjpyZXR1cm4gdGhpcy5udW0oZS53ZWVrZGF5KTtjYXNlXFxcImNjY1xcXCI6cmV0dXJuIGwoXFxcInNob3J0XFxcIiwhMCk7Y2FzZVxcXCJjY2NjXFxcIjpyZXR1cm4gbChcXFwibG9uZ1xcXCIsITApO2Nhc2VcXFwiY2NjY2NcXFwiOnJldHVybiBsKFxcXCJuYXJyb3dcXFwiLCEwKTtjYXNlXFxcIkVcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtkYXkpO2Nhc2VcXFwiRUVFXFxcIjpyZXR1cm4gbChcXFwic2hvcnRcXFwiLCExKTtjYXNlXFxcIkVFRUVcXFwiOnJldHVybiBsKFxcXCJsb25nXFxcIiwhMSk7Y2FzZVxcXCJFRUVFRVxcXCI6cmV0dXJuIGwoXFxcIm5hcnJvd1xcXCIsITEpO2Nhc2VcXFwiTFxcXCI6cmV0dXJuIHM/aSh7bW9udGg6XFxcIm51bWVyaWNcXFwiLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgpO2Nhc2VcXFwiTExcXFwiOnJldHVybiBzP2koe21vbnRoOlxcXCIyLWRpZ2l0XFxcIixkYXk6XFxcIm51bWVyaWNcXFwifSxcXFwibW9udGhcXFwiKTp0aGlzLm51bShlLm1vbnRoLDIpO2Nhc2VcXFwiTExMXFxcIjpyZXR1cm4gdShcXFwic2hvcnRcXFwiLCEwKTtjYXNlXFxcIkxMTExcXFwiOnJldHVybiB1KFxcXCJsb25nXFxcIiwhMCk7Y2FzZVxcXCJMTExMTFxcXCI6cmV0dXJuIHUoXFxcIm5hcnJvd1xcXCIsITApO2Nhc2VcXFwiTVxcXCI6cmV0dXJuIHM/aSh7bW9udGg6XFxcIm51bWVyaWNcXFwifSxcXFwibW9udGhcXFwiKTp0aGlzLm51bShlLm1vbnRoKTtjYXNlXFxcIk1NXFxcIjpyZXR1cm4gcz9pKHttb250aDpcXFwiMi1kaWdpdFxcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgsMik7Y2FzZVxcXCJNTU1cXFwiOnJldHVybiB1KFxcXCJzaG9ydFxcXCIsITEpO2Nhc2VcXFwiTU1NTVxcXCI6cmV0dXJuIHUoXFxcImxvbmdcXFwiLCExKTtjYXNlXFxcIk1NTU1NXFxcIjpyZXR1cm4gdShcXFwibmFycm93XFxcIiwhMSk7Y2FzZVxcXCJ5XFxcIjpyZXR1cm4gcz9pKHt5ZWFyOlxcXCJudW1lcmljXFxcIn0sXFxcInllYXJcXFwiKTp0aGlzLm51bShlLnllYXIpO2Nhc2VcXFwieXlcXFwiOnJldHVybiBzP2koe3llYXI6XFxcIjItZGlnaXRcXFwifSxcXFwieWVhclxcXCIpOnRoaXMubnVtKGUueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwyKTtjYXNlXFxcInl5eXlcXFwiOnJldHVybiBzP2koe3llYXI6XFxcIm51bWVyaWNcXFwifSxcXFwieWVhclxcXCIpOnRoaXMubnVtKGUueWVhciw0KTtjYXNlXFxcInl5eXl5eVxcXCI6cmV0dXJuIHM/aSh7eWVhcjpcXFwibnVtZXJpY1xcXCJ9LFxcXCJ5ZWFyXFxcIik6dGhpcy5udW0oZS55ZWFyLDYpO2Nhc2VcXFwiR1xcXCI6cmV0dXJuIGgoXFxcInNob3J0XFxcIik7Y2FzZVxcXCJHR1xcXCI6cmV0dXJuIGgoXFxcImxvbmdcXFwiKTtjYXNlXFxcIkdHR0dHXFxcIjpyZXR1cm4gaChcXFwibmFycm93XFxcIik7Y2FzZVxcXCJra1xcXCI6cmV0dXJuIHRoaXMubnVtKGUud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksMik7Y2FzZVxcXCJra2trXFxcIjpyZXR1cm4gdGhpcy5udW0oZS53ZWVrWWVhciw0KTtjYXNlXFxcIldcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtOdW1iZXIpO2Nhc2VcXFwiV1dcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtOdW1iZXIsMik7Y2FzZVxcXCJvXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5vcmRpbmFsKTtjYXNlXFxcIm9vb1xcXCI6cmV0dXJuIHRoaXMubnVtKGUub3JkaW5hbCwzKTtjYXNlXFxcInFcXFwiOnJldHVybiB0aGlzLm51bShlLnF1YXJ0ZXIpO2Nhc2VcXFwicXFcXFwiOnJldHVybiB0aGlzLm51bShlLnF1YXJ0ZXIsMik7Y2FzZVxcXCJYXFxcIjpyZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihlLnRzLzFlMykpO2Nhc2VcXFwieFxcXCI6cmV0dXJuIHRoaXMubnVtKGUudHMpO2RlZmF1bHQ6cmV0dXJuIGQoZil9fTtyZXR1cm4gam8oZmUucGFyc2VGb3JtYXQodCkscCl9Zm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKGUsdCl7bGV0IHI9dT0+e3N3aXRjaCh1WzBdKXtjYXNlXFxcIlNcXFwiOnJldHVyblxcXCJtaWxsaXNlY29uZFxcXCI7Y2FzZVxcXCJzXFxcIjpyZXR1cm5cXFwic2Vjb25kXFxcIjtjYXNlXFxcIm1cXFwiOnJldHVyblxcXCJtaW51dGVcXFwiO2Nhc2VcXFwiaFxcXCI6cmV0dXJuXFxcImhvdXJcXFwiO2Nhc2VcXFwiZFxcXCI6cmV0dXJuXFxcImRheVxcXCI7Y2FzZVxcXCJ3XFxcIjpyZXR1cm5cXFwid2Vla1xcXCI7Y2FzZVxcXCJNXFxcIjpyZXR1cm5cXFwibW9udGhcXFwiO2Nhc2VcXFwieVxcXCI6cmV0dXJuXFxcInllYXJcXFwiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxzPXU9Pmw9PntsZXQgZD1yKGwpO3JldHVybiBkP3RoaXMubnVtKHUuZ2V0KGQpLGwubGVuZ3RoKTpsfSxpPWZlLnBhcnNlRm9ybWF0KHQpLG89aS5yZWR1Y2UoKHUse2xpdGVyYWw6bCx2YWw6ZH0pPT5sP3U6dS5jb25jYXQoZCksW10pLGE9ZS5zaGlmdFRvKC4uLm8ubWFwKHIpLmZpbHRlcih1PT51KSk7cmV0dXJuIGpvKGkscyhhKSl9fTt2YXIgeWU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnJlYXNvbj1lLHRoaXMuZXhwbGFuYXRpb249dH10b01lc3NhZ2UoKXtyZXR1cm4gdGhpcy5leHBsYW5hdGlvbj9gJHt0aGlzLnJlYXNvbn06ICR7dGhpcy5leHBsYW5hdGlvbn1gOnRoaXMucmVhc29ufX07dmFyIHhlPWNsYXNze2dldCB0eXBlKCl7dGhyb3cgbmV3IHFlfWdldCBuYW1lKCl7dGhyb3cgbmV3IHFlfWdldCBpYW5hTmFtZSgpe3JldHVybiB0aGlzLm5hbWV9Z2V0IGlzVW5pdmVyc2FsKCl7dGhyb3cgbmV3IHFlfW9mZnNldE5hbWUoZSx0KXt0aHJvdyBuZXcgcWV9Zm9ybWF0T2Zmc2V0KGUsdCl7dGhyb3cgbmV3IHFlfW9mZnNldChlKXt0aHJvdyBuZXcgcWV9ZXF1YWxzKGUpe3Rocm93IG5ldyBxZX1nZXQgaXNWYWxpZCgpe3Rocm93IG5ldyBxZX19O3ZhciBhaT1udWxsLE90PWNsYXNzIGV4dGVuZHMgeGV7c3RhdGljIGdldCBpbnN0YW5jZSgpe3JldHVybiBhaT09PW51bGwmJihhaT1uZXcgT3QpLGFpfWdldCB0eXBlKCl7cmV0dXJuXFxcInN5c3RlbVxcXCJ9Z2V0IG5hbWUoKXtyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZX1nZXQgaXNVbml2ZXJzYWwoKXtyZXR1cm4hMX1vZmZzZXROYW1lKGUse2Zvcm1hdDp0LGxvY2FsZTpyfSl7cmV0dXJuIEpyKGUsdCxyKX1mb3JtYXRPZmZzZXQoZSx0KXtyZXR1cm4geHQodGhpcy5vZmZzZXQoZSksdCl9b2Zmc2V0KGUpe3JldHVybi1uZXcgRGF0ZShlKS5nZXRUaW1lem9uZU9mZnNldCgpfWVxdWFscyhlKXtyZXR1cm4gZS50eXBlPT09XFxcInN5c3RlbVxcXCJ9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hMH19O3ZhciBZcj17fTtmdW5jdGlvbiBFbChuKXtyZXR1cm4gWXJbbl18fChZcltuXT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChcXFwiZW4tVVNcXFwiLHtob3VyMTI6ITEsdGltZVpvbmU6bix5ZWFyOlxcXCJudW1lcmljXFxcIixtb250aDpcXFwiMi1kaWdpdFxcXCIsZGF5OlxcXCIyLWRpZ2l0XFxcIixob3VyOlxcXCIyLWRpZ2l0XFxcIixtaW51dGU6XFxcIjItZGlnaXRcXFwiLHNlY29uZDpcXFwiMi1kaWdpdFxcXCIsZXJhOlxcXCJzaG9ydFxcXCJ9KSksWXJbbl19dmFyIEZsPXt5ZWFyOjAsbW9udGg6MSxkYXk6MixlcmE6Myxob3VyOjQsbWludXRlOjUsc2Vjb25kOjZ9O2Z1bmN0aW9uIHdsKG4sZSl7bGV0IHQ9bi5mb3JtYXQoZSkucmVwbGFjZSgvXFxcXHUyMDBFL2csXFxcIlxcXCIpLHI9LyhcXFxcZCspXFxcXC8oXFxcXGQrKVxcXFwvKFxcXFxkKykgKEFEfEJDKSw/IChcXFxcZCspOihcXFxcZCspOihcXFxcZCspLy5leGVjKHQpLFsscyxpLG8sYSx1LGwsZF09cjtyZXR1cm5bbyxzLGksYSx1LGwsZF19ZnVuY3Rpb24gVGwobixlKXtsZXQgdD1uLmZvcm1hdFRvUGFydHMoZSkscj1bXTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0e3R5cGU6aSx2YWx1ZTpvfT10W3NdLGE9RmxbaV07aT09PVxcXCJlcmFcXFwiP3JbYV09bzpVKGEpfHwoclthXT1wYXJzZUludChvLDEwKSl9cmV0dXJuIHJ9dmFyIHpyPXt9LGhlPWNsYXNzIGV4dGVuZHMgeGV7c3RhdGljIGNyZWF0ZShlKXtyZXR1cm4genJbZV18fCh6cltlXT1uZXcgaGUoZSkpLHpyW2VdfXN0YXRpYyByZXNldENhY2hlKCl7enI9e30sWXI9e319c3RhdGljIGlzVmFsaWRTcGVjaWZpZXIoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZFpvbmUoZSl9c3RhdGljIGlzVmFsaWRab25lKGUpe2lmKCFlKXJldHVybiExO3RyeXtyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXFxcImVuLVVTXFxcIix7dGltZVpvbmU6ZX0pLmZvcm1hdCgpLCEwfWNhdGNoKHQpe3JldHVybiExfX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuem9uZU5hbWU9ZSx0aGlzLnZhbGlkPWhlLmlzVmFsaWRab25lKGUpfWdldCB0eXBlKCl7cmV0dXJuXFxcImlhbmFcXFwifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuem9uZU5hbWV9Z2V0IGlzVW5pdmVyc2FsKCl7cmV0dXJuITF9b2Zmc2V0TmFtZShlLHtmb3JtYXQ6dCxsb2NhbGU6cn0pe3JldHVybiBKcihlLHQscix0aGlzLm5hbWUpfWZvcm1hdE9mZnNldChlLHQpe3JldHVybiB4dCh0aGlzLm9mZnNldChlKSx0KX1vZmZzZXQoZSl7bGV0IHQ9bmV3IERhdGUoZSk7aWYoaXNOYU4odCkpcmV0dXJuIE5hTjtsZXQgcj1FbCh0aGlzLm5hbWUpLFtzLGksbyxhLHUsbCxkXT1yLmZvcm1hdFRvUGFydHM/VGwocix0KTp3bChyLHQpO2E9PT1cXFwiQkNcXFwiJiYocz0tTWF0aC5hYnMocykrMSk7bGV0IHA9c3Ioe3llYXI6cyxtb250aDppLGRheTpvLGhvdXI6dT09PTI0PzA6dSxtaW51dGU6bCxzZWNvbmQ6ZCxtaWxsaXNlY29uZDowfSksZj0rdCxGPWYlMWUzO3JldHVybiBmLT1GPj0wP0Y6MWUzK0YsKHAtZikvKDYwKjFlMyl9ZXF1YWxzKGUpe3JldHVybiBlLnR5cGU9PT1cXFwiaWFuYVxcXCImJmUubmFtZT09PXRoaXMubmFtZX1nZXQgaXNWYWxpZCgpe3JldHVybiB0aGlzLnZhbGlkfX07dmFyIHVpPW51bGwsb2U9Y2xhc3MgZXh0ZW5kcyB4ZXtzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCl7cmV0dXJuIHVpPT09bnVsbCYmKHVpPW5ldyBvZSgwKSksdWl9c3RhdGljIGluc3RhbmNlKGUpe3JldHVybiBlPT09MD9vZS51dGNJbnN0YW5jZTpuZXcgb2UoZSl9c3RhdGljIHBhcnNlU3BlY2lmaWVyKGUpe2lmKGUpe2xldCB0PWUubWF0Y2goL151dGMoPzooWystXVxcXFxkezEsMn0pKD86OihcXFxcZHsyfSkpPyk/JC9pKTtpZih0KXJldHVybiBuZXcgb2UoV3QodFsxXSx0WzJdKSl9cmV0dXJuIG51bGx9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmZpeGVkPWV9Z2V0IHR5cGUoKXtyZXR1cm5cXFwiZml4ZWRcXFwifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuZml4ZWQ9PT0wP1xcXCJVVENcXFwiOmBVVEMke3h0KHRoaXMuZml4ZWQsXFxcIm5hcnJvd1xcXCIpfWB9Z2V0IGlhbmFOYW1lKCl7cmV0dXJuIHRoaXMuZml4ZWQ9PT0wP1xcXCJFdGMvVVRDXFxcIjpgRXRjL0dNVCR7eHQoLXRoaXMuZml4ZWQsXFxcIm5hcnJvd1xcXCIpfWB9b2Zmc2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9Zm9ybWF0T2Zmc2V0KGUsdCl7cmV0dXJuIHh0KHRoaXMuZml4ZWQsdCl9Z2V0IGlzVW5pdmVyc2FsKCl7cmV0dXJuITB9b2Zmc2V0KCl7cmV0dXJuIHRoaXMuZml4ZWR9ZXF1YWxzKGUpe3JldHVybiBlLnR5cGU9PT1cXFwiZml4ZWRcXFwiJiZlLmZpeGVkPT09dGhpcy5maXhlZH1nZXQgaXNWYWxpZCgpe3JldHVybiEwfX07dmFyIHBuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnpvbmVOYW1lPWV9Z2V0IHR5cGUoKXtyZXR1cm5cXFwiaW52YWxpZFxcXCJ9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy56b25lTmFtZX1nZXQgaXNVbml2ZXJzYWwoKXtyZXR1cm4hMX1vZmZzZXROYW1lKCl7cmV0dXJuIG51bGx9Zm9ybWF0T2Zmc2V0KCl7cmV0dXJuXFxcIlxcXCJ9b2Zmc2V0KCl7cmV0dXJuIE5hTn1lcXVhbHMoKXtyZXR1cm4hMX1nZXQgaXNWYWxpZCgpe3JldHVybiExfX07ZnVuY3Rpb24gV2UobixlKXtsZXQgdDtpZihVKG4pfHxuPT09bnVsbClyZXR1cm4gZTtpZihuIGluc3RhbmNlb2YgeGUpcmV0dXJuIG47aWYoTm8obikpe2xldCByPW4udG9Mb3dlckNhc2UoKTtyZXR1cm4gcj09PVxcXCJsb2NhbFxcXCJ8fHI9PT1cXFwic3lzdGVtXFxcIj9lOnI9PT1cXFwidXRjXFxcInx8cj09PVxcXCJnbXRcXFwiP29lLnV0Y0luc3RhbmNlOm9lLnBhcnNlU3BlY2lmaWVyKHIpfHxoZS5jcmVhdGUobil9ZWxzZSByZXR1cm4gbnQobik/b2UuaW5zdGFuY2Uobik6dHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuLm9mZnNldCYmdHlwZW9mIG4ub2Zmc2V0PT1cXFwibnVtYmVyXFxcIj9uOm5ldyBwbihuKX12YXIgVm89KCk9PkRhdGUubm93KCkscW89XFxcInN5c3RlbVxcXCIsVW89bnVsbCxXbz1udWxsLEhvPW51bGwsS28sWD1jbGFzc3tzdGF0aWMgZ2V0IG5vdygpe3JldHVybiBWb31zdGF0aWMgc2V0IG5vdyhlKXtWbz1lfXN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoZSl7cW89ZX1zdGF0aWMgZ2V0IGRlZmF1bHRab25lKCl7cmV0dXJuIFdlKHFvLE90Lmluc3RhbmNlKX1zdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKXtyZXR1cm4gVW99c3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKGUpe1VvPWV9c3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCl7cmV0dXJuIFdvfXN0YXRpYyBzZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbShlKXtXbz1lfXN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCl7cmV0dXJuIEhvfXN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKGUpe0hvPWV9c3RhdGljIGdldCB0aHJvd09uSW52YWxpZCgpe3JldHVybiBLb31zdGF0aWMgc2V0IHRocm93T25JbnZhbGlkKGUpe0tvPWV9c3RhdGljIHJlc2V0Q2FjaGVzKCl7Wi5yZXNldENhY2hlKCksaGUucmVzZXRDYWNoZSgpfX07dmFyIEpvPXt9O2Z1bmN0aW9uIFNsKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9Sm9bdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLkxpc3RGb3JtYXQobixlKSxKb1t0XT1yKSxyfXZhciBsaT17fTtmdW5jdGlvbiBjaShuLGU9e30pe2xldCB0PUpTT04uc3RyaW5naWZ5KFtuLGVdKSxyPWxpW3RdO3JldHVybiByfHwocj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChuLGUpLGxpW3RdPXIpLHJ9dmFyIGZpPXt9O2Z1bmN0aW9uIGtsKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9ZmlbdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLk51bWJlckZvcm1hdChuLGUpLGZpW3RdPXIpLHJ9dmFyIGRpPXt9O2Z1bmN0aW9uIENsKG4sZT17fSl7bGV0IG89ZSx7YmFzZTp0fT1vLHI9S3MobyxbXFxcImJhc2VcXFwiXSkscz1KU09OLnN0cmluZ2lmeShbbixyXSksaT1kaVtzXTtyZXR1cm4gaXx8KGk9bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KG4sZSksZGlbc109aSksaX12YXIgYXI9bnVsbDtmdW5jdGlvbiB4bCgpe3JldHVybiBhcnx8KGFyPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLGFyKX1mdW5jdGlvbiBPbChuKXtsZXQgZT1uLmluZGV4T2YoXFxcIi11LVxcXCIpO2lmKGU9PT0tMSlyZXR1cm5bbl07e2xldCB0LHI9bi5zdWJzdHJpbmcoMCxlKTt0cnl7dD1jaShuKS5yZXNvbHZlZE9wdGlvbnMoKX1jYXRjaChvKXt0PWNpKHIpLnJlc29sdmVkT3B0aW9ucygpfWxldHtudW1iZXJpbmdTeXN0ZW06cyxjYWxlbmRhcjppfT10O3JldHVybltyLHMsaV19fWZ1bmN0aW9uIHZsKG4sZSx0KXtyZXR1cm4odHx8ZSkmJihuKz1cXFwiLXVcXFwiLHQmJihuKz1gLWNhLSR7dH1gKSxlJiYobis9YC1udS0ke2V9YCkpLG59ZnVuY3Rpb24gSWwobil7bGV0IGU9W107Zm9yKGxldCB0PTE7dDw9MTI7dCsrKXtsZXQgcj1CLnV0YygyMDE2LHQsMSk7ZS5wdXNoKG4ocikpfXJldHVybiBlfWZ1bmN0aW9uIE5sKG4pe2xldCBlPVtdO2ZvcihsZXQgdD0xO3Q8PTc7dCsrKXtsZXQgcj1CLnV0YygyMDE2LDExLDEzK3QpO2UucHVzaChuKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBHcihuLGUsdCxyLHMpe2xldCBpPW4ubGlzdGluZ01vZGUodCk7cmV0dXJuIGk9PT1cXFwiZXJyb3JcXFwiP251bGw6aT09PVxcXCJlblxcXCI/cihlKTpzKGUpfWZ1bmN0aW9uIExsKG4pe3JldHVybiBuLm51bWJlcmluZ1N5c3RlbSYmbi5udW1iZXJpbmdTeXN0ZW0hPT1cXFwibGF0blxcXCI/ITE6bi5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ8fCFuLmxvY2FsZXx8bi5sb2NhbGUuc3RhcnRzV2l0aChcXFwiZW5cXFwiKXx8bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobi5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ9dmFyIGhpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnBhZFRvPXIucGFkVG98fDAsdGhpcy5mbG9vcj1yLmZsb29yfHwhMTtsZXQgYT1yLHtwYWRUbzpzLGZsb29yOml9PWEsbz1LcyhhLFtcXFwicGFkVG9cXFwiLFxcXCJmbG9vclxcXCJdKTtpZighdHx8T2JqZWN0LmtleXMobykubGVuZ3RoPjApe2xldCB1PSQoe3VzZUdyb3VwaW5nOiExfSxyKTtyLnBhZFRvPjAmJih1Lm1pbmltdW1JbnRlZ2VyRGlnaXRzPXIucGFkVG8pLHRoaXMuaW5mPWtsKGUsdSl9fWZvcm1hdChlKXtpZih0aGlzLmluZil7bGV0IHQ9dGhpcy5mbG9vcj9NYXRoLmZsb29yKGUpOmU7cmV0dXJuIHRoaXMuaW5mLmZvcm1hdCh0KX1lbHNle2xldCB0PXRoaXMuZmxvb3I/TWF0aC5mbG9vcihlKTpjbihlLDMpO3JldHVybiBpZSh0LHRoaXMucGFkVG8pfX19LHBpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm9wdHM9cjtsZXQgcztpZihlLnpvbmUuaXNVbml2ZXJzYWwpe2xldCBvPS0xKihlLm9mZnNldC82MCksYT1vPj0wP2BFdGMvR01UKyR7b31gOmBFdGMvR01UJHtvfWA7ZS5vZmZzZXQhPT0wJiZoZS5jcmVhdGUoYSkudmFsaWQ/KHM9YSx0aGlzLmR0PWUpOihzPVxcXCJVVENcXFwiLHIudGltZVpvbmVOYW1lP3RoaXMuZHQ9ZTp0aGlzLmR0PWUub2Zmc2V0PT09MD9lOkIuZnJvbU1pbGxpcyhlLnRzK2Uub2Zmc2V0KjYwKjFlMykpfWVsc2UgZS56b25lLnR5cGU9PT1cXFwic3lzdGVtXFxcIj90aGlzLmR0PWU6KHRoaXMuZHQ9ZSxzPWUuem9uZS5uYW1lKTtsZXQgaT0kKHt9LHRoaXMub3B0cyk7cyYmKGkudGltZVpvbmU9cyksdGhpcy5kdGY9Y2kodCxpKX1mb3JtYXQoKXtyZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSl9Zm9ybWF0VG9QYXJ0cygpe3JldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSl9cmVzb2x2ZWRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZHRmLnJlc29sdmVkT3B0aW9ucygpfX0sbWk9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMub3B0cz0kKHtzdHlsZTpcXFwibG9uZ1xcXCJ9LHIpLCF0JiZLcigpJiYodGhpcy5ydGY9Q2woZSxyKSl9Zm9ybWF0KGUsdCl7cmV0dXJuIHRoaXMucnRmP3RoaXMucnRmLmZvcm1hdChlLHQpOlJvKHQsZSx0aGlzLm9wdHMubnVtZXJpYyx0aGlzLm9wdHMuc3R5bGUhPT1cXFwibG9uZ1xcXCIpfWZvcm1hdFRvUGFydHMoZSx0KXtyZXR1cm4gdGhpcy5ydGY/dGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhlLHQpOltdfX0sWj1jbGFzc3tzdGF0aWMgZnJvbU9wdHMoZSl7cmV0dXJuIFouY3JlYXRlKGUubG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtLGUub3V0cHV0Q2FsZW5kYXIsZS5kZWZhdWx0VG9FTil9c3RhdGljIGNyZWF0ZShlLHQscixzPSExKXtsZXQgaT1lfHxYLmRlZmF1bHRMb2NhbGUsbz1pfHwocz9cXFwiZW4tVVNcXFwiOnhsKCkpLGE9dHx8WC5kZWZhdWx0TnVtYmVyaW5nU3lzdGVtLHU9cnx8WC5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7cmV0dXJuIG5ldyBaKG8sYSx1LGkpfXN0YXRpYyByZXNldENhY2hlKCl7YXI9bnVsbCxsaT17fSxmaT17fSxkaT17fX1zdGF0aWMgZnJvbU9iamVjdCh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn09e30pe3JldHVybiBaLmNyZWF0ZShlLHQscil9Y29uc3RydWN0b3IoZSx0LHIscyl7bGV0W2ksbyxhXT1PbChlKTt0aGlzLmxvY2FsZT1pLHRoaXMubnVtYmVyaW5nU3lzdGVtPXR8fG98fG51bGwsdGhpcy5vdXRwdXRDYWxlbmRhcj1yfHxhfHxudWxsLHRoaXMuaW50bD12bCh0aGlzLmxvY2FsZSx0aGlzLm51bWJlcmluZ1N5c3RlbSx0aGlzLm91dHB1dENhbGVuZGFyKSx0aGlzLndlZWtkYXlzQ2FjaGU9e2Zvcm1hdDp7fSxzdGFuZGFsb25lOnt9fSx0aGlzLm1vbnRoc0NhY2hlPXtmb3JtYXQ6e30sc3RhbmRhbG9uZTp7fX0sdGhpcy5tZXJpZGllbUNhY2hlPW51bGwsdGhpcy5lcmFDYWNoZT17fSx0aGlzLnNwZWNpZmllZExvY2FsZT1zLHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9bnVsbH1nZXQgZmFzdE51bWJlcnMoKXtyZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZD09bnVsbCYmKHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9TGwodGhpcykpLHRoaXMuZmFzdE51bWJlcnNDYWNoZWR9bGlzdGluZ01vZGUoKXtsZXQgZT10aGlzLmlzRW5nbGlzaCgpLHQ9KHRoaXMubnVtYmVyaW5nU3lzdGVtPT09bnVsbHx8dGhpcy5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCIpJiYodGhpcy5vdXRwdXRDYWxlbmRhcj09PW51bGx8fHRoaXMub3V0cHV0Q2FsZW5kYXI9PT1cXFwiZ3JlZ29yeVxcXCIpO3JldHVybiBlJiZ0P1xcXCJlblxcXCI6XFxcImludGxcXFwifWNsb25lKGUpe3JldHVybiFlfHxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5sZW5ndGg9PT0wP3RoaXM6Wi5jcmVhdGUoZS5sb2NhbGV8fHRoaXMuc3BlY2lmaWVkTG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtfHx0aGlzLm51bWJlcmluZ1N5c3RlbSxlLm91dHB1dENhbGVuZGFyfHx0aGlzLm91dHB1dENhbGVuZGFyLGUuZGVmYXVsdFRvRU58fCExKX1yZWRlZmF1bHRUb0VOKGU9e30pe3JldHVybiB0aGlzLmNsb25lKEZlKCQoe30sZSkse2RlZmF1bHRUb0VOOiEwfSkpfXJlZGVmYXVsdFRvU3lzdGVtKGU9e30pe3JldHVybiB0aGlzLmNsb25lKEZlKCQoe30sZSkse2RlZmF1bHRUb0VOOiExfSkpfW1vbnRocyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLGVpLCgpPT57bGV0IHM9dD97bW9udGg6ZSxkYXk6XFxcIm51bWVyaWNcXFwifTp7bW9udGg6ZX0saT10P1xcXCJmb3JtYXRcXFwiOlxcXCJzdGFuZGFsb25lXFxcIjtyZXR1cm4gdGhpcy5tb250aHNDYWNoZVtpXVtlXXx8KHRoaXMubW9udGhzQ2FjaGVbaV1bZV09SWwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwibW9udGhcXFwiKSkpLHRoaXMubW9udGhzQ2FjaGVbaV1bZV19KX13ZWVrZGF5cyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLHJpLCgpPT57bGV0IHM9dD97d2Vla2RheTplLHllYXI6XFxcIm51bWVyaWNcXFwiLG1vbnRoOlxcXCJsb25nXFxcIixkYXk6XFxcIm51bWVyaWNcXFwifTp7d2Vla2RheTplfSxpPXQ/XFxcImZvcm1hdFxcXCI6XFxcInN0YW5kYWxvbmVcXFwiO3JldHVybiB0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV18fCh0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV09Tmwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwid2Vla2RheVxcXCIpKSksdGhpcy53ZWVrZGF5c0NhY2hlW2ldW2VdfSl9bWVyaWRpZW1zKGU9ITApe3JldHVybiBHcih0aGlzLHZvaWQgMCxlLCgpPT5zaSwoKT0+e2lmKCF0aGlzLm1lcmlkaWVtQ2FjaGUpe2xldCB0PXtob3VyOlxcXCJudW1lcmljXFxcIixob3VyQ3ljbGU6XFxcImgxMlxcXCJ9O3RoaXMubWVyaWRpZW1DYWNoZT1bQi51dGMoMjAxNiwxMSwxMyw5KSxCLnV0YygyMDE2LDExLDEzLDE5KV0ubWFwKHI9PnRoaXMuZXh0cmFjdChyLHQsXFxcImRheXBlcmlvZFxcXCIpKX1yZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlfSl9ZXJhcyhlLHQ9ITApe3JldHVybiBHcih0aGlzLGUsdCxpaSwoKT0+e2xldCByPXtlcmE6ZX07cmV0dXJuIHRoaXMuZXJhQ2FjaGVbZV18fCh0aGlzLmVyYUNhY2hlW2VdPVtCLnV0YygtNDAsMSwxKSxCLnV0YygyMDE3LDEsMSldLm1hcChzPT50aGlzLmV4dHJhY3QocyxyLFxcXCJlcmFcXFwiKSkpLHRoaXMuZXJhQ2FjaGVbZV19KX1leHRyYWN0KGUsdCxyKXtsZXQgcz10aGlzLmR0Rm9ybWF0dGVyKGUsdCksaT1zLmZvcm1hdFRvUGFydHMoKSxvPWkuZmluZChhPT5hLnR5cGUudG9Mb3dlckNhc2UoKT09PXIpO3JldHVybiBvP28udmFsdWU6bnVsbH1udW1iZXJGb3JtYXR0ZXIoZT17fSl7cmV0dXJuIG5ldyBoaSh0aGlzLmludGwsZS5mb3JjZVNpbXBsZXx8dGhpcy5mYXN0TnVtYmVycyxlKX1kdEZvcm1hdHRlcihlLHQ9e30pe3JldHVybiBuZXcgcGkoZSx0aGlzLmludGwsdCl9cmVsRm9ybWF0dGVyKGU9e30pe3JldHVybiBuZXcgbWkodGhpcy5pbnRsLHRoaXMuaXNFbmdsaXNoKCksZSl9bGlzdEZvcm1hdHRlcihlPXt9KXtyZXR1cm4gU2wodGhpcy5pbnRsLGUpfWlzRW5nbGlzaCgpe3JldHVybiB0aGlzLmxvY2FsZT09PVxcXCJlblxcXCJ8fHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCk9PT1cXFwiZW4tdXNcXFwifHxuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmludGwpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZS5zdGFydHNXaXRoKFxcXCJlbi11c1xcXCIpfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5sb2NhbGU9PT1lLmxvY2FsZSYmdGhpcy5udW1iZXJpbmdTeXN0ZW09PT1lLm51bWJlcmluZ1N5c3RlbSYmdGhpcy5vdXRwdXRDYWxlbmRhcj09PWUub3V0cHV0Q2FsZW5kYXJ9fTtmdW5jdGlvbiBEbiguLi5uKXtsZXQgZT1uLnJlZHVjZSgodCxyKT0+dCtyLnNvdXJjZSxcXFwiXFxcIik7cmV0dXJuIFJlZ0V4cChgXiR7ZX0kYCl9ZnVuY3Rpb24geW4oLi4ubil7cmV0dXJuIGU9Pm4ucmVkdWNlKChbdCxyLHNdLGkpPT57bGV0W28sYSx1XT1pKGUscyk7cmV0dXJuWyQoJCh7fSx0KSxvKSxhfHxyLHVdfSxbe30sbnVsbCwxXSkuc2xpY2UoMCwyKX1mdW5jdGlvbiBnbihuLC4uLmUpe2lmKG49PW51bGwpcmV0dXJuW251bGwsbnVsbF07Zm9yKGxldFt0LHJdb2YgZSl7bGV0IHM9dC5leGVjKG4pO2lmKHMpcmV0dXJuIHIocyl9cmV0dXJuW251bGwsbnVsbF19ZnVuY3Rpb24gWW8oLi4ubil7cmV0dXJuKGUsdCk9PntsZXQgcj17fSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspcltuW3NdXT1EdChlW3Qrc10pO3JldHVybltyLG51bGwsdCtzXX19dmFyIEdvPS8oPzooWil8KFsrLV1cXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKT8pLyxBbD1gKD86JHtHby5zb3VyY2V9Pyg/OlxcXFxcXFxcWygke1FzLnNvdXJjZX0pXFxcXFxcXFxdKT8pP2AsRGk9LyhcXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKD86Oj8oXFxcXGRcXFxcZCkoPzpbLixdKFxcXFxkezEsMzB9KSk/KT8pPy8sWm89UmVnRXhwKGAke0RpLnNvdXJjZX0ke0FsfWApLHlpPVJlZ0V4cChgKD86VCR7Wm8uc291cmNlfSk/YCksTWw9LyhbKy1dXFxcXGR7Nn18XFxcXGR7NH0pKD86LT8oXFxcXGRcXFxcZCkoPzotPyhcXFxcZFxcXFxkKSk/KT8vLF9sPS8oXFxcXGR7NH0pLT9XKFxcXFxkXFxcXGQpKD86LT8oXFxcXGQpKT8vLEJsPS8oXFxcXGR7NH0pLT8oXFxcXGR7M30pLyxQbD1ZbyhcXFwid2Vla1llYXJcXFwiLFxcXCJ3ZWVrTnVtYmVyXFxcIixcXFwid2Vla0RheVxcXCIpLCRsPVlvKFxcXCJ5ZWFyXFxcIixcXFwib3JkaW5hbFxcXCIpLFJsPS8oXFxcXGR7NH0pLShcXFxcZFxcXFxkKS0oXFxcXGRcXFxcZCkvLFFvPVJlZ0V4cChgJHtEaS5zb3VyY2V9ID8oPzoke0dvLnNvdXJjZX18KCR7UXMuc291cmNlfSkpP2ApLGpsPVJlZ0V4cChgKD86ICR7UW8uc291cmNlfSk/YCk7ZnVuY3Rpb24gbW4obixlLHQpe2xldCByPW5bZV07cmV0dXJuIFUocik/dDpEdChyKX1mdW5jdGlvbiBWbChuLGUpe3JldHVyblt7eWVhcjptbihuLGUpLG1vbnRoOm1uKG4sZSsxLDEpLGRheTptbihuLGUrMiwxKX0sbnVsbCxlKzNdfWZ1bmN0aW9uIGJuKG4sZSl7cmV0dXJuW3tob3VyczptbihuLGUsMCksbWludXRlczptbihuLGUrMSwwKSxzZWNvbmRzOm1uKG4sZSsyLDApLG1pbGxpc2Vjb25kczpycihuW2UrM10pfSxudWxsLGUrNF19ZnVuY3Rpb24gdXIobixlKXtsZXQgdD0hbltlXSYmIW5bZSsxXSxyPVd0KG5bZSsxXSxuW2UrMl0pLHM9dD9udWxsOm9lLmluc3RhbmNlKHIpO3JldHVyblt7fSxzLGUrM119ZnVuY3Rpb24gbHIobixlKXtsZXQgdD1uW2VdP2hlLmNyZWF0ZShuW2VdKTpudWxsO3JldHVyblt7fSx0LGUrMV19dmFyIHFsPVJlZ0V4cChgXlQ/JHtEaS5zb3VyY2V9JGApLFVsPS9eLT9QKD86KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pWSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pTSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pVyk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pRCk/KD86VCg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KUgpPyg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KU0pPyg/OigtP1xcXFxkezEsMjB9KSg/OlsuLF0oLT9cXFxcZHsxLDIwfSkpP1MpPyk/KSQvO2Z1bmN0aW9uIFdsKG4pe2xldFtlLHQscixzLGksbyxhLHUsbF09bixkPWVbMF09PT1cXFwiLVxcXCIsaD11JiZ1WzBdPT09XFxcIi1cXFwiLHA9KGYsRj0hMSk9PmYhPT12b2lkIDAmJihGfHxmJiZkKT8tZjpmO3JldHVyblt7eWVhcnM6cChDdCh0KSksbW9udGhzOnAoQ3QocikpLHdlZWtzOnAoQ3QocykpLGRheXM6cChDdChpKSksaG91cnM6cChDdChvKSksbWludXRlczpwKEN0KGEpKSxzZWNvbmRzOnAoQ3QodSksdT09PVxcXCItMFxcXCIpLG1pbGxpc2Vjb25kczpwKHJyKGwpLGgpfV19dmFyIEhsPXtHTVQ6MCxFRFQ6LTQqNjAsRVNUOi01KjYwLENEVDotNSo2MCxDU1Q6LTYqNjAsTURUOi02KjYwLE1TVDotNyo2MCxQRFQ6LTcqNjAsUFNUOi04KjYwfTtmdW5jdGlvbiBnaShuLGUsdCxyLHMsaSxvKXtsZXQgYT17eWVhcjplLmxlbmd0aD09PTI/aXIoRHQoZSkpOkR0KGUpLG1vbnRoOlhzLmluZGV4T2YodCkrMSxkYXk6RHQociksaG91cjpEdChzKSxtaW51dGU6RHQoaSl9O3JldHVybiBvJiYoYS5zZWNvbmQ9RHQobykpLG4mJihhLndlZWtkYXk9bi5sZW5ndGg+Mz90aS5pbmRleE9mKG4pKzE6bmkuaW5kZXhPZihuKSsxKSxhfXZhciBLbD0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxcXFxzKT8oXFxcXGR7MSwyfSlcXFxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXFxccyhcXFxcZHsyLDR9KVxcXFxzKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKSg/OjooXFxcXGRcXFxcZCkpP1xcXFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxcXGRcXFxcZCkoXFxcXGRcXFxcZCkpKSQvO2Z1bmN0aW9uIEpsKG4pe2xldFssZSx0LHIscyxpLG8sYSx1LGwsZCxoXT1uLHA9Z2koZSxzLHIsdCxpLG8sYSksZjtyZXR1cm4gdT9mPUhsW3VdOmw/Zj0wOmY9V3QoZCxoKSxbcCxuZXcgb2UoZildfWZ1bmN0aW9uIHpsKG4pe3JldHVybiBuLnJlcGxhY2UoL1xcXFwoW14oKV0qXFxcXCl8W1xcXFxuXFxcXHRdL2csXFxcIiBcXFwiKS5yZXBsYWNlKC8oXFxcXHNcXFxccyspL2csXFxcIiBcXFwiKS50cmltKCl9dmFyIFlsPS9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXFxcZFxcXFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXFxcZHs0fSkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8sR2w9L14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXFxcXGRcXFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8sWmw9L14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggXFxcXGR8XFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgKFxcXFxkezR9KSQvO2Z1bmN0aW9uIHpvKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bZ2koZSxzLHIsdCxpLG8sYSksb2UudXRjSW5zdGFuY2VdfWZ1bmN0aW9uIFFsKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bZ2koZSxhLHQscixzLGksbyksb2UudXRjSW5zdGFuY2VdfXZhciBYbD1EbihNbCx5aSksZWM9RG4oX2wseWkpLHRjPURuKEJsLHlpKSxuYz1EbihabyksWG89eW4oVmwsYm4sdXIsbHIpLHJjPXluKFBsLGJuLHVyLGxyKSxzYz15bigkbCxibix1cixsciksaWM9eW4oYm4sdXIsbHIpO2Z1bmN0aW9uIGVhKG4pe3JldHVybiBnbihuLFtYbCxYb10sW2VjLHJjXSxbdGMsc2NdLFtuYyxpY10pfWZ1bmN0aW9uIHRhKG4pe3JldHVybiBnbih6bChuKSxbS2wsSmxdKX1mdW5jdGlvbiBuYShuKXtyZXR1cm4gZ24obixbWWwsem9dLFtHbCx6b10sW1psLFFsXSl9ZnVuY3Rpb24gcmEobil7cmV0dXJuIGduKG4sW1VsLFdsXSl9dmFyIG9jPXluKGJuKTtmdW5jdGlvbiBzYShuKXtyZXR1cm4gZ24obixbcWwsb2NdKX12YXIgYWM9RG4oUmwsamwpLHVjPURuKFFvKSxsYz15bihibix1cixscik7ZnVuY3Rpb24gaWEobil7cmV0dXJuIGduKG4sW2FjLFhvXSxbdWMsbGNdKX12YXIgY2M9XFxcIkludmFsaWQgRHVyYXRpb25cXFwiLG9hPXt3ZWVrczp7ZGF5czo3LGhvdXJzOjcqMjQsbWludXRlczo3KjI0KjYwLHNlY29uZHM6NyoyNCo2MCo2MCxtaWxsaXNlY29uZHM6NyoyNCo2MCo2MCoxZTN9LGRheXM6e2hvdXJzOjI0LG1pbnV0ZXM6MjQqNjAsc2Vjb25kczoyNCo2MCo2MCxtaWxsaXNlY29uZHM6MjQqNjAqNjAqMWUzfSxob3Vyczp7bWludXRlczo2MCxzZWNvbmRzOjYwKjYwLG1pbGxpc2Vjb25kczo2MCo2MCoxZTN9LG1pbnV0ZXM6e3NlY29uZHM6NjAsbWlsbGlzZWNvbmRzOjYwKjFlM30sc2Vjb25kczp7bWlsbGlzZWNvbmRzOjFlM319LGZjPSQoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczo1MixkYXlzOjM2NSxob3VyczozNjUqMjQsbWludXRlczozNjUqMjQqNjAsc2Vjb25kczozNjUqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjM2NSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczoxMyxkYXlzOjkxLGhvdXJzOjkxKjI0LG1pbnV0ZXM6OTEqMjQqNjAsc2Vjb25kczo5MSoyNCo2MCo2MCxtaWxsaXNlY29uZHM6OTEqMjQqNjAqNjAqMWUzfSxtb250aHM6e3dlZWtzOjQsZGF5czozMCxob3VyczozMCoyNCxtaW51dGVzOjMwKjI0KjYwLHNlY29uZHM6MzAqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjMwKjI0KjYwKjYwKjFlM319LG9hKSxNZT0xNDYwOTcvNDAwLEVuPTE0NjA5Ny80ODAwLGRjPSQoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczpNZS83LGRheXM6TWUsaG91cnM6TWUqMjQsbWludXRlczpNZSoyNCo2MCxzZWNvbmRzOk1lKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczpNZS8yOCxkYXlzOk1lLzQsaG91cnM6TWUqMjQvNCxtaW51dGVzOk1lKjI0KjYwLzQsc2Vjb25kczpNZSoyNCo2MCo2MC80LG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTMvNH0sbW9udGhzOnt3ZWVrczpFbi83LGRheXM6RW4saG91cnM6RW4qMjQsbWludXRlczpFbioyNCo2MCxzZWNvbmRzOkVuKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpFbioyNCo2MCo2MCoxZTN9fSxvYSksS3Q9W1xcXCJ5ZWFyc1xcXCIsXFxcInF1YXJ0ZXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwid2Vla3NcXFwiLFxcXCJkYXlzXFxcIixcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCJdLGhjPUt0LnNsaWNlKDApLnJldmVyc2UoKTtmdW5jdGlvbiBIdChuLGUsdD0hMSl7bGV0IHI9e3ZhbHVlczp0P2UudmFsdWVzOiQoJCh7fSxuLnZhbHVlcyksZS52YWx1ZXN8fHt9KSxsb2M6bi5sb2MuY2xvbmUoZS5sb2MpLGNvbnZlcnNpb25BY2N1cmFjeTplLmNvbnZlcnNpb25BY2N1cmFjeXx8bi5jb252ZXJzaW9uQWNjdXJhY3l9O3JldHVybiBuZXcgQShyKX1mdW5jdGlvbiBwYyhuKXtyZXR1cm4gbjwwP01hdGguZmxvb3Iobik6TWF0aC5jZWlsKG4pfWZ1bmN0aW9uIGFhKG4sZSx0LHIscyl7bGV0IGk9bltzXVt0XSxvPWVbdF0vaSxhPU1hdGguc2lnbihvKT09PU1hdGguc2lnbihyW3NdKSx1PSFhJiZyW3NdIT09MCYmTWF0aC5hYnMobyk8PTE/cGMobyk6TWF0aC50cnVuYyhvKTtyW3NdKz11LGVbdF0tPXUqaX1mdW5jdGlvbiBtYyhuLGUpe2hjLnJlZHVjZSgodCxyKT0+VShlW3JdKT90Oih0JiZhYShuLGUsdCxlLHIpLHIpLG51bGwpfXZhciBBPWNsYXNze2NvbnN0cnVjdG9yKGUpe2xldCB0PWUuY29udmVyc2lvbkFjY3VyYWN5PT09XFxcImxvbmd0ZXJtXFxcInx8ITE7dGhpcy52YWx1ZXM9ZS52YWx1ZXMsdGhpcy5sb2M9ZS5sb2N8fFouY3JlYXRlKCksdGhpcy5jb252ZXJzaW9uQWNjdXJhY3k9dD9cXFwibG9uZ3Rlcm1cXFwiOlxcXCJjYXN1YWxcXFwiLHRoaXMuaW52YWxpZD1lLmludmFsaWR8fG51bGwsdGhpcy5tYXRyaXg9dD9kYzpmYyx0aGlzLmlzTHV4b25EdXJhdGlvbj0hMH1zdGF0aWMgZnJvbU1pbGxpcyhlLHQpe3JldHVybiBBLmZyb21PYmplY3Qoe21pbGxpc2Vjb25kczplfSx0KX1zdGF0aWMgZnJvbU9iamVjdChlLHQ9e30pe2lmKGU9PW51bGx8fHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIil0aHJvdyBuZXcgRGUoYER1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICR7ZT09PW51bGw/XFxcIm51bGxcXFwiOnR5cGVvZiBlfWApO3JldHVybiBuZXcgQSh7dmFsdWVzOmhuKGUsQS5ub3JtYWxpemVVbml0KSxsb2M6Wi5mcm9tT2JqZWN0KHQpLGNvbnZlcnNpb25BY2N1cmFjeTp0LmNvbnZlcnNpb25BY2N1cmFjeX0pfXN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGUpe2lmKG50KGUpKXJldHVybiBBLmZyb21NaWxsaXMoZSk7aWYoQS5pc0R1cmF0aW9uKGUpKXJldHVybiBlO2lmKHR5cGVvZiBlPT1cXFwib2JqZWN0XFxcIilyZXR1cm4gQS5mcm9tT2JqZWN0KGUpO3Rocm93IG5ldyBEZShgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2V9IG9mIHR5cGUgJHt0eXBlb2YgZX1gKX1zdGF0aWMgZnJvbUlTTyhlLHQpe2xldFtyXT1yYShlKTtyZXR1cm4gcj9BLmZyb21PYmplY3Qocix0KTpBLmludmFsaWQoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7ZX1cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApfXN0YXRpYyBmcm9tSVNPVGltZShlLHQpe2xldFtyXT1zYShlKTtyZXR1cm4gcj9BLmZyb21PYmplY3Qocix0KTpBLmludmFsaWQoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7ZX1cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IEhyKHIpO3JldHVybiBuZXcgQSh7aW52YWxpZDpyfSl9c3RhdGljIG5vcm1hbGl6ZVVuaXQoZSl7bGV0IHQ9e3llYXI6XFxcInllYXJzXFxcIix5ZWFyczpcXFwieWVhcnNcXFwiLHF1YXJ0ZXI6XFxcInF1YXJ0ZXJzXFxcIixxdWFydGVyczpcXFwicXVhcnRlcnNcXFwiLG1vbnRoOlxcXCJtb250aHNcXFwiLG1vbnRoczpcXFwibW9udGhzXFxcIix3ZWVrOlxcXCJ3ZWVrc1xcXCIsd2Vla3M6XFxcIndlZWtzXFxcIixkYXk6XFxcImRheXNcXFwiLGRheXM6XFxcImRheXNcXFwiLGhvdXI6XFxcImhvdXJzXFxcIixob3VyczpcXFwiaG91cnNcXFwiLG1pbnV0ZTpcXFwibWludXRlc1xcXCIsbWludXRlczpcXFwibWludXRlc1xcXCIsc2Vjb25kOlxcXCJzZWNvbmRzXFxcIixzZWNvbmRzOlxcXCJzZWNvbmRzXFxcIixtaWxsaXNlY29uZDpcXFwibWlsbGlzZWNvbmRzXFxcIixtaWxsaXNlY29uZHM6XFxcIm1pbGxpc2Vjb25kc1xcXCJ9W2UmJmUudG9Mb3dlckNhc2UoKV07aWYoIXQpdGhyb3cgbmV3IHVuKGUpO3JldHVybiB0fXN0YXRpYyBpc0R1cmF0aW9uKGUpe3JldHVybiBlJiZlLmlzTHV4b25EdXJhdGlvbnx8ITF9Z2V0IGxvY2FsZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubG9jYWxlOm51bGx9Z2V0IG51bWJlcmluZ1N5c3RlbSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtOm51bGx9dG9Gb3JtYXQoZSx0PXt9KXtsZXQgcj1GZSgkKHt9LHQpLHtmbG9vcjp0LnJvdW5kIT09ITEmJnQuZmxvb3IhPT0hMX0pO3JldHVybiB0aGlzLmlzVmFsaWQ/ZmUuY3JlYXRlKHRoaXMubG9jLHIpLmZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyh0aGlzLGUpOmNjfXRvSHVtYW4oZT17fSl7bGV0IHQ9S3QubWFwKHI9PntsZXQgcz10aGlzLnZhbHVlc1tyXTtyZXR1cm4gVShzKT9udWxsOnRoaXMubG9jLm51bWJlckZvcm1hdHRlcihGZSgkKHtzdHlsZTpcXFwidW5pdFxcXCIsdW5pdERpc3BsYXk6XFxcImxvbmdcXFwifSxlKSx7dW5pdDpyLnNsaWNlKDAsLTEpfSkpLmZvcm1hdChzKX0pLmZpbHRlcihyPT5yKTtyZXR1cm4gdGhpcy5sb2MubGlzdEZvcm1hdHRlcigkKHt0eXBlOlxcXCJjb25qdW5jdGlvblxcXCIsc3R5bGU6ZS5saXN0U3R5bGV8fFxcXCJuYXJyb3dcXFwifSxlKSkuZm9ybWF0KHQpfXRvT2JqZWN0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD8kKHt9LHRoaXMudmFsdWVzKTp7fX10b0lTTygpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IGU9XFxcIlBcXFwiO3JldHVybiB0aGlzLnllYXJzIT09MCYmKGUrPXRoaXMueWVhcnMrXFxcIllcXFwiKSwodGhpcy5tb250aHMhPT0wfHx0aGlzLnF1YXJ0ZXJzIT09MCkmJihlKz10aGlzLm1vbnRocyt0aGlzLnF1YXJ0ZXJzKjMrXFxcIk1cXFwiKSx0aGlzLndlZWtzIT09MCYmKGUrPXRoaXMud2Vla3MrXFxcIldcXFwiKSx0aGlzLmRheXMhPT0wJiYoZSs9dGhpcy5kYXlzK1xcXCJEXFxcIiksKHRoaXMuaG91cnMhPT0wfHx0aGlzLm1pbnV0ZXMhPT0wfHx0aGlzLnNlY29uZHMhPT0wfHx0aGlzLm1pbGxpc2Vjb25kcyE9PTApJiYoZSs9XFxcIlRcXFwiKSx0aGlzLmhvdXJzIT09MCYmKGUrPXRoaXMuaG91cnMrXFxcIkhcXFwiKSx0aGlzLm1pbnV0ZXMhPT0wJiYoZSs9dGhpcy5taW51dGVzK1xcXCJNXFxcIiksKHRoaXMuc2Vjb25kcyE9PTB8fHRoaXMubWlsbGlzZWNvbmRzIT09MCkmJihlKz1jbih0aGlzLnNlY29uZHMrdGhpcy5taWxsaXNlY29uZHMvMWUzLDMpK1xcXCJTXFxcIiksZT09PVxcXCJQXFxcIiYmKGUrPVxcXCJUMFNcXFwiKSxlfXRvSVNPVGltZShlPXt9KXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiBudWxsO2xldCB0PXRoaXMudG9NaWxsaXMoKTtpZih0PDB8fHQ+PTg2NGU1KXJldHVybiBudWxsO2U9JCh7c3VwcHJlc3NNaWxsaXNlY29uZHM6ITEsc3VwcHJlc3NTZWNvbmRzOiExLGluY2x1ZGVQcmVmaXg6ITEsZm9ybWF0OlxcXCJleHRlbmRlZFxcXCJ9LGUpO2xldCByPXRoaXMuc2hpZnRUbyhcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCIpLHM9ZS5mb3JtYXQ9PT1cXFwiYmFzaWNcXFwiP1xcXCJoaG1tXFxcIjpcXFwiaGg6bW1cXFwiOyghZS5zdXBwcmVzc1NlY29uZHN8fHIuc2Vjb25kcyE9PTB8fHIubWlsbGlzZWNvbmRzIT09MCkmJihzKz1lLmZvcm1hdD09PVxcXCJiYXNpY1xcXCI/XFxcInNzXFxcIjpcXFwiOnNzXFxcIiwoIWUuc3VwcHJlc3NNaWxsaXNlY29uZHN8fHIubWlsbGlzZWNvbmRzIT09MCkmJihzKz1cXFwiLlNTU1xcXCIpKTtsZXQgaT1yLnRvRm9ybWF0KHMpO3JldHVybiBlLmluY2x1ZGVQcmVmaXgmJihpPVxcXCJUXFxcIitpKSxpfXRvSlNPTigpe3JldHVybiB0aGlzLnRvSVNPKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50b0lTTygpfXRvTWlsbGlzKCl7cmV0dXJuIHRoaXMuYXMoXFxcIm1pbGxpc2Vjb25kc1xcXCIpfXZhbHVlT2YoKXtyZXR1cm4gdGhpcy50b01pbGxpcygpfXBsdXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSkscj17fTtmb3IobGV0IHMgb2YgS3QpKGt0KHQudmFsdWVzLHMpfHxrdCh0aGlzLnZhbHVlcyxzKSkmJihyW3NdPXQuZ2V0KHMpK3RoaXMuZ2V0KHMpKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnJ9LCEwKX1taW51cyhlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PUEuZnJvbUR1cmF0aW9uTGlrZShlKTtyZXR1cm4gdGhpcy5wbHVzKHQubmVnYXRlKCkpfW1hcFVuaXRzKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9e307Zm9yKGxldCByIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSl0W3JdPVpzKGUodGhpcy52YWx1ZXNbcl0scikpO3JldHVybiBIdCh0aGlzLHt2YWx1ZXM6dH0sITApfWdldChlKXtyZXR1cm4gdGhpc1tBLm5vcm1hbGl6ZVVuaXQoZSldfXNldChlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PSQoJCh7fSx0aGlzLnZhbHVlcyksaG4oZSxBLm5vcm1hbGl6ZVVuaXQpKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnR9KX1yZWNvbmZpZ3VyZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsY29udmVyc2lvbkFjY3VyYWN5OnJ9PXt9KXtsZXQgcz10aGlzLmxvYy5jbG9uZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnR9KSxpPXtsb2M6c307cmV0dXJuIHImJihpLmNvbnZlcnNpb25BY2N1cmFjeT1yKSxIdCh0aGlzLGkpfWFzKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zaGlmdFRvKGUpLmdldChlKTpOYU59bm9ybWFsaXplKCl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgZT10aGlzLnRvT2JqZWN0KCk7cmV0dXJuIG1jKHRoaXMubWF0cml4LGUpLEh0KHRoaXMse3ZhbHVlczplfSwhMCl9c2hpZnRUbyguLi5lKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdGhpcztlPWUubWFwKG89PkEubm9ybWFsaXplVW5pdChvKSk7bGV0IHQ9e30scj17fSxzPXRoaXMudG9PYmplY3QoKSxpO2ZvcihsZXQgbyBvZiBLdClpZihlLmluZGV4T2Yobyk+PTApe2k9bztsZXQgYT0wO2ZvcihsZXQgbCBpbiByKWErPXRoaXMubWF0cml4W2xdW29dKnJbbF0scltsXT0wO250KHNbb10pJiYoYSs9c1tvXSk7bGV0IHU9TWF0aC50cnVuYyhhKTt0W29dPXUscltvXT0oYSoxZTMtdSoxZTMpLzFlMztmb3IobGV0IGwgaW4gcylLdC5pbmRleE9mKGwpPkt0LmluZGV4T2YobykmJmFhKHRoaXMubWF0cml4LHMsbCx0LG8pfWVsc2UgbnQoc1tvXSkmJihyW29dPXNbb10pO2ZvcihsZXQgbyBpbiByKXJbb10hPT0wJiYodFtpXSs9bz09PWk/cltvXTpyW29dL3RoaXMubWF0cml4W2ldW29dKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnR9LCEwKS5ub3JtYWxpemUoKX1uZWdhdGUoKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCBlPXt9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpZVt0XT10aGlzLnZhbHVlc1t0XT09PTA/MDotdGhpcy52YWx1ZXNbdF07cmV0dXJuIEh0KHRoaXMse3ZhbHVlczplfSwhMCl9Z2V0IHllYXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy55ZWFyc3x8MDpOYU59Z2V0IHF1YXJ0ZXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5xdWFydGVyc3x8MDpOYU59Z2V0IG1vbnRocygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMubW9udGhzfHwwOk5hTn1nZXQgd2Vla3MoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLndlZWtzfHwwOk5hTn1nZXQgZGF5cygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMuZGF5c3x8MDpOYU59Z2V0IGhvdXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5ob3Vyc3x8MDpOYU59Z2V0IG1pbnV0ZXMoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLm1pbnV0ZXN8fDA6TmFOfWdldCBzZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5zZWNvbmRzfHwwOk5hTn1nZXQgbWlsbGlzZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5taWxsaXNlY29uZHN8fDA6TmFOfWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuaW52YWxpZD09PW51bGx9Z2V0IGludmFsaWRSZWFzb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5yZWFzb246bnVsbH1nZXQgaW52YWxpZEV4cGxhbmF0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQuZXhwbGFuYXRpb246bnVsbH1lcXVhbHMoZSl7aWYoIXRoaXMuaXNWYWxpZHx8IWUuaXNWYWxpZHx8IXRoaXMubG9jLmVxdWFscyhlLmxvYykpcmV0dXJuITE7ZnVuY3Rpb24gdChyLHMpe3JldHVybiByPT09dm9pZCAwfHxyPT09MD9zPT09dm9pZCAwfHxzPT09MDpyPT09c31mb3IobGV0IHIgb2YgS3QpaWYoIXQodGhpcy52YWx1ZXNbcl0sZS52YWx1ZXNbcl0pKXJldHVybiExO3JldHVybiEwfX07dmFyIGNyPVxcXCJJbnZhbGlkIEludGVydmFsXFxcIjtmdW5jdGlvbiBEYyhuLGUpe3JldHVybiFufHwhbi5pc1ZhbGlkP3RlLmludmFsaWQoXFxcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFxcXCIpOiFlfHwhZS5pc1ZhbGlkP3RlLmludmFsaWQoXFxcIm1pc3Npbmcgb3IgaW52YWxpZCBlbmRcXFwiKTplPG4/dGUuaW52YWxpZChcXFwiZW5kIGJlZm9yZSBzdGFydFxcXCIsYFRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSR7bi50b0lTTygpfSBhbmQgZW5kPSR7ZS50b0lTTygpfWApOm51bGx9dmFyIHRlPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucz1lLnN0YXJ0LHRoaXMuZT1lLmVuZCx0aGlzLmludmFsaWQ9ZS5pbnZhbGlkfHxudWxsLHRoaXMuaXNMdXhvbkludGVydmFsPSEwfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgSW50ZXJ2YWwgaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IFdyKHIpO3JldHVybiBuZXcgdGUoe2ludmFsaWQ6cn0pfXN0YXRpYyBmcm9tRGF0ZVRpbWVzKGUsdCl7bGV0IHI9Rm4oZSkscz1Gbih0KSxpPURjKHIscyk7cmV0dXJuIGk9PW51bGw/bmV3IHRlKHtzdGFydDpyLGVuZDpzfSk6aX1zdGF0aWMgYWZ0ZXIoZSx0KXtsZXQgcj1BLmZyb21EdXJhdGlvbkxpa2UodCkscz1GbihlKTtyZXR1cm4gdGUuZnJvbURhdGVUaW1lcyhzLHMucGx1cyhyKSl9c3RhdGljIGJlZm9yZShlLHQpe2xldCByPUEuZnJvbUR1cmF0aW9uTGlrZSh0KSxzPUZuKGUpO3JldHVybiB0ZS5mcm9tRGF0ZVRpbWVzKHMubWludXMocikscyl9c3RhdGljIGZyb21JU08oZSx0KXtsZXRbcixzXT0oZXx8XFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIiwyKTtpZihyJiZzKXtsZXQgaSxvO3RyeXtpPUIuZnJvbUlTTyhyLHQpLG89aS5pc1ZhbGlkfWNhdGNoKGwpe289ITF9bGV0IGEsdTt0cnl7YT1CLmZyb21JU08ocyx0KSx1PWEuaXNWYWxpZH1jYXRjaChsKXt1PSExfWlmKG8mJnUpcmV0dXJuIHRlLmZyb21EYXRlVGltZXMoaSxhKTtpZihvKXtsZXQgbD1BLmZyb21JU08ocyx0KTtpZihsLmlzVmFsaWQpcmV0dXJuIHRlLmFmdGVyKGksbCl9ZWxzZSBpZih1KXtsZXQgbD1BLmZyb21JU08ocix0KTtpZihsLmlzVmFsaWQpcmV0dXJuIHRlLmJlZm9yZShhLGwpfX1yZXR1cm4gdGUuaW52YWxpZChcXFwidW5wYXJzYWJsZVxcXCIsYHRoZSBpbnB1dCBcXFwiJHtlfVxcXCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCl9c3RhdGljIGlzSW50ZXJ2YWwoZSl7cmV0dXJuIGUmJmUuaXNMdXhvbkludGVydmFsfHwhMX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuczpudWxsfWdldCBlbmQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuZTpudWxsfWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbj09PW51bGx9Z2V0IGludmFsaWRSZWFzb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5yZWFzb246bnVsbH1nZXQgaW52YWxpZEV4cGxhbmF0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQuZXhwbGFuYXRpb246bnVsbH1sZW5ndGgoZT1cXFwibWlsbGlzZWNvbmRzXFxcIil7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnRvRHVyYXRpb24oZSkuZ2V0KGUpOk5hTn1jb3VudChlPVxcXCJtaWxsaXNlY29uZHNcXFwiKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiBOYU47bGV0IHQ9dGhpcy5zdGFydC5zdGFydE9mKGUpLHI9dGhpcy5lbmQuc3RhcnRPZihlKTtyZXR1cm4gTWF0aC5mbG9vcihyLmRpZmYodCxlKS5nZXQoZSkpKzF9aGFzU2FtZShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuaXNFbXB0eSgpfHx0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsZSk6ITF9aXNFbXB0eSgpe3JldHVybiB0aGlzLnMudmFsdWVPZigpPT09dGhpcy5lLnZhbHVlT2YoKX1pc0FmdGVyKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zPmU6ITF9aXNCZWZvcmUoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmU8PWU6ITF9Y29udGFpbnMoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnM8PWUmJnRoaXMuZT5lOiExfXNldCh7c3RhcnQ6ZSxlbmQ6dH09e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/dGUuZnJvbURhdGVUaW1lcyhlfHx0aGlzLnMsdHx8dGhpcy5lKTp0aGlzfXNwbGl0QXQoLi4uZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm5bXTtsZXQgdD1lLm1hcChGbikuZmlsdGVyKG89PnRoaXMuY29udGFpbnMobykpLnNvcnQoKSxyPVtdLHtzfT10aGlzLGk9MDtmb3IoO3M8dGhpcy5lOyl7bGV0IG89dFtpXXx8dGhpcy5lLGE9K28+K3RoaXMuZT90aGlzLmU6bztyLnB1c2godGUuZnJvbURhdGVUaW1lcyhzLGEpKSxzPWEsaSs9MX1yZXR1cm4gcn1zcGxpdEJ5KGUpe2xldCB0PUEuZnJvbUR1cmF0aW9uTGlrZShlKTtpZighdGhpcy5pc1ZhbGlkfHwhdC5pc1ZhbGlkfHx0LmFzKFxcXCJtaWxsaXNlY29uZHNcXFwiKT09PTApcmV0dXJuW107bGV0e3M6cn09dGhpcyxzPTEsaSxvPVtdO2Zvcig7cjx0aGlzLmU7KXtsZXQgYT10aGlzLnN0YXJ0LnBsdXModC5tYXBVbml0cyh1PT51KnMpKTtpPSthPit0aGlzLmU/dGhpcy5lOmEsby5wdXNoKHRlLmZyb21EYXRlVGltZXMocixpKSkscj1pLHMrPTF9cmV0dXJuIG99ZGl2aWRlRXF1YWxseShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuc3BsaXRCeSh0aGlzLmxlbmd0aCgpL2UpLnNsaWNlKDAsZSk6W119b3ZlcmxhcHMoZSl7cmV0dXJuIHRoaXMuZT5lLnMmJnRoaXMuczxlLmV9YWJ1dHNTdGFydChlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkPyt0aGlzLmU9PStlLnM6ITF9YWJ1dHNFbmQoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD8rZS5lPT0rdGhpcy5zOiExfWVuZ3VsZnMoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnM8PWUucyYmdGhpcy5lPj1lLmU6ITF9ZXF1YWxzKGUpe3JldHVybiF0aGlzLmlzVmFsaWR8fCFlLmlzVmFsaWQ/ITE6dGhpcy5zLmVxdWFscyhlLnMpJiZ0aGlzLmUuZXF1YWxzKGUuZSl9aW50ZXJzZWN0aW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9dGhpcy5zPmUucz90aGlzLnM6ZS5zLHI9dGhpcy5lPGUuZT90aGlzLmU6ZS5lO3JldHVybiB0Pj1yP251bGw6dGUuZnJvbURhdGVUaW1lcyh0LHIpfXVuaW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9dGhpcy5zPGUucz90aGlzLnM6ZS5zLHI9dGhpcy5lPmUuZT90aGlzLmU6ZS5lO3JldHVybiB0ZS5mcm9tRGF0ZVRpbWVzKHQscil9c3RhdGljIG1lcmdlKGUpe2xldFt0LHJdPWUuc29ydCgocyxpKT0+cy5zLWkucykucmVkdWNlKChbcyxpXSxvKT0+aT9pLm92ZXJsYXBzKG8pfHxpLmFidXRzU3RhcnQobyk/W3MsaS51bmlvbihvKV06W3MuY29uY2F0KFtpXSksb106W3Msb10sW1tdLG51bGxdKTtyZXR1cm4gciYmdC5wdXNoKHIpLHR9c3RhdGljIHhvcihlKXtsZXQgdD1udWxsLHI9MCxzPVtdLGk9ZS5tYXAodT0+W3t0aW1lOnUucyx0eXBlOlxcXCJzXFxcIn0se3RpbWU6dS5lLHR5cGU6XFxcImVcXFwifV0pLG89QXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5pKSxhPW8uc29ydCgodSxsKT0+dS50aW1lLWwudGltZSk7Zm9yKGxldCB1IG9mIGEpcis9dS50eXBlPT09XFxcInNcXFwiPzE6LTEscj09PTE/dD11LnRpbWU6KHQmJit0IT0rdS50aW1lJiZzLnB1c2godGUuZnJvbURhdGVUaW1lcyh0LHUudGltZSkpLHQ9bnVsbCk7cmV0dXJuIHRlLm1lcmdlKHMpfWRpZmZlcmVuY2UoLi4uZSl7cmV0dXJuIHRlLnhvcihbdGhpc10uY29uY2F0KGUpKS5tYXAodD0+dGhpcy5pbnRlcnNlY3Rpb24odCkpLmZpbHRlcih0PT50JiYhdC5pc0VtcHR5KCkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9gWyR7dGhpcy5zLnRvSVNPKCl9IFxcXFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgOmNyfXRvSVNPKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvSVNPKGUpfS8ke3RoaXMuZS50b0lTTyhlKX1gOmNyfXRvSVNPRGF0ZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gOmNyfXRvSVNPVGltZShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2Ake3RoaXMucy50b0lTT1RpbWUoZSl9LyR7dGhpcy5lLnRvSVNPVGltZShlKX1gOmNyfXRvRm9ybWF0KGUse3NlcGFyYXRvcjp0PVxcXCIgXFxcXHUyMDEzIFxcXCJ9PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2Ake3RoaXMucy50b0Zvcm1hdChlKX0ke3R9JHt0aGlzLmUudG9Gb3JtYXQoZSl9YDpjcn10b0R1cmF0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmUuZGlmZih0aGlzLnMsZSx0KTpBLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKX1tYXBFbmRwb2ludHMoZSl7cmV0dXJuIHRlLmZyb21EYXRlVGltZXMoZSh0aGlzLnMpLGUodGhpcy5lKSl9fTt2YXIgeXQ9Y2xhc3N7c3RhdGljIGhhc0RTVChlPVguZGVmYXVsdFpvbmUpe2xldCB0PUIubm93KCkuc2V0Wm9uZShlKS5zZXQoe21vbnRoOjEyfSk7cmV0dXJuIWUuaXNVbml2ZXJzYWwmJnQub2Zmc2V0IT09dC5zZXQoe21vbnRoOjZ9KS5vZmZzZXR9c3RhdGljIGlzVmFsaWRJQU5BWm9uZShlKXtyZXR1cm4gaGUuaXNWYWxpZFpvbmUoZSl9c3RhdGljIG5vcm1hbGl6ZVpvbmUoZSl7cmV0dXJuIFdlKGUsWC5kZWZhdWx0Wm9uZSl9c3RhdGljIG1vbnRocyhlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGwsb3V0cHV0Q2FsZW5kYXI6aT1cXFwiZ3JlZ29yeVxcXCJ9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLGkpKS5tb250aHMoZSl9c3RhdGljIG1vbnRoc0Zvcm1hdChlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGwsb3V0cHV0Q2FsZW5kYXI6aT1cXFwiZ3JlZ29yeVxcXCJ9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLGkpKS5tb250aHMoZSwhMCl9c3RhdGljIHdlZWtkYXlzKGU9XFxcImxvbmdcXFwiLHtsb2NhbGU6dD1udWxsLG51bWJlcmluZ1N5c3RlbTpyPW51bGwsbG9jT2JqOnM9bnVsbH09e30pe3JldHVybihzfHxaLmNyZWF0ZSh0LHIsbnVsbCkpLndlZWtkYXlzKGUpfXN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGx9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLG51bGwpKS53ZWVrZGF5cyhlLCEwKX1zdGF0aWMgbWVyaWRpZW1zKHtsb2NhbGU6ZT1udWxsfT17fSl7cmV0dXJuIFouY3JlYXRlKGUpLm1lcmlkaWVtcygpfXN0YXRpYyBlcmFzKGU9XFxcInNob3J0XFxcIix7bG9jYWxlOnQ9bnVsbH09e30pe3JldHVybiBaLmNyZWF0ZSh0LG51bGwsXFxcImdyZWdvcnlcXFwiKS5lcmFzKGUpfXN0YXRpYyBmZWF0dXJlcygpe3JldHVybntyZWxhdGl2ZTpLcigpfX19O2Z1bmN0aW9uIHVhKG4sZSl7bGV0IHQ9cz0+cy50b1VUQygwLHtrZWVwTG9jYWxUaW1lOiEwfSkuc3RhcnRPZihcXFwiZGF5XFxcIikudmFsdWVPZigpLHI9dChlKS10KG4pO3JldHVybiBNYXRoLmZsb29yKEEuZnJvbU1pbGxpcyhyKS5hcyhcXFwiZGF5c1xcXCIpKX1mdW5jdGlvbiB5YyhuLGUsdCl7bGV0IHI9W1tcXFwieWVhcnNcXFwiLChhLHUpPT51LnllYXItYS55ZWFyXSxbXFxcInF1YXJ0ZXJzXFxcIiwoYSx1KT0+dS5xdWFydGVyLWEucXVhcnRlcl0sW1xcXCJtb250aHNcXFwiLChhLHUpPT51Lm1vbnRoLWEubW9udGgrKHUueWVhci1hLnllYXIpKjEyXSxbXFxcIndlZWtzXFxcIiwoYSx1KT0+e2xldCBsPXVhKGEsdSk7cmV0dXJuKGwtbCU3KS83fV0sW1xcXCJkYXlzXFxcIix1YV1dLHM9e30saSxvO2ZvcihsZXRbYSx1XW9mIHIpaWYodC5pbmRleE9mKGEpPj0wKXtpPWE7bGV0IGw9dShuLGUpO289bi5wbHVzKHtbYV06bH0pLG8+ZT8obj1uLnBsdXMoe1thXTpsLTF9KSxsLT0xKTpuPW8sc1thXT1sfXJldHVybltuLHMsbyxpXX1mdW5jdGlvbiBsYShuLGUsdCxyKXtsZXRbcyxpLG8sYV09eWMobixlLHQpLHU9ZS1zLGw9dC5maWx0ZXIoaD0+W1xcXCJob3Vyc1xcXCIsXFxcIm1pbnV0ZXNcXFwiLFxcXCJzZWNvbmRzXFxcIixcXFwibWlsbGlzZWNvbmRzXFxcIl0uaW5kZXhPZihoKT49MCk7bC5sZW5ndGg9PT0wJiYobzxlJiYobz1zLnBsdXMoe1thXToxfSkpLG8hPT1zJiYoaVthXT0oaVthXXx8MCkrdS8oby1zKSkpO2xldCBkPUEuZnJvbU9iamVjdChpLHIpO3JldHVybiBsLmxlbmd0aD4wP0EuZnJvbU1pbGxpcyh1LHIpLnNoaWZ0VG8oLi4ubCkucGx1cyhkKTpkfXZhciBiaT17YXJhYjpcXFwiW1xcXFx1MDY2MC1cXFxcdTA2NjldXFxcIixhcmFiZXh0OlxcXCJbXFxcXHUwNkYwLVxcXFx1MDZGOV1cXFwiLGJhbGk6XFxcIltcXFxcdTFCNTAtXFxcXHUxQjU5XVxcXCIsYmVuZzpcXFwiW1xcXFx1MDlFNi1cXFxcdTA5RUZdXFxcIixkZXZhOlxcXCJbXFxcXHUwOTY2LVxcXFx1MDk2Rl1cXFwiLGZ1bGx3aWRlOlxcXCJbXFxcXHVGRjEwLVxcXFx1RkYxOV1cXFwiLGd1anI6XFxcIltcXFxcdTBBRTYtXFxcXHUwQUVGXVxcXCIsaGFuaWRlYzpcXFwiW1xcXFx1MzAwN3xcXFxcdTRFMDB8XFxcXHU0RThDfFxcXFx1NEUwOXxcXFxcdTU2REJ8XFxcXHU0RTk0fFxcXFx1NTE2RHxcXFxcdTRFMDN8XFxcXHU1MTZCfFxcXFx1NEU1RF1cXFwiLGtobXI6XFxcIltcXFxcdTE3RTAtXFxcXHUxN0U5XVxcXCIsa25kYTpcXFwiW1xcXFx1MENFNi1cXFxcdTBDRUZdXFxcIixsYW9vOlxcXCJbXFxcXHUwRUQwLVxcXFx1MEVEOV1cXFwiLGxpbWI6XFxcIltcXFxcdTE5NDYtXFxcXHUxOTRGXVxcXCIsbWx5bTpcXFwiW1xcXFx1MEQ2Ni1cXFxcdTBENkZdXFxcIixtb25nOlxcXCJbXFxcXHUxODEwLVxcXFx1MTgxOV1cXFwiLG15bXI6XFxcIltcXFxcdTEwNDAtXFxcXHUxMDQ5XVxcXCIsb3J5YTpcXFwiW1xcXFx1MEI2Ni1cXFxcdTBCNkZdXFxcIix0YW1sZGVjOlxcXCJbXFxcXHUwQkU2LVxcXFx1MEJFRl1cXFwiLHRlbHU6XFxcIltcXFxcdTBDNjYtXFxcXHUwQzZGXVxcXCIsdGhhaTpcXFwiW1xcXFx1MEU1MC1cXFxcdTBFNTldXFxcIix0aWJ0OlxcXCJbXFxcXHUwRjIwLVxcXFx1MEYyOV1cXFwiLGxhdG46XFxcIlxcXFxcXFxcZFxcXCJ9LGNhPXthcmFiOlsxNjMyLDE2NDFdLGFyYWJleHQ6WzE3NzYsMTc4NV0sYmFsaTpbNjk5Miw3MDAxXSxiZW5nOlsyNTM0LDI1NDNdLGRldmE6WzI0MDYsMjQxNV0sZnVsbHdpZGU6WzY1Mjk2LDY1MzAzXSxndWpyOlsyNzkwLDI3OTldLGtobXI6WzYxMTIsNjEyMV0sa25kYTpbMzMwMiwzMzExXSxsYW9vOlszNzkyLDM4MDFdLGxpbWI6WzY0NzAsNjQ3OV0sbWx5bTpbMzQzMCwzNDM5XSxtb25nOls2MTYwLDYxNjldLG15bXI6WzQxNjAsNDE2OV0sb3J5YTpbMjkxOCwyOTI3XSx0YW1sZGVjOlszMDQ2LDMwNTVdLHRlbHU6WzMxNzQsMzE4M10sdGhhaTpbMzY2NCwzNjczXSx0aWJ0OlszODcyLDM4ODFdfSxnYz1iaS5oYW5pZGVjLnJlcGxhY2UoL1tcXFxcW3xcXFxcXV0vZyxcXFwiXFxcIikuc3BsaXQoXFxcIlxcXCIpO2Z1bmN0aW9uIGZhKG4pe2xldCBlPXBhcnNlSW50KG4sMTApO2lmKGlzTmFOKGUpKXtlPVxcXCJcXFwiO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgcj1uLmNoYXJDb2RlQXQodCk7aWYoblt0XS5zZWFyY2goYmkuaGFuaWRlYykhPT0tMSllKz1nYy5pbmRleE9mKG5bdF0pO2Vsc2UgZm9yKGxldCBzIGluIGNhKXtsZXRbaSxvXT1jYVtzXTtyPj1pJiZyPD1vJiYoZSs9ci1pKX19cmV0dXJuIHBhcnNlSW50KGUsMTApfWVsc2UgcmV0dXJuIGV9ZnVuY3Rpb24gX2Uoe251bWJlcmluZ1N5c3RlbTpufSxlPVxcXCJcXFwiKXtyZXR1cm4gbmV3IFJlZ0V4cChgJHtiaVtufHxcXFwibGF0blxcXCJdfSR7ZX1gKX12YXIgYmM9XFxcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcXFwiO2Z1bmN0aW9uIFkobixlPXQ9PnQpe3JldHVybntyZWdleDpuLGRlc2VyOihbdF0pPT5lKGZhKHQpKX19dmFyIEVjPVN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSxwYT1gWyAke0VjfV1gLG1hPW5ldyBSZWdFeHAocGEsXFxcImdcXFwiKTtmdW5jdGlvbiBGYyhuKXtyZXR1cm4gbi5yZXBsYWNlKC9cXFxcLi9nLFxcXCJcXFxcXFxcXC4/XFxcIikucmVwbGFjZShtYSxwYSl9ZnVuY3Rpb24gZGEobil7cmV0dXJuIG4ucmVwbGFjZSgvXFxcXC4vZyxcXFwiXFxcIikucmVwbGFjZShtYSxcXFwiIFxcXCIpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gSGUobixlKXtyZXR1cm4gbj09PW51bGw/bnVsbDp7cmVnZXg6UmVnRXhwKG4ubWFwKEZjKS5qb2luKFxcXCJ8XFxcIikpLGRlc2VyOihbdF0pPT5uLmZpbmRJbmRleChyPT5kYSh0KT09PWRhKHIpKStlfX1mdW5jdGlvbiBoYShuLGUpe3JldHVybntyZWdleDpuLGRlc2VyOihbLHQscl0pPT5XdCh0LHIpLGdyb3VwczplfX1mdW5jdGlvbiBFaShuKXtyZXR1cm57cmVnZXg6bixkZXNlcjooW2VdKT0+ZX19ZnVuY3Rpb24gd2Mobil7cmV0dXJuIG4ucmVwbGFjZSgvW1xcXFwtXFxcXFtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXFxcXF4kfCNcXFxcc10vZyxcXFwiXFxcXFxcXFwkJlxcXCIpfWZ1bmN0aW9uIFRjKG4sZSl7bGV0IHQ9X2UoZSkscj1fZShlLFxcXCJ7Mn1cXFwiKSxzPV9lKGUsXFxcInszfVxcXCIpLGk9X2UoZSxcXFwiezR9XFxcIiksbz1fZShlLFxcXCJ7Nn1cXFwiKSxhPV9lKGUsXFxcInsxLDJ9XFxcIiksdT1fZShlLFxcXCJ7MSwzfVxcXCIpLGw9X2UoZSxcXFwiezEsNn1cXFwiKSxkPV9lKGUsXFxcInsxLDl9XFxcIiksaD1fZShlLFxcXCJ7Miw0fVxcXCIpLHA9X2UoZSxcXFwiezQsNn1cXFwiKSxmPXk9Pih7cmVnZXg6UmVnRXhwKHdjKHkudmFsKSksZGVzZXI6KFtTXSk9PlMsbGl0ZXJhbDohMH0pLGc9KHk9PntpZihuLmxpdGVyYWwpcmV0dXJuIGYoeSk7c3dpdGNoKHkudmFsKXtjYXNlXFxcIkdcXFwiOnJldHVybiBIZShlLmVyYXMoXFxcInNob3J0XFxcIiwhMSksMCk7Y2FzZVxcXCJHR1xcXCI6cmV0dXJuIEhlKGUuZXJhcyhcXFwibG9uZ1xcXCIsITEpLDApO2Nhc2VcXFwieVxcXCI6cmV0dXJuIFkobCk7Y2FzZVxcXCJ5eVxcXCI6cmV0dXJuIFkoaCxpcik7Y2FzZVxcXCJ5eXl5XFxcIjpyZXR1cm4gWShpKTtjYXNlXFxcInl5eXl5XFxcIjpyZXR1cm4gWShwKTtjYXNlXFxcInl5eXl5eVxcXCI6cmV0dXJuIFkobyk7Y2FzZVxcXCJNXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIk1NXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIk1NTVxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJzaG9ydFxcXCIsITAsITEpLDEpO2Nhc2VcXFwiTU1NTVxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJsb25nXFxcIiwhMCwhMSksMSk7Y2FzZVxcXCJMXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIkxMXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkxMTFxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJzaG9ydFxcXCIsITEsITEpLDEpO2Nhc2VcXFwiTExMTFxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJsb25nXFxcIiwhMSwhMSksMSk7Y2FzZVxcXCJkXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcImRkXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIm9cXFwiOnJldHVybiBZKHUpO2Nhc2VcXFwib29vXFxcIjpyZXR1cm4gWShzKTtjYXNlXFxcIkhIXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkhcXFwiOnJldHVybiBZKGEpO2Nhc2VcXFwiaGhcXFwiOnJldHVybiBZKHIpO2Nhc2VcXFwiaFxcXCI6cmV0dXJuIFkoYSk7Y2FzZVxcXCJtbVxcXCI6cmV0dXJuIFkocik7Y2FzZVxcXCJtXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcInFcXFwiOnJldHVybiBZKGEpO2Nhc2VcXFwicXFcXFwiOnJldHVybiBZKHIpO2Nhc2VcXFwic1xcXCI6cmV0dXJuIFkoYSk7Y2FzZVxcXCJzc1xcXCI6cmV0dXJuIFkocik7Y2FzZVxcXCJTXFxcIjpyZXR1cm4gWSh1KTtjYXNlXFxcIlNTU1xcXCI6cmV0dXJuIFkocyk7Y2FzZVxcXCJ1XFxcIjpyZXR1cm4gRWkoZCk7Y2FzZVxcXCJ1dVxcXCI6cmV0dXJuIEVpKGEpO2Nhc2VcXFwidXV1XFxcIjpyZXR1cm4gWSh0KTtjYXNlXFxcImFcXFwiOnJldHVybiBIZShlLm1lcmlkaWVtcygpLDApO2Nhc2VcXFwia2tra1xcXCI6cmV0dXJuIFkoaSk7Y2FzZVxcXCJra1xcXCI6cmV0dXJuIFkoaCxpcik7Y2FzZVxcXCJXXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIldXXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkVcXFwiOmNhc2VcXFwiY1xcXCI6cmV0dXJuIFkodCk7Y2FzZVxcXCJFRUVcXFwiOnJldHVybiBIZShlLndlZWtkYXlzKFxcXCJzaG9ydFxcXCIsITEsITEpLDEpO2Nhc2VcXFwiRUVFRVxcXCI6cmV0dXJuIEhlKGUud2Vla2RheXMoXFxcImxvbmdcXFwiLCExLCExKSwxKTtjYXNlXFxcImNjY1xcXCI6cmV0dXJuIEhlKGUud2Vla2RheXMoXFxcInNob3J0XFxcIiwhMCwhMSksMSk7Y2FzZVxcXCJjY2NjXFxcIjpyZXR1cm4gSGUoZS53ZWVrZGF5cyhcXFwibG9uZ1xcXCIsITAsITEpLDEpO2Nhc2VcXFwiWlxcXCI6Y2FzZVxcXCJaWlxcXCI6cmV0dXJuIGhhKG5ldyBSZWdFeHAoYChbKy1dJHthLnNvdXJjZX0pKD86Oigke3Iuc291cmNlfSkpP2ApLDIpO2Nhc2VcXFwiWlpaXFxcIjpyZXR1cm4gaGEobmV3IFJlZ0V4cChgKFsrLV0ke2Euc291cmNlfSkoJHtyLnNvdXJjZX0pP2ApLDIpO2Nhc2VcXFwielxcXCI6cmV0dXJuIEVpKC9bYS16XystL117MSwyNTZ9Py9pKTtkZWZhdWx0OnJldHVybiBmKHkpfX0pKG4pfHx7aW52YWxpZFJlYXNvbjpiY307cmV0dXJuIGcudG9rZW49bixnfXZhciBTYz17eWVhcjp7XFxcIjItZGlnaXRcXFwiOlxcXCJ5eVxcXCIsbnVtZXJpYzpcXFwieXl5eXlcXFwifSxtb250aDp7bnVtZXJpYzpcXFwiTVxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJNTVxcXCIsc2hvcnQ6XFxcIk1NTVxcXCIsbG9uZzpcXFwiTU1NTVxcXCJ9LGRheTp7bnVtZXJpYzpcXFwiZFxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJkZFxcXCJ9LHdlZWtkYXk6e3Nob3J0OlxcXCJFRUVcXFwiLGxvbmc6XFxcIkVFRUVcXFwifSxkYXlwZXJpb2Q6XFxcImFcXFwiLGRheVBlcmlvZDpcXFwiYVxcXCIsaG91cjp7bnVtZXJpYzpcXFwiaFxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJoaFxcXCJ9LG1pbnV0ZTp7bnVtZXJpYzpcXFwibVxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJtbVxcXCJ9LHNlY29uZDp7bnVtZXJpYzpcXFwic1xcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJzc1xcXCJ9fTtmdW5jdGlvbiBrYyhuLGUsdCl7bGV0e3R5cGU6cix2YWx1ZTpzfT1uO2lmKHI9PT1cXFwibGl0ZXJhbFxcXCIpcmV0dXJue2xpdGVyYWw6ITAsdmFsOnN9O2xldCBpPXRbcl0sbz1TY1tyXTtpZih0eXBlb2Ygbz09XFxcIm9iamVjdFxcXCImJihvPW9baV0pLG8pcmV0dXJue2xpdGVyYWw6ITEsdmFsOm99fWZ1bmN0aW9uIENjKG4pe3JldHVybltgXiR7bi5tYXAodD0+dC5yZWdleCkucmVkdWNlKCh0LHIpPT5gJHt0fSgke3Iuc291cmNlfSlgLFxcXCJcXFwiKX0kYCxuXX1mdW5jdGlvbiB4YyhuLGUsdCl7bGV0IHI9bi5tYXRjaChlKTtpZihyKXtsZXQgcz17fSxpPTE7Zm9yKGxldCBvIGluIHQpaWYoa3QodCxvKSl7bGV0IGE9dFtvXSx1PWEuZ3JvdXBzP2EuZ3JvdXBzKzE6MTshYS5saXRlcmFsJiZhLnRva2VuJiYoc1thLnRva2VuLnZhbFswXV09YS5kZXNlcihyLnNsaWNlKGksaSt1KSkpLGkrPXV9cmV0dXJuW3Isc119ZWxzZSByZXR1cm5bcix7fV19ZnVuY3Rpb24gT2Mobil7bGV0IGU9aT0+e3N3aXRjaChpKXtjYXNlXFxcIlNcXFwiOnJldHVyblxcXCJtaWxsaXNlY29uZFxcXCI7Y2FzZVxcXCJzXFxcIjpyZXR1cm5cXFwic2Vjb25kXFxcIjtjYXNlXFxcIm1cXFwiOnJldHVyblxcXCJtaW51dGVcXFwiO2Nhc2VcXFwiaFxcXCI6Y2FzZVxcXCJIXFxcIjpyZXR1cm5cXFwiaG91clxcXCI7Y2FzZVxcXCJkXFxcIjpyZXR1cm5cXFwiZGF5XFxcIjtjYXNlXFxcIm9cXFwiOnJldHVyblxcXCJvcmRpbmFsXFxcIjtjYXNlXFxcIkxcXFwiOmNhc2VcXFwiTVxcXCI6cmV0dXJuXFxcIm1vbnRoXFxcIjtjYXNlXFxcInlcXFwiOnJldHVyblxcXCJ5ZWFyXFxcIjtjYXNlXFxcIkVcXFwiOmNhc2VcXFwiY1xcXCI6cmV0dXJuXFxcIndlZWtkYXlcXFwiO2Nhc2VcXFwiV1xcXCI6cmV0dXJuXFxcIndlZWtOdW1iZXJcXFwiO2Nhc2VcXFwia1xcXCI6cmV0dXJuXFxcIndlZWtZZWFyXFxcIjtjYXNlXFxcInFcXFwiOnJldHVyblxcXCJxdWFydGVyXFxcIjtkZWZhdWx0OnJldHVybiBudWxsfX0sdD1udWxsLHI7cmV0dXJuIFUobi56KXx8KHQ9aGUuY3JlYXRlKG4ueikpLFUobi5aKXx8KHR8fCh0PW5ldyBvZShuLlopKSxyPW4uWiksVShuLnEpfHwobi5NPShuLnEtMSkqMysxKSxVKG4uaCl8fChuLmg8MTImJm4uYT09PTE/bi5oKz0xMjpuLmg9PT0xMiYmbi5hPT09MCYmKG4uaD0wKSksbi5HPT09MCYmbi55JiYobi55PS1uLnkpLFUobi51KXx8KG4uUz1ycihuLnUpKSxbT2JqZWN0LmtleXMobikucmVkdWNlKChpLG8pPT57bGV0IGE9ZShvKTtyZXR1cm4gYSYmKGlbYV09bltvXSksaX0se30pLHQscl19dmFyIEZpPW51bGw7ZnVuY3Rpb24gdmMoKXtyZXR1cm4gRml8fChGaT1CLmZyb21NaWxsaXMoMTU1NTU1NTU1NTU1NSkpLEZpfWZ1bmN0aW9uIEljKG4sZSl7aWYobi5saXRlcmFsKXJldHVybiBuO2xldCB0PWZlLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMobi52YWwpO2lmKCF0KXJldHVybiBuO2xldCBpPWZlLmNyZWF0ZShlLHQpLmZvcm1hdERhdGVUaW1lUGFydHModmMoKSkubWFwKG89PmtjKG8sZSx0KSk7cmV0dXJuIGkuaW5jbHVkZXModm9pZCAwKT9uOml9ZnVuY3Rpb24gTmMobixlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5uLm1hcCh0PT5JYyh0LGUpKSl9ZnVuY3Rpb24gd2kobixlLHQpe2xldCByPU5jKGZlLnBhcnNlRm9ybWF0KHQpLG4pLHM9ci5tYXAobz0+VGMobyxuKSksaT1zLmZpbmQobz0+by5pbnZhbGlkUmVhc29uKTtpZihpKXJldHVybntpbnB1dDplLHRva2VuczpyLGludmFsaWRSZWFzb246aS5pbnZhbGlkUmVhc29ufTt7bGV0W28sYV09Q2MocyksdT1SZWdFeHAobyxcXFwiaVxcXCIpLFtsLGRdPXhjKGUsdSxhKSxbaCxwLGZdPWQ/T2MoZCk6W251bGwsbnVsbCx2b2lkIDBdO2lmKGt0KGQsXFxcImFcXFwiKSYma3QoZCxcXFwiSFxcXCIpKXRocm93IG5ldyBtdChcXFwiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXRcXFwiKTtyZXR1cm57aW5wdXQ6ZSx0b2tlbnM6cixyZWdleDp1LHJhd01hdGNoZXM6bCxtYXRjaGVzOmQscmVzdWx0Omgsem9uZTpwLHNwZWNpZmljT2Zmc2V0OmZ9fX1mdW5jdGlvbiBEYShuLGUsdCl7bGV0e3Jlc3VsdDpyLHpvbmU6cyxzcGVjaWZpY09mZnNldDppLGludmFsaWRSZWFzb246b309d2kobixlLHQpO3JldHVybltyLHMsaSxvXX12YXIgeWE9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF0sZ2E9WzAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNV07ZnVuY3Rpb24gQmUobixlKXtyZXR1cm4gbmV3IHllKFxcXCJ1bml0IG91dCBvZiByYW5nZVxcXCIsYHlvdSBzcGVjaWZpZWQgJHtlfSAob2YgdHlwZSAke3R5cGVvZiBlfSkgYXMgYSAke259LCB3aGljaCBpcyBpbnZhbGlkYCl9ZnVuY3Rpb24gYmEobixlLHQpe2xldCByPW5ldyBEYXRlKERhdGUuVVRDKG4sZS0xLHQpKTtuPDEwMCYmbj49MCYmci5zZXRVVENGdWxsWWVhcihyLmdldFVUQ0Z1bGxZZWFyKCktMTkwMCk7bGV0IHM9ci5nZXRVVENEYXkoKTtyZXR1cm4gcz09PTA/NzpzfWZ1bmN0aW9uIEVhKG4sZSx0KXtyZXR1cm4gdCsocXQobik/Z2E6eWEpW2UtMV19ZnVuY3Rpb24gRmEobixlKXtsZXQgdD1xdChuKT9nYTp5YSxyPXQuZmluZEluZGV4KGk9Pmk8ZSkscz1lLXRbcl07cmV0dXJue21vbnRoOnIrMSxkYXk6c319ZnVuY3Rpb24gWnIobil7bGV0e3llYXI6ZSxtb250aDp0LGRheTpyfT1uLHM9RWEoZSx0LHIpLGk9YmEoZSx0LHIpLG89TWF0aC5mbG9vcigocy1pKzEwKS83KSxhO3JldHVybiBvPDE/KGE9ZS0xLG89ZG4oYSkpOm8+ZG4oZSk/KGE9ZSsxLG89MSk6YT1lLCQoe3dlZWtZZWFyOmEsd2Vla051bWJlcjpvLHdlZWtkYXk6aX0sb3IobikpfWZ1bmN0aW9uIFRpKG4pe2xldHt3ZWVrWWVhcjplLHdlZWtOdW1iZXI6dCx3ZWVrZGF5OnJ9PW4scz1iYShlLDEsNCksaT1VdChlKSxvPXQqNytyLXMtMyxhO288MT8oYT1lLTEsbys9VXQoYSkpOm8+aT8oYT1lKzEsby09VXQoZSkpOmE9ZTtsZXR7bW9udGg6dSxkYXk6bH09RmEoYSxvKTtyZXR1cm4gJCh7eWVhcjphLG1vbnRoOnUsZGF5Omx9LG9yKG4pKX1mdW5jdGlvbiBRcihuKXtsZXR7eWVhcjplLG1vbnRoOnQsZGF5OnJ9PW4scz1FYShlLHQscik7cmV0dXJuICQoe3llYXI6ZSxvcmRpbmFsOnN9LG9yKG4pKX1mdW5jdGlvbiBTaShuKXtsZXR7eWVhcjplLG9yZGluYWw6dH09bix7bW9udGg6cixkYXk6c309RmEoZSx0KTtyZXR1cm4gJCh7eWVhcjplLG1vbnRoOnIsZGF5OnN9LG9yKG4pKX1mdW5jdGlvbiB3YShuKXtsZXQgZT1ucihuLndlZWtZZWFyKSx0PXJ0KG4ud2Vla051bWJlciwxLGRuKG4ud2Vla1llYXIpKSxyPXJ0KG4ud2Vla2RheSwxLDcpO3JldHVybiBlP3Q/cj8hMTpCZShcXFwid2Vla2RheVxcXCIsbi53ZWVrZGF5KTpCZShcXFwid2Vla1xcXCIsbi53ZWVrKTpCZShcXFwid2Vla1llYXJcXFwiLG4ud2Vla1llYXIpfWZ1bmN0aW9uIFRhKG4pe2xldCBlPW5yKG4ueWVhciksdD1ydChuLm9yZGluYWwsMSxVdChuLnllYXIpKTtyZXR1cm4gZT90PyExOkJlKFxcXCJvcmRpbmFsXFxcIixuLm9yZGluYWwpOkJlKFxcXCJ5ZWFyXFxcIixuLnllYXIpfWZ1bmN0aW9uIGtpKG4pe2xldCBlPW5yKG4ueWVhciksdD1ydChuLm1vbnRoLDEsMTIpLHI9cnQobi5kYXksMSxmbihuLnllYXIsbi5tb250aCkpO3JldHVybiBlP3Q/cj8hMTpCZShcXFwiZGF5XFxcIixuLmRheSk6QmUoXFxcIm1vbnRoXFxcIixuLm1vbnRoKTpCZShcXFwieWVhclxcXCIsbi55ZWFyKX1mdW5jdGlvbiBDaShuKXtsZXR7aG91cjplLG1pbnV0ZTp0LHNlY29uZDpyLG1pbGxpc2Vjb25kOnN9PW4saT1ydChlLDAsMjMpfHxlPT09MjQmJnQ9PT0wJiZyPT09MCYmcz09PTAsbz1ydCh0LDAsNTkpLGE9cnQociwwLDU5KSx1PXJ0KHMsMCw5OTkpO3JldHVybiBpP28/YT91PyExOkJlKFxcXCJtaWxsaXNlY29uZFxcXCIscyk6QmUoXFxcInNlY29uZFxcXCIscik6QmUoXFxcIm1pbnV0ZVxcXCIsdCk6QmUoXFxcImhvdXJcXFwiLGUpfXZhciB4aT1cXFwiSW52YWxpZCBEYXRlVGltZVxcXCIsU2E9ODY0ZTEzO2Z1bmN0aW9uIFhyKG4pe3JldHVybiBuZXcgeWUoXFxcInVuc3VwcG9ydGVkIHpvbmVcXFwiLGB0aGUgem9uZSBcXFwiJHtuLm5hbWV9XFxcIiBpcyBub3Qgc3VwcG9ydGVkYCl9ZnVuY3Rpb24gT2kobil7cmV0dXJuIG4ud2Vla0RhdGE9PT1udWxsJiYobi53ZWVrRGF0YT1acihuLmMpKSxuLndlZWtEYXRhfWZ1bmN0aW9uIGZyKG4sZSl7bGV0IHQ9e3RzOm4udHMsem9uZTpuLnpvbmUsYzpuLmMsbzpuLm8sbG9jOm4ubG9jLGludmFsaWQ6bi5pbnZhbGlkfTtyZXR1cm4gbmV3IEIoRmUoJCgkKHt9LHQpLGUpLHtvbGQ6dH0pKX1mdW5jdGlvbiBMYShuLGUsdCl7bGV0IHI9bi1lKjYwKjFlMyxzPXQub2Zmc2V0KHIpO2lmKGU9PT1zKXJldHVybltyLGVdO3ItPShzLWUpKjYwKjFlMztsZXQgaT10Lm9mZnNldChyKTtyZXR1cm4gcz09PWk/W3Isc106W24tTWF0aC5taW4ocyxpKSo2MCoxZTMsTWF0aC5tYXgocyxpKV19ZnVuY3Rpb24ga2EobixlKXtuKz1lKjYwKjFlMztsZXQgdD1uZXcgRGF0ZShuKTtyZXR1cm57eWVhcjp0LmdldFVUQ0Z1bGxZZWFyKCksbW9udGg6dC5nZXRVVENNb250aCgpKzEsZGF5OnQuZ2V0VVRDRGF0ZSgpLGhvdXI6dC5nZXRVVENIb3VycygpLG1pbnV0ZTp0LmdldFVUQ01pbnV0ZXMoKSxzZWNvbmQ6dC5nZXRVVENTZWNvbmRzKCksbWlsbGlzZWNvbmQ6dC5nZXRVVENNaWxsaXNlY29uZHMoKX19ZnVuY3Rpb24gdHMobixlLHQpe3JldHVybiBMYShzcihuKSxlLHQpfWZ1bmN0aW9uIENhKG4sZSl7bGV0IHQ9bi5vLHI9bi5jLnllYXIrTWF0aC50cnVuYyhlLnllYXJzKSxzPW4uYy5tb250aCtNYXRoLnRydW5jKGUubW9udGhzKStNYXRoLnRydW5jKGUucXVhcnRlcnMpKjMsaT1GZSgkKHt9LG4uYykse3llYXI6cixtb250aDpzLGRheTpNYXRoLm1pbihuLmMuZGF5LGZuKHIscykpK01hdGgudHJ1bmMoZS5kYXlzKStNYXRoLnRydW5jKGUud2Vla3MpKjd9KSxvPUEuZnJvbU9iamVjdCh7eWVhcnM6ZS55ZWFycy1NYXRoLnRydW5jKGUueWVhcnMpLHF1YXJ0ZXJzOmUucXVhcnRlcnMtTWF0aC50cnVuYyhlLnF1YXJ0ZXJzKSxtb250aHM6ZS5tb250aHMtTWF0aC50cnVuYyhlLm1vbnRocyksd2Vla3M6ZS53ZWVrcy1NYXRoLnRydW5jKGUud2Vla3MpLGRheXM6ZS5kYXlzLU1hdGgudHJ1bmMoZS5kYXlzKSxob3VyczplLmhvdXJzLG1pbnV0ZXM6ZS5taW51dGVzLHNlY29uZHM6ZS5zZWNvbmRzLG1pbGxpc2Vjb25kczplLm1pbGxpc2Vjb25kc30pLmFzKFxcXCJtaWxsaXNlY29uZHNcXFwiKSxhPXNyKGkpLFt1LGxdPUxhKGEsdCxuLnpvbmUpO3JldHVybiBvIT09MCYmKHUrPW8sbD1uLnpvbmUub2Zmc2V0KHUpKSx7dHM6dSxvOmx9fWZ1bmN0aW9uIGRyKG4sZSx0LHIscyxpKXtsZXR7c2V0Wm9uZTpvLHpvbmU6YX09dDtpZihuJiZPYmplY3Qua2V5cyhuKS5sZW5ndGghPT0wKXtsZXQgdT1lfHxhLGw9Qi5mcm9tT2JqZWN0KG4sRmUoJCh7fSx0KSx7em9uZTp1LHNwZWNpZmljT2Zmc2V0Oml9KSk7cmV0dXJuIG8/bDpsLnNldFpvbmUoYSl9ZWxzZSByZXR1cm4gQi5pbnZhbGlkKG5ldyB5ZShcXFwidW5wYXJzYWJsZVxcXCIsYHRoZSBpbnB1dCBcXFwiJHtzfVxcXCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7cn1gKSl9ZnVuY3Rpb24gZXMobixlLHQ9ITApe3JldHVybiBuLmlzVmFsaWQ/ZmUuY3JlYXRlKFouY3JlYXRlKFxcXCJlbi1VU1xcXCIpLHthbGxvd1o6dCxmb3JjZVNpbXBsZTohMH0pLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhuLGUpOm51bGx9ZnVuY3Rpb24gdmkobixlKXtsZXQgdD1uLmMueWVhcj45OTk5fHxuLmMueWVhcjwwLHI9XFxcIlxcXCI7cmV0dXJuIHQmJm4uYy55ZWFyPj0wJiYocis9XFxcIitcXFwiKSxyKz1pZShuLmMueWVhcix0PzY6NCksZT8ocis9XFxcIi1cXFwiLHIrPWllKG4uYy5tb250aCkscis9XFxcIi1cXFwiLHIrPWllKG4uYy5kYXkpKToocis9aWUobi5jLm1vbnRoKSxyKz1pZShuLmMuZGF5KSkscn1mdW5jdGlvbiB4YShuLGUsdCxyLHMsaSl7bGV0IG89aWUobi5jLmhvdXIpO3JldHVybiBlPyhvKz1cXFwiOlxcXCIsbys9aWUobi5jLm1pbnV0ZSksKG4uYy5zZWNvbmQhPT0wfHwhdCkmJihvKz1cXFwiOlxcXCIpKTpvKz1pZShuLmMubWludXRlKSwobi5jLnNlY29uZCE9PTB8fCF0KSYmKG8rPWllKG4uYy5zZWNvbmQpLChuLmMubWlsbGlzZWNvbmQhPT0wfHwhcikmJihvKz1cXFwiLlxcXCIsbys9aWUobi5jLm1pbGxpc2Vjb25kLDMpKSkscyYmKG4uaXNPZmZzZXRGaXhlZCYmbi5vZmZzZXQ9PT0wJiYhaT9vKz1cXFwiWlxcXCI6bi5vPDA/KG8rPVxcXCItXFxcIixvKz1pZShNYXRoLnRydW5jKC1uLm8vNjApKSxvKz1cXFwiOlxcXCIsbys9aWUoTWF0aC50cnVuYygtbi5vJTYwKSkpOihvKz1cXFwiK1xcXCIsbys9aWUoTWF0aC50cnVuYyhuLm8vNjApKSxvKz1cXFwiOlxcXCIsbys9aWUoTWF0aC50cnVuYyhuLm8lNjApKSkpLGkmJihvKz1cXFwiW1xcXCIrbi56b25lLmlhbmFOYW1lK1xcXCJdXFxcIiksb312YXIgQWE9e21vbnRoOjEsZGF5OjEsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2Vjb25kOjB9LExjPXt3ZWVrTnVtYmVyOjEsd2Vla2RheToxLGhvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlY29uZDowfSxBYz17b3JkaW5hbDoxLGhvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlY29uZDowfSxNYT1bXFxcInllYXJcXFwiLFxcXCJtb250aFxcXCIsXFxcImRheVxcXCIsXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdLE1jPVtcXFwid2Vla1llYXJcXFwiLFxcXCJ3ZWVrTnVtYmVyXFxcIixcXFwid2Vla2RheVxcXCIsXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdLF9jPVtcXFwieWVhclxcXCIsXFxcIm9yZGluYWxcXFwiLFxcXCJob3VyXFxcIixcXFwibWludXRlXFxcIixcXFwic2Vjb25kXFxcIixcXFwibWlsbGlzZWNvbmRcXFwiXTtmdW5jdGlvbiBPYShuKXtsZXQgZT17eWVhcjpcXFwieWVhclxcXCIseWVhcnM6XFxcInllYXJcXFwiLG1vbnRoOlxcXCJtb250aFxcXCIsbW9udGhzOlxcXCJtb250aFxcXCIsZGF5OlxcXCJkYXlcXFwiLGRheXM6XFxcImRheVxcXCIsaG91cjpcXFwiaG91clxcXCIsaG91cnM6XFxcImhvdXJcXFwiLG1pbnV0ZTpcXFwibWludXRlXFxcIixtaW51dGVzOlxcXCJtaW51dGVcXFwiLHF1YXJ0ZXI6XFxcInF1YXJ0ZXJcXFwiLHF1YXJ0ZXJzOlxcXCJxdWFydGVyXFxcIixzZWNvbmQ6XFxcInNlY29uZFxcXCIsc2Vjb25kczpcXFwic2Vjb25kXFxcIixtaWxsaXNlY29uZDpcXFwibWlsbGlzZWNvbmRcXFwiLG1pbGxpc2Vjb25kczpcXFwibWlsbGlzZWNvbmRcXFwiLHdlZWtkYXk6XFxcIndlZWtkYXlcXFwiLHdlZWtkYXlzOlxcXCJ3ZWVrZGF5XFxcIix3ZWVrbnVtYmVyOlxcXCJ3ZWVrTnVtYmVyXFxcIix3ZWVrc251bWJlcjpcXFwid2Vla051bWJlclxcXCIsd2Vla251bWJlcnM6XFxcIndlZWtOdW1iZXJcXFwiLHdlZWt5ZWFyOlxcXCJ3ZWVrWWVhclxcXCIsd2Vla3llYXJzOlxcXCJ3ZWVrWWVhclxcXCIsb3JkaW5hbDpcXFwib3JkaW5hbFxcXCJ9W24udG9Mb3dlckNhc2UoKV07aWYoIWUpdGhyb3cgbmV3IHVuKG4pO3JldHVybiBlfWZ1bmN0aW9uIHZhKG4sZSl7bGV0IHQ9V2UoZS56b25lLFguZGVmYXVsdFpvbmUpLHI9Wi5mcm9tT2JqZWN0KGUpLHM9WC5ub3coKSxpLG87aWYoVShuLnllYXIpKWk9cztlbHNle2ZvcihsZXQgbCBvZiBNYSlVKG5bbF0pJiYobltsXT1BYVtsXSk7bGV0IGE9a2kobil8fENpKG4pO2lmKGEpcmV0dXJuIEIuaW52YWxpZChhKTtsZXQgdT10Lm9mZnNldChzKTtbaSxvXT10cyhuLHUsdCl9cmV0dXJuIG5ldyBCKHt0czppLHpvbmU6dCxsb2M6cixvfSl9ZnVuY3Rpb24gSWEobixlLHQpe2xldCByPVUodC5yb3VuZCk/ITA6dC5yb3VuZCxzPShvLGEpPT4obz1jbihvLHJ8fHQuY2FsZW5kYXJ5PzA6MiwhMCksZS5sb2MuY2xvbmUodCkucmVsRm9ybWF0dGVyKHQpLmZvcm1hdChvLGEpKSxpPW89PnQuY2FsZW5kYXJ5P2UuaGFzU2FtZShuLG8pPzA6ZS5zdGFydE9mKG8pLmRpZmYobi5zdGFydE9mKG8pLG8pLmdldChvKTplLmRpZmYobixvKS5nZXQobyk7aWYodC51bml0KXJldHVybiBzKGkodC51bml0KSx0LnVuaXQpO2ZvcihsZXQgbyBvZiB0LnVuaXRzKXtsZXQgYT1pKG8pO2lmKE1hdGguYWJzKGEpPj0xKXJldHVybiBzKGEsbyl9cmV0dXJuIHMobj5lPy0wOjAsdC51bml0c1t0LnVuaXRzLmxlbmd0aC0xXSl9ZnVuY3Rpb24gTmEobil7bGV0IGU9e30sdDtyZXR1cm4gbi5sZW5ndGg+MCYmdHlwZW9mIG5bbi5sZW5ndGgtMV09PVxcXCJvYmplY3RcXFwiPyhlPW5bbi5sZW5ndGgtMV0sdD1BcnJheS5mcm9tKG4pLnNsaWNlKDAsbi5sZW5ndGgtMSkpOnQ9QXJyYXkuZnJvbShuKSxbZSx0XX12YXIgQj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtsZXQgdD1lLnpvbmV8fFguZGVmYXVsdFpvbmUscj1lLmludmFsaWR8fChOdW1iZXIuaXNOYU4oZS50cyk/bmV3IHllKFxcXCJpbnZhbGlkIGlucHV0XFxcIik6bnVsbCl8fCh0LmlzVmFsaWQ/bnVsbDpYcih0KSk7dGhpcy50cz1VKGUudHMpP1gubm93KCk6ZS50cztsZXQgcz1udWxsLGk9bnVsbDtpZighcilpZihlLm9sZCYmZS5vbGQudHM9PT10aGlzLnRzJiZlLm9sZC56b25lLmVxdWFscyh0KSlbcyxpXT1bZS5vbGQuYyxlLm9sZC5vXTtlbHNle2xldCBhPXQub2Zmc2V0KHRoaXMudHMpO3M9a2EodGhpcy50cyxhKSxyPU51bWJlci5pc05hTihzLnllYXIpP25ldyB5ZShcXFwiaW52YWxpZCBpbnB1dFxcXCIpOm51bGwscz1yP251bGw6cyxpPXI/bnVsbDphfXRoaXMuX3pvbmU9dCx0aGlzLmxvYz1lLmxvY3x8Wi5jcmVhdGUoKSx0aGlzLmludmFsaWQ9cix0aGlzLndlZWtEYXRhPW51bGwsdGhpcy5jPXMsdGhpcy5vPWksdGhpcy5pc0x1eG9uRGF0ZVRpbWU9ITB9c3RhdGljIG5vdygpe3JldHVybiBuZXcgQih7fSl9c3RhdGljIGxvY2FsKCl7bGV0W2UsdF09TmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gdmEoe3llYXI6cixtb250aDpzLGRheTppLGhvdXI6byxtaW51dGU6YSxzZWNvbmQ6dSxtaWxsaXNlY29uZDpsfSxlKX1zdGF0aWMgdXRjKCl7bGV0W2UsdF09TmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gZS56b25lPW9lLnV0Y0luc3RhbmNlLHZhKHt5ZWFyOnIsbW9udGg6cyxkYXk6aSxob3VyOm8sbWludXRlOmEsc2Vjb25kOnUsbWlsbGlzZWNvbmQ6bH0sZSl9c3RhdGljIGZyb21KU0RhdGUoZSx0PXt9KXtsZXQgcj1MbyhlKT9lLnZhbHVlT2YoKTpOYU47aWYoTnVtYmVyLmlzTmFOKHIpKXJldHVybiBCLmludmFsaWQoXFxcImludmFsaWQgaW5wdXRcXFwiKTtsZXQgcz1XZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7cmV0dXJuIHMuaXNWYWxpZD9uZXcgQih7dHM6cix6b25lOnMsbG9jOlouZnJvbU9iamVjdCh0KX0pOkIuaW52YWxpZChYcihzKSl9c3RhdGljIGZyb21NaWxsaXMoZSx0PXt9KXtpZihudChlKSlyZXR1cm4gZTwtU2F8fGU+U2E/Qi5pbnZhbGlkKFxcXCJUaW1lc3RhbXAgb3V0IG9mIHJhbmdlXFxcIik6bmV3IEIoe3RzOmUsem9uZTpXZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSksbG9jOlouZnJvbU9iamVjdCh0KX0pO3Rocm93IG5ldyBEZShgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgZX0gd2l0aCB2YWx1ZSAke2V9YCl9c3RhdGljIGZyb21TZWNvbmRzKGUsdD17fSl7aWYobnQoZSkpcmV0dXJuIG5ldyBCKHt0czplKjFlMyx6b25lOldlKHQuem9uZSxYLmRlZmF1bHRab25lKSxsb2M6Wi5mcm9tT2JqZWN0KHQpfSk7dGhyb3cgbmV3IERlKFxcXCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dFxcXCIpfXN0YXRpYyBmcm9tT2JqZWN0KGUsdD17fSl7ZT1lfHx7fTtsZXQgcj1XZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7aWYoIXIuaXNWYWxpZClyZXR1cm4gQi5pbnZhbGlkKFhyKHIpKTtsZXQgcz1YLm5vdygpLGk9VSh0LnNwZWNpZmljT2Zmc2V0KT9yLm9mZnNldChzKTp0LnNwZWNpZmljT2Zmc2V0LG89aG4oZSxPYSksYT0hVShvLm9yZGluYWwpLHU9IVUoby55ZWFyKSxsPSFVKG8ubW9udGgpfHwhVShvLmRheSksZD11fHxsLGg9by53ZWVrWWVhcnx8by53ZWVrTnVtYmVyLHA9Wi5mcm9tT2JqZWN0KHQpO2lmKChkfHxhKSYmaCl0aHJvdyBuZXcgbXQoXFxcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcXFwiKTtpZihsJiZhKXRocm93IG5ldyBtdChcXFwiQ2FuJ3QgbWl4IG9yZGluYWwgZGF0ZXMgd2l0aCBtb250aC9kYXlcXFwiKTtsZXQgZj1ofHxvLndlZWtkYXkmJiFkLEYsZyx5PWthKHMsaSk7Zj8oRj1NYyxnPUxjLHk9WnIoeSkpOmE/KEY9X2MsZz1BYyx5PVFyKHkpKTooRj1NYSxnPUFhKTtsZXQgUz0hMTtmb3IobGV0IE0gb2YgRil7bGV0IFY9b1tNXTtVKFYpP1M/b1tNXT1nW01dOm9bTV09eVtNXTpTPSEwfWxldCBPPWY/d2Eobyk6YT9UYShvKTpraShvKSx2PU98fENpKG8pO2lmKHYpcmV0dXJuIEIuaW52YWxpZCh2KTtsZXQgRD1mP1RpKG8pOmE/U2kobyk6byxbdyxUXT10cyhELGksciksQz1uZXcgQih7dHM6dyx6b25lOnIsbzpULGxvYzpwfSk7cmV0dXJuIG8ud2Vla2RheSYmZCYmZS53ZWVrZGF5IT09Qy53ZWVrZGF5P0IuaW52YWxpZChcXFwibWlzbWF0Y2hlZCB3ZWVrZGF5XFxcIixgeW91IGNhbid0IHNwZWNpZnkgYm90aCBhIHdlZWtkYXkgb2YgJHtvLndlZWtkYXl9IGFuZCBhIGRhdGUgb2YgJHtDLnRvSVNPKCl9YCk6Q31zdGF0aWMgZnJvbUlTTyhlLHQ9e30pe2xldFtyLHNdPWVhKGUpO3JldHVybiBkcihyLHMsdCxcXFwiSVNPIDg2MDFcXFwiLGUpfXN0YXRpYyBmcm9tUkZDMjgyMihlLHQ9e30pe2xldFtyLHNdPXRhKGUpO3JldHVybiBkcihyLHMsdCxcXFwiUkZDIDI4MjJcXFwiLGUpfXN0YXRpYyBmcm9tSFRUUChlLHQ9e30pe2xldFtyLHNdPW5hKGUpO3JldHVybiBkcihyLHMsdCxcXFwiSFRUUFxcXCIsdCl9c3RhdGljIGZyb21Gb3JtYXQoZSx0LHI9e30pe2lmKFUoZSl8fFUodCkpdGhyb3cgbmV3IERlKFxcXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcXFwiKTtsZXR7bG9jYWxlOnM9bnVsbCxudW1iZXJpbmdTeXN0ZW06aT1udWxsfT1yLG89Wi5mcm9tT3B0cyh7bG9jYWxlOnMsbnVtYmVyaW5nU3lzdGVtOmksZGVmYXVsdFRvRU46ITB9KSxbYSx1LGwsZF09RGEobyxlLHQpO3JldHVybiBkP0IuaW52YWxpZChkKTpkcihhLHUscixgZm9ybWF0ICR7dH1gLGUsbCl9c3RhdGljIGZyb21TdHJpbmcoZSx0LHI9e30pe3JldHVybiBCLmZyb21Gb3JtYXQoZSx0LHIpfXN0YXRpYyBmcm9tU1FMKGUsdD17fSl7bGV0W3Isc109aWEoZSk7cmV0dXJuIGRyKHIscyx0LFxcXCJTUUxcXFwiLGUpfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IFVyKHIpO3JldHVybiBuZXcgQih7aW52YWxpZDpyfSl9c3RhdGljIGlzRGF0ZVRpbWUoZSl7cmV0dXJuIGUmJmUuaXNMdXhvbkRhdGVUaW1lfHwhMX1nZXQoZSl7cmV0dXJuIHRoaXNbZV19Z2V0IGlzVmFsaWQoKXtyZXR1cm4gdGhpcy5pbnZhbGlkPT09bnVsbH1nZXQgaW52YWxpZFJlYXNvbigpe3JldHVybiB0aGlzLmludmFsaWQ/dGhpcy5pbnZhbGlkLnJlYXNvbjpudWxsfWdldCBpbnZhbGlkRXhwbGFuYXRpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5leHBsYW5hdGlvbjpudWxsfWdldCBsb2NhbGUoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLmxvY2FsZTpudWxsfWdldCBudW1iZXJpbmdTeXN0ZW0oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLm51bWJlcmluZ1N5c3RlbTpudWxsfWdldCBvdXRwdXRDYWxlbmRhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXI6bnVsbH1nZXQgem9uZSgpe3JldHVybiB0aGlzLl96b25lfWdldCB6b25lTmFtZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy56b25lLm5hbWU6bnVsbH1nZXQgeWVhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLnllYXI6TmFOfWdldCBxdWFydGVyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9NYXRoLmNlaWwodGhpcy5jLm1vbnRoLzMpOk5hTn1nZXQgbW9udGgoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5tb250aDpOYU59Z2V0IGRheSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLmRheTpOYU59Z2V0IGhvdXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5ob3VyOk5hTn1nZXQgbWludXRlKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMubWludXRlOk5hTn1nZXQgc2Vjb25kKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMuc2Vjb25kOk5hTn1nZXQgbWlsbGlzZWNvbmQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5taWxsaXNlY29uZDpOYU59Z2V0IHdlZWtZZWFyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9PaSh0aGlzKS53ZWVrWWVhcjpOYU59Z2V0IHdlZWtOdW1iZXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP09pKHRoaXMpLndlZWtOdW1iZXI6TmFOfWdldCB3ZWVrZGF5KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9PaSh0aGlzKS53ZWVrZGF5Ok5hTn1nZXQgb3JkaW5hbCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/UXIodGhpcy5jKS5vcmRpbmFsOk5hTn1nZXQgbW9udGhTaG9ydCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/eXQubW9udGhzKFxcXCJzaG9ydFxcXCIse2xvY09iajp0aGlzLmxvY30pW3RoaXMubW9udGgtMV06bnVsbH1nZXQgbW9udGhMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD95dC5tb250aHMoXFxcImxvbmdcXFwiLHtsb2NPYmo6dGhpcy5sb2N9KVt0aGlzLm1vbnRoLTFdOm51bGx9Z2V0IHdlZWtkYXlTaG9ydCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/eXQud2Vla2RheXMoXFxcInNob3J0XFxcIix7bG9jT2JqOnRoaXMubG9jfSlbdGhpcy53ZWVrZGF5LTFdOm51bGx9Z2V0IHdlZWtkYXlMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD95dC53ZWVrZGF5cyhcXFwibG9uZ1xcXCIse2xvY09iajp0aGlzLmxvY30pW3RoaXMud2Vla2RheS0xXTpudWxsfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkPyt0aGlzLm86TmFOfWdldCBvZmZzZXROYW1lU2hvcnQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMse2Zvcm1hdDpcXFwic2hvcnRcXFwiLGxvY2FsZTp0aGlzLmxvY2FsZX0pOm51bGx9Z2V0IG9mZnNldE5hbWVMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLHtmb3JtYXQ6XFxcImxvbmdcXFwiLGxvY2FsZTp0aGlzLmxvY2FsZX0pOm51bGx9Z2V0IGlzT2Zmc2V0Rml4ZWQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuem9uZS5pc1VuaXZlcnNhbDpudWxsfWdldCBpc0luRFNUKCl7cmV0dXJuIHRoaXMuaXNPZmZzZXRGaXhlZD8hMTp0aGlzLm9mZnNldD50aGlzLnNldCh7bW9udGg6MSxkYXk6MX0pLm9mZnNldHx8dGhpcy5vZmZzZXQ+dGhpcy5zZXQoe21vbnRoOjV9KS5vZmZzZXR9Z2V0IGlzSW5MZWFwWWVhcigpe3JldHVybiBxdCh0aGlzLnllYXIpfWdldCBkYXlzSW5Nb250aCgpe3JldHVybiBmbih0aGlzLnllYXIsdGhpcy5tb250aCl9Z2V0IGRheXNJblllYXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP1V0KHRoaXMueWVhcik6TmFOfWdldCB3ZWVrc0luV2Vla1llYXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2RuKHRoaXMud2Vla1llYXIpOk5hTn1yZXNvbHZlZExvY2FsZU9wdGlvbnMoZT17fSl7bGV0e2xvY2FsZTp0LG51bWJlcmluZ1N5c3RlbTpyLGNhbGVuZGFyOnN9PWZlLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShlKSxlKS5yZXNvbHZlZE9wdGlvbnModGhpcyk7cmV0dXJue2xvY2FsZTp0LG51bWJlcmluZ1N5c3RlbTpyLG91dHB1dENhbGVuZGFyOnN9fXRvVVRDKGU9MCx0PXt9KXtyZXR1cm4gdGhpcy5zZXRab25lKG9lLmluc3RhbmNlKGUpLHQpfXRvTG9jYWwoKXtyZXR1cm4gdGhpcy5zZXRab25lKFguZGVmYXVsdFpvbmUpfXNldFpvbmUoZSx7a2VlcExvY2FsVGltZTp0PSExLGtlZXBDYWxlbmRhclRpbWU6cj0hMX09e30pe2lmKGU9V2UoZSxYLmRlZmF1bHRab25lKSxlLmVxdWFscyh0aGlzLnpvbmUpKXJldHVybiB0aGlzO2lmKGUuaXNWYWxpZCl7bGV0IHM9dGhpcy50cztpZih0fHxyKXtsZXQgaT1lLm9mZnNldCh0aGlzLnRzKSxvPXRoaXMudG9PYmplY3QoKTtbc109dHMobyxpLGUpfXJldHVybiBmcih0aGlzLHt0czpzLHpvbmU6ZX0pfWVsc2UgcmV0dXJuIEIuaW52YWxpZChYcihlKSl9cmVjb25maWd1cmUoe2xvY2FsZTplLG51bWJlcmluZ1N5c3RlbTp0LG91dHB1dENhbGVuZGFyOnJ9PXt9KXtsZXQgcz10aGlzLmxvYy5jbG9uZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn0pO3JldHVybiBmcih0aGlzLHtsb2M6c30pfXNldExvY2FsZShlKXtyZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7bG9jYWxlOmV9KX1zZXQoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1obihlLE9hKSxyPSFVKHQud2Vla1llYXIpfHwhVSh0LndlZWtOdW1iZXIpfHwhVSh0LndlZWtkYXkpLHM9IVUodC5vcmRpbmFsKSxpPSFVKHQueWVhciksbz0hVSh0Lm1vbnRoKXx8IVUodC5kYXkpLGE9aXx8byx1PXQud2Vla1llYXJ8fHQud2Vla051bWJlcjtpZigoYXx8cykmJnUpdGhyb3cgbmV3IG10KFxcXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXFxcIik7aWYobyYmcyl0aHJvdyBuZXcgbXQoXFxcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XFxcIik7bGV0IGw7cj9sPVRpKCQoJCh7fSxacih0aGlzLmMpKSx0KSk6VSh0Lm9yZGluYWwpPyhsPSQoJCh7fSx0aGlzLnRvT2JqZWN0KCkpLHQpLFUodC5kYXkpJiYobC5kYXk9TWF0aC5taW4oZm4obC55ZWFyLGwubW9udGgpLGwuZGF5KSkpOmw9U2koJCgkKHt9LFFyKHRoaXMuYykpLHQpKTtsZXRbZCxoXT10cyhsLHRoaXMubyx0aGlzLnpvbmUpO3JldHVybiBmcih0aGlzLHt0czpkLG86aH0pfXBsdXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSk7cmV0dXJuIGZyKHRoaXMsQ2EodGhpcyx0KSl9bWludXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSkubmVnYXRlKCk7cmV0dXJuIGZyKHRoaXMsQ2EodGhpcyx0KSl9c3RhcnRPZihlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PXt9LHI9QS5ub3JtYWxpemVVbml0KGUpO3N3aXRjaChyKXtjYXNlXFxcInllYXJzXFxcIjp0Lm1vbnRoPTE7Y2FzZVxcXCJxdWFydGVyc1xcXCI6Y2FzZVxcXCJtb250aHNcXFwiOnQuZGF5PTE7Y2FzZVxcXCJ3ZWVrc1xcXCI6Y2FzZVxcXCJkYXlzXFxcIjp0LmhvdXI9MDtjYXNlXFxcImhvdXJzXFxcIjp0Lm1pbnV0ZT0wO2Nhc2VcXFwibWludXRlc1xcXCI6dC5zZWNvbmQ9MDtjYXNlXFxcInNlY29uZHNcXFwiOnQubWlsbGlzZWNvbmQ9MDticmVhaztjYXNlXFxcIm1pbGxpc2Vjb25kc1xcXCI6YnJlYWt9aWYocj09PVxcXCJ3ZWVrc1xcXCImJih0LndlZWtkYXk9MSkscj09PVxcXCJxdWFydGVyc1xcXCIpe2xldCBzPU1hdGguY2VpbCh0aGlzLm1vbnRoLzMpO3QubW9udGg9KHMtMSkqMysxfXJldHVybiB0aGlzLnNldCh0KX1lbmRPZihlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMucGx1cyh7W2VdOjF9KS5zdGFydE9mKGUpLm1pbnVzKDEpOnRoaXN9dG9Gb3JtYXQoZSx0PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2ZlLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKHQpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcyxlKTp4aX10b0xvY2FsZVN0cmluZyhlPWxuLHQ9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/ZmUuY3JlYXRlKHRoaXMubG9jLmNsb25lKHQpLGUpLmZvcm1hdERhdGVUaW1lKHRoaXMpOnhpfXRvTG9jYWxlUGFydHMoZT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD9mZS5jcmVhdGUodGhpcy5sb2MuY2xvbmUoZSksZSkuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKTpbXX10b0lTTyh7Zm9ybWF0OmU9XFxcImV4dGVuZGVkXFxcIixzdXBwcmVzc1NlY29uZHM6dD0hMSxzdXBwcmVzc01pbGxpc2Vjb25kczpyPSExLGluY2x1ZGVPZmZzZXQ6cz0hMCxleHRlbmRlZFpvbmU6aT0hMX09e30pe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IG89ZT09PVxcXCJleHRlbmRlZFxcXCIsYT12aSh0aGlzLG8pO3JldHVybiBhKz1cXFwiVFxcXCIsYSs9eGEodGhpcyxvLHQscixzLGkpLGF9dG9JU09EYXRlKHtmb3JtYXQ6ZT1cXFwiZXh0ZW5kZWRcXFwifT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD92aSh0aGlzLGU9PT1cXFwiZXh0ZW5kZWRcXFwiKTpudWxsfXRvSVNPV2Vla0RhdGUoKXtyZXR1cm4gZXModGhpcyxcXFwia2tray0nVydXVy1jXFxcIil9dG9JU09UaW1lKHtzdXBwcmVzc01pbGxpc2Vjb25kczplPSExLHN1cHByZXNzU2Vjb25kczp0PSExLGluY2x1ZGVPZmZzZXQ6cj0hMCxpbmNsdWRlUHJlZml4OnM9ITEsZXh0ZW5kZWRab25lOmk9ITEsZm9ybWF0Om89XFxcImV4dGVuZGVkXFxcIn09e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/KHM/XFxcIlRcXFwiOlxcXCJcXFwiKSt4YSh0aGlzLG89PT1cXFwiZXh0ZW5kZWRcXFwiLHQsZSxyLGkpOm51bGx9dG9SRkMyODIyKCl7cmV0dXJuIGVzKHRoaXMsXFxcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXFxcIiwhMSl9dG9IVFRQKCl7cmV0dXJuIGVzKHRoaXMudG9VVEMoKSxcXFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyAnR01UJ1xcXCIpfXRvU1FMRGF0ZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dmkodGhpcywhMCk6bnVsbH10b1NRTFRpbWUoe2luY2x1ZGVPZmZzZXQ6ZT0hMCxpbmNsdWRlWm9uZTp0PSExLGluY2x1ZGVPZmZzZXRTcGFjZTpyPSEwfT17fSl7bGV0IHM9XFxcIkhIOm1tOnNzLlNTU1xcXCI7cmV0dXJuKHR8fGUpJiYociYmKHMrPVxcXCIgXFxcIiksdD9zKz1cXFwielxcXCI6ZSYmKHMrPVxcXCJaWlxcXCIpKSxlcyh0aGlzLHMsITApfXRvU1FMKGU9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShlKX1gOm51bGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudG9JU08oKTp4aX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMudG9NaWxsaXMoKX10b01pbGxpcygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy50czpOYU59dG9TZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnRzLzFlMzpOYU59dG9Vbml4SW50ZWdlcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/TWF0aC5mbG9vcih0aGlzLnRzLzFlMyk6TmFOfXRvSlNPTigpe3JldHVybiB0aGlzLnRvSVNPKCl9dG9CU09OKCl7cmV0dXJuIHRoaXMudG9KU0RhdGUoKX10b09iamVjdChlPXt9KXtpZighdGhpcy5pc1ZhbGlkKXJldHVybnt9O2xldCB0PSQoe30sdGhpcy5jKTtyZXR1cm4gZS5pbmNsdWRlQ29uZmlnJiYodC5vdXRwdXRDYWxlbmRhcj10aGlzLm91dHB1dENhbGVuZGFyLHQubnVtYmVyaW5nU3lzdGVtPXRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSx0LmxvY2FsZT10aGlzLmxvYy5sb2NhbGUpLHR9dG9KU0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy5pc1ZhbGlkP3RoaXMudHM6TmFOKX1kaWZmKGUsdD1cXFwibWlsbGlzZWNvbmRzXFxcIixyPXt9KXtpZighdGhpcy5pc1ZhbGlkfHwhZS5pc1ZhbGlkKXJldHVybiBBLmludmFsaWQoXFxcImNyZWF0ZWQgYnkgZGlmZmluZyBhbiBpbnZhbGlkIERhdGVUaW1lXFxcIik7bGV0IHM9JCh7bG9jYWxlOnRoaXMubG9jYWxlLG51bWJlcmluZ1N5c3RlbTp0aGlzLm51bWJlcmluZ1N5c3RlbX0sciksaT1Bbyh0KS5tYXAoQS5ub3JtYWxpemVVbml0KSxvPWUudmFsdWVPZigpPnRoaXMudmFsdWVPZigpLGE9bz90aGlzOmUsdT1vP2U6dGhpcyxsPWxhKGEsdSxpLHMpO3JldHVybiBvP2wubmVnYXRlKCk6bH1kaWZmTm93KGU9XFxcIm1pbGxpc2Vjb25kc1xcXCIsdD17fSl7cmV0dXJuIHRoaXMuZGlmZihCLm5vdygpLGUsdCl9dW50aWwoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90ZS5mcm9tRGF0ZVRpbWVzKHRoaXMsZSk6dGhpc31oYXNTYW1lKGUsdCl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4hMTtsZXQgcj1lLnZhbHVlT2YoKSxzPXRoaXMuc2V0Wm9uZShlLnpvbmUse2tlZXBMb2NhbFRpbWU6ITB9KTtyZXR1cm4gcy5zdGFydE9mKHQpPD1yJiZyPD1zLmVuZE9mKHQpfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkJiZlLmlzVmFsaWQmJnRoaXMudmFsdWVPZigpPT09ZS52YWx1ZU9mKCkmJnRoaXMuem9uZS5lcXVhbHMoZS56b25lKSYmdGhpcy5sb2MuZXF1YWxzKGUubG9jKX10b1JlbGF0aXZlKGU9e30pe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IHQ9ZS5iYXNlfHxCLmZyb21PYmplY3Qoe30se3pvbmU6dGhpcy56b25lfSkscj1lLnBhZGRpbmc/dGhpczx0Py1lLnBhZGRpbmc6ZS5wYWRkaW5nOjAscz1bXFxcInllYXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwiZGF5c1xcXCIsXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiXSxpPWUudW5pdDtyZXR1cm4gQXJyYXkuaXNBcnJheShlLnVuaXQpJiYocz1lLnVuaXQsaT12b2lkIDApLElhKHQsdGhpcy5wbHVzKHIpLEZlKCQoe30sZSkse251bWVyaWM6XFxcImFsd2F5c1xcXCIsdW5pdHM6cyx1bml0Oml9KSl9dG9SZWxhdGl2ZUNhbGVuZGFyKGU9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/SWEoZS5iYXNlfHxCLmZyb21PYmplY3Qoe30se3pvbmU6dGhpcy56b25lfSksdGhpcyxGZSgkKHt9LGUpLHtudW1lcmljOlxcXCJhdXRvXFxcIix1bml0czpbXFxcInllYXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwiZGF5c1xcXCJdLGNhbGVuZGFyeTohMH0pKTpudWxsfXN0YXRpYyBtaW4oLi4uZSl7aWYoIWUuZXZlcnkoQi5pc0RhdGVUaW1lKSl0aHJvdyBuZXcgRGUoXFxcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1xcXCIpO3JldHVybiBHcyhlLHQ9PnQudmFsdWVPZigpLE1hdGgubWluKX1zdGF0aWMgbWF4KC4uLmUpe2lmKCFlLmV2ZXJ5KEIuaXNEYXRlVGltZSkpdGhyb3cgbmV3IERlKFxcXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcXFwiKTtyZXR1cm4gR3MoZSx0PT50LnZhbHVlT2YoKSxNYXRoLm1heCl9c3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKGUsdCxyPXt9KXtsZXR7bG9jYWxlOnM9bnVsbCxudW1iZXJpbmdTeXN0ZW06aT1udWxsfT1yLG89Wi5mcm9tT3B0cyh7bG9jYWxlOnMsbnVtYmVyaW5nU3lzdGVtOmksZGVmYXVsdFRvRU46ITB9KTtyZXR1cm4gd2kobyxlLHQpfXN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbihlLHQscj17fSl7cmV0dXJuIEIuZnJvbUZvcm1hdEV4cGxhaW4oZSx0LHIpfXN0YXRpYyBnZXQgREFURV9TSE9SVCgpe3JldHVybiBsbn1zdGF0aWMgZ2V0IERBVEVfTUVEKCl7cmV0dXJuIFBufXN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCl7cmV0dXJuIEpzfXN0YXRpYyBnZXQgREFURV9GVUxMKCl7cmV0dXJuICRufXN0YXRpYyBnZXQgREFURV9IVUdFKCl7cmV0dXJuIFJufXN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKXtyZXR1cm4gam59c3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpe3JldHVybiBWbn1zdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKXtyZXR1cm4gcW59c3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKXtyZXR1cm4gVW59c3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpe3JldHVybiBXbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIEhufXN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpe3JldHVybiBLbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpe3JldHVybiBKbn1zdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUKCl7cmV0dXJuIHpufXN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIFlufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEKCl7cmV0dXJuIEdufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUygpe3JldHVybiBabn1zdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKXtyZXR1cm4genN9c3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCl7cmV0dXJuIFFufXN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gWG59c3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCl7cmV0dXJuIGVyfXN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gdHJ9fTtmdW5jdGlvbiBGbihuKXtpZihCLmlzRGF0ZVRpbWUobikpcmV0dXJuIG47aWYobiYmbi52YWx1ZU9mJiZudChuLnZhbHVlT2YoKSkpcmV0dXJuIEIuZnJvbUpTRGF0ZShuKTtpZihuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpcmV0dXJuIEIuZnJvbU9iamVjdChuKTt0aHJvdyBuZXcgRGUoYFVua25vd24gZGF0ZXRpbWUgYXJndW1lbnQ6ICR7bn0sIG9mIHR5cGUgJHt0eXBlb2Ygbn1gKX12YXIgZ3Q9cXIobnMoKSk7dmFyIHduPSgpPT4vWyMqMC05XVxcXFx1RkUwRj9cXFxcdTIwRTN8W1xcXFx4QTlcXFxceEFFXFxcXHUyMDNDXFxcXHUyMDQ5XFxcXHUyMTIyXFxcXHUyMTM5XFxcXHUyMTk0LVxcXFx1MjE5OVxcXFx1MjFBOVxcXFx1MjFBQVxcXFx1MjMxQVxcXFx1MjMxQlxcXFx1MjMyOFxcXFx1MjNDRlxcXFx1MjNFRC1cXFxcdTIzRUZcXFxcdTIzRjFcXFxcdTIzRjJcXFxcdTIzRjgtXFxcXHUyM0ZBXFxcXHUyNEMyXFxcXHUyNUFBXFxcXHUyNUFCXFxcXHUyNUI2XFxcXHUyNUMwXFxcXHUyNUZCXFxcXHUyNUZDXFxcXHUyNUZFXFxcXHUyNjAwLVxcXFx1MjYwNFxcXFx1MjYwRVxcXFx1MjYxMVxcXFx1MjYxNFxcXFx1MjYxNVxcXFx1MjYxOFxcXFx1MjYyMFxcXFx1MjYyMlxcXFx1MjYyM1xcXFx1MjYyNlxcXFx1MjYyQVxcXFx1MjYyRVxcXFx1MjYyRlxcXFx1MjYzOC1cXFxcdTI2M0FcXFxcdTI2NDBcXFxcdTI2NDJcXFxcdTI2NDgtXFxcXHUyNjUzXFxcXHUyNjVGXFxcXHUyNjYwXFxcXHUyNjYzXFxcXHUyNjY1XFxcXHUyNjY2XFxcXHUyNjY4XFxcXHUyNjdCXFxcXHUyNjdFXFxcXHUyNjdGXFxcXHUyNjkyXFxcXHUyNjk0LVxcXFx1MjY5N1xcXFx1MjY5OVxcXFx1MjY5QlxcXFx1MjY5Q1xcXFx1MjZBMFxcXFx1MjZBN1xcXFx1MjZBQVxcXFx1MjZCMFxcXFx1MjZCMVxcXFx1MjZCRFxcXFx1MjZCRVxcXFx1MjZDNFxcXFx1MjZDOFxcXFx1MjZDRlxcXFx1MjZEMVxcXFx1MjZFOVxcXFx1MjZGMC1cXFxcdTI2RjVcXFxcdTI2RjdcXFxcdTI2RjhcXFxcdTI2RkFcXFxcdTI3MDJcXFxcdTI3MDhcXFxcdTI3MDlcXFxcdTI3MEZcXFxcdTI3MTJcXFxcdTI3MTRcXFxcdTI3MTZcXFxcdTI3MURcXFxcdTI3MjFcXFxcdTI3MzNcXFxcdTI3MzRcXFxcdTI3NDRcXFxcdTI3NDdcXFxcdTI3NTdcXFxcdTI3NjNcXFxcdTI3QTFcXFxcdTI5MzRcXFxcdTI5MzVcXFxcdTJCMDUtXFxcXHUyQjA3XFxcXHUyQjFCXFxcXHUyQjFDXFxcXHUyQjU1XFxcXHUzMDMwXFxcXHUzMDNEXFxcXHUzMjk3XFxcXHUzMjk5XVxcXFx1RkUwRj98W1xcXFx1MjYxRFxcXFx1MjcwQ1xcXFx1MjcwRF0oPzpcXFxcdUZFMEZ8XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1MjcwQVxcXFx1MjcwQl0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHUyM0U5LVxcXFx1MjNFQ1xcXFx1MjNGMFxcXFx1MjNGM1xcXFx1MjVGRFxcXFx1MjY5M1xcXFx1MjZBMVxcXFx1MjZBQlxcXFx1MjZDNVxcXFx1MjZDRVxcXFx1MjZENFxcXFx1MjZFQVxcXFx1MjZGRFxcXFx1MjcwNVxcXFx1MjcyOFxcXFx1Mjc0Q1xcXFx1Mjc0RVxcXFx1Mjc1My1cXFxcdTI3NTVcXFxcdTI3OTUtXFxcXHUyNzk3XFxcXHUyN0IwXFxcXHUyN0JGXFxcXHUyQjUwXXxcXFxcdTI2RDNcXFxcdUZFMEY/KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQ0E1KT98XFxcXHUyNkY5KD86XFxcXHVGRTBGfFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98XFxcXHUyNzY0XFxcXHVGRTBGPyg/OlxcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REQyNXxcXFxcdUQ4M0VcXFxcdURFNzkpKT98XFxcXHVEODNDKD86W1xcXFx1REMwNFxcXFx1REQ3MFxcXFx1REQ3MVxcXFx1REQ3RVxcXFx1REQ3RlxcXFx1REUwMlxcXFx1REUzN1xcXFx1REYyMVxcXFx1REYyNC1cXFxcdURGMkNcXFxcdURGMzZcXFxcdURGN0RcXFxcdURGOTZcXFxcdURGOTdcXFxcdURGOTktXFxcXHVERjlCXFxcXHVERjlFXFxcXHVERjlGXFxcXHVERkNEXFxcXHVERkNFXFxcXHVERkQ0LVxcXFx1REZERlxcXFx1REZGNVxcXFx1REZGN11cXFxcdUZFMEY/fFtcXFxcdURGODVcXFxcdURGQzJcXFxcdURGQzddKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1REZDNFxcXFx1REZDQV0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdURGQ0JcXFxcdURGQ0NdKD86XFxcXHVGRTBGfFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1RENDRlxcXFx1REQ4RVxcXFx1REQ5MS1cXFxcdUREOUFcXFxcdURFMDFcXFxcdURFMUFcXFxcdURFMkZcXFxcdURFMzItXFxcXHVERTM2XFxcXHVERTM4LVxcXFx1REUzQVxcXFx1REU1MFxcXFx1REU1MVxcXFx1REYwMC1cXFxcdURGMjBcXFxcdURGMkQtXFxcXHVERjM1XFxcXHVERjM3LVxcXFx1REY0M1xcXFx1REY0NS1cXFxcdURGNEFcXFxcdURGNEMtXFxcXHVERjdDXFxcXHVERjdFLVxcXFx1REY4NFxcXFx1REY4Ni1cXFxcdURGOTNcXFxcdURGQTAtXFxcXHVERkMxXFxcXHVERkM1XFxcXHVERkM2XFxcXHVERkM4XFxcXHVERkM5XFxcXHVERkNGLVxcXFx1REZEM1xcXFx1REZFMC1cXFxcdURGRjBcXFxcdURGRjgtXFxcXHVERkZGXXxcXFxcdURERTZcXFxcdUQ4M0NbXFxcXHVEREU4LVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERkFcXFxcdURERkNcXFxcdURERkRcXFxcdURERkZdfFxcXFx1RERFN1xcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERTdcXFxcdURERTktXFxcXHVEREVGXFxcXHVEREYxLVxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERjlcXFxcdURERkJcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERFOFxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERTlcXFxcdURERUItXFxcXHVEREVFXFxcXHVEREYwLVxcXFx1RERGNVxcXFx1RERGN1xcXFx1RERGQS1cXFxcdURERkZdfFxcXFx1RERFOVxcXFx1RDgzQ1tcXFxcdURERUFcXFxcdURERUNcXFxcdURERUZcXFxcdURERjBcXFxcdURERjJcXFxcdURERjRcXFxcdURERkZdfFxcXFx1RERFQVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERUFcXFxcdURERUNcXFxcdURERURcXFxcdURERjctXFxcXHVEREZBXXxcXFxcdURERUJcXFxcdUQ4M0NbXFxcXHVEREVFLVxcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGN118XFxcXHVEREVDXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFN1xcXFx1RERFOS1cXFxcdURERUVcXFxcdURERjEtXFxcXHVEREYzXFxcXHVEREY1LVxcXFx1RERGQVxcXFx1RERGQ1xcXFx1RERGRV18XFxcXHVEREVEXFxcXHVEODNDW1xcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGM1xcXFx1RERGN1xcXFx1RERGOVxcXFx1RERGQV18XFxcXHVEREVFXFxcXHVEODNDW1xcXFx1RERFOC1cXFxcdURERUFcXFxcdURERjEtXFxcXHVEREY0XFxcXHVEREY2LVxcXFx1RERGOV18XFxcXHVEREVGXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNV18XFxcXHVEREYwXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERUVcXFxcdURERjJcXFxcdURERjNcXFxcdURERjVcXFxcdURERjdcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERGMVxcXFx1RDgzQ1tcXFxcdURERTYtXFxcXHVEREU4XFxcXHVEREVFXFxcXHVEREYwXFxcXHVEREY3LVxcXFx1RERGQlxcXFx1RERGRV18XFxcXHVEREYyXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOC1cXFxcdURERURcXFxcdURERjAtXFxcXHVEREZGXXxcXFxcdURERjNcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBLVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGNFxcXFx1RERGNVxcXFx1RERGN1xcXFx1RERGQVxcXFx1RERGRl18XFxcXHVEREY0XFxcXHVEODNDXFxcXHVEREYyfFxcXFx1RERGNVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERUEtXFxcXHVEREVEXFxcXHVEREYwLVxcXFx1RERGM1xcXFx1RERGNy1cXFxcdURERjlcXFxcdURERkNcXFxcdURERkVdfFxcXFx1RERGNlxcXFx1RDgzQ1xcXFx1RERFNnxcXFxcdURERjdcXFxcdUQ4M0NbXFxcXHVEREVBXFxcXHVEREY0XFxcXHVEREY4XFxcXHVEREZBXFxcXHVEREZDXXxcXFxcdURERjhcXFxcdUQ4M0NbXFxcXHVEREU2LVxcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERjRcXFxcdURERjctXFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZELVxcXFx1RERGRl18XFxcXHVEREY5XFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOFxcXFx1RERFOVxcXFx1RERFQi1cXFxcdURERURcXFxcdURERUYtXFxcXHVEREY0XFxcXHVEREY3XFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZDXFxcXHVEREZGXXxcXFxcdURERkFcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREVDXFxcXHVEREYyXFxcXHVEREYzXFxcXHVEREY4XFxcXHVEREZFXFxcXHVEREZGXXxcXFxcdURERkJcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBXFxcXHVEREVDXFxcXHVEREVFXFxcXHVEREYzXFxcXHVEREZBXXxcXFxcdURERkNcXFxcdUQ4M0NbXFxcXHVEREVCXFxcXHVEREY4XXxcXFxcdURERkRcXFxcdUQ4M0NcXFxcdURERjB8XFxcXHVEREZFXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGOV18XFxcXHVEREZGXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERGMlxcXFx1RERGQ118XFxcXHVERjQ0KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkVCKT98XFxcXHVERjRCKD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkU5KT98XFxcXHVERkMzKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98XFxcXHUyN0ExXFxcXHVGRTBGPykpP3xcXFxcdURGRjNcXFxcdUZFMEY/KD86XFxcXHUyMDBEKD86XFxcXHUyNkE3XFxcXHVGRTBGP3xcXFxcdUQ4M0NcXFxcdURGMDgpKT98XFxcXHVERkY0KD86XFxcXHUyMDBEXFxcXHUyNjIwXFxcXHVGRTBGP3xcXFxcdURCNDBcXFxcdURDNjdcXFxcdURCNDBcXFxcdURDNjJcXFxcdURCNDAoPzpcXFxcdURDNjVcXFxcdURCNDBcXFxcdURDNkVcXFxcdURCNDBcXFxcdURDNjd8XFxcXHVEQzczXFxcXHVEQjQwXFxcXHVEQzYzXFxcXHVEQjQwXFxcXHVEQzc0fFxcXFx1REM3N1xcXFx1REI0MFxcXFx1REM2Q1xcXFx1REI0MFxcXFx1REM3MylcXFxcdURCNDBcXFxcdURDN0YpPyl8XFxcXHVEODNEKD86W1xcXFx1REMzRlxcXFx1RENGRFxcXFx1REQ0OVxcXFx1REQ0QVxcXFx1REQ2RlxcXFx1REQ3MFxcXFx1REQ3M1xcXFx1REQ3Ni1cXFxcdURENzlcXFxcdUREODdcXFxcdUREOEEtXFxcXHVERDhEXFxcXHVEREE1XFxcXHVEREE4XFxcXHVEREIxXFxcXHVEREIyXFxcXHVEREJDXFxcXHVEREMyLVxcXFx1RERDNFxcXFx1REREMS1cXFxcdURERDNcXFxcdUREREMtXFxcXHVERERFXFxcXHVEREUxXFxcXHVEREUzXFxcXHVEREU4XFxcXHVEREVGXFxcXHVEREYzXFxcXHVEREZBXFxcXHVERUNCXFxcXHVERUNELVxcXFx1REVDRlxcXFx1REVFMC1cXFxcdURFRTVcXFxcdURFRTlcXFxcdURFRjBcXFxcdURFRjNdXFxcXHVGRTBGP3xbXFxcXHVEQzQyXFxcXHVEQzQzXFxcXHVEQzQ2LVxcXFx1REM1MFxcXFx1REM2NlxcXFx1REM2N1xcXFx1REM2Qi1cXFxcdURDNkRcXFxcdURDNzJcXFxcdURDNzQtXFxcXHVEQzc2XFxcXHVEQzc4XFxcXHVEQzdDXFxcXHVEQzgzXFxcXHVEQzg1XFxcXHVEQzhGXFxcXHVEQzkxXFxcXHVEQ0FBXFxcXHVERDdBXFxcXHVERDk1XFxcXHVERDk2XFxcXHVERTRDXFxcXHVERTRGXFxcXHVERUMwXFxcXHVERUNDXSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/fFtcXFxcdURDNkVcXFxcdURDNzBcXFxcdURDNzFcXFxcdURDNzNcXFxcdURDNzdcXFxcdURDODFcXFxcdURDODJcXFxcdURDODZcXFxcdURDODdcXFxcdURFNDUtXFxcXHVERTQ3XFxcXHVERTRCXFxcXHVERTREXFxcXHVERTRFXFxcXHVERUEzXFxcXHVERUI0XFxcXHVERUI1XSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1REQ3NFxcXFx1REQ5MF0oPzpcXFxcdUZFMEZ8XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1REMwMC1cXFxcdURDMDdcXFxcdURDMDktXFxcXHVEQzE0XFxcXHVEQzE2LVxcXFx1REMyNVxcXFx1REMyNy1cXFxcdURDM0FcXFxcdURDM0MtXFxcXHVEQzNFXFxcXHVEQzQwXFxcXHVEQzQ0XFxcXHVEQzQ1XFxcXHVEQzUxLVxcXFx1REM2NVxcXFx1REM2QVxcXFx1REM3OS1cXFxcdURDN0JcXFxcdURDN0QtXFxcXHVEQzgwXFxcXHVEQzg0XFxcXHVEQzg4LVxcXFx1REM4RVxcXFx1REM5MFxcXFx1REM5Mi1cXFxcdURDQTlcXFxcdURDQUItXFxcXHVEQ0ZDXFxcXHVEQ0ZGLVxcXFx1REQzRFxcXFx1REQ0Qi1cXFxcdURENEVcXFxcdURENTAtXFxcXHVERDY3XFxcXHVEREE0XFxcXHVEREZCLVxcXFx1REUyRFxcXFx1REUyRi1cXFxcdURFMzRcXFxcdURFMzctXFxcXHVERTQxXFxcXHVERTQzXFxcXHVERTQ0XFxcXHVERTQ4LVxcXFx1REU0QVxcXFx1REU4MC1cXFxcdURFQTJcXFxcdURFQTQtXFxcXHVERUIzXFxcXHVERUI3LVxcXFx1REVCRlxcXFx1REVDMS1cXFxcdURFQzVcXFxcdURFRDAtXFxcXHVERUQyXFxcXHVERUQ1LVxcXFx1REVEN1xcXFx1REVEQy1cXFxcdURFREZcXFxcdURFRUJcXFxcdURFRUNcXFxcdURFRjQtXFxcXHVERUZDXFxcXHVERkUwLVxcXFx1REZFQlxcXFx1REZGMF18XFxcXHVEQzA4KD86XFxcXHUyMDBEXFxcXHUyQjFCKT98XFxcXHVEQzE1KD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREJBKT98XFxcXHVEQzI2KD86XFxcXHUyMDBEKD86XFxcXHUyQjFCfFxcXFx1RDgzRFxcXFx1REQyNSkpP3xcXFxcdURDM0IoPzpcXFxcdTIwMERcXFxcdTI3NDRcXFxcdUZFMEY/KT98XFxcXHVEQzQxXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RERFOFxcXFx1RkUwRj8pP3xcXFxcdURDNjgoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4fFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldXFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8W1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdKSl8XFxcXHVEODNDKD86XFxcXHVERkZCKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1xcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQy1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkMoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl0pKSk/fFxcXFx1REZGRCg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdKSkpP3xcXFxcdURGRkUoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRFxcXFx1REZGRl0pKSk/fFxcXFx1REZGRig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXSkpKT8pKT98XFxcXHVEQzY5KD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1tcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1REM2Nig/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2Nik/fFxcXFx1REM2Nyg/OlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjZcXFxcdURDNjddKT98XFxcXHVEQzY5XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPykpfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXSkpfFxcXFx1RDgzQyg/OlxcXFx1REZGQig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86W1xcXFx1REM2OFxcXFx1REM2OV18XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV0pXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XVxcXFx1RDgzQ1tcXFxcdURGRkMtXFxcXHVERkZGXSkpKT98XFxcXHVERkZDKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQlxcXFx1REZGRC1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkQoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZDXFxcXHVERkZFXFxcXHVERkZGXSkpKT98XFxcXHVERkZFKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkRcXFxcdURGRkZdKSkpP3xcXFxcdURGRkYoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRV0pKSk/KSk/fFxcXFx1REM2Rig/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REQ3NSg/OlxcXFx1RkUwRnxcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REUyRSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBOCk/fFxcXFx1REUzNSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBQik/fFxcXFx1REUzNig/OlxcXFx1MjAwRFxcXFx1RDgzQ1xcXFx1REYyQlxcXFx1RkUwRj8pP3xcXFxcdURFNDIoPzpcXFxcdTIwMERbXFxcXHUyMTk0XFxcXHUyMTk1XVxcXFx1RkUwRj8pP3xcXFxcdURFQjYoPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRCg/OltcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xcXFxcdTI3QTFcXFxcdUZFMEY/KSk/KXxcXFxcdUQ4M0UoPzpbXFxcXHVERDBDXFxcXHVERDBGXFxcXHVERDE4LVxcXFx1REQxRlxcXFx1REQzMC1cXFxcdUREMzRcXFxcdUREMzZcXFxcdURENzdcXFxcdUREQjVcXFxcdUREQjZcXFxcdUREQkJcXFxcdURERDJcXFxcdURERDNcXFxcdURERDVcXFxcdURFQzMtXFxcXHVERUM1XFxcXHVERUYwXFxcXHVERUYyLVxcXFx1REVGOF0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHVERDI2XFxcXHVERDM1XFxcXHVERDM3LVxcXFx1REQzOVxcXFx1REQzRFxcXFx1REQzRVxcXFx1RERCOFxcXFx1RERCOVxcXFx1RERDRFxcXFx1RERDRlxcXFx1RERENFxcXFx1RERENi1cXFxcdURERERdKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMERbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8pP3xbXFxcXHVERERFXFxcXHVERERGXSg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdUREMERcXFxcdUREMEVcXFxcdUREMTAtXFxcXHVERDE3XFxcXHVERDIwLVxcXFx1REQyNVxcXFx1REQyNy1cXFxcdUREMkZcXFxcdUREM0FcXFxcdUREM0YtXFxcXHVERDQ1XFxcXHVERDQ3LVxcXFx1REQ3NlxcXFx1REQ3OC1cXFxcdUREQjRcXFxcdUREQjdcXFxcdUREQkFcXFxcdUREQkMtXFxcXHVERENDXFxcXHVEREQwXFxcXHVEREUwLVxcXFx1RERGRlxcXFx1REU3MC1cXFxcdURFN0NcXFxcdURFODAtXFxcXHVERTg4XFxcXHVERTkwLVxcXFx1REVCRFxcXFx1REVCRi1cXFxcdURFQzJcXFxcdURFQ0UtXFxcXHVERURCXFxcXHVERUUwLVxcXFx1REVFOF18XFxcXHVERDNDKD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/fFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/fFxcXFx1RERDRSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEKD86W1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFxcXFx1MjdBMVxcXFx1RkUwRj8pKT98XFxcXHVEREQxKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDF8XFxcXHVEREQxXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKT98XFxcXHVEREQyKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKT8pKXxcXFxcdUQ4M0MoPzpcXFxcdURGRkIoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REM4QlxcXFx1MjAwRCk/XFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQy1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pKSk/fFxcXFx1REZGQyg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEKD86XFxcXHVEODNEXFxcXHVEQzhCXFxcXHUyMDBEKT9cXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZEKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pKSk/fFxcXFx1REZGRSg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEKD86XFxcXHVEODNEXFxcXHVEQzhCXFxcXHUyMDBEKT9cXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRFxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZGKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjg0XFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKSkpPykpP3xcXFxcdURFRjEoPzpcXFxcdUQ4M0MoPzpcXFxcdURGRkIoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZDLVxcXFx1REZGRl0pP3xcXFxcdURGRkMoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl0pP3xcXFxcdURGRkQoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZDXFxcXHVERkZFXFxcXHVERkZGXSk/fFxcXFx1REZGRSg/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZEXFxcXHVERkZGXSk/fFxcXFx1REZGRig/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXSk/KSk/KS9nO2Z1bmN0aW9uIE5pKG4pe3JldHVybiBuPT1udWxsP246bi5zaGlmdFRvKFxcXCJ5ZWFyc1xcXCIsXFxcIm1vbnRoc1xcXCIsXFxcIndlZWtzXFxcIixcXFwiZGF5c1xcXCIsXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiLFxcXCJtaWxsaXNlY29uZHNcXFwiKS5ub3JtYWxpemUoKX1mdW5jdGlvbiBfYShuLGUsdCxyKXtyZXR1cm4gbi5zZWNvbmQ9PTAmJm4ubWludXRlPT0wJiZuLmhvdXI9PTA/bi50b0xvY2FsKCkudG9Gb3JtYXQoZSx7bG9jYWxlOnJ9KTpuLnRvTG9jYWwoKS50b0Zvcm1hdCh0LHtsb2NhbGU6cn0pfWZ1bmN0aW9uIEJhKG4pe249Tmkobik7bGV0IGU9XFxcIlxcXCI7cmV0dXJuIG4ueWVhcnMmJihlKz1gJHtuLnllYXJzfSB5ZWFycywgYCksbi5tb250aHMmJihlKz1gJHtuLm1vbnRoc30gbW9udGhzLCBgKSxuLndlZWtzJiYoZSs9YCR7bi53ZWVrc30gd2Vla3MsIGApLG4uZGF5cyYmKGUrPWAke24uZGF5c30gZGF5cywgYCksbi5ob3VycyYmKGUrPWAke24uaG91cnN9IGhvdXJzLCBgKSxuLm1pbnV0ZXMmJihlKz1gJHtuLm1pbnV0ZXN9IG1pbnV0ZXMsIGApLG4uc2Vjb25kcyYmKGUrPWAke01hdGgucm91bmQobi5zZWNvbmRzKX0gc2Vjb25kcywgYCksbi5taWxsaXNlY29uZHMmJihlKz1gJHtNYXRoLnJvdW5kKG4ubWlsbGlzZWNvbmRzKX0gbXMsIGApLGUuZW5kc1dpdGgoXFxcIiwgXFxcIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMikpLGV9ZnVuY3Rpb24gVG4obil7cmV0dXJuIG4uaW5jbHVkZXMoXFxcIi9cXFwiKSYmKG49bi5zdWJzdHJpbmcobi5sYXN0SW5kZXhPZihcXFwiL1xcXCIpKzEpKSxuLmVuZHNXaXRoKFxcXCIubWRcXFwiKSYmKG49bi5zdWJzdHJpbmcoMCxuLmxlbmd0aC0zKSksbn1mdW5jdGlvbiBQYShuKXtyZXR1cm4gbi5pbmNsdWRlcyhcXFwiLlxcXCIpP24uc3Vic3RyaW5nKG4ubGFzdEluZGV4T2YoXFxcIi5cXFwiKSsxKTpcXFwiXFxcIn12YXIgQmM9Z3QuYWx0KGd0LnJlZ2V4KG5ldyBSZWdFeHAod24oKSxcXFwiXFxcIikpLGd0LnJlZ2V4KC9bMC05XFxcXHB7TGV0dGVyfV8tXSsvdSksZ3Qud2hpdGVzcGFjZS5tYXAobj0+XFxcIiBcXFwiKSxndC5hbnkubWFwKG49PlxcXCIgXFxcIikpLm1hbnkoKS5tYXAobj0+bi5qb2luKFxcXCJcXFwiKS5zcGxpdCgvXFxcXHMrLykuam9pbihcXFwiIFxcXCIpLnRyaW0oKSk7ZnVuY3Rpb24gJGEobil7cmV0dXJuIEJjLnRyeVBhcnNlKG4pfXZhciBlZT1jbGFzc3tzdGF0aWMgZmlsZShlLHQ9ITEscil7cmV0dXJuIG5ldyBlZSh7cGF0aDplLGVtYmVkOnQsZGlzcGxheTpyLHN1YnBhdGg6dm9pZCAwLHR5cGU6XFxcImZpbGVcXFwifSl9c3RhdGljIGluZmVyKGUsdD0hMSxyKXtpZihlLmluY2x1ZGVzKFxcXCIjXlxcXCIpKXtsZXQgcz1lLnNwbGl0KFxcXCIjXlxcXCIpO3JldHVybiBlZS5ibG9jayhzWzBdLHNbMV0sdCxyKX1lbHNlIGlmKGUuaW5jbHVkZXMoXFxcIiNcXFwiKSl7bGV0IHM9ZS5zcGxpdChcXFwiI1xcXCIpO3JldHVybiBlZS5oZWFkZXIoc1swXSxzWzFdLHQscil9ZWxzZSByZXR1cm4gZWUuZmlsZShlLHQscil9c3RhdGljIGhlYWRlcihlLHQscixzKXtyZXR1cm4gbmV3IGVlKHtwYXRoOmUsZW1iZWQ6cixkaXNwbGF5OnMsc3VicGF0aDokYSh0KSx0eXBlOlxcXCJoZWFkZXJcXFwifSl9c3RhdGljIGJsb2NrKGUsdCxyLHMpe3JldHVybiBuZXcgZWUoe3BhdGg6ZSxlbWJlZDpyLGRpc3BsYXk6cyxzdWJwYXRoOnQsdHlwZTpcXFwiYmxvY2tcXFwifSl9c3RhdGljIGZyb21PYmplY3QoZSl7cmV0dXJuIG5ldyBlZShlKX1zdGF0aWMgcGFyc2VJbm5lcihlKXtsZXRbdCxyXT1QYyhlKTtyZXR1cm4gZWUuaW5mZXIodCwhMSxyKX1jb25zdHJ1Y3RvcihlKXtPYmplY3QuYXNzaWduKHRoaXMsZSl9d2l0aFBhdGgoZSl7cmV0dXJuIG5ldyBlZShPYmplY3QuYXNzaWduKHt9LHRoaXMse3BhdGg6ZX0pKX13aXRoRGlzcGxheShlKXtyZXR1cm4gbmV3IGVlKE9iamVjdC5hc3NpZ24oe30sdGhpcyx7ZGlzcGxheTplfSkpfXdpdGhFbWJlZChlKXtyZXR1cm4gdGhpcy5lbWJlZD09ZT90aGlzOm5ldyBlZShPYmplY3QuYXNzaWduKHt9LHRoaXMse2VtYmVkOmV9KSl9d2l0aEhlYWRlcihlKXtyZXR1cm4gZWUuaGVhZGVyKHRoaXMucGF0aCxlLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX13aXRoQmxvY2soZSl7cmV0dXJuIGVlLmJsb2NrKHRoaXMucGF0aCxlLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX1lcXVhbHMoZSl7cmV0dXJuIGU9PW51bGx8fGU9PW51bGw/ITE6dGhpcy5wYXRoPT1lLnBhdGgmJnRoaXMudHlwZT09ZS50eXBlJiZ0aGlzLnN1YnBhdGg9PWUuc3VicGF0aH10b1N0cmluZygpe3JldHVybiB0aGlzLm1hcmtkb3duKCl9dG9PYmplY3QoKXtyZXR1cm57cGF0aDp0aGlzLnBhdGgsdHlwZTp0aGlzLnR5cGUsc3VicGF0aDp0aGlzLnN1YnBhdGgsZGlzcGxheTp0aGlzLmRpc3BsYXksZW1iZWQ6dGhpcy5lbWJlZH19dG9GaWxlKCl7cmV0dXJuIGVlLmZpbGUodGhpcy5wYXRoLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX10b0VtYmVkKCl7cmV0dXJuIHRoaXMud2l0aEVtYmVkKCEwKX1mcm9tRW1iZWQoKXtyZXR1cm4gdGhpcy53aXRoRW1iZWQoITEpfW1hcmtkb3duKCl7bGV0IGU9KHRoaXMuZW1iZWQ/XFxcIiFcXFwiOlxcXCJcXFwiKStcXFwiW1tcXFwiK3RoaXMub2JzaWRpYW5MaW5rKCk7cmV0dXJuIGUrPVxcXCJ8XFxcIixlKz10aGlzLmRpc3BsYXlPckRlZmF1bHQoKSxlKz1cXFwiXV1cXFwiLGV9ZGlzcGxheU9yRGVmYXVsdCgpe2lmKHRoaXMuZGlzcGxheSlyZXR1cm4gdGhpcy5kaXNwbGF5O3tsZXQgZT1Ubih0aGlzLnBhdGgpO3JldHVybih0aGlzLnR5cGU9PVxcXCJoZWFkZXJcXFwifHx0aGlzLnR5cGU9PVxcXCJibG9ja1xcXCIpJiYoZSs9XFxcIiA+IFxcXCIrdGhpcy5zdWJwYXRoKSxlfX1vYnNpZGlhbkxpbmsoKXt2YXIgdCxyO2xldCBlPXRoaXMucGF0aC5yZXBsYWNlKFxcXCJ8XFxcIixcXFwiXFxcXFxcXFx8XFxcIik7cmV0dXJuIHRoaXMudHlwZT09XFxcImhlYWRlclxcXCI/ZStcXFwiI1xcXCIrKCh0PXRoaXMuc3VicGF0aCk9PW51bGw/dm9pZCAwOnQucmVwbGFjZShcXFwifFxcXCIsXFxcIlxcXFxcXFxcfFxcXCIpKTp0aGlzLnR5cGU9PVxcXCJibG9ja1xcXCI/ZStcXFwiI15cXFwiKygocj10aGlzLnN1YnBhdGgpPT1udWxsP3ZvaWQgMDpyLnJlcGxhY2UoXFxcInxcXFwiLFxcXCJcXFxcXFxcXHxcXFwiKSk6ZX1maWxlTmFtZSgpe3JldHVybiBUbih0aGlzLnBhdGgpfX07ZnVuY3Rpb24gUGMobil7bGV0IGU9LTE7Zm9yKDsoZT1uLmluZGV4T2YoXFxcInxcXFwiLGUrMSkpPj0wOylpZighKGU+MCYmbltlLTFdPT1cXFwiXFxcXFxcXFxcXFwiKSlyZXR1cm5bbi5zdWJzdHJpbmcoMCxlKS5yZXBsYWNlKC9cXFxcXFxcXFxcXFx8L2csXFxcInxcXFwiKSxuLnN1YnN0cmluZyhlKzEpXTtyZXR1cm5bbi5yZXBsYWNlKC9cXFxcXFxcXFxcXFx8L2csXFxcInxcXFwiKSx2b2lkIDBdfXZhciBycz1TeW1ib2wuZm9yKFxcXCJ5YW1sLmFsaWFzXFxcIiksc3M9U3ltYm9sLmZvcihcXFwieWFtbC5kb2N1bWVudFxcXCIpLEtlPVN5bWJvbC5mb3IoXFxcInlhbWwubWFwXFxcIiksTGk9U3ltYm9sLmZvcihcXFwieWFtbC5wYWlyXFxcIiksUGU9U3ltYm9sLmZvcihcXFwieWFtbC5zY2FsYXJcXFwiKSxidD1TeW1ib2wuZm9yKFxcXCJ5YW1sLnNlcVxcXCIpLGtlPVN5bWJvbC5mb3IoXFxcInlhbWwubm9kZS50eXBlXFxcIiksSmU9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09cnMsRXQ9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09c3MsemU9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09S2UsSD1uPT4hIW4mJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmbltrZV09PT1MaSxXPW49PiEhbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuW2tlXT09PVBlLFllPW49PiEhbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuW2tlXT09PWJ0O2Z1bmN0aW9uIEcobil7aWYobiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXN3aXRjaChuW2tlXSl7Y2FzZSBLZTpjYXNlIGJ0OnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEsobil7aWYobiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXN3aXRjaChuW2tlXSl7Y2FzZSByczpjYXNlIEtlOmNhc2UgUGU6Y2FzZSBidDpyZXR1cm4hMH1yZXR1cm4hMX12YXIgUmE9bj0+KFcobil8fEcobikpJiYhIW4uYW5jaG9yO3ZhciBPZT1TeW1ib2woXFxcImJyZWFrIHZpc2l0XFxcIiksamE9U3ltYm9sKFxcXCJza2lwIGNoaWxkcmVuXFxcIiksc3Q9U3ltYm9sKFxcXCJyZW1vdmUgbm9kZVxcXCIpO2Z1bmN0aW9uIEdlKG4sZSl7bGV0IHQ9VmEoZSk7RXQobik/U24obnVsbCxuLmNvbnRlbnRzLHQsT2JqZWN0LmZyZWV6ZShbbl0pKT09PXN0JiYobi5jb250ZW50cz1udWxsKTpTbihudWxsLG4sdCxPYmplY3QuZnJlZXplKFtdKSl9R2UuQlJFQUs9T2U7R2UuU0tJUD1qYTtHZS5SRU1PVkU9c3Q7ZnVuY3Rpb24gU24obixlLHQscil7bGV0IHM9cWEobixlLHQscik7aWYoSyhzKXx8SChzKSlyZXR1cm4gVWEobixyLHMpLFNuKG4scyx0LHIpO2lmKHR5cGVvZiBzIT1cXFwic3ltYm9sXFxcIil7aWYoRyhlKSl7cj1PYmplY3QuZnJlZXplKHIuY29uY2F0KGUpKTtmb3IobGV0IGk9MDtpPGUuaXRlbXMubGVuZ3RoOysraSl7bGV0IG89U24oaSxlLml0ZW1zW2ldLHQscik7aWYodHlwZW9mIG89PVxcXCJudW1iZXJcXFwiKWk9by0xO2Vsc2V7aWYobz09PU9lKXJldHVybiBPZTtvPT09c3QmJihlLml0ZW1zLnNwbGljZShpLDEpLGktPTEpfX19ZWxzZSBpZihIKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2xldCBpPVNuKFxcXCJrZXlcXFwiLGUua2V5LHQscik7aWYoaT09PU9lKXJldHVybiBPZTtpPT09c3QmJihlLmtleT1udWxsKTtsZXQgbz1TbihcXFwidmFsdWVcXFwiLGUudmFsdWUsdCxyKTtpZihvPT09T2UpcmV0dXJuIE9lO289PT1zdCYmKGUudmFsdWU9bnVsbCl9fXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIGlzKG4sZSl7bGV0IHQ9VmEoZSk7RXQobik/YXdhaXQga24obnVsbCxuLmNvbnRlbnRzLHQsT2JqZWN0LmZyZWV6ZShbbl0pKT09PXN0JiYobi5jb250ZW50cz1udWxsKTphd2FpdCBrbihudWxsLG4sdCxPYmplY3QuZnJlZXplKFtdKSl9aXMuQlJFQUs9T2U7aXMuU0tJUD1qYTtpcy5SRU1PVkU9c3Q7YXN5bmMgZnVuY3Rpb24ga24obixlLHQscil7bGV0IHM9YXdhaXQgcWEobixlLHQscik7aWYoSyhzKXx8SChzKSlyZXR1cm4gVWEobixyLHMpLGtuKG4scyx0LHIpO2lmKHR5cGVvZiBzIT1cXFwic3ltYm9sXFxcIil7aWYoRyhlKSl7cj1PYmplY3QuZnJlZXplKHIuY29uY2F0KGUpKTtmb3IobGV0IGk9MDtpPGUuaXRlbXMubGVuZ3RoOysraSl7bGV0IG89YXdhaXQga24oaSxlLml0ZW1zW2ldLHQscik7aWYodHlwZW9mIG89PVxcXCJudW1iZXJcXFwiKWk9by0xO2Vsc2V7aWYobz09PU9lKXJldHVybiBPZTtvPT09c3QmJihlLml0ZW1zLnNwbGljZShpLDEpLGktPTEpfX19ZWxzZSBpZihIKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2xldCBpPWF3YWl0IGtuKFxcXCJrZXlcXFwiLGUua2V5LHQscik7aWYoaT09PU9lKXJldHVybiBPZTtpPT09c3QmJihlLmtleT1udWxsKTtsZXQgbz1hd2FpdCBrbihcXFwidmFsdWVcXFwiLGUudmFsdWUsdCxyKTtpZihvPT09T2UpcmV0dXJuIE9lO289PT1zdCYmKGUudmFsdWU9bnVsbCl9fXJldHVybiBzfWZ1bmN0aW9uIFZhKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJihuLkNvbGxlY3Rpb258fG4uTm9kZXx8bi5WYWx1ZSk/T2JqZWN0LmFzc2lnbih7QWxpYXM6bi5Ob2RlLE1hcDpuLk5vZGUsU2NhbGFyOm4uTm9kZSxTZXE6bi5Ob2RlfSxuLlZhbHVlJiZ7TWFwOm4uVmFsdWUsU2NhbGFyOm4uVmFsdWUsU2VxOm4uVmFsdWV9LG4uQ29sbGVjdGlvbiYme01hcDpuLkNvbGxlY3Rpb24sU2VxOm4uQ29sbGVjdGlvbn0sbik6bn1mdW5jdGlvbiBxYShuLGUsdCxyKXt2YXIgcyxpLG8sYSx1O2lmKHR5cGVvZiB0PT1cXFwiZnVuY3Rpb25cXFwiKXJldHVybiB0KG4sZSxyKTtpZih6ZShlKSlyZXR1cm4ocz10Lk1hcCk9PW51bGw/dm9pZCAwOnMuY2FsbCh0LG4sZSxyKTtpZihZZShlKSlyZXR1cm4oaT10LlNlcSk9PW51bGw/dm9pZCAwOmkuY2FsbCh0LG4sZSxyKTtpZihIKGUpKXJldHVybihvPXQuUGFpcik9PW51bGw/dm9pZCAwOm8uY2FsbCh0LG4sZSxyKTtpZihXKGUpKXJldHVybihhPXQuU2NhbGFyKT09bnVsbD92b2lkIDA6YS5jYWxsKHQsbixlLHIpO2lmKEplKGUpKXJldHVybih1PXQuQWxpYXMpPT1udWxsP3ZvaWQgMDp1LmNhbGwodCxuLGUscil9ZnVuY3Rpb24gVWEobixlLHQpe2xldCByPWVbZS5sZW5ndGgtMV07aWYoRyhyKSlyLml0ZW1zW25dPXQ7ZWxzZSBpZihIKHIpKW49PT1cXFwia2V5XFxcIj9yLmtleT10OnIudmFsdWU9dDtlbHNlIGlmKEV0KHIpKXIuY29udGVudHM9dDtlbHNle2xldCBzPUplKHIpP1xcXCJhbGlhc1xcXCI6XFxcInNjYWxhclxcXCI7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVwbGFjZSBub2RlIHdpdGggJHtzfSBwYXJlbnRgKX19dmFyICRjPXtcXFwiIVxcXCI6XFxcIiUyMVxcXCIsXFxcIixcXFwiOlxcXCIlMkNcXFwiLFxcXCJbXFxcIjpcXFwiJTVCXFxcIixcXFwiXVxcXCI6XFxcIiU1RFxcXCIsXFxcIntcXFwiOlxcXCIlN0JcXFwiLFxcXCJ9XFxcIjpcXFwiJTdEXFxcIn0sUmM9bj0+bi5yZXBsYWNlKC9bISxbXFxcXF17fV0vZyxlPT4kY1tlXSkscGU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRvY1N0YXJ0PW51bGwsdGhpcy5kb2NFbmQ9ITEsdGhpcy55YW1sPU9iamVjdC5hc3NpZ24oe30scGUuZGVmYXVsdFlhbWwsZSksdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30scGUuZGVmYXVsdFRhZ3MsdCl9Y2xvbmUoKXtsZXQgZT1uZXcgcGUodGhpcy55YW1sLHRoaXMudGFncyk7cmV0dXJuIGUuZG9jU3RhcnQ9dGhpcy5kb2NTdGFydCxlfWF0RG9jdW1lbnQoKXtsZXQgZT1uZXcgcGUodGhpcy55YW1sLHRoaXMudGFncyk7c3dpdGNoKHRoaXMueWFtbC52ZXJzaW9uKXtjYXNlXFxcIjEuMVxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMDticmVhaztjYXNlXFxcIjEuMlxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMSx0aGlzLnlhbWw9e2V4cGxpY2l0OnBlLmRlZmF1bHRZYW1sLmV4cGxpY2l0LHZlcnNpb246XFxcIjEuMlxcXCJ9LHRoaXMudGFncz1PYmplY3QuYXNzaWduKHt9LHBlLmRlZmF1bHRUYWdzKTticmVha31yZXR1cm4gZX1hZGQoZSx0KXt0aGlzLmF0TmV4dERvY3VtZW50JiYodGhpcy55YW1sPXtleHBsaWNpdDpwZS5kZWZhdWx0WWFtbC5leHBsaWNpdCx2ZXJzaW9uOlxcXCIxLjFcXFwifSx0aGlzLnRhZ3M9T2JqZWN0LmFzc2lnbih7fSxwZS5kZWZhdWx0VGFncyksdGhpcy5hdE5leHREb2N1bWVudD0hMSk7bGV0IHI9ZS50cmltKCkuc3BsaXQoL1sgXFxcXHRdKy8pLHM9ci5zaGlmdCgpO3N3aXRjaChzKXtjYXNlXFxcIiVUQUdcXFwiOntpZihyLmxlbmd0aCE9PTImJih0KDAsXFxcIiVUQUcgZGlyZWN0aXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgdHdvIHBhcnRzXFxcIiksci5sZW5ndGg8MikpcmV0dXJuITE7bGV0W2ksb109cjtyZXR1cm4gdGhpcy50YWdzW2ldPW8sITB9Y2FzZVxcXCIlWUFNTFxcXCI6e2lmKHRoaXMueWFtbC5leHBsaWNpdD0hMCxyLmxlbmd0aCE9PTEpcmV0dXJuIHQoMCxcXFwiJVlBTUwgZGlyZWN0aXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIHBhcnRcXFwiKSwhMTtsZXRbaV09cjtpZihpPT09XFxcIjEuMVxcXCJ8fGk9PT1cXFwiMS4yXFxcIilyZXR1cm4gdGhpcy55YW1sLnZlcnNpb249aSwhMDt7bGV0IG89L15cXFxcZCtcXFxcLlxcXFxkKyQvLnRlc3QoaSk7cmV0dXJuIHQoNixgVW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uICR7aX1gLG8pLCExfX1kZWZhdWx0OnJldHVybiB0KDAsYFVua25vd24gZGlyZWN0aXZlICR7c31gLCEwKSwhMX19dGFnTmFtZShlLHQpe2lmKGU9PT1cXFwiIVxcXCIpcmV0dXJuXFxcIiFcXFwiO2lmKGVbMF0hPT1cXFwiIVxcXCIpcmV0dXJuIHQoYE5vdCBhIHZhbGlkIHRhZzogJHtlfWApLG51bGw7aWYoZVsxXT09PVxcXCI8XFxcIil7bGV0IG89ZS5zbGljZSgyLC0xKTtyZXR1cm4gbz09PVxcXCIhXFxcInx8bz09PVxcXCIhIVxcXCI/KHQoYFZlcmJhdGltIHRhZ3MgYXJlbid0IHJlc29sdmVkLCBzbyAke2V9IGlzIGludmFsaWQuYCksbnVsbCk6KGVbZS5sZW5ndGgtMV0hPT1cXFwiPlxcXCImJnQoXFxcIlZlcmJhdGltIHRhZ3MgbXVzdCBlbmQgd2l0aCBhID5cXFwiKSxvKX1sZXRbLHIsc109ZS5tYXRjaChuZXcgUmVnRXhwKFxcXCJeKC4qISkoW14hXSopJFxcXCIsXFxcInNcXFwiKSk7c3x8dChgVGhlICR7ZX0gdGFnIGhhcyBubyBzdWZmaXhgKTtsZXQgaT10aGlzLnRhZ3Nbcl07aWYoaSl0cnl7cmV0dXJuIGkrZGVjb2RlVVJJQ29tcG9uZW50KHMpfWNhdGNoKG8pe3JldHVybiB0KFN0cmluZyhvKSksbnVsbH1yZXR1cm4gcj09PVxcXCIhXFxcIj9lOih0KGBDb3VsZCBub3QgcmVzb2x2ZSB0YWc6ICR7ZX1gKSxudWxsKX10YWdTdHJpbmcoZSl7Zm9yKGxldFt0LHJdb2YgT2JqZWN0LmVudHJpZXModGhpcy50YWdzKSlpZihlLnN0YXJ0c1dpdGgocikpcmV0dXJuIHQrUmMoZS5zdWJzdHJpbmcoci5sZW5ndGgpKTtyZXR1cm4gZVswXT09PVxcXCIhXFxcIj9lOmAhPCR7ZX0+YH10b1N0cmluZyhlKXtsZXQgdD10aGlzLnlhbWwuZXhwbGljaXQ/W2AlWUFNTCAke3RoaXMueWFtbC52ZXJzaW9ufHxcXFwiMS4yXFxcIn1gXTpbXSxyPU9iamVjdC5lbnRyaWVzKHRoaXMudGFncykscztpZihlJiZyLmxlbmd0aD4wJiZLKGUuY29udGVudHMpKXtsZXQgaT17fTtHZShlLmNvbnRlbnRzLChvLGEpPT57SyhhKSYmYS50YWcmJihpW2EudGFnXT0hMCl9KSxzPU9iamVjdC5rZXlzKGkpfWVsc2Ugcz1bXTtmb3IobGV0W2ksb11vZiByKWk9PT1cXFwiISFcXFwiJiZvPT09XFxcInRhZzp5YW1sLm9yZywyMDAyOlxcXCJ8fCghZXx8cy5zb21lKGE9PmEuc3RhcnRzV2l0aChvKSkpJiZ0LnB1c2goYCVUQUcgJHtpfSAke299YCk7cmV0dXJuIHQuam9pbihgXFxuYCl9fTtwZS5kZWZhdWx0WWFtbD17ZXhwbGljaXQ6ITEsdmVyc2lvbjpcXFwiMS4yXFxcIn07cGUuZGVmYXVsdFRhZ3M9e1xcXCIhIVxcXCI6XFxcInRhZzp5YW1sLm9yZywyMDAyOlxcXCJ9O2Z1bmN0aW9uIG9zKG4pe2lmKC9bXFxcXHgwMC1cXFxceDE5XFxcXHMsW1xcXFxde31dLy50ZXN0KG4pKXtsZXQgdD1gQW5jaG9yIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJhY3RlcnM6ICR7SlNPTi5zdHJpbmdpZnkobil9YDt0aHJvdyBuZXcgRXJyb3IodCl9cmV0dXJuITB9ZnVuY3Rpb24gQWkobil7bGV0IGU9bmV3IFNldDtyZXR1cm4gR2Uobix7VmFsdWUodCxyKXtyLmFuY2hvciYmZS5hZGQoci5hbmNob3IpfX0pLGV9ZnVuY3Rpb24gTWkobixlKXtmb3IobGV0IHQ9MTs7Kyt0KXtsZXQgcj1gJHtufSR7dH1gO2lmKCFlLmhhcyhyKSlyZXR1cm4gcn19ZnVuY3Rpb24gV2EobixlKXtsZXQgdD1bXSxyPW5ldyBNYXAscz1udWxsO3JldHVybntvbkFuY2hvcjppPT57dC5wdXNoKGkpLHN8fChzPUFpKG4pKTtsZXQgbz1NaShlLHMpO3JldHVybiBzLmFkZChvKSxvfSxzZXRBbmNob3JzOigpPT57Zm9yKGxldCBpIG9mIHQpe2xldCBvPXIuZ2V0KGkpO2lmKHR5cGVvZiBvPT1cXFwib2JqZWN0XFxcIiYmby5hbmNob3ImJihXKG8ubm9kZSl8fEcoby5ub2RlKSkpby5ub2RlLmFuY2hvcj1vLmFuY2hvcjtlbHNle2xldCBhPW5ldyBFcnJvcihcXFwiRmFpbGVkIHRvIHJlc29sdmUgcmVwZWF0ZWQgb2JqZWN0ICh0aGlzIHNob3VsZCBub3QgaGFwcGVuKVxcXCIpO3Rocm93IGEuc291cmNlPWksYX19fSxzb3VyY2VPYmplY3RzOnJ9fWZ1bmN0aW9uIHZ0KG4sZSx0LHIpe2lmKHImJnR5cGVvZiByPT1cXFwib2JqZWN0XFxcIilpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgcz0wLGk9ci5sZW5ndGg7czxpOysrcyl7bGV0IG89cltzXSxhPXZ0KG4scixTdHJpbmcocyksbyk7YT09PXZvaWQgMD9kZWxldGUgcltzXTphIT09byYmKHJbc109YSl9ZWxzZSBpZihyIGluc3RhbmNlb2YgTWFwKWZvcihsZXQgcyBvZiBBcnJheS5mcm9tKHIua2V5cygpKSl7bGV0IGk9ci5nZXQocyksbz12dChuLHIscyxpKTtvPT09dm9pZCAwP3IuZGVsZXRlKHMpOm8hPT1pJiZyLnNldChzLG8pfWVsc2UgaWYociBpbnN0YW5jZW9mIFNldClmb3IobGV0IHMgb2YgQXJyYXkuZnJvbShyKSl7bGV0IGk9dnQobixyLHMscyk7aT09PXZvaWQgMD9yLmRlbGV0ZShzKTppIT09cyYmKHIuZGVsZXRlKHMpLHIuYWRkKGkpKX1lbHNlIGZvcihsZXRbcyxpXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgbz12dChuLHIscyxpKTtvPT09dm9pZCAwP2RlbGV0ZSByW3NdOm8hPT1pJiYocltzXT1vKX1yZXR1cm4gbi5jYWxsKGUsdCxyKX1mdW5jdGlvbiBtZShuLGUsdCl7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5tYXAoKHIscyk9Pm1lKHIsU3RyaW5nKHMpLHQpKTtpZihuJiZ0eXBlb2Ygbi50b0pTT049PVxcXCJmdW5jdGlvblxcXCIpe2lmKCF0fHwhUmEobikpcmV0dXJuIG4udG9KU09OKGUsdCk7bGV0IHI9e2FsaWFzQ291bnQ6MCxjb3VudDoxLHJlczp2b2lkIDB9O3QuYW5jaG9ycy5zZXQobixyKSx0Lm9uQ3JlYXRlPWk9PntyLnJlcz1pLGRlbGV0ZSB0Lm9uQ3JlYXRlfTtsZXQgcz1uLnRvSlNPTihlLHQpO3JldHVybiB0Lm9uQ3JlYXRlJiZ0Lm9uQ3JlYXRlKHMpLHN9cmV0dXJuIHR5cGVvZiBuPT1cXFwiYmlnaW50XFxcIiYmISh0IT1udWxsJiZ0LmtlZXApP051bWJlcihuKTpufXZhciBJdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxrZSx7dmFsdWU6ZX0pfWNsb25lKCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO3JldHVybiB0aGlzLnJhbmdlJiYoZS5yYW5nZT10aGlzLnJhbmdlLnNsaWNlKCkpLGV9dG9KUyhlLHttYXBBc01hcDp0LG1heEFsaWFzQ291bnQ6cixvbkFuY2hvcjpzLHJldml2ZXI6aX09e30pe2lmKCFFdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJBIGRvY3VtZW50IGFyZ3VtZW50IGlzIHJlcXVpcmVkXFxcIik7bGV0IG89e2FuY2hvcnM6bmV3IE1hcCxkb2M6ZSxrZWVwOiEwLG1hcEFzTWFwOnQ9PT0hMCxtYXBLZXlXYXJuZWQ6ITEsbWF4QWxpYXNDb3VudDp0eXBlb2Ygcj09XFxcIm51bWJlclxcXCI/cjoxMDB9LGE9bWUodGhpcyxcXFwiXFxcIixvKTtpZih0eXBlb2Ygcz09XFxcImZ1bmN0aW9uXFxcIilmb3IobGV0e2NvdW50OnUscmVzOmx9b2Ygby5hbmNob3JzLnZhbHVlcygpKXMobCx1KTtyZXR1cm4gdHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCI/dnQoaSx7XFxcIlxcXCI6YX0sXFxcIlxcXCIsYSk6YX19O3ZhciBGdD1jbGFzcyBleHRlbmRzIEl0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHJzKSx0aGlzLnNvdXJjZT1lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFxcXCJ0YWdcXFwiLHtzZXQoKXt0aHJvdyBuZXcgRXJyb3IoXFxcIkFsaWFzIG5vZGVzIGNhbm5vdCBoYXZlIHRhZ3NcXFwiKX19KX1yZXNvbHZlKGUpe2xldCB0O3JldHVybiBHZShlLHtOb2RlOihyLHMpPT57aWYocz09PXRoaXMpcmV0dXJuIEdlLkJSRUFLO3MuYW5jaG9yPT09dGhpcy5zb3VyY2UmJih0PXMpfX0pLHR9dG9KU09OKGUsdCl7aWYoIXQpcmV0dXJue3NvdXJjZTp0aGlzLnNvdXJjZX07bGV0e2FuY2hvcnM6cixkb2M6cyxtYXhBbGlhc0NvdW50Oml9PXQsbz10aGlzLnJlc29sdmUocyk7aWYoIW8pe2xldCB1PWBVbnJlc29sdmVkIGFsaWFzICh0aGUgYW5jaG9yIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYWxpYXMpOiAke3RoaXMuc291cmNlfWA7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKHUpfWxldCBhPXIuZ2V0KG8pO2lmKGF8fChtZShvLG51bGwsdCksYT1yLmdldChvKSksIWF8fGEucmVzPT09dm9pZCAwKXtsZXQgdT1cXFwiVGhpcyBzaG91bGQgbm90IGhhcHBlbjogQWxpYXMgYW5jaG9yIHdhcyBub3QgcmVzb2x2ZWQ/XFxcIjt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IodSl9aWYoaT49MCYmKGEuY291bnQrPTEsYS5hbGlhc0NvdW50PT09MCYmKGEuYWxpYXNDb3VudD1hcyhzLG8scikpLGEuY291bnQqYS5hbGlhc0NvdW50PmkpKXtsZXQgdT1cXFwiRXhjZXNzaXZlIGFsaWFzIGNvdW50IGluZGljYXRlcyBhIHJlc291cmNlIGV4aGF1c3Rpb24gYXR0YWNrXFxcIjt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IodSl9cmV0dXJuIGEucmVzfXRvU3RyaW5nKGUsdCxyKXtsZXQgcz1gKiR7dGhpcy5zb3VyY2V9YDtpZihlKXtpZihvcyh0aGlzLnNvdXJjZSksZS5vcHRpb25zLnZlcmlmeUFsaWFzT3JkZXImJiFlLmFuY2hvcnMuaGFzKHRoaXMuc291cmNlKSl7bGV0IGk9YFVucmVzb2x2ZWQgYWxpYXMgKHRoZSBhbmNob3IgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBhbGlhcyk6ICR7dGhpcy5zb3VyY2V9YDt0aHJvdyBuZXcgRXJyb3IoaSl9aWYoZS5pbXBsaWNpdEtleSlyZXR1cm5gJHtzfSBgfXJldHVybiBzfX07ZnVuY3Rpb24gYXMobixlLHQpe2lmKEplKGUpKXtsZXQgcj1lLnJlc29sdmUobikscz10JiZyJiZ0LmdldChyKTtyZXR1cm4gcz9zLmNvdW50KnMuYWxpYXNDb3VudDowfWVsc2UgaWYoRyhlKSl7bGV0IHI9MDtmb3IobGV0IHMgb2YgZS5pdGVtcyl7bGV0IGk9YXMobixzLHQpO2k+ciYmKHI9aSl9cmV0dXJuIHJ9ZWxzZSBpZihIKGUpKXtsZXQgcj1hcyhuLGUua2V5LHQpLHM9YXMobixlLnZhbHVlLHQpO3JldHVybiBNYXRoLm1heChyLHMpfXJldHVybiAxfXZhciB1cz1uPT4hbnx8dHlwZW9mIG4hPVxcXCJmdW5jdGlvblxcXCImJnR5cGVvZiBuIT1cXFwib2JqZWN0XFxcIixQPWNsYXNzIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoUGUpLHRoaXMudmFsdWU9ZX10b0pTT04oZSx0KXtyZXR1cm4gdCE9bnVsbCYmdC5rZWVwP3RoaXMudmFsdWU6bWUodGhpcy52YWx1ZSxlLHQpfXRvU3RyaW5nKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKX19O1AuQkxPQ0tfRk9MREVEPVxcXCJCTE9DS19GT0xERURcXFwiO1AuQkxPQ0tfTElURVJBTD1cXFwiQkxPQ0tfTElURVJBTFxcXCI7UC5QTEFJTj1cXFwiUExBSU5cXFwiO1AuUVVPVEVfRE9VQkxFPVxcXCJRVU9URV9ET1VCTEVcXFwiO1AuUVVPVEVfU0lOR0xFPVxcXCJRVU9URV9TSU5HTEVcXFwiO3ZhciBqYz1cXFwidGFnOnlhbWwub3JnLDIwMDI6XFxcIjtmdW5jdGlvbiBWYyhuLGUsdCl7dmFyIHI7aWYoZSl7bGV0IHM9dC5maWx0ZXIobz0+by50YWc9PT1lKSxpPShyPXMuZmluZChvPT4hby5mb3JtYXQpKSE9bnVsbD9yOnNbMF07aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUYWcgJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gaX1yZXR1cm4gdC5maW5kKHM9Pnt2YXIgaTtyZXR1cm4oKGk9cy5pZGVudGlmeSk9PW51bGw/dm9pZCAwOmkuY2FsbChzLG4pKSYmIXMuZm9ybWF0fSl9ZnVuY3Rpb24gd3QobixlLHQpe3ZhciBoLHAsZjtpZihFdChuKSYmKG49bi5jb250ZW50cyksSyhuKSlyZXR1cm4gbjtpZihIKG4pKXtsZXQgRj0ocD0oaD10LnNjaGVtYVtLZV0pLmNyZWF0ZU5vZGUpPT1udWxsP3ZvaWQgMDpwLmNhbGwoaCx0LnNjaGVtYSxudWxsLHQpO3JldHVybiBGLml0ZW1zLnB1c2gobiksRn0obiBpbnN0YW5jZW9mIFN0cmluZ3x8biBpbnN0YW5jZW9mIE51bWJlcnx8biBpbnN0YW5jZW9mIEJvb2xlYW58fHR5cGVvZiBCaWdJbnQhPVxcXCJ1bmRlZmluZWRcXFwiJiZuIGluc3RhbmNlb2YgQmlnSW50KSYmKG49bi52YWx1ZU9mKCkpO2xldHthbGlhc0R1cGxpY2F0ZU9iamVjdHM6cixvbkFuY2hvcjpzLG9uVGFnT2JqOmksc2NoZW1hOm8sc291cmNlT2JqZWN0czphfT10LHU7aWYociYmbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXtpZih1PWEuZ2V0KG4pLHUpcmV0dXJuIHUuYW5jaG9yfHwodS5hbmNob3I9cyhuKSksbmV3IEZ0KHUuYW5jaG9yKTt1PXthbmNob3I6bnVsbCxub2RlOm51bGx9LGEuc2V0KG4sdSl9ZSE9bnVsbCYmZS5zdGFydHNXaXRoKFxcXCIhIVxcXCIpJiYoZT1qYytlLnNsaWNlKDIpKTtsZXQgbD1WYyhuLGUsby50YWdzKTtpZighbCl7aWYobiYmdHlwZW9mIG4udG9KU09OPT1cXFwiZnVuY3Rpb25cXFwiJiYobj1uLnRvSlNPTigpKSwhbnx8dHlwZW9mIG4hPVxcXCJvYmplY3RcXFwiKXtsZXQgRj1uZXcgUChuKTtyZXR1cm4gdSYmKHUubm9kZT1GKSxGfWw9biBpbnN0YW5jZW9mIE1hcD9vW0tlXTpTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KG4pP29bYnRdOm9bS2VdfWkmJihpKGwpLGRlbGV0ZSB0Lm9uVGFnT2JqKTtsZXQgZD1sIT1udWxsJiZsLmNyZWF0ZU5vZGU/bC5jcmVhdGVOb2RlKHQuc2NoZW1hLG4sdCk6dHlwZW9mKChmPWw9PW51bGw/dm9pZCAwOmwubm9kZUNsYXNzKT09bnVsbD92b2lkIDA6Zi5mcm9tKT09XFxcImZ1bmN0aW9uXFxcIj9sLm5vZGVDbGFzcy5mcm9tKHQuc2NoZW1hLG4sdCk6bmV3IFAobik7cmV0dXJuIGU/ZC50YWc9ZTpsLmRlZmF1bHR8fChkLnRhZz1sLnRhZyksdSYmKHUubm9kZT1kKSxkfWZ1bmN0aW9uIHByKG4sZSx0KXtsZXQgcj10O2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgaT1lW3NdO2lmKHR5cGVvZiBpPT1cXFwibnVtYmVyXFxcIiYmTnVtYmVyLmlzSW50ZWdlcihpKSYmaT49MCl7bGV0IG89W107b1tpXT1yLHI9b31lbHNlIHI9bmV3IE1hcChbW2kscl1dKX1yZXR1cm4gd3Qocix2b2lkIDAse2FsaWFzRHVwbGljYXRlT2JqZWN0czohMSxrZWVwVW5kZWZpbmVkOiExLG9uQW5jaG9yOigpPT57dGhyb3cgbmV3IEVycm9yKFxcXCJUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBwbGVhc2UgcmVwb3J0IGEgYnVnLlxcXCIpfSxzY2hlbWE6bixzb3VyY2VPYmplY3RzOm5ldyBNYXB9KX12YXIgQ249bj0+bj09bnVsbHx8dHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiYhIW5bU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lLEp0PWNsYXNzIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcXFwic2NoZW1hXFxcIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfWNsb25lKGUpe2xldCB0PU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRoaXMpKTtyZXR1cm4gZSYmKHQuc2NoZW1hPWUpLHQuaXRlbXM9dC5pdGVtcy5tYXAocj0+SyhyKXx8SChyKT9yLmNsb25lKGUpOnIpLHRoaXMucmFuZ2UmJih0LnJhbmdlPXRoaXMucmFuZ2Uuc2xpY2UoKSksdH1hZGRJbihlLHQpe2lmKENuKGUpKXRoaXMuYWRkKHQpO2Vsc2V7bGV0W3IsLi4uc109ZSxpPXRoaXMuZ2V0KHIsITApO2lmKEcoaSkpaS5hZGRJbihzLHQpO2Vsc2UgaWYoaT09PXZvaWQgMCYmdGhpcy5zY2hlbWEpdGhpcy5zZXQocixwcih0aGlzLnNjaGVtYSxzLHQpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7cn0uIFJlbWFpbmluZyBwYXRoOiAke3N9YCl9fWRlbGV0ZUluKGUpe2xldFt0LC4uLnJdPWU7aWYoci5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmRlbGV0ZSh0KTtsZXQgcz10aGlzLmdldCh0LCEwKTtpZihHKHMpKXJldHVybiBzLmRlbGV0ZUluKHIpO3Rocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7dH0uIFJlbWFpbmluZyBwYXRoOiAke3J9YCl9Z2V0SW4oZSx0KXtsZXRbciwuLi5zXT1lLGk9dGhpcy5nZXQociwhMCk7cmV0dXJuIHMubGVuZ3RoPT09MD8hdCYmVyhpKT9pLnZhbHVlOmk6RyhpKT9pLmdldEluKHMsdCk6dm9pZCAwfWhhc0FsbE51bGxWYWx1ZXMoZSl7cmV0dXJuIHRoaXMuaXRlbXMuZXZlcnkodD0+e2lmKCFIKHQpKXJldHVybiExO2xldCByPXQudmFsdWU7cmV0dXJuIHI9PW51bGx8fGUmJlcocikmJnIudmFsdWU9PW51bGwmJiFyLmNvbW1lbnRCZWZvcmUmJiFyLmNvbW1lbnQmJiFyLnRhZ30pfWhhc0luKGUpe2xldFt0LC4uLnJdPWU7aWYoci5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmhhcyh0KTtsZXQgcz10aGlzLmdldCh0LCEwKTtyZXR1cm4gRyhzKT9zLmhhc0luKHIpOiExfXNldEluKGUsdCl7bGV0W3IsLi4uc109ZTtpZihzLmxlbmd0aD09PTApdGhpcy5zZXQocix0KTtlbHNle2xldCBpPXRoaXMuZ2V0KHIsITApO2lmKEcoaSkpaS5zZXRJbihzLHQpO2Vsc2UgaWYoaT09PXZvaWQgMCYmdGhpcy5zY2hlbWEpdGhpcy5zZXQocixwcih0aGlzLnNjaGVtYSxzLHQpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7cn0uIFJlbWFpbmluZyBwYXRoOiAke3N9YCl9fX07SnQubWF4Rmxvd1N0cmluZ1NpbmdsZUxpbmVMZW5ndGg9NjA7dmFyIEhhPW49Pm4ucmVwbGFjZSgvXig/ISQpKD86ICQpPy9nbSxcXFwiI1xcXCIpO2Z1bmN0aW9uICRlKG4sZSl7cmV0dXJuL15cXFxcbiskLy50ZXN0KG4pP24uc3Vic3RyaW5nKDEpOmU/bi5yZXBsYWNlKC9eKD8hICokKS9nbSxlKTpufXZhciBpdD0obixlLHQpPT5uLmVuZHNXaXRoKGBcXG5gKT8kZSh0LGUpOnQuaW5jbHVkZXMoYFxcbmApP2BcXG5gKyRlKHQsZSk6KG4uZW5kc1dpdGgoXFxcIiBcXFwiKT9cXFwiXFxcIjpcXFwiIFxcXCIpK3Q7dmFyIF9pPVxcXCJmbG93XFxcIixscz1cXFwiYmxvY2tcXFwiLG1yPVxcXCJxdW90ZWRcXFwiO2Z1bmN0aW9uIERyKG4sZSx0PVxcXCJmbG93XFxcIix7aW5kZW50QXRTdGFydDpyLGxpbmVXaWR0aDpzPTgwLG1pbkNvbnRlbnRXaWR0aDppPTIwLG9uRm9sZDpvLG9uT3ZlcmZsb3c6YX09e30pe2lmKCFzfHxzPDApcmV0dXJuIG47bGV0IHU9TWF0aC5tYXgoMStpLDErcy1lLmxlbmd0aCk7aWYobi5sZW5ndGg8PXUpcmV0dXJuIG47bGV0IGw9W10sZD17fSxoPXMtZS5sZW5ndGg7dHlwZW9mIHI9PVxcXCJudW1iZXJcXFwiJiYocj5zLU1hdGgubWF4KDIsaSk/bC5wdXNoKDApOmg9cy1yKTtsZXQgcCxmLEY9ITEsZz0tMSx5PS0xLFM9LTE7dD09PWxzJiYoZz1LYShuLGcsZS5sZW5ndGgpLGchPT0tMSYmKGg9Zyt1KSk7Zm9yKGxldCB2O3Y9bltnKz0xXTspe2lmKHQ9PT1tciYmdj09PVxcXCJcXFxcXFxcXFxcXCIpe3N3aXRjaCh5PWcsbltnKzFdKXtjYXNlXFxcInhcXFwiOmcrPTM7YnJlYWs7Y2FzZVxcXCJ1XFxcIjpnKz01O2JyZWFrO2Nhc2VcXFwiVVxcXCI6Zys9OTticmVhaztkZWZhdWx0OmcrPTF9Uz1nfWlmKHY9PT1gXFxuYCl0PT09bHMmJihnPUthKG4sZyxlLmxlbmd0aCkpLGg9ZytlLmxlbmd0aCt1LHA9dm9pZCAwO2Vsc2V7aWYodj09PVxcXCIgXFxcIiYmZiYmZiE9PVxcXCIgXFxcIiYmZiE9PWBcXG5gJiZmIT09XFxcIlxcdFxcXCIpe2xldCBEPW5bZysxXTtEJiZEIT09XFxcIiBcXFwiJiZEIT09YFxcbmAmJkQhPT1cXFwiXFx0XFxcIiYmKHA9Zyl9aWYoZz49aClpZihwKWwucHVzaChwKSxoPXArdSxwPXZvaWQgMDtlbHNlIGlmKHQ9PT1tcil7Zm9yKDtmPT09XFxcIiBcXFwifHxmPT09XFxcIlxcdFxcXCI7KWY9dix2PW5bZys9MV0sRj0hMDtsZXQgRD1nPlMrMT9nLTI6eS0xO2lmKGRbRF0pcmV0dXJuIG47bC5wdXNoKEQpLGRbRF09ITAsaD1EK3UscD12b2lkIDB9ZWxzZSBGPSEwfWY9dn1pZihGJiZhJiZhKCksbC5sZW5ndGg9PT0wKXJldHVybiBuO28mJm8oKTtsZXQgTz1uLnNsaWNlKDAsbFswXSk7Zm9yKGxldCB2PTA7djxsLmxlbmd0aDsrK3Ype2xldCBEPWxbdl0sdz1sW3YrMV18fG4ubGVuZ3RoO0Q9PT0wP089YFxcbiR7ZX0ke24uc2xpY2UoMCx3KX1gOih0PT09bXImJmRbRF0mJihPKz1gJHtuW0RdfVxcXFxcXFxcYCksTys9YFxcbiR7ZX0ke24uc2xpY2UoRCsxLHcpfWApfXJldHVybiBPfWZ1bmN0aW9uIEthKG4sZSx0KXtsZXQgcj1lLHM9ZSsxLGk9bltzXTtmb3IoO2k9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIjspaWYoZTxzK3QpaT1uWysrZV07ZWxzZXtkbyBpPW5bKytlXTt3aGlsZShpJiZpIT09YFxcbmApO3I9ZSxzPWUrMSxpPW5bc119cmV0dXJuIHJ9dmFyIGZzPShuLGUpPT4oe2luZGVudEF0U3RhcnQ6ZT9uLmluZGVudC5sZW5ndGg6bi5pbmRlbnRBdFN0YXJ0LGxpbmVXaWR0aDpuLm9wdGlvbnMubGluZVdpZHRoLG1pbkNvbnRlbnRXaWR0aDpuLm9wdGlvbnMubWluQ29udGVudFdpZHRofSksZHM9bj0+L14oJXwtLS18XFxcXC5cXFxcLlxcXFwuKS9tLnRlc3Qobik7ZnVuY3Rpb24gcWMobixlLHQpe2lmKCFlfHxlPDApcmV0dXJuITE7bGV0IHI9ZS10LHM9bi5sZW5ndGg7aWYoczw9cilyZXR1cm4hMTtmb3IobGV0IGk9MCxvPTA7aTxzOysraSlpZihuW2ldPT09YFxcbmApe2lmKGktbz5yKXJldHVybiEwO2lmKG89aSsxLHMtbzw9cilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB5cihuLGUpe2xldCB0PUpTT04uc3RyaW5naWZ5KG4pO2lmKGUub3B0aW9ucy5kb3VibGVRdW90ZWRBc0pTT04pcmV0dXJuIHQ7bGV0e2ltcGxpY2l0S2V5OnJ9PWUscz1lLm9wdGlvbnMuZG91YmxlUXVvdGVkTWluTXVsdGlMaW5lTGVuZ3RoLGk9ZS5pbmRlbnR8fChkcyhuKT9cXFwiICBcXFwiOlxcXCJcXFwiKSxvPVxcXCJcXFwiLGE9MDtmb3IobGV0IHU9MCxsPXRbdV07bDtsPXRbKyt1XSlpZihsPT09XFxcIiBcXFwiJiZ0W3UrMV09PT1cXFwiXFxcXFxcXFxcXFwiJiZ0W3UrMl09PT1cXFwiblxcXCImJihvKz10LnNsaWNlKGEsdSkrXFxcIlxcXFxcXFxcIFxcXCIsdSs9MSxhPXUsbD1cXFwiXFxcXFxcXFxcXFwiKSxsPT09XFxcIlxcXFxcXFxcXFxcIilzd2l0Y2godFt1KzFdKXtjYXNlXFxcInVcXFwiOntvKz10LnNsaWNlKGEsdSk7bGV0IGQ9dC5zdWJzdHIodSsyLDQpO3N3aXRjaChkKXtjYXNlXFxcIjAwMDBcXFwiOm8rPVxcXCJcXFxcXFxcXDBcXFwiO2JyZWFrO2Nhc2VcXFwiMDAwN1xcXCI6bys9XFxcIlxcXFxcXFxcYVxcXCI7YnJlYWs7Y2FzZVxcXCIwMDBiXFxcIjpvKz1cXFwiXFxcXFxcXFx2XFxcIjticmVhaztjYXNlXFxcIjAwMWJcXFwiOm8rPVxcXCJcXFxcXFxcXGVcXFwiO2JyZWFrO2Nhc2VcXFwiMDA4NVxcXCI6bys9XFxcIlxcXFxcXFxcTlxcXCI7YnJlYWs7Y2FzZVxcXCIwMGEwXFxcIjpvKz1cXFwiXFxcXFxcXFxfXFxcIjticmVhaztjYXNlXFxcIjIwMjhcXFwiOm8rPVxcXCJcXFxcXFxcXExcXFwiO2JyZWFrO2Nhc2VcXFwiMjAyOVxcXCI6bys9XFxcIlxcXFxcXFxcUFxcXCI7YnJlYWs7ZGVmYXVsdDpkLnN1YnN0cigwLDIpPT09XFxcIjAwXFxcIj9vKz1cXFwiXFxcXFxcXFx4XFxcIitkLnN1YnN0cigyKTpvKz10LnN1YnN0cih1LDYpfXUrPTUsYT11KzF9YnJlYWs7Y2FzZVxcXCJuXFxcIjppZihyfHx0W3UrMl09PT0nXFxcIid8fHQubGVuZ3RoPHMpdSs9MTtlbHNle2ZvcihvKz10LnNsaWNlKGEsdSkrYFxcblxcbmA7dFt1KzJdPT09XFxcIlxcXFxcXFxcXFxcIiYmdFt1KzNdPT09XFxcIm5cXFwiJiZ0W3UrNF0hPT0nXFxcIic7KW8rPWBcXG5gLHUrPTI7bys9aSx0W3UrMl09PT1cXFwiIFxcXCImJihvKz1cXFwiXFxcXFxcXFxcXFwiKSx1Kz0xLGE9dSsxfWJyZWFrO2RlZmF1bHQ6dSs9MX1yZXR1cm4gbz1hP28rdC5zbGljZShhKTp0LHI/bzpEcihvLGksbXIsZnMoZSwhMSkpfWZ1bmN0aW9uIEJpKG4sZSl7aWYoZS5vcHRpb25zLnNpbmdsZVF1b3RlPT09ITF8fGUuaW1wbGljaXRLZXkmJm4uaW5jbHVkZXMoYFxcbmApfHwvWyBcXFxcdF1cXFxcbnxcXFxcblsgXFxcXHRdLy50ZXN0KG4pKXJldHVybiB5cihuLGUpO2xldCB0PWUuaW5kZW50fHwoZHMobik/XFxcIiAgXFxcIjpcXFwiXFxcIikscj1cXFwiJ1xcXCIrbi5yZXBsYWNlKC8nL2csXFxcIicnXFxcIikucmVwbGFjZSgvXFxcXG4rL2csYCQmXFxuJHt0fWApK1xcXCInXFxcIjtyZXR1cm4gZS5pbXBsaWNpdEtleT9yOkRyKHIsdCxfaSxmcyhlLCExKSl9ZnVuY3Rpb24geG4obixlKXtsZXR7c2luZ2xlUXVvdGU6dH09ZS5vcHRpb25zLHI7aWYodD09PSExKXI9eXI7ZWxzZXtsZXQgcz1uLmluY2x1ZGVzKCdcXFwiJyksaT1uLmluY2x1ZGVzKFxcXCInXFxcIik7cyYmIWk/cj1CaTppJiYhcz9yPXlyOnI9dD9CaTp5cn1yZXR1cm4gcihuLGUpfXZhciBQaTt0cnl7UGk9bmV3IFJlZ0V4cChgKF58KD88IVxcbikpXFxuKyg/IVxcbnwkKWAsXFxcImdcXFwiKX1jYXRjaChuKXtQaT0vXFxcXG4rKD8hXFxcXG58JCkvZ31mdW5jdGlvbiBjcyh7Y29tbWVudDpuLHR5cGU6ZSx2YWx1ZTp0fSxyLHMsaSl7bGV0e2Jsb2NrUXVvdGU6byxjb21tZW50U3RyaW5nOmEsbGluZVdpZHRoOnV9PXIub3B0aW9ucztpZighb3x8L1xcXFxuW1xcXFx0IF0rJC8udGVzdCh0KXx8L15cXFxccyokLy50ZXN0KHQpKXJldHVybiB4bih0LHIpO2xldCBsPXIuaW5kZW50fHwoci5mb3JjZUJsb2NrSW5kZW50fHxkcyh0KT9cXFwiICBcXFwiOlxcXCJcXFwiKSxkPW89PT1cXFwibGl0ZXJhbFxcXCI/ITA6bz09PVxcXCJmb2xkZWRcXFwifHxlPT09UC5CTE9DS19GT0xERUQ/ITE6ZT09PVAuQkxPQ0tfTElURVJBTD8hMDohcWModCx1LGwubGVuZ3RoKTtpZighdClyZXR1cm4gZD9gfFxcbmA6YD5cXG5gO2xldCBoLHA7Zm9yKHA9dC5sZW5ndGg7cD4wOy0tcCl7bGV0IFQ9dFtwLTFdO2lmKFQhPT1gXFxuYCYmVCE9PVxcXCJcXHRcXFwiJiZUIT09XFxcIiBcXFwiKWJyZWFrfWxldCBmPXQuc3Vic3RyaW5nKHApLEY9Zi5pbmRleE9mKGBcXG5gKTtGPT09LTE/aD1cXFwiLVxcXCI6dD09PWZ8fEYhPT1mLmxlbmd0aC0xPyhoPVxcXCIrXFxcIixpJiZpKCkpOmg9XFxcIlxcXCIsZiYmKHQ9dC5zbGljZSgwLC1mLmxlbmd0aCksZltmLmxlbmd0aC0xXT09PWBcXG5gJiYoZj1mLnNsaWNlKDAsLTEpKSxmPWYucmVwbGFjZShQaSxgJCYke2x9YCkpO2xldCBnPSExLHksUz0tMTtmb3IoeT0wO3k8dC5sZW5ndGg7Kyt5KXtsZXQgVD10W3ldO2lmKFQ9PT1cXFwiIFxcXCIpZz0hMDtlbHNlIGlmKFQ9PT1gXFxuYClTPXk7ZWxzZSBicmVha31sZXQgTz10LnN1YnN0cmluZygwLFM8eT9TKzE6eSk7TyYmKHQ9dC5zdWJzdHJpbmcoTy5sZW5ndGgpLE89Ty5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCkpO2xldCBEPShkP1xcXCJ8XFxcIjpcXFwiPlxcXCIpKyhnP2w/XFxcIjJcXFwiOlxcXCIxXFxcIjpcXFwiXFxcIikraDtpZihuJiYoRCs9XFxcIiBcXFwiK2Eobi5yZXBsYWNlKC8gP1tcXFxcclxcXFxuXSsvZyxcXFwiIFxcXCIpKSxzJiZzKCkpLGQpcmV0dXJuIHQ9dC5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCksYCR7RH1cXG4ke2x9JHtPfSR7dH0ke2Z9YDt0PXQucmVwbGFjZSgvXFxcXG4rL2csYFxcbiQmYCkucmVwbGFjZSgvKD86XnxcXFxcbikoW1xcXFx0IF0uKikoPzooW1xcXFxuXFxcXHQgXSopXFxcXG4oPyFbXFxcXG5cXFxcdCBdKSk/L2csXFxcIiQxJDJcXFwiKS5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCk7bGV0IHc9RHIoYCR7T30ke3R9JHtmfWAsbCxscyxmcyhyLCEwKSk7cmV0dXJuYCR7RH1cXG4ke2x9JHt3fWB9ZnVuY3Rpb24gVWMobixlLHQscil7bGV0e3R5cGU6cyx2YWx1ZTppfT1uLHthY3R1YWxTdHJpbmc6byxpbXBsaWNpdEtleTphLGluZGVudDp1LGluZGVudFN0ZXA6bCxpbkZsb3c6ZH09ZTtpZihhJiZpLmluY2x1ZGVzKGBcXG5gKXx8ZCYmL1tbXFxcXF17fSxdLy50ZXN0KGkpKXJldHVybiB4bihpLGUpO2lmKCFpfHwvXltcXFxcblxcXFx0ICxbXFxcXF17fSMmKiF8PidcXFwiJUBgXXxeWz8tXSR8Xls/LV1bIFxcXFx0XXxbXFxcXG46XVsgXFxcXHRdfFsgXFxcXHRdXFxcXG58W1xcXFxuXFxcXHQgXSN8W1xcXFxuXFxcXHQgOl0kLy50ZXN0KGkpKXJldHVybiBhfHxkfHwhaS5pbmNsdWRlcyhgXFxuYCk/eG4oaSxlKTpjcyhuLGUsdCxyKTtpZighYSYmIWQmJnMhPT1QLlBMQUlOJiZpLmluY2x1ZGVzKGBcXG5gKSlyZXR1cm4gY3MobixlLHQscik7aWYoZHMoaSkpe2lmKHU9PT1cXFwiXFxcIilyZXR1cm4gZS5mb3JjZUJsb2NrSW5kZW50PSEwLGNzKG4sZSx0LHIpO2lmKGEmJnU9PT1sKXJldHVybiB4bihpLGUpfWxldCBoPWkucmVwbGFjZSgvXFxcXG4rL2csYCQmXFxuJHt1fWApO2lmKG8pe2xldCBwPWc9Pnt2YXIgeTtyZXR1cm4gZy5kZWZhdWx0JiZnLnRhZyE9PVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcXFwiJiYoKHk9Zy50ZXN0KT09bnVsbD92b2lkIDA6eS50ZXN0KGgpKX0se2NvbXBhdDpmLHRhZ3M6Rn09ZS5kb2Muc2NoZW1hO2lmKEYuc29tZShwKXx8ZiE9bnVsbCYmZi5zb21lKHApKXJldHVybiB4bihpLGUpfXJldHVybiBhP2g6RHIoaCx1LF9pLGZzKGUsITEpKX1mdW5jdGlvbiB6dChuLGUsdCxyKXtsZXR7aW1wbGljaXRLZXk6cyxpbkZsb3c6aX09ZSxvPXR5cGVvZiBuLnZhbHVlPT1cXFwic3RyaW5nXFxcIj9uOk9iamVjdC5hc3NpZ24oe30sbix7dmFsdWU6U3RyaW5nKG4udmFsdWUpfSkse3R5cGU6YX09bjthIT09UC5RVU9URV9ET1VCTEUmJi9bXFxcXHgwMC1cXFxceDA4XFxcXHgwYi1cXFxceDFmXFxcXHg3Zi1cXFxceDlmXFxcXHV7RDgwMH0tXFxcXHV7REZGRn1dL3UudGVzdChvLnZhbHVlKSYmKGE9UC5RVU9URV9ET1VCTEUpO2xldCB1PWQ9Pntzd2l0Y2goZCl7Y2FzZSBQLkJMT0NLX0ZPTERFRDpjYXNlIFAuQkxPQ0tfTElURVJBTDpyZXR1cm4gc3x8aT94bihvLnZhbHVlLGUpOmNzKG8sZSx0LHIpO2Nhc2UgUC5RVU9URV9ET1VCTEU6cmV0dXJuIHlyKG8udmFsdWUsZSk7Y2FzZSBQLlFVT1RFX1NJTkdMRTpyZXR1cm4gQmkoby52YWx1ZSxlKTtjYXNlIFAuUExBSU46cmV0dXJuIFVjKG8sZSx0LHIpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxsPXUoYSk7aWYobD09PW51bGwpe2xldHtkZWZhdWx0S2V5VHlwZTpkLGRlZmF1bHRTdHJpbmdUeXBlOmh9PWUub3B0aW9ucyxwPXMmJmR8fGg7aWYobD11KHApLGw9PT1udWxsKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGVmYXVsdCBzdHJpbmcgdHlwZSAke3B9YCl9cmV0dXJuIGx9ZnVuY3Rpb24gaHMobixlKXtsZXQgdD1PYmplY3QuYXNzaWduKHtibG9ja1F1b3RlOiEwLGNvbW1lbnRTdHJpbmc6SGEsZGVmYXVsdEtleVR5cGU6bnVsbCxkZWZhdWx0U3RyaW5nVHlwZTpcXFwiUExBSU5cXFwiLGRpcmVjdGl2ZXM6bnVsbCxkb3VibGVRdW90ZWRBc0pTT046ITEsZG91YmxlUXVvdGVkTWluTXVsdGlMaW5lTGVuZ3RoOjQwLGZhbHNlU3RyOlxcXCJmYWxzZVxcXCIsZmxvd0NvbGxlY3Rpb25QYWRkaW5nOiEwLGluZGVudFNlcTohMCxsaW5lV2lkdGg6ODAsbWluQ29udGVudFdpZHRoOjIwLG51bGxTdHI6XFxcIm51bGxcXFwiLHNpbXBsZUtleXM6ITEsc2luZ2xlUXVvdGU6bnVsbCx0cnVlU3RyOlxcXCJ0cnVlXFxcIix2ZXJpZnlBbGlhc09yZGVyOiEwfSxuLnNjaGVtYS50b1N0cmluZ09wdGlvbnMsZSkscjtzd2l0Y2godC5jb2xsZWN0aW9uU3R5bGUpe2Nhc2VcXFwiYmxvY2tcXFwiOnI9ITE7YnJlYWs7Y2FzZVxcXCJmbG93XFxcIjpyPSEwO2JyZWFrO2RlZmF1bHQ6cj1udWxsfXJldHVybnthbmNob3JzOm5ldyBTZXQsZG9jOm4sZmxvd0NvbGxlY3Rpb25QYWRkaW5nOnQuZmxvd0NvbGxlY3Rpb25QYWRkaW5nP1xcXCIgXFxcIjpcXFwiXFxcIixpbmRlbnQ6XFxcIlxcXCIsaW5kZW50U3RlcDp0eXBlb2YgdC5pbmRlbnQ9PVxcXCJudW1iZXJcXFwiP1xcXCIgXFxcIi5yZXBlYXQodC5pbmRlbnQpOlxcXCIgIFxcXCIsaW5GbG93OnIsb3B0aW9uczp0fX1mdW5jdGlvbiBXYyhuLGUpe3ZhciBzLGksbyxhO2lmKGUudGFnKXtsZXQgdT1uLmZpbHRlcihsPT5sLnRhZz09PWUudGFnKTtpZih1Lmxlbmd0aD4wKXJldHVybihzPXUuZmluZChsPT5sLmZvcm1hdD09PWUuZm9ybWF0KSkhPW51bGw/czp1WzBdfWxldCB0LHI7aWYoVyhlKSl7cj1lLnZhbHVlO2xldCB1PW4uZmlsdGVyKGw9Pnt2YXIgZDtyZXR1cm4oZD1sLmlkZW50aWZ5KT09bnVsbD92b2lkIDA6ZC5jYWxsKGwscil9KTt0PShpPXUuZmluZChsPT5sLmZvcm1hdD09PWUuZm9ybWF0KSkhPW51bGw/aTp1LmZpbmQobD0+IWwuZm9ybWF0KX1lbHNlIHI9ZSx0PW4uZmluZCh1PT51Lm5vZGVDbGFzcyYmciBpbnN0YW5jZW9mIHUubm9kZUNsYXNzKTtpZighdCl7bGV0IHU9KGE9KG89cj09bnVsbD92b2lkIDA6ci5jb25zdHJ1Y3Rvcik9PW51bGw/dm9pZCAwOm8ubmFtZSkhPW51bGw/YTp0eXBlb2Ygcjt0aHJvdyBuZXcgRXJyb3IoYFRhZyBub3QgcmVzb2x2ZWQgZm9yICR7dX0gdmFsdWVgKX1yZXR1cm4gdH1mdW5jdGlvbiBIYyhuLGUse2FuY2hvcnM6dCxkb2M6cn0pe2lmKCFyLmRpcmVjdGl2ZXMpcmV0dXJuXFxcIlxcXCI7bGV0IHM9W10saT0oVyhuKXx8RyhuKSkmJm4uYW5jaG9yO2kmJm9zKGkpJiYodC5hZGQoaSkscy5wdXNoKGAmJHtpfWApKTtsZXQgbz1uLnRhZz9uLnRhZzplLmRlZmF1bHQ/bnVsbDplLnRhZztyZXR1cm4gbyYmcy5wdXNoKHIuZGlyZWN0aXZlcy50YWdTdHJpbmcobykpLHMuam9pbihcXFwiIFxcXCIpfWZ1bmN0aW9uIFR0KG4sZSx0LHIpe3ZhciB1LGw7aWYoSChuKSlyZXR1cm4gbi50b1N0cmluZyhlLHQscik7aWYoSmUobikpe2lmKGUuZG9jLmRpcmVjdGl2ZXMpcmV0dXJuIG4udG9TdHJpbmcoZSk7aWYoKHU9ZS5yZXNvbHZlZEFsaWFzZXMpIT1udWxsJiZ1LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3Qgc3RyaW5naWZ5IGNpcmN1bGFyIHN0cnVjdHVyZSB3aXRob3V0IGFsaWFzIG5vZGVzXFxcIik7ZS5yZXNvbHZlZEFsaWFzZXM/ZS5yZXNvbHZlZEFsaWFzZXMuYWRkKG4pOmUucmVzb2x2ZWRBbGlhc2VzPW5ldyBTZXQoW25dKSxuPW4ucmVzb2x2ZShlLmRvYyl9bGV0IHMsaT1LKG4pP246ZS5kb2MuY3JlYXRlTm9kZShuLHtvblRhZ09iajpkPT5zPWR9KTtzfHwocz1XYyhlLmRvYy5zY2hlbWEudGFncyxpKSk7bGV0IG89SGMoaSxzLGUpO28ubGVuZ3RoPjAmJihlLmluZGVudEF0U3RhcnQ9KChsPWUuaW5kZW50QXRTdGFydCkhPW51bGw/bDowKStvLmxlbmd0aCsxKTtsZXQgYT10eXBlb2Ygcy5zdHJpbmdpZnk9PVxcXCJmdW5jdGlvblxcXCI/cy5zdHJpbmdpZnkoaSxlLHQscik6VyhpKT96dChpLGUsdCxyKTppLnRvU3RyaW5nKGUsdCxyKTtyZXR1cm4gbz9XKGkpfHxhWzBdPT09XFxcIntcXFwifHxhWzBdPT09XFxcIltcXFwiP2Ake299ICR7YX1gOmAke299XFxuJHtlLmluZGVudH0ke2F9YDphfWZ1bmN0aW9uIEphKHtrZXk6bix2YWx1ZTplfSx0LHIscyl7dmFyIEMsTTtsZXR7YWxsTnVsbFZhbHVlczppLGRvYzpvLGluZGVudDphLGluZGVudFN0ZXA6dSxvcHRpb25zOntjb21tZW50U3RyaW5nOmwsaW5kZW50U2VxOmQsc2ltcGxlS2V5czpofX09dCxwPUsobikmJm4uY29tbWVudHx8bnVsbDtpZihoKXtpZihwKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywga2V5IG5vZGVzIGNhbm5vdCBoYXZlIGNvbW1lbnRzXFxcIik7aWYoRyhuKSl7bGV0IFY9XFxcIldpdGggc2ltcGxlIGtleXMsIGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYXMgYSBrZXkgdmFsdWVcXFwiO3Rocm93IG5ldyBFcnJvcihWKX19bGV0IGY9IWgmJighbnx8cCYmZT09bnVsbCYmIXQuaW5GbG93fHxHKG4pfHwoVyhuKT9uLnR5cGU9PT1QLkJMT0NLX0ZPTERFRHx8bi50eXBlPT09UC5CTE9DS19MSVRFUkFMOnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIikpO3Q9T2JqZWN0LmFzc2lnbih7fSx0LHthbGxOdWxsVmFsdWVzOiExLGltcGxpY2l0S2V5OiFmJiYoaHx8IWkpLGluZGVudDphK3V9KTtsZXQgRj0hMSxnPSExLHk9VHQobix0LCgpPT5GPSEwLCgpPT5nPSEwKTtpZighZiYmIXQuaW5GbG93JiZ5Lmxlbmd0aD4xMDI0KXtpZihoKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVyc1xcXCIpO2Y9ITB9aWYodC5pbkZsb3cpe2lmKGl8fGU9PW51bGwpcmV0dXJuIEYmJnImJnIoKSx5PT09XFxcIlxcXCI/XFxcIj9cXFwiOmY/YD8gJHt5fWA6eX1lbHNlIGlmKGkmJiFofHxlPT1udWxsJiZmKXJldHVybiB5PWA/ICR7eX1gLHAmJiFGP3krPWl0KHksdC5pbmRlbnQsbChwKSk6ZyYmcyYmcygpLHk7RiYmKHA9bnVsbCksZj8ocCYmKHkrPWl0KHksdC5pbmRlbnQsbChwKSkpLHk9YD8gJHt5fVxcbiR7YX06YCk6KHk9YCR7eX06YCxwJiYoeSs9aXQoeSx0LmluZGVudCxsKHApKSkpO2xldCBTLE8sdjtLKGUpPyhTPSEhZS5zcGFjZUJlZm9yZSxPPWUuY29tbWVudEJlZm9yZSx2PWUuY29tbWVudCk6KFM9ITEsTz1udWxsLHY9bnVsbCxlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJihlPW8uY3JlYXRlTm9kZShlKSkpLHQuaW1wbGljaXRLZXk9ITEsIWYmJiFwJiZXKGUpJiYodC5pbmRlbnRBdFN0YXJ0PXkubGVuZ3RoKzEpLGc9ITEsIWQmJnUubGVuZ3RoPj0yJiYhdC5pbkZsb3cmJiFmJiZZZShlKSYmIWUuZmxvdyYmIWUudGFnJiYhZS5hbmNob3ImJih0LmluZGVudD10LmluZGVudC5zdWJzdHJpbmcoMikpO2xldCBEPSExLHc9VHQoZSx0LCgpPT5EPSEwLCgpPT5nPSEwKSxUPVxcXCIgXFxcIjtpZihwfHxTfHxPKXtpZihUPVM/YFxcbmA6XFxcIlxcXCIsTyl7bGV0IFY9bChPKTtUKz1gXFxuJHskZShWLHQuaW5kZW50KX1gfXc9PT1cXFwiXFxcIiYmIXQuaW5GbG93P1Q9PT1gXFxuYCYmKFQ9YFxcblxcbmApOlQrPWBcXG4ke3QuaW5kZW50fWB9ZWxzZSBpZighZiYmRyhlKSl7bGV0IFY9d1swXSxqPXcuaW5kZXhPZihgXFxuYCksej1qIT09LTEscmU9KE09KEM9dC5pbkZsb3cpIT1udWxsP0M6ZS5mbG93KSE9bnVsbD9NOmUuaXRlbXMubGVuZ3RoPT09MDtpZih6fHwhcmUpe2xldCBsZT0hMTtpZih6JiYoVj09PVxcXCImXFxcInx8Vj09PVxcXCIhXFxcIikpe2xldCB4PXcuaW5kZXhPZihcXFwiIFxcXCIpO1Y9PT1cXFwiJlxcXCImJnghPT0tMSYmeDxqJiZ3W3grMV09PT1cXFwiIVxcXCImJih4PXcuaW5kZXhPZihcXFwiIFxcXCIseCsxKSksKHg9PT0tMXx8ajx4KSYmKGxlPSEwKX1sZXx8KFQ9YFxcbiR7dC5pbmRlbnR9YCl9fWVsc2Uodz09PVxcXCJcXFwifHx3WzBdPT09YFxcbmApJiYoVD1cXFwiXFxcIik7cmV0dXJuIHkrPVQrdyx0LmluRmxvdz9EJiZyJiZyKCk6diYmIUQ/eSs9aXQoeSx0LmluZGVudCxsKHYpKTpnJiZzJiZzKCkseX1mdW5jdGlvbiBwcyhuLGUpeyhuPT09XFxcImRlYnVnXFxcInx8bj09PVxcXCJ3YXJuXFxcIikmJih0eXBlb2YgcHJvY2VzcyE9XFxcInVuZGVmaW5lZFxcXCImJnByb2Nlc3MuZW1pdFdhcm5pbmc/cHJvY2Vzcy5lbWl0V2FybmluZyhlKTpjb25zb2xlLndhcm4oZSkpfXZhciB6YT1cXFwiPDxcXFwiO2Z1bmN0aW9uIG1zKG4sZSx7a2V5OnQsdmFsdWU6cn0pe2lmKG4hPW51bGwmJm4uZG9jLnNjaGVtYS5tZXJnZSYmS2ModCkpaWYocj1KZShyKT9yLnJlc29sdmUobi5kb2MpOnIsWWUocikpZm9yKGxldCBzIG9mIHIuaXRlbXMpJGkobixlLHMpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHMgb2YgcikkaShuLGUscyk7ZWxzZSAkaShuLGUscik7ZWxzZXtsZXQgcz1tZSh0LFxcXCJcXFwiLG4pO2lmKGUgaW5zdGFuY2VvZiBNYXApZS5zZXQocyxtZShyLHMsbikpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFNldCllLmFkZChzKTtlbHNle2xldCBpPUpjKHQscyxuKSxvPW1lKHIsaSxuKTtpIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7dmFsdWU6byx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbaV09b319cmV0dXJuIGV9dmFyIEtjPW49Pm49PT16YXx8VyhuKSYmbi52YWx1ZT09PXphJiYoIW4udHlwZXx8bi50eXBlPT09UC5QTEFJTik7ZnVuY3Rpb24gJGkobixlLHQpe2xldCByPW4mJkplKHQpP3QucmVzb2x2ZShuLmRvYyk6dDtpZighemUocikpdGhyb3cgbmV3IEVycm9yKFxcXCJNZXJnZSBzb3VyY2VzIG11c3QgYmUgbWFwcyBvciBtYXAgYWxpYXNlc1xcXCIpO2xldCBzPXIudG9KU09OKG51bGwsbixNYXApO2ZvcihsZXRbaSxvXW9mIHMpZSBpbnN0YW5jZW9mIE1hcD9lLmhhcyhpKXx8ZS5zZXQoaSxvKTplIGluc3RhbmNlb2YgU2V0P2UuYWRkKGkpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLHt2YWx1ZTpvLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7cmV0dXJuIGV9ZnVuY3Rpb24gSmMobixlLHQpe2lmKGU9PT1udWxsKXJldHVyblxcXCJcXFwiO2lmKHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIilyZXR1cm4gU3RyaW5nKGUpO2lmKEsobikmJih0IT1udWxsJiZ0LmRvYykpe2xldCByPWhzKHQuZG9jLHt9KTtyLmFuY2hvcnM9bmV3IFNldDtmb3IobGV0IGkgb2YgdC5hbmNob3JzLmtleXMoKSlyLmFuY2hvcnMuYWRkKGkuYW5jaG9yKTtyLmluRmxvdz0hMCxyLmluU3RyaW5naWZ5S2V5PSEwO2xldCBzPW4udG9TdHJpbmcocik7aWYoIXQubWFwS2V5V2FybmVkKXtsZXQgaT1KU09OLnN0cmluZ2lmeShzKTtpLmxlbmd0aD40MCYmKGk9aS5zdWJzdHJpbmcoMCwzNikrJy4uLlxcXCInKSxwcyh0LmRvYy5vcHRpb25zLmxvZ0xldmVsLGBLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gSlMgT2JqZWN0IHJlc3RyaWN0aW9uczogJHtpfS4gU2V0IG1hcEFzTWFwOiB0cnVlIHRvIHVzZSBvYmplY3Qga2V5cy5gKSx0Lm1hcEtleVdhcm5lZD0hMH1yZXR1cm4gc31yZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9ZnVuY3Rpb24gT24obixlLHQpe2xldCByPXd0KG4sdm9pZCAwLHQpLHM9d3QoZSx2b2lkIDAsdCk7cmV0dXJuIG5ldyBzZShyLHMpfXZhciBzZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsa2Use3ZhbHVlOkxpfSksdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXR9Y2xvbmUoZSl7bGV0e2tleTp0LHZhbHVlOnJ9PXRoaXM7cmV0dXJuIEsodCkmJih0PXQuY2xvbmUoZSkpLEsocikmJihyPXIuY2xvbmUoZSkpLG5ldyBzZSh0LHIpfXRvSlNPTihlLHQpe2xldCByPXQhPW51bGwmJnQubWFwQXNNYXA/bmV3IE1hcDp7fTtyZXR1cm4gbXModCxyLHRoaXMpfXRvU3RyaW5nKGUsdCxyKXtyZXR1cm4gZSE9bnVsbCYmZS5kb2M/SmEodGhpcyxlLHQscik6SlNPTi5zdHJpbmdpZnkodGhpcyl9fTtmdW5jdGlvbiB5cyhuLGUsdCl7dmFyIGk7cmV0dXJuKCgoaT1lLmluRmxvdykhPW51bGw/aTpuLmZsb3cpP1ljOnpjKShuLGUsdCl9ZnVuY3Rpb24gemMoe2NvbW1lbnQ6bixpdGVtczplfSx0LHtibG9ja0l0ZW1QcmVmaXg6cixmbG93Q2hhcnM6cyxpdGVtSW5kZW50Omksb25DaG9tcEtlZXA6byxvbkNvbW1lbnQ6YX0pe2xldHtpbmRlbnQ6dSxvcHRpb25zOntjb21tZW50U3RyaW5nOmx9fT10LGQ9T2JqZWN0LmFzc2lnbih7fSx0LHtpbmRlbnQ6aSx0eXBlOm51bGx9KSxoPSExLHA9W107Zm9yKGxldCBGPTA7RjxlLmxlbmd0aDsrK0Ype2xldCBnPWVbRl0seT1udWxsO2lmKEsoZykpIWgmJmcuc3BhY2VCZWZvcmUmJnAucHVzaChcXFwiXFxcIiksRHModCxwLGcuY29tbWVudEJlZm9yZSxoKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihIKGcpKXtsZXQgTz1LKGcua2V5KT9nLmtleTpudWxsO08mJighaCYmTy5zcGFjZUJlZm9yZSYmcC5wdXNoKFxcXCJcXFwiKSxEcyh0LHAsTy5jb21tZW50QmVmb3JlLGgpKX1oPSExO2xldCBTPVR0KGcsZCwoKT0+eT1udWxsLCgpPT5oPSEwKTt5JiYoUys9aXQoUyxpLGwoeSkpKSxoJiZ5JiYoaD0hMSkscC5wdXNoKHIrUyl9bGV0IGY7aWYocC5sZW5ndGg9PT0wKWY9cy5zdGFydCtzLmVuZDtlbHNle2Y9cFswXTtmb3IobGV0IEY9MTtGPHAubGVuZ3RoOysrRil7bGV0IGc9cFtGXTtmKz1nP2BcXG4ke3V9JHtnfWA6YFxcbmB9fXJldHVybiBuPyhmKz1gXFxuYCskZShsKG4pLHUpLGEmJmEoKSk6aCYmbyYmbygpLGZ9ZnVuY3Rpb24gWWMoe2l0ZW1zOm59LGUse2Zsb3dDaGFyczp0LGl0ZW1JbmRlbnQ6cn0pe2xldHtpbmRlbnQ6cyxpbmRlbnRTdGVwOmksZmxvd0NvbGxlY3Rpb25QYWRkaW5nOm8sb3B0aW9uczp7Y29tbWVudFN0cmluZzphfX09ZTtyKz1pO2xldCB1PU9iamVjdC5hc3NpZ24oe30sZSx7aW5kZW50OnIsaW5GbG93OiEwLHR5cGU6bnVsbH0pLGw9ITEsZD0wLGg9W107Zm9yKGxldCBGPTA7RjxuLmxlbmd0aDsrK0Ype2xldCBnPW5bRl0seT1udWxsO2lmKEsoZykpZy5zcGFjZUJlZm9yZSYmaC5wdXNoKFxcXCJcXFwiKSxEcyhlLGgsZy5jb21tZW50QmVmb3JlLCExKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihIKGcpKXtsZXQgTz1LKGcua2V5KT9nLmtleTpudWxsO08mJihPLnNwYWNlQmVmb3JlJiZoLnB1c2goXFxcIlxcXCIpLERzKGUsaCxPLmNvbW1lbnRCZWZvcmUsITEpLE8uY29tbWVudCYmKGw9ITApKTtsZXQgdj1LKGcudmFsdWUpP2cudmFsdWU6bnVsbDt2Pyh2LmNvbW1lbnQmJih5PXYuY29tbWVudCksdi5jb21tZW50QmVmb3JlJiYobD0hMCkpOmcudmFsdWU9PW51bGwmJihPIT1udWxsJiZPLmNvbW1lbnQpJiYoeT1PLmNvbW1lbnQpfXkmJihsPSEwKTtsZXQgUz1UdChnLHUsKCk9Pnk9bnVsbCk7RjxuLmxlbmd0aC0xJiYoUys9XFxcIixcXFwiKSx5JiYoUys9aXQoUyxyLGEoeSkpKSwhbCYmKGgubGVuZ3RoPmR8fFMuaW5jbHVkZXMoYFxcbmApKSYmKGw9ITApLGgucHVzaChTKSxkPWgubGVuZ3RofWxldHtzdGFydDpwLGVuZDpmfT10O2lmKGgubGVuZ3RoPT09MClyZXR1cm4gcCtmO2lmKCFsKXtsZXQgRj1oLnJlZHVjZSgoZyx5KT0+Zyt5Lmxlbmd0aCsyLDIpO2w9ZS5vcHRpb25zLmxpbmVXaWR0aD4wJiZGPmUub3B0aW9ucy5saW5lV2lkdGh9aWYobCl7bGV0IEY9cDtmb3IobGV0IGcgb2YgaClGKz1nP2BcXG4ke2l9JHtzfSR7Z31gOmBcXG5gO3JldHVybmAke0Z9XFxuJHtzfSR7Zn1gfWVsc2UgcmV0dXJuYCR7cH0ke299JHtoLmpvaW4oXFxcIiBcXFwiKX0ke299JHtmfWB9ZnVuY3Rpb24gRHMoe2luZGVudDpuLG9wdGlvbnM6e2NvbW1lbnRTdHJpbmc6ZX19LHQscixzKXtpZihyJiZzJiYocj1yLnJlcGxhY2UoL15cXFxcbisvLFxcXCJcXFwiKSkscil7bGV0IGk9JGUoZShyKSxuKTt0LnB1c2goaS50cmltU3RhcnQoKSl9fWZ1bmN0aW9uIE50KG4sZSl7bGV0IHQ9VyhlKT9lLnZhbHVlOmU7Zm9yKGxldCByIG9mIG4paWYoSChyKSYmKHIua2V5PT09ZXx8ci5rZXk9PT10fHxXKHIua2V5KSYmci5rZXkudmFsdWU9PT10KSlyZXR1cm4gcn12YXIgdWU9Y2xhc3MgZXh0ZW5kcyBKdHtzdGF0aWMgZ2V0IHRhZ05hbWUoKXtyZXR1cm5cXFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXFxcIn1jb25zdHJ1Y3RvcihlKXtzdXBlcihLZSxlKSx0aGlzLml0ZW1zPVtdfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXR7a2VlcFVuZGVmaW5lZDpzLHJlcGxhY2VyOml9PXIsbz1uZXcgdGhpcyhlKSxhPSh1LGwpPT57aWYodHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCIpbD1pLmNhbGwodCx1LGwpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSYmIWkuaW5jbHVkZXModSkpcmV0dXJuOyhsIT09dm9pZCAwfHxzKSYmby5pdGVtcy5wdXNoKE9uKHUsbCxyKSl9O2lmKHQgaW5zdGFuY2VvZiBNYXApZm9yKGxldFt1LGxdb2YgdClhKHUsbCk7ZWxzZSBpZih0JiZ0eXBlb2YgdD09XFxcIm9iamVjdFxcXCIpZm9yKGxldCB1IG9mIE9iamVjdC5rZXlzKHQpKWEodSx0W3VdKTtyZXR1cm4gdHlwZW9mIGUuc29ydE1hcEVudHJpZXM9PVxcXCJmdW5jdGlvblxcXCImJm8uaXRlbXMuc29ydChlLnNvcnRNYXBFbnRyaWVzKSxvfWFkZChlLHQpe3ZhciBvO2xldCByO0goZSk/cj1lOiFlfHx0eXBlb2YgZSE9XFxcIm9iamVjdFxcXCJ8fCEoXFxcImtleVxcXCJpbiBlKT9yPW5ldyBzZShlLGU9PW51bGw/dm9pZCAwOmUudmFsdWUpOnI9bmV3IHNlKGUua2V5LGUudmFsdWUpO2xldCBzPU50KHRoaXMuaXRlbXMsci5rZXkpLGk9KG89dGhpcy5zY2hlbWEpPT1udWxsP3ZvaWQgMDpvLnNvcnRNYXBFbnRyaWVzO2lmKHMpe2lmKCF0KXRocm93IG5ldyBFcnJvcihgS2V5ICR7ci5rZXl9IGFscmVhZHkgc2V0YCk7VyhzLnZhbHVlKSYmdXMoci52YWx1ZSk/cy52YWx1ZS52YWx1ZT1yLnZhbHVlOnMudmFsdWU9ci52YWx1ZX1lbHNlIGlmKGkpe2xldCBhPXRoaXMuaXRlbXMuZmluZEluZGV4KHU9Pmkocix1KTwwKTthPT09LTE/dGhpcy5pdGVtcy5wdXNoKHIpOnRoaXMuaXRlbXMuc3BsaWNlKGEsMCxyKX1lbHNlIHRoaXMuaXRlbXMucHVzaChyKX1kZWxldGUoZSl7bGV0IHQ9TnQodGhpcy5pdGVtcyxlKTtyZXR1cm4gdD90aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmluZGV4T2YodCksMSkubGVuZ3RoPjA6ITF9Z2V0KGUsdCl7dmFyIGk7bGV0IHI9TnQodGhpcy5pdGVtcyxlKSxzPXI9PW51bGw/dm9pZCAwOnIudmFsdWU7cmV0dXJuKGk9IXQmJlcocyk/cy52YWx1ZTpzKSE9bnVsbD9pOnZvaWQgMH1oYXMoZSl7cmV0dXJuISFOdCh0aGlzLml0ZW1zLGUpfXNldChlLHQpe3RoaXMuYWRkKG5ldyBzZShlLHQpLCEwKX10b0pTT04oZSx0LHIpe2xldCBzPXI/bmV3IHI6dCE9bnVsbCYmdC5tYXBBc01hcD9uZXcgTWFwOnt9O3QhPW51bGwmJnQub25DcmVhdGUmJnQub25DcmVhdGUocyk7Zm9yKGxldCBpIG9mIHRoaXMuaXRlbXMpbXModCxzLGkpO3JldHVybiBzfXRvU3RyaW5nKGUsdCxyKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7Zm9yKGxldCBzIG9mIHRoaXMuaXRlbXMpaWYoIUgocykpdGhyb3cgbmV3IEVycm9yKGBNYXAgaXRlbXMgbXVzdCBhbGwgYmUgcGFpcnM7IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkocyl9IGluc3RlYWRgKTtyZXR1cm4hZS5hbGxOdWxsVmFsdWVzJiZ0aGlzLmhhc0FsbE51bGxWYWx1ZXMoITEpJiYoZT1PYmplY3QuYXNzaWduKHt9LGUse2FsbE51bGxWYWx1ZXM6ITB9KSkseXModGhpcyxlLHtibG9ja0l0ZW1QcmVmaXg6XFxcIlxcXCIsZmxvd0NoYXJzOntzdGFydDpcXFwie1xcXCIsZW5kOlxcXCJ9XFxcIn0saXRlbUluZGVudDplLmluZGVudHx8XFxcIlxcXCIsb25DaG9tcEtlZXA6cixvbkNvbW1lbnQ6dH0pfX07dmFyIFplPXtjb2xsZWN0aW9uOlxcXCJtYXBcXFwiLGRlZmF1bHQ6ITAsbm9kZUNsYXNzOnVlLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXFxcIixyZXNvbHZlKG4sZSl7cmV0dXJuIHplKG4pfHxlKFxcXCJFeHBlY3RlZCBhIG1hcHBpbmcgZm9yIHRoaXMgdGFnXFxcIiksbn0sY3JlYXRlTm9kZToobixlLHQpPT51ZS5mcm9tKG4sZSx0KX07dmFyIHdlPWNsYXNzIGV4dGVuZHMgSnR7c3RhdGljIGdldCB0YWdOYW1lKCl7cmV0dXJuXFxcInRhZzp5YW1sLm9yZywyMDAyOnNlcVxcXCJ9Y29uc3RydWN0b3IoZSl7c3VwZXIoYnQsZSksdGhpcy5pdGVtcz1bXX1hZGQoZSl7dGhpcy5pdGVtcy5wdXNoKGUpfWRlbGV0ZShlKXtsZXQgdD1ncyhlKTtyZXR1cm4gdHlwZW9mIHQhPVxcXCJudW1iZXJcXFwiPyExOnRoaXMuaXRlbXMuc3BsaWNlKHQsMSkubGVuZ3RoPjB9Z2V0KGUsdCl7bGV0IHI9Z3MoZSk7aWYodHlwZW9mIHIhPVxcXCJudW1iZXJcXFwiKXJldHVybjtsZXQgcz10aGlzLml0ZW1zW3JdO3JldHVybiF0JiZXKHMpP3MudmFsdWU6c31oYXMoZSl7bGV0IHQ9Z3MoZSk7cmV0dXJuIHR5cGVvZiB0PT1cXFwibnVtYmVyXFxcIiYmdDx0aGlzLml0ZW1zLmxlbmd0aH1zZXQoZSx0KXtsZXQgcj1ncyhlKTtpZih0eXBlb2YgciE9XFxcIm51bWJlclxcXCIpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIGluZGV4LCBub3QgJHtlfS5gKTtsZXQgcz10aGlzLml0ZW1zW3JdO1cocykmJnVzKHQpP3MudmFsdWU9dDp0aGlzLml0ZW1zW3JdPXR9dG9KU09OKGUsdCl7bGV0IHI9W107dCE9bnVsbCYmdC5vbkNyZWF0ZSYmdC5vbkNyZWF0ZShyKTtsZXQgcz0wO2ZvcihsZXQgaSBvZiB0aGlzLml0ZW1zKXIucHVzaChtZShpLFN0cmluZyhzKyspLHQpKTtyZXR1cm4gcn10b1N0cmluZyhlLHQscil7cmV0dXJuIGU/eXModGhpcyxlLHtibG9ja0l0ZW1QcmVmaXg6XFxcIi0gXFxcIixmbG93Q2hhcnM6e3N0YXJ0OlxcXCJbXFxcIixlbmQ6XFxcIl1cXFwifSxpdGVtSW5kZW50OihlLmluZGVudHx8XFxcIlxcXCIpK1xcXCIgIFxcXCIsb25DaG9tcEtlZXA6cixvbkNvbW1lbnQ6dH0pOkpTT04uc3RyaW5naWZ5KHRoaXMpfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXR7cmVwbGFjZXI6c309cixpPW5ldyB0aGlzKGUpO2lmKHQmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpe2xldCBvPTA7Zm9yKGxldCBhIG9mIHQpe2lmKHR5cGVvZiBzPT1cXFwiZnVuY3Rpb25cXFwiKXtsZXQgdT10IGluc3RhbmNlb2YgU2V0P2E6U3RyaW5nKG8rKyk7YT1zLmNhbGwodCx1LGEpfWkuaXRlbXMucHVzaCh3dChhLHZvaWQgMCxyKSl9fXJldHVybiBpfX07ZnVuY3Rpb24gZ3Mobil7bGV0IGU9VyhuKT9uLnZhbHVlOm47cmV0dXJuIGUmJnR5cGVvZiBlPT1cXFwic3RyaW5nXFxcIiYmKGU9TnVtYmVyKGUpKSx0eXBlb2YgZT09XFxcIm51bWJlclxcXCImJk51bWJlci5pc0ludGVnZXIoZSkmJmU+PTA/ZTpudWxsfXZhciBRZT17Y29sbGVjdGlvbjpcXFwic2VxXFxcIixkZWZhdWx0OiEwLG5vZGVDbGFzczp3ZSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOnNlcVxcXCIscmVzb2x2ZShuLGUpe3JldHVybiBZZShuKXx8ZShcXFwiRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWdcXFwiKSxufSxjcmVhdGVOb2RlOihuLGUsdCk9PndlLmZyb20obixlLHQpfTt2YXIgTHQ9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwic3RyaW5nXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIixyZXNvbHZlOm49Pm4sc3RyaW5naWZ5KG4sZSx0LHIpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2FjdHVhbFN0cmluZzohMH0sZSksenQobixlLHQscil9fTt2YXIgWXQ9e2lkZW50aWZ5Om49Pm49PW51bGwsY3JlYXRlTm9kZTooKT0+bmV3IFAobnVsbCksZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOm51bGxcXFwiLHRlc3Q6L14oPzp+fFtObl11bGx8TlVMTCk/JC8scmVzb2x2ZTooKT0+bmV3IFAobnVsbCksc3RyaW5naWZ5Oih7c291cmNlOm59LGUpPT50eXBlb2Ygbj09XFxcInN0cmluZ1xcXCImJll0LnRlc3QudGVzdChuKT9uOmUub3B0aW9ucy5udWxsU3RyfTt2YXIgZ3I9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwiYm9vbGVhblxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L14oPzpbVHRdcnVlfFRSVUV8W0ZmXWFsc2V8RkFMU0UpJC8scmVzb2x2ZTpuPT5uZXcgUChuWzBdPT09XFxcInRcXFwifHxuWzBdPT09XFxcIlRcXFwiKSxzdHJpbmdpZnkoe3NvdXJjZTpuLHZhbHVlOmV9LHQpe2lmKG4mJmdyLnRlc3QudGVzdChuKSl7bGV0IHI9blswXT09PVxcXCJ0XFxcInx8blswXT09PVxcXCJUXFxcIjtpZihlPT09cilyZXR1cm4gbn1yZXR1cm4gZT90Lm9wdGlvbnMudHJ1ZVN0cjp0Lm9wdGlvbnMuZmFsc2VTdHJ9fTtmdW5jdGlvbiBUZSh7Zm9ybWF0Om4sbWluRnJhY3Rpb25EaWdpdHM6ZSx0YWc6dCx2YWx1ZTpyfSl7aWYodHlwZW9mIHI9PVxcXCJiaWdpbnRcXFwiKXJldHVybiBTdHJpbmcocik7bGV0IHM9dHlwZW9mIHI9PVxcXCJudW1iZXJcXFwiP3I6TnVtYmVyKHIpO2lmKCFpc0Zpbml0ZShzKSlyZXR1cm4gaXNOYU4ocyk/XFxcIi5uYW5cXFwiOnM8MD9cXFwiLS5pbmZcXFwiOlxcXCIuaW5mXFxcIjtsZXQgaT1KU09OLnN0cmluZ2lmeShyKTtpZighbiYmZSYmKCF0fHx0PT09XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIikmJi9eXFxcXGQvLnRlc3QoaSkpe2xldCBvPWkuaW5kZXhPZihcXFwiLlxcXCIpO288MCYmKG89aS5sZW5ndGgsaSs9XFxcIi5cXFwiKTtsZXQgYT1lLShpLmxlbmd0aC1vLTEpO2Zvcig7YS0tID4wOylpKz1cXFwiMFxcXCJ9cmV0dXJuIGl9dmFyIGJzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eKD86Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GfG5hbnxOYU58TkFOKSkkLyxyZXNvbHZlOm49Pm4uc2xpY2UoLTMpLnRvTG93ZXJDYXNlKCk9PT1cXFwibmFuXFxcIj9OYU46blswXT09PVxcXCItXFxcIj9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHN0cmluZ2lmeTpUZX0sRXM9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLGZvcm1hdDpcXFwiRVhQXFxcIix0ZXN0Oi9eWy0rXT8oPzpcXFxcLlswLTldK3xbMC05XSsoPzpcXFxcLlswLTldKik/KVtlRV1bLStdP1swLTldKyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuKSxzdHJpbmdpZnkobil7bGV0IGU9TnVtYmVyKG4udmFsdWUpO3JldHVybiBpc0Zpbml0ZShlKT9lLnRvRXhwb25lbnRpYWwoKTpUZShuKX19LEZzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eWy0rXT8oPzpcXFxcLlswLTldK3xbMC05XStcXFxcLlswLTldKikkLyxyZXNvbHZlKG4pe2xldCBlPW5ldyBQKHBhcnNlRmxvYXQobikpLHQ9bi5pbmRleE9mKFxcXCIuXFxcIik7cmV0dXJuIHQhPT0tMSYmbltuLmxlbmd0aC0xXT09PVxcXCIwXFxcIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9bi5sZW5ndGgtdC0xKSxlfSxzdHJpbmdpZnk6VGV9O3ZhciB3cz1uPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobiksUmk9KG4sZSx0LHtpbnRBc0JpZ0ludDpyfSk9PnI/QmlnSW50KG4pOnBhcnNlSW50KG4uc3Vic3RyaW5nKGUpLHQpO2Z1bmN0aW9uIFlhKG4sZSx0KXtsZXR7dmFsdWU6cn09bjtyZXR1cm4gd3MocikmJnI+PTA/dCtyLnRvU3RyaW5nKGUpOlRlKG4pfXZhciBUcz17aWRlbnRpZnk6bj0+d3MobikmJm4+PTAsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJPQ1RcXFwiLHRlc3Q6L14wb1swLTddKyQvLHJlc29sdmU6KG4sZSx0KT0+UmkobiwyLDgsdCksc3RyaW5naWZ5Om49PllhKG4sOCxcXFwiMG9cXFwiKX0sU3M9e2lkZW50aWZ5OndzLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLHRlc3Q6L15bLStdP1swLTldKyQvLHJlc29sdmU6KG4sZSx0KT0+UmkobiwwLDEwLHQpLHN0cmluZ2lmeTpUZX0sa3M9e2lkZW50aWZ5Om49PndzKG4pJiZuPj0wLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiSEVYXFxcIix0ZXN0Oi9eMHhbMC05YS1mQS1GXSskLyxyZXNvbHZlOihuLGUsdCk9PlJpKG4sMiwxNix0KSxzdHJpbmdpZnk6bj0+WWEobiwxNixcXFwiMHhcXFwiKX07dmFyIEdhPVtaZSxRZSxMdCxZdCxncixUcyxTcyxrcyxicyxFcyxGc107ZnVuY3Rpb24gWmEobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwiYmlnaW50XFxcInx8TnVtYmVyLmlzSW50ZWdlcihuKX12YXIgQ3M9KHt2YWx1ZTpufSk9PkpTT04uc3RyaW5naWZ5KG4pLEdjPVt7aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcXFwiLHJlc29sdmU6bj0+bixzdHJpbmdpZnk6Q3N9LHtpZGVudGlmeTpuPT5uPT1udWxsLGNyZWF0ZU5vZGU6KCk9Pm5ldyBQKG51bGwpLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsXFxcIix0ZXN0Oi9ebnVsbCQvLHJlc29sdmU6KCk9Pm51bGwsc3RyaW5naWZ5OkNzfSx7aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJib29sZWFuXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6Ym9vbFxcXCIsdGVzdDovXnRydWV8ZmFsc2UkLyxyZXNvbHZlOm49Pm49PT1cXFwidHJ1ZVxcXCIsc3RyaW5naWZ5OkNzfSx7aWRlbnRpZnk6WmEsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsdGVzdDovXi0/KD86MHxbMS05XVswLTldKikkLyxyZXNvbHZlOihuLGUse2ludEFzQmlnSW50OnR9KT0+dD9CaWdJbnQobik6cGFyc2VJbnQobiwxMCksc3RyaW5naWZ5Oih7dmFsdWU6bn0pPT5aYShuKT9uLnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkobil9LHtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eLT8oPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0qKT8oPzpbZUVdWy0rXT9bMC05XSspPyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuKSxzdHJpbmdpZnk6Q3N9XSxaYz17ZGVmYXVsdDohMCx0YWc6XFxcIlxcXCIsdGVzdDovXi8scmVzb2x2ZShuLGUpe3JldHVybiBlKGBVbnJlc29sdmVkIHBsYWluIHNjYWxhciAke0pTT04uc3RyaW5naWZ5KG4pfWApLG59fSxRYT1bWmUsUWVdLmNvbmNhdChHYyxaYyk7dmFyIGJyPXtpZGVudGlmeTpuPT5uIGluc3RhbmNlb2YgVWludDhBcnJheSxkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5XFxcIixyZXNvbHZlKG4sZSl7aWYodHlwZW9mIEJ1ZmZlcj09XFxcImZ1bmN0aW9uXFxcIilyZXR1cm4gQnVmZmVyLmZyb20obixcXFwiYmFzZTY0XFxcIik7aWYodHlwZW9mIGF0b2I9PVxcXCJmdW5jdGlvblxcXCIpe2xldCB0PWF0b2Iobi5yZXBsYWNlKC9bXFxcXG5cXFxccl0vZyxcXFwiXFxcIikpLHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7KytzKXJbc109dC5jaGFyQ29kZUF0KHMpO3JldHVybiByfWVsc2UgcmV0dXJuIGUoXFxcIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGJpbmFyeSB0YWdzOyBlaXRoZXIgQnVmZmVyIG9yIGF0b2IgaXMgcmVxdWlyZWRcXFwiKSxufSxzdHJpbmdpZnkoe2NvbW1lbnQ6bix0eXBlOmUsdmFsdWU6dH0scixzLGkpe2xldCBvPXQsYTtpZih0eXBlb2YgQnVmZmVyPT1cXFwiZnVuY3Rpb25cXFwiKWE9byBpbnN0YW5jZW9mIEJ1ZmZlcj9vLnRvU3RyaW5nKFxcXCJiYXNlNjRcXFwiKTpCdWZmZXIuZnJvbShvLmJ1ZmZlcikudG9TdHJpbmcoXFxcImJhc2U2NFxcXCIpO2Vsc2UgaWYodHlwZW9mIGJ0b2E9PVxcXCJmdW5jdGlvblxcXCIpe2xldCB1PVxcXCJcXFwiO2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7KytsKXUrPVN0cmluZy5mcm9tQ2hhckNvZGUob1tsXSk7YT1idG9hKHUpfWVsc2UgdGhyb3cgbmV3IEVycm9yKFxcXCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgd3JpdGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBidG9hIGlzIHJlcXVpcmVkXFxcIik7aWYoZXx8KGU9UC5CTE9DS19MSVRFUkFMKSxlIT09UC5RVU9URV9ET1VCTEUpe2xldCB1PU1hdGgubWF4KHIub3B0aW9ucy5saW5lV2lkdGgtci5pbmRlbnQubGVuZ3RoLHIub3B0aW9ucy5taW5Db250ZW50V2lkdGgpLGw9TWF0aC5jZWlsKGEubGVuZ3RoL3UpLGQ9bmV3IEFycmF5KGwpO2ZvcihsZXQgaD0wLHA9MDtoPGw7KytoLHArPXUpZFtoXT1hLnN1YnN0cihwLHUpO2E9ZC5qb2luKGU9PT1QLkJMT0NLX0xJVEVSQUw/YFxcbmA6XFxcIiBcXFwiKX1yZXR1cm4genQoe2NvbW1lbnQ6bix0eXBlOmUsdmFsdWU6YX0scixzLGkpfX07ZnVuY3Rpb24gamkobixlKXt2YXIgdDtpZihZZShuKSlmb3IobGV0IHI9MDtyPG4uaXRlbXMubGVuZ3RoOysrcil7bGV0IHM9bi5pdGVtc1tyXTtpZighSChzKSl7aWYoemUocykpe3MuaXRlbXMubGVuZ3RoPjEmJmUoXFxcIkVhY2ggcGFpciBtdXN0IGhhdmUgaXRzIG93biBzZXF1ZW5jZSBpbmRpY2F0b3JcXFwiKTtsZXQgaT1zLml0ZW1zWzBdfHxuZXcgc2UobmV3IFAobnVsbCkpO2lmKHMuY29tbWVudEJlZm9yZSYmKGkua2V5LmNvbW1lbnRCZWZvcmU9aS5rZXkuY29tbWVudEJlZm9yZT9gJHtzLmNvbW1lbnRCZWZvcmV9XFxuJHtpLmtleS5jb21tZW50QmVmb3JlfWA6cy5jb21tZW50QmVmb3JlKSxzLmNvbW1lbnQpe2xldCBvPSh0PWkudmFsdWUpIT1udWxsP3Q6aS5rZXk7by5jb21tZW50PW8uY29tbWVudD9gJHtzLmNvbW1lbnR9XFxuJHtvLmNvbW1lbnR9YDpzLmNvbW1lbnR9cz1pfW4uaXRlbXNbcl09SChzKT9zOm5ldyBzZShzKX19ZWxzZSBlKFxcXCJFeHBlY3RlZCBhIHNlcXVlbmNlIGZvciB0aGlzIHRhZ1xcXCIpO3JldHVybiBufWZ1bmN0aW9uIFZpKG4sZSx0KXtsZXR7cmVwbGFjZXI6cn09dCxzPW5ldyB3ZShuKTtzLnRhZz1cXFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcXFwiO2xldCBpPTA7aWYoZSYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlmb3IobGV0IG8gb2YgZSl7dHlwZW9mIHI9PVxcXCJmdW5jdGlvblxcXCImJihvPXIuY2FsbChlLFN0cmluZyhpKyspLG8pKTtsZXQgYSx1O2lmKEFycmF5LmlzQXJyYXkobykpaWYoby5sZW5ndGg9PT0yKWE9b1swXSx1PW9bMV07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBba2V5LCB2YWx1ZV0gdHVwbGU6ICR7b31gKTtlbHNlIGlmKG8mJm8gaW5zdGFuY2VvZiBPYmplY3Qpe2xldCBsPU9iamVjdC5rZXlzKG8pO2lmKGwubGVuZ3RoPT09MSlhPWxbMF0sdT1vW2FdO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdHVwbGUgd2l0aCBvbmUga2V5LCBub3QgJHtsLmxlbmd0aH0ga2V5c2ApfWVsc2UgYT1vO3MuaXRlbXMucHVzaChPbihhLHUsdCkpfXJldHVybiBzfXZhciBFcj17Y29sbGVjdGlvbjpcXFwic2VxXFxcIixkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcXFwiLHJlc29sdmU6amksY3JlYXRlTm9kZTpWaX07dmFyIEF0PWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkPXVlLnByb3RvdHlwZS5hZGQuYmluZCh0aGlzKSx0aGlzLmRlbGV0ZT11ZS5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyksdGhpcy5nZXQ9dWUucHJvdG90eXBlLmdldC5iaW5kKHRoaXMpLHRoaXMuaGFzPXVlLnByb3RvdHlwZS5oYXMuYmluZCh0aGlzKSx0aGlzLnNldD11ZS5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyksdGhpcy50YWc9QXQudGFnfXRvSlNPTihlLHQpe2lmKCF0KXJldHVybiBzdXBlci50b0pTT04oZSk7bGV0IHI9bmV3IE1hcDt0IT1udWxsJiZ0Lm9uQ3JlYXRlJiZ0Lm9uQ3JlYXRlKHIpO2ZvcihsZXQgcyBvZiB0aGlzLml0ZW1zKXtsZXQgaSxvO2lmKEgocyk/KGk9bWUocy5rZXksXFxcIlxcXCIsdCksbz1tZShzLnZhbHVlLGksdCkpOmk9bWUocyxcXFwiXFxcIix0KSxyLmhhcyhpKSl0aHJvdyBuZXcgRXJyb3IoXFxcIk9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzXFxcIik7ci5zZXQoaSxvKX1yZXR1cm4gcn1zdGF0aWMgZnJvbShlLHQscil7bGV0IHM9VmkoZSx0LHIpLGk9bmV3IHRoaXM7cmV0dXJuIGkuaXRlbXM9cy5pdGVtcyxpfX07QXQudGFnPVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXFxcIjt2YXIgRnI9e2NvbGxlY3Rpb246XFxcInNlcVxcXCIsaWRlbnRpZnk6bj0+biBpbnN0YW5jZW9mIE1hcCxub2RlQ2xhc3M6QXQsZGVmYXVsdDohMSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiLHJlc29sdmUobixlKXtsZXQgdD1qaShuLGUpLHI9W107Zm9yKGxldHtrZXk6c31vZiB0Lml0ZW1zKVcocykmJihyLmluY2x1ZGVzKHMudmFsdWUpP2UoYE9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzOiAke3MudmFsdWV9YCk6ci5wdXNoKHMudmFsdWUpKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQXQsdCl9LGNyZWF0ZU5vZGU6KG4sZSx0KT0+QXQuZnJvbShuLGUsdCl9O2Z1bmN0aW9uIFhhKHt2YWx1ZTpuLHNvdXJjZTplfSx0KXtyZXR1cm4gZSYmKG4/cWk6VWkpLnRlc3QudGVzdChlKT9lOm4/dC5vcHRpb25zLnRydWVTdHI6dC5vcHRpb25zLmZhbHNlU3RyfXZhciBxaT17aWRlbnRpZnk6bj0+bj09PSEwLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXFxcIix0ZXN0Oi9eKD86WXx5fFtZeV1lc3xZRVN8W1R0XXJ1ZXxUUlVFfFtPb11ufE9OKSQvLHJlc29sdmU6KCk9Pm5ldyBQKCEwKSxzdHJpbmdpZnk6WGF9LFVpPXtpZGVudGlmeTpuPT5uPT09ITEsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L14oPzpOfG58W05uXW98Tk98W0ZmXWFsc2V8RkFMU0V8W09vXWZmfE9GRikkLyxyZXNvbHZlOigpPT5uZXcgUCghMSksc3RyaW5naWZ5OlhhfTt2YXIgZXU9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLHRlc3Q6L15bLStdP1xcXFwuKD86aW5mfEluZnxJTkZ8bmFufE5hTnxOQU4pJC8scmVzb2x2ZTpuPT5uLnNsaWNlKC0zKS50b0xvd2VyQ2FzZSgpPT09XFxcIm5hblxcXCI/TmFOOm5bMF09PT1cXFwiLVxcXCI/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzdHJpbmdpZnk6VGV9LHR1PXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIixmb3JtYXQ6XFxcIkVYUFxcXCIsdGVzdDovXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcXFxcLlswLTlfXSopP1tlRV1bLStdP1swLTldKyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuLnJlcGxhY2UoL18vZyxcXFwiXFxcIikpLHN0cmluZ2lmeShuKXtsZXQgZT1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIGlzRmluaXRlKGUpP2UudG9FeHBvbmVudGlhbCgpOlRlKG4pfX0sbnU9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLHRlc3Q6L15bLStdPyg/OlswLTldWzAtOV9dKik/XFxcXC5bMC05X10qJC8scmVzb2x2ZShuKXtsZXQgZT1uZXcgUChwYXJzZUZsb2F0KG4ucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSkpLHQ9bi5pbmRleE9mKFxcXCIuXFxcIik7aWYodCE9PS0xKXtsZXQgcj1uLnN1YnN0cmluZyh0KzEpLnJlcGxhY2UoL18vZyxcXFwiXFxcIik7cltyLmxlbmd0aC0xXT09PVxcXCIwXFxcIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9ci5sZW5ndGgpfXJldHVybiBlfSxzdHJpbmdpZnk6VGV9O3ZhciB3cj1uPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobik7ZnVuY3Rpb24geHMobixlLHQse2ludEFzQmlnSW50OnJ9KXtsZXQgcz1uWzBdO2lmKChzPT09XFxcIi1cXFwifHxzPT09XFxcIitcXFwiKSYmKGUrPTEpLG49bi5zdWJzdHJpbmcoZSkucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSxyKXtzd2l0Y2godCl7Y2FzZSAyOm49YDBiJHtufWA7YnJlYWs7Y2FzZSA4Om49YDBvJHtufWA7YnJlYWs7Y2FzZSAxNjpuPWAweCR7bn1gO2JyZWFrfWxldCBvPUJpZ0ludChuKTtyZXR1cm4gcz09PVxcXCItXFxcIj9CaWdJbnQoLTEpKm86b31sZXQgaT1wYXJzZUludChuLHQpO3JldHVybiBzPT09XFxcIi1cXFwiPy0xKmk6aX1mdW5jdGlvbiBXaShuLGUsdCl7bGV0e3ZhbHVlOnJ9PW47aWYod3Iocikpe2xldCBzPXIudG9TdHJpbmcoZSk7cmV0dXJuIHI8MD9cXFwiLVxcXCIrdCtzLnN1YnN0cigxKTp0K3N9cmV0dXJuIFRlKG4pfXZhciBydT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJCSU5cXFwiLHRlc3Q6L15bLStdPzBiWzAtMV9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDIsdCksc3RyaW5naWZ5Om49PldpKG4sMixcXFwiMGJcXFwiKX0sc3U9e2lkZW50aWZ5OndyLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiT0NUXFxcIix0ZXN0Oi9eWy0rXT8wWzAtN19dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwxLDgsdCksc3RyaW5naWZ5Om49PldpKG4sOCxcXFwiMFxcXCIpfSxpdT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qJC8scmVzb2x2ZToobixlLHQpPT54cyhuLDAsMTAsdCksc3RyaW5naWZ5OlRlfSxvdT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJIRVhcXFwiLHRlc3Q6L15bLStdPzB4WzAtOWEtZkEtRl9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDE2LHQpLHN0cmluZ2lmeTpuPT5XaShuLDE2LFxcXCIweFxcXCIpfTt2YXIgTXQ9Y2xhc3MgZXh0ZW5kcyB1ZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnRhZz1NdC50YWd9YWRkKGUpe2xldCB0O0goZSk/dD1lOmUmJnR5cGVvZiBlPT1cXFwib2JqZWN0XFxcIiYmXFxcImtleVxcXCJpbiBlJiZcXFwidmFsdWVcXFwiaW4gZSYmZS52YWx1ZT09PW51bGw/dD1uZXcgc2UoZS5rZXksbnVsbCk6dD1uZXcgc2UoZSxudWxsKSxOdCh0aGlzLml0ZW1zLHQua2V5KXx8dGhpcy5pdGVtcy5wdXNoKHQpfWdldChlLHQpe2xldCByPU50KHRoaXMuaXRlbXMsZSk7cmV0dXJuIXQmJkgocik/VyhyLmtleSk/ci5rZXkudmFsdWU6ci5rZXk6cn1zZXQoZSx0KXtpZih0eXBlb2YgdCE9XFxcImJvb2xlYW5cXFwiKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZSBmb3Igc2V0KGtleSwgdmFsdWUpIGluIGEgWUFNTCBzZXQsIG5vdCAke3R5cGVvZiB0fWApO2xldCByPU50KHRoaXMuaXRlbXMsZSk7ciYmIXQ/dGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKHIpLDEpOiFyJiZ0JiZ0aGlzLml0ZW1zLnB1c2gobmV3IHNlKGUpKX10b0pTT04oZSx0KXtyZXR1cm4gc3VwZXIudG9KU09OKGUsdCxTZXQpfXRvU3RyaW5nKGUsdCxyKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7aWYodGhpcy5oYXNBbGxOdWxsVmFsdWVzKCEwKSlyZXR1cm4gc3VwZXIudG9TdHJpbmcoT2JqZWN0LmFzc2lnbih7fSxlLHthbGxOdWxsVmFsdWVzOiEwfSksdCxyKTt0aHJvdyBuZXcgRXJyb3IoXFxcIlNldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzXFxcIil9c3RhdGljIGZyb20oZSx0LHIpe2xldHtyZXBsYWNlcjpzfT1yLGk9bmV3IHRoaXMoZSk7aWYodCYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlmb3IobGV0IG8gb2YgdCl0eXBlb2Ygcz09XFxcImZ1bmN0aW9uXFxcIiYmKG89cy5jYWxsKHQsbyxvKSksaS5pdGVtcy5wdXNoKE9uKG8sbnVsbCxyKSk7cmV0dXJuIGl9fTtNdC50YWc9XFxcInRhZzp5YW1sLm9yZywyMDAyOnNldFxcXCI7dmFyIFRyPXtjb2xsZWN0aW9uOlxcXCJtYXBcXFwiLGlkZW50aWZ5Om49Pm4gaW5zdGFuY2VvZiBTZXQsbm9kZUNsYXNzOk10LGRlZmF1bHQ6ITEsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXRcXFwiLGNyZWF0ZU5vZGU6KG4sZSx0KT0+TXQuZnJvbShuLGUsdCkscmVzb2x2ZShuLGUpe2lmKHplKG4pKXtpZihuLmhhc0FsbE51bGxWYWx1ZXMoITApKXJldHVybiBPYmplY3QuYXNzaWduKG5ldyBNdCxuKTtlKFxcXCJTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlc1xcXCIpfWVsc2UgZShcXFwiRXhwZWN0ZWQgYSBtYXBwaW5nIGZvciB0aGlzIHRhZ1xcXCIpO3JldHVybiBufX07ZnVuY3Rpb24gSGkobixlKXtsZXQgdD1uWzBdLHI9dD09PVxcXCItXFxcInx8dD09PVxcXCIrXFxcIj9uLnN1YnN0cmluZygxKTpuLHM9bz0+ZT9CaWdJbnQobyk6TnVtYmVyKG8pLGk9ci5yZXBsYWNlKC9fL2csXFxcIlxcXCIpLnNwbGl0KFxcXCI6XFxcIikucmVkdWNlKChvLGEpPT5vKnMoNjApK3MoYSkscygwKSk7cmV0dXJuIHQ9PT1cXFwiLVxcXCI/cygtMSkqaTppfWZ1bmN0aW9uIGF1KG4pe2xldHt2YWx1ZTplfT1uLHQ9bz0+bztpZih0eXBlb2YgZT09XFxcImJpZ2ludFxcXCIpdD1vPT5CaWdJbnQobyk7ZWxzZSBpZihpc05hTihlKXx8IWlzRmluaXRlKGUpKXJldHVybiBUZShuKTtsZXQgcj1cXFwiXFxcIjtlPDAmJihyPVxcXCItXFxcIixlKj10KC0xKSk7bGV0IHM9dCg2MCksaT1bZSVzXTtyZXR1cm4gZTw2MD9pLnVuc2hpZnQoMCk6KGU9KGUtaVswXSkvcyxpLnVuc2hpZnQoZSVzKSxlPj02MCYmKGU9KGUtaVswXSkvcyxpLnVuc2hpZnQoZSkpKSxyK2kubWFwKG89PlN0cmluZyhvKS5wYWRTdGFydCgyLFxcXCIwXFxcIikpLmpvaW4oXFxcIjpcXFwiKS5yZXBsYWNlKC8wMDAwMDBcXFxcZCokLyxcXFwiXFxcIil9dmFyIE9zPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobiksZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJUSU1FXFxcIix0ZXN0Oi9eWy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pKyQvLHJlc29sdmU6KG4sZSx7aW50QXNCaWdJbnQ6dH0pPT5IaShuLHQpLHN0cmluZ2lmeTphdX0sdnM9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLGZvcm1hdDpcXFwiVElNRVxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSokLyxyZXNvbHZlOm49PkhpKG4sITEpLHN0cmluZ2lmeTphdX0sdm49e2lkZW50aWZ5Om49Pm4gaW5zdGFuY2VvZiBEYXRlLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcXFwiLHRlc3Q6UmVnRXhwKFxcXCJeKFswLTldezR9KS0oWzAtOV17MSwyfSktKFswLTldezEsMn0pKD86KD86dHxUfFsgXFxcXFxcXFx0XSspKFswLTldezEsMn0pOihbMC05XXsxLDJ9KTooWzAtOV17MSwyfShcXFxcXFxcXC5bMC05XSspPykoPzpbIFxcXFxcXFxcdF0qKFp8Wy0rXVswMTJdP1swLTldKD86OlswLTldezJ9KT8pKT8pPyRcXFwiKSxyZXNvbHZlKG4pe2xldCBlPW4ubWF0Y2godm4udGVzdCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFxcXCIhIXRpbWVzdGFtcCBleHBlY3RzIGEgZGF0ZSwgc3RhcnRpbmcgd2l0aCB5eXl5LW1tLWRkXFxcIik7bGV0Wyx0LHIscyxpLG8sYV09ZS5tYXAoTnVtYmVyKSx1PWVbN10/TnVtYmVyKChlWzddK1xcXCIwMFxcXCIpLnN1YnN0cigxLDMpKTowLGw9RGF0ZS5VVEModCxyLTEscyxpfHwwLG98fDAsYXx8MCx1KSxkPWVbOF07aWYoZCYmZCE9PVxcXCJaXFxcIil7bGV0IGg9SGkoZCwhMSk7TWF0aC5hYnMoaCk8MzAmJihoKj02MCksbC09NmU0Kmh9cmV0dXJuIG5ldyBEYXRlKGwpfSxzdHJpbmdpZnk6KHt2YWx1ZTpufSk9Pm4udG9JU09TdHJpbmcoKS5yZXBsYWNlKC8oKFQwMDowMCk/OjAwKT9cXFxcLjAwMFokLyxcXFwiXFxcIil9O3ZhciBLaT1bWmUsUWUsTHQsWXQscWksVWkscnUsc3UsaXUsb3UsZXUsdHUsbnUsYnIsRnIsRXIsVHIsT3MsdnMsdm5dO3ZhciB1dT1uZXcgTWFwKFtbXFxcImNvcmVcXFwiLEdhXSxbXFxcImZhaWxzYWZlXFxcIixbWmUsUWUsTHRdXSxbXFxcImpzb25cXFwiLFFhXSxbXFxcInlhbWwxMVxcXCIsS2ldLFtcXFwieWFtbC0xLjFcXFwiLEtpXV0pLGx1PXtiaW5hcnk6YnIsYm9vbDpncixmbG9hdDpGcyxmbG9hdEV4cDpFcyxmbG9hdE5hTjpicyxmbG9hdFRpbWU6dnMsaW50OlNzLGludEhleDprcyxpbnRPY3Q6VHMsaW50VGltZTpPcyxtYXA6WmUsbnVsbDpZdCxvbWFwOkZyLHBhaXJzOkVyLHNlcTpRZSxzZXQ6VHIsdGltZXN0YW1wOnZufSxjdT17XFxcInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeVxcXCI6YnIsXFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiOkZyLFxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlyc1xcXCI6RXIsXFxcInRhZzp5YW1sLm9yZywyMDAyOnNldFxcXCI6VHIsXFxcInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcFxcXCI6dm59O2Z1bmN0aW9uIElzKG4sZSl7bGV0IHQ9dXUuZ2V0KGUpO2lmKCF0KWlmKEFycmF5LmlzQXJyYXkobikpdD1bXTtlbHNle2xldCByPUFycmF5LmZyb20odXUua2V5cygpKS5maWx0ZXIocz0+cyE9PVxcXCJ5YW1sMTFcXFwiKS5tYXAocz0+SlNPTi5zdHJpbmdpZnkocykpLmpvaW4oXFxcIiwgXFxcIik7dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNjaGVtYSBcXFwiJHtlfVxcXCI7IHVzZSBvbmUgb2YgJHtyfSBvciBkZWZpbmUgY3VzdG9tVGFncyBhcnJheWApfWlmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCByIG9mIG4pdD10LmNvbmNhdChyKTtlbHNlIHR5cGVvZiBuPT1cXFwiZnVuY3Rpb25cXFwiJiYodD1uKHQuc2xpY2UoKSkpO3JldHVybiB0Lm1hcChyPT57aWYodHlwZW9mIHIhPVxcXCJzdHJpbmdcXFwiKXJldHVybiByO2xldCBzPWx1W3JdO2lmKHMpcmV0dXJuIHM7bGV0IGk9T2JqZWN0LmtleXMobHUpLm1hcChvPT5KU09OLnN0cmluZ2lmeShvKSkuam9pbihcXFwiLCBcXFwiKTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY3VzdG9tIHRhZyBcXFwiJHtyfVxcXCI7IHVzZSBvbmUgb2YgJHtpfWApfSl9dmFyIFFjPShuLGUpPT5uLmtleTxlLmtleT8tMTpuLmtleT5lLmtleT8xOjAsR3Q9Y2xhc3N7Y29uc3RydWN0b3Ioe2NvbXBhdDplLGN1c3RvbVRhZ3M6dCxtZXJnZTpyLHJlc29sdmVLbm93blRhZ3M6cyxzY2hlbWE6aSxzb3J0TWFwRW50cmllczpvLHRvU3RyaW5nRGVmYXVsdHM6YX0pe3RoaXMuY29tcGF0PUFycmF5LmlzQXJyYXkoZSk/SXMoZSxcXFwiY29tcGF0XFxcIik6ZT9JcyhudWxsLGUpOm51bGwsdGhpcy5tZXJnZT0hIXIsdGhpcy5uYW1lPXR5cGVvZiBpPT1cXFwic3RyaW5nXFxcIiYmaXx8XFxcImNvcmVcXFwiLHRoaXMua25vd25UYWdzPXM/Y3U6e30sdGhpcy50YWdzPUlzKHQsdGhpcy5uYW1lKSx0aGlzLnRvU3RyaW5nT3B0aW9ucz1hIT1udWxsP2E6bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxLZSx7dmFsdWU6WmV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxQZSx7dmFsdWU6THR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxidCx7dmFsdWU6UWV9KSx0aGlzLnNvcnRNYXBFbnRyaWVzPXR5cGVvZiBvPT1cXFwiZnVuY3Rpb25cXFwiP286bz09PSEwP1FjOm51bGx9Y2xvbmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKEd0LnByb3RvdHlwZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7cmV0dXJuIGUudGFncz10aGlzLnRhZ3Muc2xpY2UoKSxlfX07ZnVuY3Rpb24gZnUobixlKXt2YXIgdTtsZXQgdD1bXSxyPWUuZGlyZWN0aXZlcz09PSEwO2lmKGUuZGlyZWN0aXZlcyE9PSExJiZuLmRpcmVjdGl2ZXMpe2xldCBsPW4uZGlyZWN0aXZlcy50b1N0cmluZyhuKTtsPyh0LnB1c2gobCkscj0hMCk6bi5kaXJlY3RpdmVzLmRvY1N0YXJ0JiYocj0hMCl9ciYmdC5wdXNoKFxcXCItLS1cXFwiKTtsZXQgcz1ocyhuLGUpLHtjb21tZW50U3RyaW5nOml9PXMub3B0aW9ucztpZihuLmNvbW1lbnRCZWZvcmUpe3QubGVuZ3RoIT09MSYmdC51bnNoaWZ0KFxcXCJcXFwiKTtsZXQgbD1pKG4uY29tbWVudEJlZm9yZSk7dC51bnNoaWZ0KCRlKGwsXFxcIlxcXCIpKX1sZXQgbz0hMSxhPW51bGw7aWYobi5jb250ZW50cyl7aWYoSyhuLmNvbnRlbnRzKSl7aWYobi5jb250ZW50cy5zcGFjZUJlZm9yZSYmciYmdC5wdXNoKFxcXCJcXFwiKSxuLmNvbnRlbnRzLmNvbW1lbnRCZWZvcmUpe2xldCBoPWkobi5jb250ZW50cy5jb21tZW50QmVmb3JlKTt0LnB1c2goJGUoaCxcXFwiXFxcIikpfXMuZm9yY2VCbG9ja0luZGVudD0hIW4uY29tbWVudCxhPW4uY29udGVudHMuY29tbWVudH1sZXQgbD1hP3ZvaWQgMDooKT0+bz0hMCxkPVR0KG4uY29udGVudHMscywoKT0+YT1udWxsLGwpO2EmJihkKz1pdChkLFxcXCJcXFwiLGkoYSkpKSwoZFswXT09PVxcXCJ8XFxcInx8ZFswXT09PVxcXCI+XFxcIikmJnRbdC5sZW5ndGgtMV09PT1cXFwiLS0tXFxcIj90W3QubGVuZ3RoLTFdPWAtLS0gJHtkfWA6dC5wdXNoKGQpfWVsc2UgdC5wdXNoKFR0KG4uY29udGVudHMscykpO2lmKCh1PW4uZGlyZWN0aXZlcykhPW51bGwmJnUuZG9jRW5kKWlmKG4uY29tbWVudCl7bGV0IGw9aShuLmNvbW1lbnQpO2wuaW5jbHVkZXMoYFxcbmApPyh0LnB1c2goXFxcIi4uLlxcXCIpLHQucHVzaCgkZShsLFxcXCJcXFwiKSkpOnQucHVzaChgLi4uICR7bH1gKX1lbHNlIHQucHVzaChcXFwiLi4uXFxcIik7ZWxzZXtsZXQgbD1uLmNvbW1lbnQ7bCYmbyYmKGw9bC5yZXBsYWNlKC9eXFxcXG4rLyxcXFwiXFxcIikpLGwmJigoIW98fGEpJiZ0W3QubGVuZ3RoLTFdIT09XFxcIlxcXCImJnQucHVzaChcXFwiXFxcIiksdC5wdXNoKCRlKGkobCksXFxcIlxcXCIpKSl9cmV0dXJuIHQuam9pbihgXFxuYCkrYFxcbmB9dmFyIG90PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmNvbW1lbnRCZWZvcmU9bnVsbCx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLmVycm9ycz1bXSx0aGlzLndhcm5pbmdzPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGtlLHt2YWx1ZTpzc30pO2xldCBzPW51bGw7dHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCJ8fEFycmF5LmlzQXJyYXkodCk/cz10OnI9PT12b2lkIDAmJnQmJihyPXQsdD12b2lkIDApO2xldCBpPU9iamVjdC5hc3NpZ24oe2ludEFzQmlnSW50OiExLGtlZXBTb3VyY2VUb2tlbnM6ITEsbG9nTGV2ZWw6XFxcIndhcm5cXFwiLHByZXR0eUVycm9yczohMCxzdHJpY3Q6ITAsdW5pcXVlS2V5czohMCx2ZXJzaW9uOlxcXCIxLjJcXFwifSxyKTt0aGlzLm9wdGlvbnM9aTtsZXR7dmVyc2lvbjpvfT1pO3IhPW51bGwmJnIuX2RpcmVjdGl2ZXM/KHRoaXMuZGlyZWN0aXZlcz1yLl9kaXJlY3RpdmVzLmF0RG9jdW1lbnQoKSx0aGlzLmRpcmVjdGl2ZXMueWFtbC5leHBsaWNpdCYmKG89dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbikpOnRoaXMuZGlyZWN0aXZlcz1uZXcgcGUoe3ZlcnNpb246b30pLHRoaXMuc2V0U2NoZW1hKG8sciksdGhpcy5jb250ZW50cz1lPT09dm9pZCAwP251bGw6dGhpcy5jcmVhdGVOb2RlKGUscyxyKX1jbG9uZSgpe2xldCBlPU9iamVjdC5jcmVhdGUob3QucHJvdG90eXBlLHtba2VdOnt2YWx1ZTpzc319KTtyZXR1cm4gZS5jb21tZW50QmVmb3JlPXRoaXMuY29tbWVudEJlZm9yZSxlLmNvbW1lbnQ9dGhpcy5jb21tZW50LGUuZXJyb3JzPXRoaXMuZXJyb3JzLnNsaWNlKCksZS53YXJuaW5ncz10aGlzLndhcm5pbmdzLnNsaWNlKCksZS5vcHRpb25zPU9iamVjdC5hc3NpZ24oe30sdGhpcy5vcHRpb25zKSx0aGlzLmRpcmVjdGl2ZXMmJihlLmRpcmVjdGl2ZXM9dGhpcy5kaXJlY3RpdmVzLmNsb25lKCkpLGUuc2NoZW1hPXRoaXMuc2NoZW1hLmNsb25lKCksZS5jb250ZW50cz1LKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuY2xvbmUoZS5zY2hlbWEpOnRoaXMuY29udGVudHMsdGhpcy5yYW5nZSYmKGUucmFuZ2U9dGhpcy5yYW5nZS5zbGljZSgpKSxlfWFkZChlKXtJbih0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGQoZSl9YWRkSW4oZSx0KXtJbih0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGRJbihlLHQpfWNyZWF0ZUFsaWFzKGUsdCl7aWYoIWUuYW5jaG9yKXtsZXQgcj1BaSh0aGlzKTtlLmFuY2hvcj0hdHx8ci5oYXModCk/TWkodHx8XFxcImFcXFwiLHIpOnR9cmV0dXJuIG5ldyBGdChlLmFuY2hvcil9Y3JlYXRlTm9kZShlLHQscil7bGV0IHM7aWYodHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCIpZT10LmNhbGwoe1xcXCJcXFwiOmV9LFxcXCJcXFwiLGUpLHM9dDtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2xldCB5PU89PnR5cGVvZiBPPT1cXFwibnVtYmVyXFxcInx8TyBpbnN0YW5jZW9mIFN0cmluZ3x8TyBpbnN0YW5jZW9mIE51bWJlcixTPXQuZmlsdGVyKHkpLm1hcChTdHJpbmcpO1MubGVuZ3RoPjAmJih0PXQuY29uY2F0KFMpKSxzPXR9ZWxzZSByPT09dm9pZCAwJiZ0JiYocj10LHQ9dm9pZCAwKTtsZXR7YWxpYXNEdXBsaWNhdGVPYmplY3RzOmksYW5jaG9yUHJlZml4Om8sZmxvdzphLGtlZXBVbmRlZmluZWQ6dSxvblRhZ09iajpsLHRhZzpkfT1yIT1udWxsP3I6e30se29uQW5jaG9yOmgsc2V0QW5jaG9yczpwLHNvdXJjZU9iamVjdHM6Zn09V2EodGhpcyxvfHxcXFwiYVxcXCIpLEY9e2FsaWFzRHVwbGljYXRlT2JqZWN0czppIT1udWxsP2k6ITAsa2VlcFVuZGVmaW5lZDp1IT1udWxsP3U6ITEsb25BbmNob3I6aCxvblRhZ09iajpsLHJlcGxhY2VyOnMsc2NoZW1hOnRoaXMuc2NoZW1hLHNvdXJjZU9iamVjdHM6Zn0sZz13dChlLGQsRik7cmV0dXJuIGEmJkcoZykmJihnLmZsb3c9ITApLHAoKSxnfWNyZWF0ZVBhaXIoZSx0LHI9e30pe2xldCBzPXRoaXMuY3JlYXRlTm9kZShlLG51bGwsciksaT10aGlzLmNyZWF0ZU5vZGUodCxudWxsLHIpO3JldHVybiBuZXcgc2UocyxpKX1kZWxldGUoZSl7cmV0dXJuIEluKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlKGUpOiExfWRlbGV0ZUluKGUpe3JldHVybiBDbihlKT90aGlzLmNvbnRlbnRzPT1udWxsPyExOih0aGlzLmNvbnRlbnRzPW51bGwsITApOkluKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlSW4oZSk6ITF9Z2V0KGUsdCl7cmV0dXJuIEcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5nZXQoZSx0KTp2b2lkIDB9Z2V0SW4oZSx0KXtyZXR1cm4gQ24oZSk/IXQmJlcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy52YWx1ZTp0aGlzLmNvbnRlbnRzOkcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5nZXRJbihlLHQpOnZvaWQgMH1oYXMoZSl7cmV0dXJuIEcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5oYXMoZSk6ITF9aGFzSW4oZSl7cmV0dXJuIENuKGUpP3RoaXMuY29udGVudHMhPT12b2lkIDA6Ryh0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLmhhc0luKGUpOiExfXNldChlLHQpe3RoaXMuY29udGVudHM9PW51bGw/dGhpcy5jb250ZW50cz1wcih0aGlzLnNjaGVtYSxbZV0sdCk6SW4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuc2V0KGUsdCl9c2V0SW4oZSx0KXtDbihlKT90aGlzLmNvbnRlbnRzPXQ6dGhpcy5jb250ZW50cz09bnVsbD90aGlzLmNvbnRlbnRzPXByKHRoaXMuc2NoZW1hLEFycmF5LmZyb20oZSksdCk6SW4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuc2V0SW4oZSx0KX1zZXRTY2hlbWEoZSx0PXt9KXt0eXBlb2YgZT09XFxcIm51bWJlclxcXCImJihlPVN0cmluZyhlKSk7bGV0IHI7c3dpdGNoKGUpe2Nhc2VcXFwiMS4xXFxcIjp0aGlzLmRpcmVjdGl2ZXM/dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbj1cXFwiMS4xXFxcIjp0aGlzLmRpcmVjdGl2ZXM9bmV3IHBlKHt2ZXJzaW9uOlxcXCIxLjFcXFwifSkscj17bWVyZ2U6ITAscmVzb2x2ZUtub3duVGFnczohMSxzY2hlbWE6XFxcInlhbWwtMS4xXFxcIn07YnJlYWs7Y2FzZVxcXCIxLjJcXFwiOmNhc2VcXFwibmV4dFxcXCI6dGhpcy5kaXJlY3RpdmVzP3RoaXMuZGlyZWN0aXZlcy55YW1sLnZlcnNpb249ZTp0aGlzLmRpcmVjdGl2ZXM9bmV3IHBlKHt2ZXJzaW9uOmV9KSxyPXttZXJnZTohMSxyZXNvbHZlS25vd25UYWdzOiEwLHNjaGVtYTpcXFwiY29yZVxcXCJ9O2JyZWFrO2Nhc2UgbnVsbDp0aGlzLmRpcmVjdGl2ZXMmJmRlbGV0ZSB0aGlzLmRpcmVjdGl2ZXMscj1udWxsO2JyZWFrO2RlZmF1bHQ6e2xldCBzPUpTT04uc3RyaW5naWZ5KGUpO3Rocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJzEuMScsICcxLjInIG9yIG51bGwgYXMgZmlyc3QgYXJndW1lbnQsIGJ1dCBmb3VuZDogJHtzfWApfX1pZih0LnNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCl0aGlzLnNjaGVtYT10LnNjaGVtYTtlbHNlIGlmKHIpdGhpcy5zY2hlbWE9bmV3IEd0KE9iamVjdC5hc3NpZ24ocix0KSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXFxcIldpdGggYSBudWxsIFlBTUwgdmVyc2lvbiwgdGhlIHsgc2NoZW1hOiBTY2hlbWEgfSBvcHRpb24gaXMgcmVxdWlyZWRcXFwiKX10b0pTKHtqc29uOmUsanNvbkFyZzp0LG1hcEFzTWFwOnIsbWF4QWxpYXNDb3VudDpzLG9uQW5jaG9yOmkscmV2aXZlcjpvfT17fSl7bGV0IGE9e2FuY2hvcnM6bmV3IE1hcCxkb2M6dGhpcyxrZWVwOiFlLG1hcEFzTWFwOnI9PT0hMCxtYXBLZXlXYXJuZWQ6ITEsbWF4QWxpYXNDb3VudDp0eXBlb2Ygcz09XFxcIm51bWJlclxcXCI/czoxMDB9LHU9bWUodGhpcy5jb250ZW50cyx0IT1udWxsP3Q6XFxcIlxcXCIsYSk7aWYodHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCIpZm9yKGxldHtjb3VudDpsLHJlczpkfW9mIGEuYW5jaG9ycy52YWx1ZXMoKSlpKGQsbCk7cmV0dXJuIHR5cGVvZiBvPT1cXFwiZnVuY3Rpb25cXFwiP3Z0KG8se1xcXCJcXFwiOnV9LFxcXCJcXFwiLHUpOnV9dG9KU09OKGUsdCl7cmV0dXJuIHRoaXMudG9KUyh7anNvbjohMCxqc29uQXJnOmUsbWFwQXNNYXA6ITEsb25BbmNob3I6dH0pfXRvU3RyaW5nKGU9e30pe2lmKHRoaXMuZXJyb3JzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihcXFwiRG9jdW1lbnQgd2l0aCBlcnJvcnMgY2Fubm90IGJlIHN0cmluZ2lmaWVkXFxcIik7aWYoXFxcImluZGVudFxcXCJpbiBlJiYoIU51bWJlci5pc0ludGVnZXIoZS5pbmRlbnQpfHxOdW1iZXIoZS5pbmRlbnQpPD0wKSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoZS5pbmRlbnQpO3Rocm93IG5ldyBFcnJvcihgXFxcImluZGVudFxcXCIgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBub3QgJHt0fWApfXJldHVybiBmdSh0aGlzLGUpfX07ZnVuY3Rpb24gSW4obil7aWYoRyhuKSlyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoXFxcIkV4cGVjdGVkIGEgWUFNTCBjb2xsZWN0aW9uIGFzIGRvY3VtZW50IGNvbnRlbnRzXFxcIil9dmFyIFNyPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIscyl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLmNvZGU9cix0aGlzLm1lc3NhZ2U9cyx0aGlzLnBvcz10fX0sWGU9Y2xhc3MgZXh0ZW5kcyBTcntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoXFxcIllBTUxQYXJzZUVycm9yXFxcIixlLHQscil9fSxrcj1jbGFzcyBleHRlbmRzIFNye2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcihcXFwiWUFNTFdhcm5pbmdcXFwiLGUsdCxyKX19LEppPShuLGUpPT50PT57aWYodC5wb3NbMF09PT0tMSlyZXR1cm47dC5saW5lUG9zPXQucG9zLm1hcChhPT5lLmxpbmVQb3MoYSkpO2xldHtsaW5lOnIsY29sOnN9PXQubGluZVBvc1swXTt0Lm1lc3NhZ2UrPWAgYXQgbGluZSAke3J9LCBjb2x1bW4gJHtzfWA7bGV0IGk9cy0xLG89bi5zdWJzdHJpbmcoZS5saW5lU3RhcnRzW3ItMV0sZS5saW5lU3RhcnRzW3JdKS5yZXBsYWNlKC9bXFxcXG5cXFxccl0rJC8sXFxcIlxcXCIpO2lmKGk+PTYwJiZvLmxlbmd0aD44MCl7bGV0IGE9TWF0aC5taW4oaS0zOSxvLmxlbmd0aC03OSk7bz1cXFwiXFxcXHUyMDI2XFxcIitvLnN1YnN0cmluZyhhKSxpLT1hLTF9aWYoby5sZW5ndGg+ODAmJihvPW8uc3Vic3RyaW5nKDAsNzkpK1xcXCJcXFxcdTIwMjZcXFwiKSxyPjEmJi9eICokLy50ZXN0KG8uc3Vic3RyaW5nKDAsaSkpKXtsZXQgYT1uLnN1YnN0cmluZyhlLmxpbmVTdGFydHNbci0yXSxlLmxpbmVTdGFydHNbci0xXSk7YS5sZW5ndGg+ODAmJihhPWEuc3Vic3RyaW5nKDAsNzkpK2BcXFxcdTIwMjZcXG5gKSxvPWErb31pZigvW14gXS8udGVzdChvKSl7bGV0IGE9MSx1PXQubGluZVBvc1sxXTt1JiZ1LmxpbmU9PT1yJiZ1LmNvbD5zJiYoYT1NYXRoLm1heCgxLE1hdGgubWluKHUuY29sLXMsODAtaSkpKTtsZXQgbD1cXFwiIFxcXCIucmVwZWF0KGkpK1xcXCJeXFxcIi5yZXBlYXQoYSk7dC5tZXNzYWdlKz1gOlxcblxcbiR7b31cXG4ke2x9XFxuYH19O2Z1bmN0aW9uIGF0KG4se2Zsb3c6ZSxpbmRpY2F0b3I6dCxuZXh0OnIsb2Zmc2V0OnMsb25FcnJvcjppLHN0YXJ0T25OZXdsaW5lOm99KXtsZXQgYT0hMSx1PW8sbD1vLGQ9XFxcIlxcXCIsaD1cXFwiXFxcIixwPSExLGY9ITEsRj0hMSxnPW51bGwseT1udWxsLFM9bnVsbCxPPW51bGwsdj1udWxsO2ZvcihsZXQgVCBvZiBuKXN3aXRjaChGJiYoVC50eXBlIT09XFxcInNwYWNlXFxcIiYmVC50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZULnR5cGUhPT1cXFwiY29tbWFcXFwiJiZpKFQub2Zmc2V0LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2VcXFwiKSxGPSExKSxULnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOiFlJiZ1JiZ0IT09XFxcImRvYy1zdGFydFxcXCImJlQuc291cmNlWzBdPT09XFxcIlxcdFxcXCImJmkoVCxcXFwiVEFCX0FTX0lOREVOVFxcXCIsXFxcIlRhYnMgYXJlIG5vdCBhbGxvd2VkIGFzIGluZGVudGF0aW9uXFxcIiksbD0hMDticmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOntsfHxpKFQsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKTtsZXQgQz1ULnNvdXJjZS5zdWJzdHJpbmcoMSl8fFxcXCIgXFxcIjtkP2QrPWgrQzpkPUMsaD1cXFwiXFxcIix1PSExO2JyZWFrfWNhc2VcXFwibmV3bGluZVxcXCI6dT9kP2QrPVQuc291cmNlOmE9ITA6aCs9VC5zb3VyY2UsdT0hMCxwPSEwLChnfHx5KSYmKGY9ITApLGw9ITA7YnJlYWs7Y2FzZVxcXCJhbmNob3JcXFwiOmcmJmkoVCxcXFwiTVVMVElQTEVfQU5DSE9SU1xcXCIsXFxcIkEgbm9kZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBhbmNob3JcXFwiKSxULnNvdXJjZS5lbmRzV2l0aChcXFwiOlxcXCIpJiZpKFQub2Zmc2V0K1Quc291cmNlLmxlbmd0aC0xLFxcXCJCQURfQUxJQVNcXFwiLFxcXCJBbmNob3IgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzXFxcIiwhMCksZz1ULHY9PT1udWxsJiYodj1ULm9mZnNldCksdT0hMSxsPSExLEY9ITA7YnJlYWs7Y2FzZVxcXCJ0YWdcXFwiOnt5JiZpKFQsXFxcIk1VTFRJUExFX1RBR1NcXFwiLFxcXCJBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgdGFnXFxcIikseT1ULHY9PT1udWxsJiYodj1ULm9mZnNldCksdT0hMSxsPSExLEY9ITA7YnJlYWt9Y2FzZSB0OihnfHx5KSYmaShULFxcXCJCQURfUFJPUF9PUkRFUlxcXCIsYEFuY2hvcnMgYW5kIHRhZ3MgbXVzdCBiZSBhZnRlciB0aGUgJHtULnNvdXJjZX0gaW5kaWNhdG9yYCksTyYmaShULFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAke1Quc291cmNlfSBpbiAke2UhPW51bGw/ZTpcXFwiY29sbGVjdGlvblxcXCJ9YCksTz1ULHU9ITEsbD0hMTticmVhaztjYXNlXFxcImNvbW1hXFxcIjppZihlKXtTJiZpKFQsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICwgaW4gJHtlfWApLFM9VCx1PSExLGw9ITE7YnJlYWt9ZGVmYXVsdDppKFQsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7VC50eXBlfSB0b2tlbmApLHU9ITEsbD0hMX1sZXQgRD1uW24ubGVuZ3RoLTFdLHc9RD9ELm9mZnNldCtELnNvdXJjZS5sZW5ndGg6cztyZXR1cm4gRiYmciYmci50eXBlIT09XFxcInNwYWNlXFxcIiYmci50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZyLnR5cGUhPT1cXFwiY29tbWFcXFwiJiYoci50eXBlIT09XFxcInNjYWxhclxcXCJ8fHIuc291cmNlIT09XFxcIlxcXCIpJiZpKHIub2Zmc2V0LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2VcXFwiKSx7Y29tbWE6Uyxmb3VuZDpPLHNwYWNlQmVmb3JlOmEsY29tbWVudDpkLGhhc05ld2xpbmU6cCxoYXNOZXdsaW5lQWZ0ZXJQcm9wOmYsYW5jaG9yOmcsdGFnOnksZW5kOncsc3RhcnQ6diE9bnVsbD92Ond9fWZ1bmN0aW9uIF90KG4pe2lmKCFuKXJldHVybiBudWxsO3N3aXRjaChuLnR5cGUpe2Nhc2VcXFwiYWxpYXNcXFwiOmNhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjppZihuLnNvdXJjZS5pbmNsdWRlcyhgXFxuYCkpcmV0dXJuITA7aWYobi5lbmQpe2ZvcihsZXQgZSBvZiBuLmVuZClpZihlLnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITB9cmV0dXJuITE7Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOmZvcihsZXQgZSBvZiBuLml0ZW1zKXtmb3IobGV0IHQgb2YgZS5zdGFydClpZih0LnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITA7aWYoZS5zZXApe2ZvcihsZXQgdCBvZiBlLnNlcClpZih0LnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITB9aWYoX3QoZS5rZXkpfHxfdChlLnZhbHVlKSlyZXR1cm4hMH1yZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBDcihuLGUsdCl7aWYoKGU9PW51bGw/dm9pZCAwOmUudHlwZSk9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIil7bGV0IHI9ZS5lbmRbMF07ci5pbmRlbnQ9PT1uJiYoci5zb3VyY2U9PT1cXFwiXVxcXCJ8fHIuc291cmNlPT09XFxcIn1cXFwiKSYmX3QoZSkmJnQocixcXFwiQkFEX0lOREVOVFxcXCIsXFxcIkZsb3cgZW5kIGluZGljYXRvciBzaG91bGQgYmUgbW9yZSBpbmRlbnRlZCB0aGFuIHBhcmVudFxcXCIsITApfX1mdW5jdGlvbiBOcyhuLGUsdCl7bGV0e3VuaXF1ZUtleXM6cn09bi5vcHRpb25zO2lmKHI9PT0hMSlyZXR1cm4hMTtsZXQgcz10eXBlb2Ygcj09XFxcImZ1bmN0aW9uXFxcIj9yOihpLG8pPT5pPT09b3x8VyhpKSYmVyhvKSYmaS52YWx1ZT09PW8udmFsdWUmJiEoaS52YWx1ZT09PVxcXCI8PFxcXCImJm4uc2NoZW1hLm1lcmdlKTtyZXR1cm4gZS5zb21lKGk9PnMoaS5rZXksdCkpfXZhciBkdT1cXFwiQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW5cXFwiO2Z1bmN0aW9uIGh1KHtjb21wb3NlTm9kZTpuLGNvbXBvc2VFbXB0eU5vZGU6ZX0sdCxyLHMsaSl7dmFyIGQsaDtsZXQgbz0oZD1pPT1udWxsP3ZvaWQgMDppLm5vZGVDbGFzcykhPW51bGw/ZDp1ZSxhPW5ldyBvKHQuc2NoZW1hKTt0LmF0Um9vdCYmKHQuYXRSb290PSExKTtsZXQgdT1yLm9mZnNldCxsPW51bGw7Zm9yKGxldCBwIG9mIHIuaXRlbXMpe2xldHtzdGFydDpmLGtleTpGLHNlcDpnLHZhbHVlOnl9PXAsUz1hdChmLHtpbmRpY2F0b3I6XFxcImV4cGxpY2l0LWtleS1pbmRcXFwiLG5leHQ6RiE9bnVsbD9GOmc9PW51bGw/dm9pZCAwOmdbMF0sb2Zmc2V0OnUsb25FcnJvcjpzLHN0YXJ0T25OZXdsaW5lOiEwfSksTz0hUy5mb3VuZDtpZihPKXtpZihGJiYoRi50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/cyh1LFxcXCJCTE9DS19BU19JTVBMSUNJVF9LRVlcXFwiLFxcXCJBIGJsb2NrIHNlcXVlbmNlIG1heSBub3QgYmUgdXNlZCBhcyBhbiBpbXBsaWNpdCBtYXAga2V5XFxcIik6XFxcImluZGVudFxcXCJpbiBGJiZGLmluZGVudCE9PXIuaW5kZW50JiZzKHUsXFxcIkJBRF9JTkRFTlRcXFwiLGR1KSksIVMuYW5jaG9yJiYhUy50YWcmJiFnKXtsPVMuZW5kLFMuY29tbWVudCYmKGEuY29tbWVudD9hLmNvbW1lbnQrPWBcXG5gK1MuY29tbWVudDphLmNvbW1lbnQ9Uy5jb21tZW50KTtjb250aW51ZX0oUy5oYXNOZXdsaW5lQWZ0ZXJQcm9wfHxfdChGKSkmJnMoRiE9bnVsbD9GOmZbZi5sZW5ndGgtMV0sXFxcIk1VTFRJTElORV9JTVBMSUNJVF9LRVlcXFwiLFxcXCJJbXBsaWNpdCBrZXlzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpfWVsc2UoKGg9Uy5mb3VuZCk9PW51bGw/dm9pZCAwOmguaW5kZW50KSE9PXIuaW5kZW50JiZzKHUsXFxcIkJBRF9JTkRFTlRcXFwiLGR1KTtsZXQgdj1TLmVuZCxEPUY/bih0LEYsUyxzKTplKHQsdixmLG51bGwsUyxzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LEYscyksTnModCxhLml0ZW1zLEQpJiZzKHYsXFxcIkRVUExJQ0FURV9LRVlcXFwiLFxcXCJNYXAga2V5cyBtdXN0IGJlIHVuaXF1ZVxcXCIpO2xldCB3PWF0KGchPW51bGw/ZzpbXSx7aW5kaWNhdG9yOlxcXCJtYXAtdmFsdWUtaW5kXFxcIixuZXh0Onksb2Zmc2V0OkQucmFuZ2VbMl0sb25FcnJvcjpzLHN0YXJ0T25OZXdsaW5lOiFGfHxGLnR5cGU9PT1cXFwiYmxvY2stc2NhbGFyXFxcIn0pO2lmKHU9dy5lbmQsdy5mb3VuZCl7TyYmKCh5PT1udWxsP3ZvaWQgMDp5LnR5cGUpPT09XFxcImJsb2NrLW1hcFxcXCImJiF3Lmhhc05ld2xpbmUmJnModSxcXFwiQkxPQ0tfQVNfSU1QTElDSVRfS0VZXFxcIixcXFwiTmVzdGVkIG1hcHBpbmdzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wYWN0IG1hcHBpbmdzXFxcIiksdC5vcHRpb25zLnN0cmljdCYmUy5zdGFydDx3LmZvdW5kLm9mZnNldC0xMDI0JiZzKEQucmFuZ2UsXFxcIktFWV9PVkVSXzEwMjRfQ0hBUlNcXFwiLFxcXCJUaGUgOiBpbmRpY2F0b3IgbXVzdCBiZSBhdCBtb3N0IDEwMjQgY2hhcnMgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGFuIGltcGxpY2l0IGJsb2NrIG1hcHBpbmcga2V5XFxcIikpO2xldCBUPXk/bih0LHksdyxzKTplKHQsdSxnLG51bGwsdyxzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LHkscyksdT1ULnJhbmdlWzJdO2xldCBDPW5ldyBzZShELFQpO3Qub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYoQy5zcmNUb2tlbj1wKSxhLml0ZW1zLnB1c2goQyl9ZWxzZXtPJiZzKEQucmFuZ2UsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkltcGxpY2l0IG1hcCBrZXlzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgbWFwIHZhbHVlc1xcXCIpLHcuY29tbWVudCYmKEQuY29tbWVudD9ELmNvbW1lbnQrPWBcXG5gK3cuY29tbWVudDpELmNvbW1lbnQ9dy5jb21tZW50KTtsZXQgVD1uZXcgc2UoRCk7dC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJihULnNyY1Rva2VuPXApLGEuaXRlbXMucHVzaChUKX19cmV0dXJuIGwmJmw8dSYmcyhsLFxcXCJJTVBPU1NJQkxFXFxcIixcXFwiTWFwIGNvbW1lbnQgd2l0aCB0cmFpbGluZyBjb250ZW50XFxcIiksYS5yYW5nZT1bci5vZmZzZXQsdSxsIT1udWxsP2w6dV0sYX1mdW5jdGlvbiBwdSh7Y29tcG9zZU5vZGU6bixjb21wb3NlRW1wdHlOb2RlOmV9LHQscixzLGkpe3ZhciBkO2xldCBvPShkPWk9PW51bGw/dm9pZCAwOmkubm9kZUNsYXNzKSE9bnVsbD9kOndlLGE9bmV3IG8odC5zY2hlbWEpO3QuYXRSb290JiYodC5hdFJvb3Q9ITEpO2xldCB1PXIub2Zmc2V0LGw9bnVsbDtmb3IobGV0e3N0YXJ0OmgsdmFsdWU6cH1vZiByLml0ZW1zKXtsZXQgZj1hdChoLHtpbmRpY2F0b3I6XFxcInNlcS1pdGVtLWluZFxcXCIsbmV4dDpwLG9mZnNldDp1LG9uRXJyb3I6cyxzdGFydE9uTmV3bGluZTohMH0pO2lmKCFmLmZvdW5kKWlmKGYuYW5jaG9yfHxmLnRhZ3x8cClwJiZwLnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIj9zKGYuZW5kLFxcXCJCQURfSU5ERU5UXFxcIixcXFwiQWxsIHNlcXVlbmNlIGl0ZW1zIG11c3Qgc3RhcnQgYXQgdGhlIHNhbWUgY29sdW1uXFxcIik6cyh1LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJTZXF1ZW5jZSBpdGVtIHdpdGhvdXQgLSBpbmRpY2F0b3JcXFwiKTtlbHNle2w9Zi5lbmQsZi5jb21tZW50JiYoYS5jb21tZW50PWYuY29tbWVudCk7Y29udGludWV9bGV0IEY9cD9uKHQscCxmLHMpOmUodCxmLmVuZCxoLG51bGwsZixzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LHAscyksdT1GLnJhbmdlWzJdLGEuaXRlbXMucHVzaChGKX1yZXR1cm4gYS5yYW5nZT1bci5vZmZzZXQsdSxsIT1udWxsP2w6dV0sYX1mdW5jdGlvbiB1dChuLGUsdCxyKXtsZXQgcz1cXFwiXFxcIjtpZihuKXtsZXQgaT0hMSxvPVxcXCJcXFwiO2ZvcihsZXQgYSBvZiBuKXtsZXR7c291cmNlOnUsdHlwZTpsfT1hO3N3aXRjaChsKXtjYXNlXFxcInNwYWNlXFxcIjppPSEwO2JyZWFrO2Nhc2VcXFwiY29tbWVudFxcXCI6e3QmJiFpJiZyKGEsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKTtsZXQgZD11LnN1YnN0cmluZygxKXx8XFxcIiBcXFwiO3M/cys9bytkOnM9ZCxvPVxcXCJcXFwiO2JyZWFrfWNhc2VcXFwibmV3bGluZVxcXCI6cyYmKG8rPXUpLGk9ITA7YnJlYWs7ZGVmYXVsdDpyKGEsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7bH0gYXQgbm9kZSBlbmRgKX1lKz11Lmxlbmd0aH19cmV0dXJue2NvbW1lbnQ6cyxvZmZzZXQ6ZX19dmFyIHppPVxcXCJCbG9jayBjb2xsZWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgd2l0aGluIGZsb3cgY29sbGVjdGlvbnNcXFwiLFlpPW49Pm4mJihuLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8bi50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpO2Z1bmN0aW9uIG11KHtjb21wb3NlTm9kZTpuLGNvbXBvc2VFbXB0eU5vZGU6ZX0sdCxyLHMsaSl7dmFyIHksUztsZXQgbz1yLnN0YXJ0LnNvdXJjZT09PVxcXCJ7XFxcIixhPW8/XFxcImZsb3cgbWFwXFxcIjpcXFwiZmxvdyBzZXF1ZW5jZVxcXCIsdT0oeT1pPT1udWxsP3ZvaWQgMDppLm5vZGVDbGFzcykhPW51bGw/eTpvP3VlOndlLGw9bmV3IHUodC5zY2hlbWEpO2wuZmxvdz0hMDtsZXQgZD10LmF0Um9vdDtkJiYodC5hdFJvb3Q9ITEpO2xldCBoPXIub2Zmc2V0K3Iuc3RhcnQuc291cmNlLmxlbmd0aDtmb3IobGV0IE89MDtPPHIuaXRlbXMubGVuZ3RoOysrTyl7bGV0IHY9ci5pdGVtc1tPXSx7c3RhcnQ6RCxrZXk6dyxzZXA6VCx2YWx1ZTpDfT12LE09YXQoRCx7ZmxvdzphLGluZGljYXRvcjpcXFwiZXhwbGljaXQta2V5LWluZFxcXCIsbmV4dDp3IT1udWxsP3c6VD09bnVsbD92b2lkIDA6VFswXSxvZmZzZXQ6aCxvbkVycm9yOnMsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZighTS5mb3VuZCl7aWYoIU0uYW5jaG9yJiYhTS50YWcmJiFUJiYhQyl7Tz09PTAmJk0uY29tbWE/cyhNLmNvbW1hLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAsIGluICR7YX1gKTpPPHIuaXRlbXMubGVuZ3RoLTEmJnMoTS5zdGFydCxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuZXhwZWN0ZWQgZW1wdHkgaXRlbSBpbiAke2F9YCksTS5jb21tZW50JiYobC5jb21tZW50P2wuY29tbWVudCs9YFxcbmArTS5jb21tZW50OmwuY29tbWVudD1NLmNvbW1lbnQpLGg9TS5lbmQ7Y29udGludWV9IW8mJnQub3B0aW9ucy5zdHJpY3QmJl90KHcpJiZzKHcsXFxcIk1VTFRJTElORV9JTVBMSUNJVF9LRVlcXFwiLFxcXCJJbXBsaWNpdCBrZXlzIG9mIGZsb3cgc2VxdWVuY2UgcGFpcnMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lXFxcIil9aWYoTz09PTApTS5jb21tYSYmcyhNLmNvbW1hLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAsIGluICR7YX1gKTtlbHNlIGlmKE0uY29tbWF8fHMoTS5zdGFydCxcXFwiTUlTU0lOR19DSEFSXFxcIixgTWlzc2luZyAsIGJldHdlZW4gJHthfSBpdGVtc2ApLE0uY29tbWVudCl7bGV0IFY9XFxcIlxcXCI7ZTpmb3IobGV0IGogb2YgRClzd2l0Y2goai50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOlY9ai5zb3VyY2Uuc3Vic3RyaW5nKDEpO2JyZWFrIGU7ZGVmYXVsdDpicmVhayBlfWlmKFYpe2xldCBqPWwuaXRlbXNbbC5pdGVtcy5sZW5ndGgtMV07SChqKSYmKGo9KFM9ai52YWx1ZSkhPW51bGw/UzpqLmtleSksai5jb21tZW50P2ouY29tbWVudCs9YFxcbmArVjpqLmNvbW1lbnQ9VixNLmNvbW1lbnQ9TS5jb21tZW50LnN1YnN0cmluZyhWLmxlbmd0aCsxKX19aWYoIW8mJiFUJiYhTS5mb3VuZCl7bGV0IFY9Qz9uKHQsQyxNLHMpOmUodCxNLmVuZCxULG51bGwsTSxzKTtsLml0ZW1zLnB1c2goViksaD1WLnJhbmdlWzJdLFlpKEMpJiZzKFYucmFuZ2UsXFxcIkJMT0NLX0lOX0ZMT1dcXFwiLHppKX1lbHNle2xldCBWPU0uZW5kLGo9dz9uKHQsdyxNLHMpOmUodCxWLEQsbnVsbCxNLHMpO1lpKHcpJiZzKGoucmFuZ2UsXFxcIkJMT0NLX0lOX0ZMT1dcXFwiLHppKTtsZXQgej1hdChUIT1udWxsP1Q6W10se2Zsb3c6YSxpbmRpY2F0b3I6XFxcIm1hcC12YWx1ZS1pbmRcXFwiLG5leHQ6QyxvZmZzZXQ6ai5yYW5nZVsyXSxvbkVycm9yOnMsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZih6LmZvdW5kKXtpZighbyYmIU0uZm91bmQmJnQub3B0aW9ucy5zdHJpY3Qpe2lmKFQpZm9yKGxldCB4IG9mIFQpe2lmKHg9PT16LmZvdW5kKWJyZWFrO2lmKHgudHlwZT09PVxcXCJuZXdsaW5lXFxcIil7cyh4LFxcXCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZXFxcIixcXFwiSW1wbGljaXQga2V5cyBvZiBmbG93IHNlcXVlbmNlIHBhaXJzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpO2JyZWFrfX1NLnN0YXJ0PHouZm91bmQub2Zmc2V0LTEwMjQmJnMoei5mb3VuZCxcXFwiS0VZX09WRVJfMTAyNF9DSEFSU1xcXCIsXFxcIlRoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgZmxvdyBzZXF1ZW5jZSBrZXlcXFwiKX19ZWxzZSBDJiYoXFxcInNvdXJjZVxcXCJpbiBDJiZDLnNvdXJjZSYmQy5zb3VyY2VbMF09PT1cXFwiOlxcXCI/cyhDLFxcXCJNSVNTSU5HX0NIQVJcXFwiLGBNaXNzaW5nIHNwYWNlIGFmdGVyIDogaW4gJHthfWApOnMoei5zdGFydCxcXFwiTUlTU0lOR19DSEFSXFxcIixgTWlzc2luZyAsIG9yIDogYmV0d2VlbiAke2F9IGl0ZW1zYCkpO2xldCByZT1DP24odCxDLHoscyk6ei5mb3VuZD9lKHQsei5lbmQsVCxudWxsLHoscyk6bnVsbDtyZT9ZaShDKSYmcyhyZS5yYW5nZSxcXFwiQkxPQ0tfSU5fRkxPV1xcXCIsemkpOnouY29tbWVudCYmKGouY29tbWVudD9qLmNvbW1lbnQrPWBcXG5gK3ouY29tbWVudDpqLmNvbW1lbnQ9ei5jb21tZW50KTtsZXQgbGU9bmV3IHNlKGoscmUpO2lmKHQub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYobGUuc3JjVG9rZW49diksbyl7bGV0IHg9bDtOcyh0LHguaXRlbXMsaikmJnMoVixcXFwiRFVQTElDQVRFX0tFWVxcXCIsXFxcIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlXFxcIikseC5pdGVtcy5wdXNoKGxlKX1lbHNle2xldCB4PW5ldyB1ZSh0LnNjaGVtYSk7eC5mbG93PSEwLHguaXRlbXMucHVzaChsZSksbC5pdGVtcy5wdXNoKHgpfWg9cmU/cmUucmFuZ2VbMl06ei5lbmR9fWxldCBwPW8/XFxcIn1cXFwiOlxcXCJdXFxcIixbZiwuLi5GXT1yLmVuZCxnPWg7aWYoZiYmZi5zb3VyY2U9PT1wKWc9Zi5vZmZzZXQrZi5zb3VyY2UubGVuZ3RoO2Vsc2V7bGV0IE89YVswXS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyaW5nKDEpLHY9ZD9gJHtPfSBtdXN0IGVuZCB3aXRoIGEgJHtwfWA6YCR7T30gaW4gYmxvY2sgY29sbGVjdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBpbmRlbnRlZCBhbmQgZW5kIHdpdGggYSAke3B9YDtzKGgsZD9cXFwiTUlTU0lOR19DSEFSXFxcIjpcXFwiQkFEX0lOREVOVFxcXCIsdiksZiYmZi5zb3VyY2UubGVuZ3RoIT09MSYmRi51bnNoaWZ0KGYpfWlmKEYubGVuZ3RoPjApe2xldCBPPXV0KEYsZyx0Lm9wdGlvbnMuc3RyaWN0LHMpO08uY29tbWVudCYmKGwuY29tbWVudD9sLmNvbW1lbnQrPWBcXG5gK08uY29tbWVudDpsLmNvbW1lbnQ9Ty5jb21tZW50KSxsLnJhbmdlPVtyLm9mZnNldCxnLE8ub2Zmc2V0XX1lbHNlIGwucmFuZ2U9W3Iub2Zmc2V0LGcsZ107cmV0dXJuIGx9ZnVuY3Rpb24gR2kobixlLHQscixzLGkpe2xldCBvPXQudHlwZT09PVxcXCJibG9jay1tYXBcXFwiP2h1KG4sZSx0LHIsaSk6dC50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/cHUobixlLHQscixpKTptdShuLGUsdCxyLGkpLGE9by5jb25zdHJ1Y3RvcjtyZXR1cm4gcz09PVxcXCIhXFxcInx8cz09PWEudGFnTmFtZT8oby50YWc9YS50YWdOYW1lLG8pOihzJiYoby50YWc9cyksbyl9ZnVuY3Rpb24gRHUobixlLHQscixzKXt2YXIgaCxwO2xldCBpPXI/ZS5kaXJlY3RpdmVzLnRhZ05hbWUoci5zb3VyY2UsZj0+cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGYpKTpudWxsLG89dC50eXBlPT09XFxcImJsb2NrLW1hcFxcXCI/XFxcIm1hcFxcXCI6dC50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/XFxcInNlcVxcXCI6dC5zdGFydC5zb3VyY2U9PT1cXFwie1xcXCI/XFxcIm1hcFxcXCI6XFxcInNlcVxcXCI7aWYoIXJ8fCFpfHxpPT09XFxcIiFcXFwifHxpPT09dWUudGFnTmFtZSYmbz09PVxcXCJtYXBcXFwifHxpPT09d2UudGFnTmFtZSYmbz09PVxcXCJzZXFcXFwifHwhbylyZXR1cm4gR2kobixlLHQscyxpKTtsZXQgYT1lLnNjaGVtYS50YWdzLmZpbmQoZj0+Zi50YWc9PT1pJiZmLmNvbGxlY3Rpb249PT1vKTtpZighYSl7bGV0IGY9ZS5zY2hlbWEua25vd25UYWdzW2ldO2lmKGYmJmYuY29sbGVjdGlvbj09PW8pZS5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sZix7ZGVmYXVsdDohMX0pKSxhPWY7ZWxzZSByZXR1cm4gZiE9bnVsbCYmZi5jb2xsZWN0aW9uP3MocixcXFwiQkFEX0NPTExFQ1RJT05fVFlQRVxcXCIsYCR7Zi50YWd9IHVzZWQgZm9yICR7b30gY29sbGVjdGlvbiwgYnV0IGV4cGVjdHMgJHtmLmNvbGxlY3Rpb259YCwhMCk6cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGBVbnJlc29sdmVkIHRhZzogJHtpfWAsITApLEdpKG4sZSx0LHMsaSl9bGV0IHU9R2kobixlLHQscyxpLGEpLGw9KHA9KGg9YS5yZXNvbHZlKT09bnVsbD92b2lkIDA6aC5jYWxsKGEsdSxmPT5zKHIsXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIsZiksZS5vcHRpb25zKSkhPW51bGw/cDp1LGQ9SyhsKT9sOm5ldyBQKGwpO3JldHVybiBkLnJhbmdlPXUucmFuZ2UsZC50YWc9aSxhIT1udWxsJiZhLmZvcm1hdCYmKGQuZm9ybWF0PWEuZm9ybWF0KSxkfWZ1bmN0aW9uIFppKG4sZSx0KXtsZXQgcj1uLm9mZnNldCxzPVhjKG4sZSx0KTtpZighcylyZXR1cm57dmFsdWU6XFxcIlxcXCIsdHlwZTpudWxsLGNvbW1lbnQ6XFxcIlxcXCIscmFuZ2U6W3IscixyXX07bGV0IGk9cy5tb2RlPT09XFxcIj5cXFwiP1AuQkxPQ0tfRk9MREVEOlAuQkxPQ0tfTElURVJBTCxvPW4uc291cmNlP2VmKG4uc291cmNlKTpbXSxhPW8ubGVuZ3RoO2ZvcihsZXQgZz1vLmxlbmd0aC0xO2c+PTA7LS1nKXtsZXQgeT1vW2ddWzFdO2lmKHk9PT1cXFwiXFxcInx8eT09PVxcXCJcXFxcclxcXCIpYT1nO2Vsc2UgYnJlYWt9aWYoYT09PTApe2xldCBnPXMuY2hvbXA9PT1cXFwiK1xcXCImJm8ubGVuZ3RoPjA/YFxcbmAucmVwZWF0KE1hdGgubWF4KDEsby5sZW5ndGgtMSkpOlxcXCJcXFwiLHk9citzLmxlbmd0aDtyZXR1cm4gbi5zb3VyY2UmJih5Kz1uLnNvdXJjZS5sZW5ndGgpLHt2YWx1ZTpnLHR5cGU6aSxjb21tZW50OnMuY29tbWVudCxyYW5nZTpbcix5LHldfX1sZXQgdT1uLmluZGVudCtzLmluZGVudCxsPW4ub2Zmc2V0K3MubGVuZ3RoLGQ9MDtmb3IobGV0IGc9MDtnPGE7KytnKXtsZXRbeSxTXT1vW2ddO2lmKFM9PT1cXFwiXFxcInx8Uz09PVxcXCJcXFxcclxcXCIpcy5pbmRlbnQ9PT0wJiZ5Lmxlbmd0aD51JiYodT15Lmxlbmd0aCk7ZWxzZXtpZih5Lmxlbmd0aDx1KXtsZXQgTz1cXFwiQmxvY2sgc2NhbGFycyB3aXRoIG1vcmUtaW5kZW50ZWQgbGVhZGluZyBlbXB0eSBsaW5lcyBtdXN0IHVzZSBhbiBleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3JcXFwiO3QobCt5Lmxlbmd0aCxcXFwiTUlTU0lOR19DSEFSXFxcIixPKX1zLmluZGVudD09PTAmJih1PXkubGVuZ3RoKSxkPWc7YnJlYWt9bCs9eS5sZW5ndGgrUy5sZW5ndGgrMX1mb3IobGV0IGc9by5sZW5ndGgtMTtnPj1hOy0tZylvW2ddWzBdLmxlbmd0aD51JiYoYT1nKzEpO2xldCBoPVxcXCJcXFwiLHA9XFxcIlxcXCIsZj0hMTtmb3IobGV0IGc9MDtnPGQ7KytnKWgrPW9bZ11bMF0uc2xpY2UodSkrYFxcbmA7Zm9yKGxldCBnPWQ7ZzxhOysrZyl7bGV0W3ksU109b1tnXTtsKz15Lmxlbmd0aCtTLmxlbmd0aCsxO2xldCBPPVNbUy5sZW5ndGgtMV09PT1cXFwiXFxcXHJcXFwiO2lmKE8mJihTPVMuc2xpY2UoMCwtMSkpLFMmJnkubGVuZ3RoPHUpe2xldCBEPWBCbG9jayBzY2FsYXIgbGluZXMgbXVzdCBub3QgYmUgbGVzcyBpbmRlbnRlZCB0aGFuIHRoZWlyICR7cy5pbmRlbnQ/XFxcImV4cGxpY2l0IGluZGVudGF0aW9uIGluZGljYXRvclxcXCI6XFxcImZpcnN0IGxpbmVcXFwifWA7dChsLVMubGVuZ3RoLShPPzI6MSksXFxcIkJBRF9JTkRFTlRcXFwiLEQpLHk9XFxcIlxcXCJ9aT09PVAuQkxPQ0tfTElURVJBTD8oaCs9cCt5LnNsaWNlKHUpK1MscD1gXFxuYCk6eS5sZW5ndGg+dXx8U1swXT09PVxcXCJcXHRcXFwiPyhwPT09XFxcIiBcXFwiP3A9YFxcbmA6IWYmJnA9PT1gXFxuYCYmKHA9YFxcblxcbmApLGgrPXAreS5zbGljZSh1KStTLHA9YFxcbmAsZj0hMCk6Uz09PVxcXCJcXFwiP3A9PT1gXFxuYD9oKz1gXFxuYDpwPWBcXG5gOihoKz1wK1MscD1cXFwiIFxcXCIsZj0hMSl9c3dpdGNoKHMuY2hvbXApe2Nhc2VcXFwiLVxcXCI6YnJlYWs7Y2FzZVxcXCIrXFxcIjpmb3IobGV0IGc9YTtnPG8ubGVuZ3RoOysrZyloKz1gXFxuYCtvW2ddWzBdLnNsaWNlKHUpO2hbaC5sZW5ndGgtMV0hPT1gXFxuYCYmKGgrPWBcXG5gKTticmVhaztkZWZhdWx0OmgrPWBcXG5gfWxldCBGPXIrcy5sZW5ndGgrbi5zb3VyY2UubGVuZ3RoO3JldHVybnt2YWx1ZTpoLHR5cGU6aSxjb21tZW50OnMuY29tbWVudCxyYW5nZTpbcixGLEZdfX1mdW5jdGlvbiBYYyh7b2Zmc2V0Om4scHJvcHM6ZX0sdCxyKXtpZihlWzBdLnR5cGUhPT1cXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCIpcmV0dXJuIHIoZVswXSxcXFwiSU1QT1NTSUJMRVxcXCIsXFxcIkJsb2NrIHNjYWxhciBoZWFkZXIgbm90IGZvdW5kXFxcIiksbnVsbDtsZXR7c291cmNlOnN9PWVbMF0saT1zWzBdLG89MCxhPVxcXCJcXFwiLHU9LTE7Zm9yKGxldCBwPTE7cDxzLmxlbmd0aDsrK3Ape2xldCBmPXNbcF07aWYoIWEmJihmPT09XFxcIi1cXFwifHxmPT09XFxcIitcXFwiKSlhPWY7ZWxzZXtsZXQgRj1OdW1iZXIoZik7IW8mJkY/bz1GOnU9PT0tMSYmKHU9bitwKX19dSE9PS0xJiZyKHUsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBCbG9jayBzY2FsYXIgaGVhZGVyIGluY2x1ZGVzIGV4dHJhIGNoYXJhY3RlcnM6ICR7c31gKTtsZXQgbD0hMSxkPVxcXCJcXFwiLGg9cy5sZW5ndGg7Zm9yKGxldCBwPTE7cDxlLmxlbmd0aDsrK3Ape2xldCBmPWVbcF07c3dpdGNoKGYudHlwZSl7Y2FzZVxcXCJzcGFjZVxcXCI6bD0hMDtjYXNlXFxcIm5ld2xpbmVcXFwiOmgrPWYuc291cmNlLmxlbmd0aDticmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOnQmJiFsJiZyKGYsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKSxoKz1mLnNvdXJjZS5sZW5ndGgsZD1mLnNvdXJjZS5zdWJzdHJpbmcoMSk7YnJlYWs7Y2FzZVxcXCJlcnJvclxcXCI6cihmLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixmLm1lc3NhZ2UpLGgrPWYuc291cmNlLmxlbmd0aDticmVhaztkZWZhdWx0OntsZXQgRj1gVW5leHBlY3RlZCB0b2tlbiBpbiBibG9jayBzY2FsYXIgaGVhZGVyOiAke2YudHlwZX1gO3IoZixcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsRik7bGV0IGc9Zi5zb3VyY2U7ZyYmdHlwZW9mIGc9PVxcXCJzdHJpbmdcXFwiJiYoaCs9Zy5sZW5ndGgpfX19cmV0dXJue21vZGU6aSxpbmRlbnQ6byxjaG9tcDphLGNvbW1lbnQ6ZCxsZW5ndGg6aH19ZnVuY3Rpb24gZWYobil7bGV0IGU9bi5zcGxpdCgvXFxcXG4oICopLyksdD1lWzBdLHI9dC5tYXRjaCgvXiggKikvKSxpPVtyIT1udWxsJiZyWzFdP1tyWzFdLHQuc2xpY2UoclsxXS5sZW5ndGgpXTpbXFxcIlxcXCIsdF1dO2ZvcihsZXQgbz0xO288ZS5sZW5ndGg7bys9MilpLnB1c2goW2Vbb10sZVtvKzFdXSk7cmV0dXJuIGl9ZnVuY3Rpb24gUWkobixlLHQpe2xldHtvZmZzZXQ6cix0eXBlOnMsc291cmNlOmksZW5kOm99PW4sYSx1LGw9KHAsZixGKT0+dChyK3AsZixGKTtzd2l0Y2gocyl7Y2FzZVxcXCJzY2FsYXJcXFwiOmE9UC5QTEFJTix1PXRmKGksbCk7YnJlYWs7Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6YT1QLlFVT1RFX1NJTkdMRSx1PW5mKGksbCk7YnJlYWs7Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6YT1QLlFVT1RFX0RPVUJMRSx1PXJmKGksbCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdChuLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgRXhwZWN0ZWQgYSBmbG93IHNjYWxhciB2YWx1ZSwgYnV0IGZvdW5kOiAke3N9YCkse3ZhbHVlOlxcXCJcXFwiLHR5cGU6bnVsbCxjb21tZW50OlxcXCJcXFwiLHJhbmdlOltyLHIraS5sZW5ndGgscitpLmxlbmd0aF19fWxldCBkPXIraS5sZW5ndGgsaD11dChvLGQsZSx0KTtyZXR1cm57dmFsdWU6dSx0eXBlOmEsY29tbWVudDpoLmNvbW1lbnQscmFuZ2U6W3IsZCxoLm9mZnNldF19fWZ1bmN0aW9uIHRmKG4sZSl7bGV0IHQ9XFxcIlxcXCI7c3dpdGNoKG5bMF0pe2Nhc2VcXFwiXFx0XFxcIjp0PVxcXCJhIHRhYiBjaGFyYWN0ZXJcXFwiO2JyZWFrO2Nhc2VcXFwiLFxcXCI6dD1cXFwiZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVyICxcXFwiO2JyZWFrO2Nhc2VcXFwiJVxcXCI6dD1cXFwiZGlyZWN0aXZlIGluZGljYXRvciBjaGFyYWN0ZXIgJVxcXCI7YnJlYWs7Y2FzZVxcXCJ8XFxcIjpjYXNlXFxcIj5cXFwiOnt0PWBibG9jayBzY2FsYXIgaW5kaWNhdG9yICR7blswXX1gO2JyZWFrfWNhc2VcXFwiQFxcXCI6Y2FzZVxcXCJgXFxcIjp7dD1gcmVzZXJ2ZWQgY2hhcmFjdGVyICR7blswXX1gO2JyZWFrfX1yZXR1cm4gdCYmZSgwLFxcXCJCQURfU0NBTEFSX1NUQVJUXFxcIixgUGxhaW4gdmFsdWUgY2Fubm90IHN0YXJ0IHdpdGggJHt0fWApLHl1KG4pfWZ1bmN0aW9uIG5mKG4sZSl7cmV0dXJuKG5bbi5sZW5ndGgtMV0hPT1cXFwiJ1xcXCJ8fG4ubGVuZ3RoPT09MSkmJmUobi5sZW5ndGgsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgY2xvc2luZyAncXVvdGVcXFwiKSx5dShuLnNsaWNlKDEsLTEpKS5yZXBsYWNlKC8nJy9nLFxcXCInXFxcIil9ZnVuY3Rpb24geXUobil7dmFyIHU7bGV0IGUsdDt0cnl7ZT1uZXcgUmVnRXhwKGAoLio/KSg/PCFbIFxcdF0pWyBcXHRdKlxcXFxyP1xcbmAsXFxcInN5XFxcIiksdD1uZXcgUmVnRXhwKGBbIFxcdF0qKC4qPykoPzooPzwhWyBcXHRdKVsgXFx0XSopP1xcXFxyP1xcbmAsXFxcInN5XFxcIil9Y2F0Y2gobCl7ZT1uZXcgUmVnRXhwKFxcXCIoLio/KVsgXFxcXFxcXFx0XSpcXFxcXFxcXHI/XFxcXFxcXFxuXFxcIixcXFwic3lcXFwiKSx0PW5ldyBSZWdFeHAoXFxcIlsgXFxcXFxcXFx0XSooLio/KVsgXFxcXFxcXFx0XSpcXFxcXFxcXHI/XFxcXFxcXFxuXFxcIixcXFwic3lcXFwiKX1sZXQgcj1lLmV4ZWMobik7aWYoIXIpcmV0dXJuIG47bGV0IHM9clsxXSxpPVxcXCIgXFxcIixvPWUubGFzdEluZGV4O2Zvcih0Lmxhc3RJbmRleD1vO3I9dC5leGVjKG4pOylyWzFdPT09XFxcIlxcXCI/aT09PWBcXG5gP3MrPWk6aT1gXFxuYDoocys9aStyWzFdLGk9XFxcIiBcXFwiKSxvPXQubGFzdEluZGV4O2xldCBhPW5ldyBSZWdFeHAoXFxcIlsgXFxcXFxcXFx0XSooLiopXFxcIixcXFwic3lcXFwiKTtyZXR1cm4gYS5sYXN0SW5kZXg9byxyPWEuZXhlYyhuKSxzK2krKCh1PXI9PW51bGw/dm9pZCAwOnJbMV0pIT1udWxsP3U6XFxcIlxcXCIpfWZ1bmN0aW9uIHJmKG4sZSl7bGV0IHQ9XFxcIlxcXCI7Zm9yKGxldCByPTE7cjxuLmxlbmd0aC0xOysrcil7bGV0IHM9bltyXTtpZighKHM9PT1cXFwiXFxcXHJcXFwiJiZuW3IrMV09PT1gXFxuYCkpaWYocz09PWBcXG5gKXtsZXR7Zm9sZDppLG9mZnNldDpvfT1zZihuLHIpO3QrPWkscj1vfWVsc2UgaWYocz09PVxcXCJcXFxcXFxcXFxcXCIpe2xldCBpPW5bKytyXSxvPW9mW2ldO2lmKG8pdCs9bztlbHNlIGlmKGk9PT1gXFxuYClmb3IoaT1uW3IrMV07aT09PVxcXCIgXFxcInx8aT09PVxcXCJcXHRcXFwiOylpPW5bKytyKzFdO2Vsc2UgaWYoaT09PVxcXCJcXFxcclxcXCImJm5bcisxXT09PWBcXG5gKWZvcihpPW5bKytyKzFdO2k9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIjspaT1uWysrcisxXTtlbHNlIGlmKGk9PT1cXFwieFxcXCJ8fGk9PT1cXFwidVxcXCJ8fGk9PT1cXFwiVVxcXCIpe2xldCBhPXt4OjIsdTo0LFU6OH1baV07dCs9YWYobixyKzEsYSxlKSxyKz1hfWVsc2V7bGV0IGE9bi5zdWJzdHIoci0xLDIpO2Uoci0xLFxcXCJCQURfRFFfRVNDQVBFXFxcIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHthfWApLHQrPWF9fWVsc2UgaWYocz09PVxcXCIgXFxcInx8cz09PVxcXCJcXHRcXFwiKXtsZXQgaT1yLG89bltyKzFdO2Zvcig7bz09PVxcXCIgXFxcInx8bz09PVxcXCJcXHRcXFwiOylvPW5bKytyKzFdO28hPT1gXFxuYCYmIShvPT09XFxcIlxcXFxyXFxcIiYmbltyKzJdPT09YFxcbmApJiYodCs9cj5pP24uc2xpY2UoaSxyKzEpOnMpfWVsc2UgdCs9c31yZXR1cm4obltuLmxlbmd0aC0xXSE9PSdcXFwiJ3x8bi5sZW5ndGg9PT0xKSYmZShuLmxlbmd0aCxcXFwiTUlTU0lOR19DSEFSXFxcIiwnTWlzc2luZyBjbG9zaW5nIFxcXCJxdW90ZScpLHR9ZnVuY3Rpb24gc2YobixlKXtsZXQgdD1cXFwiXFxcIixyPW5bZSsxXTtmb3IoOyhyPT09XFxcIiBcXFwifHxyPT09XFxcIlxcdFxcXCJ8fHI9PT1gXFxuYHx8cj09PVxcXCJcXFxcclxcXCIpJiYhKHI9PT1cXFwiXFxcXHJcXFwiJiZuW2UrMl0hPT1gXFxuYCk7KXI9PT1gXFxuYCYmKHQrPWBcXG5gKSxlKz0xLHI9bltlKzFdO3JldHVybiB0fHwodD1cXFwiIFxcXCIpLHtmb2xkOnQsb2Zmc2V0OmV9fXZhciBvZj17MDpcXFwiXFxcXDBcXFwiLGE6XFxcIlxcXFx4MDdcXFwiLGI6XFxcIlxcXFxiXFxcIixlOlxcXCJcXFxceDFCXFxcIixmOlxcXCJcXFxcZlxcXCIsbjpgXFxuYCxyOlxcXCJcXFxcclxcXCIsdDpcXFwiXFx0XFxcIix2OlxcXCJcXFxcdlxcXCIsTjpcXFwiXFxcXHg4NVxcXCIsXzpcXFwiXFxcXHhBMFxcXCIsTDpcXFwiXFxcXHUyMDI4XFxcIixQOlxcXCJcXFxcdTIwMjlcXFwiLFxcXCIgXFxcIjpcXFwiIFxcXCIsJ1xcXCInOidcXFwiJyxcXFwiL1xcXCI6XFxcIi9cXFwiLFxcXCJcXFxcXFxcXFxcXCI6XFxcIlxcXFxcXFxcXFxcIixcXFwiXFx0XFxcIjpcXFwiXFx0XFxcIn07ZnVuY3Rpb24gYWYobixlLHQscil7bGV0IHM9bi5zdWJzdHIoZSx0KSxvPXMubGVuZ3RoPT09dCYmL15bMC05YS1mQS1GXSskLy50ZXN0KHMpP3BhcnNlSW50KHMsMTYpOk5hTjtpZihpc05hTihvKSl7bGV0IGE9bi5zdWJzdHIoZS0yLHQrMik7cmV0dXJuIHIoZS0yLFxcXCJCQURfRFFfRVNDQVBFXFxcIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHthfWApLGF9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG8pfWZ1bmN0aW9uIFhpKG4sZSx0LHIpe2xldHt2YWx1ZTpzLHR5cGU6aSxjb21tZW50Om8scmFuZ2U6YX09ZS50eXBlPT09XFxcImJsb2NrLXNjYWxhclxcXCI/WmkoZSxuLm9wdGlvbnMuc3RyaWN0LHIpOlFpKGUsbi5vcHRpb25zLnN0cmljdCxyKSx1PXQ/bi5kaXJlY3RpdmVzLnRhZ05hbWUodC5zb3VyY2UsaD0+cih0LFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGgpKTpudWxsLGw9dCYmdT91ZihuLnNjaGVtYSxzLHUsdCxyKTplLnR5cGU9PT1cXFwic2NhbGFyXFxcIj9sZihuLHMsZSxyKTpuLnNjaGVtYVtQZV0sZDt0cnl7bGV0IGg9bC5yZXNvbHZlKHMscD0+cih0IT1udWxsP3Q6ZSxcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixwKSxuLm9wdGlvbnMpO2Q9VyhoKT9oOm5ldyBQKGgpfWNhdGNoKGgpe2xldCBwPWggaW5zdGFuY2VvZiBFcnJvcj9oLm1lc3NhZ2U6U3RyaW5nKGgpO3IodCE9bnVsbD90OmUsXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIscCksZD1uZXcgUChzKX1yZXR1cm4gZC5yYW5nZT1hLGQuc291cmNlPXMsaSYmKGQudHlwZT1pKSx1JiYoZC50YWc9dSksbC5mb3JtYXQmJihkLmZvcm1hdD1sLmZvcm1hdCksbyYmKGQuY29tbWVudD1vKSxkfWZ1bmN0aW9uIHVmKG4sZSx0LHIscyl7dmFyIGE7aWYodD09PVxcXCIhXFxcIilyZXR1cm4gbltQZV07bGV0IGk9W107Zm9yKGxldCB1IG9mIG4udGFncylpZighdS5jb2xsZWN0aW9uJiZ1LnRhZz09PXQpaWYodS5kZWZhdWx0JiZ1LnRlc3QpaS5wdXNoKHUpO2Vsc2UgcmV0dXJuIHU7Zm9yKGxldCB1IG9mIGkpaWYoKGE9dS50ZXN0KSE9bnVsbCYmYS50ZXN0KGUpKXJldHVybiB1O2xldCBvPW4ua25vd25UYWdzW3RdO3JldHVybiBvJiYhby5jb2xsZWN0aW9uPyhuLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKHt9LG8se2RlZmF1bHQ6ITEsdGVzdDp2b2lkIDB9KSksbyk6KHMocixcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixgVW5yZXNvbHZlZCB0YWc6ICR7dH1gLHQhPT1cXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIiksbltQZV0pfWZ1bmN0aW9uIGxmKHtkaXJlY3RpdmVzOm4sc2NoZW1hOmV9LHQscixzKXt2YXIgbztsZXQgaT1lLnRhZ3MuZmluZChhPT57dmFyIHU7cmV0dXJuIGEuZGVmYXVsdCYmKCh1PWEudGVzdCk9PW51bGw/dm9pZCAwOnUudGVzdCh0KSl9KXx8ZVtQZV07aWYoZS5jb21wYXQpe2xldCBhPShvPWUuY29tcGF0LmZpbmQodT0+e3ZhciBsO3JldHVybiB1LmRlZmF1bHQmJigobD11LnRlc3QpPT1udWxsP3ZvaWQgMDpsLnRlc3QodCkpfSkpIT1udWxsP286ZVtQZV07aWYoaS50YWchPT1hLnRhZyl7bGV0IHU9bi50YWdTdHJpbmcoaS50YWcpLGw9bi50YWdTdHJpbmcoYS50YWcpLGQ9YFZhbHVlIG1heSBiZSBwYXJzZWQgYXMgZWl0aGVyICR7dX0gb3IgJHtsfWA7cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGQsITApfX1yZXR1cm4gaX1mdW5jdGlvbiBndShuLGUsdCl7aWYoZSl7dD09PW51bGwmJih0PWUubGVuZ3RoKTtmb3IobGV0IHI9dC0xO3I+PTA7LS1yKXtsZXQgcz1lW3JdO3N3aXRjaChzLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjpuLT1zLnNvdXJjZS5sZW5ndGg7Y29udGludWV9Zm9yKHM9ZVsrK3JdOyhzPT1udWxsP3ZvaWQgMDpzLnR5cGUpPT09XFxcInNwYWNlXFxcIjspbis9cy5zb3VyY2UubGVuZ3RoLHM9ZVsrK3JdO2JyZWFrfX1yZXR1cm4gbn12YXIgY2Y9e2NvbXBvc2VOb2RlOmVvLGNvbXBvc2VFbXB0eU5vZGU6THN9O2Z1bmN0aW9uIGVvKG4sZSx0LHIpe2xldHtzcGFjZUJlZm9yZTpzLGNvbW1lbnQ6aSxhbmNob3I6byx0YWc6YX09dCx1LGw9ITA7c3dpdGNoKGUudHlwZSl7Y2FzZVxcXCJhbGlhc1xcXCI6dT1mZihuLGUsciksKG98fGEpJiZyKGUsXFxcIkFMSUFTX1BST1BTXFxcIixcXFwiQW4gYWxpYXMgbm9kZSBtdXN0IG5vdCBzcGVjaWZ5IGFueSBwcm9wZXJ0aWVzXFxcIik7YnJlYWs7Y2FzZVxcXCJzY2FsYXJcXFwiOmNhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiYmxvY2stc2NhbGFyXFxcIjp1PVhpKG4sZSxhLHIpLG8mJih1LmFuY2hvcj1vLnNvdXJjZS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2VcXFwiYmxvY2stbWFwXFxcIjpjYXNlXFxcImJsb2NrLXNlcVxcXCI6Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnU9RHUoY2YsbixlLGEsciksbyYmKHUuYW5jaG9yPW8uc291cmNlLnN1YnN0cmluZygxKSk7YnJlYWs7ZGVmYXVsdDp7bGV0IGQ9ZS50eXBlPT09XFxcImVycm9yXFxcIj9lLm1lc3NhZ2U6YFVuc3VwcG9ydGVkIHRva2VuICh0eXBlOiAke2UudHlwZX0pYDtyKGUsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGQpLHU9THMobixlLm9mZnNldCx2b2lkIDAsbnVsbCx0LHIpLGw9ITF9fXJldHVybiBvJiZ1LmFuY2hvcj09PVxcXCJcXFwiJiZyKG8sXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXFxcIikscyYmKHUuc3BhY2VCZWZvcmU9ITApLGkmJihlLnR5cGU9PT1cXFwic2NhbGFyXFxcIiYmZS5zb3VyY2U9PT1cXFwiXFxcIj91LmNvbW1lbnQ9aTp1LmNvbW1lbnRCZWZvcmU9aSksbi5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJmwmJih1LnNyY1Rva2VuPWUpLHV9ZnVuY3Rpb24gTHMobixlLHQscix7c3BhY2VCZWZvcmU6cyxjb21tZW50OmksYW5jaG9yOm8sdGFnOmEsZW5kOnV9LGwpe2xldCBkPXt0eXBlOlxcXCJzY2FsYXJcXFwiLG9mZnNldDpndShlLHQsciksaW5kZW50Oi0xLHNvdXJjZTpcXFwiXFxcIn0saD1YaShuLGQsYSxsKTtyZXR1cm4gbyYmKGguYW5jaG9yPW8uc291cmNlLnN1YnN0cmluZygxKSxoLmFuY2hvcj09PVxcXCJcXFwiJiZsKG8sXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXFxcIikpLHMmJihoLnNwYWNlQmVmb3JlPSEwKSxpJiYoaC5jb21tZW50PWksaC5yYW5nZVsyXT11KSxofWZ1bmN0aW9uIGZmKHtvcHRpb25zOm59LHtvZmZzZXQ6ZSxzb3VyY2U6dCxlbmQ6cn0scyl7bGV0IGk9bmV3IEZ0KHQuc3Vic3RyaW5nKDEpKTtpLnNvdXJjZT09PVxcXCJcXFwiJiZzKGUsXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcXFwiKSxpLnNvdXJjZS5lbmRzV2l0aChcXFwiOlxcXCIpJiZzKGUrdC5sZW5ndGgtMSxcXFwiQkFEX0FMSUFTXFxcIixcXFwiQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzXFxcIiwhMCk7bGV0IG89ZSt0Lmxlbmd0aCxhPXV0KHIsbyxuLnN0cmljdCxzKTtyZXR1cm4gaS5yYW5nZT1bZSxvLGEub2Zmc2V0XSxhLmNvbW1lbnQmJihpLmNvbW1lbnQ9YS5jb21tZW50KSxpfWZ1bmN0aW9uIGJ1KG4sZSx7b2Zmc2V0OnQsc3RhcnQ6cix2YWx1ZTpzLGVuZDppfSxvKXtsZXQgYT1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczplfSxuKSx1PW5ldyBvdCh2b2lkIDAsYSksbD17YXRSb290OiEwLGRpcmVjdGl2ZXM6dS5kaXJlY3RpdmVzLG9wdGlvbnM6dS5vcHRpb25zLHNjaGVtYTp1LnNjaGVtYX0sZD1hdChyLHtpbmRpY2F0b3I6XFxcImRvYy1zdGFydFxcXCIsbmV4dDpzIT1udWxsP3M6aT09bnVsbD92b2lkIDA6aVswXSxvZmZzZXQ6dCxvbkVycm9yOm8sc3RhcnRPbk5ld2xpbmU6ITB9KTtkLmZvdW5kJiYodS5kaXJlY3RpdmVzLmRvY1N0YXJ0PSEwLHMmJihzLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8cy50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpJiYhZC5oYXNOZXdsaW5lJiZvKGQuZW5kLFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJCbG9jayBjb2xsZWN0aW9uIGNhbm5vdCBzdGFydCBvbiBzYW1lIGxpbmUgd2l0aCBkaXJlY3RpdmVzLWVuZCBtYXJrZXJcXFwiKSksdS5jb250ZW50cz1zP2VvKGwscyxkLG8pOkxzKGwsZC5lbmQscixudWxsLGQsbyk7bGV0IGg9dS5jb250ZW50cy5yYW5nZVsyXSxwPXV0KGksaCwhMSxvKTtyZXR1cm4gcC5jb21tZW50JiYodS5jb21tZW50PXAuY29tbWVudCksdS5yYW5nZT1bdCxoLHAub2Zmc2V0XSx1fWZ1bmN0aW9uIHhyKG4pe2lmKHR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIilyZXR1cm5bbixuKzFdO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG4ubGVuZ3RoPT09Mj9uOltuWzBdLG5bMV1dO2xldHtvZmZzZXQ6ZSxzb3VyY2U6dH09bjtyZXR1cm5bZSxlKyh0eXBlb2YgdD09XFxcInN0cmluZ1xcXCI/dC5sZW5ndGg6MSldfWZ1bmN0aW9uIEV1KG4pe3ZhciBzO2xldCBlPVxcXCJcXFwiLHQ9ITEscj0hMTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoOysraSl7bGV0IG89bltpXTtzd2l0Y2gob1swXSl7Y2FzZVxcXCIjXFxcIjplKz0oZT09PVxcXCJcXFwiP1xcXCJcXFwiOnI/YFxcblxcbmA6YFxcbmApKyhvLnN1YnN0cmluZygxKXx8XFxcIiBcXFwiKSx0PSEwLHI9ITE7YnJlYWs7Y2FzZVxcXCIlXFxcIjooKHM9bltpKzFdKT09bnVsbD92b2lkIDA6c1swXSkhPT1cXFwiI1xcXCImJihpKz0xKSx0PSExO2JyZWFrO2RlZmF1bHQ6dHx8KHI9ITApLHQ9ITF9fXJldHVybntjb21tZW50OmUsYWZ0ZXJFbXB0eUxpbmU6cn19dmFyIE9yPWNsYXNze2NvbnN0cnVjdG9yKGU9e30pe3RoaXMuZG9jPW51bGwsdGhpcy5hdERpcmVjdGl2ZXM9ITEsdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W10sdGhpcy5vbkVycm9yPSh0LHIscyxpKT0+e2xldCBvPXhyKHQpO2k/dGhpcy53YXJuaW5ncy5wdXNoKG5ldyBrcihvLHIscykpOnRoaXMuZXJyb3JzLnB1c2gobmV3IFhlKG8scixzKSl9LHRoaXMuZGlyZWN0aXZlcz1uZXcgcGUoe3ZlcnNpb246ZS52ZXJzaW9ufHxcXFwiMS4yXFxcIn0pLHRoaXMub3B0aW9ucz1lfWRlY29yYXRlKGUsdCl7bGV0e2NvbW1lbnQ6cixhZnRlckVtcHR5TGluZTpzfT1FdSh0aGlzLnByZWx1ZGUpO2lmKHIpe2xldCBpPWUuY29udGVudHM7aWYodCllLmNvbW1lbnQ9ZS5jb21tZW50P2Ake2UuY29tbWVudH1cXG4ke3J9YDpyO2Vsc2UgaWYoc3x8ZS5kaXJlY3RpdmVzLmRvY1N0YXJ0fHwhaSllLmNvbW1lbnRCZWZvcmU9cjtlbHNlIGlmKEcoaSkmJiFpLmZsb3cmJmkuaXRlbXMubGVuZ3RoPjApe2xldCBvPWkuaXRlbXNbMF07SChvKSYmKG89by5rZXkpO2xldCBhPW8uY29tbWVudEJlZm9yZTtvLmNvbW1lbnRCZWZvcmU9YT9gJHtyfVxcbiR7YX1gOnJ9ZWxzZXtsZXQgbz1pLmNvbW1lbnRCZWZvcmU7aS5jb21tZW50QmVmb3JlPW8/YCR7cn1cXG4ke299YDpyfX10PyhBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLmVycm9ycyx0aGlzLmVycm9ycyksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZS53YXJuaW5ncyx0aGlzLndhcm5pbmdzKSk6KGUuZXJyb3JzPXRoaXMuZXJyb3JzLGUud2FybmluZ3M9dGhpcy53YXJuaW5ncyksdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W119c3RyZWFtSW5mbygpe3JldHVybntjb21tZW50OkV1KHRoaXMucHJlbHVkZSkuY29tbWVudCxkaXJlY3RpdmVzOnRoaXMuZGlyZWN0aXZlcyxlcnJvcnM6dGhpcy5lcnJvcnMsd2FybmluZ3M6dGhpcy53YXJuaW5nc319KmNvbXBvc2UoZSx0PSExLHI9LTEpe2ZvcihsZXQgcyBvZiBlKXlpZWxkKnRoaXMubmV4dChzKTt5aWVsZCp0aGlzLmVuZCh0LHIpfSpuZXh0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlXFxcIjp0aGlzLmRpcmVjdGl2ZXMuYWRkKGUuc291cmNlLCh0LHIscyk9PntsZXQgaT14cihlKTtpWzBdKz10LHRoaXMub25FcnJvcihpLFxcXCJCQURfRElSRUNUSVZFXFxcIixyLHMpfSksdGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpLHRoaXMuYXREaXJlY3RpdmVzPSEwO2JyZWFrO2Nhc2VcXFwiZG9jdW1lbnRcXFwiOntsZXQgdD1idSh0aGlzLm9wdGlvbnMsdGhpcy5kaXJlY3RpdmVzLGUsdGhpcy5vbkVycm9yKTt0aGlzLmF0RGlyZWN0aXZlcyYmIXQuZGlyZWN0aXZlcy5kb2NTdGFydCYmdGhpcy5vbkVycm9yKGUsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IGluZGljYXRvciBsaW5lXFxcIiksdGhpcy5kZWNvcmF0ZSh0LCExKSx0aGlzLmRvYyYmKHlpZWxkIHRoaXMuZG9jKSx0aGlzLmRvYz10LHRoaXMuYXREaXJlY3RpdmVzPSExO2JyZWFrfWNhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6dGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpO2JyZWFrO2Nhc2VcXFwiZXJyb3JcXFwiOntsZXQgdD1lLnNvdXJjZT9gJHtlLm1lc3NhZ2V9OiAke0pTT04uc3RyaW5naWZ5KGUuc291cmNlKX1gOmUubWVzc2FnZSxyPW5ldyBYZSh4cihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsdCk7dGhpcy5hdERpcmVjdGl2ZXN8fCF0aGlzLmRvYz90aGlzLmVycm9ycy5wdXNoKHIpOnRoaXMuZG9jLmVycm9ycy5wdXNoKHIpO2JyZWFrfWNhc2VcXFwiZG9jLWVuZFxcXCI6e2lmKCF0aGlzLmRvYyl7bGV0IHI9XFxcIlVuZXhwZWN0ZWQgZG9jLWVuZCB3aXRob3V0IHByZWNlZGluZyBkb2N1bWVudFxcXCI7dGhpcy5lcnJvcnMucHVzaChuZXcgWGUoeHIoZSksXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLHIpKTticmVha310aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZD0hMDtsZXQgdD11dChlLmVuZCxlLm9mZnNldCtlLnNvdXJjZS5sZW5ndGgsdGhpcy5kb2Mub3B0aW9ucy5zdHJpY3QsdGhpcy5vbkVycm9yKTtpZih0aGlzLmRlY29yYXRlKHRoaXMuZG9jLCEwKSx0LmNvbW1lbnQpe2xldCByPXRoaXMuZG9jLmNvbW1lbnQ7dGhpcy5kb2MuY29tbWVudD1yP2Ake3J9XFxuJHt0LmNvbW1lbnR9YDp0LmNvbW1lbnR9dGhpcy5kb2MucmFuZ2VbMl09dC5vZmZzZXQ7YnJlYWt9ZGVmYXVsdDp0aGlzLmVycm9ycy5wdXNoKG5ldyBYZSh4cihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuc3VwcG9ydGVkIHRva2VuICR7ZS50eXBlfWApKX19KmVuZChlPSExLHQ9LTEpe2lmKHRoaXMuZG9jKXRoaXMuZGVjb3JhdGUodGhpcy5kb2MsITApLHlpZWxkIHRoaXMuZG9jLHRoaXMuZG9jPW51bGw7ZWxzZSBpZihlKXtsZXQgcj1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczp0aGlzLmRpcmVjdGl2ZXN9LHRoaXMub3B0aW9ucykscz1uZXcgb3Qodm9pZCAwLHIpO3RoaXMuYXREaXJlY3RpdmVzJiZ0aGlzLm9uRXJyb3IodCxcXFwiTUlTU0lOR19DSEFSXFxcIixcXFwiTWlzc2luZyBkaXJlY3RpdmVzLWVuZCBpbmRpY2F0b3IgbGluZVxcXCIpLHMucmFuZ2U9WzAsdCx0XSx0aGlzLmRlY29yYXRlKHMsITEpLHlpZWxkIHN9fX07dmFyIHRvPVN5bWJvbChcXFwiYnJlYWsgdmlzaXRcXFwiKSxkZj1TeW1ib2woXFxcInNraXAgY2hpbGRyZW5cXFwiKSxGdT1TeW1ib2woXFxcInJlbW92ZSBpdGVtXFxcIik7ZnVuY3Rpb24gWnQobixlKXtcXFwidHlwZVxcXCJpbiBuJiZuLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwiJiYobj17c3RhcnQ6bi5zdGFydCx2YWx1ZTpuLnZhbHVlfSksd3UoT2JqZWN0LmZyZWV6ZShbXSksbixlKX1adC5CUkVBSz10bztadC5TS0lQPWRmO1p0LlJFTU9WRT1GdTtadC5pdGVtQXRQYXRoPShuLGUpPT57bGV0IHQ9bjtmb3IobGV0W3Isc11vZiBlKXtsZXQgaT10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKGkmJlxcXCJpdGVtc1xcXCJpbiBpKXQ9aS5pdGVtc1tzXTtlbHNlIHJldHVybn1yZXR1cm4gdH07WnQucGFyZW50Q29sbGVjdGlvbj0obixlKT0+e2xldCB0PVp0Lml0ZW1BdFBhdGgobixlLnNsaWNlKDAsLTEpKSxyPWVbZS5sZW5ndGgtMV1bMF0scz10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKHMmJlxcXCJpdGVtc1xcXCJpbiBzKXJldHVybiBzO3Rocm93IG5ldyBFcnJvcihcXFwiUGFyZW50IGNvbGxlY3Rpb24gbm90IGZvdW5kXFxcIil9O2Z1bmN0aW9uIHd1KG4sZSx0KXtsZXQgcj10KGUsbik7aWYodHlwZW9mIHI9PVxcXCJzeW1ib2xcXFwiKXJldHVybiByO2ZvcihsZXQgcyBvZltcXFwia2V5XFxcIixcXFwidmFsdWVcXFwiXSl7bGV0IGk9ZVtzXTtpZihpJiZcXFwiaXRlbXNcXFwiaW4gaSl7Zm9yKGxldCBvPTA7bzxpLml0ZW1zLmxlbmd0aDsrK28pe2xldCBhPXd1KE9iamVjdC5mcmVlemUobi5jb25jYXQoW1tzLG9dXSkpLGkuaXRlbXNbb10sdCk7aWYodHlwZW9mIGE9PVxcXCJudW1iZXJcXFwiKW89YS0xO2Vsc2V7aWYoYT09PXRvKXJldHVybiB0bzthPT09RnUmJihpLml0ZW1zLnNwbGljZShvLDEpLG8tPTEpfX10eXBlb2Ygcj09XFxcImZ1bmN0aW9uXFxcIiYmcz09PVxcXCJrZXlcXFwiJiYocj1yKGUsbikpfX1yZXR1cm4gdHlwZW9mIHI9PVxcXCJmdW5jdGlvblxcXCI/cihlLG4pOnJ9dmFyIG5vPVxcXCJcXFxcdUZFRkZcXFwiLHJvPVxcXCJcXHUwMDAyXFxcIixzbz1cXFwiXFx1MDAxOFxcXCIsQXM9XFxcIlxcdTAwMWZcXFwiO2Z1bmN0aW9uIFR1KG4pe3N3aXRjaChuKXtjYXNlIG5vOnJldHVyblxcXCJieXRlLW9yZGVyLW1hcmtcXFwiO2Nhc2Ugcm86cmV0dXJuXFxcImRvYy1tb2RlXFxcIjtjYXNlIHNvOnJldHVyblxcXCJmbG93LWVycm9yLWVuZFxcXCI7Y2FzZSBBczpyZXR1cm5cXFwic2NhbGFyXFxcIjtjYXNlXFxcIi0tLVxcXCI6cmV0dXJuXFxcImRvYy1zdGFydFxcXCI7Y2FzZVxcXCIuLi5cXFwiOnJldHVyblxcXCJkb2MtZW5kXFxcIjtjYXNlXFxcIlxcXCI6Y2FzZWBcXG5gOmNhc2VgXFxcXHJcXG5gOnJldHVyblxcXCJuZXdsaW5lXFxcIjtjYXNlXFxcIi1cXFwiOnJldHVyblxcXCJzZXEtaXRlbS1pbmRcXFwiO2Nhc2VcXFwiP1xcXCI6cmV0dXJuXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiO2Nhc2VcXFwiOlxcXCI6cmV0dXJuXFxcIm1hcC12YWx1ZS1pbmRcXFwiO2Nhc2VcXFwie1xcXCI6cmV0dXJuXFxcImZsb3ctbWFwLXN0YXJ0XFxcIjtjYXNlXFxcIn1cXFwiOnJldHVyblxcXCJmbG93LW1hcC1lbmRcXFwiO2Nhc2VcXFwiW1xcXCI6cmV0dXJuXFxcImZsb3ctc2VxLXN0YXJ0XFxcIjtjYXNlXFxcIl1cXFwiOnJldHVyblxcXCJmbG93LXNlcS1lbmRcXFwiO2Nhc2VcXFwiLFxcXCI6cmV0dXJuXFxcImNvbW1hXFxcIn1zd2l0Y2goblswXSl7Y2FzZVxcXCIgXFxcIjpjYXNlXFxcIlxcdFxcXCI6cmV0dXJuXFxcInNwYWNlXFxcIjtjYXNlXFxcIiNcXFwiOnJldHVyblxcXCJjb21tZW50XFxcIjtjYXNlXFxcIiVcXFwiOnJldHVyblxcXCJkaXJlY3RpdmUtbGluZVxcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm5cXFwiYWxpYXNcXFwiO2Nhc2VcXFwiJlxcXCI6cmV0dXJuXFxcImFuY2hvclxcXCI7Y2FzZVxcXCIhXFxcIjpyZXR1cm5cXFwidGFnXFxcIjtjYXNlXFxcIidcXFwiOnJldHVyblxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI7Y2FzZSdcXFwiJzpyZXR1cm5cXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjpyZXR1cm5cXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUmUobil7c3dpdGNoKG4pe2Nhc2Ugdm9pZCAwOmNhc2VcXFwiIFxcXCI6Y2FzZWBcXG5gOmNhc2VcXFwiXFxcXHJcXFwiOmNhc2VcXFwiXFx0XFxcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgU3U9XFxcIjAxMjM0NTY3ODlBQkNERUZhYmNkZWZcXFwiLnNwbGl0KFxcXCJcXFwiKSxwZj1cXFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotIzsvPzpAJj0rJF8uIX4qJygpXFxcIi5zcGxpdChcXFwiXFxcIiksaW89XFxcIixbXXt9XFxcIi5zcGxpdChcXFwiXFxcIiksbWY9YCAsW117fVxcblxcXFxyXFx0YC5zcGxpdChcXFwiXFxcIiksb289bj0+IW58fG1mLmluY2x1ZGVzKG4pLHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdEVuZD0hMSx0aGlzLmJsb2NrU2NhbGFySW5kZW50PS0xLHRoaXMuYmxvY2tTY2FsYXJLZWVwPSExLHRoaXMuYnVmZmVyPVxcXCJcXFwiLHRoaXMuZmxvd0tleT0hMSx0aGlzLmZsb3dMZXZlbD0wLHRoaXMuaW5kZW50TmV4dD0wLHRoaXMuaW5kZW50VmFsdWU9MCx0aGlzLmxpbmVFbmRQb3M9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnBvcz0wfSpsZXgoZSx0PSExKXt2YXIgcztlJiYodGhpcy5idWZmZXI9dGhpcy5idWZmZXI/dGhpcy5idWZmZXIrZTplLHRoaXMubGluZUVuZFBvcz1udWxsKSx0aGlzLmF0RW5kPSF0O2xldCByPShzPXRoaXMubmV4dCkhPW51bGw/czpcXFwic3RyZWFtXFxcIjtmb3IoO3ImJih0fHx0aGlzLmhhc0NoYXJzKDEpKTspcj15aWVsZCp0aGlzLnBhcnNlTmV4dChyKX1hdExpbmVFbmQoKXtsZXQgZT10aGlzLnBvcyx0PXRoaXMuYnVmZmVyW2VdO2Zvcig7dD09PVxcXCIgXFxcInx8dD09PVxcXCJcXHRcXFwiOyl0PXRoaXMuYnVmZmVyWysrZV07cmV0dXJuIXR8fHQ9PT1cXFwiI1xcXCJ8fHQ9PT1gXFxuYD8hMDp0PT09XFxcIlxcXFxyXFxcIj90aGlzLmJ1ZmZlcltlKzFdPT09YFxcbmA6ITF9Y2hhckF0KGUpe3JldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcytlXX1jb250aW51ZVNjYWxhcihlKXtsZXQgdD10aGlzLmJ1ZmZlcltlXTtpZih0aGlzLmluZGVudE5leHQ+MCl7bGV0IHI9MDtmb3IoO3Q9PT1cXFwiIFxcXCI7KXQ9dGhpcy5idWZmZXJbKytyK2VdO2lmKHQ9PT1cXFwiXFxcXHJcXFwiKXtsZXQgcz10aGlzLmJ1ZmZlcltyK2UrMV07aWYocz09PWBcXG5gfHwhcyYmIXRoaXMuYXRFbmQpcmV0dXJuIGUrcisxfXJldHVybiB0PT09YFxcbmB8fHI+PXRoaXMuaW5kZW50TmV4dHx8IXQmJiF0aGlzLmF0RW5kP2UrcjotMX1pZih0PT09XFxcIi1cXFwifHx0PT09XFxcIi5cXFwiKXtsZXQgcj10aGlzLmJ1ZmZlci5zdWJzdHIoZSwzKTtpZigocj09PVxcXCItLS1cXFwifHxyPT09XFxcIi4uLlxcXCIpJiZSZSh0aGlzLmJ1ZmZlcltlKzNdKSlyZXR1cm4tMX1yZXR1cm4gZX1nZXRMaW5lKCl7bGV0IGU9dGhpcy5saW5lRW5kUG9zO3JldHVybih0eXBlb2YgZSE9XFxcIm51bWJlclxcXCJ8fGUhPT0tMSYmZTx0aGlzLnBvcykmJihlPXRoaXMuYnVmZmVyLmluZGV4T2YoYFxcbmAsdGhpcy5wb3MpLHRoaXMubGluZUVuZFBvcz1lKSxlPT09LTE/dGhpcy5hdEVuZD90aGlzLmJ1ZmZlci5zdWJzdHJpbmcodGhpcy5wb3MpOm51bGw6KHRoaXMuYnVmZmVyW2UtMV09PT1cXFwiXFxcXHJcXFwiJiYoZS09MSksdGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zLGUpKX1oYXNDaGFycyhlKXtyZXR1cm4gdGhpcy5wb3MrZTw9dGhpcy5idWZmZXIubGVuZ3RofXNldE5leHQoZSl7cmV0dXJuIHRoaXMuYnVmZmVyPXRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyksdGhpcy5wb3M9MCx0aGlzLmxpbmVFbmRQb3M9bnVsbCx0aGlzLm5leHQ9ZSxudWxsfXBlZWsoZSl7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cih0aGlzLnBvcyxlKX0qcGFyc2VOZXh0KGUpe3N3aXRjaChlKXtjYXNlXFxcInN0cmVhbVxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VTdHJlYW0oKTtjYXNlXFxcImxpbmUtc3RhcnRcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlTGluZVN0YXJ0KCk7Y2FzZVxcXCJibG9jay1zdGFydFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VCbG9ja1N0YXJ0KCk7Y2FzZVxcXCJkb2NcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlRG9jdW1lbnQoKTtjYXNlXFxcImZsb3dcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlRmxvd0NvbGxlY3Rpb24oKTtjYXNlXFxcInF1b3RlZC1zY2FsYXJcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlUXVvdGVkU2NhbGFyKCk7Y2FzZVxcXCJibG9jay1zY2FsYXJcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlQmxvY2tTY2FsYXIoKTtjYXNlXFxcInBsYWluLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VQbGFpblNjYWxhcigpfX0qcGFyc2VTdHJlYW0oKXtsZXQgZT10aGlzLmdldExpbmUoKTtpZihlPT09bnVsbClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJzdHJlYW1cXFwiKTtpZihlWzBdPT09bm8mJih5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSxlPWUuc3Vic3RyaW5nKDEpKSxlWzBdPT09XFxcIiVcXFwiKXtsZXQgdD1lLmxlbmd0aCxyPWUuaW5kZXhPZihcXFwiI1xcXCIpO2lmKHIhPT0tMSl7bGV0IGk9ZVtyLTFdOyhpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCIpJiYodD1yLTEpfWZvcig7Oyl7bGV0IGk9ZVt0LTFdO2lmKGk9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIil0LT0xO2Vsc2UgYnJlYWt9bGV0IHM9KHlpZWxkKnRoaXMucHVzaENvdW50KHQpKSsoeWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSk7cmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KGUubGVuZ3RoLXMpLHRoaXMucHVzaE5ld2xpbmUoKSxcXFwic3RyZWFtXFxcIn1pZih0aGlzLmF0TGluZUVuZCgpKXtsZXQgdD15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApO3JldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudChlLmxlbmd0aC10KSx5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCksXFxcInN0cmVhbVxcXCJ9cmV0dXJuIHlpZWxkIHJvLHlpZWxkKnRoaXMucGFyc2VMaW5lU3RhcnQoKX0qcGFyc2VMaW5lU3RhcnQoKXtsZXQgZT10aGlzLmNoYXJBdCgwKTtpZighZSYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwibGluZS1zdGFydFxcXCIpO2lmKGU9PT1cXFwiLVxcXCJ8fGU9PT1cXFwiLlxcXCIpe2lmKCF0aGlzLmF0RW5kJiYhdGhpcy5oYXNDaGFycyg0KSlyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJsaW5lLXN0YXJ0XFxcIik7bGV0IHQ9dGhpcy5wZWVrKDMpO2lmKHQ9PT1cXFwiLS0tXFxcIiYmUmUodGhpcy5jaGFyQXQoMykpKXJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgzKSx0aGlzLmluZGVudFZhbHVlPTAsdGhpcy5pbmRlbnROZXh0PTAsXFxcImRvY1xcXCI7aWYodD09PVxcXCIuLi5cXFwiJiZSZSh0aGlzLmNoYXJBdCgzKSkpcmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KDMpLFxcXCJzdHJlYW1cXFwifXJldHVybiB0aGlzLmluZGVudFZhbHVlPXlpZWxkKnRoaXMucHVzaFNwYWNlcyghMSksdGhpcy5pbmRlbnROZXh0PnRoaXMuaW5kZW50VmFsdWUmJiFSZSh0aGlzLmNoYXJBdCgxKSkmJih0aGlzLmluZGVudE5leHQ9dGhpcy5pbmRlbnRWYWx1ZSkseWllbGQqdGhpcy5wYXJzZUJsb2NrU3RhcnQoKX0qcGFyc2VCbG9ja1N0YXJ0KCl7bGV0W2UsdF09dGhpcy5wZWVrKDIpO2lmKCF0JiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zdGFydFxcXCIpO2lmKChlPT09XFxcIi1cXFwifHxlPT09XFxcIj9cXFwifHxlPT09XFxcIjpcXFwiKSYmUmUodCkpe2xldCByPSh5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpO3JldHVybiB0aGlzLmluZGVudE5leHQ9dGhpcy5pbmRlbnRWYWx1ZSsxLHRoaXMuaW5kZW50VmFsdWUrPXIseWllbGQqdGhpcy5wYXJzZUJsb2NrU3RhcnQoKX1yZXR1cm5cXFwiZG9jXFxcIn0qcGFyc2VEb2N1bWVudCgpe3lpZWxkKnRoaXMucHVzaFNwYWNlcyghMCk7bGV0IGU9dGhpcy5nZXRMaW5lKCk7aWYoZT09PW51bGwpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiZG9jXFxcIik7bGV0IHQ9eWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpO3N3aXRjaChlW3RdKXtjYXNlXFxcIiNcXFwiOnlpZWxkKnRoaXMucHVzaENvdW50KGUubGVuZ3RoLXQpO2Nhc2Ugdm9pZCAwOnJldHVybiB5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCkseWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpO2Nhc2VcXFwie1xcXCI6Y2FzZVxcXCJbXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksdGhpcy5mbG93S2V5PSExLHRoaXMuZmxvd0xldmVsPTEsXFxcImZsb3dcXFwiO2Nhc2VcXFwifVxcXCI6Y2FzZVxcXCJdXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksXFxcImRvY1xcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoVW50aWwob28pLFxcXCJkb2NcXFwiO2Nhc2UnXFxcIic6Y2FzZVxcXCInXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjpyZXR1cm4gdCs9eWllbGQqdGhpcy5wYXJzZUJsb2NrU2NhbGFySGVhZGVyKCksdCs9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSx5aWVsZCp0aGlzLnB1c2hDb3VudChlLmxlbmd0aC10KSx5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCkseWllbGQqdGhpcy5wYXJzZUJsb2NrU2NhbGFyKCk7ZGVmYXVsdDpyZXR1cm4geWllbGQqdGhpcy5wYXJzZVBsYWluU2NhbGFyKCl9fSpwYXJzZUZsb3dDb2xsZWN0aW9uKCl7bGV0IGUsdCxyPS0xO2RvIGU9eWllbGQqdGhpcy5wdXNoTmV3bGluZSgpLGU+MD8odD15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITEpLHRoaXMuaW5kZW50VmFsdWU9cj10KTp0PTAsdCs9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKTt3aGlsZShlK3Q+MCk7bGV0IHM9dGhpcy5nZXRMaW5lKCk7aWYocz09PW51bGwpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiZmxvd1xcXCIpO2lmKChyIT09LTEmJnI8dGhpcy5pbmRlbnROZXh0JiZzWzBdIT09XFxcIiNcXFwifHxyPT09MCYmKHMuc3RhcnRzV2l0aChcXFwiLS0tXFxcIil8fHMuc3RhcnRzV2l0aChcXFwiLi4uXFxcIikpJiZSZShzWzNdKSkmJiEocj09PXRoaXMuaW5kZW50TmV4dC0xJiZ0aGlzLmZsb3dMZXZlbD09PTEmJihzWzBdPT09XFxcIl1cXFwifHxzWzBdPT09XFxcIn1cXFwiKSkpcmV0dXJuIHRoaXMuZmxvd0xldmVsPTAseWllbGQgc28seWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpO2xldCBpPTA7Zm9yKDtzW2ldPT09XFxcIixcXFwiOylpKz15aWVsZCp0aGlzLnB1c2hDb3VudCgxKSxpKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApLHRoaXMuZmxvd0tleT0hMTtzd2l0Y2goaSs9eWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpLHNbaV0pe2Nhc2Ugdm9pZCAwOnJldHVyblxcXCJmbG93XFxcIjtjYXNlXFxcIiNcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudChzLmxlbmd0aC1pKSxcXFwiZmxvd1xcXCI7Y2FzZVxcXCJ7XFxcIjpjYXNlXFxcIltcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSx0aGlzLmZsb3dLZXk9ITEsdGhpcy5mbG93TGV2ZWwrPTEsXFxcImZsb3dcXFwiO2Nhc2VcXFwifVxcXCI6Y2FzZVxcXCJdXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksdGhpcy5mbG93S2V5PSEwLHRoaXMuZmxvd0xldmVsLT0xLHRoaXMuZmxvd0xldmVsP1xcXCJmbG93XFxcIjpcXFwiZG9jXFxcIjtjYXNlXFxcIipcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hVbnRpbChvbyksXFxcImZsb3dcXFwiO2Nhc2UnXFxcIic6Y2FzZVxcXCInXFxcIjpyZXR1cm4gdGhpcy5mbG93S2V5PSEwLHlpZWxkKnRoaXMucGFyc2VRdW90ZWRTY2FsYXIoKTtjYXNlXFxcIjpcXFwiOntsZXQgbz10aGlzLmNoYXJBdCgxKTtpZih0aGlzLmZsb3dLZXl8fFJlKG8pfHxvPT09XFxcIixcXFwiKXJldHVybiB0aGlzLmZsb3dLZXk9ITEseWllbGQqdGhpcy5wdXNoQ291bnQoMSkseWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSxcXFwiZmxvd1xcXCJ9ZGVmYXVsdDpyZXR1cm4gdGhpcy5mbG93S2V5PSExLHlpZWxkKnRoaXMucGFyc2VQbGFpblNjYWxhcigpfX0qcGFyc2VRdW90ZWRTY2FsYXIoKXtsZXQgZT10aGlzLmNoYXJBdCgwKSx0PXRoaXMuYnVmZmVyLmluZGV4T2YoZSx0aGlzLnBvcysxKTtpZihlPT09XFxcIidcXFwiKWZvcig7dCE9PS0xJiZ0aGlzLmJ1ZmZlclt0KzFdPT09XFxcIidcXFwiOyl0PXRoaXMuYnVmZmVyLmluZGV4T2YoXFxcIidcXFwiLHQrMik7ZWxzZSBmb3IoO3QhPT0tMTspe2xldCBpPTA7Zm9yKDt0aGlzLmJ1ZmZlclt0LTEtaV09PT1cXFwiXFxcXFxcXFxcXFwiOylpKz0xO2lmKGklMj09PTApYnJlYWs7dD10aGlzLmJ1ZmZlci5pbmRleE9mKCdcXFwiJyx0KzEpfWxldCByPXRoaXMuYnVmZmVyLnN1YnN0cmluZygwLHQpLHM9ci5pbmRleE9mKGBcXG5gLHRoaXMucG9zKTtpZihzIT09LTEpe2Zvcig7cyE9PS0xOyl7bGV0IGk9dGhpcy5jb250aW51ZVNjYWxhcihzKzEpO2lmKGk9PT0tMSlicmVhaztzPXIuaW5kZXhPZihgXFxuYCxpKX1zIT09LTEmJih0PXMtKHJbcy0xXT09PVxcXCJcXFxcclxcXCI/MjoxKSl9aWYodD09PS0xKXtpZighdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJxdW90ZWQtc2NhbGFyXFxcIik7dD10aGlzLmJ1ZmZlci5sZW5ndGh9cmV0dXJuIHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodCsxLCExKSx0aGlzLmZsb3dMZXZlbD9cXFwiZmxvd1xcXCI6XFxcImRvY1xcXCJ9KnBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoKXt0aGlzLmJsb2NrU2NhbGFySW5kZW50PS0xLHRoaXMuYmxvY2tTY2FsYXJLZWVwPSExO2xldCBlPXRoaXMucG9zO2Zvcig7Oyl7bGV0IHQ9dGhpcy5idWZmZXJbKytlXTtpZih0PT09XFxcIitcXFwiKXRoaXMuYmxvY2tTY2FsYXJLZWVwPSEwO2Vsc2UgaWYodD5cXFwiMFxcXCImJnQ8PVxcXCI5XFxcIil0aGlzLmJsb2NrU2NhbGFySW5kZW50PU51bWJlcih0KS0xO2Vsc2UgaWYodCE9PVxcXCItXFxcIilicmVha31yZXR1cm4geWllbGQqdGhpcy5wdXNoVW50aWwodD0+UmUodCl8fHQ9PT1cXFwiI1xcXCIpfSpwYXJzZUJsb2NrU2NhbGFyKCl7bGV0IGU9dGhpcy5wb3MtMSx0PTAscjtlOmZvcihsZXQgcz10aGlzLnBvcztyPXRoaXMuYnVmZmVyW3NdOysrcylzd2l0Y2gocil7Y2FzZVxcXCIgXFxcIjp0Kz0xO2JyZWFrO2Nhc2VgXFxuYDplPXMsdD0wO2JyZWFrO2Nhc2VcXFwiXFxcXHJcXFwiOntsZXQgaT10aGlzLmJ1ZmZlcltzKzFdO2lmKCFpJiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zY2FsYXJcXFwiKTtpZihpPT09YFxcbmApYnJlYWt9ZGVmYXVsdDpicmVhayBlfWlmKCFyJiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zY2FsYXJcXFwiKTtpZih0Pj10aGlzLmluZGVudE5leHQpe3RoaXMuYmxvY2tTY2FsYXJJbmRlbnQ9PT0tMT90aGlzLmluZGVudE5leHQ9dDp0aGlzLmluZGVudE5leHQrPXRoaXMuYmxvY2tTY2FsYXJJbmRlbnQ7ZG97bGV0IHM9dGhpcy5jb250aW51ZVNjYWxhcihlKzEpO2lmKHM9PT0tMSlicmVhaztlPXRoaXMuYnVmZmVyLmluZGV4T2YoYFxcbmAscyl9d2hpbGUoZSE9PS0xKTtpZihlPT09LTEpe2lmKCF0aGlzLmF0RW5kKXJldHVybiB0aGlzLnNldE5leHQoXFxcImJsb2NrLXNjYWxhclxcXCIpO2U9dGhpcy5idWZmZXIubGVuZ3RofX1pZighdGhpcy5ibG9ja1NjYWxhcktlZXApZG97bGV0IHM9ZS0xLGk9dGhpcy5idWZmZXJbc107aT09PVxcXCJcXFxcclxcXCImJihpPXRoaXMuYnVmZmVyWy0tc10pO2xldCBvPXM7Zm9yKDtpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCI7KWk9dGhpcy5idWZmZXJbLS1zXTtpZihpPT09YFxcbmAmJnM+PXRoaXMucG9zJiZzKzErdD5vKWU9cztlbHNlIGJyZWFrfXdoaWxlKCEwKTtyZXR1cm4geWllbGQgQXMseWllbGQqdGhpcy5wdXNoVG9JbmRleChlKzEsITApLHlpZWxkKnRoaXMucGFyc2VMaW5lU3RhcnQoKX0qcGFyc2VQbGFpblNjYWxhcigpe2xldCBlPXRoaXMuZmxvd0xldmVsPjAsdD10aGlzLnBvcy0xLHI9dGhpcy5wb3MtMSxzO2Zvcig7cz10aGlzLmJ1ZmZlclsrK3JdOylpZihzPT09XFxcIjpcXFwiKXtsZXQgaT10aGlzLmJ1ZmZlcltyKzFdO2lmKFJlKGkpfHxlJiZpPT09XFxcIixcXFwiKWJyZWFrO3Q9cn1lbHNlIGlmKFJlKHMpKXtsZXQgaT10aGlzLmJ1ZmZlcltyKzFdO2lmKHM9PT1cXFwiXFxcXHJcXFwiJiYoaT09PWBcXG5gPyhyKz0xLHM9YFxcbmAsaT10aGlzLmJ1ZmZlcltyKzFdKTp0PXIpLGk9PT1cXFwiI1xcXCJ8fGUmJmlvLmluY2x1ZGVzKGkpKWJyZWFrO2lmKHM9PT1gXFxuYCl7bGV0IG89dGhpcy5jb250aW51ZVNjYWxhcihyKzEpO2lmKG89PT0tMSlicmVhaztyPU1hdGgubWF4KHIsby0yKX19ZWxzZXtpZihlJiZpby5pbmNsdWRlcyhzKSlicmVhazt0PXJ9cmV0dXJuIXMmJiF0aGlzLmF0RW5kP3RoaXMuc2V0TmV4dChcXFwicGxhaW4tc2NhbGFyXFxcIik6KHlpZWxkIEFzLHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodCsxLCEwKSxlP1xcXCJmbG93XFxcIjpcXFwiZG9jXFxcIil9KnB1c2hDb3VudChlKXtyZXR1cm4gZT4wPyh5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsZSksdGhpcy5wb3MrPWUsZSk6MH0qcHVzaFRvSW5kZXgoZSx0KXtsZXQgcj10aGlzLmJ1ZmZlci5zbGljZSh0aGlzLnBvcyxlKTtyZXR1cm4gcj8oeWllbGQgcix0aGlzLnBvcys9ci5sZW5ndGgsci5sZW5ndGgpOih0JiYoeWllbGRcXFwiXFxcIiksMCl9KnB1c2hJbmRpY2F0b3JzKCl7c3dpdGNoKHRoaXMuY2hhckF0KDApKXtjYXNlXFxcIiFcXFwiOnJldHVybih5aWVsZCp0aGlzLnB1c2hUYWcoKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpKyh5aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCkpO2Nhc2VcXFwiJlxcXCI6cmV0dXJuKHlpZWxkKnRoaXMucHVzaFVudGlsKG9vKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpKyh5aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCkpO2Nhc2VcXFwiLVxcXCI6Y2FzZVxcXCI/XFxcIjpjYXNlXFxcIjpcXFwiOntsZXQgZT10aGlzLmZsb3dMZXZlbD4wLHQ9dGhpcy5jaGFyQXQoMSk7aWYoUmUodCl8fGUmJmlvLmluY2x1ZGVzKHQpKXJldHVybiBlP3RoaXMuZmxvd0tleSYmKHRoaXMuZmxvd0tleT0hMSk6dGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUrMSwoeWllbGQqdGhpcy5wdXNoQ291bnQoMSkpKyh5aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApKSsoeWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpKX19cmV0dXJuIDB9KnB1c2hUYWcoKXtpZih0aGlzLmNoYXJBdCgxKT09PVxcXCI8XFxcIil7bGV0IGU9dGhpcy5wb3MrMix0PXRoaXMuYnVmZmVyW2VdO2Zvcig7IVJlKHQpJiZ0IT09XFxcIj5cXFwiOyl0PXRoaXMuYnVmZmVyWysrZV07cmV0dXJuIHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodD09PVxcXCI+XFxcIj9lKzE6ZSwhMSl9ZWxzZXtsZXQgZT10aGlzLnBvcysxLHQ9dGhpcy5idWZmZXJbZV07Zm9yKDt0OylpZihwZi5pbmNsdWRlcyh0KSl0PXRoaXMuYnVmZmVyWysrZV07ZWxzZSBpZih0PT09XFxcIiVcXFwiJiZTdS5pbmNsdWRlcyh0aGlzLmJ1ZmZlcltlKzFdKSYmU3UuaW5jbHVkZXModGhpcy5idWZmZXJbZSsyXSkpdD10aGlzLmJ1ZmZlcltlKz0zXTtlbHNlIGJyZWFrO3JldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KGUsITEpfX0qcHVzaE5ld2xpbmUoKXtsZXQgZT10aGlzLmJ1ZmZlclt0aGlzLnBvc107cmV0dXJuIGU9PT1gXFxuYD95aWVsZCp0aGlzLnB1c2hDb3VudCgxKTplPT09XFxcIlxcXFxyXFxcIiYmdGhpcy5jaGFyQXQoMSk9PT1gXFxuYD95aWVsZCp0aGlzLnB1c2hDb3VudCgyKTowfSpwdXNoU3BhY2VzKGUpe2xldCB0PXRoaXMucG9zLTEscjtkbyByPXRoaXMuYnVmZmVyWysrdF07d2hpbGUocj09PVxcXCIgXFxcInx8ZSYmcj09PVxcXCJcXHRcXFwiKTtsZXQgcz10LXRoaXMucG9zO3JldHVybiBzPjAmJih5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MscyksdGhpcy5wb3M9dCksc30qcHVzaFVudGlsKGUpe2xldCB0PXRoaXMucG9zLHI9dGhpcy5idWZmZXJbdF07Zm9yKDshZShyKTspcj10aGlzLmJ1ZmZlclsrK3RdO3JldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KHQsITEpfX07dmFyIElyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lU3RhcnRzPVtdLHRoaXMuYWRkTmV3TGluZT1lPT50aGlzLmxpbmVTdGFydHMucHVzaChlKSx0aGlzLmxpbmVQb3M9ZT0+e2xldCB0PTAscj10aGlzLmxpbmVTdGFydHMubGVuZ3RoO2Zvcig7dDxyOyl7bGV0IGk9dCtyPj4xO3RoaXMubGluZVN0YXJ0c1tpXTxlP3Q9aSsxOnI9aX1pZih0aGlzLmxpbmVTdGFydHNbdF09PT1lKXJldHVybntsaW5lOnQrMSxjb2w6MX07aWYodD09PTApcmV0dXJue2xpbmU6MCxjb2w6ZX07bGV0IHM9dGhpcy5saW5lU3RhcnRzW3QtMV07cmV0dXJue2xpbmU6dCxjb2w6ZS1zKzF9fX19O2Z1bmN0aW9uIGV0KG4sZSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDsrK3QpaWYoblt0XS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrdShuKXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzd2l0Y2gobltlXS50eXBlKXtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX1yZXR1cm4tMX1mdW5jdGlvbiB4dShuKXtzd2l0Y2gobj09bnVsbD92b2lkIDA6bi50eXBlKXtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE1zKG4pe3ZhciBlO3N3aXRjaChuLnR5cGUpe2Nhc2VcXFwiZG9jdW1lbnRcXFwiOnJldHVybiBuLnN0YXJ0O2Nhc2VcXFwiYmxvY2stbWFwXFxcIjp7bGV0IHQ9bi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXTtyZXR1cm4oZT10LnNlcCkhPW51bGw/ZTp0LnN0YXJ0fWNhc2VcXFwiYmxvY2stc2VxXFxcIjpyZXR1cm4gbi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXS5zdGFydDtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiBObihuKXt2YXIgdDtpZihuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IGU9bi5sZW5ndGg7ZTpmb3IoOy0tZT49MDspc3dpdGNoKG5bZV0udHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOmNhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjpicmVhayBlfWZvcig7KCh0PW5bKytlXSk9PW51bGw/dm9pZCAwOnQudHlwZSk9PT1cXFwic3BhY2VcXFwiOyk7cmV0dXJuIG4uc3BsaWNlKGUsbi5sZW5ndGgpfWZ1bmN0aW9uIEN1KG4pe2lmKG4uc3RhcnQudHlwZT09PVxcXCJmbG93LXNlcS1zdGFydFxcXCIpZm9yKGxldCBlIG9mIG4uaXRlbXMpZS5zZXAmJiFlLnZhbHVlJiYhZXQoZS5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpJiYhZXQoZS5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKSYmKGUua2V5JiYoZS52YWx1ZT1lLmtleSksZGVsZXRlIGUua2V5LHh1KGUudmFsdWUpP2UudmFsdWUuZW5kP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUudmFsdWUuZW5kLGUuc2VwKTplLnZhbHVlLmVuZD1lLnNlcDpBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLnN0YXJ0LGUuc2VwKSxkZWxldGUgZS5zZXApfXZhciBOcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmF0U2NhbGFyPSExLHRoaXMuaW5kZW50PTAsdGhpcy5vZmZzZXQ9MCx0aGlzLm9uS2V5TGluZT0hMSx0aGlzLnN0YWNrPVtdLHRoaXMuc291cmNlPVxcXCJcXFwiLHRoaXMudHlwZT1cXFwiXFxcIix0aGlzLmxleGVyPW5ldyB2cix0aGlzLm9uTmV3TGluZT1lfSpwYXJzZShlLHQ9ITEpe3RoaXMub25OZXdMaW5lJiZ0aGlzLm9mZnNldD09PTAmJnRoaXMub25OZXdMaW5lKDApO2ZvcihsZXQgciBvZiB0aGlzLmxleGVyLmxleChlLHQpKXlpZWxkKnRoaXMubmV4dChyKTt0fHwoeWllbGQqdGhpcy5lbmQoKSl9Km5leHQoZSl7aWYodGhpcy5zb3VyY2U9ZSx0aGlzLmF0U2NhbGFyKXt0aGlzLmF0U2NhbGFyPSExLHlpZWxkKnRoaXMuc3RlcCgpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aDtyZXR1cm59bGV0IHQ9VHUoZSk7aWYodClpZih0PT09XFxcInNjYWxhclxcXCIpdGhpcy5hdE5ld0xpbmU9ITEsdGhpcy5hdFNjYWxhcj0hMCx0aGlzLnR5cGU9XFxcInNjYWxhclxcXCI7ZWxzZXtzd2l0Y2godGhpcy50eXBlPXQseWllbGQqdGhpcy5zdGVwKCksdCl7Y2FzZVxcXCJuZXdsaW5lXFxcIjp0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lJiZ0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCtlLmxlbmd0aCk7YnJlYWs7Y2FzZVxcXCJzcGFjZVxcXCI6dGhpcy5hdE5ld0xpbmUmJmVbMF09PT1cXFwiIFxcXCImJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6dGhpcy5hdE5ld0xpbmUmJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZG9jLW1vZGVcXFwiOmNhc2VcXFwiZmxvdy1lcnJvci1lbmRcXFwiOnJldHVybjtkZWZhdWx0OnRoaXMuYXROZXdMaW5lPSExfXRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1lbHNle2xldCByPWBOb3QgYSBZQU1MIHRva2VuOiAke2V9YDt5aWVsZCp0aGlzLnBvcCh7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOnIsc291cmNlOmV9KSx0aGlzLm9mZnNldCs9ZS5sZW5ndGh9fSplbmQoKXtmb3IoO3RoaXMuc3RhY2subGVuZ3RoPjA7KXlpZWxkKnRoaXMucG9wKCl9Z2V0IHNvdXJjZVRva2VuKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsc291cmNlOnRoaXMuc291cmNlfX0qc3RlcCgpe2xldCBlPXRoaXMucGVlaygxKTtpZih0aGlzLnR5cGU9PT1cXFwiZG9jLWVuZFxcXCImJighZXx8ZS50eXBlIT09XFxcImRvYy1lbmRcXFwiKSl7Zm9yKDt0aGlzLnN0YWNrLmxlbmd0aD4wOyl5aWVsZCp0aGlzLnBvcCgpO3RoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiZG9jLWVuZFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX0pO3JldHVybn1pZighZSlyZXR1cm4geWllbGQqdGhpcy5zdHJlYW0oKTtzd2l0Y2goZS50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyZXR1cm4geWllbGQqdGhpcy5kb2N1bWVudChlKTtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuc2NhbGFyKGUpO2Nhc2VcXFwiYmxvY2stc2NhbGFyXFxcIjpyZXR1cm4geWllbGQqdGhpcy5ibG9ja1NjYWxhcihlKTtjYXNlXFxcImJsb2NrLW1hcFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuYmxvY2tNYXAoZSk7Y2FzZVxcXCJibG9jay1zZXFcXFwiOnJldHVybiB5aWVsZCp0aGlzLmJsb2NrU2VxdWVuY2UoZSk7Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiB5aWVsZCp0aGlzLmZsb3dDb2xsZWN0aW9uKGUpO2Nhc2VcXFwiZG9jLWVuZFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuZG9jdW1lbnRFbmQoZSl9eWllbGQqdGhpcy5wb3AoKX1wZWVrKGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWVdfSpwb3AoZSl7bGV0IHQ9ZSE9bnVsbD9lOnRoaXMuc3RhY2sucG9wKCk7aWYodClpZih0aGlzLnN0YWNrLmxlbmd0aD09PTApeWllbGQgdDtlbHNle2xldCByPXRoaXMucGVlaygxKTtzd2l0Y2godC50eXBlPT09XFxcImJsb2NrLXNjYWxhclxcXCI/dC5pbmRlbnQ9XFxcImluZGVudFxcXCJpbiByP3IuaW5kZW50OjA6dC50eXBlPT09XFxcImZsb3ctY29sbGVjdGlvblxcXCImJnIudHlwZT09PVxcXCJkb2N1bWVudFxcXCImJih0LmluZGVudD0wKSx0LnR5cGU9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIiYmQ3UodCksci50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyLnZhbHVlPXQ7YnJlYWs7Y2FzZVxcXCJibG9jay1zY2FsYXJcXFwiOnIucHJvcHMucHVzaCh0KTticmVhaztjYXNlXFxcImJsb2NrLW1hcFxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07aWYocy52YWx1ZSl7ci5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6dCxzZXA6W119KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm59ZWxzZSBpZihzLnNlcClzLnZhbHVlPXQ7ZWxzZXtPYmplY3QuYXNzaWduKHMse2tleTp0LHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSFldChzLnN0YXJ0LFxcXCJleHBsaWNpdC1rZXktaW5kXFxcIik7cmV0dXJufWJyZWFrfWNhc2VcXFwiYmxvY2stc2VxXFxcIjp7bGV0IHM9ci5pdGVtc1tyLml0ZW1zLmxlbmd0aC0xXTtzLnZhbHVlP3IuaXRlbXMucHVzaCh7c3RhcnQ6W10sdmFsdWU6dH0pOnMudmFsdWU9dDticmVha31jYXNlXFxcImZsb3ctY29sbGVjdGlvblxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07IXN8fHMudmFsdWU/ci5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6dCxzZXA6W119KTpzLnNlcD9zLnZhbHVlPXQ6T2JqZWN0LmFzc2lnbihzLHtrZXk6dCxzZXA6W119KTtyZXR1cm59ZGVmYXVsdDp5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMucG9wKHQpfWlmKChyLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwifHxyLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8ci50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpJiYodC50eXBlPT09XFxcImJsb2NrLW1hcFxcXCJ8fHQudHlwZT09PVxcXCJibG9jay1zZXFcXFwiKSl7bGV0IHM9dC5pdGVtc1t0Lml0ZW1zLmxlbmd0aC0xXTtzJiYhcy5zZXAmJiFzLnZhbHVlJiZzLnN0YXJ0Lmxlbmd0aD4wJiZrdShzLnN0YXJ0KT09PS0xJiYodC5pbmRlbnQ9PT0wfHxzLnN0YXJ0LmV2ZXJ5KGk9PmkudHlwZSE9PVxcXCJjb21tZW50XFxcInx8aS5pbmRlbnQ8dC5pbmRlbnQpKSYmKHIudHlwZT09PVxcXCJkb2N1bWVudFxcXCI/ci5lbmQ9cy5zdGFydDpyLml0ZW1zLnB1c2goe3N0YXJ0OnMuc3RhcnR9KSx0Lml0ZW1zLnNwbGljZSgtMSwxKSl9fWVsc2V7bGV0IHI9XFxcIlRyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFja1xcXCI7eWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzb3VyY2U6XFxcIlxcXCIsbWVzc2FnZTpyfX19KnN0cmVhbSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlLWxpbmVcXFwiOnlpZWxke3R5cGU6XFxcImRpcmVjdGl2ZVxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX07cmV0dXJuO2Nhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6eWllbGQgdGhpcy5zb3VyY2VUb2tlbjtyZXR1cm47Y2FzZVxcXCJkb2MtbW9kZVxcXCI6Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntsZXQgZT17dHlwZTpcXFwiZG9jdW1lbnRcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzdGFydDpbXX07dGhpcy50eXBlPT09XFxcImRvYy1zdGFydFxcXCImJmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKSx0aGlzLnN0YWNrLnB1c2goZSk7cmV0dXJufX15aWVsZHt0eXBlOlxcXCJlcnJvclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LG1lc3NhZ2U6YFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgc3RyZWFtYCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpkb2N1bWVudChlKXtpZihlLnZhbHVlKXJldHVybiB5aWVsZCp0aGlzLmxpbmVFbmQoZSk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntrdShlLnN0YXJ0KSE9PS0xPyh5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpKTplLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWNhc2VcXFwiYW5jaG9yXFxcIjpjYXNlXFxcInRhZ1xcXCI6Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjpjYXNlXFxcIm5ld2xpbmVcXFwiOmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59bGV0IHQ9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7dD90aGlzLnN0YWNrLnB1c2godCk6eWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOmBVbmV4cGVjdGVkICR7dGhpcy50eXBlfSB0b2tlbiBpbiBZQU1MIGRvY3VtZW50YCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpzY2FsYXIoZSl7aWYodGhpcy50eXBlPT09XFxcIm1hcC12YWx1ZS1pbmRcXFwiKXtsZXQgdD1Ncyh0aGlzLnBlZWsoMikpLHI9Tm4odCkscztlLmVuZD8ocz1lLmVuZCxzLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZGVsZXRlIGUuZW5kKTpzPVt0aGlzLnNvdXJjZVRva2VuXTtsZXQgaT17dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6ZS5vZmZzZXQsaW5kZW50OmUuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cixrZXk6ZSxzZXA6c31dfTt0aGlzLm9uS2V5TGluZT0hMCx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdPWl9ZWxzZSB5aWVsZCp0aGlzLmxpbmVFbmQoZSl9KmJsb2NrU2NhbGFyKGUpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjplLnByb3BzLnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic2NhbGFyXFxcIjppZihlLnNvdXJjZT10aGlzLnNvdXJjZSx0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lKXtsZXQgdD10aGlzLnNvdXJjZS5pbmRleE9mKGBcXG5gKSsxO2Zvcig7dCE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3QpLHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCx0KSsxfXlpZWxkKnRoaXMucG9wKCk7YnJlYWs7ZGVmYXVsdDp5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpfX0qYmxvY2tNYXAoZSl7dmFyIHI7bGV0IHQ9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmlmKHRoaXMub25LZXlMaW5lPSExLHQudmFsdWUpe2xldCBzPVxcXCJlbmRcXFwiaW4gdC52YWx1ZT90LnZhbHVlLmVuZDp2b2lkIDAsaT1BcnJheS5pc0FycmF5KHMpP3Nbcy5sZW5ndGgtMV06dm9pZCAwOyhpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09XFxcImNvbW1lbnRcXFwiP3M9PW51bGx8fHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pfWVsc2UgdC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6aWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pO2Vsc2UgaWYodC5zZXApdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtlbHNle2lmKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQodC5zdGFydCxlLmluZGVudCkpe2xldCBzPWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMl0saT0ocj1zPT1udWxsP3ZvaWQgMDpzLnZhbHVlKT09bnVsbD92b2lkIDA6ci5lbmQ7aWYoQXJyYXkuaXNBcnJheShpKSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSx0LnN0YXJ0KSxpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wb3AoKTtyZXR1cm59fXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKX1yZXR1cm59aWYodGhpcy5pbmRlbnQ+PWUuaW5kZW50KXtsZXQgcz0hdGhpcy5vbktleUxpbmUmJnRoaXMuaW5kZW50PT09ZS5pbmRlbnQmJnQuc2VwJiZ0aGlzLnR5cGUhPT1cXFwic2VxLWl0ZW0taW5kXFxcIixpPVtdO2lmKHMmJnQuc2VwJiYhdC52YWx1ZSl7bGV0IG89W107Zm9yKGxldCBhPTA7YTx0LnNlcC5sZW5ndGg7KythKXtsZXQgdT10LnNlcFthXTtzd2l0Y2godS50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOm8ucHVzaChhKTticmVhaztjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOnUuaW5kZW50PmUuaW5kZW50JiYoby5sZW5ndGg9MCk7YnJlYWs7ZGVmYXVsdDpvLmxlbmd0aD0wfX1vLmxlbmd0aD49MiYmKGk9dC5zZXAuc3BsaWNlKG9bMV0pKX1zd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImFuY2hvclxcXCI6Y2FzZVxcXCJ0YWdcXFwiOnN8fHQudmFsdWU/KGkucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxlLml0ZW1zLnB1c2goe3N0YXJ0Oml9KSx0aGlzLm9uS2V5TGluZT0hMCk6dC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6IXQuc2VwJiYhZXQodC5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpP3Quc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTpzfHx0LnZhbHVlPyhpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wdXNoKHtzdGFydDppfSkpOnRoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfV19KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm47Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjppZihldCh0LnN0YXJ0LFxcXCJleHBsaWNpdC1rZXktaW5kXFxcIikpaWYodC5zZXApaWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNlIGlmKGV0KHQuc2VwLFxcXCJtYXAtdmFsdWUtaW5kXFxcIikpdGhpcy5zdGFjay5wdXNoKHt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDppLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pO2Vsc2UgaWYoeHUodC5rZXkpJiYhZXQodC5zZXAsXFxcIm5ld2xpbmVcXFwiKSl7bGV0IG89Tm4odC5zdGFydCksYT10LmtleSx1PXQuc2VwO3UucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxkZWxldGUgdC5rZXksZGVsZXRlIHQuc2VwLHRoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6byxrZXk6YSxzZXA6dX1dfSl9ZWxzZSBpLmxlbmd0aD4wP3Quc2VwPXQuc2VwLmNvbmNhdChpLHRoaXMuc291cmNlVG9rZW4pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7ZWxzZSBpZihldCh0LnN0YXJ0LFxcXCJuZXdsaW5lXFxcIikpT2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZXtsZXQgbz1Obih0LnN0YXJ0KTt0aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0Om8sa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX1dfSl9ZWxzZSB0LnNlcD90LnZhbHVlfHxzP2UuaXRlbXMucHVzaCh7c3RhcnQ6aSxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk6ZXQodC5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKT90aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6T2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7dGhpcy5vbktleUxpbmU9ITA7cmV0dXJuO2Nhc2VcXFwiYWxpYXNcXFwiOmNhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjp7bGV0IG89dGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7c3x8dC52YWx1ZT8oZS5pdGVtcy5wdXNoKHtzdGFydDppLGtleTpvLHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSEwKTp0LnNlcD90aGlzLnN0YWNrLnB1c2gobyk6KE9iamVjdC5hc3NpZ24odCx7a2V5Om8sc2VwOltdfSksdGhpcy5vbktleUxpbmU9ITApO3JldHVybn1kZWZhdWx0OntsZXQgbz10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtpZihvKXtzJiZvLnR5cGUhPT1cXFwiYmxvY2stc2VxXFxcIiYmZXQodC5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpJiZlLml0ZW1zLnB1c2goe3N0YXJ0Oml9KSx0aGlzLnN0YWNrLnB1c2gobyk7cmV0dXJufX19fXlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCl9KmJsb2NrU2VxdWVuY2UoZSl7dmFyIHI7bGV0IHQ9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmlmKHQudmFsdWUpe2xldCBzPVxcXCJlbmRcXFwiaW4gdC52YWx1ZT90LnZhbHVlLmVuZDp2b2lkIDAsaT1BcnJheS5pc0FycmF5KHMpP3Nbcy5sZW5ndGgtMV06dm9pZCAwOyhpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09XFxcImNvbW1lbnRcXFwiP3M9PW51bGx8fHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pfWVsc2UgdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmlmKHQudmFsdWUpZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNle2lmKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQodC5zdGFydCxlLmluZGVudCkpe2xldCBzPWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMl0saT0ocj1zPT1udWxsP3ZvaWQgMDpzLnZhbHVlKT09bnVsbD92b2lkIDA6ci5lbmQ7aWYoQXJyYXkuaXNBcnJheShpKSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSx0LnN0YXJ0KSxpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wb3AoKTtyZXR1cm59fXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKX1yZXR1cm47Y2FzZVxcXCJhbmNob3JcXFwiOmNhc2VcXFwidGFnXFxcIjppZih0LnZhbHVlfHx0aGlzLmluZGVudDw9ZS5pbmRlbnQpYnJlYWs7dC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6aWYodGhpcy5pbmRlbnQhPT1lLmluZGVudClicmVhazt0LnZhbHVlfHxldCh0LnN0YXJ0LFxcXCJzZXEtaXRlbS1pbmRcXFwiKT9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59aWYodGhpcy5pbmRlbnQ+ZS5pbmRlbnQpe2xldCBzPXRoaXMuc3RhcnRCbG9ja1ZhbHVlKGUpO2lmKHMpe3RoaXMuc3RhY2sucHVzaChzKTtyZXR1cm59fXlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCl9KmZsb3dDb2xsZWN0aW9uKGUpe2xldCB0PWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMV07aWYodGhpcy50eXBlPT09XFxcImZsb3ctZXJyb3ItZW5kXFxcIil7bGV0IHI7ZG8geWllbGQqdGhpcy5wb3AoKSxyPXRoaXMucGVlaygxKTt3aGlsZShyJiZyLnR5cGU9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIil9ZWxzZSBpZihlLmVuZC5sZW5ndGg9PT0wKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiOiF0fHx0LnNlcD9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjohdHx8dC52YWx1ZT9lLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTp0LnNlcD90LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOk9iamVjdC5hc3NpZ24odCx7a2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pO3JldHVybjtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6Y2FzZVxcXCJhbmNob3JcXFwiOmNhc2VcXFwidGFnXFxcIjohdHx8dC52YWx1ZT9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc2VwP3Quc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6dC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6e2xldCBzPXRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpOyF0fHx0LnZhbHVlP2UuaXRlbXMucHVzaCh7c3RhcnQ6W10sa2V5OnMsc2VwOltdfSk6dC5zZXA/dGhpcy5zdGFjay5wdXNoKHMpOk9iamVjdC5hc3NpZ24odCx7a2V5OnMsc2VwOltdfSk7cmV0dXJufWNhc2VcXFwiZmxvdy1tYXAtZW5kXFxcIjpjYXNlXFxcImZsb3ctc2VxLWVuZFxcXCI6ZS5lbmQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59bGV0IHI9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7cj90aGlzLnN0YWNrLnB1c2gocik6KHlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCkpfWVsc2V7bGV0IHI9dGhpcy5wZWVrKDIpO2lmKHIudHlwZT09PVxcXCJibG9jay1tYXBcXFwiJiYodGhpcy50eXBlPT09XFxcIm1hcC12YWx1ZS1pbmRcXFwiJiZyLmluZGVudD09PWUuaW5kZW50fHx0aGlzLnR5cGU9PT1cXFwibmV3bGluZVxcXCImJiFyLml0ZW1zW3IuaXRlbXMubGVuZ3RoLTFdLnNlcCkpeWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKTtlbHNlIGlmKHRoaXMudHlwZT09PVxcXCJtYXAtdmFsdWUtaW5kXFxcIiYmci50eXBlIT09XFxcImZsb3ctY29sbGVjdGlvblxcXCIpe2xldCBzPU1zKHIpLGk9Tm4ocyk7Q3UoZSk7bGV0IG89ZS5lbmQuc3BsaWNlKDEsZS5lbmQubGVuZ3RoKTtvLnB1c2godGhpcy5zb3VyY2VUb2tlbik7bGV0IGE9e3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OmUub2Zmc2V0LGluZGVudDplLmluZGVudCxpdGVtczpbe3N0YXJ0Omksa2V5OmUsc2VwOm99XX07dGhpcy5vbktleUxpbmU9ITAsdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXT1hfWVsc2UgeWllbGQqdGhpcy5saW5lRW5kKGUpfX1mbG93U2NhbGFyKGUpe2lmKHRoaXMub25OZXdMaW5lKXtsZXQgdD10aGlzLnNvdXJjZS5pbmRleE9mKGBcXG5gKSsxO2Zvcig7dCE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3QpLHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCx0KSsxfXJldHVybnt0eXBlOmUsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxzb3VyY2U6dGhpcy5zb3VyY2V9fXN0YXJ0QmxvY2tWYWx1ZShlKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO2Nhc2VcXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCI6cmV0dXJue3R5cGU6XFxcImJsb2NrLXNjYWxhclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxwcm9wczpbdGhpcy5zb3VyY2VUb2tlbl0sc291cmNlOlxcXCJcXFwifTtjYXNlXFxcImZsb3ctbWFwLXN0YXJ0XFxcIjpjYXNlXFxcImZsb3ctc2VxLXN0YXJ0XFxcIjpyZXR1cm57dHlwZTpcXFwiZmxvdy1jb2xsZWN0aW9uXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LHN0YXJ0OnRoaXMuc291cmNlVG9rZW4saXRlbXM6W10sZW5kOltdfTtjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6cmV0dXJue3R5cGU6XFxcImJsb2NrLXNlcVxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX1dfTtjYXNlXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiOnt0aGlzLm9uS2V5TGluZT0hMDtsZXQgdD1NcyhlKSxyPU5uKHQpO3JldHVybiByLnB1c2godGhpcy5zb3VyY2VUb2tlbikse3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OnJ9XX19Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjp7dGhpcy5vbktleUxpbmU9ITA7bGV0IHQ9TXMoZSkscj1Obih0KTtyZXR1cm57dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cixrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfV19fX1yZXR1cm4gbnVsbH1hdEluZGVudGVkQ29tbWVudChlLHQpe3JldHVybiB0aGlzLnR5cGUhPT1cXFwiY29tbWVudFxcXCJ8fHRoaXMuaW5kZW50PD10PyExOmUuZXZlcnkocj0+ci50eXBlPT09XFxcIm5ld2xpbmVcXFwifHxyLnR5cGU9PT1cXFwic3BhY2VcXFwiKX0qZG9jdW1lbnRFbmQoZSl7dGhpcy50eXBlIT09XFxcImRvYy1tb2RlXFxcIiYmKGUuZW5kP2UuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5lbmQ9W3RoaXMuc291cmNlVG9rZW5dLHRoaXMudHlwZT09PVxcXCJuZXdsaW5lXFxcIiYmKHlpZWxkKnRoaXMucG9wKCkpKX0qbGluZUVuZChlKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcImRvYy1zdGFydFxcXCI6Y2FzZVxcXCJkb2MtZW5kXFxcIjpjYXNlXFxcImZsb3ctc2VxLWVuZFxcXCI6Y2FzZVxcXCJmbG93LW1hcC1lbmRcXFwiOmNhc2VcXFwibWFwLXZhbHVlLWluZFxcXCI6eWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKTticmVhaztjYXNlXFxcIm5ld2xpbmVcXFwiOnRoaXMub25LZXlMaW5lPSExO2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6ZGVmYXVsdDplLmVuZD9lLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOmUuZW5kPVt0aGlzLnNvdXJjZVRva2VuXSx0aGlzLnR5cGU9PT1cXFwibmV3bGluZVxcXCImJih5aWVsZCp0aGlzLnBvcCgpKX19fTtmdW5jdGlvbiBEZihuKXtsZXQgZT1uLnByZXR0eUVycm9ycyE9PSExO3JldHVybntsaW5lQ291bnRlcjpuLmxpbmVDb3VudGVyfHxlJiZuZXcgSXJ8fG51bGwscHJldHR5RXJyb3JzOmV9fWZ1bmN0aW9uIE91KG4sZT17fSl7bGV0e2xpbmVDb3VudGVyOnQscHJldHR5RXJyb3JzOnJ9PURmKGUpLHM9bmV3IE5yKHQ9PW51bGw/dm9pZCAwOnQuYWRkTmV3TGluZSksaT1uZXcgT3IoZSksbz1udWxsO2ZvcihsZXQgYSBvZiBpLmNvbXBvc2Uocy5wYXJzZShuKSwhMCxuLmxlbmd0aCkpaWYoIW8pbz1hO2Vsc2UgaWYoby5vcHRpb25zLmxvZ0xldmVsIT09XFxcInNpbGVudFxcXCIpe28uZXJyb3JzLnB1c2gobmV3IFhlKGEucmFuZ2Uuc2xpY2UoMCwyKSxcXFwiTVVMVElQTEVfRE9DU1xcXCIsXFxcIlNvdXJjZSBjb250YWlucyBtdWx0aXBsZSBkb2N1bWVudHM7IHBsZWFzZSB1c2UgWUFNTC5wYXJzZUFsbERvY3VtZW50cygpXFxcIikpO2JyZWFrfXJldHVybiByJiZ0JiYoby5lcnJvcnMuZm9yRWFjaChKaShuLHQpKSxvLndhcm5pbmdzLmZvckVhY2goSmkobix0KSkpLG99ZnVuY3Rpb24gYW8obixlLHQpe2xldCByO3R5cGVvZiBlPT1cXFwiZnVuY3Rpb25cXFwiP3I9ZTp0PT09dm9pZCAwJiZlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJih0PWUpO2xldCBzPU91KG4sdCk7aWYoIXMpcmV0dXJuIG51bGw7aWYocy53YXJuaW5ncy5mb3JFYWNoKGk9PnBzKHMub3B0aW9ucy5sb2dMZXZlbCxpKSkscy5lcnJvcnMubGVuZ3RoPjApe2lmKHMub3B0aW9ucy5sb2dMZXZlbCE9PVxcXCJzaWxlbnRcXFwiKXRocm93IHMuZXJyb3JzWzBdO3MuZXJyb3JzPVtdfXJldHVybiBzLnRvSlMoT2JqZWN0LmFzc2lnbih7cmV2aXZlcjpyfSx0KSl9dmFyICRzPXFyKE11KCkpO3ZhciBiPXFyKG5zKCkpO3ZhciB0dDsodj0+e3YuREVGQVVMVF9UT19TVFJJTkc9e251bGxSZXByZXNlbnRhdGlvbjpcXFwiLVxcXCIsZGF0ZUZvcm1hdDpcXFwiTU1NTSBkZCwgeXl5eVxcXCIsZGF0ZVRpbWVGb3JtYXQ6XFxcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcXFwifTtmdW5jdGlvbiBlKEQsdz12LkRFRkFVTFRfVE9fU1RSSU5HLFQ9ITEpe2xldCBDPXQoRCk7aWYoIUMpcmV0dXJuIHcubnVsbFJlcHJlc2VudGF0aW9uO3N3aXRjaChDLnR5cGUpe2Nhc2VcXFwibnVsbFxcXCI6cmV0dXJuIHcubnVsbFJlcHJlc2VudGF0aW9uO2Nhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4gQy52YWx1ZTtjYXNlXFxcIm51bWJlclxcXCI6Y2FzZVxcXCJib29sZWFuXFxcIjpyZXR1cm5cXFwiXFxcIitDLnZhbHVlO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuIEMudmFsdWUubWFya2Rvd24oKTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpyZXR1cm5cXFwiPGZ1bmN0aW9uPlxcXCI7Y2FzZVxcXCJhcnJheVxcXCI6bGV0IE09XFxcIlxcXCI7cmV0dXJuIFQmJihNKz1cXFwiW1xcXCIpLE0rPUMudmFsdWUubWFwKFY9PmUoVix3LCEwKSkuam9pbihcXFwiLCBcXFwiKSxUJiYoTSs9XFxcIl1cXFwiKSxNO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm5cXFwieyBcXFwiK09iamVjdC5lbnRyaWVzKEMudmFsdWUpLm1hcChWPT5WWzBdK1xcXCI6IFxcXCIrZShWWzFdLHcsITApKS5qb2luKFxcXCIsIFxcXCIpK1xcXCIgfVxcXCI7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gX2EoQy52YWx1ZSx3LmRhdGVGb3JtYXQsdy5kYXRlVGltZUZvcm1hdCk7Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJuIEJhKEMudmFsdWUpfX12LnRvU3RyaW5nPWU7ZnVuY3Rpb24gdChEKXtyZXR1cm4gZihEKT97dHlwZTpcXFwibnVsbFxcXCIsdmFsdWU6RH06ZChEKT97dHlwZTpcXFwibnVtYmVyXFxcIix2YWx1ZTpEfTpsKEQpP3t0eXBlOlxcXCJzdHJpbmdcXFwiLHZhbHVlOkR9OmcoRCk/e3R5cGU6XFxcImJvb2xlYW5cXFwiLHZhbHVlOkR9OnAoRCk/e3R5cGU6XFxcImR1cmF0aW9uXFxcIix2YWx1ZTpEfTpoKEQpP3t0eXBlOlxcXCJkYXRlXFxcIix2YWx1ZTpEfTpGKEQpP3t0eXBlOlxcXCJhcnJheVxcXCIsdmFsdWU6RH06eShEKT97dHlwZTpcXFwibGlua1xcXCIsdmFsdWU6RH06TyhEKT97dHlwZTpcXFwiZnVuY3Rpb25cXFwiLHZhbHVlOkR9OlMoRCk/e3R5cGU6XFxcIm9iamVjdFxcXCIsdmFsdWU6RH06dm9pZCAwfXYud3JhcFZhbHVlPXQ7ZnVuY3Rpb24gcihELHcpe2lmKFMoRCkpe2xldCBUPXt9O2ZvcihsZXRbQyxNXW9mIE9iamVjdC5lbnRyaWVzKEQpKVRbQ109cihNLHcpO3JldHVybiBUfWVsc2UgaWYoRihEKSl7bGV0IFQ9W107Zm9yKGxldCBDIG9mIEQpVC5wdXNoKHIoQyx3KSk7cmV0dXJuIFR9ZWxzZSByZXR1cm4gdyhEKX12Lm1hcExlYXZlcz1yO2Z1bmN0aW9uIHMoRCx3KXtyZXR1cm4gaShELHcpPT0wfXYuZXF1YWxzPXM7ZnVuY3Rpb24gaShELHcsVCl7dmFyIFYsajtpZihEPT09d3x8KEQ9PT12b2lkIDAmJihEPW51bGwpLHc9PT12b2lkIDAmJih3PW51bGwpLEQ9PT1udWxsJiZ3PT09bnVsbCkpcmV0dXJuIDA7aWYoRD09PW51bGwpcmV0dXJuLTE7aWYodz09PW51bGwpcmV0dXJuIDE7bGV0IEM9dChEKSxNPXQodyk7aWYoQz09PXZvaWQgMCYmTT09PXZvaWQgMClyZXR1cm4gMDtpZihDPT09dm9pZCAwKXJldHVybi0xO2lmKE09PT12b2lkIDApcmV0dXJuIDE7aWYoQy50eXBlIT1NLnR5cGUpcmV0dXJuIEMudHlwZS5sb2NhbGVDb21wYXJlKE0udHlwZSk7aWYoQy52YWx1ZT09PU0udmFsdWUpcmV0dXJuIDA7c3dpdGNoKEMudHlwZSl7Y2FzZVxcXCJzdHJpbmdcXFwiOnJldHVybiBDLnZhbHVlLmxvY2FsZUNvbXBhcmUoTS52YWx1ZSk7Y2FzZVxcXCJudW1iZXJcXFwiOnJldHVybiBDLnZhbHVlPE0udmFsdWU/LTE6Qy52YWx1ZT09TS52YWx1ZT8wOjE7Y2FzZVxcXCJudWxsXFxcIjpyZXR1cm4gMDtjYXNlXFxcImJvb2xlYW5cXFwiOnJldHVybiBDLnZhbHVlPT1NLnZhbHVlPzA6Qy52YWx1ZT8xOi0xO2Nhc2VcXFwibGlua1xcXCI6bGV0IHo9Qy52YWx1ZSxyZT1NLnZhbHVlLGxlPVQhPW51bGw/VDpBZT0+QWUseD1sZSh6LnBhdGgpLmxvY2FsZUNvbXBhcmUobGUocmUucGF0aCkpO2lmKHghPTApcmV0dXJuIHg7bGV0IFI9ei50eXBlLmxvY2FsZUNvbXBhcmUocmUudHlwZSk7cmV0dXJuIFIhPTA/Ujp6LnN1YnBhdGgmJiFyZS5zdWJwYXRoPzE6IXouc3VicGF0aCYmcmUuc3VicGF0aD8tMTohei5zdWJwYXRoJiYhcmUuc3VicGF0aD8wOigoVj16LnN1YnBhdGgpIT1udWxsP1Y6XFxcIlxcXCIpLmxvY2FsZUNvbXBhcmUoKGo9cmUuc3VicGF0aCkhPW51bGw/ajpcXFwiXFxcIik7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gQy52YWx1ZTxNLnZhbHVlPy0xOkMudmFsdWUuZXF1YWxzKE0udmFsdWUpPzA6MTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gQy52YWx1ZTxNLnZhbHVlPy0xOkMudmFsdWUuZXF1YWxzKE0udmFsdWUpPzA6MTtjYXNlXFxcImFycmF5XFxcIjpsZXQgUT1DLnZhbHVlLGNlPU0udmFsdWU7Zm9yKGxldCBBZT0wO0FlPE1hdGgubWluKFEubGVuZ3RoLGNlLmxlbmd0aCk7QWUrKyl7bGV0ICR0PWkoUVtBZV0sY2VbQWVdKTtpZigkdCE9MClyZXR1cm4gJHR9cmV0dXJuIFEubGVuZ3RoLWNlLmxlbmd0aDtjYXNlXFxcIm9iamVjdFxcXCI6bGV0IEVlPUMudmFsdWUsVmU9TS52YWx1ZSx0bj1BcnJheS5mcm9tKE9iamVjdC5rZXlzKEVlKSksQnQ9QXJyYXkuZnJvbShPYmplY3Qua2V5cyhWZSkpO3RuLnNvcnQoKSxCdC5zb3J0KCk7bGV0IFB0PWkodG4sQnQpO2lmKFB0IT0wKXJldHVybiBQdDtmb3IobGV0IEFlIG9mIHRuKXtsZXQgJHQ9aShFZVtBZV0sVmVbQWVdKTtpZigkdCE9MClyZXR1cm4gJHR9cmV0dXJuIDA7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuIDB9fXYuY29tcGFyZT1pO2Z1bmN0aW9uIG8oRCl7dmFyIHc7cmV0dXJuKHc9dChEKSk9PW51bGw/dm9pZCAwOncudHlwZX12LnR5cGVPZj1vO2Z1bmN0aW9uIGEoRCl7bGV0IHc9dChEKTtpZighdylyZXR1cm4hMTtzd2l0Y2gody50eXBlKXtjYXNlXFxcIm51bWJlclxcXCI6cmV0dXJuIHcudmFsdWUhPTA7Y2FzZVxcXCJzdHJpbmdcXFwiOnJldHVybiB3LnZhbHVlLmxlbmd0aD4wO2Nhc2VcXFwiYm9vbGVhblxcXCI6cmV0dXJuIHcudmFsdWU7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4hIXcudmFsdWUucGF0aDtjYXNlXFxcImRhdGVcXFwiOnJldHVybiB3LnZhbHVlLnRvTWlsbGlzKCkhPTA7Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJuIHcudmFsdWUuYXMoXFxcInNlY29uZHNcXFwiKSE9MDtjYXNlXFxcIm9iamVjdFxcXCI6cmV0dXJuIE9iamVjdC5rZXlzKHcudmFsdWUpLmxlbmd0aD4wO2Nhc2VcXFwiYXJyYXlcXFwiOnJldHVybiB3LnZhbHVlLmxlbmd0aD4wO2Nhc2VcXFwibnVsbFxcXCI6cmV0dXJuITE7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuITB9fXYuaXNUcnV0aHk9YTtmdW5jdGlvbiB1KEQpe2lmKEQ9PW51bGwpcmV0dXJuIEQ7aWYodi5pc0FycmF5KEQpKXJldHVybltdLmNvbmNhdChELm1hcCh3PT51KHcpKSk7aWYodi5pc09iamVjdChEKSl7bGV0IHc9e307Zm9yKGxldFtULENdb2YgT2JqZWN0LmVudHJpZXMoRCkpd1tUXT11KEMpO3JldHVybiB3fWVsc2UgcmV0dXJuIER9di5kZWVwQ29weT11O2Z1bmN0aW9uIGwoRCl7cmV0dXJuIHR5cGVvZiBEPT1cXFwic3RyaW5nXFxcIn12LmlzU3RyaW5nPWw7ZnVuY3Rpb24gZChEKXtyZXR1cm4gdHlwZW9mIEQ9PVxcXCJudW1iZXJcXFwifXYuaXNOdW1iZXI9ZDtmdW5jdGlvbiBoKEQpe3JldHVybiBEIGluc3RhbmNlb2YgQn12LmlzRGF0ZT1oO2Z1bmN0aW9uIHAoRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBBfXYuaXNEdXJhdGlvbj1wO2Z1bmN0aW9uIGYoRCl7cmV0dXJuIEQ9PW51bGx9di5pc051bGw9ZjtmdW5jdGlvbiBGKEQpe3JldHVybiBBcnJheS5pc0FycmF5KEQpfXYuaXNBcnJheT1GO2Z1bmN0aW9uIGcoRCl7cmV0dXJuIHR5cGVvZiBEPT1cXFwiYm9vbGVhblxcXCJ9di5pc0Jvb2xlYW49ZztmdW5jdGlvbiB5KEQpe3JldHVybiBEIGluc3RhbmNlb2YgZWV9di5pc0xpbms9eTtmdW5jdGlvbiBTKEQpe3JldHVybiBEIT09dm9pZCAwJiZ0eXBlb2YgRD09XFxcIm9iamVjdFxcXCImJiFGKEQpJiYhcChEKSYmIWgoRCkmJiF5KEQpJiYhZihEKX12LmlzT2JqZWN0PVM7ZnVuY3Rpb24gTyhEKXtyZXR1cm4gdHlwZW9mIEQ9PVxcXCJmdW5jdGlvblxcXCJ9di5pc0Z1bmN0aW9uPU99KSh0dHx8KHR0PXt9KSk7dmFyIF91OyhpPT57ZnVuY3Rpb24gbihvKXtyZXR1cm4gdHQuaXNPYmplY3QobykmJk9iamVjdC5rZXlzKG8pLmxlbmd0aD09MiYmXFxcImtleVxcXCJpbiBvJiZcXFwicm93c1xcXCJpbiBvfWkuaXNFbGVtZW50R3JvdXA9bjtmdW5jdGlvbiBlKG8pe2ZvcihsZXQgYSBvZiBvKWlmKCFuKGEpKXJldHVybiExO3JldHVybiEwfWkuaXNHcm91cGluZz1lO2Z1bmN0aW9uIHQobyl7Zm9yKGxldCBhIG9mIG8paWYobihhKSlyZXR1cm4hMTtyZXR1cm4hMH1pLmlzTGVhZj10O2Z1bmN0aW9uIHIobyl7aWYobihvKSlyZXR1cm4gcihvLnJvd3MpO2lmKGUobykpe2xldCBhPTA7Zm9yKGxldCB1IG9mIG8pYSs9cih1LnJvd3MpO3JldHVybiBhfWVsc2UgcmV0dXJuIG8ubGVuZ3RofWkuY291bnQ9cjtmdW5jdGlvbiBzKG8sYSx1KXtpZih1PD1hKXJldHVybltdO2lmKHQobykpcmV0dXJuIG8uc2xpY2UoYSx1KTtsZXQgbD0wLGQ9MDtmb3IoO2w8by5sZW5ndGgmJmQrcihvW2xdKTw9YTspZCs9cihvW2xdKSxsKys7aWYobD49by5sZW5ndGgpcmV0dXJuW107bGV0IGg9W107Zm9yKDtsPG8ubGVuZ3RoJiZkPHU7KXtsZXQgcD1vW2xdLGY9cihwKSxGPU1hdGgubWF4KGQsYSksZz1NYXRoLm1pbihmK2QsdSk7aC5wdXNoKHtrZXk6cC5rZXkscm93czpzKHAucm93cyxGLWQsZy1kKX0pLGQrPWYsbCsrfXJldHVybiBofWkuc2xpY2U9c30pKF91fHwoX3U9e30pKTt2YXIgQXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lO3RoaXMuc3VjY2Vzc2Z1bD0hMH1tYXAoZSl7cmV0dXJuIG5ldyBBcihlKHRoaXMudmFsdWUpKX1mbGF0TWFwKGUpe3JldHVybiBlKHRoaXMudmFsdWUpfW1hcEVycihlKXtyZXR1cm4gdGhpc31iaW1hcChlLHQpe3JldHVybiB0aGlzLm1hcChlKX1vckVsc2UoZSl7cmV0dXJuIHRoaXMudmFsdWV9Y2FzdCgpe3JldHVybiB0aGlzfW9yRWxzZVRocm93KGUpe3JldHVybiB0aGlzLnZhbHVlfX0sTXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMuc3VjY2Vzc2Z1bD0hMX1tYXAoZSl7cmV0dXJuIHRoaXN9ZmxhdE1hcChlKXtyZXR1cm4gdGhpc31tYXBFcnIoZSl7cmV0dXJuIG5ldyBNcihlKHRoaXMuZXJyb3IpKX1iaW1hcChlLHQpe3JldHVybiB0aGlzLm1hcEVycih0KX1vckVsc2UoZSl7cmV0dXJuIGV9Y2FzdCgpe3JldHVybiB0aGlzfW9yRWxzZVRocm93KGUpe3Rocm93IGU/bmV3IEVycm9yKGUodGhpcy5lcnJvcikpOm5ldyBFcnJvcihcXFwiXFxcIit0aGlzLmVycm9yKX19LENlOyhhPT57ZnVuY3Rpb24gbih1KXtyZXR1cm4gbmV3IEFyKHUpfWEuc3VjY2Vzcz1uO2Z1bmN0aW9uIGUodSl7cmV0dXJuIG5ldyBNcih1KX1hLmZhaWx1cmU9ZTtmdW5jdGlvbiB0KHUsbCxkKXtyZXR1cm4gdS5zdWNjZXNzZnVsP2wuc3VjY2Vzc2Z1bD9kKHUudmFsdWUsbC52YWx1ZSk6ZShsLmVycm9yKTplKHUuZXJyb3IpfWEuZmxhdE1hcDI9dDtmdW5jdGlvbiByKHUsbCxkKXtyZXR1cm4gdCh1LGwsKGgscCk9Pm4oZChoLHApKSl9YS5tYXAyPXI7ZnVuY3Rpb24gcyh1LGwpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB1KXtsZXQgcD1sKGgpO2lmKCFwLnN1Y2Nlc3NmdWwpcmV0dXJuIHAuY2FzdCgpO2QucHVzaChwLnZhbHVlKX1yZXR1cm4gYS5zdWNjZXNzKGQpfWEubWFwQWxsPXM7ZnVuY3Rpb24gaSh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyh1KCkpfWNhdGNoKGwpe3JldHVybiBhLmZhaWx1cmUobCl9fWEudHJ5aW5nPWk7YXN5bmMgZnVuY3Rpb24gbyh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyhhd2FpdCB1KX1jYXRjaChsKXtyZXR1cm4gYS5mYWlsdXJlKGwpfX1hLmFzeW5jPW99KShDZXx8KENlPXt9KSk7dmFyIFF0Oyh2PT57di5FVkVSWVRISU5HPXt0eXBlOlxcXCJldmVyeXRoaW5nXFxcIn0sdi5OT1RISU5HPXt0eXBlOlxcXCJub3RoaW5nXFxcIn0sdi5FTVBUWV9TRVQ9bmV3IFNldDtmdW5jdGlvbiByKEQpe3JldHVybiBELnNpemU9PTA/di5OT1RISU5HOnt0eXBlOlxcXCJhdG9tXFxcIix2YWx1ZTpEfX12LmF0b209cjtmdW5jdGlvbiBzKEQpe3JldHVybiBEP3YuRVZFUllUSElORzp2Lk5PVEhJTkd9di5jb25zdGFudD1zO2Z1bmN0aW9uIGkoRCl7cmV0dXJuIEQhPT12b2lkIDA/cihEKTp2Lk5PVEhJTkd9di5udWxsYWJsZUF0b209aTtmdW5jdGlvbiBvKEQpe3JldHVybiBELnNpemU9PTA/di5FVkVSWVRISU5HOnt0eXBlOlxcXCJuZWdhdGVkXFxcIix2YWx1ZTpEfX12Lm5lZ2F0ZWQ9bztmdW5jdGlvbiBhKEQpe3N3aXRjaChELnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIHYuTk9USElORztjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiB2LkVWRVJZVEhJTkc7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4gbyhELnZhbHVlKTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiByKEQudmFsdWUpfX12Lm5lZ2F0ZT1hO2Z1bmN0aW9uIHUoRCl7c3dpdGNoKEQudHlwZSl7Y2FzZVxcXCJldmVyeXRoaW5nXFxcIjpyZXR1cm4hMTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiExO2Nhc2VcXFwiYXRvbVxcXCI6cmV0dXJuIEQudmFsdWUuc2l6ZT09MDtjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiEwfX12LmVtcHR5PXU7ZnVuY3Rpb24gbChELHcpe3N3aXRjaChELnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIHc7Y2FzZVxcXCJub3RoaW5nXFxcIjpyZXR1cm4gdi5FTVBUWV9TRVQ7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4gRC52YWx1ZTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiBPKHcsRC52YWx1ZSl9fXYucmVzb2x2ZT1sO2Z1bmN0aW9uIGQoRCl7cmV0dXJuIGgoRCx3PT53KX12LmludGVyc2VjdD1kO2Z1bmN0aW9uIGgoRCx3KXtyZXR1cm4gcChELFQ9PkNlLnN1Y2Nlc3ModyhUKSkpLm9yRWxzZVRocm93KCl9di5sYXp5SW50ZXJzZWN0PWg7ZnVuY3Rpb24gcChELHcpe2xldCBUPVtdLEM9W107Zm9yKGxldCBNIG9mIEQpe2xldCBWPXcoTSk7aWYoIVYuc3VjY2Vzc2Z1bClyZXR1cm4gVi5jYXN0KCk7bGV0IGo9Vi52YWx1ZTtpZihqIT09dm9pZCAwKXtpZih1KGopKXJldHVybiBDZS5zdWNjZXNzKHYuTk9USElORyk7ai50eXBlIT09XFxcImV2ZXJ5dGhpbmdcXFwiJiYoai50eXBlPT1cXFwiYXRvbVxcXCI/VC5wdXNoKGoudmFsdWUpOmoudHlwZT09XFxcIm5lZ2F0ZWRcXFwiJiZDLnB1c2goai52YWx1ZSkpfX1yZXR1cm4gVC5sZW5ndGg9PTAmJkMubGVuZ3RoPT0wP0NlLnN1Y2Nlc3Modi5FVkVSWVRISU5HKTpULmxlbmd0aD4wJiZDLmxlbmd0aD09MD9DZS5zdWNjZXNzKHIoeShUKSkpOlQubGVuZ3RoPT0wJiZDLmxlbmd0aD4wP0NlLnN1Y2Nlc3MobyhTKEMpKSk6Q2Uuc3VjY2Vzcyh2LmF0b20oTyh5KFQpLFMoQykpKSl9di5sYXp5RmFpbGFibGVJbnRlcnNlY3Rpb249cDtmdW5jdGlvbiBmKEQpe3JldHVybiBGKEQsdz0+dyl9di51bmlvbj1mO2Z1bmN0aW9uIEYoRCx3KXtyZXR1cm4gZyhELFQ9PkNlLnN1Y2Nlc3ModyhUKSkpLm9yRWxzZVRocm93KCl9di5sYXp5VW5pb249RjtmdW5jdGlvbiBnKEQsdyl7bGV0IFQ9W10sQz1bXTtmb3IobGV0IE0gb2YgRCl7bGV0IFY9dyhNKTtpZighVi5zdWNjZXNzZnVsKXJldHVybiBWLmNhc3QoKTtsZXQgaj1WLnZhbHVlO2lmKGohPT12b2lkIDApe2lmKGoudHlwZT09PVxcXCJldmVyeXRoaW5nXFxcIilyZXR1cm4gQ2Uuc3VjY2Vzcyh2LkVWRVJZVEhJTkcpO3Uoail8fChqLnR5cGU9PVxcXCJhdG9tXFxcIj9ULnB1c2goai52YWx1ZSk6ai50eXBlPT1cXFwibmVnYXRlZFxcXCImJkMucHVzaChqLnZhbHVlKSl9fXJldHVybiBULmxlbmd0aD09MCYmQy5sZW5ndGg9PTA/Q2Uuc3VjY2Vzcyh2Lk5PVEhJTkcpOlQubGVuZ3RoPjAmJkMubGVuZ3RoPT0wP0NlLnN1Y2Nlc3Modi5hdG9tKFMoVCkpKTpULmxlbmd0aD09MCYmQy5sZW5ndGg+MD9DZS5zdWNjZXNzKHYubmVnYXRlZCh5KEMpKSk6Q2Uuc3VjY2VzcyhvKE8oeShDKSxTKFQpKSkpfXYubGF6eUZhaWxhYmxlVW5pb249ZztmdW5jdGlvbiB5KEQpe2lmKEQubGVuZ3RoPT0wKXJldHVybiBuZXcgU2V0O2lmKEQubGVuZ3RoPT0xKXJldHVybiBEWzBdO2xldCB3PVtdLmNvbmNhdChEKS5zb3J0KChULEMpPT5ULnNpemUtQy5zaXplKTtmb3IoO3cubGVuZ3RoPjE7KXtsZXQgVD1uZXcgU2V0LEM9dy5wb3AoKTtmb3IobGV0IE0gb2Ygd1swXSlDLmhhcyhNKSYmVC5hZGQoTSk7d1swXT1UfXJldHVybiB3WzBdfXYuc2V0SW50ZXJzZWN0PXk7ZnVuY3Rpb24gUyhEKXtpZihELmxlbmd0aD09MClyZXR1cm4gbmV3IFNldDtpZihELmxlbmd0aD09MSlyZXR1cm4gRFswXTtsZXQgdz1uZXcgU2V0O2ZvcihsZXQgVCBvZiBEKWZvcihsZXQgQyBvZiBUKXcuYWRkKEMpO3JldHVybiB3fXYuc2V0VW5pb249UztmdW5jdGlvbiBPKEQsdyl7aWYoRC5zaXplPncuc2l6ZSl7bGV0IFQ9bmV3IFNldChEKTtmb3IobGV0IEMgb2YgdylULmRlbGV0ZShDKTtyZXR1cm4gVH1lbHNle2xldCBUPW5ldyBTZXQ7Zm9yKGxldCBDIG9mIEQpdy5oYXMoQyl8fFQuYWRkKEMpO3JldHVybiBUfX12LnNldEludGVyc2VjdE5lZ2F0aW9uPU99KShRdHx8KFF0PXt9KSk7dmFyIGFlOyhnPT57Zy5ST1c9XFxcIiRyb3dcXFwiO2Z1bmN0aW9uIGUoeSl7cmV0dXJue3R5cGU6XFxcInZhcmlhYmxlXFxcIixuYW1lOnl9fWcudmFyaWFibGU9ZTtmdW5jdGlvbiB0KHkpe3JldHVybnt0eXBlOlxcXCJsaXRlcmFsXFxcIix2YWx1ZTp5fX1nLmxpdGVyYWw9dDtmdW5jdGlvbiByKHksUyxPKXtyZXR1cm57dHlwZTpcXFwiYmluYXJ5b3BcXFwiLGxlZnQ6eSxvcDpTLHJpZ2h0Ok99fWcuYmluYXJ5T3A9cjtmdW5jdGlvbiBzKHksUyl7cmV0dXJue3R5cGU6XFxcImJpbmFyeW9wXFxcIixsZWZ0OnkscmlnaHQ6UyxvcDpcXFwiaW5kZXhcXFwifX1nLmluZGV4PXM7ZnVuY3Rpb24gaSh5KXtsZXQgUz15LnNwbGl0KFxcXCIuXFxcIiksTz1nLnZhcmlhYmxlKFNbMF0pO2ZvcihsZXQgdj0xO3Y8Uy5sZW5ndGg7disrKU89Zy5pbmRleChPLGcubGl0ZXJhbChTW3ZdKSk7cmV0dXJuIE99Zy5pbmRleFZhcmlhYmxlPWk7ZnVuY3Rpb24gbyh5LFMpe3JldHVybnt0eXBlOlxcXCJsYW1iZGFcXFwiLGFyZ3VtZW50czp5LHZhbHVlOlN9fWcubGFtYmRhPW87ZnVuY3Rpb24gYSh5LFMpe3JldHVybnt0eXBlOlxcXCJmdW5jdGlvblxcXCIsZnVuYzp5LGFyZ3VtZW50czpTfX1nLmZ1bmM9YTtmdW5jdGlvbiB1KHkpe3JldHVybnt0eXBlOlxcXCJsaXN0XFxcIix2YWx1ZXM6eX19Zy5saXN0PXU7ZnVuY3Rpb24gbCh5KXtyZXR1cm57dHlwZTpcXFwib2JqZWN0XFxcIix2YWx1ZXM6eX19Zy5vYmplY3Q9bDtmdW5jdGlvbiBkKHkpe3JldHVybnt0eXBlOlxcXCJuZWdhdGVkXFxcIixjaGlsZDp5fX1nLm5lZ2F0ZT1kO2Z1bmN0aW9uIGgoeSl7cmV0dXJuIHk9PVxcXCI8PVxcXCJ8fHk9PVxcXCI8XFxcInx8eT09XFxcIj5cXFwifHx5PT1cXFwiPj1cXFwifHx5PT1cXFwiIT1cXFwifHx5PT1cXFwiPVxcXCJ9Zy5pc0NvbXBhcmVPcD1oO2Z1bmN0aW9uIHAoeSxTPW5ldyBTZXQoW2cuUk9XXSkpe3N3aXRjaCh5LnR5cGUpe2Nhc2VcXFwiYmluYXJ5b3BcXFwiOnJldHVybiB5Lm9wPT09XFxcImluZGV4XFxcIiYmeS5sZWZ0LnR5cGU9PVxcXCJ2YXJpYWJsZVxcXCImJnkubGVmdC5uYW1lPT1nLlJPVyYmeS5yaWdodC50eXBlPT1cXFwibGl0ZXJhbFxcXCImJnR0LmlzU3RyaW5nKHkucmlnaHQudmFsdWUpP1MuaGFzKHkucmlnaHQudmFsdWUpP25ldyBTZXQ6bmV3IFNldChbeS5yaWdodC52YWx1ZV0pOlF0LnNldFVuaW9uKFtwKHkubGVmdCxTKSxwKHkucmlnaHQsUyldKTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpyZXR1cm4gUXQuc2V0VW5pb24oeS5hcmd1bWVudHMubWFwKHY9PnAodixTKSkpO2Nhc2VcXFwibGFtYmRhXFxcIjpsZXQgTz1TIT1udWxsP1M6bmV3IFNldDtmb3IobGV0IHYgb2YgeS5hcmd1bWVudHMpTy5hZGQodik7cmV0dXJuIHAoeS52YWx1ZSxPKTtjYXNlXFxcImxpc3RcXFwiOnJldHVybiBRdC5zZXRVbmlvbih5LnZhbHVlcy5tYXAodj0+cCh2LFMpKSk7Y2FzZVxcXCJuZWdhdGVkXFxcIjpyZXR1cm4gcCh5LmNoaWxkLFMpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gUXQuc2V0VW5pb24oT2JqZWN0LnZhbHVlcyh5LnZhbHVlcykubWFwKHY9PnAodixTKSkpO2Nhc2VcXFwidmFyaWFibGVcXFwiOnJldHVybiBTJiZTLmhhcyh5Lm5hbWUpP25ldyBTZXQ6bmV3IFNldChbeS5uYW1lXSk7Y2FzZVxcXCJsaXRlcmFsXFxcIjpyZXR1cm4gbmV3IFNldH19Zy51bmJvdW5kVmFyaWFibGVzPXA7ZnVuY3Rpb24gZih5KXtzd2l0Y2goeS50eXBlKXtjYXNlXFxcImJpbmFyeW9wXFxcIjpyZXR1cm4geS5vcD09PVxcXCJpbmRleFxcXCI/YCR7Zih5LmxlZnQpfVske2YoeS5yaWdodCl9XWA6YCR7Zih5LmxlZnQpfSAke3kub3B9ICR7Zih5LnJpZ2h0KX1gO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnJldHVybmAke2YoeS5mdW5jKX0oJHt5LmFyZ3VtZW50cy5tYXAoZikuam9pbihcXFwiLCBcXFwiKX0pYDtjYXNlXFxcImxhbWJkYVxcXCI6cmV0dXJuYCgke3kuYXJndW1lbnRzLmpvaW4oXFxcIiwgXFxcIil9KSA9PiAke2YoeS52YWx1ZSl9YDtjYXNlXFxcImxpc3RcXFwiOnJldHVybmBbJHt5LnZhbHVlcy5tYXAoZikuam9pbihcXFwiLCBcXFwiKX1dYDtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybmAhJHtmKHkuY2hpbGQpfWA7Y2FzZVxcXCJvYmplY3RcXFwiOnJldHVybmB7JHtPYmplY3QuZW50cmllcyh5LnZhbHVlcykubWFwKChbTyx2XSk9PmAke099OiAke2Yodil9YCkuam9pbihcXFwiLCBcXFwiKX19YDtjYXNlXFxcInZhcmlhYmxlXFxcIjpyZXR1cm4geS5uYW1lO2Nhc2VcXFwibGl0ZXJhbFxcXCI6bGV0IFM9dHQud3JhcFZhbHVlKHkudmFsdWUpO2lmKCFTKXJldHVyblxcXCJudWxsXFxcIjtzd2l0Y2goUy50eXBlKXtjYXNlXFxcInN0cmluZ1xcXCI6cmV0dXJuYFxcXCIke1MudmFsdWV9XFxcImA7ZGVmYXVsdDpyZXR1cm4gdHQudG9TdHJpbmcoUy52YWx1ZSl9fX1nLnRvU3RyaW5nPWYsZy5OVUxMPWcubGl0ZXJhbChudWxsKX0pKGFlfHwoYWU9e30pKTt2YXIgSj1iLmNyZWF0ZUxhbmd1YWdlKHtudW1iZXI6bj0+Yi5yZWdleHAoLy0/WzAtOV0rKFxcXFwuWzAtOV0rKT8vKS5tYXAoZT0+TnVtYmVyLnBhcnNlRmxvYXQoZSkpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT5iLnN0cmluZygnXFxcIicpLnRoZW4oYi5hbHQobi5lc2NhcGVDaGFyYWN0ZXIsYi5ub25lT2YoJ1xcXCJcXFxcXFxcXCcpKS5hdExlYXN0KDApLm1hcChlPT5lLmpvaW4oXFxcIlxcXCIpKSkuc2tpcChiLnN0cmluZygnXFxcIicpKS5kZXNjKFxcXCJzdHJpbmdcXFwiKSxlc2NhcGVDaGFyYWN0ZXI6bj0+Yi5zdHJpbmcoXFxcIlxcXFxcXFxcXFxcIikudGhlbihiLmFueSkubWFwKGU9PmU9PT0nXFxcIic/J1xcXCInOmU9PT1cXFwiXFxcXFxcXFxcXFwiP1xcXCJcXFxcXFxcXFxcXCI6XFxcIlxcXFxcXFxcXFxcIitlKSxib29sOm49PmIucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKS5tYXAoZT0+ZS50b0xvd2VyQ2FzZSgpPT1cXFwidHJ1ZVxcXCIpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSx0YWc6bj0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIiNcXFwiKSxiLmFsdChiLnJlZ2V4cCgvW15cXFxcdTIwMDAtXFxcXHUyMDZGXFxcXHUyRTAwLVxcXFx1MkU3RichXFxcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxcXFtcXFxcXVxcXFxcXFxcXFxcXHNdLykuZGVzYyhcXFwidGV4dFxcXCIpKS5tYW55KCksKGUsdCk9PmUrdC5qb2luKFxcXCJcXFwiKSkuZGVzYyhcXFwidGFnXFxcIiksaWRlbnRpZmllcjpuPT5iLnNlcU1hcChiLmFsdChiLnJlZ2V4cCgvW1xcXFxwe0xldHRlcn0kXS91KSxiLnJlZ2V4cChCdSkuZGVzYyhcXFwidGV4dFxcXCIpKSxiLmFsdChiLnJlZ2V4cCgvWzAtOVxcXFxwe0xldHRlcn0kXy1dL3UpLGIucmVnZXhwKEJ1KS5kZXNjKFxcXCJ0ZXh0XFxcIikpLm1hbnkoKSwoZSx0KT0+ZSt0LmpvaW4oXFxcIlxcXCIpKS5kZXNjKFxcXCJ2YXJpYWJsZVxcXCIpLGxpbms6bj0+Yi5yZWdleHAoL1xcXFxbXFxcXFsoW15cXFxcW1xcXFxdXSo/KVxcXFxdXFxcXF0vdSwxKS5tYXAoZT0+ZWUucGFyc2VJbm5lcihlKSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksZW1iZWRMaW5rOm49PmIuc2VxTWFwKGIuc3RyaW5nKFxcXCIhXFxcIikuYXRNb3N0KDEpLG4ubGluaywoZSx0KT0+KGUubGVuZ3RoPjAmJih0LmVtYmVkPSEwKSx0KSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksYmluYXJ5UGx1c01pbnVzOm49PmIucmVnZXhwKC9cXFxcK3wtLykubWFwKGU9PmUpLmRlc2MoXFxcIicrJyBvciAnLSdcXFwiKSxiaW5hcnlNdWxEaXY6bj0+Yi5yZWdleHAoL1xcXFwqfFxcXFwvfCUvKS5tYXAoZT0+ZSkuZGVzYyhcXFwiJyonIG9yICcvJyBvciAnJSdcXFwiKSxiaW5hcnlDb21wYXJlT3A6bj0+Yi5yZWdleHAoLz49fDw9fCE9fD58PHw9LykubWFwKGU9PmUpLmRlc2MoXFxcIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnXFxcIiksYmluYXJ5QW5kT3A6bj0+Yi5yZWdleHAoL2FuZHwmL2kpLm1hcChlPT5cXFwiJlxcXCIpLmRlc2MoXFxcIidhbmQnXFxcIiksYmluYXJ5T3JPcDpuPT5iLnJlZ2V4cCgvb3J8XFxcXHwvaSkubWFwKGU9PlxcXCJ8XFxcIikuZGVzYyhcXFwiJ29yJ1xcXCIpLHJvb3REYXRlOm49PmIuc2VxTWFwKGIucmVnZXhwKC9cXFxcZHs0fS8pLGIuc3RyaW5nKFxcXCItXFxcIiksYi5yZWdleHAoL1xcXFxkezJ9LyksKGUsdCxyKT0+Qi5mcm9tT2JqZWN0KHt5ZWFyOk51bWJlci5wYXJzZUludChlKSxtb250aDpOdW1iZXIucGFyc2VJbnQocil9KSkuZGVzYyhcXFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXFxcIiksZGF0ZVNob3J0aGFuZDpuPT5iLmFsdCguLi5PYmplY3Qua2V5cygkdSkuc29ydCgoZSx0KT0+dC5sZW5ndGgtZS5sZW5ndGgpLm1hcChiLnN0cmluZykpLGRhdGU6bj0+VGYobi5yb290RGF0ZSxlPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiLVxcXCIpLGIucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7ZGF5Ok51bWJlci5wYXJzZUludChyKX0pKSxlPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiVFxcXCIpLGIucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7aG91cjpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIjpcXFwiKSxiLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe21pbnV0ZTpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIjpcXFwiKSxiLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe3NlY29uZDpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5hbHQoYi5zZXFNYXAoYi5zdHJpbmcoXFxcIi5cXFwiKSxiLnJlZ2V4cCgvXFxcXGR7M30vKSwodCxyKT0+ZS5zZXQoe21pbGxpc2Vjb25kOk51bWJlci5wYXJzZUludChyKX0pKSxiLnN1Y2NlZWQoZSkpLGU9PmIuYWx0KGIuc2VxTWFwKGIuc3RyaW5nKFxcXCIrXFxcIikub3IoYi5zdHJpbmcoXFxcIi1cXFwiKSksYi5yZWdleHAoL1xcXFxkezEsMn0oOlxcXFxkezJ9KT8vKSwodCxyKT0+ZS5zZXRab25lKFxcXCJVVENcXFwiK3Qrcix7a2VlcExvY2FsVGltZTohMH0pKSxiLnNlcU1hcChiLnN0cmluZyhcXFwiWlxcXCIpLCgpPT5lLnNldFpvbmUoXFxcInV0Y1xcXCIse2tlZXBMb2NhbFRpbWU6ITB9KSksYi5zZXFNYXAoYi5zdHJpbmcoXFxcIltcXFwiKSxiLnJlZ2V4cCgvWzAtOUEtWmEteistXFxcXC9dKy91KSxiLnN0cmluZyhcXFwiXVxcXCIpLCh0LHIscyk9PmUuc2V0Wm9uZShyLHtrZWVwTG9jYWxUaW1lOiEwfSkpKSkuYXNzZXJ0KGU9PmUuaXNWYWxpZCxcXFwidmFsaWQgZGF0ZVxcXCIpLmRlc2MoXFxcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVxcXCIpLGRhdGVQbHVzOm49PmIuYWx0KG4uZGF0ZVNob3J0aGFuZC5tYXAoZT0+JHVbZV0oKSksbi5kYXRlKS5kZXNjKFxcXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXFxcIiksZHVyYXRpb25UeXBlOm49PmIuYWx0KC4uLk9iamVjdC5rZXlzKFB1KS5zb3J0KChlLHQpPT50Lmxlbmd0aC1lLmxlbmd0aCkubWFwKGIuc3RyaW5nKSksZHVyYXRpb246bj0+Yi5zZXFNYXAobi5udW1iZXIsYi5vcHRXaGl0ZXNwYWNlLG4uZHVyYXRpb25UeXBlLChlLHQscik9PlB1W3JdLm1hcFVuaXRzKHM9PnMqZSkpLnNlcEJ5MShiLnN0cmluZyhcXFwiLFxcXCIpLnRyaW0oYi5vcHRXaGl0ZXNwYWNlKS5vcihiLm9wdFdoaXRlc3BhY2UpKS5tYXAoZT0+ZS5yZWR1Y2UoKHQscik9PnQucGx1cyhyKSkpLmRlc2MoXFxcImR1cmF0aW9uIGxpa2UgNGhyMm1pblxcXCIpLHJhd051bGw6bj0+Yi5zdHJpbmcoXFxcIm51bGxcXFwiKSxhdG9tSW5saW5lRmllbGQ6bj0+Yi5hbHQobi5kYXRlLG4uZHVyYXRpb24ubWFwKGU9Pk5pKGUpKSxuLnN0cmluZyxuLnRhZyxuLmVtYmVkTGluayxuLmJvb2wsbi5udW1iZXIsbi5yYXdOdWxsKSxpbmxpbmVGaWVsZExpc3Q6bj0+bi5hdG9tSW5saW5lRmllbGQuc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKG4uYXRvbUlubGluZUZpZWxkKSksaW5saW5lRmllbGQ6bj0+Yi5hbHQoYi5zZXFNYXAobi5hdG9tSW5saW5lRmllbGQsYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5pbmxpbmVGaWVsZExpc3QsKGUsdCxyKT0+W2VdLmNvbmNhdChyKSksbi5hdG9tSW5saW5lRmllbGQpfSksQnU9bmV3IFJlZ0V4cCh3bigpLFxcXCJcXFwiKSxQdT17eWVhcjpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5ZWFyczpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cjpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cnM6QS5mcm9tT2JqZWN0KHt5ZWFyczoxfSksbW9udGg6QS5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vbnRoczpBLmZyb21PYmplY3Qoe21vbnRoczoxfSksbW86QS5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vczpBLmZyb21PYmplY3Qoe21vbnRoczoxfSksd2VlazpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3ZWVrczpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3azpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3a3M6QS5mcm9tT2JqZWN0KHt3ZWVrczoxfSksdzpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSxkYXk6QS5mcm9tT2JqZWN0KHtkYXlzOjF9KSxkYXlzOkEuZnJvbU9iamVjdCh7ZGF5czoxfSksZDpBLmZyb21PYmplY3Qoe2RheXM6MX0pLGhvdXI6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaG91cnM6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaHI6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaHJzOkEuZnJvbU9iamVjdCh7aG91cnM6MX0pLGg6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksbWludXRlOkEuZnJvbU9iamVjdCh7bWludXRlczoxfSksbWludXRlczpBLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbjpBLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbnM6QS5mcm9tT2JqZWN0KHttaW51dGVzOjF9KSxtOkEuZnJvbU9iamVjdCh7bWludXRlczoxfSksc2Vjb25kOkEuZnJvbU9iamVjdCh7c2Vjb25kczoxfSksc2Vjb25kczpBLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlYzpBLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlY3M6QS5mcm9tT2JqZWN0KHtzZWNvbmRzOjF9KSxzOkEuZnJvbU9iamVjdCh7c2Vjb25kczoxfSl9LCR1PXtub3c6KCk9PkIubG9jYWwoKSx0b2RheTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLHllc3RlcmRheTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLm1pbnVzKEEuZnJvbU9iamVjdCh7ZGF5czoxfSkpLHRvbW9ycm93OigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwiZGF5XFxcIikucGx1cyhBLmZyb21PYmplY3Qoe2RheXM6MX0pKSxzb3c6KCk9PkIubG9jYWwoKS5zdGFydE9mKFxcXCJ3ZWVrXFxcIiksXFxcInN0YXJ0LW9mLXdlZWtcXFwiOigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwid2Vla1xcXCIpLGVvdzooKT0+Qi5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksXFxcImVuZC1vZi13ZWVrXFxcIjooKT0+Qi5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksc295OigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwieWVhclxcXCIpLFxcXCJzdGFydC1vZi15ZWFyXFxcIjooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcInllYXJcXFwiKSxlb3k6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLFxcXCJlbmQtb2YteWVhclxcXCI6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLHNvbTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksXFxcInN0YXJ0LW9mLW1vbnRoXFxcIjooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksZW9tOigpPT5CLmxvY2FsKCkuZW5kT2YoXFxcIm1vbnRoXFxcIiksXFxcImVuZC1vZi1tb250aFxcXCI6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwibW9udGhcXFwiKX0sUnU9Yi5jcmVhdGVMYW5ndWFnZSh7dmFyaWFibGU6bj0+Si5pZGVudGlmaWVyLm1hcChhZS52YXJpYWJsZSkuZGVzYyhcXFwidmFyaWFibGVcXFwiKSxudW1iZXI6bj0+Si5udW1iZXIubWFwKGFlLmxpdGVyYWwpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT5KLnN0cmluZy5tYXAoYWUubGl0ZXJhbCkuZGVzYyhcXFwic3RyaW5nXFxcIiksYm9vbDpuPT5KLmJvb2wubWFwKGFlLmxpdGVyYWwpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSxkYXRlOm49PlN0KFxcXCJkYXRlXFxcIixKLmRhdGVQbHVzKS5tYXAoKFtlLHRdKT0+YWUubGl0ZXJhbCh0KSkuZGVzYyhcXFwiZGF0ZVxcXCIpLGR1cmF0aW9uOm49PlN0KFxcXCJkdXJcXFwiLEouZHVyYXRpb24pLm1hcCgoW2UsdF0pPT5hZS5saXRlcmFsKHQpKS5kZXNjKFxcXCJkdXJhdGlvblxcXCIpLG51bGw6bj0+Si5yYXdOdWxsLm1hcChlPT5hZS5OVUxMKSxsaW5rOm49PkoubGluay5tYXAoYWUubGl0ZXJhbCksbGlzdDpuPT5uLmV4cHJlc3Npb24uc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLndyYXAoYi5zdHJpbmcoXFxcIltcXFwiKS5za2lwKGIub3B0V2hpdGVzcGFjZSksYi5vcHRXaGl0ZXNwYWNlLnRoZW4oYi5zdHJpbmcoXFxcIl1cXFwiKSkpLm1hcChlPT5hZS5saXN0KGUpKS5kZXNjKFxcXCJsaXN0XFxcIiksb2JqZWN0Om49PmIuc2VxTWFwKEouaWRlbnRpZmllci5vcihKLnN0cmluZyksYi5zdHJpbmcoXFxcIjpcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7bmFtZTplLHZhbHVlOnJ9KSkuc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLndyYXAoYi5zdHJpbmcoXFxcIntcXFwiKS5za2lwKGIub3B0V2hpdGVzcGFjZSksYi5vcHRXaGl0ZXNwYWNlLnRoZW4oYi5zdHJpbmcoXFxcIn1cXFwiKSkpLm1hcChlPT57bGV0IHQ9e307Zm9yKGxldCByIG9mIGUpdFtyLm5hbWVdPXIudmFsdWU7cmV0dXJuIGFlLm9iamVjdCh0KX0pLmRlc2MoXFxcIm9iamVjdCAoJ3sgYTogMSwgYjogMiB9JylcXFwiKSxhdG9tOm49PmIuYWx0KEouZW1iZWRMaW5rLm1hcChlPT5hZS5saXRlcmFsKGUpKSxuLm5lZ2F0ZWQsbi5saW5rLG4ubGlzdCxuLm9iamVjdCxuLmxhbWJkYSxuLnBhcmVucyxuLmJvb2wsbi5udW1iZXIsbi5zdHJpbmcsbi5kYXRlLG4uZHVyYXRpb24sbi5udWxsLG4udmFyaWFibGUpLGluZGV4Om49PmIuc2VxTWFwKG4uYXRvbSxiLmFsdChuLmRvdFBvc3RmaXgsbi5pbmRleFBvc3RmaXgsbi5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwoZSx0KT0+e2xldCByPWU7Zm9yKGxldCBzIG9mIHQpc3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJkb3RcXFwiOnI9YWUuaW5kZXgocixhZS5saXRlcmFsKHMuZXhwcikpO2JyZWFrO2Nhc2VcXFwiaW5kZXhcXFwiOnI9YWUuaW5kZXgocixzLmV4cHIpO2JyZWFrO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnI9YWUuZnVuYyhyLHMuZXhwcnMpO2JyZWFrfXJldHVybiByfSksbmVnYXRlZDpuPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiIVxcXCIpLG4uaW5kZXgsKGUsdCk9PmFlLm5lZ2F0ZSh0KSkuZGVzYyhcXFwibmVnYXRlZCBmaWVsZFxcXCIpLHBhcmVuczpuPT5uLmV4cHJlc3Npb24udHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSxsYW1iZGE6bj0+Yi5zZXFNYXAoSi5pZGVudGlmaWVyLnNlcEJ5KGIuc3RyaW5nKFxcXCIsXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpKS53cmFwKGIuc3RyaW5nKFxcXCIoXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpLGIuc3RyaW5nKFxcXCIpXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpKSxiLnN0cmluZyhcXFwiPT5cXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7dHlwZTpcXFwibGFtYmRhXFxcIixhcmd1bWVudHM6ZSx2YWx1ZTpyfSkpLGRvdFBvc3RmaXg6bj0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIi5cXFwiKSxKLmlkZW50aWZpZXIsKGUsdCk9Pih7dHlwZTpcXFwiZG90XFxcIixleHByOnR9KSksaW5kZXhQb3N0Zml4Om49PmIuc2VxTWFwKGIuc3RyaW5nKFxcXCJbXFxcIiksYi5vcHRXaGl0ZXNwYWNlLG4uZXhwcmVzc2lvbixiLm9wdFdoaXRlc3BhY2UsYi5zdHJpbmcoXFxcIl1cXFwiKSwoZSx0LHIscyxpKT0+KHt0eXBlOlxcXCJpbmRleFxcXCIsZXhwcjpyfSkpLGZ1bmN0aW9uUG9zdGZpeDpuPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiKFxcXCIpLGIub3B0V2hpdGVzcGFjZSxuLmV4cHJlc3Npb24uc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLGIub3B0V2hpdGVzcGFjZSxiLnN0cmluZyhcXFwiKVxcXCIpLChlLHQscixzLGkpPT4oe3R5cGU6XFxcImZ1bmN0aW9uXFxcIixleHByczpyfSkpLGJpbmFyeU11bERpdjpuPT5BbihuLmluZGV4LEouYmluYXJ5TXVsRGl2LGFlLmJpbmFyeU9wKSxiaW5hcnlQbHVzTWludXM6bj0+QW4obi5iaW5hcnlNdWxEaXYsSi5iaW5hcnlQbHVzTWludXMsYWUuYmluYXJ5T3ApLGJpbmFyeUNvbXBhcmU6bj0+QW4obi5iaW5hcnlQbHVzTWludXMsSi5iaW5hcnlDb21wYXJlT3AsYWUuYmluYXJ5T3ApLGJpbmFyeUJvb2xlYW46bj0+QW4obi5iaW5hcnlDb21wYXJlLEouYmluYXJ5QW5kT3Aub3IoSi5iaW5hcnlPck9wKSxhZS5iaW5hcnlPcCksYmluYXJ5T3A6bj0+bi5iaW5hcnlCb29sZWFuLGV4cHJlc3Npb246bj0+bi5iaW5hcnlPcH0pLEowPWIuY3JlYXRlTGFuZ3VhZ2Uoe3F1ZXJ5VGFnOm49PkoudGFnLm1hcChlPT4oe3R5cGU6XFxcInRhZ2dlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeUlkOm49PlN0KFxcXCJpZFxcXCIsSi5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcImlkXFxcIix2YWx1ZTp0fSkpLHF1ZXJ5VHlwZTpuPT5iLnN0cmluZyhcXFwiQFxcXCIpLnRoZW4oSi5pZGVudGlmaWVyKS5tYXAoZT0+KHt0eXBlOlxcXCJ0eXBlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeVBhdGg6bj0+U3QoYi5yZWdleHAoL2U/cGF0aC9pKS5kZXNjKFxcXCJbZV1wYXRoXFxcIiksSi5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcInBhdGhcXFwiLHZhbHVlOnQsZXhhY3Q6ZS50b0xvd2VyQ2FzZSgpPT09XFxcImVwYXRoXFxcIn0pKSxxdWVyeVBhcmVudE9mOm49PlN0KGIucmVnZXhwKC9wYXJlbnRvZnxzdXBlcnRyZWUvaSkuZGVzYyhcXFwicGFyZW50b2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJwYXJlbnQtb2ZcXFwiLGNoaWxkcmVuOnQsaW5jbHVzaXZlOmUudG9Mb3dlckNhc2UoKT09PVxcXCJzdXBlcnRyZWVcXFwifSkpLHF1ZXJ5Q2hpbGRPZjpuPT5TdChiLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXFxcImNoaWxkb2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJjaGlsZC1vZlxcXCIscGFyZW50czp0LGluY2x1c2l2ZTplLnRvTG93ZXJDYXNlKCk9PT1cXFwic3VidHJlZVxcXCJ9KSkscXVlcnlTaW1wbGVMaW5rZWQ6bj0+Si5saW5rLm1hcChlPT4oe3R5cGU6XFxcImxpbmtlZFxcXCIsc291cmNlOnt0eXBlOlxcXCJsaW5rXFxcIix2YWx1ZTplfSxkaXJlY3Rpb246XFxcImluY29taW5nXFxcIn0pKSxxdWVyeUxpbmtlZDpuPT5TdChiLnJlZ2V4cCgvbGlua3N0b3xsaW5rZWRmcm9tfGNvbm5lY3RlZC9pKS5kZXNjKFxcXCJjb25uZWN0ZWRcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJsaW5rZWRcXFwiLHNvdXJjZTp0LGRpcmVjdGlvbjplLnRvTG93ZXJDYXNlKCk9PVxcXCJsaW5rc3RvXFxcIj9cXFwiaW5jb21pbmdcXFwiOmUudG9Mb3dlckNhc2UoKT09XFxcImxpbmtlZGZyb21cXFwiP1xcXCJvdXRnb2luZ1xcXCI6XFxcImJvdGhcXFwifSkpLHF1ZXJ5RXhpc3RzOm49PlN0KGIucmVnZXhwKC9leGlzdHMvaSkuZGVzYyhcXFwiZXhpc3RzXFxcIiksSi5pZGVudGlmaWVyLm9yKEouc3RyaW5nKSkubWFwKChbZSx0XSk9Pih7dHlwZTpcXFwiZmllbGRcXFwiLHZhbHVlOnR9KSkscXVlcnlRdW90ZWRFeHByZXNzaW9uOm49PlN0KGIucmVnZXhwKC9leHByL2kpLmRlc2MoXFxcImV4cHJcXFwiKSxSdS5leHByZXNzaW9uKS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJleHByZXNzaW9uXFxcIixleHByZXNzaW9uOnR9KSkscXVlcnlSYXdFeHByZXNzaW9uOm49PlJ1LmJpbmFyeUNvbXBhcmUubWFwKGU9Pih7dHlwZTpcXFwiZXhwcmVzc2lvblxcXCIsZXhwcmVzc2lvbjplfSkpLHF1ZXJ5UGFyZW5zOm49Pm4ucXVlcnkudHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSxxdWVyeU5lZ2F0ZTpuPT5iLnN0cmluZyhcXFwiIVxcXCIpLnNraXAoYi5vcHRXaGl0ZXNwYWNlKS50aGVuKG4ucXVlcnlBdG9tKS5tYXAoZT0+KHt0eXBlOlxcXCJub3RcXFwiLGVsZW1lbnQ6ZX0pKSxxdWVyeUF0b206bj0+Yi5hbHQobi5xdWVyeVBhcmVucyxuLnF1ZXJ5TmVnYXRlLG4ucXVlcnlTaW1wbGVMaW5rZWQsbi5xdWVyeVRhZyxuLnF1ZXJ5VHlwZSxuLnF1ZXJ5SWQsbi5xdWVyeUV4aXN0cyxuLnF1ZXJ5Q2hpbGRPZixuLnF1ZXJ5UGFyZW50T2Ysbi5xdWVyeUxpbmtlZCxuLnF1ZXJ5UGF0aCxuLnF1ZXJ5UXVvdGVkRXhwcmVzc2lvbixuLnF1ZXJ5UmF3RXhwcmVzc2lvbikscXVlcnlBbmRzOm49PkFuKG4ucXVlcnlBdG9tLEouYmluYXJ5QW5kT3AsKGUsdCxyKT0+KHt0eXBlOlxcXCJhbmRcXFwiLGVsZW1lbnRzOltlLHJdfSkpLHF1ZXJ5T3JzOm49PkFuKG4ucXVlcnlBbmRzLEouYmluYXJ5T3JPcCwoZSx0LHIpPT4oe3R5cGU6XFxcIm9yXFxcIixlbGVtZW50czpbZSxyXX0pKSxxdWVyeTpuPT5uLnF1ZXJ5T3JzLnRyaW0oYi5vcHRXaGl0ZXNwYWNlKX0pO2Z1bmN0aW9uIEFuKG4sZSx0KXtyZXR1cm4gYi5zZXFNYXAobixiLnNlcShiLm9wdFdoaXRlc3BhY2UsZSxiLm9wdFdoaXRlc3BhY2UsbikubWFueSgpLChyLHMpPT57aWYocy5sZW5ndGg9PTApcmV0dXJuIHI7bGV0IGk9dChyLHNbMF1bMV0sc1swXVszXSk7Zm9yKGxldCBvPTE7bzxzLmxlbmd0aDtvKyspaT10KGksc1tvXVsxXSxzW29dWzNdKTtyZXR1cm4gaX0pfWZ1bmN0aW9uIFN0KG4sZSl7bGV0IHQ9dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiP2Iuc3RyaW5nKG4pOm47cmV0dXJuIGIuc2VxTWFwKHQuc2tpcChiLm9wdFdoaXRlc3BhY2UpLGUudHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSwocixzKT0+W3Isc10pfWZ1bmN0aW9uIFRmKG4sLi4uZSl7cmV0dXJuIGIuY3VzdG9tKCh0LHIpPT4ocyxpKT0+e2xldCBvPW4uXyhzLGkpO2lmKCFvLnN0YXR1cylyZXR1cm4gbztmb3IobGV0IGEgb2YgZSl7bGV0IHU9YShvLnZhbHVlKS5fKHMsby5pbmRleCk7aWYoIXUuc3RhdHVzKXJldHVybiBvO289dX1yZXR1cm4gb30pfXZhciBlbj1xcihucygpKTtmdW5jdGlvbiBYdChuLGUpe2xldCB0PXt9O2ZvcihsZXRbcixzXW9mIE9iamVjdC5lbnRyaWVzKG4pKXRbcl09ZShzKTtyZXR1cm4gdH12YXIgTW47KHI9PntyLk5PT1BfTk9STUFMSVpFUj1zPT5zO2Z1bmN0aW9uIGUocyl7bGV0IGk9dHQud3JhcFZhbHVlKHMpO2lmKCFpKXJldHVybiBudWxsO3N3aXRjaChpPT1udWxsP3ZvaWQgMDppLnR5cGUpe2Nhc2VcXFwiYXJyYXlcXFwiOnJldHVybiBpLnZhbHVlLm1hcChyLmpzb24pO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gWHQoaS52YWx1ZSxyLmpzb24pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJueyRfdHlwZTpcXFwiZGF0ZVxcXCIsdmFsdWU6aS52YWx1ZS50b0lTTyh7ZXh0ZW5kZWRab25lOiEwLGluY2x1ZGVPZmZzZXQ6ITB9KX07Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm57JF90eXBlOlxcXCJsaW5rXFxcIix2YWx1ZTppLnZhbHVlLnRvT2JqZWN0KCl9O2Nhc2VcXFwiZHVyYXRpb25cXFwiOnJldHVybnskX3R5cGU6XFxcImR1cmF0aW9uXFxcIix2YWx1ZTppLnZhbHVlLnRvSVNPKCl9O2Nhc2VcXFwiYm9vbGVhblxcXCI6Y2FzZVxcXCJudW1iZXJcXFwiOmNhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4gaS52YWx1ZTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpjYXNlXFxcIm51bGxcXFwiOnJldHVybiBudWxsfX1yLmpzb249ZTtmdW5jdGlvbiB0KHMsaT1yLk5PT1BfTk9STUFMSVpFUil7aWYocz09bnVsbClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHMpKXJldHVybiBpKHMubWFwKG89PnIudmFsdWUobyxpKSkpO2lmKHR5cGVvZiBzPT1cXFwib2JqZWN0XFxcIil7aWYoIShcXFwiJF90eXBlXFxcImluIHMpKXJldHVybiBYdChzLGE9PnIudmFsdWUoYSxpKSk7bGV0IG89cy4kX3R5cGU7c3dpdGNoKG8pe2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIGkoQi5mcm9tSVNPKHMudmFsdWUpKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gaShBLmZyb21JU08ocy52YWx1ZSkpO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuIGkoZWUuZnJvbU9iamVjdChzLnZhbHVlKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBzZXJpYWxpemVkIHR5cGUgJyR7b30nIWApfX1yZXR1cm4gaShzKX1yLnZhbHVlPXR9KShNbnx8KE1uPXt9KSk7ZnVuY3Rpb24ganUobil7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sbix7dmFsdWU6TW4uanNvbihuLnZhbHVlKX0pfWZ1bmN0aW9uIEJzKG4sZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAodD0+QnModCxlKSk6e2tleTpuLmtleSxyYXc6bi52YWx1ZSx2YWx1ZTpDZihuLnZhbHVlKSxwb3NpdGlvbjp7bGluZTplLHN0YXJ0Om4uc3RhcnQsc3RhcnRWYWx1ZTpuLnN0YXJ0VmFsdWUsZW5kOm4uZW5kfSx3cmFwcGluZzpuLndyYXBwaW5nfX12YXIgX3M9T2JqZWN0LmZyZWV6ZSh7XFxcIltcXFwiOlxcXCJdXFxcIixcXFwiKFxcXCI6XFxcIilcXFwifSk7ZnVuY3Rpb24gU2YobixlLHQscil7bGV0IHM9MCxpPSExO2ZvcihsZXQgbz1lO288bi5sZW5ndGg7bysrKXtsZXQgYT1uLmNoYXJBdChvKTtpZihhPT1cXFwiXFxcXFxcXFxcXFwiKXtpPSFpO2NvbnRpbnVlfWlmKGkpe2k9ITE7Y29udGludWV9aWYoYT09dD9zKys6YT09ciYmcy0tLHM8MClyZXR1cm57dmFsdWU6bi5zdWJzdHJpbmcoZSxvKS50cmltKCksZW5kSW5kZXg6bysxfTtpPSExfX1mdW5jdGlvbiBWdShuLGUpe2xldCB0PW4uaW5kZXhPZihcXFwiOjpcXFwiLGUpO2lmKCEodDwwKSlyZXR1cm57a2V5Om4uc3Vic3RyaW5nKGUsdCkudHJpbSgpLHZhbHVlSW5kZXg6dCsyfX1mdW5jdGlvbiBrZihuLGUpe2xldCB0PW4uY2hhckF0KGUpLHI9VnUobixlKzEpO2lmKHI9PT12b2lkIDApcmV0dXJuO2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhfcykuY29uY2F0KE9iamVjdC52YWx1ZXMoX3MpKSlpZihyLmtleS5pbmNsdWRlcyhpKSlyZXR1cm47bGV0IHM9U2YobixyLnZhbHVlSW5kZXgsdCxfc1t0XSk7aWYocyE9PXZvaWQgMClyZXR1cm57a2V5OnIua2V5LHZhbHVlOnMudmFsdWUsc3RhcnQ6ZSxzdGFydFZhbHVlOnIudmFsdWVJbmRleCxlbmQ6cy5lbmRJbmRleCx3cmFwcGluZzp0fX1mdW5jdGlvbiBDZihuKXtpZihuLnRyaW0oKT09XFxcIlxcXCIpcmV0dXJuIG51bGw7bGV0IGU9Si5pbmxpbmVGaWVsZC5wYXJzZShuKTtyZXR1cm4gZS5zdGF0dXM/ZS52YWx1ZTpufWZ1bmN0aW9uIHF1KG4sZT0hMSl7bGV0IHQ9W107Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKF9zKSl7bGV0IGk9bi5pbmRleE9mKHMpO2Zvcig7aT49MDspe2xldCBvPWtmKG4saSk7aWYoIW8pe2k9bi5pbmRleE9mKHMsaSsxKTtjb250aW51ZX10LnB1c2gobyksaT1uLmluZGV4T2YocyxvLmVuZCl9fWUmJih0PXQuY29uY2F0KF9mKG4pKSksdC5zb3J0KChzLGkpPT5zLnN0YXJ0LWkuc3RhcnQpO2xldCByPVtdO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKShzPT0wfHxyW3IubGVuZ3RoLTFdLmVuZDx0W3NdLnN0YXJ0KSYmci5wdXNoKHRbc10pO3JldHVybiByfXZhciB4Zj1lbi5hbHQoZW4ucmVnZXhwKG5ldyBSZWdFeHAod24oKSxcXFwidVxcXCIpKSxlbi5yZWdleHAoL1swLTlcXFxccHtMZXR0ZXJ9XFxcXHdcXFxcc18vLV0rL3UpKS5tYW55KCkubWFwKG49Pm4uam9pbihcXFwiXFxcIikpLE9mPWVuLnJlZ2V4cCgvW14wLTlcXFxcd1xcXFxwe0xldHRlcn1dKi91KS50aGVuKHhmKS5za2lwKGVuLnJlZ2V4cCgvW19cXFxcKn5gXSovdSkpO2Z1bmN0aW9uIFV1KG4pe2xldCBlPVZ1KG4sMCk7aWYoIWUpcmV0dXJuO2xldCB0PU9mLnBhcnNlKGUua2V5KTtpZih0LnN0YXR1cylyZXR1cm57a2V5OnQudmFsdWUsdmFsdWU6bi5zdWJzdHJpbmcoZS52YWx1ZUluZGV4KS50cmltKCksc3RhcnQ6MCxzdGFydFZhbHVlOmUudmFsdWVJbmRleCxlbmQ6bi5sZW5ndGh9fXZhciB2Zj0vXFxcXHV7Mjc5NX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsSWY9Lyg/OlxcXFx1ezFGNEM1fXxcXFxcdXsxRjRDNn18XFxcXHV7MUY1RDN9XFxcXHV7RkUwRn0/KVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxOZj0vXFxcXHV7MjcwNX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsTGY9L1tcXFxcdXsyM0YzfVxcXFx1ezIzMUJ9XVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxBZj0vXFxcXHV7MUY2RUJ9XFxcXHMqKFxcXFxkezR9LVxcXFxkezJ9LVxcXFxkezJ9KS91LE1mPVt7cmVnZXg6dmYsa2V5OlxcXCJjcmVhdGVkXFxcIn0se3JlZ2V4OkFmLGtleTpcXFwic3RhcnRcXFwifSx7cmVnZXg6TGYsa2V5OlxcXCJzY2hlZHVsZWRcXFwifSx7cmVnZXg6SWYsa2V5OlxcXCJkdWVcXFwifSx7cmVnZXg6TmYsa2V5OlxcXCJjb21wbGV0aW9uXFxcIn1dO2Z1bmN0aW9uIF9mKG4pe2xldCBlPVtdO2ZvcihsZXR7cmVnZXg6dCxrZXk6cn1vZiBNZil7bGV0IHM9dC5leGVjKG4pO3MmJmUucHVzaCh7a2V5OnIsdmFsdWU6c1sxXSxzdGFydDpzLmluZGV4LHN0YXJ0VmFsdWU6cy5pbmRleCsxLGVuZDpzLmluZGV4K3NbMF0ubGVuZ3RoLHdyYXBwaW5nOlxcXCJlbW9qaS1zaG9ydGhhbmRcXFwifSl9cmV0dXJuIGV9dmFyIFBzOyh0PT57ZnVuY3Rpb24gbihyKXtsZXQgcz10dC53cmFwVmFsdWUoZSk7aWYoIXMpcmV0dXJuIG51bGw7c3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJzdHJpbmdcXFwiOmNhc2VcXFwiYm9vbGVhblxcXCI6Y2FzZVxcXCJudWxsXFxcIjpjYXNlXFxcIm51bWJlclxcXCI6cmV0dXJuIHMudmFsdWU7Y2FzZVxcXCJhcnJheVxcXCI6cmV0dXJuIHMudmFsdWUubWFwKG4pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIHMudmFsdWUudG9JU08oKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gcy52YWx1ZS50b0h1bWFuKCk7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuIG51bGw7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4gcy52YWx1ZS5tYXJrZG93bigpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gWHQocy52YWx1ZSxuKX19dC55YW1sPW47ZnVuY3Rpb24gZShyKXtpZihyPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiByPT1cXFwib2JqZWN0XFxcIilpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1bXTtmb3IobGV0IGkgb2YgcilzLnB1c2goZShpKSk7cmV0dXJuIHN9ZWxzZXtpZihyIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gQi5mcm9tSlNEYXRlKHIpO3tsZXQgcz1yLGk9e307Zm9yKGxldCBvIGluIHMpaVtvXT1lKHNbb10pO3JldHVybiBpfX1lbHNle2lmKHR5cGVvZiByPT1cXFwibnVtYmVyXFxcIilyZXR1cm4gcjtpZih0eXBlb2Ygcj09XFxcImJvb2xlYW5cXFwiKXJldHVybiByO2lmKHR5cGVvZiByPT1cXFwic3RyaW5nXFxcIil7bGV0IHM9Si5kYXRlLnBhcnNlKHIpO2lmKHMuc3RhdHVzKXJldHVybiBzLnZhbHVlO2xldCBpPUouZHVyYXRpb24ucGFyc2Uocik7aWYoaS5zdGF0dXMpcmV0dXJuIGkudmFsdWU7bGV0IG89Si5saW5rLnBhcnNlKHIpO3JldHVybiBvLnN0YXR1cz9vLnZhbHVlOnJ9fXJldHVybiBudWxsfXQubGl0ZXJhbD1lfSkoUHN8fChQcz17fSkpO3ZhciBCZj0vYGBgeWFtbDpkYXRhL2ksUGY9L14oPzpgYGB8fn5+KSguKikkL2ltLCRmPS9eW1xcXFxzPl0qKFxcXFxkK1xcXFwufFxcXFxkK1xcXFwpfFxcXFwqfC18XFxcXCspXFxcXHMqKFxcXFxbLnswLDF9XFxcXF0pP1xcXFxzKiguKikkL211O2Z1bmN0aW9uIEt1KG4sZSx0LHIpe2xldHtsaW5lczpzLG1ldGFkYXRhOmksZnJvbnRtYXR0ZXI6byxzZWN0aW9uczphfT1tbyhuLGUsdCk7cmV0dXJuIG5ldyBsbyhuLHIscy5sZW5ndGgsaSxhLG8pLmJ1aWxkKCl9ZnVuY3Rpb24gbW8obixlLHQpe3ZhciBGLGcseSxTLE8sdixELHcsVCxDLE0sVixqLHoscmUsbGU7bGV0IHI9dC5mcm9udG1hdHRlcj9IdSh0LmZyb250bWF0dGVyKTp2b2lkIDAscz1lLnNwbGl0KC9cXFxcclxcXFxufFxcXFxyfFxcXFxuLyksaT1uZXcgamUsbz1bXSxhPShGPXQuaGVhZGluZ3MpIT1udWxsP0Y6W107YS5zb3J0KCh4LFIpPT54LnBvc2l0aW9uLnN0YXJ0LmxpbmUtUi5wb3NpdGlvbi5zdGFydC5saW5lKTtsZXQgdT1uZXcgJHMuZGVmYXVsdCh2b2lkIDAsKHgsUik9PngtUik7Zm9yKGxldCB4PTA7eDxhLmxlbmd0aDt4Kyspe2xldCBSPWFbeF0sUT1SLnBvc2l0aW9uLnN0YXJ0LmxpbmUsY2U9eD09YS5sZW5ndGgtMT9zLmxlbmd0aDphW3grMV0ucG9zaXRpb24uc3RhcnQubGluZSxFZT1uZXcgX3IoUSxjZSxSLmhlYWRpbmcsUi5sZXZlbCx4KzEpO3Uuc2V0KFEsRWUpfWlmKHUuc2l6ZT09MCl7aWYoIVd1KHMsMCxzLmxlbmd0aCkpe2xldCB4PW5ldyBfcigwLHMubGVuZ3RoLFRuKG4pLDEsMCk7dS5zZXQoMCx4KX19ZWxzZXtsZXQgeD0oZz11LmdldFBhaXJPck5leHRIaWdoZXIoMCkpPT1udWxsP3ZvaWQgMDpnWzFdO2lmKHguc3RhcnQ+MCYmIVd1KHMsMCx4LnN0YXJ0KSl7bGV0IFI9bmV3IF9yKDAseC5zdGFydCxUbihuKSwxLDApO3Uuc2V0KDAsUil9fWxldCBsPW5ldyAkcy5kZWZhdWx0KHZvaWQgMCwoeCxSKT0+eC1SKSxkPTE7Zm9yKGxldCB4IG9mIHQuc2VjdGlvbnN8fFtdKXtpZih4LnR5cGU9PT1cXFwiaGVhZGluZ1xcXCIpY29udGludWU7bGV0IFI9eC5wb3NpdGlvbi5zdGFydC5saW5lLFE9eC5wb3NpdGlvbi5lbmQubGluZSsxLGNlPXNbUl07aWYoeC50eXBlPT09XFxcImxpc3RcXFwiKWwuc2V0KFIsbmV3IGNvKFIsUSxkKysseC5pZCkpO2Vsc2UgaWYoeC50eXBlPT1cXFwiY29kZVxcXCImJkJmLnRlc3QoY2UpKXtsZXQgRWU9cy5zbGljZShSKzEsUS0xKS5qb2luKGBcXG5gKS5yZXBsYWNlKC9cXFxcdC9nbSxcXFwiICBcXFwiKSxWZT1IdShhbyhFZSkpO2wuc2V0KFIsbmV3IGZvKFIsUSxkKyssVmUseC5pZCkpfWVsc2UgaWYoeC50eXBlPT09XFxcImNvZGVcXFwiKXtsZXQgRWU9Y2UubWF0Y2goUGYpO2lmKCFFZSlsLnNldChSLG5ldyBScyhSLFEsZCsrLFtdLFxcXCJpbmRlbnRcXFwiLFIsUSx4LmlkKSk7ZWxzZXtsZXQgVmU9RWUubGVuZ3RoPjEmJkVlWzFdP0VlWzFdLnNwbGl0KFxcXCIsXFxcIik6W107bC5zZXQoUixuZXcgUnMoUixRLGQrKyxWZSxcXFwiZmVuY2VkXFxcIixSKzEsUS0xLHguaWQpKX19ZWxzZSBsLnNldChSLG5ldyBobyhSLFEsZCsrLHgudHlwZSx4LmlkKSl9Zm9yKGxldCB4IG9mIGwudmFsdWVzKCkpKHk9Y3QoeC5zdGFydCx1KSk9PW51bGx8fHkuYmxvY2soeCk7bGV0IGg9L15bXFxcXHRcXFxcZlxcXFx2IF0qW1xcXFwtK1xcXFwqXVxcXFxzKFxcXFxbLlxcXFxdXFxcXHMpPy8scD0vXig+P1xcXFxzPykqKFxcXFx0fFxcXFxzKSovZyxmPW5ldyAkcy5kZWZhdWx0KHZvaWQgMCwoeCxSKT0+eC1SKTtmb3IobGV0IHggb2YgdC5saXN0SXRlbXN8fFtdKXtsZXQgUT1zW3gucG9zaXRpb24uc3RhcnQubGluZV0ubWF0Y2goJGYpLGNlLEVlO1EmJihjZT1RWzFdLEVlPVFbM10pO2xldCBWZT1uZXcgcG8oeC5wb3NpdGlvbi5zdGFydC5saW5lLHgucG9zaXRpb24uZW5kLmxpbmUrMSx4LnBhcmVudCxjZSx4LmlkLHgudGFzayxFZSk7Zi5zZXQoVmUuc3RhcnQsVmUpfWZvcihsZXQgeCBvZiBmLnZhbHVlcygpKWlmKHgucGFyZW50TGluZTwwKXtsZXQgUj1sLmdldCgteC5wYXJlbnRMaW5lKTtpZighUnx8Ui50eXBlIT09XFxcImxpc3RcXFwiKWNvbnRpbnVlO1IuaXRlbXMucHVzaCh4KX1lbHNlKFM9Zi5nZXQoeC5wYXJlbnRMaW5lKSk9PW51bGx8fFMuZWxlbWVudHMucHVzaCh4KTtmb3IobGV0IHggb2YoTz10LnRhZ3MpIT1udWxsP086W10pe2xldCBSPXgudGFnLnN0YXJ0c1dpdGgoXFxcIiNcXFwiKT94LnRhZzpcXFwiI1xcXCIreC50YWcsUT14LnBvc2l0aW9uLnN0YXJ0LmxpbmU7aS50YWcoUiksKHY9Y3QoUSx1KSk9PW51bGx8fHYubWV0YWRhdGEudGFnKFIpLChEPWN0KFEsbCkpPT1udWxsfHxELm1ldGFkYXRhLnRhZyhSKSwodz1jdChRLGYpKT09bnVsbHx8dy5tZXRhZGF0YS50YWcoUil9aWYodC5mcm9udG1hdHRlcilmb3IobGV0IHggb2YgUmYodC5mcm9udG1hdHRlcikpe2xldCBSPXguc3RhcnRzV2l0aChcXFwiI1xcXCIpP3g6XFxcIiNcXFwiK3g7aS50YWcoUil9Zm9yKGxldCB4IG9mKFQ9dC5saW5rcykhPW51bGw/VDpbXSl7bGV0IFI9ZWUuaW5mZXIoeC5saW5rKSxRPXgucG9zaXRpb24uc3RhcnQubGluZTtpLmxpbmsoUiksKEM9Y3QoUSx1KSk9PW51bGx8fEMubWV0YWRhdGEubGluayhSKSwoTT1jdChRLGwpKT09bnVsbHx8TS5tZXRhZGF0YS5saW5rKFIpLChWPWN0KFEsZikpPT1udWxsfHxWLm1ldGFkYXRhLmxpbmsoUil9Zm9yKGxldCB4IG9mKGo9dC5mcm9udG1hdHRlckxpbmtzKSE9bnVsbD9qOltdKWkubGluayhlZS5pbmZlcih4LmxpbmssITEseC5kaXNwbGF5VGV4dCkpO2ZvcihsZXQgeCBvZiBEbyhzKSl7bGV0IFI9eC5wb3NpdGlvbi5saW5lO2kuaW5saW5lRmllbGQoeCksKHo9Y3QoUix1KSk9PW51bGx8fHoubWV0YWRhdGEuaW5saW5lRmllbGQoeCksKHJlPWN0KFIsbCkpPT1udWxsfHxyZS5tZXRhZGF0YS5pbmxpbmVGaWVsZCh4KSwobGU9Y3QoUixmKSk9PW51bGx8fGxlLm1ldGFkYXRhLmlubGluZUZpZWxkKHgpfXJldHVybiBvLnB1c2goLi4udS52YWx1ZXMoKSkse2xpbmVzOnMsZnJvbnRtYXR0ZXI6cixtZXRhZGF0YTppLHNlY3Rpb25zOm99fWZ1bmN0aW9uIFd1KG4sZSx0KXtmb3IobGV0IHI9ZTtyPHQ7cisrKWlmKG5bcl0udHJpbSgpIT09XFxcIlxcXCIpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24qRG8obil7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCB0PW5bZV07aWYodC5sZW5ndGg+MzI3Njh8fCF0LmluY2x1ZGVzKFxcXCI6OlxcXCIpKWNvbnRpbnVlO2xldCByPXF1KHQpO2lmKHIubGVuZ3RoPjApZm9yKGxldCBzIG9mIHIpeWllbGQgQnMocyxlKTtlbHNle2xldCBzPVV1KHQpO3MmJih5aWVsZCBCcyhzLGUpKX19fWZ1bmN0aW9uIEh1KG4pe2xldCBlPXt9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHI9blt0XTtlW3QudG9Mb3dlckNhc2UoKV09e2tleTp0LHZhbHVlOk1uLmpzb24oUHMubGl0ZXJhbChyKSkscmF3OnJ9fXJldHVybiBlfWZ1bmN0aW9uIGN0KG4sZSl7dmFyIHI7bGV0IHQ9KHI9ZS5nZXRQYWlyT3JOZXh0TG93ZXIobikpPT1udWxsP3ZvaWQgMDpyWzFdO2lmKHQmJnQuZW5kPj1uKXJldHVybiB0fWZ1bmN0aW9uIFJmKG4pe3JldHVybiBPYmplY3Qua2V5cyhuKS5maWx0ZXIodD0+dC50b0xvd2VyQ2FzZSgpPT1cXFwidGFnc1xcXCJ8fHQudG9Mb3dlckNhc2UoKT09XFxcInRhZ1xcXCIpLm1hcCh0PT5KdShuW3RdLC9bLFxcXFxzXSsvKSkucmVkdWNlKCh0LHIpPT50LmNvbmNhdChyKSxbXSkubWFwKHQ9PnQuc3RhcnRzV2l0aChcXFwiI1xcXCIpP3Q6XFxcIiNcXFwiK3QpfWZ1bmN0aW9uIEp1KG4sZSl7cmV0dXJuIG49PW51bGx8fG49PW51bGw/W106QXJyYXkuaXNBcnJheShuKT9uLmZpbHRlcih0PT4hIXQpLm1hcCh0PT5KdSh0LGUpKS5yZWR1Y2UoKHQscik9PnQuY29uY2F0KHIpLFtdKTooXFxcIlxcXCIrbikuc3BsaXQoZSkuZmlsdGVyKHQ9PiEhdCkubWFwKHQ9PnQudHJpbSgpKS5maWx0ZXIodD0+dC5sZW5ndGg+MCl9dmFyIGplPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50YWdzPW5ldyBTZXQ7dGhpcy5saW5rcz1bXTt0aGlzLmlubGluZUZpZWxkcz17fX10YWcoZSl7dGhpcy50YWdzLmFkZChlKX1saW5rKGUpe3RoaXMubGlua3MuZmluZCh0PT50LmVxdWFscyhlKSl8fHRoaXMubGlua3MucHVzaChlKX1pbmxpbmVGaWVsZChlKXtsZXQgdD1lLmtleS50b0xvd2VyQ2FzZSgpO09iamVjdC5rZXlzKHRoaXMuaW5saW5lRmllbGRzKS5zb21lKHI9PnIudG9Mb3dlckNhc2UoKT09dCl8fCh0aGlzLmlubGluZUZpZWxkc1t0XT1lKX1maW5pc2hUYWdzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy50YWdzKX1maW5pc2hMaW5rcygpe3JldHVybiB0aGlzLmxpbmtzLm1hcChlPT5lLnRvT2JqZWN0KCkpfWZpbmlzaElubGluZUZpZWxkcygpe3JldHVybiBYdCh0aGlzLmlubGluZUZpZWxkcyxqdSl9fSxsbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGksbyl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMubGVuZ3RoPXI7dGhpcy5tZXRhZGF0YT1zO3RoaXMuc2VjdGlvbnM9aTt0aGlzLmZyb250bWF0dGVyPW99YnVpbGQoKXtyZXR1cm57JHBhdGg6dGhpcy5wYXRoLCRjdGltZTp0aGlzLnN0YXRzLmN0aW1lLCRtdGltZTp0aGlzLnN0YXRzLm10aW1lLCRzaXplOnRoaXMuc3RhdHMuc2l6ZSwkZXh0ZW5zaW9uOlBhKHRoaXMucGF0aCksJHBvc2l0aW9uOntzdGFydDowLGVuZDp0aGlzLmxlbmd0aH0sJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAoZT0+ZS5idWlsZCgpKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlcn19fSxfcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMudGl0bGU9cjt0aGlzLmxldmVsPXM7dGhpcy5vcmRpbmFsPWk7dGhpcy5ibG9ja3M9W107dGhpcy5tZXRhZGF0YT1uZXcgamV9YmxvY2soZSl7dGhpcy5ibG9ja3MucHVzaChlKX1idWlsZCgpe3JldHVybnskdGl0bGU6dGhpcy50aXRsZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJGxldmVsOnRoaXMubGV2ZWwsJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkcG9zaXRpb246e3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfSwkYmxvY2tzOnRoaXMuYmxvY2tzLm1hcChlPT5lLmJ1aWxkKCkpfX19LGNvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMuYmxvY2tJZD1zO3RoaXMudHlwZT1cXFwibGlzdFxcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamU7dGhpcy5pdGVtcz1bXX1idWlsZCgpe3JldHVybnskb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdHlwZTpcXFwibGlzdFxcXCIsJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRlbGVtZW50czp0aGlzLml0ZW1zLm1hcChlPT5lLmJ1aWxkKCkpfX19LFJzPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMsaSxvLGEsdSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5vcmRpbmFsPXI7dGhpcy5sYW5ndWFnZXM9czt0aGlzLnN0eWxlPWk7dGhpcy5jb250ZW50U3RhcnQ9bzt0aGlzLmNvbnRlbnRFbmQ9YTt0aGlzLmJsb2NrSWQ9dTt0aGlzLnR5cGU9XFxcImNvZGVibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImNvZGVibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRsYW5ndWFnZXM6dGhpcy5sYW5ndWFnZXMsJHN0eWxlOnRoaXMuc3R5bGUsJGNvbnRlbnRQb3NpdGlvbjp7c3RhcnQ6dGhpcy5jb250ZW50U3RhcnQsZW5kOnRoaXMuY29udGVudEVuZH19fX0sZm89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpKXt0aGlzLnN0YXJ0PWU7dGhpcy5lbmQ9dDt0aGlzLm9yZGluYWw9cjt0aGlzLmRhdGE9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnR5cGU9XFxcImRhdGFibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImRhdGFibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRkYXRhOnRoaXMuZGF0YX19fSxobz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMudHlwZT1zO3RoaXMuYmxvY2tJZD1pO3RoaXMubWV0YWRhdGE9bmV3IGplfWJ1aWxkKCl7cmV0dXJueyR0eXBlOnRoaXMudHlwZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkYmxvY2tJZDp0aGlzLmJsb2NrSWR9fX0scG89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpLG8sYSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5wYXJlbnRMaW5lPXI7dGhpcy5zeW1ib2w9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnN0YXR1cz1vO3RoaXMudGV4dD1hO3RoaXMubWV0YWRhdGE9bmV3IGplO3RoaXMuZWxlbWVudHM9W119YnVpbGQoKXtyZXR1cm57JHBhcmVudExpbmU6dGhpcy5wYXJlbnRMaW5lLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRibG9ja0lkOnRoaXMuYmxvY2tJZCwkZWxlbWVudHM6dGhpcy5lbGVtZW50cy5tYXAoZT0+ZS5idWlsZCgpKSwkdHlwZTp0aGlzLnN0YXR1cz9cXFwidGFza1xcXCI6XFxcImxpc3RcXFwiLCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJHN0YXR1czp0aGlzLnN0YXR1cywkc3ltYm9sOnRoaXMuc3ltYm9sLCR0ZXh0OnRoaXMudGV4dH19fTtmdW5jdGlvbiB6dShuLGUsdCxyKXt2YXIgbztsZXQgcz1uZXcgZ28obixyKSxpPUpTT04ucGFyc2UoZSk7Zm9yKGxldCBhIG9mIGkubm9kZXMpaWYoYS50eXBlIT1cXFwiZ3JvdXBcXFwiKWlmKGEudHlwZT09XFxcInRleHRcXFwiKXtsZXR7ZnJvbnRtYXR0ZXI6dSxtZXRhZGF0YTpsLGxpbmVzOmQsc2VjdGlvbnM6aH09bW8obixhLnRleHQsdC5jYWNoZXNbYS5pZF0pLHA9bmV3IGpzKG4sYS5pZCxhLHUpO2guZm9yRWFjaChmPT5wLnNlY3Rpb24oZikpLHMuY2FyZChwKTtmb3IobGV0IGYgaW4gbC50YWdzKXMubWV0YWRhdGEudGFnKGYpO2ZvcihsZXQgZiBvZihvPWwubGlua3MpIT1udWxsP286W10pcy5tZXRhZGF0YS5saW5rKGYpO2ZvcihsZXQgZiBvZiBEbyhkKSlzLm1ldGFkYXRhLmlubGluZUZpZWxkKGYpfWVsc2V7bGV0IHU9bmV3IGpzKG4sYS5pZCxhKTtzLmNhcmQodSl9cmV0dXJuIHMuYnVpbGQoKX12YXIgeW89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMucGF0aD1lO3RoaXMuaWQ9dDt0aGlzLm5vZGVKc29uPXI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JGZpbGU6dGhpcy5wYXRoLCRpZDp0aGlzLmlkLCRwb3NpdGlvbjp7eDp0aGlzLm5vZGVKc29uLngseTp0aGlzLm5vZGVKc29uLnl9LCRkaW1lbnNpb25zOnt3aWR0aDp0aGlzLm5vZGVKc29uLndpZHRoLGhlaWdodDp0aGlzLm5vZGVKc29uLmhlaWdodH0sJGNvbG9yOnRoaXMubm9kZUpzb24uY29sb3IsJGxpbms6ZWUuZmlsZSh0aGlzLnBhdGgpLndpdGhCbG9jayh0aGlzLmlkKS50b09iamVjdCgpfX19LGpzPWNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxyLHMsaSl7c3VwZXIodCxyLHMpO3RoaXMucGF0aD10O3RoaXMuaWQ9cjt0aGlzLm5vZGVKc29uPXM7dGhpcy5mcm9udG1hdHRlcj1pO3RoaXMuc2VjdGlvbnM9W119c2VjdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9ucy5wdXNoKHQpLHR9YnVpbGQoKXtzd2l0Y2godGhpcy5ub2RlSnNvbi50eXBlKXtjYXNlXFxcInRleHRcXFwiOnJldHVybiBGZSgkKHt9LHN1cGVyLmJ1aWxkKCkpLHskaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlciwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAodD0+dC5idWlsZCgpKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkbGlua3M6dGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLCR0eXBlOlxcXCJ0ZXh0LWNhcmRcXFwiLCRjb2xvcjp0aGlzLm5vZGVKc29uLmNvbG9yfSk7Y2FzZVxcXCJmaWxlXFxcIjpyZXR1cm4gRmUoJCh7fSxzdXBlci5idWlsZCgpKSx7JGxpbmtlZEZpbGU6dGhpcy5ub2RlSnNvbi5maWxlfSk7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4gRmUoJCh7fSxzdXBlci5idWlsZCgpKSx7JHVybDp0aGlzLm5vZGVKc29uLnVybH0pfX19LGdvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMuY2FyZHM9W107dGhpcy5tZXRhZGF0YT1uZXcgamV9Y2FyZChlKXtyZXR1cm4gdGhpcy5jYXJkcy5wdXNoKGUpLGV9YnVpbGQoKXtyZXR1cm57JGNhcmRzOnRoaXMuY2FyZHMubWFwKGU9PmUuYnVpbGQoKSksJGN0aW1lOnRoaXMuc3RhdHMuY3RpbWUsJG10aW1lOnRoaXMuc3RhdHMubXRpbWUsJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkcGF0aDp0aGlzLnBhdGgsJHNpemU6dGhpcy5zdGF0cy5zaXplfX19O29ubWVzc2FnZT1hc3luYyBuPT57dHJ5e2xldCBlPW4uZGF0YTtpZihlLnR5cGU9PT1cXFwibWFya2Rvd25cXFwiKXtsZXQgdD1LdShlLnBhdGgsZS5jb250ZW50cyxlLm1ldGFkYXRhLGUuc3RhdCk7cG9zdE1lc3NhZ2Uoe3R5cGU6XFxcIm1hcmtkb3duXFxcIixyZXN1bHQ6dH0pfWVsc2UgaWYoZS50eXBlPT09XFxcImNhbnZhc1xcXCIpe2xldCB0PXp1KGUucGF0aCxlLmNvbnRlbnRzLGUuaW5kZXgsZS5zdGF0KTtwb3N0TWVzc2FnZSh7dHlwZTpcXFwiY2FudmFzXFxcIixyZXN1bHQ6dH0pfWVsc2UgcG9zdE1lc3NhZ2UoeyRlcnJvcjpcXFwiVW5zdXBwb3J0ZWQgaW1wb3J0IG1ldGhvZC5cXFwifSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihgRGF0YWNvcmUgSW5kZXhlciBmYWlsZWQgdG8gaW5kZXggJHtuLmRhdGEucGF0aH06ICR7ZX1gKSxwb3N0TWVzc2FnZSh7JGVycm9yOmUubWVzc2FnZX0pfX07XFxuXCIpO1xufVxuIiwgIi8qKiBDb250cm9scyBhbmQgY3JlYXRlcyBEYXRhdmlldyBmaWxlIGltcG9ydGVycywgYWxsb3dpbmcgZm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nIGFuZCBwYXJzaW5nIG9mIGZpbGVzLiAqL1xuXG5pbXBvcnQgSW1wb3J0V29ya2VyIGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGaWxlTWFuYWdlciwgTWV0YWRhdGFDYWNoZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBDYW52YXNJbXBvcnQsIE1hcmtkb3duSW1wb3J0IH0gZnJvbSBcImluZGV4L3dlYi13b3JrZXIvbWVzc2FnZVwiO1xuaW1wb3J0IHsgRGVmZXJyZWQsIGRlZmVycmVkIH0gZnJvbSBcInV0aWxzL2RlZmVycmVkXCI7XG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIkBkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZVwiO1xuXG4vKiogU2V0dGluZ3MgZm9yIHRocm90dGxpbmcgaW1wb3J0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRUaHJvdHRsZSB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2Ygd29ya2VycyB0byB1c2UgZm9yIGltcG9ydHMuICovXG4gICAgd29ya2VyczogbnVtYmVyO1xuICAgIC8qKiBBIG51bWJlciBiZXR3ZWVuIDAuMSBhbmQgMSB3aGljaCBpbmRpY2F0ZXMgdG90YWwgY3B1IHV0aWxpemF0aW9uIHRhcmdldDsgMC4xIG1lYW5zIHNwZW5kIDEwJSBvZiB0aW1lICAqL1xuICAgIHV0aWxpemF0aW9uOiBudW1iZXI7XG59XG5cbi8qKiBEZWZhdWx0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJPVFRMRTogSW1wb3J0VGhyb3R0bGUgPSB7XG4gICAgd29ya2VyczogMixcbiAgICB1dGlsaXphdGlvbjogMC43NSxcbn07XG5cbi8qKiBNdWx0aS10aHJlYWRlZCBmaWxlIHBhcnNlciB3aGljaCBkZWJvdW5jZXMgcmFwaWQgZmlsZSByZXF1ZXN0cyBhdXRvbWF0aWNhbGx5LiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVJbXBvcnRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyogQmFja2dyb3VuZCB3b3JrZXJzIHdoaWNoIGRvIHRoZSBhY3R1YWwgZmlsZSBwYXJzaW5nLiAqL1xuICAgIHdvcmtlcnM6IE1hcDxudW1iZXIsIFBvb2xXb3JrZXI+O1xuICAgIC8qKiBUaGUgbmV4dCB3b3JrZXIgSUQgdG8gaGFuZCBvdXQuICovXG4gICAgbmV4dFdvcmtlcklkOiBudW1iZXI7XG4gICAgLyoqIElmIHRydWUsIHRoZSBpbXBvcnRlciBpcyBub3cgaW5hY3RpdmUgYW5kIHdpbGwgbm90IHByb2Nlc3MgZnVydGhlciBmaWxlcy4gKi9cbiAgICBzaHV0ZG93bjogYm9vbGVhbjtcblxuICAgIC8qKiBMaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgZm9yIGEgcmVsb2FkLiAqL1xuICAgIHF1ZXVlOiBRdWV1ZTxbVEZpbGUsIERlZmVycmVkPGFueT5dPjtcbiAgICAvKiogT3V0c3RhbmRpbmcgbG9hZHMgaW5kZXhlZCBieSBwYXRoLiAqL1xuICAgIG91dHN0YW5kaW5nOiBNYXA8c3RyaW5nLCBQcm9taXNlPGFueT4+O1xuICAgIC8qKiBUaHJvdHRsZSBzZXR0aW5ncy4gKi9cbiAgICB0aHJvdHRsZTogKCkgPT4gSW1wb3J0VGhyb3R0bGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB2YXVsdDogVmF1bHQsXG4gICAgICAgIHB1YmxpYyBmaWxlTWFuYWdlcjogRmlsZU1hbmFnZXIsXG4gICAgICAgIHB1YmxpYyBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlLFxuICAgICAgICB0aHJvdHRsZT86ICgpID0+IEltcG9ydFRocm90dGxlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMud29ya2VycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zaHV0ZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5leHRXb3JrZXJJZCA9IDA7XG4gICAgICAgIHRoaXMudGhyb3R0bGUgPSB0aHJvdHRsZSA/PyAoKCkgPT4gREVGQVVMVF9USFJPVFRMRSk7XG5cbiAgICAgICAgdGhpcy5xdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nID0gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXVlIHRoZSBnaXZlbiBmaWxlIGZvciBpbXBvcnRpbmcuIE11bHRpcGxlIGltcG9ydCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZSBpbiBhIHNob3J0IHRpbWUgcGVyaW9kIHdpbGwgYmUgZGUtYm91bmNlZFxuICAgICAqIGFuZCBhbGwgYmUgcmVzb2x2ZWQgYnkgYSBzaW5nbGUgYWN0dWFsIGZpbGUgcmVsb2FkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbXBvcnQ8VD4oZmlsZTogVEZpbGUpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgLy8gRGUtYm91bmNlIHJlcGVhdGVkIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBmaWxlLlxuICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm91dHN0YW5kaW5nLmdldChmaWxlLnBhdGgpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgICAgICBsZXQgcHJvbWlzZSA9IGRlZmVycmVkPFQ+KCk7XG5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5zZXQoZmlsZS5wYXRoLCBwcm9taXNlKTtcbiAgICAgICAgdGhpcy5xdWV1ZS5lbnF1ZXVlKFtmaWxlLCBwcm9taXNlXSk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlc2V0IGFueSBhY3RpdmUgdGhyb3R0bGVzIG9uIHRoZSBpbXBvcnRlciAoc3VjaCBhcyBpZiB0aGUgdXRpbGl6YXRpb24gY2hhbmdlcykuICovXG4gICAgcHVibGljIHVudGhyb3R0bGUoKSB7XG4gICAgICAgIGZvciAobGV0IHdvcmtlciBvZiB0aGlzLndvcmtlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUG9sbCBmcm9tIHRoZSBxdWV1ZSBhbmQgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhbiBhdmFpbGFibGUgd29ya2VyLiAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2NoZWR1bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlLnNpemUoKSA9PSAwIHx8IHRoaXMuc2h1dGRvd24pIHJldHVybjtcblxuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLmF2YWlsYWJsZVdvcmtlcigpO1xuICAgICAgICBpZiAoIXdvcmtlcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IFtmaWxlLCBwcm9taXNlXSA9IHRoaXMucXVldWUuZGVxdWV1ZSgpITtcbiAgICAgICAgd29ya2VyLmFjdGl2ZSA9IFtmaWxlLCBwcm9taXNlLCBEYXRlLm5vdygpXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoIChmaWxlLmV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXJrZG93blwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJtZFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXIhLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm1hcmtkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKSxcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBNYXJrZG93bkltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFwiY2FudmFzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCB0aGlzLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlciEud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2FudmFzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5maWxlTWFuYWdlci5saW5rVXBkYXRlcnMuY2FudmFzLmNhbnZhcy5pbmRleC5pbmRleFtmaWxlLnBhdGhdLFxuICAgICAgICAgICAgICAgICAgICB9IGFzIENhbnZhc0ltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEJhY2tncm91bmQgZmlsZSByZWxvYWRpbmcgZmFpbGVkLiBcIiArIGV4KTtcblxuICAgICAgICAgICAgLy8gTWVzc2FnZSBmYWlsZWQsIHJlbGVhc2UgdGhpcyB3b3JrZXIuXG4gICAgICAgICAgICB3b3JrZXIuYWN0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmlzaCB0aGUgcGFyc2luZyBvZiBhIGZpbGUsIHBvdGVudGlhbGx5IHF1ZXVlaW5nIGEgbmV3IGZpbGUuICovXG4gICAgcHJpdmF0ZSBmaW5pc2god29ya2VyOiBQb29sV29ya2VyLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFjb3JlOiBSZWNlaXZlZCBhIHN0YWxlIHdvcmtlciBtZXNzYWdlLiBJZ25vcmluZy5cIiwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbZmlsZSwgcHJvbWlzZSwgc3RhcnRdID0gd29ya2VyLmFjdGl2ZSE7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwcm9taXNlcyB0byBsZXQgdXNlcnMga25vdyB0aGlzIGZpbGUgaGFzIGZpbmlzaGVkLlxuICAgICAgICBpZiAoXCIkZXJyb3JcIiBpbiBkYXRhKSBwcm9taXNlLnJlamVjdChkYXRhW1wiJGVycm9yXCJdKTtcbiAgICAgICAgZWxzZSBwcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZpbGUgZnJvbSBvdXRzdGFuZGluZy5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3b3JrZXIgaWYgd2UgYXJlIG92ZXIgY2FwYWNpdHkuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgbm90aWZ5IHRoZSBxdWV1ZSB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlIGZvciBuZXcgd29yay5cbiAgICAgICAgaWYgKHRoaXMud29ya2Vycy5zaXplID4gdGhpcy50aHJvdHRsZSgpLndvcmtlcnMpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5kZWxldGUod29ya2VyLmlkKTtcbiAgICAgICAgICAgIHRlcm1pbmF0ZSh3b3JrZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHRocm90dGxlID0gTWF0aC5tYXgoMC4xLCB0aGlzLnRocm90dGxlKCkudXRpbGl6YXRpb24pIC0gMS4wO1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSAobm93IC0gc3RhcnQpICogdGhyb3R0bGU7XG5cbiAgICAgICAgICAgIHdvcmtlci5hY3RpdmUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChkZWxheSA8PSAxZS0xMCkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdztcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdyArIGRlbGF5O1xuXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogSSdtIHByZXR0eSBzdXJlIHRoaXMgd2lsbCBnYXJhdW50ZWUgdGhhdCB0aGlzIGV4ZWN1dGVzIEFGVEVSIGRlbGF5IG1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICAvLyBzbyB0aGlzIHNob3VsZCBiZSBmaW5lOyBpZiBpdCdzIG5vdCwgd2UnbGwgaGF2ZSB0byBzd2FwIHRvIGFuIGV4dGVybmFsIHRpbWVvdXQgbG9vcFxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIGluZmluaXRlbHkgcmVzY2hlZHVsZXMgaXRzZWxmIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBleGVjdXRpb24gdGltZS5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKSwgZGVsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhbiBhdmFpbGFibGUgd29ya2VyLCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdC4gKi9cbiAgICBwcml2YXRlIGF2YWlsYWJsZVdvcmtlcigpOiBQb29sV29ya2VyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgd29ya2VyIG9mIHRoaXMud29ya2Vycy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlICYmIHdvcmtlci5hdmFpbGFibGVBdCA8PSBub3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBhIG5ldyB3b3JrZXIgaWYgd2UgY2FuLlxuICAgICAgICBpZiAodGhpcy53b3JrZXJzLnNpemUgPCB0aGlzLnRocm90dGxlKCkud29ya2Vycykge1xuICAgICAgICAgICAgbGV0IHdvcmtlciA9IHRoaXMubmV3V29ya2VyKCk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuc2V0KHdvcmtlci5pZCwgd29ya2VyKTtcbiAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBuZXcgd29ya2VyIGJvdW5kIHRvIHRoaXMgaW1wb3J0ZXIuICovXG4gICAgcHJpdmF0ZSBuZXdXb3JrZXIoKTogUG9vbFdvcmtlciB7XG4gICAgICAgIGxldCB3b3JrZXI6IFBvb2xXb3JrZXIgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5uZXh0V29ya2VySWQrKyxcbiAgICAgICAgICAgIGF2YWlsYWJsZUF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgd29ya2VyOiBuZXcgSW1wb3J0V29ya2VyKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgd29ya2VyLndvcmtlci5vbm1lc3NhZ2UgPSAoZXZ0KSA9PiB0aGlzLmZpbmlzaCh3b3JrZXIsIGV2dC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcbiAgICB9XG5cbiAgICAvKiogUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBwcm9taXNlcyBhbmQgY2xvc2UgYWxsIHdvcmtlcnMgb24gY2xvc2UuICovXG4gICAgcHVibGljIG9udW5sb2FkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCB3b3JrZXIgb2YgdGhpcy53b3JrZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0ZXJtaW5hdGUod29ya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICghdGhpcy5xdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtfZmlsZSwgcHJvbWlzZV0gPSB0aGlzLnF1ZXVlLnBvcCgpITtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KFwiVGVybWluYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cblxuLyoqIEEgd29ya2VyIGluIHRoZSBwb29sIG9mIGV4ZWN1dGluZyB3b3JrZXJzLiAqL1xuaW50ZXJmYWNlIFBvb2xXb3JrZXIge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhpcyB3b3JrZXIuICovXG4gICAgaWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIHJhdyB1bmRlcmx5aW5nIHdvcmtlci4gKi9cbiAgICB3b3JrZXI6IFdvcmtlcjtcbiAgICAvKiogVU5JWCB0aW1lIGluZGljYXRpbmcgdGhlIG5leHQgdGltZSB0aGlzIHdvcmtlciBpcyBhdmFpbGFibGUgZm9yIGV4ZWN1dGlvbiBhY2NvcmRpbmcgdG8gdGFyZ2V0IHV0aWxpemF0aW9uLiAqL1xuICAgIGF2YWlsYWJsZUF0OiBudW1iZXI7XG4gICAgLyoqIFRoZSBhY3RpdmUgcHJvbWlzZSB0aGlzIHdvcmtlciBpcyB3b3JraW5nIG9uLCBpZiBhbnkuICovXG4gICAgYWN0aXZlPzogW1RGaWxlLCBEZWZlcnJlZDxhbnk+LCBudW1iZXJdO1xufVxuXG4vKiogVGVybWluYXRlIGEgcG9vbCB3b3JrZXIuICovXG5mdW5jdGlvbiB0ZXJtaW5hdGUod29ya2VyOiBQb29sV29ya2VyKSB7XG4gICAgd29ya2VyLndvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgIGlmICh3b3JrZXIuYWN0aXZlKSB3b3JrZXIuYWN0aXZlWzFdLnJlamVjdChcIlRlcm1pbmF0ZWRcIik7XG4gICAgd29ya2VyLmFjdGl2ZSA9IHVuZGVmaW5lZDtcbn1cbiIsICJpbXBvcnQgeyBkZWZlcnJlZCwgRGVmZXJyZWQgfSBmcm9tIFwidXRpbHMvZGVmZXJyZWRcIjtcbmltcG9ydCB7IERhdGFzdG9yZSwgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQ2FjaGUgfSBmcm9tIFwiaW5kZXgvcGVyc2lzdGVyXCI7XG5pbXBvcnQgeyBJbmRleGFibGUsIElOREVYQUJMRV9FWFRFTlNJT05TIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgRmlsZUltcG9ydGVyLCBJbXBvcnRUaHJvdHRsZSB9IGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyXCI7XG5pbXBvcnQgeyBJbXBvcnRSZXN1bHQgfSBmcm9tIFwiaW5kZXgvd2ViLXdvcmtlci9tZXNzYWdlXCI7XG5pbXBvcnQgeyBBcHAsIENvbXBvbmVudCwgRXZlbnRSZWYsIEV2ZW50cywgTWV0YWRhdGFDYWNoZSwgVEFic3RyYWN0RmlsZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0QmxvY2ssIE1hcmtkb3duTGlzdEl0ZW0sIE1hcmtkb3duUGFnZSB9IGZyb20gXCIuL3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBHZW5lcmljRmlsZSB9IGZyb20gXCIuL3R5cGVzL2ZpbGVzXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRW1iZWRRdWV1ZSB9IGZyb20gXCIuL2VtYmVkLXF1ZXVlXCI7XG5pbXBvcnQgeyBKc29uTWFya2Rvd25QYWdlIH0gZnJvbSBcIi4vdHlwZXMvanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ2FudmFzLCBDYW52YXNUZXh0Q2FyZCB9IGZyb20gXCIuL3R5cGVzL2NhbnZhc1wiO1xuXG4vKiogQ2VudHJhbCBBUEkgb2JqZWN0OyBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBldmVudHMsIGRlYm91bmNpbmcsIGFuZCBhY2Nlc3MgdG8gZGF0YWNvcmUgZnVuY3Rpb25hbGl0eS4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIEFjY2VzcyB0byB0aGUgb2JzaWRpYW4gdmF1bHQuICovXG4gICAgdmF1bHQ6IFZhdWx0O1xuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyLShtYXJrZG93biktZmlsZSBtZXRhZGF0YS4gKi9cbiAgICBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlO1xuICAgIC8qKiBEYXRhY29yZSBldmVudHMsIG1haW5seSB1c2VkIHRvIHVwZGF0ZSBkb3duc3RyZWFtIHZpZXdzLiBUaGlzIG9iamVjdCBpcyBzaGFkb3dlZCBieSB0aGUgRGF0YWNvcmUgb2JqZWN0IGl0c2VsZi4gKi9cbiAgICBldmVudHM6IEV2ZW50cztcblxuICAgIC8qKiBJbi1tZW1vcnkgaW5kZXggb3ZlciBhbGwgc3RvcmVkIG1ldGFkYXRhLiAqL1xuICAgIGRhdGFzdG9yZTogRGF0YXN0b3JlO1xuICAgIC8qKiBBc3luY2hyb25vdXMgbXVsdGktdGhyZWFkZWQgZmlsZSBpbXBvcnRlciB3aXRoIHRocm90dGxpbmcuICovXG4gICAgaW1wb3J0ZXI6IEZpbGVJbXBvcnRlcjtcbiAgICAvKiogUXVldWUgb2YgYXN5bmNocm9ub3VzIHJlYWQgcmVxdWVzdHM7IGVuc3VyZXMgd2UgbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgZmlsZSBsb2Fkcy4gKi9cbiAgICByZWFkczogRW1iZWRRdWV1ZTtcbiAgICAvKiogTG9jYWwtc3RvcmFnZSBiYWNrZWQgY2FjaGUgb2YgbWV0YWRhdGEgb2JqZWN0cy4gKi9cbiAgICBwZXJzaXN0ZXI6IExvY2FsU3RvcmFnZUNhY2hlO1xuICAgIC8qKiBPbmx5IHNldCB3aGVuIGRhdGFjb3JlIGlzIGluIHRoZSBtaWRzdCBvZiBpbml0aWFsaXphdGlvbjsgdHJhY2tzIGN1cnJlbnQgcHJvZ3Jlc3MuICovXG4gICAgaW5pdGlhbGl6ZXI/OiBEYXRhY29yZUluaXRpYWxpemVyO1xuICAgIC8qKiBJZiB0cnVlLCBkYXRhY29yZSBpcyBmdWxseSBoeWRyYXRlZCBhbmQgYWxsIGZpbGVzIGhhdmUgYmVlbiBpbmRleGVkLiAqL1xuICAgIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGFwcDogQXBwLCBwdWJsaWMgdmVyc2lvbjogc3RyaW5nLCBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy52YXVsdCA9IGFwcC52YXVsdDtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGU7XG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbmV3IExvY2FsU3RvcmFnZUNhY2hlKFwicHJpbWFyeVwiLCB2ZXJzaW9uKTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5kYXRhc3RvcmUgPSBuZXcgRGF0YXN0b3JlKGFwcC52YXVsdCwgYXBwLm1ldGFkYXRhQ2FjaGUsIHNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgICAgICAodGhpcy5pbXBvcnRlciA9IG5ldyBGaWxlSW1wb3J0ZXIoYXBwLnZhdWx0LCBhcHAuZmlsZU1hbmFnZXIsIGFwcC5tZXRhZGF0YUNhY2hlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Vyczogc2V0dGluZ3MuaW1wb3J0ZXJOdW1UaHJlYWRzLFxuICAgICAgICAgICAgICAgICAgICB1dGlsaXphdGlvbjogTWF0aC5tYXgoMC4xLCBNYXRoLm1pbigxLjAsIHNldHRpbmdzLmltcG9ydGVyVXRpbGl6YXRpb24pKSxcbiAgICAgICAgICAgICAgICB9IGFzIEltcG9ydFRocm90dGxlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETyAoYmxhY2tzbWl0aGd1KTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIGVtYmVkIHF1ZXVlIGNvbmN1cnJlbmN5LlxuICAgICAgICB0aGlzLmFkZENoaWxkKCh0aGlzLnJlYWRzID0gbmV3IEVtYmVkUXVldWUoYXBwLnZhdWx0LCAoKSA9PiA4KSkpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGN1cnJlbnQgaW5kZXggcmV2aXNpb24sIGZvciBkZXRlcm1pbmluZyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZC4gKi9cbiAgICBnZXQgcmV2aXNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzdG9yZS5yZXZpc2lvbjtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbGl6ZSBkYXRhY29yZSBieSBzY2FubmluZyBwZXJzaXN0ZWQgY2FjaGVzIGFuZCBhbGwgYXZhaWxhYmxlIGZpbGVzLCBhbmQgcXVldWVpbmcgcGFyc2VzIGFzIG5lZWRlZC4gKi9cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICAvLyBNZXRhZGF0YSBjYWNoZSBoYW5kbGVzIG1hcmtkb3duIGZpbGUgdXBkYXRlcy5cbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMubWV0YWRhdGFDYWNoZS5vbihcInJlc29sdmVcIiwgKGZpbGUpID0+IHRoaXMucmVsb2FkKGZpbGUpKSk7XG5cbiAgICAgICAgLy8gUmVuYW1lcyBkbyBub3Qgc2V0IG9mZiB0aGUgbWV0YWRhdGEgY2FjaGU7IGNhdGNoIHRoZXNlIGV4cGxpY2l0bHkuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLnZhdWx0Lm9uKFwicmVuYW1lXCIsIHRoaXMucmVuYW1lLCB0aGlzKSk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGdlbmVyaWMgZmlsZSBjcmVhdGVzIGFuZCB1cGRhdGVzOyByZXNvbHZlIGdlbmVyYWxseSBvbmx5IGFwcGxpZXMgdG8gbWFya2Rvd24gZmlsZXNcbiAgICAgICAgLy8gYnV0IHdlIGRvIGtlZXAgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYWxsIGZpbGVzLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICAgICAgICB0aGlzLnZhdWx0Lm9uKFwiY3JlYXRlXCIsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlZCBieSB0aGUgbWV0YWRhdGEgY2FjaGUuXG4gICAgICAgICAgICAgICAgaWYgKElOREVYQUJMRV9FWFRFTlNJT05TLmhhcyhmaWxlLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoZmlsZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJtb2RpZnlcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVkIGJ5IHRoZSBtZXRhZGF0YSBjYWNoZS5cbiAgICAgICAgICAgICAgICBpZiAoSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZChmaWxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRmlsZSBjcmVhdGlvbiBkb2VzIGNhdXNlIGEgbWV0YWRhdGEgY2hhbmdlLCBidXQgZGVsZXRlcyBkbyBub3QuIENsZWFyIHRoZSBjYWNoZXMgZm9yIHRoaXMuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJkZWxldGVcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbmRleCgpO1xuICAgIH1cblxuICAgIC8qKiBTdGFydHMgdGhlIGJhY2tncm91bmQgaW5pdGlhbGl6ZXIuICovXG4gICAgaW5kZXgoKSB7XG4gICAgICAgIC8vIEFzeW5jaHJvbm91c2x5IGluaXRpYWxpemUgYWN0dWFsIGNvbnRlbnQgaW4gdGhlIGJhY2tncm91bmQgdXNpbmcgYSBsaWZlY3ljbGUtcmVzcGVjdGluZyBvYmplY3QuXG4gICAgICAgIGNvbnN0IGluaXQgPSAodGhpcy5pbml0aWFsaXplciA9IG5ldyBEYXRhY29yZUluaXRpYWxpemVyKHRoaXMpKTtcbiAgICAgICAgaW5pdC5maW5pc2hlZCgpLnRoZW4oKHN0YXRzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGluaXQpO1xuXG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvblNlY3MgPSAoc3RhdHMuZHVyYXRpb25NcyAvIDEwMDAuMCkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBEYXRhY29yZTogSW1wb3J0ZWQgYWxsIGZpbGVzIGluIHRoZSB2YXVsdCBpbiAke2R1cmF0aW9uU2Vjc31zIGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7c3RhdHMuaW1wb3J0ZWR9IGltcG9ydGVkLCAke3N0YXRzLmNhY2hlZH0gY2FjaGVkLCAke3N0YXRzLnNraXBwZWR9IHNraXBwZWQpLmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLnRvdWNoKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJ1cGRhdGVcIiwgdGhpcy5yZXZpc2lvbik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiKTtcblxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50cyB3aGljaCBubyBsb25nZXIgZXhpc3QgaW4gdGhlIHZhdWx0LlxuICAgICAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIG1heSByYWNlIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyBtYXkgbmVlZCB0byBoYXBwZW4gYXQgdGhlIHN0YXJ0IG9mIGluaXQgYW5kIG5vdCBhdCB0aGUgZW5kLlxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGVzID0gdGhpcy52YXVsdC5nZXRGaWxlcygpLm1hcCgoZmlsZSkgPT4gZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyXG4gICAgICAgICAgICAgICAgLnN5bmNocm9uaXplKGN1cnJlbnRGaWxlcylcbiAgICAgICAgICAgICAgICAudGhlbigoY2xlYXJlZCkgPT4gY29uc29sZS5sb2coYERhdGFjb3JlOiBkcm9wcGVkICR7Y2xlYXJlZC5zaXplfSBvdXQtb2YtZGF0ZSBmaWxlIG1ldGFkYXRhIGJsb2Nrcy5gKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoaW5pdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBhdCB0aGUgb2xkIHBhdGgsIHRoZW4gcmVxdWVzdCBhIHJlbG9hZCBhdCB0aGUgbmV3IHBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgbGVzcyBvcHRpbWFsIHRoYW4gd2hhdCBjYW4gcHJvYmFibHkgYmUgZG9uZSwgYnV0IHBhdGhzIGFyZSB1c2VkIGluIGEgYnVuY2ggb2YgcGxhY2VzXG4gICAgICAgIC8vIChmb3Igc2VjdGlvbnMsIHRhc2tzLCBldGMgdG8gcmVmZXIgdG8gdGhlaXIgcGFyZW50IGZpbGUpIGFuZCBpdCByZXF1aXJlcyBzb21lIGZpbmVzc2UgdG8gZml4LlxuICAgICAgICB0aGlzLmRhdGFzdG9yZS5kZWxldGUob2xkUGF0aCk7XG4gICAgICAgIHRoaXMucmVsb2FkKGZpbGUpO1xuXG4gICAgICAgIC8vIFRPRE86IEZvciBjb3JyZWN0bmVzcywgcHJvYmFibHkgaGF2ZSB0byBlaXRoZXIgZml4IGxpbmtzIGluIGFsbCBsaW5rZWQgZmlsZXMgT1JcbiAgICAgICAgLy8ganVzdCBzdG9wIG5vcm1hbGl6aW5nIGxpbmtzIGluIHRoZSBzdG9yZS5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgZmlsZSBmcm9tIHRoZSBPYnNpZGlhbiBjYWNoZSBlZmZpY2llbnRseSwgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHJlcXVlc3QgYW5kIGRlYm91bmNpbmdcbiAgICAgKiBtdWx0aXBsZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChmaWxlOiBURmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRzLnJlYWQoZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgZmlsZSBmb3IgcmVsb2FkaW5nOyB0aGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQgYW5kIG1heSB0YWtlIGEgZmV3IHNlY29uZHMuICovXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZChmaWxlOiBURmlsZSk6IFByb21pc2U8SW5kZXhhYmxlPiB7XG4gICAgICAgIC8vIEZpbHRlciBmaWxlcyBieSBmaWxlIGV4dGVuc2lvbnMuXG4gICAgICAgIGlmICghSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEdlbmVyaWNGaWxlKFxuICAgICAgICAgICAgICAgIGZpbGUucGF0aCxcbiAgICAgICAgICAgICAgICBEYXRlVGltZS5mcm9tTWlsbGlzKGZpbGUuc3RhdC5jdGltZSksXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhmaWxlLnN0YXQubXRpbWUpLFxuICAgICAgICAgICAgICAgIGZpbGUuc3RhdC5zaXplXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW1wb3J0ZXIuaW1wb3J0PEltcG9ydFJlc3VsdD4oZmlsZSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBmaWxlICcke2ZpbGUubmFtZX06ICR7cmVzdWx0LiRlcnJvcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgZmlsZSBhbmQgbm9ybWFsaXplIG1ldGFkYXRhIGZyb20gaXQuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBNYXJrZG93blBhZ2UuZnJvbShyZXN1bHQucmVzdWx0LCAobGluaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwYXRoID0gdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGxpbmsucGF0aCwgcmVzdWx0LnJlc3VsdC4kcGF0aCEpO1xuICAgICAgICAgICAgICAgIGlmIChycGF0aCkgcmV0dXJuIGxpbmsud2l0aFBhdGgocnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbGluaztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSBpdCByZWN1cnNpdmVseSBpbnRvIHRoZSBkYXRhc3RvcmUgZm9yIHF1ZXJ5aW5nLlxuICAgICAgICAgICAgdGhpcy5zdG9yZU1hcmtkb3duKHBhcnNlZCk7XG5cbiAgICAgICAgICAgIC8vIFdyaXRlIGl0IHRvIHRoZSBmaWxlIGNhY2hlIGZvciBmYXN0ZXIgbG9hZHMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyLnN0b3JlRmlsZShwYXJzZWQuJHBhdGgsIHBhcnNlZC5qc29uKCkpO1xuXG4gICAgICAgICAgICAvLyBBbmQgZmluYWxseSB0cmlnZ2VyIGFuIHVwZGF0ZS5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT09IFwiY2FudmFzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IENhbnZhcy5mcm9tKHJlc3VsdC5yZXN1bHQsIChsaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBhdGggPSB0aGlzLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCByZXN1bHQucmVzdWx0LiRwYXRoISk7XG4gICAgICAgICAgICAgICAgaWYgKHJwYXRoKSByZXR1cm4gbGluay53aXRoUGF0aChycGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBsaW5rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlQ2FudmFzKHBhcnNlZCk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3Rlci5zdG9yZUZpbGUocGFyc2VkLiRwYXRoLCBwYXJzZWQuanNvbigpKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvdW50ZXJlZCB1bnJlY29nbml6ZWQgaW1wb3J0IHJlc3VsdCB0eXBlOiBcIiArIChyZXN1bHQgYXMgYW55KS50eXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcmVDYW52YXMoZGF0YTogQ2FudmFzKSB7XG4gICAgICAgIHRoaXMuZGF0YXN0b3JlLnN0b3JlKGRhdGEsIChvYmplY3QsIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICBzdG9yZShvYmplY3QuJGNhcmRzLCAoY2FyZCwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FyZCBpbnN0YW5jZW9mIENhbnZhc1RleHRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlKGNhcmQuJHNlY3Rpb25zLCAoc2VjdGlvbiwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKHNlY3Rpb24uJGJsb2NrcywgKGJsb2NrLCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBzdG9yZSBmdW5jdGlvbiBmb3Igc3RvcmluZyBsaXN0IGhlaXJhcmNoaWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yZVJlYzogU3Vic3RvcmVyPE1hcmtkb3duTGlzdEl0ZW0+ID0gKGl0ZW0sIHN0b3JlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUoaXRlbS4kZWxlbWVudHMsIHN0b3JlUmVjKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZShibG9jay4kZWxlbWVudHMsIHN0b3JlUmVjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZSBhIG1hcmtkb3duIGRvY3VtZW50LiAqL1xuICAgIHB1YmxpYyBzdG9yZU1hcmtkb3duKGRhdGE6IE1hcmtkb3duUGFnZSkge1xuICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShkYXRhLCAob2JqZWN0LCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmUob2JqZWN0LiRzZWN0aW9ucywgKHNlY3Rpb24sIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUoc2VjdGlvbi4kYmxvY2tzLCAoYmxvY2ssIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmUgc3RvcmUgZnVuY3Rpb24gZm9yIHN0b3JpbmcgbGlzdCBoZWlyYXJjaGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlUmVjOiBTdWJzdG9yZXI8TWFya2Rvd25MaXN0SXRlbT4gPSAoaXRlbSwgc3RvcmUpID0+IHN0b3JlKGl0ZW0uJGVsZW1lbnRzLCBzdG9yZVJlYyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKGJsb2NrLiRlbGVtZW50cywgc3RvcmVSZWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXZlbnQgcHJvcG9nYXRpb24uXG5cbiAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZSBpbmRleCB1cGRhdGVzIHRvIGEgbmV3IHJldmlzaW9uLiBUaGlzIGlzIHRoZSBicm9hZGVzdCBwb3NzaWJsZSBkYXRhY29yZSBldmVudC4gKi9cbiAgICBwdWJsaWMgb24oZXZ0OiBcInVwZGF0ZVwiLCBjYWxsYmFjazogKHJldmlzaW9uOiBudW1iZXIpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuICAgIHB1YmxpYyBvbihldnQ6IFwiaW5pdGlhbGl6ZWRcIiwgY2FsbGJhY2s6ICgpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuXG4gICAgb24oZXZ0OiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uZGF0YTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBFdmVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5vbihldnQsIGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCB1c2luZyB0aGUgZXZlbnQgYW5kIG9yaWdpbmFsIGNhbGxiYWNrLiAqL1xuICAgIG9mZihldnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5kYXRhOiBhbnkpID0+IGFueSkge1xuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoZXZ0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqIFVuc3Vic2NyaWJlIGZyb20gYW4gZXZlbnQgdXNpbmcgdGhlIGV2ZW50IHJlZmVyZW5jZS4gICovXG4gICAgb2ZmcmVmKHJlZjogRXZlbnRSZWYpIHtcbiAgICAgICAgdGhpcy5ldmVudHMub2ZmcmVmKHJlZik7XG4gICAgfVxuXG4gICAgLyoqIFRyaWdnZXIgYW4gdXBkYXRlIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwidXBkYXRlXCIsIHJldmlzaW9uOiBudW1iZXIpOiB2b2lkO1xuICAgIC8qKiBUcmlnZ2VyIGFuIGluaXRpYWxpemF0aW9uIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwiaW5pdGlhbGl6ZWRcIik6IHZvaWQ7XG5cbiAgICAvKiogVHJpZ2dlciBhbiBldmVudC4gKi9cbiAgICBwcml2YXRlIHRyaWdnZXIoZXZ0OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoZXZ0LCAuLi5hcmdzKTtcbiAgICB9XG59XG5cbi8qKiBMaWZlY3ljbGUtcmVzcGVjdGluZyBmaWxlIHF1ZXVlIHdoaWNoIHdpbGwgaW1wb3J0IGZpbGVzLCByZWFkaW5nIHRoZW0gZnJvbSB0aGUgZmlsZSBjYWNoZSBpZiBuZWVkZWQuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVJbml0aWFsaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIE51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgdGhlIGluaXRpYWxpemVyIHdpbGwgcGVyZm9ybS4gKi9cbiAgICBzdGF0aWMgQkFUQ0hfU0laRTogbnVtYmVyID0gODtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbml0aWFsaXplciBzaG91bGQgY29udGludWUgdG8gcnVuLiAqL1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8qKiBRdWV1ZSBvZiBmaWxlcyB0byBzdGlsbCBpbXBvcnQuICovXG4gICAgcXVldWU6IFRGaWxlW107XG4gICAgLyoqIFRoZSBmaWxlcyBhY3RpdmVseSBiZWluZyBpbXBvcnRlZC4gKi9cbiAgICBjdXJyZW50OiBURmlsZVtdO1xuICAgIC8qKiBEZWZlcnJlZCBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gaW1wb3J0aW5nIGlzIGRvbmUuICovXG4gICAgZG9uZTogRGVmZXJyZWQ8SW5pdGlhbGl6YXRpb25TdGF0cz47XG5cbiAgICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiB0YXJnZXQgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIHRhcmdldFRvdGFsOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0aW1lIHRoYXQgaW5pdCBzdGFydGVkIGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgICBzdGFydDogbnVtYmVyO1xuICAgIC8qKiBUb3RhbCBudW1iZXIgb2YgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBpbXBvcnRlZCBmaWxlcyBzbyBmYXIuICovXG4gICAgaW5pdGlhbGl6ZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGltcG9ydGVkIGZpbGVzLiAqL1xuICAgIGltcG9ydGVkOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBza2lwcGVkIGZpbGVzLiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGNhY2hlZCBmaWxlcy4gKi9cbiAgICBjYWNoZWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjb3JlOiBEYXRhY29yZSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLmNvcmUudmF1bHQuZ2V0RmlsZXMoKTtcbiAgICAgICAgdGhpcy50YXJnZXRUb3RhbCA9IHRoaXMucXVldWUubGVuZ3RoO1xuICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5xdWV1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kb25lID0gZGVmZXJyZWQoKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdGhpcy5pbXBvcnRlZCA9IHRoaXMuc2tpcHBlZCA9IHRoaXMuY2FjaGVkID0gMDtcbiAgICB9XG5cbiAgICBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIC8vIFF1ZXVlIEJBVENIX1NJWkUgZWxlbWVudHMgZnJvbSB0aGUgcXVldWUgdG8gaW1wb3J0LlxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5ydW5OZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzLiAqL1xuICAgIGZpbmlzaGVkKCk6IFByb21pc2U8SW5pdGlhbGl6YXRpb25TdGF0cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb25lO1xuICAgIH1cblxuICAgIC8qKiBDYW5jZWwgaW5pdGlhbGl6YXRpb24uICovXG4gICAgb251bmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZWplY3QoXCJJbml0aWFsaXphdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBjb21wbGV0aW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQb2xsIGZvciBhbm90aGVyIHRhc2sgdG8gZXhlY3V0ZSBmcm9tIHRoZSBxdWV1ZS4gKi9cbiAgICBwcml2YXRlIHJ1bk5leHQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgbWF4IG51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgYWxyZWFkeSBydW5uaW5nLlxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlIHx8IHRoaXMuY3VycmVudC5sZW5ndGggPj0gRGF0YWNvcmVJbml0aWFsaXplci5CQVRDSF9TSVpFKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgdG8gZXhlY3V0ZSBhbm90aGVyLlxuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5xdWV1ZS5wb3AoKTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5wdXNoKG5leHQpO1xuICAgICAgICAgICAgdGhpcy5pbml0KG5leHQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSk7XG5cbiAgICAgICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFuZXh0ICYmIHRoaXMuY3VycmVudC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gQWxsIHdvcmsgaXMgZG9uZSwgcmVzb2x2ZS5cbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydCxcbiAgICAgICAgICAgICAgICBmaWxlczogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgICBpbXBvcnRlZDogdGhpcy5pbXBvcnRlZCxcbiAgICAgICAgICAgICAgICBza2lwcGVkOiB0aGlzLnNraXBwZWQsXG4gICAgICAgICAgICAgICAgY2FjaGVkOiB0aGlzLmNhY2hlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFByb2Nlc3MgdGhlIHJlc3VsdCBvZiBhbiBpbml0aWFsaXphdGlvbiBhbmQgcXVldWUgbW9yZSBydW5zLiAqL1xuICAgIHByaXZhdGUgaGFuZGxlUmVzdWx0KGZpbGU6IFRGaWxlLCByZXN1bHQ6IEluaXRpYWxpemF0aW9uUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5yZW1vdmUoZmlsZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQrKztcblxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJza2lwcGVkXCIpIHRoaXMuc2tpcHBlZCsrO1xuICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImltcG9ydGVkXCIpIHRoaXMuaW1wb3J0ZWQrKztcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJjYWNoZWRcIikgdGhpcy5jYWNoZWQrKztcblxuICAgICAgICAvLyBRdWV1ZSBtb3JlIGpvYnMgZm9yIHByb2Nlc3NpbmcuXG4gICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwcml2YXRlIGFzeW5jIGluaXQoZmlsZTogVEZpbGUpOiBQcm9taXNlPEluaXRpYWxpemF0aW9uUmVzdWx0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbG9hZGluZyBtYXJrZG93biBmaWxlcyBmcm9tIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgdGhpcy5jb3JlLnBlcnNpc3Rlci5sb2FkRmlsZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQudGltZSA+PSBmaWxlLnN0YXQubXRpbWUgJiYgY2FjaGVkLnZlcnNpb24gPT0gdGhpcy5jb3JlLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5leHRlbnNpb24gPT09IFwibWRcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gTWFya2Rvd25QYWdlLmZyb20oY2FjaGVkLmRhdGEgYXMgSnNvbk1hcmtkb3duUGFnZSwgKGxpbmspID0+IGxpbmspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcmUuc3RvcmVNYXJrZG93bihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImNhY2hlZFwiIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEb2VzIG5vdCBtYXRjaCBhbiBleGlzdGluZyBpbXBvcnQgdHlwZSwganVzdCByZWxvYWQgbm9ybWFsbHkuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcmUucmVsb2FkKGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImltcG9ydGVkXCIgfTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEZhaWxlZCB0byBpbXBvcnQgZmlsZTogXCIsIGV4KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogXCJza2lwcGVkXCIgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFN0YXRpc3RpY3MgYWJvdXQgYSBzdWNjZXNzZnVsIHZhdWx0IGluaXRpYWxpemF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXphdGlvblN0YXRzIHtcbiAgICAvKiogSG93IGxvbmcgaW5pdGlhbGl6YXRvbiB0b29rIGluIG1pbGlzZWNvbmRzLiAqL1xuICAgIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBpbXBvcnRlZCAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCB3ZXJlIGxvYWRlZCBhbmQgaW1wb3J0ZWQgdmlhIGJhY2tncm91bmQgd29ya2Vycy4gKi9cbiAgICBpbXBvcnRlZDogbnVtYmVyO1xuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBza2lwcGVkIGR1ZSB0byBubyBsb25nZXIgZXhpc3Rpbmcgb3Igbm90IGJlaW5nIHJlYWR5LiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIG51bWJlciBvZiBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgSW5kZXhlZERCIGNhY2hlLiAqL1xuICAgIGNhY2hlZDogbnVtYmVyO1xufVxuXG4vKiogVGhlIHJlc3VsdCBvZiBpbml0aWFsaXppbmcgYSBmaWxlLiAqL1xuaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uUmVzdWx0IHtcbiAgICBzdGF0dXM6IFwic2tpcHBlZFwiIHwgXCJpbXBvcnRlZFwiIHwgXCJjYWNoZWRcIjtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBGaWxlLCBJbmRleGFibGUsIExJTktBQkxFX1RZUEUsIExpbmthYmxlIH0gZnJvbSBcIi4vaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRXh0cmFjdG9ycywgRklFTERCRUFSSU5HX1RZUEUsIEZpZWxkRXh0cmFjdG9yLCBGaWVsZGJlYXJpbmcgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLyoqIERhdGFjb3JlIHJlcHJlc2VudGF0aW9uIG9mIGEgZ2VuZXJpYyBmaWxlIHdpdGggbm8gYWRkaXRpb25hbCBwYXJzaW5nLiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNGaWxlIGltcGxlbWVudHMgRmlsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcsIExpbmthYmxlIHtcbiAgICBzdGF0aWMgVFlQRVM6IHN0cmluZ1tdID0gW0ZJTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEUsIExJTktBQkxFX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IEdlbmVyaWNGaWxlLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlXCI7XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlcjtcbiAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICAkZXh0ZW5zaW9uOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBjdGltZTogRGF0ZVRpbWUsIG10aW1lOiBEYXRlVGltZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuJHBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLiRjdGltZSA9IGN0aW1lO1xuICAgICAgICB0aGlzLiRtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiRzaXplID0gc2l6ZTtcblxuICAgICAgICBjb25zdCBsYXN0RG90ID0gcGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIHRoaXMuJGV4dGVuc2lvbiA9IGxhc3REb3QgPCAwID8gXCJcIiA6IHBhdGguc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcbiAgICB9XG5cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogVW5pcXVlIElEIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgJGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZmlsZSBmb3IgdGhlIGZpbGUgaXMgdGhlIGZpbGUuICovXG4gICAgZ2V0ICRmaWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBBIGxpbmsgdG8gdGhlIGZpbGUuICovXG4gICAgZ2V0ICRsaW5rKCk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8R2VuZXJpY0ZpbGU+ID0gRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCk7XG59XG4iLCAiaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiQGRhdGFzdHJ1Y3R1cmVzLWpzL3F1ZXVlXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBURmlsZSwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERlZmVycmVkLCBkZWZlcnJlZCB9IGZyb20gXCJ1dGlscy9kZWZlcnJlZFwiO1xuXG4vKiogUXVldWVzIHVwIGxvYWRzIG9mIGZpbGVzIHRvIHJlZHVjZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBsb2Fkcy4gKi9cbmV4cG9ydCBjbGFzcyBFbWJlZFF1ZXVlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAvKiogU2V0IG9mIHBlbmRpbmcgbG9hZHMuICovXG4gICAgcHJpdmF0ZSBxdWV1ZTogUXVldWU8VEZpbGU+ID0gbmV3IFF1ZXVlKCk7XG4gICAgLyoqIFNldCBvZiBwcm9taXNlcyB3YWl0aW5nIG9uIGVhY2ggcGF0aC4gKi9cbiAgICBwcml2YXRlIHByb21pc2VzOiBNYXA8c3RyaW5nLCBEZWZlcnJlZDxzdHJpbmc+W10+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBBY3RpdmUgc2V0IG9mIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgYWN0aXZlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBJZiB0cnVlLCBwcmV2ZW50IGFueSBmdXJ0aGVyIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgc2h1dGRvd246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0LCBwdWJsaWMgY29uY3VycmVuY3k6ICgpID0+IG51bWJlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIGEgZmlsZSBhc3luY2hyb25vdXNseSwgY29udHJvbGxpbmcgY29uY3VycmVuY3kgdG8gcHJldmVudCB0b28gbWFueSBmaWxlcyBiZWluZyBsb2FkZWQgc2ltdWx0YW5lb3VzbHkuICovXG4gICAgcHVibGljIGFzeW5jIHJlYWQoZmlsZTogVEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5zaHV0ZG93bikgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiRW1iZWQgcXVldWUgaXMgc2h1dGRvd24uXCIpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJlZDxzdHJpbmc+KCk7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IGFscmVhZHkgaW4gdGhlIHF1ZXVlLCBhZGQgb3Vyc2VsdmVzIHRvIHF1ZXVlLiBPdGhlcndpc2UganVzdCBhcHBlbmQgb3V0c2VsZnMgdG8gdGhlIGludGVyZXN0ZWQgd2F0Y2hlciBmb3IgdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoIXRoaXMucHJvbWlzZXMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWUucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuc2V0KGZpbGUucGF0aCwgW3Byb21pc2VdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkhLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKiBTY2hlZHVsZSBtb3JlIGxvYWRzIGZyb20gdGhlIHF1ZXVlIGludG8gdGhlIGFjdGl2ZSBzZXQgaWYgdGhlcmUgaXMgYXZhaWxhYmxlIHNwYWNlLiAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGUoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZS5zaXplIDwgdGhpcy5jb25jdXJyZW5jeSgpICYmIHRoaXMucXVldWUuc2l6ZSgpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMucXVldWUucG9wKCkhO1xuXG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KGZpbGUucGF0aCwgcmVhZCk7XG5cbiAgICAgICAgICAgIHJlYWQudGhlbigoY29udGVudCkgPT4gdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LnN1Y2Nlc3MoY29udGVudCkpKS5jYXRjaCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LmZhaWx1cmUoZXJyb3IpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb21tdW5pY2F0ZSB0aGUgcmVzdWx0IG9mIGEgbG9hZGVkIGZpbGUgYW5kIHRoZW4gc2NoZWR1bGUgbW9yZSBmaWxlcyB0byBiZSBsb2FkZWQuICovXG4gICAgcHJpdmF0ZSBmaW5pc2goZmlsZTogVEZpbGUsIHJlc3VsdDogUmVzdWx0PHN0cmluZywgYW55Pikge1xuICAgICAgICB0aGlzLmFjdGl2ZS5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkgPz8gW107XG4gICAgICAgIHRoaXMucHJvbWlzZXMuZGVsZXRlKGZpbGUucGF0aCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlc29sdmUocmVzdWx0LnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChyZXN1bHQuZXJyb3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VsbCBhbGwgb3V0c3RhbmRpbmcgbG9hZHMgb24gdW5sb2FkLiAqL1xuICAgIHB1YmxpYyBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBsb2Fkcy5cbiAgICAgICAgZm9yIChjb25zdCBwcm9taXNlcyBvZiB0aGlzLnByb21pc2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChcIkVtYmVkIHF1ZXVlIGlzIHNodXR0aW5nIGRvd24uXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBFeHRyYWN0b3JzLCBGaWVsZCwgRmllbGRiZWFyaW5nLCBGSUVMREJFQVJJTkdfVFlQRSwgRmllbGRFeHRyYWN0b3IgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBJbmRleGFibGUsIExpbmthYmxlLCBMSU5LQUJMRV9UWVBFLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIFRBR0dBQkxFX1RZUEUgfSBmcm9tIFwiLi9pbmRleGFibGVcIjtcbmltcG9ydCB7XG4gICAgQ2FyZERpbWVuc2lvbnMsXG4gICAgQ2FyZFBvcyxcbiAgICBKc29uQmFzZUNhbnZhc0NhcmQsXG4gICAgSnNvbkNhbnZhcyxcbiAgICBKc29uQ2FudmFzQ2FyZCxcbiAgICBKc29uQ2FudmFzRmlsZUNhcmQsXG4gICAgSnNvbkNhbnZhc1RleHRDYXJkLFxuICAgIEpzb25DYW52YXNXZWJDYXJkLFxufSBmcm9tIFwiLi9qc29uL2NhbnZhc1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQge1xuICAgIEZyb250bWF0dGVyRW50cnksXG4gICAgTGlua05vcm1hbGl6ZXIsXG4gICAgTWFya2Rvd25TZWN0aW9uLFxuICAgIE5PT1BfTk9STUFMSVpFUixcbiAgICBub3JtYWxpemVMaW5rcyxcbiAgICB2YWx1ZUZyb250bWF0dGVyRW50cnksXG59IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgeyBJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIEEgY2FudmFzIGZpbGUsIGNvbnNpc3Rpbmcgb2YgYSBzZXQgb2YgY2FudmFzIGNhcmRzLiAqL1xuZXhwb3J0IGNsYXNzIENhbnZhcyBpbXBsZW1lbnRzIExpbmthYmxlLCBGaWxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbRklMRV9UWVBFLCBcImNhbnZhc1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gQ2FudmFzLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJDYW52YXNcIjtcblxuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgJG10aW1lOiBEYXRlVGltZTtcblxuICAgICRleHRlbnNpb246IHN0cmluZyA9IFwiY2FudmFzXCI7XG5cbiAgICBnZXQgJGZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRwYXRoKTtcbiAgICB9XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgICRjYXJkczogQmFzZUNhbnZhc0NhcmRbXSA9IFtdO1xuICAgICRzaXplOiBudW1iZXIgPSAwO1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAkbGlua3M6IExpbmtbXTtcbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXM+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIENhbnZhcy5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF07XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkY2FyZHM6IHRoaXMuJGNhcmRzLm1hcCgoeCkgPT4geC5qc29uKCkpIGFzIEpzb25DYW52YXNDYXJkW10sXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuJGN0aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuJG10aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy4kc2l6ZSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MsXG4gICAgICAgICAgICAkcGF0aDogdGhpcy4kcGF0aCxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXMsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSKTogQ2FudmFzIHtcbiAgICAgICAgY29uc3QgY2FyZHMgPSByYXcuJGNhcmRzXG4gICAgICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzLiR0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0LWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5mcm9tKHMsIHJhdy4kcGF0aCwgbm9ybWFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmaWxlLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNGaWxlQ2FyZC5mcm9tKHMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwid2ViLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNXZWJDYXJkLmZyb20ocywgcmF3LiRwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCk6IHggaXMgQ2FudmFzVGV4dENhcmQgPT4gISF4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXMoe1xuICAgICAgICAgICAgJGNhcmRzOiBjYXJkcyxcbiAgICAgICAgICAgICRjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJGN0aW1lKSxcbiAgICAgICAgICAgICRtdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJG10aW1lKSxcbiAgICAgICAgICAgICRzaXplOiByYXcuJHNpemUsXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiBcImNhbnZhc1wiLFxuICAgICAgICAgICAgJHBhdGg6IHJhdy4kcGF0aCxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkaW5maWVsZHM6IHJhdy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxDYW52YXM+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbmxpbmVGaWVsZHMoKGYpID0+IGYuJGluZmllbGRzKSxcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKClcbiAgICApO1xufVxuXG4vKiogQWxsIHN1cHBvcnRlZCBjYW52YXMgY2FyZCB0eXBlcy4gKi9cbmV4cG9ydCB0eXBlIENhbnZhc0NhcmQgPSBDYW52YXNUZXh0Q2FyZCB8IENhbnZhc0ZpbGVDYXJkIHwgQ2FudmFzV2ViQ2FyZDtcblxuLyoqIFNoYXJlZCBtZXRhZGF0YSBmb3IgYWxsIGNhbnZhcyBjYXJkcy4gKi9cbmFic3RyYWN0IGNsYXNzIEJhc2VDYW52YXNDYXJkIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYWJsZSB7XG4gICAgYWJzdHJhY3QgJHR5cGVzOiBzdHJpbmdbXTtcbiAgICBhYnN0cmFjdCAkdHlwZW5hbWU6IHN0cmluZztcbiAgICBhYnN0cmFjdCByZWFkb25seSAkdHlwZTogc3RyaW5nO1xuXG4gICAgJHJldmlzaW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRwb3NpdGlvbjogQ2FyZFBvcztcbiAgICAkZGltZW5zaW9uczogQ2FyZERpbWVuc2lvbnM7XG4gICAgJHBhcmVudD86IEluZGV4YWJsZTtcbiAgICAkZmlsZTogc3RyaW5nO1xuICAgICRjb2xvcj86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPEJhc2VDYW52YXNDYXJkPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRmaWxlKS53aXRoQmxvY2sodGhpcy4kaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25CYXNlQ2FudmFzQ2FyZCB7XG4gICAgICAgIGNvbnN0IHsgJGlkLCAkcG9zaXRpb24sICRjb2xvciwgJGRpbWVuc2lvbnMsICRmaWxlLCAkbGluayB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbixcbiAgICAgICAgICAgICRjb2xvcixcbiAgICAgICAgICAgICRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJGZpbGUsXG4gICAgICAgICAgICAkbGluazogJGxpbmsudG9PYmplY3QoKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKiBDYW52YXMgY2FyZCB3aXRoIG1hcmtkb3duIHRleHQgaW4gaXQuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzVGV4dENhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtdGV4dC1jYXJkXCIsIFRBR0dBQkxFX1RZUEUsIExJTktBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBDYW52YXNUZXh0Q2FyZC5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiVGV4dCBDYXJkXCI7XG4gICAgJHR5cGU6IHN0cmluZyA9IFwiY2FudmFzLWNhcmRcIjtcbiAgICAkaWQ6IHN0cmluZztcblxuICAgICRmaWxlOiBzdHJpbmc7XG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgICR0aXRsZTogc3RyaW5nO1xuICAgICRwYXJlbnQ/OiBJbmRleGFibGU7XG4gICAgJHJldmlzaW9uPzogbnVtYmVyO1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgICRmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuXG4gICAgJGRpbWVuc2lvbnM6IENhcmREaW1lbnNpb25zO1xuICAgICRzZWN0aW9uczogTWFya2Rvd25TZWN0aW9uW107XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzVGV4dENhcmQ+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIGdldCBmaWVsZHMoKTogRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzVGV4dENhcmQuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uQ2FudmFzVGV4dENhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkdHlwZTogXCJ0ZXh0LWNhcmRcIixcbiAgICAgICAgICAgICRzZWN0aW9uczogdGhpcy4kc2VjdGlvbnMubWFwKChhKSA9PiBhLmpzb24oKSksXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNUZXh0Q2FyZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXNUZXh0Q2FyZCwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUikge1xuICAgICAgICBsZXQgJHNlY3Rpb25zID0gcmF3LiRzZWN0aW9ucy5tYXAoKHMpID0+IE1hcmtkb3duU2VjdGlvbi5mcm9tKHMsIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXNUZXh0Q2FyZCh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRzZWN0aW9ucyxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkZGltZW5zaW9uczogcmF3LiRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiByYXcuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiByYXcuJGZyb250bWF0dGVyXG4gICAgICAgICAgICAgICAgPyBtYXBPYmplY3RWYWx1ZXMocmF3LiRmcm9udG1hdHRlciwgKGZtKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUZyb250bWF0dGVyRW50cnkoZm0pLCBub3JtYWxpemVyKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbmZpZWxkczogcmF3LiRpbmZpZWxkcyxcbiAgICAgICAgICAgICR0YWdzOiByYXcuJHRhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPENhbnZhc1RleHRDYXJkPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpLFxuICAgICAgICBFeHRyYWN0b3JzLmZyb250bWF0dGVyKChmKSA9PiBmLiRmcm9udG1hdHRlcilcbiAgICApO1xufVxuXG4vKiogQ2FudmFzIGNhcmQgdGhhdCBpcyBqdXN0IGEgZmlsZSBlbWJlZGRpbmcuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzRmlsZUNhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIEluZGV4YWJsZSB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wiY2FudmFzLWNhcmRcIiwgXCJtYXJrZG93blwiLCBcImNhbnZhcy1maWxlLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlIENhcmRcIjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXNGaWxlQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgJHR5cGU6IHN0cmluZyA9IFwiZmlsZS1jYXJkXCI7XG4gICAgJGxpbmtlZEZpbGU6IHN0cmluZztcblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25DYW52YXNGaWxlQ2FyZCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmpzb24oKSwge1xuICAgICAgICAgICAgJGxpbmtlZEZpbGU6IHRoaXMuJGxpbmtlZEZpbGUsXG4gICAgICAgICAgICAkdHlwZTogXCJmaWxlLWNhcmRcIixcbiAgICAgICAgfSkgYXMgSnNvbkNhbnZhc0ZpbGVDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc0ZpbGVDYXJkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FudmFzRmlsZUNhcmQoe1xuICAgICAgICAgICAgJGZpbGU6IHJhdy4kZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRkaW1lbnNpb25zOiByYXcuJGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAkbGlua2VkRmlsZTogcmF3LiRsaW5rZWRGaWxlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNXZWJDYXJkIGV4dGVuZHMgQmFzZUNhbnZhc0NhcmQgaW1wbGVtZW50cyBJbmRleGFibGUge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtd2ViLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgIHJlYWRvbmx5ICR0eXBlOiBzdHJpbmcgPSBcIndlYi1jYXJkXCI7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIldlYiBDYXJkXCI7XG5cbiAgICAkdXJsOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzV2ViQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhc1dlYkNhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICR1cmw6IHRoaXMuJHVybCxcbiAgICAgICAgICAgICR0eXBlOiBcIndlYi1jYXJkXCIsXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNXZWJDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc1dlYkNhcmQsIGZpbGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IENhbnZhc1dlYkNhcmQoe1xuICAgICAgICAgICAgJGRpbWVuc2lvbnM6IHJhdy4kZGltZW5zaW9ucyxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiByYXcuJGlkLFxuICAgICAgICAgICAgJHVybDogcmF3LiR1cmwsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICIvKiogQWxsIGRhdGFjb3JlIHNldHRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGUgaW1wb3J0ZXIgd2lsbCB1c2UgZm9yIGltcG9ydGluZy4gKi9cbiAgICBpbXBvcnRlck51bVRocmVhZHM6IG51bWJlcjtcbiAgICAvKiogVGhlIENQVSB1dGlsaXphdGlvbiAoYmV0d2VlbiAwLjEgYW5kIDEuMCkgdGhhdCBpbXBvcnRlciB0aHJlYWRzIHNob3VsZCB1c2UuICovXG4gICAgaW1wb3J0ZXJVdGlsaXphdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEFyZSBKUyB2aWV3cyBlbmFibGVkPyAqL1xuICAgIGVuYWJsZUpzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2aWV3cyBhcmUgcGFnZWQgYnkgZGVmYXVsdC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgICAqIHNpbmNlIHNob3dpbmcgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIHJlc3VsdHMgY2FuIGJlIGZhaXJseSBzbG93IVxuICAgICAqL1xuICAgIGRlZmF1bHRQYWdpbmdFbmFibGVkOiBib29sZWFuO1xuICAgIC8qKiBEZWZhdWx0IHBhZ2luZyBzaXplIGZvciBhbGwgdmlld3MgKG51bWJlciBvZiBlbnRyaWVzIHBlciBwYWdlLikgKi9cbiAgICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcbiAgICAvKiogSWYgc2V0LCB2aWV3cyB3aWxsIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSB2aWV3IG9uIHBhZ2UgY2hhbmdlcy4gKi9cbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGRlcHRoIHRoYXQgb2JqZWN0cyB3aWxsIGJlIHJlbmRlcmVkIHRvIChpLmUuLCBob3cgbWFueSBsZXZlbHMgb2Ygc3VicHJvcGVydGllc1xuICAgICAqIHdpbGwgYmUgcmVuZGVyZWQgYnkgZGVmYXVsdCkuIFRoaXMgYXZvaWRzIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gc2VsZiByZWZlcmVudGlhbCBvYmplY3RzXG4gICAgICogYW5kIGFsc28gZW5zdXJlcyB0aGF0IHJlbmRlcmluZyBvYmplY3RzIGlzIGFjY2VwdGFibHkgcGVyZm9ybWFudC5cbiAgICAgKi9cbiAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBkZWZhdWx0IGZvcm1hdCB0aGF0IGRhdGVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b24ncyBtb21lbnQtbGlrZSBmb3JtYXR0aW5nKS4gKi9cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlLXRpbWVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b25zIG1vbWVudC1saWtlIGZvcm1hdHRpbmcpLiAqL1xuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBNYXJrZG93biB0ZXh0IGZvciBob3cgdG8gcmVuZGVyIG51bGwgdmFsdWVzIGluIHRhYmxlcyBvciBzaW1pbGFyLiAqL1xuICAgIHJlbmRlck51bGxBczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW5kZXggaW5saW5lIGZpZWxkcyBieSBkZWZhdWx0LiBJbmxpbmUgZmllbGQgcGFyc2luZyByZXF1aXJlcyBhIGZ1bGwgc2NhbiBvZiB0aGUgZG9jdW1lbnQsIHdoaWNoIGNhbiBtYWtlIGluZGV4aW5nIHRha2UgMi0zeCBsb25nZXIuICovXG4gICAgaW5kZXhJbmxpbmVGaWVsZHM6IGJvb2xlYW47XG5cbiAgICAvKiogV2hldGhlciB0byBpbmRleCBsaXN0IGFuZCB0YXNrIGl0ZW0gdGV4dCBhbmQgc3RhdGVzLiBJbmRleGluZyBsaXN0cyAmIHRhc2tzIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCByZWdleCBwYXJzaW5nIHdoaWNoIG1ha2VzIGluZGV4aW5nIG1vZGVzdGx5IHNsb3dlci4gKi9cbiAgICBpbmRleExpc3RJdGVtczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGNoZWNrIHRhc2sgaXRlbXMgb2ZmIHJlY3Vyc2l2ZWx5IGluIGRhdGFjb3JlIHZpZXdzICovXG4gICAgcmVjdXJzaXZlVGFza0NvbXBsZXRpb246IGJvb2xlYW47XG5cbiAgICAvKiogTmFtZSBvZiB0aGUgaW5saW5lIGZpZWxkIGluIHdoaWNoIHRvIHN0b3JlIGNvbXBsZXRpb24gZGF0ZS90aW1lICovXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogSWYgZW5hYmxlZCwgYXV0b21hdGljIGNvbXBsZXRpb25zIHdpbGwgdXNlIGVtb2ppIHNob3J0aGFuZCBcdTI3MDUgWVlZWS1NTS1ERCBpbnN0ZWFkIG9mIFtjb21wbGV0aW9uOjogZGF0ZV0uICovXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogYm9vbGVhbjtcbn1cblxuLyoqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogUmVhZG9ubHk8U2V0dGluZ3M+ID0gT2JqZWN0LmZyZWV6ZTxTZXR0aW5ncz4oe1xuICAgIGltcG9ydGVyTnVtVGhyZWFkczogMixcbiAgICBpbXBvcnRlclV0aWxpemF0aW9uOiAwLjc1LFxuXG4gICAgZW5hYmxlSnM6IGZhbHNlLFxuXG4gICAgZGVmYXVsdFBhZ2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgZGVmYXVsdFBhZ2VTaXplOiA1MCxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGZhbHNlLFxuXG4gICAgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IDUsXG5cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcblxuICAgIHJlbmRlck51bGxBczogXCItXCIsXG5cbiAgICBpbmRleElubGluZUZpZWxkczogdHJ1ZSxcbiAgICBpbmRleExpc3RJdGVtczogdHJ1ZSxcbiAgICByZWN1cnNpdmVUYXNrQ29tcGxldGlvbjogZmFsc2UsXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBcImNvbXBsZXRlZEF0XCIsXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogZmFsc2UsXG59KTtcbiIsICJpbXBvcnQgeyBkZWJvdW5jZSwgSXRlbVZpZXcsIE1hcmtkb3duUmVuZGVyQ2hpbGQsIE1lbnUsIFZpZXdTdGF0ZVJlc3VsdCwgV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UgfSBmcm9tIFwidXRpbHMvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVKU1JlbmRlcmVyLCBSZWFjdFJlbmRlcmVyIH0gZnJvbSBcIi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBEYXRhY29yZUFwaSB9IGZyb20gXCJhcGkvYXBpXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXAsIFN0YWNrIH0gZnJvbSBcImFwaS91aS9sYXlvdXRcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFRleHRib3gsIFZhbmlsbGFTZWxlY3QgfSBmcm9tIFwiYXBpL3VpL2Jhc2ljc1wiO1xuaW1wb3J0IHsgdXNlSW5kZXhVcGRhdGVzIH0gZnJvbSBcIi4vaG9va3NcIjtcbmltcG9ydCB7IERBVEFDT1JFX0NPTlRFWFQsIEVycm9yTWVzc2FnZSB9IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcblxuLyoqIEtleSBmb3IgZGF0YWNvcmUgSlMgcXVlcnkgdmlld3MuICovXG5leHBvcnQgY29uc3QgVklFV19UWVBFX0RBVEFDT1JFSlMgPSBcImRhdGFjb3JlanMtdmlld1wiO1xuXG4vKiogU3RvcmVzIHRoZSBjdXJyZW50IE9ic2lkaWFuIHZpZXcgb2JqZWN0LCBzbyBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgZnJvbSByZWFjdC4gKi9cbmNvbnN0IENVU1RPTV9WSUVXX0NPTlRFWFQgPSBjcmVhdGVDb250ZXh0PERhdGFjb3JlUXVlcnlWaWV3Pih1bmRlZmluZWQhKTtcblxuLyoqIFByb3ZpZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgZGF0YWNvcmUgdmlldyBwYW5lLiAqL1xuZnVuY3Rpb24gRGF0YWNvcmVWaWV3U2V0dGluZ3MoKSB7XG4gICAgY29uc3QgdmlldyA9IHVzZUNvbnRleHQoQ1VTVE9NX1ZJRVdfQ09OVEVYVCkgYXMgRGF0YWNvcmVRdWVyeVZpZXc7XG4gICAgY29uc3Qgc2V0Vmlld1N0YXRlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gZGVib3VuY2UoKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4gdmlldy5zZXRTdGF0ZShzdGF0ZSwgeyBoaXN0b3J5OiBmYWxzZSB9KSwgNTAwKSxcbiAgICAgICAgW3ZpZXddXG4gICAgKTtcblxuICAgIGNvbnN0IFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlXSA9IHVzZVN0YXRlKHZpZXcuZ2V0U3RhdGUoKSk7XG4gICAgY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxTdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZSwgLi4uc3RhdGUgfTtcbiAgICAgICAgICAgIC8vIE5vdCBkZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRMb2NhbFN0YXRlKGZpbmFsU3RhdGUpO1xuXG4gICAgICAgICAgICAvLyBEZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRWaWV3U3RhdGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlLCB2aWV3XVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U3RhY2sgYWxpZ249XCJzdHJldGNoXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZS1pY29uXCIgc3R5bGU9XCJhbGlnbi1zZWxmOiBzdGFydFwiIG9uQ2xpY2s9eygpID0+IHZpZXcudmlldyhcInNjcmlwdFwiKX0+XG4gICAgICAgICAgICAgICAge0JBQ0tfQlVUVE9OfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8R3JvdXAganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNj5WaWV3IFRpdGxlPC9oNj5cbiAgICAgICAgICAgICAgICA8VGV4dGJveFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHRpdGxlOiBlLmN1cnJlbnRUYXJnZXQudmFsdWUgYXMgc3RyaW5nIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+VmlldyBUeXBlPC9oNj5cbiAgICAgICAgICAgICAgICA8VmFuaWxsYVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtMQU5HVUFHRV9PUFRJT05TfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bG9jYWxTdGF0ZS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocykgPT4gc2V0U3RhdGUoeyBzb3VyY2VUeXBlOiBzIGFzIFNjcmlwdExhbmd1YWdlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+U2NyaXB0L1ZpZXcgc291cmNlPC9oNj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBcInZlcnRpY2FsXCIsIG1pbldpZHRoOiBcIjc1JVwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiIH19XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bG9jYWxTdGF0ZS5zY3JpcHR9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NhbFN0YXRlLnNjcmlwdH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHNjcmlwdDogZS5jdXJyZW50VGFyZ2V0LnZhbHVlIGFzIHN0cmluZyB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgIDxHcm91cCBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICAgICAgICA8aDY+Q3VycmVudCBGaWxlPC9oNj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRoZSBwYXRoIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyBsaWtlIGB1c2VDdXJyZW50UGF0aGAgaW4gdGhpcyB2aWV3PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWluV2lkdGg6IFwiNTAlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxDdXJyZW50RmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2xvY2FsU3RhdGUuY3VycmVudEZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHNldFN0YXRlKHsgY3VycmVudEZpbGU6IHYgfSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICA8L1N0YWNrPlxuICAgICk7XG59XG5cbi8qKiBSZWFjdCBjb21wb25lbnQgZm9yIGFzeW5jaHJvbm91c2x5IHNob3dpbmcgdGhlIGFjdGl2ZSBzZXQgb2YgY3VycmVudCBmaWxlcyB0byBzZWxlY3Qgb25lIGZyb20uICovXG5mdW5jdGlvbiBDdXJyZW50RmlsZVNlbGVjdG9yKHtcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25DaGFuZ2UsXG59OiB7XG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn0pIHtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCByZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhjb3JlLCB7IGRlYm91bmNlOiAyMDAwIH0pO1xuXG4gICAgLy8gQ2FjaGVkIGxpc3Qgb2YgcmVsZXZhbnQgZmlsZXMsIHdoaWNoIGlzIG9ubHkgcmVjb21wdXRlZCBvbiB2YXVsdCBjaGFuZ2VzLlxuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvcmUudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLm1hcCgoZikgPT4gKHsgbGFiZWw6IGYucGF0aCwgdmFsdWU6IGYucGF0aCB9KSk7XG4gICAgfSwgW3JldmlzaW9uXSk7XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9uID0gZGVmYXVsdFZhbHVlXG4gICAgICAgID8geyBsYWJlbDogXCJObyBmaWxlXCIsIHZhbHVlOiB1bmRlZmluZWQgfVxuICAgICAgICA6IHsgbGFiZWw6IGRlZmF1bHRWYWx1ZSwgdmFsdWU6IGRlZmF1bHRWYWx1ZSB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0T3B0aW9ufVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhudiwgX2FtKSA9PiBvbkNoYW5nZShudj8udmFsdWUpfVxuICAgICAgICAgICAgdW5zdHlsZWRcbiAgICAgICAgLz5cbiAgICApO1xufVxuXG4vKiogU2VsZWN0YWJsZSBvcHRpb25zIGZvciBwaWNraW5nIHdoaWNoIGxhbmd1YWdlIHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBpbi4gKi9cbmNvbnN0IExBTkdVQUdFX09QVElPTlM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFNjcmlwdExhbmd1YWdlIH1bXSA9IFtcbiAgICB7IGxhYmVsOiBcIkphdmFzY3JpcHRcIiwgdmFsdWU6IFwianNcIiB9LFxuICAgIHsgbGFiZWw6IFwiVHlwZXNjcmlwdFwiLCB2YWx1ZTogXCJ0c1wiIH0sXG4gICAgeyBsYWJlbDogXCJKYXZhc2NyaXB0IChKU1gpXCIsIHZhbHVlOiBcImpzeFwiIH0sXG4gICAgeyBsYWJlbDogXCJUeXBlc2NyaXB0IEpTWFwiLCB2YWx1ZTogXCJ0c3hcIiB9LFxuXTtcblxuLyoqIFNWRyBiYWNrIGJ1dHRvbiBzaG93biB0byBleGl0IHRoZSBzZXR0aW5ncyB2aWV3LiAqL1xuY29uc3QgQkFDS19CVVRUT04gPSAoXG4gICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIGNsYXNzPVwic3ZnLWljb24gbHVjaWRlLWFycm93LWxlZnRcIlxuICAgID5cbiAgICAgICAgPHBhdGggZD1cIm0xMiAxOS03LTcgNy03XCI+PC9wYXRoPlxuICAgICAgICA8cGF0aCBkPVwiTTE5IDEySDVcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4pO1xuXG4vKiogU3RhdGUgZm9yIHRoZSBkYXRhY29yZSB2aWV3IHBhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFjb3JlVmlld1N0YXRlIHtcbiAgICAvKiogQ3VzdG9tIHRpdGxlIGZvciB0aGUgdmlldyBwYW5lLiAqL1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIC8qKiBMYW5ndWFnZSB0aGF0IHRoZSBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZCBpbi4gKi9cbiAgICBzb3VyY2VUeXBlPzogU2NyaXB0TGFuZ3VhZ2U7XG4gICAgLyoqIElmIGRlZmluZWQsIHRoZSBmaWxlIHRoZSB2aWV3IHdpbGwgYmUgcmVsYXRpdmUgdG8uICovXG4gICAgY3VycmVudEZpbGU/OiBzdHJpbmc7XG4gICAgLyoqIENvbnRlbnRzIG9mIHRoZSBzY3JpcHQuICovXG4gICAgc2NyaXB0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgY3VycmVudCB2aWV3OyBkZWZhdWx0cyB0byAnc2V0dGluZ3MnIGZvciBpbml0aWFsaXphdGlvbi4gKi9cbiAgICB2aWV3PzogXCJzZXR0aW5nc1wiIHwgXCJzY3JpcHRcIjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFjb3JlUXVlcnlWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xuICAgIC8qKiBJbnRlcm5hbCBjdXJyZW50IHN0YXRlIG9mIHRoZSB2aWV3OyBjYW4gYmUgbW9kaWZpZWQgYnkgc2V0U3RhdGUuICovXG4gICAgcHVibGljIGludGVybmFsU3RhdGU6IERhdGFjb3JlVmlld1N0YXRlID0ge1xuICAgICAgICB0aXRsZTogXCJOZXcgdmlld1wiLFxuICAgICAgICBzY3JpcHQ6IFwiXCIsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwianNcIixcbiAgICAgICAgdmlldzogXCJzZXR0aW5nc1wiLFxuICAgIH07XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgYWN0aXZlIHZpZXcgLSBlaXRoZXIgdGhlIHNldHRpbmdzIHZpZXcgKi9cbiAgICBwcml2YXRlIGFjdGl2ZVZpZXc6IE1hcmtkb3duUmVuZGVyQ2hpbGQ7XG4gICAgcHJpdmF0ZSBhY3RpdmVWaWV3VHlwZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobGVhZjogV29ya3NwYWNlTGVhZiwgcHVibGljIGFwaTogRGF0YWNvcmVBcGkpIHtcbiAgICAgICAgc3VwZXIobGVhZik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICAvKiogU2hvdWxkIGFsd2F5cyBiZSBWSUVXX1RZUEVfREFUQUNPUkVKUy4gKi9cbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gVklFV19UWVBFX0RBVEFDT1JFSlM7XG4gICAgfVxuXG4gICAgLyoqIFRleHQgc2hvd24gaW4gdGhlIHRpdGxlIHdpbmRvdy4gKi9cbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pbnRlcm5hbFN0YXRlLnRpdGxlfSAoRGF0YWNvcmVKUylgO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwibWFya2Rvd24tcmVuZGVyZWRcIik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcpIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogU3luY2hyb25pemVzIHRoZSBzY3JlZW4gc3RhdGUgdG8gcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICByZXJlbmRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sZWFmLnRhYkhlYWRlcklubmVyVGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMuZ2V0RGlzcGxheVRleHQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlld1R5cGUgPT0gdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3KSB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU3RhdGUudmlldyA9PT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdUeXBlID0gXCJzZXR0aW5nc1wiO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gbmV3IFJlYWN0UmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuY29yZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRFbCxcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIDxDVVNUT01fVklFV19DT05URVhULlByb3ZpZGVyIHZhbHVlPXt0aGlzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhY29yZVZpZXdTZXR0aW5ncyAvPlxuICAgICAgICAgICAgICAgICAgICA8L0NVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGEgc2NyaXB0LCB0cnkgdG8gZXhlY3V0ZSBpdDsgb3RoZXJ3aXNlLCBzaG93IGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3VHlwZSA9IFwic2NyaXB0XCI7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IG5ldyBEYXRhY29yZUpTUmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhY29yZUxvY2FsQXBpKHRoaXMuYXBpLCB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuc291cmNlVHlwZSB8fCBcImpzXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBuZXcgUmVhY3RSZW5kZXJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNvcmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIk5vIHNjcmlwdCBkZWZpbmVkIGZvciB0aGlzIHZpZXcuXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VTVE9NX1ZJRVdfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgdGhlIHN0YXRlIG9mIHRoaXMgdmlldyB3aXRoIG5ldyBtZXRhZGF0YS4gR2VuZXJhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIHNldHRpbmdzIHBhbmUuICovXG4gICAgcHVibGljIGFzeW5jIHNldFN0YXRlKHN0YXRlOiBEYXRhY29yZVZpZXdTdGF0ZSwgX3Jlc3VsdDogVmlld1N0YXRlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIFN3YXAgdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHB1YmxpYyB2aWV3KG1vZGU6IFwic2V0dGluZ3NcIiB8IFwic2NyaXB0XCIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcgPSBtb2RlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uT3BlbigpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgICAvKiogSGFuZGxlIGZvciByaWdodCBjbGljayBtZW51cy4gKi9cbiAgICBwdWJsaWMgb25QYW5lTWVudShtZW51OiBNZW51LCBzb3VyY2U6IFwibW9yZS1vcHRpb25zXCIgfCBcInRhYi1oZWFkZXJcIiB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc291cmNlID09PSBcIm1vcmUtb3B0aW9uc1wiKSB7XG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oKGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgaXQuc2V0SWNvbihcInNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIGl0LnNldFRpdGxlKFwiQ29uZmlndXJlIFZpZXdcIik7XG4gICAgICAgICAgICAgICAgaXQub25DbGljaygoZSkgPT4gdGhpcy52aWV3KFwic2V0dGluZ3NcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IHVzZUluZGV4VXBkYXRlcyB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogUmVuZGVyIGEgaGVscGZ1bCBzdGF0dXMgaW5kaWNhdG9yIGluIHRoZSBzdGF0dXMgYmFyIG9mIGhvdyB0aGUgaW1wb3J0IGlzIGdvaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEluZGV4U3RhdHVzQmFyKHsgZGF0YWNvcmUgfTogeyBkYXRhY29yZTogRGF0YWNvcmUgfSkge1xuICAgIHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgeyBkZWJvdW5jZTogMjUwIH0pO1xuXG4gICAgLy8gV2hlbmV2ZXIgdGhlIHZpZXcgdXBkYXRlcywgZmlndXJlIG91dCB3aGF0IHN0YXRlIHdlIGFyZSBpbiBiYXNlZCBvbiBpZiBhbiBpbml0aWFsaXplciBpcyBwcmVzZW50LlxuICAgIGlmIChkYXRhY29yZS5pbml0aWFsaXplcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgU2Nhbm5pbmcge2RhdGFjb3JlLmluaXRpYWxpemVyLmluaXRpYWxpemVkfSBvZiB7ZGF0YWNvcmUuaW5pdGlhbGl6ZXIuZmlsZXN9IGZpbGVzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkYXRhY29yZS5pbXBvcnRlci5xdWV1ZS5zaXplKCkgPiAwKSB7XG4gICAgICAgIHJldHVybiA8c3Bhbj5VcGRhdGluZyB7ZGF0YWNvcmUuaW1wb3J0ZXIucXVldWUuc2l6ZSgpfSBmaWxlczwvc3Bhbj47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxzcGFuPntkYXRhY29yZS5kYXRhc3RvcmUuc2l6ZX0gb2JqZWN0czwvc3Bhbj47XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSwrREFBQUEsU0FBQTtBQUFBLEtBQUMsU0FBU0MsSUFBRUMsSUFBRTtBQUFDLGtCQUFVLE9BQU8sV0FBUyxZQUFVLE9BQU9GLFVBQU9BLFFBQU8sVUFBUUUsR0FBRSxJQUFFLGNBQVksT0FBTyxVQUFRLE9BQU8sTUFBSSxPQUFPLENBQUMsR0FBRUEsRUFBQyxJQUFFLFlBQVUsT0FBTyxVQUFRLFFBQVEsWUFBVUEsR0FBRSxJQUFFRCxHQUFFLFlBQVVDLEdBQUU7QUFBQSxJQUFDLEVBQUUsZUFBYSxPQUFPLE9BQUssT0FBSyxTQUFL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QUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUNSO0FBRUEsSUFBTSx3QkFBd0I7QUFBQSxFQUM1QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsU0FBUyxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ3BCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLFVBQVUsQ0FBQyxPQUFPLEtBQUs7QUFBQSxFQUN2QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixTQUFTLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDcEIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQ25CO0FBRUEsSUFBTSxlQUFl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SztBQUNILGVBQU8sTUFBTSxJQUFJLE9BQU8sU0FBUyxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDbkQsS0FBSztBQUNILGVBQU8sTUFBTSxJQUFJLE9BQU8sUUFBUSxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFFbEQsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFFcEIsS0FBSztBQUNILGVBQU8sUUFBUSxVQUFVO0FBQUEsTUFDM0IsS0FBSztBQUNILGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFFdEIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxVQUFVO0FBQUEsTUFDM0IsS0FBSztBQUNILGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFDdEIsS0FBSztBQUNILGVBQU8sT0FBTyxTQUFTO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sT0FBTyxRQUFRO0FBQUEsTUFDeEIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFFcEIsS0FBSztBQUNILGVBQU8sTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDO0FBQUEsTUFFakMsS0FBSztBQUNILGVBQU8sUUFBUSxJQUFJO0FBQUEsTUFDckIs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LGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNi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LFFBQU0sT0FBTztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsTUFBTSxJQUFJLElBQUksSUFBSTtBQUN2RCxRQUFNLE1BQU07QUFBSSxFQUFBQSxXQUFVQSxXQUFVLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDcEQsUUFBTSxRQUFRO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxPQUFPLElBQUksS0FBSyxJQUFJO0FBQzFELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFFBQVE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLE9BQU8sSUFBSSxLQUFLLElBQUk7QUFDMUQsUUFBTUMsYUFBWTtBQUFJLEVBQUFELFdBQVVBLFdBQVUsV0FBVyxJQUFJQyxVQUFTLElBQUk7QUFDdEUsUUFBTSxXQUFXO0FBQUksRUFBQUQsV0FBVUEsV0FBVSxVQUFVLElBQUksUUFBUSxJQUFJO0FBQ25FLFFBQU0sV0FBVztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsVUFBVSxJQUFJLFFBQVEsSUFBSTtBQUNuRSxRQUFNLGNBQWM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLGFBQWEsSUFBSSxXQUFXLElBQUk7QUFDNUUsUUFBTSxlQUFlO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxjQUFjLElBQUksWUFBWSxJQUFJO0FBQy9FLFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sb0JBQW9CO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxtQkFBbUIsSUFBSSxpQkFBaUIsSUFBSTtBQUM5RixRQUFNLFlBQVk7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFdBQVcsSUFBSSxTQUFTLElBQUk7QUFDdEUsUUFBTSxxQkFBcUI7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLG9CQUFvQixJQUFJLGtCQUFrQixJQUFJO0FBQ2pHLFFBQU1FLFNBQVE7QUFBSSxFQUFBRixXQUFVQSxXQUFVLE9BQU8sSUFBSUUsTUFBSyxJQUFJO0FBQzFELFFBQU0sYUFBYTtBQUFJLEVBQUFGLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGNBQWM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLGFBQWEsSUFBSSxXQUFXLElBQUk7QUFDNUUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVB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LE1BQU07QUFDNUQsU0FBUyxVQUFVLFVBQVUsUUFBUSxXQUFXLFVBQVUsUUFBUSxXQUFXO0FBQzNFLHNCQUFvQixPQUFPLElBQUk7QUFDakM7OztBQzVCTyxJQUFNLGlCQUFpQixJQUFJLFdBQVc7QUFBQTtBQUFBLEVBRTNDO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSztBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQTtBQUFBLEVBRTlJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTNHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXhHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixhQUFhO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXRJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixhQUFhO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXRJLGtCQUFrQixPQUFPO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQTtBQUFBLEVBRWxJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixXQUFXO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXJJLGtCQUFrQixZQUFZO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXJJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixVQUFVO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRW5JO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixVQUFVO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRW5JO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXhHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRS9HO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTNHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXhHLFVBQUcsU0FBUyxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHLGtCQUFrQixXQUFXO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXBJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTVHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTVIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHLGtCQUFrQixnQkFBZ0I7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFMUgsVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0gsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFL0csVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGVBQWU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFMUgsVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxlQUFlLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFL0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkksa0JBQWtCLE9BQU87QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEgsa0JBQWtCLE9BQU87QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGFBQWE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkksa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGFBQWE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFcEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFeEgsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7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QSxFQUNoQixDQUFDLE9BQU8sTUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxNQUFRO0FBQUEsRUFDaEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLE9BQU8sTUFBUTtBQUFBLEVBQ2hCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLE1BQVE7QUFBQSxFQUNoQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsT0FBTyxNQUFRO0FBQUEsRUFDaEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxXQUFXLFFBQVE7QUFBQSxFQUNwQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLE1BQU0sUUFBUTtBQUFBLEVBQ2YsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLE1BQU0sUUFBUTtBQUFBLEVBQ2YsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsV0FBVyxRQUFRO0FBQUEsRUFDcEIsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxXQUFXLFFBQVE7QUFBQSxFQUNwQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsWUFBWSxRQUFRO0FBQUEsRUFDckIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENB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LEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQztBQUNELElBQUksZUFBZSxJQUFJLE9BQU8sTUFBTSxXQUFXLElBQUksU0FBVUksSUFBRztBQUM5RCxTQUFPQSxHQUFFO0FBQ1gsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssR0FBRztBQUN0QixJQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLEtBQVNDLEtBQUksR0FBR0EsS0FBSSxXQUFXLFFBQVFBLE1BQUs7QUFDdEMsY0FBWSxXQUFXQSxFQUFDO0FBQzVCLE9BQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVEsUUFBUUEsTUFBSztBQUNqRCxvQkFBZ0IsVUFBVSxRQUFRQSxFQUFDLENBQUMsSUFBSSxVQUFVO0FBQUEsRUFDcEQ7QUFDRjtBQUpNO0FBQ0ssSUFBQUE7QUFGRixJQUFBRDtBQU1ULElBQUksa0JBQWtCLFNBQVNFLGlCQUFnQixLQUFLO0FBQ2xELFNBQU8sSUFBSSxRQUFRLGNBQWMsU0FBVUMsUUFBTztBQUNoRCxXQUFPLGdCQUFnQkEsTUFBSztBQUFBLEVBQzlCLENBQUM7QUFDSDtBQUVBLElBQUksa0NBQWtDLFdBQVcsZUFBZTtBQUNoRSxJQUFJLGFBQWEsU0FBU0MsWUFBVyxLQUFLO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLGNBQWMsRUFBRTtBQUNyQztBQUNBLElBQUksbUJBQW1CLFNBQVNDLGtCQUFpQixRQUFRO0FBQ3ZELFNBQU8sR0FBRyxPQUFPLE9BQU8sT0FBTyxHQUFHLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDekQ7QUFDQSxJQUFJLGVBQWUsU0FBU0MsY0FBYUMsU0FBUTtBQUMvQyxTQUFPLFNBQVUsUUFBUSxVQUFVO0FBRWpDLFFBQUksT0FBTyxLQUFLO0FBQVcsYUFBTztBQUNsQyxRQUFJLHdCQUF3QixlQUFjO0FBQUEsTUFDdEMsWUFBWTtBQUFBLE1BQ1osZUFBZTtBQUFBLE1BQ2YsV0FBVztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLElBQ2IsR0FBR0EsT0FBTSxHQUNULGFBQWEsc0JBQXNCLFlBQ25DLGdCQUFnQixzQkFBc0IsZUFDdENDLGFBQVksc0JBQXNCLFdBQ2xDQyxRQUFPLHNCQUFzQixNQUM3QixZQUFZLHNCQUFzQjtBQUNwQyxRQUFJQyxTQUFRRCxRQUFPLFdBQVcsUUFBUSxJQUFJO0FBQzFDLFFBQUksWUFBWUEsUUFBTyxXQUFXRCxXQUFVLE1BQU0sQ0FBQyxJQUFJQSxXQUFVLE1BQU07QUFDdkUsUUFBSSxZQUFZO0FBQ2QsTUFBQUUsU0FBUUEsT0FBTSxZQUFZO0FBQzFCLGtCQUFZLFVBQVUsWUFBWTtBQUFBLElBQ3BDO0FBQ0EsUUFBSSxlQUFlO0FBQ2pCLE1BQUFBLFNBQVEsZ0NBQWdDQSxNQUFLO0FBQzdDLGtCQUFZLGdCQUFnQixTQUFTO0FBQUEsSUFDdkM7QUFDQSxXQUFPLGNBQWMsVUFBVSxVQUFVLE9BQU8sR0FBR0EsT0FBTSxNQUFNLE1BQU1BLFNBQVEsVUFBVSxRQUFRQSxNQUFLLElBQUk7QUFBQSxFQUMxRztBQUNGO0FBRUEsSUFBSUMsYUFBWSxDQUFDLFVBQVU7QUFDM0IsU0FBUyxXQUFXQyxPQUFNO0FBQ3hCLE1BQUksV0FBV0EsTUFBSyxVQUNsQixRQUFRLHlCQUF5QkEsT0FBTUQsVUFBUztBQUVsRCxNQUFJLGdCQUFnQixZQUFZLE9BQU8sWUFBWSxNQUFNLFNBQVMsUUFBUSxRQUFRO0FBQ2xGLFNBQU8sSUFBSSxTQUFTLFNBQVM7QUFBQSxJQUMzQixLQUFLO0FBQUEsRUFDUCxHQUFHLGVBQWU7QUFBQSxJQUNoQixLQUFrQixvQkFBSTtBQUFBLE1BQ3BCLE9BQU87QUFBQTtBQUFBLE1BRVAsWUFBWTtBQUFBLE1BQ1osUUFBUTtBQUFBO0FBQUEsTUFFUixZQUFZO0FBQUEsTUFDWixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUE7QUFBQSxNQUVULE9BQU87QUFBQTtBQUFBLE1BRVAsT0FBTztBQUFBO0FBQUEsTUFFUCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsSUFDYixHQUFHLFFBQXdDLEtBQUssc0JBQXNCLFFBQXdDLEtBQUssNjFEQUE2MUQ7QUFBQSxFQUNsOUQsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxJQUFJLGVBQWUsU0FBU0UsY0FBYSxPQUFPO0FBQzlDLE1BQUksTUFBTTtBQUFZLFVBQU0sZUFBZTtBQUMzQyxRQUFNLGdCQUFnQjtBQUN4QjtBQUNBLFNBQVMsaUJBQWlCRCxPQUFNO0FBQzlCLE1BQUksWUFBWUEsTUFBSyxXQUNuQixpQkFBaUJBLE1BQUssZ0JBQ3RCLGdCQUFnQkEsTUFBSyxlQUNyQixjQUFjQSxNQUFLLGFBQ25CLGFBQWFBLE1BQUs7QUFDcEIsTUFBSSxXQUFXRSxHQUFPLEtBQUs7QUFDM0IsTUFBSSxRQUFRQSxHQUFPLEtBQUs7QUFDeEIsTUFBSSxhQUFhQSxHQUFPLENBQUM7QUFDekIsTUFBSSxlQUFlQSxHQUFPLElBQUk7QUFDOUIsTUFBSSxtQkFBbUJDLEdBQVksU0FBVSxPQUFPLE9BQU87QUFDekQsUUFBSSxhQUFhLFlBQVk7QUFBTTtBQUNuQyxRQUFJLHdCQUF3QixhQUFhLFNBQ3ZDLFlBQVksc0JBQXNCLFdBQ2xDLGVBQWUsc0JBQXNCLGNBQ3JDLGVBQWUsc0JBQXNCO0FBQ3ZDLFFBQUksU0FBUyxhQUFhO0FBQzFCLFFBQUksa0JBQWtCLFFBQVE7QUFDOUIsUUFBSSxrQkFBa0IsZUFBZSxlQUFlO0FBQ3BELFFBQUkscUJBQXFCO0FBR3pCLFFBQUksa0JBQWtCLFNBQVMsU0FBUyxTQUFTO0FBQy9DLFVBQUk7QUFBZSxzQkFBYyxLQUFLO0FBQ3RDLGVBQVMsVUFBVTtBQUFBLElBQ3JCO0FBQ0EsUUFBSSxtQkFBbUIsTUFBTSxTQUFTO0FBQ3BDLFVBQUk7QUFBWSxtQkFBVyxLQUFLO0FBQ2hDLFlBQU0sVUFBVTtBQUFBLElBQ2xCO0FBR0EsUUFBSSxtQkFBbUIsUUFBUSxpQkFBaUI7QUFDOUMsVUFBSSxrQkFBa0IsQ0FBQyxTQUFTLFNBQVM7QUFDdkMsdUJBQWUsS0FBSztBQUFBLE1BQ3RCO0FBQ0EsYUFBTyxZQUFZO0FBQ25CLDJCQUFxQjtBQUNyQixlQUFTLFVBQVU7QUFBQSxJQUdyQixXQUFXLENBQUMsbUJBQW1CLENBQUMsUUFBUSxXQUFXO0FBQ2pELFVBQUksZUFBZSxDQUFDLE1BQU0sU0FBUztBQUNqQyxvQkFBWSxLQUFLO0FBQUEsTUFDbkI7QUFDQSxhQUFPLFlBQVk7QUFDbkIsMkJBQXFCO0FBQ3JCLFlBQU0sVUFBVTtBQUFBLElBQ2xCO0FBR0EsUUFBSSxvQkFBb0I7QUFDdEIsbUJBQWEsS0FBSztBQUFBLElBQ3BCO0FBQUEsRUFDRixHQUFHLENBQUMsZ0JBQWdCLGVBQWUsYUFBYSxVQUFVLENBQUM7QUFDM0QsTUFBSSxVQUFVQSxHQUFZLFNBQVUsT0FBTztBQUN6QyxxQkFBaUIsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUN0QyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDckIsTUFBSSxlQUFlQSxHQUFZLFNBQVUsT0FBTztBQUU5QyxlQUFXLFVBQVUsTUFBTSxlQUFlLENBQUMsRUFBRTtBQUFBLEVBQy9DLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsTUFBSSxjQUFjQSxHQUFZLFNBQVUsT0FBTztBQUM3QyxRQUFJLFNBQVMsV0FBVyxVQUFVLE1BQU0sZUFBZSxDQUFDLEVBQUU7QUFDMUQscUJBQWlCLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQixNQUFJLGlCQUFpQkEsR0FBWSxTQUFVLElBQUk7QUFFN0MsUUFBSSxDQUFDO0FBQUk7QUFDVCxRQUFJLGFBQWEsd0JBQXdCO0FBQUEsTUFDdkMsU0FBUztBQUFBLElBQ1gsSUFBSTtBQUNKLE9BQUcsaUJBQWlCLFNBQVMsU0FBUyxVQUFVO0FBQ2hELE9BQUcsaUJBQWlCLGNBQWMsY0FBYyxVQUFVO0FBQzFELE9BQUcsaUJBQWlCLGFBQWEsYUFBYSxVQUFVO0FBQUEsRUFDMUQsR0FBRyxDQUFDLGFBQWEsY0FBYyxPQUFPLENBQUM7QUFDdkMsTUFBSSxnQkFBZ0JBLEdBQVksU0FBVSxJQUFJO0FBRTVDLFFBQUksQ0FBQztBQUFJO0FBQ1QsT0FBRyxvQkFBb0IsU0FBUyxTQUFTLEtBQUs7QUFDOUMsT0FBRyxvQkFBb0IsY0FBYyxjQUFjLEtBQUs7QUFDeEQsT0FBRyxvQkFBb0IsYUFBYSxhQUFhLEtBQUs7QUFBQSxFQUN4RCxHQUFHLENBQUMsYUFBYSxjQUFjLE9BQU8sQ0FBQztBQUN2QyxFQUFBQyxHQUFVLFdBQVk7QUFDcEIsUUFBSSxDQUFDO0FBQVc7QUFDaEIsUUFBSSxVQUFVLGFBQWE7QUFDM0IsbUJBQWUsT0FBTztBQUN0QixXQUFPLFdBQVk7QUFDakIsb0JBQWMsT0FBTztBQUFBLElBQ3ZCO0FBQUEsRUFDRixHQUFHLENBQUMsV0FBVyxnQkFBZ0IsYUFBYSxDQUFDO0FBQzdDLFNBQU8sU0FBVSxTQUFTO0FBQ3hCLGlCQUFhLFVBQVU7QUFBQSxFQUN6QjtBQUNGO0FBRUEsSUFBSSxhQUFhLENBQUMsYUFBYSxVQUFVLFlBQVksZ0JBQWdCLFVBQVU7QUFDL0UsSUFBSSxjQUFjO0FBQUEsRUFDaEIsV0FBVztBQUFBO0FBQUEsRUFFWCxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQ1Y7QUFDQSxTQUFTLGlCQUFpQkMsSUFBRztBQUMzQixFQUFBQSxHQUFFLGVBQWU7QUFDbkI7QUFDQSxTQUFTLGVBQWVBLElBQUc7QUFDekIsRUFBQUEsR0FBRSxnQkFBZ0I7QUFDcEI7QUFDQSxTQUFTLHVCQUF1QjtBQUM5QixNQUFJLE1BQU0sS0FBSztBQUNmLE1BQUksY0FBYyxLQUFLO0FBQ3ZCLE1BQUksZ0JBQWdCLE1BQU0sS0FBSztBQUMvQixNQUFJLFFBQVEsR0FBRztBQUNiLFNBQUssWUFBWTtBQUFBLEVBQ25CLFdBQVcsa0JBQWtCLGFBQWE7QUFDeEMsU0FBSyxZQUFZLE1BQU07QUFBQSxFQUN6QjtBQUNGO0FBSUEsU0FBUyxnQkFBZ0I7QUFDdkIsU0FBTyxrQkFBa0IsVUFBVSxVQUFVO0FBQy9DO0FBQ0EsSUFBSSxZQUFZLENBQUMsRUFBRSxPQUFPLFdBQVcsZUFBZSxPQUFPLFlBQVksT0FBTyxTQUFTO0FBQ3ZGLElBQUksb0JBQW9CO0FBQ3hCLElBQUksa0JBQWtCO0FBQUEsRUFDcEIsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUNYO0FBQ0EsU0FBUyxjQUFjTCxPQUFNO0FBQzNCLE1BQUksWUFBWUEsTUFBSyxXQUNuQix3QkFBd0JBLE1BQUssc0JBQzdCLHVCQUF1QiwwQkFBMEIsU0FBUyxPQUFPO0FBQ25FLE1BQUksaUJBQWlCRSxHQUFPLENBQUMsQ0FBQztBQUM5QixNQUFJLGVBQWVBLEdBQU8sSUFBSTtBQUM5QixNQUFJLGdCQUFnQkMsR0FBWSxTQUFVLG1CQUFtQjtBQUMzRCxRQUFJLENBQUM7QUFBVztBQUNoQixRQUFJLFNBQVMsU0FBUztBQUN0QixRQUFJLGNBQWMsVUFBVSxPQUFPO0FBQ25DLFFBQUksc0JBQXNCO0FBRXhCLGlCQUFXLFFBQVEsU0FBVSxLQUFLO0FBQ2hDLFlBQUksTUFBTSxlQUFlLFlBQVksR0FBRztBQUN4Qyx1QkFBZSxRQUFRLEdBQUcsSUFBSTtBQUFBLE1BQ2hDLENBQUM7QUFBQSxJQUNIO0FBR0EsUUFBSSx3QkFBd0Isb0JBQW9CLEdBQUc7QUFDakQsVUFBSSxpQkFBaUIsU0FBUyxlQUFlLFFBQVEsY0FBYyxFQUFFLEtBQUs7QUFDMUUsVUFBSSxjQUFjLFNBQVMsT0FBTyxTQUFTLEtBQUssY0FBYztBQUM5RCxVQUFJLGtCQUFrQixPQUFPLGFBQWEsY0FBYyxrQkFBa0I7QUFDMUUsYUFBTyxLQUFLLFdBQVcsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUM5QyxZQUFJLE1BQU0sWUFBWSxHQUFHO0FBQ3pCLFlBQUksYUFBYTtBQUNmLHNCQUFZLEdBQUcsSUFBSTtBQUFBLFFBQ3JCO0FBQUEsTUFDRixDQUFDO0FBQ0QsVUFBSSxhQUFhO0FBQ2Ysb0JBQVksZUFBZSxHQUFHLE9BQU8saUJBQWlCLElBQUk7QUFBQSxNQUM1RDtBQUFBLElBQ0Y7QUFHQSxRQUFJLFVBQVUsY0FBYyxHQUFHO0FBRTdCLGFBQU8saUJBQWlCLGFBQWEsa0JBQWtCLGVBQWU7QUFHdEUsVUFBSSxtQkFBbUI7QUFDckIsMEJBQWtCLGlCQUFpQixjQUFjLHNCQUFzQixlQUFlO0FBQ3RGLDBCQUFrQixpQkFBaUIsYUFBYSxnQkFBZ0IsZUFBZTtBQUFBLE1BQ2pGO0FBQUEsSUFDRjtBQUdBLHlCQUFxQjtBQUFBLEVBQ3ZCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6QixNQUFJLG1CQUFtQkEsR0FBWSxTQUFVLG1CQUFtQjtBQUM5RCxRQUFJLENBQUM7QUFBVztBQUNoQixRQUFJLFNBQVMsU0FBUztBQUN0QixRQUFJLGNBQWMsVUFBVSxPQUFPO0FBR25DLHdCQUFvQixLQUFLLElBQUksb0JBQW9CLEdBQUcsQ0FBQztBQUdyRCxRQUFJLHdCQUF3QixvQkFBb0IsR0FBRztBQUNqRCxpQkFBVyxRQUFRLFNBQVUsS0FBSztBQUNoQyxZQUFJLE1BQU0sZUFBZSxRQUFRLEdBQUc7QUFDcEMsWUFBSSxhQUFhO0FBQ2Ysc0JBQVksR0FBRyxJQUFJO0FBQUEsUUFDckI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBR0EsUUFBSSxVQUFVLGNBQWMsR0FBRztBQUM3QixhQUFPLG9CQUFvQixhQUFhLGtCQUFrQixlQUFlO0FBQ3pFLFVBQUksbUJBQW1CO0FBQ3JCLDBCQUFrQixvQkFBb0IsY0FBYyxzQkFBc0IsZUFBZTtBQUN6RiwwQkFBa0Isb0JBQW9CLGFBQWEsZ0JBQWdCLGVBQWU7QUFBQSxNQUNwRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6QixFQUFBQyxHQUFVLFdBQVk7QUFDcEIsUUFBSSxDQUFDO0FBQVc7QUFDaEIsUUFBSSxVQUFVLGFBQWE7QUFDM0Isa0JBQWMsT0FBTztBQUNyQixXQUFPLFdBQVk7QUFDakIsdUJBQWlCLE9BQU87QUFBQSxJQUMxQjtBQUFBLEVBQ0YsR0FBRyxDQUFDLFdBQVcsZUFBZSxnQkFBZ0IsQ0FBQztBQUMvQyxTQUFPLFNBQVUsU0FBUztBQUN4QixpQkFBYSxVQUFVO0FBQUEsRUFDekI7QUFDRjtBQUVBLFNBQVMscUNBQXFDO0FBQUUsU0FBTztBQUFtTztBQUMxUixJQUFJLGtCQUFrQixTQUFTRSxpQkFBZ0IsT0FBTztBQUNwRCxNQUFJLFVBQVUsTUFBTTtBQUNwQixTQUFPLFFBQVEsY0FBYyxpQkFBaUIsUUFBUSxjQUFjLGNBQWMsS0FBSztBQUN6RjtBQUNBLElBQUksVUFBVSxRQUF3QztBQUFBLEVBQ3BELE1BQU07QUFBQSxFQUNOLFFBQVE7QUFDVixJQUFJO0FBQUEsRUFDRixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxVQUFVO0FBQ1o7QUFDQSxTQUFTLGNBQWNOLE9BQU07QUFDM0IsTUFBSSxXQUFXQSxNQUFLLFVBQ2xCLGNBQWNBLE1BQUssYUFDbkIsc0JBQXNCQSxNQUFLLGdCQUMzQixpQkFBaUIsd0JBQXdCLFNBQVMsT0FBTyxxQkFDekQsaUJBQWlCQSxNQUFLLGdCQUN0QixnQkFBZ0JBLE1BQUssZUFDckIsY0FBY0EsTUFBSyxhQUNuQixhQUFhQSxNQUFLO0FBQ3BCLE1BQUkseUJBQXlCLGlCQUFpQjtBQUFBLElBQzVDLFdBQVc7QUFBQSxJQUNYO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0QsTUFBSSxzQkFBc0IsY0FBYztBQUFBLElBQ3RDLFdBQVc7QUFBQSxFQUNiLENBQUM7QUFDRCxNQUFJLFlBQVksU0FBU08sV0FBVSxTQUFTO0FBQzFDLDJCQUF1QixPQUFPO0FBQzlCLHdCQUFvQixPQUFPO0FBQUEsRUFDN0I7QUFDQSxTQUFPLElBQUksR0FBVSxNQUFNLGVBQWUsSUFBSSxPQUFPO0FBQUEsSUFDbkQsU0FBUztBQUFBLElBQ1QsS0FBSztBQUFBLEVBQ1AsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO0FBQ3pCO0FBRUEsU0FBU0Msb0NBQW1DO0FBQUUsU0FBTztBQUFtTztBQUN4UixJQUFJQyxTQUFRLFFBQXdDO0FBQUEsRUFDbEQsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUNWLElBQUk7QUFBQSxFQUNGLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFBQSxFQUNMLFVBQVVEO0FBQ1o7QUFDQSxJQUFJLGdCQUFnQixTQUFTRSxlQUFjVixPQUFNO0FBQy9DLE1BQUksT0FBT0EsTUFBSyxNQUNkVyxXQUFVWCxNQUFLO0FBQ2pCLFNBQU8sSUFBSSxTQUFTO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLFNBQVNXO0FBQUEsSUFDVCxLQUFLRjtBQUFBLElBR0wsT0FBTztBQUFBLElBQ1AsVUFBVSxTQUFTRyxZQUFXO0FBQUEsSUFBQztBQUFBLEVBQ2pDLENBQUM7QUFDSDtBQUNBLElBQUksa0JBQWtCO0FBSXRCLFNBQVMsYUFBYSxJQUFJO0FBQ3hCLE1BQUk7QUFDSixTQUFPLE9BQU8sV0FBVyxlQUFlLE9BQU8sYUFBYSxPQUFPLEdBQUcsT0FBTyx3QkFBd0IsT0FBTyxVQUFVLGVBQWUsT0FBTyxRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLGFBQWEsT0FBTyxVQUFVLFFBQVEsSUFBSTtBQUNsUTtBQUNBLFNBQVMsV0FBVztBQUNsQixTQUFPLGFBQWEsVUFBVTtBQUNoQztBQUNBLFNBQVMsUUFBUTtBQUNmLFNBQU8sYUFBYSxPQUFPO0FBQzdCO0FBQ0EsU0FBUyxTQUFTO0FBQ2hCLFNBQU8sYUFBYSxRQUFRO0FBQUEsRUFFNUIsTUFBTSxLQUFLLFVBQVUsaUJBQWlCO0FBQ3hDO0FBQ0EsU0FBUyxRQUFRO0FBQ2YsU0FBTyxTQUFTLEtBQUssT0FBTztBQUM5QjtBQUNBLFNBQVMsZ0JBQWdCO0FBQ3ZCLFNBQU8sTUFBTSxLQUFLLE1BQU07QUFDMUI7QUFFQSxJQUFJLG1CQUFtQixTQUFTQyxrQkFBaUIsT0FBTztBQUN0RCxTQUFPLE1BQU07QUFDZjtBQUNBLElBQUksbUJBQW1CLFNBQVMsZUFBZSxRQUFRO0FBQ3JELFNBQU8sT0FBTztBQUNoQjtBQUNBLElBQUksbUJBQW1CLFNBQVMsZUFBZSxRQUFRO0FBQ3JELFNBQU8sT0FBTztBQUNoQjtBQUNBLElBQUksbUJBQW1CLFNBQVM5QixrQkFBaUIsUUFBUTtBQUN2RCxTQUFPLENBQUMsQ0FBQyxPQUFPO0FBQ2xCO0FBRUEsSUFBSSxnQkFBZ0I7QUFBQSxFQUNsQixnQkFBZ0I7QUFBQSxFQUNoQixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxtQkFBbUI7QUFBQSxFQUNuQixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxxQkFBcUI7QUFBQSxFQUNyQixvQkFBb0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCxrQkFBa0I7QUFBQSxFQUNsQixnQkFBZ0I7QUFBQSxFQUNoQixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQixrQkFBa0I7QUFBQSxFQUNsQixrQkFBa0I7QUFBQSxFQUNsQixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixhQUFhK0I7QUFBQSxFQUNiLGdCQUFnQjtBQUNsQjtBQXVCQSxJQUFJLFNBQVM7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFDYjtBQUNBLElBQUksZUFBZTtBQUVuQixJQUFJLFdBQVc7QUFFZixJQUFJLGdCQUFnQjtBQUVwQixJQUFJLGFBQWEsV0FBVztBQUM1QixJQUFJLFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQUNBLElBQUksZUFBZTtBQUFBLEVBQ2pCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQUVBLElBQUksZUFBZTtBQUFBLEVBQ2pCLGFBQWE7QUFBQSxFQUNiLHVCQUF1QjtBQUFBLEVBQ3ZCLG1CQUFtQixlQUFlO0FBQUEsRUFDbEMsbUJBQW1CLENBQUMsZUFBZTtBQUFBLEVBQ25DLFlBQVksQ0FBQztBQUFBLEVBQ2IsbUJBQW1CO0FBQUEsRUFDbkIsbUJBQW1CO0FBQUEsRUFDbkIsWUFBWSxDQUFDO0FBQUEsRUFDYiwwQkFBMEI7QUFBQSxFQUMxQixtQkFBbUI7QUFBQSxFQUNuQixjQUFjLGFBQWE7QUFBQSxFQUMzQjtBQUFBLEVBQ0EsZ0JBQWdCO0FBQUEsRUFDaEIsZ0JBQWdCO0FBQUEsRUFDaEIsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBLGdCQUFnQixTQUFTLGlCQUFpQjtBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsdUJBQXVCO0FBQUEsRUFDdkIsMEJBQTBCLENBQUMsZUFBZTtBQUFBLEVBQzFDLGtCQUFrQixTQUFTLG1CQUFtQjtBQUM1QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsU0FBUyxDQUFDO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixvQkFBb0IsU0FBUyxtQkFBbUJDLE9BQU07QUFDcEQsUUFBSSxRQUFRQSxNQUFLO0FBQ2pCLFdBQU8sR0FBRyxPQUFPLE9BQU8sU0FBUyxFQUFFLE9BQU8sVUFBVSxJQUFJLE1BQU0sSUFBSSxZQUFZO0FBQUEsRUFDaEY7QUFBQSxFQUNBLFFBQVEsQ0FBQztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsaUJBQWlCO0FBQUEsRUFDakIsVUFBVTtBQUNaO0FBQ0EsU0FBUyxvQkFBb0IsT0FBTyxRQUFRLGFBQWFDLFFBQU87QUFDOUQsTUFBSSxhQUFhLGtCQUFrQixPQUFPLFFBQVEsV0FBVztBQUM3RCxNQUFJLGFBQWEsa0JBQWtCLE9BQU8sUUFBUSxXQUFXO0FBQzdELE1BQUksUUFBUUMsZ0JBQWUsT0FBTyxNQUFNO0FBQ3hDLE1BQUksUUFBUUMsZ0JBQWUsT0FBTyxNQUFNO0FBQ3hDLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPRjtBQUFBLEVBQ1Q7QUFDRjtBQUNBLFNBQVMsd0JBQXdCLE9BQU8sYUFBYTtBQUNuRCxTQUFPLE1BQU0sUUFBUSxJQUFJLFNBQVUsZUFBZSxvQkFBb0I7QUFDcEUsUUFBSSxhQUFhLGVBQWU7QUFDOUIsVUFBSSxxQkFBcUIsY0FBYyxRQUFRLElBQUksU0FBVSxRQUFRLGFBQWE7QUFDaEYsZUFBTyxvQkFBb0IsT0FBTyxRQUFRLGFBQWEsV0FBVztBQUFBLE1BQ3BFLENBQUMsRUFBRSxPQUFPLFNBQVVHLG9CQUFtQjtBQUNyQyxlQUFPLFlBQVksT0FBT0Esa0JBQWlCO0FBQUEsTUFDN0MsQ0FBQztBQUNELGFBQU8sbUJBQW1CLFNBQVMsSUFBSTtBQUFBLFFBQ3JDLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxNQUNULElBQUk7QUFBQSxJQUNOO0FBQ0EsUUFBSSxvQkFBb0Isb0JBQW9CLE9BQU8sZUFBZSxhQUFhLGtCQUFrQjtBQUNqRyxXQUFPLFlBQVksT0FBTyxpQkFBaUIsSUFBSSxvQkFBb0I7QUFBQSxFQUNyRSxDQUFDLEVBQUUsT0FBTyxVQUFVO0FBQ3RCO0FBQ0EsU0FBUyw0Q0FBNEMsb0JBQW9CO0FBQ3ZFLFNBQU8sbUJBQW1CLE9BQU8sU0FBVSxvQkFBb0IsbUJBQW1CO0FBQ2hGLFFBQUksa0JBQWtCLFNBQVMsU0FBUztBQUN0Qyx5QkFBbUIsS0FBSyxNQUFNLG9CQUFvQixtQkFBbUIsa0JBQWtCLFFBQVEsSUFBSSxTQUFVLFFBQVE7QUFDbkgsZUFBTyxPQUFPO0FBQUEsTUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNMLE9BQU87QUFDTCx5QkFBbUIsS0FBSyxrQkFBa0IsSUFBSTtBQUFBLElBQ2hEO0FBQ0EsV0FBTztBQUFBLEVBQ1QsR0FBRyxDQUFDLENBQUM7QUFDUDtBQUNBLFNBQVMsNkJBQTZCLG9CQUFvQixVQUFVO0FBQ2xFLFNBQU8sbUJBQW1CLE9BQU8sU0FBVSxvQkFBb0IsbUJBQW1CO0FBQ2hGLFFBQUksa0JBQWtCLFNBQVMsU0FBUztBQUN0Qyx5QkFBbUIsS0FBSyxNQUFNLG9CQUFvQixtQkFBbUIsa0JBQWtCLFFBQVEsSUFBSSxTQUFVLFFBQVE7QUFDbkgsZUFBTztBQUFBLFVBQ0wsTUFBTSxPQUFPO0FBQUEsVUFDYixJQUFJLEdBQUcsT0FBTyxVQUFVLEdBQUcsRUFBRSxPQUFPLGtCQUFrQixPQUFPLEdBQUcsRUFBRSxPQUFPLE9BQU8sS0FBSztBQUFBLFFBQ3ZGO0FBQUEsTUFDRixDQUFDLENBQUMsQ0FBQztBQUFBLElBQ0wsT0FBTztBQUNMLHlCQUFtQixLQUFLO0FBQUEsUUFDdEIsTUFBTSxrQkFBa0I7QUFBQSxRQUN4QixJQUFJLEdBQUcsT0FBTyxVQUFVLEdBQUcsRUFBRSxPQUFPLGtCQUFrQixLQUFLO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPO0FBQUEsRUFDVCxHQUFHLENBQUMsQ0FBQztBQUNQO0FBQ0EsU0FBUyxzQkFBc0IsT0FBTyxhQUFhO0FBQ2pELFNBQU8sNENBQTRDLHdCQUF3QixPQUFPLFdBQVcsQ0FBQztBQUNoRztBQUNBLFNBQVMsWUFBWSxPQUFPLG1CQUFtQjtBQUM3QyxNQUFJLG9CQUFvQixNQUFNLFlBQzVCLGFBQWEsc0JBQXNCLFNBQVMsS0FBSztBQUNuRCxNQUFJLE9BQU8sa0JBQWtCLE1BQzNCLGFBQWEsa0JBQWtCLFlBQy9CLFFBQVEsa0JBQWtCLE9BQzFCLFFBQVEsa0JBQWtCO0FBQzVCLFVBQVEsQ0FBQywwQkFBMEIsS0FBSyxLQUFLLENBQUMsZUFBZSxjQUFjLE9BQU87QUFBQSxJQUNoRjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixHQUFHLFVBQVU7QUFDZjtBQUNBLFNBQVMsb0JBQW9CQyxRQUFPLGlCQUFpQjtBQUNuRCxNQUFJLGVBQWVBLE9BQU0sY0FDdkIsa0JBQWtCQSxPQUFNO0FBQzFCLE1BQUksbUJBQW1CLGdCQUFnQixRQUFRLFlBQVk7QUFDM0QsTUFBSSxtQkFBbUIsSUFBSTtBQUN6QixRQUFJLG1CQUFtQixnQkFBZ0IsUUFBUSxZQUFZO0FBQzNELFFBQUksbUJBQW1CLElBQUk7QUFFekIsYUFBTztBQUFBLElBQ1QsV0FBVyxtQkFBbUIsZ0JBQWdCLFFBQVE7QUFHcEQsYUFBTyxnQkFBZ0IsZ0JBQWdCO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBQ0EsU0FBUyxxQkFBcUJBLFFBQU9DLFVBQVM7QUFDNUMsTUFBSSxvQkFBb0JELE9BQU07QUFDOUIsU0FBTyxxQkFBcUJDLFNBQVEsUUFBUSxpQkFBaUIsSUFBSSxLQUFLLG9CQUFvQkEsU0FBUSxDQUFDO0FBQ3JHO0FBQ0EsSUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CLHlCQUF5QixlQUFlO0FBQzNGLE1BQUk7QUFDSixNQUFJLG1CQUFtQix3QkFBd0Isd0JBQXdCLEtBQUssU0FBVSxRQUFRO0FBQzVGLFdBQU8sT0FBTyxTQUFTO0FBQUEsRUFDekIsQ0FBQyxPQUFPLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0I7QUFDbEYsU0FBTyxtQkFBbUI7QUFDNUI7QUFDQSxJQUFJTCxrQkFBaUIsU0FBU0EsZ0JBQWUsT0FBTyxNQUFNO0FBQ3hELFNBQU8sTUFBTSxlQUFlLElBQUk7QUFDbEM7QUFDQSxJQUFJQyxrQkFBaUIsU0FBU0EsZ0JBQWUsT0FBTyxNQUFNO0FBQ3hELFNBQU8sTUFBTSxlQUFlLElBQUk7QUFDbEM7QUFDQSxTQUFTLGtCQUFrQixPQUFPLFFBQVEsYUFBYTtBQUNyRCxTQUFPLE9BQU8sTUFBTSxxQkFBcUIsYUFBYSxNQUFNLGlCQUFpQixRQUFRLFdBQVcsSUFBSTtBQUN0RztBQUNBLFNBQVMsa0JBQWtCLE9BQU8sUUFBUSxhQUFhO0FBQ3JELE1BQUksWUFBWSxRQUFRLE1BQU0sSUFBSTtBQUFJLFdBQU87QUFDN0MsTUFBSSxPQUFPLE1BQU0scUJBQXFCLFlBQVk7QUFDaEQsV0FBTyxNQUFNLGlCQUFpQixRQUFRLFdBQVc7QUFBQSxFQUNuRDtBQUNBLE1BQUksWUFBWUEsZ0JBQWUsT0FBTyxNQUFNO0FBQzVDLFNBQU8sWUFBWSxLQUFLLFNBQVVLLElBQUc7QUFDbkMsV0FBT0wsZ0JBQWUsT0FBT0ssRUFBQyxNQUFNO0FBQUEsRUFDdEMsQ0FBQztBQUNIO0FBQ0EsU0FBUyxjQUFjLE9BQU8sUUFBUSxZQUFZO0FBQ2hELFNBQU8sTUFBTSxlQUFlLE1BQU0sYUFBYSxRQUFRLFVBQVUsSUFBSTtBQUN2RTtBQUNBLElBQUksNEJBQTRCLFNBQVNDLDJCQUEwQixPQUFPO0FBQ3hFLE1BQUksc0JBQXNCLE1BQU0scUJBQzlCLFVBQVUsTUFBTTtBQUNsQixNQUFJLHdCQUF3QjtBQUFXLFdBQU87QUFDOUMsU0FBTztBQUNUO0FBQ0EsSUFBSSxhQUFhO0FBQ2pCLElBQUksU0FBc0IseUJBQVUsWUFBWTtBQUM5QyxZQUFVQyxTQUFRLFVBQVU7QUFDNUIsTUFBSSxTQUFTLGFBQWFBLE9BQU07QUFZaEMsV0FBU0EsUUFBTyxRQUFRO0FBQ3RCLFFBQUk7QUFDSixvQkFBZ0IsTUFBTUEsT0FBTTtBQUM1QixZQUFRLE9BQU8sS0FBSyxNQUFNLE1BQU07QUFDaEMsVUFBTSxRQUFRO0FBQUEsTUFDWixlQUFlO0FBQUEsTUFDZixlQUFlO0FBQUEsTUFDZixpQkFBaUI7QUFBQSxNQUNqQix5QkFBeUIsQ0FBQztBQUFBLE1BQzFCLGNBQWM7QUFBQSxNQUNkLGVBQWU7QUFBQSxNQUNmLFdBQVc7QUFBQSxNQUNYLGFBQWEsQ0FBQztBQUFBLE1BQ2QseUJBQXlCO0FBQUEsTUFDekIsZ0JBQWdCO0FBQUEsTUFDaEIsMEJBQTBCO0FBQUEsTUFDMUIsV0FBVztBQUFBLE1BQ1gsZ0JBQWdCO0FBQUEsSUFDbEI7QUFDQSxVQUFNLG1CQUFtQjtBQUN6QixVQUFNLGNBQWM7QUFDcEIsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sZ0JBQWdCO0FBQ3RCLFVBQU0sZ0JBQWdCO0FBQ3RCLFVBQU0saUJBQWlCO0FBQ3ZCLFVBQU0sZ0NBQWdDO0FBQ3RDLFVBQU0saUJBQWlCO0FBQ3ZCLFVBQU0sZ0JBQWdCLGNBQWM7QUFDcEMsVUFBTSxhQUFhO0FBQ25CLFVBQU0sZ0JBQWdCLFNBQVUsS0FBSztBQUNuQyxZQUFNLGFBQWE7QUFBQSxJQUNyQjtBQUNBLFVBQU0sbUJBQW1CO0FBQ3pCLFVBQU0sc0JBQXNCLFNBQVUsS0FBSztBQUN6QyxZQUFNLG1CQUFtQjtBQUFBLElBQzNCO0FBQ0EsVUFBTSxjQUFjO0FBQ3BCLFVBQU0saUJBQWlCLFNBQVUsS0FBSztBQUNwQyxZQUFNLGNBQWM7QUFBQSxJQUN0QjtBQUNBLFVBQU0sV0FBVztBQUNqQixVQUFNLGNBQWMsU0FBVSxLQUFLO0FBQ2pDLFlBQU0sV0FBVztBQUFBLElBQ25CO0FBQ0EsVUFBTSxRQUFRLE1BQU07QUFDcEIsVUFBTSxPQUFPLE1BQU07QUFDbkIsVUFBTSxXQUFXLFNBQVUsVUFBVSxZQUFZO0FBQy9DLFVBQUksY0FBYyxNQUFNLE9BQ3RCQyxZQUFXLFlBQVksVUFDdkIsT0FBTyxZQUFZO0FBQ3JCLGlCQUFXLE9BQU87QUFDbEIsWUFBTSxhQUFhLFVBQVUsVUFBVTtBQUN2QyxNQUFBQSxVQUFTLFVBQVUsVUFBVTtBQUFBLElBQy9CO0FBQ0EsVUFBTSxXQUFXLFNBQVUsVUFBVSxRQUFRLFFBQVE7QUFDbkQsVUFBSSxlQUFlLE1BQU0sT0FDdkIsb0JBQW9CLGFBQWEsbUJBQ2pDLFVBQVUsYUFBYSxTQUN2QixhQUFhLGFBQWE7QUFDNUIsWUFBTSxjQUFjLElBQUk7QUFBQSxRQUN0QixRQUFRO0FBQUEsUUFDUixnQkFBZ0I7QUFBQSxNQUNsQixDQUFDO0FBQ0QsVUFBSSxtQkFBbUI7QUFDckIsY0FBTSxTQUFTO0FBQUEsVUFDYiwwQkFBMEIsQ0FBQztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNLFlBQVk7QUFBQSxNQUNwQjtBQUVBLFlBQU0sU0FBUztBQUFBLFFBQ2IseUJBQXlCO0FBQUEsTUFDM0IsQ0FBQztBQUNELFlBQU0sU0FBUyxVQUFVO0FBQUEsUUFDdkI7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0sZUFBZSxTQUFVLFVBQVU7QUFDdkMsVUFBSSxlQUFlLE1BQU0sT0FDdkIsb0JBQW9CLGFBQWEsbUJBQ2pDLFVBQVUsYUFBYSxTQUN2QixPQUFPLGFBQWE7QUFDdEIsVUFBSSxjQUFjLE1BQU0sTUFBTTtBQUM5QixVQUFJLGFBQWEsV0FBVyxNQUFNLGlCQUFpQixVQUFVLFdBQVc7QUFDeEUsVUFBSSxhQUFhLE1BQU0saUJBQWlCLFVBQVUsV0FBVztBQUM3RCxVQUFJLFlBQVk7QUFDZCxZQUFJLFlBQVksTUFBTSxlQUFlLFFBQVE7QUFDN0MsY0FBTSxTQUFTLGtCQUFrQixZQUFZLE9BQU8sU0FBVUgsSUFBRztBQUMvRCxpQkFBTyxNQUFNLGVBQWVBLEVBQUMsTUFBTTtBQUFBLFFBQ3JDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixRQUFRO0FBQUEsTUFDbEMsV0FBVyxDQUFDLFlBQVk7QUFFdEIsWUFBSSxTQUFTO0FBQ1gsZ0JBQU0sU0FBUyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sbUJBQW1CLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLFFBQVE7QUFBQSxRQUNySCxPQUFPO0FBQ0wsZ0JBQU0sU0FBUyxtQkFBbUIsUUFBUSxHQUFHLGVBQWU7QUFBQSxRQUM5RDtBQUFBLE1BQ0YsT0FBTztBQUNMLGNBQU0sYUFBYSxtQkFBbUIsUUFBUSxHQUFHO0FBQUEsVUFDL0MsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFVBQ1I7QUFBQSxRQUNGLENBQUM7QUFDRDtBQUFBLE1BQ0Y7QUFDQSxVQUFJLG1CQUFtQjtBQUNyQixjQUFNLFVBQVU7QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFDQSxVQUFNLGNBQWMsU0FBVSxjQUFjO0FBQzFDLFVBQUksVUFBVSxNQUFNLE1BQU07QUFDMUIsVUFBSSxjQUFjLE1BQU0sTUFBTTtBQUM5QixVQUFJLFlBQVksTUFBTSxlQUFlLFlBQVk7QUFDakQsVUFBSSxnQkFBZ0IsWUFBWSxPQUFPLFNBQVVBLElBQUc7QUFDbEQsZUFBTyxNQUFNLGVBQWVBLEVBQUMsTUFBTTtBQUFBLE1BQ3JDLENBQUM7QUFDRCxVQUFJLFdBQVcsYUFBYSxTQUFTLGVBQWUsY0FBYyxDQUFDLEtBQUssSUFBSTtBQUM1RSxZQUFNLFNBQVMsVUFBVTtBQUFBLFFBQ3ZCLFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDRixDQUFDO0FBQ0QsWUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxVQUFNLGFBQWEsV0FBWTtBQUM3QixVQUFJLGNBQWMsTUFBTSxNQUFNO0FBQzlCLFlBQU0sU0FBUyxhQUFhLE1BQU0sTUFBTSxTQUFTLENBQUMsR0FBRyxJQUFJLEdBQUc7QUFBQSxRQUMxRCxRQUFRO0FBQUEsUUFDUixlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ0g7QUFDQSxVQUFNLFdBQVcsV0FBWTtBQUMzQixVQUFJLFVBQVUsTUFBTSxNQUFNO0FBQzFCLFVBQUksY0FBYyxNQUFNLE1BQU07QUFDOUIsVUFBSSxvQkFBb0IsWUFBWSxZQUFZLFNBQVMsQ0FBQztBQUMxRCxVQUFJLGdCQUFnQixZQUFZLE1BQU0sR0FBRyxZQUFZLFNBQVMsQ0FBQztBQUMvRCxVQUFJLFdBQVcsYUFBYSxTQUFTLGVBQWUsY0FBYyxDQUFDLEtBQUssSUFBSTtBQUM1RSxZQUFNLFNBQVMsVUFBVTtBQUFBLFFBQ3ZCLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxNQUNoQixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0scUJBQXFCLFNBQVUsZUFBZTtBQUNsRCxhQUFPLG1CQUFtQixNQUFNLE1BQU0seUJBQXlCLGFBQWE7QUFBQSxJQUM5RTtBQUNBLFVBQU0sNkJBQTZCLFdBQVk7QUFDN0MsYUFBTyw2QkFBNkIsd0JBQXdCLE1BQU0sT0FBTyxNQUFNLE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxRQUFRLENBQUM7QUFBQSxJQUNqSTtBQUNBLFVBQU0sV0FBVyxXQUFZO0FBQzNCLGFBQU8sTUFBTSxNQUFNO0FBQUEsSUFDckI7QUFDQSxVQUFNLEtBQUssV0FBWTtBQUNyQixlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFDQSxhQUFPLFdBQVcsTUFBTSxRQUFRLENBQUMsTUFBTSxNQUFNLGVBQWUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLElBQzVFO0FBQ0EsVUFBTSxpQkFBaUIsU0FBVSxNQUFNO0FBQ3JDLGFBQU9OLGdCQUFlLE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDekM7QUFDQSxVQUFNLGlCQUFpQixTQUFVLE1BQU07QUFDckMsYUFBT0MsZ0JBQWUsTUFBTSxPQUFPLElBQUk7QUFBQSxJQUN6QztBQUNBLFVBQU0sWUFBWSxTQUFVLEtBQUssT0FBTztBQUN0QyxVQUFJLFdBQVcsTUFBTSxNQUFNO0FBQzNCLFVBQUksT0FBTyxjQUFjLEdBQUcsRUFBRSxPQUFPLFFBQVE7QUFDN0MsV0FBSyxZQUFZO0FBQ2pCLFVBQUlTLFVBQVMsTUFBTSxNQUFNLE9BQU8sR0FBRztBQUNuQyxhQUFPQSxVQUFTQSxRQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsSUFDeEM7QUFDQSxVQUFNLGdCQUFnQixTQUFVLEtBQUssT0FBTztBQUMxQyxVQUFJLHVCQUF1QjtBQUMzQixjQUFRLHlCQUF5Qix5QkFBeUIsTUFBTSxNQUFNLFlBQVksR0FBRyxPQUFPLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsS0FBSyx3QkFBd0IsS0FBSztBQUFBLElBQzFNO0FBQ0EsVUFBTSxlQUFlLFNBQVUsU0FBUztBQUN0QyxhQUFPLEdBQUcsT0FBTyxNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxPQUFPLE9BQU87QUFBQSxJQUNsRTtBQUNBLFVBQU0sZ0JBQWdCLFdBQVk7QUFDaEMsYUFBTyxrQkFBa0IsTUFBTSxLQUFLO0FBQUEsSUFDdEM7QUFDQSxVQUFNLDBCQUEwQixXQUFZO0FBQzFDLGFBQU8sd0JBQXdCLE1BQU0sT0FBTyxNQUFNLE1BQU0sV0FBVztBQUFBLElBQ3JFO0FBQ0EsVUFBTSx3QkFBd0IsV0FBWTtBQUN4QyxhQUFPLE1BQU0sTUFBTSxhQUFhLE1BQU0sd0JBQXdCLElBQUksQ0FBQztBQUFBLElBQ3JFO0FBQ0EsVUFBTSx3QkFBd0IsV0FBWTtBQUN4QyxhQUFPLDRDQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQUEsSUFDcEY7QUFDQSxVQUFNLHNCQUFzQixXQUFZO0FBQ3RDLGFBQU8sTUFBTSxNQUFNLGFBQWEsTUFBTSxzQkFBc0IsSUFBSSxDQUFDO0FBQUEsSUFDbkU7QUFDQSxVQUFNLGVBQWUsU0FBVSxPQUFPLFlBQVk7QUFDaEQsWUFBTSxTQUFTO0FBQUEsUUFDYixlQUFlLGVBQWM7QUFBQSxVQUMzQjtBQUFBLFFBQ0YsR0FBRyxVQUFVO0FBQUEsTUFDZixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0sa0JBQWtCLFNBQVUsT0FBTztBQUN2QyxVQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCO0FBQUEsTUFDRjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sZUFBZTtBQUNyQixZQUFNLFdBQVc7QUFBQSxJQUNuQjtBQUNBLFVBQU0sa0JBQWtCLFNBQVUsT0FBTztBQUN2QyxZQUFNLG1CQUFtQjtBQUFBLElBQzNCO0FBQ0EsVUFBTSxxQkFBcUIsU0FBVSxPQUFPO0FBRTFDLFVBQUksTUFBTSxrQkFBa0I7QUFDMUI7QUFBQSxNQUNGO0FBQ0EsVUFBSSxrQkFBa0IsTUFBTSxNQUFNO0FBQ2xDLFVBQUksQ0FBQyxNQUFNLE1BQU0sV0FBVztBQUMxQixZQUFJLGlCQUFpQjtBQUNuQixnQkFBTSxpQkFBaUI7QUFBQSxRQUN6QjtBQUNBLGNBQU0sV0FBVztBQUFBLE1BQ25CLFdBQVcsQ0FBQyxNQUFNLE1BQU0sWUFBWTtBQUNsQyxZQUFJLGlCQUFpQjtBQUNuQixnQkFBTSxTQUFTLE9BQU87QUFBQSxRQUN4QjtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksTUFBTSxPQUFPLFlBQVksV0FBVyxNQUFNLE9BQU8sWUFBWSxZQUFZO0FBQzNFLGdCQUFNLFlBQVk7QUFBQSxRQUNwQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLE1BQU0sT0FBTyxZQUFZLFdBQVcsTUFBTSxPQUFPLFlBQVksWUFBWTtBQUMzRSxjQUFNLGVBQWU7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFDQSxVQUFNLCtCQUErQixTQUFVLE9BQU87QUFFcEQsVUFBSSxTQUFTLE1BQU0sU0FBUyxlQUFlLE1BQU0sV0FBVyxHQUFHO0FBQzdEO0FBQUEsTUFDRjtBQUNBLFVBQUksTUFBTSxNQUFNO0FBQVk7QUFDNUIsVUFBSSxlQUFlLE1BQU0sT0FDdkIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYTtBQUM1QixZQUFNLFdBQVc7QUFDakIsVUFBSSxZQUFZO0FBQ2QsY0FBTSxTQUFTO0FBQUEsVUFDYiwwQkFBMEIsQ0FBQztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNLFlBQVk7QUFBQSxNQUNwQixPQUFPO0FBQ0wsY0FBTSxTQUFTLE9BQU87QUFBQSxNQUN4QjtBQUNBLFlBQU0sZUFBZTtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSw0QkFBNEIsU0FBVSxPQUFPO0FBRWpELFVBQUksU0FBUyxNQUFNLFNBQVMsZUFBZSxNQUFNLFdBQVcsR0FBRztBQUM3RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFdBQVc7QUFDakIsWUFBTSxlQUFlO0FBQ3JCLFlBQU0saUJBQWlCO0FBQ3ZCLFVBQUksTUFBTSxTQUFTLFlBQVk7QUFDN0IsY0FBTSxXQUFXO0FBQUEsTUFDbkIsT0FBTztBQUNMLG1CQUFXLFdBQVk7QUFDckIsaUJBQU8sTUFBTSxXQUFXO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFNBQVUsT0FBTztBQUNoQyxVQUFJLE9BQU8sTUFBTSxNQUFNLHNCQUFzQixXQUFXO0FBQ3RELFlBQUksTUFBTSxrQkFBa0IsZUFBZSxrQkFBa0IsTUFBTSxNQUFNLEdBQUc7QUFDMUUsZ0JBQU0sTUFBTSxZQUFZO0FBQUEsUUFDMUI7QUFBQSxNQUNGLFdBQVcsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLFlBQVk7QUFDOUQsWUFBSSxNQUFNLE1BQU0sa0JBQWtCLEtBQUssR0FBRztBQUN4QyxnQkFBTSxNQUFNLFlBQVk7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxxQkFBcUIsV0FBWTtBQUNyQyxZQUFNLGNBQWM7QUFBQSxJQUN0QjtBQUNBLFVBQU0sbUJBQW1CLFdBQVk7QUFDbkMsWUFBTSxjQUFjO0FBQUEsSUFDdEI7QUFDQSxVQUFNLGVBQWUsU0FBVUMsUUFBTztBQUNwQyxVQUFJLFVBQVVBLE9BQU07QUFDcEIsVUFBSSxRQUFRLFdBQVcsUUFBUSxLQUFLLENBQUM7QUFDckMsVUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLE1BQ0Y7QUFDQSxZQUFNLGdCQUFnQixNQUFNO0FBQzVCLFlBQU0sZ0JBQWdCLE1BQU07QUFDNUIsWUFBTSxpQkFBaUI7QUFBQSxJQUN6QjtBQUNBLFVBQU0sY0FBYyxTQUFVQyxRQUFPO0FBQ25DLFVBQUksVUFBVUEsT0FBTTtBQUNwQixVQUFJLFFBQVEsV0FBVyxRQUFRLEtBQUssQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTztBQUNWO0FBQUEsTUFDRjtBQUNBLFVBQUksU0FBUyxLQUFLLElBQUksTUFBTSxVQUFVLE1BQU0sYUFBYTtBQUN6RCxVQUFJLFNBQVMsS0FBSyxJQUFJLE1BQU0sVUFBVSxNQUFNLGFBQWE7QUFDekQsVUFBSSxnQkFBZ0I7QUFDcEIsWUFBTSxpQkFBaUIsU0FBUyxpQkFBaUIsU0FBUztBQUFBLElBQzVEO0FBQ0EsVUFBTSxhQUFhLFNBQVUsT0FBTztBQUNsQyxVQUFJLE1BQU07QUFBZ0I7QUFLMUIsVUFBSSxNQUFNLGNBQWMsQ0FBQyxNQUFNLFdBQVcsU0FBUyxNQUFNLE1BQU0sS0FBSyxNQUFNLGVBQWUsQ0FBQyxNQUFNLFlBQVksU0FBUyxNQUFNLE1BQU0sR0FBRztBQUNsSSxjQUFNLFVBQVU7QUFBQSxNQUNsQjtBQUdBLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFDQSxVQUFNLG9CQUFvQixTQUFVLE9BQU87QUFDekMsVUFBSSxNQUFNO0FBQWdCO0FBQzFCLFlBQU0sbUJBQW1CLEtBQUs7QUFBQSxJQUNoQztBQUNBLFVBQU0sMkJBQTJCLFNBQVUsT0FBTztBQUNoRCxVQUFJLE1BQU07QUFBZ0I7QUFDMUIsWUFBTSwwQkFBMEIsS0FBSztBQUFBLElBQ3ZDO0FBQ0EsVUFBTSw4QkFBOEIsU0FBVSxPQUFPO0FBQ25ELFVBQUksTUFBTTtBQUFnQjtBQUMxQixZQUFNLDZCQUE2QixLQUFLO0FBQUEsSUFDMUM7QUFDQSxVQUFNLG9CQUFvQixTQUFVLE9BQU87QUFDekMsVUFBSSxpQkFBaUIsTUFBTSxNQUFNO0FBQ2pDLFVBQUksYUFBYSxNQUFNLGNBQWM7QUFDckMsWUFBTSxTQUFTO0FBQUEsUUFDYiwwQkFBMEI7QUFBQSxNQUM1QixDQUFDO0FBQ0QsWUFBTSxjQUFjLFlBQVk7QUFBQSxRQUM5QixRQUFRO0FBQUEsUUFDUjtBQUFBLE1BQ0YsQ0FBQztBQUNELFVBQUksQ0FBQyxNQUFNLE1BQU0sWUFBWTtBQUMzQixjQUFNLFdBQVc7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFDQSxVQUFNLGVBQWUsU0FBVSxPQUFPO0FBQ3BDLFVBQUksTUFBTSxNQUFNLFNBQVM7QUFDdkIsY0FBTSxNQUFNLFFBQVEsS0FBSztBQUFBLE1BQzNCO0FBQ0EsWUFBTSxTQUFTO0FBQUEsUUFDYiwwQkFBMEI7QUFBQSxRQUMxQixXQUFXO0FBQUEsTUFDYixDQUFDO0FBQ0QsVUFBSSxNQUFNLGtCQUFrQixNQUFNLE1BQU0saUJBQWlCO0FBQ3ZELGNBQU0sU0FBUyxPQUFPO0FBQUEsTUFDeEI7QUFDQSxZQUFNLGlCQUFpQjtBQUFBLElBQ3pCO0FBQ0EsVUFBTSxjQUFjLFNBQVUsT0FBTztBQUNuQyxVQUFJLGlCQUFpQixNQUFNLE1BQU07QUFDakMsVUFBSSxNQUFNLGVBQWUsTUFBTSxZQUFZLFNBQVMsU0FBUyxhQUFhLEdBQUc7QUFDM0UsY0FBTSxTQUFTLE1BQU07QUFDckI7QUFBQSxNQUNGO0FBQ0EsVUFBSSxNQUFNLE1BQU0sUUFBUTtBQUN0QixjQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUEsTUFDMUI7QUFDQSxZQUFNLGNBQWMsSUFBSTtBQUFBLFFBQ3RCLFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDRixDQUFDO0FBQ0QsWUFBTSxZQUFZO0FBQ2xCLFlBQU0sU0FBUztBQUFBLFFBQ2IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2IsQ0FBQztBQUFBLElBQ0g7QUFDQSxVQUFNLGdCQUFnQixTQUFVLGVBQWU7QUFDN0MsVUFBSSxNQUFNLG9CQUFvQixNQUFNLE1BQU0sa0JBQWtCLGVBQWU7QUFDekU7QUFBQSxNQUNGO0FBQ0EsVUFBSVIsV0FBVSxNQUFNLG9CQUFvQjtBQUN4QyxVQUFJLHFCQUFxQkEsU0FBUSxRQUFRLGFBQWE7QUFDdEQsWUFBTSxTQUFTO0FBQUEsUUFDYjtBQUFBLFFBQ0EsaUJBQWlCLHFCQUFxQixLQUFLLE1BQU0sbUJBQW1CLGFBQWEsSUFBSTtBQUFBLE1BQ3ZGLENBQUM7QUFBQSxJQUNIO0FBQ0EsVUFBTSw0QkFBNEIsV0FBWTtBQUM1QyxhQUFPLDBCQUEwQixNQUFNLEtBQUs7QUFBQSxJQUM5QztBQUNBLFVBQU0sb0JBQW9CLFNBQVVTLElBQUc7QUFDckMsTUFBQUEsR0FBRSxlQUFlO0FBQ2pCLE1BQUFBLEdBQUUsZ0JBQWdCO0FBQ2xCLFlBQU0sTUFBTTtBQUFBLElBQ2Q7QUFDQSxVQUFNLFlBQVksU0FBVSxPQUFPO0FBQ2pDLFVBQUksZUFBZSxNQUFNLE9BQ3ZCLFVBQVUsYUFBYSxTQUN2Qix3QkFBd0IsYUFBYSx1QkFDckMsb0JBQW9CLGFBQWEsbUJBQ2pDLGFBQWEsYUFBYSxZQUMxQixjQUFjLGFBQWEsYUFDM0IsYUFBYSxhQUFhLFlBQzFCLGFBQWEsYUFBYSxZQUMxQixZQUFZLGFBQWEsV0FDekIsa0JBQWtCLGFBQWEsaUJBQy9CLGtCQUFrQixhQUFhO0FBQ2pDLFVBQUksY0FBYyxNQUFNLE9BQ3RCLGdCQUFnQixZQUFZLGVBQzVCLGVBQWUsWUFBWSxjQUMzQixjQUFjLFlBQVk7QUFDNUIsVUFBSTtBQUFZO0FBQ2hCLFVBQUksT0FBTyxjQUFjLFlBQVk7QUFDbkMsa0JBQVUsS0FBSztBQUNmLFlBQUksTUFBTSxrQkFBa0I7QUFDMUI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLFlBQU0sbUJBQW1CO0FBQ3pCLGNBQVEsTUFBTSxLQUFLO0FBQUEsUUFDakIsS0FBSztBQUNILGNBQUksQ0FBQyxXQUFXO0FBQVk7QUFDNUIsZ0JBQU0sV0FBVyxVQUFVO0FBQzNCO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxDQUFDLFdBQVc7QUFBWTtBQUM1QixnQkFBTSxXQUFXLE1BQU07QUFDdkI7QUFBQSxRQUNGLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxjQUFJO0FBQVk7QUFDaEIsY0FBSSxjQUFjO0FBQ2hCLGtCQUFNLFlBQVksWUFBWTtBQUFBLFVBQ2hDLE9BQU87QUFDTCxnQkFBSSxDQUFDO0FBQXVCO0FBQzVCLGdCQUFJLFNBQVM7QUFDWCxvQkFBTSxTQUFTO0FBQUEsWUFDakIsV0FBVyxhQUFhO0FBQ3RCLG9CQUFNLFdBQVc7QUFBQSxZQUNuQjtBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksTUFBTTtBQUFhO0FBQ3ZCLGNBQUksTUFBTSxZQUFZLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDO0FBQUE7QUFBQSxVQUcxRCxtQkFBbUIsTUFBTSxpQkFBaUIsZUFBZSxXQUFXLEdBQUc7QUFDckU7QUFBQSxVQUNGO0FBQ0EsZ0JBQU0sYUFBYSxhQUFhO0FBQ2hDO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxNQUFNLFlBQVksS0FBSztBQUd6QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFlBQVk7QUFDZCxnQkFBSSxDQUFDO0FBQWU7QUFDcEIsZ0JBQUksTUFBTTtBQUFhO0FBQ3ZCLGtCQUFNLGFBQWEsYUFBYTtBQUNoQztBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksWUFBWTtBQUNkLGtCQUFNLFNBQVM7QUFBQSxjQUNiLDBCQUEwQjtBQUFBLFlBQzVCLENBQUM7QUFDRCxrQkFBTSxjQUFjLElBQUk7QUFBQSxjQUN0QixRQUFRO0FBQUEsY0FDUixnQkFBZ0I7QUFBQSxZQUNsQixDQUFDO0FBQ0Qsa0JBQU0sWUFBWTtBQUFBLFVBQ3BCLFdBQVcsZUFBZSxtQkFBbUI7QUFDM0Msa0JBQU0sV0FBVztBQUFBLFVBQ25CO0FBQ0E7QUFBQSxRQUNGLEtBQUs7QUFFSCxjQUFJLFlBQVk7QUFDZDtBQUFBLFVBQ0Y7QUFDQSxjQUFJLENBQUMsWUFBWTtBQUNmLGtCQUFNLFNBQVMsT0FBTztBQUN0QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLENBQUM7QUFBZTtBQUNwQixnQkFBTSxhQUFhLGFBQWE7QUFDaEM7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLFlBQVk7QUFDZCxrQkFBTSxZQUFZLElBQUk7QUFBQSxVQUN4QixPQUFPO0FBQ0wsa0JBQU0sU0FBUyxNQUFNO0FBQUEsVUFDdkI7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksWUFBWTtBQUNkLGtCQUFNLFlBQVksTUFBTTtBQUFBLFVBQzFCLE9BQU87QUFDTCxrQkFBTSxTQUFTLE9BQU87QUFBQSxVQUN4QjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxDQUFDO0FBQVk7QUFDakIsZ0JBQU0sWUFBWSxRQUFRO0FBQzFCO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxDQUFDO0FBQVk7QUFDakIsZ0JBQU0sWUFBWSxVQUFVO0FBQzVCO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxDQUFDO0FBQVk7QUFDakIsZ0JBQU0sWUFBWSxPQUFPO0FBQ3pCO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxDQUFDO0FBQVk7QUFDakIsZ0JBQU0sWUFBWSxNQUFNO0FBQ3hCO0FBQUEsUUFDRjtBQUNFO0FBQUEsTUFDSjtBQUNBLFlBQU0sZUFBZTtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSxNQUFNLGlCQUFpQixtQkFBbUIsTUFBTSxNQUFNLGNBQWMsRUFBRTtBQUM1RSxVQUFNLE1BQU0sY0FBYyxXQUFXLE9BQU8sS0FBSztBQUVqRCxRQUFJLE9BQU8sY0FBYyxNQUFNLE1BQU0sWUFBWSxRQUFRO0FBQ3ZELFVBQUksMEJBQTBCLE1BQU0sMkJBQTJCO0FBQy9ELFVBQUksbUJBQW1CLE1BQU0sc0JBQXNCO0FBQ25ELFVBQUksY0FBYyxpQkFBaUIsUUFBUSxNQUFNLE1BQU0sWUFBWSxDQUFDLENBQUM7QUFDckUsWUFBTSxNQUFNLDBCQUEwQjtBQUN0QyxZQUFNLE1BQU0sZ0JBQWdCLGlCQUFpQixXQUFXO0FBQ3hELFlBQU0sTUFBTSxrQkFBa0IsbUJBQW1CLHlCQUF5QixpQkFBaUIsV0FBVyxDQUFDO0FBQUEsSUFDekc7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLGVBQWFMLFNBQVEsQ0FBQztBQUFBLElBQ3BCLEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsV0FBSywwQkFBMEI7QUFDL0IsV0FBSyxzQkFBc0I7QUFDM0IsVUFBSSxLQUFLLE1BQU0scUJBQXFCLFlBQVksU0FBUyxrQkFBa0I7QUFFekUsaUJBQVMsaUJBQWlCLFVBQVUsS0FBSyxVQUFVLElBQUk7QUFBQSxNQUN6RDtBQUNBLFVBQUksS0FBSyxNQUFNLFdBQVc7QUFDeEIsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFHQSxVQUFJLEtBQUssTUFBTSxjQUFjLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxlQUFlLEtBQUssa0JBQWtCO0FBQ2xHLHVCQUFlLEtBQUssYUFBYSxLQUFLLGdCQUFnQjtBQUFBLE1BQ3hEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLG1CQUFtQixXQUFXO0FBQzVDLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGFBQWEsYUFBYSxZQUMxQixhQUFhLGFBQWE7QUFDNUIsVUFBSSxZQUFZLEtBQUssTUFBTTtBQUMzQjtBQUFBO0FBQUEsUUFFQSxhQUFhLENBQUMsY0FBYyxVQUFVO0FBQUEsUUFFdEMsYUFBYSxjQUFjLENBQUMsVUFBVTtBQUFBLFFBQVk7QUFDaEQsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFDQSxVQUFJLGFBQWEsY0FBYyxDQUFDLFVBQVUsWUFBWTtBQUdwRCxhQUFLLFNBQVM7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUNiLEdBQUcsS0FBSyxXQUFXO0FBQUEsTUFDckIsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUFjLFVBQVUsY0FBYyxLQUFLLGFBQWEsU0FBUyxlQUFlO0FBR3hHLGFBQUssU0FBUztBQUFBLFVBQ1osV0FBVztBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0g7QUFHQSxVQUFJLEtBQUssZUFBZSxLQUFLLG9CQUFvQixLQUFLLCtCQUErQjtBQUNuRix1QkFBZSxLQUFLLGFBQWEsS0FBSyxnQkFBZ0I7QUFDdEQsYUFBSyxnQ0FBZ0M7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsV0FBSyx5QkFBeUI7QUFDOUIsV0FBSyxxQkFBcUI7QUFDMUIsZUFBUyxvQkFBb0IsVUFBVSxLQUFLLFVBQVUsSUFBSTtBQUFBLElBQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsYUFBYTtBQUMzQixXQUFLLE1BQU0sV0FBVztBQUFBLElBQ3hCO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsY0FBYztBQUM1QixXQUFLLGNBQWMsSUFBSTtBQUFBLFFBQ3JCLFFBQVE7QUFBQSxRQUNSLGdCQUFnQixLQUFLLE1BQU07QUFBQSxNQUM3QixDQUFDO0FBQ0QsV0FBSyxNQUFNLFlBQVk7QUFBQSxJQUN6QjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLGNBQWMsVUFBVSxZQUFZO0FBQ2xELFdBQUssTUFBTSxjQUFjLFVBQVUsVUFBVTtBQUFBLElBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsYUFBYTtBQUMzQixVQUFJLENBQUMsS0FBSztBQUFVO0FBQ3BCLFdBQUssU0FBUyxNQUFNO0FBQUEsSUFDdEI7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxZQUFZO0FBQzFCLFVBQUksQ0FBQyxLQUFLO0FBQVU7QUFDcEIsV0FBSyxTQUFTLEtBQUs7QUFBQSxJQUNyQjtBQUFBO0FBQUEsRUFHRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsU0FBUyxhQUFhO0FBQ3BDLFVBQUksU0FBUztBQUNiLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGNBQWMsYUFBYSxhQUMzQixZQUFZLGFBQWE7QUFDM0IsVUFBSSxtQkFBbUIsS0FBSyxzQkFBc0I7QUFDbEQsVUFBSSxjQUFjLGdCQUFnQixVQUFVLElBQUksaUJBQWlCLFNBQVM7QUFDMUUsVUFBSSxDQUFDLEtBQUssTUFBTSxTQUFTO0FBQ3ZCLFlBQUksZ0JBQWdCLGlCQUFpQixRQUFRLFlBQVksQ0FBQyxDQUFDO0FBQzNELFlBQUksZ0JBQWdCLElBQUk7QUFDdEIsd0JBQWM7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFHQSxXQUFLLGdDQUFnQyxFQUFFLGFBQWEsS0FBSztBQUN6RCxXQUFLLFNBQVM7QUFBQSxRQUNaLDBCQUEwQjtBQUFBLFFBQzFCLGNBQWM7QUFBQSxRQUNkLGVBQWUsaUJBQWlCLFdBQVc7QUFBQSxRQUMzQyxpQkFBaUIsS0FBSyxtQkFBbUIsaUJBQWlCLFdBQVcsQ0FBQztBQUFBLE1BQ3hFLEdBQUcsV0FBWTtBQUNiLGVBQU8sT0FBTyxXQUFXO0FBQUEsTUFDM0IsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxXQUFXLFdBQVc7QUFDcEMsVUFBSSxlQUFlLEtBQUssT0FDdEIsY0FBYyxhQUFhLGFBQzNCLGVBQWUsYUFBYTtBQUc5QixVQUFJLENBQUMsS0FBSyxNQUFNO0FBQVM7QUFDekIsV0FBSyxTQUFTO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUNELFVBQUksZUFBZSxZQUFZLFFBQVEsWUFBWTtBQUNuRCxVQUFJLENBQUMsY0FBYztBQUNqQix1QkFBZTtBQUFBLE1BQ2pCO0FBQ0EsVUFBSSxZQUFZLFlBQVksU0FBUztBQUNyQyxVQUFJLFlBQVk7QUFDaEIsVUFBSSxDQUFDLFlBQVk7QUFBUTtBQUN6QixjQUFRLFdBQVc7QUFBQSxRQUNqQixLQUFLO0FBQ0gsY0FBSSxpQkFBaUIsR0FBRztBQUV0Qix3QkFBWTtBQUFBLFVBQ2QsV0FBVyxpQkFBaUIsSUFBSTtBQUU5Qix3QkFBWTtBQUFBLFVBQ2QsT0FBTztBQUNMLHdCQUFZLGVBQWU7QUFBQSxVQUM3QjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxlQUFlLE1BQU0sZUFBZSxXQUFXO0FBQ2pELHdCQUFZLGVBQWU7QUFBQSxVQUM3QjtBQUNBO0FBQUEsTUFDSjtBQUNBLFdBQUssU0FBUztBQUFBLFFBQ1osZUFBZSxjQUFjO0FBQUEsUUFDN0IsY0FBYyxZQUFZLFNBQVM7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLGNBQWM7QUFDNUIsVUFBSSxZQUFZLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFDcEYsVUFBSSxXQUFXLEtBQUssTUFBTTtBQUMxQixVQUFJLGdCQUFnQixLQUFLLE1BQU07QUFDL0IsVUFBSUosV0FBVSxLQUFLLG9CQUFvQjtBQUN2QyxVQUFJLENBQUNBLFNBQVE7QUFBUTtBQUNyQixVQUFJLFlBQVk7QUFDaEIsVUFBSSxlQUFlQSxTQUFRLFFBQVEsYUFBYTtBQUNoRCxVQUFJLENBQUMsZUFBZTtBQUNsQix1QkFBZTtBQUFBLE1BQ2pCO0FBQ0EsVUFBSSxjQUFjLE1BQU07QUFDdEIsb0JBQVksZUFBZSxJQUFJLGVBQWUsSUFBSUEsU0FBUSxTQUFTO0FBQUEsTUFDckUsV0FBVyxjQUFjLFFBQVE7QUFDL0IscUJBQWEsZUFBZSxLQUFLQSxTQUFRO0FBQUEsTUFDM0MsV0FBVyxjQUFjLFVBQVU7QUFDakMsb0JBQVksZUFBZTtBQUMzQixZQUFJLFlBQVk7QUFBRyxzQkFBWTtBQUFBLE1BQ2pDLFdBQVcsY0FBYyxZQUFZO0FBQ25DLG9CQUFZLGVBQWU7QUFDM0IsWUFBSSxZQUFZQSxTQUFRLFNBQVM7QUFBRyxzQkFBWUEsU0FBUSxTQUFTO0FBQUEsTUFDbkUsV0FBVyxjQUFjLFFBQVE7QUFDL0Isb0JBQVlBLFNBQVEsU0FBUztBQUFBLE1BQy9CO0FBQ0EsV0FBSyxnQ0FBZ0M7QUFDckMsV0FBSyxTQUFTO0FBQUEsUUFDWixlQUFlQSxTQUFRLFNBQVM7QUFBQSxRQUNoQyxjQUFjO0FBQUEsUUFDZCxpQkFBaUIsS0FBSyxtQkFBbUJBLFNBQVEsU0FBUyxDQUFDO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLQSxTQUFTLFdBQVc7QUFFbEIsWUFBSSxDQUFDLEtBQUssTUFBTSxPQUFPO0FBQ3JCLGlCQUFPO0FBQUEsUUFDVDtBQUlBLFlBQUksT0FBTyxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzFDLGlCQUFPLEtBQUssTUFBTSxNQUFNLFlBQVk7QUFBQSxRQUN0QztBQUdBLGVBQU8sZUFBYyxlQUFjLENBQUMsR0FBRyxZQUFZLEdBQUcsS0FBSyxNQUFNLEtBQUs7QUFBQSxNQUN4RTtBQUFBO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsaUJBQWlCO0FBQy9CLFVBQUksYUFBYSxLQUFLLFlBQ3BCLEtBQUssS0FBSyxJQUNWLFlBQVksS0FBSyxXQUNqQixnQkFBZ0IsS0FBSyxlQUNyQixXQUFXLEtBQUssVUFDaEIsZUFBZSxLQUFLLGNBQ3BCLFdBQVcsS0FBSyxVQUNoQixRQUFRLEtBQUs7QUFDZixVQUFJLFVBQVUsTUFBTSxTQUNsQixRQUFRLE1BQU0sT0FDZEEsV0FBVSxNQUFNO0FBQ2xCLFVBQUksV0FBVyxLQUFLLFNBQVM7QUFDN0IsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFTQTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiO0FBQUEsUUFDQSxPQUFPLEtBQUssU0FBUztBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLFdBQVc7QUFDekIsVUFBSSxjQUFjLEtBQUssTUFBTTtBQUM3QixhQUFPLFlBQVksU0FBUztBQUFBLElBQzlCO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsYUFBYTtBQUMzQixhQUFPLENBQUMsQ0FBQyxLQUFLLG9CQUFvQixFQUFFO0FBQUEsSUFDdEM7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxjQUFjO0FBQzVCLFVBQUksZUFBZSxLQUFLLE9BQ3RCVSxlQUFjLGFBQWEsYUFDM0IsVUFBVSxhQUFhO0FBSXpCLFVBQUlBLGlCQUFnQjtBQUFXLGVBQU87QUFDdEMsYUFBT0E7QUFBQSxJQUNUO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVNDLGtCQUFpQixRQUFRLGFBQWE7QUFDcEQsYUFBTyxrQkFBa0IsS0FBSyxPQUFPLFFBQVEsV0FBVztBQUFBLElBQzFEO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsaUJBQWlCLFFBQVEsYUFBYTtBQUNwRCxhQUFPLGtCQUFrQixLQUFLLE9BQU8sUUFBUSxXQUFXO0FBQUEsSUFDMUQ7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxhQUFhLFFBQVEsWUFBWTtBQUMvQyxhQUFPLGNBQWMsS0FBSyxPQUFPLFFBQVEsVUFBVTtBQUFBLElBQ3JEO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsa0JBQWtCLE1BQU0sU0FBUztBQUMvQyxVQUFJLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixZQUFZO0FBQ3RELFlBQUksY0FBYyxLQUFLLE1BQU07QUFDN0IsWUFBSSxlQUFlLEtBQUssTUFBTTtBQUM5QixlQUFPLEtBQUssTUFBTSxrQkFBa0IsTUFBTTtBQUFBLFVBQ3hDO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixhQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBTyxLQUFLLGVBQWUsSUFBSTtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTQyxrQkFBaUIsTUFBTTtBQUNyQyxhQUFPLEtBQUssTUFBTSxpQkFBaUIsSUFBSTtBQUFBLElBQ3pDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0EsU0FBUyw0QkFBNEI7QUFDbkMsWUFBSSxZQUFZLFNBQVMsa0JBQWtCO0FBQ3pDLG1CQUFTLGlCQUFpQixvQkFBb0IsS0FBSyxvQkFBb0IsS0FBSztBQUM1RSxtQkFBUyxpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLEtBQUs7QUFBQSxRQUMxRTtBQUFBLE1BQ0Y7QUFBQTtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLDJCQUEyQjtBQUN6QyxVQUFJLFlBQVksU0FBUyxxQkFBcUI7QUFDNUMsaUJBQVMsb0JBQW9CLG9CQUFvQixLQUFLLGtCQUFrQjtBQUN4RSxpQkFBUyxvQkFBb0Isa0JBQWtCLEtBQUssZ0JBQWdCO0FBQUEsTUFDdEU7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0EsU0FBUyx3QkFBd0I7QUFDL0IsWUFBSSxZQUFZLFNBQVMsa0JBQWtCO0FBQ3pDLG1CQUFTLGlCQUFpQixjQUFjLEtBQUssY0FBYyxLQUFLO0FBQ2hFLG1CQUFTLGlCQUFpQixhQUFhLEtBQUssYUFBYSxLQUFLO0FBQzlELG1CQUFTLGlCQUFpQixZQUFZLEtBQUssWUFBWSxLQUFLO0FBQUEsUUFDOUQ7QUFBQSxNQUNGO0FBQUE7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsVUFBSSxZQUFZLFNBQVMscUJBQXFCO0FBQzVDLGlCQUFTLG9CQUFvQixjQUFjLEtBQUssWUFBWTtBQUM1RCxpQkFBUyxvQkFBb0IsYUFBYSxLQUFLLFdBQVc7QUFDMUQsaUJBQVMsb0JBQW9CLFlBQVksS0FBSyxVQUFVO0FBQUEsTUFDMUQ7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSUEsU0FBUyxjQUFjO0FBQ3JCLFlBQUksZUFBZSxLQUFLLE9BQ3RCLGFBQWEsYUFBYSxZQUMxQixlQUFlLGFBQWEsY0FDNUIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYSxZQUMxQixXQUFXLGFBQWEsVUFDeEIsT0FBTyxhQUFhLE1BQ3BCLGFBQWEsYUFBYSxZQUMxQixXQUFXLGFBQWE7QUFDMUIsWUFBSSxzQkFBc0IsS0FBSyxjQUFjLEdBQzNDQyxTQUFRLG9CQUFvQjtBQUM5QixZQUFJLGVBQWUsS0FBSyxPQUN0QixnQkFBZ0IsYUFBYSxlQUM3QixnQkFBZ0IsYUFBYTtBQUMvQixZQUFJLGNBQWMsS0FBSztBQUN2QixZQUFJLEtBQUssV0FBVyxLQUFLLGFBQWEsT0FBTztBQUc3QyxZQUFJLGlCQUFpQixlQUFjLGVBQWMsZUFBYztBQUFBLFVBQzdELHFCQUFxQjtBQUFBLFVBQ3JCLGlCQUFpQjtBQUFBLFVBQ2pCLGlCQUFpQjtBQUFBLFVBQ2pCLHFCQUFxQixLQUFLLE1BQU0sbUJBQW1CO0FBQUEsVUFDbkQsZ0JBQWdCLEtBQUssTUFBTSxjQUFjO0FBQUEsVUFDekMsY0FBYyxLQUFLLE1BQU0sWUFBWTtBQUFBLFVBQ3JDLG1CQUFtQixLQUFLLE1BQU0saUJBQWlCO0FBQUEsVUFDL0MsaUJBQWlCO0FBQUEsVUFDakIsTUFBTTtBQUFBLFVBQ04seUJBQXlCLEtBQUssZ0JBQWdCLFNBQVksS0FBSyxNQUFNLG1CQUFtQjtBQUFBLFFBQzFGLEdBQUcsY0FBYztBQUFBLFVBQ2YsaUJBQWlCLEtBQUssYUFBYSxTQUFTO0FBQUEsUUFDOUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO0FBQUEsVUFDbkIsaUJBQWlCO0FBQUEsUUFDbkIsQ0FBQyxHQUFHLEtBQUssU0FBUyxLQUFLLGtCQUFrQixRQUFRLGtCQUFrQixTQUFTLFNBQVMsY0FBYyxZQUFZLHlCQUF5QjtBQUFBLFVBQ3RJLG9CQUFvQixLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ3JELElBQUk7QUFBQSxVQUNGLG9CQUFvQixLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ3JELENBQUM7QUFDRCxZQUFJLENBQUMsY0FBYztBQUVqQixpQkFBb0IsZ0JBQU0sRUFBYyxZQUFZLFNBQVM7QUFBQSxZQUMzRDtBQUFBLFlBQ0EsVUFBVSxLQUFLO0FBQUEsWUFDZixRQUFRLEtBQUs7QUFBQSxZQUNiLFVBQVU7QUFBQSxZQUNWLFNBQVMsS0FBSztBQUFBLFlBQ2QsVUFBVTtBQUFBLFlBQ1Y7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQSxPQUFPO0FBQUEsVUFDVCxHQUFHLGNBQWMsQ0FBQztBQUFBLFFBQ3BCO0FBQ0EsZUFBb0IsZ0JBQU0sRUFBY0EsUUFBTyxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsVUFDdkUsZ0JBQWdCO0FBQUEsVUFDaEIsY0FBYztBQUFBLFVBQ2QsYUFBYTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFVBQVUsS0FBSztBQUFBLFVBQ2Y7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFFBQVEsS0FBSztBQUFBLFVBQ2IsVUFBVSxLQUFLO0FBQUEsVUFDZixTQUFTLEtBQUs7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaO0FBQUEsVUFDQTtBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1QsR0FBRyxjQUFjLENBQUM7QUFBQSxNQUNwQjtBQUFBO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsMkJBQTJCO0FBQ3pDLFVBQUksU0FBUztBQUNiLFVBQUksdUJBQXVCLEtBQUssY0FBYyxHQUM1Q0MsY0FBYSxxQkFBcUIsWUFDbENDLHVCQUFzQixxQkFBcUIscUJBQzNDQyxtQkFBa0IscUJBQXFCLGlCQUN2Q0Msb0JBQW1CLHFCQUFxQixrQkFDeENDLGVBQWMscUJBQXFCLGFBQ25DQyxlQUFjLHFCQUFxQjtBQUNyQyxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGVBQWUsS0FBSyxPQUN0QiwyQkFBMkIsYUFBYSwwQkFDeEMsYUFBYSxhQUFhLFlBQzFCLFVBQVUsYUFBYSxTQUN2QixhQUFhLGFBQWEsWUFDMUIsY0FBYyxhQUFhO0FBQzdCLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGNBQWMsYUFBYSxhQUMzQixlQUFlLGFBQWEsY0FDNUIsWUFBWSxhQUFhO0FBQzNCLFVBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxDQUFDLDBCQUEwQjtBQUNqRCxlQUFPLGFBQWEsT0FBb0IsZ0JBQU0sRUFBY0EsY0FBYSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsVUFDakcsS0FBSztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDVixJQUFJLEtBQUssYUFBYSxhQUFhO0FBQUEsVUFDckM7QUFBQSxRQUNGLENBQUMsR0FBRyxXQUFXO0FBQUEsTUFDakI7QUFDQSxVQUFJLFNBQVM7QUFDWCxlQUFPLFlBQVksSUFBSSxTQUFVQyxNQUFLekIsUUFBTztBQUMzQyxjQUFJLGtCQUFrQnlCLFNBQVE7QUFDOUIsY0FBSSxNQUFNLEdBQUcsT0FBTyxPQUFPLGVBQWVBLElBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxPQUFPLGVBQWVBLElBQUcsQ0FBQztBQUN0RixpQkFBb0IsZ0JBQU0sRUFBY04sYUFBWSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsWUFDNUUsWUFBWTtBQUFBLGNBQ1YsV0FBV0M7QUFBQSxjQUNYLE9BQU9DO0FBQUEsY0FDUCxRQUFRQztBQUFBLFlBQ1Y7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0EsT0FBT3RCO0FBQUEsWUFDUCxhQUFhO0FBQUEsY0FDWCxTQUFTLFNBQVMsVUFBVTtBQUMxQix1QkFBTyxPQUFPLFlBQVl5QixJQUFHO0FBQUEsY0FDL0I7QUFBQSxjQUNBLFlBQVksU0FBUyxhQUFhO0FBQ2hDLHVCQUFPLE9BQU8sWUFBWUEsSUFBRztBQUFBLGNBQy9CO0FBQUEsY0FDQSxhQUFhLFNBQVMsWUFBWVgsSUFBRztBQUNuQyxnQkFBQUEsR0FBRSxlQUFlO0FBQUEsY0FDbkI7QUFBQSxZQUNGO0FBQUEsWUFDQSxNQUFNVztBQUFBLFVBQ1IsQ0FBQyxHQUFHLE9BQU8sa0JBQWtCQSxNQUFLLE9BQU8sQ0FBQztBQUFBLFFBQzVDLENBQUM7QUFBQSxNQUNIO0FBQ0EsVUFBSSxZQUFZO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLGNBQWMsWUFBWSxDQUFDO0FBQy9CLGFBQW9CLGdCQUFNLEVBQWNGLGNBQWEsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQzdFLE1BQU07QUFBQSxRQUNOO0FBQUEsTUFDRixDQUFDLEdBQUcsS0FBSyxrQkFBa0IsYUFBYSxPQUFPLENBQUM7QUFBQSxJQUNsRDtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxVQUFJLHVCQUF1QixLQUFLLGNBQWMsR0FDNUNHLGtCQUFpQixxQkFBcUI7QUFDeEMsVUFBSSxjQUFjLEtBQUs7QUFDdkIsVUFBSSxnQkFBZ0IsS0FBSyxPQUN2QixhQUFhLGNBQWMsWUFDM0IsWUFBWSxjQUFjO0FBQzVCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsVUFBSSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUNBLG1CQUFrQixjQUFjLENBQUMsS0FBSyxTQUFTLEtBQUssV0FBVztBQUN6RixlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksYUFBYTtBQUFBLFFBQ2YsYUFBYSxLQUFLO0FBQUEsUUFDbEIsWUFBWSxLQUFLO0FBQUEsUUFDakIsZUFBZTtBQUFBLE1BQ2pCO0FBQ0EsYUFBb0IsZ0JBQU0sRUFBY0EsaUJBQWdCLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNoRjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyx5QkFBeUI7QUFDdkMsVUFBSSx1QkFBdUIsS0FBSyxjQUFjLEdBQzVDQyxvQkFBbUIscUJBQXFCO0FBQzFDLFVBQUksY0FBYyxLQUFLO0FBQ3ZCLFVBQUksZ0JBQWdCLEtBQUssT0FDdkIsYUFBYSxjQUFjLFlBQzNCLFlBQVksY0FBYztBQUM1QixVQUFJLFlBQVksS0FBSyxNQUFNO0FBQzNCLFVBQUksQ0FBQ0EscUJBQW9CLENBQUM7QUFBVyxlQUFPO0FBQzVDLFVBQUksYUFBYTtBQUFBLFFBQ2YsZUFBZTtBQUFBLE1BQ2pCO0FBQ0EsYUFBb0IsZ0JBQU0sRUFBY0EsbUJBQWtCLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNsRjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDLENBQUM7QUFBQSxJQUNKO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsMkJBQTJCO0FBQ3pDLFVBQUksdUJBQXVCLEtBQUssY0FBYyxHQUM1Q0MscUJBQW9CLHFCQUFxQixtQkFDekNDLHNCQUFxQixxQkFBcUI7QUFHNUMsVUFBSSxDQUFDRCxzQkFBcUIsQ0FBQ0M7QUFBb0IsZUFBTztBQUN0RCxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGFBQWEsS0FBSyxNQUFNO0FBQzVCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsYUFBb0IsZ0JBQU0sRUFBY0EscUJBQW9CLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNwRjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUywwQkFBMEI7QUFDeEMsVUFBSSx1QkFBdUIsS0FBSyxjQUFjLEdBQzVDRCxxQkFBb0IscUJBQXFCO0FBQzNDLFVBQUksQ0FBQ0E7QUFBbUIsZUFBTztBQUMvQixVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGFBQWEsS0FBSyxNQUFNO0FBQzVCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsVUFBSSxhQUFhO0FBQUEsUUFDZixhQUFhLEtBQUs7QUFBQSxRQUNsQixZQUFZLEtBQUs7QUFBQSxRQUNqQixlQUFlO0FBQUEsTUFDakI7QUFDQSxhQUFvQixnQkFBTSxFQUFjQSxvQkFBbUIsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQ25GO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxhQUFhO0FBQzNCLFVBQUksU0FBUztBQUNiLFVBQUksdUJBQXVCLEtBQUssY0FBYyxHQUM1Q0UsU0FBUSxxQkFBcUIsT0FDN0JDLGdCQUFlLHFCQUFxQixjQUNwQ0MsUUFBTyxxQkFBcUIsTUFDNUJDLFlBQVcscUJBQXFCLFVBQ2hDQyxjQUFhLHFCQUFxQixZQUNsQ0Msa0JBQWlCLHFCQUFxQixnQkFDdENDLG9CQUFtQixxQkFBcUIsa0JBQ3hDQyxVQUFTLHFCQUFxQjtBQUNoQyxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGdCQUFnQixLQUFLLE1BQU07QUFDL0IsVUFBSSxnQkFBZ0IsS0FBSyxPQUN2QixvQkFBb0IsY0FBYyxtQkFDbEMsYUFBYSxjQUFjLFlBQzNCLFlBQVksY0FBYyxXQUMxQkMsa0JBQWlCLGNBQWMsZ0JBQy9CLGdCQUFnQixjQUFjLGVBQzlCLGdCQUFnQixjQUFjLGVBQzlCLGFBQWEsY0FBYyxZQUMzQixnQkFBZ0IsY0FBYyxlQUM5QixlQUFlLGNBQWMsY0FDN0IsbUJBQW1CLGNBQWMsa0JBQ2pDLHdCQUF3QixjQUFjLHVCQUN0QywyQkFBMkIsY0FBYywwQkFDekNDLG9CQUFtQixjQUFjLGtCQUNqQyxvQkFBb0IsY0FBYyxtQkFDbEMsdUJBQXVCLGNBQWM7QUFDdkMsVUFBSSxDQUFDO0FBQVksZUFBTztBQUd4QixVQUFJQyxVQUFTLFNBQVNBLFFBQU8sT0FBTyxJQUFJO0FBQ3RDLFlBQUksT0FBTyxNQUFNLE1BQ2YsT0FBTyxNQUFNLE1BQ2IsYUFBYSxNQUFNLFlBQ25CLGFBQWEsTUFBTSxZQUNuQixRQUFRLE1BQU0sT0FDZCxRQUFRLE1BQU07QUFDaEIsWUFBSSxZQUFZLGtCQUFrQjtBQUNsQyxZQUFJLFVBQVUsYUFBYSxTQUFZLFdBQVk7QUFDakQsaUJBQU8sT0FBTyxjQUFjLElBQUk7QUFBQSxRQUNsQztBQUNBLFlBQUksV0FBVyxhQUFhLFNBQVksV0FBWTtBQUNsRCxpQkFBTyxPQUFPLGFBQWEsSUFBSTtBQUFBLFFBQ2pDO0FBQ0EsWUFBSSxXQUFXLEdBQUcsT0FBTyxPQUFPLGFBQWEsUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDdEUsWUFBSSxhQUFhO0FBQUEsVUFDZixJQUFJO0FBQUEsVUFDSixTQUFTO0FBQUEsVUFDVCxhQUFhO0FBQUEsVUFDYixhQUFhO0FBQUEsVUFDYixVQUFVO0FBQUEsVUFDVixNQUFNO0FBQUEsVUFDTixpQkFBaUIsT0FBTyxnQkFBZ0IsU0FBWTtBQUFBO0FBQUEsUUFDdEQ7QUFFQSxlQUFvQixnQkFBTSxFQUFjSCxTQUFRLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxVQUN4RTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBSztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQVUsWUFBWSxPQUFPLHNCQUFzQjtBQUFBLFFBQ3JELENBQUMsR0FBRyxPQUFPLGtCQUFrQixNQUFNLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDbEQ7QUFDQSxVQUFJO0FBQ0osVUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixpQkFBUyxLQUFLLHNCQUFzQixFQUFFLElBQUksU0FBVSxNQUFNO0FBQ3hELGNBQUksS0FBSyxTQUFTLFNBQVM7QUFDekIsZ0JBQUksUUFBUSxLQUFLLE1BQ2ZoQyxXQUFVLEtBQUssU0FDZixhQUFhLEtBQUs7QUFDcEIsZ0JBQUksVUFBVSxHQUFHLE9BQU8sT0FBTyxhQUFhLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxVQUFVO0FBQzVFLGdCQUFJLFlBQVksR0FBRyxPQUFPLFNBQVMsVUFBVTtBQUM3QyxtQkFBb0IsZ0JBQU0sRUFBY3lCLFFBQU8sU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLGNBQ3ZFLEtBQUs7QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFNBQVN6QjtBQUFBLGNBQ1QsU0FBUzBCO0FBQUEsY0FDVCxjQUFjO0FBQUEsZ0JBQ1osSUFBSTtBQUFBLGdCQUNKLE1BQU0sS0FBSztBQUFBLGNBQ2I7QUFBQSxjQUNBLE9BQU8sT0FBTyxpQkFBaUIsS0FBSyxJQUFJO0FBQUEsWUFDMUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLFNBQVUsUUFBUTtBQUNyQyxxQkFBT1MsUUFBTyxRQUFRLEdBQUcsT0FBTyxZQUFZLEdBQUcsRUFBRSxPQUFPLE9BQU8sS0FBSyxDQUFDO0FBQUEsWUFDdkUsQ0FBQyxDQUFDO0FBQUEsVUFDSixXQUFXLEtBQUssU0FBUyxVQUFVO0FBQ2pDLG1CQUFPQSxRQUFPLE1BQU0sR0FBRyxPQUFPLEtBQUssS0FBSyxDQUFDO0FBQUEsVUFDM0M7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFdBQVcsV0FBVztBQUNwQixZQUFJLFVBQVVGLGdCQUFlO0FBQUEsVUFDM0I7QUFBQSxRQUNGLENBQUM7QUFDRCxZQUFJLFlBQVk7QUFBTSxpQkFBTztBQUM3QixpQkFBc0IsZ0JBQU0sRUFBY0gsaUJBQWdCLGFBQWEsT0FBTztBQUFBLE1BQ2hGLE9BQU87QUFDTCxZQUFJLFdBQVdJLGtCQUFpQjtBQUFBLFVBQzlCO0FBQUEsUUFDRixDQUFDO0FBQ0QsWUFBSSxhQUFhO0FBQU0saUJBQU87QUFDOUIsaUJBQXNCLGdCQUFNLEVBQWNILG1CQUFrQixhQUFhLFFBQVE7QUFBQSxNQUNuRjtBQUNBLFVBQUkscUJBQXFCO0FBQUEsUUFDdkI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUNBLFVBQUksY0FBMkIsZ0JBQU0sRUFBYyxZQUFZLFNBQVMsQ0FBQyxHQUFHLGFBQWEsa0JBQWtCLEdBQUcsU0FBVSxPQUFPO0FBQzdILFlBQUksTUFBTSxNQUFNLEtBQ2Qsb0JBQW9CLE1BQU0sYUFDMUIsWUFBWSxrQkFBa0IsV0FDOUIsWUFBWSxrQkFBa0I7QUFDaEMsZUFBb0IsZ0JBQU0sRUFBY0osT0FBTSxTQUFTLENBQUMsR0FBRyxhQUFhLG9CQUFvQjtBQUFBLFVBQzFGLFVBQVU7QUFBQSxVQUNWLFlBQVk7QUFBQSxZQUNWLGFBQWEsT0FBTztBQUFBLFlBQ3BCLGFBQWEsT0FBTztBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUMsR0FBZ0IsZ0JBQU0sRUFBYyxlQUFlO0FBQUEsVUFDbEQsZ0JBQWdCO0FBQUEsVUFDaEIsYUFBYTtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsYUFBYTtBQUFBLFFBQ2YsR0FBRyxTQUFVLGlCQUFpQjtBQUM1QixpQkFBb0IsZ0JBQU0sRUFBY0MsV0FBVSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsWUFDMUUsVUFBVSxTQUFTLFNBQVMsVUFBVTtBQUNwQyxxQkFBTyxlQUFlLFFBQVE7QUFDOUIsOEJBQWdCLFFBQVE7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsWUFBWTtBQUFBLGNBQ1YsTUFBTTtBQUFBLGNBQ04sd0JBQXdCLFlBQVk7QUFBQSxjQUNwQyxJQUFJLE9BQU8sYUFBYSxTQUFTO0FBQUEsWUFDbkM7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGLENBQUMsR0FBRyxNQUFNO0FBQUEsUUFDWixDQUFDLENBQUM7QUFBQSxNQUNKLENBQUM7QUFLRCxhQUFPLG9CQUFvQixpQkFBaUIsVUFBdUIsZ0JBQU0sRUFBY0MsYUFBWSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDM0gsVUFBVTtBQUFBLFFBQ1YsZ0JBQWdCLEtBQUs7QUFBQSxRQUNyQjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsR0FBRyxXQUFXLElBQUk7QUFBQSxJQUNyQjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLGtCQUFrQjtBQUNoQyxVQUFJLFNBQVM7QUFDYixVQUFJLGdCQUFnQixLQUFLLE9BQ3ZCTyxhQUFZLGNBQWMsV0FDMUIsYUFBYSxjQUFjLFlBQzNCLFVBQVUsY0FBYyxTQUN4QixPQUFPLGNBQWMsTUFDckIsV0FBVyxjQUFjO0FBQzNCLFVBQUksY0FBYyxLQUFLLE1BQU07QUFDN0IsVUFBSSxZQUFZLENBQUMsS0FBSyxTQUFTLEtBQUssQ0FBQyxZQUFZO0FBQy9DLGVBQW9CLGdCQUFNLEVBQWMsaUJBQWlCO0FBQUEsVUFDdkQ7QUFBQSxVQUNBLFNBQVMsS0FBSztBQUFBLFFBQ2hCLENBQUM7QUFBQSxNQUNIO0FBQ0EsVUFBSSxDQUFDLFFBQVE7QUFBWTtBQUN6QixVQUFJLFNBQVM7QUFDWCxZQUFJQSxZQUFXO0FBQ2IsY0FBSSxRQUFRLFlBQVksSUFBSSxTQUFVaEIsTUFBSztBQUN6QyxtQkFBTyxPQUFPLGVBQWVBLElBQUc7QUFBQSxVQUNsQyxDQUFDLEVBQUUsS0FBS2dCLFVBQVM7QUFDakIsaUJBQW9CLGdCQUFNLEVBQWMsU0FBUztBQUFBLFlBQy9DO0FBQUEsWUFDQSxNQUFNO0FBQUEsWUFDTjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsT0FBTztBQUNMLGNBQUlDLFNBQVEsWUFBWSxTQUFTLElBQUksWUFBWSxJQUFJLFNBQVVqQixNQUFLbEIsSUFBRztBQUNyRSxtQkFBb0IsZ0JBQU0sRUFBYyxTQUFTO0FBQUEsY0FDL0MsS0FBSyxLQUFLLE9BQU9BLEVBQUM7QUFBQSxjQUNsQjtBQUFBLGNBQ0EsTUFBTTtBQUFBLGNBQ04sT0FBTyxPQUFPLGVBQWVrQixJQUFHO0FBQUEsWUFDbEMsQ0FBQztBQUFBLFVBQ0gsQ0FBQyxJQUFpQixnQkFBTSxFQUFjLFNBQVM7QUFBQSxZQUM3QztBQUFBLFlBQ0EsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFVBQ1QsQ0FBQztBQUNELGlCQUFvQixnQkFBTSxFQUFjLE9BQU8sTUFBTWlCLE1BQUs7QUFBQSxRQUM1RDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksU0FBUyxZQUFZLENBQUMsSUFBSSxLQUFLLGVBQWUsWUFBWSxDQUFDLENBQUMsSUFBSTtBQUNwRSxlQUFvQixnQkFBTSxFQUFjLFNBQVM7QUFBQSxVQUMvQztBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsbUJBQW1CO0FBQ2pDLFVBQUksY0FBYyxLQUFLO0FBQ3ZCLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGdCQUFnQixhQUFhLGVBQzdCLGdCQUFnQixhQUFhLGVBQzdCLGVBQWUsYUFBYSxjQUM1QixZQUFZLGFBQWEsV0FDekIsY0FBYyxhQUFhO0FBQzdCLFVBQUksbUJBQW1CLEtBQUssb0JBQW9CO0FBQ2hELGFBQW9CLGdCQUFNLEVBQWMsY0FBYyxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDOUUsSUFBSSxLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ25DO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGVBQWUsS0FBSztBQUFBLE1BQ3RCLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBU0YsVUFBUztBQUN2QixVQUFJLHVCQUF1QixLQUFLLGNBQWMsR0FDNUNHLFdBQVUscUJBQXFCLFNBQy9CQyx1QkFBc0IscUJBQXFCLHFCQUMzQ0MsbUJBQWtCLHFCQUFxQixpQkFDdkNDLGtCQUFpQixxQkFBcUI7QUFDeEMsVUFBSSxnQkFBZ0IsS0FBSyxPQUN2QixZQUFZLGNBQWMsV0FDMUIsS0FBSyxjQUFjLElBQ25CLGFBQWEsY0FBYyxZQUMzQixhQUFhLGNBQWM7QUFDN0IsVUFBSSxZQUFZLEtBQUssTUFBTTtBQUMzQixVQUFJLGNBQWMsS0FBSyxjQUFjLEtBQUssZUFBZTtBQUN6RCxhQUFvQixnQkFBTSxFQUFjRCxrQkFBaUIsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQ2pGO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDVjtBQUFBLFVBQ0EsV0FBVyxLQUFLO0FBQUEsUUFDbEI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxHQUFHLEtBQUssaUJBQWlCLEdBQWdCLGdCQUFNLEVBQWNGLFVBQVMsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQy9GLFVBQVUsS0FBSztBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1YsYUFBYSxLQUFLO0FBQUEsVUFDbEIsWUFBWSxLQUFLO0FBQUEsUUFDbkI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsR0FBZ0IsZ0JBQU0sRUFBY0csaUJBQWdCLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUM3RTtBQUFBLE1BQ0YsQ0FBQyxHQUFHLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxZQUFZLENBQUMsR0FBZ0IsZ0JBQU0sRUFBY0Ysc0JBQXFCLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUN4STtBQUFBLE1BQ0YsQ0FBQyxHQUFHLEtBQUsscUJBQXFCLEdBQUcsS0FBSyx1QkFBdUIsR0FBRyxLQUFLLHlCQUF5QixHQUFHLEtBQUssd0JBQXdCLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxHQUFHLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxJQUM5SztBQUFBLEVBQ0YsQ0FBQyxHQUFHLENBQUM7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyx5QkFBeUIsT0FBT3hDLFFBQU87QUFDckQsVUFBSSxZQUFZQSxPQUFNLFdBQ3BCLDBCQUEwQkEsT0FBTSx5QkFDaEMsMkJBQTJCQSxPQUFNLDBCQUNqQyxnQkFBZ0JBLE9BQU0sZUFDdEIsWUFBWUEsT0FBTSxXQUNsQixpQkFBaUJBLE9BQU0sZ0JBQ3ZCLGlCQUFpQkEsT0FBTTtBQUN6QixVQUFJQyxXQUFVLE1BQU0sU0FDbEIsUUFBUSxNQUFNLE9BQ2QsYUFBYSxNQUFNLFlBQ25CLGFBQWEsTUFBTSxZQUNuQixVQUFVLE1BQU07QUFDbEIsVUFBSSxjQUFjLFdBQVcsS0FBSztBQUNsQyxVQUFJLHNCQUFzQixDQUFDO0FBQzNCLFVBQUksY0FBYyxVQUFVLFVBQVUsU0FBU0EsYUFBWSxVQUFVLFdBQVcsZUFBZSxVQUFVLGNBQWMsZUFBZSxVQUFVLGFBQWE7QUFDM0osWUFBSSxtQkFBbUIsYUFBYSxzQkFBc0IsT0FBTyxXQUFXLElBQUksQ0FBQztBQUNqRixZQUFJLDBCQUEwQixhQUFhLDZCQUE2Qix3QkFBd0IsT0FBTyxXQUFXLEdBQUcsR0FBRyxPQUFPLGdCQUFnQixTQUFTLENBQUMsSUFBSSxDQUFDO0FBQzlKLFlBQUksZUFBZSwwQkFBMEIsb0JBQW9CRCxRQUFPLFdBQVcsSUFBSTtBQUN2RixZQUFJLGdCQUFnQixxQkFBcUJBLFFBQU8sZ0JBQWdCO0FBQ2hFLFlBQUksa0JBQWtCLG1CQUFtQix5QkFBeUIsYUFBYTtBQUMvRSw4QkFBc0I7QUFBQSxVQUNwQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLHlCQUF5QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUVBLFVBQUksd0JBQXdCLDRCQUE0QixRQUFRLFVBQVUsWUFBWTtBQUFBLFFBQ3BGLGVBQWU7QUFBQSxRQUNmLDBCQUEwQjtBQUFBLE1BQzVCLElBQUksQ0FBQztBQUNMLFVBQUksbUJBQW1CO0FBQ3ZCLFVBQUksZUFBZSxhQUFhO0FBQ2hDLFVBQUksYUFBYSxDQUFDLGNBQWM7QUFHOUIsMkJBQW1CO0FBQUEsVUFDakIsT0FBTyxhQUFhLFNBQVMsYUFBYSxZQUFZLENBQUMsS0FBSyxJQUFJO0FBQUEsVUFDaEUsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Y7QUFDQSx1QkFBZSxDQUFDO0FBQUEsTUFDbEI7QUFJQSxXQUFLLGtCQUFrQixRQUFRLGtCQUFrQixTQUFTLFNBQVMsY0FBYyxZQUFZLHVCQUF1QjtBQUNsSCwyQkFBbUI7QUFBQSxNQUNyQjtBQUNBLGFBQU8sZUFBYyxlQUFjLGVBQWMsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRztBQUFBLFFBQ3JHLFdBQVc7QUFBQSxRQUNYLGVBQWU7QUFBQSxRQUNmLGdCQUFnQjtBQUFBLE1BQ2xCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDRixTQUFPSztBQUNULEVBQUUsQ0FBUztBQUNYLE9BQU8sZUFBZTs7O0FDMWtGdEIsSUFBSSxxQkFBa0MsZ0JBQUFzQyxHQUFXLFNBQVUsT0FBTyxLQUFLO0FBQ3JFLE1BQUksa0JBQWtCLGdCQUFnQixLQUFLO0FBQzNDLFNBQW9CLGdCQUFNLEVBQWMsUUFBUSxTQUFTO0FBQUEsSUFDdkQ7QUFBQSxFQUNGLEdBQUcsZUFBZSxDQUFDO0FBQ3JCLENBQUM7QUFDRCxJQUFJLHVCQUF1Qjs7O0FDckJwQixTQUFTLGdCQUFnQixPQUFtQztBQVhuRTtBQVlJLFFBQU0sQ0FBQ0MsUUFBTyxRQUFRLElBQUksb0JBQTZCO0FBQUEsSUFDbkQsVUFBUyxXQUFNLFVBQU4sWUFBZSxNQUFNO0FBQUEsSUFDOUIsU0FBUyxNQUFNO0FBQUEsRUFDbkIsQ0FBQztBQUVELFFBQU1DLFlBQVc7QUFBQSxJQUNiLENBQUMsUUFBc0Q7QUFDbkQsVUFBSSxXQUFXLENBQUMsSUFBSSxjQUFjLFNBQVMsWUFBWTtBQUN2RCxlQUFTLEVBQUUsTUFBTSxtQkFBbUIsU0FBUyxDQUFDO0FBQzlDLGVBQVMsRUFBRSxNQUFNLFVBQVUsU0FBUyxDQUFDO0FBQUEsSUFDekM7QUFBQSxJQUNBLENBQUNELE9BQU0sU0FBU0EsUUFBTyxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUVBLFNBQ0ksZ0JBQUFFLEdBQUMsU0FBSSxTQUFTRCxXQUFVLFdBQVcscUJBQXFCRCxPQUFNLFVBQVUsZ0JBQWdCLE1BQ3BGLDBCQUFBRSxHQUFDLFdBQU0sTUFBSyxZQUFXLEdBQzNCO0FBRVI7OztBQ2xCTyxTQUFTLGlCQUNaLE9BT0Y7QUFDRSxRQUFNLE1BQU1DLEdBQU8sTUFBTSxPQUFPO0FBQ2hDLEVBQUFDLEdBQVUsTUFBTTtBQUNaLFVBQU0sU0FBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsSUFBSSxRQUFRLENBQUM7QUFBQSxFQUNyRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDaEIsUUFBTSxXQUFXLFlBQVk7QUFDekIsVUFBTSxTQUFTO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixVQUFVLElBQUk7QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDTDtBQUNBLFFBQU0sV0FBVztBQUFBLElBQ2IsQ0FBQ0MsT0FBcUM7QUFDbEMsZUFBUztBQUNULFVBQUksVUFBVSxXQUFXQSxHQUFFLGNBQWMsS0FBSztBQUFBLElBQ2xEO0FBQUEsSUFDQSxDQUFDLElBQUksU0FBUyxNQUFNLFVBQVU7QUFBQSxFQUNsQztBQUNBLFFBQU0sV0FBVyxnQkFBQUMsR0FBQyxjQUFTLE9BQU8sSUFBSSxTQUFTLEtBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxLQUFLLE1BQU0sTUFBTSxNQUFNO0FBRWpHLFFBQU0sU0FDRixnQkFBQUEsR0FBQyxXQUFNLE1BQUssU0FBUSxXQUFVLDhCQUE2QixPQUFPLElBQUksU0FBUyxVQUFVLFVBQVU7QUFHdkcsU0FDSSxnQkFBQUEsR0FBQyxVQUFLLFdBQVUsb0JBQ1osMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxVQUFVLE1BQU07QUFBQSxNQUNoQjtBQUFBLE1BQ0EsT0FBTyxFQUFFLEdBQUcsT0FBTyxTQUFTLElBQUksU0FBUyxXQUFXLE1BQU0sVUFBVTtBQUFBLE1BQ3BFLGVBQWU7QUFBQTtBQUFBLEVBQ25CLEdBQ0o7QUFFUjs7O0FDMUNPLFNBQVMsZUFBZSxFQUFFLE9BQU8sU0FBUyxRQUFRQyxTQUFRLGFBQWEsR0FBdUM7QUFDakgsUUFBTSxDQUFDQyxRQUFPLFFBQVEsSUFBSSxvQkFBcUM7QUFBQSxJQUMzRCxTQUFTLHdCQUFTO0FBQUEsSUFDbEI7QUFBQSxFQUNKLENBQUM7QUFFRCxRQUFNLGNBQWNDLEdBQVEsTUFBTTtBQUM5QixRQUFJLE9BQU9ELE9BQU0sV0FBVyxVQUFVO0FBQ2xDLFVBQUlBLE9BQU0sUUFBUSxTQUFTLEdBQUcsR0FBRztBQUM3QixZQUFJLFFBQVFBLE9BQU0sUUFBUSxNQUFNLEdBQUc7QUFDbkMsZUFBTyxTQUFTLE1BQU0sQ0FBQyxDQUFDLElBQUksU0FBUyxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQ2pEO0FBQUEsSUFDSixXQUFXLE9BQU9BLE9BQU0sV0FBVyxVQUFVO0FBQ3pDLGFBQU8sS0FBSyxJQUFJQSxPQUFNLFNBQVMsQ0FBQztBQUFBLElBQ3BDO0FBQ0EsV0FBTztBQUFBLEVBQ1gsR0FBRyxDQUFDQSxPQUFNLE9BQU8sQ0FBQztBQUVsQixRQUFNLFFBQVFDLEdBQVEsTUFBTTtBQS9CaEM7QUFnQ1EsUUFBSUMsS0FBdUIsQ0FBQztBQUM1QixhQUFTQyxLQUFJLEdBQUdBLE9BQUssS0FBQUosV0FBQSxnQkFBQUEsUUFBUSxRQUFSLFlBQWUsSUFBSUksTUFBSztBQUN6QyxVQUFJLFVBQVUsa0JBQWtCLE1BQU07QUFsQ2xELFlBQUFDO0FBbUNnQixZQUFJLFdBQW1DO0FBQ3ZDLFlBQUksT0FBT0osT0FBTSxXQUFXLFVBQVU7QUFDbEMsY0FBSUEsT0FBTSxRQUFRLFNBQVMsR0FBRyxHQUFHO0FBQzdCLHVCQUFXLEdBQUdHLEtBQUk7QUFBQSxVQUN0QjtBQUFBLFFBQ0osV0FBVyxPQUFPSCxPQUFNLFdBQVcsVUFBVTtBQUN6QyxxQkFBVyxLQUFLLElBQUlHLEtBQUksSUFBR0MsTUFBQUwsV0FBQSxnQkFBQUEsUUFBUSxRQUFSLE9BQUFLLE1BQWUsQ0FBQztBQUFBLFFBQy9DO0FBRUEsaUJBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLFlBQVlELEtBQUksRUFBRSxDQUFDO0FBQ2pFLGlCQUFTLEVBQUUsTUFBTSxVQUFVLFVBQVUsWUFBWUEsS0FBSSxFQUFFLENBQUM7QUFBQSxNQUM1RCxHQUFHLENBQUNILFFBQU8sYUFBYUcsRUFBQyxDQUFDO0FBQzFCLFVBQUksVUFBVSxDQUFDLHNCQUFzQjtBQUNyQyxjQUFRLEtBQUtBLEtBQUksY0FBYyxXQUFXLE9BQU87QUFDakQsTUFBQUQsR0FBRTtBQUFBLFFBQ0UsZ0JBQUFHLEdBQUMsVUFBSyxTQUFTLFNBQVMsV0FBVyxRQUFRLEtBQUssR0FBRyxHQUFHLG9CQUV0RDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsV0FBT0g7QUFBQSxFQUNYLEdBQUcsQ0FBQyxhQUFhRixNQUFLLENBQUM7QUFFdkIsU0FBTyxnQkFBQUssR0FBQyxVQUFLLFdBQVUsbUJBQW1CLGlCQUFNO0FBQ3BEOzs7QUN6QkEsU0FBUyxnQkFBZ0JDLE9BQXNCO0FBQzNDLE1BQUksUUFBUUEsTUFBSyxNQUFNLFFBQVE7QUFDL0IsTUFBSUMsUUFBTyxNQUFNLFNBQVM7QUFDMUIsU0FBT0EsUUFBTyxLQUFLLE1BQU1BLEtBQUksRUFBRSxLQUFLLEtBQUs7QUFBSSxJQUFBQTtBQUU3QyxTQUFPLE1BQU0sS0FBSyxJQUFJO0FBQzFCO0FBRU8sU0FBUyxrQkFDWixNQUNBLGNBQ0EsbUJBQ0EsZUFDQSxzQkFDQSxVQUNNO0FBQ04sUUFBTSxlQUFlO0FBRXJCLE1BQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CO0FBQ2pDLFdBQU8sS0FBSyxVQUFVLGFBQWE7QUFDbkMsV0FBTyxnQkFBZ0IsZUFBZSxhQUFhLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxRQUFRO0FBQUEsRUFDMUY7QUFFQSxNQUFJLFFBQVEsYUFBYSxNQUFNLFFBQVE7QUFDdkMsUUFBTSxVQUFVLGFBQWEsS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDLENBQUM7QUFFekQsTUFBSSxnQkFBZ0IsTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUFFLE1BQU0sWUFBWSxFQUFFLEtBQUssRUFBRTtBQUN2RSxNQUFJLG1CQUFtQjtBQUNuQixvQkFBZ0I7QUFBQSxNQUNaO0FBQUEsTUFDQSxXQUFXLFNBQVMsSUFBSSxFQUFFLFNBQVMsWUFBWSxJQUFJO0FBQUEsSUFDdkQ7QUFBQSxFQUNKLE9BQU87QUFDSCxvQkFBZ0IsZUFBZSxlQUFlLGVBQWUsU0FBUyxJQUFJLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQztBQUMxRyxTQUFLLFVBQVUsYUFBYSxJQUFJO0FBQUEsTUFDNUIsS0FBSyxTQUFTLElBQUksRUFBRSxTQUFTLG9CQUFvQjtBQUFBLE1BQ2pELE9BQU8sU0FBUyxJQUFJO0FBQUEsTUFDcEIsS0FBSztBQUFBLE1BQ0wsVUFBVTtBQUFBLFFBQ04sTUFBTSxLQUFLO0FBQUEsUUFDWCxPQUFPO0FBQUEsUUFDUCxZQUFZO0FBQUEsUUFDWixLQUFLLFNBQVMsSUFBSSxFQUFFLFNBQVMsb0JBQW9CLEVBQUUsU0FBUztBQUFBLE1BQ2hFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxrQkFBZ0IsR0FBRyxjQUFjLFFBQVEsS0FBSSxtQ0FBUyxVQUFTLE1BQU0sUUFBUSxDQUFDLEVBQUUsS0FBSyxJQUFJLEtBQUssUUFBUTtBQUN0RyxRQUFNLE1BQU0sU0FBUyxDQUFDLElBQUksY0FBYyxVQUFVO0FBRWxELFNBQU8sTUFBTSxLQUFLLElBQUk7QUFDMUI7QUFFTyxJQUFNLGtCQUFrQjtBQUcvQixlQUFzQixZQUNsQixPQUNBLE1BQ0EsTUFDQSxlQUNBLGFBQ0Y7QUEvRkY7QUFnR0ksTUFDSSxnQkFBZ0Isb0JBQ2hCLGlCQUFpQixLQUFLLFlBQ3JCLGVBQWUsVUFBYSxlQUFlLEtBQUs7QUFFakQ7QUFDSixrQkFBZ0IsaUJBQWlCLEtBQUssTUFBTTtBQUU1QyxNQUFJLGNBQWMsTUFBTSxNQUFNLFFBQVEsS0FBSyxLQUFLLEtBQUs7QUFDckQsTUFBSSxRQUFRLFlBQVksU0FBUyxJQUFJO0FBQ3JDLE1BQUksV0FBVyxZQUFZLE1BQU0sYUFBYTtBQUU5QyxNQUFJLFNBQVMsU0FBUyxLQUFLO0FBQU87QUFDbEMsTUFBSUMsU0FBUSxnQkFBZ0IsS0FBSyxTQUFTLEtBQUssS0FBSyxDQUFDO0FBQ3JELE1BQUksQ0FBQ0EsWUFBUyxLQUFBQSxPQUFNLENBQUMsTUFBUCxtQkFBVSxXQUFVO0FBQUc7QUFFckMsTUFBSSxnQkFBZ0IsS0FBSyxNQUFPLE1BQU0sSUFBSTtBQUkxQyxRQUFNLGFBQWEsZ0JBQWdCLG1CQUFtQixJQUFJLG1CQUFtQjtBQUM3RSxNQUFJLGlCQUFpQixXQUFXLEtBQUssU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFJLENBQUM7QUFDOUQsTUFBSSxhQUFhO0FBQ2IsUUFBSSxlQUFlLFlBQVksTUFBTSxJQUFJO0FBRXpDLFFBQUksZUFBeUIsQ0FBQyxHQUFHLGlCQUFpQixLQUFLLFdBQVcsY0FBYyxhQUFhLENBQUMsR0FBRyxFQUFFO0FBQUEsTUFDL0YsYUFBYSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUNDLE9BQU0saUJBQWlCLE1BQU9BLEdBQUUsVUFBVSxDQUFDO0FBQUEsSUFDMUU7QUFFQSxhQUFTLE9BQU8sS0FBSyxPQUFPLEtBQUssTUFBTyxNQUFNLElBQUksRUFBRSxRQUFRLEdBQUcsWUFBWTtBQUFBLEVBQy9FLE9BQU87QUFDSCxhQUFTLEtBQUssS0FBSyxJQUFJLEdBQUcsaUJBQWlCLEtBQUssV0FBVyxjQUFjLGNBQWMsQ0FBQyxFQUFFLEtBQUs7QUFBQSxFQUNuRztBQUVBLE1BQUksVUFBVSxTQUFTLEtBQUssUUFBUSxTQUFTLElBQUk7QUFDakQsUUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLE9BQU8sT0FBTztBQUM3QyxRQUFNLFFBQVEsTUFBTSxjQUFjLEtBQUssS0FBSztBQUM1QyxNQUFJO0FBQU8sU0FBSyxPQUFPLEtBQUs7QUFDaEM7QUFDQSxlQUFzQixhQUFhLFdBQW9CLE1BQXdCLE9BQWMsTUFBZ0I7QUFDekcsUUFBTSxrQkFBa0IsQ0FBQyxJQUFJO0FBQzdCLE1BQUksS0FBSyxTQUFTLHlCQUF5QjtBQUN2QyxVQUFNLFVBQVUsQ0FBQ0MsT0FBMkM7QUFDeEQsVUFBSUEsY0FBYTtBQUFrQix3QkFBZ0IsS0FBS0EsRUFBQztBQUN6RCxNQUFBQSxHQUFFLFVBQVUsUUFBUSxPQUFPO0FBQUEsSUFDL0I7QUFDQSxTQUFLLFVBQVUsUUFBUSxPQUFPO0FBQUEsRUFDbEM7QUFDQSxhQUFXQyxNQUFLLGlCQUFpQjtBQUM3QixRQUFJLFVBQVU7QUFBQSxNQUNWQTtBQUFBLE1BQ0FBLEdBQUU7QUFBQSxNQUNGLEtBQUssU0FBUztBQUFBLE1BQ2QsS0FBSyxTQUFTO0FBQUEsTUFDZCxLQUFLLFNBQVM7QUFBQSxNQUNkO0FBQUEsSUFDSjtBQUNBLFVBQU0sWUFBWSxPQUFPLE1BQU1BLElBQUcsWUFBWSxNQUFNLEtBQUssT0FBTztBQUFBLEVBQ3BFO0FBQ0o7OztBQzVJTyxJQUFVO0FBQUEsQ0FBVixDQUFVQyxvQkFBVjtBQUVJLFdBQVMsS0FBSyxPQUE2QjtBQUM5QyxVQUFNLFVBQVUsU0FBUyxVQUFVLE9BQU87QUFDMUMsUUFBSSxDQUFDO0FBQVMsYUFBTztBQUVyQixZQUFRLFFBQVEsTUFBTTtBQUFBLE1BQ2xCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDRCxlQUFPLFFBQVE7QUFBQSxNQUNuQixLQUFLO0FBQ0QsZUFBTyxRQUFRLE1BQU0sSUFBSSxJQUFJO0FBQUEsTUFDakMsS0FBSztBQUNELGVBQU8sUUFBUSxNQUFNLE1BQU07QUFBQSxNQUMvQixLQUFLO0FBQ0QsZUFBTyxRQUFRLE1BQU0sUUFBUTtBQUFBLE1BQ2pDLEtBQUs7QUFDRCxlQUFPO0FBQUEsTUFDWCxLQUFLO0FBQ0QsZUFBTyxRQUFRLE1BQU0sU0FBUztBQUFBLE1BQ2xDLEtBQUs7QUFDRCxlQUFPLGdCQUFnQixRQUFRLE9BQU8sSUFBSTtBQUFBLElBQ2xEO0FBQUEsRUFDSjtBQXZCTyxFQUFBQSxnQkFBUztBQTBCVCxXQUFTLFFBQVEsT0FBNkI7QUFDakQsUUFBSSxTQUFTLE1BQU07QUFDZixhQUFPO0FBQUEsSUFDWCxXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ2xDLFVBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN0QixZQUFJLFNBQVMsQ0FBQztBQUNkLGlCQUFTLFNBQVMsT0FBcUI7QUFDbkMsaUJBQU8sS0FBSyxRQUFRLEtBQUssQ0FBQztBQUFBLFFBQzlCO0FBRUEsZUFBTztBQUFBLE1BQ1gsV0FBVyxpQkFBaUIsTUFBTTtBQUM5QixZQUFJLFlBQVksU0FBUyxXQUFXLEtBQUs7QUFDekMsZUFBTztBQUFBLE1BQ1gsT0FBTztBQUNILFlBQUksU0FBUztBQUNiLFlBQUksU0FBa0MsQ0FBQztBQUN2QyxpQkFBUyxPQUFPLFFBQVE7QUFDcEIsaUJBQU8sR0FBRyxJQUFJLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFBQSxRQUNyQztBQUVBLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSixXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ2xDLGFBQU87QUFBQSxJQUNYLFdBQVcsT0FBTyxVQUFVLFdBQVc7QUFDbkMsYUFBTztBQUFBLElBQ1gsV0FBVyxPQUFPLFVBQVUsVUFBVTtBQUNsQyxVQUFJLFlBQVksV0FBVyxLQUFLLE1BQU0sS0FBSztBQUMzQyxVQUFJLFVBQVU7QUFBUSxlQUFPLFVBQVU7QUFFdkMsVUFBSSxnQkFBZ0IsV0FBVyxTQUFTLE1BQU0sS0FBSztBQUNuRCxVQUFJLGNBQWM7QUFBUSxlQUFPLGNBQWM7QUFFL0MsVUFBSSxZQUFZLFdBQVcsS0FBSyxNQUFNLEtBQUs7QUFDM0MsVUFBSSxVQUFVO0FBQVEsZUFBTyxVQUFVO0FBRXZDLGFBQU87QUFBQSxJQUNYO0FBR0EsV0FBTztBQUFBLEVBQ1g7QUExQ08sRUFBQUEsZ0JBQVM7QUFBQSxHQTVCSDs7O0FDSmpCLGVBQXNCLGVBQWUsS0FBVSxZQUF3QixPQUErQztBQUNsSCxRQUFNLE9BQU8sSUFBSSxNQUFNLGNBQWMsV0FBVyxJQUFJO0FBQ3BELE1BQUksQ0FBQztBQUFNLFdBQU8sT0FBTyxRQUFRLGtCQUFrQixXQUFXLHNCQUFzQjtBQUdwRixVQUFRLFdBQVcsTUFBTTtBQUFBLElBQ3JCLEtBQUs7QUFDRCxZQUFNLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUM1RCxZQUFJLFNBQVMsUUFBUSxXQUFXLE9BQU8sYUFBYTtBQUNoRCxpQkFBTyxZQUFZLFdBQVcsR0FBRztBQUFBLFFBQ3JDO0FBRUEsb0JBQVksV0FBVyxHQUFHLElBQUksZUFBZSxLQUFLLEtBQUs7QUFBQSxNQUMzRCxDQUFDO0FBRUQsYUFBTyxPQUFPLFFBQVEsSUFBSTtBQUFBLElBQzlCLEtBQUs7QUFDRCxhQUFPLGdCQUFnQixLQUFLLE1BQU0sV0FBVyxNQUFNLFdBQVcsS0FBSyxLQUFLO0FBQUEsRUFDaEY7QUFDSjtBQUdBLGVBQXNCLGdCQUNsQixLQUNBLE1BQ0FDLE9BQ0EsS0FDQSxPQUM2QjtBQUM3QixRQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLE1BQUksQ0FBQztBQUFTLFdBQU8sT0FBTyxRQUFRLGtCQUFrQixLQUFLLHNCQUFzQjtBQUdqRixRQUFNLFVBQVUsWUFBWSxTQUFTQSxPQUFNQSxRQUFPLEdBQUcsQ0FBQ0EsVUFBUztBQUczRCxRQUFJLFNBQVM7QUFBTSxhQUFPLGVBQWVBLE9BQU0sS0FBSyxNQUFTO0FBQUE7QUFDeEQsYUFBTyxlQUFlQSxPQUFNLEtBQUssS0FBSyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUEsRUFDekUsQ0FBQztBQUVELE1BQUksV0FBVztBQUFTLFdBQU8sT0FBTyxRQUFRLElBQUk7QUFFbEQsUUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFDcEMsU0FBTyxPQUFPLFFBQVEsSUFBSTtBQUM5Qjs7O0FDM0NPLFNBQVMsWUFBK0IsT0FBY0MsV0FBa0M7QUFDM0YsUUFBTSxNQUFNQyxHQUFXLFdBQVc7QUFDbEMsU0FBT0M7QUFBQSxJQUNILENBQUMsYUFBZ0I7QUFDYixxQkFBZSxLQUFLLE1BQU0sWUFBYSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQ3hELFlBQUlGO0FBQVUsVUFBQUEsVUFBUyxRQUFRO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ0w7QUFBQSxJQUNBLENBQUMsT0FBT0EsU0FBUTtBQUFBLEVBQ3BCO0FBQ0o7QUFDQSxlQUFzQixZQUFZLEtBQVUsTUFBZ0JHLE9BQWMsTUFBd0I7QUFDOUYsTUFBSSxhQUFhLEdBQUdBLFFBQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLFNBQVMsTUFBTTtBQUN0RSxXQUFTLFNBQVMsS0FBSyxXQUFXO0FBQzlCLGlCQUFhLGVBQWUsWUFBWSxPQUFPLEtBQUssVUFBVSxLQUFLLEVBQUUsR0FBRztBQUFBLEVBQzVFO0FBQ0EsUUFBTSxZQUFZLElBQUksT0FBTyxNQUFNLE1BQU0sS0FBSyxTQUFTLFVBQVU7QUFDckU7QUFDTyxTQUFTLGFBQWdCLFVBQWEsVUFBdUM7QUFDaEYsU0FBTyxpQkFBa0I7QUFDckIsYUFBUztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ047QUFBQSxJQUNKLENBQUM7QUFDRCxhQUFTO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDTDtBQUNKOzs7QUNzQ08sU0FBUyxnQkFDWixFQUFFLFNBQVMsU0FBUyxHQUFHLEtBQUssR0FDNUIsUUFDZ0I7QUFDaEIsVUFBUSxPQUFPLE1BQU07QUFBQSxJQUNqQixLQUFLO0FBQ0QsY0FBUSxPQUFPLFFBQVE7QUFDdkIsYUFBTyxFQUFFLEdBQUcsTUFBTSxTQUFTLFNBQVMsT0FBTyxTQUFTO0FBQUEsSUFDeEQsS0FBSztBQUNELE9BQUMsT0FBTyxZQUFZLFFBQVEsT0FBTztBQUNuQyxhQUFPLEVBQUUsR0FBRyxNQUFNLFNBQVMsU0FBUyxXQUFXLE9BQU8sU0FBUztBQUFBLElBQ25FLEtBQUs7QUFDRCxhQUFPLEVBQUUsR0FBRyxNQUFNLFNBQVMsU0FBUyxPQUFPLFNBQVM7QUFBQSxJQUN4RDtBQUNJLGFBQU8sRUFBRSxTQUFTLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDM0M7QUFDSjtBQUtPLFNBQVMsb0JBQ1pDLFVBQytDO0FBQy9DLFFBQU0sT0FBT0MsR0FBUSxNQUFPLE9BQU9ELFlBQVcsYUFBYUEsU0FBUSxJQUFJQSxVQUFVLENBQUNBLFFBQU8sQ0FBQztBQUMxRixTQUFPRSxHQUFXLGlCQUFpRSxNQUFNLENBQUNDLE9BQU0sSUFBSTtBQUN4RztBQU1PLFNBQVMsU0FBWSxFQUFFLFlBQVksZUFBZSxRQUFRLFVBQVUsT0FBQUMsT0FBTSxHQUFxQjtBQUNsRyxRQUFNLGFBQWFDLEdBQU8sSUFBSTtBQUU5QixRQUFNLFVBQVVKLEdBQVEsTUFBTTtBQUMxQixRQUFJRyxPQUFNLFdBQVc7QUFDakIsYUFBTztBQUFBLElBQ1gsT0FBTztBQUNILFVBQUk7QUFBZSxlQUFPO0FBQUE7QUFDckIsZUFBTyxnQkFBQUUsR0FBQyxPQUFJLE9BQU9GLE9BQU0sU0FBb0IsUUFBUSxNQUFNLFlBQVcsSUFBRztBQUFBLElBQ2xGO0FBQUEsRUFDSixHQUFHLENBQUNBLE9BQU0sV0FBV0EsT0FBTSxTQUFTLFlBQVksYUFBYSxDQUFDO0FBRTlELEVBQUFHLEdBQVUsTUFBTTtBQUNaLGdCQUFZLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVSCxPQUFNLFFBQVEsQ0FBQztBQUFBLEVBQzdFLEdBQUcsQ0FBQ0EsT0FBTSxTQUFTQSxPQUFNLFNBQVMsQ0FBQztBQUVuQyxTQUNJLGdCQUFBRSxHQUFDLFVBQUssV0FBVSwyQkFBMEIsS0FBSyxZQUMxQyxtQkFDTDtBQUVSO0FBRU8sU0FBUyxtQkFBbUM7QUFBQSxFQUMvQztBQUFBLEVBQ0EsUUFBUTtBQUFBLEVBQ1I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQU1HO0FBQ0MsUUFBTSxDQUFDRixRQUFPLFFBQVEsSUFBSSxvQkFBdUIsT0FBTztBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNUO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsRUFDZixFQUFFO0FBQ0YsU0FBTyxnQkFBQUUsR0FBQyxVQUFPLFVBQXFCLEdBQUcsT0FBUSxHQUFHRixRQUFPO0FBQzdEO0FBV08sU0FBUyxtQkFBbUI7QUFBQSxFQUMvQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxRQUFBSTtBQUFBLEVBQ0E7QUFDSixHQUdPO0FBQ0gsUUFBTUMsWUFBVztBQUFBLElBQ2IsQ0FBQyxVQUFlLGVBQTJDO0FBQ3ZELFVBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUN6QixpQkFBUztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sVUFBVSxTQUFTLElBQUksQ0FBQ0MsT0FBTUEsR0FBRSxLQUFLO0FBQUEsUUFDekMsQ0FBQztBQUFBLE1BQ0wsT0FBTztBQUNILGlCQUFTO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixVQUFVLFNBQVM7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUNGLFNBQVEsU0FBUyxTQUFTLFNBQVM7QUFBQSxFQUN4QztBQUVBLFFBQU0sU0FBU1AsR0FBUSxNQUFNO0FBak1qQztBQWtNUSxXQUNJLGdCQUFBSztBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0csaUJBQWdCO0FBQUEsUUFDaEIsVUFBVUc7QUFBQSxRQUNWLFVBQVE7QUFBQSxRQUNSLFVBQVMsS0FBQUQsV0FBQSxnQkFBQUEsUUFBUSxVQUFSLFlBQWlCO0FBQUEsUUFDMUIsVUFBUyxLQUFBQSxXQUFBLGdCQUFBQSxRQUFRLFlBQVIsWUFBbUIsQ0FBQztBQUFBLFFBQzdCLGtCQUFrQixTQUFTO0FBQUEsUUFDM0IsUUFDSUEsV0FBQSxnQkFBQUEsUUFBUSxRQUFRO0FBQUEsVUFBTyxDQUFDRSxRQUNsQixNQUFNLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEdBQWEsU0FBU0EsR0FBRSxLQUFLO0FBQUEsY0FDekUsQ0FBQztBQUFBLFFBRVYsWUFBWTtBQUFBLFVBQ1IsT0FBTyxDQUFDLFVBQWU7QUFBQSxVQUN2QixnQkFBZ0IsQ0FBQyxVQUFlO0FBQUEsVUFDaEMsV0FBVyxDQUFDLFVBQWU7QUFBQSxVQUMzQixNQUFNLENBQUMsVUFBZTtBQUFBLFVBQ3RCLFFBQVEsQ0FBQyxVQUFlLGtCQUFrQixNQUFNLGFBQWEsaUJBQWlCO0FBQUEsUUFDbEY7QUFBQTtBQUFBLElBQ0o7QUFBQSxFQUVSLEdBQUcsQ0FBQyxTQUFTLFNBQVMsV0FBV0YsT0FBTSxDQUFDO0FBRXhDLFNBQU8sZ0JBQUFGLEdBQUMsWUFBUyxRQUFnQixVQUFvQixPQUFPLEVBQUUsV0FBVyxTQUFTLFFBQVEsR0FBRztBQUNqRztBQUtPLFNBQVMsYUFBYTtBQUFBLEVBQ3pCO0FBQUEsRUFDQTtBQUFBLEVBQ0EsR0FBRztBQUNQLEdBR0c7QUFFQyxRQUFNLENBQUNGLFFBQU9PLEVBQUMsSUFBSSxvQkFBOEMsTUFBRztBQXpPeEU7QUF5TzRFO0FBQUEsTUFDcEUsV0FBVyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxLQUFLO0FBQUEsTUFDZCxTQUFTLEtBQUs7QUFBQSxNQUNkLFNBQVEsVUFBSyxXQUFMLFlBQWU7QUFBQSxJQUMzQjtBQUFBLEdBQUU7QUFDRixRQUFNLFdBQVdDLEdBQVcsZ0JBQWdCO0FBRTVDLFFBQU1ILFlBQVcsQ0FBQyxRQUF1QztBQUNyRCxRQUFJSSxLQUFJLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxjQUFjLEtBQUssQ0FBQztBQUNwRCxhQUFTO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixVQUFVLENBQUMsQ0FBQ0EsS0FBSSxTQUFTLFdBQVdBLEVBQUMsRUFBRSxTQUFTLFNBQVMsaUJBQWlCLElBQUk7QUFBQSxJQUNsRixDQUFDO0FBQ0QsYUFBUztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sVUFBVSxDQUFDLENBQUNBLEtBQUksU0FBUyxXQUFXQSxFQUFDLEVBQUUsU0FBUyxTQUFTLGlCQUFpQixJQUFJO0FBQUEsSUFDbEYsQ0FBQztBQUNELElBQUFGLEdBQUU7QUFBQSxNQUNFLE1BQU07QUFBQSxNQUNOLFVBQVUsQ0FBQyxDQUFDRSxLQUFJLFNBQVMsV0FBV0EsRUFBQyxFQUFFLFNBQVMsU0FBUyxpQkFBaUIsSUFBSTtBQUFBLElBQ2xGLENBQUM7QUFBQSxFQUNMO0FBRUEsUUFBTSxTQUFTWixHQUFRLE1BQU07QUFDekIsV0FBT0csT0FBTSxtQkFBbUIsV0FDMUJBLE9BQU0sVUFDTixPQUFPQSxPQUFNLFdBQVcsWUFBWSxDQUFDLENBQUNBLE9BQU0sVUFDNUMsU0FBUyxXQUFXLElBQUksS0FBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTyxDQUFDLENBQUMsSUFDdkQ7QUFBQSxFQUNWLEdBQUcsQ0FBQ0EsT0FBTSxPQUFPLENBQUM7QUFFbEIsUUFBTSxhQUFhLGdCQUFBRSxHQUFDLFdBQU0sTUFBSyxRQUFPLFVBQVVHLFdBQVUsT0FBTyxpQ0FBUSxTQUFTLGVBQWU7QUFDakcsU0FBTyxnQkFBQUgsR0FBQyxZQUFtQyxVQUFvQixPQUFPLE1BQU0sUUFBUSxZQUFZO0FBQ3BHO0FBS08sU0FBUyxlQUFlLE9BQThCO0FBQ3pELFFBQU0sTUFBTU0sR0FBVyxvQkFBb0I7QUFFM0MsUUFBTSxDQUFDUixRQUFPLFFBQVEsSUFBSSxvQkFBNEIsT0FBTztBQUFBLElBQ3pELFdBQVc7QUFBQSxJQUNYLFNBQVMsTUFBTTtBQUFBLElBQ2YsU0FBUyxNQUFNO0FBQUEsSUFDZixRQUFRO0FBQUEsRUFDWixFQUFFO0FBQ0YsUUFBTSxRQUFRQyxHQUFPLE1BQU0sT0FBTztBQUVsQyxRQUFNLGFBQWE7QUFBQSxJQUNmLE9BQU8sUUFBcUI7QUFDeEIsWUFBTSxVQUFVLFdBQVksSUFBSSxjQUFzQyxLQUFLO0FBQUEsSUFDL0U7QUFBQSxJQUNBLENBQUMsTUFBTSxTQUFTRCxPQUFNLFNBQVNBLE9BQU0sU0FBU0EsT0FBTSxTQUFTO0FBQUEsRUFDakU7QUFFQSxRQUFNLFdBQVcsYUFBYSxNQUFNLFNBQVMsUUFBUTtBQUNyRCxRQUFNLFVBQVU7QUFBQSxJQUNaLE9BQU9VLE9BQXFCO0FBQ3hCLFVBQUlBLEdBQUUsUUFBUSxTQUFTO0FBQ25CLGNBQU0sU0FBUztBQUFBLE1BQ25CO0FBQUEsSUFDSjtBQUFBLElBQ0EsQ0FBQyxNQUFNLFNBQVNWLE9BQU0sU0FBU0EsT0FBTSxTQUFTQSxPQUFNLFNBQVM7QUFBQSxFQUNqRTtBQUVBLFFBQU0sV0FBVztBQUFBLElBQ2IsQ0FBQ1UsT0FBa0I7QUFDZixlQUFTO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsTUFDZCxDQUFDO0FBQUEsSUFDTDtBQUFBLElBQ0EsQ0FBQyxNQUFNLFNBQVNWLE9BQU0sU0FBU0EsT0FBTSxXQUFXQSxPQUFNLE9BQU87QUFBQSxFQUNqRTtBQUVBLFFBQU0sYUFBYSxnQkFBQUUsR0FBQyxPQUFJLFFBQVEsT0FBTyxZQUFZLEtBQUssT0FBTyxNQUFNLFNBQW9CO0FBQ3pGLFFBQU0sU0FBUyxnQkFBQUEsR0FBQyxXQUFNLFdBQVUscUJBQW9CLE1BQUssVUFBUyxVQUFVLFlBQVksU0FBUyxTQUFTO0FBQzFHLFNBQ0ksZ0JBQUFBLEdBQUMsVUFBSyxXQUFVLG9CQUFtQixZQUFZLFVBQzNDLDBCQUFBQSxHQUFDLFlBQWlCLFVBQW9CLFFBQWdCLGVBQWUsWUFBWSxPQUFPRixRQUFPLEdBQ25HO0FBRVI7QUFLTyxTQUFTLGFBQWEsT0FBMkU7QUFDcEcsUUFBTSxNQUFNUSxHQUFXLG9CQUFvQjtBQUMzQyxRQUFNLENBQUNSLFFBQU8sUUFBUSxJQUFJLG9CQUE0QixNQUFHO0FBcFU3RDtBQW9VaUU7QUFBQSxNQUN6RCxXQUFXLE1BQU07QUFBQSxNQUNqQixTQUFTLE1BQU07QUFBQSxNQUNmLFNBQVMsTUFBTTtBQUFBLE1BQ2YsU0FBUSxXQUFNLFdBQU4sWUFBZ0I7QUFBQSxJQUM1QjtBQUFBLEdBQUU7QUFFRixRQUFNVyxRQUFPVixHQUFPLEdBQUc7QUFDdkIsRUFBQUUsR0FBVSxNQUFNO0FBQ1osSUFBQVEsTUFBSyxVQUFVWCxPQUFNO0FBQ3JCLGFBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVQSxPQUFNLFFBQVEsQ0FBQztBQUFBLEVBQ2pFLEdBQUcsQ0FBQyxNQUFNLFNBQVNBLE9BQU0sT0FBTyxDQUFDO0FBRWpDLFFBQU0sV0FBVyxhQUFhQSxPQUFNLFNBQVMsUUFBUTtBQUNyRCxRQUFNLFVBQVU7QUFBQSxJQUNaLE9BQU9VLE9BQXFCO0FBQ3hCLFVBQUksTUFBTSxRQUFRO0FBQ2QsWUFBSUEsR0FBRSxRQUFRLFNBQVM7QUFDbkIsZ0JBQU0sU0FBUztBQUFBLFFBQ25CO0FBQUEsTUFDSixPQUFPO0FBQ0gsWUFBSUEsR0FBRSxRQUFRLFdBQVdBLEdBQUUsU0FBUztBQUNoQyxVQUFBQSxHQUFFLGVBQWU7QUFDakIsZ0JBQU0sU0FBUztBQUFBLFFBQ25CO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUNDLE1BQUssU0FBUyxNQUFNLFlBQVlYLE9BQU0sU0FBU0EsT0FBTSxTQUFTQSxPQUFNLFNBQVM7QUFBQSxFQUNsRjtBQUVBLFFBQU0sV0FBVztBQUFBLElBQ2IsQ0FBQ1UsT0FBa0I7QUFDZixlQUFTO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsTUFDZCxDQUFDO0FBQUEsSUFDTDtBQUFBLElBQ0EsQ0FBQ0MsTUFBSyxTQUFTLE1BQU0sWUFBWVgsT0FBTSxTQUFTQSxPQUFNLFdBQVdBLE9BQU0sT0FBTztBQUFBLEVBQ2xGO0FBQ0EsUUFBTSxhQUNGLGdCQUFBRSxHQUFDLEtBQ0ksZ0JBQU0sV0FDSCxnQkFBQUEsR0FBQyxZQUFTLFNBQVNTLE1BQUssU0FBbUIsWUFBWSxNQUFNLGNBQWMsS0FBSyxRQUFRLE9BQU8sSUFFL0YsZ0JBQUFULEdBQUMsT0FBSSxRQUFRLE9BQU8sWUFBWSxNQUFNLGNBQWMsS0FBSyxPQUFPUyxNQUFLLFNBQW9CLEdBRWpHO0FBRUosUUFBTSxTQUNGLGdCQUFBVCxHQUFDLDRCQUF5QixTQUFrQixRQUFRLE1BQU0sUUFBUSxVQUFvQixNQUFNUyxNQUFLLFNBQVM7QUFFOUcsU0FDSSxnQkFBQVQsR0FBQyxVQUFLLFdBQVUsb0JBQW1CLFlBQVksVUFDM0MsMEJBQUFBLEdBQUMsWUFBaUIsVUFBb0IsUUFBZ0IsZUFBZSxZQUFZLE9BQU9GLFFBQU8sR0FDbkc7QUFFUjtBQUVPLFNBQVMseUJBQXlCO0FBQUEsRUFDckMsUUFBQVk7QUFBQSxFQUNBLE1BQUFEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUtHO0FBQ0MsUUFBTSxDQUFDLEtBQUssT0FBTyxJQUFJRSxHQUFTRixLQUFJO0FBQ3BDLEVBQUFSLEdBQVUsTUFBTTtBQUNaLGdCQUFZLFNBQVMsRUFBRSxVQUFVLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUFBLEVBQ25FLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDUixRQUFNLGFBQWE7QUFBQSxJQUNmLE9BQU8sUUFBcUI7QUFDeEIsY0FBUyxJQUFJLGNBQXNDLEtBQUs7QUFBQSxJQUM1RDtBQUFBLElBQ0EsQ0FBQ1EsT0FBTSxRQUFRO0FBQUEsRUFDbkI7QUFFQSxTQUFPLENBQUNDLFVBQ0osZ0JBQUFWLEdBQUMsY0FBUyxXQUFVLHFCQUFvQixVQUFVLFlBQVksU0FBUyxTQUNsRSxlQUNMLElBRUEsZ0JBQUFBLEdBQUMsV0FBTSxXQUFVLHFCQUFvQixNQUFLLFFBQU8sVUFBVSxZQUFZLFNBQVMsU0FBUztBQUVqRztBQUtPLFNBQVMsa0JBQWtCO0FBQUEsRUFDOUI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsUUFBQUU7QUFDSixHQUlPO0FBQ0gsUUFBTSxZQUFZUCxHQUFRLE1BQU07QUFDNUIsWUFBUSxVQUFVO0FBQUEsTUFDZCxLQUFLO0FBQ0QsZUFBTyxRQUFRLFdBQ1gsZ0JBQUFLO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRztBQUFBLFlBQ0EsV0FBVyxNQUFNO0FBQUEsWUFDakIsU0FBUyxNQUFNO0FBQUEsWUFDZixTQUFTLE1BQU07QUFBQSxZQUNmLE1BQUtFLFdBQUEsZ0JBQUFBLFFBQVEsUUFBTztBQUFBLFlBQ3BCLFlBQVksT0FBTztBQUFBLFlBQ25CLE9BQU1BLFdBQUEsZ0JBQUFBLFFBQVEsU0FBUTtBQUFBLFlBQ3RCLE1BQUtBLFdBQUEsZ0JBQUFBLFFBQVEsUUFBTztBQUFBO0FBQUEsUUFDeEIsSUFDQTtBQUFBLE1BQ1IsS0FBSztBQUNELGVBQ0ksZ0JBQUFGO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRztBQUFBLFlBQ0EsTUFBTSxPQUFPO0FBQUEsWUFDYjtBQUFBLFlBQ0EsUUFBUUU7QUFBQSxZQUNSLE9BQU8sTUFBTTtBQUFBLFlBQ2IsU0FBUyxNQUFNO0FBQUE7QUFBQSxRQUNuQjtBQUFBLE1BRVIsS0FBSztBQUNELGVBQ0ksZ0JBQUFGO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxXQUFXLE1BQU07QUFBQSxZQUNqQjtBQUFBLFlBQ0EsUUFBUUU7QUFBQSxZQUNSLFNBQVMsTUFBTTtBQUFBLFlBQ2Y7QUFBQSxZQUNBLFNBQVMsTUFBTTtBQUFBO0FBQUEsUUFDbkI7QUFBQSxNQUVSO0FBQ0ksZUFBTztBQUFBLElBQ2Y7QUFBQSxFQUNKLEdBQUcsQ0FBQyxRQUFRLE9BQU8sTUFBTSxTQUFTLE1BQU0sU0FBUyxPQUFPQSxTQUFRLFFBQVEsQ0FBQztBQUN6RSxRQUFNLFNBQVNQLEdBQVEsTUFBTTtBQUN6QixZQUFRLE1BQU07QUFBQSxNQUNWLEtBQUs7QUFDRCxlQUNJLGdCQUFBSztBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0c7QUFBQSxZQUNBLFlBQVksT0FBTztBQUFBLFlBQ25CLFdBQVcsTUFBTTtBQUFBLFlBQ2pCLFNBQVMsTUFBTTtBQUFBLFlBQ2YsU0FBUyxNQUFNO0FBQUE7QUFBQSxRQUNuQjtBQUFBLE1BRVIsS0FBSztBQUNELGVBQ0ksZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxTQUFTLE1BQU07QUFBQSxZQUNmO0FBQUEsWUFDQSxPQUFPLE1BQU07QUFBQSxZQUNiO0FBQUEsWUFDQSxNQUFNLE9BQU87QUFBQTtBQUFBLFFBQ2pCO0FBQUEsTUFFUixLQUFLO0FBQ0QsZUFDSSxnQkFBQUEsR0FBQSxLQUNLLDBDQUNHLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0csWUFBWSxPQUFPO0FBQUEsWUFDbkIsV0FBVztBQUFBLFlBQ1gsU0FBUyxNQUFNO0FBQUEsWUFDZixTQUFTLE1BQU07QUFBQTtBQUFBLFFBQ25CLEdBRVI7QUFBQSxNQUVSLEtBQUs7QUFDRCxlQUFPLGdCQUFBQSxHQUFBLEtBQUcsMENBQWEsZ0JBQUFBLEdBQUMsa0JBQWUsU0FBUyxNQUFNLFNBQW1CLFNBQVMsTUFBTSxTQUFTLEdBQUc7QUFBQSxNQUN4RztBQUNJLGVBQ0ksZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxZQUFZLE9BQU87QUFBQSxZQUNuQixXQUFXLE1BQU07QUFBQSxZQUNqQixTQUFTLFNBQVMsU0FBUyxNQUFNLE9BQU87QUFBQSxZQUN4QyxTQUFTLE1BQU07QUFBQTtBQUFBLFFBQ25CO0FBQUEsSUFFWjtBQUFBLEVBQ0osR0FBRyxDQUFDLFFBQVEsT0FBTyxNQUFNLFNBQVMsTUFBTSxTQUFTLE9BQU9FLFNBQVEsVUFBVSxTQUFTLENBQUM7QUFFcEYsUUFBTSxXQUFXO0FBQUEsSUFDYixDQUFDLFFBQW9CO0FBQ2pCLFVBQUksZ0JBQWdCO0FBQ3BCLGVBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLENBQUMsTUFBTSxVQUFVLENBQUM7QUFBQSxJQUNwRTtBQUFBLElBQ0EsQ0FBQyxNQUFNLFNBQVM7QUFBQSxFQUNwQjtBQUVBLFNBQ0ksZ0JBQUFGLEdBQUMsU0FBSSxXQUFVLGtCQUNYO0FBQUEsb0JBQUFBLEdBQUMsVUFBSyxXQUFVLGVBQWMsWUFBWSxVQUNyQyxnQkFBTSxLQUNYO0FBQUEsSUFDQSxnQkFBQUEsR0FBQyxVQUFLLFdBQVUsZUFBYyxVQUFVLEdBQ25DLGtCQUNMO0FBQUEsS0FDSjtBQUVSOzs7QUNsYU8sU0FBUyxtQkFBc0IsRUFBRSxRQUFRLEdBQW1CO0FBQy9ELFFBQU0sYUFBYVksR0FBVyxvQkFBb0I7QUFFbEQsU0FBTyxnQkFBQUMsR0FBQyxPQUFJLFFBQVEsTUFBTSxPQUFPLFNBQW9CLFlBQXdCO0FBQ2pGO0FBRU8sU0FBUyxvQkFBdUI7QUFBQSxFQUNuQyxTQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBTUc7QUFDQyxTQUNJLGdCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLE1BQ1osU0FBUztBQUFBLE1BQ1QsUUFBUSxPQUFPLElBQUk7QUFBQSxNQUNuQjtBQUFBLE1BQ0EsZUFBZSxnQkFBQUEsR0FBQyxzQkFBbUIsU0FBUyxNQUFNO0FBQUE7QUFBQSxFQUN0RDtBQUVSOzs7QUM3R08sU0FBUyxTQUFTO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sa0JBQWtCO0FBQUEsRUFDbEIsVUFBVSxlQUFlLENBQUMsTUFBTUMsV0FDNUIsZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxVQUFVLG1CQUFtQixJQUFJO0FBQUEsTUFDakMsU0FBUyxLQUFLO0FBQUEsTUFDZCxNQUFNLEtBQUs7QUFBQSxNQUNYLGFBQWEsRUFBRSxVQUFVLE1BQU0sWUFBWSxLQUFLLE1BQU07QUFBQSxNQUN0RCxRQUFRLENBQUMsT0FBTztBQUFBO0FBQUEsRUFDcEI7QUFBQSxFQUVKLEdBQUc7QUFDUCxHQUFjO0FBQ1YsUUFBTSxVQUFVQyxHQUFRLE1BQU07QUFDMUIsV0FDSSxnQkFBQUQsR0FBQyxRQUFHLFdBQVUsK0JBQ1QseUNBQU87QUFBQSxNQUFJLENBQUMsTUFBTSxRQUNmLGdCQUFnQixtQkFDWixnQkFBQUEsR0FBQyxRQUFLLE9BQU8sRUFBRSxHQUFHLE1BQU0sa0JBQWtCLE9BQU8sR0FBRyxNQUFZLElBRWhFLGdCQUFBQSxHQUFDLFFBQ0k7QUFBQSxxQkFBYSxNQUFNLEdBQUc7QUFBQSxRQUN2QixnQkFBQUEsR0FBQyxTQUFJLFdBQVUsNkJBQ1gsMEJBQUFBLEdBQUMsa0JBQWUsaUJBQWlCLEtBQUssaUJBQWlCLE1BQVksR0FDdkU7QUFBQSxTQUNKO0FBQUEsT0FHWjtBQUFBLEVBRVIsR0FBRyxDQUFDLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLFNBQU8sZ0JBQUFBLEdBQUMsS0FBVSxXQUFDLENBQUMsU0FBUyxTQUFRO0FBQ3pDO0FBUU8sU0FBUyxLQUFLLEVBQUUsTUFBTSxPQUFPLE1BQU0sR0FBaUQ7QUFDdkYsUUFBTSxNQUFNRSxHQUFXLFdBQVc7QUFDbEMsUUFBTSxPQUFPQSxHQUFXLGdCQUFnQjtBQUN4QyxRQUFNLEVBQUUsU0FBUyxJQUFJO0FBQ3JCLFFBQU0sU0FBUyxDQUFDLEtBQUssR0FBSSxNQUFNLG9CQUFvQixDQUFDLEdBQUksR0FBRztBQUMzRCxRQUFNLFlBQVksTUFBTTtBQXJGNUI7QUFzRlEsUUFBSSxNQUFNLHNCQUFvQixXQUFNLHFCQUFOLG1CQUF3QixVQUFTLEdBQUc7QUFDOUQsVUFBSSxXQUFXLE9BQU8sVUFBVSxDQUFDQyxPQUFNQSxPQUFNLEtBQUssT0FBTztBQUN6RDtBQUNBLFVBQUksWUFBWSxPQUFPLFFBQVE7QUFDM0IsbUJBQVc7QUFBQSxNQUNmO0FBQ0EsYUFBTyxPQUFPLFFBQVE7QUFBQSxJQUMxQixPQUFPO0FBQ0gsYUFBTyxLQUFLLGFBQWEsTUFBTTtBQUFBLElBQ25DO0FBQUEsRUFDSjtBQUNBLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUMsR0FBaUIsS0FBSyxPQUFPO0FBQ3pELFFBQU1DLGdCQUFlQyxHQUEwQyxJQUFJO0FBQ25FLFFBQU0sWUFBWSxrQkFBa0IsT0FBTyxRQUEwRDtBQUNqRyxVQUFNLFlBQVksSUFBSSxjQUFjO0FBQ3BDLFFBQUk7QUFDSixRQUFJLElBQUksVUFBVTtBQUNkLGtCQUFZLFVBQVU7QUFBQSxJQUMxQixPQUFPO0FBQ0gsa0JBQVksWUFBWSxNQUFNO0FBQUEsSUFDbEM7QUFDQSxjQUFVLFNBQVM7QUFDbkIsVUFBTSxhQUFhLFdBQVcsTUFBTSxJQUFJLE9BQU8sSUFBSTtBQUNuRCxVQUFNLEtBQUssWUFBWSxTQUFTLElBQUksRUFBRSxTQUFTLFNBQVMsaUJBQWlCLElBQUk7QUFDN0UsSUFBQUQsY0FBYSxXQUFXQSxjQUFhLFFBQVEsRUFBRSxNQUFNLFVBQVUsVUFBVSxHQUFHLENBQUM7QUFBQSxFQUNqRixHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sVUFBVUosR0FBUSxNQUFNLEtBQUssWUFBWSxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUM7QUFDbEUsUUFBTSxTQUFnQ0EsR0FBUSxNQUFNO0FBQ2hELFdBQU87QUFBQSxNQUNILFNBQVMsbUJBQW1CLElBQUk7QUFBQSxNQUNoQyxTQUFTLEtBQUs7QUFBQSxNQUNkLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNmO0FBQUEsRUFDSixHQUFHLENBQUMsS0FBSyxZQUFZLEtBQUssS0FBSyxDQUFDO0FBQ2hDLFFBQU0sYUFBYUE7QUFBQSxJQUNmLE1BQU0sZ0JBQUFELEdBQUMsZ0JBQWEsWUFBWSxLQUFLLE9BQVEsR0FBRyxRQUFRO0FBQUEsSUFDeEQsQ0FBQyxPQUFPLFNBQVMsTUFBTSxNQUFNLElBQUk7QUFBQSxFQUNyQztBQUVBLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUksR0FBa0IsS0FBSztBQUN6RCxRQUFNLGNBQWMsS0FBSyxVQUFVLFNBQVM7QUFDNUMsRUFBQUcsR0FBVSxNQUFNO0FBQ1osaUJBQWEsQ0FBQyxTQUFTO0FBQUEsRUFDM0IsR0FBRyxDQUFDLENBQUM7QUFFTCxTQUNJLGdCQUFBUCxHQUFDLFFBQUcsV0FBVyw2QkFBNkIsVUFBVSxnQkFBZ0IsS0FBSyxhQUFXLFFBQ2xGO0FBQUEsb0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxTQUFTLE1BQU0sYUFBYSxDQUFDUSxPQUFNLENBQUNBLEVBQUM7QUFBQSxRQUNyQztBQUFBLFFBQ0E7QUFBQTtBQUFBLElBQ0o7QUFBQSxJQUNBLGdCQUFBUixHQUFDLFdBQU0sV0FBVSxvQ0FBbUMsTUFBSyxZQUFXLFNBQWtCLFNBQVMsV0FBVztBQUFBLElBQzFHLGdCQUFBQSxHQUFDLFNBQ0csMEJBQUFBLEdBQUMsU0FBSSxXQUFVLDhCQUNWO0FBQUE7QUFBQSxNQUNELGdCQUFBQSxHQUFDLFNBQUksV0FBVSw2QkFDWCwwQkFBQUEsR0FBQyxrQkFBZSxpQkFBaUIsTUFBTSxpQkFBaUIsTUFBWSxHQUN4RTtBQUFBLE9BQ0osR0FDSjtBQUFBLElBQ0MsZUFBZSxDQUFDLGFBQWEsZ0JBQUFBLEdBQUMsWUFBVSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVc7QUFBQSxLQUM3RTtBQUVSO0FBRUEsU0FBUyxrQkFBa0I7QUFBQSxFQUN2QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FJRztBQUNDLFFBQU0sZUFBZSxDQUFDLG9CQUFvQjtBQUMxQyxNQUFJO0FBQVcsaUJBQWEsS0FBSyxjQUFjO0FBQy9DLE1BQUksQ0FBQztBQUFhLGlCQUFhLEtBQUssYUFBYTtBQUNqRCxTQUNJLGdCQUFBQSxHQUFDLFNBQUksU0FBa0IsV0FBVyxhQUFhLEtBQUssR0FBRyxHQUFHLEtBQUksUUFDMUQsMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxPQUFNO0FBQUEsTUFDTixPQUFNO0FBQUEsTUFDTixRQUFPO0FBQUEsTUFDUCxTQUFRO0FBQUEsTUFDUixNQUFLO0FBQUEsTUFDTCxRQUFPO0FBQUEsTUFDUCxnQkFBYTtBQUFBLE1BQ2Isa0JBQWU7QUFBQSxNQUNmLG1CQUFnQjtBQUFBLE1BQ2hCLFdBQVU7QUFBQSxNQUVWLDBCQUFBQSxHQUFDLFVBQUssR0FBRSxtQkFBa0I7QUFBQTtBQUFBLEVBQzlCLEdBQ0o7QUFFUjtBQU9PLFNBQVMsZUFBZTtBQUFBLEVBQzNCLGlCQUFpQjtBQUFBLEVBQ2pCO0FBQ0osR0FHRztBQUNDLFFBQU0sTUFBTUUsR0FBVyxXQUFXO0FBQ2xDLFFBQU0sT0FBT0EsR0FBVyxnQkFBZ0I7QUFDeEMsUUFBTSxFQUFFLFNBQVMsSUFBSTtBQUNyQixRQUFNLGtCQUFrQkQsR0FBUSxNQUFNO0FBQ2xDLFFBQUksdUJBQXVCO0FBQVcsYUFBTztBQUFBLFNBQ3hDO0FBQ0QsYUFBTyxPQUFPLE9BQU8sS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDUSxPQUFNO0FBQzVDLGVBQU87QUFBQSxVQUNILEtBQUtBLEdBQUU7QUFBQSxVQUNQLE1BQU0sU0FBUyxPQUFPQSxHQUFFLEtBQUs7QUFBQSxVQUM3QixRQUFRLENBQUM7QUFBQSxVQUNULFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxRQUNkO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0osR0FBRyxDQUFDLHFCQUFxQixLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQzlDLFNBQ0ksZ0JBQUFULEdBQUEsS0FDSywwQkFBZ0IsSUFBSSxDQUFDLFdBQVc7QUF6TjdDO0FBME5nQixXQUFPLE1BQU0sT0FBTyxJQUFJLGtCQUFrQjtBQUMxQyxRQUFJLFNBQVMsT0FBTyxPQUFPLGdCQUFnQixhQUFhLE9BQU8sYUFBYSxJQUFJLE9BQU87QUFDdkYsUUFBSSxXQUFrQjtBQUFBLE1BQ2xCLEtBQUssT0FBTztBQUFBLE1BQ1osT0FBTztBQUFBLE1BQ1AsS0FBSyxTQUFTLFNBQVMsTUFBTTtBQUFBLElBQ2pDO0FBQ0EsVUFBTSxDQUFDLFVBQVUsSUFBSUksS0FBa0IsVUFBSyxVQUFVLGlDQUFRLEdBQUcsTUFBMUIsbUJBQTZCLFVBQVMsU0FBUyxLQUFNO0FBQzVGLFVBQU0sQ0FBQyxRQUFRLFFBQVEsSUFBSSxvQkFBNkI7QUFBQSxNQUNwRCxTQUFTO0FBQUEsTUFDVCxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsUUFDTCxDQUFDLFFBQWlCO0FBdE8xQyxjQUFBTTtBQXVPNEIsZ0JBQU0sYUFBYSxDQUFDQyxPQUNoQkEsY0FBYSxXQUNQQSxHQUFFLFNBQVMsU0FBUyxpQkFBaUIsSUFDckNBLE1BQUssT0FDTCxTQUFTLFNBQVNBLEVBQUMsSUFDbkI7QUFFVixjQUFJLGFBQWEsS0FBSztBQUN0QixjQUFJLGNBQWMsS0FBSyxPQUFPO0FBQzFCLGdCQUFJLEtBQUssVUFBVSxPQUFPLEdBQUc7QUFBRyxtQkFBSyxVQUFVLE9BQU8sR0FBRyxFQUFFLFFBQVEsV0FBVyxHQUFHO0FBQ2pGLHFCQUFTLFNBQVMsS0FBSyxXQUFXO0FBQzlCLDJCQUFhO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQTtBQUFBLGdCQUNBLFlBQVdELE1BQUEsS0FBSyxVQUFVLEtBQUssTUFBcEIsZ0JBQUFBLElBQXVCLEtBQUs7QUFBQSxjQUMzQztBQUFBLFlBQ0o7QUFDQSx5QkFBYSxlQUFlLEtBQUssT0FBTyxPQUFPLEtBQUssV0FBVyxHQUFHLENBQUM7QUFDbkU7QUFBQSxjQUNJLElBQUk7QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0EsZ0JBQWdCLG1CQUFtQixLQUFLLFVBQVU7QUFBQSxjQUNsRDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsQ0FBQyxLQUFLLFNBQVM7QUFBQSxNQUNuQjtBQUFBLElBQ0osQ0FBQztBQUNELFFBQUksT0FBTyxPQUFPLFNBQVMsb0JBQW9CO0FBRTNDLG1CQUFhLFVBQVU7QUFBQSxJQUMzQjtBQUNBLFdBQ0ksZ0JBQUFWO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsTUFBTSxPQUFPLFFBQVEsU0FBUyxVQUFVLFVBQVUsRUFBRztBQUFBLFFBQ3JELE1BQU0sS0FBSztBQUFBLFFBQ1gsT0FBTyxLQUFLLFVBQVUsT0FBTyxHQUFHLEtBQUs7QUFBQSxRQUNyQyxRQUFRLE9BQU87QUFBQSxRQUNmLFFBQVE7QUFBQSxRQUNSLFNBQVMsT0FBTztBQUFBLFFBQ2hCLE9BQU87QUFBQSxRQUNQLFVBQVUsT0FBTztBQUFBO0FBQUEsSUFDckI7QUFBQSxFQUVSLENBQUMsR0FDTDtBQUVSO0FBRUEsU0FBUyxtQkFBbUIsTUFBMkM7QUFDbkUsUUFBTSxNQUFNRSxHQUFXLFdBQVc7QUFDbEMsUUFBTSxPQUFPQSxHQUFXLGdCQUFnQjtBQUN4QyxRQUFNLFNBQVNELEdBQVEsTUFBTyxnQkFBZ0IsbUJBQW1CLEtBQUssVUFBVSxLQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVGLFNBQU87QUFBQSxJQUNILE9BQU8sUUFBaUI7QUFDcEIsVUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixZQUFJLGFBQWEsR0FBRyxNQUFNLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxTQUFTLE1BQU07QUFDckUsaUJBQVMsU0FBUyxLQUFLLFdBQVc7QUFDOUIsdUJBQWEsZUFBZSxZQUFZLE9BQU8sS0FBSyxVQUFVLEtBQUssRUFBRSxHQUFHO0FBQUEsUUFDNUU7QUFDQSxjQUFNLFlBQVksSUFBSSxPQUFPLE1BQU0sTUFBTSxRQUFRLFVBQVU7QUFBQSxNQUMvRDtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUMsUUFBUSxJQUFJO0FBQUEsRUFDakI7QUFDSjs7O0FDOVJBLFNBQVMsbUJBQW1CO0FBQUEsRUFDeEI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBSUc7QUFFQyxlQUFhLEtBQUssSUFBSSxHQUFHLFVBQVU7QUFFbkMsUUFBTSxXQUFXLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQztBQUM5QyxRQUFNLGVBQWVXLEdBQVEsTUFBTSxXQUFXLFVBQVUsVUFBVSxHQUFHLENBQUMsVUFBVSxVQUFVLENBQUM7QUFFM0YsU0FDSSxnQkFBQUMsR0FBQyxTQUFJLFdBQVUscUJBRVA7QUFBQSxvQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLFdBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxRQUFRLEtBQUssUUFBUSxPQUFPLENBQUM7QUFBQSxRQUM1QyxVQUFVLFFBQVE7QUFBQSxRQUVsQiwwQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLGVBQVk7QUFBQSxZQUNaLE1BQUs7QUFBQSxZQUNMLFdBQVU7QUFBQSxZQUNWLFFBQU87QUFBQSxZQUNQLE1BQUs7QUFBQSxZQUNMLFNBQVE7QUFBQSxZQUNSLE9BQU07QUFBQSxZQUVOLDBCQUFBQTtBQUFBLGNBQUM7QUFBQTtBQUFBLGdCQUNHLEdBQUU7QUFBQSxnQkFDRixRQUFPO0FBQUEsZ0JBQ1Asa0JBQWU7QUFBQSxnQkFDZixtQkFBZ0I7QUFBQSxnQkFDaEIsZ0JBQWE7QUFBQTtBQUFBLFlBQ2hCO0FBQUE7QUFBQSxRQUNMO0FBQUE7QUFBQSxJQUNKO0FBQUEsSUFFSCxhQUFhLElBQUksQ0FBQyxPQUFPQyxPQUN0QixnQkFBQUQsR0FBQyxLQUNJO0FBQUEsTUFBQUMsS0FBSSxLQUNELGdCQUFBRDtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csV0FBVTtBQUFBLFVBQ1YsU0FBUyxNQUNMLFFBQVEsWUFBWSxnQkFBZ0IsVUFBVSxhQUFhLFFBQVFDLEVBQUMsSUFBSSxLQUFLLEVBQUU7QUFBQSxVQUduRjtBQUFBLDRCQUFBRDtBQUFBLGNBQUM7QUFBQTtBQUFBLGdCQUNHLGVBQVk7QUFBQSxnQkFDWixNQUFLO0FBQUEsZ0JBQ0wsUUFBTztBQUFBLGdCQUNQLG1CQUFnQjtBQUFBLGdCQUNoQixrQkFBZTtBQUFBLGdCQUNmLG1CQUFnQjtBQUFBLGdCQUNoQixnQkFBYTtBQUFBLGdCQUNiLFNBQVE7QUFBQSxnQkFDUixPQUFNO0FBQUEsZ0JBQ04sT0FBTTtBQUFBLGdCQUVOO0FBQUEsa0NBQUFBLEdBQUMsWUFBTyxJQUFHLE1BQUssSUFBRyxNQUFLLE1BQUssZ0JBQWUsR0FBRSxLQUFJO0FBQUEsa0JBQ2xELGdCQUFBQSxHQUFDLFlBQU8sSUFBRyxNQUFLLElBQUcsTUFBSyxNQUFLLGdCQUFlLEdBQUUsS0FBSTtBQUFBLGtCQUNsRCxnQkFBQUEsR0FBQyxZQUFPLElBQUcsS0FBSSxJQUFHLE1BQUssTUFBSyxnQkFBZSxHQUFFLEtBQUk7QUFBQTtBQUFBO0FBQUEsWUFDckQ7QUFBQSxZQUNBLGdCQUFBQTtBQUFBLGNBQUM7QUFBQTtBQUFBLGdCQUNHLGVBQVk7QUFBQSxnQkFDWixNQUFLO0FBQUEsZ0JBQ0wsV0FBVTtBQUFBLGdCQUNWLFFBQU87QUFBQSxnQkFDUCxNQUFLO0FBQUEsZ0JBQ0wsbUJBQWdCO0FBQUEsZ0JBQ2hCLFFBQU87QUFBQSxnQkFDUCxrQkFBZTtBQUFBLGdCQUNmLG1CQUFnQjtBQUFBLGdCQUNoQixnQkFBYTtBQUFBLGdCQUNiLFNBQVE7QUFBQSxnQkFDUixPQUFNO0FBQUEsZ0JBQ04sT0FBTywwQkFDSCxnQkFBZ0IsVUFBVSxhQUFhLFFBQVFDLEVBQUMsSUFBSSxTQUFTO0FBQUEsZ0JBR2pFO0FBQUEsa0NBQUFELEdBQUMsVUFBSyxHQUFFLGtCQUFpQjtBQUFBLGtCQUN6QixnQkFBQUEsR0FBQyxVQUFLLEdBQUUsaUJBQWdCO0FBQUE7QUFBQTtBQUFBLFlBQzVCO0FBQUE7QUFBQTtBQUFBLE1BQ0o7QUFBQSxNQUVILE1BQU0sSUFBSSxDQUFDRSxPQUNSLGdCQUFBRjtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csV0FBVywwQkFDUEUsT0FBTSxXQUFXLG1DQUFtQztBQUFBLFVBRXhELFNBQVMsQ0FBQyxVQUFlLFFBQVFBLEVBQUM7QUFBQSxVQUVqQyxVQUFBQSxLQUFJO0FBQUE7QUFBQSxNQUNULENBQ0g7QUFBQSxPQUNMLENBQ0g7QUFBQSxJQUVHLGdCQUFBRjtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0csV0FBVTtBQUFBLFFBQ1YsU0FBUyxNQUFNLFNBQVMsYUFBYSxLQUFLLFFBQVEsT0FBTyxDQUFDO0FBQUEsUUFDMUQsVUFBVSxTQUFTLGFBQWE7QUFBQSxRQUVoQywwQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLGVBQVk7QUFBQSxZQUNaLE1BQUs7QUFBQSxZQUNMLFdBQVU7QUFBQSxZQUNWLFFBQU87QUFBQSxZQUNQLE1BQUs7QUFBQSxZQUNMLFNBQVE7QUFBQSxZQUNSLE9BQU07QUFBQSxZQUVOLDBCQUFBQTtBQUFBLGNBQUM7QUFBQTtBQUFBLGdCQUNHLEdBQUU7QUFBQSxnQkFDRixRQUFPO0FBQUEsZ0JBQ1Asa0JBQWU7QUFBQSxnQkFDZixtQkFBZ0I7QUFBQSxnQkFDaEIsZ0JBQWE7QUFBQTtBQUFBLFlBQ2hCO0FBQUE7QUFBQSxRQUNMO0FBQUE7QUFBQSxJQUNKO0FBQUEsS0FFUjtBQUVSO0FBR08sSUFBTSxrQkFBa0IsR0FBTSxLQUFLLGtCQUFrQjtBQUtyRCxTQUFTLFVBQVU7QUFBQSxFQUN0QixjQUFjO0FBQUEsRUFDZDtBQUFBLEVBQ0E7QUFDSixHQUk2QztBQUV6QyxRQUFNLGFBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxLQUFLLFdBQVcsUUFBUSxDQUFDO0FBQzdELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUUsR0FBUyxNQUFNLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBRXRGLFFBQU0saUJBQWlCQztBQUFBLElBQ25CLENBQUNDLFVBQWlCLGFBQWEsTUFBTUEsT0FBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLFFBQVE7QUFBQSxJQUN4RSxDQUFDLFVBQVUsVUFBVTtBQUFBLEVBQ3pCO0FBRUEsUUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLFlBQVksUUFBUSxHQUFHLEdBQUcsYUFBYSxDQUFDO0FBQ3RFLFNBQU8sQ0FBQyxNQUFNLFlBQVksY0FBYztBQUM1QztBQXlCTyxTQUFTLGtCQUFrQjtBQUFBLEVBQzlCLGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FNVztBQUNQLFFBQU0sV0FBV0MsR0FBVyxnQkFBZ0I7QUFFNUMsUUFBTSxXQUFXLE9BQU8sV0FBVyxXQUFXLFNBQVMsU0FBUztBQUNoRSxRQUFNLGdCQUFnQixPQUFPLFdBQVcsWUFBWSxXQUFXO0FBQy9ELFFBQU0sZUFDRCxPQUFPLHVCQUF1QixZQUFZLHNCQUFzQixZQUNqRSxDQUFDLEVBQUUsa0RBQXNCLFNBQVM7QUFFdEMsUUFBTSxDQUFDLE1BQU0sWUFBWSxVQUFVLElBQUksVUFBVSxFQUFFLGFBQWEsVUFBVSxTQUFTLENBQUM7QUFHcEYsUUFBTSxVQUFVRjtBQUFBLElBQ1osQ0FBQyxZQUFvQjtBQTVON0I7QUE2TlksVUFBSSxRQUFRLFdBQVcsYUFBYSxjQUFjO0FBQzlDLHdCQUFVLFlBQVYsbUJBQW1CLGVBQWU7QUFBQSxVQUM5QixVQUFVO0FBQUEsVUFDVixPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsUUFDWjtBQUFBLE1BQ0o7QUFFQSxpQkFBVyxPQUFPO0FBQUEsSUFDdEI7QUFBQSxJQUNBLENBQUMsTUFBTSxXQUFXLGNBQWMsVUFBVTtBQUFBLEVBQzlDO0FBRUEsU0FBTyxFQUFFLFNBQVMsZUFBZSxRQUFRLGNBQWMsTUFBTSxVQUFVLFlBQVksUUFBUTtBQUMvRjtBQUtBLFNBQVMsTUFBTUcsUUFBZUMsTUFBYUMsTUFBcUI7QUFDNUQsTUFBSUYsU0FBUUM7QUFBSyxXQUFPQTtBQUN4QixNQUFJRCxTQUFRRTtBQUFLLFdBQU9BO0FBQ3hCLFNBQU9GO0FBQ1g7QUFLQSxTQUFTLFdBQVcsTUFBYyxZQUFnQztBQUU5RCxNQUFJLGFBQWE7QUFBSSxXQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsUUFBUSxXQUFXLEdBQUcsQ0FBQ0csSUFBR1IsT0FBTUEsRUFBQyxDQUFDO0FBSTVFLE1BQUksT0FBTztBQUNQLFdBQU87QUFBQSxNQUNILENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQUEsTUFDdkIsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQUEsSUFDbkM7QUFBQSxXQUNLLE9BQU8sYUFBYTtBQUN6QixXQUFPO0FBQUEsTUFDSCxDQUFDLEdBQUcsQ0FBQztBQUFBLE1BQ0w7QUFBQSxRQUNJLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFBQTtBQUVBLFdBQU87QUFBQSxNQUNILENBQUMsR0FBRyxDQUFDO0FBQUEsTUFDTCxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQUEsTUFDN0MsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQUEsSUFDbkM7QUFDUjtBQUlBLFNBQVMsZ0JBQWdCLFVBQWtCLG9CQUE0QixnQkFBaUM7QUFHcEcsTUFBSSx1QkFBdUIsR0FBRztBQUMxQixRQUFJLFdBQVcsR0FBRztBQUNkLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0osT0FBTztBQUNILFFBQUksbUJBQW1CLEdBQUc7QUFDdEIsYUFBTztBQUFBLElBQ1gsT0FBTztBQUNILGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjtBQUNKOzs7QUNsSUEsSUFBSSxhQUFhO0FBQUEsRUFDZixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsV0FBVyxHQUFHLFFBQVEsNkpBQTZKO0FBQ3ZNO0FBMHpGQSxJQUFJLFNBQVM7QUFBQSxFQUNYLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxpVEFBaVQ7QUFDMVY7QUErMEJBLElBQUksV0FBVztBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLDRKQUE0SjtBQUNyTTs7O0FDL3pIQSxTQUFTUyxTQUFRLFFBQVEsZ0JBQWdCO0FBQ3ZDLE1BQUksT0FBTyxPQUFPLEtBQUssTUFBTTtBQUU3QixNQUFJLE9BQU8sdUJBQXVCO0FBQ2hDLFFBQUksVUFBVSxPQUFPLHNCQUFzQixNQUFNO0FBQ2pELHVCQUFtQixVQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFDekQsYUFBTyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsRUFBRTtBQUFBLElBQ3RELENBQUMsSUFBSSxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU87QUFBQSxFQUNwQztBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVNDLGdCQUFlLFFBQVE7QUFDOUIsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVUsUUFBUUEsTUFBSztBQUN6QyxRQUFJLFNBQVMsUUFBUSxVQUFVQSxFQUFDLElBQUksVUFBVUEsRUFBQyxJQUFJLENBQUM7QUFDcEQsSUFBQUEsS0FBSSxJQUFJRixTQUFRLE9BQU8sTUFBTSxHQUFHLElBQUUsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN6RCxNQUFBRyxpQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDMUMsQ0FBQyxJQUFJLE9BQU8sNEJBQTRCLE9BQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDLElBQUlILFNBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUNqSyxhQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDakYsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTSSxTQUFRLEtBQUs7QUFDcEI7QUFFQSxTQUFPQSxXQUFVLGNBQWMsT0FBTyxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsU0FBVUMsTUFBSztBQUNsRyxXQUFPLE9BQU9BO0FBQUEsRUFDaEIsSUFBSSxTQUFVQSxNQUFLO0FBQ2pCLFdBQU9BLFFBQU8sY0FBYyxPQUFPLFVBQVVBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxFQUMxSCxHQUFHRCxTQUFRLEdBQUc7QUFDaEI7QUFrREEsU0FBU0UsaUJBQWdCLFVBQVUsYUFBYTtBQUM5QyxNQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFDdEMsVUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsRUFDekQ7QUFDRjtBQUVBLFNBQVNDLG1CQUFrQixRQUFRLE9BQU87QUFDeEMsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUNyQyxRQUFJLGFBQWEsTUFBTUEsRUFBQztBQUN4QixlQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELGVBQVcsZUFBZTtBQUMxQixRQUFJLFdBQVc7QUFBWSxpQkFBVyxXQUFXO0FBQ2pELFdBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsRUFDMUQ7QUFDRjtBQUVBLFNBQVNDLGNBQWEsYUFBYSxZQUFZLGFBQWE7QUFDMUQsTUFBSTtBQUFZLElBQUFGLG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUNuRSxNQUFJO0FBQWEsSUFBQUEsbUJBQWtCLGFBQWEsV0FBVztBQUMzRCxTQUFPLGVBQWUsYUFBYSxhQUFhO0FBQUEsSUFDOUMsVUFBVTtBQUFBLEVBQ1osQ0FBQztBQUNELFNBQU87QUFDVDtBQUVBLFNBQVNHLGlCQUFnQixLQUFLLEtBQUssT0FBTztBQUN4QyxNQUFJLE9BQU8sS0FBSztBQUNkLFdBQU8sZUFBZSxLQUFLLEtBQUs7QUFBQSxNQUM5QjtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLE1BQ2QsVUFBVTtBQUFBLElBQ1osQ0FBQztBQUFBLEVBQ0gsT0FBTztBQUNMLFFBQUksR0FBRyxJQUFJO0FBQUEsRUFDYjtBQUVBLFNBQU87QUFDVDtBQTZCQSxTQUFTQyxnQkFBZSxLQUFLQyxJQUFHO0FBQzlCLFNBQU9DLGlCQUFnQixHQUFHLEtBQUtDLHVCQUFzQixLQUFLRixFQUFDLEtBQUtHLDZCQUE0QixLQUFLSCxFQUFDLEtBQUtJLGtCQUFpQjtBQUMxSDtBQUVBLFNBQVNDLG9CQUFtQixLQUFLO0FBQy9CLFNBQU9DLG9CQUFtQixHQUFHLEtBQUtDLGtCQUFpQixHQUFHLEtBQUtKLDZCQUE0QixHQUFHLEtBQUtLLG9CQUFtQjtBQUNwSDtBQUVBLFNBQVNGLG9CQUFtQixLQUFLO0FBQy9CLE1BQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxXQUFPRyxtQkFBa0IsR0FBRztBQUN0RDtBQUVBLFNBQVNSLGlCQUFnQixLQUFLO0FBQzVCLE1BQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxXQUFPO0FBQ2pDO0FBRUEsU0FBU00sa0JBQWlCLE1BQU07QUFDOUIsTUFBSSxPQUFPLFdBQVcsZUFBZSxLQUFLLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUs7QUFBTSxXQUFPLE1BQU0sS0FBSyxJQUFJO0FBQzFIO0FBRUEsU0FBU0wsdUJBQXNCLEtBQUtGLElBQUc7QUFDckMsTUFBSSxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxZQUFZO0FBRXZHLE1BQUksTUFBTTtBQUFNO0FBQ2hCLE1BQUksT0FBTyxDQUFDO0FBQ1osTUFBSVUsTUFBSztBQUNULE1BQUksS0FBSztBQUVULE1BQUksSUFBSTtBQUVSLE1BQUk7QUFDRixTQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFQSxPQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBT0EsTUFBSyxNQUFNO0FBQ2hFLFdBQUssS0FBSyxHQUFHLEtBQUs7QUFFbEIsVUFBSVYsTUFBSyxLQUFLLFdBQVdBO0FBQUc7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsU0FBUyxLQUFQO0FBQ0EsU0FBSztBQUNMLFNBQUs7QUFBQSxFQUNQLFVBQUU7QUFDQSxRQUFJO0FBQ0YsVUFBSSxDQUFDVSxPQUFNLEdBQUcsUUFBUSxLQUFLO0FBQU0sV0FBRyxRQUFRLEVBQUU7QUFBQSxJQUNoRCxVQUFFO0FBQ0EsVUFBSTtBQUFJLGNBQU07QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTUCw2QkFBNEJRLElBQUcsUUFBUTtBQUM5QyxNQUFJLENBQUNBO0FBQUc7QUFDUixNQUFJLE9BQU9BLE9BQU07QUFBVSxXQUFPRixtQkFBa0JFLElBQUcsTUFBTTtBQUM3RCxNQUFJQyxLQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUtELEVBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUNyRCxNQUFJQyxPQUFNLFlBQVlELEdBQUU7QUFBYSxJQUFBQyxLQUFJRCxHQUFFLFlBQVk7QUFDdkQsTUFBSUMsT0FBTSxTQUFTQSxPQUFNO0FBQU8sV0FBTyxNQUFNLEtBQUtELEVBQUM7QUFDbkQsTUFBSUMsT0FBTSxlQUFlLDJDQUEyQyxLQUFLQSxFQUFDO0FBQUcsV0FBT0gsbUJBQWtCRSxJQUFHLE1BQU07QUFDakg7QUFFQSxTQUFTRixtQkFBa0IsS0FBSyxLQUFLO0FBQ25DLE1BQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFVBQU0sSUFBSTtBQUUvQyxXQUFTVCxLQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHQSxLQUFJLEtBQUtBO0FBQUssU0FBS0EsRUFBQyxJQUFJLElBQUlBLEVBQUM7QUFFcEUsU0FBTztBQUNUO0FBRUEsU0FBU1Esc0JBQXFCO0FBQzVCLFFBQU0sSUFBSSxVQUFVLHNJQUFzSTtBQUM1SjtBQUVBLFNBQVNKLG9CQUFtQjtBQUMxQixRQUFNLElBQUksVUFBVSwySUFBMkk7QUFDaks7QUFFQSxJQUFJUyxRQUFPLFNBQVNBLFFBQU87QUFBQztBQUU1QixJQUFJLFVBQVUsQ0FBQztBQUNmLElBQUksWUFBWSxDQUFDO0FBQ2pCLElBQUkscUJBQXFCO0FBQ3pCLElBQUksZUFBZTtBQUFBLEVBQ2pCLE1BQU1BO0FBQUEsRUFDTixTQUFTQTtBQUNYO0FBRUEsSUFBSTtBQUNGLE1BQUksT0FBTyxXQUFXO0FBQWEsY0FBVTtBQUM3QyxNQUFJLE9BQU8sYUFBYTtBQUFhLGdCQUFZO0FBQ2pELE1BQUksT0FBTyxxQkFBcUI7QUFBYSx5QkFBcUI7QUFDbEUsTUFBSSxPQUFPLGdCQUFnQjtBQUFhLG1CQUFlO0FBQ3pELFNBQVNDLElBQVA7QUFBVztBQUViLElBQUlDLFFBQU8sUUFBUSxhQUFhLENBQUM7QUFBakMsSUFDSSxpQkFBaUJBLE1BQUs7QUFEMUIsSUFFSSxZQUFZLG1CQUFtQixTQUFTLEtBQUs7QUFDakQsSUFBSSxTQUFTO0FBQ2IsSUFBSSxXQUFXO0FBQ2YsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSxjQUFjO0FBQ2xCLElBQUksYUFBYSxDQUFDLENBQUMsT0FBTztBQUMxQixJQUFJLFNBQVMsQ0FBQyxDQUFDLFNBQVMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLFFBQVEsT0FBTyxTQUFTLHFCQUFxQixjQUFjLE9BQU8sU0FBUyxrQkFBa0I7QUFDbkosSUFBSSxRQUFRLENBQUMsVUFBVSxRQUFRLE1BQU0sS0FBSyxDQUFDLFVBQVUsUUFBUSxVQUFVO0FBRXZFLElBQUk7QUFBSixJQUFrQjtBQUFsQixJQUFpQztBQUFqQyxJQUFnRDtBQUFoRCxJQUErRDtBQUUvRCxJQUFJLHVCQUF1QjtBQUMzQixJQUFJLGdCQUFnQjtBQUNwQixJQUFJLHFCQUFxQjtBQUN6QixJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLGdCQUFnQjtBQUNwQixJQUFJLHlCQUF5QjtBQUM3QixJQUFJLGlDQUFpQztBQUNyQyxJQUFJLGNBQWM7QUFDbEIsSUFBSSxZQUFZO0FBQ2hCLElBQUksOEJBQThCO0FBQ2xDLElBQUksMEJBQTBCO0FBQzlCLElBQUksc0NBQXNDLENBQUMsUUFBUSxRQUFRLFNBQVMsUUFBUTtBQUM1RSxJQUFJLGFBQWEsV0FBWTtBQUMzQixNQUFJO0FBQ0YsV0FBTztBQUFBLEVBQ1QsU0FBU0QsSUFBUDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0YsRUFBRTtBQUNGLElBQUksaUJBQWlCO0FBQ3JCLElBQUksZUFBZTtBQUNuQixJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsWUFBWTtBQUU1QyxTQUFTLFlBQVksS0FBSztBQUV4QixTQUFPLElBQUksTUFBTSxLQUFLO0FBQUEsSUFDcEIsS0FBSyxTQUFTRSxLQUFJLFFBQVEsTUFBTTtBQUM5QixhQUFPLFFBQVEsU0FBUyxPQUFPLElBQUksSUFBSSxPQUFPLGNBQWM7QUFBQSxJQUM5RDtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBQ0EsSUFBSSxrQkFBa0IsYUFBYSxlQUFlLENBQUMsR0FBR0MsaUJBQWdCLGNBQWMsZ0JBQWdCO0FBQUEsRUFDbEcsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1Ysa0JBQWtCO0FBQ3BCLENBQUMsR0FBR0EsaUJBQWdCLGNBQWMsY0FBYztBQUFBLEVBQzlDLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFFBQVE7QUFBQSxFQUNSLGNBQWM7QUFBQSxFQUNkLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFFBQVE7QUFBQSxFQUNSLFdBQVc7QUFDYixDQUFDLEdBQUcsYUFBYTtBQUNqQixJQUFJLGtCQUFrQixhQUFhLGdCQUFnQixDQUFDLEdBQUdBLGlCQUFnQixlQUFlLGdCQUFnQjtBQUFBLEVBQ3BHLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFBQSxFQUNULFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFDUCxDQUFDLEdBQUdBLGlCQUFnQixlQUFlLGNBQWM7QUFBQSxFQUMvQyxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQ1IsQ0FBQyxHQUFHLGNBQWM7QUFDbEIsSUFBSSx1QkFBdUIsYUFBYSxnQkFBZ0IsQ0FBQyxHQUFHQSxpQkFBZ0IsZUFBZSxnQkFBZ0I7QUFBQSxFQUN6RyxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQ1AsQ0FBQyxHQUFHQSxpQkFBZ0IsZUFBZSxjQUFjO0FBQUEsRUFDL0MsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUNSLENBQUMsR0FBRyxjQUFjO0FBQ2xCLElBQUksdUJBQXVCLGFBQWEsZ0JBQWdCLENBQUMsR0FBR0EsaUJBQWdCLGVBQWUsZ0JBQWdCO0FBQUEsRUFDekcsYUFBYTtBQUFBLEVBQ2IsY0FBYztBQUFBLEVBQ2QsVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUNiLENBQUMsR0FBR0EsaUJBQWdCLGVBQWUsY0FBYztBQUFBLEVBQy9DLFlBQVk7QUFBQSxFQUNaLGNBQWM7QUFBQSxFQUNkLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFDYixDQUFDLEdBQUcsY0FBYztBQUNsQixJQUFJLGdDQUFnQztBQUVwQyxJQUFJLHdCQUF3QjtBQUM1QixJQUFJLHNCQUFzQjtBQUMxQixJQUFJLHdCQUF3QixhQUFhLGdCQUFnQixDQUFDLEdBQUdBLGlCQUFnQixlQUFlLGdCQUFnQjtBQUFBLEVBQzFHLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFDUCxDQUFDLEdBQUdBLGlCQUFnQixlQUFlLGNBQWM7QUFBQSxFQUMvQyxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQ1AsQ0FBQyxHQUFHLGNBQWM7QUFDbEIsSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTtBQUM3QyxJQUFJLGNBQWMsU0FBUyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzFFLElBQUksa0NBQWtDLENBQUMsU0FBUyxlQUFlLGFBQWEscUJBQXFCLGNBQWM7QUFDL0csSUFBSSxrQkFBa0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQ2I7QUFDQSxJQUFJLFdBQVcsb0JBQUksSUFBSTtBQUN2QixPQUFPLEtBQUssZ0JBQWdCLGNBQWMsQ0FBQyxFQUFFLElBQUksU0FBUyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQzVFLE9BQU8sS0FBSyxnQkFBZ0IsWUFBWSxDQUFDLEVBQUUsSUFBSSxTQUFTLElBQUksS0FBSyxRQUFRLENBQUM7QUFDMUUsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sVUFBVVosb0JBQW1CLFFBQVEsR0FBRyxDQUFDLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPLFFBQVEsVUFBVSxRQUFRLGFBQWEsVUFBVSxhQUFhLG1CQUFtQixpQkFBaUIsUUFBUSxNQUFNLFdBQVcsa0JBQWtCLGVBQWUsVUFBVSxNQUFNLGFBQWEsY0FBYyxTQUFTLGNBQWMsY0FBYyxhQUFhLGFBQWEsU0FBUyxjQUFjLGdCQUFnQixRQUFRLFlBQVksWUFBWSxTQUFTLE1BQU0sZ0JBQWdCLE9BQU8sZ0JBQWdCLGNBQWMsZ0JBQWdCLFNBQVMsZ0JBQWdCLFNBQVMsQ0FBQyxFQUFFLE9BQU8sU0FBUyxJQUFJLFNBQVVPLElBQUc7QUFDcmxCLFNBQU8sR0FBRyxPQUFPQSxJQUFHLEdBQUc7QUFDekIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxZQUFZLElBQUksU0FBVUEsSUFBRztBQUN0QyxTQUFPLEtBQUssT0FBT0EsRUFBQztBQUN0QixDQUFDLENBQUM7QUFFRixJQUFJLFVBQVUsT0FBTyxxQkFBcUIsQ0FBQztBQUUzQyxTQUFTLGNBQWMsTUFBTTtBQUMzQixNQUFJLFVBQVUsU0FBUyxjQUFjLFlBQVksT0FBTyxHQUFHO0FBRTNELE1BQUksU0FBUztBQUNYLFdBQU8sUUFBUSxhQUFhLElBQUk7QUFBQSxFQUNsQztBQUNGO0FBRUEsU0FBUyxPQUFPLEtBQUs7QUFHbkIsTUFBSSxRQUFRO0FBQUksV0FBTztBQUN2QixNQUFJLFFBQVE7QUFBUyxXQUFPO0FBQzVCLE1BQUksUUFBUTtBQUFRLFdBQU87QUFDM0IsU0FBTztBQUNUO0FBRUEsSUFBSSxZQUFZLE9BQU8sU0FBUyxrQkFBa0IsWUFBWTtBQUN4RCxVQUFRLENBQUMsQ0FBQyxzQkFBc0IsY0FBYyxHQUFHLENBQUMsbUJBQW1CLFdBQVcsR0FBRyxDQUFDLHVCQUF1QixlQUFlLEdBQUcsQ0FBQyxzQkFBc0IsY0FBYyxHQUFHLENBQUMsMEJBQTBCLGtCQUFrQixHQUFHLENBQUMseUJBQXlCLGdCQUFnQixHQUFHLENBQUMscUJBQXFCLFlBQVksR0FBRyxDQUFDLGtCQUFrQixVQUFVLEdBQUcsQ0FBQywrQkFBK0Isc0JBQXNCLEdBQUcsQ0FBQywwQkFBMEIsa0JBQWtCLEdBQUcsQ0FBQyx3QkFBd0IsZ0JBQWdCLEdBQUcsQ0FBQyw2QkFBNkIsb0JBQW9CLEdBQUcsQ0FBQyw0QkFBNEIsb0JBQW9CLEdBQUcsQ0FBQywyQkFBMkIsa0JBQWtCLENBQUM7QUFDeG5CLFFBQU0sUUFBUSxTQUFVRyxPQUFNO0FBQzVCLFFBQUlHLFNBQVFuQixnQkFBZWdCLE9BQU0sQ0FBQyxHQUM5QixPQUFPRyxPQUFNLENBQUMsR0FDZCxNQUFNQSxPQUFNLENBQUM7QUFFakIsUUFBSSxNQUFNLE9BQU8sY0FBYyxJQUFJLENBQUM7QUFFcEMsUUFBSSxRQUFRLFVBQWEsUUFBUSxNQUFNO0FBQ3JDLGNBQVEsR0FBRyxJQUFJO0FBQUEsSUFDakI7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVpNO0FBY04sSUFBSSxXQUFXO0FBQUEsRUFDYixjQUFjO0FBQUEsRUFDZCxlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxrQkFBa0I7QUFBQSxFQUNsQixnQkFBZ0I7QUFBQSxFQUNoQixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixzQkFBc0I7QUFBQSxFQUN0QixrQkFBa0I7QUFBQSxFQUNsQixnQkFBZ0I7QUFBQSxFQUNoQixvQkFBb0I7QUFBQSxFQUNwQixvQkFBb0I7QUFBQSxFQUNwQixrQkFBa0I7QUFDcEI7QUFFQSxJQUFJLFFBQVEsY0FBYztBQUN4QixVQUFRLFlBQVksUUFBUTtBQUM5QjtBQUVBLElBQUksVUFBVUMsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxRQUFRLEdBQUcsT0FBTztBQUVsRSxJQUFJLENBQUMsUUFBUTtBQUFnQixVQUFRLG1CQUFtQjtBQUN4RCxJQUFJLFNBQVMsQ0FBQztBQUNkLE9BQU8sS0FBSyxRQUFRLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDM0MsU0FBTyxlQUFlLFFBQVEsS0FBSztBQUFBLElBQ2pDLFlBQVk7QUFBQSxJQUNaLEtBQUssU0FBU0MsS0FBSSxLQUFLO0FBQ3JCLGNBQVEsR0FBRyxJQUFJO0FBRWYsa0JBQVksUUFBUSxTQUFVLElBQUk7QUFDaEMsZUFBTyxHQUFHLE1BQU07QUFBQSxNQUNsQixDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsS0FBSyxTQUFTSixPQUFNO0FBQ2xCLGFBQU8sUUFBUSxHQUFHO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxlQUFlLFFBQVEsZ0JBQWdCO0FBQUEsRUFDNUMsWUFBWTtBQUFBLEVBQ1osS0FBSyxTQUFTLElBQUksS0FBSztBQUNyQixZQUFRLFlBQVk7QUFFcEIsZ0JBQVksUUFBUSxTQUFVLElBQUk7QUFDaEMsYUFBTyxHQUFHLE1BQU07QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBQ0EsS0FBSyxTQUFTLE1BQU07QUFDbEIsV0FBTyxRQUFRO0FBQUEsRUFDakI7QUFDRixDQUFDO0FBQ0QsT0FBTyxvQkFBb0I7QUFDM0IsSUFBSSxjQUFjLENBQUM7QUFDbkIsU0FBU0ssVUFBUyxJQUFJO0FBQ3BCLGNBQVksS0FBSyxFQUFFO0FBRW5CLFNBQU8sV0FBWTtBQUNqQixnQkFBWSxPQUFPLFlBQVksUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUFBLEVBQy9DO0FBQ0Y7QUFFQSxJQUFJQyxLQUFJO0FBQ1IsSUFBSSx1QkFBdUI7QUFBQSxFQUN6QixNQUFNO0FBQUEsRUFDTixHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQ1Q7QUFDQSxTQUFTLFVBQVVDLE1BQUs7QUFDdEIsTUFBSSxDQUFDQSxRQUFPLENBQUMsUUFBUTtBQUNuQjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFDMUMsUUFBTSxhQUFhLFFBQVEsVUFBVTtBQUNyQyxRQUFNLFlBQVlBO0FBQ2xCLE1BQUksZUFBZSxTQUFTLEtBQUs7QUFDakMsTUFBSSxjQUFjO0FBRWxCLFdBQVN2QixLQUFJLGFBQWEsU0FBUyxHQUFHQSxLQUFJLElBQUlBLE1BQUs7QUFDakQsUUFBSSxRQUFRLGFBQWFBLEVBQUM7QUFDMUIsUUFBSSxXQUFXLE1BQU0sV0FBVyxJQUFJLFlBQVk7QUFFaEQsUUFBSSxDQUFDLFNBQVMsTUFBTSxFQUFFLFFBQVEsT0FBTyxJQUFJLElBQUk7QUFDM0Msb0JBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLEtBQUssYUFBYSxPQUFPLFdBQVc7QUFDN0MsU0FBT3VCO0FBQ1Q7QUFDQSxJQUFJLFNBQVM7QUFDYixTQUFTLGVBQWU7QUFDdEIsTUFBSUMsUUFBTztBQUNYLE1BQUksS0FBSztBQUVULFNBQU9BLFVBQVMsR0FBRztBQUNqQixVQUFNLE9BQU8sS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQ1Q7QUFDQSxTQUFTLFFBQVEsS0FBSztBQUNwQixNQUFJQyxTQUFRLENBQUM7QUFFYixXQUFTekIsTUFBSyxPQUFPLENBQUMsR0FBRyxXQUFXLEdBQUdBLFFBQU07QUFDM0MsSUFBQXlCLE9BQU16QixFQUFDLElBQUksSUFBSUEsRUFBQztBQUFBLEVBQ2xCO0FBRUEsU0FBT3lCO0FBQ1Q7QUFDQSxTQUFTLFdBQVdDLE9BQU07QUFDeEIsTUFBSUEsTUFBSyxXQUFXO0FBQ2xCLFdBQU8sUUFBUUEsTUFBSyxTQUFTO0FBQUEsRUFDL0IsT0FBTztBQUNMLFlBQVFBLE1BQUssYUFBYSxPQUFPLEtBQUssSUFBSSxNQUFNLEdBQUcsRUFBRSxPQUFPLFNBQVUxQixJQUFHO0FBQ3ZFLGFBQU9BO0FBQUEsSUFDVCxDQUFDO0FBQUEsRUFDSDtBQUNGO0FBQ0EsU0FBUyxXQUFXLEtBQUs7QUFDdkIsU0FBTyxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsTUFBTSxPQUFPLEVBQUUsUUFBUSxNQUFNLFFBQVEsRUFBRSxRQUFRLE1BQU0sT0FBTyxFQUFFLFFBQVEsTUFBTSxNQUFNLEVBQUUsUUFBUSxNQUFNLE1BQU07QUFDeEk7QUFDQSxTQUFTLGVBQWUsWUFBWTtBQUNsQyxTQUFPLE9BQU8sS0FBSyxjQUFjLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBVSxLQUFLLGVBQWU7QUFDeEUsV0FBTyxNQUFNLEdBQUcsT0FBTyxlQUFlLElBQUssRUFBRSxPQUFPLFdBQVcsV0FBVyxhQUFhLENBQUMsR0FBRyxJQUFLO0FBQUEsRUFDbEcsR0FBRyxFQUFFLEVBQUUsS0FBSztBQUNkO0FBQ0EsU0FBUyxXQUFXMkIsU0FBUTtBQUMxQixTQUFPLE9BQU8sS0FBS0EsV0FBVSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQ2hFLFdBQU8sTUFBTSxHQUFHLE9BQU8sV0FBVyxJQUFJLEVBQUUsT0FBT0EsUUFBTyxTQUFTLEVBQUUsS0FBSyxHQUFHLEdBQUc7QUFBQSxFQUM5RSxHQUFHLEVBQUU7QUFDUDtBQUNBLFNBQVMsc0JBQXNCQyxZQUFXO0FBQ3hDLFNBQU9BLFdBQVUsU0FBUyxxQkFBcUIsUUFBUUEsV0FBVSxNQUFNLHFCQUFxQixLQUFLQSxXQUFVLE1BQU0scUJBQXFCLEtBQUtBLFdBQVUsV0FBVyxxQkFBcUIsVUFBVUEsV0FBVSxTQUFTQSxXQUFVO0FBQzlOO0FBQ0EsU0FBUyxnQkFBZ0JiLE9BQU07QUFDN0IsTUFBSWEsYUFBWWIsTUFBSyxXQUNqQixpQkFBaUJBLE1BQUssZ0JBQ3RCLFlBQVlBLE1BQUs7QUFDckIsTUFBSSxRQUFRO0FBQUEsSUFDVixXQUFXLGFBQWEsT0FBTyxpQkFBaUIsR0FBRyxPQUFPO0FBQUEsRUFDNUQ7QUFDQSxNQUFJLGlCQUFpQixhQUFhLE9BQU9hLFdBQVUsSUFBSSxJQUFJLElBQUksRUFBRSxPQUFPQSxXQUFVLElBQUksSUFBSSxJQUFJO0FBQzlGLE1BQUksYUFBYSxTQUFTLE9BQU9BLFdBQVUsT0FBTyxNQUFNQSxXQUFVLFFBQVEsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPQSxXQUFVLE9BQU8sTUFBTUEsV0FBVSxRQUFRLEtBQUssSUFBSSxJQUFJO0FBQ3RKLE1BQUksY0FBYyxVQUFVLE9BQU9BLFdBQVUsUUFBUSxPQUFPO0FBQzVELE1BQUksUUFBUTtBQUFBLElBQ1YsV0FBVyxHQUFHLE9BQU8sZ0JBQWdCLEdBQUcsRUFBRSxPQUFPLFlBQVksR0FBRyxFQUFFLE9BQU8sV0FBVztBQUFBLEVBQ3RGO0FBQ0EsTUFBSSxPQUFPO0FBQUEsSUFDVCxXQUFXLGFBQWEsT0FBTyxZQUFZLElBQUksSUFBSSxRQUFRO0FBQUEsRUFDN0Q7QUFDQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBQ0EsU0FBUyxnQkFBZ0JWLFFBQU87QUFDOUIsTUFBSVUsYUFBWVYsT0FBTSxXQUNsQixjQUFjQSxPQUFNLE9BQ3BCLFFBQVEsZ0JBQWdCLFNBQVMsZ0JBQWdCLGFBQ2pELGVBQWVBLE9BQU0sUUFDckIsU0FBUyxpQkFBaUIsU0FBUyxnQkFBZ0IsY0FDbkQsc0JBQXNCQSxPQUFNLGVBQzVCLGdCQUFnQix3QkFBd0IsU0FBUyxRQUFRO0FBQzdELE1BQUksTUFBTTtBQUVWLE1BQUksaUJBQWlCLE9BQU87QUFDMUIsV0FBTyxhQUFhLE9BQU9VLFdBQVUsSUFBSU4sS0FBSSxRQUFRLEdBQUcsTUFBTSxFQUFFLE9BQU9NLFdBQVUsSUFBSU4sS0FBSSxTQUFTLEdBQUcsTUFBTTtBQUFBLEVBQzdHLFdBQVcsZUFBZTtBQUN4QixXQUFPLHlCQUF5QixPQUFPTSxXQUFVLElBQUlOLElBQUcsbUJBQW1CLEVBQUUsT0FBT00sV0FBVSxJQUFJTixJQUFHLE9BQU87QUFBQSxFQUM5RyxPQUFPO0FBQ0wsV0FBTyxhQUFhLE9BQU9NLFdBQVUsSUFBSU4sSUFBRyxNQUFNLEVBQUUsT0FBT00sV0FBVSxJQUFJTixJQUFHLE1BQU07QUFBQSxFQUNwRjtBQUVBLFNBQU8sU0FBUyxPQUFPTSxXQUFVLE9BQU9OLE1BQUtNLFdBQVUsUUFBUSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU9BLFdBQVUsT0FBT04sTUFBS00sV0FBVSxRQUFRLEtBQUssSUFBSSxJQUFJO0FBQzFJLFNBQU8sVUFBVSxPQUFPQSxXQUFVLFFBQVEsT0FBTztBQUNqRCxTQUFPO0FBQ1Q7QUFFQSxJQUFJLGFBQWE7QUFFakIsU0FBU0wsT0FBTTtBQUNiLE1BQUksTUFBTTtBQUNWLE1BQUksTUFBTTtBQUNWLE1BQUksS0FBSyxPQUFPO0FBQ2hCLE1BQUksS0FBSyxPQUFPO0FBQ2hCLE1BQUlNLEtBQUk7QUFFUixNQUFJLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFDNUIsUUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLE9BQU8sS0FBSyxLQUFLLEdBQUcsR0FBRztBQUNwRCxRQUFJLGlCQUFpQixJQUFJLE9BQU8sT0FBTyxPQUFPLEtBQUssS0FBSyxHQUFHLEdBQUc7QUFDOUQsUUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUc7QUFDN0MsSUFBQUEsS0FBSUEsR0FBRSxRQUFRLE9BQU8sSUFBSSxPQUFPLElBQUksR0FBRyxDQUFDLEVBQUUsUUFBUSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLEVBQUUsUUFBUSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7QUFBQSxFQUN2SDtBQUVBLFNBQU9BO0FBQ1Q7QUFFQSxJQUFJLGVBQWU7QUFFbkIsU0FBUyxZQUFZO0FBQ25CLE1BQUksT0FBTyxjQUFjLENBQUMsY0FBYztBQUN0QyxjQUFVTixLQUFJLENBQUM7QUFDZixtQkFBZTtBQUFBLEVBQ2pCO0FBQ0Y7QUFFQSxJQUFJLFlBQVk7QUFBQSxFQUNkLFFBQVEsU0FBUyxTQUFTO0FBQ3hCLFdBQU87QUFBQSxNQUNMLEtBQUs7QUFBQSxRQUNILEtBQUtBO0FBQUEsUUFDTCxXQUFXO0FBQUEsTUFDYjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVMsUUFBUTtBQUN0QixXQUFPO0FBQUEsTUFDTCwwQkFBMEIsU0FBUywyQkFBMkI7QUFDNUQsa0JBQVU7QUFBQSxNQUNaO0FBQUEsTUFDQSxhQUFhLFNBQVMsY0FBYztBQUNsQyxrQkFBVTtBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSU8sS0FBSSxVQUFVLENBQUM7QUFDbkIsSUFBSSxDQUFDQSxHQUFFLG9CQUFvQjtBQUFHLEVBQUFBLEdBQUUsb0JBQW9CLElBQUksQ0FBQztBQUN6RCxJQUFJLENBQUNBLEdBQUUsb0JBQW9CLEVBQUU7QUFBUSxFQUFBQSxHQUFFLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztBQUN2RSxJQUFJLENBQUNBLEdBQUUsb0JBQW9CLEVBQUU7QUFBTyxFQUFBQSxHQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztBQUNyRSxJQUFJLENBQUNBLEdBQUUsb0JBQW9CLEVBQUU7QUFBTyxFQUFBQSxHQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztBQUNyRSxJQUFJLFlBQVlBLEdBQUUsb0JBQW9CO0FBRXRDLElBQUksWUFBWSxDQUFDO0FBRWpCLElBQUksV0FBVyxTQUFTQyxZQUFXO0FBQ2pDLFdBQVMsb0JBQW9CLG9CQUFvQkEsU0FBUTtBQUN6RCxXQUFTO0FBQ1QsWUFBVSxJQUFJLFNBQVVDLEtBQUk7QUFDMUIsV0FBT0EsSUFBRztBQUFBLEVBQ1osQ0FBQztBQUNIO0FBRUEsSUFBSSxTQUFTO0FBRWIsSUFBSSxRQUFRO0FBQ1YsWUFBVSxTQUFTLGdCQUFnQixXQUFXLGVBQWUsaUJBQWlCLEtBQUssU0FBUyxVQUFVO0FBQ3RHLE1BQUksQ0FBQztBQUFRLGFBQVMsaUJBQWlCLG9CQUFvQixRQUFRO0FBQ3JFO0FBRUEsU0FBUyxTQUFVQSxLQUFJO0FBQ3JCLE1BQUksQ0FBQztBQUFRO0FBQ2IsV0FBUyxXQUFXQSxLQUFJLENBQUMsSUFBSSxVQUFVLEtBQUtBLEdBQUU7QUFDaEQ7QUFFQSxTQUFTLE9BQU8sZUFBZTtBQUM3QixNQUFJLE1BQU0sY0FBYyxLQUNwQix3QkFBd0IsY0FBYyxZQUN0QyxhQUFhLDBCQUEwQixTQUFTLENBQUMsSUFBSSx1QkFDckQsd0JBQXdCLGNBQWMsVUFDdEMsV0FBVywwQkFBMEIsU0FBUyxDQUFDLElBQUk7QUFFdkQsTUFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ3JDLFdBQU8sV0FBVyxhQUFhO0FBQUEsRUFDakMsT0FBTztBQUNMLFdBQU8sSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLE9BQU8sZUFBZSxVQUFVLEdBQUcsR0FBRyxFQUFFLE9BQU8sU0FBUyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUc7QUFBQSxFQUNqSTtBQUNGO0FBRUEsU0FBUyxnQkFBZ0IsU0FBU0MsU0FBUSxVQUFVO0FBQ2xELE1BQUksV0FBVyxRQUFRQSxPQUFNLEtBQUssUUFBUUEsT0FBTSxFQUFFLFFBQVEsR0FBRztBQUMzRCxXQUFPO0FBQUEsTUFDTCxRQUFRQTtBQUFBLE1BQ1I7QUFBQSxNQUNBLE1BQU0sUUFBUUEsT0FBTSxFQUFFLFFBQVE7QUFBQSxJQUNoQztBQUFBLEVBQ0Y7QUFDRjtBQU9BLElBQUksZ0JBQWdCLFNBQVNDLGVBQWMsTUFBTSxhQUFhO0FBQzVELFNBQU8sU0FBVUMsSUFBR0MsSUFBR0MsSUFBR2YsSUFBRztBQUMzQixXQUFPLEtBQUssS0FBSyxhQUFhYSxJQUFHQyxJQUFHQyxJQUFHZixFQUFDO0FBQUEsRUFDMUM7QUFDRjtBQWVBLElBQUksU0FBUyxTQUFTLGlCQUFpQixTQUFTVSxLQUFJLGNBQWMsYUFBYTtBQUM3RSxNQUFJLE9BQU8sT0FBTyxLQUFLLE9BQU8sR0FDMUJNLFVBQVMsS0FBSyxRQUNkLFdBQVcsZ0JBQWdCLFNBQVksY0FBY04sS0FBSSxXQUFXLElBQUlBLEtBQ3hFaEMsSUFDQSxLQUNBO0FBRUosTUFBSSxpQkFBaUIsUUFBVztBQUM5QixJQUFBQSxLQUFJO0FBQ0osYUFBUyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDMUIsT0FBTztBQUNMLElBQUFBLEtBQUk7QUFDSixhQUFTO0FBQUEsRUFDWDtBQUVBLFNBQU9BLEtBQUlzQyxTQUFRdEMsTUFBSztBQUN0QixVQUFNLEtBQUtBLEVBQUM7QUFDWixhQUFTLFNBQVMsUUFBUSxRQUFRLEdBQUcsR0FBRyxLQUFLLE9BQU87QUFBQSxFQUN0RDtBQUVBLFNBQU87QUFDVDtBQTBCQSxTQUFTLFdBQVd1QyxTQUFRO0FBQzFCLE1BQUksU0FBUyxDQUFDO0FBQ2QsTUFBSUMsV0FBVTtBQUNkLE1BQUlGLFVBQVNDLFFBQU87QUFFcEIsU0FBT0MsV0FBVUYsU0FBUTtBQUN2QixRQUFJLFFBQVFDLFFBQU8sV0FBV0MsVUFBUztBQUV2QyxRQUFJLFNBQVMsU0FBVSxTQUFTLFNBQVVBLFdBQVVGLFNBQVE7QUFDMUQsVUFBSSxRQUFRQyxRQUFPLFdBQVdDLFVBQVM7QUFFdkMsV0FBSyxRQUFRLFVBQVcsT0FBUTtBQUU5QixlQUFPLE9BQU8sUUFBUSxTQUFVLE9BQU8sUUFBUSxRQUFTLEtBQU87QUFBQSxNQUNqRSxPQUFPO0FBQ0wsZUFBTyxLQUFLLEtBQUs7QUFDakIsUUFBQUE7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLE1BQU0sU0FBUztBQUN0QixNQUFJLFVBQVUsV0FBVyxPQUFPO0FBQ2hDLFNBQU8sUUFBUSxXQUFXLElBQUksUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUk7QUFDMUQ7QUFDQSxTQUFTLFlBQVlELFNBQVFFLFFBQU87QUFDbEMsTUFBSWpCLFFBQU9lLFFBQU87QUFDbEIsTUFBSSxRQUFRQSxRQUFPLFdBQVdFLE1BQUs7QUFDbkMsTUFBSTtBQUVKLE1BQUksU0FBUyxTQUFVLFNBQVMsU0FBVWpCLFFBQU9pQixTQUFRLEdBQUc7QUFDMUQsYUFBU0YsUUFBTyxXQUFXRSxTQUFRLENBQUM7QUFFcEMsUUFBSSxVQUFVLFNBQVUsVUFBVSxPQUFRO0FBQ3hDLGNBQVEsUUFBUSxTQUFVLE9BQVEsU0FBUyxRQUFTO0FBQUEsSUFDdEQ7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxlQUFlLE9BQU87QUFDN0IsU0FBTyxPQUFPLEtBQUssS0FBSyxFQUFFLE9BQU8sU0FBVSxLQUFLLFVBQVU7QUFDeEQsUUFBSUMsUUFBTyxNQUFNLFFBQVE7QUFDekIsUUFBSSxXQUFXLENBQUMsQ0FBQ0EsTUFBSztBQUV0QixRQUFJLFVBQVU7QUFDWixVQUFJQSxNQUFLLFFBQVEsSUFBSUEsTUFBSztBQUFBLElBQzVCLE9BQU87QUFDTCxVQUFJLFFBQVEsSUFBSUE7QUFBQSxJQUNsQjtBQUVBLFdBQU87QUFBQSxFQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ1A7QUFFQSxTQUFTLFlBQVlULFNBQVEsT0FBTztBQUNsQyxNQUFJLFNBQVMsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2xGLE1BQUksb0JBQW9CLE9BQU8sV0FDM0IsWUFBWSxzQkFBc0IsU0FBUyxRQUFRO0FBQ3ZELE1BQUksYUFBYSxlQUFlLEtBQUs7QUFFckMsTUFBSSxPQUFPLFVBQVUsTUFBTSxZQUFZLGNBQWMsQ0FBQyxXQUFXO0FBQy9ELGNBQVUsTUFBTSxRQUFRQSxTQUFRLGVBQWUsS0FBSyxDQUFDO0FBQUEsRUFDdkQsT0FBTztBQUNMLGNBQVUsT0FBT0EsT0FBTSxJQUFJZCxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLFVBQVUsT0FBT2MsT0FBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVU7QUFBQSxFQUMxRztBQVNBLE1BQUlBLFlBQVcsT0FBTztBQUNwQixnQkFBWSxNQUFNLEtBQUs7QUFBQSxFQUN6QjtBQUNGO0FBZUEsSUFBSTtBQUFKLElBQWlCO0FBQWpCLElBQTRCO0FBQzVCLElBQUksU0FBUyxVQUFVO0FBQXZCLElBQ0ksUUFBUSxVQUFVO0FBQ3RCLElBQUksY0FBYyxjQUFjLENBQUMsR0FBR1UsaUJBQWdCLGFBQWEsZ0JBQWdCLE9BQU8sT0FBTyxxQkFBcUIsY0FBYyxDQUFDLENBQUMsR0FBR0EsaUJBQWdCLGFBQWEsY0FBYyxPQUFPLE9BQU8scUJBQXFCLFlBQVksQ0FBQyxDQUFDLEdBQUc7QUFDdE8sSUFBSSx1QkFBdUI7QUFDM0IsSUFBSSxhQUFhLENBQUM7QUFDbEIsSUFBSSxjQUFjLENBQUM7QUFDbkIsSUFBSSxhQUFhLENBQUM7QUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixJQUFJLFdBQVcsQ0FBQztBQUNoQixJQUFJLFlBQVksWUFBWSxDQUFDLEdBQUdBLGlCQUFnQixXQUFXLGdCQUFnQixPQUFPLEtBQUssZ0JBQWdCLGNBQWMsQ0FBQyxDQUFDLEdBQUdBLGlCQUFnQixXQUFXLGNBQWMsT0FBTyxLQUFLLGdCQUFnQixZQUFZLENBQUMsQ0FBQyxHQUFHO0FBRWhOLFNBQVMsV0FBVyxNQUFNO0FBQ3hCLFNBQU8sQ0FBQyxpQkFBaUIsUUFBUSxJQUFJO0FBQ3ZDO0FBRUEsU0FBUyxZQUFZLFdBQVcsS0FBSztBQUNuQyxNQUFJLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFDekIsTUFBSUMsVUFBUyxNQUFNLENBQUM7QUFDcEIsTUFBSSxXQUFXLE1BQU0sTUFBTSxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBRXRDLE1BQUlBLFlBQVcsYUFBYSxhQUFhLE1BQU0sQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUNwRSxXQUFPO0FBQUEsRUFDVCxPQUFPO0FBQ0wsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUNBLElBQUksUUFBUSxTQUFTQyxTQUFRO0FBQzNCLE1BQUksU0FBUyxTQUFTQyxRQUFPLFNBQVM7QUFDcEMsV0FBTyxPQUFPLFFBQVEsU0FBVUMsSUFBRyxPQUFPSCxTQUFRO0FBQ2hELE1BQUFHLEdBQUVILE9BQU0sSUFBSSxPQUFPLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFDckMsYUFBT0c7QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDUDtBQUVBLGVBQWEsT0FBTyxTQUFVLEtBQUtDLE9BQU0sVUFBVTtBQUNqRCxRQUFJQSxNQUFLLENBQUMsR0FBRztBQUNYLFVBQUlBLE1BQUssQ0FBQyxDQUFDLElBQUk7QUFBQSxJQUNqQjtBQUVBLFFBQUlBLE1BQUssQ0FBQyxHQUFHO0FBQ1gsVUFBSSxVQUFVQSxNQUFLLENBQUMsRUFBRSxPQUFPLFNBQVVDLElBQUc7QUFDeEMsZUFBTyxPQUFPQSxPQUFNO0FBQUEsTUFDdEIsQ0FBQztBQUNELGNBQVEsUUFBUSxTQUFVLE9BQU87QUFDL0IsWUFBSSxNQUFNLFNBQVMsRUFBRSxDQUFDLElBQUk7QUFBQSxNQUM1QixDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU87QUFBQSxFQUNULENBQUM7QUFDRCxnQkFBYyxPQUFPLFNBQVUsS0FBS0QsT0FBTSxVQUFVO0FBQ2xELFFBQUksUUFBUSxJQUFJO0FBRWhCLFFBQUlBLE1BQUssQ0FBQyxHQUFHO0FBQ1gsVUFBSSxVQUFVQSxNQUFLLENBQUMsRUFBRSxPQUFPLFNBQVVDLElBQUc7QUFDeEMsZUFBTyxPQUFPQSxPQUFNO0FBQUEsTUFDdEIsQ0FBQztBQUNELGNBQVEsUUFBUSxTQUFVLE9BQU87QUFDL0IsWUFBSSxLQUFLLElBQUk7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNELGFBQVcsT0FBTyxTQUFVLEtBQUtELE9BQU0sVUFBVTtBQUMvQyxRQUFJLFVBQVVBLE1BQUssQ0FBQztBQUNwQixRQUFJLFFBQVEsSUFBSTtBQUNoQixZQUFRLFFBQVEsU0FBVSxPQUFPO0FBQy9CLFVBQUksS0FBSyxJQUFJO0FBQUEsSUFDZixDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUdELE1BQUksYUFBYSxTQUFTLFVBQVUsT0FBTztBQUMzQyxNQUFJLGNBQWMsT0FBTyxPQUFPLFNBQVUsS0FBSyxNQUFNO0FBQ25ELFFBQUksd0JBQXdCLEtBQUssQ0FBQztBQUNsQyxRQUFJSixVQUFTLEtBQUssQ0FBQztBQUNuQixRQUFJLFdBQVcsS0FBSyxDQUFDO0FBRXJCLFFBQUlBLFlBQVcsU0FBUyxDQUFDLFlBQVk7QUFDbkMsTUFBQUEsVUFBUztBQUFBLElBQ1g7QUFFQSxRQUFJLE9BQU8sMEJBQTBCLFVBQVU7QUFDN0MsVUFBSSxNQUFNLHFCQUFxQixJQUFJO0FBQUEsUUFDakMsUUFBUUE7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU8sMEJBQTBCLFVBQVU7QUFDN0MsVUFBSSxTQUFTLHNCQUFzQixTQUFTLEVBQUUsQ0FBQyxJQUFJO0FBQUEsUUFDakQsUUFBUUE7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVCxHQUFHO0FBQUEsSUFDRCxPQUFPLENBQUM7QUFBQSxJQUNSLFVBQVUsQ0FBQztBQUFBLEVBQ2IsQ0FBQztBQUNELGVBQWEsWUFBWTtBQUN6QixrQkFBZ0IsWUFBWTtBQUM1Qix5QkFBdUIsbUJBQW1CLE9BQU8sY0FBYztBQUFBLElBQzdELFFBQVEsT0FBTztBQUFBLEVBQ2pCLENBQUM7QUFDSDtBQUNBTSxVQUFTLFNBQVVDLElBQUc7QUFDcEIseUJBQXVCLG1CQUFtQkEsR0FBRSxjQUFjO0FBQUEsSUFDeEQsUUFBUSxPQUFPO0FBQUEsRUFDakIsQ0FBQztBQUNILENBQUM7QUFDRCxNQUFNO0FBQ04sU0FBUyxVQUFVUCxTQUFRLFNBQVM7QUFDbEMsVUFBUSxXQUFXQSxPQUFNLEtBQUssQ0FBQyxHQUFHLE9BQU87QUFDM0M7QUFDQSxTQUFTLFdBQVdBLFNBQVEsVUFBVTtBQUNwQyxVQUFRLFlBQVlBLE9BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUTtBQUM3QztBQUNBLFNBQVMsUUFBUUEsU0FBUSxPQUFPO0FBQzlCLFVBQVEsU0FBU0EsT0FBTSxLQUFLLENBQUMsR0FBRyxLQUFLO0FBQ3ZDO0FBQ0EsU0FBUyxVQUFVLE1BQU07QUFDdkIsU0FBTyxXQUFXLElBQUksS0FBSztBQUFBLElBQ3pCLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxFQUNaO0FBQ0Y7QUFDQSxTQUFTLGFBQWEsU0FBUztBQUM3QixNQUFJLGFBQWEsY0FBYyxPQUFPO0FBQ3RDLE1BQUksYUFBYSxVQUFVLE9BQU8sT0FBTztBQUN6QyxTQUFPLGVBQWUsYUFBYTtBQUFBLElBQ2pDLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxFQUNaLElBQUksU0FBUztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLEVBQ1o7QUFDRjtBQUNBLFNBQVMseUJBQXlCO0FBQ2hDLFNBQU87QUFDVDtBQUNBLElBQUkscUJBQXFCLFNBQVNRLHNCQUFxQjtBQUNyRCxTQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixVQUFVO0FBQUEsSUFDVixNQUFNLENBQUM7QUFBQSxFQUNUO0FBQ0Y7QUFDQSxTQUFTLG1CQUFtQixlQUFlO0FBQ3pDLE1BQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsTUFBSSxpQkFBaUIsT0FBTyxRQUN4QixTQUFTLG1CQUFtQixTQUFTLGlCQUFpQjtBQUMxRCxNQUFJLFFBQVEsZ0JBQWdCLE1BQU0sRUFBRSxhQUFhO0FBQ2pELE1BQUlSLFVBQVMsZ0JBQWdCLE1BQU0sRUFBRSxhQUFhLEtBQUssZ0JBQWdCLE1BQU0sRUFBRSxLQUFLO0FBQ3BGLE1BQUksVUFBVSxpQkFBaUIsVUFBVSxTQUFTLGdCQUFnQjtBQUNsRSxTQUFPQSxXQUFVLFdBQVc7QUFDOUI7QUFDQSxJQUFJLHVCQUF1Qix1QkFBdUIsQ0FBQyxHQUFHRCxpQkFBZ0Isc0JBQXNCLGdCQUFnQixPQUFPLEtBQUsscUJBQXFCLGNBQWMsQ0FBQyxDQUFDLEdBQUdBLGlCQUFnQixzQkFBc0IsY0FBYyxPQUFPLEtBQUsscUJBQXFCLFlBQVksQ0FBQyxDQUFDLEdBQUc7QUFDdFEsU0FBUyxpQkFBaUIsUUFBUTtBQUNoQyxNQUFJO0FBRUosTUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNsRixNQUFJLHNCQUFzQixPQUFPLGFBQzdCLGNBQWMsd0JBQXdCLFNBQVMsUUFBUTtBQUMzRCxNQUFJLFlBQVksWUFBWSxDQUFDLEdBQUdBLGlCQUFnQixXQUFXLGdCQUFnQixHQUFHLE9BQU8sT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLGNBQWMsQ0FBQyxHQUFHQSxpQkFBZ0IsV0FBVyxjQUFjLEdBQUcsT0FBTyxPQUFPLFdBQVcsR0FBRyxFQUFFLE9BQU8sWUFBWSxDQUFDLEdBQUc7QUFDdE8sTUFBSSxjQUFjO0FBQ2xCLE1BQUksU0FBUztBQUViLE1BQUksT0FBTyxTQUFTLFNBQVMsY0FBYyxDQUFDLEtBQUssT0FBTyxLQUFLLFNBQVVVLElBQUc7QUFDeEUsV0FBTyxvQkFBb0IsY0FBYyxFQUFFLFNBQVNBLEVBQUM7QUFBQSxFQUN2RCxDQUFDLEdBQUc7QUFDRixhQUFTO0FBQUEsRUFDWDtBQUVBLE1BQUksT0FBTyxTQUFTLFNBQVMsWUFBWSxDQUFDLEtBQUssT0FBTyxLQUFLLFNBQVVBLElBQUc7QUFDdEUsV0FBTyxvQkFBb0IsWUFBWSxFQUFFLFNBQVNBLEVBQUM7QUFBQSxFQUNyRCxDQUFDLEdBQUc7QUFDRixhQUFTO0FBQUEsRUFDWDtBQUVBLE1BQUksWUFBWSxPQUFPLE9BQU8sU0FBVSxLQUFLLEtBQUs7QUFDaEQsUUFBSSxXQUFXLFlBQVksT0FBTyxXQUFXLEdBQUc7QUFFaEQsUUFBSSxPQUFPLEdBQUcsR0FBRztBQUNmLFlBQU0sV0FBVyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUkscUJBQXFCLE1BQU0sRUFBRSxHQUFHLElBQUk7QUFDN0Usb0JBQWM7QUFDZCxVQUFJLFNBQVM7QUFBQSxJQUNmLFdBQVcsU0FBUyxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksSUFBSTtBQUM3QyxvQkFBYztBQUNkLFVBQUksU0FBUyxtQkFBbUIsS0FBSztBQUFBLFFBQ25DO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxXQUFXLFVBQVU7QUFDbkIsVUFBSSxXQUFXO0FBQUEsSUFDakIsV0FBVyxRQUFRLE9BQU8sb0JBQW9CLFFBQVEsU0FBUyxjQUFjLEtBQUssUUFBUSxTQUFTLFlBQVksR0FBRztBQUNoSCxVQUFJLEtBQUssS0FBSyxHQUFHO0FBQUEsSUFDbkI7QUFFQSxRQUFJLENBQUMsZUFBZSxJQUFJLFVBQVUsSUFBSSxVQUFVO0FBQzlDLFVBQUksT0FBTyxnQkFBZ0IsT0FBTyxVQUFVLElBQUksUUFBUSxJQUFJLENBQUM7QUFDN0QsVUFBSSxnQkFBZ0IsUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRO0FBRXBELFVBQUksS0FBSyxRQUFRO0FBQ2Ysc0JBQWM7QUFBQSxNQUNoQjtBQUVBLFVBQUksV0FBVyxLQUFLLFlBQVksaUJBQWlCLElBQUk7QUFDckQsVUFBSSxTQUFTLEtBQUssVUFBVSxJQUFJO0FBRWhDLFVBQUksSUFBSSxXQUFXLFNBQVMsQ0FBQyxPQUFPLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sY0FBYztBQUduRixZQUFJLFNBQVM7QUFBQSxNQUNmO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNULEdBQUcsbUJBQW1CLENBQUM7QUFFdkIsTUFBSSxPQUFPLFNBQVMsV0FBVyxLQUFLLE9BQU8sU0FBUyxLQUFLLEdBQUc7QUFDMUQsY0FBVSxTQUFTO0FBQUEsRUFDckI7QUFFQSxNQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssT0FBTyxTQUFTLEtBQUssR0FBRztBQUMzRCxjQUFVLFNBQVM7QUFBQSxFQUNyQjtBQUVBLE1BQUksQ0FBQyxVQUFVLFVBQVUsV0FBVyxpQkFBaUIsT0FBTyxNQUFNLEtBQUssT0FBTyxlQUFlO0FBQzNGLGNBQVUsU0FBUztBQUNuQixjQUFVLFdBQVcsUUFBUSxVQUFVLFFBQVEsVUFBVSxRQUFRLEtBQUssVUFBVTtBQUFBLEVBQ2xGO0FBRUEsTUFBSSxVQUFVLFdBQVcsUUFBUSxnQkFBZ0IsTUFBTTtBQUdyRCxjQUFVLFNBQVMsdUJBQXVCLEtBQUs7QUFBQSxFQUNqRDtBQUVBLFNBQU87QUFDVDtBQUVBLElBQUksVUFBdUIsMkJBQVk7QUFDckMsV0FBU0MsV0FBVTtBQUNqQixJQUFBQyxpQkFBZ0IsTUFBTUQsUUFBTztBQUU3QixTQUFLLGNBQWMsQ0FBQztBQUFBLEVBQ3RCO0FBRUEsRUFBQUUsY0FBYUYsVUFBUyxDQUFDO0FBQUEsSUFDckIsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLE1BQU07QUFDcEIsVUFBSSxRQUFRO0FBRVosZUFBUyxPQUFPLFVBQVUsUUFBUSxjQUFjLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQzlGLG9CQUFZLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUNwQztBQUVBLFVBQUksWUFBWSxZQUFZLE9BQU8sS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELGFBQU8sS0FBSyxTQUFTLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDNUMsY0FBTSxZQUFZLEdBQUcsSUFBSUcsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDO0FBQ3hHLG9CQUFZLEtBQUssVUFBVSxHQUFHLENBQUM7QUFFL0IsWUFBSSxhQUFhLHFCQUFxQixjQUFjLEVBQUUsR0FBRztBQUN6RCxZQUFJO0FBQVksc0JBQVksWUFBWSxVQUFVLEdBQUcsQ0FBQztBQUN0RCxjQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLFFBQVE7QUFDdEIsV0FBSyxjQUFjLENBQUM7QUFBQSxJQUN0QjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLGlCQUFpQixXQUFXLFlBQVk7QUFDdEQsVUFBSSxhQUFhLFdBQVcsVUFBVSxXQUFXLFlBQVksV0FBVyxPQUFPO0FBQUEsUUFDN0UsR0FBRztBQUFBLE1BQ0wsSUFBSTtBQUNKLGFBQU8sS0FBSyxVQUFVLEVBQUUsSUFBSSxTQUFVLEtBQUs7QUFDekMsWUFBSSxrQkFBa0IsV0FBVyxHQUFHLEdBQ2hDYixVQUFTLGdCQUFnQixRQUN6QixXQUFXLGdCQUFnQixVQUMzQkksUUFBTyxnQkFBZ0I7QUFDM0IsWUFBSSxVQUFVQSxNQUFLLENBQUM7QUFDcEIsWUFBSSxDQUFDLFVBQVVKLE9BQU07QUFBRyxvQkFBVUEsT0FBTSxJQUFJLENBQUM7QUFFN0MsWUFBSSxRQUFRLFNBQVMsR0FBRztBQUN0QixrQkFBUSxRQUFRLFNBQVUsT0FBTztBQUMvQixnQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3Qix3QkFBVUEsT0FBTSxFQUFFLEtBQUssSUFBSUk7QUFBQSxZQUM3QjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFFQSxrQkFBVUosT0FBTSxFQUFFLFFBQVEsSUFBSUk7QUFBQSxNQUNoQyxDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUVGLFNBQU9NO0FBQ1QsRUFBRTtBQUVGLElBQUksV0FBVyxDQUFDO0FBQ2hCLElBQUksU0FBUyxDQUFDO0FBQ2QsSUFBSSxZQUFZLENBQUM7QUFDakIsSUFBSSxzQkFBc0IsT0FBTyxLQUFLLFNBQVM7QUFDL0MsU0FBUyxnQkFBZ0IsYUFBYUksT0FBTTtBQUMxQyxNQUFJLE1BQU1BLE1BQUs7QUFDZixhQUFXO0FBQ1gsV0FBUyxDQUFDO0FBQ1YsU0FBTyxLQUFLLFNBQVMsRUFBRSxRQUFRLFNBQVVDLElBQUc7QUFDMUMsUUFBSSxvQkFBb0IsUUFBUUEsRUFBQyxNQUFNLElBQUk7QUFDekMsYUFBTyxVQUFVQSxFQUFDO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUM7QUFFRCxXQUFTLFFBQVEsU0FBVSxRQUFRO0FBQ2pDLFFBQUlDLFVBQVMsT0FBTyxTQUFTLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFDaEQsV0FBTyxLQUFLQSxPQUFNLEVBQUUsUUFBUSxTQUFVLElBQUk7QUFDeEMsVUFBSSxPQUFPQSxRQUFPLEVBQUUsTUFBTSxZQUFZO0FBQ3BDLFlBQUksRUFBRSxJQUFJQSxRQUFPLEVBQUU7QUFBQSxNQUNyQjtBQUVBLFVBQUlDLFNBQVFELFFBQU8sRUFBRSxDQUFDLE1BQU0sVUFBVTtBQUNwQyxlQUFPLEtBQUtBLFFBQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxTQUFVLElBQUk7QUFDNUMsY0FBSSxDQUFDLElBQUksRUFBRSxHQUFHO0FBQ1osZ0JBQUksRUFBRSxJQUFJLENBQUM7QUFBQSxVQUNiO0FBRUEsY0FBSSxFQUFFLEVBQUUsRUFBRSxJQUFJQSxRQUFPLEVBQUUsRUFBRSxFQUFFO0FBQUEsUUFDN0IsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLE9BQU8sT0FBTztBQUNoQixVQUFJRSxTQUFRLE9BQU8sTUFBTTtBQUN6QixhQUFPLEtBQUtBLE1BQUssRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUN6QyxZQUFJLENBQUMsT0FBTyxJQUFJLEdBQUc7QUFDakIsaUJBQU8sSUFBSSxJQUFJLENBQUM7QUFBQSxRQUNsQjtBQUVBLGVBQU8sSUFBSSxFQUFFLEtBQUtBLE9BQU0sSUFBSSxDQUFDO0FBQUEsTUFDL0IsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLE9BQU8sVUFBVTtBQUNuQixhQUFPLFNBQVMsU0FBUztBQUFBLElBQzNCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTztBQUNUO0FBQ0EsU0FBUyxXQUFXLE1BQU0sYUFBYTtBQUNyQyxXQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUMxRyxTQUFLLE9BQU8sQ0FBQyxJQUFJLFVBQVUsSUFBSTtBQUFBLEVBQ2pDO0FBRUEsTUFBSSxVQUFVLE9BQU8sSUFBSSxLQUFLLENBQUM7QUFDL0IsVUFBUSxRQUFRLFNBQVUsUUFBUTtBQUNoQyxrQkFBYyxPQUFPLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLEVBQzdELENBQUM7QUFDRCxTQUFPO0FBQ1Q7QUFDQSxTQUFTLFVBQVUsTUFBTTtBQUN2QixXQUFTLFFBQVEsVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLE9BQU8sU0FBUztBQUNqSCxTQUFLLFFBQVEsQ0FBQyxJQUFJLFVBQVUsS0FBSztBQUFBLEVBQ25DO0FBRUEsTUFBSSxVQUFVLE9BQU8sSUFBSSxLQUFLLENBQUM7QUFDL0IsVUFBUSxRQUFRLFNBQVUsUUFBUTtBQUNoQyxXQUFPLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFDekIsQ0FBQztBQUNELFNBQU87QUFDVDtBQUNBLFNBQVMsZUFBZTtBQUN0QixNQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLE1BQUksT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFdBQVcsQ0FBQztBQUNsRCxTQUFPLFVBQVUsSUFBSSxJQUFJLFVBQVUsSUFBSSxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDL0Q7QUFFQSxTQUFTLG1CQUFtQixZQUFZO0FBQ3RDLE1BQUksV0FBVyxXQUFXLE1BQU07QUFDOUIsZUFBVyxTQUFTO0FBQUEsRUFDdEI7QUFFQSxNQUFJLFdBQVcsV0FBVztBQUMxQixNQUFJbEIsVUFBUyxXQUFXLFVBQVUsdUJBQXVCO0FBQ3pELE1BQUksQ0FBQztBQUFVO0FBQ2YsYUFBVyxRQUFRQSxTQUFRLFFBQVEsS0FBSztBQUN4QyxTQUFPLGdCQUFnQixRQUFRLGFBQWFBLFNBQVEsUUFBUSxLQUFLLGdCQUFnQixVQUFVLFFBQVFBLFNBQVEsUUFBUTtBQUNySDtBQUNBLElBQUksVUFBVSxJQUFJLFFBQVE7QUFDMUIsSUFBSSxTQUFTLFNBQVNtQixVQUFTO0FBQzdCLFNBQU8saUJBQWlCO0FBQ3hCLFNBQU8sbUJBQW1CO0FBQzFCLFlBQVUsUUFBUTtBQUNwQjtBQUNBLElBQUksTUFBTTtBQUFBLEVBQ1IsT0FBTyxTQUFTLFFBQVE7QUFDdEIsUUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUVsRixRQUFJLFFBQVE7QUFDVixnQkFBVSxlQUFlLE1BQU07QUFDL0IsbUJBQWEsc0JBQXNCLE1BQU07QUFDekMsYUFBTyxhQUFhLFNBQVMsTUFBTTtBQUFBLElBQ3JDLE9BQU87QUFDTCxhQUFPLFFBQVEsT0FBTyx3Q0FBd0M7QUFBQSxJQUNoRTtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUyxRQUFRO0FBQ3RCLFFBQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsUUFBSSxxQkFBcUIsT0FBTztBQUVoQyxRQUFJLE9BQU8sbUJBQW1CLE9BQU87QUFDbkMsYUFBTyxpQkFBaUI7QUFBQSxJQUMxQjtBQUVBLFdBQU8sbUJBQW1CO0FBQzFCLGFBQVMsV0FBWTtBQUNuQixrQkFBWTtBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFDRCxnQkFBVSxTQUFTLE1BQU07QUFBQSxJQUMzQixDQUFDO0FBQUEsRUFDSDtBQUNGO0FBQ0EsSUFBSUMsU0FBUTtBQUFBLEVBQ1YsTUFBTSxTQUFTLEtBQUssT0FBTztBQUN6QixRQUFJLFVBQVUsTUFBTTtBQUNsQixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUlILFNBQVEsS0FBSyxNQUFNLFlBQVksTUFBTSxVQUFVLE1BQU0sVUFBVTtBQUNqRSxhQUFPO0FBQUEsUUFDTCxRQUFRLE1BQU07QUFBQSxRQUNkLFVBQVUsUUFBUSxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUssTUFBTTtBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTSxRQUFRLEtBQUssS0FBSyxNQUFNLFdBQVcsR0FBRztBQUM5QyxVQUFJLFdBQVcsTUFBTSxDQUFDLEVBQUUsUUFBUSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDMUUsVUFBSWpCLFVBQVMsbUJBQW1CLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLGFBQU87QUFBQSxRQUNMLFFBQVFBO0FBQUEsUUFDUixVQUFVLFFBQVFBLFNBQVEsUUFBUSxLQUFLO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLFVBQVUsYUFBYSxNQUFNLFFBQVEsR0FBRyxPQUFPLE9BQU8sV0FBVyxHQUFHLENBQUMsSUFBSSxNQUFNLE1BQU0sTUFBTSw2QkFBNkIsSUFBSTtBQUNySSxVQUFJLGdCQUFnQixpQkFBaUIsTUFBTSxNQUFNLEdBQUcsR0FBRztBQUFBLFFBQ3JELGFBQWE7QUFBQSxNQUNmLENBQUM7QUFDRCxhQUFPO0FBQUEsUUFDTCxRQUFRLGNBQWMsVUFBVSx1QkFBdUI7QUFBQSxRQUN2RCxVQUFVLFFBQVEsY0FBYyxRQUFRLGNBQWMsUUFBUSxLQUFLLGNBQWM7QUFBQSxNQUNuRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFVBQUksVUFBVSx1QkFBdUI7QUFFckMsYUFBTztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsVUFBVSxRQUFRLFNBQVMsS0FBSyxLQUFLO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBQ0EsSUFBSSxNQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFPb0I7QUFBQSxFQUNQO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQUVBLElBQUksY0FBYyxTQUFTQyxlQUFjO0FBQ3ZDLE1BQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsTUFBSSx3QkFBd0IsT0FBTyxvQkFDL0IscUJBQXFCLDBCQUEwQixTQUFTLFdBQVc7QUFDdkUsT0FBSyxPQUFPLEtBQUssVUFBVSxNQUFNLEVBQUUsU0FBUyxLQUFLLE9BQU8saUJBQWlCLFVBQVUsT0FBTztBQUFnQixRQUFJLElBQUksTUFBTTtBQUFBLE1BQ3RILE1BQU07QUFBQSxJQUNSLENBQUM7QUFDSDtBQUVBLFNBQVMsWUFBWSxLQUFLLGlCQUFpQjtBQUN6QyxTQUFPLGVBQWUsS0FBSyxZQUFZO0FBQUEsSUFDckMsS0FBSztBQUFBLEVBQ1AsQ0FBQztBQUNELFNBQU8sZUFBZSxLQUFLLFFBQVE7QUFBQSxJQUNqQyxLQUFLLFNBQVNDLE9BQU07QUFDbEIsYUFBTyxJQUFJLFNBQVMsSUFBSSxTQUFVakIsSUFBRztBQUNuQyxlQUFPLE9BQU9BLEVBQUM7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQU8sZUFBZSxLQUFLLFFBQVE7QUFBQSxJQUNqQyxLQUFLLFNBQVNpQixPQUFNO0FBQ2xCLFVBQUksQ0FBQztBQUFRO0FBQ2IsVUFBSSxZQUFZLFNBQVMsY0FBYyxLQUFLO0FBQzVDLGdCQUFVLFlBQVksSUFBSTtBQUMxQixhQUFPLFVBQVU7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQU87QUFDVDtBQUVBLFNBQVMsT0FBUVIsT0FBTTtBQUNyQixNQUFJLFdBQVdBLE1BQUssVUFDaEIsT0FBT0EsTUFBSyxNQUNaLE9BQU9BLE1BQUssTUFDWixhQUFhQSxNQUFLLFlBQ2xCUyxVQUFTVCxNQUFLLFFBQ2RVLGFBQVlWLE1BQUs7QUFFckIsTUFBSSxzQkFBc0JVLFVBQVMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLE9BQU87QUFDakUsUUFBSSxRQUFRLEtBQUssT0FDYixTQUFTLEtBQUs7QUFDbEIsUUFBSUMsVUFBUztBQUFBLE1BQ1gsR0FBRyxRQUFRLFNBQVM7QUFBQSxNQUNwQixHQUFHO0FBQUEsSUFDTDtBQUNBLGVBQVcsT0FBTyxJQUFJLFdBQVdaLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUdVLE9BQU0sR0FBRyxDQUFDLEdBQUc7QUFBQSxNQUM5RSxvQkFBb0IsR0FBRyxPQUFPRSxRQUFPLElBQUlELFdBQVUsSUFBSSxJQUFJLEtBQUssRUFBRSxPQUFPQyxRQUFPLElBQUlELFdBQVUsSUFBSSxJQUFJLElBQUk7QUFBQSxJQUM1RyxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRUEsU0FBTyxDQUFDO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsU0FBVVYsT0FBTTtBQUN2QixNQUFJZCxVQUFTYyxNQUFLLFFBQ2QsV0FBV0EsTUFBSyxVQUNoQixXQUFXQSxNQUFLLFVBQ2hCLGFBQWFBLE1BQUssWUFDbEIsU0FBU0EsTUFBSztBQUNsQixNQUFJLEtBQUssV0FBVyxPQUFPLEdBQUcsT0FBT2QsU0FBUSxHQUFHLEVBQUUsT0FBTyxPQUFPLFdBQVcsR0FBRyxFQUFFLE9BQU8sUUFBUSxJQUFJO0FBQ25HLFNBQU8sQ0FBQztBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsWUFBWTtBQUFBLE1BQ1YsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFVBQVUsQ0FBQztBQUFBLE1BQ1QsS0FBSztBQUFBLE1BQ0wsWUFBWWEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHO0FBQUEsUUFDN0Q7QUFBQSxNQUNGLENBQUM7QUFBQSxNQUNEO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFFQSxTQUFTLHNCQUFzQixRQUFRO0FBQ3JDLE1BQUksZ0JBQWdCLE9BQU8sT0FDdkIsT0FBTyxjQUFjLE1BQ3JCLE9BQU8sY0FBYyxNQUNyQmIsVUFBUyxPQUFPLFFBQ2hCLFdBQVcsT0FBTyxVQUNsQndCLGFBQVksT0FBTyxXQUNuQixTQUFTLE9BQU8sUUFDaEIsUUFBUSxPQUFPLE9BQ2YsU0FBUyxPQUFPLFFBQ2hCLFVBQVUsT0FBTyxTQUNqQixRQUFRLE9BQU8sT0FDZixvQkFBb0IsT0FBTyxXQUMzQixZQUFZLHNCQUFzQixTQUFTLFFBQVE7QUFFdkQsTUFBSVYsUUFBTyxLQUFLLFFBQVEsT0FBTyxNQUMzQixRQUFRQSxNQUFLLE9BQ2IsU0FBU0EsTUFBSztBQUVsQixNQUFJLGlCQUFpQmQsWUFBVztBQUNoQyxNQUFJLFlBQVksQ0FBQyxPQUFPLGtCQUFrQixXQUFXLEdBQUcsT0FBTyxPQUFPLFdBQVcsR0FBRyxFQUFFLE9BQU8sUUFBUSxJQUFJLEVBQUUsRUFBRSxPQUFPLFNBQVVPLElBQUc7QUFDL0gsV0FBTyxNQUFNLFFBQVEsUUFBUUEsRUFBQyxNQUFNO0FBQUEsRUFDdEMsQ0FBQyxFQUFFLE9BQU8sU0FBVUEsSUFBRztBQUNyQixXQUFPQSxPQUFNLE1BQU0sQ0FBQyxDQUFDQTtBQUFBLEVBQ3ZCLENBQUMsRUFBRSxPQUFPLE1BQU0sT0FBTyxFQUFFLEtBQUssR0FBRztBQUNqQyxNQUFJLFVBQVU7QUFBQSxJQUNaLFVBQVUsQ0FBQztBQUFBLElBQ1gsWUFBWU0sZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUc7QUFBQSxNQUNuRSxlQUFlYjtBQUFBLE1BQ2YsYUFBYTtBQUFBLE1BQ2IsU0FBUztBQUFBLE1BQ1QsUUFBUSxNQUFNLFdBQVcsUUFBUTtBQUFBLE1BQ2pDLFNBQVM7QUFBQSxNQUNULFdBQVcsT0FBTyxPQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sTUFBTTtBQUFBLElBQ3BELENBQUM7QUFBQSxFQUNIO0FBQ0EsTUFBSSx5QkFBeUIsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLFFBQVEsUUFBUSxPQUFPLElBQUk7QUFBQSxJQUNoRixPQUFPLEdBQUcsT0FBTyxRQUFRLFNBQVMsS0FBSyxRQUFRLElBQUk7QUFBQSxFQUNyRCxJQUFJLENBQUM7QUFFTCxNQUFJLFdBQVc7QUFDYixZQUFRLFdBQVcsYUFBYSxJQUFJO0FBQUEsRUFDdEM7QUFFQSxNQUFJLE9BQU87QUFDVCxZQUFRLFNBQVMsS0FBSztBQUFBLE1BQ3BCLEtBQUs7QUFBQSxNQUNMLFlBQVk7QUFBQSxRQUNWLElBQUksUUFBUSxXQUFXLGlCQUFpQixLQUFLLFNBQVMsT0FBTyxXQUFXLGFBQWEsQ0FBQztBQUFBLE1BQ3hGO0FBQUEsTUFDQSxVQUFVLENBQUMsS0FBSztBQUFBLElBQ2xCLENBQUM7QUFDRCxXQUFPLFFBQVEsV0FBVztBQUFBLEVBQzVCO0FBRUEsTUFBSSxPQUFPYSxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUc7QUFBQSxJQUN6RCxRQUFRYjtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVd3QjtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVFYLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsc0JBQXNCLEdBQUcsTUFBTSxNQUFNO0FBQUEsRUFDakYsQ0FBQztBQUVELE1BQUlhLFNBQVEsS0FBSyxTQUFTLEtBQUssUUFBUSxhQUFhLHdCQUF3QixJQUFJLEtBQUs7QUFBQSxJQUNuRixVQUFVLENBQUM7QUFBQSxJQUNYLFlBQVksQ0FBQztBQUFBLEVBQ2YsSUFBSSxhQUFhLHdCQUF3QixJQUFJLEtBQUs7QUFBQSxJQUNoRCxVQUFVLENBQUM7QUFBQSxJQUNYLFlBQVksQ0FBQztBQUFBLEVBQ2YsR0FDSSxXQUFXQSxPQUFNLFVBQ2pCLGFBQWFBLE9BQU07QUFFdkIsT0FBSyxXQUFXO0FBQ2hCLE9BQUssYUFBYTtBQUVsQixNQUFJLFFBQVE7QUFDVixXQUFPLFNBQVMsSUFBSTtBQUFBLEVBQ3RCLE9BQU87QUFDTCxXQUFPLE9BQU8sSUFBSTtBQUFBLEVBQ3BCO0FBQ0Y7QUFDQSxTQUFTLHVCQUF1QixRQUFRO0FBQ3RDLE1BQUksVUFBVSxPQUFPLFNBQ2pCLFFBQVEsT0FBTyxPQUNmLFNBQVMsT0FBTyxRQUNoQkYsYUFBWSxPQUFPLFdBQ25CLFFBQVEsT0FBTyxPQUNmLFFBQVEsT0FBTyxPQUNmLHFCQUFxQixPQUFPLFdBQzVCLFlBQVksdUJBQXVCLFNBQVMsUUFBUTtBQUV4RCxNQUFJLGFBQWFYLGdCQUFlQSxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLE1BQU0sVUFBVSxHQUFHLFFBQVE7QUFBQSxJQUMzRixTQUFTO0FBQUEsRUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUFBLElBQ1gsU0FBUyxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQUEsRUFDakMsQ0FBQztBQUVELE1BQUksV0FBVztBQUNiLGVBQVcsYUFBYSxJQUFJO0FBQUEsRUFDOUI7QUFFQSxNQUFJVSxVQUFTVixnQkFBZSxDQUFDLEdBQUcsTUFBTSxNQUFNO0FBRTVDLE1BQUksc0JBQXNCVyxVQUFTLEdBQUc7QUFDcEMsSUFBQUQsUUFBTyxXQUFXLElBQUksZ0JBQWdCO0FBQUEsTUFDcEMsV0FBV0M7QUFBQSxNQUNYLGVBQWU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUNELElBQUFELFFBQU8sbUJBQW1CLElBQUlBLFFBQU8sV0FBVztBQUFBLEVBQ2xEO0FBRUEsTUFBSSxjQUFjLFdBQVdBLE9BQU07QUFFbkMsTUFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQixlQUFXLE9BQU8sSUFBSTtBQUFBLEVBQ3hCO0FBRUEsTUFBSSxNQUFNLENBQUM7QUFDWCxNQUFJLEtBQUs7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQSxVQUFVLENBQUMsT0FBTztBQUFBLEVBQ3BCLENBQUM7QUFFRCxNQUFJLE9BQU87QUFDVCxRQUFJLEtBQUs7QUFBQSxNQUNQLEtBQUs7QUFBQSxNQUNMLFlBQVk7QUFBQSxRQUNWLE9BQU87QUFBQSxNQUNUO0FBQUEsTUFDQSxVQUFVLENBQUMsS0FBSztBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTztBQUNUO0FBQ0EsU0FBUywwQkFBMEIsUUFBUTtBQUN6QyxNQUFJLFVBQVUsT0FBTyxTQUNqQixRQUFRLE9BQU8sT0FDZixRQUFRLE9BQU87QUFFbkIsTUFBSSxhQUFhVixnQkFBZUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxNQUFNLFVBQVUsR0FBRyxRQUFRO0FBQUEsSUFDM0YsU0FBUztBQUFBLEVBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFBQSxJQUNYLFNBQVMsTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLEVBQ2pDLENBQUM7QUFFRCxNQUFJLGNBQWMsV0FBVyxNQUFNLE1BQU07QUFFekMsTUFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQixlQUFXLE9BQU8sSUFBSTtBQUFBLEVBQ3hCO0FBRUEsTUFBSSxNQUFNLENBQUM7QUFDWCxNQUFJLEtBQUs7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQSxVQUFVLENBQUMsT0FBTztBQUFBLEVBQ3BCLENBQUM7QUFFRCxNQUFJLE9BQU87QUFDVCxRQUFJLEtBQUs7QUFBQSxNQUNQLEtBQUs7QUFBQSxNQUNMLFlBQVk7QUFBQSxRQUNWLE9BQU87QUFBQSxNQUNUO0FBQUEsTUFDQSxVQUFVLENBQUMsS0FBSztBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBSSxXQUFXLFVBQVU7QUFDekIsU0FBUyxZQUFZVCxPQUFNO0FBQ3pCLE1BQUksUUFBUUEsTUFBSyxDQUFDO0FBQ2xCLE1BQUksU0FBU0EsTUFBSyxDQUFDO0FBRW5CLE1BQUksY0FBY0EsTUFBSyxNQUFNLENBQUMsR0FDMUIsZUFBZXVCLGdCQUFlLGFBQWEsQ0FBQyxHQUM1QyxhQUFhLGFBQWEsQ0FBQztBQUUvQixNQUFJLFVBQVU7QUFFZCxNQUFJLE1BQU0sUUFBUSxVQUFVLEdBQUc7QUFDN0IsY0FBVTtBQUFBLE1BQ1IsS0FBSztBQUFBLE1BQ0wsWUFBWTtBQUFBLFFBQ1YsT0FBTyxHQUFHLE9BQU8sT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixLQUFLO0FBQUEsTUFDdEU7QUFBQSxNQUNBLFVBQVUsQ0FBQztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsWUFBWTtBQUFBLFVBQ1YsT0FBTyxHQUFHLE9BQU8sT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixTQUFTO0FBQUEsVUFDeEUsTUFBTTtBQUFBLFVBQ04sR0FBRyxXQUFXLENBQUM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsR0FBRztBQUFBLFFBQ0QsS0FBSztBQUFBLFFBQ0wsWUFBWTtBQUFBLFVBQ1YsT0FBTyxHQUFHLE9BQU8sT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixPQUFPO0FBQUEsVUFDdEUsTUFBTTtBQUFBLFVBQ04sR0FBRyxXQUFXLENBQUM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLE9BQU87QUFDTCxjQUFVO0FBQUEsTUFDUixLQUFLO0FBQUEsTUFDTCxZQUFZO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixHQUFHO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBQ0EsSUFBSSw2QkFBNkI7QUFBQSxFQUMvQixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQ1Y7QUFFQSxTQUFTLG1CQUFtQixVQUFVM0IsU0FBUTtBQUM1QyxNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sb0JBQW9CLFVBQVU7QUFDdkQsWUFBUSxNQUFNLG1CQUFvQixPQUFPLFVBQVUsZ0JBQWtCLEVBQUUsT0FBT0EsU0FBUSxlQUFnQixDQUFDO0FBQUEsRUFDekc7QUFDRjtBQUVBLFNBQVMsU0FBUyxVQUFVQSxTQUFRO0FBQ2xDLE1BQUksY0FBY0E7QUFFbEIsTUFBSUEsWUFBVyxRQUFRLE9BQU8saUJBQWlCLE1BQU07QUFDbkQsSUFBQUEsVUFBUyx1QkFBdUI7QUFBQSxFQUNsQztBQUVBLFNBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzVDLFFBQUksTUFBTTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsTUFBTSxhQUFhLHFCQUFxQixLQUFLLENBQUM7QUFBQSxJQUNoRDtBQUVBLFFBQUksZ0JBQWdCLE1BQU07QUFDeEIsVUFBSSxPQUFPLFVBQVUsUUFBUSxLQUFLLENBQUM7QUFDbkMsaUJBQVcsS0FBSyxZQUFZO0FBQzVCLE1BQUFBLFVBQVMsS0FBSyxVQUFVQTtBQUFBLElBQzFCO0FBRUEsUUFBSSxZQUFZQSxXQUFVLFNBQVNBLE9BQU0sS0FBSyxTQUFTQSxPQUFNLEVBQUUsUUFBUSxHQUFHO0FBQ3hFLFVBQUlJLFFBQU8sU0FBU0osT0FBTSxFQUFFLFFBQVE7QUFDcEMsYUFBTyxRQUFRLFlBQVlJLEtBQUksQ0FBQztBQUFBLElBQ2xDO0FBRUEsdUJBQW1CLFVBQVVKLE9BQU07QUFDbkMsWUFBUWEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRywwQkFBMEIsR0FBRyxDQUFDLEdBQUc7QUFBQSxNQUN6RSxNQUFNLE9BQU8sb0JBQW9CLFdBQVcsYUFBYSxxQkFBcUIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUFBLElBQzNGLENBQUMsQ0FBQztBQUFBLEVBQ0osQ0FBQztBQUNIO0FBRUEsSUFBSSxTQUFTLFNBQVNlLFFBQU87QUFBQztBQUU5QixJQUFJQyxLQUFJLE9BQU8sc0JBQXNCLGVBQWUsWUFBWSxRQUFRLFlBQVksVUFBVSxjQUFjO0FBQUEsRUFDMUcsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYO0FBQ0EsSUFBSSxXQUFXO0FBRWYsSUFBSSxRQUFRLFNBQVNDLE9BQU0sTUFBTTtBQUMvQixFQUFBRCxHQUFFLEtBQUssR0FBRyxPQUFPLFVBQVUsR0FBRyxFQUFFLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDdkQsU0FBTyxXQUFZO0FBQ2pCLFdBQU8sSUFBSSxJQUFJO0FBQUEsRUFDakI7QUFDRjtBQUVBLElBQUksTUFBTSxTQUFTRSxLQUFJLE1BQU07QUFDM0IsRUFBQUYsR0FBRSxLQUFLLEdBQUcsT0FBTyxVQUFVLEdBQUcsRUFBRSxPQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ3JELEVBQUFBLEdBQUUsUUFBUSxHQUFHLE9BQU8sVUFBVSxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsR0FBRyxPQUFPLFVBQVUsR0FBRyxFQUFFLE9BQU8sTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPLFVBQVUsR0FBRyxFQUFFLE9BQU8sTUFBTSxPQUFPLENBQUM7QUFDbko7QUFFQSxJQUFJLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUNGO0FBRUEsSUFBSSxTQUFTLFNBQVNELFFBQU87QUFBQztBQUU5QixTQUFTLFVBQVVJLE9BQU07QUFDdkIsTUFBSUMsU0FBUUQsTUFBSyxlQUFlQSxNQUFLLGFBQWEsYUFBYSxJQUFJO0FBQ25FLFNBQU8sT0FBT0MsV0FBVTtBQUMxQjtBQUVBLFNBQVMsaUJBQWlCRCxPQUFNO0FBQzlCLE1BQUloQyxVQUFTZ0MsTUFBSyxlQUFlQSxNQUFLLGFBQWEsV0FBVyxJQUFJO0FBQ2xFLE1BQUk1QixRQUFPNEIsTUFBSyxlQUFlQSxNQUFLLGFBQWEsU0FBUyxJQUFJO0FBQzlELFNBQU9oQyxXQUFVSTtBQUNuQjtBQUVBLFNBQVMsZ0JBQWdCNEIsT0FBTTtBQUM3QixTQUFPQSxTQUFRQSxNQUFLLGFBQWFBLE1BQUssVUFBVSxZQUFZQSxNQUFLLFVBQVUsU0FBUyxPQUFPLGdCQUFnQjtBQUM3RztBQUVBLFNBQVMsYUFBYTtBQUNwQixNQUFJLE9BQU8sbUJBQW1CLE1BQU07QUFDbEMsV0FBTyxTQUFTO0FBQUEsRUFDbEI7QUFFQSxNQUFJLFVBQVUsU0FBUyxPQUFPLGNBQWM7QUFDNUMsU0FBTyxXQUFXLFNBQVM7QUFDN0I7QUFFQSxTQUFTLGdCQUFnQixLQUFLO0FBQzVCLFNBQU8sU0FBUyxnQkFBZ0IsOEJBQThCLEdBQUc7QUFDbkU7QUFFQSxTQUFTLGNBQWMsS0FBSztBQUMxQixTQUFPLFNBQVMsY0FBYyxHQUFHO0FBQ25DO0FBRUEsU0FBUyxXQUFXLGFBQWE7QUFDL0IsTUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNsRixNQUFJLGVBQWUsT0FBTyxNQUN0QixPQUFPLGlCQUFpQixTQUFTLFlBQVksUUFBUSxRQUFRLGtCQUFrQixnQkFBZ0I7QUFFbkcsTUFBSSxPQUFPLGdCQUFnQixVQUFVO0FBQ25DLFdBQU8sU0FBUyxlQUFlLFdBQVc7QUFBQSxFQUM1QztBQUVBLE1BQUksTUFBTSxLQUFLLFlBQVksR0FBRztBQUM5QixTQUFPLEtBQUssWUFBWSxjQUFjLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQy9ELFFBQUksYUFBYSxLQUFLLFlBQVksV0FBVyxHQUFHLENBQUM7QUFBQSxFQUNuRCxDQUFDO0FBQ0QsTUFBSSxXQUFXLFlBQVksWUFBWSxDQUFDO0FBQ3hDLFdBQVMsUUFBUSxTQUFVLE9BQU87QUFDaEMsUUFBSSxZQUFZLFdBQVcsT0FBTztBQUFBLE1BQ2hDO0FBQUEsSUFDRixDQUFDLENBQUM7QUFBQSxFQUNKLENBQUM7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGNBQWNBLE9BQU07QUFDM0IsTUFBSUUsV0FBVSxJQUFJLE9BQU9GLE1BQUssV0FBVyxHQUFHO0FBRzVDLEVBQUFFLFdBQVUsR0FBRyxPQUFPQSxVQUFTLCtCQUErQjtBQUc1RCxTQUFPQTtBQUNUO0FBRUEsSUFBSSxXQUFXO0FBQUEsRUFDYixTQUFTLFNBQVNDLFNBQVEsVUFBVTtBQUNsQyxRQUFJSCxRQUFPLFNBQVMsQ0FBQztBQUVyQixRQUFJQSxNQUFLLFlBQVk7QUFDbkIsZUFBUyxDQUFDLEVBQUUsUUFBUSxTQUFVLFdBQVc7QUFDdkMsUUFBQUEsTUFBSyxXQUFXLGFBQWEsV0FBVyxTQUFTLEdBQUdBLEtBQUk7QUFBQSxNQUMxRCxDQUFDO0FBRUQsVUFBSUEsTUFBSyxhQUFhLGFBQWEsTUFBTSxRQUFRLE9BQU8sb0JBQW9CO0FBQzFFLFlBQUlFLFdBQVUsU0FBUyxjQUFjLGNBQWNGLEtBQUksQ0FBQztBQUN4RCxRQUFBQSxNQUFLLFdBQVcsYUFBYUUsVUFBU0YsS0FBSTtBQUFBLE1BQzVDLE9BQU87QUFDTCxRQUFBQSxNQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU0sU0FBUyxLQUFLLFVBQVU7QUFDNUIsUUFBSUEsUUFBTyxTQUFTLENBQUM7QUFDckIsUUFBSSxhQUFhLFNBQVMsQ0FBQztBQUczQixRQUFJLENBQUMsV0FBV0EsS0FBSSxFQUFFLFFBQVEsT0FBTyxnQkFBZ0IsR0FBRztBQUN0RCxhQUFPLFNBQVMsUUFBUSxRQUFRO0FBQUEsSUFDbEM7QUFFQSxRQUFJLFNBQVMsSUFBSSxPQUFPLEdBQUcsT0FBTyxPQUFPLFdBQVcsS0FBSyxDQUFDO0FBQzFELFdBQU8sV0FBVyxDQUFDLEVBQUUsV0FBVztBQUVoQyxRQUFJLFdBQVcsQ0FBQyxFQUFFLFdBQVcsT0FBTztBQUNsQyxVQUFJLGVBQWUsV0FBVyxDQUFDLEVBQUUsV0FBVyxNQUFNLE1BQU0sR0FBRyxFQUFFLE9BQU8sU0FBVSxLQUFLLEtBQUs7QUFDdEYsWUFBSSxRQUFRLE9BQU8sb0JBQW9CLElBQUksTUFBTSxNQUFNLEdBQUc7QUFDeEQsY0FBSSxNQUFNLEtBQUssR0FBRztBQUFBLFFBQ3BCLE9BQU87QUFDTCxjQUFJLE9BQU8sS0FBSyxHQUFHO0FBQUEsUUFDckI7QUFFQSxlQUFPO0FBQUEsTUFDVCxHQUFHO0FBQUEsUUFDRCxRQUFRLENBQUM7QUFBQSxRQUNULE9BQU8sQ0FBQztBQUFBLE1BQ1YsQ0FBQztBQUVELGlCQUFXLENBQUMsRUFBRSxXQUFXLFFBQVEsYUFBYSxNQUFNLEtBQUssR0FBRztBQUU1RCxVQUFJLGFBQWEsT0FBTyxXQUFXLEdBQUc7QUFDcEMsUUFBQUEsTUFBSyxnQkFBZ0IsT0FBTztBQUFBLE1BQzlCLE9BQU87QUFDTCxRQUFBQSxNQUFLLGFBQWEsU0FBUyxhQUFhLE9BQU8sS0FBSyxHQUFHLENBQUM7QUFBQSxNQUMxRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLGVBQWUsV0FBVyxJQUFJLFNBQVUzQixJQUFHO0FBQzdDLGFBQU8sT0FBT0EsRUFBQztBQUFBLElBQ2pCLENBQUMsRUFBRSxLQUFLLElBQUk7QUFFWixJQUFBMkIsTUFBSyxhQUFhLGVBQWUsRUFBRTtBQUNuQyxJQUFBQSxNQUFLLFlBQVk7QUFBQSxFQUNuQjtBQUNGO0FBRUEsU0FBUyxxQkFBcUIsSUFBSTtBQUNoQyxLQUFHO0FBQ0w7QUFFQSxTQUFTLFFBQVEsV0FBVyxVQUFVO0FBQ3BDLE1BQUksbUJBQW1CLE9BQU8sYUFBYSxhQUFhLFdBQVc7QUFFbkUsTUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixxQkFBaUI7QUFBQSxFQUNuQixPQUFPO0FBQ0wsUUFBSSxRQUFRO0FBRVosUUFBSSxPQUFPLG1CQUFtQix5QkFBeUI7QUFDckQsY0FBUSxPQUFPLHlCQUF5QjtBQUFBLElBQzFDO0FBRUEsVUFBTSxXQUFZO0FBQ2hCLFVBQUksVUFBVSxXQUFXO0FBQ3pCLFVBQUksT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUM5QixnQkFBVSxJQUFJLE9BQU87QUFDckIsV0FBSztBQUNMLHVCQUFpQjtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFDQSxJQUFJLFdBQVc7QUFDZixTQUFTLHFCQUFxQjtBQUM1QixhQUFXO0FBQ2I7QUFDQSxTQUFTLG9CQUFvQjtBQUMzQixhQUFXO0FBQ2I7QUFDQSxJQUFJLEtBQUs7QUFDVCxTQUFTLFFBQVFJLFVBQVM7QUFDeEIsTUFBSSxDQUFDLG1CQUFtQjtBQUN0QjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsT0FBTyxrQkFBa0I7QUFDNUI7QUFBQSxFQUNGO0FBRUEsTUFBSSx3QkFBd0JBLFNBQVEsY0FDaEMsZUFBZSwwQkFBMEIsU0FBUyxTQUFTLHVCQUMzRCx3QkFBd0JBLFNBQVEsY0FDaEMsZUFBZSwwQkFBMEIsU0FBUyxTQUFTLHVCQUMzRCx3QkFBd0JBLFNBQVEsd0JBQ2hDLHlCQUF5QiwwQkFBMEIsU0FBUyxTQUFTLHVCQUNyRSx3QkFBd0JBLFNBQVEsc0JBQ2hDLHVCQUF1QiwwQkFBMEIsU0FBUyxXQUFXO0FBQ3pFLE9BQUssSUFBSSxrQkFBa0IsU0FBVSxTQUFTO0FBQzVDLFFBQUk7QUFBVTtBQUNkLFFBQUksZ0JBQWdCLHVCQUF1QjtBQUMzQyxZQUFRLE9BQU8sRUFBRSxRQUFRLFNBQVUsZ0JBQWdCO0FBQ2pELFVBQUksZUFBZSxTQUFTLGVBQWUsZUFBZSxXQUFXLFNBQVMsS0FBSyxDQUFDLFVBQVUsZUFBZSxXQUFXLENBQUMsQ0FBQyxHQUFHO0FBQzNILFlBQUksT0FBTyxzQkFBc0I7QUFDL0IsaUNBQXVCLGVBQWUsTUFBTTtBQUFBLFFBQzlDO0FBRUEscUJBQWEsZUFBZSxNQUFNO0FBQUEsTUFDcEM7QUFFQSxVQUFJLGVBQWUsU0FBUyxnQkFBZ0IsZUFBZSxPQUFPLGNBQWMsT0FBTyxzQkFBc0I7QUFDM0csK0JBQXVCLGVBQWUsT0FBTyxVQUFVO0FBQUEsTUFDekQ7QUFFQSxVQUFJLGVBQWUsU0FBUyxnQkFBZ0IsVUFBVSxlQUFlLE1BQU0sS0FBSyxDQUFDLGdDQUFnQyxRQUFRLGVBQWUsYUFBYSxHQUFHO0FBQ3RKLFlBQUksZUFBZSxrQkFBa0IsV0FBVyxpQkFBaUIsZUFBZSxNQUFNLEdBQUc7QUFDdkYsY0FBSSxvQkFBb0IsaUJBQWlCLFdBQVcsZUFBZSxNQUFNLENBQUMsR0FDdEVwQyxVQUFTLGtCQUFrQixRQUMzQixXQUFXLGtCQUFrQjtBQUVqQyx5QkFBZSxPQUFPLGFBQWEsYUFBYUEsV0FBVSxhQUFhO0FBQ3ZFLGNBQUk7QUFBVSwyQkFBZSxPQUFPLGFBQWEsV0FBVyxRQUFRO0FBQUEsUUFDdEUsV0FBVyxnQkFBZ0IsZUFBZSxNQUFNLEdBQUc7QUFDakQsdUJBQWEsZUFBZSxNQUFNO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0QsTUFBSSxDQUFDO0FBQVE7QUFDYixLQUFHLFFBQVEsc0JBQXNCO0FBQUEsSUFDL0IsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osZUFBZTtBQUFBLElBQ2YsU0FBUztBQUFBLEVBQ1gsQ0FBQztBQUNIO0FBQ0EsU0FBUyxhQUFhO0FBQ3BCLE1BQUksQ0FBQztBQUFJO0FBQ1QsS0FBRyxXQUFXO0FBQ2hCO0FBRUEsU0FBUyxZQUFhZ0MsT0FBTTtBQUMxQixNQUFJLFFBQVFBLE1BQUssYUFBYSxPQUFPO0FBQ3JDLE1BQUksTUFBTSxDQUFDO0FBRVgsTUFBSSxPQUFPO0FBQ1QsVUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLE9BQU8sU0FBVSxLQUFLSyxRQUFPO0FBQ2xELFVBQUlkLFVBQVNjLE9BQU0sTUFBTSxHQUFHO0FBQzVCLFVBQUksT0FBT2QsUUFBTyxDQUFDO0FBQ25CLFVBQUksUUFBUUEsUUFBTyxNQUFNLENBQUM7QUFFMUIsVUFBSSxRQUFRLE1BQU0sU0FBUyxHQUFHO0FBQzVCLFlBQUksSUFBSSxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSztBQUFBLE1BQ25DO0FBRUEsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNQO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxZQUFhUyxPQUFNO0FBQzFCLE1BQUksaUJBQWlCQSxNQUFLLGFBQWEsYUFBYTtBQUNwRCxNQUFJLG1CQUFtQkEsTUFBSyxhQUFhLFdBQVc7QUFDcEQsTUFBSSxZQUFZQSxNQUFLLGNBQWMsU0FBWUEsTUFBSyxVQUFVLEtBQUssSUFBSTtBQUN2RSxNQUFJLE1BQU0saUJBQWlCLFdBQVdBLEtBQUksQ0FBQztBQUUzQyxNQUFJLENBQUMsSUFBSSxRQUFRO0FBQ2YsUUFBSSxTQUFTLHVCQUF1QjtBQUFBLEVBQ3RDO0FBRUEsTUFBSSxrQkFBa0Isa0JBQWtCO0FBQ3RDLFFBQUksU0FBUztBQUNiLFFBQUksV0FBVztBQUFBLEVBQ2pCO0FBRUEsTUFBSSxJQUFJLFlBQVksSUFBSSxRQUFRO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxJQUFJLFVBQVUsVUFBVSxTQUFTLEdBQUc7QUFDdEMsUUFBSSxXQUFXLFdBQVcsSUFBSSxRQUFRQSxNQUFLLFNBQVMsS0FBSyxVQUFVLElBQUksUUFBUSxNQUFNQSxNQUFLLFNBQVMsQ0FBQztBQUFBLEVBQ3RHO0FBRUEsTUFBSSxDQUFDLElBQUksWUFBWSxPQUFPLGdCQUFnQkEsTUFBSyxjQUFjQSxNQUFLLFdBQVcsYUFBYSxLQUFLLFdBQVc7QUFDMUcsUUFBSSxXQUFXQSxNQUFLLFdBQVc7QUFBQSxFQUNqQztBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVMsaUJBQWtCQSxPQUFNO0FBQy9CLE1BQUksa0JBQWtCLFFBQVFBLE1BQUssVUFBVSxFQUFFLE9BQU8sU0FBVSxLQUFLLE1BQU07QUFDekUsUUFBSSxJQUFJLFNBQVMsV0FBVyxJQUFJLFNBQVMsU0FBUztBQUNoRCxVQUFJLEtBQUssSUFBSSxJQUFJLEtBQUs7QUFBQSxJQUN4QjtBQUVBLFdBQU87QUFBQSxFQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ0wsTUFBSSxRQUFRQSxNQUFLLGFBQWEsT0FBTztBQUNyQyxNQUFJLFVBQVVBLE1BQUssYUFBYSxrQkFBa0I7QUFFbEQsTUFBSSxPQUFPLFVBQVU7QUFDbkIsUUFBSSxPQUFPO0FBQ1Qsc0JBQWdCLGlCQUFpQixJQUFJLEdBQUcsT0FBTyxPQUFPLGtCQUFrQixTQUFTLEVBQUUsT0FBTyxXQUFXLGFBQWEsQ0FBQztBQUFBLElBQ3JILE9BQU87QUFDTCxzQkFBZ0IsYUFBYSxJQUFJO0FBQ2pDLHNCQUFnQixXQUFXLElBQUk7QUFBQSxJQUNqQztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLFlBQVk7QUFDbkIsU0FBTztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLE1BQ0osVUFBVTtBQUFBLE1BQ1YsUUFBUTtBQUFBLE1BQ1IsTUFBTSxDQUFDO0FBQUEsSUFDVDtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLE1BQ0wsU0FBUyxDQUFDO0FBQUEsTUFDVixRQUFRLENBQUM7QUFBQSxNQUNULFlBQVksQ0FBQztBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQ0Y7QUFDQSxTQUFTLFVBQVVBLE9BQU07QUFDdkIsTUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFBQSxJQUMvRSxhQUFhO0FBQUEsRUFDZjtBQUVBLE1BQUksZUFBZSxZQUFZQSxLQUFJLEdBQy9CLFdBQVcsYUFBYSxVQUN4QmhDLFVBQVMsYUFBYSxRQUN0QixlQUFlLGFBQWE7QUFFaEMsTUFBSSxrQkFBa0IsaUJBQWlCZ0MsS0FBSTtBQUMzQyxNQUFJLGFBQWEsV0FBVyx1QkFBdUIsQ0FBQyxHQUFHQSxLQUFJO0FBQzNELE1BQUksY0FBYyxPQUFPLGNBQWMsWUFBWUEsS0FBSSxJQUFJLENBQUM7QUFDNUQsU0FBT25CLGdCQUFlO0FBQUEsSUFDcEI7QUFBQSxJQUNBLE9BQU9tQixNQUFLLGFBQWEsT0FBTztBQUFBLElBQ2hDLFNBQVNBLE1BQUssYUFBYSxrQkFBa0I7QUFBQSxJQUM3QyxRQUFRaEM7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxNQUNKLFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxNQUNSLE1BQU0sQ0FBQztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxNQUNMLFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxNQUNSLFlBQVk7QUFBQSxJQUNkO0FBQUEsRUFDRixHQUFHLFVBQVU7QUFDZjtBQUVBLElBQUksV0FBVyxVQUFVO0FBRXpCLFNBQVMsaUJBQWlCZ0MsT0FBTTtBQUM5QixNQUFJLFdBQVcsT0FBTyxtQkFBbUIsU0FBUyxVQUFVQSxPQUFNO0FBQUEsSUFDaEUsYUFBYTtBQUFBLEVBQ2YsQ0FBQyxJQUFJLFVBQVVBLEtBQUk7QUFFbkIsTUFBSSxDQUFDLFNBQVMsTUFBTSxRQUFRLFFBQVEscUJBQXFCLEdBQUc7QUFDMUQsV0FBTyxhQUFhLHNCQUFzQkEsT0FBTSxRQUFRO0FBQUEsRUFDMUQsT0FBTztBQUNMLFdBQU8sYUFBYSxrQ0FBa0NBLE9BQU0sUUFBUTtBQUFBLEVBQ3RFO0FBQ0Y7QUFFQSxJQUFJLGdCQUFnQixvQkFBSSxJQUFJO0FBQzVCLFNBQVMsSUFBSSxTQUFVLFFBQVE7QUFDN0IsZ0JBQWMsSUFBSSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3hDLENBQUM7QUFDRCxPQUFPLEtBQUssZ0JBQWdCLGNBQWMsQ0FBQyxFQUFFLElBQUksY0FBYyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQ3RGLE9BQU8sS0FBSyxnQkFBZ0IsWUFBWSxDQUFDLEVBQUUsSUFBSSxjQUFjLElBQUksS0FBSyxhQUFhLENBQUM7QUFDcEYsZ0JBQWdCTSxvQkFBbUIsYUFBYTtBQUVoRCxTQUFTLE9BQU8sTUFBTTtBQUNwQixNQUFJLFdBQVcsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUNuRixNQUFJLENBQUM7QUFBUSxXQUFPLFFBQVEsUUFBUTtBQUNwQyxNQUFJLGdCQUFnQixTQUFTLGdCQUFnQjtBQUU3QyxNQUFJLFNBQVMsU0FBU0MsUUFBTyxRQUFRO0FBQ25DLFdBQU8sY0FBYyxJQUFJLEdBQUcsT0FBTyw2QkFBNkIsR0FBRyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDckY7QUFFQSxNQUFJLFlBQVksU0FBU0MsV0FBVSxRQUFRO0FBQ3pDLFdBQU8sY0FBYyxPQUFPLEdBQUcsT0FBTyw2QkFBNkIsR0FBRyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDeEY7QUFFQSxNQUFJQyxZQUFXLE9BQU8sZUFBZSxnQkFBZ0IsU0FBUyxJQUFJLFNBQVVDLElBQUc7QUFDN0UsV0FBTyxNQUFNLE9BQU9BLEVBQUM7QUFBQSxFQUN2QixDQUFDLEVBQUUsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0FBRS9CLE1BQUksQ0FBQ0QsVUFBUyxTQUFTLElBQUksR0FBRztBQUM1QixJQUFBQSxVQUFTLEtBQUssSUFBSTtBQUFBLEVBQ3BCO0FBRUEsTUFBSSxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sdUJBQXVCLFFBQVEsRUFBRSxPQUFPLGVBQWUsSUFBSSxDQUFDLEVBQUUsT0FBT0EsVUFBUyxJQUFJLFNBQVVaLElBQUc7QUFDaEksV0FBTyxJQUFJLE9BQU9BLElBQUcsUUFBUSxFQUFFLE9BQU8sZUFBZSxJQUFJO0FBQUEsRUFDM0QsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBRWIsTUFBSSxpQkFBaUIsV0FBVyxHQUFHO0FBQ2pDLFdBQU8sUUFBUSxRQUFRO0FBQUEsRUFDekI7QUFFQSxNQUFJLGFBQWEsQ0FBQztBQUVsQixNQUFJO0FBQ0YsaUJBQWEsUUFBUSxLQUFLLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUFBLEVBQzlELFNBQVNjLElBQVA7QUFBQSxFQUNGO0FBRUEsTUFBSSxXQUFXLFNBQVMsR0FBRztBQUN6QixXQUFPLFNBQVM7QUFDaEIsY0FBVSxVQUFVO0FBQUEsRUFDdEIsT0FBTztBQUNMLFdBQU8sUUFBUSxRQUFRO0FBQUEsRUFDekI7QUFFQSxNQUFJLE9BQU8sS0FBSyxNQUFNLFFBQVE7QUFDOUIsTUFBSSxZQUFZLFdBQVcsT0FBTyxTQUFVLEtBQUtYLE9BQU07QUFDckQsUUFBSTtBQUNGLFVBQUksV0FBVyxpQkFBaUJBLEtBQUk7QUFFcEMsVUFBSSxVQUFVO0FBQ1osWUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNuQjtBQUFBLElBQ0YsU0FBU1csSUFBUDtBQUNBLFVBQUksQ0FBQyxZQUFZO0FBQ2YsWUFBSUEsR0FBRSxTQUFTLGVBQWU7QUFDNUIsa0JBQVEsTUFBTUEsRUFBQztBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVCxHQUFHLENBQUMsQ0FBQztBQUNMLFNBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzVDLFlBQVEsSUFBSSxTQUFTLEVBQUUsS0FBSyxTQUFVLG1CQUFtQjtBQUN2RCxjQUFRLG1CQUFtQixXQUFZO0FBQ3JDLGVBQU8sUUFBUTtBQUNmLGVBQU8sVUFBVTtBQUNqQixrQkFBVSxTQUFTO0FBQ25CLFlBQUksT0FBTyxhQUFhO0FBQVksbUJBQVM7QUFDN0MsYUFBSztBQUNMLGdCQUFRO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFDSCxDQUFDLEVBQUUsTUFBTSxTQUFVQSxJQUFHO0FBQ3BCLFdBQUs7QUFDTCxhQUFPQSxFQUFDO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFFQSxTQUFTLE9BQU9YLE9BQU07QUFDcEIsTUFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFDbkYsbUJBQWlCQSxLQUFJLEVBQUUsS0FBSyxTQUFVLFVBQVU7QUFDOUMsUUFBSSxVQUFVO0FBQ1osY0FBUSxDQUFDLFFBQVEsR0FBRyxRQUFRO0FBQUEsSUFDOUI7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsYUFBYVksT0FBTTtBQUMxQixTQUFPLFNBQVUscUJBQXFCO0FBQ3BDLFFBQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsUUFBSSxrQkFBa0IsdUJBQXVCLENBQUMsR0FBRyxPQUFPLHNCQUFzQixtQkFBbUIsdUJBQXVCLENBQUMsQ0FBQztBQUMxSCxRQUFJLE9BQU8sT0FBTztBQUVsQixRQUFJLE1BQU07QUFDUixjQUFRLFFBQVEsQ0FBQyxHQUFHLE9BQU8sT0FBTyxtQkFBbUIsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUNqRTtBQUVBLFdBQU9BLE1BQUssZ0JBQWdCL0IsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHO0FBQUEsTUFDekU7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFDRjtBQUVBLElBQUksU0FBUyxTQUFTZ0MsUUFBTyxnQkFBZ0I7QUFDM0MsTUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNsRixNQUFJLG9CQUFvQixPQUFPLFdBQzNCckIsYUFBWSxzQkFBc0IsU0FBUyx1QkFBdUIsbUJBQ2xFLGlCQUFpQixPQUFPLFFBQ3hCLFNBQVMsbUJBQW1CLFNBQVMsUUFBUSxnQkFDN0MsZUFBZSxPQUFPLE1BQ3RCLE9BQU8saUJBQWlCLFNBQVMsT0FBTyxjQUN4QyxpQkFBaUIsT0FBTyxRQUN4QixTQUFTLG1CQUFtQixTQUFTLE9BQU8sZ0JBQzVDLGdCQUFnQixPQUFPLE9BQ3ZCLFFBQVEsa0JBQWtCLFNBQVMsT0FBTyxlQUMxQyxrQkFBa0IsT0FBTyxTQUN6QixVQUFVLG9CQUFvQixTQUFTLE9BQU8saUJBQzlDLGtCQUFrQixPQUFPLFNBQ3pCLFVBQVUsb0JBQW9CLFNBQVMsQ0FBQyxJQUFJLGlCQUM1QyxxQkFBcUIsT0FBTyxZQUM1QixhQUFhLHVCQUF1QixTQUFTLENBQUMsSUFBSSxvQkFDbEQsaUJBQWlCLE9BQU8sUUFDeEJELFVBQVMsbUJBQW1CLFNBQVMsQ0FBQyxJQUFJO0FBQzlDLE1BQUksQ0FBQztBQUFnQjtBQUNyQixNQUFJdkIsVUFBUyxlQUFlLFFBQ3hCLFdBQVcsZUFBZSxVQUMxQkksUUFBTyxlQUFlO0FBQzFCLFNBQU8sWUFBWVMsZ0JBQWU7QUFBQSxJQUNoQyxNQUFNO0FBQUEsRUFDUixHQUFHLGNBQWMsR0FBRyxXQUFZO0FBQzlCLGNBQVUsNEJBQTRCO0FBQUEsTUFDcEM7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFBSSxPQUFPLFVBQVU7QUFDbkIsVUFBSSxPQUFPO0FBQ1QsbUJBQVcsaUJBQWlCLElBQUksR0FBRyxPQUFPLE9BQU8sa0JBQWtCLFNBQVMsRUFBRSxPQUFPLFdBQVcsYUFBYSxDQUFDO0FBQUEsTUFDaEgsT0FBTztBQUNMLG1CQUFXLGFBQWEsSUFBSTtBQUM1QixtQkFBVyxXQUFXLElBQUk7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxXQUFPLHNCQUFzQjtBQUFBLE1BQzNCLE9BQU87QUFBQSxRQUNMLE1BQU0sWUFBWVQsS0FBSTtBQUFBLFFBQ3RCLE1BQU0sT0FBTyxZQUFZLEtBQUssSUFBSSxJQUFJO0FBQUEsVUFDcEMsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFVBQ1IsTUFBTSxDQUFDO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVFKO0FBQUEsTUFDUjtBQUFBLE1BQ0EsV0FBV2EsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxvQkFBb0IsR0FBR1csVUFBUztBQUFBLE1BQzdFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsUUFBUUQ7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBQ0EsSUFBSSxrQkFBa0I7QUFBQSxFQUNwQixRQUFRLFNBQVNQLFVBQVM7QUFDeEIsV0FBTztBQUFBLE1BQ0wsTUFBTSxhQUFhLE1BQU07QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBU0UsU0FBUTtBQUN0QixXQUFPO0FBQUEsTUFDTCwyQkFBMkIsU0FBUywwQkFBMEIsYUFBYTtBQUN6RSxvQkFBWSxlQUFlO0FBQzNCLG9CQUFZLGVBQWU7QUFDM0IsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsVUFBVSxTQUFTLFNBQVMsY0FBYztBQUN4QyxpQkFBYSxRQUFRLFNBQVUsUUFBUTtBQUNyQyxVQUFJLGVBQWUsT0FBTyxNQUN0QmMsUUFBTyxpQkFBaUIsU0FBUyxXQUFXLGNBQzVDLG1CQUFtQixPQUFPLFVBQzFCLFdBQVcscUJBQXFCLFNBQVMsV0FBWTtBQUFBLE1BQUMsSUFBSTtBQUM5RCxhQUFPLE9BQU9BLE9BQU0sUUFBUTtBQUFBLElBQzlCO0FBRUEsaUJBQWEsaUNBQWlDLFNBQVVBLE9BQU0sVUFBVTtBQUN0RSxVQUFJLFdBQVcsU0FBUyxVQUNwQixRQUFRLFNBQVMsT0FDakIsVUFBVSxTQUFTLFNBQ25CaEMsVUFBUyxTQUFTLFFBQ2xCd0IsYUFBWSxTQUFTLFdBQ3JCLFNBQVMsU0FBUyxRQUNsQixPQUFPLFNBQVMsTUFDaEIsU0FBUyxTQUFTLFFBQ2xCLFFBQVEsU0FBUztBQUNyQixhQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUM1QyxnQkFBUSxJQUFJLENBQUMsU0FBUyxVQUFVeEIsT0FBTSxHQUFHLEtBQUssV0FBVyxTQUFTLEtBQUssVUFBVSxLQUFLLE1BQU0sSUFBSSxRQUFRLFFBQVE7QUFBQSxVQUM5RyxPQUFPO0FBQUEsVUFDUCxPQUFPO0FBQUEsVUFDUCxRQUFRO0FBQUEsVUFDUixNQUFNLENBQUM7QUFBQSxRQUNULENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFVYyxPQUFNO0FBQ3hCLGNBQUlZLFNBQVFDLGdCQUFlYixPQUFNLENBQUMsR0FDOUIsT0FBT1ksT0FBTSxDQUFDLEdBQ2RvQixRQUFPcEIsT0FBTSxDQUFDO0FBRWxCLGtCQUFRLENBQUNNLE9BQU0sc0JBQXNCO0FBQUEsWUFDbkMsT0FBTztBQUFBLGNBQ0w7QUFBQSxjQUNBLE1BQU1jO0FBQUEsWUFDUjtBQUFBLFlBQ0EsUUFBUTlDO0FBQUEsWUFDUjtBQUFBLFlBQ0EsV0FBV3dCO0FBQUEsWUFDWDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLFdBQVc7QUFBQSxVQUNiLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDTCxDQUFDLEVBQUUsTUFBTSxNQUFNO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ0g7QUFFQSxpQkFBYSx1QkFBdUIsU0FBVXVCLFFBQU87QUFDbkQsVUFBSSxXQUFXQSxPQUFNLFVBQ2pCLGFBQWFBLE9BQU0sWUFDbkIsT0FBT0EsT0FBTSxNQUNidkIsYUFBWXVCLE9BQU0sV0FDbEJ4QixVQUFTd0IsT0FBTTtBQUNuQixVQUFJLGNBQWMsV0FBV3hCLE9BQU07QUFFbkMsVUFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQixtQkFBVyxPQUFPLElBQUk7QUFBQSxNQUN4QjtBQUVBLFVBQUk7QUFFSixVQUFJLHNCQUFzQkMsVUFBUyxHQUFHO0FBQ3BDLG9CQUFZLGFBQWEscUNBQXFDO0FBQUEsVUFDNUQ7QUFBQSxVQUNBLFdBQVdBO0FBQUEsVUFDWCxnQkFBZ0IsS0FBSztBQUFBLFVBQ3JCLFdBQVcsS0FBSztBQUFBLFFBQ2xCLENBQUM7QUFBQSxNQUNIO0FBRUEsZUFBUyxLQUFLLGFBQWEsS0FBSyxJQUFJO0FBQ3BDLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxTQUFTO0FBQUEsRUFDWCxRQUFRLFNBQVNSLFVBQVM7QUFDeEIsV0FBTztBQUFBLE1BQ0wsT0FBTyxTQUFTZ0MsT0FBTSxXQUFXO0FBQy9CLFlBQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsWUFBSSxrQkFBa0IsT0FBTyxTQUN6QixVQUFVLG9CQUFvQixTQUFTLENBQUMsSUFBSTtBQUNoRCxlQUFPLFlBQVk7QUFBQSxVQUNqQixNQUFNO0FBQUEsUUFDUixHQUFHLFdBQVk7QUFDYixvQkFBVSw0QkFBNEI7QUFBQSxZQUNwQztBQUFBLFlBQ0E7QUFBQSxVQUNGLENBQUM7QUFDRCxjQUFJLFdBQVcsQ0FBQztBQUNoQixvQkFBVSxTQUFVLE1BQU07QUFDeEIsa0JBQU0sUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVUzQyxJQUFHO0FBQzFDLHlCQUFXLFNBQVMsT0FBT0EsR0FBRSxRQUFRO0FBQUEsWUFDdkMsQ0FBQyxJQUFJLFdBQVcsU0FBUyxPQUFPLEtBQUssUUFBUTtBQUFBLFVBQy9DLENBQUM7QUFDRCxpQkFBTyxDQUFDO0FBQUEsWUFDTixLQUFLO0FBQUEsWUFDTCxZQUFZO0FBQUEsY0FDVixPQUFPLENBQUMsR0FBRyxPQUFPLE9BQU8sV0FBVyxTQUFTLENBQUMsRUFBRSxPQUFPaUMsb0JBQW1CLE9BQU8sQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLFlBQzlGO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxnQkFBZ0I7QUFBQSxFQUNsQixRQUFRLFNBQVN0QixVQUFTO0FBQ3hCLFdBQU87QUFBQSxNQUNMLFNBQVMsU0FBU2lDLFNBQVEsU0FBUztBQUNqQyxZQUFJLFNBQVMsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2xGLFlBQUksZ0JBQWdCLE9BQU8sT0FDdkIsUUFBUSxrQkFBa0IsU0FBUyxPQUFPLGVBQzFDLGtCQUFrQixPQUFPLFNBQ3pCLFVBQVUsb0JBQW9CLFNBQVMsQ0FBQyxJQUFJLGlCQUM1QyxxQkFBcUIsT0FBTyxZQUM1QixhQUFhLHVCQUF1QixTQUFTLENBQUMsSUFBSSxvQkFDbEQsaUJBQWlCLE9BQU8sUUFDeEIxQixVQUFTLG1CQUFtQixTQUFTLENBQUMsSUFBSTtBQUM5QyxlQUFPLFlBQVk7QUFBQSxVQUNqQixNQUFNO0FBQUEsVUFDTjtBQUFBLFFBQ0YsR0FBRyxXQUFZO0FBQ2Isb0JBQVUsNEJBQTRCO0FBQUEsWUFDcEM7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQ0QsaUJBQU8sMEJBQTBCO0FBQUEsWUFDL0IsU0FBUyxRQUFRLFNBQVM7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsT0FBTztBQUFBLGNBQ0w7QUFBQSxjQUNBLFFBQVFBO0FBQUEsY0FDUixTQUFTLENBQUMsR0FBRyxPQUFPLE9BQU8sV0FBVyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU9lLG9CQUFtQixPQUFPLENBQUM7QUFBQSxZQUM5RjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxhQUFhO0FBQUEsRUFDZixRQUFRLFNBQVN0QixVQUFTO0FBQ3hCLFdBQU87QUFBQSxNQUNMLE1BQU0sU0FBU2tDLE1BQUssU0FBUztBQUMzQixZQUFJLFNBQVMsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2xGLFlBQUksb0JBQW9CLE9BQU8sV0FDM0IxQixhQUFZLHNCQUFzQixTQUFTLHVCQUF1QixtQkFDbEUsZ0JBQWdCLE9BQU8sT0FDdkIsUUFBUSxrQkFBa0IsU0FBUyxPQUFPLGVBQzFDLGtCQUFrQixPQUFPLFNBQ3pCLFVBQVUsb0JBQW9CLFNBQVMsQ0FBQyxJQUFJLGlCQUM1QyxxQkFBcUIsT0FBTyxZQUM1QixhQUFhLHVCQUF1QixTQUFTLENBQUMsSUFBSSxvQkFDbEQsaUJBQWlCLE9BQU8sUUFDeEJELFVBQVMsbUJBQW1CLFNBQVMsQ0FBQyxJQUFJO0FBQzlDLGVBQU8sWUFBWTtBQUFBLFVBQ2pCLE1BQU07QUFBQSxVQUNOO0FBQUEsUUFDRixHQUFHLFdBQVk7QUFDYixvQkFBVSw0QkFBNEI7QUFBQSxZQUNwQztBQUFBLFlBQ0E7QUFBQSxVQUNGLENBQUM7QUFDRCxpQkFBTyx1QkFBdUI7QUFBQSxZQUM1QjtBQUFBLFlBQ0EsV0FBV1YsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxvQkFBb0IsR0FBR1csVUFBUztBQUFBLFlBQzdFO0FBQUEsWUFDQSxPQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsUUFBUUQ7QUFBQSxjQUNSLFNBQVMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxXQUFXLGNBQWMsQ0FBQyxFQUFFLE9BQU9lLG9CQUFtQixPQUFPLENBQUM7QUFBQSxZQUMzRjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsVUFBVSxTQUFTYSxVQUFTLGNBQWM7QUFDeEMsaUJBQWEscUJBQXFCLFNBQVVuQixPQUFNLFVBQVU7QUFDMUQsVUFBSSxRQUFRLFNBQVMsT0FDakJSLGFBQVksU0FBUyxXQUNyQixRQUFRLFNBQVM7QUFDckIsVUFBSSxRQUFRO0FBQ1osVUFBSSxTQUFTO0FBRWIsVUFBSSxPQUFPO0FBQ1QsWUFBSSxtQkFBbUIsU0FBUyxpQkFBaUJRLEtBQUksRUFBRSxVQUFVLEVBQUU7QUFDbkUsWUFBSSxxQkFBcUJBLE1BQUssc0JBQXNCO0FBQ3BELGdCQUFRLG1CQUFtQixRQUFRO0FBQ25DLGlCQUFTLG1CQUFtQixTQUFTO0FBQUEsTUFDdkM7QUFFQSxVQUFJLE9BQU8sWUFBWSxDQUFDLE9BQU87QUFDN0IsY0FBTSxXQUFXLGFBQWEsSUFBSTtBQUFBLE1BQ3BDO0FBRUEsYUFBTyxRQUFRLFFBQVEsQ0FBQ0EsT0FBTSx1QkFBdUI7QUFBQSxRQUNuRCxTQUFTQSxNQUFLO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQVdSO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQVc7QUFBQSxNQUNiLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQUksd0JBQXdCLElBQUksT0FBTyxLQUFNLElBQUk7QUFDakQsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLE9BQU87QUFDL0MsU0FBUyxvQkFBb0IsU0FBUztBQUNwQyxNQUFJLFVBQVUsUUFBUSxRQUFRLHVCQUF1QixFQUFFO0FBQ3ZELE1BQUksWUFBWSxZQUFZLFNBQVMsQ0FBQztBQUN0QyxNQUFJLGVBQWUsYUFBYSx3QkFBd0IsQ0FBQyxLQUFLLGFBQWEsd0JBQXdCLENBQUM7QUFDcEcsTUFBSSxZQUFZLFFBQVEsV0FBVyxJQUFJLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJO0FBQ25FLFNBQU87QUFBQSxJQUNMLE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQyxDQUFDLElBQUksTUFBTSxPQUFPO0FBQUEsSUFDcEQsYUFBYSxnQkFBZ0I7QUFBQSxFQUMvQjtBQUNGO0FBRUEsU0FBUyxtQkFBbUJRLE9BQU1vQixXQUFVO0FBQzFDLE1BQUksbUJBQW1CLEdBQUcsT0FBTyw4QkFBOEIsRUFBRSxPQUFPQSxVQUFTLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFDbEcsU0FBTyxJQUFJLFFBQVEsU0FBVSxTQUFTLFFBQVE7QUFDNUMsUUFBSXBCLE1BQUssYUFBYSxnQkFBZ0IsTUFBTSxNQUFNO0FBRWhELGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBRUEsUUFBSSxXQUFXLFFBQVFBLE1BQUssUUFBUTtBQUNwQyxRQUFJLGdDQUFnQyxTQUFTLE9BQU8sU0FBVXpCLElBQUc7QUFDL0QsYUFBT0EsR0FBRSxhQUFhLHNCQUFzQixNQUFNNkM7QUFBQSxJQUNwRCxDQUFDLEVBQUUsQ0FBQztBQUNKLFFBQUk3QixVQUFTLE9BQU8saUJBQWlCUyxPQUFNb0IsU0FBUTtBQUNuRCxRQUFJLGFBQWE3QixRQUFPLGlCQUFpQixhQUFhLEVBQUUsTUFBTSxtQkFBbUI7QUFDakYsUUFBSSxhQUFhQSxRQUFPLGlCQUFpQixhQUFhO0FBQ3RELFFBQUksVUFBVUEsUUFBTyxpQkFBaUIsU0FBUztBQUUvQyxRQUFJLGlDQUFpQyxDQUFDLFlBQVk7QUFJaEQsTUFBQVMsTUFBSyxZQUFZLDZCQUE2QjtBQUM5QyxhQUFPLFFBQVE7QUFBQSxJQUNqQixXQUFXLGNBQWMsWUFBWSxVQUFVLFlBQVksSUFBSTtBQUM3RCxVQUFJLFdBQVdULFFBQU8saUJBQWlCLFNBQVM7QUFFaEQsVUFBSSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxXQUFXLENBQUMsQ0FBQyxJQUFJLGVBQWU7QUFDaEUsVUFBSXZCLFVBQVMsQ0FBQyxDQUFDLFNBQVMsV0FBVyxTQUFTLFFBQVEsV0FBVyxVQUFVLEtBQUssRUFBRSxRQUFRLFdBQVcsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxzQkFBc0IsTUFBTSxFQUFFLFVBQVU7QUFFeE0sVUFBSSx1QkFBdUIsb0JBQW9CLFFBQVEsR0FDbkQsV0FBVyxxQkFBcUIsT0FDaEMsY0FBYyxxQkFBcUI7QUFFdkMsVUFBSSxPQUFPLFdBQVcsQ0FBQyxFQUFFLFdBQVcsYUFBYTtBQUNqRCxVQUFJLFdBQVcsVUFBVUEsU0FBUSxRQUFRO0FBQ3pDLFVBQUksaUJBQWlCO0FBRXJCLFVBQUksTUFBTTtBQUNSLFlBQUksWUFBWSxhQUFhLFFBQVE7QUFFckMsWUFBSSxVQUFVLFlBQVksVUFBVSxRQUFRO0FBQzFDLHFCQUFXLFVBQVU7QUFDckIsVUFBQUEsVUFBUyxVQUFVO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBSUEsVUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLDhCQUE4QixhQUFhLFdBQVcsTUFBTUEsV0FBVSw4QkFBOEIsYUFBYSxTQUFTLE1BQU0saUJBQWlCO0FBQ2xOLFFBQUFnQyxNQUFLLGFBQWEsa0JBQWtCLGNBQWM7QUFFbEQsWUFBSSwrQkFBK0I7QUFFakMsVUFBQUEsTUFBSyxZQUFZLDZCQUE2QjtBQUFBLFFBQ2hEO0FBRUEsWUFBSSxPQUFPLFVBQVU7QUFDckIsWUFBSSxRQUFRLEtBQUs7QUFDakIsY0FBTSxXQUFXLHNCQUFzQixJQUFJb0I7QUFDM0MsaUJBQVMsVUFBVXBELE9BQU0sRUFBRSxLQUFLLFNBQVUsTUFBTTtBQUM5QyxjQUFJLFlBQVksc0JBQXNCYSxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUc7QUFBQSxZQUNqRixPQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsTUFBTSxtQkFBbUI7QUFBQSxZQUMzQjtBQUFBLFlBQ0EsUUFBUWI7QUFBQSxZQUNSLFVBQVU7QUFBQSxZQUNWO0FBQUEsWUFDQSxXQUFXO0FBQUEsVUFDYixDQUFDLENBQUM7QUFFRixjQUFJLFVBQVUsU0FBUyxnQkFBZ0IsOEJBQThCLEtBQUs7QUFFMUUsY0FBSW9ELGNBQWEsWUFBWTtBQUMzQixZQUFBcEIsTUFBSyxhQUFhLFNBQVNBLE1BQUssVUFBVTtBQUFBLFVBQzVDLE9BQU87QUFDTCxZQUFBQSxNQUFLLFlBQVksT0FBTztBQUFBLFVBQzFCO0FBRUEsa0JBQVEsWUFBWSxVQUFVLElBQUksU0FBVTNCLElBQUc7QUFDN0MsbUJBQU8sT0FBT0EsRUFBQztBQUFBLFVBQ2pCLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDWixVQUFBMkIsTUFBSyxnQkFBZ0IsZ0JBQWdCO0FBQ3JDLGtCQUFRO0FBQUEsUUFDVixDQUFDLEVBQUUsTUFBTSxNQUFNO0FBQUEsTUFDakIsT0FBTztBQUNMLGdCQUFRO0FBQUEsTUFDVjtBQUFBLElBQ0YsT0FBTztBQUNMLGNBQVE7QUFBQSxJQUNWO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTRyxTQUFRSCxPQUFNO0FBQ3JCLFNBQU8sUUFBUSxJQUFJLENBQUMsbUJBQW1CQSxPQUFNLFVBQVUsR0FBRyxtQkFBbUJBLE9BQU0sU0FBUyxDQUFDLENBQUM7QUFDaEc7QUFFQSxTQUFTLFlBQVlBLE9BQU07QUFDekIsU0FBT0EsTUFBSyxlQUFlLFNBQVMsUUFBUSxDQUFDLENBQUMsb0NBQW9DLFFBQVFBLE1BQUssUUFBUSxZQUFZLENBQUMsS0FBSyxDQUFDQSxNQUFLLGFBQWEsc0JBQXNCLE1BQU0sQ0FBQ0EsTUFBSyxjQUFjQSxNQUFLLFdBQVcsWUFBWTtBQUMxTjtBQUVBLFNBQVMscUJBQXFCLE1BQU07QUFDbEMsTUFBSSxDQUFDO0FBQVE7QUFDYixTQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUM1QyxRQUFJLGFBQWEsUUFBUSxLQUFLLGlCQUFpQixHQUFHLENBQUMsRUFBRSxPQUFPLFdBQVcsRUFBRSxJQUFJRyxRQUFPO0FBQ3BGLFFBQUlKLE9BQU0sS0FBSyxNQUFNLHNCQUFzQjtBQUMzQyx1QkFBbUI7QUFDbkIsWUFBUSxJQUFJLFVBQVUsRUFBRSxLQUFLLFdBQVk7QUFDdkMsTUFBQUEsS0FBSTtBQUNKLHdCQUFrQjtBQUNsQixjQUFRO0FBQUEsSUFDVixDQUFDLEVBQUUsTUFBTSxXQUFZO0FBQ25CLE1BQUFBLEtBQUk7QUFDSix3QkFBa0I7QUFDbEIsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBRUEsSUFBSSxpQkFBaUI7QUFBQSxFQUNuQixPQUFPLFNBQVNiLFNBQVE7QUFDdEIsV0FBTztBQUFBLE1BQ0wsMkJBQTJCLFNBQVMsMEJBQTBCLGFBQWE7QUFDekUsb0JBQVkseUJBQXlCO0FBQ3JDLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVUsU0FBU2lDLFVBQVMsY0FBYztBQUN4QyxpQkFBYSxxQkFBcUIsU0FBVSxRQUFRO0FBQ2xELFVBQUksZUFBZSxPQUFPLE1BQ3RCbkIsUUFBTyxpQkFBaUIsU0FBUyxXQUFXO0FBRWhELFVBQUksT0FBTyxzQkFBc0I7QUFDL0IsNkJBQXFCQSxLQUFJO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxhQUFhO0FBQ2pCLElBQUkscUJBQXFCO0FBQUEsRUFDdkIsUUFBUSxTQUFTaEIsVUFBUztBQUN4QixXQUFPO0FBQUEsTUFDTCxLQUFLO0FBQUEsUUFDSCxTQUFTLFNBQVMsVUFBVTtBQUMxQiw2QkFBbUI7QUFDbkIsdUJBQWE7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVNFLFNBQVE7QUFDdEIsV0FBTztBQUFBLE1BQ0wsV0FBVyxTQUFTLFlBQVk7QUFDOUIsZ0JBQVEsV0FBVyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUNyRDtBQUFBLE1BQ0EsUUFBUSxTQUFTQyxVQUFTO0FBQ3hCLG1CQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsT0FBTyxTQUFTa0MsT0FBTSxRQUFRO0FBQzVCLFlBQUksdUJBQXVCLE9BQU87QUFFbEMsWUFBSSxZQUFZO0FBQ2QsNEJBQWtCO0FBQUEsUUFDcEIsT0FBTztBQUNMLGtCQUFRLFdBQVcsNkJBQTZCO0FBQUEsWUFDOUM7QUFBQSxVQUNGLENBQUMsQ0FBQztBQUFBLFFBQ0o7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQUksdUJBQXVCLFNBQVNDLHNCQUFxQixpQkFBaUI7QUFDeEUsTUFBSTlCLGFBQVk7QUFBQSxJQUNkLE1BQU07QUFBQSxJQUNOLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxJQUNILE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxFQUNWO0FBQ0EsU0FBTyxnQkFBZ0IsWUFBWSxFQUFFLE1BQU0sR0FBRyxFQUFFLE9BQU8sU0FBVSxLQUFLK0IsSUFBRztBQUN2RSxRQUFJLFFBQVFBLEdBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRztBQUNyQyxRQUFJLFFBQVEsTUFBTSxDQUFDO0FBQ25CLFFBQUksT0FBTyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRztBQUVsQyxRQUFJLFNBQVMsU0FBUyxLQUFLO0FBQ3pCLFVBQUksUUFBUTtBQUNaLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxTQUFTLFNBQVMsS0FBSztBQUN6QixVQUFJLFFBQVE7QUFDWixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sV0FBVyxJQUFJO0FBRXRCLFFBQUksTUFBTSxJQUFJLEdBQUc7QUFDZixhQUFPO0FBQUEsSUFDVDtBQUVBLFlBQVEsT0FBTztBQUFBLE1BQ2IsS0FBSztBQUNILFlBQUksT0FBTyxJQUFJLE9BQU87QUFDdEI7QUFBQSxNQUVGLEtBQUs7QUFDSCxZQUFJLE9BQU8sSUFBSSxPQUFPO0FBQ3RCO0FBQUEsTUFFRixLQUFLO0FBQ0gsWUFBSSxJQUFJLElBQUksSUFBSTtBQUNoQjtBQUFBLE1BRUYsS0FBSztBQUNILFlBQUksSUFBSSxJQUFJLElBQUk7QUFDaEI7QUFBQSxNQUVGLEtBQUs7QUFDSCxZQUFJLElBQUksSUFBSSxJQUFJO0FBQ2hCO0FBQUEsTUFFRixLQUFLO0FBQ0gsWUFBSSxJQUFJLElBQUksSUFBSTtBQUNoQjtBQUFBLE1BRUYsS0FBSztBQUNILFlBQUksU0FBUyxJQUFJLFNBQVM7QUFDMUI7QUFBQSxJQUNKO0FBRUEsV0FBTztBQUFBLEVBQ1QsR0FBRy9CLFVBQVM7QUFDZDtBQUNBLElBQUksa0JBQWtCO0FBQUEsRUFDcEIsUUFBUSxTQUFTUixVQUFTO0FBQ3hCLFdBQU87QUFBQSxNQUNMLE9BQU87QUFBQSxRQUNMLFdBQVcsU0FBU1EsV0FBVSxpQkFBaUI7QUFDN0MsaUJBQU8scUJBQXFCLGVBQWU7QUFBQSxRQUM3QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTyxTQUFTTixTQUFRO0FBQ3RCLFdBQU87QUFBQSxNQUNMLHFCQUFxQixTQUFTLG9CQUFvQixhQUFhYyxPQUFNO0FBQ25FLFlBQUksa0JBQWtCQSxNQUFLLGFBQWEsbUJBQW1CO0FBRTNELFlBQUksaUJBQWlCO0FBQ25CLHNCQUFZLFlBQVkscUJBQXFCLGVBQWU7QUFBQSxRQUM5RDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVUsU0FBU21CLFVBQVNLLFlBQVc7QUFDckMsSUFBQUEsV0FBVSxvQ0FBb0MsU0FBVTFDLE9BQU07QUFDNUQsVUFBSSxPQUFPQSxNQUFLLE1BQ1pVLGFBQVlWLE1BQUssV0FDakIsaUJBQWlCQSxNQUFLLGdCQUN0QixZQUFZQSxNQUFLO0FBQ3JCLFVBQUksUUFBUTtBQUFBLFFBQ1YsV0FBVyxhQUFhLE9BQU8saUJBQWlCLEdBQUcsT0FBTztBQUFBLE1BQzVEO0FBQ0EsVUFBSSxpQkFBaUIsYUFBYSxPQUFPVSxXQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsT0FBT0EsV0FBVSxJQUFJLElBQUksSUFBSTtBQUM5RixVQUFJLGFBQWEsU0FBUyxPQUFPQSxXQUFVLE9BQU8sTUFBTUEsV0FBVSxRQUFRLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBT0EsV0FBVSxPQUFPLE1BQU1BLFdBQVUsUUFBUSxLQUFLLElBQUksSUFBSTtBQUN0SixVQUFJLGNBQWMsVUFBVSxPQUFPQSxXQUFVLFFBQVEsT0FBTztBQUM1RCxVQUFJLFFBQVE7QUFBQSxRQUNWLFdBQVcsR0FBRyxPQUFPLGdCQUFnQixHQUFHLEVBQUUsT0FBTyxZQUFZLEdBQUcsRUFBRSxPQUFPLFdBQVc7QUFBQSxNQUN0RjtBQUNBLFVBQUksT0FBTztBQUFBLFFBQ1QsV0FBVyxhQUFhLE9BQU8sWUFBWSxJQUFJLElBQUksUUFBUTtBQUFBLE1BQzdEO0FBQ0EsVUFBSSxhQUFhO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLFlBQVlYLGdCQUFlLENBQUMsR0FBRyxXQUFXLEtBQUs7QUFBQSxRQUMvQyxVQUFVLENBQUM7QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLFlBQVlBLGdCQUFlLENBQUMsR0FBRyxXQUFXLEtBQUs7QUFBQSxVQUMvQyxVQUFVLENBQUM7QUFBQSxZQUNULEtBQUssS0FBSyxLQUFLO0FBQUEsWUFDZixVQUFVLEtBQUssS0FBSztBQUFBLFlBQ3BCLFlBQVlBLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsS0FBSyxLQUFLLFVBQVUsR0FBRyxXQUFXLElBQUk7QUFBQSxVQUN0RixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFJLFlBQVk7QUFBQSxFQUNkLEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILE9BQU87QUFBQSxFQUNQLFFBQVE7QUFDVjtBQUVBLFNBQVMsVUFBVSxXQUFXO0FBQzVCLE1BQUksUUFBUSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRWhGLE1BQUksVUFBVSxlQUFlLFVBQVUsV0FBVyxRQUFRLFFBQVE7QUFDaEUsY0FBVSxXQUFXLE9BQU87QUFBQSxFQUM5QjtBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVMsUUFBUSxZQUFZO0FBQzNCLE1BQUksV0FBVyxRQUFRLEtBQUs7QUFDMUIsV0FBTyxXQUFXO0FBQUEsRUFDcEIsT0FBTztBQUNMLFdBQU8sQ0FBQyxVQUFVO0FBQUEsRUFDcEI7QUFDRjtBQUVBLElBQUksUUFBUTtBQUFBLEVBQ1YsT0FBTyxTQUFTSyxTQUFRO0FBQ3RCLFdBQU87QUFBQSxNQUNMLHFCQUFxQixTQUFTLG9CQUFvQixhQUFhYyxPQUFNO0FBQ25FLFlBQUksV0FBV0EsTUFBSyxhQUFhLGNBQWM7QUFDL0MsWUFBSSxPQUFPLENBQUMsV0FBVyxtQkFBbUIsSUFBSSxpQkFBaUIsU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUFJLFNBQVV5QixJQUFHO0FBQ2xHLGlCQUFPQSxHQUFFLEtBQUs7QUFBQSxRQUNoQixDQUFDLENBQUM7QUFFRixZQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLGVBQUssU0FBUyx1QkFBdUI7QUFBQSxRQUN2QztBQUVBLG9CQUFZLE9BQU87QUFDbkIsb0JBQVksU0FBU3pCLE1BQUssYUFBYSxpQkFBaUI7QUFDeEQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsVUFBVSxTQUFTbUIsVUFBU0ssWUFBVztBQUNyQyxJQUFBQSxXQUFVLHVCQUF1QixTQUFVMUMsT0FBTTtBQUMvQyxVQUFJLFdBQVdBLE1BQUssVUFDaEIsYUFBYUEsTUFBSyxZQUNsQixPQUFPQSxNQUFLLE1BQ1osT0FBT0EsTUFBSyxNQUNaLGlCQUFpQkEsTUFBSyxRQUN0QlUsYUFBWVYsTUFBSztBQUNyQixVQUFJLFlBQVksS0FBSyxPQUNqQixXQUFXLEtBQUs7QUFDcEIsVUFBSSxZQUFZLEtBQUssT0FDakIsV0FBVyxLQUFLO0FBQ3BCLFVBQUksUUFBUSxnQkFBZ0I7QUFBQSxRQUMxQixXQUFXVTtBQUFBLFFBQ1gsZ0JBQWdCO0FBQUEsUUFDaEIsV0FBVztBQUFBLE1BQ2IsQ0FBQztBQUNELFVBQUksV0FBVztBQUFBLFFBQ2IsS0FBSztBQUFBLFFBQ0wsWUFBWVgsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHO0FBQUEsVUFDNUQsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0g7QUFDQSxVQUFJLDhCQUE4QixTQUFTLFdBQVc7QUFBQSxRQUNwRCxVQUFVLFNBQVMsU0FBUyxJQUFJLFNBQVM7QUFBQSxNQUMzQyxJQUFJLENBQUM7QUFDTCxVQUFJLGlCQUFpQjtBQUFBLFFBQ25CLEtBQUs7QUFBQSxRQUNMLFlBQVlBLGdCQUFlLENBQUMsR0FBRyxNQUFNLEtBQUs7QUFBQSxRQUMxQyxVQUFVLENBQUMsVUFBVUEsZ0JBQWU7QUFBQSxVQUNsQyxLQUFLLFNBQVM7QUFBQSxVQUNkLFlBQVlBLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsU0FBUyxVQUFVLEdBQUcsTUFBTSxJQUFJO0FBQUEsUUFDaEYsR0FBRywyQkFBMkIsQ0FBQyxDQUFDO0FBQUEsTUFDbEM7QUFDQSxVQUFJLGlCQUFpQjtBQUFBLFFBQ25CLEtBQUs7QUFBQSxRQUNMLFlBQVlBLGdCQUFlLENBQUMsR0FBRyxNQUFNLEtBQUs7QUFBQSxRQUMxQyxVQUFVLENBQUMsY0FBYztBQUFBLE1BQzNCO0FBQ0EsVUFBSSxTQUFTLFFBQVEsT0FBTyxrQkFBa0IsYUFBYSxDQUFDO0FBQzVELFVBQUksU0FBUyxRQUFRLE9BQU8sa0JBQWtCLGFBQWEsQ0FBQztBQUM1RCxVQUFJLFVBQVU7QUFBQSxRQUNaLEtBQUs7QUFBQSxRQUNMLFlBQVlBLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRztBQUFBLFVBQzVELElBQUk7QUFBQSxVQUNKLFdBQVc7QUFBQSxVQUNYLGtCQUFrQjtBQUFBLFFBQ3BCLENBQUM7QUFBQSxRQUNELFVBQVUsQ0FBQyxVQUFVLGNBQWM7QUFBQSxNQUNyQztBQUNBLFVBQUksT0FBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsVUFBVSxDQUFDO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxZQUFZO0FBQUEsWUFDVixJQUFJO0FBQUEsVUFDTjtBQUFBLFVBQ0EsVUFBVSxRQUFRLFFBQVE7QUFBQSxRQUM1QixHQUFHLE9BQU87QUFBQSxNQUNaO0FBQ0EsZUFBUyxLQUFLLE1BQU07QUFBQSxRQUNsQixLQUFLO0FBQUEsUUFDTCxZQUFZQSxnQkFBZTtBQUFBLFVBQ3pCLE1BQU07QUFBQSxVQUNOLGFBQWEsUUFBUSxPQUFPLFFBQVEsR0FBRztBQUFBLFVBQ3ZDLE1BQU0sUUFBUSxPQUFPLFFBQVEsR0FBRztBQUFBLFFBQ2xDLEdBQUcsU0FBUztBQUFBLE1BQ2QsQ0FBQztBQUNELGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSx1QkFBdUI7QUFBQSxFQUN6QixVQUFVLFNBQVNzQyxVQUFTSyxZQUFXO0FBQ3JDLFFBQUksZUFBZTtBQUVuQixRQUFJLE9BQU8sWUFBWTtBQUNyQixxQkFBZSxPQUFPLFdBQVcsa0NBQWtDLEVBQUU7QUFBQSxJQUN2RTtBQUVBLElBQUFBLFdBQVUsc0JBQXNCLFdBQVk7QUFDMUMsVUFBSSxZQUFZLENBQUM7QUFDakIsVUFBSSxPQUFPO0FBQUEsUUFDVCxNQUFNO0FBQUEsTUFDUjtBQUNBLFVBQUksaUJBQWlCO0FBQUEsUUFDbkIsZUFBZTtBQUFBLFFBQ2YsYUFBYTtBQUFBLFFBQ2IsS0FBSztBQUFBLE1BQ1A7QUFFQSxnQkFBVSxLQUFLO0FBQUEsUUFDYixLQUFLO0FBQUEsUUFDTCxZQUFZM0MsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsVUFDdkQsR0FBRztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELFVBQUksa0JBQWtCQSxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUc7QUFBQSxRQUMzRSxlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUVELFVBQUksTUFBTTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsVUFDdkQsSUFBSTtBQUFBLFVBQ0osSUFBSTtBQUFBLFVBQ0osR0FBRztBQUFBLFFBQ0wsQ0FBQztBQUFBLFFBQ0QsVUFBVSxDQUFDO0FBQUEsTUFDYjtBQUVBLFVBQUksQ0FBQyxjQUFjO0FBQ2pCLFlBQUksU0FBUyxLQUFLO0FBQUEsVUFDaEIsS0FBSztBQUFBLFVBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxHQUFHO0FBQUEsWUFDakUsZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsR0FBRztBQUFBLFVBQ0QsS0FBSztBQUFBLFVBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHO0FBQUEsWUFDbEUsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFFQSxnQkFBVSxLQUFLLEdBQUc7QUFDbEIsZ0JBQVUsS0FBSztBQUFBLFFBQ2IsS0FBSztBQUFBLFFBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsVUFDdkQsU0FBUztBQUFBLFVBQ1QsR0FBRztBQUFBLFFBQ0wsQ0FBQztBQUFBLFFBQ0QsVUFBVSxlQUFlLENBQUMsSUFBSSxDQUFDO0FBQUEsVUFDN0IsS0FBSztBQUFBLFVBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHO0FBQUEsWUFDbEUsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELFVBQUksQ0FBQyxjQUFjO0FBRWpCLGtCQUFVLEtBQUs7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFlBQVlBLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRztBQUFBLFlBQ3ZELFNBQVM7QUFBQSxZQUNULEdBQUc7QUFBQSxVQUNMLENBQUM7QUFBQSxVQUNELFVBQVUsQ0FBQztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsWUFBWUEsZ0JBQWVBLGdCQUFlLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHO0FBQUEsY0FDbEUsUUFBUTtBQUFBLFlBQ1YsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxZQUFZO0FBQUEsVUFDVixTQUFTO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxhQUFhO0FBQUEsRUFDZixPQUFPLFNBQVNLLFNBQVE7QUFDdEIsV0FBTztBQUFBLE1BQ0wscUJBQXFCLFNBQVMsb0JBQW9CLGFBQWFjLE9BQU07QUFDbkUsWUFBSSxhQUFhQSxNQUFLLGFBQWEsZ0JBQWdCO0FBQ25ELFlBQUksU0FBUyxlQUFlLE9BQU8sUUFBUSxlQUFlLEtBQUssT0FBTztBQUN0RSxvQkFBWSxRQUFRLElBQUk7QUFDeEIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBSSxVQUFVLENBQUMsV0FBVyxpQkFBaUIsUUFBUSxlQUFlLFlBQVksZ0JBQWdCLG9CQUFvQixpQkFBaUIsT0FBTyxzQkFBc0IsVUFBVTtBQUUxSyxnQkFBZ0IsU0FBUztBQUFBLEVBQ3ZCLFdBQVc7QUFDYixDQUFDO0FBQ0QsSUFBSSxXQUFXLElBQUk7QUFDbkIsSUFBSSxXQUFXLElBQUk7QUFDbkIsSUFBSSxZQUFZLElBQUk7QUFDcEIsSUFBSSxRQUFRLElBQUk7QUFDaEIsSUFBSSxVQUFVLElBQUk7QUFDbEIsSUFBSSx1QkFBdUIsSUFBSTtBQUMvQixJQUFJLFdBQVcsSUFBSTtBQUNuQixJQUFJNUIsUUFBTyxJQUFJO0FBQ2YsSUFBSSxRQUFRLElBQUk7QUFDaEIsSUFBSSxPQUFPLElBQUk7QUFDZixJQUFJLFVBQVUsSUFBSTs7O0FDdmdHbEIsd0JBQXNCO0FBR3RCLFNBQVNzRCxTQUFRLFFBQVEsZ0JBQWdCO0FBQ3ZDLE1BQUksT0FBTyxPQUFPLEtBQUssTUFBTTtBQUU3QixNQUFJLE9BQU8sdUJBQXVCO0FBQ2hDLFFBQUksVUFBVSxPQUFPLHNCQUFzQixNQUFNO0FBQ2pELHVCQUFtQixVQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFDekQsYUFBTyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsRUFBRTtBQUFBLElBQ3RELENBQUMsSUFBSSxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU87QUFBQSxFQUNwQztBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVNDLGdCQUFlLFFBQVE7QUFDOUIsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVUsUUFBUUEsTUFBSztBQUN6QyxRQUFJLFNBQVMsUUFBUSxVQUFVQSxFQUFDLElBQUksVUFBVUEsRUFBQyxJQUFJLENBQUM7QUFDcEQsSUFBQUEsS0FBSSxJQUFJRixTQUFRLE9BQU8sTUFBTSxHQUFHLElBQUUsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN6RCxNQUFBRyxpQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDMUMsQ0FBQyxJQUFJLE9BQU8sNEJBQTRCLE9BQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDLElBQUlILFNBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUNqSyxhQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDakYsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTSSxTQUFRLEtBQUs7QUFDcEI7QUFFQSxTQUFPQSxXQUFVLGNBQWMsT0FBTyxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsU0FBVUMsTUFBSztBQUNsRyxXQUFPLE9BQU9BO0FBQUEsRUFDaEIsSUFBSSxTQUFVQSxNQUFLO0FBQ2pCLFdBQU9BLFFBQU8sY0FBYyxPQUFPLFVBQVVBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxFQUMxSCxHQUFHRCxTQUFRLEdBQUc7QUFDaEI7QUFFQSxTQUFTRCxpQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFDeEMsTUFBSSxPQUFPLEtBQUs7QUFDZCxXQUFPLGVBQWUsS0FBSyxLQUFLO0FBQUEsTUFDOUI7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxNQUNkLFVBQVU7QUFBQSxJQUNaLENBQUM7QUFBQSxFQUNILE9BQU87QUFDTCxRQUFJLEdBQUcsSUFBSTtBQUFBLEVBQ2I7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTRywrQkFBOEIsUUFBUSxVQUFVO0FBQ3ZELE1BQUksVUFBVTtBQUFNLFdBQU8sQ0FBQztBQUM1QixNQUFJLFNBQVMsQ0FBQztBQUNkLE1BQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUNuQyxNQUFJLEtBQUtKO0FBRVQsT0FBS0EsS0FBSSxHQUFHQSxLQUFJLFdBQVcsUUFBUUEsTUFBSztBQUN0QyxVQUFNLFdBQVdBLEVBQUM7QUFDbEIsUUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFDaEMsV0FBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsRUFDMUI7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTSywwQkFBeUIsUUFBUSxVQUFVO0FBQ2xELE1BQUksVUFBVTtBQUFNLFdBQU8sQ0FBQztBQUU1QixNQUFJLFNBQVNELCtCQUE4QixRQUFRLFFBQVE7QUFFM0QsTUFBSSxLQUFLSjtBQUVULE1BQUksT0FBTyx1QkFBdUI7QUFDaEMsUUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUUxRCxTQUFLQSxLQUFJLEdBQUdBLEtBQUksaUJBQWlCLFFBQVFBLE1BQUs7QUFDNUMsWUFBTSxpQkFBaUJBLEVBQUM7QUFDeEIsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFDaEMsVUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUM5RCxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTTSxvQkFBbUIsS0FBSztBQUMvQixTQUFPQyxvQkFBbUIsR0FBRyxLQUFLQyxrQkFBaUIsR0FBRyxLQUFLQyw2QkFBNEIsR0FBRyxLQUFLQyxvQkFBbUI7QUFDcEg7QUFFQSxTQUFTSCxvQkFBbUIsS0FBSztBQUMvQixNQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsV0FBT0ksbUJBQWtCLEdBQUc7QUFDdEQ7QUFFQSxTQUFTSCxrQkFBaUIsTUFBTTtBQUM5QixNQUFJLE9BQU8sV0FBVyxlQUFlLEtBQUssT0FBTyxRQUFRLEtBQUssUUFBUSxLQUFLLFlBQVksS0FBSztBQUFNLFdBQU8sTUFBTSxLQUFLLElBQUk7QUFDMUg7QUFFQSxTQUFTQyw2QkFBNEJHLElBQUcsUUFBUTtBQUM5QyxNQUFJLENBQUNBO0FBQUc7QUFDUixNQUFJLE9BQU9BLE9BQU07QUFBVSxXQUFPRCxtQkFBa0JDLElBQUcsTUFBTTtBQUM3RCxNQUFJQyxLQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUtELEVBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUNyRCxNQUFJQyxPQUFNLFlBQVlELEdBQUU7QUFBYSxJQUFBQyxLQUFJRCxHQUFFLFlBQVk7QUFDdkQsTUFBSUMsT0FBTSxTQUFTQSxPQUFNO0FBQU8sV0FBTyxNQUFNLEtBQUtELEVBQUM7QUFDbkQsTUFBSUMsT0FBTSxlQUFlLDJDQUEyQyxLQUFLQSxFQUFDO0FBQUcsV0FBT0YsbUJBQWtCQyxJQUFHLE1BQU07QUFDakg7QUFFQSxTQUFTRCxtQkFBa0IsS0FBSyxLQUFLO0FBQ25DLE1BQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFVBQU0sSUFBSTtBQUUvQyxXQUFTWCxLQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHQSxLQUFJLEtBQUtBO0FBQUssU0FBS0EsRUFBQyxJQUFJLElBQUlBLEVBQUM7QUFFcEUsU0FBTztBQUNUO0FBRUEsU0FBU1Usc0JBQXFCO0FBQzVCLFFBQU0sSUFBSSxVQUFVLHNJQUFzSTtBQUM1SjtBQUdBLFNBQVMsVUFBVSxPQUFPO0FBQ3hCLE1BQUk7QUFFSixNQUFJLE9BQU8sTUFBTSxNQUNiLE9BQU8sTUFBTSxNQUNiLFdBQVcsTUFBTSxVQUNqQixTQUFTLE1BQU0sUUFDZixRQUFRLE1BQU0sT0FDZCxRQUFRLE1BQU0sT0FDZCxPQUFPLE1BQU0sTUFDYixZQUFZLE1BQU0sV0FDbEIsY0FBYyxNQUFNLGFBQ3BCLFFBQVEsTUFBTSxPQUNkLGFBQWEsTUFBTSxZQUNuQixVQUFVLE1BQU0sU0FDaEIsU0FBUyxNQUFNLFFBQ2YsV0FBVyxNQUFNLFVBQ2pCSSxRQUFPLE1BQU0sTUFDYkMsUUFBTyxNQUFNLE1BQ2IsV0FBVyxNQUFNLFVBQ2pCLE9BQU8sTUFBTTtBQUVqQixNQUFJLFdBQVcsV0FBVztBQUFBLElBQ3hCLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLG1CQUFtQjtBQUFBLElBQ25CLGlCQUFpQjtBQUFBLElBQ2pCLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFdBQVdELFVBQVM7QUFBQSxJQUNwQixzQkFBc0JBLFVBQVMsZ0JBQWdCQSxVQUFTO0FBQUEsSUFDeEQsb0JBQW9CQSxVQUFTLGNBQWNBLFVBQVM7QUFBQSxFQUN0RCxHQUFHYixpQkFBZ0IsVUFBVSxNQUFNLE9BQU9jLEtBQUksR0FBRyxPQUFPQSxVQUFTLGVBQWVBLFVBQVMsSUFBSSxHQUFHZCxpQkFBZ0IsVUFBVSxhQUFhLE9BQU8sUUFBUSxHQUFHLE9BQU8sYUFBYSxlQUFlLGFBQWEsUUFBUSxhQUFhLENBQUMsR0FBR0EsaUJBQWdCLFVBQVUsV0FBVyxPQUFPLElBQUksR0FBRyxPQUFPLFNBQVMsZUFBZSxTQUFTLElBQUksR0FBR0EsaUJBQWdCLFVBQVUsbUJBQW1CLE1BQU0sV0FBVyxHQUFHO0FBR3JZLFNBQU8sT0FBTyxLQUFLLE9BQU8sRUFBRSxJQUFJLFNBQVUsS0FBSztBQUM3QyxXQUFPLFFBQVEsR0FBRyxJQUFJLE1BQU07QUFBQSxFQUM5QixDQUFDLEVBQUUsT0FBTyxTQUFVLEtBQUs7QUFDdkIsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNIO0FBTUEsU0FBUyxhQUFhLEtBQUs7QUFDekIsUUFBTSxNQUFNO0FBRVosU0FBTyxRQUFRO0FBQ2pCO0FBRUEsU0FBUyxTQUFTZSxTQUFRO0FBQ3hCLE1BQUksYUFBYUEsT0FBTSxHQUFHO0FBQ3hCLFdBQU9BO0FBQUEsRUFDVDtBQUdBLEVBQUFBLFVBQVNBLFFBQU8sUUFBUSxpQkFBaUIsU0FBVUMsUUFBTyxLQUFLO0FBQzdELFdBQU8sTUFBTSxJQUFJLFlBQVksSUFBSTtBQUFBLEVBQ25DLENBQUM7QUFFRCxTQUFPRCxRQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsWUFBWSxJQUFJQSxRQUFPLE9BQU8sQ0FBQztBQUM1RDtBQUVBLElBQUlFLGFBQVksQ0FBQyxPQUFPO0FBRXhCLFNBQVMsV0FBVyxLQUFLO0FBQ3ZCLFNBQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxNQUFNLENBQUM7QUFDbEQ7QUFFQSxTQUFTLGNBQWMsT0FBTztBQUM1QixTQUFPLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxTQUFVQyxJQUFHO0FBQ3ZDLFdBQU9BLEdBQUUsS0FBSztBQUFBLEVBQ2hCLENBQUMsRUFBRSxPQUFPLFNBQVVBLElBQUc7QUFDckIsV0FBT0E7QUFBQSxFQUNULENBQUMsRUFBRSxPQUFPLFNBQVUsS0FBSyxNQUFNO0FBQzdCLFFBQUluQixLQUFJLEtBQUssUUFBUSxHQUFHO0FBQ3hCLFFBQUksT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFHQSxFQUFDLENBQUM7QUFDcEMsUUFBSSxRQUFRLEtBQUssTUFBTUEsS0FBSSxDQUFDLEVBQUUsS0FBSztBQUNuQyxTQUFLLFdBQVcsUUFBUSxJQUFJLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJO0FBQ3hFLFdBQU87QUFBQSxFQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ1A7QUFFQSxTQUFTb0IsU0FBUUMsZ0JBQWUsU0FBUztBQUN2QyxNQUFJLGFBQWEsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBRXRGLE1BQUksT0FBTyxZQUFZLFVBQVU7QUFDL0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFlBQVksUUFBUSxZQUFZLENBQUMsR0FBRyxJQUFJLFNBQVUsT0FBTztBQUMzRCxXQUFPRCxTQUFRQyxnQkFBZSxLQUFLO0FBQUEsRUFDckMsQ0FBQztBQUdELE1BQUksU0FBUyxPQUFPLEtBQUssUUFBUSxjQUFjLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBVSxLQUFLLEtBQUs7QUFDNUUsUUFBSSxNQUFNLFFBQVEsV0FBVyxHQUFHO0FBRWhDLFlBQVEsS0FBSztBQUFBLE1BQ1gsS0FBSztBQUNILFlBQUksTUFBTSxXQUFXLElBQUk7QUFDekIsZUFBTyxRQUFRLFdBQVcsT0FBTztBQUNqQztBQUFBLE1BRUYsS0FBSztBQUNILFlBQUksTUFBTSxPQUFPLElBQUksY0FBYyxHQUFHO0FBQ3RDO0FBQUEsTUFFRjtBQUNFLFlBQUksSUFBSSxRQUFRLE9BQU8sTUFBTSxLQUFLLElBQUksUUFBUSxPQUFPLE1BQU0sR0FBRztBQUM1RCxjQUFJLE1BQU0sSUFBSSxZQUFZLENBQUMsSUFBSTtBQUFBLFFBQ2pDLE9BQU87QUFDTCxjQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSTtBQUFBLFFBQzdCO0FBQUEsSUFFSjtBQUVBLFdBQU87QUFBQSxFQUNULEdBQUc7QUFBQSxJQUNELE9BQU8sQ0FBQztBQUFBLEVBQ1YsQ0FBQztBQUVELE1BQUksb0JBQW9CLFdBQVcsT0FDL0IsZ0JBQWdCLHNCQUFzQixTQUFTLENBQUMsSUFBSSxtQkFDcEQsWUFBWWhCLDBCQUF5QixZQUFZYSxVQUFTO0FBRTlELFNBQU8sTUFBTSxPQUFPLElBQUluQixnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxhQUFhO0FBRy9GLFNBQU9zQixlQUFjLE1BQU0sUUFBUSxDQUFDLFFBQVEsS0FBS3RCLGdCQUFlQSxnQkFBZSxDQUFDLEdBQUcsT0FBTyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUUsT0FBT08sb0JBQW1CLFFBQVEsQ0FBQyxDQUFDO0FBQ3BKO0FBRUEsSUFBSWdCLGNBQWE7QUFFakIsSUFBSTtBQUNGLEVBQUFBLGNBQWE7QUFDZixTQUFTQyxJQUFQO0FBQVc7QUFFYixTQUFTLE1BQU87QUFDZCxNQUFJLENBQUNELGVBQWMsV0FBVyxPQUFPLFFBQVEsVUFBVSxZQUFZO0FBQ2pFLFFBQUk7QUFFSixLQUFDLFdBQVcsU0FBUyxNQUFNLE1BQU0sVUFBVSxTQUFTO0FBQUEsRUFDdEQ7QUFDRjtBQUVBLFNBQVMsa0JBQWtCRSxPQUFNO0FBRy9CLE1BQUlBLFNBQVF0QixTQUFRc0IsS0FBSSxNQUFNLFlBQVlBLE1BQUssVUFBVUEsTUFBSyxZQUFZQSxNQUFLLE1BQU07QUFDbkYsV0FBT0E7QUFBQSxFQUNUO0FBRUEsTUFBSSxRQUFNLE1BQU07QUFDZCxXQUFPLFFBQU0sS0FBS0EsS0FBSTtBQUFBLEVBQ3hCO0FBR0EsTUFBSUEsVUFBUyxNQUFNO0FBQ2pCLFdBQU87QUFBQSxFQUNUO0FBR0EsTUFBSUEsU0FBUXRCLFNBQVFzQixLQUFJLE1BQU0sWUFBWUEsTUFBSyxVQUFVQSxNQUFLLFVBQVU7QUFDdEUsV0FBT0E7QUFBQSxFQUNUO0FBR0EsTUFBSSxNQUFNLFFBQVFBLEtBQUksS0FBS0EsTUFBSyxXQUFXLEdBQUc7QUFFNUMsV0FBTztBQUFBLE1BQ0wsUUFBUUEsTUFBSyxDQUFDO0FBQUEsTUFDZCxVQUFVQSxNQUFLLENBQUM7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFHQSxNQUFJLE9BQU9BLFVBQVMsVUFBVTtBQUM1QixXQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsTUFDUixVQUFVQTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0Y7QUFLQSxTQUFTLGNBQWMsS0FBSyxPQUFPO0FBS2pDLFNBQU8sTUFBTSxRQUFRLEtBQUssS0FBSyxNQUFNLFNBQVMsS0FBSyxDQUFDLE1BQU0sUUFBUSxLQUFLLEtBQUssUUFBUXZCLGlCQUFnQixDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQztBQUN6SDtBQUVBLElBQUksa0JBQStCLG1CQUFNLFdBQVcsU0FBVSxPQUFPLEtBQUs7QUFDeEUsTUFBSSxXQUFXLE1BQU0sTUFDakIsV0FBVyxNQUFNLE1BQ2pCLFNBQVMsTUFBTSxRQUNmLFlBQVksTUFBTSxXQUNsQixRQUFRLE1BQU0sT0FDZCxVQUFVLE1BQU0sU0FDaEIsU0FBUyxNQUFNO0FBQ25CLE1BQUksYUFBYSxrQkFBa0IsUUFBUTtBQUMzQyxNQUFJLFVBQVUsY0FBYyxXQUFXLENBQUMsRUFBRSxPQUFPSyxvQkFBbUIsVUFBVSxLQUFLLENBQUMsR0FBR0Esb0JBQW1CLFVBQVUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hJLE1BQUltQixhQUFZLGNBQWMsYUFBYSxPQUFPLE1BQU0sY0FBYyxXQUFXLFFBQU0sVUFBVSxNQUFNLFNBQVMsSUFBSSxNQUFNLFNBQVM7QUFDbkksTUFBSSxPQUFPLGNBQWMsUUFBUSxrQkFBa0IsUUFBUSxDQUFDO0FBQzVELE1BQUksZUFBZUQsTUFBSyxZQUFZekIsZ0JBQWVBLGdCQUFlQSxnQkFBZUEsZ0JBQWUsQ0FBQyxHQUFHLE9BQU8sR0FBRzBCLFVBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsSUFDbkk7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUVGLE1BQUksQ0FBQyxjQUFjO0FBQ2pCLFFBQUksdUJBQXVCLFVBQVU7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFdBQVcsYUFBYTtBQUM1QixNQUFJLGFBQWE7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUNBLFNBQU8sS0FBSyxLQUFLLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFFeEMsUUFBSSxDQUFDLGdCQUFnQixhQUFhLGVBQWUsR0FBRyxHQUFHO0FBQ3JELGlCQUFXLEdBQUcsSUFBSSxNQUFNLEdBQUc7QUFBQSxJQUM3QjtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQU8sYUFBYSxTQUFTLENBQUMsR0FBRyxVQUFVO0FBQzdDLENBQUM7QUFDRCxnQkFBZ0IsY0FBYztBQUM5QixnQkFBZ0IsWUFBWTtBQUFBLEVBQzFCLE1BQU0sa0JBQUFDLFFBQVU7QUFBQSxFQUNoQixRQUFRLGtCQUFBQSxRQUFVO0FBQUEsRUFDbEIsVUFBVSxrQkFBQUEsUUFBVTtBQUFBLEVBQ3BCLFFBQVEsa0JBQUFBLFFBQVU7QUFBQSxFQUNsQixXQUFXLGtCQUFBQSxRQUFVO0FBQUEsRUFDckIsTUFBTSxrQkFBQUEsUUFBVTtBQUFBLEVBQ2hCLE9BQU8sa0JBQUFBLFFBQVU7QUFBQSxFQUNqQixNQUFNLGtCQUFBQSxRQUFVLFVBQVUsQ0FBQyxrQkFBQUEsUUFBVSxRQUFRLGtCQUFBQSxRQUFVLE9BQU8sa0JBQUFBLFFBQVUsTUFBTSxDQUFDO0FBQUEsRUFDL0UsUUFBUSxrQkFBQUEsUUFBVTtBQUFBLEVBQ2xCLFlBQVksa0JBQUFBLFFBQVU7QUFBQSxFQUN0QixTQUFTLGtCQUFBQSxRQUFVO0FBQUEsRUFDbkIsTUFBTSxrQkFBQUEsUUFBVSxNQUFNLENBQUMsTUFBTSxPQUFPLGNBQWMsWUFBWSxNQUFNLENBQUM7QUFBQSxFQUNyRSxNQUFNLGtCQUFBQSxRQUFVLFVBQVUsQ0FBQyxrQkFBQUEsUUFBVSxRQUFRLGtCQUFBQSxRQUFVLE9BQU8sa0JBQUFBLFFBQVUsTUFBTSxDQUFDO0FBQUEsRUFDL0UsVUFBVSxrQkFBQUEsUUFBVTtBQUFBLEVBQ3BCLE1BQU0sa0JBQUFBLFFBQVUsTUFBTSxDQUFDLFNBQVMsTUFBTSxDQUFDO0FBQUEsRUFDdkMsT0FBTyxrQkFBQUEsUUFBVTtBQUFBLEVBQ2pCLFVBQVUsa0JBQUFBLFFBQVUsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQzNDLE9BQU8sa0JBQUFBLFFBQVU7QUFBQSxFQUNqQixNQUFNLGtCQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxLQUFLLENBQUM7QUFBQSxFQUN6SCxNQUFNLGtCQUFBQSxRQUFVO0FBQUEsRUFDaEIsV0FBVyxrQkFBQUEsUUFBVTtBQUFBLEVBQ3JCLGFBQWEsa0JBQUFBLFFBQVU7QUFBQSxFQUN2QixRQUFRLGtCQUFBQSxRQUFVLFVBQVUsQ0FBQyxrQkFBQUEsUUFBVSxNQUFNLGtCQUFBQSxRQUFVLE1BQU0sQ0FBQztBQUFBLEVBQzlELE9BQU8sa0JBQUFBLFFBQVU7QUFBQSxFQUNqQixTQUFTLGtCQUFBQSxRQUFVO0FBQUEsRUFDbkIsV0FBVyxrQkFBQUEsUUFBVSxVQUFVLENBQUMsa0JBQUFBLFFBQVUsUUFBUSxrQkFBQUEsUUFBVSxNQUFNLENBQUM7QUFBQSxFQUNuRSxhQUFhLGtCQUFBQSxRQUFVO0FBQ3pCO0FBQ0EsZ0JBQWdCLGVBQWU7QUFBQSxFQUM3QixRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQ2Y7QUFDQSxJQUFJLGVBQWVOLFNBQVEsS0FBSyxNQUFNLEdBQU0sYUFBYTs7O0FDcFZsRCxTQUFTLGFBQWdCLE9BQTZCO0FBR3pELFFBQU0sVUFBVSxhQUFhLE1BQU0sU0FBUyxDQUFDTyxJQUFHQyxPQUFNO0FBQ2xELFFBQUlELEdBQUUsVUFBVUMsR0FBRTtBQUFRLGFBQU87QUFDakMsV0FBT0QsR0FBRSxNQUFNLENBQUMsT0FBT0UsV0FBVSxTQUFTRCxHQUFFQyxNQUFLLENBQUM7QUFBQSxFQUN0RCxDQUFDO0FBR0QsUUFBTSxXQUFXQyxHQUF1QixJQUFJO0FBQzVDLFFBQU0sZ0JBQWdCQyxHQUFRLE1BQU0sVUFBVSxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDN0UsUUFBTSxTQUFTLGtCQUFrQjtBQUFBLElBQzdCLGFBQWE7QUFBQSxJQUNiLFFBQVEsTUFBTTtBQUFBLElBQ2Qsb0JBQW9CLE1BQU07QUFBQSxJQUMxQixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsRUFDZixDQUFDO0FBRUQsUUFBTSxZQUFZQSxHQUFRLE1BQU07QUFDNUIsUUFBSSxPQUFPO0FBQ1AsYUFBTyxVQUFVLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxPQUFPLFdBQVcsT0FBTyxPQUFPLEtBQUssT0FBTyxRQUFRO0FBQUE7QUFDcEcsYUFBTyxNQUFNO0FBQUEsRUFDdEIsR0FBRyxDQUFDLE9BQU8sTUFBTSxPQUFPLFVBQVUsT0FBTyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBRTdELFFBQU0sWUFBWUEsR0FBUSxNQUFNO0FBQzVCLFFBQUksQ0FBQyxNQUFNO0FBQVcsYUFBTztBQUM3QixRQUFJLE1BQU0sUUFBUSxNQUFNLFNBQVM7QUFBRyxhQUFPLE1BQU07QUFFakQsUUFBSSxTQUFTLFdBQVcsTUFBTSxTQUFTO0FBQUcsYUFBTyxDQUFDLEVBQUUsUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUFBO0FBQ3hFLGFBQU8sQ0FBQyxNQUFNLFNBQVM7QUFBQSxFQUNoQyxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUM7QUFFcEIsU0FDSSxnQkFBQUMsR0FBQyxTQUFJLEtBQUssVUFDTjtBQUFBLG9CQUFBQSxHQUFDLFdBQU0sV0FBVSxrQkFDYjtBQUFBLHNCQUFBQSxHQUFDLFdBQ0csMEJBQUFBLEdBQUMsUUFBRyxXQUFVLDZCQUNULGtCQUFRLElBQUksQ0FBQyxRQUNWLGdCQUFBQSxHQUFDLDBCQUF1QixRQUFRLEtBQUssQ0FDeEMsR0FDTCxHQUNKO0FBQUEsTUFDQSxnQkFBQUEsR0FBQyxXQUNJLG9CQUFVLElBQUksQ0FBQyxRQUNaLGdCQUFBQSxHQUFDLG1CQUFnQixPQUFPLEdBQUcsV0FBc0IsU0FBa0IsU0FBUyxLQUFLLENBQ3BGLEdBQ0w7QUFBQSxPQUNKO0FBQUEsSUFDQyxPQUFPLFdBQ0osZ0JBQUFBLEdBQUMsbUJBQWdCLE1BQU0sT0FBTyxNQUFNLFlBQVksT0FBTyxZQUFZLFNBQVMsT0FBTyxTQUFTO0FBQUEsS0FFcEc7QUFFUjtBQUtPLFNBQVMsdUJBQTBCLEVBQUUsUUFBQUMsUUFBTyxHQUFpQztBQUNoRixRQUFNLFNBQXlCRixHQUFRLE1BQU07QUFDekMsUUFBSSxDQUFDRSxRQUFPLE9BQU87QUFDZixhQUFPQSxRQUFPO0FBQUEsSUFDbEIsV0FBVyxPQUFPQSxRQUFPLFVBQVUsWUFBWTtBQUMzQyxhQUFPQSxRQUFPLE1BQU07QUFBQSxJQUN4QixPQUFPO0FBQ0gsYUFBT0EsUUFBTztBQUFBLElBQ2xCO0FBQUEsRUFDSixHQUFHLENBQUNBLFFBQU8sSUFBSUEsUUFBTyxLQUFLLENBQUM7QUFFNUIsUUFBTSxZQUFZRjtBQUFBLElBQ2QsTUFBT0UsUUFBTyxVQUFVLFlBQVksUUFBUUEsUUFBTyxVQUFVLFlBQVksU0FBU0EsUUFBTztBQUFBLElBQ3pGLENBQUNBLFFBQU8sS0FBSztBQUFBLEVBQ2pCO0FBR0EsU0FDSSxnQkFBQUQsR0FBQyxRQUFHLE9BQU8sV0FBVyxXQUFVLDhCQUM1QiwwQkFBQUEsR0FBQyxTQUFJLFdBQVUsK0JBQStCLGtCQUFPLEdBQ3pEO0FBRVI7QUFLTyxTQUFTLGdCQUFtQjtBQUFBLEVBQy9CO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FLRztBQUNDLE1BQUksVUFBVSxlQUFlLE9BQU8sR0FBRztBQUNuQyxVQUFNLGlCQUFpQixZQUFZLFVBQVUsS0FBSyxJQUFJLFVBQVUsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJO0FBRXRGLFdBQ0ksZ0JBQUFBLEdBQUMsS0FDRztBQUFBLHNCQUFBQSxHQUFDLG9CQUFpQixPQUFjLE9BQU8sU0FBUyxPQUFPLFFBQVEsUUFBUSxRQUFRLGdCQUFnQjtBQUFBLE1BQzlGLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFDZixnQkFBQUEsR0FBQyxtQkFBZ0IsT0FBTyxRQUFRLEdBQUcsU0FBa0IsU0FBUyxLQUFLLENBQ3RFO0FBQUEsT0FDTDtBQUFBLEVBRVIsT0FBTztBQUNILFdBQU8sZ0JBQUFBLEdBQUMsWUFBUyxPQUFjLEtBQUssU0FBUyxTQUFrQjtBQUFBLEVBQ25FO0FBQ0o7QUFLTyxTQUFTLGlCQUFvQjtBQUFBLEVBQ2hDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQUFFO0FBQ0osR0FLRztBQUNDLFFBQU0sYUFBYUMsR0FBVyxvQkFBb0I7QUFDbEQsUUFBTSxnQkFBZ0JKLEdBQVEsTUFBTTtBQUNoQyxRQUFJRyxXQUFBLGdCQUFBQSxRQUFRO0FBQVEsYUFBT0EsUUFBTyxPQUFPLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFBQTtBQUUxRCxhQUNJLGdCQUFBRixHQUFDLFFBQ0csMEJBQUFBLEdBQUMsT0FBSSxZQUF3QixRQUFRLE1BQU0sT0FBTyxNQUFNLEtBQUssR0FDakU7QUFBQSxFQUVaLEdBQUcsQ0FBQ0UsV0FBQSxnQkFBQUEsUUFBUSxRQUFRLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQztBQUMxQyxRQUFNLGFBQWEsYUFBYSxhQUFhO0FBRTdDLFNBQ0ksZ0JBQUFGLEdBQUMsUUFBRyxXQUFVLCtCQUNWLDBCQUFBQSxHQUFDLFFBQUcsU0FBUyxPQUFRLHNCQUFXLEdBQ3BDO0FBRVI7QUFLTyxTQUFTLFNBQVksRUFBRSxPQUFPLEtBQUssUUFBUSxHQUEyRDtBQUN6RyxTQUNJLGdCQUFBQSxHQUFDLFFBQUcsV0FBVSxzQkFBcUIsT0FBTyxRQUFRLGlCQUFpQixRQUFRLFFBQVEsUUFDOUUsa0JBQVEsSUFBSSxDQUFDLFFBQ1YsZ0JBQUFBLEdBQUMsZ0JBQWEsS0FBVSxRQUFRLEtBQUssQ0FDeEMsR0FDTDtBQUVSO0FBS08sU0FBUyxhQUFnQixFQUFFLEtBQUssUUFBQUMsUUFBTyxHQUF5QztBQUNuRixRQUFNLFFBQVFGLEdBQVEsTUFBTUUsUUFBTyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUtBLFFBQU8sS0FBSyxDQUFDO0FBQ2xFLFFBQU0sQ0FBQyxlQUFlLFFBQVEsSUFBSSxvQkFBa0M7QUFBQSxJQUNoRSxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTLENBQUNHLE9BQU1ILFFBQU8sWUFBWUEsUUFBTyxTQUFTRyxJQUFHLEdBQUc7QUFBQSxFQUM3RCxDQUFDO0FBQ0QsUUFBTSxhQUFhTCxHQUFRLE1BQU07QUFDN0IsUUFBSUUsUUFBTyxRQUFRO0FBQ2YsVUFBSUksS0FBSUosUUFBTyxPQUFPLGNBQWMsU0FBUyxHQUFHO0FBQ2hELFVBQUlJLE1BQUssT0FBT0EsTUFBSyxZQUFZLFdBQVdBO0FBQUcsZUFBTyxFQUFFLEdBQUdBLElBQUcsT0FBTyxFQUFFLEdBQUdBLEdBQUUsT0FBTyxTQUFTLEVBQUU7QUFDOUYsYUFBT0E7QUFBQSxJQUNYO0FBQU8sYUFBTztBQUFBLEVBQ2xCLEdBQUcsQ0FBQyxLQUFLSixRQUFPLFFBQVEsS0FBSyxDQUFDO0FBRTlCLFFBQU0sV0FBVyxhQUFhLFVBQVU7QUFFeEMsUUFBTSxTQUFTRixHQUFRLE1BQU07QUFDekIsUUFBSU87QUFDSixRQUFJTCxRQUFPLFlBQVlBLFFBQU87QUFBUSxNQUFBSyxLQUFJTCxRQUFPLE9BQU8sY0FBYyxTQUFTLEdBQUc7QUFBQTtBQUM3RSxNQUFBSyxLQUFJO0FBQ1QsUUFBSUE7QUFBRyxhQUFPLEVBQUUsR0FBR0EsSUFBRyxPQUFPLEVBQUUsR0FBR0EsR0FBRSxPQUFPLFNBQVMsRUFBRTtBQUN0RCxXQUFPQTtBQUFBLEVBQ1gsR0FBRyxDQUFDLEtBQUtMLFFBQU8sUUFBUUEsUUFBTyxVQUFVLEtBQUssQ0FBQztBQUMvQyxTQUNJLGdCQUFBRDtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csWUFBWSxNQUFNLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLENBQUMsY0FBYyxVQUFVLENBQUM7QUFBQSxNQUMxRixXQUFVO0FBQUEsTUFFVCxVQUFBQyxRQUFPLFdBQ0osZ0JBQUFEO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRyxlQUFlO0FBQUEsVUFDZixRQUFRO0FBQUEsVUFDUjtBQUFBLFVBQ0EsT0FBTztBQUFBO0FBQUEsTUFDWCxJQUVBO0FBQUE7QUFBQSxFQUVSO0FBRVI7QUFLTyxTQUFTLGFBQWEsU0FBaUM7QUFDMUQsUUFBTSxhQUFhRyxHQUFXLG9CQUFvQjtBQUVsRCxTQUFPSixHQUFRLE1BQU07QUFDakIsUUFBSSxFQUFlLE9BQU8sR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDWCxPQUFPO0FBQ0gsYUFBTyxnQkFBQUMsR0FBQyxPQUFJLFlBQXdCLFFBQVEsTUFBTSxPQUFPLFNBQWdCO0FBQUEsSUFDN0U7QUFBQSxFQUNKLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDaEI7QUFFTyxTQUFTLFdBQVc7QUFBQSxFQUN2QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FJRztBQUNDLFFBQU1PLFFBQU9SLEdBQVEsTUFBTTtBQUN2QixRQUFJLGFBQWE7QUFBYSxhQUFPO0FBQUEsYUFDNUIsYUFBYTtBQUFjLGFBQU87QUFDM0MsV0FBTztBQUFBLEVBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUVkLFNBQ0ksZ0JBQUFDLEdBQUMsU0FBSSxTQUFrQixXQUNuQiwwQkFBQUEsR0FBQyxtQkFBZ0IsTUFBTU8sT0FBTSxHQUNqQztBQUVSO0FBR08sSUFBTSwyQkFBZ0YsQ0FBQ1osSUFBR0MsSUFBRyxLQUFLLFFBQ3JHLFNBQVMsUUFBUUQsSUFBR0MsRUFBQzs7O0FDelN6QixJQUFNLHVCQUF1QjtBQU10QixTQUFTLFFBQVE7QUFBQSxFQUNwQixjQUFjO0FBQUEsRUFDZCxNQUFNO0FBQUEsRUFDTjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxNQUFBWTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FBb0M7QUEvQ3BDO0FBZ0RJLFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSSxtQkFBbUIsb0NBQWUsTUFBTSxVQUFVLFlBQVk7QUFDdEYsU0FDSSxnQkFBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLDBCQUF1QixrQ0FBTSxNQUFNLDBCQUFaLG1CQUFvQztBQUFBLE1BQzNELGlCQUFjLGtDQUFNLE1BQU0sMEJBQVosbUJBQW9DO0FBQUEsTUFDbEQscUJBQW1CLE9BQU8sTUFBTTtBQUFBLE1BQ2hDLFdBQVcsZUFBZSxZQUFZLFdBQVcsY0FBYyxtQkFBbUIsTUFBUztBQUFBLE1BRTNGO0FBQUEsd0JBQUFBLEdBQUMsU0FBSSxXQUFVLGlCQUFnQixTQUFTLE1BQU0sZUFBZSxRQUFRLENBQUMsSUFBSSxHQUNyRTtBQUFBLFVBQUFELFNBQVEsZ0JBQUFDLEdBQUMsU0FBSSxXQUFVLGdCQUFnQixVQUFBRCxPQUFLO0FBQUEsVUFDN0MsZ0JBQUFDLEdBQUMsU0FBSSxXQUFVLHVCQUF1QixpQkFBTTtBQUFBLFVBQzNDLGVBQ0csZ0JBQUFBLEdBQUMsU0FBSSxXQUFXLGVBQWUsZ0JBQWdCLENBQUMsT0FBTyxpQkFBaUIsTUFBUyxHQUM3RSwwQkFBQUE7QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNHLE9BQU07QUFBQSxjQUNOLE9BQU07QUFBQSxjQUNOLFFBQU87QUFBQSxjQUNQLFNBQVE7QUFBQSxjQUNSLE1BQUs7QUFBQSxjQUNMLFFBQU87QUFBQSxjQUNQLGdCQUFhO0FBQUEsY0FDYixrQkFBZTtBQUFBLGNBQ2YsbUJBQWdCO0FBQUEsY0FDaEIsT0FBTTtBQUFBLGNBRU4sMEJBQUFBLEdBQUMsVUFBSyxHQUFFLGdCQUFlO0FBQUE7QUFBQSxVQUMzQixHQUNKO0FBQUEsV0FFUjtBQUFBLFFBQ0MsUUFBUSxnQkFBQUEsR0FBQyxTQUFJLFdBQVUsbUJBQW1CLFVBQVM7QUFBQTtBQUFBO0FBQUEsRUFDeEQ7QUFFUjs7O0FDOUNPLFNBQVMsS0FBUSxPQUFxQjtBQUN6QyxRQUFNLFlBQVlDLEdBQVEsTUFBTTtBQUM1QixRQUFJLE9BQU8sTUFBTSxVQUFVLFlBQVk7QUFDbkMsYUFBTyxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDbEMsT0FBTztBQUNILGFBQU8sTUFBTTtBQUFBLElBQ2pCO0FBQUEsRUFDSixHQUFHLENBQUMsTUFBTSxPQUFPLE1BQU0sS0FBSyxDQUFDO0FBRTdCLFFBQU0sZUFBZUEsR0FBUSxNQUFNO0FBQy9CLFFBQUksT0FBTyxNQUFNLFlBQVk7QUFBWSxhQUFPLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFBQTtBQUNwRSxhQUFPLE1BQU07QUFBQSxFQUN0QixHQUFHLENBQUMsTUFBTSxPQUFPLE1BQU0sT0FBTyxDQUFDO0FBRS9CLFFBQU0sZ0JBQWdCQSxHQUFRLE1BQU07QUFDaEMsUUFBSSxNQUFNLFdBQVcsUUFBVztBQUM1QixVQUFJLE9BQU8sTUFBTSxXQUFXLFlBQVk7QUFDcEMsZUFBTyxNQUFNLE9BQU8sTUFBTSxLQUFLO0FBQUEsTUFDbkMsT0FBTztBQUNILGVBQU8sTUFBTTtBQUFBLE1BQ2pCO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxNQUFNLFFBQVEsTUFBTSxLQUFLLENBQUM7QUFFOUIsUUFBTSxlQUFlQSxHQUFRLE1BQU07QUFDL0IsUUFBSSxPQUFPLENBQUMscUJBQXFCO0FBQ2pDLFFBQUksTUFBTTtBQUFhLGFBQU8sS0FBSyxPQUFPLFVBQVU7QUFDcEQsV0FBTztBQUFBLEVBQ1gsR0FBRyxDQUFDLE1BQU0sYUFBYSxNQUFNLE9BQU8sTUFBTSxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBRS9ELFNBQ0ksZ0JBQUFDLEdBQUMsU0FBSSxXQUFVLGlCQUNYO0FBQUEsb0JBQUFBLEdBQUMsU0FBSSxXQUFXLGFBQWEsS0FBSyxHQUFHLEdBQUkscUJBQVU7QUFBQSxJQUNuRCxnQkFBQUEsR0FBQyxTQUFJLFdBQVUsdUJBQ1g7QUFBQSxzQkFBQUEsR0FBQyxTQUFJLFdBQVUseUJBQXlCLHdCQUFhO0FBQUEsTUFDckQsZ0JBQUFBLEdBQUMsU0FBSSxXQUFVLHdCQUF3Qix5QkFBYztBQUFBLE9BQ3pEO0FBQUEsS0FDSjtBQUVSOzs7QUNpRUEsSUFBTSxpQkFBTixNQUErQztBQUFBLEVBMERuQyxZQUFtQixRQUFzQixvQkFBMEMsU0FBUyxTQUFTO0FBQWxGO0FBQXNCO0FBQzdDLFNBQUssU0FBUyxPQUFPO0FBQUEsRUFDekI7QUFBQSxFQVRBLE9BQWMsS0FBUSxLQUFVLG9CQUEwQyxTQUFTLFNBQXVCO0FBQ3RHLFdBQU8sSUFBSSxNQUF3QixJQUFJLGVBQWlCLEtBQUssaUJBQWlCLEdBQUcsZUFBYyxXQUFXO0FBQUEsRUFDOUc7QUFBQSxFQVNRLE1BQVMsUUFBMkI7QUFDeEMsV0FBTyxlQUFjLEtBQUssUUFBUSxLQUFLLGlCQUFpQjtBQUFBLEVBQzVEO0FBQUEsRUFFTyxNQUFTLElBQXVEO0FBQ25FLFdBQU8sR0FBRyxJQUFJO0FBQUEsRUFDbEI7QUFBQSxFQUVPLE1BQU0sV0FBZ0Q7QUFDekQsV0FBTyxLQUFLLE1BQU0sS0FBSyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQUEsRUFDbkQ7QUFBQSxFQUVPLE9BQU8sV0FBZ0Q7QUFDMUQsV0FBTyxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQy9CO0FBQUEsRUFFTyxJQUFPQyxJQUFrQztBQUM1QyxXQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSUEsRUFBQyxDQUFDO0FBQUEsRUFDeEM7QUFBQSxFQUVPLFFBQVdBLElBQW9DO0FBQ2xELFFBQUksU0FBUyxDQUFDO0FBQ2QsYUFBU0MsU0FBUSxHQUFHQSxTQUFRLEtBQUssUUFBUUEsVUFBUztBQUM5QyxVQUFJLFFBQVFELEdBQUUsS0FBSyxPQUFPQyxNQUFLLEdBQUdBLFFBQU8sS0FBSyxNQUFNO0FBQ3BELFVBQUksQ0FBQyxTQUFTLE1BQU0sVUFBVTtBQUFHO0FBRWpDLGVBQVNDLE1BQUs7QUFBTyxlQUFPLEtBQUtBLEVBQUM7QUFBQSxJQUN0QztBQUVBLFdBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUM1QjtBQUFBLEVBRU8sT0FBT0YsSUFBcUM7QUFDL0MsYUFBU0MsU0FBUSxHQUFHQSxTQUFRLEtBQUssT0FBTyxRQUFRQSxVQUFTO0FBQ3JELE1BQUFELEdBQUUsS0FBSyxPQUFPQyxNQUFLLEdBQUdBLFFBQU8sS0FBSyxNQUFNO0FBQUEsSUFDNUM7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRU8sTUFBTSxPQUE2QjtBQUN0QyxXQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQ2pEO0FBQUEsRUFFTyxNQUFNLE9BQWdCRSxNQUE0QjtBQUNyRCxXQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sTUFBTSxPQUFPQSxJQUFHLENBQUM7QUFBQSxFQUNuRDtBQUFBLEVBRU8sT0FBTyxPQUFtQztBQUM3QyxXQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sT0FBTyxNQUFNLE1BQU0sQ0FBQztBQUFBLEVBQ3REO0FBQUE7QUFBQSxFQUdPLFFBQVEsU0FBWSxXQUE0QjtBQUNuRCxXQUFPLEtBQUssVUFBVSxDQUFDQyxPQUFNLEtBQUssa0JBQWtCQSxJQUFHLE9BQU8sS0FBSyxHQUFHLFNBQVM7QUFBQSxFQUNuRjtBQUFBO0FBQUEsRUFHTyxLQUFLLE1BQTRDO0FBQ3BELFFBQUlILFNBQVEsS0FBSyxVQUFVLElBQUk7QUFDL0IsUUFBSUEsVUFBUztBQUFJLGFBQU87QUFBQTtBQUNuQixhQUFPLEtBQUssT0FBT0EsTUFBSztBQUFBLEVBQ2pDO0FBQUEsRUFFTyxVQUFVLE1BQTZCLFdBQTRCO0FBQ3RFLGFBQVNBLFNBQVEsZ0NBQWEsR0FBR0EsU0FBUSxLQUFLLFFBQVFBLFVBQVM7QUFDM0QsVUFBSSxLQUFLLEtBQUssT0FBT0EsTUFBSyxHQUFHQSxRQUFPLEtBQUssTUFBTTtBQUFHLGVBQU9BO0FBQUEsSUFDN0Q7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRU8sU0FBUyxTQUFxQjtBQUNqQyxXQUFPLEtBQUssUUFBUSxTQUFTLENBQUMsS0FBSztBQUFBLEVBQ3ZDO0FBQUEsRUFFTyxLQUFLLEtBQXNCO0FBQzlCLFdBQU8sS0FBSyxJQUFJLENBQUNJLE9BQU0sU0FBUyxTQUFTQSxFQUFDLENBQUMsRUFDdEMsTUFBTSxFQUNOLEtBQUssb0JBQU8sSUFBSTtBQUFBLEVBQ3pCO0FBQUEsRUFFTyxLQUFRLEtBQXVCLFdBQTRCLFlBQStDO0FBQzdHLFFBQUksS0FBSyxPQUFPLFVBQVU7QUFBRyxhQUFPO0FBQ3BDLFFBQUksaUJBQWlCLGtDQUFjLEtBQUs7QUFDeEMsUUFBSSxVQUFVLG9CQUFRLENBQUNDLE9BQVNBO0FBR2hDLFFBQUlDLFFBQVEsQ0FBQyxFQUFZLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTU4sV0FBVTtBQUMvRCxhQUFPLEVBQUUsT0FBT0EsUUFBTyxPQUFPLEtBQUs7QUFBQSxJQUN2QyxDQUFDO0FBQ0QsSUFBQU0sTUFBSyxLQUFLLENBQUNDLElBQUdDLE9BQU07QUFDaEIsVUFBSSxPQUFPLFFBQVFELEdBQUUsT0FBT0EsR0FBRSxPQUFPLEtBQUssTUFBTTtBQUNoRCxVQUFJLE9BQU8sUUFBUUMsR0FBRSxPQUFPQSxHQUFFLE9BQU8sS0FBSyxNQUFNO0FBQ2hELGFBQU8sY0FBYyxTQUFTLENBQUMsZUFBZSxNQUFNLElBQUksSUFBSSxlQUFlLE1BQU0sSUFBSTtBQUFBLElBQ3pGLENBQUM7QUFFRCxXQUFPLEtBQUssTUFBTUYsTUFBSyxJQUFJLENBQUNILE9BQU1BLEdBQUUsS0FBSyxDQUFDO0FBQUEsRUFDOUM7QUFBQSxFQUVPLFlBQ0gsS0FDQSxXQUNBLFlBQ1k7QUFDWixRQUFJLEtBQUssT0FBTyxVQUFVO0FBQUcsYUFBTztBQUNwQyxRQUFJLGlCQUFpQixrQ0FBYyxLQUFLO0FBQ3hDLFFBQUksVUFBVSxvQkFBUSxDQUFDRSxPQUFTQTtBQUVoQyxTQUFLLE9BQU8sS0FBSyxDQUFDRSxJQUFHQyxPQUFNO0FBQ3ZCLFVBQUksT0FBTyxRQUFRRCxFQUFDO0FBQ3BCLFVBQUksT0FBTyxRQUFRQyxFQUFDO0FBRXBCLGFBQU8sYUFBYSxTQUFTLENBQUMsZUFBZSxNQUFNLElBQUksSUFBSSxlQUFlLE1BQU0sSUFBSTtBQUFBLElBQ3hGLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRU8sUUFBVyxLQUFzQixZQUFtRTtBQUN2RyxRQUFJLEtBQUssT0FBTyxVQUFVO0FBQUcsYUFBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBSWpELFFBQUksZUFBZSxLQUFLLEtBQUssS0FBSyxPQUFPLFVBQVU7QUFDbkQsaUJBQWEsa0NBQWMsS0FBSztBQUVoQyxRQUFJLFNBQWtDLENBQUM7QUFDdkMsUUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDakMsUUFBSSxVQUFVLElBQUksYUFBYSxDQUFDLEdBQUcsR0FBRyxhQUFhLE1BQU07QUFDekQsYUFBU1IsU0FBUSxHQUFHQSxTQUFRLGFBQWEsUUFBUUEsVUFBUztBQUN0RCxVQUFJLFNBQVMsSUFBSSxhQUFhQSxNQUFLLEdBQUdBLFFBQU8sYUFBYSxNQUFNO0FBQ2hFLFVBQUksV0FBVyxTQUFTLE1BQU0sS0FBSyxHQUFHO0FBQ2xDLGVBQU8sS0FBSyxFQUFFLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUM5QyxrQkFBVTtBQUNWLHFCQUFhLENBQUMsYUFBYUEsTUFBSyxDQUFDO0FBQUEsTUFDckMsT0FBTztBQUNILG1CQUFXLEtBQUssYUFBYUEsTUFBSyxDQUFDO0FBQUEsTUFDdkM7QUFBQSxJQUNKO0FBQ0EsV0FBTyxLQUFLLEVBQUUsS0FBSyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBRTlDLFdBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUM1QjtBQUFBLEVBRU8sUUFBVyxLQUFpQyxZQUE2RDtBQUM1RyxRQUFJLFVBQVUsV0FBVyxLQUFLLE1BQU0sR0FBRztBQUNuQyxhQUFPLEtBQUssSUFBSSxDQUFDUyxPQUFNO0FBQ25CLGVBQU87QUFBQSxVQUNILEtBQU1BLEdBQVU7QUFBQSxVQUNoQixNQUFNLFVBQVUsS0FBTUEsR0FBVSxJQUFJLEVBQUUsUUFBUSxLQUFZLFVBQWlCO0FBQUEsUUFDL0U7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMLE9BQU87QUFDSCxhQUFPLEtBQUssUUFBUSxLQUFZLFVBQVU7QUFBQSxJQUM5QztBQUFBLEVBQ0o7QUFBQSxFQUVPLFNBQVksS0FBdUIsWUFBK0M7QUFDckYsUUFBSSxLQUFLLE9BQU8sVUFBVTtBQUFHLGFBQU87QUFDcEMsUUFBSSxVQUFVLG9CQUFRLENBQUNDLE9BQU1BO0FBRzdCLFFBQUksZUFBZSxLQUFLLElBQUksQ0FBQ0EsSUFBR1YsV0FBVTtBQUN0QyxhQUFPLEVBQUUsS0FBSyxRQUFRVSxJQUFHVixRQUFPLEtBQUssTUFBTSxHQUFHLE9BQU9VLEdBQUU7QUFBQSxJQUMzRCxDQUFDLEVBQUUsS0FBSyxDQUFDQSxPQUFNQSxHQUFFLEtBQUssT0FBTyxVQUFVO0FBQ3ZDLGlCQUFhLGtDQUFjLEtBQUs7QUFFaEMsUUFBSSxTQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSztBQUN4QyxhQUFTVixTQUFRLEdBQUdBLFNBQVEsYUFBYSxRQUFRQSxVQUFTO0FBQ3RELFVBQUksV0FBVyxhQUFhQSxTQUFRLENBQUMsRUFBRSxLQUFLLGFBQWFBLE1BQUssRUFBRSxHQUFHLEtBQUssR0FBRztBQUN2RSxlQUFPLEtBQUssYUFBYUEsTUFBSyxFQUFFLEtBQUs7QUFBQSxNQUN6QztBQUFBLElBQ0o7QUFFQSxXQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFBQSxFQUVPLE1BQU1ELElBQW1DO0FBQzVDLFdBQU8sS0FBSyxPQUFPLE1BQU1BLEVBQUM7QUFBQSxFQUM5QjtBQUFBLEVBRU8sS0FBS0EsSUFBbUM7QUFDM0MsV0FBTyxLQUFLLE9BQU8sS0FBS0EsRUFBQztBQUFBLEVBQzdCO0FBQUEsRUFFTyxLQUFLQSxJQUFtQztBQUMzQyxXQUFPLEtBQUssT0FBTyxNQUFNLENBQUNVLElBQUdFLElBQUdKLE9BQU0sQ0FBQ1IsR0FBRVUsSUFBR0UsSUFBR0osRUFBQyxDQUFDO0FBQUEsRUFDckQ7QUFBQSxFQUVPLFFBQVc7QUFDZCxXQUFPLEtBQUssT0FBTyxTQUFTLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSTtBQUFBLEVBQ3JEO0FBQUEsRUFDTyxPQUFVO0FBQ2IsV0FBTyxLQUFLLE9BQU8sU0FBUyxJQUFJLEtBQUssT0FBTyxLQUFLLE9BQU8sU0FBUyxDQUFDLElBQUk7QUFBQSxFQUMxRTtBQUFBLEVBRU8sR0FBRyxLQUE2QjtBQUNuQyxRQUFJLFNBQWdCLENBQUM7QUFDckIsYUFBUyxTQUFTLEtBQUssUUFBUTtBQUMzQixVQUFJLFFBQVEsTUFBTSxHQUFHO0FBQ3JCLFVBQUksVUFBVSxVQUFhLFVBQVU7QUFBTTtBQUUzQyxVQUFJLE1BQU0sUUFBUSxLQUFLLEtBQUssVUFBVSxZQUFZLEtBQUs7QUFBRyxjQUFNLFFBQVEsQ0FBQ0UsT0FBTSxPQUFPLEtBQUtBLEVBQUMsQ0FBQztBQUFBO0FBQ3hGLGVBQU8sS0FBSyxLQUFLO0FBQUEsSUFDMUI7QUFFQSxXQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFBQSxFQUVPLEtBQUssS0FBNkI7QUFDckMsUUFBSSxTQUFnQixDQUFDO0FBQ3JCLGFBQVMsU0FBUyxLQUFLLFFBQVE7QUFDM0IsVUFBSSxRQUFRLE1BQU0sR0FBRztBQUNyQixVQUFJLFVBQVUsVUFBYSxVQUFVO0FBQU07QUFFM0MsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNyQjtBQUVBLFdBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUM1QjtBQUFBLEVBRU8sT0FBTyxLQUE2QjtBQUN2QyxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksUUFBZ0IsQ0FBQyxFQUFZLE9BQU8sS0FBSyxNQUFNO0FBRW5ELFdBQU8sTUFBTSxTQUFTLEdBQUc7QUFDckIsVUFBSUcsUUFBTyxNQUFNLElBQUk7QUFDckIsVUFBSSxRQUFRQSxNQUFLLEdBQUc7QUFFcEIsVUFBSSxVQUFVLFVBQWEsVUFBVTtBQUFNO0FBQzNDLFVBQUksTUFBTSxRQUFRLEtBQUs7QUFBRyxjQUFNLFFBQVEsQ0FBQ0gsT0FBTSxNQUFNLEtBQUtBLEVBQUMsQ0FBQztBQUFBLGVBQ25ELGlCQUFpQjtBQUFlLGNBQU0sUUFBUSxDQUFDQSxPQUFNLE1BQU0sS0FBS0EsRUFBQyxDQUFDO0FBQUE7QUFDdEUsY0FBTSxLQUFLLEtBQUs7QUFFckIsYUFBTyxLQUFLRyxLQUFJO0FBQUEsSUFDcEI7QUFFQSxXQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFBQSxFQUVPLFFBQVFiLElBQXVCO0FBQ2xDLGFBQVNDLFNBQVEsR0FBR0EsU0FBUSxLQUFLLE9BQU8sUUFBUUEsVUFBUztBQUNyRCxNQUFBRCxHQUFFLEtBQUssT0FBT0MsTUFBSyxHQUFHQSxRQUFPLEtBQUssTUFBTTtBQUFBLElBQzVDO0FBQUEsRUFDSjtBQUFBLEVBRU8sUUFBYTtBQUNoQixXQUFRLENBQUMsRUFBWSxPQUFPLEtBQUssTUFBTTtBQUFBLEVBQzNDO0FBQUEsRUFFQSxDQUFRLE9BQU8sUUFBUSxJQUFpQjtBQUNwQyxXQUFPLEtBQUssT0FBTyxPQUFPLFFBQVEsRUFBRTtBQUFBLEVBQ3hDO0FBQUEsRUFFTyxXQUFtQjtBQUN0QixXQUFPLE1BQU0sS0FBSyxPQUFPLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFDMUM7QUFDSjtBQWhVQSxJQUFNLGdCQUFOO0FBQU0sY0FDYSxrQkFBK0Isb0JBQUksSUFBSTtBQUFBLEVBQ2xEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLENBQUM7QUFyQ0MsY0F1Q2EsY0FBZ0Q7QUFBQSxFQUMzRCxLQUFLLFNBQVUsUUFBUSxNQUFNLFVBQVU7QUFDbkMsUUFBSSxPQUFPLFNBQVM7QUFBVSxhQUFRLE9BQWUsSUFBSTtBQUFBLGFBQ2hELE9BQU8sU0FBUztBQUFVLGFBQU8sT0FBTyxPQUFPLElBQUk7QUFBQSxhQUNuRCxTQUFTO0FBQWUsYUFBTyxPQUFPLE9BQU87QUFBQSxhQUM3QyxDQUFDLE1BQU0sU0FBUyxJQUFJLENBQUM7QUFBRyxhQUFPLE9BQU8sT0FBTyxTQUFTLElBQUksQ0FBQztBQUFBLGFBQzNELGVBQWMsZ0JBQWdCLElBQUksS0FBSyxTQUFTLENBQUM7QUFBRyxhQUFPLE9BQU8sS0FBSyxTQUFTLENBQUM7QUFFMUYsV0FBTyxPQUFPLEdBQUcsSUFBSTtBQUFBLEVBQ3pCO0FBQ0o7QUFvUkcsSUFBVTtBQUFBLENBQVYsQ0FBVWEsZUFBVjtBQUVJLFdBQVMsS0FBUSxLQUF1QztBQUMzRCxRQUFJLFlBQVksR0FBRztBQUFHLGFBQU87QUFDN0IsV0FBTyxjQUFjLEtBQUssR0FBRztBQUFBLEVBQ2pDO0FBSE8sRUFBQUEsV0FBUztBQU1ULFdBQVNDLE1BQVEsS0FBZ0M7QUFDcEQsUUFBSSxZQUFZLEdBQUc7QUFBRyxhQUFPO0FBRTdCLFFBQUksT0FBTyxDQUFDO0FBQ1osYUFBUyxRQUFRO0FBQUssV0FBSyxLQUFLLElBQUk7QUFDcEMsV0FBTyxjQUFjLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBTk8sRUFBQUQsV0FBUyxPQUFBQztBQVNULFdBQVMsWUFBWSxLQUFpQztBQUN6RCxXQUFPLGVBQWU7QUFBQSxFQUMxQjtBQUZPLEVBQUFELFdBQVM7QUFBQSxHQWpCSDtBQXVCakIsSUFBTSxrQkFBa0IsTUFBTTtBQUM5QixNQUFNLFVBQVUsQ0FBQyxRQUFzQjtBQUNuQyxTQUFPLGdCQUFnQixHQUFHLEtBQUssVUFBVSxZQUFZLEdBQUc7QUFDNUQ7OztBQ25lTyxJQUFVO0FBQUEsQ0FBVixDQUFVRSxZQUFWO0FBRUksV0FBU0MsUUFBTyxPQUFvQztBQUN2RCxVQUFNLFVBQVUsU0FBUyxVQUFVLEtBQUs7QUFDeEMsUUFBSSxDQUFDO0FBQVMsYUFBTztBQUVyQixZQUFRLFFBQVEsTUFBTTtBQUFBLE1BQ2xCLEtBQUs7QUFDRCxlQUFPLFFBQVE7QUFBQSxNQUNuQixLQUFLO0FBQ0QsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN4QixLQUFLO0FBQ0QsZUFBTyxrQkFBa0IsUUFBUSxPQUFPLGNBQWMscUJBQXFCO0FBQUEsTUFDL0UsS0FBSztBQUNELGVBQU8sUUFBUSxNQUFNLFNBQVM7QUFBQSxNQUNsQyxLQUFLO0FBQ0QsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN4QjtBQUNJLGVBQU87QUFBQSxJQUNmO0FBQUEsRUFDSjtBQWxCTyxFQUFBRCxRQUFTLFNBQUFDO0FBcUJULFdBQVMsUUFBUSxPQUFxQztBQUN6RCxRQUFJLE9BQU8sVUFBVTtBQUFXLGFBQU87QUFBQSxhQUM5QixPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVksTUFBTTtBQUFRLGFBQU87QUFBQSxhQUNwRSxPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVksTUFBTTtBQUFTLGFBQU87QUFBQTtBQUN6RSxhQUFPO0FBQUEsRUFDaEI7QUFMTyxFQUFBRCxRQUFTO0FBUVQsV0FBUyxPQUFPLE9BQW9DO0FBQ3ZELFFBQUksT0FBTyxVQUFVO0FBQVUsYUFBTztBQUFBLGFBQzdCLE9BQU8sVUFBVSxVQUFVO0FBQ2hDLFlBQU0sU0FBUyxXQUFXLEtBQUs7QUFDL0IsVUFBSSxDQUFDLE1BQU0sTUFBTTtBQUFHLGVBQU87QUFBQTtBQUN0QixlQUFPO0FBQUEsSUFDaEI7QUFBTyxhQUFPO0FBQUEsRUFDbEI7QUFQTyxFQUFBQSxRQUFTO0FBVVQsV0FBUyxLQUFLLE9BQXNDO0FBQ3ZELFFBQUksaUJBQWlCO0FBQVUsYUFBTztBQUFBLGFBQzdCLE9BQU8sVUFBVSxVQUFVO0FBQ2hDLFlBQU0sU0FBUyxXQUFXLFNBQVMsTUFBTSxLQUFLO0FBQzlDLFVBQUksT0FBTztBQUFRLGVBQU8sT0FBTztBQUFBO0FBQzVCLGVBQU87QUFBQSxJQUNoQjtBQUFPLGFBQU87QUFBQSxFQUNsQjtBQVBPLEVBQUFBLFFBQVM7QUFVVCxXQUFTLFNBQVMsT0FBc0M7QUFDM0QsUUFBSSxpQkFBaUI7QUFBVSxhQUFPO0FBQUEsYUFDN0IsT0FBTyxVQUFVLFVBQVU7QUFDaEMsWUFBTSxTQUFTLFdBQVcsU0FBUyxNQUFNLEtBQUs7QUFDOUMsVUFBSSxPQUFPO0FBQVEsZUFBTyxPQUFPO0FBQUE7QUFDNUIsZUFBTztBQUFBLElBQ2hCO0FBQU8sYUFBTztBQUFBLEVBQ2xCO0FBUE8sRUFBQUEsUUFBUztBQVVULFdBQVMsS0FBSyxPQUFrQztBQUNuRCxRQUFJLGlCQUFpQjtBQUFNLGFBQU87QUFBQSxhQUN6QixPQUFPLFVBQVUsVUFBVTtBQUNoQyxZQUFNLFNBQVMsV0FBVyxVQUFVLE1BQU0sS0FBSztBQUMvQyxVQUFJLE9BQU87QUFBUSxlQUFPLE9BQU87QUFBQTtBQUM1QixlQUFPO0FBQUEsSUFDaEI7QUFBTyxhQUFPO0FBQUEsRUFDbEI7QUFQTyxFQUFBQSxRQUFTO0FBVVQsV0FBU0UsT0FBTSxPQUF1QztBQUN6RCxRQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUcsYUFBTztBQUFBO0FBQzVCLGFBQU8sQ0FBQyxLQUFLO0FBQUEsRUFDdEI7QUFITyxFQUFBRixRQUFTLFFBQUFFO0FBQUEsR0F2RUg7OztBQ0RWLFNBQVMsV0FBMkI7QUFDdkMsTUFBSTtBQUNKLE1BQUk7QUFFSixRQUFNLFVBQVUsSUFBSSxRQUFRLENBQUMsS0FBSyxRQUFRO0FBQ3RDLGNBQVU7QUFDVixhQUFTO0FBQUEsRUFDYixDQUFDO0FBRUQsUUFBTUMsWUFBVztBQUNqQixFQUFBQSxVQUFTLFVBQVU7QUFDbkIsRUFBQUEsVUFBUyxTQUFTO0FBRWxCLFNBQU9BO0FBQ1g7OztBQ1FPLElBQU0sZUFBTixNQUFrQjtBQUFBLEVBMEJkLFlBQW9CLE9BQWtCO0FBQWxCO0FBRjNCO0FBQUEsU0FBTyxVQUF1QyxvQkFBSSxJQUE0QjtBQUFBLEVBRWhDO0FBQUE7QUFBQSxFQUc5QyxNQUFhLEtBQUssTUFBcUIsU0FBNEQ7QUFFL0YsVUFBTSxNQUFNLEtBQUssUUFBUSxJQUFJO0FBQzdCLFVBQU0sZ0JBQWdCLEtBQUssUUFBUSxJQUFJLEdBQUc7QUFDMUMsUUFBSSxlQUFlO0FBQ2YsVUFBSSxjQUFjLFNBQVM7QUFBVSxlQUFPLE9BQU8sUUFBUSxjQUFjLE1BQU07QUFNL0UsYUFBTyxPQUFPO0FBQUEsUUFDViw0QkFBNEIsS0FBSyxTQUFTO0FBQUE7QUFBQSxtQkFFdkMsTUFBTSxLQUFLLEtBQUssUUFBUSxPQUFPLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sTUFBTyxHQUFHLElBQUksRUFDMUIsS0FBSyxJQUFJO0FBQUEsTUFDbkI7QUFBQSxJQUNKO0FBR0EsVUFBTSxXQUFXLFNBQThCO0FBQy9DLFNBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxNQUFNLFdBQVcsU0FBUyxVQUFVLE1BQU0sSUFBSSxDQUFDO0FBRXZFLFVBQU0sU0FBUyxNQUFNLEtBQUssYUFBYSxNQUFNLE9BQU87QUFDcEQsYUFBUyxRQUFRLE1BQU07QUFFdkIsUUFBSSxPQUFPLFlBQVk7QUFDbkIsV0FBSyxRQUFRLElBQUksS0FBSyxFQUFFLE1BQU0sVUFBVSxNQUFNLEtBQUssUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUFBLElBQzdFLE9BQU87QUFDSCxXQUFLLFFBQVEsT0FBTyxHQUFHO0FBQUEsSUFDM0I7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHQSxNQUFjLGFBQWEsTUFBcUIsU0FBNEQ7QUFDeEcsVUFBTSxjQUFjLE1BQU0sS0FBSyxjQUFjLElBQUk7QUFDakQsUUFBSSxDQUFDLFlBQVk7QUFBWSxhQUFPO0FBR3BDLFVBQU0sRUFBRSxNQUFNLFNBQVMsSUFBSSxZQUFZO0FBQ3ZDLFFBQUk7QUFDSixRQUFJO0FBQ0EsY0FBUSxVQUFVLE1BQU0sUUFBUTtBQUFBLElBQ3BDLFNBQVMsT0FBUDtBQUNFLGFBQU8sT0FBTyxRQUFRLG9CQUFvQixLQUFLLFNBQVMsNEJBQTRCLGFBQWEsT0FBTztBQUFBLElBQzVHO0FBR0EsVUFBTSxlQUFlLE9BQU8sT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQVMsR0FBRyxPQUFPO0FBQ3hFLFFBQUk7QUFDQSxhQUFPLE9BQU8sUUFBUSxNQUFNLG1CQUFtQixPQUFPLFlBQVksQ0FBQztBQUFBLElBQ3ZFLFNBQVMsT0FBUDtBQUNFLGFBQU8sT0FBTyxRQUFRLDZCQUE2QixLQUFLLFNBQVMsT0FBTyxPQUFPO0FBQUEsSUFDbkY7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdRLFFBQVEsTUFBNkI7QUFDekMsUUFBSSxnQkFBZ0I7QUFBTSxhQUFPLEtBQUssYUFBYTtBQUFBO0FBQzlDLGFBQU87QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHQSxNQUFjLGNBQ1YsTUFDbUU7QUFDbkUsVUFBTSxTQUFTLEtBQUssTUFBTSxZQUFZLElBQUk7QUFDMUMsUUFBSSxDQUFDO0FBQVEsYUFBTyxPQUFPLFFBQVEsZ0RBQWdELEtBQUssU0FBUyxDQUFDO0FBRWxHLFVBQU0sUUFBUSxLQUFLLE1BQU0sTUFBTSxjQUFjLE9BQU8sS0FBTTtBQUMxRCxRQUFJLENBQUM7QUFBTyxhQUFPLE9BQU8sUUFBUSxTQUFTLE9BQU8sbUJBQW1CO0FBR3JFLFFBQUksTUFBTSxVQUFVLGtCQUFrQixLQUFLLGFBQVksaUJBQWlCO0FBQ3BFLFlBQU0sV0FBVyxhQUFZLGdCQUFnQixNQUFNLFVBQVUsa0JBQWtCLENBQUM7QUFFaEYsVUFBSTtBQUNBLGNBQU0sT0FBTyxNQUFNLEtBQUssTUFBTSxNQUFNLFdBQVcsS0FBSztBQUNwRCxlQUFPLE9BQU8sUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsTUFDNUMsU0FBUyxPQUFQO0FBQ0UsZUFBTyxPQUFPLFFBQVEsdURBQXVELEtBQUs7QUFBQSxNQUN0RjtBQUFBLElBQ0o7QUFHQSxRQUFJLGtCQUFrQixpQkFBaUI7QUFDbkMsWUFBTSxhQUFhLE9BQU8sUUFDckIsT0FBTyxDQUFDQyxPQUE4QkEsR0FBRSxVQUFVLFdBQVcsRUFDN0Q7QUFBQSxRQUFLLENBQUMsT0FDSCxHQUFHLFdBQVcsS0FBSyxDQUFDQyxjQUFhQSxVQUFTLGtCQUFrQixLQUFLLGFBQVksZ0JBQWdCO0FBQUEsTUFDakc7QUFFSixVQUFJLENBQUM7QUFDRCxlQUFPLE9BQU8sUUFBUSw0REFBNEQsS0FBSyxTQUFTLENBQUM7QUFFckcsWUFBTSxXQUNGLGFBQVksaUJBQ1IsV0FBVyxXQUFXLEtBQUssQ0FBQyxTQUFTLEtBQUssa0JBQWtCLEtBQUssYUFBWSxnQkFBZ0IsQ0FDakc7QUFDSixjQUFRLE1BQU0sS0FBSyxjQUFjLE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxJQUMzRixXQUFXLGtCQUFrQixtQkFBbUI7QUFDNUMsWUFBTSxnQkFBZ0IsT0FBTyxXQUFXO0FBQUEsUUFDcEMsQ0FBQyxTQUFTLEtBQUssa0JBQWtCLEtBQUssYUFBWTtBQUFBLE1BQ3REO0FBQ0EsVUFBSSxDQUFDO0FBQ0QsZUFBTyxPQUFPLFFBQVEsZ0NBQWdDLGlDQUFpQztBQUUzRixZQUFNLFdBQVcsYUFBWSxpQkFBaUIsYUFBYTtBQUMzRCxjQUFRLE1BQU0sS0FBSyxjQUFjLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxJQUN2RjtBQUVBLFdBQU8sT0FBTyxRQUFRLGtCQUFrQixLQUFLLFNBQVMsNkNBQTZDO0FBQUEsRUFDdkc7QUFBQTtBQUFBLEVBR0EsTUFBYyxjQUFjLE1BQWEsT0FBMkQ7QUFDaEcsUUFBSTtBQUNBLFlBQU0sTUFBTTtBQUFBLFFBQ1IsTUFBTSxLQUFLLE1BQU0sTUFBTSxXQUFXLElBQUk7QUFBQSxRQUN0QyxNQUFNLGlCQUFpQjtBQUFBLFFBQ3ZCLE1BQU0saUJBQWlCO0FBQUEsTUFDM0I7QUFFQSxVQUFJLE1BQU0sV0FBVztBQUFVLGVBQU8sT0FBTyxRQUFRLEdBQUc7QUFBQTtBQUVwRCxlQUFPLE9BQU87QUFBQSxVQUNWLElBQ0ssTUFBTSxJQUFJLEVBQ1YsSUFBSSxDQUFDQyxVQUFTQSxNQUFLLFVBQVUsQ0FBQyxFQUM5QixLQUFLLElBQUk7QUFBQSxRQUNsQjtBQUFBLElBQ1IsU0FBUyxPQUFQO0FBQ0UsYUFBTyxPQUFPLFFBQVEsbUNBQW1DLEtBQUssU0FBUyxPQUFPO0FBQUEsSUFDbEY7QUFBQSxFQUNKO0FBQ0o7QUF2S08sSUFBTSxjQUFOO0FBQUE7QUFBTSxZQUVNLG1CQUFtRDtBQUFBLEVBQzlELElBQUk7QUFBQSxFQUNKLFlBQVk7QUFBQSxFQUNaLFlBQVk7QUFBQSxFQUNaLFlBQVk7QUFBQSxFQUNaLElBQUk7QUFBQSxFQUNKLFlBQVk7QUFBQSxFQUNaLEtBQUs7QUFBQSxFQUNMLGFBQWE7QUFBQSxFQUNiLEtBQUs7QUFBQSxFQUNMLGFBQWE7QUFDakI7QUFBQTtBQWJTLFlBZ0JNLGtCQUFrRDtBQUFBLEVBQzdELEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLElBQUk7QUFBQSxFQUNKLElBQUk7QUFDUjs7O0FDNUNHLFNBQVMsY0FDWixPQU1GO0FBYkY7QUFjSSxRQUFNLEVBQUUsT0FBTyxpQkFBaUIsT0FBTyxVQUFVLEdBQUcsS0FBSyxJQUFJO0FBQzdELFNBQ0ksZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDSSxHQUFHO0FBQUEsTUFDSixVQUFVO0FBQUEsTUFDVixpQkFBaUIsb0NBQU8sVUFBUCxZQUFnQjtBQUFBLE1BQ2pDLGVBQWU7QUFBQSxRQUFZO0FBQUEsUUFBTyxDQUFDQyxPQUMvQixTQUFTLEVBQUUsTUFBTSxtQkFBbUIsVUFBVSxFQUFFLEdBQUcsT0FBTyxPQUFPQSxHQUFFLEVBQUUsQ0FBQztBQUFBLE1BQzFFO0FBQUEsTUFDQSxTQUFTO0FBQUE7QUFBQSxFQUNiO0FBRVI7QUFFTyxTQUFTLGtCQUFrQixPQUsvQjtBQWpDSDtBQWtDSSxRQUFNLEVBQUUsT0FBTyxlQUFlLElBQUksUUFBQUMsU0FBUSxTQUFTLElBQUk7QUFDdkQsU0FDSSxnQkFBQUY7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLE9BQU8sb0NBQU8sVUFBUCxZQUFnQjtBQUFBLE1BQ3ZCLFFBQVFFO0FBQUEsTUFDUjtBQUFBO0FBQUEsRUFDSjtBQUVSO0FBRU8sU0FBUyw0QkFBNEIsT0FJekM7QUFDQyxRQUFNLEVBQUUsTUFBQUMsT0FBTSxRQUFBRCxTQUFRLFNBQVMsSUFBSTtBQUNuQyxRQUFNLENBQUMsV0FBVyxPQUFPLElBQUlFLEdBQVNELEtBQUk7QUFDMUMsUUFBTSxVQUFVLE9BQU9FLE9BQXFCO0FBQ3hDLFlBQVNBLEdBQUUsY0FBbUMsS0FBSztBQUVuRCxRQUFJLE1BQU0sUUFBUTtBQUNkLFVBQUlBLEdBQUUsUUFBUSxTQUFTO0FBQ25CLFFBQUFBLEdBQUUsZUFBZTtBQUNqQixjQUFNLGFBQWEsV0FBVyxRQUFRLEVBQUU7QUFBQSxNQUM1QztBQUFBLElBQ0osT0FBTztBQUNILFVBQUlBLEdBQUUsUUFBUSxXQUFXQSxHQUFFLFNBQVM7QUFDaEMsUUFBQUEsR0FBRSxlQUFlO0FBQ2pCLGNBQU0sYUFBYSxXQUFXLFFBQVEsRUFBRTtBQUFBLE1BQzVDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxTQUFPLGdCQUFBTCxHQUFDLDRCQUF5QixNQUFNRyxPQUFNLFFBQVFELFNBQVEsVUFBb0IsU0FBa0I7QUFDdkc7QUFFTyxTQUFTLFlBQ1osT0FTRjtBQS9FRjtBQWdGSSxRQUFNLEVBQUUsT0FBTyxVQUFVLGVBQWUsR0FBRyxLQUFBSSxNQUFLLEtBQUFDLE1BQUssTUFBTSxHQUFHLEtBQUssSUFBSTtBQUN2RSxRQUFNLFNBQVMsb0NBQU8sVUFBUCxZQUFnQjtBQUMvQixTQUNJLGdCQUFBUDtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0ksR0FBRztBQUFBLE1BQ0osVUFBVTtBQUFBLE1BQ1YsY0FBYztBQUFBLE1BQ2QsS0FBS007QUFBQSxNQUNMLEtBQUtDO0FBQUEsTUFDTDtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsZUFBZTtBQUFBLFFBQVk7QUFBQSxRQUFPLENBQUNOLE9BQy9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLEVBQUUsR0FBRyxPQUFPLE9BQU9BLEdBQUUsRUFBRSxDQUFDO0FBQUEsTUFDMUU7QUFBQTtBQUFBLEVBQ0o7QUFFUjtBQUVPLFNBQVMsWUFDWixPQU9GO0FBMUdGO0FBMkdJLFFBQU0sRUFBRSxPQUFPLFVBQVUsZUFBZSxPQUFPLEdBQUcsS0FBSyxJQUFJO0FBQzNELFNBQ0ksZ0JBQUFEO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDSSxHQUFHO0FBQUEsTUFDSixnQkFBZ0I7QUFBQSxRQUFZO0FBQUEsUUFBTyxDQUFDQyxPQUNoQyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsVUFBVSxFQUFFLEdBQUcsT0FBTyxPQUFPQSxHQUFFLEVBQUUsQ0FBQztBQUFBLE1BQzFFO0FBQUEsTUFDQSxpQkFBaUIsb0NBQU8sVUFBUCxZQUFnQjtBQUFBLE1BQ2pDLFNBQVM7QUFBQTtBQUFBLEVBQ2I7QUFFUjtBQUVPLFNBQVMsWUFBWTtBQUFBLEVBQ3hCLFFBQVE7QUFBQSxFQUNSLFNBQUFPO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FNRztBQUNDLFFBQU0sZ0JBQWdCO0FBQUEsSUFBWTtBQUFBLElBQU8sQ0FBQ1AsT0FDdEMsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsRUFBRSxHQUFHLE9BQU8sT0FBT0EsR0FBRSxFQUFFLENBQUM7QUFBQSxFQUMxRTtBQUNBLFFBQU1RLFlBQVdDO0FBQUEsSUFDYixDQUFDLGFBQWtCO0FBQ2YsVUFBSTtBQUNKLFVBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUN6QixxQkFBYSxTQUFTLElBQUksQ0FBQ0EsT0FBTUEsR0FBRSxLQUFLO0FBQUEsTUFDNUMsT0FBTztBQUNILHFCQUFhLFNBQVM7QUFBQSxNQUMxQjtBQUNBLG9CQUFjLFVBQVU7QUFBQSxJQUM1QjtBQUFBLElBQ0EsQ0FBQyxPQUFPLGFBQWE7QUFBQSxFQUN6QjtBQUVBLFFBQU0sV0FBV0M7QUFBQSxJQUNiLE1BQU8sTUFBTSxRQUFRLCtCQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVk7QUFBQSxJQUMxRixDQUFDLEtBQUs7QUFBQSxFQUNWO0FBQ0EsUUFBTSxTQUFTQTtBQUFBLElBQ1gsTUFDSSxRQUNNSCxTQUFRLE9BQU8sQ0FBQ0ksT0FBTSxTQUFTLFVBQVUsQ0FBQ1gsT0FBTUEsTUFBS1csR0FBRSxLQUFLLEtBQUssRUFBRSxJQUNuRUosU0FBUSxLQUFLLENBQUNJLE9BQU1BLEdBQUUsVUFBUywrQkFBTyxNQUFLO0FBQUEsSUFDckQsQ0FBQ0osVUFBUyxLQUFLO0FBQUEsRUFDbkI7QUFDQSxTQUNJLGdCQUFBUjtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csaUJBQWdCO0FBQUEsTUFDaEIsVUFBVSxDQUFDYSxPQUFNSixVQUFTSSxFQUFDO0FBQUEsTUFDM0IsVUFBUTtBQUFBLE1BQ1IsU0FBUyx3QkFBUztBQUFBLE1BQ2xCLFNBQVNMO0FBQUEsTUFDVCxrQkFBa0IsU0FBUztBQUFBLE1BQzNCLGNBQWM7QUFBQSxNQUNkLFlBQVk7QUFBQSxRQUNSLE9BQU8sTUFBTTtBQUFBLFFBQ2IsZ0JBQWdCLE1BQU07QUFBQSxRQUN0QixXQUFXLE1BQU07QUFBQSxRQUNqQixNQUFNLE1BQU07QUFBQSxRQUNaLFFBQVEsQ0FBQyxVQUFlLGtCQUFrQixNQUFNLGFBQWEsaUJBQWlCO0FBQUEsTUFDbEY7QUFBQTtBQUFBLEVBQ0o7QUFFUjs7O0FDaktPLElBQVU7QUFBQSxDQUFWLENBQVVNLGVBQVY7QUFDSSxXQUFTLG1CQUFzQixNQUF3QztBQUMxRSxXQUNJLGNBQWMsUUFDZCxXQUFXLFFBQ1gsQ0FBQyxNQUFNLFFBQVEsSUFBSSxLQUNuQixPQUFPLEtBQUssSUFBSSxFQUFFLFVBQVUsS0FDNUIsTUFBTSxRQUFRLEtBQUssUUFBUTtBQUFBLEVBRW5DO0FBUk8sRUFBQUEsV0FBUztBQVNULFdBQVMsZUFBa0JDLE9BQTJCLE1BQWUsTUFBYztBQUN0RixRQUFJLFNBQVM7QUFDYixRQUFJLENBQUM7QUFBSztBQUNWLGFBQVNDLE1BQUtELE1BQUs7QUFBVSxnQkFBVSxlQUFlQyxJQUFHLEtBQUs7QUFDOUQsV0FBTztBQUFBLEVBQ1g7QUFMTyxFQUFBRixXQUFTO0FBTVQsV0FBUyxRQUFXLFFBQWEsU0FBZ0Q7QUFDcEYsVUFBTSxTQUFTLENBQUMsT0FBK0I7QUFDM0MsYUFBTztBQUFBLFFBQ0gsT0FBTztBQUFBLFFBQ1AsVUFBVSxRQUFRLEVBQUUsRUFBRSxJQUFJLE1BQU07QUFBQSxNQUNwQztBQUFBLElBQ0o7QUFDQSxXQUFPLE9BQU8sSUFBSSxNQUFNO0FBQUEsRUFDNUI7QUFSTyxFQUFBQSxXQUFTO0FBU1QsV0FBUyxPQUFVLFFBQVcsU0FBOEM7QUFDL0UsV0FBTztBQUFBLE1BQ0gsT0FBTztBQUFBLE1BQ1AsVUFBVSxRQUFRLFFBQVEsTUFBTSxHQUFHLE9BQU87QUFBQSxJQUM5QztBQUFBLEVBQ0o7QUFMTyxFQUFBQSxXQUFTO0FBT1QsV0FBUyxXQUFjLFVBQXVCLFNBQXdEO0FBQ3pHLFVBQU0sU0FBUyxDQUFDRyxPQUFvRjtBQUNoRyxVQUFJLFVBQVUsZUFBZUEsRUFBQztBQUMxQixlQUFPLEVBQUUsS0FBS0EsR0FBRSxLQUFLLE1BQU1BLEdBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUNsRCxhQUFPO0FBQUEsUUFDSCxPQUFPQTtBQUFBLFFBQ1AsVUFBVSxRQUFRQSxFQUFDLEVBQUUsSUFBSSxNQUFNO0FBQUEsTUFDbkM7QUFBQSxJQUNKO0FBQ0EsV0FBTyxTQUFTLElBQUksTUFBTTtBQUFBLEVBQzlCO0FBVk8sRUFBQUgsV0FBUztBQVlULFdBQVMsTUFBUyxVQUFxRjtBQUMxRyxRQUFJLFVBQVUsZUFBZSxRQUFRLEdBQUc7QUFDcEMsYUFBTyxNQUFNLFNBQVMsSUFBSTtBQUFBLElBQzlCLFdBQVcsVUFBVSxXQUFXLFFBQVEsR0FBRztBQUN2QyxVQUFJLFNBQVM7QUFDYixlQUFTLFNBQVM7QUFBVSxrQkFBVSxNQUFNLE1BQU0sSUFBSTtBQUN0RCxhQUFPO0FBQUEsSUFDWCxPQUFPO0FBQ0gsYUFBTyxTQUFTLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxlQUFlLEVBQUUsR0FBRyxDQUFDO0FBQUEsSUFDakU7QUFBQSxFQUNKO0FBVk8sRUFBQUEsV0FBUztBQVloQixXQUFTLGVBQWtCLFVBQWlDLE9BQWVJLE1BQW9DO0FBQzNHLFFBQUlBLFFBQU87QUFBTyxhQUFPLENBQUM7QUFFMUIsUUFBSUMsU0FBUSxHQUNSLE9BQU87QUFDWCxXQUFPQSxTQUFRLFNBQVMsVUFBVSxPQUFPLGVBQWUsU0FBU0EsTUFBSyxDQUFDLEtBQUssT0FBTztBQUMvRSxjQUFRLGVBQWUsU0FBU0EsTUFBSyxDQUFDO0FBQ3RDLE1BQUFBO0FBQUEsSUFDSjtBQUVBLFFBQUlBLFVBQVMsU0FBUztBQUFRLGFBQU8sQ0FBQztBQUV0QyxVQUFNLFNBQWdDLENBQUM7QUFDdkMsV0FBT0EsU0FBUSxTQUFTLFVBQVUsT0FBT0QsTUFBSztBQUMxQyxZQUFNLFFBQVEsU0FBU0MsTUFBSztBQUM1QixZQUFNLFlBQVksZUFBZSxLQUFLO0FBQ3RDLFlBQU0sYUFBYSxLQUFLLElBQUksTUFBTSxLQUFLO0FBQ3ZDLFlBQU0sV0FBVyxLQUFLLElBQUksWUFBWSxNQUFNRCxJQUFHO0FBRS9DLGFBQU8sS0FBSztBQUFBLFFBQ1IsT0FBTyxNQUFNO0FBQUEsUUFDYixVQUFVLGVBQWUsTUFBTSxVQUFVLGFBQWEsTUFBTSxXQUFXLElBQUk7QUFBQSxNQUMvRSxDQUFDO0FBRUQsY0FBUTtBQUNSLE1BQUFDO0FBQUEsSUFDSjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBRU8sV0FBU0MsT0FDWixVQUNBLE9BQ0FGLE1BQzZCO0FBQzdCLFFBQUlHLFdBQVUsQ0FBQyxHQUFHLFVBQVUsTUFBTSxVQUFVLE9BQU9ILElBQUcsQ0FBQztBQUN2RCxRQUFJQyxTQUFRLEdBQ1IsT0FBTztBQUVYLGFBQVMsV0FBV0UsVUFBUztBQUN6QixVQUFJLFVBQVUsZUFBZSxPQUFPLEdBQUc7QUFDbkMsWUFBSSxZQUFZLFVBQVUsTUFBTSxRQUFRO0FBQ3hDLFlBQUksYUFBYSxLQUFLLElBQUksTUFBTSxLQUFLO0FBQ3JDLFlBQUksV0FBVyxLQUFLLElBQUksV0FBV0gsSUFBRztBQUN0QyxRQUFDRyxTQUFRRixNQUFLLEVBQXdDLE9BQU8sVUFBVTtBQUFBLFVBQ25FLFFBQVE7QUFBQSxVQUNSO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSxnQkFBUTtBQUFBLE1BQ1osT0FBTztBQUNILGdCQUFRLGVBQWUsT0FBTztBQUFBLE1BQ2xDO0FBQ0EsTUFBQUE7QUFBQSxJQUNKO0FBQ0EsV0FBT0U7QUFBQSxFQUNYO0FBMUJPLEVBQUFQLFdBQVMsUUFBQU07QUE0QlQsV0FBUyxLQUNaLE1BQ0EsYUFLMkQ7QUFDM0QsVUFBTSxpQkFBaUIsQ0FDbkJFLElBQ0FDLE9BQ1M7QUFDVCxlQUFTLFFBQVEsYUFBYTtBQUMxQixjQUFNLFlBQVksS0FBSyxVQUFVLGtCQUFrQixNQUFNLGNBQWMsSUFBSTtBQUMzRSxZQUFJLFNBQVM7QUFDYixZQUFJLFVBQVUsZUFBZUQsRUFBQyxLQUFLLFVBQVUsZUFBZUMsRUFBQyxHQUFHO0FBQzVELG1CQUFTO0FBQUEsUUFDYixXQUFXLENBQUMsVUFBVSxlQUFlRCxFQUFDLEtBQUssQ0FBQyxVQUFVLGVBQWVDLEVBQUMsR0FBRztBQUNyRSxtQkFDSSxZQUFZLEtBQUssR0FBRyxLQUFLLFlBQVlELEdBQUUsS0FBSyxHQUFHLEtBQUssWUFBWUMsR0FBRSxLQUFLLEdBQUdELEdBQUUsT0FBT0MsR0FBRSxLQUFLO0FBQUEsUUFDbEc7QUFDQSxZQUFJLFVBQVU7QUFBRyxpQkFBTztBQUFBLE1BQzVCO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLE1BQU0sQ0FDUkMsT0FDMEQ7QUFDMUQsVUFBSUM7QUFDSixVQUFJLFVBQVUsZUFBZUQsRUFBQztBQUMxQixRQUFBQyxLQUFJLEVBQUUsR0FBR0QsSUFBRyxNQUFNLEtBQUtBLEdBQUUsTUFBTSxXQUFXLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFBQTtBQUNwRCxRQUFBQyxLQUFJLEVBQUUsR0FBR0QsSUFBRyxVQUFVLEtBQUtBLEdBQUUsVUFBVSxXQUFXLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDbEUsYUFBT0M7QUFBQSxJQUNYO0FBQ0EsV0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssY0FBYztBQUFBLEVBQzVDO0FBbkNPLEVBQUFYLFdBQVM7QUFBQSxHQW5ISDtBQXlKakIsU0FBUyxTQUFZLE9BQWdDLE1BQWE7QUFDOUQsUUFBTSxNQUFNWTtBQUFBLElBQ1IsQ0FBQyxPQUFnRTtBQUM3RCxVQUFJLFVBQVUsZUFBZSxFQUFFLEdBQUc7QUFDOUIsZUFBTyxHQUFHO0FBQUEsTUFDZCxPQUFPO0FBQ0gsZUFBTyxHQUFHLEdBQUcsS0FBSztBQUFBLE1BQ3RCO0FBQUEsSUFDSjtBQUFBLElBQ0EsQ0FBQyxHQUFHLElBQUk7QUFBQSxFQUNaO0FBQ0EsU0FBTztBQUNYO0FBa0NPLFNBQVMsaUJBQW9CQyxRQUEwQixRQUErQztBQUN6RyxVQUFRLE9BQU8sTUFBTTtBQUFBLElBQ2pCLEtBQUs7QUFDRCxVQUFJLE9BQU8sYUFBYSxRQUFXO0FBQy9CLGVBQU8sRUFBRSxHQUFHQSxRQUFPLFFBQVEsT0FBVTtBQUFBLE1BQ3pDLE9BQU87QUFDSCxlQUFPO0FBQUEsVUFDSCxHQUFHQTtBQUFBLFVBQ0gsUUFBUTtBQUFBLFlBQ0o7QUFBQSxjQUNJLE1BQU07QUFBQSxjQUNOLElBQUksT0FBTztBQUFBLGNBQ1gsV0FBVyxPQUFPO0FBQUEsWUFDdEI7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKLEtBQUs7QUFDRCxZQUFNLFNBQVMsb0JBQUksSUFBcUI7QUFDeEMsVUFBSSxDQUFDQSxPQUFNO0FBQVMsZUFBTyxFQUFFLEdBQUdBLE9BQU07QUFDdEMsaUJBQVdDLE1BQUtELE9BQU0sUUFBUSxLQUFLO0FBQUcsZUFBTyxJQUFJQyxJQUFHRCxPQUFNLFFBQVEsSUFBSUMsRUFBQyxDQUFFO0FBQ3pFLGFBQU8sSUFBSUQsT0FBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLE9BQU8sUUFBUTtBQUNoRCxhQUFPLEVBQUUsR0FBR0EsUUFBTyxTQUFTLE9BQU87QUFBQSxJQUN2QyxLQUFLO0FBQ0QsYUFBTyxFQUFFLEdBQUdBLFFBQU8sU0FBUyxPQUFPLFNBQVM7QUFBQSxFQUNwRDtBQUNBLFVBQVEsS0FBSyxtREFBb0QsT0FBOEIsSUFBSTtBQUNuRyxTQUFPQTtBQUNYO0FBRU8sU0FBUyxxQkFDWk4sVUFDaUQ7QUFDakQsUUFBTSxPQUFPUSxHQUFRLE1BQU8sT0FBT1IsWUFBVyxhQUFhQSxTQUFRLElBQUlBLFVBQVUsQ0FBQyxDQUFDO0FBQ25GLFNBQU9TLEdBQVcsa0JBQW9FLElBQUk7QUFDOUY7QUFRTyxJQUFNLG1CQUFtQixFQUF1RCxJQUFJO0FBRXBGLFNBQVMsdUJBQTBCO0FBQ3RDLFNBQU87QUFDWDtBQUVPLFNBQVMsb0JBQXVCO0FBQUEsRUFDbkMsUUFBQUM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBSUc7QUFDQyxRQUFNLEVBQUUsU0FBUyxJQUFJQyxHQUFXLHFCQUF3QixDQUFDO0FBQ3pELFFBQU0sU0FBeUJILEdBQVEsTUFBTTtBQUN6QyxRQUFJLENBQUNFLFFBQU87QUFBTyxhQUFPQSxRQUFPO0FBQUEsYUFDeEIsT0FBT0EsUUFBTyxVQUFVO0FBQVksYUFBT0EsUUFBTyxNQUFNO0FBQUE7QUFDNUQsYUFBT0EsUUFBTztBQUFBLEVBQ3ZCLEdBQUcsQ0FBQ0EsUUFBTyxJQUFJQSxRQUFPLEtBQUssQ0FBQztBQUU1QixRQUFNLGNBQWM7QUFBQSxJQUNoQixDQUFDLFdBQXVCO0FBQ3BCLFVBQUksUUFBUTtBQUFXLGlCQUFTLEVBQUUsTUFBTSxlQUFlLFFBQVFBLFFBQU8sSUFBSSxXQUFXLFlBQVksQ0FBQztBQUFBLGVBQ3pGLFFBQVE7QUFBYSxpQkFBUyxFQUFFLE1BQU0sZUFBZSxRQUFRQSxRQUFPLElBQUksV0FBVyxhQUFhLENBQUM7QUFBQTtBQUNyRyxpQkFBUyxFQUFFLE1BQU0sZUFBZSxRQUFRQSxRQUFPLElBQUksV0FBVyxPQUFVLENBQUM7QUFBQSxJQUNsRjtBQUFBLElBQ0EsQ0FBQ0EsUUFBTyxFQUFFO0FBQUEsRUFDZDtBQUVBLFFBQU0sWUFBWUY7QUFBQSxJQUNkLE1BQU9FLFFBQU8sVUFBVSxZQUFZLFFBQVFBLFFBQU8sVUFBVSxZQUFZLFNBQVNBLFFBQU8sUUFBUTtBQUFBLElBQ2pHLENBQUNBLFFBQU8sS0FBSztBQUFBLEVBQ2pCO0FBQ0EsU0FDSSxnQkFBQUUsR0FBQyxRQUFHLE9BQU8sV0FBVyxXQUFVLDhCQUM1QiwwQkFBQUEsR0FBQyxTQUFJLFdBQVUsc0NBQ1Y7QUFBQSxnQkFBWSxnQkFBQUEsR0FBQyxjQUFXLFdBQVUsdUJBQXNCLFdBQVcsTUFBTSxTQUFTLGFBQWE7QUFBQSxJQUNoRyxnQkFBQUEsR0FBQyxTQUFJLFNBQVMsYUFBYSxXQUFVLCtCQUNoQyxrQkFDTDtBQUFBLEtBQ0osR0FDSjtBQUVSO0FBRU8sU0FBUyxxQkFBd0I7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxRQUFBQztBQUNKLEdBS0c7QUFDQyxRQUFNLGFBQWFGLEdBQVcsb0JBQW9CO0FBQ2xELFFBQU0sZ0JBQWdCSCxHQUFRLE1BQU07QUFDaEMsUUFBSUssV0FBQSxnQkFBQUEsUUFBUTtBQUFRLGFBQU9BLFFBQU8sT0FBTyxNQUFNLEtBQUssTUFBTSxJQUFJO0FBQUE7QUFFMUQsYUFDSSxnQkFBQUQsR0FBQyxRQUNHLDBCQUFBQSxHQUFDLE9BQUksWUFBd0IsUUFBUSxNQUFNLE9BQU8sTUFBTSxLQUFLLEdBQ2pFO0FBQUEsRUFFWixHQUFHLENBQUNDLFdBQUEsZ0JBQUFBLFFBQVEsUUFBUSxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUM7QUFDMUMsUUFBTSxhQUFhLGFBQWEsYUFBYTtBQUU3QyxTQUNJLGdCQUFBRCxHQUFDLFFBQUcsV0FBVSwrQkFDViwwQkFBQUEsR0FBQyxRQUFHLE9BQU8sRUFBRSxhQUFhLEdBQUcsUUFBUSxTQUFTLEdBQUcsU0FBUyxRQUFRLEdBQzdELHNCQUNMLEdBQ0o7QUFFUjtBQUNPLFNBQVMsa0JBQXFCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUtHO0FBQ0MsUUFBTSxFQUFFLEdBQUcsSUFBSUQsR0FBVyxxQkFBd0IsQ0FBQztBQUNuRCxRQUFNLFFBQVEsU0FBUyxFQUFFO0FBQ3pCLFFBQU0sYUFBYSxZQUFZLEtBQUssSUFBSSxVQUFVLFNBQVMsR0FBRyxLQUFLLElBQUk7QUFDdkUsTUFBSSxVQUFVLGVBQWUsT0FBTyxHQUFHO0FBQ25DLFVBQU0saUJBQWlCLFlBQVksVUFBVSxVQUFVLElBQUk7QUFDM0QsV0FDSSxnQkFBQUMsR0FBQyxLQUNHO0FBQUEsc0JBQUFBLEdBQUMsd0JBQXFCLE9BQWMsT0FBTyxTQUFTLE9BQU8sUUFBUSxRQUFRLFFBQVEsZ0JBQWdCO0FBQUEsTUFDbEcsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUNmLGdCQUFBQSxHQUFDLHFCQUFxQixPQUFPLFFBQVEsR0FBRyxTQUFrQixTQUFTLEtBQUssV0FBc0IsQ0FDakc7QUFBQSxTQUpVLE1BQU0sT0FBTyxDQUs1QjtBQUFBLEVBRVIsT0FBTztBQUNILFdBQU8sZ0JBQUFBLEdBQUMsZ0JBQWEsS0FBSyxTQUFTLFNBQWtCLE9BQU8sUUFBUSxhQUFhLEtBQVEsTUFBTSxPQUFPLENBQUc7QUFBQSxFQUM3RztBQUNKO0FBRU8sU0FBUyxxQkFBd0IsRUFBRSxLQUFLLE1BQU0sR0FBOEI7QUFDL0UsUUFBTSxFQUFFLFNBQVMsVUFBVSxHQUFHLElBQUlELEdBQVcscUJBQXdCLENBQUM7QUFDdEUsUUFBTSxPQUFPSCxHQUFRLE1BQUc7QUFoWDVCO0FBZ1grQix5QkFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQW5CLFlBQXdCO0FBQUEsS0FBTyxDQUFDLEtBQUssU0FBUyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEcsU0FDSSxnQkFBQUk7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLFNBQVMsTUFBTSxTQUFTLEVBQUUsTUFBTSxjQUFjLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQztBQUFBLE1BQ3BFLE9BQU8sRUFBRSxhQUFhLElBQUksUUFBUSxLQUFLLFVBQVU7QUFBQSxNQUVqRCwwQkFBQUEsR0FBQyxTQUFJLFdBQVcsZUFBZSxzQkFBc0IsQ0FBQyxPQUFPLGlCQUFpQixNQUFTLEdBQUcsS0FBSSxRQUMxRiwwQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLE9BQU07QUFBQSxVQUNOLE9BQU07QUFBQSxVQUNOLFFBQU87QUFBQSxVQUNQLFNBQVE7QUFBQSxVQUNSLE1BQUs7QUFBQSxVQUNMLFFBQU87QUFBQSxVQUNQLGdCQUFhO0FBQUEsVUFDYixrQkFBZTtBQUFBLFVBQ2YsbUJBQWdCO0FBQUEsVUFDaEIsV0FBVTtBQUFBLFVBRVYsMEJBQUFBLEdBQUMsVUFBSyxHQUFFLG1CQUFrQjtBQUFBO0FBQUEsTUFDOUIsR0FDSjtBQUFBO0FBQUEsRUFDSjtBQUVSO0FBRU8sU0FBUyxhQUFnQjtBQUFBLEVBQzVCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUlHO0FBQ0MsUUFBTSxFQUFFLFNBQVMsR0FBRyxJQUFJRCxHQUFXLHFCQUF3QixDQUFDO0FBQzVELFFBQU0sT0FBT0gsR0FBUSxNQUFNLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUM1RyxRQUFNLGNBQWNBLEdBQVEsTUFBTSxJQUFJLFNBQVMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDekYsU0FDSSxnQkFBQUksR0FBQyxLQUNHO0FBQUEsb0JBQUFBLEdBQUMsUUFBRyxXQUFVLHNCQUNUO0FBQUEsb0JBQWMsZ0JBQUFBLEdBQUMsd0JBQXdCLE9BQWMsS0FBSyxJQUFJLE9BQU8sSUFBSyxnQkFBQUEsR0FBQyxRQUFHO0FBQUEsTUFDOUUsUUFBUSxJQUFJLENBQUMsS0FBS0UsT0FDZixnQkFBQUYsR0FBQyxvQkFBb0IsS0FBVSxRQUFRLEtBQUssT0FBYyxTQUFTRSxNQUFLLEdBQUcsQ0FDOUU7QUFBQSxPQUNMO0FBQUEsSUFDQyxPQUNLLElBQUksU0FBUyxJQUFJLENBQUMsVUFDZCxnQkFBQUYsR0FBQyxnQkFBYSxLQUFLLE9BQU8sU0FBa0IsT0FBTyxRQUFRLEtBQVEsR0FBRyxNQUFNLEtBQUssQ0FBRyxDQUN2RixJQUNEO0FBQUEsS0FDVjtBQUVSO0FBRU8sU0FBUyxpQkFBb0I7QUFBQSxFQUNoQztBQUFBLEVBQ0EsUUFBQUY7QUFBQSxFQUNBO0FBQUEsRUFDQSxVQUFVO0FBQ2QsR0FLRztBQUNDLFFBQU0sUUFBUUYsR0FBUSxNQUFNRSxRQUFPLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU9BLFFBQU8sT0FBT0EsUUFBTyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdkcsUUFBTSxVQUFVTDtBQUFBLElBQ1osQ0FBQ1UsT0FBZTtBQUNaLE1BQUFMLFFBQU8sWUFBWUEsUUFBTyxTQUFTSyxJQUFHLElBQUksS0FBSztBQUFBLElBQ25EO0FBQUEsSUFDQSxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQUEsRUFDckI7QUFDQSxRQUFNLENBQUMsZUFBZSxRQUFRLElBQUksb0JBQWtDO0FBQUEsSUFDaEUsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUyxDQUFDQSxPQUFNTCxRQUFPLFlBQVlBLFFBQU8sU0FBU0ssSUFBRyxJQUFJLEtBQUs7QUFBQSxFQUNuRSxDQUFDO0FBQ0QsRUFBQUMsR0FBVSxNQUFNO0FBQ1osYUFBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSxDQUFDO0FBQUEsRUFDekQsR0FBRyxDQUFDLE9BQU8sT0FBTyxDQUFDO0FBQ25CLE1BQUksaUJBQWlCTixRQUFPLFNBQVNBLFFBQU8sT0FBTyxjQUFjLFNBQVMsSUFBSSxLQUFLLElBQUk7QUFDdkYsUUFBTSxhQUFhRixHQUFRLE1BQU07QUFDN0IsUUFBSSxrQkFBa0IsT0FBTyxrQkFBa0IsWUFBWSxXQUFXO0FBQ2xFLGFBQU8sT0FBTyxPQUFPLGdCQUFnQixFQUFFLE9BQU8sT0FBTyxPQUFPLGVBQWUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFBQTtBQUNoRyxhQUFPO0FBQUEsRUFDaEIsR0FBRyxDQUFDRSxRQUFPLFFBQVEsT0FBTyxjQUFjLFNBQVMsZ0JBQWdCLElBQUksT0FBTyxPQUFPLENBQUM7QUFFcEYsUUFBTSxXQUFXLGFBQWEsVUFBVTtBQUV4QyxRQUFNLFNBQVNGLEdBQVEsTUFBTTtBQUN6QixRQUFJUztBQUNKLFFBQUlQLFFBQU8sWUFBWUEsUUFBTztBQUFRLE1BQUFPLEtBQUlQLFFBQU8sT0FBTyxjQUFjLFNBQVMsSUFBSSxLQUFLO0FBQUE7QUFDbkYsTUFBQU8sS0FBSTtBQUNULFFBQUlBO0FBQUcsYUFBTyxPQUFPLE9BQU9BLElBQUcsRUFBRSxPQUFPLE9BQU8sT0FBT0EsR0FBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUM5RSxXQUFPQTtBQUFBLEVBQ1gsR0FBRyxDQUFDUCxRQUFPLFFBQVFBLFFBQU8sVUFBVSxjQUFjLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFFckUsU0FDSSxnQkFBQUU7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLE9BQU8sRUFBRSxhQUFhLFVBQVUsSUFBSSxRQUFRLEtBQUssVUFBVSxPQUFVO0FBQUEsTUFDckUsWUFBWSxNQUFNLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLENBQUMsY0FBYyxVQUFVLENBQUM7QUFBQSxNQUMxRixXQUFVO0FBQUEsTUFFVCxVQUFBRixRQUFPLFdBQ0osZ0JBQUFFO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRyxlQUFlO0FBQUEsVUFDZixRQUFRO0FBQUEsVUFDUjtBQUFBLFVBQ0EsT0FBTztBQUFBO0FBQUEsTUFDWCxJQUVBO0FBQUE7QUFBQSxFQUVSO0FBRVI7QUFFTyxTQUFTLHdCQUNaLE9BQ0Y7QUFDRSxRQUFNLFVBQVUsYUFBYSxNQUFNLFNBQVMsQ0FBQ1gsSUFBR0MsT0FBTTtBQUNsRCxRQUFJRCxHQUFFLFVBQVVDLEdBQUU7QUFBUSxhQUFPO0FBQ2pDLFdBQU9ELEdBQUUsTUFBTSxDQUFDLE9BQU9ILFdBQVUsU0FBU0ksR0FBRUosTUFBSyxDQUFDO0FBQUEsRUFDdEQsQ0FBQztBQUNELFFBQU0sZ0JBQWdCVSxHQUFRLE1BQU07QUFDaEMsUUFBSSxVQUFVLFdBQVcsTUFBTSxJQUFJO0FBQUcsYUFBTyxVQUFVLE1BQU0sTUFBTSxJQUFJO0FBQUE7QUFFbkUsYUFBTyxNQUFNLEtBQUs7QUFBQSxRQUNkLENBQUMsSUFBSSxPQUFPLEtBQUssVUFBVSxlQUFlLFVBQVUsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQUEsUUFDbkY7QUFBQSxNQUNKO0FBQUEsRUFDUixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDZixRQUFNLFdBQVdVLEdBQXVCLElBQUk7QUFDNUMsUUFBTSxTQUFTLGtCQUFrQjtBQUFBLElBQzdCLGFBQWE7QUFBQSxJQUNiLFFBQVEsTUFBTTtBQUFBLElBQ2Qsb0JBQW9CLE1BQU07QUFBQSxJQUMxQixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsRUFDZixDQUFDO0FBQ0QsUUFBTSxXQUFXLGFBQWEsTUFBTSxRQUFRLENBQUNqQixJQUFHQyxPQUFNLFNBQVMsUUFBUUQsSUFBR0MsRUFBQyxLQUFLLENBQUM7QUFDakYsUUFBTSxRQUFRTSxHQUFRLE1BQU07QUFDeEIsV0FBTyxxQ0FBVSxPQUFPLENBQUMsU0FBUztBQS9mMUM7QUFnZ0JZLFlBQU1FLFVBQVMsUUFBUSxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxFQUFFO0FBQ3RELGFBQU9BLGFBQVcsS0FBQUEsUUFBTyxhQUFQLFlBQW1CO0FBQUEsSUFDekM7QUFBQSxFQUNKLEdBQUcsQ0FBQyxTQUFTLFFBQVEsQ0FBQztBQUN0QixRQUFNLFlBQVlGLEdBQVEsTUFBTTtBQUM1QixRQUFJLENBQUMsTUFBTTtBQUFXLGFBQU87QUFDN0IsUUFBSSxNQUFNLFFBQVEsTUFBTSxTQUFTO0FBQUcsYUFBTyxNQUFNO0FBRWpELFFBQUksU0FBUyxXQUFXLE1BQU0sU0FBUztBQUFHLGFBQU8sQ0FBQyxFQUFFLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFBQTtBQUN4RSxhQUFPLENBQUMsTUFBTSxTQUFTO0FBQUEsRUFDaEMsR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3BCLFFBQU0sVUFBVUEsR0FBUSxNQUFNO0FBQzFCLFFBQUksQ0FBQyxVQUFVLFdBQVcsTUFBTSxJQUFJO0FBQUcsYUFBTyxVQUFVLFFBQVEsTUFBTSxNQUFNLE1BQU0sYUFBYTtBQUMvRixXQUFPLFVBQVUsV0FBVyxNQUFNLE1BQU0sTUFBTSxhQUFhO0FBQUEsRUFDL0QsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ2YsUUFBTSxPQUFPQSxHQUFRLE1BQU07QUFDdkIsUUFBSSxTQUFTLFVBQWEsTUFBTSxVQUFVO0FBQUcsYUFBTztBQUNwRCxVQUFNLGNBQWMsTUFBTSxJQUFJLENBQUNILE9BQU07QUFqaEI3QztBQWtoQlksWUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDSSxPQUFNQSxHQUFFLE1BQU1KLEdBQUUsRUFBRTtBQUM1QyxZQUFNLFFBQU8sZ0NBQUssZUFBTCxZQUFtQjtBQUNoQyxhQUFPO0FBQUEsUUFDSCxJQUFJO0FBQUEsUUFDSixXQUFXQSxHQUFFO0FBQUEsUUFDYixhQUFhLElBQUk7QUFBQSxNQUNyQjtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU8sVUFBVSxLQUFpQixTQUFTLFdBQVc7QUFBQSxFQUMxRCxHQUFHLENBQUMsU0FBUyxLQUFLLENBQUM7QUFFbkIsUUFBTSxZQUFZRyxHQUFRLE1BQU07QUFDNUIsUUFBSSxPQUFPO0FBQ1AsYUFBTyxVQUFVLE1BQU0sTUFBTSxPQUFPLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNuRyxXQUFPO0FBQUEsRUFDWCxHQUFHLENBQUMsT0FBTyxNQUFNLE9BQU8sVUFBVSxPQUFPLFNBQVMsTUFBTSxNQUFNLElBQUksQ0FBQztBQUVuRSxRQUFNLFFBQVEsU0FBUyxNQUFNLElBQUksU0FBUztBQUMxQyxRQUFNVyxXQUFVLHFCQUF3QjtBQUN4QyxTQUNJLGdCQUFBUCxHQUFDTyxTQUFRLFVBQVIsRUFBaUIsT0FBTyxFQUFFLFNBQVMsTUFBTSxTQUFVLFVBQVUsTUFBTSxVQUFVLElBQUksTUFBTSxHQUFHLEdBQ3ZGLDBCQUFBUCxHQUFDLFNBQUksS0FBSyxVQUNOO0FBQUEsb0JBQUFBLEdBQUMsV0FBTSxXQUFVLGtCQUNiO0FBQUEsc0JBQUFBLEdBQUMsV0FDRywwQkFBQUEsR0FBQyxRQUFHLFdBQVUsNkJBQ1Y7QUFBQSx3QkFBQUEsR0FBQyxRQUFHLFdBQVUsOEJBQTZCLE9BQU0sT0FBTTtBQUFBLFFBQ3RELFFBQVEsSUFBSSxDQUFDUCxPQUFHO0FBNWlCN0M7QUE2aUJnQyxpQ0FBQU87QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNHLE9BQU0saUJBQU0sV0FBTixtQkFBYyxLQUFLLENBQUNRLE9BQU1BLEdBQUUsT0FBT2YsR0FBRSxRQUFyQyxtQkFBMEM7QUFBQSxjQUNoRCxRQUFRQTtBQUFBLGNBQ1IsV0FBVSxLQUFBQSxHQUFFLGFBQUYsWUFBYztBQUFBO0FBQUEsVUFDNUI7QUFBQSxTQUNIO0FBQUEsU0FDTCxHQUNKO0FBQUEsTUFDQSxnQkFBQU8sR0FBQyxXQUNJLG9CQUFVLElBQUksQ0FBQyxRQUNaLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csU0FBUztBQUFBLFVBQ1Q7QUFBQSxVQUNBLE9BQU87QUFBQSxVQUNQO0FBQUE7QUFBQSxRQUNLLE1BQU0sR0FBRztBQUFBLE1BQ2xCLENBQ0gsR0FDTDtBQUFBLE9BQ0o7QUFBQSxJQUNDLE9BQU8sV0FDSixnQkFBQUEsR0FBQyxtQkFBZ0IsTUFBTSxPQUFPLE1BQU0sWUFBWSxPQUFPLFlBQVksU0FBUyxPQUFPLFNBQVM7QUFBQSxLQUVwRyxHQUNKO0FBRVI7QUFFTyxTQUFTLGNBQWlCLE9BQTBCO0FBemtCM0Q7QUEwa0JJLFFBQU0sQ0FBQ04sUUFBTyxRQUFRLElBQUkscUJBQXdCO0FBQUEsSUFDOUMsU0FBUSxXQUFNLFdBQU4sWUFBZ0IsQ0FBQztBQUFBLElBQ3pCLElBQUksTUFBTSxLQUFLLE1BQU0sS0FBSyxDQUFDRCxPQUFPQSxHQUFnQjtBQUFBLEVBQ3RELENBQUM7QUFFRCxRQUFNLFdBQVdHLEdBQVEsTUFBTVUsR0FBT1osTUFBSyxHQUFHLENBQUNBLE1BQUssQ0FBQztBQUNyRCxNQUFJQSxPQUFNLFlBQVk7QUFBVyxhQUFTLFVBQVVBO0FBQUE7QUFDL0MsYUFBUyxRQUFRLFVBQVUsb0JBQUksSUFBcUI7QUFDekQsRUFBQVUsR0FBVSxNQUFNO0FBbGxCcEIsUUFBQUs7QUFtbEJRLGFBQVMsRUFBRSxNQUFNLG9CQUFvQixXQUFVQSxNQUFBLFNBQVMsUUFBUSxZQUFqQixPQUFBQSxNQUE0QixvQkFBSSxJQUFxQixFQUFFLENBQUM7QUFBQSxFQUMzRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ2IsU0FBTyxNQUFNO0FBQ2IsU0FBTyxnQkFBQVQsR0FBQywyQkFBMkIsVUFBcUIsR0FBR04sUUFBUSxHQUFHLE9BQU87QUFDakY7OztBQzNpQk8sSUFBTSxtQkFBTixNQUF1QjtBQUFBLEVBTW5CLFlBQW1CZ0IsTUFBeUIsTUFBYztBQUF2QyxlQUFBQTtBQUF5QjtBQWdFbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFPLFNBQVM7QUErRGhCO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBTyxXQUFpQkM7QUFDeEIsU0FBTyxjQUFvQkM7QUFDM0IsU0FBTyxhQUFtQkM7QUFDMUIsU0FBTyxVQUFnQkM7QUFDdkIsU0FBTyxZQUFrQkM7QUFDekIsU0FBTyxnQkFBdUI7QUFDOUIsU0FBTyxhQUFtQkM7QUFDMUIsU0FBTyxTQUFlQztBQUN0QixTQUFPLGVBQWU7QUFDdEIsU0FBTyxjQUFjO0FBK0NyQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQU8sUUFBUTtBQUVmO0FBQUEsU0FBTyxRQUFRO0FBR2Y7QUFBQSxTQUFPLFdBQVcsQ0FBQyxFQUFFLE9BQU8sWUFBWSxRQUFBQyxRQUFPLE1BQWlFO0FBOU9wSDtBQStPUSxZQUFNLHFCQUEyQkYsR0FBVyxvQkFBb0I7QUFDaEUsYUFBTyxnQkFBQUcsR0FBQyxPQUFJLE9BQWMsYUFBWSx1Q0FBYyx1QkFBZCxZQUFvQyxLQUFLLE1BQU0sUUFBUUQsU0FBUTtBQUFBLElBQ3pHLEdBQUcsS0FBSyxJQUFJO0FBR1o7QUFBQSxTQUFPLFlBQVksQ0FBQztBQUFBLE1BQ2hCO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0osTUFNTTtBQWhRVjtBQWlRUSxZQUFNLHFCQUEyQkYsR0FBVyxvQkFBb0I7QUFDaEUsYUFDSSxnQkFBQUc7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHO0FBQUEsVUFDQSxhQUFZLHVDQUFjLHVCQUFkLFlBQW9DLEtBQUs7QUFBQSxVQUNyRCxRQUFRRDtBQUFBLFVBQ1I7QUFBQSxVQUNBLEtBQUs7QUFBQTtBQUFBLE1BQ1Q7QUFBQSxJQUVSLEdBQUcsS0FBSyxJQUFJO0FBR1o7QUFBQSxTQUFPLE9BQU87QUFHZDtBQUFBLFNBQU8sYUFBYSxDQUFDO0FBQUEsTUFDakI7QUFBQSxNQUNBLFFBQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0osTUFJTTtBQXpSVjtBQTBSUSxZQUFNLFdBQWlCSixHQUFRLE1BQU8sT0FBTyxTQUFTLFdBQVcsS0FBSyxLQUFLLElBQUksSUFBSSxNQUFPLENBQUMsSUFBSSxDQUFDO0FBQ2hHLFlBQU0scUJBQTJCRSxHQUFXLG9CQUFvQjtBQUNoRSxhQUNJLGdCQUFBRztBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csTUFBTTtBQUFBLFVBQ04sUUFBUUQsV0FBQSxPQUFBQSxVQUFVO0FBQUEsVUFDbEIsYUFBWSx1Q0FBYyx1QkFBZCxZQUFvQyxLQUFLO0FBQUE7QUFBQSxNQUN6RDtBQUFBLElBRVIsR0FBRyxLQUFLLElBQUk7QUFHWjtBQUFBLFNBQU8sYUFBYSxDQUFDO0FBQUEsTUFDakI7QUFBQSxNQUNBO0FBQUEsTUFDQSxLQUFBRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZO0FBQUEsSUFDaEIsTUFPTTtBQUVGLFlBQU0sYUFBYSw0Q0FBbUIsS0FBSztBQUMzQyxZQUFNLGVBQXFCTixHQUFRLE1BQU0sS0FBSyxZQUFZLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFL0YsYUFDSSxnQkFBQUssR0FBQyxpQkFBYyxNQUFNLGNBQWMsT0FBYyxLQUFLQyxNQUFLLFNBQWtCLGFBQTBCO0FBQUEsSUFFL0csR0FBRyxLQUFLLElBQUk7QUFHWjtBQUFBLFNBQU8sT0FBTztBQU1kO0FBQUE7QUFBQTtBQUFBLFNBQU8sV0FBVztBQUNsQixTQUFPLGVBQWU7QUFDdEIsU0FBTyxZQUFZO0FBQ25CLFNBQU8sT0FBTztBQU1kO0FBQUE7QUFBQTtBQUFBLFNBQU8sU0FBUztBQUNoQixTQUFPLFVBQVU7QUFDakIsU0FBTyxVQUFVO0FBQ2pCLFNBQU8sV0FBVztBQUNsQixTQUFPLFNBQVM7QUFDaEIsU0FBTyxTQUFTO0FBQ2hCLFNBQU8sZ0JBQWdCO0FBS3ZCO0FBQUE7QUFBQTtBQUFBLFNBQU8sZ0JBQWdCO0FBQ3ZCLFNBQU8sY0FBYztBQUNyQixTQUFPLGNBQWM7QUFDckIsU0FBTyxjQUFjO0FBQ3JCLFNBQU8sWUFBWTtBQUNuQixTQUFPLGlCQUFpQjtBQTNTcEIsU0FBSyxjQUFjLElBQUksWUFBWSxLQUFLLEtBQUssU0FBUztBQUFBLEVBQzFEO0FBQUE7QUFBQSxFQUdPLGNBQXNCO0FBQ3pCLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdPLGNBQTRCO0FBQy9CLFdBQU8sS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJO0FBQUEsRUFDbEM7QUFBQTtBQUFBLEVBR0EsSUFBSSxRQUFzQjtBQUN0QixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHQSxJQUFJLFNBQXdCO0FBQ3hCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLElBQUksTUFBVztBQUNYLFdBQU8sS0FBSyxLQUFLO0FBQUEsRUFDckI7QUFBQTtBQUFBLEVBR0EsSUFBSSxPQUFpQjtBQUNqQixXQUFPLEtBQUssSUFBSTtBQUFBLEVBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXNCQSxNQUFhLFFBQVEsTUFBbUM7QUFDcEQsVUFBTSxTQUFTLE1BQU0sS0FBSyxZQUFZLEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDO0FBQzdELFdBQU8sT0FBTyxZQUFZO0FBQUEsRUFDOUI7QUFBQTtBQUFBLEVBVU8sWUFBWSxNQUFxQixZQUE2QjtBQUNqRSxXQUFPLEtBQUssSUFBSSxZQUFZLE1BQU0sa0NBQWMsS0FBSyxJQUFJO0FBQUEsRUFDN0Q7QUFBQTtBQUFBLEVBR08sY0FBYyxPQUF3RDtBQUN6RSxXQUFPLEtBQUssSUFBSSxjQUFjLEtBQUs7QUFBQSxFQUN2QztBQUFBO0FBQUEsRUFHTyxXQUFXLE9BQXdDO0FBQ3RELFdBQU8sS0FBSyxjQUFjLEtBQUssRUFBRSxZQUFZLENBQUNDLE9BQU0sNEJBQTRCQSxFQUFDO0FBQUEsRUFDckY7QUFBQTtBQUFBLEVBR08sU0FBUyxNQUFvQjtBQUNoQyxXQUFPLEtBQUssS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBLEVBR08sV0FBVyxNQUFjLFFBQXNCO0FBQ2xELFdBQU8sS0FBSyxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ25DO0FBQUE7QUFBQSxFQUdPLFVBQVUsTUFBYyxPQUFxQjtBQUNoRCxXQUFPLEtBQUssTUFBTSxNQUFNLEtBQUs7QUFBQSxFQUNqQztBQUFBO0FBQUEsRUFHTyxVQUFVLFVBQXdCO0FBQ3JDLFdBQU8sS0FBSyxJQUFJLFVBQVUsUUFBUTtBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUdPLGFBQWEsVUFBd0M7QUFDeEQsV0FBTyxLQUFLLElBQUksYUFBYSxRQUFRO0FBQUEsRUFDekM7QUFBQTtBQUFBLEVBR08sTUFBU0MsUUFBeUM7QUFDckQsV0FBTyxVQUFVLEtBQUtBLE1BQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUEsRUFJTyxZQUFZLFNBQWlCLE1BQThCO0FBQzlELGdCQUFZLEtBQUssS0FBSyxLQUFLLE1BQU0sU0FBUyxJQUFJO0FBQUEsRUFDbEQ7QUFBQTtBQUFBLEVBR08sa0JBQWtCLFdBQW9CLE1BQThCO0FBQ3ZFLGlCQUFhLFdBQVcsTUFBTSxLQUFLLElBQUksT0FBTyxLQUFLLElBQUk7QUFBQSxFQUMzRDtBQUFBO0FBQUEsRUFtQk8sU0FBZUEsUUFBMkJDLFVBQStDLE1BQW1CO0FBQy9HLFdBQWFULEdBQVEsTUFBTVMsU0FBUSxVQUFVLEtBQUtELE1BQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDQSxRQUFPLEdBQUksc0JBQVEsQ0FBQyxDQUFFLENBQUM7QUFBQSxFQUMvRjtBQUFBO0FBQUEsRUFHTyxlQUFlLFVBQWdEO0FBQ2xFLFdBQU8sZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUFBLEVBQ3pEO0FBQUE7QUFBQSxFQUdPLGVBQWUsVUFBMEM7QUFDNUQsVUFBTSxPQUFPLEtBQUssZUFBZSxRQUFRO0FBQ3pDLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdPLFFBQVEsTUFBYyxVQUF5RDtBQUNsRixXQUFPLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxRQUFRO0FBQUEsRUFDcEQ7QUFBQTtBQUFBLEVBR08sZ0JBQWdCLFVBQTBDO0FBQzdELFdBQU8sZ0JBQWdCLEtBQUssTUFBTSxRQUFRO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sYUFBYSxPQUE0QixVQUEyRDtBQUN2RyxXQUFPLGFBQWEsS0FBSyxNQUFNLEtBQUssV0FBVyxLQUFLLEdBQUcsUUFBUTtBQUFBLEVBQ25FO0FBQUE7QUFBQSxFQUdPLFNBQVMsT0FBNEIsVUFBK0M7QUFFdkYsV0FBTyxTQUFTLEtBQUssTUFBTSxLQUFLLFdBQVcsS0FBSyxHQUFHLFFBQVE7QUFBQSxFQUMvRDtBQTZISjs7O0FDalZBLHVCQUFzQjtBQVNmLElBQU0sY0FBTixNQUFrQjtBQUFBLEVBQ2QsWUFBbUIsTUFBZ0I7QUFBaEI7QUErRDFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBTyxTQUFTO0FBQUEsRUEvRDJCO0FBQUE7QUFBQSxFQUczQyxJQUFJLFFBQXNCO0FBQ3RCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLElBQUksU0FBd0I7QUFDeEIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR0EsSUFBSSxNQUFXO0FBQ1gsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxNQUFNLE1BQWdDO0FBQ3pDLFdBQU8sSUFBSSxpQkFBaUIsTUFBTSxJQUFJO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sS0FBSyxNQUErQztBQUN2RCxVQUFNLFdBQVcsZ0JBQWdCLE9BQU8sS0FBSyxPQUFPO0FBRXBELFdBQU8sS0FBSyxLQUFLLFVBQVUsS0FBSyxRQUFRO0FBQUEsRUFDNUM7QUFBQTtBQUFBLEVBR08sTUFBTSxPQUF5QztBQUNsRCxXQUFPLEtBQUssU0FBUyxLQUFLLEVBQUUsWUFBWTtBQUFBLEVBQzVDO0FBQUE7QUFBQSxFQUdPLFNBQVMsT0FBeUQ7QUFDckUsV0FBTyxLQUFLLGFBQWEsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLE9BQU8sT0FBTztBQUFBLEVBQ2xFO0FBQUE7QUFBQSxFQUdPLFVBQVUsT0FBcUQ7QUFDbEUsV0FBTyxLQUFLLGFBQWEsS0FBSyxFQUFFLFlBQVk7QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFHTyxhQUFhLE9BQXFFO0FBQ3JGLFVBQU0sY0FBYyxPQUFPLFVBQVUsV0FBVyxNQUFNLE1BQU0sU0FBUyxLQUFLLElBQUk7QUFDOUUsV0FBTyxLQUFLLEtBQUssVUFBVSxPQUFPLFdBQVc7QUFBQSxFQUNqRDtBQUFBO0FBQUEsRUFVTyxZQUFZLE1BQXFCLFlBQTZCO0FBQ2pFLFVBQU0sVUFBVSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU87QUFDbkQsUUFBSSxRQUFRLFdBQVcsR0FBRztBQUFHLGFBQU8sUUFBUSxVQUFVLENBQUM7QUFFdkQsVUFBTSxXQUFXLEtBQUssS0FBSyxjQUFjLHFCQUFxQixTQUFTLGtDQUFjLEVBQUU7QUFDdkYsUUFBSTtBQUFVLGFBQU8sU0FBUztBQUU5QixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxjQUFjLE9BQXdEO0FBQ3pFLFFBQUksRUFBRSxPQUFPLFVBQVU7QUFBVyxhQUFPLE9BQU8sUUFBUSxLQUFLO0FBRTdELFVBQU0sU0FBUyxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQ3RDLFFBQUksT0FBTztBQUFRLGFBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSztBQUFBO0FBQ2hELGFBQU8sT0FBTyxRQUFRLGlCQUFBRSxRQUFVLFlBQVksT0FBTyxNQUFNLENBQUM7QUFBQSxFQUNuRTtBQUFBO0FBQUEsRUFHTyxXQUFXLE9BQXdDO0FBQ3RELFdBQU8sS0FBSyxjQUFjLEtBQUssRUFBRSxZQUFZLENBQUNDLE9BQU0sNEJBQTRCQSxFQUFDO0FBQUEsRUFDckY7QUFBQTtBQUFBLEVBR08sU0FBUyxNQUFvQjtBQUNoQyxXQUFPLEtBQUssS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBLEVBR08sV0FBVyxNQUFjLFFBQXNCO0FBQ2xELFdBQU8sS0FBSyxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ25DO0FBQUE7QUFBQSxFQUdPLFVBQVUsTUFBYyxPQUFxQjtBQUNoRCxXQUFPLEtBQUssTUFBTSxNQUFNLEtBQUs7QUFBQSxFQUNqQztBQUFBO0FBQUEsRUFHTyxVQUFVLFVBQXdCO0FBQ3JDLFdBQU8sS0FBSyxhQUFhLFFBQVEsRUFBRSxZQUFZLENBQUNBLE9BQU0sMkJBQTJCQSxFQUFDO0FBQUEsRUFDdEY7QUFBQTtBQUFBLEVBR08sYUFBYSxVQUF3QztBQUN4RCxVQUFNLFNBQVMsV0FBVyxVQUFVLE1BQU0sUUFBUTtBQUNsRCxRQUFJLENBQUMsT0FBTztBQUFRLGFBQU8sT0FBTyxRQUFRLGlCQUFBRCxRQUFVLFlBQVksVUFBVSxNQUFNLENBQUM7QUFFakYsV0FBTyxPQUFPLFFBQVEsT0FBTyxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBR08sTUFBU0UsUUFBeUM7QUFDckQsV0FBTyxVQUFVLEtBQUtBLE1BQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBWU8sVUFDSCxRQUNBLFdBQ0EsV0FDQSxZQUNtQjtBQUNuQixXQUFPLEtBQUssa0JBQWtCLFFBQVEsV0FBVyxXQUFXLFlBQVksSUFBSTtBQUFBLEVBQ2hGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sV0FDSCxRQUNBLFdBQ0EsV0FDQSxZQUNtQjtBQUNuQixXQUFPLEtBQUssa0JBQWtCLFFBQVEsV0FBVyxXQUFXLFlBQVksS0FBSztBQUFBLEVBQ2pGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxVQUNILFFBQ0EsV0FDQSxXQUNBLFlBQ21CO0FBQ25CLFdBQU8sS0FBSyxrQkFBa0IsUUFBUSxXQUFXLFdBQVcsWUFBWSxJQUFJO0FBQUEsRUFDaEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVTyxXQUNILFFBQ0EsV0FDQSxXQUNBLFlBQ21CO0FBQ25CLFdBQU8sS0FBSyxrQkFBa0IsUUFBUSxXQUFXLFdBQVcsWUFBWSxLQUFLO0FBQUEsRUFDakY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVEsa0JBQ0osUUFDQSxXQUNBLFdBQ0EsWUFDQSxVQUNGO0FBQ0UsUUFBSSxRQUFRLElBQUksaUJBQWlCLE1BQU0sVUFBVTtBQUNqRCxVQUFNLFdBQVcsSUFBSSxtQkFBbUIsT0FBTyxXQUFXLFlBQVksUUFBUSxRQUFRO0FBQ3RGLGNBQVUsU0FBUyxRQUFRO0FBRTNCLFdBQU87QUFBQSxFQUNYO0FBQ0o7OztBQ2pPQSxJQUFBQyxtQkFBc0M7QUFHL0IsSUFBTSxlQUFOLE1BQWtCO0FBQUEsRUFDckIsWUFBbUIsT0FBYztBQUFkO0FBQUEsRUFBZTtBQUFBO0FBQUEsRUFHM0IsSUFBSUMsU0FBZ0IsUUFBaUQ7QUFDeEUsUUFBSSxTQUFTLEtBQUssTUFBTSxzQkFBc0JBLFdBQVUsR0FBRztBQUMzRCxRQUFJLENBQUMsUUFBUTtBQUNULGFBQU8sYUFBWTtBQUFBLElBQ3ZCLFdBQVcsa0JBQWtCLDBCQUFTO0FBQ2xDLGFBQU8sSUFBSSxJQUFJLEtBQUssS0FBSyxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQzVDLE9BQU87QUFDSCxVQUFJLENBQUMsVUFBVSxPQUFPQSxPQUFNLEdBQUc7QUFDM0IsZUFBTyxJQUFJLElBQUlBLE9BQU07QUFBQSxNQUN6QixPQUFPO0FBQ0gsZUFBTyxhQUFZO0FBQUEsTUFDdkI7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxTQUFTQSxTQUFnQixRQUFpRDtBQUM3RSxRQUFJLFNBQVMsS0FBSyxNQUFNLHNCQUFzQkEsV0FBVSxHQUFHO0FBQzNELFFBQUksQ0FBQyxRQUFRO0FBQ1QsYUFBTyxhQUFZO0FBQUEsSUFDdkIsV0FBVyxrQkFBa0IsMEJBQVM7QUFDbEMsWUFBTSxXQUFXLG9CQUFJLElBQVk7QUFDakMsaUJBQVcsUUFBUSxPQUFPLFVBQVU7QUFDaEMsWUFBSSxFQUFFLGdCQUFnQjtBQUFRO0FBQzlCLFlBQUksVUFBVSxDQUFDLE9BQU8sS0FBSyxJQUFJO0FBQUc7QUFFbEMsaUJBQVMsSUFBSSxLQUFLLElBQUk7QUFBQSxNQUMxQjtBQUVBLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxVQUFJLENBQUMsVUFBVSxPQUFPQSxPQUFNLEdBQUc7QUFDM0IsZUFBTyxJQUFJLElBQUlBLE9BQU07QUFBQSxNQUN6QixPQUFPO0FBQ0gsZUFBTyxhQUFZO0FBQUEsTUFDdkI7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxXQUFXLE1BQXVCO0FBQ3JDLFdBQU8sS0FBSyxNQUFNLHNCQUFzQixRQUFRLEdBQUcsS0FBSztBQUFBLEVBQzVEO0FBQUE7QUFBQSxFQUdPLGFBQWEsUUFBeUI7QUFDekMsV0FBTyxLQUFLLE1BQU0sc0JBQXNCLFVBQVUsR0FBRyxhQUFhO0FBQUEsRUFDdEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtPLGdCQUFnQixNQUFjLFFBQXlCO0FBQzFELFFBQUksQ0FBQztBQUFRLGFBQU87QUFBQSxhQUNYLEtBQUssV0FBVyxHQUFHO0FBQUcsYUFBTyxLQUFLLFVBQVUsQ0FBQztBQUV0RCxRQUFJLGVBQWUsZ0JBQWdCLE1BQU0sSUFBSSxNQUFNO0FBQ25ELFFBQUksS0FBSyxXQUFXLFlBQVk7QUFBRyxhQUFPO0FBQUE7QUFDckMsYUFBTztBQUFBLEVBQ2hCO0FBQUEsRUFFQSxDQUFTLEtBQUssUUFBaUIsUUFBdUQ7QUFDbEYsZUFBVyxRQUFRLE9BQU8sVUFBVTtBQUNoQyxVQUFJLGdCQUFnQiwwQkFBUztBQUN6QixlQUFPLEtBQUssS0FBSyxNQUFNLE1BQU07QUFBQSxNQUNqQyxXQUFXLFNBQVMsT0FBTyxLQUFLLElBQUksSUFBSSxNQUFNO0FBQzFDLGNBQU0sS0FBSztBQUFBLE1BQ2Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUlKO0FBN0VPLElBQU0sY0FBTjtBQUFBO0FBQU0sWUE0RU0sWUFBeUIsb0JBQUksSUFBSTs7O0FDL0U3QyxJQUFNLGlCQUFOLE1BQXVCO0FBQUEsRUFHbkIsY0FBYztBQUNqQixTQUFLLFdBQVcsb0JBQUksSUFBSTtBQUFBLEVBQzVCO0FBQUE7QUFBQSxFQUdPLElBQUksS0FBYSxRQUFxQjtBQUN6QyxhQUFTLFNBQVMsUUFBUTtBQUN0QixVQUFJLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSztBQUFHLGFBQUssU0FBUyxJQUFJLE9BQU8sb0JBQUksSUFBSSxDQUFDO0FBQ2pFLFdBQUssU0FBUyxJQUFJLEtBQUssRUFBRyxJQUFJLEdBQUc7QUFBQSxJQUNyQztBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR08sSUFBSSxPQUF1QjtBQWpCdEM7QUFrQlEsWUFBTyxVQUFLLFNBQVMsSUFBSSxLQUFLLE1BQXZCLFlBQTRCLGVBQWM7QUFBQSxFQUNyRDtBQUFBO0FBQUEsRUFHTyxPQUFPLEtBQWEsUUFBcUI7QUFDNUMsYUFBUyxTQUFTLFFBQVE7QUFDdEIsWUFBTUMsT0FBTSxLQUFLLFNBQVMsSUFBSSxLQUFLO0FBQ25DLFVBQUlBLE1BQUs7QUFDTCxRQUFBQSxLQUFJLE9BQU8sR0FBRztBQUFBLE1BQ2xCO0FBRUEsVUFBSUEsUUFBT0EsS0FBSSxRQUFRLEdBQUc7QUFDdEIsYUFBSyxTQUFTLE9BQU8sS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUVPLFFBQVE7QUFDWCxTQUFLLFNBQVMsTUFBTTtBQUFBLEVBQ3hCO0FBR0o7QUF2Q08sSUFBTSxnQkFBTjtBQUFNLGNBc0NNLFlBQXlCLG9CQUFJLElBQUk7OztBQ3RDcEQsSUFBcUIsWUFBckIsTUFBK0I7QUFBQSxFQUUzQixjQUFjO0FBQ1YsU0FBSyxNQUFNLENBQUM7QUFDWixTQUFLLFNBQVMsQ0FBQztBQUNmLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUEsRUFFQSxRQUFRO0FBQ0osU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQSxFQUVBLEtBQUssSUFBSSxPQUFPO0FBQ1osUUFBSSxNQUFNLEtBQUs7QUFFZixXQUFPLE1BQU0sR0FBRztBQUNaLFlBQU0sU0FBVSxNQUFNLEtBQU07QUFDNUIsWUFBTSxjQUFjLEtBQUssT0FBTyxNQUFNO0FBQ3RDLFVBQUksU0FBUztBQUFhO0FBQzFCLFdBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLE1BQU07QUFDL0IsV0FBSyxPQUFPLEdBQUcsSUFBSTtBQUNuQixZQUFNO0FBQUEsSUFDVjtBQUVBLFNBQUssSUFBSSxHQUFHLElBQUk7QUFDaEIsU0FBSyxPQUFPLEdBQUcsSUFBSTtBQUFBLEVBQ3ZCO0FBQUEsRUFFQSxNQUFNO0FBQ0YsUUFBSSxLQUFLLFdBQVc7QUFBRyxhQUFPO0FBRTlCLFVBQU0sTUFBTSxLQUFLLElBQUksQ0FBQztBQUN0QixTQUFLO0FBRUwsUUFBSSxLQUFLLFNBQVMsR0FBRztBQUNqQixZQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxNQUFNO0FBQzdDLFlBQU0sUUFBUSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxLQUFLLE1BQU07QUFDdEQsWUFBTSxhQUFhLEtBQUssVUFBVTtBQUNsQyxVQUFJLE1BQU07QUFFVixhQUFPLE1BQU0sWUFBWTtBQUNyQixZQUFJLFFBQVEsT0FBTyxLQUFLO0FBQ3hCLGNBQU0sUUFBUSxPQUFPO0FBQ3JCLFlBQUksWUFBWSxLQUFLLElBQUksSUFBSTtBQUM3QixZQUFJLFlBQVksS0FBSyxPQUFPLElBQUk7QUFDaEMsY0FBTSxhQUFhLEtBQUssT0FBTyxLQUFLO0FBRXBDLFlBQUksUUFBUSxLQUFLLFVBQVUsYUFBYSxXQUFXO0FBQy9DLGlCQUFPO0FBQ1Asc0JBQVksS0FBSyxJQUFJLEtBQUs7QUFDMUIsc0JBQVk7QUFBQSxRQUNoQjtBQUNBLFlBQUksYUFBYTtBQUFPO0FBRXhCLGFBQUssSUFBSSxHQUFHLElBQUk7QUFDaEIsYUFBSyxPQUFPLEdBQUcsSUFBSTtBQUNuQixjQUFNO0FBQUEsTUFDVjtBQUVBLFdBQUssSUFBSSxHQUFHLElBQUk7QUFDaEIsV0FBSyxPQUFPLEdBQUcsSUFBSTtBQUFBLElBQ3ZCO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLE9BQU87QUFDSCxRQUFJLEtBQUssV0FBVztBQUFHLGFBQU87QUFDOUIsV0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLEVBQ3JCO0FBQUEsRUFFQSxZQUFZO0FBQ1IsUUFBSSxLQUFLLFdBQVc7QUFBRyxhQUFPO0FBQzlCLFdBQU8sS0FBSyxPQUFPLENBQUM7QUFBQSxFQUN4QjtBQUFBLEVBRUEsU0FBUztBQUNMLFNBQUssSUFBSSxTQUFTLEtBQUssT0FBTyxTQUFTLEtBQUs7QUFBQSxFQUNoRDtBQUNKOzs7QUMvRUEsMEJBQWtCO0FBb0JYLElBQU0sdUJBQU4sTUFBaUQ7QUFBQSxFQUM3QyxZQUFtQixLQUF3QjtBQUF4QjtBQUFBLEVBQXlCO0FBQUEsRUFFNUMsSUFBSSxJQUFZLE9BQXNCO0FBQUEsRUFBQztBQUFBLEVBQ3ZDLE9BQU8sSUFBWSxPQUFzQjtBQUFBLEVBQUM7QUFBQSxFQUUxQyxPQUFPLE9BQXlDO0FBQ25ELFdBQU87QUFBQSxFQUNYO0FBQ0o7QUFHTyxJQUFNLGVBQU4sTUFBeUM7QUFBQSxFQUNyQyxZQUFtQixLQUErQixRQUFpQztBQUFoRTtBQUErQjtBQUFBLEVBQWtDO0FBQUEsRUFFcEYsSUFBSSxJQUFZLE9BQXNCO0FBQUEsRUFBQztBQUFBLEVBQ3ZDLE9BQU8sSUFBWSxPQUFzQjtBQUFBLEVBQUM7QUFBQSxFQUUxQyxPQUFPLE9BQXlDO0FBQ25ELFFBQUksQ0FBQyxTQUFTLFNBQVMsS0FBSztBQUFHLGFBQU87QUFFdEMsUUFBSSxLQUFLLE9BQU8sS0FBZSxHQUFHO0FBQzlCLGFBQU8sb0JBQUksSUFBSSxDQUFDLEtBQWUsQ0FBQztBQUFBLElBQ3BDLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFDSjtBQUdPLElBQU0sZ0JBQU4sTUFBMEM7QUFBQSxFQUl0QyxjQUFjO0FBQ2pCLFNBQUssVUFBVSxvQkFBSSxJQUFJO0FBQUEsRUFDM0I7QUFBQTtBQUFBLEVBR08sSUFBSSxJQUFZLE9BQXNCO0FBQ3pDLFNBQUssUUFBUSxJQUFJLEVBQUU7QUFBQSxFQUN2QjtBQUFBO0FBQUEsRUFHTyxPQUFPLElBQVksT0FBc0I7QUFDNUMsU0FBSyxRQUFRLE9BQU8sRUFBRTtBQUFBLEVBQzFCO0FBQUE7QUFBQSxFQUdPLE1BQW1CO0FBQ3RCLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdPLE9BQU8sT0FBeUM7QUFDbkQsV0FBTztBQUFBLEVBQ1g7QUFDSjtBQUdPLElBQU0sbUJBQU4sTUFBNEM7QUFBQSxFQU14QyxjQUFjO0FBQ2pCLFNBQUssVUFBVSxvQkFBSSxJQUFJO0FBQ3ZCLFNBQUssU0FBUyxJQUFJLG9CQUFBQyxRQUFNLENBQUMsR0FBRyxDQUFDQyxJQUFHQyxPQUFNLFNBQVMsUUFBUUQsSUFBR0MsRUFBQyxDQUFDO0FBQUEsRUFDaEU7QUFBQTtBQUFBLEVBR08sSUFBSSxJQUFZLE9BQXNCO0FBQ3pDLFNBQUssUUFBUSxJQUFJLEVBQUU7QUFFbkIsU0FBSyxPQUFPLGdCQUFnQixPQUFPLG9CQUFJLElBQUksQ0FBQztBQUM1QyxTQUFLLE9BQU8sSUFBSSxLQUFLLEVBQUcsSUFBSSxFQUFFO0FBQUEsRUFDbEM7QUFBQTtBQUFBLEVBR08sT0FBTyxJQUFZLE9BQXNCO0FBQzVDLFNBQUssUUFBUSxPQUFPLEVBQUU7QUFFdEIsVUFBTUMsT0FBTSxLQUFLLE9BQU8sSUFBSSxLQUFLO0FBQ2pDLElBQUFBLFFBQUEsZ0JBQUFBLEtBQUssT0FBTztBQUVaLFFBQUlBLFFBQU8sUUFBUUEsS0FBSSxRQUFRLEdBQUc7QUFDOUIsV0FBSyxPQUFPLE9BQU8sS0FBSztBQUFBLElBQzVCO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxNQUFtQjtBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHTyxPQUFPLE9BQXlDO0FBQ25ELFdBQU8sS0FBSyxPQUFPLElBQUksT0FBTyxpQkFBZ0IsU0FBUztBQUFBLEVBQzNEO0FBSUo7QUEzQ08sSUFBTSxrQkFBTjtBQUFBO0FBQU0sZ0JBMENNLFlBQVksb0JBQUksSUFBWTs7O0FDM0Z4QyxJQUFNLGtCQUFOLE1BQXNCO0FBQUEsRUFJekIsT0FBYyxTQUFTO0FBQ25CLFdBQU8sSUFBSSxnQkFBZ0I7QUFBQSxFQUMvQjtBQUFBLEVBRU8sY0FBYztBQUNqQixTQUFLLE1BQU0sb0JBQUksSUFBSTtBQUNuQixTQUFLLHFCQUFxQjtBQUFBLEVBQzlCO0FBQUEsRUFFTyxTQUNILE1BQ0EsSUFDQSxPQUNBLE1BQ2U7QUFDZixTQUFLLElBQUksSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUNDLElBQUdDLElBQUdDLE9BQU0sT0FBTyxRQUFRLEtBQUtGLElBQUdDLElBQUdDLEVBQUMsQ0FBQyxDQUFDO0FBQzlGLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxlQUNILE1BQ0EsSUFDQSxPQUNBLE1BQ2U7QUFDZixTQUFLLElBQUksSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUk7QUFDeEQsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVPLGFBQ0gsTUFDQSxJQUNBLE9BQ0EsTUFDZTtBQUNmLFdBQU8sS0FBSyxTQUFTLE1BQU0sSUFBSSxPQUFPLElBQUksRUFBRSxTQUFTLE9BQU8sSUFBSSxNQUFNLENBQUNGLElBQUdDLElBQUcsUUFBUSxLQUFLQSxJQUFHRCxJQUFHLEdBQUcsQ0FBQztBQUFBLEVBQ3hHO0FBQUE7QUFBQSxFQUdPLDBCQUEyQztBQUM5QyxTQUFLLHFCQUFxQjtBQUMxQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxRQUFvQyxNQUFTLFNBQTBEO0FBQzFHLFdBQU8sS0FBSyxTQUFTLE1BQU0sS0FBSyxNQUFNLENBQUNBLElBQUdDLElBQUcsUUFBUSxRQUFRRCxJQUFHQyxJQUFHLEdBQUcsSUFBSSxDQUFDLEVBQ3RFLFNBQVMsTUFBTSxNQUFNLE1BQU0sQ0FBQ0QsSUFBR0MsSUFBRyxRQUFRLFFBQVFELElBQUdDLElBQUcsR0FBRyxLQUFLLENBQUMsRUFDakUsU0FBUyxNQUFNLEtBQUssTUFBTSxDQUFDRCxJQUFHQyxJQUFHLFFBQVEsUUFBUUQsSUFBR0MsSUFBRyxHQUFHLElBQUksQ0FBQyxFQUMvRCxTQUFTLE1BQU0sTUFBTSxNQUFNLENBQUNELElBQUdDLElBQUcsUUFBUSxRQUFRRCxJQUFHQyxJQUFHLEdBQUcsS0FBSyxDQUFDLEVBQ2pFLFNBQVMsTUFBTSxLQUFLLE1BQU0sQ0FBQ0QsSUFBR0MsSUFBRyxRQUFRLFFBQVFELElBQUdDLElBQUcsR0FBRyxLQUFLLENBQUMsRUFDaEUsU0FBUyxNQUFNLE1BQU0sTUFBTSxDQUFDRCxJQUFHQyxJQUFHLFFBQVEsUUFBUUQsSUFBR0MsSUFBRyxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQzFFO0FBQUE7QUFBQSxFQUdPLFNBQVMsSUFBYyxNQUFlLE9BQWdCLEtBQXlDO0FBQ2xHLFFBQUksV0FBVyxTQUFTLE9BQU8sSUFBSTtBQUNuQyxRQUFJLFlBQVksU0FBUyxPQUFPLEtBQUs7QUFDckMsUUFBSSxDQUFDO0FBQVUsYUFBTyxPQUFPLFFBQVEsdUJBQXVCLE9BQU87QUFBQSxhQUMxRCxDQUFDO0FBQVcsYUFBTyxPQUFPLFFBQVEsdUJBQXVCLFFBQVE7QUFHMUUsUUFBSSxLQUFLLHNCQUFzQixhQUFhLFVBQVUsY0FBYztBQUFRLGFBQU8sT0FBTyxRQUFRLElBQUk7QUFFdEcsUUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLGdCQUFnQixLQUFLLElBQUksVUFBVSxTQUFTLENBQUM7QUFDeEUsUUFBSTtBQUFTLGFBQU8sUUFBUSxNQUFNLE9BQU8sR0FBRztBQUc1QyxRQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksZ0JBQWdCLEtBQUssSUFBSSxVQUFVLEdBQUcsQ0FBQztBQUNuRSxRQUFJO0FBQVUsYUFBTyxTQUFTLE1BQU0sT0FBTyxHQUFHO0FBRzlDLFFBQUksV0FBVyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ3BFLFFBQUk7QUFBVSxhQUFPLFNBQVMsTUFBTSxPQUFPLEdBQUc7QUFHOUMsUUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLGdCQUFnQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUM7QUFDOUQsUUFBSTtBQUFVLGFBQU8sU0FBUyxNQUFNLE9BQU8sR0FBRztBQUU5QyxXQUFPLE9BQU8sUUFBUSxnQ0FBZ0MsWUFBWSxNQUFNLFlBQVk7QUFBQSxFQUN4RjtBQUFBO0FBQUEsRUFHQSxPQUFjLEtBQUssSUFBYyxNQUF3QixPQUF5QjtBQUM5RSxXQUFPLEdBQUcsUUFBUSxNQUFNO0FBQUEsRUFDNUI7QUFDSjtBQUdPLFNBQVMsZ0JBQWdCLGdCQUF3RDtBQUNwRixTQUNJLGdCQUFnQixPQUFPLEVBQ2xCLFFBQVEsS0FBSyxDQUFDRCxJQUFHQyxPQUFNLFNBQVMsUUFBUUQsSUFBR0MsSUFBRyxjQUFjLENBQUMsRUFFN0QsU0FBUyxLQUFLLEtBQUssS0FBSyxDQUFDRCxJQUFHQyxPQUFNLFNBQVMsU0FBU0QsRUFBQyxLQUFLLFNBQVMsU0FBU0MsRUFBQyxDQUFDLEVBQzlFLFNBQVMsS0FBSyxLQUFLLEtBQUssQ0FBQ0QsSUFBR0MsT0FBTSxTQUFTLFNBQVNELEVBQUMsS0FBSyxTQUFTLFNBQVNDLEVBQUMsQ0FBQyxFQUU5RSxTQUFTLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU1ELEtBQUlDLEVBQUMsRUFDakQsU0FBUyxVQUFVLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxPQUFNRCxLQUFJQyxFQUFDLEVBQ2pELFNBQVMsVUFBVSxLQUFLLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTUQsS0FBSUMsRUFBQyxFQUNqRCxTQUFTLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU1ELEtBQUlDLEVBQUMsRUFDakQsU0FBUyxVQUFVLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxPQUFNRCxLQUFJQyxFQUFDLEVBRWpELFNBQVMsVUFBVSxLQUFLLEtBQUssQ0FBQ0QsSUFBR0MsSUFBRyxRQUFRRCxLQUFJLFNBQVMsU0FBU0MsSUFBRyxlQUFlLElBQUksUUFBUSxDQUFDLENBQUMsRUFDbEcsU0FBUyxLQUFLLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxJQUFHLFFBQVEsU0FBUyxTQUFTRCxJQUFHLGVBQWUsSUFBSSxRQUFRLENBQUMsSUFBSUMsRUFBQyxFQUNsRyxhQUFhLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU9BLEtBQUksSUFBSSxLQUFLRCxHQUFFLE9BQU9DLEVBQUMsQ0FBRSxFQUUxRSxTQUFTLFFBQVEsS0FBSyxRQUFRLENBQUNELElBQUdDLE9BQU07QUFDckMsV0FBTztBQUFBLE1BQ0hELEdBQUUsS0FBS0MsSUFBRyxDQUFDLFNBQVMsVUFBVSxRQUFRLFNBQVMsV0FBVyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQ3hGO0FBQUEsRUFDSixDQUFDLEVBQ0EsU0FBUyxRQUFRLEtBQUssWUFBWSxDQUFDRCxJQUFHQyxPQUFNRCxHQUFFLE1BQU1DLEVBQUMsQ0FBQyxFQUN0RCxhQUFhLFFBQVEsS0FBSyxZQUFZLENBQUNELElBQUdDLE9BQU1ELEdBQUUsS0FBS0MsRUFBQyxDQUFDLEVBRXpELFNBQVMsWUFBWSxLQUFLLFlBQVksQ0FBQ0QsSUFBR0MsT0FBTSxrQkFBa0JELEdBQUUsS0FBS0MsRUFBQyxDQUFDLENBQUMsRUFDNUUsU0FBUyxZQUFZLEtBQUssWUFBWSxDQUFDRCxJQUFHQyxPQUFNLGtCQUFrQkQsR0FBRSxNQUFNQyxFQUFDLENBQUMsQ0FBQyxFQUM3RSxTQUFTLFlBQVksS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU0sa0JBQWtCRCxHQUFFLFNBQVMsQ0FBQ0csT0FBTUEsS0FBSUYsRUFBQyxDQUFDLENBQUMsRUFDekYsYUFBYSxZQUFZLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxPQUFNLGtCQUFrQkQsR0FBRSxTQUFTLENBQUNHLE9BQU1BLEtBQUlGLEVBQUMsQ0FBQyxDQUFDLEVBRTdGLFNBQVMsU0FBUyxLQUFLLFNBQVMsQ0FBQ0QsSUFBR0MsT0FBTyxDQUFDLEVBQWdCLE9BQU9ELEVBQUMsRUFBRSxPQUFPQyxFQUFDLENBQUMsRUFFL0UsU0FBUyxVQUFVLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxPQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUdELElBQUdDLEVBQUMsQ0FBQyxFQUVuRSxTQUFTLFNBQVMsU0FBUyxVQUFVLENBQUMsS0FBSyxRQUFRO0FBQ2hELFFBQUksTUFBTSxLQUFLLE9BQU8sSUFBSTtBQUFRLGFBQU87QUFDekMsV0FBTyxJQUFJLEdBQUc7QUFBQSxFQUNsQixDQUFDLEVBQ0EsZUFBZSxTQUFTLFNBQVMsVUFBVSxDQUFDLEtBQUssS0FBSyxZQUFZO0FBQy9ELFFBQUksSUFBSSxVQUFVO0FBQUcsYUFBTyxPQUFPLFFBQVEsQ0FBQyxDQUFDO0FBRTdDLFVBQU0sU0FBUyxDQUFDO0FBQ2hCLGVBQVcsV0FBVyxLQUFLO0FBQ3ZCLFlBQU0sV0FBVyxRQUFRO0FBQUEsUUFDckIsWUFBWSxNQUFNLFlBQVksUUFBUSxPQUFPLEdBQUcsWUFBWSxRQUFRLEdBQUcsQ0FBQztBQUFBLE1BQzVFO0FBQ0EsVUFBSSxDQUFDLFNBQVM7QUFBWSxlQUFPLE9BQU8sUUFBUSxTQUFTLEtBQUs7QUFFOUQsYUFBTyxLQUFLLFNBQVMsS0FBSztBQUFBLElBQzlCO0FBRUEsV0FBTyxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQ2hDLENBQUMsRUFDQSxTQUFTLFVBQVUsU0FBUyxVQUFVLENBQUMsS0FBSyxRQUFLO0FBbkw5RDtBQW1MaUUsK0JBQWMsSUFBSSxLQUFLLEdBQUcsTUFBMUIsWUFBK0I7QUFBQSxHQUFJLEVBQ3ZGLGVBQWUsUUFBUSxTQUFTLFVBQVUsU0FBUyxFQUNuRCxlQUFlLFFBQVEsU0FBUyxVQUFVLFNBQVMsRUFDbkQsU0FBUyxVQUFVLFNBQVMsVUFBVSxDQUFDLEtBQUssUUFBSztBQXRMOUQ7QUFzTGlFLHFCQUFJLEdBQUcsTUFBUCxZQUFZO0FBQUEsR0FBSSxFQUNwRSxTQUFTLFVBQVUsU0FBUyxVQUFVLENBQUMsS0FBSyxRQUFTLE1BQU0sS0FBSyxPQUFPLElBQUksU0FBUyxPQUFPLElBQUksR0FBRyxDQUFFLEVBQ3BHLFNBQVMsUUFBUSxTQUFTLFVBQVUsU0FBUyxFQUM3QyxTQUFTLFlBQVksU0FBUyxVQUFVLGFBQWEsRUFDckQsd0JBQXdCO0FBRXJDO0FBR08sU0FBUyxlQUFlLFVBQStDO0FBQzFFLFNBQU87QUFBQSxJQUNILFlBQVksU0FBUztBQUFBLElBQ3JCLGdCQUFnQixTQUFTO0FBQUEsSUFDekIsb0JBQW9CLFNBQVM7QUFBQSxFQUNqQztBQUNKO0FBR08sU0FBUyxVQUFVLE1BQVksS0FBc0IsU0FBNkM7QUFDckcsUUFBTSxTQUFTLFFBQVEsWUFBWSxRQUFRLElBQUk7QUFDL0MsTUFBSSxDQUFDO0FBQVEsV0FBTyxPQUFPLFFBQVEsSUFBSTtBQUV2QyxTQUFPLFFBQVEsU0FBUyxZQUFZLE1BQU0sWUFBWSxRQUFRLE1BQU0sR0FBRyxZQUFZLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDcEc7QUFHTyxTQUFTLFVBQVUsTUFBZ0IsS0FBYTtBQUNuRCxVQUFRLEtBQUs7QUFBQSxJQUNULEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLO0FBQ0QsYUFBTyxLQUFLO0FBQUEsSUFDaEIsS0FBSztBQUNELGFBQU8sS0FBSztBQUFBLElBQ2hCLEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLO0FBQ0QsYUFBTyxLQUFLO0FBQUEsSUFDaEIsS0FBSztBQUNELGFBQU8sS0FBSztBQUFBLElBQ2hCLEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLO0FBQ0QsYUFBTyxLQUFLO0FBQUEsSUFDaEI7QUFDSSxhQUFPO0FBQUEsRUFDZjtBQUNKO0FBR08sU0FBUyxjQUFjLEtBQWUsS0FBYTtBQUN0RCxVQUFRLEtBQUs7QUFBQSxJQUNULEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLElBQUk7QUFBQSxJQUNmO0FBQ0ksYUFBTztBQUFBLEVBQ2Y7QUFDSjs7O0FDN05PLElBQU0sa0JBQU4sTUFBc0I7QUFBQSxFQUlsQixZQUFtQixNQUFjO0FBQWQ7QUFDdEIsU0FBSyxXQUFXLENBQUM7QUFDakIsU0FBSyxhQUFhLENBQUM7QUFBQSxFQUN2QjtBQUFBO0FBQUEsRUFHTyxPQUFPLE1BQXFDO0FBQy9DLFNBQUssU0FBUyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsU0FBUyxNQUFNLEtBQUssQ0FBQztBQUNwRCxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxLQUNILFNBQ0EsTUFDZTtBQUNmLFNBQUssU0FBUyxLQUFLO0FBQUEsTUFDZixNQUFNLENBQUMsT0FBTztBQUFBLE1BQ2QsU0FBUztBQUFBLE1BQ1QsTUFBTSxDQUFDRyxPQUFNLFNBQVMsS0FBSyxLQUFLLENBQUMsR0FBd0JBLEVBQUM7QUFBQSxJQUM5RCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sS0FDSCxNQUNBLE1BQ0EsTUFDZTtBQUNmLFNBQUssU0FBUyxLQUFLO0FBQUEsTUFDZixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsTUFDakIsU0FBUztBQUFBLE1BQ1QsTUFBTSxDQUFDQSxPQUFNLFNBQVMsS0FBSyxLQUFLLENBQUMsR0FBd0IsS0FBSyxDQUFDLEdBQXdCQSxFQUFDO0FBQUEsSUFDNUYsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLEtBQ0gsTUFDQSxNQUNBLE1BQ0EsTUFDZTtBQUNmLFNBQUssU0FBUyxLQUFLO0FBQUEsTUFDZixNQUFNLENBQUMsTUFBTSxNQUFNLElBQUk7QUFBQSxNQUN2QixTQUFTO0FBQUEsTUFDVCxNQUFNLENBQUNBLE9BQU0sU0FDVCxLQUFLLEtBQUssQ0FBQyxHQUF3QixLQUFLLENBQUMsR0FBd0IsS0FBSyxDQUFDLEdBQXdCQSxFQUFDO0FBQUEsSUFDeEcsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLFVBQVUsU0FBaUIsV0FBc0M7QUFDcEUsU0FBSyxXQUFXLE9BQU8sSUFBSTtBQUMzQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxRQUFzQjtBQUN6QixRQUFJQyxRQUFxQixDQUFDLFlBQXVCLFNBQW9CO0FBQ2pFLFVBQUksUUFBdUIsQ0FBQztBQUM1QixlQUFTLE9BQU8sTUFBTTtBQUNsQixZQUFJLFVBQVUsU0FBUyxPQUFPLEdBQUc7QUFDakMsWUFBSSxDQUFDO0FBQVMsZ0JBQU0sTUFBTSw0Q0FBNEMsTUFBTTtBQUM1RSxjQUFNLEtBQUssT0FBTztBQUFBLE1BQ3RCO0FBR0EsVUFBSSxLQUFLLFdBQVcsTUFBTSxNQUFNLEdBQUc7QUFDL0IsWUFBSSxzQkFBc0IsS0FBSyxXQUFXLE1BQU0sTUFBTSxFQUFFLE9BQU8sQ0FBQ0MsT0FBTSxNQUFNQSxFQUFDLEtBQUssT0FBTztBQUN6RixZQUFJLG9CQUFvQixTQUFTLEdBQUc7QUFDaEMsY0FBSSxZQUFZLG9CQUNYLElBQUksQ0FBQ0MsT0FBTyxLQUFLQSxFQUFDLEVBQVksTUFBTSxFQUNwQyxPQUFPLENBQUNBLElBQUdILE9BQU0sS0FBSyxJQUFJRyxJQUFHSCxFQUFDLENBQUM7QUFLcEMsY0FBSSxTQUFTLENBQUM7QUFDZCxtQkFBUyxPQUFPLEdBQUcsT0FBTyxXQUFXLFFBQVE7QUFDekMsZ0JBQUksVUFBVSxDQUFDO0FBQ2YscUJBQVNJLFNBQVEsR0FBR0EsU0FBUSxLQUFLLFFBQVFBLFVBQVM7QUFDOUMsa0JBQUksb0JBQW9CLFNBQVNBLE1BQUssR0FBRztBQUNyQyxvQkFBSSxNQUFNLEtBQUtBLE1BQUs7QUFDcEIsd0JBQVEsS0FBSyxJQUFJLElBQUksQ0FBQztBQUFBLGNBQzFCLE9BQU87QUFDSCx3QkFBUSxLQUFLLEtBQUtBLE1BQUssQ0FBQztBQUFBLGNBQzVCO0FBQUEsWUFDSjtBQUVBLG1CQUFPLEtBQUtILE1BQUssU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUFBLFVBQ3pDO0FBRUEsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBO0FBQU8saUJBQVMsV0FBVyxLQUFLLFVBQVU7QUFDdEMsY0FBSSxRQUFRO0FBQVMsbUJBQU8sUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJO0FBQ3pELGNBQUksUUFBUSxLQUFLLFVBQVUsTUFBTTtBQUFRO0FBRXpDLG1CQUFTRyxTQUFRLEdBQUdBLFNBQVEsUUFBUSxLQUFLLFFBQVFBLFVBQVM7QUFDdEQsZ0JBQUksUUFBUSxLQUFLQSxNQUFLLEtBQUssT0FBTyxRQUFRLEtBQUtBLE1BQUssS0FBSyxNQUFNQSxNQUFLO0FBQUcsdUJBQVM7QUFBQSxVQUNwRjtBQUVBLGlCQUFPLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSTtBQUFBLFFBQ3hDO0FBRUEsWUFBTSxNQUFNLHlCQUF5QixLQUFLLDhCQUE4QixNQUFNLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDOUY7QUFFQSxXQUFPSDtBQUFBLEVBQ1g7QUFDSjtBQUdPLElBQVU7QUFBQSxDQUFWLENBQVVJLGVBQVY7QUFFSSxXQUFTLEtBQUssTUFBb0IsU0FBdUM7QUFDNUUsV0FBTyxJQUFJLFNBQW9CLEtBQUssU0FBUyxHQUFHLElBQUk7QUFBQSxFQUN4RDtBQUZPLEVBQUFBLFdBQVM7QUFLVCxXQUFTLFFBQ1osT0FDQSxTQUNpQztBQUNqQyxRQUFJLFNBQTRDLENBQUM7QUFDakQsYUFBUyxDQUFDLEtBQUssSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDM0MsYUFBTyxHQUFHLElBQUlBLFdBQVUsS0FBSyxNQUFNLE9BQU87QUFBQSxJQUM5QztBQUVBLFdBQU87QUFBQSxFQUNYO0FBVk8sRUFBQUEsV0FBUztBQUFBLEdBUEg7QUF3QlYsSUFBVTtBQUFBLENBQVYsQ0FBVUMsc0JBQVY7QUFDSSxFQUFNQSxrQkFBQSxTQUFTLElBQUksZ0JBQWdCLE1BQU0sRUFDM0MsS0FBSyxTQUFTLENBQUNDLE9BQU0sT0FBTyxFQUM1QixLQUFLLFdBQVcsQ0FBQ0EsT0FBTSxTQUFTLEVBQ2hDLEtBQUssUUFBUSxDQUFDQSxPQUFNLE1BQU0sRUFDMUIsS0FBSyxZQUFZLENBQUNBLE9BQU0sVUFBVSxFQUNsQyxLQUFLLFlBQVksQ0FBQ0EsT0FBTSxVQUFVLEVBQ2xDLEtBQUssUUFBUSxDQUFDQSxPQUFNLE1BQU0sRUFDMUIsS0FBSyxRQUFRLENBQUNBLE9BQU0sTUFBTSxFQUMxQixLQUFLLFVBQVUsQ0FBQ0EsT0FBTSxRQUFRLEVBQzlCLEtBQUssVUFBVSxDQUFDQSxPQUFNLFFBQVEsRUFDOUIsS0FBSyxVQUFVLENBQUNBLE9BQU0sUUFBUSxFQUM5QixLQUFLLEtBQUssQ0FBQ0EsT0FBTSxTQUFTLEVBQzFCLE1BQU07QUFHSixFQUFNRCxrQkFBQSxTQUFTLElBQUksZ0JBQWdCLFFBQVEsRUFDN0MsS0FBSyxTQUFTLENBQUNFLE9BQU1BLEdBQUUsTUFBTSxFQUM3QixLQUFLLFVBQVUsQ0FBQ0EsT0FBTSxPQUFPLEtBQUtBLEVBQUMsRUFBRSxNQUFNLEVBQzNDLEtBQUssVUFBVSxDQUFDQSxPQUFNQSxHQUFFLE1BQU0sRUFDOUIsS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3RCLE1BQU07QUFHSixFQUFNRixrQkFBQSxPQUFxQixDQUFDLGFBQWEsU0FBUztBQUdsRCxFQUFNQSxrQkFBQSxTQUF1QixDQUFDLGFBQWEsU0FBUztBQUN2RCxRQUFJLEtBQUssU0FBUyxLQUFLO0FBQUcsWUFBTSxNQUFNLCtDQUErQztBQUNyRixRQUFJLFNBQWtDLENBQUM7QUFDdkMsYUFBU0YsU0FBUSxHQUFHQSxTQUFRLEtBQUssUUFBUUEsVUFBUyxHQUFHO0FBQ2pELFVBQUksTUFBTSxLQUFLQSxNQUFLO0FBQ3BCLFVBQUksQ0FBQyxTQUFTLFNBQVMsR0FBRztBQUFHLGNBQU0sTUFBTSw2REFBNkQ7QUFDdEcsYUFBTyxHQUFHLElBQUksS0FBS0EsU0FBUSxDQUFDO0FBQUEsSUFDaEM7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUdPLEVBQU1FLGtCQUFBLE9BQXFCLElBQUksZ0JBQWdCLE1BQU0sRUFDdkQsS0FBSyxVQUFVLENBQUNFLElBQUdSLE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVVEsRUFBQyxHQUFHLEtBQUssQ0FBQyxFQUNyRSxLQUFLLFFBQVEsQ0FBQ0EsT0FBTUEsRUFBQyxFQUNyQixLQUFLLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFDekIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEtBQUssVUFBVSxVQUFVLENBQUNDLElBQUdDLElBQUdWLE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVVMsRUFBQyxHQUFHLE9BQU9DLEVBQUMsQ0FBQyxFQUNyRixLQUFLLFVBQVUsVUFBVSxXQUFXLENBQUNELElBQUdDLElBQUdDLElBQUdYLE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVVMsRUFBQyxHQUFHRSxJQUFHRCxFQUFDLENBQUMsRUFDL0YsS0FBSyxRQUFRLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTUQsR0FBRSxZQUFZQyxFQUFDLENBQUMsRUFDakQsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLENBQUNELElBQUdHLEtBQUlaLFdBQU1NLGtCQUFBLE1BQUtOLElBQUdTLEVBQUMsQ0FBQyxFQUMxQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBR0osRUFBTUgsa0JBQUEsUUFBc0IsSUFBSSxnQkFBZ0IsT0FBTyxFQUN6RCxLQUFLLFFBQVEsQ0FBQ08sT0FBTUEsR0FBRSxRQUFRLENBQUMsRUFDL0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEtBQUssUUFBUSxXQUFXLENBQUNBLElBQUdGLElBQUdYLE9BQU9XLEtBQUlFLEdBQUUsUUFBUSxJQUFJQSxHQUFFLFVBQVUsQ0FBRSxFQUN0RSxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUdKLEVBQU1QLGtCQUFBLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTSxFQUN6QyxLQUFLLFVBQVUsQ0FBQyxRQUFRO0FBQ3JCLFFBQUksYUFBYSxXQUFXLFNBQVMsTUFBTSxHQUFHO0FBQzlDLFFBQUksV0FBVztBQUFRLGFBQU8sV0FBVztBQUFBO0FBQ3BDLGFBQU87QUFBQSxFQUNoQixDQUFDLEVBQ0EsS0FBSyxRQUFRLENBQUNJLE9BQU1BLEVBQUMsRUFDckIsS0FBSyxRQUFRLENBQUNJLE9BQU1kLE9BQU07QUF6UG5DO0FBMlBZLFFBQUljLE1BQUssU0FBUztBQUNkLFVBQUlDLGNBQWEsV0FBVyxLQUFLLE1BQU1ELE1BQUssT0FBTztBQUNuRCxVQUFJQyxZQUFXO0FBQVEsZUFBT0EsWUFBVztBQUFBLElBQzdDO0FBR0EsUUFBSSxhQUFhLFdBQVcsS0FBSyxNQUFNRCxNQUFLLElBQUk7QUFDaEQsUUFBSSxXQUFXO0FBQVEsYUFBTyxXQUFXO0FBR3pDLFFBQUksV0FBV2QsR0FBRSxZQUFZLFFBQVFjLE1BQUssSUFBSTtBQUM5QyxRQUFJLGNBQWEsMENBQWtCLFNBQWxCLG1CQUF3QixNQUFLO0FBQzFDLGNBQVEsMENBQWtCLFNBQWxCLG1CQUF3QjtBQUFBLElBQ3BDO0FBRUEsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssVUFBVSxVQUFVLENBQUNKLElBQUdNLE9BQU07QUFDaEMsUUFBSUEsT0FBTSxPQUFPQSxPQUFNLEtBQUs7QUFDeEIsVUFBSUMsU0FBUSxhQUFhLEtBQUtQLEVBQUM7QUFDL0IsVUFBSU87QUFBTyxlQUFPLFNBQVMsV0FBVyxPQUFPLFNBQVNBLE9BQU0sQ0FBQyxDQUFDLEtBQUtELE9BQU0sTUFBTSxNQUFPLEVBQUU7QUFBQSxXQUNuRjtBQUNELGNBQU0sTUFBTSwyQ0FBMkM7QUFBQSxNQUMzRDtBQUFBLElBQ0osT0FBTztBQUNILFVBQUksYUFBYSxTQUFTLFdBQVdOLElBQUdNLEVBQUM7QUFDekMsVUFBSSxXQUFXO0FBQVMsZUFBTztBQUFBLFdBQzFCO0FBQ0QsY0FBTSxNQUFNLHdCQUF3QkEsdUJBQXNCTixLQUFJO0FBQUEsTUFDbEU7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDLEVBQ0EsS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUN2QixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUdKLEVBQU1KLGtCQUFBLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxFQUN2QyxLQUFLLFVBQVUsQ0FBQyxRQUFRO0FBQ3JCLFFBQUksWUFBWSxXQUFXLFNBQVMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNwRCxRQUFJLFVBQVU7QUFBUSxhQUFPLFVBQVU7QUFBQTtBQUNsQyxhQUFPO0FBQUEsRUFDaEIsQ0FBQyxFQUNBLEtBQUssWUFBWSxDQUFDSSxPQUFNQSxFQUFDLEVBQ3pCLEtBQUssUUFBUSxDQUFDQSxPQUFNQSxFQUFDLEVBQ3JCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBR0osRUFBTUosa0JBQUEsYUFBYSxJQUFJLGdCQUFnQixZQUFZLEVBQ3JELEtBQUssUUFBUSxVQUFVLENBQUNZLE9BQU0sV0FBV0EsTUFBSyxTQUFTLFFBQVEsRUFBRSxRQUFRLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFDM0YsS0FBSyxRQUFRLFVBQVUsQ0FBQyxNQUFNLFlBQVksSUFBSSxFQUM5QyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUVKLEVBQU1aLGtCQUFBLFlBQVksSUFBSSxnQkFBZ0IsV0FBVyxFQUNuRCxLQUFLLFFBQVEsQ0FBQ0ksT0FBTUEsR0FBRSxRQUFRLENBQUMsRUFDL0IsS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUN2QixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUVYLFFBQU0sZUFBZTtBQUdkLEVBQU1KLGtCQUFBLFNBQVMsSUFBSSxnQkFBZ0IsUUFBUSxFQUM3QyxLQUFLLFVBQVUsQ0FBQ0UsT0FBTUEsRUFBQyxFQUN2QixLQUFLLFVBQVUsQ0FBQyxRQUFRO0FBQ3JCLFFBQUlTLFNBQVEsYUFBYSxLQUFLLEdBQUc7QUFDakMsUUFBSUE7QUFBTyxhQUFPLE9BQU8sV0FBV0EsT0FBTSxDQUFDLENBQUM7QUFBQTtBQUN2QyxhQUFPO0FBQUEsRUFDaEIsQ0FBQyxFQUNBLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFNSixFQUFNWCxrQkFBQSxTQUFTLElBQUksZ0JBQWdCLFFBQVEsRUFDN0MsS0FBSyxLQUFLLENBQUNFLElBQUcsUUFBUSxTQUFTLFNBQVNBLElBQUcsZUFBZSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQ3hFLE1BQU07QUFFSixFQUFNRixrQkFBQSxRQUFRLElBQUksZ0JBQWdCLE9BQU8sRUFDM0MsS0FBSyxVQUFVLENBQUNhLE9BQU0sS0FBSyxNQUFNQSxFQUFDLENBQUMsRUFDbkMsS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUN2QixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsS0FBSyxVQUFVLFVBQVUsQ0FBQ0EsSUFBR2hCLE9BQU07QUFDaEMsUUFBSUEsTUFBSztBQUFHLGFBQU8sS0FBSyxNQUFNZ0IsRUFBQztBQUMvQixXQUFPLFdBQVdBLEdBQUUsUUFBUWhCLEVBQUMsQ0FBQztBQUFBLEVBQ2xDLENBQUMsRUFDQSxLQUFLLFVBQVUsUUFBUSxDQUFDZ0IsT0FBTSxLQUFLLE1BQU1BLEVBQUMsQ0FBQyxFQUMzQyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNYixrQkFBQSxNQUFvQixJQUFJLGdCQUFnQixLQUFLLEVBQ3JELEtBQUssS0FBSyxRQUFRLENBQUNFLElBQUdJLFFBQU9KLEVBQUMsRUFDOUIsS0FBSyxRQUFRLEtBQUssQ0FBQ0ksS0FBSUosT0FBTUEsRUFBQyxFQUM5QixLQUFLLEtBQUssS0FBSyxDQUFDQSxJQUFHWSxJQUFHLFFBQVMsU0FBUyxRQUFRWixJQUFHWSxJQUFHLElBQUksWUFBWSxTQUFTLEtBQUssSUFBSVosS0FBSVksRUFBRSxFQUM5RixLQUFLLFNBQVMsQ0FBQ1osSUFBRyxZQUFRRixrQkFBQSxLQUFJLEtBQUssR0FBR0UsRUFBQyxDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxRQUFRLFNBQVUsS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQ0wsSUFBR0gsV0FBTU0sa0JBQUEsS0FBSSxLQUFLSCxJQUFHSCxFQUFDLENBQUMsQ0FBRSxFQUMxRixNQUFNO0FBRUosRUFBTU0sa0JBQUEsTUFBb0IsSUFBSSxnQkFBZ0IsS0FBSyxFQUNyRCxLQUFLLEtBQUssUUFBUSxDQUFDRSxJQUFHSSxRQUFPSixFQUFDLEVBQzlCLEtBQUssUUFBUSxLQUFLLENBQUNJLEtBQUlKLE9BQU1BLEVBQUMsRUFDOUIsS0FBSyxLQUFLLEtBQUssQ0FBQ0EsSUFBR1ksSUFBRyxRQUFTLFNBQVMsUUFBUVosSUFBR1ksSUFBRyxJQUFJLFlBQVksU0FBUyxJQUFJLElBQUlaLEtBQUlZLEVBQUUsRUFDN0YsS0FBSyxTQUFTLENBQUNaLElBQUcsWUFBUUYsa0JBQUEsS0FBSSxLQUFLLEdBQUdFLEVBQUMsQ0FBQyxFQUN4QyxPQUFPLENBQUMsUUFBUSxTQUFVLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUNMLElBQUdILFdBQU1NLGtCQUFBLEtBQUksS0FBS0gsSUFBR0gsRUFBQyxDQUFDLENBQUUsRUFDMUYsTUFBTTtBQUVKLEVBQU1NLGtCQUFBLFFBQXNCLElBQUksZ0JBQWdCLE9BQU8sRUFDekQsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLLE1BQU0sUUFBUTtBQUMzQyxRQUFJLElBQUksVUFBVTtBQUFHLGFBQU87QUFFNUIsUUFBSSxTQUFTLElBQUksSUFBSSxDQUFDZSxPQUFNO0FBQ3hCLGFBQU8sRUFBRSxPQUFPQSxJQUFHLFFBQVEsS0FBSyxLQUFLQSxFQUFDLEVBQUU7QUFBQSxJQUM1QyxDQUFDO0FBQ0QsUUFBSSxXQUFXLE9BQU8sT0FBTyxDQUFDQSxPQUFNLENBQUMsU0FBUyxPQUFPQSxHQUFFLE1BQU0sQ0FBQztBQUM5RCxRQUFJLFNBQVMsVUFBVTtBQUFHLGFBQU8sSUFBSSxDQUFDO0FBRXRDLFdBQU8sU0FBUyxPQUFPLENBQUNsQixJQUFHSCxPQUFNO0FBQzdCLFVBQUksU0FBUyxRQUFRRyxHQUFFLFFBQVFILEdBQUUsUUFBUSxJQUFJLFlBQVksU0FBUyxLQUFLO0FBQUcsZUFBT0c7QUFBQTtBQUM1RSxlQUFPSDtBQUFBLElBQ2hCLENBQUMsRUFBRTtBQUFBLEVBQ1AsQ0FBQyxFQUNBLEtBQUssUUFBUSxZQUFZLENBQUMsTUFBTSxPQUFPLFNBQVMsSUFBSSxFQUNwRCxNQUFNO0FBRUosRUFBTU0sa0JBQUEsUUFBc0IsSUFBSSxnQkFBZ0IsT0FBTyxFQUN6RCxLQUFLLFNBQVMsWUFBWSxDQUFDLEtBQUssTUFBTSxRQUFRO0FBQzNDLFFBQUksSUFBSSxVQUFVO0FBQUcsYUFBTztBQUU1QixRQUFJLFNBQVMsSUFBSSxJQUFJLENBQUNlLE9BQU07QUFDeEIsYUFBTyxFQUFFLE9BQU9BLElBQUcsUUFBUSxLQUFLLEtBQUtBLEVBQUMsRUFBRTtBQUFBLElBQzVDLENBQUM7QUFDRCxRQUFJLFdBQVcsT0FBTyxPQUFPLENBQUNBLE9BQU0sQ0FBQyxTQUFTLE9BQU9BLEdBQUUsTUFBTSxDQUFDO0FBQzlELFFBQUksU0FBUyxVQUFVO0FBQUcsYUFBTyxJQUFJLENBQUM7QUFFdEMsV0FBTyxTQUFTLE9BQU8sQ0FBQ2xCLElBQUdILE9BQU07QUFDN0IsVUFBSSxTQUFTLFFBQVFHLEdBQUUsUUFBUUgsR0FBRSxRQUFRLElBQUksWUFBWSxTQUFTLElBQUk7QUFBRyxlQUFPRztBQUFBO0FBQzNFLGVBQU9IO0FBQUEsSUFDaEIsQ0FBQyxFQUFFO0FBQUEsRUFDUCxDQUFDLEVBQ0EsS0FBSyxRQUFRLFlBQVksQ0FBQyxNQUFNLE9BQU8sU0FBUyxJQUFJLEVBQ3BELE1BQU07QUFFSixFQUFNTSxrQkFBQSxZQUFZLElBQUksZ0JBQWdCLFdBQVcsRUFDbkQsS0FBSyxRQUFRLENBQUNJLE9BQU0sU0FBUyxXQUFXLEVBQUUsTUFBTUEsR0FBRSxNQUFNLE9BQU9BLEdBQUUsT0FBTyxLQUFLQSxHQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGLEtBQUssUUFBUSxDQUFDRSxRQUFPLElBQUksRUFDekIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFHSixFQUFNTixrQkFBQSxXQUF5QixJQUFJLGdCQUFnQixVQUFVLEVBQy9ELEtBQUssU0FBUyxLQUFLLENBQUNPLElBQUcsTUFBTSxZQUFZQSxHQUFFLEtBQUssQ0FBQ0YsV0FBTUwsa0JBQUEsVUFBUyxTQUFTSyxJQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2xGLEtBQUssVUFBVSxVQUFVLENBQUMsVUFBVSxXQUFXLFNBQVMsU0FBUyxNQUFNLENBQUMsRUFDeEUsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLLFFBQVEsT0FBTyxHQUFHLEVBQ2pEO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLLENBQUMsT0FBTyxPQUFPLFlBQzNCLFFBQ0ssU0FBUyxZQUFZLFNBQVMsWUFBWSxRQUFRLEtBQUssR0FBRyxLQUFLLFlBQVksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUMxRixZQUFZO0FBQUEsRUFDckIsRUFDQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUdKLEVBQU1MLGtCQUFBLFlBQTBCLElBQUksZ0JBQWdCLFdBQVcsRUFDakUsS0FBSyxTQUFTLEtBQUssQ0FBQ08sSUFBRyxNQUFNLFlBQVlBLEdBQUUsS0FBSyxDQUFDRixXQUFNTCxrQkFBQSxXQUFVLFNBQVNLLElBQUcsSUFBSSxDQUFDLENBQUMsRUFDbkY7QUFBQSxJQUFLO0FBQUEsSUFBVTtBQUFBLElBQVUsQ0FBQyxVQUFVLFdBQ2pDLFNBQVMsa0JBQWtCLEVBQUUsU0FBUyxPQUFPLGtCQUFrQixDQUFDO0FBQUEsRUFDcEUsRUFDQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssUUFBUSxPQUFPLEdBQUcsRUFDakQ7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUssQ0FBQyxPQUFPLE9BQU8sWUFDM0IsUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsS0FBSyxHQUFHLEtBQUssWUFBWSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQzFGLFlBQVk7QUFBQSxFQUNyQixFQUNDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBR0osRUFBTUwsa0JBQUEsWUFBMEIsSUFBSSxnQkFBZ0IsV0FBVyxFQUNqRTtBQUFBLElBQUs7QUFBQSxJQUFTO0FBQUEsSUFBSyxDQUFDTyxJQUFHLE1BQU0sWUFDMUJBLEdBQUU7QUFBQSxNQUFLLENBQUNGLE9BQ0osUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsSUFBSSxHQUFHLEtBQUssWUFBWSxRQUFRQSxFQUFDLENBQUMsQ0FBQyxFQUNyRixZQUFZO0FBQUEsSUFDckI7QUFBQSxFQUNKLEVBQ0MsS0FBSyxVQUFVLFVBQVUsQ0FBQyxVQUFVLFdBQVcsU0FBUyxTQUFTLE1BQU0sQ0FBQyxFQUN4RSxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssUUFBUSxPQUFPLEdBQUcsRUFDakQ7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUssQ0FBQyxPQUFPLE9BQU8sWUFDM0IsUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsS0FBSyxHQUFHLEtBQUssWUFBWSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQzFGLFlBQVk7QUFBQSxFQUNyQixFQUNDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBR0osRUFBTUwsa0JBQUEsZUFBNkIsSUFBSSxnQkFBZ0IsY0FBYyxFQUN2RTtBQUFBLElBQ0c7QUFBQSxJQUNBO0FBQUEsSUFDQSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksT0FBTyxVQUFVLFlBQVksTUFBTSxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQUEsRUFDekYsRUFDQyxLQUFLLFFBQVEsS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLEVBQ2xDLEtBQUssS0FBSyxRQUFRLENBQUMsSUFBSSxPQUFPLElBQUksRUFDbEMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUdKLEVBQU1BLGtCQUFBLFVBQXdCLENBQUMsWUFBdUIsU0FBb0I7QUFDN0UsUUFBSSxLQUFLLFVBQVU7QUFBRyxhQUFPO0FBRzdCLFFBQUlnQixVQUFTLEtBQUssQ0FBQztBQUNuQixRQUFJLFNBQVMsUUFBUUEsT0FBTTtBQUFHLGFBQU9BLFFBQU8sSUFBSSxDQUFDRCxXQUFNZixrQkFBQSxTQUFRLFNBQVNlLElBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFNUYsUUFBSSxTQUFrQyxDQUFDO0FBQ3ZDLGFBQVNqQixTQUFRLEdBQUdBLFNBQVEsS0FBSyxRQUFRQSxVQUFTO0FBQzlDLFVBQUksTUFBTSxLQUFLQSxNQUFLO0FBQ3BCLFVBQUksQ0FBQyxTQUFTLFNBQVMsR0FBRztBQUFHLGNBQU0sTUFBTSw0REFBNEQ7QUFFckcsYUFBTyxHQUFHLElBQUksUUFDVCxTQUFTLFlBQVksTUFBTSxZQUFZLFFBQVFrQixPQUFNLEdBQUcsWUFBWSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQ2pGLFlBQVk7QUFBQSxJQUNyQjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBR08sRUFBTWhCLGtCQUFBLFVBQVUsSUFBSSxnQkFBZ0IsU0FBUyxFQUMvQyxLQUFLLFNBQVMsQ0FBQ08sT0FBTTtBQUNsQixRQUFJLFNBQVMsQ0FBQztBQUNkLGFBQVNULFNBQVFTLEdBQUUsU0FBUyxHQUFHVCxVQUFTLEdBQUdBO0FBQVMsYUFBTyxLQUFLUyxHQUFFVCxNQUFLLENBQUM7QUFDeEUsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssVUFBVSxDQUFDUyxPQUFNO0FBQ25CLFFBQUksU0FBUztBQUNiLGFBQVNiLEtBQUksR0FBR0EsS0FBSWEsR0FBRSxRQUFRYjtBQUFLLGdCQUFVYSxHQUFFQSxHQUFFLFNBQVNiLEtBQUksQ0FBQztBQUMvRCxXQUFPO0FBQUEsRUFDWCxDQUFDLEVBQ0EsS0FBSyxLQUFLLENBQUNXLE9BQU1BLEVBQUMsRUFDbEIsTUFBTTtBQUdKLEVBQU1MLGtCQUFBLE9BQXFCLElBQUksZ0JBQWdCLE1BQU0sRUFDdkQsS0FBSyxTQUFTLENBQUNpQixPQUFNLGdCQUFZakIsa0JBQUEsTUFBSyxTQUFTaUIsT0FBTSxDQUFDLE1BQWlCZixPQUFlQSxFQUFDLENBQUMsRUFDeEYsS0FBSyxTQUFTLFlBQVksQ0FBQ2UsT0FBTSxLQUFLLFlBQVk7QUFDL0MsUUFBSSxTQUFVLENBQUMsRUFBZ0IsT0FBT0EsS0FBSTtBQUMxQyxXQUFPLEtBQUssQ0FBQ2YsSUFBR1ksT0FBTTtBQUNsQixVQUFJLE9BQU8sSUFBSSxTQUFTWixFQUFDO0FBQ3pCLFVBQUksT0FBTyxJQUFJLFNBQVNZLEVBQUM7QUFDekIsVUFBSSxLQUFLLFFBQ0osU0FBUyxZQUFZLFNBQVMsWUFBWSxRQUFRLElBQUksR0FBRyxLQUFLLFlBQVksUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUN4RixZQUFZO0FBQ2pCLFVBQUksU0FBUyxTQUFTLEVBQUU7QUFBRyxlQUFPO0FBRWxDLFVBQUksS0FBSyxRQUNKLFNBQVMsWUFBWSxTQUFTLFlBQVksUUFBUSxJQUFJLEdBQUcsS0FBSyxZQUFZLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFDeEYsWUFBWTtBQUNqQixVQUFJLFNBQVMsU0FBUyxFQUFFO0FBQUcsZUFBTztBQUVsQyxhQUFPO0FBQUEsSUFDWCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssS0FBSyxDQUFDVCxPQUFNQSxFQUFDLEVBQ2xCLE1BQU07QUFFSixFQUFNTCxrQkFBQSxZQUFZLElBQUksZ0JBQWdCLFdBQVcsRUFDbkQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxTQUFpQixVQUFrQixPQUFPLE9BQU8sRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUN4RixLQUFLLFFBQVEsS0FBSyxDQUFDTSxLQUFJLE9BQU8sS0FBSyxFQUNuQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUlBLFFBQU8sS0FBSyxFQUNuQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBRUosRUFBTU4sa0JBQUEsYUFBYSxJQUFJLGdCQUFnQixZQUFZLEVBQ3JELEtBQUssVUFBVSxVQUFVLENBQUMsU0FBaUIsVUFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVEsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLFNBQVMsR0FBRztBQUFHLGdCQUFVLE1BQU0sVUFBVTtBQUNsRixXQUFPLENBQUMsQ0FBQyxNQUFNLE1BQU0sT0FBTztBQUFBLEVBQ2hDLENBQUMsRUFDQSxLQUFLLFFBQVEsS0FBSyxDQUFDTSxLQUFJLE9BQU8sS0FBSyxFQUNuQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUlBLFFBQU8sS0FBSyxFQUNuQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBRUosRUFBTU4sa0JBQUEsZUFBZSxJQUFJLGdCQUFnQixjQUFjLEVBQ3pELEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQyxPQUFlLEtBQWEsUUFBZ0I7QUFDN0UsUUFBSTtBQUNBLFVBQUksTUFBTSxJQUFJLE9BQU8sS0FBSyxHQUFHO0FBQzdCLGFBQU8sTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ2pDLFNBQVMsSUFBUDtBQUNFLFlBQU0sTUFBTSxtQkFBbUIsc0JBQXNCO0FBQUEsSUFDekQ7QUFBQSxFQUNKLENBQUMsRUFDQSxLQUFLLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUNqQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ3RCLE1BQU07QUFFSixFQUFNQSxrQkFBQSxRQUFRLElBQUksZ0JBQWdCLE9BQU8sRUFDM0MsS0FBSyxVQUFVLENBQUNrQixPQUFNQSxHQUFFLGtCQUFrQixDQUFDLEVBQzNDLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNbEIsa0JBQUEsUUFBUSxJQUFJLGdCQUFnQixPQUFPLEVBQzNDLEtBQUssVUFBVSxDQUFDa0IsT0FBTUEsR0FBRSxrQkFBa0IsQ0FBQyxFQUMzQyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBRUosRUFBTWxCLGtCQUFBLFVBQVUsSUFBSSxnQkFBZ0IsU0FBUyxFQUMvQyxLQUFLLFVBQVUsVUFBVSxVQUFVLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUNoRixLQUFLLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUNqQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ3RCLE1BQU07QUFHWCxRQUFNLFlBQVksQ0FBQyxLQUFhLE9BQWUsVUFDM0MsSUFBSSxNQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQ21CLFNBQVFBLFFBQU8sRUFBRTtBQUd2RCxFQUFNbkIsa0JBQUEsUUFBc0IsSUFBSSxnQkFBZ0IsT0FBTyxFQUN6RCxLQUFLLFVBQVUsVUFBVSxDQUFDb0IsU0FBUSxhQUFhLFVBQVVBLFNBQVEsUUFBUSxDQUFDLEVBQzFFLEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQ0EsU0FBUSxVQUFVLFVBQVUsVUFBVUEsU0FBUSxVQUFVLEtBQUssQ0FBQyxFQUNsRyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQ2pDLE1BQU07QUFFSixFQUFNcEIsa0JBQUEsYUFBMkIsSUFBSSxnQkFBZ0IsWUFBWSxFQUNuRSxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssYUFBYSxJQUFJLFdBQVcsUUFBUSxDQUFDLEVBQ3BFLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUVKLEVBQU1BLGtCQUFBLFdBQXlCLElBQUksZ0JBQWdCLFVBQVUsRUFDL0QsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLLFdBQVcsSUFBSSxTQUFTLE1BQU0sQ0FBQyxFQUM5RCxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQzVCLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ25CLE1BQU07QUFFSixFQUFNQSxrQkFBQSxVQUF3QixJQUFJLGdCQUFnQixTQUFTLEVBQzdELEtBQUssVUFBVSxVQUFVLENBQUMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLEdBQUcsQ0FBQyxFQUM3RCxLQUFLLFVBQVUsVUFBVSxVQUFVLENBQUMsS0FBSyxLQUFLLFlBQVksSUFBSSxTQUFTLEtBQUssT0FBTyxDQUFDLEVBQ3BGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsS0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDakMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUN0QixNQUFNO0FBRUosRUFBTUEsa0JBQUEsV0FBeUIsSUFBSSxnQkFBZ0IsVUFBVSxFQUMvRCxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxHQUFHLENBQUMsRUFDM0QsS0FBSyxVQUFVLFVBQVUsVUFBVSxDQUFDLEtBQUssS0FBSyxZQUFZLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQyxFQUNsRixLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQzVCLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ2pDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ25CLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFDdEIsTUFBTTtBQUVKLEVBQU1BLGtCQUFBLFlBQTBCLElBQUksZ0JBQWdCLFdBQVcsRUFDakUsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUM3RCxLQUFLLFVBQVUsVUFBVSxVQUFVLENBQUMsS0FBSyxPQUFPcUIsU0FBUSxJQUFJLFVBQVUsT0FBT0EsSUFBRyxDQUFDLEVBQ2pGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsS0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDakMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUN0QixNQUFNO0FBRUosRUFBTXJCLGtCQUFBLFdBQXlCLElBQUksZ0JBQWdCLFVBQVUsRUFDL0QsS0FBSyxVQUFVLFVBQVUsVUFBVSxDQUFDLEtBQUtzQixTQUFRLFdBQVc7QUFDekQsUUFBSSxJQUFJLFNBQVNBLFVBQVMsT0FBTyxRQUFRO0FBQ3JDLGFBQU8sSUFBSSxVQUFVLEdBQUcsS0FBSyxJQUFJLEdBQUdBLFVBQVMsT0FBTyxNQUFNLENBQUMsSUFBSTtBQUFBLElBQ25FLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0osQ0FBQyxFQUNBLEtBQUssVUFBVSxVQUFVLENBQUMsS0FBS0EsU0FBUSxZQUFRdEIsa0JBQUEsVUFBUyxLQUFLLEtBQUtzQixTQUFRLEtBQUssQ0FBQyxFQUNoRixLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQzVCLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ2pDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ25CLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFDdEIsTUFBTTtBQUVKLEVBQU10QixrQkFBQSxXQUFXLElBQUksZ0JBQWdCLFNBQVMsRUFDaEQsS0FBSyxLQUFLLEtBQUssQ0FBQ2UsSUFBRyxPQUFRLFNBQVMsT0FBT0EsRUFBQyxJQUFJLEtBQUtBLEVBQUUsRUFDdkQsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUVKLEVBQU1mLGtCQUFBLFdBQVcsSUFBSSxnQkFBZ0IsVUFBVSxFQUNqRCxLQUFLLEtBQUssS0FBSyxDQUFDZSxJQUFHLE9BQVEsU0FBUyxPQUFPQSxFQUFDLElBQUksS0FBS0EsRUFBRSxFQUN2RCxNQUFNO0FBRUosRUFBTWYsa0JBQUEsU0FBUyxJQUFJLGdCQUFnQixRQUFRLEVBQzdDLEtBQUssS0FBSyxLQUFLLEtBQUssQ0FBQ2MsSUFBRyxNQUFNLFVBQVcsU0FBUyxTQUFTQSxFQUFDLElBQUksT0FBTyxLQUFNLEVBQzdFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBRUosRUFBTWQsa0JBQUEsU0FBUyxJQUFJLGdCQUFnQixRQUFRLEVBQzdDLEtBQUssU0FBUyxVQUFVLENBQUMsS0FBSyxJQUFJLFlBQVk7QUFDM0MsUUFBSSxJQUFJLFVBQVU7QUFBRyxhQUFPO0FBRTVCLFFBQUksTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNLE9BQU8sTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNO0FBQ3ZFLFlBQU0sTUFBTSw2REFBNkQ7QUFFN0UsUUFBSSxRQUFRLElBQUksQ0FBQztBQUNqQixhQUFTRixTQUFRLEdBQUdBLFNBQVEsSUFBSSxRQUFRQSxVQUFTO0FBQzdDLGNBQVEsUUFDSCxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsS0FBSyxHQUFHLElBQUksWUFBWSxRQUFRLElBQUlBLE1BQUssQ0FBQyxDQUFDLENBQUMsRUFDOUYsWUFBWTtBQUFBLElBQ3JCO0FBRUEsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssU0FBUyxZQUFZLENBQUMsS0FBSyxJQUFJLFlBQVk7QUFDN0MsUUFBSSxJQUFJLFVBQVU7QUFBRyxhQUFPO0FBRTVCLFFBQUksUUFBUSxJQUFJLENBQUM7QUFDakIsYUFBU0EsU0FBUSxHQUFHQSxTQUFRLElBQUksUUFBUUEsVUFBUztBQUU3QyxVQUFJLFNBQVMsT0FBTyxJQUFJQSxNQUFLLENBQUM7QUFBRztBQUVqQyxjQUFRLEdBQUcsU0FBUyxPQUFPLElBQUlBLE1BQUssQ0FBQztBQUFBLElBQ3pDO0FBRUEsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNRSxrQkFBQSxNQUFNLElBQUksZ0JBQWdCLEtBQUssRUFDdkMsS0FBSyxTQUFTLENBQUMsS0FBS04sV0FBTU0sa0JBQUEsUUFBT04sSUFBRyxLQUFLLEdBQUcsQ0FBQyxFQUM3QyxLQUFLLEtBQUssQ0FBQ1csT0FBTUEsRUFBQyxFQUNsQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssU0FBUyxDQUFDdUIsUUFBTyxZQUFZO0FBQy9CLFFBQUlBLE9BQU0sVUFBVTtBQUFHLGFBQU87QUFFOUIsVUFBTSxVQUFNdkIsa0JBQUEsS0FBSSxTQUFTdUIsTUFBSztBQUM5QixRQUFJLE9BQU8sUUFBUSxPQUFPO0FBQVcsYUFBTztBQUU1QyxXQUFPLFFBQ0YsU0FBUyxZQUFZLFNBQVMsWUFBWSxRQUFRLEdBQUcsR0FBRyxLQUFLLFlBQVksUUFBUUEsT0FBTSxNQUFNLENBQUMsQ0FBQyxFQUMvRixZQUFZO0FBQUEsRUFDckIsQ0FBQyxFQUNBLEtBQUssS0FBSyxDQUFDbEIsT0FBTUEsRUFBQyxFQUNsQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssU0FBUyxDQUFDLEtBQUtOLFdBQU1NLGtCQUFBLFFBQU9OLElBQUcsS0FBSyxHQUFHLENBQUMsRUFDN0MsS0FBSyxLQUFLLENBQUNXLE9BQU1BLEVBQUMsRUFDbEIsTUFBTTtBQUVKLEVBQU1MLGtCQUFBLE9BQXFCLElBQUksZ0JBQWdCLE1BQU0sRUFDdkQ7QUFBQSxJQUFLO0FBQUEsSUFBUztBQUFBLElBQVUsQ0FBQyxLQUFLLEtBQUssUUFDaEMsSUFBSSxJQUFJLENBQUNLLE9BQU0sU0FBUyxTQUFTQSxJQUFHLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLEVBQy9FLEVBQ0MsS0FBSyxTQUFTLFFBQVEsQ0FBQyxLQUFLLElBQUksZ0JBQVlMLGtCQUFBLE1BQUssU0FBUyxLQUFLLElBQUksQ0FBQyxFQUNwRSxLQUFLLEtBQUssVUFBVSxDQUFDLE1BQU0sS0FBSyxRQUFRLFNBQVMsU0FBUyxNQUFNLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUM3RixLQUFLLFNBQVMsQ0FBQyxLQUFLLGdCQUFZQSxrQkFBQSxNQUFLLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFDeEQsS0FBSyxLQUFLLENBQUNLLElBQUcsUUFBUSxTQUFTLFNBQVNBLElBQUcsZUFBZSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQ3hFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsTUFBTSxJQUFJLGdCQUFnQixLQUFLLEVBQ3ZDLEtBQUssU0FBUyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUNlLE9BQU0sU0FBUyxTQUFTQSxFQUFDLENBQUMsQ0FBQyxFQUM1RCxLQUFLLFNBQVMsWUFBWSxDQUFDLEtBQUtMLElBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQ0ssT0FBTSxTQUFTLFNBQVNMLEdBQUUsS0FBS0ssRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUN4RixPQUFPLENBQUMsU0FBUyxTQUFTLEtBQUssS0FBSyxDQUFDQSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDaEUsTUFBTTtBQUVKLEVBQU1mLGtCQUFBLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxFQUN2QyxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDZSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDN0QsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLTCxJQUFHLFFBQVEsSUFBSSxNQUFNLENBQUNLLE9BQU0sU0FBUyxTQUFTTCxHQUFFLEtBQUtLLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekYsT0FBTyxDQUFDLFNBQVMsU0FBUyxLQUFLLE1BQU0sQ0FBQ0EsT0FBTSxTQUFTLFNBQVNBLEVBQUMsQ0FBQyxDQUFDLEVBQ2pFLE1BQU07QUFFSixFQUFNZixrQkFBQSxPQUFPLElBQUksZ0JBQWdCLEtBQUssRUFDeEMsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDZSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDN0QsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLTCxJQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQ0ssT0FBTSxTQUFTLFNBQVNMLEdBQUUsS0FBS0ssRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUN6RixPQUFPLENBQUMsU0FBUyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUNBLE9BQU0sU0FBUyxTQUFTQSxFQUFDLENBQUMsQ0FBQyxFQUNqRSxNQUFNO0FBRUosRUFBTWYsa0JBQUEsU0FBUyxJQUFJLGdCQUFnQixRQUFRLEVBQzdDLEtBQUssU0FBUyxZQUFZLENBQUMsS0FBS1UsSUFBRyxRQUFRLElBQUksT0FBTyxDQUFDSyxPQUFNLFNBQVMsU0FBU0wsR0FBRSxLQUFLSyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixNQUFNO0FBRUosRUFBTWYsa0JBQUEsTUFBTSxJQUFJLGdCQUFnQixLQUFLLEVBQ3ZDLEtBQUssU0FBUyxZQUFZLENBQUMsS0FBS1UsSUFBRyxRQUFRLElBQUksSUFBSSxDQUFDSyxPQUFNTCxHQUFFLEtBQUtLLEVBQUMsQ0FBQyxDQUFDLEVBQ3BFLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixNQUFNO0FBRUosRUFBTWYsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssU0FBUyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUNlLE9BQU0sU0FBUyxPQUFPQSxFQUFDLEtBQUssTUFBTSxDQUFDLEVBQ3RFLE9BQU8sQ0FBQyxTQUFTLFNBQVMsS0FBSyxPQUFPLENBQUNBLE9BQU0sU0FBUyxPQUFPQSxFQUFDLEtBQUssTUFBTSxDQUFDLEVBQzFFLE1BQU07QUFHSixFQUFNZixrQkFBQSxPQUFxQixJQUFJLGdCQUFnQixNQUFNLEVBQ3ZELEtBQUssUUFBUSxDQUFDUSxVQUFNO0FBMXdCN0I7QUEwd0JpQztBQUFBLE1BQ3JCLFVBQVMsS0FBQUEsTUFBSyxZQUFMLFlBQWdCO0FBQUEsTUFDekIsT0FBT0EsTUFBSztBQUFBLE1BQ1osTUFBTUEsTUFBSztBQUFBLE1BQ1gsVUFBUyxLQUFBQSxNQUFLLFlBQUwsWUFBZ0I7QUFBQSxNQUN6QixNQUFNQSxNQUFLO0FBQUEsSUFDZjtBQUFBLEdBQUUsRUFDRCxNQUFNO0FBR0osRUFBTVIsa0JBQUEsT0FBTyxJQUFJLGdCQUFnQixNQUFNLEVBQ3pDLEtBQUssU0FBUyxDQUFDRSxPQUFNO0FBQ2xCLFdBQU9BLEdBQUUsS0FBSztBQUFBLEVBQ2xCLENBQUMsRUFDQSxLQUFLLFNBQVMsVUFBVSxDQUFDQSxJQUFHVyxPQUFNO0FBRS9CLFdBQU9YLEdBQUUsS0FBS1csRUFBQztBQUFBLEVBQ25CLENBQUMsRUFDQSxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLE1BQU07QUFBQSxHQTVtQkU7QUFnbkJWLElBQU0sb0JBQWtEO0FBQUE7QUFBQSxFQUUzRCxNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsTUFBTSxpQkFBaUI7QUFBQSxFQUN2QixPQUFPLGlCQUFpQjtBQUFBLEVBQ3hCLE1BQU0saUJBQWlCO0FBQUEsRUFDdkIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixZQUFZLGlCQUFpQjtBQUFBLEVBQzdCLFdBQVcsaUJBQWlCO0FBQUEsRUFDNUIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixRQUFRLGlCQUFpQjtBQUFBLEVBQ3pCLFFBQVEsaUJBQWlCO0FBQUEsRUFDekIsUUFBUSxpQkFBaUI7QUFBQTtBQUFBLEVBR3pCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixLQUFLLGlCQUFpQjtBQUFBLEVBQ3RCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsT0FBTyxpQkFBaUI7QUFBQTtBQUFBLEVBR3hCLGNBQWMsaUJBQWlCO0FBQUEsRUFDL0IsV0FBVyxpQkFBaUI7QUFBQSxFQUM1QixZQUFZLGlCQUFpQjtBQUFBLEVBQzdCLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsT0FBTyxpQkFBaUI7QUFBQSxFQUN4QixPQUFPLGlCQUFpQjtBQUFBLEVBQ3hCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsWUFBWSxpQkFBaUI7QUFBQSxFQUM3QixVQUFVLGlCQUFpQjtBQUFBLEVBQzNCLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsVUFBVSxpQkFBaUI7QUFBQSxFQUMzQixXQUFXLGlCQUFpQjtBQUFBLEVBQzVCLFVBQVUsaUJBQWlCO0FBQUE7QUFBQSxFQUczQixXQUFXLGlCQUFpQjtBQUFBO0FBQUEsRUFHNUIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixVQUFVLGlCQUFpQjtBQUFBLEVBQzNCLFdBQVcsaUJBQWlCO0FBQUEsRUFDNUIsV0FBVyxpQkFBaUI7QUFBQSxFQUM1QixjQUFjLGlCQUFpQjtBQUFBLEVBQy9CLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsTUFBTSxpQkFBaUI7QUFBQSxFQUN2QixNQUFNLGlCQUFpQjtBQUFBO0FBQUEsRUFHdkIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLEtBQUssaUJBQWlCO0FBQUEsRUFDdEIsU0FBUyxpQkFBaUI7QUFBQSxFQUMxQixTQUFTLGlCQUFpQjtBQUFBLEVBQzFCLEtBQUssaUJBQWlCO0FBQUEsRUFDdEIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLFFBQVEsaUJBQWlCO0FBQUEsRUFDekIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixTQUFTLGlCQUFpQjtBQUFBO0FBQUEsRUFHMUIsU0FBUyxpQkFBaUI7QUFBQSxFQUMxQixTQUFTLGlCQUFpQjtBQUFBLEVBQzFCLFVBQVUsaUJBQWlCO0FBQUEsRUFDM0IsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixNQUFNLGlCQUFpQjtBQUMzQjs7O0FDbDBCTyxJQUFNLFlBQU4sTUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1osWUFDSSxhQUNBLFVBQ0EsVUFBbUMsQ0FBQyxHQUNwQyxZQUE2QixnQkFBZ0IsWUFBWSxTQUFTLEdBQ2xFVyxhQUEwQyxtQkFDbkQ7QUFMUztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFBQTtBQUFBLEVBQ1I7QUFBQTtBQUFBLEVBR0ksSUFBSSxNQUFjLE9BQTJCO0FBQ2hELFNBQUssUUFBUSxJQUFJLElBQUk7QUFDckIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sSUFBSSxNQUF1QjtBQXhEdEM7QUF5RFEsWUFBTyxVQUFLLFFBQVEsSUFBSSxNQUFqQixZQUFzQjtBQUFBLEVBQ2pDO0FBQUE7QUFBQSxFQUdPLFlBQVksTUFBa0IsWUFBdUIsVUFBVSxNQUFNLEdBQVk7QUFDcEYsV0FBTyxLQUFLLFNBQVMsTUFBTSxTQUFTLEVBQUUsWUFBWTtBQUFBLEVBQ3REO0FBQUE7QUFBQSxFQUdPLFNBQVMsTUFBa0IsWUFBdUIsVUFBVSxNQUFNLEdBQTRCO0FBQ2pHLFlBQVEsS0FBSyxNQUFNO0FBQUEsTUFDZixLQUFLO0FBQ0QsZUFBTyxPQUFPLFFBQVEsS0FBSyxLQUFLO0FBQUEsTUFDcEMsS0FBSztBQUNELFlBQUksS0FBSyxTQUFTLFlBQVk7QUFBSyxpQkFBTyxPQUFPLFFBQVEsVUFBVSxJQUFJLENBQUM7QUFFeEUsY0FBTSxXQUFXLFVBQVUsUUFBUSxLQUFLLElBQUk7QUFDNUMsWUFBSSxhQUFhO0FBQVcsaUJBQU8sT0FBTyxRQUFRLFFBQVE7QUFDMUQsWUFBSSxLQUFLLFFBQVEsS0FBSztBQUFTLGlCQUFPLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFFNUUsZUFBTyxPQUFPLFFBQVEsSUFBSTtBQUFBLE1BQzlCLEtBQUs7QUFDRCxlQUFPLEtBQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxFQUFFLElBQUksQ0FBQ0MsT0FBTSxDQUFDLFNBQVMsU0FBU0EsRUFBQyxDQUFDO0FBQUEsTUFDaEYsS0FBSztBQUNELGVBQU8sT0FBTztBQUFBLFVBQ1YsS0FBSyxTQUFTLEtBQUssTUFBTSxTQUFTO0FBQUEsVUFDbEMsS0FBSyxTQUFTLEtBQUssT0FBTyxTQUFTO0FBQUEsVUFDbkMsQ0FBQ0MsSUFBR0MsT0FBTSxLQUFLLFVBQVUsU0FBUyxLQUFLLElBQUlELElBQUdDLElBQUcsSUFBSTtBQUFBLFFBQ3pEO0FBQUEsTUFDSixLQUFLO0FBQ0QsWUFBSSxTQUFTLENBQUM7QUFDZCxpQkFBUyxTQUFTLEtBQUssUUFBUTtBQUMzQixjQUFJLFVBQVUsS0FBSyxTQUFTLE9BQU8sU0FBUztBQUM1QyxjQUFJLENBQUMsUUFBUTtBQUFZLG1CQUFPO0FBQ2hDLGlCQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsUUFDN0I7QUFDQSxlQUFPLE9BQU8sUUFBUSxNQUFNO0FBQUEsTUFDaEMsS0FBSztBQUNELFlBQUksWUFBd0IsQ0FBQztBQUM3QixpQkFBUyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLE1BQU0sR0FBRztBQUNsRCxjQUFJLFVBQVUsS0FBSyxTQUFTLE9BQU8sU0FBUztBQUM1QyxjQUFJLENBQUMsUUFBUTtBQUFZLG1CQUFPO0FBQ2hDLG9CQUFVLEdBQUcsSUFBSSxRQUFRO0FBQUEsUUFDN0I7QUFDQSxlQUFPLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFDbkMsS0FBSztBQUdELGVBQU8sT0FBTyxRQUFRLENBQUMsUUFBbUJDLFVBQW9CO0FBQzFELGNBQUksU0FBa0MsQ0FBQztBQUN2QyxtQkFBUyxNQUFNLEdBQUcsTUFBTSxLQUFLLElBQUlBLE1BQUssUUFBUSxLQUFLLFVBQVUsTUFBTSxHQUFHLE9BQU87QUFDekUsbUJBQU8sS0FBSyxVQUFVLEdBQUcsQ0FBQyxJQUFJQSxNQUFLLEdBQUc7QUFBQSxVQUMxQztBQUVBLGlCQUFPLElBQUksU0FBUyxLQUFLLE9BQU8sVUFBVSxPQUFPLFdBQVcsTUFBTSxDQUFDLEVBQUUsWUFBWTtBQUFBLFFBQ3JGLENBQUM7QUFBQSxNQUNMLEtBQUs7QUFDRCxZQUFJLFVBQ0EsS0FBSyxLQUFLLFFBQVEsYUFDWixPQUFPLFFBQXdCLEtBQUssS0FBSyxJQUFJLElBQzdDLEtBQUssU0FBUyxLQUFLLE1BQU0sU0FBUztBQUM1QyxZQUFJLENBQUMsUUFBUTtBQUFZLGlCQUFPO0FBQ2hDLFlBQUksT0FBTyxRQUFRO0FBRW5CLFlBQUksT0FBa0IsQ0FBQztBQUN2QixpQkFBUyxPQUFPLEtBQUssV0FBVztBQUM1QixjQUFJQyxZQUFXLEtBQUssU0FBUyxLQUFLLFNBQVM7QUFDM0MsY0FBSSxDQUFDQSxVQUFTO0FBQVksbUJBQU9BO0FBQ2pDLGVBQUssS0FBS0EsVUFBUyxLQUFLO0FBQUEsUUFDNUI7QUFFQSxZQUFJO0FBQ0osWUFBSSxTQUFTLFdBQVcsSUFBSTtBQUFHLGlCQUFPO0FBQUEsaUJBQzdCLFNBQVMsU0FBUyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQVcsaUJBQU8sS0FBSyxVQUFVLElBQUk7QUFBQSxpQkFDN0UsU0FBUyxTQUFTLElBQUk7QUFBRyxpQkFBTyxPQUFPLFFBQVEsK0JBQStCLE9BQU87QUFBQTtBQUN6RixpQkFBTyxPQUFPLFFBQVEscUJBQXFCLFNBQVMsT0FBTyxJQUFJLGtCQUFrQjtBQUV0RixZQUFJO0FBQ0EsaUJBQU8sT0FBTyxRQUFRLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQztBQUFBLFFBQzdDLFNBQVNDLElBQVA7QUFDRSxpQkFBTyxPQUFPLFFBQVFBLEdBQUUsT0FBTztBQUFBLFFBQ25DO0FBQUEsSUFDUjtBQUFBLEVBQ0o7QUFDSjtBQUdPLElBQU0sa0JBQU4sTUFBMkM7QUFBQSxFQUN2QyxZQUFtQixRQUFvQjtBQUFwQjtBQUFBLEVBQXFCO0FBQUEsRUFFeEMsTUFBa0I7QUFDckIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUVPLFFBQVEsTUFBbUM7QUFDOUMsV0FBTyxLQUFLLE9BQU8sSUFBSTtBQUFBLEVBQzNCO0FBQ0o7QUFHTyxJQUFNLHdCQUFOLE1BQWlEO0FBQUEsRUFDN0MsWUFBbUIsUUFBc0I7QUFBdEI7QUFBQSxFQUF1QjtBQUFBLEVBRTFDLE1BQWtCO0FBQ3JCLFVBQU0sU0FBcUIsQ0FBQztBQUM1QixlQUFXLFNBQVMsS0FBSyxPQUFPLFFBQVE7QUFDcEMsYUFBTyxNQUFNLEdBQUcsSUFBSSxNQUFNO0FBQUEsSUFDOUI7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRU8sUUFBUSxNQUFtQztBQXpLdEQ7QUEwS1EsWUFBTyxVQUFLLE9BQU8sTUFBTSxJQUFJLE1BQXRCLG1CQUF5QjtBQUFBLEVBQ3BDO0FBQ0o7QUFHTyxJQUFNLGtCQUFOLE1BQTJDO0FBQUEsRUFDdkMsWUFBbUIsUUFBMEIsUUFBaUM7QUFBM0Q7QUFBMEI7QUFBQSxFQUFrQztBQUFBLEVBRS9FLE1BQWtCO0FBQ3JCLFdBQU8sRUFBRSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsR0FBRyxLQUFLLE9BQU87QUFBQSxFQUNsRDtBQUFBLEVBRU8sUUFBUSxNQUFtQztBQXRMdEQ7QUF1TFEsWUFBTyxVQUFLLE9BQU8sSUFBSSxNQUFoQixZQUFxQixLQUFLLE9BQU8sUUFBUSxJQUFJO0FBQUEsRUFDeEQ7QUFDSjtBQUdPLElBQVU7QUFBQSxDQUFWLENBQVVDLGVBQVY7QUFDSSxXQUFTLFFBQVE7QUFDcEIsV0FBTyxJQUFJLGdCQUFnQixDQUFDLENBQUM7QUFBQSxFQUNqQztBQUZPLEVBQUFBLFdBQVM7QUFJVCxXQUFTLE1BQU0sUUFBd0I7QUFDMUMsUUFBSSxjQUFjLGVBQWUsTUFBTSxHQUFHO0FBQ3RDLGFBQU8sSUFBSSxzQkFBc0IsTUFBTTtBQUFBLElBQzNDLE9BQU87QUFDSCxhQUFPLElBQUksZ0JBQWdCLE1BQU07QUFBQSxJQUNyQztBQUFBLEVBQ0o7QUFOTyxFQUFBQSxXQUFTO0FBUVQsV0FBUyxPQUFPLFFBQW1CLFFBQTRDO0FBQ2xGLFdBQU8sSUFBSSxnQkFBZ0IsUUFBUSxNQUFNO0FBQUEsRUFDN0M7QUFGTyxFQUFBQSxXQUFTO0FBQUEsR0FiSDs7O0FDOUtWLFNBQVMsY0FBYyxPQUErQjtBQUN6RCxVQUFRLE9BQU8sS0FBSztBQUNwQixVQUFRLGFBQWEsS0FBSztBQUUxQixTQUFPO0FBQ1g7QUFHQSxTQUFTLE9BQU8sT0FBK0I7QUFDM0MsVUFBUSxNQUFNLE1BQU07QUFBQSxJQUNoQixLQUFLO0FBQ0QsWUFBTSxPQUFPLE1BQU0sU0FBUyxRQUFRLENBQUMsWUFBWTtBQUM3QyxjQUFNLFFBQVEsT0FBTyxPQUFPO0FBQzVCLFlBQUksTUFBTSxTQUFTO0FBQU8saUJBQU8sTUFBTTtBQUFBO0FBQ2xDLGlCQUFPLENBQUMsS0FBSztBQUFBLE1BQ3RCLENBQUM7QUFDRCxhQUFPLEVBQUUsTUFBTSxPQUFPLFVBQVUsS0FBSztBQUFBLElBQ3pDLEtBQUs7QUFDRCxZQUFNLE1BQU0sTUFBTSxTQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzVDLGNBQU0sUUFBUSxPQUFPLE9BQU87QUFDNUIsWUFBSSxNQUFNLFNBQVM7QUFBTSxpQkFBTyxNQUFNO0FBQUE7QUFDakMsaUJBQU8sQ0FBQyxLQUFLO0FBQUEsTUFDdEIsQ0FBQztBQUNELGFBQU8sRUFBRSxNQUFNLE1BQU0sVUFBVSxJQUFJO0FBQUEsSUFDdkMsS0FBSztBQUNELGFBQU8sRUFBRSxNQUFNLE9BQU8sU0FBUyxPQUFPLE1BQU0sT0FBTyxFQUFFO0FBQUEsSUFDekQsS0FBSztBQUNELGFBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxPQUFPLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFBQSxJQUN0RSxLQUFLO0FBQ0QsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxVQUFVLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUFBLElBQ3hFLEtBQUs7QUFDRCxhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLFFBQVEsT0FBTyxNQUFNLE1BQU0sRUFBRSxDQUFDO0FBQUEsSUFDcEU7QUFDSSxhQUFPO0FBQUEsRUFDZjtBQUNKO0FBR0EsU0FBUyxhQUFhLE9BQStCO0FBQ2pELFVBQVEsTUFBTSxNQUFNO0FBQUEsSUFDaEIsS0FBSztBQUNELFlBQU0sWUFBWSxDQUFDO0FBQ25CLGlCQUFXLFNBQVMsTUFBTSxVQUFVO0FBQ2hDLGNBQU1DLFVBQVMsYUFBYSxLQUFLO0FBR2pDLFlBQUlBLFFBQU8sU0FBUyxZQUFZO0FBQzVCLGNBQUlBLFFBQU87QUFBVTtBQUFBO0FBQ2hCLG1CQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsTUFBTTtBQUFBLFFBQ3BEO0FBRUEsa0JBQVUsS0FBS0EsT0FBTTtBQUFBLE1BQ3pCO0FBRUEsYUFBTyxFQUFFLE1BQU0sT0FBTyxVQUFVLFVBQVU7QUFBQSxJQUM5QyxLQUFLO0FBQ0QsWUFBTSxZQUFZLENBQUM7QUFDbkIsaUJBQVcsU0FBUyxNQUFNLFVBQVU7QUFDaEMsY0FBTUEsVUFBUyxhQUFhLEtBQUs7QUFHakMsWUFBSUEsUUFBTyxTQUFTLFlBQVk7QUFDNUIsY0FBSSxDQUFDQSxRQUFPO0FBQVU7QUFBQTtBQUNqQixtQkFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLEtBQUs7QUFBQSxRQUNuRDtBQUVBLGtCQUFVLEtBQUtBLE9BQU07QUFBQSxNQUN6QjtBQUVBLGFBQU8sRUFBRSxNQUFNLE1BQU0sVUFBVSxVQUFVO0FBQUEsSUFDN0MsS0FBSztBQUNELFlBQU0sU0FBUyxhQUFhLE1BQU0sT0FBTztBQUV6QyxVQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzVCLGVBQU8sRUFBRSxNQUFNLFlBQVksVUFBVSxDQUFDLE9BQU8sU0FBUztBQUFBLE1BQzFEO0FBRUEsYUFBTyxFQUFFLE1BQU0sT0FBTyxTQUFTLE9BQU87QUFBQSxJQUMxQyxLQUFLO0FBRUQsWUFBTSxVQUFVLGFBQWEsTUFBTSxPQUFPO0FBQzFDLFVBQUksUUFBUSxTQUFTLFlBQVk7QUFDN0IsWUFBSSxDQUFDLFFBQVE7QUFBVSxpQkFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLE1BQU07QUFBQSxpQkFDekQsUUFBUSxZQUFZLE1BQU07QUFBVyxpQkFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLEtBQUs7QUFBQSxNQUM1RjtBQUVBLGFBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDO0FBQUEsSUFDL0MsS0FBSztBQUVELFlBQU0sV0FBVyxhQUFhLE1BQU0sUUFBUTtBQUM1QyxVQUFJLFNBQVMsU0FBUyxZQUFZO0FBQzlCLFlBQUksQ0FBQyxTQUFTO0FBQVUsaUJBQU8sRUFBRSxNQUFNLFlBQVksVUFBVSxNQUFNO0FBQUEsaUJBQzFELFNBQVMsWUFBWSxNQUFNO0FBQVcsaUJBQU8sRUFBRSxNQUFNLFlBQVksVUFBVSxLQUFLO0FBQUEsTUFDN0Y7QUFFQSxhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUFBLElBQ2hELEtBQUs7QUFDRCxZQUFNLFNBQVMsYUFBYSxNQUFNLE1BQU07QUFDeEMsVUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM1QixZQUFJLENBQUMsT0FBTztBQUFVLGlCQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsTUFBTTtBQUFBLGlCQUN4RCxPQUFPLFlBQVksTUFBTTtBQUFXLGlCQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsS0FBSztBQUFBLE1BQzNGO0FBRUEsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7QUFBQSxJQUM5QztBQUNJLGFBQU87QUFBQSxFQUNmO0FBQ0o7QUFzQk8sU0FBUyxRQUNaLE9BQ0EsVUFDQSxXQUN5QjtBQUN6QixTQUFPLFNBQVMsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsU0FBUyxNQUFNLFVBQVUsU0FBUyxDQUFDO0FBQzFGO0FBR08sU0FBUyxTQUFZLE9BQW1CLFVBQTJEO0FBQ3RHLFVBQVEsTUFBTSxNQUFNO0FBQUEsSUFDaEIsS0FBSztBQUVELGFBQU8sT0FBTyxPQUFPLE1BQU0sVUFBVSxDQUFDLFVBQVUsU0FBUyxPQUFPLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhO0FBQ3pGLGNBQU0sWUFBWSxTQUFTO0FBQUEsVUFBUSxDQUFDLFlBQ2hDLFFBQVEsU0FBUyxRQUFRLFFBQVEsV0FBVyxDQUFDLE9BQU87QUFBQSxRQUN4RDtBQUVBLGNBQU0sUUFBeUIsQ0FBQztBQUNoQyxjQUFNLFlBQVksUUFBUSxjQUFjLFdBQVcsQ0FBQyxZQUFZO0FBQzVELGNBQUksUUFBUSxTQUFTO0FBQVUsbUJBQU8sUUFBUTtBQUFBLGVBQ3pDO0FBQ0Qsa0JBQU0sS0FBSyxPQUFPO0FBQ2xCLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osQ0FBQztBQUdELFlBQUksVUFBVSxTQUFTO0FBQVcsaUJBQU8sRUFBRSxNQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVE7QUFBQSxpQkFDMUUsVUFBVSxRQUFRO0FBQWMsZ0JBQU0sS0FBSyxZQUFZLE9BQU8sU0FBUyxDQUFDO0FBRWpGLGVBQU8sWUFBWSxJQUFJLEtBQUs7QUFBQSxNQUNoQyxDQUFDO0FBQUEsSUFDTCxLQUFLO0FBQ0QsYUFBTyxPQUFPLE9BQU8sTUFBTSxVQUFVLENBQUMsVUFBVSxTQUFTLE9BQU8sUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWE7QUFDekYsY0FBTSxZQUFZLFNBQVMsUUFBUSxDQUFDLFlBQWEsUUFBUSxTQUFTLE9BQU8sUUFBUSxXQUFXLENBQUMsT0FBTyxDQUFFO0FBRXRHLGNBQU0sUUFBeUIsQ0FBQztBQUNoQyxjQUFNLFlBQVksUUFBUSxVQUFVLFdBQVcsQ0FBQyxZQUFZO0FBQ3hELGNBQUksUUFBUSxTQUFTO0FBQVUsbUJBQU8sUUFBUTtBQUFBLGVBQ3pDO0FBQ0Qsa0JBQU0sS0FBSyxPQUFPO0FBQ2xCLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osQ0FBQztBQUdELFlBQUksVUFBVSxTQUFTO0FBQWMsaUJBQU8sRUFBRSxNQUFNLFVBQVUsUUFBUSxRQUFRLFdBQVc7QUFBQSxpQkFDaEYsVUFBVSxRQUFRO0FBQVcsZ0JBQU0sS0FBSyxZQUFZLE9BQU8sU0FBUyxDQUFDO0FBRTlFLGVBQU8sWUFBWSxHQUFHLEtBQUs7QUFBQSxNQUMvQixDQUFDO0FBQUEsSUFDTCxLQUFLO0FBQ0QsYUFBTyxTQUFTLE1BQU0sU0FBUyxRQUFRLEVBQUUsSUFBSSxZQUFZLEdBQUc7QUFBQSxJQUNoRSxLQUFLO0FBQ0QsWUFBTSxhQUFhLGFBQWEsTUFBTSxZQUFZLFFBQVE7QUFDMUQsYUFBTyxPQUFPLFFBQVEsRUFBRSxNQUFNLFFBQVEsWUFBWSxZQUFZLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDcEY7QUFDSSxhQUFPLFNBQVMsUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLFVBQVUsT0FBTyxFQUFFO0FBQUEsRUFDbkY7QUFDSjtBQUdPLFNBQVMsU0FDWixNQUNBLFVBQ0EsV0FDQSxRQUFtQixRQUFRLFlBQ0Y7QUFDekIsVUFBUSxLQUFLLE1BQU07QUFBQSxJQUNmLEtBQUs7QUFDRCxhQUFPLFFBQVEsa0JBQWtCLEtBQUssVUFBVSxDQUFDLFlBQVksU0FBUyxTQUFTLFVBQVUsV0FBVyxLQUFLLENBQUM7QUFBQSxJQUM5RyxLQUFLO0FBQ0QsWUFBTSxhQUFhLEtBQUssU0FDbkIsT0FBTyxDQUFDLFNBQXdELEtBQUssU0FBUyxRQUFRLEVBQ3RGLElBQUksQ0FBQ0MsT0FBTUEsR0FBRSxNQUFNO0FBQ3hCLFVBQUksa0JBQWtCLFFBQVEsVUFBVSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7QUFFOUQsaUJBQVcsV0FBVyxLQUFLLFVBQVU7QUFDakMsWUFBSSxRQUFRLFNBQVM7QUFBVTtBQUUvQixjQUFNLGlCQUFpQixTQUFTLFNBQVMsVUFBVSxXQUFXLGVBQWU7QUFDN0UsWUFBSSxDQUFDLGVBQWU7QUFBWSxpQkFBTyxlQUFlLEtBQUs7QUFFM0QsY0FBTSxZQUFZLGVBQWU7QUFDakMsMEJBQWtCLFFBQVEsVUFBVSxDQUFDLGlCQUFpQixTQUFTLENBQUM7QUFFaEUsWUFBSSxnQkFBZ0IsU0FBUztBQUFXLGlCQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU87QUFBQSxNQUNqRjtBQUVBLGFBQU8sT0FBTyxRQUFRLGVBQWU7QUFBQSxJQUN6QyxLQUFLO0FBQ0QsYUFBTyxTQUFTLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxFQUFFLElBQUksUUFBUSxNQUFNO0FBQUEsSUFDaEYsS0FBSztBQUNELGFBQU8sT0FBTyxRQUFRLEtBQUssTUFBTTtBQUFBLElBQ3JDLEtBQUs7QUFFRCxZQUFNLGFBQWEsUUFBUSxRQUFRLFFBQVEsVUFBVSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsR0FBRyxTQUFTLFFBQVE7QUFDakcsYUFBTyxXQUFXLFlBQVksS0FBSyxZQUFZLFdBQVcsUUFBUSxFQUFFLElBQUksUUFBUSxJQUFJO0FBQUEsRUFDNUY7QUFDSjtBQUdPLFNBQVMsV0FDWixZQUNBLE1BQ0EsV0FDQSxVQUNzQjtBQUN0QixRQUFNLFNBQVMsb0JBQUksSUFBTztBQUMxQixhQUFXLGFBQWEsWUFBWTtBQUNoQyxVQUFNLFNBQVMsU0FBUyxLQUFLLFNBQVM7QUFDdEMsUUFBSSxDQUFDO0FBQVE7QUFFYixVQUFNLFFBQVEsVUFBVSxTQUFTLE1BQU0sVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxRQUFJLENBQUMsTUFBTSxZQUFZO0FBQ25CLGFBQU8sT0FBTyxRQUFRLHNDQUFzQyxZQUFZLFNBQVMsSUFBSSxPQUFPLE1BQU0sT0FBTztBQUFBLElBQzdHLE9BQU87QUFDSCxVQUFJLFNBQVMsU0FBUyxNQUFNLEtBQUs7QUFBRyxlQUFPLElBQUksU0FBUztBQUFBLElBQzVEO0FBQUEsRUFDSjtBQUVBLFNBQU8sT0FBTyxRQUFRLE1BQU07QUFDaEM7QUFHTyxTQUFTLGFBQWdCLE1BQWtCLFVBQXVDO0FBQ3JGLFFBQU0sWUFBWSxZQUFZLGlCQUFpQixNQUFNLG9CQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLENBQUM7QUFJdkYsTUFBSSxVQUFVLFFBQVE7QUFBRyxXQUFPLFFBQVE7QUFFeEMsU0FBTyxRQUFRLFVBQVUsV0FBVyxDQUFDLGFBQWEsU0FBUyxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsT0FBTyxTQUFTLENBQUMsQ0FBQztBQUNuSDtBQWFPLElBQVU7QUFBQSxDQUFWLENBQVVDLGlCQUFWO0FBQ0ksV0FBUyxPQUFVQyxTQUFrQztBQUN4RCxXQUFPLEVBQUUsTUFBTSxVQUFVLFFBQUFBLFFBQU87QUFBQSxFQUNwQztBQUZPLEVBQUFELGFBQVM7QUFJVCxXQUFTLElBQU8sVUFBMEM7QUFDN0QsUUFBSSxTQUFTLFVBQVU7QUFBRyxhQUFPLE9BQU8sUUFBUSxVQUFVO0FBQUEsYUFDakQsU0FBUyxVQUFVO0FBQUcsYUFBTyxTQUFTLENBQUM7QUFBQTtBQUMzQyxhQUFPLEVBQUUsTUFBTSxPQUFPLFVBQVUsU0FBUztBQUFBLEVBQ2xEO0FBSk8sRUFBQUEsYUFBUztBQU1ULFdBQVMsR0FBTSxVQUEwQztBQUM1RCxRQUFJLFNBQVMsVUFBVTtBQUFHLGFBQU8sT0FBTyxRQUFRLE9BQU87QUFBQSxhQUM5QyxTQUFTLFVBQVU7QUFBRyxhQUFPLFNBQVMsQ0FBQztBQUFBO0FBQzNDLGFBQU8sRUFBRSxNQUFNLE1BQU0sVUFBVSxTQUFTO0FBQUEsRUFDakQ7QUFKTyxFQUFBQSxhQUFTO0FBTVQsV0FBUyxJQUFPLE9BQXFDO0FBQ3hELFFBQUksTUFBTSxTQUFTO0FBQVUsYUFBTyxFQUFFLE1BQU0sVUFBVSxRQUFRLFFBQVEsT0FBTyxNQUFNLE1BQU0sRUFBRTtBQUFBO0FBQ3RGLGFBQU8sRUFBRSxNQUFNLE9BQU8sU0FBUyxNQUFNO0FBQUEsRUFDOUM7QUFITyxFQUFBQSxhQUFTO0FBQUEsR0FqQkg7OztBQ2hSVixJQUFNLFlBQU4sTUFBZ0I7QUFBQSxFQThCWixZQUFtQixPQUFxQixlQUFxQyxVQUFvQjtBQUE5RTtBQUFxQjtBQUFxQztBQUNoRixTQUFLLFdBQVc7QUFDaEIsU0FBSyxNQUFNLG9CQUFJLElBQUk7QUFDbkIsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFDdkIsU0FBSyxXQUFXLG9CQUFJLElBQUk7QUFFeEIsU0FBSyxRQUFRLElBQUksY0FBYztBQUMvQixTQUFLLFFBQVEsSUFBSSxjQUFjO0FBQy9CLFNBQUssT0FBTyxJQUFJLGNBQWM7QUFDOUIsU0FBSyxRQUFRLElBQUksY0FBYztBQUMvQixTQUFLLFNBQVMsS0FBSyxrQkFBa0I7QUFDckMsU0FBSyxTQUFTLElBQUksWUFBWSxLQUFLO0FBQUEsRUFDdkM7QUFBQTtBQUFBLEVBR0EsSUFBVyxPQUFlO0FBQ3RCLFdBQU8sS0FBSyxRQUFRO0FBQUEsRUFDeEI7QUFBQTtBQUFBLEVBR08sUUFBUTtBQUNYLFNBQUssWUFBWTtBQUFBLEVBQ3JCO0FBQUE7QUFBQSxFQVFBLEtBQUssSUFBNEQ7QUFDN0QsUUFBSSxNQUFNLFFBQVEsRUFBRSxHQUFHO0FBQ25CLGFBQU8sR0FBRyxJQUFJLENBQUNFLE9BQU0sS0FBSyxLQUFLQSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBMEIsUUFBUSxNQUFTO0FBQUEsSUFDMUY7QUFFQSxXQUFPLEtBQUssUUFBUSxJQUFJLEVBQUU7QUFBQSxFQUM5QjtBQUFBO0FBQUEsRUFHUSxvQkFBNkM7QUFDakQsVUFBTSxTQUFTLG9CQUFJLElBQXdCO0FBRzNDLFdBQU87QUFBQSxNQUNIO0FBQUEsTUFDQSxJQUFJO0FBQUEsUUFDQSxNQUFNLEtBQUs7QUFBQSxRQUNYLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxFQUFFO0FBQUEsTUFDL0I7QUFBQSxJQUNKO0FBQ0EsV0FBTyxJQUFJLFVBQVUsSUFBSSxxQkFBcUIsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUM3RCxXQUFPLElBQUksYUFBYSxJQUFJLHFCQUFxQixNQUFNLEtBQUssR0FBRyxDQUFDO0FBQ2hFLFdBQU8sSUFBSSxhQUFhLElBQUkscUJBQXFCLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFHaEUsV0FBTyxJQUFJLGNBQWMsSUFBSSxnQkFBZ0IsQ0FBQztBQUM5QyxXQUFPLElBQUksV0FBVyxJQUFJLGdCQUFnQixDQUFDO0FBRTNDLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sTUFBMkIsUUFBaUIsV0FBMEI7QUFDekUsU0FBSyxnQkFBZ0IsUUFBUSxLQUFLLFlBQVksV0FBVyxNQUFTO0FBQUEsRUFDdEU7QUFBQTtBQUFBLEVBR1EsZ0JBQ0osUUFDQSxVQUNBLFdBQ0EsUUFDRjtBQUVFLFFBQUksU0FBUyxRQUFRLE1BQU0sR0FBRztBQUMxQixlQUFTLFdBQVcsUUFBUTtBQUN4QixhQUFLLGdCQUFnQixTQUFTLFVBQVUsV0FBVyxNQUFNO0FBQUEsTUFDN0Q7QUFFQTtBQUFBLElBQ0o7QUFJQSxTQUFLLGlCQUFpQixPQUFPLEdBQUc7QUFHaEMsV0FBTyxZQUFZO0FBQ25CLFdBQU8sVUFBVTtBQUdqQixTQUFLLElBQUksSUFBSSxPQUFPLEdBQUc7QUFDdkIsU0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLE1BQU07QUFHbkMsUUFBSSxRQUFRO0FBQ1IsVUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sR0FBRztBQUFHLGFBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxvQkFBSSxJQUFJLENBQUM7QUFDM0UsV0FBSyxTQUFTLElBQUksT0FBTyxHQUFHLEVBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUNqRDtBQUVBLFNBQUssT0FBTyxNQUFNO0FBR2xCLDJDQUFZLFFBQVEsQ0FBQyxVQUFVLGFBQWEsS0FBSyxnQkFBZ0IsVUFBVSxVQUFVLFVBQVUsTUFBTTtBQUFBLEVBQ3pHO0FBQUE7QUFBQSxFQUdPLE9BQU8sSUFBcUI7QUFDL0IsUUFBSSxLQUFLLGlCQUFpQixFQUFFLEdBQUc7QUFDM0IsV0FBSztBQUNMLGFBQU87QUFBQSxJQUNYO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR1EsaUJBQWlCLElBQXFCO0FBQzFDLFVBQU0sU0FBUyxLQUFLLFFBQVEsSUFBSSxFQUFFO0FBQ2xDLFFBQUksQ0FBQyxRQUFRO0FBQ1QsYUFBTztBQUFBLElBQ1g7QUFHQSxVQUFNLFdBQVcsS0FBSyxTQUFTLElBQUksRUFBRTtBQUNyQyxRQUFJLFVBQVU7QUFDVixlQUFTLFNBQVMsVUFBVTtBQUN4QixhQUFLLGlCQUFpQixLQUFLO0FBQUEsTUFDL0I7QUFFQSxXQUFLLFNBQVMsT0FBTyxFQUFFO0FBQUEsSUFDM0I7QUFHQSxTQUFLLFNBQVMsTUFBTTtBQUNwQixTQUFLLElBQUksT0FBTyxFQUFFO0FBQ2xCLFNBQUssUUFBUSxPQUFPLEVBQUU7QUFDdEIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR1EsT0FBTyxRQUFtQjtBQUM5QixTQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxNQUFNO0FBR3hDLFFBQUksT0FBTyxPQUFPLFNBQVMsYUFBYSxLQUFLLGVBQWUsUUFBUSxPQUFPLEdBQUc7QUFDMUUsWUFBTSxPQUFPLE9BQU87QUFFcEIsV0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLElBQUk7QUFDL0IsV0FBSyxLQUFLLElBQUksT0FBTyxLQUFLLGVBQWUsSUFBSSxDQUFDO0FBQUEsSUFDbEQ7QUFHQSxRQUFJLE9BQU8sT0FBTyxTQUFTLGdCQUFnQixLQUFLLGVBQWUsUUFBUSxRQUFRLEdBQUc7QUFDOUUsV0FBSyxNQUFNO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDTixPQUFPLE9BQWtCLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDO0FBQUEsTUFDL0Q7QUFBQSxJQUNKO0FBR0EsUUFBSSxPQUFPLE9BQU8sU0FBUyxpQkFBaUIsS0FBSyxZQUFZLFFBQVE7QUFDakUsaUJBQVcsU0FBUyxPQUFPLFFBQTJCO0FBQ2xELGNBQU0sT0FBTyxNQUFNLElBQUksWUFBWTtBQUNuQyxZQUFJLENBQUMsS0FBSyxPQUFPLElBQUksSUFBSTtBQUFHLGVBQUssT0FBTyxJQUFJLE1BQU0sSUFBSSxjQUFjLENBQUM7QUFFckUsYUFBSyxPQUFPLElBQUksSUFBSSxFQUFHLElBQUksT0FBTyxLQUFLLE1BQU0sS0FBSztBQUFBLE1BQ3REO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsU0FBUyxRQUFtQjtBQUNoQyxTQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUssT0FBTyxNQUFNO0FBRTNDLFFBQUksT0FBTyxPQUFPLFNBQVMsYUFBYSxLQUFLLGVBQWUsUUFBUSxPQUFPLEdBQUc7QUFDMUUsWUFBTSxPQUFPLE9BQU87QUFFcEIsV0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLElBQUk7QUFDbEMsV0FBSyxLQUFLLE9BQU8sT0FBTyxLQUFLLGVBQWUsSUFBSSxDQUFDO0FBQUEsSUFDckQ7QUFFQSxRQUFJLE9BQU8sT0FBTyxTQUFTLGdCQUFnQixLQUFLLGVBQWUsUUFBUSxRQUFRLEdBQUc7QUFHOUUsV0FBSyxNQUFNO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDTixPQUFPLE9BQWtCLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDO0FBQUEsTUFDL0Q7QUFBQSxJQUNKO0FBRUEsUUFBSSxPQUFPLE9BQU8sU0FBUyxpQkFBaUIsS0FBSyxZQUFZLFFBQVE7QUFDakUsaUJBQVcsU0FBUyxPQUFPLFFBQTJCO0FBQ2xELGNBQU0sT0FBTyxNQUFNLElBQUksWUFBWTtBQUNuQyxZQUFJLENBQUMsS0FBSyxPQUFPLElBQUksSUFBSTtBQUFHO0FBRTVCLGFBQUssT0FBTyxJQUFJLElBQUksRUFBRyxPQUFPLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFBQSxNQUN6RDtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdPLFFBQVE7QUFDWCxTQUFLLElBQUksTUFBTTtBQUNmLFNBQUssUUFBUSxNQUFNO0FBQ25CLFNBQUssU0FBUyxNQUFNO0FBRXBCLFNBQUssTUFBTSxNQUFNO0FBQ2pCLFNBQUssS0FBSyxNQUFNO0FBQ2hCLFNBQUssTUFBTSxNQUFNO0FBQ2pCLFNBQUssTUFBTSxNQUFNO0FBQ2pCLFNBQUssT0FBTyxNQUFNO0FBRWxCLFNBQUs7QUFBQSxFQUNUO0FBQUE7QUFBQSxFQUdPLFlBQVksU0FBd0IsWUFBNEM7QUFDbkYsUUFBSSxPQUFPLE9BQU8sWUFBWSxXQUFXLEtBQUssV0FBVyxPQUFPLElBQUk7QUFFcEUsUUFBSSxZQUFZO0FBQ1osWUFBTSxXQUFXLEtBQUssY0FBYyxxQkFBcUIsS0FBSyxNQUFNLFVBQVU7QUFDOUUsVUFBSTtBQUFVLGVBQU8sS0FBSyxTQUFTLFNBQVMsSUFBSTtBQUFBLElBQ3BEO0FBRUEsVUFBTSxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSTtBQUN2QyxRQUFJLENBQUM7QUFBTSxhQUFPO0FBRWxCLFFBQUksS0FBSyxTQUFTO0FBQVEsYUFBTztBQUdqQyxRQUFJLEVBQUUsZ0JBQWdCO0FBQWUsYUFBTztBQUU1QyxRQUFJLEtBQUssU0FBUyxVQUFVO0FBQ3hCLFlBQU0sVUFBVSxLQUFLLFVBQVU7QUFBQSxRQUMzQixDQUFDLFFBQVEsdUJBQXVCLElBQUksTUFBTSxLQUFLLEtBQUssV0FBVyxJQUFJLFVBQVUsS0FBSztBQUFBLE1BQ3RGO0FBRUEsVUFBSTtBQUFTLGVBQU87QUFBQTtBQUNmLGVBQU87QUFBQSxJQUNoQixXQUFXLEtBQUssU0FBUyxTQUFTO0FBQzlCLGlCQUFXLFdBQVcsS0FBSyxXQUFXO0FBQ2xDLGNBQU0sUUFBUSxRQUFRLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRyxhQUFhLEtBQUssT0FBTztBQUV2RSxZQUFJO0FBQU8saUJBQU87QUFBQSxNQUN0QjtBQUVBLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxZQUFNLElBQUksTUFBTSwyQkFBMkIsS0FBSyxNQUFNO0FBQUEsSUFDMUQ7QUFBQSxFQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLE9BQU8sT0FBbUIsVUFBb0U7QUFyVHpHO0FBc1RRLFVBQU0sUUFBUSxLQUFLLElBQUk7QUFFdkIsVUFBTSxjQUFjLEtBQUssUUFBUSxPQUFPLFFBQVE7QUFDaEQsUUFBSSxDQUFDLFlBQVk7QUFBWSxhQUFPLFlBQVksS0FBSztBQUNyRCxVQUFNLFNBQVMsUUFBUSxRQUFRLFlBQVksT0FBTyxLQUFLLEdBQUc7QUFFMUQsVUFBTSxVQUF1QixDQUFDO0FBQzlCLFFBQUksY0FBYztBQUNsQixhQUFTLE1BQU0sUUFBUTtBQUNuQixZQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksRUFBRTtBQUNsQyxVQUFJLFFBQVE7QUFDUixnQkFBUSxLQUFLLE1BQU07QUFDbkIsc0JBQWMsS0FBSyxJQUFJLGNBQWEsWUFBTyxjQUFQLFlBQW9CLENBQUM7QUFBQSxNQUM3RDtBQUFBLElBQ0o7QUFFQSxXQUFPLE9BQU8sUUFBUTtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFBQSxNQUNqQyxVQUFVO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUEsRUFHUSxRQUFRLE9BQW1CLFVBQTJEO0FBQzFGLFVBQU0sYUFBYSxxQ0FBVTtBQUM3QixVQUFNLE9BQU8sYUFBYSxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUk7QUFFekQsVUFBTSxZQUFZLElBQUk7QUFBQSxNQUNsQjtBQUFBLFFBQ0ksUUFBUSxDQUFDLFNBQ0wsS0FBSyxZQUFZLE9BQU8sUUFBUSxXQUFXLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxVQUFVLEtBQUs7QUFBQSxRQUN0RixTQUFTLENBQUMsU0FBYztBQXZWeEM7QUF3Vm9CLDRCQUFLLFlBQVksT0FBTyxRQUFRLFdBQVcsS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLFVBQVUsTUFBN0UsWUFBa0Y7QUFBQTtBQUFBLFFBQ3RGLFdBQVcsQ0FBQyxTQUFjO0FBelYxQztBQTBWb0Isa0NBQUssY0FBYyxxQkFBcUIsTUFBTSxrQ0FBYyxFQUFFLE1BQTlELG1CQUFpRSxTQUFqRSxZQUF5RTtBQUFBO0FBQUEsTUFDakY7QUFBQSxNQUNBLEtBQUs7QUFBQSxJQUNUO0FBR0EsUUFBSTtBQUFNLGdCQUFVLElBQUksUUFBUSxJQUFJO0FBRXBDLFVBQU0sV0FBa0M7QUFBQSxNQUNwQyxVQUFVLEtBQUs7QUFBQSxNQUNmLFNBQVMsQ0FBQyxTQUFTLEtBQUssZUFBZSxNQUFNLFFBQVE7QUFBQSxNQUNyRCxrQkFBa0IsQ0FBQyxTQUFTLEtBQUssa0JBQWtCLE1BQU0sUUFBUTtBQUFBLE1BQ2pFLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO0FBQUEsSUFDOUI7QUFFQSxXQUFPLFFBQVEsY0FBYyxLQUFLLEdBQUcsVUFBVSxTQUFTO0FBQUEsRUFDNUQ7QUFBQSxFQUVRLGVBQWUsT0FBb0IsVUFBMkQ7QUE1VzFHO0FBNldRLFlBQVEsTUFBTSxNQUFNO0FBQUEsTUFDaEIsS0FBSztBQUVELGNBQU0sZUFBZSxLQUFLLFFBQVEsTUFBTSxTQUFTLFFBQVE7QUFDekQsWUFBSSxDQUFDLGFBQWE7QUFBWSxpQkFBTyxhQUFhLEtBQUs7QUFFdkQsY0FBTSxVQUFVLGFBQWE7QUFDN0IsWUFBSSxRQUFRLE1BQU0sT0FBTyxHQUFHO0FBQ3hCLGlCQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU87QUFBQSxRQUN6QyxXQUFXLFFBQVEsU0FBUyxjQUFjO0FBQ3RDLGNBQUksTUFBTTtBQUFXLG1CQUFPLE9BQU8sUUFBUSxRQUFRLFVBQVU7QUFHN0QsZ0JBQU0sY0FBYyxvQkFBSSxJQUFZO0FBQ3BDLHFCQUFXLFdBQVcsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUN6QyxnQkFBSSxRQUFRO0FBQVMsMEJBQVksSUFBSSxRQUFRLEdBQUc7QUFBQSxVQUNwRDtBQUVBLGlCQUFPLE9BQU8sUUFBUSxRQUFRLEtBQUssV0FBVyxDQUFDO0FBQUEsUUFDbkQ7QUFFQSxjQUFNLGtCQUFrQixRQUFRLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDekQsY0FBTSxlQUFlLElBQUksSUFBWSxNQUFNLFlBQVksa0JBQWtCLENBQUMsQ0FBQztBQUUzRSxtQkFBVyxVQUFVLGlCQUFpQjtBQUNsQyxxQkFBVyxTQUFTLEtBQUssaUJBQWlCLE1BQU0sR0FBRztBQUMvQyx5QkFBYSxJQUFJLEtBQUs7QUFBQSxVQUMxQjtBQUFBLFFBQ0o7QUFFQSxlQUFPLE9BQU8sUUFBUSxRQUFRLEtBQUssWUFBWSxDQUFDO0FBQUEsTUFDcEQsS0FBSztBQUVELGNBQU0sZ0JBQWdCLEtBQUssUUFBUSxNQUFNLFVBQVUsUUFBUTtBQUMzRCxZQUFJLENBQUMsY0FBYztBQUFZLGlCQUFPLGNBQWMsS0FBSztBQUN6RCxjQUFNLFdBQVcsY0FBYztBQUUvQixZQUFJLFFBQVEsTUFBTSxRQUFRLEdBQUc7QUFDekIsaUJBQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLFFBQ3pDLFdBQVcsU0FBUyxTQUFTLGNBQWM7QUFDdkMsY0FBSSxNQUFNO0FBQVcsbUJBQU8sT0FBTyxRQUFRLFFBQVEsVUFBVTtBQUU3RCxpQkFBTyxPQUFPLFFBQVEsUUFBUSxLQUFLLElBQUksSUFBSSxLQUFLLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBLFFBQ3JFO0FBRUEsY0FBTSxtQkFBbUIsUUFBUSxRQUFRLFVBQVUsS0FBSyxHQUFHO0FBQzNELGNBQU0sZ0JBQWdCLElBQUksSUFBWSxNQUFNLFlBQVksbUJBQW1CLENBQUMsQ0FBQztBQUU3RSxtQkFBVyxTQUFTLGtCQUFrQjtBQUNsQyxxQkFBVyxVQUFVLEtBQUssZ0JBQWdCLEtBQUssR0FBRztBQUM5QywwQkFBYyxJQUFJLE1BQU07QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFFQSxlQUFPLE9BQU8sUUFBUSxRQUFRLEtBQUssYUFBYSxDQUFDO0FBQUEsTUFDckQsS0FBSztBQUNELFlBQUksTUFBTSxZQUFZLE1BQU0sV0FBVztBQUFHLGlCQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU87QUFHL0UsY0FBTSxlQUFlLEtBQUssUUFBUSxNQUFNLFFBQVEsUUFBUTtBQUN4RCxZQUFJLENBQUMsYUFBYTtBQUFZLGlCQUFPLGFBQWEsS0FBSztBQUN2RCxjQUFNLFVBQVUsYUFBYTtBQUU3QixZQUFJLFFBQVEsTUFBTSxPQUFPO0FBQUcsaUJBQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLGlCQUN4RCxRQUFRLFNBQVMsY0FBYztBQUNwQyxjQUFJLE1BQU07QUFBVyxtQkFBTyxPQUFPLFFBQVEsUUFBUSxVQUFVO0FBQUE7QUFDeEQsbUJBQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLFFBQzlDO0FBRUEsY0FBTSxrQkFBa0IsUUFBUSxRQUFRLFNBQVMsS0FBSyxHQUFHO0FBQ3pELGNBQU0sYUFBWSxXQUFNLGNBQU4sWUFBbUI7QUFDckMsY0FBTSxVQUFVLEtBQUs7QUFBQSxVQUFnQjtBQUFBLFdBQWlCLFdBQU0sYUFBTixZQUFrQjtBQUFBLFVBQUcsQ0FBQyxPQUN4RSxLQUFLLHVCQUF1QixJQUFJLFNBQVM7QUFBQSxRQUM3QztBQUVBLFlBQUksQ0FBQyxNQUFNO0FBQ1AsaUJBQU8sT0FBTyxRQUFRLFFBQVEsS0FBSyxRQUFRLHFCQUFxQixTQUFTLGVBQWUsQ0FBQyxDQUFDO0FBQUE7QUFDekYsaUJBQU8sT0FBTyxRQUFRLFFBQVEsS0FBSyxPQUFPLENBQUM7QUFBQSxNQUNwRDtBQUNJLGVBQU8sT0FBTyxRQUFRLEtBQUssa0JBQWtCLE9BQU8sUUFBUSxDQUFDO0FBQUEsSUFDckU7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdRLGtCQUFrQixPQUF1QixVQUEyQztBQWpjaEc7QUFrY1EsWUFBUSxNQUFNLE1BQU07QUFBQSxNQUNoQixLQUFLO0FBQ0QsZUFBTyxRQUFRLFNBQVMsTUFBTSxRQUFRO0FBQUEsTUFDMUMsS0FBSztBQUNELGNBQU0sY0FBYyxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUs7QUFDaEQsZUFBTyxjQUFjLFFBQVEsS0FBSyxvQkFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVE7QUFBQSxNQUM1RSxLQUFLO0FBQ0QsY0FBTSxnQkFBZSxVQUFLLGNBQWM7QUFBQSxVQUNwQyxNQUFNLE1BQU07QUFBQSxXQUNaLDBDQUFVLGVBQVYsWUFBd0I7QUFBQSxRQUM1QixNQUhxQixtQkFHbEI7QUFDSCxjQUFNLFdBQVcsZUFBZSxNQUFNLE1BQU0sU0FBUyxZQUFZLElBQUksTUFBTTtBQUUzRSxjQUFNLFNBQVMsS0FBSyxZQUFZLFFBQVE7QUFDeEMsZUFBTyxTQUFTLFFBQVEsS0FBSyxvQkFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVE7QUFBQSxNQUNsRSxLQUFLO0FBQ0QsZUFBTyxRQUFRLGFBQWEsS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxNQUMzRCxLQUFLO0FBQ0QsWUFBSSxNQUFNLE9BQU87QUFDYixpQkFBTyxRQUFRLGFBQWEsS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxRQUMzRCxPQUFPO0FBQ0gsaUJBQU8sUUFBUSxhQUFhLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBQUEsUUFDMUQ7QUFBQSxNQUNKLEtBQUs7QUFDRCxZQUFJO0FBQ0osWUFBSSxNQUFNLE9BQU87QUFDYixxQkFBVyxLQUFLLE9BQU8sU0FBUyxNQUFNLEtBQUs7QUFBQSxRQUMvQyxPQUFPO0FBQ0gsY0FBSSxNQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVM7QUFBSyxtQkFBTyxRQUFRO0FBRTVELHFCQUFXLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSztBQUFBLFFBQzFDO0FBRUEsWUFBSSxTQUFTLFFBQVE7QUFBRyxpQkFBTyxRQUFRO0FBR3ZDLGNBQU0sU0FBUyxJQUFJLElBQUksUUFBUTtBQUMvQixpQkFBUyxPQUFPLFVBQVU7QUFDdEIsbUJBQVMsU0FBUyxLQUFLLGlCQUFpQixHQUFHLEdBQUc7QUFDMUMsbUJBQU8sSUFBSSxLQUFLO0FBQUEsVUFDcEI7QUFBQSxRQUNKO0FBRUEsZUFBTyxRQUFRLEtBQUssTUFBTTtBQUFBLE1BQzlCLEtBQUs7QUFDRCxjQUFNLFVBQVUsTUFBTSxNQUFNLFlBQVk7QUFDeEMsY0FBTSxhQUFhLEtBQUssT0FBTyxJQUFJLE9BQU87QUFDMUMsWUFBSSxjQUFjO0FBQU0saUJBQU8sUUFBUTtBQUV2QyxlQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksQ0FBQztBQUFBLE1BQ3hDLEtBQUs7QUFDRCxlQUFPLFFBQVE7QUFBQSxVQUFVLE1BQU07QUFBQSxVQUFRLENBQUMsVUFDcEMsS0FBSztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ04sQ0FBQ0MsV0FBVUEsT0FBTSxPQUFPLEtBQUs7QUFBQSxZQUM3QixDQUFDLFVBQVUsU0FBUyxRQUFRLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFBQSxVQUN2RDtBQUFBLFFBQ0o7QUFBQSxJQUNSO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHUSxjQUNKLEtBQ0EsTUFDQSxNQUNjO0FBQ2QsVUFBTSxVQUFVLElBQUksWUFBWTtBQUNoQyxVQUFNQSxTQUFRLEtBQUssT0FBTyxJQUFJLE9BQU87QUFDckMsUUFBSUEsVUFBUztBQUFNLGFBQU8sUUFBUTtBQUVsQyxVQUFNLGFBQWEsS0FBS0EsTUFBSztBQUM3QixRQUFJLGNBQWM7QUFBTSxhQUFPLFFBQVEsS0FBSyxVQUFVO0FBR3RELFVBQU0sVUFBVSxvQkFBSSxJQUFZO0FBQ2hDLGVBQVcsWUFBWUEsT0FBTSxJQUFJLEdBQUc7QUFDaEMsWUFBTSxTQUFTLEtBQUssUUFBUSxJQUFJLFFBQVE7QUFDeEMsVUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLE9BQU8sU0FBUyxpQkFBaUI7QUFBRztBQUUzRCxZQUFNLFFBQVMsT0FBK0IsTUFBTSxPQUFPO0FBQzNELFVBQUksQ0FBQztBQUFPO0FBRVosVUFBSSxLQUFLLEtBQUs7QUFBRyxnQkFBUSxJQUFJLFFBQVE7QUFBQSxJQUN6QztBQUVBLFdBQU8sUUFBUSxLQUFLLE9BQU87QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNUSxnQkFDSixXQUNBLFVBQ0EsVUFDVztBQUNYLFFBQUksV0FBVztBQUFHLGFBQU8sb0JBQUksSUFBSTtBQUNqQyxRQUFJLFVBQVUsUUFBUTtBQUFHLGFBQU8sb0JBQUksSUFBSTtBQUV4QyxVQUFNLFVBQVUsSUFBSSxJQUFZLFNBQVM7QUFFekMsVUFBTSxRQUFRLElBQUksVUFBa0I7QUFDcEMsZUFBVyxXQUFXO0FBQVcsWUFBTSxLQUFLLFNBQVMsQ0FBQztBQUV0RCxXQUFPLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLFlBQU0sT0FBTyxNQUFNLFVBQVU7QUFDN0IsWUFBTSxVQUFVLE1BQU0sSUFBSTtBQUUxQixpQkFBVyxZQUFZLFNBQVMsT0FBTyxHQUFHO0FBQ3RDLFlBQUksUUFBUSxJQUFJLFFBQVE7QUFBRztBQUUzQixnQkFBUSxJQUFJLFFBQVE7QUFDcEIsWUFBSSxPQUFPO0FBQVUsZ0JBQU0sS0FBSyxVQUFVLE9BQU8sQ0FBQztBQUFBLE1BQ3REO0FBQUEsSUFDSjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLENBQVMsdUJBQXVCLElBQVksV0FBZ0U7QUFDeEcsVUFBTSxTQUFTLEtBQUssUUFBUSxJQUFJLEVBQUU7QUFDbEMsUUFBSSxDQUFDO0FBQVE7QUFFYixTQUFLLGNBQWMsVUFBVSxjQUFjLGVBQWUsV0FBVyxVQUFVLE9BQU8sT0FBTyxHQUFHO0FBQzVGLFlBQU0sV0FBVyxLQUFLLE1BQU0sSUFBSyxPQUFPLE1BQWUsYUFBYSxDQUFDO0FBQ3JFLFVBQUksVUFBVTtBQUNWLG1CQUFXQyxPQUFNLFVBQVU7QUFDdkIsZ0JBQU1BO0FBQUEsUUFDVjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsU0FDSyxjQUFjLFVBQVUsY0FBYyxlQUN2QyxPQUFPLE9BQU8sU0FBUyxhQUFhLEtBQ3BDLGVBQWUsUUFBUSxRQUFRLEdBQ2pDO0FBQ0UsaUJBQVcsUUFBUSxPQUFPLFFBQWtCO0FBQ3hDLGNBQU0sV0FBVyxLQUFLLFlBQVksSUFBSTtBQUN0QyxZQUFJO0FBQVUsZ0JBQU0sU0FBUztBQUFBLE1BQ2pDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR0EsQ0FBUyxnQkFBZ0IsT0FBa0M7QUFDdkQsUUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLEtBQUs7QUFDbkMsV0FBTyxXQUFVLGlDQUFRLFVBQVM7QUFDOUIsWUFBTSxPQUFPLFFBQVE7QUFDckIsZUFBUyxPQUFPO0FBQUEsSUFDcEI7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdBLENBQVMsaUJBQWlCLFFBQW1DO0FBQ3pELFVBQU0sV0FBVyxLQUFLLFNBQVMsSUFBSSxNQUFNO0FBQ3pDLFFBQUksWUFBWSxTQUFTLE9BQU8sR0FBRztBQUMvQixlQUFTLFNBQVMsVUFBVTtBQUN4QixjQUFNO0FBQ04sZUFBTyxLQUFLLGlCQUFpQixLQUFLO0FBQUEsTUFDdEM7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNKO0FBMkJBLFNBQVMsZUFDTCxRQUNBLEtBQ3NDO0FBQ3RDLFNBQU8sT0FBTyxVQUFVLE9BQU8sR0FBRyxNQUFNLFVBQWEsT0FBTyxZQUFZLE9BQU8sR0FBRztBQUN0Rjs7O0FDeG9CQSx5QkFBd0I7QUFhakIsSUFBTSxvQkFBTixNQUF3QjtBQUFBLEVBR3BCLFlBQW1CLE9BQXNCLFNBQWlCO0FBQXZDO0FBQXNCO0FBQzVDLFNBQUssWUFBWSxtQkFBQUMsUUFBWSxlQUFlO0FBQUEsTUFDeEMsTUFBTSxvQkFBb0I7QUFBQSxNQUMxQixRQUFRLENBQUMsbUJBQUFBLFFBQVksU0FBUztBQUFBLE1BQzlCLGFBQWE7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUEsRUFHQSxNQUFhLFdBQVc7QUFDcEIsVUFBTSxtQkFBQUEsUUFBWSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsS0FBSyxNQUFNLENBQUM7QUFFdkUsU0FBSyxZQUFZLG1CQUFBQSxRQUFZLGVBQWU7QUFBQSxNQUN4QyxNQUFNLG9CQUFvQixLQUFLO0FBQUEsTUFDL0IsUUFBUSxDQUFDLG1CQUFBQSxRQUFZLFNBQVM7QUFBQSxNQUM5QixhQUFhO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0w7QUFBQTtBQUFBLEVBR0EsTUFBYSxTQUFTLE1BQWdFO0FBQ2xGLFdBQU8sS0FBSyxVQUFVLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQzVELGFBQU87QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQSxFQUdBLE1BQWEsVUFBVSxNQUFjLE1BQW1DO0FBQ3BFLFVBQU0sS0FBSyxVQUFVLFFBQVEsS0FBSyxRQUFRLElBQUksR0FBRztBQUFBLE1BQzdDLFNBQVMsS0FBSztBQUFBLE1BQ2QsTUFBTSxLQUFLLElBQUk7QUFBQSxNQUNmO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUEsRUFHQSxNQUFhLFlBQVksVUFBd0Q7QUFDN0UsUUFBSSxPQUFPLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDO0FBQ3hDLGFBQVMsU0FBUztBQUFVLFdBQUssT0FBTyxLQUFLO0FBRzdDLGFBQVMsT0FBTztBQUFNLFlBQU0sS0FBSyxVQUFVLFdBQVcsS0FBSyxRQUFRLEdBQUcsQ0FBQztBQUV2RSxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHQSxNQUFhLFVBQTZCO0FBQ3RDLFdBQU8sS0FBSyxVQUFVLEtBQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUEsRUFHQSxNQUFhLFdBQThCO0FBQ3ZDLFFBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtBQUM5QixXQUFPLEtBQUssT0FBTyxDQUFDQyxPQUFNQSxHQUFFLFdBQVcsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDQSxPQUFNQSxHQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQUEsRUFDOUU7QUFBQTtBQUFBLEVBR08sUUFBUSxNQUFzQjtBQUNqQyxXQUFPLFVBQVU7QUFBQSxFQUNyQjtBQUNKOzs7QUM1RWUsU0FBUixhQUE4QixZQUFZO0FBQy9DLE1BQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBQyxNQUFNLGtCQUFpQixDQUFDO0FBQzNELE1BQUksTUFBTSxJQUFJLGdCQUFnQixJQUFJO0FBQ2xDLE1BQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxFQUFDLFFBQU8sbUJBQWtCLENBQUM7QUFDeEQsTUFBSSxnQkFBZ0IsR0FBRztBQUN2QixTQUFPO0FBQ1Q7OztBQ05lLFNBQVJDLFVBQTBCO0FBQy9CLFNBQU8sYUFBYSw2bWxQQUF3cnZQO0FBQzlzdlA7OztBQ0FBLElBQUFDLG1CQUFvRTtBQUlwRSxtQkFBc0I7QUFXZixJQUFNLG1CQUFtQztBQUFBLEVBQzVDLFNBQVM7QUFBQSxFQUNULGFBQWE7QUFDakI7QUFHTyxJQUFNLGVBQU4sY0FBMkIsMkJBQVU7QUFBQSxFQWVqQyxZQUNJLE9BQ0EsYUFDQSxlQUNQLFVBQ0Y7QUFDRSxVQUFNO0FBTEM7QUFDQTtBQUNBO0FBSVAsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFDdkIsU0FBSyxXQUFXO0FBQ2hCLFNBQUssZUFBZTtBQUNwQixTQUFLLFdBQVcsOEJBQWEsTUFBTTtBQUVuQyxTQUFLLFFBQVEsSUFBSSxtQkFBTTtBQUN2QixTQUFLLGNBQWMsb0JBQUksSUFBSTtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLE9BQVUsTUFBeUI7QUFFdEMsUUFBSSxXQUFXLEtBQUssWUFBWSxJQUFJLEtBQUssSUFBSTtBQUM3QyxRQUFJO0FBQVUsYUFBTztBQUVyQixRQUFJLFVBQVUsU0FBWTtBQUUxQixTQUFLLFlBQVksSUFBSSxLQUFLLE1BQU0sT0FBTztBQUN2QyxTQUFLLE1BQU0sUUFBUSxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLFNBQUssU0FBUztBQUNkLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLGFBQWE7QUFDaEIsYUFBUyxVQUFVLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDdEMsYUFBTyxjQUFjLEtBQUssSUFBSTtBQUFBLElBQ2xDO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHQSxNQUFjLFdBQVc7QUFDckIsUUFBSSxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSztBQUFVO0FBRTdDLFVBQU0sU0FBUyxLQUFLLGdCQUFnQjtBQUNwQyxRQUFJLENBQUM7QUFBUTtBQUViLFVBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSSxLQUFLLE1BQU0sUUFBUTtBQUMzQyxXQUFPLFNBQVMsQ0FBQyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFFMUMsUUFBSTtBQUNBLGNBQVEsS0FBSyxXQUFXO0FBQUEsUUFDcEIsS0FBSztBQUFBLFFBQ0wsS0FBSyxNQUFNO0FBQ1AsZ0JBQU0sV0FBVyxNQUFNLEtBQUssTUFBTSxXQUFXLElBQUk7QUFDakQsaUJBQVEsT0FBTyxZQUFZO0FBQUEsWUFDdkIsTUFBTTtBQUFBLFlBQ04sTUFBTSxLQUFLO0FBQUEsWUFDWDtBQUFBLFlBQ0EsTUFBTSxLQUFLO0FBQUEsWUFDWCxVQUFVLEtBQUssY0FBYyxhQUFhLElBQUk7QUFBQSxVQUNsRCxDQUFtQjtBQUNuQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUssVUFBVTtBQUNYLGdCQUFNLFdBQVcsTUFBTSxLQUFLLE1BQU0sV0FBVyxJQUFJO0FBQ2pELGlCQUFRLE9BQU8sWUFBWTtBQUFBLFlBQ3ZCLE1BQU07QUFBQSxZQUNOLE1BQU0sS0FBSztBQUFBLFlBQ1g7QUFBQSxZQUNBLE1BQU0sS0FBSztBQUFBLFlBQ1gsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE9BQU8sTUFBTSxNQUFNLEtBQUssSUFBSTtBQUFBLFVBQzVFLENBQWlCO0FBQ2pCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKLFNBQVMsSUFBUDtBQUNFLGNBQVEsSUFBSSxpREFBaUQsRUFBRTtBQUcvRCxhQUFPLFNBQVM7QUFBQSxJQUNwQjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsT0FBTyxRQUFvQixNQUFXO0FBQzFDLFFBQUksQ0FBQyxPQUFPLFFBQVE7QUFDaEIsY0FBUSxJQUFJLHdEQUF3RCxJQUFJO0FBQ3hFO0FBQUEsSUFDSjtBQUVBLFVBQU0sQ0FBQyxNQUFNLFNBQVMsS0FBSyxJQUFJLE9BQU87QUFHdEMsUUFBSSxZQUFZO0FBQU0sY0FBUSxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQUE7QUFDOUMsY0FBUSxRQUFRLElBQUk7QUFHekIsU0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJO0FBSWpDLFFBQUksS0FBSyxRQUFRLE9BQU8sS0FBSyxTQUFTLEVBQUUsU0FBUztBQUM3QyxXQUFLLFFBQVEsT0FBTyxPQUFPLEVBQUU7QUFDN0IsZ0JBQVUsTUFBTTtBQUFBLElBQ3BCLE9BQU87QUFDSCxZQUFNQyxPQUFNLEtBQUssSUFBSTtBQUNyQixZQUFNLFdBQVcsS0FBSyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsV0FBVyxJQUFJO0FBQzlELFlBQU0sU0FBU0EsT0FBTSxTQUFTO0FBRTlCLGFBQU8sU0FBUztBQUVoQixVQUFJLFNBQVMsT0FBTztBQUNoQixlQUFPLGNBQWNBO0FBQ3JCLGFBQUssU0FBUztBQUFBLE1BQ2xCLE9BQU87QUFDSCxlQUFPLGNBQWNBLE9BQU07QUFLM0IsbUJBQVcsS0FBSyxTQUFTLEtBQUssSUFBSSxHQUFHLEtBQUs7QUFBQSxNQUM5QztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdRLGtCQUEwQztBQUM5QyxVQUFNQSxPQUFNLEtBQUssSUFBSTtBQUNyQixhQUFTLFVBQVUsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUN0QyxVQUFJLENBQUMsT0FBTyxVQUFVLE9BQU8sZUFBZUEsTUFBSztBQUM3QyxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFHQSxRQUFJLEtBQUssUUFBUSxPQUFPLEtBQUssU0FBUyxFQUFFLFNBQVM7QUFDN0MsVUFBSSxTQUFTLEtBQUssVUFBVTtBQUM1QixXQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksTUFBTTtBQUNsQyxhQUFPO0FBQUEsSUFDWDtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdRLFlBQXdCO0FBQzVCLFFBQUksU0FBcUI7QUFBQSxNQUNyQixJQUFJLEtBQUs7QUFBQSxNQUNULGFBQWEsS0FBSyxJQUFJO0FBQUEsTUFDdEIsUUFBUSxJQUFJQyxRQUFhO0FBQUEsSUFDN0I7QUFFQSxXQUFPLE9BQU8sWUFBWSxDQUFDLFFBQVEsS0FBSyxPQUFPLFFBQVEsSUFBSSxJQUFJO0FBQy9ELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLFdBQWlCO0FBQ3BCLGFBQVMsVUFBVSxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQ3RDLGdCQUFVLE1BQU07QUFBQSxJQUNwQjtBQUVBLFdBQU8sQ0FBQyxLQUFLLE1BQU0sUUFBUSxHQUFHO0FBQzFCLFlBQU0sQ0FBQyxPQUFPLE9BQU8sSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUN4QyxjQUFRLE9BQU8sWUFBWTtBQUFBLElBQy9CO0FBRUEsU0FBSyxXQUFXO0FBQUEsRUFDcEI7QUFDSjtBQWVBLFNBQVMsVUFBVSxRQUFvQjtBQUNuQyxTQUFPLE9BQU8sVUFBVTtBQUV4QixNQUFJLE9BQU87QUFBUSxXQUFPLE9BQU8sQ0FBQyxFQUFFLE9BQU8sWUFBWTtBQUN2RCxTQUFPLFNBQVM7QUFDcEI7OztBQy9OQSxJQUFBQyxtQkFBNkY7OztBQ0l0RixJQUFNLGVBQU4sTUFBcUU7QUFBQSxFQWdCakUsWUFBWSxNQUFjLE9BQWlCLE9BQWlCQyxPQUFjO0FBYmpGLGtCQUFtQixhQUFZO0FBQy9CLHFCQUFvQjtBQWFoQixTQUFLLFFBQVE7QUFDYixTQUFLLFNBQVM7QUFDZCxTQUFLLFNBQVM7QUFDZCxTQUFLLFFBQVFBO0FBRWIsVUFBTSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQ3BDLFNBQUssYUFBYSxVQUFVLElBQUksS0FBSyxLQUFLLFVBQVUsVUFBVSxDQUFDO0FBQUEsRUFDbkU7QUFBQSxFQUVBLElBQUksU0FBUztBQUNULFdBQU8sYUFBWSxVQUFVLElBQUk7QUFBQSxFQUNyQztBQUFBLEVBRU8sTUFBTSxLQUFhO0FBeEM5QjtBQXlDUSxZQUFPLGtCQUFZLFVBQVUsTUFBTSxHQUFHLE1BQS9CLG1CQUFtQztBQUFBLEVBQzlDO0FBQUE7QUFBQSxFQUdPLE1BQU0sS0FBa0M7QUE3Q25EO0FBOENRLFlBQU8sVUFBSyxNQUFNLEdBQUcsTUFBZCxtQkFBaUI7QUFBQSxFQUM1QjtBQUFBO0FBQUEsRUFHQSxJQUFJLE1BQWM7QUFDZCxXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHQSxJQUFJLFFBQWdCO0FBQ2hCLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLElBQUksUUFBYztBQUNkLFdBQU8sS0FBSyxLQUFLLEtBQUssS0FBSztBQUFBLEVBQy9CO0FBR0o7QUF2RE8sSUFBTSxjQUFOO0FBQU0sWUFDRixRQUFrQixDQUFDLFdBQVcsbUJBQW1CLGFBQWE7QUFENUQsWUFzRE0sWUFBeUMsV0FBVyxXQUFXOzs7QUNoRWxGLElBQUFDLGdCQUFzQjtBQUV0QixJQUFBQyxtQkFBd0M7QUFJakMsSUFBTSxhQUFOLGNBQXlCLDJCQUFVO0FBQUEsRUFVL0IsWUFBbUIsT0FBcUIsYUFBMkI7QUFDdEUsVUFBTTtBQURnQjtBQUFxQjtBQVIvQztBQUFBLFNBQVEsUUFBc0IsSUFBSSxvQkFBTTtBQUV4QztBQUFBLFNBQVEsV0FBNEMsb0JBQUksSUFBSTtBQUU1RDtBQUFBLFNBQVEsU0FBdUMsb0JBQUksSUFBSTtBQUV2RDtBQUFBLFNBQVEsV0FBb0I7QUFBQSxFQUk1QjtBQUFBO0FBQUEsRUFHQSxNQUFhLEtBQUssTUFBOEI7QUFDNUMsUUFBSSxLQUFLO0FBQVUsYUFBTyxRQUFRLE9BQU8sMEJBQTBCO0FBRW5FLFVBQU0sVUFBVSxTQUFpQjtBQUdqQyxRQUFJLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSyxJQUFJLEdBQUc7QUFDL0IsV0FBSyxNQUFNLEtBQUssSUFBSTtBQUNwQixXQUFLLFNBQVMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFBQSxJQUMxQyxPQUFPO0FBQ0gsV0FBSyxTQUFTLElBQUksS0FBSyxJQUFJLEVBQUcsS0FBSyxPQUFPO0FBQUEsSUFDOUM7QUFFQSxTQUFLLFNBQVM7QUFDZCxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHUSxXQUFXO0FBQ2YsV0FBTyxLQUFLLE9BQU8sT0FBTyxLQUFLLFlBQVksS0FBSyxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUc7QUFDbkUsWUFBTSxPQUFPLEtBQUssTUFBTSxJQUFJO0FBRTVCLFlBQU0sT0FBTyxLQUFLLE1BQU0sV0FBVyxJQUFJO0FBQ3ZDLFdBQUssT0FBTyxJQUFJLEtBQUssTUFBTSxJQUFJO0FBRS9CLFdBQUssS0FBSyxDQUFDLFlBQVksS0FBSyxPQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUU7QUFBQSxRQUFNLENBQUMsVUFDdEUsS0FBSyxPQUFPLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQztBQUFBLE1BQzNDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsT0FBTyxNQUFhLFFBQTZCO0FBckQ3RDtBQXNEUSxTQUFLLE9BQU8sT0FBTyxLQUFLLElBQUk7QUFFNUIsVUFBTSxZQUFXLFVBQUssU0FBUyxJQUFJLEtBQUssSUFBSSxNQUEzQixZQUFnQyxDQUFDO0FBQ2xELFNBQUssU0FBUyxPQUFPLEtBQUssSUFBSTtBQUU5QixRQUFJLE9BQU8sWUFBWTtBQUNuQixlQUFTLFFBQVEsQ0FBQyxZQUFZLFFBQVEsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUFBLElBQy9ELE9BQU87QUFDSCxlQUFTLFFBQVEsQ0FBQyxZQUFZLFFBQVEsT0FBTyxPQUFPLEtBQUssQ0FBQztBQUFBLElBQzlEO0FBRUEsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQTtBQUFBLEVBR08sV0FBaUI7QUFFcEIsZUFBVyxZQUFZLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFDM0MsZUFBUyxRQUFRLENBQUMsWUFBWSxRQUFRLE9BQU8sK0JBQStCLENBQUM7QUFBQSxJQUNqRjtBQUVBLFNBQUssV0FBVztBQUFBLEVBQ3BCO0FBQ0o7OztBQy9DTyxJQUFNLFVBQU4sTUFBdUY7QUFBQSxFQThCbEYsWUFBWSxNQUF1QjtBQTNCM0Msa0JBQW1CLFFBQU87QUFDMUIscUJBQW9CO0FBS3BCLHNCQUFxQjtBQWVyQixrQkFBMkIsQ0FBQztBQUM1QixpQkFBZ0I7QUFNWixXQUFPLE9BQU8sTUFBTSxJQUFJO0FBQUEsRUFDNUI7QUFBQSxFQXJCQSxJQUFJLFFBQVE7QUFDUixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsSUFBSSxNQUFNO0FBQ04sV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUVBLElBQUksUUFBUTtBQUNSLFdBQU8sS0FBSyxLQUFLLEtBQUssS0FBSztBQUFBLEVBQy9CO0FBQUEsRUFhQSxJQUFJLFNBQWtCO0FBQ2xCLFdBQU8sUUFBTyxVQUFVLElBQUk7QUFBQSxFQUNoQztBQUFBLEVBRU8sTUFBTSxLQUFnQztBQXBFakQ7QUFxRVEsWUFBTyxhQUFPLFVBQVUsTUFBTSxHQUFHLE1BQTFCLG1CQUE4QjtBQUFBLEVBQ3pDO0FBQUEsRUFFTyxPQUFtQjtBQUN0QixXQUFPO0FBQUEsTUFDSCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUNDLE9BQU1BLEdBQUUsS0FBSyxDQUFDO0FBQUEsTUFDdkMsUUFBUSxLQUFLLE9BQU8sU0FBUztBQUFBLE1BQzdCLFFBQVEsS0FBSyxPQUFPLFNBQVM7QUFBQSxNQUM3QixPQUFPLEtBQUs7QUFBQSxNQUNaLFFBQVEsS0FBSztBQUFBLE1BQ2IsT0FBTyxLQUFLO0FBQUEsTUFDWixXQUFXLEtBQUs7QUFBQSxNQUNoQixPQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUFpQixhQUE2QixpQkFBeUI7QUFDL0UsVUFBTSxRQUFRLElBQUksT0FDYixJQUFJLENBQUNDLE9BQU07QUFDUixjQUFRQSxHQUFFLE9BQU87QUFBQSxRQUNiLEtBQUs7QUFDRCxpQkFBTyxlQUFlLEtBQUtBLElBQUcsSUFBSSxPQUFPLFVBQVU7QUFBQSxRQUN2RCxLQUFLO0FBQ0QsaUJBQU8sZUFBZSxLQUFLQSxFQUFDO0FBQUEsUUFDaEMsS0FBSztBQUNELGlCQUFPLGNBQWMsS0FBS0EsSUFBRyxJQUFJLEtBQUs7QUFBQSxNQUM5QztBQUNBLGFBQU87QUFBQSxJQUNYLENBQUMsRUFDQSxPQUFPLENBQUNELE9BQTJCLENBQUMsQ0FBQ0EsRUFBQztBQUMzQyxXQUFPLElBQUksUUFBTztBQUFBLE1BQ2QsUUFBUTtBQUFBLE1BQ1IsUUFBUSxTQUFTLFdBQVcsSUFBSSxNQUFNO0FBQUEsTUFDdEMsUUFBUSxTQUFTLFdBQVcsSUFBSSxNQUFNO0FBQUEsTUFDdEMsT0FBTyxJQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixPQUFPLElBQUk7QUFBQSxNQUNYLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQ0UsT0FBTSxXQUFXLEtBQUssV0FBV0EsRUFBQyxDQUFDLENBQUM7QUFBQSxNQUM1RCxXQUFXLElBQUk7QUFBQSxNQUNmLE9BQU8sSUFBSTtBQUFBLElBQ2YsQ0FBQztBQUFBLEVBQ0w7QUFLSjtBQXJGTyxJQUFNLFNBQU47QUFBTSxPQUNGLFFBQVEsQ0FBQyxXQUFXLFVBQVUsZUFBZSxlQUFlLGlCQUFpQjtBQUQzRSxPQWlGTSxZQUFvQyxXQUFXO0FBQUEsRUFDMUQsV0FBVyxhQUFhLENBQUNDLE9BQU1BLEdBQUUsU0FBUztBQUFBLEVBQzFDLFdBQVcsV0FBVztBQUMxQjtBQU9KLElBQWUsaUJBQWYsTUFBNkQ7QUFBQSxFQWFsRCxZQUFZLE1BQStCO0FBQzlDLFdBQU8sT0FBTyxNQUFNLElBQUk7QUFBQSxFQUM1QjtBQUFBLEVBRUEsSUFBSSxRQUFjO0FBQ2QsV0FBTyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsVUFBVSxLQUFLLEdBQUc7QUFBQSxFQUNuRDtBQUFBLEVBRU8sT0FBMkI7QUFDOUIsVUFBTSxFQUFFLEtBQUssV0FBVyxRQUFRLGFBQWEsT0FBTyxNQUFNLElBQUk7QUFDOUQsV0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFPLE1BQU0sU0FBUztBQUFBLElBQzFCO0FBQUEsRUFDSjtBQUNKO0FBR08sSUFBTSxrQkFBTixjQUE2QixlQUF5RTtBQUFBLEVBb0JqRyxZQUFZLE1BQStCO0FBQy9DLFVBQU0sSUFBSTtBQWxCZCxrQkFBbUIsZ0JBQWU7QUFDbEMscUJBQW9CO0FBQ3BCLGlCQUFnQjtBQUFBLEVBaUJoQjtBQUFBLEVBRUEsSUFBSSxTQUFrQjtBQUNsQixXQUFPLGdCQUFlLFVBQVUsSUFBSTtBQUFBLEVBQ3hDO0FBQUEsRUFFTyxNQUFNLEtBQWdDO0FBeExqRDtBQXlMUSxZQUFPLHFCQUFlLFVBQVUsTUFBTSxHQUFHLE1BQWxDLG1CQUFzQztBQUFBLEVBQ2pEO0FBQUEsRUFFTyxPQUEyQjtBQUM5QixXQUFPLE9BQU8sT0FBTyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQy9CLFdBQVcsS0FBSztBQUFBLE1BQ2hCLFFBQVEsS0FBSztBQUFBLE1BQ2IsT0FBTyxLQUFLO0FBQUEsTUFDWixPQUFPO0FBQUEsTUFDUCxXQUFXLEtBQUssVUFBVSxJQUFJLENBQUNDLE9BQU1BLEdBQUUsS0FBSyxDQUFDO0FBQUEsSUFDakQsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUF5QixNQUFjLGFBQTZCLGlCQUFpQjtBQUM3RixRQUFJLFlBQVksSUFBSSxVQUFVLElBQUksQ0FBQ0gsT0FBTSxnQkFBZ0IsS0FBS0EsSUFBRyxNQUFNLFVBQVUsQ0FBQztBQUNsRixXQUFPLElBQUksZ0JBQWU7QUFBQSxNQUN0QixPQUFPO0FBQUEsTUFDUCxLQUFLLElBQUk7QUFBQSxNQUNUO0FBQUEsTUFDQSxRQUFRLElBQUksT0FBTyxJQUFJLENBQUNDLE9BQU0sV0FBVyxLQUFLLFdBQVdBLEVBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDNUQsYUFBYSxJQUFJO0FBQUEsTUFDakIsV0FBVyxJQUFJO0FBQUEsTUFDZixjQUFjLElBQUksZUFDWixnQkFBZ0IsSUFBSSxjQUFjLENBQUMsT0FBTyxlQUFlLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDLElBQy9GO0FBQUEsTUFDTixXQUFXLElBQUk7QUFBQSxNQUNmLE9BQU8sSUFBSTtBQUFBLElBQ2YsQ0FBQztBQUFBLEVBQ0w7QUFPSjtBQWhFTyxJQUFNLGlCQUFOO0FBQU0sZUFDRixRQUFRLENBQUMsZUFBZSxZQUFZLG9CQUFvQixlQUFlLGVBQWUsaUJBQWlCO0FBRHJHLGVBMkRGLFlBQTRDLFdBQVc7QUFBQSxFQUMxRCxXQUFXLFdBQVc7QUFBQSxFQUN0QixXQUFXLGFBQWEsQ0FBQ0MsT0FBTUEsR0FBRSxTQUFTO0FBQUEsRUFDMUMsV0FBVyxZQUFZLENBQUNBLE9BQU1BLEdBQUUsWUFBWTtBQUNoRDtBQUlHLElBQU0sa0JBQU4sY0FBNkIsZUFBb0M7QUFBQSxFQU01RCxZQUFZLE1BQStCO0FBQy9DLFVBQU0sSUFBSTtBQUpkLGtCQUFtQixlQUFlO0FBQ2xDLHFCQUFvQjtBQU1wQixTQUFTLFFBQWdCO0FBQUEsRUFGekI7QUFBQSxFQUtPLE9BQTJCO0FBQzlCLFdBQU8sT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsTUFDL0IsYUFBYSxLQUFLO0FBQUEsTUFDbEIsT0FBTztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUF5QjtBQUNqQyxXQUFPLElBQUksZ0JBQWU7QUFBQSxNQUN0QixPQUFPLElBQUk7QUFBQSxNQUNYLEtBQUssSUFBSTtBQUFBLE1BQ1QsV0FBVyxJQUFJO0FBQUEsTUFDZixhQUFhLElBQUk7QUFBQSxNQUNqQixhQUFhLElBQUk7QUFBQSxJQUNyQixDQUFDO0FBQUEsRUFDTDtBQUNKO0FBN0JPLElBQU0saUJBQU47QUFBTSxlQUNGLFFBQVEsQ0FBQyxlQUFlLFlBQVksb0JBQW9CLGVBQWUsZUFBZSxpQkFBaUI7QUE4QjNHLElBQU0saUJBQU4sY0FBNEIsZUFBb0M7QUFBQSxFQVMzRCxZQUFZLE1BQThCO0FBQzlDLFVBQU0sSUFBSTtBQVBkLGtCQUFtQixlQUFlO0FBQ2xDLFNBQVMsUUFBZ0I7QUFDekIscUJBQW9CO0FBQUEsRUFNcEI7QUFBQSxFQUVPLE9BQTBCO0FBQzdCLFdBQU8sT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsTUFDL0IsTUFBTSxLQUFLO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRUEsT0FBTyxLQUFLLEtBQXdCLE1BQWM7QUFDOUMsV0FBTyxJQUFJLGVBQWM7QUFBQSxNQUNyQixhQUFhLElBQUk7QUFBQSxNQUNqQixXQUFXLElBQUk7QUFBQSxNQUNmLE9BQU87QUFBQSxNQUNQLEtBQUssSUFBSTtBQUFBLE1BQ1QsTUFBTSxJQUFJO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDTDtBQUNKO0FBN0JPLElBQU0sZ0JBQU47QUFBTSxjQUNGLFFBQVEsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLGVBQWUsZUFBZSxpQkFBaUI7OztBSC9PMUcsSUFBTSxXQUFOLGNBQXVCLDJCQUFVO0FBQUEsRUFxQnBDLFlBQW1CLEtBQWlCLFNBQXdCLFVBQW9CO0FBQzVFLFVBQU07QUFEUztBQUFpQjtBQUF3QjtBQUd4RCxTQUFLLFFBQVEsSUFBSTtBQUNqQixTQUFLLGdCQUFnQixJQUFJO0FBQ3pCLFNBQUssWUFBWSxJQUFJLGtCQUFrQixXQUFXLE9BQU87QUFDekQsU0FBSyxTQUFTLElBQUksd0JBQU87QUFFekIsU0FBSyxZQUFZLElBQUksVUFBVSxJQUFJLE9BQU8sSUFBSSxlQUFlLFFBQVE7QUFDckUsU0FBSyxjQUFjO0FBRW5CLFNBQUs7QUFBQSxNQUNBLEtBQUssV0FBVyxJQUFJLGFBQWEsSUFBSSxPQUFPLElBQUksYUFBYSxJQUFJLGVBQWUsTUFBTTtBQUNuRixlQUFPO0FBQUEsVUFDSCxTQUFTLFNBQVM7QUFBQSxVQUNsQixhQUFhLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFLLFNBQVMsbUJBQW1CLENBQUM7QUFBQSxRQUMxRTtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFHQSxTQUFLLFNBQVUsS0FBSyxRQUFRLElBQUksV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUU7QUFBQSxFQUNuRTtBQUFBO0FBQUEsRUFHQSxJQUFJLFdBQVc7QUFDWCxXQUFPLEtBQUssVUFBVTtBQUFBLEVBQzFCO0FBQUE7QUFBQSxFQUdBLGFBQWE7QUFFVCxTQUFLLGNBQWMsS0FBSyxjQUFjLEdBQUcsV0FBVyxDQUFDLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBR2hGLFNBQUssY0FBYyxLQUFLLE1BQU0sR0FBRyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUM7QUFJN0QsU0FBSztBQUFBLE1BQ0QsS0FBSyxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVM7QUFDOUIsWUFBSSxFQUFFLGdCQUFnQjtBQUFRO0FBRzlCLFlBQUkscUJBQXFCLElBQUksS0FBSyxVQUFVLFlBQVksQ0FBQztBQUFHO0FBRTVELGFBQUssT0FBTyxJQUFJO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0w7QUFFQSxTQUFLO0FBQUEsTUFDRCxLQUFLLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUztBQUM5QixZQUFJLEVBQUUsZ0JBQWdCO0FBQVE7QUFHOUIsWUFBSSxxQkFBcUIsSUFBSSxLQUFLLFVBQVUsWUFBWSxDQUFDO0FBQUc7QUFFNUQsYUFBSyxPQUFPLElBQUk7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDTDtBQUdBLFNBQUs7QUFBQSxNQUNELEtBQUssTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTO0FBQzlCLFlBQUksZ0JBQWdCLHdCQUFPO0FBQ3ZCLGVBQUssVUFBVSxPQUFPLEtBQUssSUFBSTtBQUFBLFFBQ25DO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTDtBQUVBLFNBQUssTUFBTTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBR0EsUUFBUTtBQUVKLFVBQU0sT0FBUSxLQUFLLGNBQWMsSUFBSSxvQkFBb0IsSUFBSTtBQUM3RCxTQUFLLFNBQVMsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM1QixXQUFLLGNBQWM7QUFDbkIsV0FBSyxjQUFjO0FBQ25CLFdBQUssWUFBWSxJQUFJO0FBRXJCLFlBQU0sZ0JBQWdCLE1BQU0sYUFBYSxLQUFRLFFBQVEsQ0FBQztBQUMxRCxjQUFRO0FBQUEsUUFDSixnREFBZ0Qsa0JBQ3hDLE1BQU0sc0JBQXNCLE1BQU0sa0JBQWtCLE1BQU07QUFBQSxNQUN0RTtBQUVBLFdBQUssVUFBVSxNQUFNO0FBQ3JCLFdBQUssUUFBUSxVQUFVLEtBQUssUUFBUTtBQUNwQyxXQUFLLFFBQVEsYUFBYTtBQUsxQixZQUFNLGVBQWUsS0FBSyxNQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7QUFDbEUsV0FBSyxVQUNBLFlBQVksWUFBWSxFQUN4QixLQUFLLENBQUMsWUFBWSxRQUFRLElBQUkscUJBQXFCLFFBQVEsd0NBQXdDLENBQUM7QUFBQSxJQUM3RyxDQUFDO0FBRUQsU0FBSyxTQUFTLElBQUk7QUFBQSxFQUN0QjtBQUFBLEVBRVEsT0FBTyxNQUFxQixTQUFpQjtBQUNqRCxRQUFJLEVBQUUsZ0JBQWdCLHlCQUFRO0FBQzFCO0FBQUEsSUFDSjtBQUtBLFNBQUssVUFBVSxPQUFPLE9BQU87QUFDN0IsU0FBSyxPQUFPLElBQUk7QUFBQSxFQUlwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFhLEtBQUssTUFBOEI7QUFDNUMsV0FBTyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBLEVBR0EsTUFBYSxPQUFPLE1BQWlDO0FBRWpELFFBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLFNBQVMsR0FBRztBQUMzQyxZQUFNRSxVQUFTLElBQUk7QUFBQSxRQUNmLEtBQUs7QUFBQSxRQUNMLFNBQVMsV0FBVyxLQUFLLEtBQUssS0FBSztBQUFBLFFBQ25DLFNBQVMsV0FBVyxLQUFLLEtBQUssS0FBSztBQUFBLFFBQ25DLEtBQUssS0FBSztBQUFBLE1BQ2Q7QUFFQSxXQUFLLFVBQVUsTUFBTUEsT0FBTTtBQUMzQixhQUFPQTtBQUFBLElBQ1g7QUFFQSxVQUFNLFNBQVMsTUFBTSxLQUFLLFNBQVMsT0FBcUIsSUFBSTtBQUU1RCxRQUFJLE9BQU8sU0FBUyxTQUFTO0FBQ3pCLFlBQU0sSUFBSSxNQUFNLDBCQUEwQixLQUFLLFNBQVMsT0FBTyxRQUFRO0FBQUEsSUFDM0UsV0FBVyxPQUFPLFNBQVMsWUFBWTtBQUVuQyxZQUFNLFNBQVMsYUFBYSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVM7QUFDdEQsY0FBTSxRQUFRLEtBQUssY0FBYyxxQkFBcUIsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFNO0FBQ3JGLFlBQUk7QUFBTyxpQkFBTyxLQUFLLFNBQVMsTUFBTSxJQUFJO0FBQUE7QUFDckMsaUJBQU87QUFBQSxNQUNoQixDQUFDO0FBR0QsV0FBSyxjQUFjLE1BQU07QUFHekIsV0FBSyxVQUFVLFVBQVUsT0FBTyxPQUFPLE9BQU8sS0FBSyxDQUFDO0FBR3BELFdBQUssUUFBUSxVQUFVLEtBQUssUUFBUTtBQUNwQyxhQUFPO0FBQUEsSUFDWCxXQUFXLE9BQU8sU0FBUyxVQUFVO0FBQ2pDLFlBQU0sU0FBUyxPQUFPLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUztBQUNoRCxjQUFNLFFBQVEsS0FBSyxjQUFjLHFCQUFxQixLQUFLLE1BQU0sT0FBTyxPQUFPLEtBQU07QUFDckYsWUFBSTtBQUFPLGlCQUFPLEtBQUssU0FBUyxNQUFNLElBQUk7QUFBQTtBQUNyQyxpQkFBTztBQUFBLE1BQ2hCLENBQUM7QUFDRCxXQUFLLFlBQVksTUFBTTtBQUN2QixXQUFLLFVBQVUsVUFBVSxPQUFPLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFDcEQsV0FBSyxRQUFRLFVBQVUsS0FBSyxRQUFRO0FBQ3BDLGFBQU87QUFBQSxJQUNYO0FBRUEsVUFBTSxJQUFJLE1BQU0sa0RBQW1ELE9BQWUsSUFBSTtBQUFBLEVBQzFGO0FBQUEsRUFFTyxZQUFZLE1BQWM7QUFDN0IsU0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLFFBQVEsVUFBVTtBQUMxQyxZQUFNLE9BQU8sUUFBUSxDQUFDLE1BQU1DLFdBQVU7QUFDbEMsWUFBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2hDLFVBQUFBLE9BQU0sS0FBSyxXQUFXLENBQUMsU0FBU0EsV0FBVTtBQUN0QyxZQUFBQSxPQUFNLFFBQVEsU0FBUyxDQUFDLE9BQU9BLFdBQVU7QUFDckMsa0JBQUksaUJBQWlCLG1CQUFtQjtBQUVwQyxzQkFBTSxXQUF3QyxDQUFDLE1BQU1BLFdBQ2pEQSxPQUFNLEtBQUssV0FBVyxRQUFRO0FBRWxDLGdCQUFBQSxPQUFNLE1BQU0sV0FBVyxRQUFRO0FBQUEsY0FDbkM7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUEsRUFHTyxjQUFjLE1BQW9CO0FBQ3JDLFNBQUssVUFBVSxNQUFNLE1BQU0sQ0FBQyxRQUFRLFVBQVU7QUFDMUMsWUFBTSxPQUFPLFdBQVcsQ0FBQyxTQUFTQSxXQUFVO0FBQ3hDLFFBQUFBLE9BQU0sUUFBUSxTQUFTLENBQUMsT0FBT0EsV0FBVTtBQUNyQyxjQUFJLGlCQUFpQixtQkFBbUI7QUFFcEMsa0JBQU0sV0FBd0MsQ0FBQyxNQUFNQSxXQUFVQSxPQUFNLEtBQUssV0FBVyxRQUFRO0FBRTdGLFlBQUFBLE9BQU0sTUFBTSxXQUFXLFFBQVE7QUFBQSxVQUNuQztBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQVFBLEdBQUcsS0FBYSxVQUFpQyxTQUF5QjtBQUN0RSxXQUFPLEtBQUssT0FBTyxHQUFHLEtBQUssVUFBVSxPQUFPO0FBQUEsRUFDaEQ7QUFBQTtBQUFBLEVBR0EsSUFBSSxLQUFhLFVBQWlDO0FBQzlDLFNBQUssT0FBTyxJQUFJLEtBQUssUUFBUTtBQUFBLEVBQ2pDO0FBQUE7QUFBQSxFQUdBLE9BQU8sS0FBZTtBQUNsQixTQUFLLE9BQU8sT0FBTyxHQUFHO0FBQUEsRUFDMUI7QUFBQTtBQUFBLEVBUVEsUUFBUSxRQUFnQixNQUFtQjtBQUMvQyxTQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUcsSUFBSTtBQUFBLEVBQ3BDO0FBQ0o7QUFHTyxJQUFNLHVCQUFOLGNBQWtDLDJCQUFVO0FBQUEsRUE2Qi9DLFlBQW1CLE1BQWdCO0FBQy9CLFVBQU07QUFEUztBQUdmLFNBQUssU0FBUztBQUNkLFNBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxTQUFTO0FBQ3RDLFNBQUssY0FBYyxLQUFLLE1BQU07QUFDOUIsU0FBSyxRQUFRLEtBQUssTUFBTTtBQUN4QixTQUFLLFFBQVEsS0FBSyxJQUFJO0FBQ3RCLFNBQUssVUFBVSxDQUFDO0FBQ2hCLFNBQUssT0FBTyxTQUFTO0FBRXJCLFNBQUssY0FBYyxLQUFLLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUztBQUFBLEVBQ3BFO0FBQUEsRUFFQSxNQUFNLFNBQVM7QUFFWCxTQUFLLFNBQVM7QUFFZCxTQUFLLFFBQVE7QUFBQSxFQUNqQjtBQUFBO0FBQUEsRUFHQSxXQUF5QztBQUNyQyxXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHQSxXQUFXO0FBQ1AsUUFBSSxLQUFLLFFBQVE7QUFDYixXQUFLLFNBQVM7QUFDZCxXQUFLLEtBQUssT0FBTyxpREFBaUQ7QUFBQSxJQUN0RTtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsVUFBVTtBQUVkLFFBQUksQ0FBQyxLQUFLLFVBQVUsS0FBSyxRQUFRLFVBQVUscUJBQW9CLFlBQVk7QUFDdkU7QUFBQSxJQUNKO0FBR0EsVUFBTUMsUUFBTyxLQUFLLE1BQU0sSUFBSTtBQUM1QixRQUFJQSxPQUFNO0FBQ04sV0FBSyxRQUFRLEtBQUtBLEtBQUk7QUFDdEIsV0FBSyxLQUFLQSxLQUFJLEVBQ1QsS0FBSyxDQUFDLFdBQVcsS0FBSyxhQUFhQSxPQUFNLE1BQU0sQ0FBQyxFQUNoRCxNQUFNLENBQUMsV0FBVyxLQUFLLGFBQWFBLE9BQU0sTUFBTSxDQUFDO0FBRXRELFdBQUssUUFBUTtBQUFBLElBQ2pCLFdBQVcsQ0FBQ0EsU0FBUSxLQUFLLFFBQVEsVUFBVSxHQUFHO0FBQzFDLFdBQUssU0FBUztBQUdkLFdBQUssS0FBSyxRQUFRO0FBQUEsUUFDZCxZQUFZLEtBQUssSUFBSSxJQUFJLEtBQUs7QUFBQSxRQUM5QixPQUFPLEtBQUs7QUFBQSxRQUNaLFVBQVUsS0FBSztBQUFBLFFBQ2YsU0FBUyxLQUFLO0FBQUEsUUFDZCxRQUFRLEtBQUs7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsYUFBYSxNQUFhLFFBQThCO0FBQzVELFNBQUssUUFBUSxPQUFPLElBQUk7QUFDeEIsU0FBSztBQUVMLFFBQUksT0FBTyxXQUFXO0FBQVcsV0FBSztBQUFBLGFBQzdCLE9BQU8sV0FBVztBQUFZLFdBQUs7QUFBQSxhQUNuQyxPQUFPLFdBQVc7QUFBVSxXQUFLO0FBRzFDLFNBQUssUUFBUTtBQUFBLEVBQ2pCO0FBQUE7QUFBQSxFQUdBLE1BQWMsS0FBSyxNQUE0QztBQUMzRCxRQUFJO0FBRUEsWUFBTSxTQUFTLE1BQU0sS0FBSyxLQUFLLFVBQVUsU0FBUyxLQUFLLElBQUk7QUFDM0QsVUFBSSxVQUFVLE9BQU8sUUFBUSxLQUFLLEtBQUssU0FBUyxPQUFPLFdBQVcsS0FBSyxLQUFLLFNBQVM7QUFDakYsWUFBSSxLQUFLLGNBQWMsTUFBTTtBQUN6QixnQkFBTSxPQUFPLGFBQWEsS0FBSyxPQUFPLE1BQTBCLENBQUMsU0FBUyxJQUFJO0FBQzlFLGVBQUssS0FBSyxjQUFjLElBQUk7QUFDNUIsaUJBQU8sRUFBRSxRQUFRLFNBQVM7QUFBQSxRQUM5QjtBQUFBLE1BQ0o7QUFHQSxZQUFNLEtBQUssS0FBSyxPQUFPLElBQUk7QUFDM0IsYUFBTyxFQUFFLFFBQVEsV0FBVztBQUFBLElBQ2hDLFNBQVMsSUFBUDtBQUNFLGNBQVEsSUFBSSxxQ0FBcUMsRUFBRTtBQUNuRCxhQUFPLEVBQUUsUUFBUSxVQUFVO0FBQUEsSUFDL0I7QUFBQSxFQUNKO0FBQ0o7QUEvSE8sSUFBTSxzQkFBTjtBQUFBO0FBQU0sb0JBRUYsYUFBcUI7OztBL04xUmhDLElBQUFDLG9CQUF1RDs7O0FtT2dEaEQsSUFBTSxtQkFBdUMsT0FBTyxPQUFpQjtBQUFBLEVBQ3hFLG9CQUFvQjtBQUFBLEVBQ3BCLHFCQUFxQjtBQUFBLEVBRXJCLFVBQVU7QUFBQSxFQUVWLHNCQUFzQjtBQUFBLEVBQ3RCLGlCQUFpQjtBQUFBLEVBQ2pCLG9CQUFvQjtBQUFBLEVBRXBCLHlCQUF5QjtBQUFBLEVBRXpCLG1CQUFtQjtBQUFBLEVBQ25CLHVCQUF1QjtBQUFBLEVBRXZCLGNBQWM7QUFBQSxFQUVkLG1CQUFtQjtBQUFBLEVBQ25CLGdCQUFnQjtBQUFBLEVBQ2hCLHlCQUF5QjtBQUFBLEVBQ3pCLG9CQUFvQjtBQUFBLEVBQ3BCLGlDQUFpQztBQUNyQyxDQUFDOzs7QUN6RUQsSUFBQUMsbUJBQThGO0FBY3ZGLElBQU0sdUJBQXVCO0FBR3BDLElBQU0sc0JBQXNCLEVBQWlDLE1BQVU7QUFHdkUsU0FBUyx1QkFBdUI7QUFDNUIsUUFBTSxPQUFPQyxHQUFXLG1CQUFtQjtBQUMzQyxRQUFNLGVBQWVDO0FBQUEsSUFDakIsVUFBTSwyQkFBUyxDQUFDQyxXQUFzQyxLQUFLLFNBQVNBLFFBQU8sRUFBRSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEdBQUc7QUFBQSxJQUNuRyxDQUFDLElBQUk7QUFBQSxFQUNUO0FBRUEsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQyxHQUFTLEtBQUssU0FBUyxDQUFDO0FBQzVELFFBQU0sV0FBV0M7QUFBQSxJQUNiLENBQUNGLFdBQXNDO0FBQ25DLFlBQU0sYUFBYSxFQUFFLEdBQUcsWUFBWSxHQUFHQSxPQUFNO0FBRTdDLG9CQUFjLFVBQVU7QUFHeEIsbUJBQWEsVUFBVTtBQUFBLElBQzNCO0FBQUEsSUFDQSxDQUFDLFlBQVksZUFBZSxJQUFJO0FBQUEsRUFDcEM7QUFFQSxTQUNJLGdCQUFBRyxHQUFDLFNBQU0sT0FBTSxXQUNUO0FBQUEsb0JBQUFBLEdBQUMsWUFBTyxXQUFVLGtCQUFpQixPQUFNLHFCQUFvQixTQUFTLE1BQU0sS0FBSyxLQUFLLFFBQVEsR0FDekYsdUJBQ0w7QUFBQSxJQUNBLGdCQUFBQSxHQUFDLFNBQU0sU0FBUSxpQkFBZ0IsT0FBTSxVQUNqQztBQUFBLHNCQUFBQSxHQUFDLFFBQUcsd0JBQVU7QUFBQSxNQUNkLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csY0FBYyxLQUFLLFNBQVMsRUFBRTtBQUFBLFVBQzlCLFVBQVUsQ0FBQ0MsT0FBTSxTQUFTLEVBQUUsT0FBT0EsR0FBRSxjQUFjLE1BQWdCLENBQUM7QUFBQTtBQUFBLE1BQ3hFO0FBQUEsT0FDSjtBQUFBLElBQ0EsZ0JBQUFELEdBQUMsU0FBTSxTQUFRLGlCQUFnQixPQUFNLFVBQ2pDO0FBQUEsc0JBQUFBLEdBQUMsUUFBRyx1QkFBUztBQUFBLE1BQ2IsZ0JBQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRyxjQUFjLEtBQUssU0FBUyxFQUFFO0FBQUEsVUFDOUIsU0FBUztBQUFBLFVBQ1QsT0FBTyxXQUFXO0FBQUEsVUFDbEIsZUFBZSxDQUFDRSxPQUFNLFNBQVMsRUFBRSxZQUFZQSxHQUFvQixDQUFDO0FBQUE7QUFBQSxNQUN0RTtBQUFBLE9BQ0o7QUFBQSxJQUNBLGdCQUFBRixHQUFDLFNBQU0sU0FBUSxpQkFBZ0IsT0FBTSxVQUNqQztBQUFBLHNCQUFBQSxHQUFDLFFBQUcsZ0NBQWtCO0FBQUEsTUFDdEIsZ0JBQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRyxPQUFPLEVBQUUsUUFBUSxZQUFZLFVBQVUsT0FBTyxZQUFZLFlBQVk7QUFBQSxVQUN0RSxjQUFjLFdBQVc7QUFBQSxVQUN6QixPQUFPLFdBQVc7QUFBQSxVQUNsQixVQUFVLENBQUNDLE9BQU0sU0FBUyxFQUFFLFFBQVFBLEdBQUUsY0FBYyxNQUFnQixDQUFDO0FBQUE7QUFBQSxNQUN6RTtBQUFBLE9BQ0o7QUFBQSxJQUNBLGdCQUFBRCxHQUFDLFNBQU0sU0FBUSxpQkFBZ0IsT0FBTSxVQUNqQztBQUFBLHNCQUFBQSxHQUFDLFNBQ0c7QUFBQSx3QkFBQUEsR0FBQyxRQUFHLDBCQUFZO0FBQUEsUUFDaEIsZ0JBQUFBLEdBQUMsV0FBTSwrRUFBaUU7QUFBQSxTQUM1RTtBQUFBLE1BQ0EsZ0JBQUFBLEdBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxNQUFNLEdBQzFCLDBCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csY0FBYyxXQUFXO0FBQUEsVUFDekIsVUFBVSxDQUFDRyxPQUFNLFNBQVMsRUFBRSxhQUFhQSxHQUFFLENBQUM7QUFBQTtBQUFBLE1BQ2hELEdBQ0o7QUFBQSxPQUNKO0FBQUEsS0FDSjtBQUVSO0FBR0EsU0FBUyxvQkFBb0I7QUFBQSxFQUN6QjtBQUFBLEVBQ0EsVUFBQUM7QUFDSixHQUdHO0FBQ0MsUUFBTSxPQUFPVCxHQUFXLGdCQUFnQjtBQUN4QyxRQUFNLFdBQVcsZ0JBQWdCLE1BQU0sRUFBRSxVQUFVLElBQUssQ0FBQztBQUd6RCxRQUFNVSxXQUFVVCxHQUFRLE1BQU07QUFDMUIsV0FBTyxLQUFLLE1BQU0saUJBQWlCLEVBQUUsSUFBSSxDQUFDVSxRQUFPLEVBQUUsT0FBT0EsR0FBRSxNQUFNLE9BQU9BLEdBQUUsS0FBSyxFQUFFO0FBQUEsRUFDdEYsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUViLFFBQU0sZ0JBQWdCLGVBQ2hCLEVBQUUsT0FBTyxXQUFXLE9BQU8sT0FBVSxJQUNyQyxFQUFFLE9BQU8sY0FBYyxPQUFPLGFBQWE7QUFFakQsU0FDSSxnQkFBQU47QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLFNBQVNLO0FBQUEsTUFDVCxpQkFBZ0I7QUFBQSxNQUNoQixjQUFjO0FBQUEsTUFDZCxVQUFVLENBQUMsSUFBSSxRQUFRRCxVQUFTLHlCQUFJLEtBQUs7QUFBQSxNQUN6QyxVQUFRO0FBQUE7QUFBQSxFQUNaO0FBRVI7QUFHQSxJQUFNLG1CQUErRDtBQUFBLEVBQ2pFLEVBQUUsT0FBTyxjQUFjLE9BQU8sS0FBSztBQUFBLEVBQ25DLEVBQUUsT0FBTyxjQUFjLE9BQU8sS0FBSztBQUFBLEVBQ25DLEVBQUUsT0FBTyxvQkFBb0IsT0FBTyxNQUFNO0FBQUEsRUFDMUMsRUFBRSxPQUFPLGtCQUFrQixPQUFPLE1BQU07QUFDNUM7QUFHQSxJQUFNLGNBQ0YsZ0JBQUFKO0FBQUEsRUFBQztBQUFBO0FBQUEsSUFDRyxPQUFNO0FBQUEsSUFDTixPQUFNO0FBQUEsSUFDTixRQUFPO0FBQUEsSUFDUCxTQUFRO0FBQUEsSUFDUixNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxnQkFBYTtBQUFBLElBQ2Isa0JBQWU7QUFBQSxJQUNmLG1CQUFnQjtBQUFBLElBQ2hCLE9BQU07QUFBQSxJQUVOO0FBQUEsc0JBQUFBLEdBQUMsVUFBSyxHQUFFLGtCQUFpQjtBQUFBLE1BQ3pCLGdCQUFBQSxHQUFDLFVBQUssR0FBRSxZQUFXO0FBQUE7QUFBQTtBQUN2QjtBQWlCRyxJQUFNLG9CQUFOLGNBQWdDLDBCQUFTO0FBQUEsRUFhNUMsWUFBWSxNQUE0Qk8sTUFBa0I7QUFDdEQsVUFBTSxJQUFJO0FBRDBCLGVBQUFBO0FBWHhDO0FBQUEsU0FBTyxnQkFBbUM7QUFBQSxNQUN0QyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixZQUFZO0FBQUEsTUFDWixNQUFNO0FBQUEsSUFDVjtBQVFJLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUE7QUFBQSxFQUdBLGNBQXNCO0FBQ2xCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLGlCQUF5QjtBQUNyQixXQUFPLEdBQUcsS0FBSyxjQUFjO0FBQUEsRUFDakM7QUFBQSxFQUVBLE1BQWEsU0FBUztBQUNsQixTQUFLLFVBQVUsU0FBUyxtQkFBbUI7QUFDM0MsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQSxFQUVPLFdBQWlCO0FBQ3BCLFFBQUksS0FBSztBQUFZLFdBQUssWUFBWSxLQUFLLFVBQVU7QUFBQSxFQUN6RDtBQUFBO0FBQUEsRUFHQSxXQUFpQjtBQUNiLFNBQUssS0FBSyxzQkFBc0IsY0FBYyxLQUFLLFFBQVEsY0FBYyxLQUFLLGVBQWU7QUFDN0YsUUFBSSxLQUFLLGtCQUFrQixLQUFLLGNBQWM7QUFBTTtBQUVwRCxRQUFJLEtBQUs7QUFBWSxXQUFLLFlBQVksS0FBSyxVQUFVO0FBQ3JELFFBQUksS0FBSyxjQUFjLFNBQVMsWUFBWTtBQUN4QyxXQUFLLGlCQUFpQjtBQUN0QixXQUFLLGFBQWEsSUFBSTtBQUFBLFFBQ2xCLEtBQUs7QUFBQSxRQUNMLEtBQUssSUFBSTtBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxRQUU5QixnQkFBQVAsR0FBQyxvQkFBb0IsVUFBcEIsRUFBNkIsT0FBTyxNQUNqQywwQkFBQUEsR0FBQyx3QkFBcUIsR0FDMUI7QUFBQSxNQUVSO0FBQUEsSUFDSixPQUFPO0FBRUgsV0FBSyxpQkFBaUI7QUFDdEIsVUFBSSxLQUFLLGNBQWMsUUFBUTtBQUMzQixhQUFLLGFBQWEsSUFBSTtBQUFBLFVBQ2xCLElBQUksaUJBQWlCLEtBQUssS0FBSyxLQUFLLGNBQWMsZUFBZSxFQUFFO0FBQUEsVUFDbkUsS0FBSztBQUFBLFVBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxVQUNsQyxLQUFLLGNBQWMsVUFBVTtBQUFBLFVBQzdCLEtBQUssY0FBYyxjQUFjO0FBQUEsUUFDckM7QUFBQSxNQUNKLE9BQU87QUFDSCxhQUFLLGFBQWEsSUFBSTtBQUFBLFVBQ2xCLEtBQUs7QUFBQSxVQUNMLEtBQUssSUFBSTtBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxVQUU5QixnQkFBQUEsR0FBQyxvQkFBb0IsVUFBcEIsRUFBNkIsT0FBTyxNQUNqQywwQkFBQUEsR0FBQyxnQkFBYSxTQUFRLG9DQUFtQyxHQUM3RDtBQUFBLFFBRVI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLFNBQUssU0FBUyxLQUFLLFVBQVU7QUFBQSxFQUNqQztBQUFBLEVBRU8sV0FBVztBQUNkLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLE1BQWEsU0FBU0gsUUFBMEIsU0FBeUM7QUFDckYsU0FBSyxnQkFBZ0JBO0FBQ3JCLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUE7QUFBQSxFQUdPLEtBQUssTUFBbUM7QUFDM0MsU0FBSyxjQUFjLE9BQU87QUFDMUIsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQSxFQUVBLE1BQWEsU0FBd0I7QUFBQSxFQUFDO0FBQUE7QUFBQSxFQUcvQixXQUFXLE1BQVksUUFBc0Q7QUFDaEYsUUFBSSxXQUFXLGdCQUFnQjtBQUMzQixXQUFLLFFBQVEsQ0FBQyxPQUFPO0FBQ2pCLFdBQUcsUUFBUSxVQUFVO0FBQ3JCLFdBQUcsU0FBUyxnQkFBZ0I7QUFDNUIsV0FBRyxRQUFRLENBQUNJLE9BQU0sS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUFBLE1BQzNDLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDSjtBQUNKOzs7QUMzUU8sU0FBUyxlQUFlLEVBQUUsU0FBUyxHQUEyQjtBQUNqRSxrQkFBZ0IsVUFBVSxFQUFFLFVBQVUsSUFBSSxDQUFDO0FBRzNDLE1BQUksU0FBUyxhQUFhO0FBQ3RCLFdBQ0ksZ0JBQUFPLEdBQUMsVUFBSztBQUFBO0FBQUEsTUFDUSxTQUFTLFlBQVk7QUFBQSxNQUFZO0FBQUEsTUFBSyxTQUFTLFlBQVk7QUFBQSxNQUFNO0FBQUEsT0FDL0U7QUFBQSxFQUVSLFdBQVcsU0FBUyxTQUFTLE1BQU0sS0FBSyxJQUFJLEdBQUc7QUFDM0MsV0FBTyxnQkFBQUEsR0FBQyxVQUFLO0FBQUE7QUFBQSxNQUFVLFNBQVMsU0FBUyxNQUFNLEtBQUs7QUFBQSxNQUFFO0FBQUEsT0FBTTtBQUFBLEVBQ2hFLE9BQU87QUFDSCxXQUFPLGdCQUFBQSxHQUFDLFVBQU07QUFBQSxlQUFTLFVBQVU7QUFBQSxNQUFLO0FBQUEsT0FBUTtBQUFBLEVBQ2xEO0FBQ0o7OztBck9UQSxJQUFxQixpQkFBckIsY0FBNEMseUJBQU87QUFBQSxFQVMvQyxNQUFNLFNBQVM7QUFuQm5CO0FBb0JRLFNBQUssV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixXQUFNLEtBQUssU0FBUyxNQUFwQixZQUEwQixDQUFDLENBQUM7QUFDakYsU0FBSyxjQUFjLElBQUksbUJBQW1CLEtBQUssS0FBSyxJQUFJLENBQUM7QUFHekQsU0FBSyxTQUFVLEtBQUssT0FBTyxJQUFJLFNBQVMsS0FBSyxLQUFLLEtBQUssU0FBUyxTQUFTLEtBQUssUUFBUSxDQUFFO0FBQ3hGLFNBQUssTUFBTSxJQUFJLFlBQVksS0FBSyxJQUFJO0FBR3BDLFNBQUssZ0JBQWdCLEtBQUssaUJBQWlCLEdBQUcsS0FBSyxJQUFJO0FBR3ZELFNBQUs7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFPLFFBQWdCLElBQUksUUFBUSxLQUFLLElBQUksVUFBVSxRQUFRLElBQUksS0FBSyxJQUFJLFVBQVU7QUFBQSxNQUNyRjtBQUFBLElBQ0o7QUFFQSxTQUFLO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBTyxRQUFnQixJQUFJLFFBQVEsS0FBSyxJQUFJLFdBQVcsUUFBUSxJQUFJLEtBQUssSUFBSSxVQUFVO0FBQUEsTUFDdEY7QUFBQSxJQUNKO0FBRUEsU0FBSztBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQU8sUUFBZ0IsSUFBSSxRQUFRLEtBQUssSUFBSSxVQUFVLFFBQVEsSUFBSSxLQUFLLElBQUksVUFBVTtBQUFBLE1BQ3JGO0FBQUEsSUFDSjtBQUVBLFNBQUs7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFPLFFBQWdCLElBQUksUUFBUSxLQUFLLElBQUksV0FBVyxRQUFRLElBQUksS0FBSyxJQUFJLFVBQVU7QUFBQSxNQUN0RjtBQUFBLElBQ0o7QUFHQSxTQUFLLGFBQWEsc0JBQXNCLENBQUMsU0FBUyxJQUFJLGtCQUFlLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFHcEYsU0FBSyxXQUFXO0FBQUEsTUFDWixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLE1BQU07QUFDWixjQUFNLFVBQVUsS0FBSyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ2hELGdCQUFRLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixRQUFRLEtBQUssQ0FBQztBQUNqRSxhQUFLLElBQUksVUFBVSxjQUFjLFNBQVMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQzdEO0FBQUEsSUFDSixDQUFDO0FBR0QsU0FBSyxTQUFTLEtBQUssOEJBQThCLENBQUM7QUFHbEQsUUFBSSxDQUFDLEtBQUssSUFBSSxVQUFVLGFBQWE7QUFDakMsV0FBSyxJQUFJLFVBQVUsY0FBYyxZQUFZLEtBQUssS0FBSyxXQUFXLENBQUM7QUFBQSxJQUN2RSxPQUFPO0FBQ0gsV0FBSyxLQUFLLFdBQVc7QUFBQSxJQUN6QjtBQUdBLFdBQU8sV0FBVyxLQUFLO0FBR3ZCLFlBQVEsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLDhCQUE4QixLQUFLLFNBQVMsZ0JBQWdCO0FBQUEsRUFDL0c7QUFBQSxFQUVBLFdBQVc7QUFDUCxZQUFRLElBQUkscUJBQXFCLEtBQUssU0FBUyxtQkFBbUI7QUFBQSxFQUN0RTtBQUFBO0FBQUEsRUFHQSxnQ0FBNEM7QUFDeEMsV0FBTyxXQUFXLFdBQVcsY0FBYyxDQUFDQyxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLFlBQVksQ0FBQztBQUN0RyxXQUFPLFdBQVcsV0FBVyxlQUFlLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsS0FBSyxDQUFDO0FBQ2hHLFdBQU8sV0FBVyxXQUFXLGNBQWMsQ0FBQ0EsWUFBVyxPQUFPLFdBQVcsUUFBUUEsU0FBUSxZQUFZLENBQUM7QUFDdEcsV0FBTyxXQUFXLFdBQVcsZUFBZSxDQUFDQSxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLEtBQUssQ0FBQztBQUVoRyxXQUFPLE1BQU07QUFDVCxhQUFPLFdBQVcsV0FBVyxjQUFjLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsTUFBTSxDQUFDO0FBQ2hHLGFBQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQ0EsWUFBVyxPQUFPLFdBQVcsUUFBUUEsU0FBUSxNQUFNLENBQUM7QUFDakcsYUFBTyxXQUFXLFdBQVcsY0FBYyxDQUFDQSxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLE1BQU0sQ0FBQztBQUNoRyxhQUFPLFdBQVcsV0FBVyxlQUFlLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsTUFBTSxDQUFDO0FBQUEsSUFDckc7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdBLE1BQU0sZUFBZSxVQUE2QjtBQUM5QyxXQUFPLE9BQU8sS0FBSyxVQUFVLFFBQVE7QUFDckMsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDckM7QUFBQTtBQUFBLEVBR1EsZ0JBQWdCLE1BQW1CLE1BQXNCO0FBQzdELE1BQU8sRUFBYyxnQkFBZ0IsRUFBRSxVQUFVLEtBQUssQ0FBQyxHQUFHLElBQUk7QUFFOUQsU0FBSyxTQUFTLE1BQU0sRUFBTyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQzFDO0FBQ0o7QUFHQSxJQUFNLHFCQUFOLGNBQWlDLG1DQUFpQjtBQUFBLEVBQzlDLFlBQVksS0FBa0IsUUFBd0I7QUFDbEQsVUFBTSxLQUFLLE1BQU07QUFEUztBQUFBLEVBRTlCO0FBQUEsRUFFTyxVQUFnQjtBQUNuQixTQUFLLFlBQVksTUFBTTtBQUV2QixTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakQsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxZQUFZLEVBQ3BCO0FBQUEsTUFDRztBQUFBLElBSUosRUFDQyxVQUFVLENBQUMsV0FBVztBQUNuQixhQUFPLFNBQVMsS0FBSyxPQUFPLFNBQVMsb0JBQW9CLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDakYsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHNCQUFzQixNQUFNLENBQUM7QUFBQSxNQUNwRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxtQkFBbUIsRUFDM0IsUUFBUSxnR0FBZ0csRUFDeEcsWUFBWSxDQUFDLGFBQWE7QUFDdkIsWUFBTSxVQUFrQztBQUFBLFFBQ3BDLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNYO0FBQ0EsWUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVM7QUFDMUMsVUFBSSxFQUFFLFdBQVc7QUFBVSxnQkFBUSxPQUFPLElBQUk7QUFFOUMsZUFDSyxXQUFXLE9BQU8sRUFDbEIsU0FBUyxPQUFPLEVBQ2hCLFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGNBQU0sU0FBUyxXQUFXLEtBQUs7QUFDL0IsWUFBSSxNQUFNLE1BQU07QUFBRztBQUVuQixjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsaUJBQWlCLFNBQVMsRUFBRSxDQUFDO0FBQUEsTUFDcEUsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsdUJBQXVCLEVBQy9CO0FBQUEsTUFDRztBQUFBLElBRUosRUFDQyxVQUFVLENBQUMsV0FBVztBQUNuQixhQUFPLFNBQVMsS0FBSyxPQUFPLFNBQVMsa0JBQWtCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDL0UsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLG9CQUFvQixNQUFNLENBQUM7QUFBQSxNQUNsRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQ0wsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxtQkFBbUIsRUFDM0IsUUFBUSxrREFBa0QsRUFDMUQsVUFBVSxDQUFDLFdBQVc7QUFDbkIsYUFBTyxTQUFTLEtBQUssT0FBTyxTQUFTLFFBQVEsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUNyRSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBQSxNQUN4RCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsU0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsY0FBYyxFQUN0QixRQUFRLDBDQUEwQyxFQUNsRCxRQUFRLENBQUNDLFVBQVM7QUFDZixNQUFBQSxNQUFLLFNBQVMsS0FBSyxPQUFPLFNBQVMsWUFBWSxFQUFFLFNBQVMsT0FBTyxVQUFVO0FBQ3ZFLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxjQUFjLE1BQU0sQ0FBQztBQUFBLE1BQzVELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLHFCQUFxQixFQUM3QjtBQUFBLE1BQ0c7QUFBQSxJQUNKLEVBQ0MsUUFBUSxDQUFDQSxVQUFTO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLEtBQUssT0FBTyxTQUFTLGlCQUFpQixFQUFFLFNBQVMsT0FBTyxVQUFVO0FBRTVFLFlBQUk7QUFDQSxtQkFBUyxXQUFXLEtBQUssSUFBSSxDQUFDLEVBQUUsU0FBUyxLQUFLO0FBQUEsUUFDbEQsU0FBUUMsSUFBTjtBQUNFO0FBQUEsUUFDSjtBQUNBLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxtQkFBbUIsTUFBTSxDQUFDO0FBQUEsTUFDakUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsMEJBQTBCLEVBQ2xDO0FBQUEsTUFDRztBQUFBLElBQ0osRUFDQyxRQUFRLENBQUNELFVBQVM7QUFDZixNQUFBQSxNQUFLLFNBQVMsS0FBSyxPQUFPLFNBQVMscUJBQXFCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDaEYsWUFBSTtBQUNBLG1CQUFTLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxTQUFTLEtBQUs7QUFBQSxRQUNsRCxTQUFRQyxJQUFOO0FBQ0U7QUFBQSxRQUNKO0FBQ0EsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHVCQUF1QixNQUFNLENBQUM7QUFBQSxNQUNyRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsU0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUQsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxlQUFlLEVBQ3ZCO0FBQUEsTUFDRztBQUFBLElBR0osRUFDQyxVQUFVLENBQUMsV0FBVztBQUNuQixhQUFPLFNBQVMsS0FBSyxPQUFPLFNBQVMsaUJBQWlCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDOUUsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLG1CQUFtQixNQUFNLENBQUM7QUFBQSxNQUdqRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxrQkFBa0IsRUFDMUIsUUFBUSw2REFBNkQsRUFDckUsUUFBUSxDQUFDRCxVQUFTO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLEtBQUssS0FBSyxPQUFPLFNBQVMsa0JBQWtCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDbEYsY0FBTSxTQUFTLFNBQVMsS0FBSztBQUM3QixZQUFJLE1BQU0sTUFBTTtBQUFHO0FBRW5CLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxvQkFBb0IsT0FBTyxDQUFDO0FBQUEsTUFDbkUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsc0JBQXNCLEVBQzlCLFFBQVEsK0VBQStFLEVBQ3ZGLFFBQVEsQ0FBQ0EsVUFBUztBQUNmLE1BQUFBLE1BQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxvQkFBb0IsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUN6RixjQUFNLFNBQVMsV0FBVyxLQUFLO0FBQy9CLFlBQUksTUFBTSxNQUFNO0FBQUc7QUFFbkIsY0FBTSxVQUFVLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFLLE1BQU0sQ0FBQztBQUNuRCxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUscUJBQXFCLFFBQVEsQ0FBQztBQUFBLE1BQ3JFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLGdDQUFnQyxFQUN4QztBQUFBLE1BQ0c7QUFBQSxJQUdKLEVBQ0MsUUFBUSxDQUFDQSxVQUFTO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLEtBQUssT0FBTyxTQUFTLHdCQUF3QixTQUFTLENBQUMsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUM3RixjQUFNLFNBQVMsU0FBUyxLQUFLO0FBQzdCLFlBQUksTUFBTSxNQUFNO0FBQUc7QUFDbkIsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHlCQUF5QixPQUFPLENBQUM7QUFBQSxNQUN4RSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQ0wsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSw4QkFBOEIsRUFDdEMsUUFBUSw0RkFBNEYsRUFDcEcsVUFBVSxDQUFDLE9BQU87QUFDZixTQUFHLFNBQVMsS0FBSyxPQUFPLFNBQVMsdUJBQXVCLEVBQUUsU0FBUyxPQUFPLFFBQVE7QUFDOUUsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHlCQUF5QixJQUFJLENBQUM7QUFBQSxNQUNyRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsU0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWpELFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsc0JBQXNCLEVBQzlCLFFBQVEsa0VBQWtFLEVBQzFFLFFBQVEsQ0FBQ0EsVUFBUztBQUNmLE1BQUFBLE1BQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxrQkFBa0IsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUM3RSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQztBQUFBLE1BQ2xFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLHlDQUF5QyxFQUNqRDtBQUFBLE1BQ0c7QUFBQSxJQUVKLEVBQ0MsVUFBVSxDQUFDLE9BQU87QUFDZixTQUFHLFNBQVMsS0FBSyxPQUFPLFNBQVMsK0JBQStCLEVBQUUsU0FBUyxPQUFPLFFBQVE7QUFDdEYsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLGlDQUFpQyxJQUFJLENBQUM7QUFBQSxNQUM3RSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDVDtBQUNKOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibiIsICJ0IiwgInIiLCAiZSIsICJ1IiwgIm8iLCAiaSIsICJhIiwgImYiLCAiYyIsICJzIiwgImwiLCAieCIsICJiIiwgImgiLCAicCIsICJkIiwgInYiLCAiZyIsICJtIiwgInkiLCAiRSIsICJ3IiwgIkIiLCAiaiIsICJTIiwgIl8iLCAiTCIsICJPIiwgImsiLCAiUCIsICJxIiwgIkEiLCAiSSIsICJGIiwgIk0iLCAieiIsICJSIiwgIlUiLCAiVyIsICJEIiwgIk4iLCAiRyIsICJDIiwgIkoiLCAiVCIsICJZIiwgIlYiLCAiSCIsICJYIiwgIksiLCAiUSIsICJaIiwgIiQiLCAibm4iLCAidG4iLCAicm4iLCAiYW4iLCAiZW4iLCAidW4iLCAib24iLCAiZm4iLCAiY24iLCAic24iLCAiaG4iLCAicG4iLCAiZG4iLCAidm4iLCAiZ24iLCAibW4iLCAieW4iLCAic2V0IiwgImdldCIsICJpbmRleCIsICJhcnJheSIsICJsZW5ndGgiLCAiaSIsICJrIiwgInNlbWljb2xvbiIsICJpIiwgImMiLCAic3RhdGUiLCAiaW5kZXgiLCAibGluZSIsICJqIiwgInNoaWZ0IiwgImxlbmd0aCIsICJhIiwgImIiLCAibmV4dCIsICJpbnB1dCIsICJtYXRjaCIsICJoYXNoIiwgInVybCIsICJpbmRleCIsICJpIiwgImlucHV0IiwgImluZGV4IiwgImkiLCAibGluZSIsICJqIiwgImEiLCAiYiIsICJzdGF0ZSIsICJzb3VyY2VJbmRleCIsICJhcnJheSIsICJwYXJzZSIsICJvZmZzZXQiLCAiYXBwZW5kIiwgImNvbHVtbiIsICJpc1N0cmluZyIsICJmcm9tIiwgInMiLCAiZW5jb2RlIiwgImRlY29kZSIsICJjbG9uZSIsICJic0ZvdW5kIiwgIm1pbiIsICJtYXgiLCAiR2VuTWFwcGluZyIsICJTZXRBcnJheSIsICJtYXliZUFkZFNlZ21lbnQiLCAiaW5kZXgiLCAicHV0IiwgInJlbW92ZSIsICJ0b0VuY29kZWRNYXAiLCAiZW5jb2RlIiwgImlucHV0IiwgIlRyYWNlTWFwIiwgImRlY29kZWRNYXBwaW5ncyIsICJpIiwgImxpbmUiLCAiaiIsICJhcnJheSIsICJsZW5ndGgiLCAicHJldiIsICJkIiwgImIiLCAicCIsICJWRXJyb3IiLCAiTm9vcENvbnRleHQiLCAiRGV0YWlsQ29udGV4dCIsICJ1IiwgImkiLCAibSIsICJEZXRhaWxVbmlvblJlc29sdmVyIiwgImQiLCAiYiIsICJwIiwgIlRUeXBlIiwgIm5hbWUiLCAiVE5hbWUiLCAibGl0IiwgIlRMaXRlcmFsIiwgImFycmF5IiwgIlRBcnJheSIsICJpIiwgIl9pIiwgInQiLCAiVFR1cGxlIiwgInVuaW9uIiwgIlRVbmlvbiIsICJuIiwgIlRJbnRlcnNlY3Rpb24iLCAiVEVudW1UeXBlIiwgIlRFbnVtTGl0ZXJhbCIsICJpZmFjZSIsICJUSWZhY2UiLCAidiIsICJvcHQiLCAiVE9wdGlvbmFsIiwgIlRQcm9wIiwgIlRGdW5jIiwgIlRQYXJhbSIsICJUUGFyYW1MaXN0IiwgInBhcmFtIiwgIkJhc2ljVHlwZSIsICJhcnJheV8xIiwgInMiLCAiaSIsICJyIiwgImsiLCAiYSIsICJqIiwgImNyZWF0ZUNoZWNrZXJzIiwgIkNoZWNrZXIiLCAicCIsICJMaW5lc0FuZENvbHVtbnMiLCAic3RyaW5nIiwgIm9mZnNldCIsICJpbmRleCIsICJsaW5lIiwgImNvbHVtbiIsICJFbGVtZW50IiwgImlzRWxlbWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImkiLCAiZSIsICJtb2R1bGUiLCAiaGFzT3duUHJvcGVydHkiLCAiaSIsICJuIiwgImZyb20iLCAicyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJ0ZXh0IiwgIngiLCAibW9kdWxlIiwgImFzc2lnbiIsICJ0ZXh0IiwgIngiLCAieSIsICJpIiwgImNoZWNrZXIiLCAiaXNOb2RlIiwgIm1vZHVsZSIsICJkIiwgImIiLCAicCIsICJhIiwgIkJUcmVlIiwgImsiLCAidiIsICJpIiwgIm5leHQiLCAic3RhdGUiLCAiY3Vyc29yIiwgIm5vZGUiLCAibiIsICJtaW4iLCAibWF4IiwgInIiLCAidCIsICJzaXplIiwgIkJOb2RlIiwgImMiLCAiXyIsICJCTm9kZUludGVybmFsIiwgImxlbmd0aCIsICJtb2R1bGUiLCAiZiIsICJnIiwgImRlZmluZSIsICJleHBvcnRzIiwgImUiLCAidCIsICJuIiwgInIiLCAicyIsICJvIiwgInUiLCAiYSIsICJpIiwgImwiLCAiZ2xvYmFsIiwgIlByb21pc2UiLCAic2VsZiIsICJfdHlwZW9mIiwgIl9jbGFzc0NhbGxDaGVjayIsICJrZXkiLCAibGVuZ3RoIiwgImlkYiIsICJvcHRpb25zIiwgImoiLCAiayIsICJmb3JhZ2UiLCAiY3Vyc29yIiwgInZhbHVlIiwgImVyciIsICJrZXlzIiwgImRiIiwgInAiLCAic2VyaWFsaXplIiwgImVycm9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInNhbWVWYWx1ZSIsICJ4IiwgInkiLCAiaW5jbHVkZXMiLCAiYXJyYXkiLCAiaXNBcnJheSIsICJMb2NhbEZvcmFnZSIsICJjb25maWciLCAiY29uZmlndXJlTWlzc2luZ01ldGhvZHMiLCAibWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5IiwgInByb21pc2UiLCAic2V0RHJpdmVyU3VwcG9ydCIsICJzdXBwb3J0ZWREcml2ZXJzIiwgIlF1ZXVlIiwgInJlcXVpcmVfcXVldWUiLCAiUXVldWUiLCAibyIsICJlIiwgIm5leHQiLCAiYSIsICJrIiwgIngiLCAibiIsICJpbnB1dCIsICJzdHJpbmciLCAiZiIsICJkIiwgInAyIiwgIm0iLCAidSIsICJ2IiwgIm9mZnNldCIsICJsZW5ndGgiLCAicyIsICJ0b2tlbiIsICJpIiwgImMiLCAibiIsICJwIiwgInN0cmluZyIsICJmb3JtYXRPZmZzZXQiLCAibGVuZ3RoIiwgInQiLCAiaSIsICJzIiwgImUiLCAic2luZ2xldG9uIiwgIm9mZnNldCIsICJzIiwgInIiLCAiaW5wdXQiLCAiZGVmYXVsdFpvbmUiLCAib2Zmc2V0IiwgIm4iLCAidCIsICJvcHRpb25zIiwgImUiLCAiZiIsICJpIiwgImxlbmd0aCIsICJmbG9vciIsICJ6IiwgIm0iLCAiZiIsICJyIiwgIm0iLCAiY3Vyc29yIiwgIm5leHQiLCAicyIsICJyZWdleCIsICJtYXRjaCIsICJpIiwgIm9mZnNldCIsICJuIiwgImNvbmZpZyIsICJ0ZXh0IiwgIm8iLCAibCIsICJzIiwgImsiLCAiZm4iLCAidSIsICJpIiwgInYyIiwgIklOVkFMSUQiLCAiZW5kIiwgImNvbmZpZyIsICJ0ZXh0IiwgInMiLCAiZSIsICJvIiwgImQiLCAiaSIsICJuZXh0IiwgIngiLCAiYSIsICJiIiwgImlucHV0IiwgImxlbmd0aCIsICJjdXJzb3IiLCAiYSIsICJiIiwgInUiLCAiaSIsICJtaW4iLCAibWF4IiwgImFwcGVuZCIsICJyZWdleCIsICJpIiwgInMiLCAiaCIsICJtIiwgInRva2VuIiwgInQiLCAidSIsICJmIiwgInIiLCAiaW5wdXQiLCAiayIsICJwIiwgImQiLCAiaSIsICJJTlZBTElEIiwgImNsb25lIiwgIm8iLCAibzIiLCAibzMiLCAib2Zmc2V0IiwgImQiLCAiYyIsICJ0ZXh0IiwgIm9yZGVyZWRVbml0cyIsICJ1IiwgImVuZCIsICJyb3VuZCIsICJjb25maWciLCAib3B0aW9ucyIsICJ2IiwgInEiLCAiaSIsICJfIiwgInRleHQiLCAiZW5kIiwgIm9mZnNldCIsICJwb3NpdGlvbiIsICJQIiwgIkxpdGVyYWxzIiwgImYiLCAiZSIsICJpc051bWJlciIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNBcnJheSIsICJ4IiwgImYyIiwgImluZGV4IiwgIm8yIiwgImsyIiwgInYiLCAiR3JvdXBpbmdzIiwgInNsaWNlIiwgImVuZCIsICJmIiwgIlJlc3VsdCIsICJhIiwgImIiLCAiaW5wdXQiLCAiRmlsdGVycyIsICJzZXQiLCAieCIsICJ1bmlvbiIsICJhIiwgImIiLCAiYXRvbSIsICJuZWdhdGVkIiwgIkV4cHJlc3Npb25zIiwgImluZGV4IiwgImZ1bmMiLCAiYSIsICJ2IiwgImsiLCAiXyIsICJxIiwgInAiLCAibCIsICJhIiwgImIiLCAiZCIsICJ0IiwgIngiLCAiYyIsICJmIiwgIl8yIiwgIl8zIiwgImNvbWJpbmUiLCAibm9kZSIsICJpbmRleCIsICJmIiwgImEiLCAiaW5wdXQiLCAiaSIsICJuZXh0IiwgIm1hdGNoIiwgIm1hdGNoMiIsICJNT0RFX0hZRFJBVEUiLCAic2xpY2UiLCAib3B0aW9ucyIsICJ2bm9kZUlkIiwgImlzVmFsaWRFbGVtZW50IiwgInJlcmVuZGVyUXVldWUiLCAicHJldkRlYm91bmNlIiwgImRlZmVyIiwgImRlcHRoU29ydCIsICJldmVudENsb2NrIiwgImV2ZW50UHJveHkiLCAiZXZlbnRQcm94eUNhcHR1cmUiLCAiaSIsICJFTVBUWV9PQkoiLCAiRU1QVFlfQVJSIiwgIklTX05PTl9ESU1FTlNJT05BTCIsICJpc0FycmF5IiwgIkFycmF5IiwgImFzc2lnbiIsICJvYmoiLCAicHJvcHMiLCAicmVtb3ZlTm9kZSIsICJub2RlIiwgInBhcmVudE5vZGUiLCAicmVtb3ZlQ2hpbGQiLCAiY3JlYXRlRWxlbWVudCIsICJ0eXBlIiwgImNoaWxkcmVuIiwgImtleSIsICJyZWYiLCAibm9ybWFsaXplZFByb3BzIiwgImFyZ3VtZW50cyIsICJsZW5ndGgiLCAiY2FsbCIsICJkZWZhdWx0UHJvcHMiLCAiY3JlYXRlVk5vZGUiLCAib3JpZ2luYWwiLCAidm5vZGUiLCAiX19rIiwgIl9fIiwgIl9fYiIsICJfX2UiLCAiX19kIiwgIl9fYyIsICJjb25zdHJ1Y3RvciIsICJfX3YiLCAiX19pIiwgIl9fdSIsICJjcmVhdGVSZWYiLCAiY3VycmVudCIsICJGcmFnbWVudCIsICJCYXNlQ29tcG9uZW50IiwgImNvbnRleHQiLCAidGhpcyIsICJnZXREb21TaWJsaW5nIiwgImNoaWxkSW5kZXgiLCAic2libGluZyIsICJ1cGRhdGVQYXJlbnREb21Qb2ludGVycyIsICJjaGlsZCIsICJiYXNlIiwgImVucXVldWVSZW5kZXIiLCAiYyIsICJwdXNoIiwgInByb2Nlc3MiLCAiZGVib3VuY2VSZW5kZXJpbmciLCAicmVuZGVyUXVldWVMZW5ndGgiLCAiY29tcG9uZW50IiwgIm5ld1ZOb2RlIiwgIm9sZFZOb2RlIiwgIm9sZERvbSIsICJjb21taXRRdWV1ZSIsICJyZWZRdWV1ZSIsICJzb3J0IiwgInNoaWZ0IiwgIl9fUCIsICJkaWZmIiwgIl9fbiIsICJvd25lclNWR0VsZW1lbnQiLCAiY29tbWl0Um9vdCIsICJkaWZmQ2hpbGRyZW4iLCAicGFyZW50RG9tIiwgInJlbmRlclJlc3VsdCIsICJuZXdQYXJlbnRWTm9kZSIsICJvbGRQYXJlbnRWTm9kZSIsICJnbG9iYWxDb250ZXh0IiwgImlzU3ZnIiwgImV4Y2Vzc0RvbUNoaWxkcmVuIiwgImlzSHlkcmF0aW5nIiwgImNoaWxkVk5vZGUiLCAibmV3RG9tIiwgImZpcnN0Q2hpbGREb20iLCAib2xkQ2hpbGRyZW4iLCAibmV3Q2hpbGRyZW5MZW5ndGgiLCAiY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheSIsICJhcHBseVJlZiIsICJpc0Nvbm5lY3RlZCIsICJpbnNlcnQiLCAibmV4dFNpYmxpbmciLCAic2tld2VkSW5kZXgiLCAibWF0Y2hpbmdJbmRleCIsICJvbGRDaGlsZHJlbkxlbmd0aCIsICJyZW1haW5pbmdPbGRDaGlsZHJlbiIsICJza2V3IiwgIlN0cmluZyIsICJmaW5kTWF0Y2hpbmdJbmRleCIsICJ1bm1vdW50IiwgInBhcmVudFZOb2RlIiwgImluc2VydEJlZm9yZSIsICJub2RlVHlwZSIsICJ0b0NoaWxkQXJyYXkiLCAib3V0IiwgInNvbWUiLCAieCIsICJ5IiwgInNldFN0eWxlIiwgInN0eWxlIiwgInZhbHVlIiwgInNldFByb3BlcnR5IiwgInRlc3QiLCAiZG9tIiwgIm5hbWUiLCAib2xkVmFsdWUiLCAidXNlQ2FwdHVyZSIsICJvIiwgImNzc1RleHQiLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJsIiwgIl9hdHRhY2hlZCIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgImNyZWF0ZUV2ZW50UHJveHkiLCAiZXZlbnRIYW5kbGVyIiwgIl9kaXNwYXRjaGVkIiwgImV2ZW50IiwgInRtcCIsICJpc05ldyIsICJvbGRQcm9wcyIsICJvbGRTdGF0ZSIsICJzbmFwc2hvdCIsICJjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24iLCAibmV3UHJvcHMiLCAicHJvdmlkZXIiLCAiY29tcG9uZW50Q29udGV4dCIsICJyZW5kZXJIb29rIiwgImNvdW50IiwgIm5ld1R5cGUiLCAib3V0ZXIiLCAiY29udGV4dFR5cGUiLCAiX19FIiwgInByb3RvdHlwZSIsICJyZW5kZXIiLCAiZG9SZW5kZXIiLCAic3ViIiwgInN0YXRlIiwgIl9faCIsICJfc2IiLCAiX19zIiwgImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsICJzaG91bGRDb21wb25lbnRVcGRhdGUiLCAiZm9yRWFjaCIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJfX3IiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwgImluZGV4T2YiLCAiZGlmZkVsZW1lbnROb2RlcyIsICJkaWZmZWQiLCAicm9vdCIsICJjYiIsICJuZXdIdG1sIiwgIm9sZEh0bWwiLCAibmV3Q2hpbGRyZW4iLCAiaW5wdXRWYWx1ZSIsICJjaGVja2VkIiwgImxvY2FsTmFtZSIsICJkb2N1bWVudCIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVFbGVtZW50TlMiLCAiaXMiLCAiZGF0YSIsICJjaGlsZE5vZGVzIiwgImF0dHJpYnV0ZXMiLCAiX19odG1sIiwgImlubmVySFRNTCIsICJza2lwUmVtb3ZlIiwgInIiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVwbGFjZU5vZGUiLCAiZmlyc3RDaGlsZCIsICJoeWRyYXRlIiwgImNsb25lRWxlbWVudCIsICJjcmVhdGVDb250ZXh0IiwgImRlZmF1bHRWYWx1ZSIsICJjb250ZXh0SWQiLCAiQ29uc3VtZXIiLCAiY29udGV4dFZhbHVlIiwgIlByb3ZpZGVyIiwgInN1YnMiLCAiY3R4IiwgIl9wcm9wcyIsICJvbGQiLCAic3BsaWNlIiwgImVycm9yIiwgImVycm9ySW5mbyIsICJjdG9yIiwgImhhbmRsZWQiLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwgInNldFN0YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgInVuZGVmaW5lZCIsICJ1cGRhdGUiLCAiY2FsbGJhY2siLCAicyIsICJmb3JjZVVwZGF0ZSIsICJQcm9taXNlIiwgInRoZW4iLCAiYmluZCIsICJyZXNvbHZlIiwgInNldFRpbWVvdXQiLCAiYSIsICJiIiwgImN1cnJlbnRJbmRleCIsICJjdXJyZW50Q29tcG9uZW50IiwgInByZXZpb3VzQ29tcG9uZW50IiwgInByZXZSYWYiLCAiY3VycmVudEhvb2siLCAiYWZ0ZXJQYWludEVmZmVjdHMiLCAiRU1QVFkiLCAib3B0aW9ucyIsICJfb3B0aW9ucyIsICJvbGRCZWZvcmVEaWZmIiwgIl9fYiIsICJvbGRCZWZvcmVSZW5kZXIiLCAiX19yIiwgIm9sZEFmdGVyRGlmZiIsICJkaWZmZWQiLCAib2xkQ29tbWl0IiwgIl9fYyIsICJvbGRCZWZvcmVVbm1vdW50IiwgInVubW91bnQiLCAib2xkUm9vdCIsICJfXyIsICJnZXRIb29rU3RhdGUiLCAiaW5kZXgiLCAidHlwZSIsICJfX2giLCAiaG9va3MiLCAiX19IIiwgImxlbmd0aCIsICJwdXNoIiwgIl9fViIsICJ1c2VTdGF0ZSIsICJpbml0aWFsU3RhdGUiLCAidXNlUmVkdWNlciIsICJpbnZva2VPclJldHVybiIsICJyZWR1Y2VyIiwgImluaXQiLCAiaG9va1N0YXRlIiwgIl9yZWR1Y2VyIiwgImFjdGlvbiIsICJjdXJyZW50VmFsdWUiLCAiX19OIiwgIm5leHRWYWx1ZSIsICJzZXRTdGF0ZSIsICJfaGFzU2N1RnJvbUhvb2tzIiwgInVwZGF0ZUhvb2tTdGF0ZSIsICJwIiwgInMiLCAiYyIsICJzdGF0ZUhvb2tzIiwgImZpbHRlciIsICJ4IiwgImV2ZXJ5IiwgInByZXZTY3UiLCAiY2FsbCIsICJ0aGlzIiwgInNob3VsZFVwZGF0ZSIsICJmb3JFYWNoIiwgImhvb2tJdGVtIiwgInByb3BzIiwgInNob3VsZENvbXBvbmVudFVwZGF0ZSIsICJwcmV2Q1dVIiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiX19lIiwgInRtcCIsICJ1c2VFZmZlY3QiLCAiY2FsbGJhY2siLCAiYXJncyIsICJzdGF0ZSIsICJhcmdzQ2hhbmdlZCIsICJfcGVuZGluZ0FyZ3MiLCAidXNlTGF5b3V0RWZmZWN0IiwgIl9fcyIsICJ1c2VSZWYiLCAiaW5pdGlhbFZhbHVlIiwgInVzZU1lbW8iLCAiY3VycmVudCIsICJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwgInJlZiIsICJjcmVhdGVIYW5kbGUiLCAiY29uY2F0IiwgImZhY3RvcnkiLCAidXNlQ2FsbGJhY2siLCAidXNlQ29udGV4dCIsICJjb250ZXh0IiwgInByb3ZpZGVyIiwgInN1YiIsICJ2YWx1ZSIsICJ1c2VEZWJ1Z1ZhbHVlIiwgImZvcm1hdHRlciIsICJ1c2VFcnJvckJvdW5kYXJ5IiwgImNiIiwgImVyclN0YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgImVyciIsICJlcnJvckluZm8iLCAidW5kZWZpbmVkIiwgInVzZUlkIiwgInJvb3QiLCAiX19tIiwgIm1hc2siLCAiZmx1c2hBZnRlclBhaW50RWZmZWN0cyIsICJjb21wb25lbnQiLCAic2hpZnQiLCAiX19QIiwgImludm9rZUNsZWFudXAiLCAiaW52b2tlRWZmZWN0IiwgImUiLCAiX192IiwgInZub2RlIiwgInBhcmVudERvbSIsICJfX2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImFmdGVyTmV4dEZyYW1lIiwgImNvbW1pdFF1ZXVlIiwgInNvbWUiLCAiaGFzRXJyb3JlZCIsICJIQVNfUkFGIiwgInJhZiIsICJkb25lIiwgImNsZWFyVGltZW91dCIsICJ0aW1lb3V0IiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgInNldFRpbWVvdXQiLCAiaG9vayIsICJjb21wIiwgImNsZWFudXAiLCAib2xkQXJncyIsICJuZXdBcmdzIiwgImFyZyIsICJmIiwgImFzc2lnbiIsICJvYmoiLCAicHJvcHMiLCAiaSIsICJzaGFsbG93RGlmZmVycyIsICJhIiwgImIiLCAiUHVyZUNvbXBvbmVudCIsICJwIiwgImMiLCAidGhpcyIsICJjb250ZXh0IiwgIm1lbW8iLCAiY29tcGFyZXIiLCAic2hvdWxkVXBkYXRlIiwgIm5leHRQcm9wcyIsICJyZWYiLCAidXBkYXRlUmVmIiwgImNhbGwiLCAiY3VycmVudCIsICJNZW1vZWQiLCAic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwgImNyZWF0ZUVsZW1lbnQiLCAiZGlzcGxheU5hbWUiLCAibmFtZSIsICJwcm90b3R5cGUiLCAiaXNSZWFjdENvbXBvbmVudCIsICJDb21wb25lbnQiLCAiaXNQdXJlUmVhY3RDb21wb25lbnQiLCAic3RhdGUiLCAib2xkRGlmZkhvb2siLCAib3B0aW9ucyIsICJfX2IiLCAidm5vZGUiLCAidHlwZSIsICJfX2YiLCAiUkVBQ1RfRk9SV0FSRF9TWU1CT0wiLCAiU3ltYm9sIiwgImZvciIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkZvcndhcmRlZCIsICJjbG9uZSIsICIkJHR5cGVvZiIsICJyZW5kZXIiLCAibWFwRm4iLCAiY2hpbGRyZW4iLCAidG9DaGlsZEFycmF5IiwgIm1hcCIsICJDaGlsZHJlbiIsICJmb3JFYWNoIiwgImNvdW50IiwgImxlbmd0aCIsICJvbmx5IiwgIm5vcm1hbGl6ZWQiLCAidG9BcnJheSIsICJvbGRDYXRjaEVycm9yIiwgImVycm9yIiwgIm5ld1ZOb2RlIiwgIm9sZFZOb2RlIiwgImVycm9ySW5mbyIsICJ0aGVuIiwgImNvbXBvbmVudCIsICJfXyIsICJfX2MiLCAiX19lIiwgIl9fayIsICJvbGRVbm1vdW50IiwgInVubW91bnQiLCAiZGV0YWNoZWRDbG9uZSIsICJkZXRhY2hlZFBhcmVudCIsICJwYXJlbnREb20iLCAiX19IIiwgImVmZmVjdCIsICJfX1AiLCAiY2hpbGQiLCAicmVtb3ZlT3JpZ2luYWwiLCAib3JpZ2luYWxQYXJlbnQiLCAiX192IiwgImFwcGVuZENoaWxkIiwgIlN1c3BlbnNlIiwgIl9fdSIsICJfc3VzcGVuZGVycyIsICJzdXNwZW5kZWQiLCAiX19hIiwgImxhenkiLCAibG9hZGVyIiwgInByb20iLCAiTGF6eSIsICJleHBvcnRzIiwgImRlZmF1bHQiLCAiZSIsICJTdXNwZW5zZUxpc3QiLCAiX25leHQiLCAiX21hcCIsICJfX1IiLCAicHJvbWlzZSIsICJzdXNwZW5kaW5nVk5vZGUiLCAic3VzcGVuZGluZ0NvbXBvbmVudCIsICJwdXNoIiwgInJlc29sdmUiLCAicmVzb2x2ZWQiLCAib25SZXNvbHZlZCIsICJvblN1c3BlbnNpb25Db21wbGV0ZSIsICJzdXNwZW5kZWRWTm9kZSIsICJfX08iLCAic2V0U3RhdGUiLCAicG9wIiwgImZvcmNlVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImRvY3VtZW50IiwgImRldGFjaGVkQ29tcG9uZW50IiwgImZhbGxiYWNrIiwgIkZyYWdtZW50IiwgImxpc3QiLCAibm9kZSIsICJkZWxldGUiLCAicmV2ZWFsT3JkZXIiLCAic2l6ZSIsICJDb250ZXh0UHJvdmlkZXIiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgIlBvcnRhbCIsICJfdGhpcyIsICJjb250YWluZXIiLCAiX2NvbnRhaW5lciIsICJfdGVtcCIsICJub2RlVHlwZSIsICJwYXJlbnROb2RlIiwgImNoaWxkTm9kZXMiLCAiaW5zZXJ0QmVmb3JlIiwgImJlZm9yZSIsICJyZW1vdmVDaGlsZCIsICJzcGxpY2UiLCAiaW5kZXhPZiIsICJjcmVhdGVQb3J0YWwiLCAiZWwiLCAiY29udGFpbmVySW5mbyIsICJkZWxlZ2F0ZWQiLCAiZ2V0IiwgInVuc3VzcGVuZCIsICJ3cmFwcGVkVW5zdXNwZW5kIiwgIk1hcCIsICJyZXZlcnNlIiwgInNldCIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiUkVBQ1RfRUxFTUVOVF9UWVBFIiwgIkNBTUVMX1BST1BTIiwgIk9OX0FOSSIsICJDQU1FTF9SRVBMQUNFIiwgIklTX0RPTSIsICJvbkNoYW5nZUlucHV0VHlwZSIsICJ0ZXN0IiwgInBhcmVudCIsICJjYWxsYmFjayIsICJ0ZXh0Q29udGVudCIsICJwcmVhY3RSZW5kZXIiLCAiaHlkcmF0ZSIsICJwcmVhY3RIeWRyYXRlIiwgImtleSIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgInYiLCAid3JpdGFibGUiLCAidmFsdWUiLCAib2xkRXZlbnRIb29rIiwgImV2ZW50IiwgImVtcHR5IiwgImlzUHJvcGFnYXRpb25TdG9wcGVkIiwgImNhbmNlbEJ1YmJsZSIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZGVmYXVsdFByZXZlbnRlZCIsICJwZXJzaXN0IiwgIm5hdGl2ZUV2ZW50IiwgImN1cnJlbnRDb21wb25lbnQiLCAiY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlIiwgImVudW1lcmFibGUiLCAiY2xhc3MiLCAib2xkVk5vZGVIb29rIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJsb3dlckNhc2VkIiwgInRvTG93ZXJDYXNlIiwgInJlcGxhY2UiLCAibXVsdGlwbGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJzZWxlY3RlZCIsICJkZWZhdWx0VmFsdWUiLCAiY2xhc3NOYW1lIiwgIm9sZEJlZm9yZVJlbmRlciIsICJfX3IiLCAib2xkRGlmZmVkIiwgImRpZmZlZCIsICJkb20iLCAiX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQiLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJyZWFkQ29udGV4dCIsICJfX24iLCAidXNlQ2FsbGJhY2siLCAidXNlQ29udGV4dCIsICJ1c2VEZWJ1Z1ZhbHVlIiwgInVzZURlZmVycmVkVmFsdWUiLCAidXNlRWZmZWN0IiwgInVzZUlkIiwgInVzZUltcGVyYXRpdmVIYW5kbGUiLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVJlZHVjZXIiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwgInVzZVRyYW5zaXRpb24iLCAiY3JlYXRlRmFjdG9yeSIsICJ0eXBlIiwgImNyZWF0ZUVsZW1lbnQiLCAiYmluZCIsICJpc1ZhbGlkRWxlbWVudCIsICJlbGVtZW50IiwgIiQkdHlwZW9mIiwgIlJFQUNUX0VMRU1FTlRfVFlQRSIsICJpc0ZyYWdtZW50IiwgIkZyYWdtZW50IiwgImlzTWVtbyIsICJkaXNwbGF5TmFtZSIsICJTdHJpbmciLCAic3RhcnRzV2l0aCIsICJjbG9uZUVsZW1lbnQiLCAicHJlYWN0Q2xvbmVFbGVtZW50IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwgImNvbnRhaW5lciIsICJfX2siLCAicHJlYWN0UmVuZGVyIiwgImZpbmRET01Ob2RlIiwgImNvbXBvbmVudCIsICJiYXNlIiwgIm5vZGVUeXBlIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgImNhbGxiYWNrIiwgImFyZyIsICJmbHVzaFN5bmMiLCAiU3RyaWN0TW9kZSIsICJzdGFydFRyYW5zaXRpb24iLCAiY2IiLCAidXNlRGVmZXJyZWRWYWx1ZSIsICJ2YWwiLCAidXNlVHJhbnNpdGlvbiIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgImlzRWxlbWVudCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsICJzdWJzY3JpYmUiLCAiZ2V0U25hcHNob3QiLCAidmFsdWUiLCAidXNlU3RhdGUiLCAiX2luc3RhbmNlIiwgIl9fIiwgIl9nZXRTbmFwc2hvdCIsICJfdXNlU3RhdGUiLCAiZm9yY2VVcGRhdGUiLCAiZGlkU25hcHNob3RDaGFuZ2UiLCAidXNlRWZmZWN0IiwgImluc3QiLCAieCIsICJ5IiwgImxhdGVzdEdldFNuYXBzaG90IiwgInByZXZWYWx1ZSIsICJuZXh0VmFsdWUiLCAiZXJyb3IiLCAiaW5kZXgiLCAidXNlSWQiLCAidXNlUmVkdWNlciIsICJ1c2VSZWYiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRleHQiLCAidXNlRGVidWdWYWx1ZSIsICJ2ZXJzaW9uIiwgIkNoaWxkcmVuIiwgInJlbmRlciIsICJoeWRyYXRlIiwgImNyZWF0ZVBvcnRhbCIsICJjcmVhdGVDb250ZXh0IiwgImNyZWF0ZVJlZiIsICJDb21wb25lbnQiLCAiUHVyZUNvbXBvbmVudCIsICJtZW1vIiwgImZvcndhcmRSZWYiLCAiU3VzcGVuc2UiLCAiU3VzcGVuc2VMaXN0IiwgImxhenkiLCAiX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQiLCAidm5vZGVJZCIsICJpc0FycmF5IiwgIkFycmF5IiwgImNyZWF0ZVZOb2RlIiwgInR5cGUiLCAicHJvcHMiLCAia2V5IiwgImlzU3RhdGljQ2hpbGRyZW4iLCAiX19zb3VyY2UiLCAiX19zZWxmIiwgInJlZiIsICJpIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJ2bm9kZSIsICJfX2siLCAiX18iLCAiX19iIiwgIl9fZSIsICJfX2QiLCAiX19jIiwgImNvbnN0cnVjdG9yIiwgIl9fdiIsICJfX2kiLCAiX191IiwgImRlZmF1bHRQcm9wcyIsICJvcHRpb25zIiwgImlubGluZSIsICJQIiwgIkYiLCAicSIsICJfIiwgInUiLCAiZW5kIiwgIngiLCAic3RhdGUiLCAieSIsICJ1IiwgIlAiLCAicSIsICJ4IiwgImlubGluZSIsICJGIiwgIl8iLCAiaW5kZXgiLCAidmFsdWUiLCAiYiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiQ29udGV4dHVhbEtleXdvcmQiLCAiVG9rZW5UeXBlIiwgInJlZ2V4cCIsICJzdHJpbmciLCAiYXJyb3ciLCAiaGFzaCIsICJhc3NpZ24iLCAiX2RlZmF1bHQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJlbmQiLCAiY2hhckNvZGVzIiwgInNlbWljb2xvbiIsICJjYXJldCIsICJsaW5lIiwgImNvbHVtbiIsICJpIiwgImwiLCAibWF0Y2giLCAiaSIsICJjaGFyIiwgImkiLCAibmV4dCIsICJJZGVudGlmaWVyUm9sZSIsICJKU1hSb2xlIiwgInRva2VuIiwgImkiLCAibWF0Y2giLCAic2l6ZSIsICJpbmRleCIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicHJlZml4IiwgImluZGV4IiwgInRva2VuIiwgInMiLCAidGV4dCIsICJ3aGl0ZXNwYWNlIiwgImkiLCAiYyIsICJvcHRpb25zIiwgImkiLCAidG9rZW4iLCAib3B0aW9ucyIsICJpIiwgImNvbXBvbmVudHMiLCAiaW5kZXgiLCAidG9rZW4iLCAib3B0aW9ucyIsICJsaW5lIiwgImkiLCAidG9rZW4iLCAiaSIsICJ0b2tlbiIsICJ0IiwgIm9wdGlvbnMiLCAibWF0Y2giLCAibWF0Y2giLCAiRnVuY3Rpb25UeXBlIiwgImkiLCAibWF0Y2giLCAibWF0Y2giLCAibWF0Y2giLCAibWF0Y2giLCAidG9rZW4iLCAiZGVjbGFyYXRpb24iLCAibWF0Y2giLCAidG9rZW4iLCAiZW5kIiwgInBhcnNlIiwgImlucHV0IiwgImlzSlNYRW5hYmxlZCIsICJpc1R5cGVTY3JpcHRFbmFibGVkIiwgImlzRmxvd0VuYWJsZWQiLCAiaW5kZXgiLCAidG9rZW4iLCAiaXNGbG93RW5hYmxlZCIsICJpbmRleCIsICJ0b2tlbiIsICJ0MiIsICJ0MyIsICJwcmVmaXgiLCAiaSIsICJ0b2tlbiIsICJpIiwgInRva2VuIiwgInByZWZpeCIsICJ0b2tlbiIsICJpZGVudGlmaWVyIiwgImluZGV4IiwgIm9wdGlvbnMiLCAiaSIsICJpIiwgImZuIiwgIl8iLCAiXzIiLCAidG9rZW4iLCAibmV4dFRva2VuIiwgImkiLCAiaW5kZXgiLCAib3B0aW9ucyIsICJpbmRleCIsICJ0b2tlbiIsICJ0b2tlbiIsICJpIiwgIm9wdGlvbnMiLCAicHJlZml4IiwgInYiLCAicyIsICJuZXh0VG9rZW4iLCAiaSIsICJpIiwgImluZGV4IiwgIm9wdGlvbnMiLCAiZSIsICJvcHRpb25zIiwgImlzSlNYRW5hYmxlZCIsICJpc1R5cGVTY3JpcHRFbmFibGVkIiwgImlzRmxvd0VuYWJsZWQiLCAicGFyc2UiLCAiXyIsICJpbXBvcnRfb2JzaWRpYW4iLCAicCIsICJxIiwgIl8iLCAiRiIsICJlIiwgIkYiLCAiXyIsICJ4IiwgInN0YXRlIiwgInAiLCAidSIsICJwIiwgIl8iLCAiZXJyb3IiLCAieCIsICJhcGkiLCAidSIsICJxIiwgInN0eWxlIiwgInUiLCAiaW1wb3J0X29ic2lkaWFuIiwgInUiLCAiZGlzYWJsZWQiLCAib25DaGFuZ2UiLCAieCIsICJtaW4iLCAibWF4IiwgIm9wdGlvbnMiLCAiZSIsICJpY29uIiwgImMiLCAiRmllbGRiZWFyaW5ncyIsICJnZXQiLCAiRXh0cmFjdG9ycyIsICJrZXkiLCAiZnJvbnRtYXR0ZXIiLCAibWVyZ2UiLCAiUCIsICJKc29uQ29udmVyc2lvbiIsICJpbnB1dCIsICJqc29uIiwgInYiLCAibGluZSIsICJpbmRleCIsICJjaGFyIiwgImxpbmUiLCAiYSIsICJiIiwgImkiLCAibGluZSIsICJyZWdleCIsICJtYXRjaCIsICJmIiwgInByZWZpeCIsICJmIiwgImwiLCAiaSIsICJsaW5lIiwgImlucHV0IiwgIngiLCAibyIsICJ0IiwgInIiLCAiZSIsICJpIiwgInQiLCAiaSIsICJlIiwgInIiLCAidCIsICJvIiwgInIiLCAibCIsICJ0IiwgImUiLCAibiIsICJpIiwgInUiLCAiYSIsICJmIiwgIm8iLCAiaSIsICJvIiwgIm4iLCAiaSIsICJpIiwgIl9yZWYiLCAicCIsICJvbkNoYW5nZSIsICJ4IiwgInZhbHVlIiwgImkiLCAiaSIsICJvIiwgInAiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAiX2dldFByb3RvdHlwZU9mIiwgInQiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJzZWxmIiwgInNlbGYiLCAiaSIsICJvcHRpb25zIiwgIlN0eWxlU2hlZXQiLCAiaXNJbXBvcnRSdWxlIiwgImUiLCAibGVuZ3RoIiwgIm1hdGNoIiwgImluZGV4IiwgImJlZ2luIiwgImVuZCIsICJhcnJheSIsICJsZW5ndGgiLCAibmV4dCIsICJiZWdpbiIsICJlbmQiLCAid2hpdGVzcGFjZSIsICJuZXh0IiwgImluZGV4IiwgIm5leHQiLCAicGFyc2UiLCAiaW5kZXgiLCAib2Zmc2V0IiwgImxlbmd0aCIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJuZXh0IiwgIndoaXRlc3BhY2UiLCAic2l6ZSIsICJpIiwgImoiLCAiayIsICJ4IiwgInkiLCAieiIsICJsZW5ndGgiLCAiaSIsICJpbmRleCIsICJsZW5ndGgiLCAiaW5kZXgiLCAiaSIsICJmbiIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAiYmVnaW4iLCAiaW5kZXgiLCAiY2hhcmFjdGVyIiwgIm5leHQiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJjb21wYXQiLCAiaSIsICJrIiwgImoiLCAicmVtb3ZlTGFiZWwiLCAiaXNJZ25vcmluZ0NvbW1lbnQiLCAiY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0iLCAibm9kZSIsICJpc0ltcG9ydFJ1bGUiLCAiaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzIiwgIm51bGxpZnlFbGVtZW50IiwgImluY29ycmVjdEltcG9ydEFsYXJtIiwgImxlbmd0aCIsICJwcmVmaXhlciIsICJtYXRjaCIsICJjcmVhdGVDYWNoZSIsICJvcHRpb25zIiwgInN0eWxpcyIsICJzdHlsZXMiLCAiaW5zZXJ0IiwgImNsYXNzTmFtZXMiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImgiLCAiayIsICJpIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgInAyIiwgIm5leHQiLCAic3R5bGVzIiwgInN0cmluZyIsICJpIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJzeW5jRmFsbGJhY2siLCAiQSIsICJpc0Jyb3dzZXIiLCAid2l0aEVtb3Rpb25DYWNoZSIsICJrIiwgIlAiLCAiaXNCcm93c2VyIiwgImdldExhc3RQYXJ0IiwgImdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSIsICJsaW5lIiwgIm1hdGNoIiwgInNhbml0aXplSWRlbnRpZmllciIsICJpZGVudGlmaWVyIiwgImdldExhYmVsRnJvbVN0YWNrVHJhY2UiLCAiaSIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiUCIsICJqc3giLCAiaSIsICJzdHlsZXMiLCAiUCIsICJpc0Jyb3dzZXIiLCAiX3JlZiIsICJuZXh0IiwgIkYiLCAibm9kZSIsICJrZXlmcmFtZXMiLCAiY2xhc3NuYW1lcyIsICJrIiwgImNzcyIsICJJbnNlcnRpb24iLCAiY3giLCAidiIsICJ4IiwgInkiLCAibm9kZSIsICJfcmVmIiwgImdldENvbXB1dGVkU3R5bGUiLCAibm9kZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm5vZGUiLCAiY3NzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiJCIsICJ4IiwgInkiLCAib3B0aW9ucyIsICJlIiwgIl9yZWYiLCAiQSIsICJub29wIiwgInByZWZpeCIsICJzdGF0ZSIsICJpIiwgImNsZWFuVmFsdWUiLCAiY2xlYW5Db21tb25Qcm9wcyIsICJnZXRTdHlsZVByb3BzIiwgInQiLCAiYiIsICJjIiwgImQiLCAiZSIsICJ3IiwgInJlbW92ZVByb3BzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiY29udHJvbEhlaWdodCIsICJjb2VyY2VQbGFjZW1lbnQiLCAicCIsICJtZW51Q1NTIiwgIl9vYmplY3RTcHJlYWQyIiwgImJvcmRlclJhZGl1cyIsICJzcGFjaW5nIiwgImNvbG9ycyIsICJNZW51UGxhY2VyIiwgIlAiLCAiRiIsICJzdGF0ZSIsICJNZW51IiwgIm1lbnVMaXN0Q1NTIiwgImJhc2VVbml0IiwgIk1lbnVMaXN0IiwgIm5vdGljZUNTUyIsICJOb09wdGlvbnNNZXNzYWdlIiwgIkxvYWRpbmdNZXNzYWdlIiwgIm1lbnVQb3J0YWxDU1MiLCAib2Zmc2V0IiwgInBvc2l0aW9uIiwgIk1lbnVQb3J0YWwiLCAicSIsICJ4IiwgImoiLCAiY29udGFpbmVyQ1NTIiwgIlNlbGVjdENvbnRhaW5lciIsICJ2YWx1ZUNvbnRhaW5lckNTUyIsICJWYWx1ZUNvbnRhaW5lciIsICJpbmRpY2F0b3JzQ29udGFpbmVyQ1NTIiwgIkluZGljYXRvcnNDb250YWluZXIiLCAiU3ZnIiwgInNpemUiLCAiQ3Jvc3NJY29uIiwgIkRvd25DaGV2cm9uIiwgImJhc2VDU1MiLCAiRHJvcGRvd25JbmRpY2F0b3IiLCAiQ2xlYXJJbmRpY2F0b3IiLCAiaW5kaWNhdG9yU2VwYXJhdG9yQ1NTIiwgIkluZGljYXRvclNlcGFyYXRvciIsICJsb2FkaW5nSW5kaWNhdG9yQ1NTIiwgIkxvYWRpbmdEb3QiLCAiTG9hZGluZ0luZGljYXRvciIsICJjc3MiLCAiQ29udHJvbCIsICJncm91cENTUyIsICJHcm91cCIsICJncm91cEhlYWRpbmdDU1MiLCAiR3JvdXBIZWFkaW5nIiwgIl9leGNsdWRlZCIsICJpbnB1dENTUyIsICJpbnB1dFN0eWxlIiwgIklucHV0IiwgIm11bHRpVmFsdWVDU1MiLCAibXVsdGlWYWx1ZUxhYmVsQ1NTIiwgIm11bHRpVmFsdWVSZW1vdmVDU1MiLCAiTXVsdGlWYWx1ZUdlbmVyaWMiLCAiTXVsdGlWYWx1ZSIsICJjb21wb25lbnRzIiwgIm9wdGlvbkNTUyIsICJPcHRpb24iLCAicGxhY2Vob2xkZXJDU1MiLCAiUGxhY2Vob2xkZXIiLCAiU2luZ2xlVmFsdWUiLCAiZGVmYXVsdENvbXBvbmVudHMiLCAiaSIsICJpc0VxdWFsIiwgIkExMXlUZXh0IiwgIm9wdGlvbnMiLCAiaXNBcHBsZURldmljZSIsICJnZXRBcnJheUluZGV4IiwgImRpc2FibGVkIiwgIkxpdmVSZWdpb24iLCAiZ2V0T3B0aW9uTGFiZWwiLCAiaXNPcHRpb25EaXNhYmxlZCIsICJzY3JlZW5SZWFkZXJTdGF0dXMiLCAicSIsICJhc09wdGlvbiIsICJkIiwgImkiLCAiaiIsICJzdHJpcERpYWNyaXRpY3MiLCAibWF0Y2giLCAidHJpbVN0cmluZyIsICJkZWZhdWx0U3RyaW5naWZ5IiwgImNyZWF0ZUZpbHRlciIsICJjb25maWciLCAic3RyaW5naWZ5IiwgInRyaW0iLCAiaW5wdXQiLCAiX2V4Y2x1ZGVkIiwgIl9yZWYiLCAiY2FuY2VsU2Nyb2xsIiwgIkYiLCAieCIsICJfIiwgImUiLCAiYmx1clNlbGVjdElucHV0IiwgInRhcmdldFJlZiIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmMiIsICJSZXF1aXJlZElucHV0IiwgIm9uRm9jdXMiLCAib25DaGFuZ2UiLCAiZm9ybWF0R3JvdXBMYWJlbCIsICJjc3MiLCAiX3JlZiIsICJpbmRleCIsICJnZXRPcHRpb25MYWJlbCIsICJnZXRPcHRpb25WYWx1ZSIsICJjYXRlZ29yaXplZE9wdGlvbiIsICJzdGF0ZSIsICJvcHRpb25zIiwgImdldEZvY3VzZWRPcHRpb25JZCIsICJpIiwgInNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMiLCAiU2VsZWN0IiwgIm9uQ2hhbmdlIiwgImN1c3RvbSIsICJfcmVmMiIsICJfcmVmMyIsICJlIiwgImlzQ2xlYXJhYmxlIiwgImlzT3B0aW9uRGlzYWJsZWQiLCAiZm9ybWF0R3JvdXBMYWJlbCIsICJJbnB1dCIsICJNdWx0aVZhbHVlIiwgIk11bHRpVmFsdWVDb250YWluZXIiLCAiTXVsdGlWYWx1ZUxhYmVsIiwgIk11bHRpVmFsdWVSZW1vdmUiLCAiU2luZ2xlVmFsdWUiLCAiUGxhY2Vob2xkZXIiLCAib3B0IiwgIkNsZWFySW5kaWNhdG9yIiwgIkxvYWRpbmdJbmRpY2F0b3IiLCAiRHJvcGRvd25JbmRpY2F0b3IiLCAiSW5kaWNhdG9yU2VwYXJhdG9yIiwgIkdyb3VwIiwgIkdyb3VwSGVhZGluZyIsICJNZW51IiwgIk1lbnVMaXN0IiwgIk1lbnVQb3J0YWwiLCAiTG9hZGluZ01lc3NhZ2UiLCAiTm9PcHRpb25zTWVzc2FnZSIsICJPcHRpb24iLCAibG9hZGluZ01lc3NhZ2UiLCAibm9PcHRpb25zTWVzc2FnZSIsICJyZW5kZXIiLCAiZGVsaW1pdGVyIiwgImlucHV0IiwgIkNvbnRyb2wiLCAiSW5kaWNhdG9yc0NvbnRhaW5lciIsICJTZWxlY3RDb250YWluZXIiLCAiVmFsdWVDb250YWluZXIiLCAiayIsICJzdGF0ZSIsICJvbkNoYW5nZSIsICJ1IiwgIkYiLCAiXyIsICJlIiwgInUiLCAiY29uZmlnIiwgInN0YXRlIiwgInEiLCAiciIsICJpIiwgIl9hIiwgInUiLCAidGV4dCIsICJ0cmltIiwgIm1hdGNoIiwgImwiLCAieCIsICJ0IiwgIllhbWxDb252ZXJzaW9uIiwgImxpbmUiLCAib25DaGFuZ2UiLCAiUCIsICJ4IiwgInRleHQiLCAiaW5pdGlhbCIsICJxIiwgInkiLCAicyIsICJzdGF0ZSIsICJGIiwgInUiLCAiXyIsICJjb25maWciLCAib25DaGFuZ2UiLCAieCIsICJvIiwgIlAiLCAidiIsICJlIiwgInRleHQiLCAiaW5saW5lIiwgInAiLCAiUCIsICJ1IiwgImluZGV4IiwgInUiLCAicSIsICJQIiwgImEiLCAicCIsICJjb21wbGV0ZWRSZWYiLCAiRiIsICJfIiwgImMiLCAiZiIsICJfYSIsICJ2IiwgInEiLCAidSIsICJpIiwgInAiLCAieCIsICJwYWdlIiwgIlAiLCAiaW5wdXQiLCAibWluIiwgIm1heCIsICJfIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZDIiLCAiaSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgImkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJpIiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfbiIsICJvIiwgIm4iLCAibm9vcCIsICJlIiwgIl9yZWYiLCAiZ2V0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmMiIsICJfb2JqZWN0U3ByZWFkMiIsICJzZXQiLCAib25DaGFuZ2UiLCAiZCIsICJjc3MiLCAic2l6ZSIsICJhcnJheSIsICJub2RlIiwgInN0eWxlcyIsICJ0cmFuc2Zvcm0iLCAicyIsICJ3IiwgImxpc3RlbmVyIiwgImZuIiwgInByZWZpeCIsICJiaW5kSW50ZXJuYWw0IiwgImEiLCAiYiIsICJjIiwgImxlbmd0aCIsICJzdHJpbmciLCAiY291bnRlciIsICJpbmRleCIsICJpY29uIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJwcmVmaXgiLCAiYnVpbGQiLCAibG9va3VwIiwgIm8iLCAiaWNvbiIsICJhIiwgIm9uQ2hhbmdlIiwgImMiLCAiZW1wdHlDYW5vbmljYWxJY29uIiwgInYiLCAiTGlicmFyeSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgIl9vYmplY3RTcHJlYWQyIiwgIl9yZWYiLCAiayIsICJtaXhvdXQiLCAiX3R5cGVvZiIsICJob29rcyIsICJub0F1dG8iLCAicGFyc2UiLCAiYXV0b1JlcGxhY2UiLCAiZ2V0IiwgInN0eWxlcyIsICJ0cmFuc2Zvcm0iLCAib2Zmc2V0IiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIm5vb3AiLCAicCIsICJiZWdpbiIsICJlbmQiLCAibm9kZSIsICJpMnN2ZyIsICJjb21tZW50IiwgInJlcGxhY2UiLCAib3B0aW9ucyIsICJzdHlsZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaGNsQWRkIiwgImhjbFJlbW92ZSIsICJwcmVmaXhlcyIsICJmIiwgImUiLCAibmV4dCIsICJyZW5kZXIiLCAibWFzayIsICJfcmVmMyIsICJsYXllciIsICJjb3VudGVyIiwgInRleHQiLCAicHJvdmlkZXMiLCAicG9zaXRpb24iLCAid2F0Y2giLCAicGFyc2VUcmFuc2Zvcm1TdHJpbmciLCAibiIsICJwcm92aWRlcnMiLCAiaSIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQyIiwgImkiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90eXBlb2YiLCAib2JqIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvIiwgIm4iLCAiZmxpcCIsICJzaXplIiwgInN0cmluZyIsICJtYXRjaCIsICJfZXhjbHVkZWQiLCAicyIsICJjb252ZXJ0IiwgImNyZWF0ZUVsZW1lbnQiLCAiUFJPRFVDVElPTiIsICJlIiwgImljb24iLCAidHJhbnNmb3JtIiwgIlByb3BUeXBlcyIsICJhIiwgImIiLCAiaW5kZXgiLCAiRiIsICJxIiwgInUiLCAiY29sdW1uIiwgImNvbmZpZyIsICJQIiwgInYiLCAiciIsICJlIiwgImljb24iLCAiaWNvbiIsICJ1IiwgInEiLCAidSIsICJmIiwgImluZGV4IiwgInIiLCAiZW5kIiwgImUiLCAicyIsICJsIiwgImNvcHkiLCAiYSIsICJiIiwgInYiLCAieCIsICJpIiwgIm5leHQiLCAiRGF0YUFycmF5IiwgImZyb20iLCAiQ29lcmNlIiwgInN0cmluZyIsICJhcnJheSIsICJkZWZlcnJlZCIsICJiIiwgImxhbmd1YWdlIiwgImxpbmUiLCAidSIsICJiIiwgImlubGluZSIsICJ0ZXh0IiwgInAiLCAiZSIsICJtaW4iLCAibWF4IiwgIm9wdGlvbnMiLCAib25DaGFuZ2UiLCAieCIsICJxIiwgImEiLCAibiIsICJUcmVlVXRpbHMiLCAibm9kZSIsICJuIiwgImwiLCAiZW5kIiwgImluZGV4IiwgInNsaWNlIiwgImluaXRpYWwiLCAiYSIsICJiIiwgInQiLCAiciIsICJ4IiwgInN0YXRlIiwgImsiLCAicSIsICJ5IiwgImNvbHVtbiIsICJQIiwgInUiLCAiY29uZmlnIiwgImkiLCAidiIsICJfIiwgImUiLCAiRiIsICJDb250ZXh0IiwgInMiLCAiX2EiLCAiYXBpIiwgInAiLCAieCIsICJ5IiwgInEiLCAiXyIsICJQIiwgIkYiLCAiaW5saW5lIiwgInUiLCAiZW5kIiwgImUiLCAiaW5wdXQiLCAicHJvY2VzcyIsICJQYXJzaW1tb24iLCAiZSIsICJpbnB1dCIsICJpbXBvcnRfb2JzaWRpYW4iLCAicHJlZml4IiwgInNldCIsICJCVHJlZSIsICJhIiwgImIiLCAic2V0IiwgImEiLCAiYiIsICJjIiwgIngiLCAiYyIsICJzZWxmIiwgImsiLCAicCIsICJpbmRleCIsICJGdW5jdGlvbnMiLCAiRGVmYXVsdEZ1bmN0aW9ucyIsICJfIiwgImEiLCAidCIsICJkIiwgImUiLCAiX24iLCAibCIsICJsaW5rIiwgInBhcnNlZERhdGUiLCAiZiIsICJtYXRjaCIsICJkYXRlIiwgIm4iLCAiYiIsICJ2IiwgIm9iamVjdCIsICJsaXN0IiwgInMiLCAic3RyIiwgInN0cmluZyIsICJlbmQiLCAibGVuZ3RoIiwgImFycmF5IiwgImZ1bmN0aW9ucyIsICJzIiwgImEiLCAiYiIsICJhcmdzIiwgInJlc29sdmVkIiwgImUiLCAiVmFyaWFibGVzIiwgImZvbGRlZCIsICJmIiwgIkZpbHRlclRyZWVzIiwgImZpbHRlciIsICJhIiwgImluZGV4IiwgImlkIiwgImxvY2FsZm9yYWdlIiwgImsiLCAiV29ya2VyIiwgImltcG9ydF9vYnNpZGlhbiIsICJub3ciLCAiV29ya2VyIiwgImltcG9ydF9vYnNpZGlhbiIsICJzaXplIiwgImltcG9ydF9xdWV1ZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAieCIsICJzIiwgImwiLCAiZiIsICJhIiwgInJlc3VsdCIsICJzdG9yZSIsICJuZXh0IiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiUCIsICJxIiwgInN0YXRlIiwgInAiLCAieCIsICJ1IiwgImUiLCAicyIsICJ2IiwgIm9uQ2hhbmdlIiwgIm9wdGlvbnMiLCAiZiIsICJhcGkiLCAidSIsICJjb25maWciLCAidGV4dCIsICJlIl0KfQo=
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNpbW1vbi9zcmMvcGFyc2ltbW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdG9rZW5pemVyL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9zdGF0ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci91dGlsL2NoYXJjb2Rlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90cmF2ZXJzZXIvYmFzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90cmF2ZXJzZXIvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci91dGlsL3doaXRlc3BhY2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdXRpbC9pZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9yZWFkV29yZFRyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdG9rZW5pemVyL3JlYWRXb3JkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci9wbHVnaW5zL2pzeC94aHRtbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0SlNYUHJhZ21hSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9UcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvQ0pTSW1wb3J0UHJvY2Vzc29yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9zZXQtYXJyYXkvc3JjL3NldC1hcnJheS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjL3NyYy92bHEudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc3RyaW5ncy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjL3NyYy9zY29wZXMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc291cmNlbWFwLWNvZGVjLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS9zcmMvcmVzb2x2ZS11cmkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3Jlc29sdmUudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3N0cmlwLWZpbGVuYW1lLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9zb3VyY2VtYXAtc2VnbWVudC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvc29ydC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYmluYXJ5LXNlYXJjaC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYnktc291cmNlLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9hbnktbWFwLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy90cmFjZS1tYXBwaW5nLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy9zcmMvc291cmNlbWFwLXNlZ21lbnQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nL3NyYy9nZW4tbWFwcGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2NvbXB1dGVTb3VyY2VNYXAuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9IZWxwZXJNYW5hZ2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldElkZW50aWZpZXJOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L05hbWVNYW5hZ2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWludGVyZmFjZS1jaGVja2VyL2Rpc3QvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWludGVyZmFjZS1jaGVja2VyL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9PcHRpb25zLWdlbi10eXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L09wdGlvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2x2YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvcGx1Z2lucy90eXBlc2NyaXB0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3BsdWdpbnMvanN4L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3BsdWdpbnMvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2V4cHJlc3Npb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvcGx1Z2lucy9mbG93LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3RyYXZlcnNlci9zdGF0ZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9pc0FzeW5jT3BlcmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvVG9rZW5Qcm9jZXNzb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldENsYXNzSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZWxpZGVJbXBvcnRFcXVhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldERlY2xhcmF0aW9uSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvaXNFeHBvcnRGcm9tLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9DSlNJbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9FU01JbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9GbG93VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvSmVzdEhvaXN0VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdHJhbnNmb3JtZXJzL09wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9SZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvaXNJZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdHJhbnNmb3JtZXJzL1R5cGVTY3JpcHRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9Sb290VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xpbmVzLWFuZC1jb2x1bW5zL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9mb3JtYXRUb2tlbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldFRTSW1wb3J0ZWROYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvb3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb21wb25lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9wcm9wcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtY29udGV4dC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NoaWxkcmVuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2F0Y2gtZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY2xvbmUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvUHVyZUNvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvbWVtby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvZm9yd2FyZFJlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvQ2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9zdXNwZW5zZS1saXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcG9ydGFscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdC9kaXN0L3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QuY2pzLnByb2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5kZXYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5janMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9zcmMvcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvbWFpbi50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2x1eG9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9lbmdsaXNoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2ludmFsaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3pvbmVzL0lBTkFab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvc2V0dGluZ3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvcmVnZXhQYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kdXJhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vbGluay50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9wYXJzZXIudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vbGl0ZXJhbC50cyIsICIuLi8uLi9zcmMvYXBpL3Jlc3VsdC50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9maWx0ZXJzLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2V4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL3VpL21hcmtkb3duLnRzeCIsICIuLi8uLi9zcmMvdXRpbHMvbWVkaWEudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvb3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb21wb25lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9wcm9wcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtY29udGV4dC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NoaWxkcmVuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2Nsb25lLWVsZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9jYXRjaC1lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvUHVyZUNvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvbWVtby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvZm9yd2FyZFJlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvQ2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9zdXNwZW5zZS1saXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcG9ydGFscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL3NyYy91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9zcmMvaW5kZXguanMiLCAiLi4vLi4vc3JjL2FwaS91aS9lbWJlZC50c3giLCAiLi4vLi4vc3JjL3VpL2phdmFzY3JpcHQudHN4IiwgIi4uLy4uL3NyYy91dGlscy9qYXZhc2NyaXB0LnRzIiwgIi4uLy4uL3NyYy91aS9ob29rcy50cyIsICIuLi8uLi9zcmMvdWkvbG9hZGluZy1ib3VuZGFyeS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLnRzeCIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvaW5kZXhhYmxlLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kYXRhLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9qc29uL2NvbW1vbi50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvbWFya2Rvd24udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL0VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvTWlkZGxld2FyZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtYjRjOGIyNjUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMuZG9tLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L2luZGV4LWEzMDFmNTI2LmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvU2VsZWN0LTFmZDU4OGM5LmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvcmVhY3Qtc2VsZWN0LmVzbS5qcyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2Jvb2xlYW4tZmllbGQudHN4IiwgIi4uLy4uL3NyYy91aS9maWVsZHMvcHJvZ3Jlc3MtZmllbGQudHN4IiwgIi4uLy4uL3NyYy91aS9maWVsZHMvcmF0aW5nLnRzeCIsICIuLi8uLi9zcmMvdXRpbHMvdGFzay50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMveWFtbC50cyIsICIuLi8uLi9zcmMvaW5kZXgvZWRpdC9maWVsZC50cyIsICIuLi8uLi9zcmMvdXRpbHMvZmllbGRzLnRzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvZWRpdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvbGlzdC50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90YXNrLnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3BhZ2luZy50c3giLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanMiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90YWJsZS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYWxsb3V0LnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL2NhcmRzLnRzeCIsICIuLi8uLi9zcmMvYXBpL2RhdGEtYXJyYXkudHMiLCAiLi4vLi4vc3JjL2FwaS9jb2VyY2UudHMiLCAiLi4vLi4vc3JjL3V0aWxzL2RlZmVycmVkLnRzIiwgIi4uLy4uL3NyYy9hcGkvc2NyaXB0LWNhY2hlLnRzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvZWRpdGFibGUtZmllbGRzLnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3RyZWUtdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvbG9jYWwtYXBpLnRzeCIsICIuLi8uLi9zcmMvYXBpL2FwaS50cyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9mb2xkZXIudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvaW52ZXJ0ZWQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2ZsYXRxdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9maWVsZHMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vYmluYXJ5b3AudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vZnVuY3Rpb25zLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2V2YWx1YXRvci50cyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9xdWVyeS1leGVjdXRvci50cyIsICIuLi8uLi9zcmMvaW5kZXgvZGF0YXN0b3JlLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9wZXJzaXN0ZXIudHMiLCAiaW5saW5lLXdvcmtlcjpfX2lubGluZS13b3JrZXIiLCAiLi4vLi4vc3JjL2luZGV4L3dlYi13b3JrZXIvaW1wb3J0ZXIud29ya2VyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9kYXRhY29yZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvZmlsZXMudHMiLCAiLi4vLi4vc3JjL2luZGV4L2VtYmVkLXF1ZXVlLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9jYW52YXMudHMiLCAiLi4vLi4vc3JjL3NldHRpbmdzLnRzIiwgIi4uLy4uL3NyYy91aS92aWV3LXBhZ2UudHN4IiwgIi4uLy4uL3NyYy91aS9pbmRleC1zdGF0dXMudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gUGFyc2ltbW9uKGFjdGlvbikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2ltbW9uKSkge1xuICAgIHJldHVybiBuZXcgUGFyc2ltbW9uKGFjdGlvbik7XG4gIH1cbiAgdGhpcy5fID0gYWN0aW9uO1xufVxuXG52YXIgXyA9IFBhcnNpbW1vbi5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIHRpbWVzKG4sIGYpIHtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKGk7IGkgPCBuOyBpKyspIHtcbiAgICBmKGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2goZiwgYXJyKSB7XG4gIHRpbWVzKGFyci5sZW5ndGgsIGZ1bmN0aW9uKGkpIHtcbiAgICBmKGFycltpXSwgaSwgYXJyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShmLCBzZWVkLCBhcnIpIHtcbiAgZm9yRWFjaChmdW5jdGlvbihlbGVtLCBpLCBhcnIpIHtcbiAgICBzZWVkID0gZihzZWVkLCBlbGVtLCBpLCBhcnIpO1xuICB9LCBhcnIpO1xuICByZXR1cm4gc2VlZDtcbn1cblxuZnVuY3Rpb24gbWFwKGYsIGFycikge1xuICByZXR1cm4gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKGFjYywgZWxlbSwgaSwgYSkge1xuICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW2YoZWxlbSwgaSwgYSldKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGFyclxuICApO1xufVxuXG5mdW5jdGlvbiBsc2hpZnRCdWZmZXIoaW5wdXQpIHtcbiAgdmFyIGFzVHdvQnl0ZXMgPSByZWR1Y2UoXG4gICAgZnVuY3Rpb24oYSwgdiwgaSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KFxuICAgICAgICBpID09PSBiLmxlbmd0aCAtIDFcbiAgICAgICAgICA/IEJ1ZmZlci5mcm9tKFt2LCAwXSkucmVhZFVJbnQxNkJFKDApXG4gICAgICAgICAgOiBiLnJlYWRVSW50MTZCRShpKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGlucHV0XG4gICk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICBtYXAoZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuICgoeCA8PCAxKSAmIDB4ZmZmZikgPj4gODtcbiAgICB9LCBhc1R3b0J5dGVzKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lQml0c0Zyb21CdWZmZXIobiwgaW5wdXQpIHtcbiAgdmFyIHN0YXRlID0geyB2OiAwLCBidWY6IGlucHV0IH07XG4gIHRpbWVzKG4sIGZ1bmN0aW9uKCkge1xuICAgIHN0YXRlID0ge1xuICAgICAgdjogKHN0YXRlLnYgPDwgMSkgfCBiaXRQZWVrQnVmZmVyKHN0YXRlLmJ1ZiksXG4gICAgICBidWY6IGxzaGlmdEJ1ZmZlcihzdGF0ZS5idWYpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYml0UGVla0J1ZmZlcihpbnB1dCkge1xuICByZXR1cm4gaW5wdXRbMF0gPj4gNztcbn1cblxuZnVuY3Rpb24gc3VtKG51bUFycikge1xuICByZXR1cm4gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeTtcbiAgICB9LFxuICAgIDAsXG4gICAgbnVtQXJyXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmQocHJlZCwgYXJyKSB7XG4gIHJldHVybiByZWR1Y2UoXG4gICAgZnVuY3Rpb24oZm91bmQsIGVsZW0pIHtcbiAgICAgIHJldHVybiBmb3VuZCB8fCAocHJlZChlbGVtKSA/IGVsZW0gOiBmb3VuZCk7XG4gICAgfSxcbiAgICBudWxsLFxuICAgIGFyclxuICApO1xufVxuXG5mdW5jdGlvbiBidWZmZXJFeGlzdHMoKSB7XG4gIHJldHVybiB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiO1xufVxuXG5mdW5jdGlvbiBzZXRFeGlzdHMoKSB7XG4gIGlmIChQYXJzaW1tb24uX3N1cHBvcnRzU2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gUGFyc2ltbW9uLl9zdXBwb3J0c1NldDtcbiAgfVxuICB2YXIgZXhpc3RzID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgUGFyc2ltbW9uLl9zdXBwb3J0c1NldCA9IGV4aXN0cztcbiAgcmV0dXJuIGV4aXN0cztcbn1cblxuZnVuY3Rpb24gZW5zdXJlQnVmZmVyKCkge1xuICBpZiAoIWJ1ZmZlckV4aXN0cygpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci5cIlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYml0U2VxKGFsaWdubWVudHMpIHtcbiAgZW5zdXJlQnVmZmVyKCk7XG4gIHZhciB0b3RhbEJpdHMgPSBzdW0oYWxpZ25tZW50cyk7XG4gIGlmICh0b3RhbEJpdHMgJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGUgYml0cyBbXCIgK1xuICAgICAgICBhbGlnbm1lbnRzLmpvaW4oXCIsIFwiKSArXG4gICAgICAgIFwiXSBhZGQgdXAgdG8gXCIgK1xuICAgICAgICB0b3RhbEJpdHMgK1xuICAgICAgICBcIiB3aGljaCBpcyBub3QgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXM7IHRoZSB0b3RhbCBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDhcIlxuICAgICk7XG4gIH1cbiAgdmFyIGJ5dGVzID0gdG90YWxCaXRzIC8gODtcblxuICB2YXIgdG9vQmlnUmFuZ2UgPSBmaW5kKGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCA+IDQ4O1xuICB9LCBhbGlnbm1lbnRzKTtcbiAgaWYgKHRvb0JpZ1JhbmdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgdG9vQmlnUmFuZ2UgKyBcIiBiaXQgcmFuZ2UgcmVxdWVzdGVkIGV4Y2VlZHMgNDggYml0ICg2IGJ5dGUpIE51bWJlciBtYXguXCJcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICB2YXIgbmV3UG9zID0gYnl0ZXMgKyBpO1xuICAgIGlmIChuZXdQb3MgPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBieXRlcy50b1N0cmluZygpICsgXCIgYnl0ZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBtYWtlU3VjY2VzcyhcbiAgICAgIG5ld1BvcyxcbiAgICAgIHJlZHVjZShcbiAgICAgICAgZnVuY3Rpb24oYWNjLCBiaXRzKSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gY29uc3VtZUJpdHNGcm9tQnVmZmVyKGJpdHMsIGFjYy5idWYpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xsOiBhY2MuY29sbC5jb25jYXQoc3RhdGUudiksXG4gICAgICAgICAgICBidWY6IHN0YXRlLmJ1ZlxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHsgY29sbDogW10sIGJ1ZjogaW5wdXQuc2xpY2UoaSwgbmV3UG9zKSB9LFxuICAgICAgICBhbGlnbm1lbnRzXG4gICAgICApLmNvbGxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYml0U2VxT2JqKG5hbWVkQWxpZ25tZW50cykge1xuICBlbnN1cmVCdWZmZXIoKTtcbiAgdmFyIHNlZW5LZXlzID0ge307XG4gIHZhciB0b3RhbEtleXMgPSAwO1xuICB2YXIgZnVsbEFsaWdubWVudHMgPSBtYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgIGlmIChpc0FycmF5KGl0ZW0pKSB7XG4gICAgICB2YXIgcGFpciA9IGl0ZW07XG4gICAgICBpZiAocGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIHBhaXIuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgIFwiXSBzaG91bGQgYmUgbGVuZ3RoIDIsIGdvdCBsZW5ndGggXCIgK1xuICAgICAgICAgICAgcGFpci5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFN0cmluZyhwYWlyWzBdKTtcbiAgICAgIGFzc2VydE51bWJlcihwYWlyWzFdKTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VlbktleXMsIHBhaXJbMF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIiArIHBhaXJbMF0pO1xuICAgICAgfVxuICAgICAgc2VlbktleXNbcGFpclswXV0gPSB0cnVlO1xuICAgICAgdG90YWxLZXlzKys7XG4gICAgICByZXR1cm4gcGFpcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0TnVtYmVyKGl0ZW0pO1xuICAgICAgcmV0dXJuIFtudWxsLCBpdGVtXTtcbiAgICB9XG4gIH0sIG5hbWVkQWxpZ25tZW50cyk7XG4gIGlmICh0b3RhbEtleXMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJiaXRTZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFpciwgZ290IFtcIiArXG4gICAgICAgIG5hbWVkQWxpZ25tZW50cy5qb2luKFwiLCBcIikgK1xuICAgICAgICBcIl1cIlxuICAgICk7XG4gIH1cbiAgdmFyIG5hbWVzT25seSA9IG1hcChmdW5jdGlvbihwYWlyKSB7XG4gICAgcmV0dXJuIHBhaXJbMF07XG4gIH0sIGZ1bGxBbGlnbm1lbnRzKTtcbiAgdmFyIGFsaWdubWVudHNPbmx5ID0gbWFwKGZ1bmN0aW9uKHBhaXIpIHtcbiAgICByZXR1cm4gcGFpclsxXTtcbiAgfSwgZnVsbEFsaWdubWVudHMpO1xuXG4gIHJldHVybiBiaXRTZXEoYWxpZ25tZW50c09ubHkpLm1hcChmdW5jdGlvbihwYXJzZWQpIHtcbiAgICB2YXIgbmFtZWRQYXJzZWQgPSBtYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgICAgcmV0dXJuIFtuYW1lLCBwYXJzZWRbaV1dO1xuICAgIH0sIG5hbWVzT25seSk7XG5cbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgZnVuY3Rpb24ob2JqLCBrdikge1xuICAgICAgICBpZiAoa3ZbMF0gIT09IG51bGwpIHtcbiAgICAgICAgICBvYmpba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIG5hbWVkUGFyc2VkXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQnVmZmVyRm9yKG90aGVyLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICBlbnN1cmVCdWZmZXIoKTtcbiAgICBpZiAoaSArIGxlbmd0aCA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGxlbmd0aCArIFwiIGJ5dGVzIGZvciBcIiArIG90aGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdWNjZXNzKGkgKyBsZW5ndGgsIGlucHV0LnNsaWNlKGksIGkgKyBsZW5ndGgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQnVmZmVyKGxlbmd0aCkge1xuICByZXR1cm4gcGFyc2VCdWZmZXJGb3IoXCJidWZmZXJcIiwgbGVuZ3RoKS5tYXAoZnVuY3Rpb24odW5zYWZlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHVuc2FmZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVkU3RyaW5nKGVuY29kaW5nLCBsZW5ndGgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwic3RyaW5nXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi50b1N0cmluZyhlbmNvZGluZyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3Iod2hvLCBsZW5ndGgpIHtcbiAgaWYgKCFpc0ludGVnZXIobGVuZ3RoKSB8fCBsZW5ndGggPCAwIHx8IGxlbmd0aCA+IDYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Iod2hvICsgXCIgcmVxdWlyZXMgaW50ZWdlciBsZW5ndGggaW4gcmFuZ2UgWzAsIDZdLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1aW50QkUobGVuZ3RoKSB7XG4gIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3IoXCJ1aW50QkVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwidWludEJFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkVUludEJFKDAsIGxlbmd0aCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1aW50TEUobGVuZ3RoKSB7XG4gIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3IoXCJ1aW50TEVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwidWludExFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkVUludExFKDAsIGxlbmd0aCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnRCRShsZW5ndGgpIHtcbiAgYXNzZXJ0VmFsaWRJbnRlZ2VyQnl0ZUxlbmd0aEZvcihcImludEJFXCIsIGxlbmd0aCk7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImludEJFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkSW50QkUoMCwgbGVuZ3RoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludExFKGxlbmd0aCkge1xuICBhc3NlcnRWYWxpZEludGVnZXJCeXRlTGVuZ3RoRm9yKFwiaW50TEVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiaW50TEUoXCIgKyBsZW5ndGggKyBcIilcIiwgbGVuZ3RoKS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRJbnRMRSgwLCBsZW5ndGgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmxvYXRCRSgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiZmxvYXRCRVwiLCA0KS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRGbG9hdEJFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmxvYXRMRSgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiZmxvYXRMRVwiLCA0KS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRGbG9hdExFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZG91YmxlQkUoKSB7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImRvdWJsZUJFXCIsIDgpLm1hcChmdW5jdGlvbihidWZmKSB7XG4gICAgcmV0dXJuIGJ1ZmYucmVhZERvdWJsZUJFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZG91YmxlTEUoKSB7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImRvdWJsZUxFXCIsIDgpLm1hcChmdW5jdGlvbihidWZmKSB7XG4gICAgcmV0dXJuIGJ1ZmYucmVhZERvdWJsZUxFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShhcnJMaWtlKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJMaWtlKTtcbn1cbi8vIC0qLSBIZWxwZXJzIC0qLVxuXG5mdW5jdGlvbiBpc1BhcnNlcihvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFBhcnNpbW1vbjtcbn1cblxuZnVuY3Rpb24gaXNBcnJheSh4KSB7XG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyKHgpIHtcbiAgLyogZ2xvYmFsIEJ1ZmZlciAqL1xuICByZXR1cm4gYnVmZmVyRXhpc3RzKCkgJiYgQnVmZmVyLmlzQnVmZmVyKHgpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3VjY2VzcyhpbmRleCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBmdXJ0aGVzdDogLTEsXG4gICAgZXhwZWN0ZWQ6IFtdXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VGYWlsdXJlKGluZGV4LCBleHBlY3RlZCkge1xuICBpZiAoIWlzQXJyYXkoZXhwZWN0ZWQpKSB7XG4gICAgZXhwZWN0ZWQgPSBbZXhwZWN0ZWRdO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiBmYWxzZSxcbiAgICBpbmRleDogLTEsXG4gICAgdmFsdWU6IG51bGwsXG4gICAgZnVydGhlc3Q6IGluZGV4LFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlcGxpZXMocmVzdWx0LCBsYXN0KSB7XG4gIGlmICghbGFzdCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKHJlc3VsdC5mdXJ0aGVzdCA+IGxhc3QuZnVydGhlc3QpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBleHBlY3RlZCA9XG4gICAgcmVzdWx0LmZ1cnRoZXN0ID09PSBsYXN0LmZ1cnRoZXN0XG4gICAgICA/IHVuaW9uKHJlc3VsdC5leHBlY3RlZCwgbGFzdC5leHBlY3RlZClcbiAgICAgIDogbGFzdC5leHBlY3RlZDtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgaW5kZXg6IHJlc3VsdC5pbmRleCxcbiAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgIGZ1cnRoZXN0OiBsYXN0LmZ1cnRoZXN0LFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICB9O1xufVxuXG4vLyBpbmRleCBvZiB7IGlucHV0ID0+IHsgaW5kZXggPT4geyBsaW5lTnVtYmVyLCBzdGFydE9mTGluZSB9IH0gfVxuLy8gd2hlbiB3ZSBzZWUgYSBuZXcgaW5kZXggd2UganVzdCB3YWxrIGJhY2t3YXJkcyB0byB0aGUgbGFzdCBzZWVuIGluZGV4IGFuZFxuLy8gY29tcHV0ZSB0aGUgbmV3IGxpbmVOdW1iZXIgYW5kIHN0YXJ0T2ZMaW5lIGZyb20gdGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0b1xuLy8gcmVjb21wdXRlIGZyb20gdGhlIHdob2xlIGlucHV0XG52YXIgbGluZUNvbHVtbkluZGV4ID0ge307XG5mdW5jdGlvbiBtYWtlTGluZUNvbHVtbkluZGV4KGlucHV0LCBpKSB7XG4gIGlmIChpc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBpLFxuICAgICAgbGluZTogLTEsXG4gICAgICBjb2x1bW46IC0xXG4gICAgfTtcbiAgfVxuXG4gIC8vIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndCBzZWVuIHRoaXMgaW5wdXQgeWV0XG4gIGlmICghKGlucHV0IGluIGxpbmVDb2x1bW5JbmRleCkpIHtcbiAgICBsaW5lQ29sdW1uSW5kZXhbaW5wdXRdID0ge307XG4gIH1cblxuICB2YXIgaW5wdXRJbmRleCA9IGxpbmVDb2x1bW5JbmRleFtpbnB1dF07XG5cbiAgdmFyIHByZXZMaW5lID0gMDtcbiAgdmFyIG5ld0xpbmVzID0gMDtcbiAgdmFyIGxpbmVTdGFydCA9IDA7XG4gIHZhciBqID0gaTtcbiAgd2hpbGUgKGogPj0gMCkge1xuICAgIGlmIChqIGluIGlucHV0SW5kZXgpIHtcbiAgICAgIHByZXZMaW5lID0gaW5wdXRJbmRleFtqXS5saW5lO1xuICAgICAgLy8gbGluZVN0YXJ0ID09PSAwIHdoZW4gd2UgaGF2ZW4ndCBmb3VuZCBhIG5ldyBsaW5lIG9uIHRoZSB3YWxrXG4gICAgICAvLyBiYWNrIGZyb20gaSwgc28gd2UgYXJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHByZXZpb3VzbHkgY2FjaGVkXG4gICAgICAvLyBpbmRleFxuICAgICAgaWYgKGxpbmVTdGFydCA9PT0gMCkge1xuICAgICAgICBsaW5lU3RhcnQgPSBpbnB1dEluZGV4W2pdLmxpbmVTdGFydDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIC8vIFVuaXggTEYgKFxcbikgb3IgV2luZG93cyBDUkxGIChcXHJcXG4pIGxpbmUgZW5kaW5nXG4gICAgICBpbnB1dC5jaGFyQXQoaikgPT09IFwiXFxuXCIgfHxcbiAgICAgIC8vIE9sZCBNYWMgQ1IgKFxccikgbGluZSBlbmRpbmdcbiAgICAgIChpbnB1dC5jaGFyQXQoaikgPT09IFwiXFxyXCIgJiYgaW5wdXQuY2hhckF0KGogKyAxKSAhPT0gXCJcXG5cIilcbiAgICApIHtcbiAgICAgIG5ld0xpbmVzKys7XG4gICAgICAvLyBsaW5lU3RhcnQgPT09IDAgd2hlbiB0aGlzIGlzIHRoZSBmaXJzdCBuZXcgbGluZSB3ZSBoYXZlIGZvdW5kXG4gICAgICBpZiAobGluZVN0YXJ0ID09PSAwKSB7XG4gICAgICAgIGxpbmVTdGFydCA9IGogKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBqLS07XG4gIH1cblxuICB2YXIgbGluZVdlQXJlVXBUbyA9IHByZXZMaW5lICsgbmV3TGluZXM7XG4gIHZhciBjb2x1bW5XZUFyZVVwVG8gPSBpIC0gbGluZVN0YXJ0O1xuXG4gIGlucHV0SW5kZXhbaV0gPSB7IGxpbmU6IGxpbmVXZUFyZVVwVG8sIGxpbmVTdGFydDogbGluZVN0YXJ0IH07XG5cbiAgLy8gbGluZXMgYW5kIGNvbHVtbnMgYXJlIDEtaW5kZXhlZFxuICByZXR1cm4ge1xuICAgIG9mZnNldDogaSxcbiAgICBsaW5lOiBsaW5lV2VBcmVVcFRvICsgMSxcbiAgICBjb2x1bW46IGNvbHVtbldlQXJlVXBUbyArIDFcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgc29ydGVkIHNldCB1bmlvbiBvZiB0d28gYXJyYXlzIG9mIHN0cmluZ3NcbmZ1bmN0aW9uIHVuaW9uKHhzLCB5cykge1xuICAvLyBmb3IgbmV3ZXIgYnJvd3NlcnMvbm9kZSB3ZSBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSB1c2luZ1xuICAvLyBtb2Rlcm4gSlNcbiAgaWYgKHNldEV4aXN0cygpICYmIEFycmF5LmZyb20pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgc2V0ID0gbmV3IFNldCh4cyk7XG4gICAgZm9yICh2YXIgeSA9IDA7IHkgPCB5cy5sZW5ndGg7IHkrKykge1xuICAgICAgc2V0LmFkZCh5c1t5XSk7XG4gICAgfVxuICAgIHZhciBhcnIgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgYXJyLnNvcnQoKTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIHZhciBvYmogPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIG9ialt4c1tpXV0gPSB0cnVlO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgeXMubGVuZ3RoOyBqKyspIHtcbiAgICBvYmpbeXNbal1dID0gdHJ1ZTtcbiAgfVxuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaykpIHtcbiAgICAgIGtleXMucHVzaChrKTtcbiAgICB9XG4gIH1cbiAga2V5cy5zb3J0KCk7XG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZXIocCkge1xuICBpZiAoIWlzUGFyc2VyKHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcGFyc2VyOiBcIiArIHApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldChpbnB1dCwgaSkge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGlucHV0LmNoYXJBdChpKTtcbiAgfVxuICByZXR1cm4gaW5wdXRbaV07XG59XG5cbi8vIFRPRE9bRVM1XTogU3dpdGNoIHRvIEFycmF5LmlzQXJyYXkgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGFzc2VydEFycmF5KHgpIHtcbiAgaWYgKCFpc0FycmF5KHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGFuIGFycmF5OiBcIiArIHgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE51bWJlcih4KSB7XG4gIGlmICh0eXBlb2YgeCAhPT0gXCJudW1iZXJcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIG51bWJlcjogXCIgKyB4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRSZWdleHAoeCkge1xuICBpZiAoISh4IGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIHJlZ2V4cDogXCIgKyB4KTtcbiAgfVxuICB2YXIgZiA9IGZsYWdzKHgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGYuY2hhckF0KGkpO1xuICAgIC8vIE9ubHkgYWxsb3cgcmVnZXhwIGZsYWdzIFtpbXVzXSBmb3Igbm93LCBzaW5jZSBbZ10gYW5kIFt5XSBzcGVjaWZpY2FsbHlcbiAgICAvLyBtZXNzIHVwIFBhcnNpbW1vbi4gSWYgbW9yZSBub24tc3RhdGVmdWwgcmVnZXhwIGZsYWdzIGFyZSBhZGRlZCBpbiB0aGVcbiAgICAvLyBmdXR1cmUsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cbiAgICBpZiAoYyAhPT0gXCJpXCIgJiYgYyAhPT0gXCJtXCIgJiYgYyAhPT0gXCJ1XCIgJiYgYyAhPT0gXCJzXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgcmVnZXhwIGZsYWcgXCInICsgYyArICdcIjogJyArIHgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRGdW5jdGlvbih4KSB7XG4gIGlmICh0eXBlb2YgeCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgZnVuY3Rpb246IFwiICsgeCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKHgpIHtcbiAgaWYgKHR5cGVvZiB4ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgc3RyaW5nOiBcIiArIHgpO1xuICB9XG59XG5cbi8vIC0qLSBFcnJvciBGb3JtYXR0aW5nIC0qLVxuXG52YXIgbGluZXNCZWZvcmVTdHJpbmdFcnJvciA9IDI7XG52YXIgbGluZXNBZnRlclN0cmluZ0Vycm9yID0gMztcbnZhciBieXRlc1BlckxpbmUgPSA4O1xudmFyIGJ5dGVzQmVmb3JlID0gYnl0ZXNQZXJMaW5lICogNTtcbnZhciBieXRlc0FmdGVyID0gYnl0ZXNQZXJMaW5lICogNDtcbnZhciBkZWZhdWx0TGluZVByZWZpeCA9IFwiICBcIjtcblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgYW1vdW50KSB7XG4gIHJldHVybiBuZXcgQXJyYXkoYW1vdW50ICsgMSkuam9pbihzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFeHBlY3RlZChleHBlY3RlZCkge1xuICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIFwiRXhwZWN0ZWQ6XFxuXFxuXCIgKyBleHBlY3RlZFswXTtcbiAgfVxuICByZXR1cm4gXCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIik7XG59XG5cbmZ1bmN0aW9uIGxlZnRQYWQoc3RyLCBwYWQsIGNoYXIpIHtcbiAgdmFyIGFkZCA9IHBhZCAtIHN0ci5sZW5ndGg7XG4gIGlmIChhZGQgPD0gMCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIHJlcGVhdChjaGFyLCBhZGQpICsgc3RyO1xufVxuXG5mdW5jdGlvbiB0b0NodW5rcyhhcnIsIGNodW5rU2l6ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgdmFyIGNodW5rcyA9IFtdO1xuICB2YXIgY2h1bmtJbmRleCA9IDA7XG5cbiAgaWYgKGxlbmd0aCA8PSBjaHVua1NpemUpIHtcbiAgICByZXR1cm4gW2Fyci5zbGljZSgpXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWNodW5rc1tjaHVua0luZGV4XSkge1xuICAgICAgY2h1bmtzLnB1c2goW10pO1xuICAgIH1cblxuICAgIGNodW5rc1tjaHVua0luZGV4XS5wdXNoKGFycltpXSk7XG5cbiAgICBpZiAoKGkgKyAxKSAlIGNodW5rU2l6ZSA9PT0gMCkge1xuICAgICAgY2h1bmtJbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaHVua3M7XG59XG5cbi8vIEdldCBhIHJhbmdlIG9mIGluZGV4ZXMgaW5jbHVkaW5nIGBpYC10aCBlbGVtZW50IGFuZCBgYmVmb3JlYCBhbmQgYGFmdGVyYCBhbW91bnQgb2YgZWxlbWVudHMgZnJvbSBgYXJyYC5cbmZ1bmN0aW9uIHJhbmdlRnJvbUluZGV4QW5kT2Zmc2V0cyhpLCBiZWZvcmUsIGFmdGVyLCBsZW5ndGgpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBuZWdhdGl2ZSB1cHBlciBib3VuZCBmb3IgbGluZXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC5cbiAgICBmcm9tOiBpIC0gYmVmb3JlID4gMCA/IGkgLSBiZWZvcmUgOiAwLFxuICAgIHRvOiBpICsgYWZ0ZXIgPiBsZW5ndGggPyBsZW5ndGggOiBpICsgYWZ0ZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnl0ZVJhbmdlVG9SYW5nZShieXRlUmFuZ2UpIHtcbiAgLy8gRXhjZXB0aW9uIGZvciBpbnB1dHMgc21hbGxlciB0aGFuIGBieXRlc1BlckxpbmVgXG4gIGlmIChieXRlUmFuZ2UuZnJvbSA9PT0gMCAmJiBieXRlUmFuZ2UudG8gPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogYnl0ZVJhbmdlLmZyb20sXG4gICAgICB0bzogYnl0ZVJhbmdlLnRvXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnJvbTogYnl0ZVJhbmdlLmZyb20gLyBieXRlc1BlckxpbmUsXG4gICAgLy8gUm91bmQgYHRvYCwgc28gd2UgZG9uJ3QgZ2V0IGZsb2F0IGlmIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSBgYnl0ZXNQZXJMaW5lYFxuICAgIHRvOiBNYXRoLmZsb29yKGJ5dGVSYW5nZS50byAvIGJ5dGVzUGVyTGluZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0R290KGlucHV0LCBlcnJvcikge1xuICB2YXIgaW5kZXggPSBlcnJvci5pbmRleDtcbiAgdmFyIGkgPSBpbmRleC5vZmZzZXQ7XG5cbiAgdmFyIHZlcnRpY2FsTWFya2VyTGVuZ3RoID0gMTtcbiAgdmFyIGNvbHVtbjtcbiAgdmFyIGxpbmVXaXRoRXJyb3JJbmRleDtcbiAgdmFyIGxpbmVzO1xuICB2YXIgbGluZVJhbmdlO1xuICB2YXIgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aDtcblxuICBpZiAoaSA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFwiR290IHRoZSBlbmQgb2YgdGhlIGlucHV0XCI7XG4gIH1cblxuICBpZiAoaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgdmFyIGJ5dGVMaW5lV2l0aEVycm9ySW5kZXggPSBpIC0gKGkgJSBieXRlc1BlckxpbmUpO1xuICAgIHZhciBjb2x1bW5CeXRlSW5kZXggPSBpIC0gYnl0ZUxpbmVXaXRoRXJyb3JJbmRleDtcbiAgICB2YXIgYnl0ZVJhbmdlID0gcmFuZ2VGcm9tSW5kZXhBbmRPZmZzZXRzKFxuICAgICAgYnl0ZUxpbmVXaXRoRXJyb3JJbmRleCxcbiAgICAgIGJ5dGVzQmVmb3JlLFxuICAgICAgYnl0ZXNBZnRlciArIGJ5dGVzUGVyTGluZSxcbiAgICAgIGlucHV0Lmxlbmd0aFxuICAgICk7XG4gICAgdmFyIGJ5dGVzID0gaW5wdXQuc2xpY2UoYnl0ZVJhbmdlLmZyb20sIGJ5dGVSYW5nZS50byk7XG4gICAgdmFyIGJ5dGVzSW5DaHVua3MgPSB0b0NodW5rcyhieXRlcy50b0pTT04oKS5kYXRhLCBieXRlc1BlckxpbmUpO1xuXG4gICAgdmFyIGJ5dGVMaW5lcyA9IG1hcChmdW5jdGlvbihieXRlUm93KSB7XG4gICAgICByZXR1cm4gbWFwKGZ1bmN0aW9uKGJ5dGVWYWx1ZSkge1xuICAgICAgICAvLyBQcmVmaXggYnl0ZSB2YWx1ZXMgd2l0aCBhIGAwYCBpZiB0aGV5IGFyZSBzaG9ydGVyIHRoYW4gMiBjaGFyYWN0ZXJzLlxuICAgICAgICByZXR1cm4gbGVmdFBhZChieXRlVmFsdWUudG9TdHJpbmcoMTYpLCAyLCBcIjBcIik7XG4gICAgICB9LCBieXRlUm93KTtcbiAgICB9LCBieXRlc0luQ2h1bmtzKTtcblxuICAgIGxpbmVSYW5nZSA9IGJ5dGVSYW5nZVRvUmFuZ2UoYnl0ZVJhbmdlKTtcbiAgICBsaW5lV2l0aEVycm9ySW5kZXggPSBieXRlTGluZVdpdGhFcnJvckluZGV4IC8gYnl0ZXNQZXJMaW5lO1xuICAgIGNvbHVtbiA9IGNvbHVtbkJ5dGVJbmRleCAqIDM7XG5cbiAgICAvLyBBY2NvdW50IGZvciBhbiBleHRyYSBzcGFjZS5cbiAgICBpZiAoY29sdW1uQnl0ZUluZGV4ID49IDQpIHtcbiAgICAgIGNvbHVtbiArPSAxO1xuICAgIH1cblxuICAgIHZlcnRpY2FsTWFya2VyTGVuZ3RoID0gMjtcbiAgICBsaW5lcyA9IG1hcChmdW5jdGlvbihieXRlTGluZSkge1xuICAgICAgcmV0dXJuIGJ5dGVMaW5lLmxlbmd0aCA8PSA0XG4gICAgICAgID8gYnl0ZUxpbmUuam9pbihcIiBcIilcbiAgICAgICAgOiBieXRlTGluZS5zbGljZSgwLCA0KS5qb2luKFwiIFwiKSArIFwiICBcIiArIGJ5dGVMaW5lLnNsaWNlKDQpLmpvaW4oXCIgXCIpO1xuICAgIH0sIGJ5dGVMaW5lcyk7XG4gICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IChcbiAgICAgIChsaW5lUmFuZ2UudG8gPiAwID8gbGluZVJhbmdlLnRvIC0gMSA6IGxpbmVSYW5nZS50bykgKiA4XG4gICAgKS50b1N0cmluZygxNikubGVuZ3RoO1xuXG4gICAgaWYgKGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGggPCAyKSB7XG4gICAgICBsYXN0TGluZU51bWJlckxhYmVsTGVuZ3RoID0gMjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlucHV0TGluZXMgPSBpbnB1dC5zcGxpdCgvXFxyXFxufFtcXG5cXHJcXHUyMDI4XFx1MjAyOV0vKTtcbiAgICBjb2x1bW4gPSBpbmRleC5jb2x1bW4gLSAxO1xuICAgIGxpbmVXaXRoRXJyb3JJbmRleCA9IGluZGV4LmxpbmUgLSAxO1xuICAgIGxpbmVSYW5nZSA9IHJhbmdlRnJvbUluZGV4QW5kT2Zmc2V0cyhcbiAgICAgIGxpbmVXaXRoRXJyb3JJbmRleCxcbiAgICAgIGxpbmVzQmVmb3JlU3RyaW5nRXJyb3IsXG4gICAgICBsaW5lc0FmdGVyU3RyaW5nRXJyb3IsXG4gICAgICBpbnB1dExpbmVzLmxlbmd0aFxuICAgICk7XG5cbiAgICBsaW5lcyA9IGlucHV0TGluZXMuc2xpY2UobGluZVJhbmdlLmZyb20sIGxpbmVSYW5nZS50byk7XG4gICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IGxpbmVSYW5nZS50by50b1N0cmluZygpLmxlbmd0aDtcbiAgfVxuXG4gIHZhciBsaW5lV2l0aEVycm9yQ3VycmVudEluZGV4ID0gbGluZVdpdGhFcnJvckluZGV4IC0gbGluZVJhbmdlLmZyb207XG5cbiAgaWYgKGlzQnVmZmVyKGlucHV0KSkge1xuICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGggPSAoXG4gICAgICAobGluZVJhbmdlLnRvID4gMCA/IGxpbmVSYW5nZS50byAtIDEgOiBsaW5lUmFuZ2UudG8pICogOFxuICAgICkudG9TdHJpbmcoMTYpLmxlbmd0aDtcblxuICAgIGlmIChsYXN0TGluZU51bWJlckxhYmVsTGVuZ3RoIDwgMikge1xuICAgICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IDI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpbmVzV2l0aExpbmVOdW1iZXJzID0gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKGFjYywgbGluZVNvdXJjZSwgaW5kZXgpIHtcbiAgICAgIHZhciBpc0xpbmVXaXRoRXJyb3IgPSBpbmRleCA9PT0gbGluZVdpdGhFcnJvckN1cnJlbnRJbmRleDtcbiAgICAgIHZhciBwcmVmaXggPSBpc0xpbmVXaXRoRXJyb3IgPyBcIj4gXCIgOiBkZWZhdWx0TGluZVByZWZpeDtcbiAgICAgIHZhciBsaW5lTnVtYmVyTGFiZWw7XG5cbiAgICAgIGlmIChpc0J1ZmZlcihpbnB1dCkpIHtcbiAgICAgICAgbGluZU51bWJlckxhYmVsID0gbGVmdFBhZChcbiAgICAgICAgICAoKGxpbmVSYW5nZS5mcm9tICsgaW5kZXgpICogOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGgsXG4gICAgICAgICAgXCIwXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVOdW1iZXJMYWJlbCA9IGxlZnRQYWQoXG4gICAgICAgICAgKGxpbmVSYW5nZS5mcm9tICsgaW5kZXggKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGgsXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICAgICAgYWNjLFxuICAgICAgICBbcHJlZml4ICsgbGluZU51bWJlckxhYmVsICsgXCIgfCBcIiArIGxpbmVTb3VyY2VdLFxuICAgICAgICBpc0xpbmVXaXRoRXJyb3JcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgZGVmYXVsdExpbmVQcmVmaXggK1xuICAgICAgICAgICAgICAgIHJlcGVhdChcIiBcIiwgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCkgK1xuICAgICAgICAgICAgICAgIFwiIHwgXCIgK1xuICAgICAgICAgICAgICAgIGxlZnRQYWQoXCJcIiwgY29sdW1uLCBcIiBcIikgK1xuICAgICAgICAgICAgICAgIHJlcGVhdChcIl5cIiwgdmVydGljYWxNYXJrZXJMZW5ndGgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGxpbmVzXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzV2l0aExpbmVOdW1iZXJzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKGlucHV0LCBlcnJvcikge1xuICByZXR1cm4gW1xuICAgIFwiXFxuXCIsXG4gICAgXCItLSBQQVJTSU5HIEZBSUxFRCBcIiArIHJlcGVhdChcIi1cIiwgNTApLFxuICAgIFwiXFxuXFxuXCIsXG4gICAgZm9ybWF0R290KGlucHV0LCBlcnJvciksXG4gICAgXCJcXG5cXG5cIixcbiAgICBmb3JtYXRFeHBlY3RlZChlcnJvci5leHBlY3RlZCksXG4gICAgXCJcXG5cIlxuICBdLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGZsYWdzKHJlKSB7XG4gIGlmIChyZS5mbGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlLmZsYWdzO1xuICB9XG4gIC8vIGxlZ2FjeSBicm93c2VyIHN1cHBvcnRcbiAgcmV0dXJuIFtcbiAgICByZS5nbG9iYWwgPyBcImdcIiA6IFwiXCIsXG4gICAgcmUuaWdub3JlQ2FzZSA/IFwiaVwiIDogXCJcIixcbiAgICByZS5tdWx0aWxpbmUgPyBcIm1cIiA6IFwiXCIsXG4gICAgcmUudW5pY29kZSA/IFwidVwiIDogXCJcIixcbiAgICByZS5zdGlja3kgPyBcInlcIiA6IFwiXCJcbiAgXS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBhbmNob3JlZFJlZ2V4cChyZSkge1xuICByZXR1cm4gUmVnRXhwKFwiXig/OlwiICsgcmUuc291cmNlICsgXCIpXCIsIGZsYWdzKHJlKSk7XG59XG5cbi8vIC0qLSBDb21iaW5hdG9ycyAtKi1cblxuZnVuY3Rpb24gc2VxKCkge1xuICB2YXIgcGFyc2VycyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICBhc3NlcnRQYXJzZXIocGFyc2Vyc1tqXSk7XG4gIH1cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGFjY3VtID0gbmV3IEFycmF5KG51bVBhcnNlcnMpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtUGFyc2VyczsgaiArPSAxKSB7XG4gICAgICByZXN1bHQgPSBtZXJnZVJlcGxpZXMocGFyc2Vyc1tqXS5fKGlucHV0LCBpKSwgcmVzdWx0KTtcbiAgICAgIGlmICghcmVzdWx0LnN0YXR1cykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgYWNjdW1bal0gPSByZXN1bHQudmFsdWU7XG4gICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKGksIGFjY3VtKSwgcmVzdWx0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcU9iaigpIHtcbiAgdmFyIHNlZW5LZXlzID0ge307XG4gIHZhciB0b3RhbEtleXMgPSAwO1xuICB2YXIgcGFyc2VycyA9IHRvQXJyYXkoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICB2YXIgcCA9IHBhcnNlcnNbal07XG4gICAgaWYgKGlzUGFyc2VyKHApKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkocCkpIHtcbiAgICAgIHZhciBpc1dlbGxGb3JtZWQgPVxuICAgICAgICBwLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgcFswXSA9PT0gXCJzdHJpbmdcIiAmJiBpc1BhcnNlcihwWzFdKTtcbiAgICAgIGlmIChpc1dlbGxGb3JtZWQpIHtcbiAgICAgICAgdmFyIGtleSA9IHBbMF07XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VlbktleXMsIGtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmo6IGR1cGxpY2F0ZSBrZXkgXCIgKyBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB0b3RhbEtleXMrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwic2VxT2JqIGFyZ3VtZW50cyBtdXN0IGJlIHBhcnNlcnMgb3IgW3N0cmluZywgcGFyc2VyXSBhcnJheSBwYWlycy5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHRvdGFsS2V5cyA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYXJzZXIsIGZvdW5kIHplcm9cIik7XG4gIH1cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGFjY3VtID0ge307XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICAgIHZhciBuYW1lO1xuICAgICAgdmFyIHBhcnNlcjtcbiAgICAgIGlmIChpc0FycmF5KHBhcnNlcnNbal0pKSB7XG4gICAgICAgIG5hbWUgPSBwYXJzZXJzW2pdWzBdO1xuICAgICAgICBwYXJzZXIgPSBwYXJzZXJzW2pdWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IG51bGw7XG4gICAgICAgIHBhcnNlciA9IHBhcnNlcnNbal07XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBtZXJnZVJlcGxpZXMocGFyc2VyLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBhY2N1bVtuYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZVJlcGxpZXMobWFrZVN1Y2Nlc3MoaSwgYWNjdW0pLCByZXN1bHQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2VxTWFwKCkge1xuICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic2VxTWFwIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudFwiKTtcbiAgfVxuICB2YXIgbWFwcGVyID0gYXJncy5wb3AoKTtcbiAgYXNzZXJ0RnVuY3Rpb24obWFwcGVyKTtcbiAgcmV0dXJuIHNlcS5hcHBseShudWxsLCBhcmdzKS5tYXAoZnVuY3Rpb24ocmVzdWx0cykge1xuICAgIHJldHVybiBtYXBwZXIuYXBwbHkobnVsbCwgcmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vLyBUT0RPW0VTNV06IFJldmlzaXQgdGhpcyB3aXRoIE9iamVjdC5rZXlzIGFuZCAuYmluZC5cbmZ1bmN0aW9uIGNyZWF0ZUxhbmd1YWdlKHBhcnNlcnMpIHtcbiAgdmFyIGxhbmd1YWdlID0ge307XG4gIGZvciAodmFyIGtleSBpbiBwYXJzZXJzKSB7XG4gICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwocGFyc2Vycywga2V5KSkge1xuICAgICAgKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXJzW2tleV0obGFuZ3VhZ2UpO1xuICAgICAgICB9O1xuICAgICAgICBsYW5ndWFnZVtrZXldID0gbGF6eShmdW5jKTtcbiAgICAgIH0pKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYW5ndWFnZTtcbn1cblxuZnVuY3Rpb24gYWx0KCkge1xuICB2YXIgcGFyc2VycyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgaWYgKG51bVBhcnNlcnMgPT09IDApIHtcbiAgICByZXR1cm4gZmFpbChcInplcm8gYWx0ZXJuYXRlc1wiKTtcbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8IG51bVBhcnNlcnM7IGogKz0gMSkge1xuICAgIGFzc2VydFBhcnNlcihwYXJzZXJzW2pdKTtcbiAgfVxuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnNlcnMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIHJlc3VsdCA9IG1lcmdlUmVwbGllcyhwYXJzZXJzW2pdLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcEJ5KHBhcnNlciwgc2VwYXJhdG9yKSB7XG4gIC8vIEFyZ3VtZW50IGFzc2VydGVkIGJ5IHNlcEJ5MVxuICByZXR1cm4gc2VwQnkxKHBhcnNlciwgc2VwYXJhdG9yKS5vcihzdWNjZWVkKFtdKSk7XG59XG5cbmZ1bmN0aW9uIHNlcEJ5MShwYXJzZXIsIHNlcGFyYXRvcikge1xuICBhc3NlcnRQYXJzZXIocGFyc2VyKTtcbiAgYXNzZXJ0UGFyc2VyKHNlcGFyYXRvcik7XG4gIHZhciBwYWlycyA9IHNlcGFyYXRvci50aGVuKHBhcnNlcikubWFueSgpO1xuICByZXR1cm4gc2VxTWFwKHBhcnNlciwgcGFpcnMsIGZ1bmN0aW9uKHIsIHJzKSB7XG4gICAgcmV0dXJuIFtyXS5jb25jYXQocnMpO1xuICB9KTtcbn1cblxuLy8gLSotIENvcmUgUGFyc2luZyBNZXRob2RzIC0qLVxuXG5fLnBhcnNlID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIiAmJiAhaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50XCJcbiAgICApO1xuICB9XG4gIHZhciBwYXJzZVJlc3VsdCA9IHRoaXMuc2tpcChlb2YpLl8oaW5wdXQsIDApO1xuXG4gIHZhciByZXN1bHQ7XG4gIGlmIChwYXJzZVJlc3VsdC5zdGF0dXMpIHtcbiAgICByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICB2YWx1ZTogcGFyc2VSZXN1bHQudmFsdWVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICBpbmRleDogbWFrZUxpbmVDb2x1bW5JbmRleChpbnB1dCwgcGFyc2VSZXN1bHQuZnVydGhlc3QpLFxuICAgICAgZXhwZWN0ZWQ6IHBhcnNlUmVzdWx0LmV4cGVjdGVkXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJlbGVhc2UgbWVtb3J5IGZyb20gbGluZUNvbHVtbkluZGV4IG5vdyB3ZSBhcmUgZG9uZSBwYXJzaW5nXG4gIGRlbGV0ZSBsaW5lQ29sdW1uSW5kZXhbaW5wdXRdO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAtKi0gT3RoZXIgTWV0aG9kcyAtKi1cblxuXy50cnlQYXJzZSA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZShzdHIpO1xuICBpZiAocmVzdWx0LnN0YXR1cykge1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1zZyA9IGZvcm1hdEVycm9yKHN0ciwgcmVzdWx0KTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgZXJyLnR5cGUgPSBcIlBhcnNpbW1vbkVycm9yXCI7XG4gICAgZXJyLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn07XG5cbl8uYXNzZXJ0ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIHtcbiAgcmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uKHZhbHVlKSA/IHN1Y2NlZWQodmFsdWUpIDogZmFpbChlcnJvck1lc3NhZ2UpO1xuICB9KTtcbn07XG5cbl8ub3IgPSBmdW5jdGlvbihhbHRlcm5hdGl2ZSkge1xuICByZXR1cm4gYWx0KHRoaXMsIGFsdGVybmF0aXZlKTtcbn07XG5cbl8udHJpbSA9IGZ1bmN0aW9uKHBhcnNlcikge1xuICByZXR1cm4gdGhpcy53cmFwKHBhcnNlciwgcGFyc2VyKTtcbn07XG5cbl8ud3JhcCA9IGZ1bmN0aW9uKGxlZnRQYXJzZXIsIHJpZ2h0UGFyc2VyKSB7XG4gIHJldHVybiBzZXFNYXAobGVmdFBhcnNlciwgdGhpcywgcmlnaHRQYXJzZXIsIGZ1bmN0aW9uKGxlZnQsIG1pZGRsZSkge1xuICAgIHJldHVybiBtaWRkbGU7XG4gIH0pO1xufTtcblxuXy50aHJ1ID0gZnVuY3Rpb24od3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlcih0aGlzKTtcbn07XG5cbl8udGhlbiA9IGZ1bmN0aW9uKG5leHQpIHtcbiAgYXNzZXJ0UGFyc2VyKG5leHQpO1xuICByZXR1cm4gc2VxKHRoaXMsIG5leHQpLm1hcChmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNbMV07XG4gIH0pO1xufTtcblxuXy5tYW55ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIGFjY3VtID0gW107XG4gICAgdmFyIHJlc3VsdCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIHJlc3VsdCA9IG1lcmdlUmVwbGllcyhzZWxmLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgaWYgKGkgPT09IHJlc3VsdC5pbmRleCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIFwiICtcbiAgICAgICAgICAgICAgXCJhIHBhcnNlciB3aGljaCBjYW4gYWNjZXB0IHplcm8gY2hhcmFjdGVycyBpcyB1c3VhbGx5IHRoZSBjYXVzZVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBhY2N1bS5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKGksIGFjY3VtKSwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuXy50aWVXaXRoID0gZnVuY3Rpb24oc2VwYXJhdG9yKSB7XG4gIGFzc2VydFN0cmluZyhzZXBhcmF0b3IpO1xuICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oYXJncykge1xuICAgIGFzc2VydEFycmF5KGFyZ3MpO1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgYXNzZXJ0U3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgdmFyIHMgPSBhcmdzWzBdO1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzc2VydFN0cmluZyhhcmdzW2ldKTtcbiAgICAgICAgcyArPSBzZXBhcmF0b3IgKyBhcmdzW2ldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSk7XG59O1xuXG5fLnRpZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aWVXaXRoKFwiXCIpO1xufTtcblxuXy50aW1lcyA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWF4ID0gbWluO1xuICB9XG4gIGFzc2VydE51bWJlcihtaW4pO1xuICBhc3NlcnROdW1iZXIobWF4KTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBhY2N1bSA9IFtdO1xuICAgIHZhciByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgdGltZXMgPSAwOyB0aW1lcyA8IG1pbjsgdGltZXMgKz0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZi5fKGlucHV0LCBpKTtcbiAgICAgIHByZXZSZXN1bHQgPSBtZXJnZVJlcGxpZXMocmVzdWx0LCBwcmV2UmVzdWx0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG4gICAgICAgIGFjY3VtLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDsgdGltZXMgPCBtYXg7IHRpbWVzICs9IDEpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgICBwcmV2UmVzdWx0ID0gbWVyZ2VSZXBsaWVzKHJlc3VsdCwgcHJldlJlc3VsdCk7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cykge1xuICAgICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBhY2N1bS5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlUmVwbGllcyhtYWtlU3VjY2VzcyhpLCBhY2N1bSksIHByZXZSZXN1bHQpO1xuICB9KTtcbn07XG5cbl8ucmVzdWx0ID0gZnVuY3Rpb24ocmVzKSB7XG4gIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn07XG5cbl8uYXRNb3N0ID0gZnVuY3Rpb24obikge1xuICByZXR1cm4gdGhpcy50aW1lcygwLCBuKTtcbn07XG5cbl8uYXRMZWFzdCA9IGZ1bmN0aW9uKG4pIHtcbiAgcmV0dXJuIHNlcU1hcCh0aGlzLnRpbWVzKG4pLCB0aGlzLm1hbnkoKSwgZnVuY3Rpb24oaW5pdCwgcmVzdCkge1xuICAgIHJldHVybiBpbml0LmNvbmNhdChyZXN0KTtcbiAgfSk7XG59O1xuXG5fLm1hcCA9IGZ1bmN0aW9uKGZuKSB7XG4gIGFzc2VydEZ1bmN0aW9uKGZuKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKHJlc3VsdC5pbmRleCwgZm4ocmVzdWx0LnZhbHVlKSksIHJlc3VsdCk7XG4gIH0pO1xufTtcblxuXy5jb250cmFtYXAgPSBmdW5jdGlvbihmbikge1xuICBhc3NlcnRGdW5jdGlvbihmbik7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQgPSBzZWxmLnBhcnNlKGZuKGlucHV0LnNsaWNlKGkpKSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSArIGlucHV0Lmxlbmd0aCwgcmVzdWx0LnZhbHVlKTtcbiAgfSk7XG59O1xuXG5fLnByb21hcCA9IGZ1bmN0aW9uKGYsIGcpIHtcbiAgYXNzZXJ0RnVuY3Rpb24oZik7XG4gIGFzc2VydEZ1bmN0aW9uKGcpO1xuICByZXR1cm4gdGhpcy5jb250cmFtYXAoZikubWFwKGcpO1xufTtcblxuXy5za2lwID0gZnVuY3Rpb24obmV4dCkge1xuICByZXR1cm4gc2VxKHRoaXMsIG5leHQpLm1hcChmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNbMF07XG4gIH0pO1xufTtcblxuXy5tYXJrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzZXFNYXAoaW5kZXgsIHRoaXMsIGluZGV4LCBmdW5jdGlvbihzdGFydCwgdmFsdWUsIGVuZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbmQ6IGVuZFxuICAgIH07XG4gIH0pO1xufTtcblxuXy5ub2RlID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VxTWFwKGluZGV4LCB0aGlzLCBpbmRleCwgZnVuY3Rpb24oc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogZW5kXG4gICAgfTtcbiAgfSk7XG59O1xuXG5fLnNlcEJ5ID0gZnVuY3Rpb24oc2VwYXJhdG9yKSB7XG4gIHJldHVybiBzZXBCeSh0aGlzLCBzZXBhcmF0b3IpO1xufTtcblxuXy5zZXBCeTEgPSBmdW5jdGlvbihzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIHNlcEJ5MSh0aGlzLCBzZXBhcmF0b3IpO1xufTtcblxuXy5sb29rYWhlYWQgPSBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0aGlzLnNraXAobG9va2FoZWFkKHgpKTtcbn07XG5cbl8ubm90Rm9sbG93ZWRCeSA9IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHRoaXMuc2tpcChub3RGb2xsb3dlZEJ5KHgpKTtcbn07XG5cbl8uZGVzYyA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gIGlmICghaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBleHBlY3RlZCA9IFtleHBlY3RlZF07XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlcGx5ID0gc2VsZi5fKGlucHV0LCBpKTtcbiAgICBpZiAoIXJlcGx5LnN0YXR1cykge1xuICAgICAgcmVwbHkuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGx5O1xuICB9KTtcbn07XG5cbl8uZmFsbGJhY2sgPSBmdW5jdGlvbihyZXN1bHQpIHtcbiAgcmV0dXJuIHRoaXMub3Ioc3VjY2VlZChyZXN1bHQpKTtcbn07XG5cbl8uYXAgPSBmdW5jdGlvbihvdGhlcikge1xuICByZXR1cm4gc2VxTWFwKG90aGVyLCB0aGlzLCBmdW5jdGlvbihmLCB4KSB7XG4gICAgcmV0dXJuIGYoeCk7XG4gIH0pO1xufTtcblxuXy5jaGFpbiA9IGZ1bmN0aW9uKGYpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV4dFBhcnNlciA9IGYocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG5leHRQYXJzZXIuXyhpbnB1dCwgcmVzdWx0LmluZGV4KSwgcmVzdWx0KTtcbiAgfSk7XG59O1xuXG4vLyAtKi0gQ29uc3RydWN0b3JzIC0qLVxuXG5mdW5jdGlvbiBzdHJpbmcoc3RyKSB7XG4gIGFzc2VydFN0cmluZyhzdHIpO1xuICB2YXIgZXhwZWN0ZWQgPSBcIidcIiArIHN0ciArIFwiJ1wiO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIGogPSBpICsgc3RyLmxlbmd0aDtcbiAgICB2YXIgaGVhZCA9IGlucHV0LnNsaWNlKGksIGopO1xuICAgIGlmIChoZWFkID09PSBzdHIpIHtcbiAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhqLCBoZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBieXRlKGIpIHtcbiAgZW5zdXJlQnVmZmVyKCk7XG4gIGFzc2VydE51bWJlcihiKTtcbiAgaWYgKGIgPiAweGZmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoXCIgK1xuICAgICAgICBiICtcbiAgICAgICAgXCI9MHhcIiArXG4gICAgICAgIGIudG9TdHJpbmcoMTYpICtcbiAgICAgICAgXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCJcbiAgICApO1xuICB9XG4gIHZhciBleHBlY3RlZCA9IChiID4gMHhmID8gXCIweFwiIDogXCIweDBcIikgKyBiLnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBoZWFkID0gZ2V0KGlucHV0LCBpKTtcbiAgICBpZiAoaGVhZCA9PT0gYikge1xuICAgICAgcmV0dXJuIG1ha2VTdWNjZXNzKGkgKyAxLCBoZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdleHAocmUsIGdyb3VwKSB7XG4gIGFzc2VydFJlZ2V4cChyZSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHtcbiAgICBhc3NlcnROdW1iZXIoZ3JvdXApO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gMDtcbiAgfVxuICB2YXIgYW5jaG9yZWQgPSBhbmNob3JlZFJlZ2V4cChyZSk7XG4gIHZhciBleHBlY3RlZCA9IFwiXCIgKyByZTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBtYXRjaCA9IGFuY2hvcmVkLmV4ZWMoaW5wdXQuc2xpY2UoaSkpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgaWYgKDAgPD0gZ3JvdXAgJiYgZ3JvdXAgPD0gbWF0Y2gubGVuZ3RoKSB7XG4gICAgICAgIHZhciBmdWxsTWF0Y2ggPSBtYXRjaFswXTtcbiAgICAgICAgdmFyIGdyb3VwTWF0Y2ggPSBtYXRjaFtncm91cF07XG4gICAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhpICsgZnVsbE1hdGNoLmxlbmd0aCwgZ3JvdXBNYXRjaCk7XG4gICAgICB9XG4gICAgICB2YXIgbWVzc2FnZSA9XG4gICAgICAgIFwidmFsaWQgbWF0Y2ggZ3JvdXAgKDAgdG8gXCIgKyBtYXRjaC5sZW5ndGggKyBcIikgaW4gXCIgKyBleHBlY3RlZDtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN1Y2NlZWQodmFsdWUpIHtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHJldHVybiBtYWtlU3VjY2VzcyhpLCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmYWlsKGV4cGVjdGVkKSB7XG4gIHJldHVybiBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICByZXR1cm4gbWFrZUZhaWx1cmUoaSwgZXhwZWN0ZWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbG9va2FoZWFkKHgpIHtcbiAgaWYgKGlzUGFyc2VyKHgpKSB7XG4gICAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHguXyhpbnB1dCwgaSk7XG4gICAgICByZXN1bHQuaW5kZXggPSBpO1xuICAgICAgcmVzdWx0LnZhbHVlID0gXCJcIjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gbG9va2FoZWFkKHN0cmluZyh4KSk7XG4gIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBsb29rYWhlYWQocmVnZXhwKHgpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmcsIHJlZ2V4cCwgb3IgcGFyc2VyOiBcIiArIHgpO1xufVxuXG5mdW5jdGlvbiBub3RGb2xsb3dlZEJ5KHBhcnNlcikge1xuICBhc3NlcnRQYXJzZXIocGFyc2VyKTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQgPSBwYXJzZXIuXyhpbnB1dCwgaSk7XG4gICAgdmFyIHRleHQgPSBpbnB1dC5zbGljZShpLCByZXN1bHQuaW5kZXgpO1xuICAgIHJldHVybiByZXN1bHQuc3RhdHVzXG4gICAgICA/IG1ha2VGYWlsdXJlKGksICdub3QgXCInICsgdGV4dCArICdcIicpXG4gICAgICA6IG1ha2VTdWNjZXNzKGksIG51bGwpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdGVzdChwcmVkaWNhdGUpIHtcbiAgYXNzZXJ0RnVuY3Rpb24ocHJlZGljYXRlKTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBjaGFyID0gZ2V0KGlucHV0LCBpKTtcbiAgICBpZiAoaSA8IGlucHV0Lmxlbmd0aCAmJiBwcmVkaWNhdGUoY2hhcikpIHtcbiAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhpICsgMSwgY2hhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIgKyBwcmVkaWNhdGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uZU9mKHN0cikge1xuICB2YXIgZXhwZWN0ZWQgPSBzdHIuc3BsaXQoXCJcIik7XG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGV4cGVjdGVkLmxlbmd0aDsgaWR4KyspIHtcbiAgICBleHBlY3RlZFtpZHhdID0gXCInXCIgKyBleHBlY3RlZFtpZHhdICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHRlc3QoZnVuY3Rpb24oY2gpIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2YoY2gpID49IDA7XG4gIH0pLmRlc2MoZXhwZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBub25lT2Yoc3RyKSB7XG4gIHJldHVybiB0ZXN0KGZ1bmN0aW9uKGNoKSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKGNoKSA8IDA7XG4gIH0pLmRlc2MoXCJub25lIG9mICdcIiArIHN0ciArIFwiJ1wiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tKHBhcnNpbmdGdW5jdGlvbikge1xuICByZXR1cm4gUGFyc2ltbW9uKHBhcnNpbmdGdW5jdGlvbihtYWtlU3VjY2VzcywgbWFrZUZhaWx1cmUpKTtcbn1cblxuLy8gVE9ET1tFUzVdOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgdXNpbmcgSlNPTi5zdHJpbmdpZnkgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIHJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgcmV0dXJuIHRlc3QoZnVuY3Rpb24oY2gpIHtcbiAgICByZXR1cm4gYmVnaW4gPD0gY2ggJiYgY2ggPD0gZW5kO1xuICB9KS5kZXNjKGJlZ2luICsgXCItXCIgKyBlbmQpO1xufVxuXG5mdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlKSB7XG4gIGFzc2VydEZ1bmN0aW9uKHByZWRpY2F0ZSk7XG5cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBqID0gaTtcbiAgICB3aGlsZSAoaiA8IGlucHV0Lmxlbmd0aCAmJiBwcmVkaWNhdGUoZ2V0KGlucHV0LCBqKSkpIHtcbiAgICAgIGorKztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdWNjZXNzKGosIGlucHV0LnNsaWNlKGksIGopKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGxhenkoZGVzYywgZikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBmID0gZGVzYztcbiAgICBkZXNjID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHBhcnNlci5fID0gZigpLl87XG4gICAgcmV0dXJuIHBhcnNlci5fKGlucHV0LCBpKTtcbiAgfSk7XG5cbiAgaWYgKGRlc2MpIHtcbiAgICByZXR1cm4gcGFyc2VyLmRlc2MoZGVzYyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuXG4vLyAtKi0gRmFudGFzeSBMYW5kIEV4dHJhcyAtKi1cblxuZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBmYWlsKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpO1xufVxuXG5fLmNvbmNhdCA9IF8ub3I7XG5fLmVtcHR5ID0gZW1wdHk7XG5fLm9mID0gc3VjY2VlZDtcbl9bXCJmYW50YXN5LWxhbmQvYXBcIl0gPSBfLmFwO1xuX1tcImZhbnRhc3ktbGFuZC9jaGFpblwiXSA9IF8uY2hhaW47XG5fW1wiZmFudGFzeS1sYW5kL2NvbmNhdFwiXSA9IF8uY29uY2F0O1xuX1tcImZhbnRhc3ktbGFuZC9lbXB0eVwiXSA9IF8uZW1wdHk7XG5fW1wiZmFudGFzeS1sYW5kL29mXCJdID0gXy5vZjtcbl9bXCJmYW50YXN5LWxhbmQvbWFwXCJdID0gXy5tYXA7XG5cbi8vIC0qLSBCYXNlIFBhcnNlcnMgLSotXG5cbnZhciBpbmRleCA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSwgbWFrZUxpbmVDb2x1bW5JbmRleChpbnB1dCwgaSkpO1xufSk7XG5cbnZhciBhbnkgPSBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpO1xuICB9XG4gIHJldHVybiBtYWtlU3VjY2VzcyhpICsgMSwgZ2V0KGlucHV0LCBpKSk7XG59KTtcblxudmFyIGFsbCA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaW5wdXQubGVuZ3RoLCBpbnB1dC5zbGljZShpKSk7XG59KTtcblxudmFyIGVvZiA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICBpZiAoaSA8IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBcIkVPRlwiKTtcbiAgfVxuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSwgbnVsbCk7XG59KTtcblxudmFyIGRpZ2l0ID0gcmVnZXhwKC9bMC05XS8pLmRlc2MoXCJhIGRpZ2l0XCIpO1xudmFyIGRpZ2l0cyA9IHJlZ2V4cCgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKTtcbnZhciBsZXR0ZXIgPSByZWdleHAoL1thLXpdL2kpLmRlc2MoXCJhIGxldHRlclwiKTtcbnZhciBsZXR0ZXJzID0gcmVnZXhwKC9bYS16XSovaSkuZGVzYyhcIm9wdGlvbmFsIGxldHRlcnNcIik7XG52YXIgb3B0V2hpdGVzcGFjZSA9IHJlZ2V4cCgvXFxzKi8pLmRlc2MoXCJvcHRpb25hbCB3aGl0ZXNwYWNlXCIpO1xudmFyIHdoaXRlc3BhY2UgPSByZWdleHAoL1xccysvKS5kZXNjKFwid2hpdGVzcGFjZVwiKTtcbnZhciBjciA9IHN0cmluZyhcIlxcclwiKTtcbnZhciBsZiA9IHN0cmluZyhcIlxcblwiKTtcbnZhciBjcmxmID0gc3RyaW5nKFwiXFxyXFxuXCIpO1xudmFyIG5ld2xpbmUgPSBhbHQoY3JsZiwgbGYsIGNyKS5kZXNjKFwibmV3bGluZVwiKTtcbnZhciBlbmQgPSBhbHQobmV3bGluZSwgZW9mKTtcblxuUGFyc2ltbW9uLmFsbCA9IGFsbDtcblBhcnNpbW1vbi5hbHQgPSBhbHQ7XG5QYXJzaW1tb24uYW55ID0gYW55O1xuUGFyc2ltbW9uLmNyID0gY3I7XG5QYXJzaW1tb24uY3JlYXRlTGFuZ3VhZ2UgPSBjcmVhdGVMYW5ndWFnZTtcblBhcnNpbW1vbi5jcmxmID0gY3JsZjtcblBhcnNpbW1vbi5jdXN0b20gPSBjdXN0b207XG5QYXJzaW1tb24uZGlnaXQgPSBkaWdpdDtcblBhcnNpbW1vbi5kaWdpdHMgPSBkaWdpdHM7XG5QYXJzaW1tb24uZW1wdHkgPSBlbXB0eTtcblBhcnNpbW1vbi5lbmQgPSBlbmQ7XG5QYXJzaW1tb24uZW9mID0gZW9mO1xuUGFyc2ltbW9uLmZhaWwgPSBmYWlsO1xuUGFyc2ltbW9uLmZvcm1hdEVycm9yID0gZm9ybWF0RXJyb3I7XG5QYXJzaW1tb24uaW5kZXggPSBpbmRleDtcblBhcnNpbW1vbi5pc1BhcnNlciA9IGlzUGFyc2VyO1xuUGFyc2ltbW9uLmxhenkgPSBsYXp5O1xuUGFyc2ltbW9uLmxldHRlciA9IGxldHRlcjtcblBhcnNpbW1vbi5sZXR0ZXJzID0gbGV0dGVycztcblBhcnNpbW1vbi5sZiA9IGxmO1xuUGFyc2ltbW9uLmxvb2thaGVhZCA9IGxvb2thaGVhZDtcblBhcnNpbW1vbi5tYWtlRmFpbHVyZSA9IG1ha2VGYWlsdXJlO1xuUGFyc2ltbW9uLm1ha2VTdWNjZXNzID0gbWFrZVN1Y2Nlc3M7XG5QYXJzaW1tb24ubmV3bGluZSA9IG5ld2xpbmU7XG5QYXJzaW1tb24ubm9uZU9mID0gbm9uZU9mO1xuUGFyc2ltbW9uLm5vdEZvbGxvd2VkQnkgPSBub3RGb2xsb3dlZEJ5O1xuUGFyc2ltbW9uLm9mID0gc3VjY2VlZDtcblBhcnNpbW1vbi5vbmVPZiA9IG9uZU9mO1xuUGFyc2ltbW9uLm9wdFdoaXRlc3BhY2UgPSBvcHRXaGl0ZXNwYWNlO1xuUGFyc2ltbW9uLlBhcnNlciA9IFBhcnNpbW1vbjtcblBhcnNpbW1vbi5yYW5nZSA9IHJhbmdlO1xuUGFyc2ltbW9uLnJlZ2V4ID0gcmVnZXhwO1xuUGFyc2ltbW9uLnJlZ2V4cCA9IHJlZ2V4cDtcblBhcnNpbW1vbi5zZXBCeSA9IHNlcEJ5O1xuUGFyc2ltbW9uLnNlcEJ5MSA9IHNlcEJ5MTtcblBhcnNpbW1vbi5zZXEgPSBzZXE7XG5QYXJzaW1tb24uc2VxTWFwID0gc2VxTWFwO1xuUGFyc2ltbW9uLnNlcU9iaiA9IHNlcU9iajtcblBhcnNpbW1vbi5zdHJpbmcgPSBzdHJpbmc7XG5QYXJzaW1tb24uc3VjY2VlZCA9IHN1Y2NlZWQ7XG5QYXJzaW1tb24udGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuUGFyc2ltbW9uLnRlc3QgPSB0ZXN0O1xuUGFyc2ltbW9uLndoaXRlc3BhY2UgPSB3aGl0ZXNwYWNlO1xuUGFyc2ltbW9uW1wiZmFudGFzeS1sYW5kL2VtcHR5XCJdID0gZW1wdHk7XG5QYXJzaW1tb25bXCJmYW50YXN5LWxhbmQvb2ZcIl0gPSBzdWNjZWVkO1xuXG5QYXJzaW1tb24uQmluYXJ5ID0ge1xuICBiaXRTZXE6IGJpdFNlcSxcbiAgYml0U2VxT2JqOiBiaXRTZXFPYmosXG4gIGJ5dGU6IGJ5dGUsXG4gIGJ1ZmZlcjogcGFyc2VCdWZmZXIsXG4gIGVuY29kZWRTdHJpbmc6IGVuY29kZWRTdHJpbmcsXG4gIHVpbnRCRTogdWludEJFLFxuICB1aW50OEJFOiB1aW50QkUoMSksXG4gIHVpbnQxNkJFOiB1aW50QkUoMiksXG4gIHVpbnQzMkJFOiB1aW50QkUoNCksXG4gIHVpbnRMRTogdWludExFLFxuICB1aW50OExFOiB1aW50TEUoMSksXG4gIHVpbnQxNkxFOiB1aW50TEUoMiksXG4gIHVpbnQzMkxFOiB1aW50TEUoNCksXG4gIGludEJFOiBpbnRCRSxcbiAgaW50OEJFOiBpbnRCRSgxKSxcbiAgaW50MTZCRTogaW50QkUoMiksXG4gIGludDMyQkU6IGludEJFKDQpLFxuICBpbnRMRTogaW50TEUsXG4gIGludDhMRTogaW50TEUoMSksXG4gIGludDE2TEU6IGludExFKDIpLFxuICBpbnQzMkxFOiBpbnRMRSg0KSxcbiAgZmxvYXRCRTogZmxvYXRCRSgpLFxuICBmbG9hdExFOiBmbG9hdExFKCksXG4gIGRvdWJsZUJFOiBkb3VibGVCRSgpLFxuICBkb3VibGVMRTogZG91YmxlTEUoKVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzaW1tb247XG4iLCAibW9kdWxlLmV4cG9ydHMgPSAoKSA9PiB7XG5cdC8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaVxuXHRyZXR1cm4gL1sjKjAtOV1cXHVGRTBGP1xcdTIwRTN8W1xceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFRC1cXHUyM0VGXFx1MjNGMVxcdTIzRjJcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkJcXHUyNUZDXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5MlxcdTI2OTQtXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkE3XFx1MjZBQVxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkQzXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURDQTUpP3xcXHUyNkY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDNFxcdURGQ0FdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURGQ0JcXHVERkNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGNDNcXHVERjQ1LVxcdURGNEFcXHVERjRDLVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEREU2XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXXxcXHVEREU3XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERThcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGN1xcdURERkEtXFx1RERGRl18XFx1RERFOVxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl18XFx1RERFQVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdfFxcdURERUJcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN118XFx1RERFQ1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV18XFx1RERFRFxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXXxcXHVEREVFXFx1RDgzQ1tcXHVEREU4LVxcdURERUFcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjldfFxcdURERUZcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdfFxcdURERjBcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREYxXFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdfFxcdURERjJcXHVEODNDW1xcdURERTZcXHVEREU4LVxcdURERURcXHVEREYwLVxcdURERkZdfFxcdURERjNcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl18XFx1RERGNFxcdUQ4M0NcXHVEREYyfFxcdURERjVcXHVEODNDW1xcdURERTZcXHVEREVBLVxcdURERURcXHVEREYwLVxcdURERjNcXHVEREY3LVxcdURERjlcXHVEREZDXFx1RERGRV18XFx1RERGNlxcdUQ4M0NcXHVEREU2fFxcdURERjdcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXXxcXHVEREY4XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXXxcXHVEREY5XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl18XFx1RERGQVxcdUQ4M0NbXFx1RERFNlxcdURERUNcXHVEREYyXFx1RERGM1xcdURERjhcXHVEREZFXFx1RERGRl18XFx1RERGQlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV18XFx1RERGQ1xcdUQ4M0NbXFx1RERFQlxcdURERjhdfFxcdURERkRcXHVEODNDXFx1RERGMHxcXHVEREZFXFx1RDgzQ1tcXHVEREVBXFx1RERGOV18XFx1RERGRlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXXxcXHVERjQ0KD86XFx1MjAwRFxcdUQ4M0RcXHVERkVCKT98XFx1REY0Qig/OlxcdTIwMERcXHVEODNEXFx1REZFOSk/fFxcdURGQzMoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNFxcdURFQjVdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURENzRcXHVERDkwXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMyNVxcdURDMjctXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDFcXHVERTQzXFx1REU0NFxcdURFNDgtXFx1REU0QVxcdURFODAtXFx1REVBMlxcdURFQTQtXFx1REVCM1xcdURFQjctXFx1REVCRlxcdURFQzEtXFx1REVDNVxcdURFRDAtXFx1REVEMlxcdURFRDUtXFx1REVEN1xcdURFREMtXFx1REVERlxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZDXFx1REZFMC1cXHVERkVCXFx1REZGMF18XFx1REMwOCg/OlxcdTIwMERcXHUyQjFCKT98XFx1REMxNSg/OlxcdTIwMERcXHVEODNFXFx1RERCQSk/fFxcdURDMjYoPzpcXHUyMDBEKD86XFx1MkIxQnxcXHVEODNEXFx1REQyNSkpP3xcXHVEQzNCKD86XFx1MjAwRFxcdTI3NDRcXHVGRTBGPyk/fFxcdURDNDFcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RERFOFxcdUZFMEY/KT98XFx1REM2OCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4fFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldXFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzZGKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURENzUoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURFMkUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQTgpP3xcXHVERTM1KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0FCKT98XFx1REUzNig/OlxcdTIwMERcXHVEODNDXFx1REYyQlxcdUZFMEY/KT98XFx1REU0Mig/OlxcdTIwMERbXFx1MjE5NFxcdTIxOTVdXFx1RkUwRj8pP3xcXHVERUI2KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRFxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERERFXFx1RERERl0oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREMERcXHVERDBFXFx1REQxMC1cXHVERDE3XFx1REQyMC1cXHVERDI1XFx1REQyNy1cXHVERDJGXFx1REQzQVxcdUREM0YtXFx1REQ0NVxcdURENDctXFx1REQ3NlxcdURENzgtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENDXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3Q1xcdURFODAtXFx1REU4OVxcdURFOEYtXFx1REVDMlxcdURFQzZcXHVERUNFLVxcdURFRENcXHVERURGLVxcdURFRTldfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdUREQ0UoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdURERDFcXHUyMDBEXFx1RDgzRVxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpP3xcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT8pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpPykpP3xcXHVERUYxKD86XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pP3xcXHVERkZDKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSk/fFxcdURGRkQoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKT98XFx1REZGRSg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pP3xcXHVERkZGKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKT8pKT8pL2c7XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIENvbnRleHR1YWxLZXl3b3JkOyAoZnVuY3Rpb24gKENvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGNvbnN0IE5PTkUgPSAwOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIk5PTkVcIl0gPSBOT05FXSA9IFwiTk9ORVwiO1xuICBjb25zdCBfYWJzdHJhY3QgPSBOT05FICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWJzdHJhY3RcIl0gPSBfYWJzdHJhY3RdID0gXCJfYWJzdHJhY3RcIjtcbiAgY29uc3QgX2FjY2Vzc29yID0gX2Fic3RyYWN0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWNjZXNzb3JcIl0gPSBfYWNjZXNzb3JdID0gXCJfYWNjZXNzb3JcIjtcbiAgY29uc3QgX2FzID0gX2FjY2Vzc29yICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjtcbiAgY29uc3QgX2Fzc2VydCA9IF9hcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydFwiXSA9IF9hc3NlcnRdID0gXCJfYXNzZXJ0XCI7XG4gIGNvbnN0IF9hc3NlcnRzID0gX2Fzc2VydCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydHNcIl0gPSBfYXNzZXJ0c10gPSBcIl9hc3NlcnRzXCI7XG4gIGNvbnN0IF9hc3luYyA9IF9hc3NlcnRzICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXN5bmNcIl0gPSBfYXN5bmNdID0gXCJfYXN5bmNcIjtcbiAgY29uc3QgX2F3YWl0ID0gX2FzeW5jICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXdhaXRcIl0gPSBfYXdhaXRdID0gXCJfYXdhaXRcIjtcbiAgY29uc3QgX2NoZWNrcyA9IF9hd2FpdCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2NoZWNrc1wiXSA9IF9jaGVja3NdID0gXCJfY2hlY2tzXCI7XG4gIGNvbnN0IF9jb25zdHJ1Y3RvciA9IF9jaGVja3MgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9jb25zdHJ1Y3RvclwiXSA9IF9jb25zdHJ1Y3Rvcl0gPSBcIl9jb25zdHJ1Y3RvclwiO1xuICBjb25zdCBfZGVjbGFyZSA9IF9jb25zdHJ1Y3RvciArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7XG4gIGNvbnN0IF9lbnVtID0gX2RlY2xhcmUgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiO1xuICBjb25zdCBfZXhwb3J0cyA9IF9lbnVtICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZXhwb3J0c1wiXSA9IF9leHBvcnRzXSA9IFwiX2V4cG9ydHNcIjtcbiAgY29uc3QgX2Zyb20gPSBfZXhwb3J0cyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Zyb21cIl0gPSBfZnJvbV0gPSBcIl9mcm9tXCI7XG4gIGNvbnN0IF9nZXQgPSBfZnJvbSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7XG4gIGNvbnN0IF9nbG9iYWwgPSBfZ2V0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZ2xvYmFsXCJdID0gX2dsb2JhbF0gPSBcIl9nbG9iYWxcIjtcbiAgY29uc3QgX2ltcGxlbWVudHMgPSBfZ2xvYmFsICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW1wbGVtZW50c1wiXSA9IF9pbXBsZW1lbnRzXSA9IFwiX2ltcGxlbWVudHNcIjtcbiAgY29uc3QgX2luZmVyID0gX2ltcGxlbWVudHMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9pbmZlclwiXSA9IF9pbmZlcl0gPSBcIl9pbmZlclwiO1xuICBjb25zdCBfaW50ZXJmYWNlID0gX2luZmVyICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW50ZXJmYWNlXCJdID0gX2ludGVyZmFjZV0gPSBcIl9pbnRlcmZhY2VcIjtcbiAgY29uc3QgX2lzID0gX2ludGVyZmFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2lzXCJdID0gX2lzXSA9IFwiX2lzXCI7XG4gIGNvbnN0IF9rZXlvZiA9IF9pcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2tleW9mXCJdID0gX2tleW9mXSA9IFwiX2tleW9mXCI7XG4gIGNvbnN0IF9taXhpbnMgPSBfa2V5b2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9taXhpbnNcIl0gPSBfbWl4aW5zXSA9IFwiX21peGluc1wiO1xuICBjb25zdCBfbW9kdWxlID0gX21peGlucyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX21vZHVsZVwiXSA9IF9tb2R1bGVdID0gXCJfbW9kdWxlXCI7XG4gIGNvbnN0IF9uYW1lc3BhY2UgPSBfbW9kdWxlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfbmFtZXNwYWNlXCJdID0gX25hbWVzcGFjZV0gPSBcIl9uYW1lc3BhY2VcIjtcbiAgY29uc3QgX29mID0gX25hbWVzcGFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX29mXCJdID0gX29mXSA9IFwiX29mXCI7XG4gIGNvbnN0IF9vcGFxdWUgPSBfb2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vcGFxdWVcIl0gPSBfb3BhcXVlXSA9IFwiX29wYXF1ZVwiO1xuICBjb25zdCBfb3V0ID0gX29wYXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX291dFwiXSA9IF9vdXRdID0gXCJfb3V0XCI7XG4gIGNvbnN0IF9vdmVycmlkZSA9IF9vdXQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vdmVycmlkZVwiXSA9IF9vdmVycmlkZV0gPSBcIl9vdmVycmlkZVwiO1xuICBjb25zdCBfcHJpdmF0ZSA9IF9vdmVycmlkZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3ByaXZhdGVcIl0gPSBfcHJpdmF0ZV0gPSBcIl9wcml2YXRlXCI7XG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSBfcHJpdmF0ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3Byb3RlY3RlZFwiXSA9IF9wcm90ZWN0ZWRdID0gXCJfcHJvdGVjdGVkXCI7XG4gIGNvbnN0IF9wcm90byA9IF9wcm90ZWN0ZWQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9wcm90b1wiXSA9IF9wcm90b10gPSBcIl9wcm90b1wiO1xuICBjb25zdCBfcHVibGljID0gX3Byb3RvICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjtcbiAgY29uc3QgX3JlYWRvbmx5ID0gX3B1YmxpYyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3JlYWRvbmx5XCJdID0gX3JlYWRvbmx5XSA9IFwiX3JlYWRvbmx5XCI7XG4gIGNvbnN0IF9yZXF1aXJlID0gX3JlYWRvbmx5ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcmVxdWlyZVwiXSA9IF9yZXF1aXJlXSA9IFwiX3JlcXVpcmVcIjtcbiAgY29uc3QgX3NhdGlzZmllcyA9IF9yZXF1aXJlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc2F0aXNmaWVzXCJdID0gX3NhdGlzZmllc10gPSBcIl9zYXRpc2ZpZXNcIjtcbiAgY29uc3QgX3NldCA9IF9zYXRpc2ZpZXMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiO1xuICBjb25zdCBfc3RhdGljID0gX3NldCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7XG4gIGNvbnN0IF9zeW1ib2wgPSBfc3RhdGljICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc3ltYm9sXCJdID0gX3N5bWJvbF0gPSBcIl9zeW1ib2xcIjtcbiAgY29uc3QgX3R5cGUgPSBfc3ltYm9sICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdHlwZVwiXSA9IF90eXBlXSA9IFwiX3R5cGVcIjtcbiAgY29uc3QgX3VuaXF1ZSA9IF90eXBlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdW5pcXVlXCJdID0gX3VuaXF1ZV0gPSBcIl91bmlxdWVcIjtcbiAgY29uc3QgX3VzaW5nID0gX3VuaXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3VzaW5nXCJdID0gX3VzaW5nXSA9IFwiX3VzaW5nXCI7XG59KShDb250ZXh0dWFsS2V5d29yZCB8fCAoZXhwb3J0cy5Db250ZXh0dWFsS2V5d29yZCA9IENvbnRleHR1YWxLZXl3b3JkID0ge30pKTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOy8vIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdCEgUnVuIFwieWFybiBnZW5lcmF0ZVwiIHRvIHJlLWdlbmVyYXRlIHRoaXMgZmlsZS5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIEVudW0gb2YgYWxsIHRva2VuIHR5cGVzLCB3aXRoIGJpdCBmaWVsZHMgdG8gc2lnbmlmeSBtZWFuaW5nZnVsIHByb3BlcnRpZXMuXG4gKi9cbnZhciBUb2tlblR5cGU7IChmdW5jdGlvbiAoVG9rZW5UeXBlKSB7XG4gIC8vIFByZWNlZGVuY2UgMCBtZWFucyBub3QgYW4gb3BlcmF0b3I7IG90aGVyd2lzZSBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciB1cCB0byAxMi5cbiAgY29uc3QgUFJFQ0VERU5DRV9NQVNLID0gMHhmOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiUFJFQ0VERU5DRV9NQVNLXCJdID0gUFJFQ0VERU5DRV9NQVNLXSA9IFwiUFJFQ0VERU5DRV9NQVNLXCI7XG4gIGNvbnN0IElTX0tFWVdPUkQgPSAxIDw8IDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19LRVlXT1JEXCJdID0gSVNfS0VZV09SRF0gPSBcIklTX0tFWVdPUkRcIjtcbiAgY29uc3QgSVNfQVNTSUdOID0gMSA8PCA1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfQVNTSUdOXCJdID0gSVNfQVNTSUdOXSA9IFwiSVNfQVNTSUdOXCI7XG4gIGNvbnN0IElTX1JJR0hUX0FTU09DSUFUSVZFID0gMSA8PCA2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfUklHSFRfQVNTT0NJQVRJVkVcIl0gPSBJU19SSUdIVF9BU1NPQ0lBVElWRV0gPSBcIklTX1JJR0hUX0FTU09DSUFUSVZFXCI7XG4gIGNvbnN0IElTX1BSRUZJWCA9IDEgPDwgNzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1BSRUZJWFwiXSA9IElTX1BSRUZJWF0gPSBcIklTX1BSRUZJWFwiO1xuICBjb25zdCBJU19QT1NURklYID0gMSA8PCA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfUE9TVEZJWFwiXSA9IElTX1BPU1RGSVhdID0gXCJJU19QT1NURklYXCI7XG4gIGNvbnN0IElTX0VYUFJFU1NJT05fU1RBUlQgPSAxIDw8IDk7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19FWFBSRVNTSU9OX1NUQVJUXCJdID0gSVNfRVhQUkVTU0lPTl9TVEFSVF0gPSBcIklTX0VYUFJFU1NJT05fU1RBUlRcIjtcblxuICBjb25zdCBudW0gPSA1MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJudW1cIl0gPSBudW1dID0gXCJudW1cIjsgLy8gbnVtIHN0YXJ0c0V4cHJcbiAgY29uc3QgYmlnaW50ID0gMTUzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpZ2ludFwiXSA9IGJpZ2ludF0gPSBcImJpZ2ludFwiOyAvLyBiaWdpbnQgc3RhcnRzRXhwclxuICBjb25zdCBkZWNpbWFsID0gMjU2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImRlY2ltYWxcIl0gPSBkZWNpbWFsXSA9IFwiZGVjaW1hbFwiOyAvLyBkZWNpbWFsIHN0YXJ0c0V4cHJcbiAgY29uc3QgcmVnZXhwID0gMzU4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInJlZ2V4cFwiXSA9IHJlZ2V4cF0gPSBcInJlZ2V4cFwiOyAvLyByZWdleHAgc3RhcnRzRXhwclxuICBjb25zdCBzdHJpbmcgPSA0NjA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wic3RyaW5nXCJdID0gc3RyaW5nXSA9IFwic3RyaW5nXCI7IC8vIHN0cmluZyBzdGFydHNFeHByXG4gIGNvbnN0IG5hbWUgPSA1NjMyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibmFtZVwiXSA9IG5hbWVdID0gXCJuYW1lXCI7IC8vIG5hbWUgc3RhcnRzRXhwclxuICBjb25zdCBlb2YgPSA2MTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZW9mXCJdID0gZW9mXSA9IFwiZW9mXCI7IC8vIGVvZlxuICBjb25zdCBicmFja2V0TCA9IDc2ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFja2V0TFwiXSA9IGJyYWNrZXRMXSA9IFwiYnJhY2tldExcIjsgLy8gWyBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNrZXRSID0gODE5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNrZXRSXCJdID0gYnJhY2tldFJdID0gXCJicmFja2V0UlwiOyAvLyBdXG4gIGNvbnN0IGJyYWNlTCA9IDk3Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZUxcIl0gPSBicmFjZUxdID0gXCJicmFjZUxcIjsgLy8geyBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNlQmFyTCA9IDEwNzUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VCYXJMXCJdID0gYnJhY2VCYXJMXSA9IFwiYnJhY2VCYXJMXCI7IC8vIHt8IHN0YXJ0c0V4cHJcbiAgY29uc3QgYnJhY2VSID0gMTEyNjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZVJcIl0gPSBicmFjZVJdID0gXCJicmFjZVJcIjsgLy8gfVxuICBjb25zdCBicmFjZUJhclIgPSAxMjI4ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNlQmFyUlwiXSA9IGJyYWNlQmFyUl0gPSBcImJyYWNlQmFyUlwiOyAvLyB8fVxuICBjb25zdCBwYXJlbkwgPSAxMzgyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBhcmVuTFwiXSA9IHBhcmVuTF0gPSBcInBhcmVuTFwiOyAvLyAoIHN0YXJ0c0V4cHJcbiAgY29uc3QgcGFyZW5SID0gMTQzMzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwYXJlblJcIl0gPSBwYXJlblJdID0gXCJwYXJlblJcIjsgLy8gKVxuICBjb25zdCBjb21tYSA9IDE1MzYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiY29tbWFcIl0gPSBjb21tYV0gPSBcImNvbW1hXCI7IC8vICxcbiAgY29uc3Qgc2VtaSA9IDE2Mzg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wic2VtaVwiXSA9IHNlbWldID0gXCJzZW1pXCI7IC8vIDtcbiAgY29uc3QgY29sb24gPSAxNzQwODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImNvbG9uXCJdID0gY29sb25dID0gXCJjb2xvblwiOyAvLyA6XG4gIGNvbnN0IGRvdWJsZUNvbG9uID0gMTg0MzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb3VibGVDb2xvblwiXSA9IGRvdWJsZUNvbG9uXSA9IFwiZG91YmxlQ29sb25cIjsgLy8gOjpcbiAgY29uc3QgZG90ID0gMTk0NTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb3RcIl0gPSBkb3RdID0gXCJkb3RcIjsgLy8gLlxuICBjb25zdCBxdWVzdGlvbiA9IDIwNDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicXVlc3Rpb25cIl0gPSBxdWVzdGlvbl0gPSBcInF1ZXN0aW9uXCI7IC8vID9cbiAgY29uc3QgcXVlc3Rpb25Eb3QgPSAyMTUwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInF1ZXN0aW9uRG90XCJdID0gcXVlc3Rpb25Eb3RdID0gXCJxdWVzdGlvbkRvdFwiOyAvLyA/LlxuICBjb25zdCBhcnJvdyA9IDIyNTI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYXJyb3dcIl0gPSBhcnJvd10gPSBcImFycm93XCI7IC8vID0+XG4gIGNvbnN0IHRlbXBsYXRlID0gMjM1NTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0ZW1wbGF0ZVwiXSA9IHRlbXBsYXRlXSA9IFwidGVtcGxhdGVcIjsgLy8gdGVtcGxhdGVcbiAgY29uc3QgZWxsaXBzaXMgPSAyNDU3NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImVsbGlwc2lzXCJdID0gZWxsaXBzaXNdID0gXCJlbGxpcHNpc1wiOyAvLyAuLi5cbiAgY29uc3QgYmFja1F1b3RlID0gMjU2MDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiYWNrUXVvdGVcIl0gPSBiYWNrUXVvdGVdID0gXCJiYWNrUXVvdGVcIjsgLy8gYFxuICBjb25zdCBkb2xsYXJCcmFjZUwgPSAyNzEzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImRvbGxhckJyYWNlTFwiXSA9IGRvbGxhckJyYWNlTF0gPSBcImRvbGxhckJyYWNlTFwiOyAvLyAkeyBzdGFydHNFeHByXG4gIGNvbnN0IGF0ID0gMjc2NDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJhdFwiXSA9IGF0XSA9IFwiYXRcIjsgLy8gQFxuICBjb25zdCBoYXNoID0gMjkxODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJoYXNoXCJdID0gaGFzaF0gPSBcImhhc2hcIjsgLy8gIyBzdGFydHNFeHByXG4gIGNvbnN0IGVxID0gMjk3Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlcVwiXSA9IGVxXSA9IFwiZXFcIjsgLy8gPSBpc0Fzc2lnblxuICBjb25zdCBhc3NpZ24gPSAzMDc1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImFzc2lnblwiXSA9IGFzc2lnbl0gPSBcImFzc2lnblwiOyAvLyBfPSBpc0Fzc2lnblxuICBjb25zdCBwcmVJbmNEZWMgPSAzMjY0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInByZUluY0RlY1wiXSA9IHByZUluY0RlY10gPSBcInByZUluY0RlY1wiOyAvLyArKy8tLSBwcmVmaXggcG9zdGZpeCBzdGFydHNFeHByXG4gIGNvbnN0IHBvc3RJbmNEZWMgPSAzMzY2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBvc3RJbmNEZWNcIl0gPSBwb3N0SW5jRGVjXSA9IFwicG9zdEluY0RlY1wiOyAvLyArKy8tLSBwcmVmaXggcG9zdGZpeCBzdGFydHNFeHByXG4gIGNvbnN0IGJhbmcgPSAzNDQzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJhbmdcIl0gPSBiYW5nXSA9IFwiYmFuZ1wiOyAvLyAhIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IHRpbGRlID0gMzU0NTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0aWxkZVwiXSA9IHRpbGRlXSA9IFwidGlsZGVcIjsgLy8gfiBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBwaXBlbGluZSA9IDM1ODQxOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGlwZWxpbmVcIl0gPSBwaXBlbGluZV0gPSBcInBpcGVsaW5lXCI7IC8vIHw+IHByZWM6MVxuICBjb25zdCBudWxsaXNoQ29hbGVzY2luZyA9IDM2ODY2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibnVsbGlzaENvYWxlc2NpbmdcIl0gPSBudWxsaXNoQ29hbGVzY2luZ10gPSBcIm51bGxpc2hDb2FsZXNjaW5nXCI7IC8vID8/IHByZWM6MlxuICBjb25zdCBsb2dpY2FsT1IgPSAzNzg5MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImxvZ2ljYWxPUlwiXSA9IGxvZ2ljYWxPUl0gPSBcImxvZ2ljYWxPUlwiOyAvLyB8fCBwcmVjOjJcbiAgY29uc3QgbG9naWNhbEFORCA9IDM4OTE1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibG9naWNhbEFORFwiXSA9IGxvZ2ljYWxBTkRdID0gXCJsb2dpY2FsQU5EXCI7IC8vICYmIHByZWM6M1xuICBjb25zdCBiaXR3aXNlT1IgPSAzOTk0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdHdpc2VPUlwiXSA9IGJpdHdpc2VPUl0gPSBcImJpdHdpc2VPUlwiOyAvLyB8IHByZWM6NFxuICBjb25zdCBiaXR3aXNlWE9SID0gNDA5NjU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXR3aXNlWE9SXCJdID0gYml0d2lzZVhPUl0gPSBcImJpdHdpc2VYT1JcIjsgLy8gXiBwcmVjOjVcbiAgY29uc3QgYml0d2lzZUFORCA9IDQxOTkwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0d2lzZUFORFwiXSA9IGJpdHdpc2VBTkRdID0gXCJiaXR3aXNlQU5EXCI7IC8vICYgcHJlYzo2XG4gIGNvbnN0IGVxdWFsaXR5ID0gNDMwMTU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlcXVhbGl0eVwiXSA9IGVxdWFsaXR5XSA9IFwiZXF1YWxpdHlcIjsgLy8gPT0vIT0gcHJlYzo3XG4gIGNvbnN0IGxlc3NUaGFuID0gNDQwNDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJsZXNzVGhhblwiXSA9IGxlc3NUaGFuXSA9IFwibGVzc1RoYW5cIjsgLy8gPCBwcmVjOjhcbiAgY29uc3QgZ3JlYXRlclRoYW4gPSA0NTA2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImdyZWF0ZXJUaGFuXCJdID0gZ3JlYXRlclRoYW5dID0gXCJncmVhdGVyVGhhblwiOyAvLyA+IHByZWM6OFxuICBjb25zdCByZWxhdGlvbmFsT3JFcXVhbCA9IDQ2MDg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicmVsYXRpb25hbE9yRXF1YWxcIl0gPSByZWxhdGlvbmFsT3JFcXVhbF0gPSBcInJlbGF0aW9uYWxPckVxdWFsXCI7IC8vIDw9Lz49IHByZWM6OFxuICBjb25zdCBiaXRTaGlmdEwgPSA0NzExMzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdFNoaWZ0TFwiXSA9IGJpdFNoaWZ0TF0gPSBcImJpdFNoaWZ0TFwiOyAvLyA8PCBwcmVjOjlcbiAgY29uc3QgYml0U2hpZnRSID0gNDgxMzc7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXRTaGlmdFJcIl0gPSBiaXRTaGlmdFJdID0gXCJiaXRTaGlmdFJcIjsgLy8gPj4vPj4+IHByZWM6OVxuICBjb25zdCBwbHVzID0gNDk4MDI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwbHVzXCJdID0gcGx1c10gPSBcInBsdXNcIjsgLy8gKyBwcmVjOjEwIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IG1pbnVzID0gNTA4MjY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJtaW51c1wiXSA9IG1pbnVzXSA9IFwibWludXNcIjsgLy8gLSBwcmVjOjEwIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IG1vZHVsbyA9IDUxNzIzOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibW9kdWxvXCJdID0gbW9kdWxvXSA9IFwibW9kdWxvXCI7IC8vICUgcHJlYzoxMSBzdGFydHNFeHByXG4gIGNvbnN0IHN0YXIgPSA1MjIzNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInN0YXJcIl0gPSBzdGFyXSA9IFwic3RhclwiOyAvLyAqIHByZWM6MTFcbiAgY29uc3Qgc2xhc2ggPSA1MzI1OTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInNsYXNoXCJdID0gc2xhc2hdID0gXCJzbGFzaFwiOyAvLyAvIHByZWM6MTFcbiAgY29uc3QgZXhwb25lbnQgPSA1NDM0ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImV4cG9uZW50XCJdID0gZXhwb25lbnRdID0gXCJleHBvbmVudFwiOyAvLyAqKiBwcmVjOjEyIHJpZ2h0QXNzb2NpYXRpdmVcbiAgY29uc3QganN4TmFtZSA9IDU1Mjk2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4TmFtZVwiXSA9IGpzeE5hbWVdID0gXCJqc3hOYW1lXCI7IC8vIGpzeE5hbWVcbiAgY29uc3QganN4VGV4dCA9IDU2MzIwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4VGV4dFwiXSA9IGpzeFRleHRdID0gXCJqc3hUZXh0XCI7IC8vIGpzeFRleHRcbiAgY29uc3QganN4RW1wdHlUZXh0ID0gNTczNDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hFbXB0eVRleHRcIl0gPSBqc3hFbXB0eVRleHRdID0gXCJqc3hFbXB0eVRleHRcIjsgLy8ganN4RW1wdHlUZXh0XG4gIGNvbnN0IGpzeFRhZ1N0YXJ0ID0gNTg4ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hUYWdTdGFydFwiXSA9IGpzeFRhZ1N0YXJ0XSA9IFwianN4VGFnU3RhcnRcIjsgLy8ganN4VGFnU3RhcnQgc3RhcnRzRXhwclxuICBjb25zdCBqc3hUYWdFbmQgPSA1OTM5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeFRhZ0VuZFwiXSA9IGpzeFRhZ0VuZF0gPSBcImpzeFRhZ0VuZFwiOyAvLyBqc3hUYWdFbmRcbiAgY29uc3QgdHlwZVBhcmFtZXRlclN0YXJ0ID0gNjA5Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIl0gPSB0eXBlUGFyYW1ldGVyU3RhcnRdID0gXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIjsgLy8gdHlwZVBhcmFtZXRlclN0YXJ0IHN0YXJ0c0V4cHJcbiAgY29uc3Qgbm9uTnVsbEFzc2VydGlvbiA9IDYxNDQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibm9uTnVsbEFzc2VydGlvblwiXSA9IG5vbk51bGxBc3NlcnRpb25dID0gXCJub25OdWxsQXNzZXJ0aW9uXCI7IC8vIG5vbk51bGxBc3NlcnRpb25cbiAgY29uc3QgX2JyZWFrID0gNjI0ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfYnJlYWtcIl0gPSBfYnJlYWtdID0gXCJfYnJlYWtcIjsgLy8gYnJlYWsga2V5d29yZFxuICBjb25zdCBfY2FzZSA9IDYzNTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Nhc2VcIl0gPSBfY2FzZV0gPSBcIl9jYXNlXCI7IC8vIGNhc2Uga2V5d29yZFxuICBjb25zdCBfY2F0Y2ggPSA2NDUyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jYXRjaFwiXSA9IF9jYXRjaF0gPSBcIl9jYXRjaFwiOyAvLyBjYXRjaCBrZXl3b3JkXG4gIGNvbnN0IF9jb250aW51ZSA9IDY1NTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NvbnRpbnVlXCJdID0gX2NvbnRpbnVlXSA9IFwiX2NvbnRpbnVlXCI7IC8vIGNvbnRpbnVlIGtleXdvcmRcbiAgY29uc3QgX2RlYnVnZ2VyID0gNjY1NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZGVidWdnZXJcIl0gPSBfZGVidWdnZXJdID0gXCJfZGVidWdnZXJcIjsgLy8gZGVidWdnZXIga2V5d29yZFxuICBjb25zdCBfZGVmYXVsdCA9IDY3NjAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlZmF1bHRcIl0gPSBfZGVmYXVsdF0gPSBcIl9kZWZhdWx0XCI7IC8vIGRlZmF1bHQga2V5d29yZFxuICBjb25zdCBfZG8gPSA2ODYyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kb1wiXSA9IF9kb10gPSBcIl9kb1wiOyAvLyBkbyBrZXl3b3JkXG4gIGNvbnN0IF9lbHNlID0gNjk2NDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZWxzZVwiXSA9IF9lbHNlXSA9IFwiX2Vsc2VcIjsgLy8gZWxzZSBrZXl3b3JkXG4gIGNvbnN0IF9maW5hbGx5ID0gNzA2NzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZmluYWxseVwiXSA9IF9maW5hbGx5XSA9IFwiX2ZpbmFsbHlcIjsgLy8gZmluYWxseSBrZXl3b3JkXG4gIGNvbnN0IF9mb3IgPSA3MTY5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mb3JcIl0gPSBfZm9yXSA9IFwiX2ZvclwiOyAvLyBmb3Iga2V5d29yZFxuICBjb25zdCBfZnVuY3Rpb24gPSA3MzIzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mdW5jdGlvblwiXSA9IF9mdW5jdGlvbl0gPSBcIl9mdW5jdGlvblwiOyAvLyBmdW5jdGlvbiBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2lmID0gNzM3NDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaWZcIl0gPSBfaWZdID0gXCJfaWZcIjsgLy8gaWYga2V5d29yZFxuICBjb25zdCBfcmV0dXJuID0gNzQ3Njg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcmV0dXJuXCJdID0gX3JldHVybl0gPSBcIl9yZXR1cm5cIjsgLy8gcmV0dXJuIGtleXdvcmRcbiAgY29uc3QgX3N3aXRjaCA9IDc1NzkyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N3aXRjaFwiXSA9IF9zd2l0Y2hdID0gXCJfc3dpdGNoXCI7IC8vIHN3aXRjaCBrZXl3b3JkXG4gIGNvbnN0IF90aHJvdyA9IDc3NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3Rocm93XCJdID0gX3Rocm93XSA9IFwiX3Rocm93XCI7IC8vIHRocm93IGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX3RyeSA9IDc3ODQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3RyeVwiXSA9IF90cnldID0gXCJfdHJ5XCI7IC8vIHRyeSBrZXl3b3JkXG4gIGNvbnN0IF92YXIgPSA3ODg2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl92YXJcIl0gPSBfdmFyXSA9IFwiX3ZhclwiOyAvLyB2YXIga2V5d29yZFxuICBjb25zdCBfbGV0ID0gNzk4ODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbGV0XCJdID0gX2xldF0gPSBcIl9sZXRcIjsgLy8gbGV0IGtleXdvcmRcbiAgY29uc3QgX2NvbnN0ID0gODA5MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfY29uc3RcIl0gPSBfY29uc3RdID0gXCJfY29uc3RcIjsgLy8gY29uc3Qga2V5d29yZFxuICBjb25zdCBfd2hpbGUgPSA4MTkzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl93aGlsZVwiXSA9IF93aGlsZV0gPSBcIl93aGlsZVwiOyAvLyB3aGlsZSBrZXl3b3JkXG4gIGNvbnN0IF93aXRoID0gODI5NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfd2l0aFwiXSA9IF93aXRoXSA9IFwiX3dpdGhcIjsgLy8gd2l0aCBrZXl3b3JkXG4gIGNvbnN0IF9uZXcgPSA4NDQ5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9uZXdcIl0gPSBfbmV3XSA9IFwiX25ld1wiOyAvLyBuZXcga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90aGlzID0gODU1MjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdGhpc1wiXSA9IF90aGlzXSA9IFwiX3RoaXNcIjsgLy8gdGhpcyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3N1cGVyID0gODY1NDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfc3VwZXJcIl0gPSBfc3VwZXJdID0gXCJfc3VwZXJcIjsgLy8gc3VwZXIga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9jbGFzcyA9IDg3NTY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NsYXNzXCJdID0gX2NsYXNzXSA9IFwiX2NsYXNzXCI7IC8vIGNsYXNzIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZXh0ZW5kcyA9IDg4MDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2V4dGVuZHNcIl0gPSBfZXh0ZW5kc10gPSBcIl9leHRlbmRzXCI7IC8vIGV4dGVuZHMga2V5d29yZFxuICBjb25zdCBfZXhwb3J0ID0gODkxMDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZXhwb3J0XCJdID0gX2V4cG9ydF0gPSBcIl9leHBvcnRcIjsgLy8gZXhwb3J0IGtleXdvcmRcbiAgY29uc3QgX2ltcG9ydCA9IDkwNjQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ltcG9ydFwiXSA9IF9pbXBvcnRdID0gXCJfaW1wb3J0XCI7IC8vIGltcG9ydCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3lpZWxkID0gOTE2NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfeWllbGRcIl0gPSBfeWllbGRdID0gXCJfeWllbGRcIjsgLy8geWllbGQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9udWxsID0gOTI2ODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbnVsbFwiXSA9IF9udWxsXSA9IFwiX251bGxcIjsgLy8gbnVsbCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3RydWUgPSA5MzcxMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90cnVlXCJdID0gX3RydWVdID0gXCJfdHJ1ZVwiOyAvLyB0cnVlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZmFsc2UgPSA5NDczNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mYWxzZVwiXSA9IF9mYWxzZV0gPSBcIl9mYWxzZVwiOyAvLyBmYWxzZSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2luID0gOTUyNTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaW5cIl0gPSBfaW5dID0gXCJfaW5cIjsgLy8gaW4gcHJlYzo4IGtleXdvcmRcbiAgY29uc3QgX2luc3RhbmNlb2YgPSA5NjI4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbnN0YW5jZW9mXCJdID0gX2luc3RhbmNlb2ZdID0gXCJfaW5zdGFuY2VvZlwiOyAvLyBpbnN0YW5jZW9mIHByZWM6OCBrZXl3b3JkXG4gIGNvbnN0IF90eXBlb2YgPSA5NzkzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90eXBlb2ZcIl0gPSBfdHlwZW9mXSA9IFwiX3R5cGVvZlwiOyAvLyB0eXBlb2Yga2V5d29yZCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBfdm9pZCA9IDk4OTYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3ZvaWRcIl0gPSBfdm9pZF0gPSBcIl92b2lkXCI7IC8vIHZvaWQga2V5d29yZCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBfZGVsZXRlID0gOTk5ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZGVsZXRlXCJdID0gX2RlbGV0ZV0gPSBcIl9kZWxldGVcIjsgLy8gZGVsZXRlIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX2FzeW5jID0gMTAwODgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2FzeW5jXCJdID0gX2FzeW5jXSA9IFwiX2FzeW5jXCI7IC8vIGFzeW5jIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZ2V0ID0gMTAxOTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7IC8vIGdldCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3NldCA9IDEwMjkyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiOyAvLyBzZXQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9kZWNsYXJlID0gMTAzOTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7IC8vIGRlY2xhcmUga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9yZWFkb25seSA9IDEwNDk3NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9yZWFkb25seVwiXSA9IF9yZWFkb25seV0gPSBcIl9yZWFkb25seVwiOyAvLyByZWFkb25seSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2Fic3RyYWN0ID0gMTA2MDAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Fic3RyYWN0XCJdID0gX2Fic3RyYWN0XSA9IFwiX2Fic3RyYWN0XCI7IC8vIGFic3RyYWN0IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfc3RhdGljID0gMTA3MDI0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7IC8vIHN0YXRpYyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3B1YmxpYyA9IDEwNzUzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wdWJsaWNcIl0gPSBfcHVibGljXSA9IFwiX3B1YmxpY1wiOyAvLyBwdWJsaWMga2V5d29yZFxuICBjb25zdCBfcHJpdmF0ZSA9IDEwODU2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wcml2YXRlXCJdID0gX3ByaXZhdGVdID0gXCJfcHJpdmF0ZVwiOyAvLyBwcml2YXRlIGtleXdvcmRcbiAgY29uc3QgX3Byb3RlY3RlZCA9IDEwOTU4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wcm90ZWN0ZWRcIl0gPSBfcHJvdGVjdGVkXSA9IFwiX3Byb3RlY3RlZFwiOyAvLyBwcm90ZWN0ZWQga2V5d29yZFxuICBjb25zdCBfb3ZlcnJpZGUgPSAxMTA2MDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfb3ZlcnJpZGVcIl0gPSBfb3ZlcnJpZGVdID0gXCJfb3ZlcnJpZGVcIjsgLy8gb3ZlcnJpZGUga2V5d29yZFxuICBjb25zdCBfYXMgPSAxMTIxNDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjsgLy8gYXMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9lbnVtID0gMTEzMTY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2VudW1cIl0gPSBfZW51bV0gPSBcIl9lbnVtXCI7IC8vIGVudW0ga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90eXBlID0gMTE0MTkyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3R5cGVcIl0gPSBfdHlwZV0gPSBcIl90eXBlXCI7IC8vIHR5cGUga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pbXBsZW1lbnRzID0gMTE1MjE2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ltcGxlbWVudHNcIl0gPSBfaW1wbGVtZW50c10gPSBcIl9pbXBsZW1lbnRzXCI7IC8vIGltcGxlbWVudHMga2V5d29yZCBzdGFydHNFeHByXG59KShUb2tlblR5cGUgfHwgKGV4cG9ydHMuVG9rZW5UeXBlID0gVG9rZW5UeXBlID0ge30pKTtcbiBmdW5jdGlvbiBmb3JtYXRUb2tlblR5cGUodG9rZW5UeXBlKSB7XG4gIHN3aXRjaCAodG9rZW5UeXBlKSB7XG4gICAgY2FzZSBUb2tlblR5cGUubnVtOlxuICAgICAgcmV0dXJuIFwibnVtXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmlnaW50OlxuICAgICAgcmV0dXJuIFwiYmlnaW50XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZGVjaW1hbDpcbiAgICAgIHJldHVybiBcImRlY2ltYWxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5yZWdleHA6XG4gICAgICByZXR1cm4gXCJyZWdleHBcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zdHJpbmc6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5uYW1lOlxuICAgICAgcmV0dXJuIFwibmFtZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVvZjpcbiAgICAgIHJldHVybiBcImVvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNrZXRMOlxuICAgICAgcmV0dXJuIFwiW1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNrZXRSOlxuICAgICAgcmV0dXJuIFwiXVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgIHJldHVybiBcIntcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5icmFjZUJhckw6XG4gICAgICByZXR1cm4gXCJ7fFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlUjpcbiAgICAgIHJldHVybiBcIn1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5icmFjZUJhclI6XG4gICAgICByZXR1cm4gXCJ8fVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBhcmVuTDpcbiAgICAgIHJldHVybiBcIihcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wYXJlblI6XG4gICAgICByZXR1cm4gXCIpXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuY29tbWE6XG4gICAgICByZXR1cm4gXCIsXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuc2VtaTpcbiAgICAgIHJldHVybiBcIjtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5jb2xvbjpcbiAgICAgIHJldHVybiBcIjpcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kb3VibGVDb2xvbjpcbiAgICAgIHJldHVybiBcIjo6XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZG90OlxuICAgICAgcmV0dXJuIFwiLlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnF1ZXN0aW9uOlxuICAgICAgcmV0dXJuIFwiP1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnF1ZXN0aW9uRG90OlxuICAgICAgcmV0dXJuIFwiPy5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hcnJvdzpcbiAgICAgIHJldHVybiBcIj0+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUudGVtcGxhdGU6XG4gICAgICByZXR1cm4gXCJ0ZW1wbGF0ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVsbGlwc2lzOlxuICAgICAgcmV0dXJuIFwiLi4uXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgcmV0dXJuIFwiYFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmRvbGxhckJyYWNlTDpcbiAgICAgIHJldHVybiBcIiR7XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYXQ6XG4gICAgICByZXR1cm4gXCJAXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuaGFzaDpcbiAgICAgIHJldHVybiBcIiNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5lcTpcbiAgICAgIHJldHVybiBcIj1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hc3NpZ246XG4gICAgICByZXR1cm4gXCJfPVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnByZUluY0RlYzpcbiAgICAgIHJldHVybiBcIisrLy0tXCI7XG4gICAgY2FzZSBUb2tlblR5cGUucG9zdEluY0RlYzpcbiAgICAgIHJldHVybiBcIisrLy0tXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmFuZzpcbiAgICAgIHJldHVybiBcIiFcIjtcbiAgICBjYXNlIFRva2VuVHlwZS50aWxkZTpcbiAgICAgIHJldHVybiBcIn5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5waXBlbGluZTpcbiAgICAgIHJldHVybiBcInw+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubnVsbGlzaENvYWxlc2Npbmc6XG4gICAgICByZXR1cm4gXCI/P1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmxvZ2ljYWxPUjpcbiAgICAgIHJldHVybiBcInx8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubG9naWNhbEFORDpcbiAgICAgIHJldHVybiBcIiYmXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZU9SOlxuICAgICAgcmV0dXJuIFwifFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJpdHdpc2VYT1I6XG4gICAgICByZXR1cm4gXCJeXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZUFORDpcbiAgICAgIHJldHVybiBcIiZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5lcXVhbGl0eTpcbiAgICAgIHJldHVybiBcIj09LyE9XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubGVzc1RoYW46XG4gICAgICByZXR1cm4gXCI8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRlclRoYW46XG4gICAgICByZXR1cm4gXCI+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucmVsYXRpb25hbE9yRXF1YWw6XG4gICAgICByZXR1cm4gXCI8PS8+PVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJpdFNoaWZ0TDpcbiAgICAgIHJldHVybiBcIjw8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0U2hpZnRSOlxuICAgICAgcmV0dXJuIFwiPj4vPj4+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgIHJldHVybiBcIitcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgIHJldHVybiBcIi1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5tb2R1bG86XG4gICAgICByZXR1cm4gXCIlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuc3RhcjpcbiAgICAgIHJldHVybiBcIipcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zbGFzaDpcbiAgICAgIHJldHVybiBcIi9cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5leHBvbmVudDpcbiAgICAgIHJldHVybiBcIioqXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4TmFtZTpcbiAgICAgIHJldHVybiBcImpzeE5hbWVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hUZXh0OlxuICAgICAgcmV0dXJuIFwianN4VGV4dFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeEVtcHR5VGV4dDpcbiAgICAgIHJldHVybiBcImpzeEVtcHR5VGV4dFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0OlxuICAgICAgcmV0dXJuIFwianN4VGFnU3RhcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hUYWdFbmQ6XG4gICAgICByZXR1cm4gXCJqc3hUYWdFbmRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ6XG4gICAgICByZXR1cm4gXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5ub25OdWxsQXNzZXJ0aW9uOlxuICAgICAgcmV0dXJuIFwibm9uTnVsbEFzc2VydGlvblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9icmVhazpcbiAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Nhc2U6XG4gICAgICByZXR1cm4gXCJjYXNlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2NhdGNoOlxuICAgICAgcmV0dXJuIFwiY2F0Y2hcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY29udGludWU6XG4gICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWJ1Z2dlcjpcbiAgICAgIHJldHVybiBcImRlYnVnZ2VyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RvOlxuICAgICAgcmV0dXJuIFwiZG9cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZWxzZTpcbiAgICAgIHJldHVybiBcImVsc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZmluYWxseTpcbiAgICAgIHJldHVybiBcImZpbmFsbHlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZm9yOlxuICAgICAgcmV0dXJuIFwiZm9yXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Z1bmN0aW9uOlxuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faWY6XG4gICAgICByZXR1cm4gXCJpZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9yZXR1cm46XG4gICAgICByZXR1cm4gXCJyZXR1cm5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc3dpdGNoOlxuICAgICAgcmV0dXJuIFwic3dpdGNoXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3Rocm93OlxuICAgICAgcmV0dXJuIFwidGhyb3dcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHJ5OlxuICAgICAgcmV0dXJuIFwidHJ5XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3ZhcjpcbiAgICAgIHJldHVybiBcInZhclwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9sZXQ6XG4gICAgICByZXR1cm4gXCJsZXRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY29uc3Q6XG4gICAgICByZXR1cm4gXCJjb25zdFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl93aGlsZTpcbiAgICAgIHJldHVybiBcIndoaWxlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3dpdGg6XG4gICAgICByZXR1cm4gXCJ3aXRoXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX25ldzpcbiAgICAgIHJldHVybiBcIm5ld1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90aGlzOlxuICAgICAgcmV0dXJuIFwidGhpc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zdXBlcjpcbiAgICAgIHJldHVybiBcInN1cGVyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2NsYXNzOlxuICAgICAgcmV0dXJuIFwiY2xhc3NcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZXh0ZW5kczpcbiAgICAgIHJldHVybiBcImV4dGVuZHNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZXhwb3J0OlxuICAgICAgcmV0dXJuIFwiZXhwb3J0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ltcG9ydDpcbiAgICAgIHJldHVybiBcImltcG9ydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl95aWVsZDpcbiAgICAgIHJldHVybiBcInlpZWxkXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX251bGw6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3RydWU6XG4gICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ZhbHNlOlxuICAgICAgcmV0dXJuIFwiZmFsc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW46XG4gICAgICByZXR1cm4gXCJpblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pbnN0YW5jZW9mOlxuICAgICAgcmV0dXJuIFwiaW5zdGFuY2VvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90eXBlb2Y6XG4gICAgICByZXR1cm4gXCJ0eXBlb2ZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdm9pZDpcbiAgICAgIHJldHVybiBcInZvaWRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZGVsZXRlOlxuICAgICAgcmV0dXJuIFwiZGVsZXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2FzeW5jOlxuICAgICAgcmV0dXJuIFwiYXN5bmNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZ2V0OlxuICAgICAgcmV0dXJuIFwiZ2V0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3NldDpcbiAgICAgIHJldHVybiBcInNldFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWNsYXJlOlxuICAgICAgcmV0dXJuIFwiZGVjbGFyZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9yZWFkb25seTpcbiAgICAgIHJldHVybiBcInJlYWRvbmx5XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Fic3RyYWN0OlxuICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc3RhdGljOlxuICAgICAgcmV0dXJuIFwic3RhdGljXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3B1YmxpYzpcbiAgICAgIHJldHVybiBcInB1YmxpY1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9wcml2YXRlOlxuICAgICAgcmV0dXJuIFwicHJpdmF0ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9wcm90ZWN0ZWQ6XG4gICAgICByZXR1cm4gXCJwcm90ZWN0ZWRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fb3ZlcnJpZGU6XG4gICAgICByZXR1cm4gXCJvdmVycmlkZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9hczpcbiAgICAgIHJldHVybiBcImFzXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2VudW06XG4gICAgICByZXR1cm4gXCJlbnVtXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3R5cGU6XG4gICAgICByZXR1cm4gXCJ0eXBlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ltcGxlbWVudHM6XG4gICAgICByZXR1cm4gXCJpbXBsZW1lbnRzXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59IGV4cG9ydHMuZm9ybWF0VG9rZW5UeXBlID0gZm9ybWF0VG9rZW5UeXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxuIGNsYXNzIFNjb3BlIHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGlzRnVuY3Rpb25TY29wZSkge1xuICAgIHRoaXMuc3RhcnRUb2tlbkluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgIHRoaXMuZW5kVG9rZW5JbmRleCA9IGVuZFRva2VuSW5kZXg7XG4gICAgdGhpcy5pc0Z1bmN0aW9uU2NvcGUgPSBpc0Z1bmN0aW9uU2NvcGU7XG4gIH1cbn0gZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuXG4gY2xhc3MgU3RhdGVTbmFwc2hvdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICBwb3RlbnRpYWxBcnJvd0F0LFxuICAgICBub0Fub25GdW5jdGlvblR5cGUsXG4gICAgIGluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCxcbiAgICAgdG9rZW5zTGVuZ3RoLFxuICAgICBzY29wZXNMZW5ndGgsXG4gICAgIHBvcyxcbiAgICAgdHlwZSxcbiAgICAgY29udGV4dHVhbEtleXdvcmQsXG4gICAgIHN0YXJ0LFxuICAgICBlbmQsXG4gICAgIGlzVHlwZSxcbiAgICAgc2NvcGVEZXB0aCxcbiAgICAgZXJyb3IsXG4gICkgezt0aGlzLnBvdGVudGlhbEFycm93QXQgPSBwb3RlbnRpYWxBcnJvd0F0O3RoaXMubm9Bbm9uRnVuY3Rpb25UeXBlID0gbm9Bbm9uRnVuY3Rpb25UeXBlO3RoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O3RoaXMudG9rZW5zTGVuZ3RoID0gdG9rZW5zTGVuZ3RoO3RoaXMuc2NvcGVzTGVuZ3RoID0gc2NvcGVzTGVuZ3RoO3RoaXMucG9zID0gcG9zO3RoaXMudHlwZSA9IHR5cGU7dGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO3RoaXMuc3RhcnQgPSBzdGFydDt0aGlzLmVuZCA9IGVuZDt0aGlzLmlzVHlwZSA9IGlzVHlwZTt0aGlzLnNjb3BlRGVwdGggPSBzY29wZURlcHRoO3RoaXMuZXJyb3IgPSBlcnJvcjt9XG59IGV4cG9ydHMuU3RhdGVTbmFwc2hvdCA9IFN0YXRlU25hcHNob3Q7XG5cbiBjbGFzcyBTdGF0ZSB7Y29uc3RydWN0b3IoKSB7IFN0YXRlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0NS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ2LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDcuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0OC5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ5LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEwLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDExLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEyLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEzLmNhbGwodGhpcyk7IH1cbiAgLy8gVXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbCBhcnJvdyBmdW5jdGlvblxuICBfX2luaXQoKSB7dGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gLTF9XG5cbiAgLy8gVXNlZCBieSBGbG93IHRvIGhhbmRsZSBhbiBlZGdlIGNhc2UgaW52b2x2aW5nIGZ1bmN0aW9uIHR5cGUgcGFyc2luZy5cbiAgX19pbml0MigpIHt0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IGZhbHNlfVxuXG4gIC8vIFVzZWQgYnkgVHlwZVNjcmlwdCB0byBoYW5kbGUgYW1iaWd1aXRpZXMgd2hlbiBwYXJzaW5nIGNvbmRpdGlvbmFsIHR5cGVzLlxuICBfX2luaXQzKCkge3RoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2V9XG5cbiAgLy8gVG9rZW4gc3RvcmUuXG4gIF9faW5pdDQoKSB7dGhpcy50b2tlbnMgPSBbXX1cblxuICAvLyBBcnJheSBvZiBhbGwgb2JzZXJ2ZWQgc2NvcGVzLCBvcmRlcmVkIGJ5IHRoZWlyIGVuZGluZyBwb3NpdGlvbi5cbiAgX19pbml0NSgpIHt0aGlzLnNjb3BlcyA9IFtdfVxuXG4gIC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b2tlbml6ZXIgaW4gdGhlIGlucHV0LlxuICBfX2luaXQ2KCkge3RoaXMucG9zID0gMH1cblxuICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB0b2tlbi5cbiAgX19pbml0NygpIHt0aGlzLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLmVvZn1cbiAgX19pbml0OCgpIHt0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLk5PTkV9XG4gIF9faW5pdDkoKSB7dGhpcy5zdGFydCA9IDB9XG4gIF9faW5pdDEwKCkge3RoaXMuZW5kID0gMH1cblxuICBfX2luaXQxMSgpIHt0aGlzLmlzVHlwZSA9IGZhbHNlfVxuICBfX2luaXQxMigpIHt0aGlzLnNjb3BlRGVwdGggPSAwfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcGFyc2VyIGlzIGluIGFuIGVycm9yIHN0YXRlLCB0aGVuIHRoZSB0b2tlbiBpcyBhbHdheXMgdHQuZW9mIGFuZCBhbGwgZnVuY3Rpb25zIGNhblxuICAgKiBrZWVwIGV4ZWN1dGluZyBidXQgc2hvdWxkIGJlIHdyaXR0ZW4gc28gdGhleSBkb24ndCBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGluIHRoaXMgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGFwcHJvYWNoLCBjb21iaW5lZCB3aXRoIHRoZSBhYmlsaXR5IHRvIHNuYXBzaG90IGFuZCByZXN0b3JlIHN0YXRlLCBhbGxvd3MgdXMgdG8gaW1wbGVtZW50XG4gICAqIGJhY2t0cmFja2luZyB3aXRob3V0IGV4Y2VwdGlvbnMgYW5kIHdpdGhvdXQgbmVlZGluZyB0byBleHBsaWNpdGx5IHByb3BhZ2F0ZSBlcnJvciBzdGF0ZXNcbiAgICogZXZlcnl3aGVyZS5cbiAgICovXG4gIF9faW5pdDEzKCkge3RoaXMuZXJyb3IgPSBudWxsfVxuXG4gIHNuYXBzaG90KCkge1xuICAgIHJldHVybiBuZXcgU3RhdGVTbmFwc2hvdChcbiAgICAgIHRoaXMucG90ZW50aWFsQXJyb3dBdCxcbiAgICAgIHRoaXMubm9Bbm9uRnVuY3Rpb25UeXBlLFxuICAgICAgdGhpcy5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQsXG4gICAgICB0aGlzLnRva2Vucy5sZW5ndGgsXG4gICAgICB0aGlzLnNjb3Blcy5sZW5ndGgsXG4gICAgICB0aGlzLnBvcyxcbiAgICAgIHRoaXMudHlwZSxcbiAgICAgIHRoaXMuY29udGV4dHVhbEtleXdvcmQsXG4gICAgICB0aGlzLnN0YXJ0LFxuICAgICAgdGhpcy5lbmQsXG4gICAgICB0aGlzLmlzVHlwZSxcbiAgICAgIHRoaXMuc2NvcGVEZXB0aCxcbiAgICAgIHRoaXMuZXJyb3IsXG4gICAgKTtcbiAgfVxuXG4gIHJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSBzbmFwc2hvdC5wb3RlbnRpYWxBcnJvd0F0O1xuICAgIHRoaXMubm9Bbm9uRnVuY3Rpb25UeXBlID0gc25hcHNob3Qubm9Bbm9uRnVuY3Rpb25UeXBlO1xuICAgIHRoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc25hcHNob3QuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIHRoaXMudG9rZW5zLmxlbmd0aCA9IHNuYXBzaG90LnRva2Vuc0xlbmd0aDtcbiAgICB0aGlzLnNjb3Blcy5sZW5ndGggPSBzbmFwc2hvdC5zY29wZXNMZW5ndGg7XG4gICAgdGhpcy5wb3MgPSBzbmFwc2hvdC5wb3M7XG4gICAgdGhpcy50eXBlID0gc25hcHNob3QudHlwZTtcbiAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gc25hcHNob3QuY29udGV4dHVhbEtleXdvcmQ7XG4gICAgdGhpcy5zdGFydCA9IHNuYXBzaG90LnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gc25hcHNob3QuZW5kO1xuICAgIHRoaXMuaXNUeXBlID0gc25hcHNob3QuaXNUeXBlO1xuICAgIHRoaXMuc2NvcGVEZXB0aCA9IHNuYXBzaG90LnNjb3BlRGVwdGg7XG4gICAgdGhpcy5lcnJvciA9IHNuYXBzaG90LmVycm9yO1xuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IFN0YXRlO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIGNoYXJDb2RlczsgKGZ1bmN0aW9uIChjaGFyQ29kZXMpIHtcbiAgY29uc3QgYmFja1NwYWNlID0gODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImJhY2tTcGFjZVwiXSA9IGJhY2tTcGFjZV0gPSBcImJhY2tTcGFjZVwiO1xuICBjb25zdCBsaW5lRmVlZCA9IDEwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGluZUZlZWRcIl0gPSBsaW5lRmVlZF0gPSBcImxpbmVGZWVkXCI7IC8vICAnXFxuJ1xuICBjb25zdCB0YWIgPSA5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widGFiXCJdID0gdGFiXSA9IFwidGFiXCI7IC8vICAnXFx0J1xuICBjb25zdCBjYXJyaWFnZVJldHVybiA9IDEzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiY2FycmlhZ2VSZXR1cm5cIl0gPSBjYXJyaWFnZVJldHVybl0gPSBcImNhcnJpYWdlUmV0dXJuXCI7IC8vICAnXFxyJ1xuICBjb25zdCBzaGlmdE91dCA9IDE0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wic2hpZnRPdXRcIl0gPSBzaGlmdE91dF0gPSBcInNoaWZ0T3V0XCI7XG4gIGNvbnN0IHNwYWNlID0gMzI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzcGFjZVwiXSA9IHNwYWNlXSA9IFwic3BhY2VcIjtcbiAgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gMzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJleGNsYW1hdGlvbk1hcmtcIl0gPSBleGNsYW1hdGlvbk1hcmtdID0gXCJleGNsYW1hdGlvbk1hcmtcIjsgLy8gICchJ1xuICBjb25zdCBxdW90YXRpb25NYXJrID0gMzQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJxdW90YXRpb25NYXJrXCJdID0gcXVvdGF0aW9uTWFya10gPSBcInF1b3RhdGlvbk1hcmtcIjsgLy8gICdcIidcbiAgY29uc3QgbnVtYmVyU2lnbiA9IDM1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibnVtYmVyU2lnblwiXSA9IG51bWJlclNpZ25dID0gXCJudW1iZXJTaWduXCI7IC8vICAnIydcbiAgY29uc3QgZG9sbGFyU2lnbiA9IDM2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZG9sbGFyU2lnblwiXSA9IGRvbGxhclNpZ25dID0gXCJkb2xsYXJTaWduXCI7IC8vICAnJCdcbiAgY29uc3QgcGVyY2VudFNpZ24gPSAzNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInBlcmNlbnRTaWduXCJdID0gcGVyY2VudFNpZ25dID0gXCJwZXJjZW50U2lnblwiOyAvLyAgJyUnXG4gIGNvbnN0IGFtcGVyc2FuZCA9IDM4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYW1wZXJzYW5kXCJdID0gYW1wZXJzYW5kXSA9IFwiYW1wZXJzYW5kXCI7IC8vICAnJidcbiAgY29uc3QgYXBvc3Ryb3BoZSA9IDM5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYXBvc3Ryb3BoZVwiXSA9IGFwb3N0cm9waGVdID0gXCJhcG9zdHJvcGhlXCI7IC8vICAnJydcbiAgY29uc3QgbGVmdFBhcmVudGhlc2lzID0gNDA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0UGFyZW50aGVzaXNcIl0gPSBsZWZ0UGFyZW50aGVzaXNdID0gXCJsZWZ0UGFyZW50aGVzaXNcIjsgLy8gICcoJ1xuICBjb25zdCByaWdodFBhcmVudGhlc2lzID0gNDE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodFBhcmVudGhlc2lzXCJdID0gcmlnaHRQYXJlbnRoZXNpc10gPSBcInJpZ2h0UGFyZW50aGVzaXNcIjsgLy8gICcpJ1xuICBjb25zdCBhc3RlcmlzayA9IDQyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYXN0ZXJpc2tcIl0gPSBhc3Rlcmlza10gPSBcImFzdGVyaXNrXCI7IC8vICAnKidcbiAgY29uc3QgcGx1c1NpZ24gPSA0MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInBsdXNTaWduXCJdID0gcGx1c1NpZ25dID0gXCJwbHVzU2lnblwiOyAvLyAgJysnXG4gIGNvbnN0IGNvbW1hID0gNDQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjb21tYVwiXSA9IGNvbW1hXSA9IFwiY29tbWFcIjsgLy8gICcsJ1xuICBjb25zdCBkYXNoID0gNDU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkYXNoXCJdID0gZGFzaF0gPSBcImRhc2hcIjsgLy8gICctJ1xuICBjb25zdCBkb3QgPSA0NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRvdFwiXSA9IGRvdF0gPSBcImRvdFwiOyAvLyAgJy4nXG4gIGNvbnN0IHNsYXNoID0gNDc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzbGFzaFwiXSA9IHNsYXNoXSA9IFwic2xhc2hcIjsgLy8gICcvJ1xuICBjb25zdCBkaWdpdDAgPSA0ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0MFwiXSA9IGRpZ2l0MF0gPSBcImRpZ2l0MFwiOyAvLyAgJzAnXG4gIGNvbnN0IGRpZ2l0MSA9IDQ5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQxXCJdID0gZGlnaXQxXSA9IFwiZGlnaXQxXCI7IC8vICAnMSdcbiAgY29uc3QgZGlnaXQyID0gNTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDJcIl0gPSBkaWdpdDJdID0gXCJkaWdpdDJcIjsgLy8gICcyJ1xuICBjb25zdCBkaWdpdDMgPSA1MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0M1wiXSA9IGRpZ2l0M10gPSBcImRpZ2l0M1wiOyAvLyAgJzMnXG4gIGNvbnN0IGRpZ2l0NCA9IDUyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ0XCJdID0gZGlnaXQ0XSA9IFwiZGlnaXQ0XCI7IC8vICAnNCdcbiAgY29uc3QgZGlnaXQ1ID0gNTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDVcIl0gPSBkaWdpdDVdID0gXCJkaWdpdDVcIjsgLy8gICc1J1xuICBjb25zdCBkaWdpdDYgPSA1NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0NlwiXSA9IGRpZ2l0Nl0gPSBcImRpZ2l0NlwiOyAvLyAgJzYnXG4gIGNvbnN0IGRpZ2l0NyA9IDU1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ3XCJdID0gZGlnaXQ3XSA9IFwiZGlnaXQ3XCI7IC8vICAnNydcbiAgY29uc3QgZGlnaXQ4ID0gNTY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDhcIl0gPSBkaWdpdDhdID0gXCJkaWdpdDhcIjsgLy8gICc4J1xuICBjb25zdCBkaWdpdDkgPSA1NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0OVwiXSA9IGRpZ2l0OV0gPSBcImRpZ2l0OVwiOyAvLyAgJzknXG4gIGNvbnN0IGNvbG9uID0gNTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjb2xvblwiXSA9IGNvbG9uXSA9IFwiY29sb25cIjsgLy8gICc6J1xuICBjb25zdCBzZW1pY29sb24gPSA1OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNlbWljb2xvblwiXSA9IHNlbWljb2xvbl0gPSBcInNlbWljb2xvblwiOyAvLyAgJzsnXG4gIGNvbnN0IGxlc3NUaGFuID0gNjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZXNzVGhhblwiXSA9IGxlc3NUaGFuXSA9IFwibGVzc1RoYW5cIjsgLy8gICc8J1xuICBjb25zdCBlcXVhbHNUbyA9IDYxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZXF1YWxzVG9cIl0gPSBlcXVhbHNUb10gPSBcImVxdWFsc1RvXCI7IC8vICAnPSdcbiAgY29uc3QgZ3JlYXRlclRoYW4gPSA2MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImdyZWF0ZXJUaGFuXCJdID0gZ3JlYXRlclRoYW5dID0gXCJncmVhdGVyVGhhblwiOyAvLyAgJz4nXG4gIGNvbnN0IHF1ZXN0aW9uTWFyayA9IDYzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicXVlc3Rpb25NYXJrXCJdID0gcXVlc3Rpb25NYXJrXSA9IFwicXVlc3Rpb25NYXJrXCI7IC8vICAnPydcbiAgY29uc3QgYXRTaWduID0gNjQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhdFNpZ25cIl0gPSBhdFNpZ25dID0gXCJhdFNpZ25cIjsgLy8gICdAJ1xuICBjb25zdCB1cHBlcmNhc2VBID0gNjU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VBXCJdID0gdXBwZXJjYXNlQV0gPSBcInVwcGVyY2FzZUFcIjsgLy8gICdBJ1xuICBjb25zdCB1cHBlcmNhc2VCID0gNjY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VCXCJdID0gdXBwZXJjYXNlQl0gPSBcInVwcGVyY2FzZUJcIjsgLy8gICdCJ1xuICBjb25zdCB1cHBlcmNhc2VDID0gNjc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VDXCJdID0gdXBwZXJjYXNlQ10gPSBcInVwcGVyY2FzZUNcIjsgLy8gICdDJ1xuICBjb25zdCB1cHBlcmNhc2VEID0gNjg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VEXCJdID0gdXBwZXJjYXNlRF0gPSBcInVwcGVyY2FzZURcIjsgLy8gICdEJ1xuICBjb25zdCB1cHBlcmNhc2VFID0gNjk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VFXCJdID0gdXBwZXJjYXNlRV0gPSBcInVwcGVyY2FzZUVcIjsgLy8gICdFJ1xuICBjb25zdCB1cHBlcmNhc2VGID0gNzA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VGXCJdID0gdXBwZXJjYXNlRl0gPSBcInVwcGVyY2FzZUZcIjsgLy8gICdGJ1xuICBjb25zdCB1cHBlcmNhc2VHID0gNzE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VHXCJdID0gdXBwZXJjYXNlR10gPSBcInVwcGVyY2FzZUdcIjsgLy8gICdHJ1xuICBjb25zdCB1cHBlcmNhc2VIID0gNzI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VIXCJdID0gdXBwZXJjYXNlSF0gPSBcInVwcGVyY2FzZUhcIjsgLy8gICdIJ1xuICBjb25zdCB1cHBlcmNhc2VJID0gNzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VJXCJdID0gdXBwZXJjYXNlSV0gPSBcInVwcGVyY2FzZUlcIjsgLy8gICdJJ1xuICBjb25zdCB1cHBlcmNhc2VKID0gNzQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VKXCJdID0gdXBwZXJjYXNlSl0gPSBcInVwcGVyY2FzZUpcIjsgLy8gICdKJ1xuICBjb25zdCB1cHBlcmNhc2VLID0gNzU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VLXCJdID0gdXBwZXJjYXNlS10gPSBcInVwcGVyY2FzZUtcIjsgLy8gICdLJ1xuICBjb25zdCB1cHBlcmNhc2VMID0gNzY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VMXCJdID0gdXBwZXJjYXNlTF0gPSBcInVwcGVyY2FzZUxcIjsgLy8gICdMJ1xuICBjb25zdCB1cHBlcmNhc2VNID0gNzc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VNXCJdID0gdXBwZXJjYXNlTV0gPSBcInVwcGVyY2FzZU1cIjsgLy8gICdNJ1xuICBjb25zdCB1cHBlcmNhc2VOID0gNzg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VOXCJdID0gdXBwZXJjYXNlTl0gPSBcInVwcGVyY2FzZU5cIjsgLy8gICdOJ1xuICBjb25zdCB1cHBlcmNhc2VPID0gNzk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VPXCJdID0gdXBwZXJjYXNlT10gPSBcInVwcGVyY2FzZU9cIjsgLy8gICdPJ1xuICBjb25zdCB1cHBlcmNhc2VQID0gODA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VQXCJdID0gdXBwZXJjYXNlUF0gPSBcInVwcGVyY2FzZVBcIjsgLy8gICdQJ1xuICBjb25zdCB1cHBlcmNhc2VRID0gODE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VRXCJdID0gdXBwZXJjYXNlUV0gPSBcInVwcGVyY2FzZVFcIjsgLy8gICdRJ1xuICBjb25zdCB1cHBlcmNhc2VSID0gODI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VSXCJdID0gdXBwZXJjYXNlUl0gPSBcInVwcGVyY2FzZVJcIjsgLy8gICdSJ1xuICBjb25zdCB1cHBlcmNhc2VTID0gODM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VTXCJdID0gdXBwZXJjYXNlU10gPSBcInVwcGVyY2FzZVNcIjsgLy8gICdTJ1xuICBjb25zdCB1cHBlcmNhc2VUID0gODQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VUXCJdID0gdXBwZXJjYXNlVF0gPSBcInVwcGVyY2FzZVRcIjsgLy8gICdUJ1xuICBjb25zdCB1cHBlcmNhc2VVID0gODU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VVXCJdID0gdXBwZXJjYXNlVV0gPSBcInVwcGVyY2FzZVVcIjsgLy8gICdVJ1xuICBjb25zdCB1cHBlcmNhc2VWID0gODY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VWXCJdID0gdXBwZXJjYXNlVl0gPSBcInVwcGVyY2FzZVZcIjsgLy8gICdWJ1xuICBjb25zdCB1cHBlcmNhc2VXID0gODc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VXXCJdID0gdXBwZXJjYXNlV10gPSBcInVwcGVyY2FzZVdcIjsgLy8gICdXJ1xuICBjb25zdCB1cHBlcmNhc2VYID0gODg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VYXCJdID0gdXBwZXJjYXNlWF0gPSBcInVwcGVyY2FzZVhcIjsgLy8gICdYJ1xuICBjb25zdCB1cHBlcmNhc2VZID0gODk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VZXCJdID0gdXBwZXJjYXNlWV0gPSBcInVwcGVyY2FzZVlcIjsgLy8gICdZJ1xuICBjb25zdCB1cHBlcmNhc2VaID0gOTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VaXCJdID0gdXBwZXJjYXNlWl0gPSBcInVwcGVyY2FzZVpcIjsgLy8gICdaJ1xuICBjb25zdCBsZWZ0U3F1YXJlQnJhY2tldCA9IDkxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGVmdFNxdWFyZUJyYWNrZXRcIl0gPSBsZWZ0U3F1YXJlQnJhY2tldF0gPSBcImxlZnRTcXVhcmVCcmFja2V0XCI7IC8vICAnWydcbiAgY29uc3QgYmFja3NsYXNoID0gOTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJiYWNrc2xhc2hcIl0gPSBiYWNrc2xhc2hdID0gXCJiYWNrc2xhc2hcIjsgLy8gICdcXCAgICAnXG4gIGNvbnN0IHJpZ2h0U3F1YXJlQnJhY2tldCA9IDkzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicmlnaHRTcXVhcmVCcmFja2V0XCJdID0gcmlnaHRTcXVhcmVCcmFja2V0XSA9IFwicmlnaHRTcXVhcmVCcmFja2V0XCI7IC8vICAnXSdcbiAgY29uc3QgY2FyZXQgPSA5NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNhcmV0XCJdID0gY2FyZXRdID0gXCJjYXJldFwiOyAvLyAgJ14nXG4gIGNvbnN0IHVuZGVyc2NvcmUgPSA5NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVuZGVyc2NvcmVcIl0gPSB1bmRlcnNjb3JlXSA9IFwidW5kZXJzY29yZVwiOyAvLyAgJ18nXG4gIGNvbnN0IGdyYXZlQWNjZW50ID0gOTY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJncmF2ZUFjY2VudFwiXSA9IGdyYXZlQWNjZW50XSA9IFwiZ3JhdmVBY2NlbnRcIjsgLy8gICdgJ1xuICBjb25zdCBsb3dlcmNhc2VBID0gOTc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VBXCJdID0gbG93ZXJjYXNlQV0gPSBcImxvd2VyY2FzZUFcIjsgLy8gICdhJ1xuICBjb25zdCBsb3dlcmNhc2VCID0gOTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VCXCJdID0gbG93ZXJjYXNlQl0gPSBcImxvd2VyY2FzZUJcIjsgLy8gICdiJ1xuICBjb25zdCBsb3dlcmNhc2VDID0gOTk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VDXCJdID0gbG93ZXJjYXNlQ10gPSBcImxvd2VyY2FzZUNcIjsgLy8gICdjJ1xuICBjb25zdCBsb3dlcmNhc2VEID0gMTAwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlRFwiXSA9IGxvd2VyY2FzZURdID0gXCJsb3dlcmNhc2VEXCI7IC8vICAnZCdcbiAgY29uc3QgbG93ZXJjYXNlRSA9IDEwMTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUVcIl0gPSBsb3dlcmNhc2VFXSA9IFwibG93ZXJjYXNlRVwiOyAvLyAgJ2UnXG4gIGNvbnN0IGxvd2VyY2FzZUYgPSAxMDI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VGXCJdID0gbG93ZXJjYXNlRl0gPSBcImxvd2VyY2FzZUZcIjsgLy8gICdmJ1xuICBjb25zdCBsb3dlcmNhc2VHID0gMTAzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlR1wiXSA9IGxvd2VyY2FzZUddID0gXCJsb3dlcmNhc2VHXCI7IC8vICAnZydcbiAgY29uc3QgbG93ZXJjYXNlSCA9IDEwNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUhcIl0gPSBsb3dlcmNhc2VIXSA9IFwibG93ZXJjYXNlSFwiOyAvLyAgJ2gnXG4gIGNvbnN0IGxvd2VyY2FzZUkgPSAxMDU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VJXCJdID0gbG93ZXJjYXNlSV0gPSBcImxvd2VyY2FzZUlcIjsgLy8gICdpJ1xuICBjb25zdCBsb3dlcmNhc2VKID0gMTA2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlSlwiXSA9IGxvd2VyY2FzZUpdID0gXCJsb3dlcmNhc2VKXCI7IC8vICAnaidcbiAgY29uc3QgbG93ZXJjYXNlSyA9IDEwNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUtcIl0gPSBsb3dlcmNhc2VLXSA9IFwibG93ZXJjYXNlS1wiOyAvLyAgJ2snXG4gIGNvbnN0IGxvd2VyY2FzZUwgPSAxMDg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VMXCJdID0gbG93ZXJjYXNlTF0gPSBcImxvd2VyY2FzZUxcIjsgLy8gICdsJ1xuICBjb25zdCBsb3dlcmNhc2VNID0gMTA5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlTVwiXSA9IGxvd2VyY2FzZU1dID0gXCJsb3dlcmNhc2VNXCI7IC8vICAnbSdcbiAgY29uc3QgbG93ZXJjYXNlTiA9IDExMDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZU5cIl0gPSBsb3dlcmNhc2VOXSA9IFwibG93ZXJjYXNlTlwiOyAvLyAgJ24nXG4gIGNvbnN0IGxvd2VyY2FzZU8gPSAxMTE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VPXCJdID0gbG93ZXJjYXNlT10gPSBcImxvd2VyY2FzZU9cIjsgLy8gICdvJ1xuICBjb25zdCBsb3dlcmNhc2VQID0gMTEyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlUFwiXSA9IGxvd2VyY2FzZVBdID0gXCJsb3dlcmNhc2VQXCI7IC8vICAncCdcbiAgY29uc3QgbG93ZXJjYXNlUSA9IDExMzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVFcIl0gPSBsb3dlcmNhc2VRXSA9IFwibG93ZXJjYXNlUVwiOyAvLyAgJ3EnXG4gIGNvbnN0IGxvd2VyY2FzZVIgPSAxMTQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VSXCJdID0gbG93ZXJjYXNlUl0gPSBcImxvd2VyY2FzZVJcIjsgLy8gICdyJ1xuICBjb25zdCBsb3dlcmNhc2VTID0gMTE1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlU1wiXSA9IGxvd2VyY2FzZVNdID0gXCJsb3dlcmNhc2VTXCI7IC8vICAncydcbiAgY29uc3QgbG93ZXJjYXNlVCA9IDExNjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVRcIl0gPSBsb3dlcmNhc2VUXSA9IFwibG93ZXJjYXNlVFwiOyAvLyAgJ3QnXG4gIGNvbnN0IGxvd2VyY2FzZVUgPSAxMTc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VVXCJdID0gbG93ZXJjYXNlVV0gPSBcImxvd2VyY2FzZVVcIjsgLy8gICd1J1xuICBjb25zdCBsb3dlcmNhc2VWID0gMTE4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlVlwiXSA9IGxvd2VyY2FzZVZdID0gXCJsb3dlcmNhc2VWXCI7IC8vICAndidcbiAgY29uc3QgbG93ZXJjYXNlVyA9IDExOTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVdcIl0gPSBsb3dlcmNhc2VXXSA9IFwibG93ZXJjYXNlV1wiOyAvLyAgJ3cnXG4gIGNvbnN0IGxvd2VyY2FzZVggPSAxMjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VYXCJdID0gbG93ZXJjYXNlWF0gPSBcImxvd2VyY2FzZVhcIjsgLy8gICd4J1xuICBjb25zdCBsb3dlcmNhc2VZID0gMTIxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlWVwiXSA9IGxvd2VyY2FzZVldID0gXCJsb3dlcmNhc2VZXCI7IC8vICAneSdcbiAgY29uc3QgbG93ZXJjYXNlWiA9IDEyMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVpcIl0gPSBsb3dlcmNhc2VaXSA9IFwibG93ZXJjYXNlWlwiOyAvLyAgJ3onXG4gIGNvbnN0IGxlZnRDdXJseUJyYWNlID0gMTIzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGVmdEN1cmx5QnJhY2VcIl0gPSBsZWZ0Q3VybHlCcmFjZV0gPSBcImxlZnRDdXJseUJyYWNlXCI7IC8vICAneydcbiAgY29uc3QgdmVydGljYWxCYXIgPSAxMjQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ2ZXJ0aWNhbEJhclwiXSA9IHZlcnRpY2FsQmFyXSA9IFwidmVydGljYWxCYXJcIjsgLy8gICd8J1xuICBjb25zdCByaWdodEN1cmx5QnJhY2UgPSAxMjU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodEN1cmx5QnJhY2VcIl0gPSByaWdodEN1cmx5QnJhY2VdID0gXCJyaWdodEN1cmx5QnJhY2VcIjsgLy8gICd9J1xuICBjb25zdCB0aWxkZSA9IDEyNjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInRpbGRlXCJdID0gdGlsZGVdID0gXCJ0aWxkZVwiOyAvLyAgJ34nXG4gIGNvbnN0IG5vbkJyZWFraW5nU3BhY2UgPSAxNjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJub25CcmVha2luZ1NwYWNlXCJdID0gbm9uQnJlYWtpbmdTcGFjZV0gPSBcIm5vbkJyZWFraW5nU3BhY2VcIjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlycmVndWxhci13aGl0ZXNwYWNlXG4gIGNvbnN0IG9naGFtU3BhY2VNYXJrID0gNTc2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcIm9naGFtU3BhY2VNYXJrXCJdID0gb2doYW1TcGFjZU1hcmtdID0gXCJvZ2hhbVNwYWNlTWFya1wiOyAvLyAnXHUxNjgwJ1xuICBjb25zdCBsaW5lU2VwYXJhdG9yID0gODIzMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxpbmVTZXBhcmF0b3JcIl0gPSBsaW5lU2VwYXJhdG9yXSA9IFwibGluZVNlcGFyYXRvclwiO1xuICBjb25zdCBwYXJhZ3JhcGhTZXBhcmF0b3IgPSA4MjMzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGFyYWdyYXBoU2VwYXJhdG9yXCJdID0gcGFyYWdyYXBoU2VwYXJhdG9yXSA9IFwicGFyYWdyYXBoU2VwYXJhdG9yXCI7XG59KShjaGFyQ29kZXMgfHwgKGV4cG9ydHMuY2hhckNvZGVzID0gY2hhckNvZGVzID0ge30pKTtcblxuIGZ1bmN0aW9uIGlzRGlnaXQoY29kZSkge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRilcbiAgKTtcbn0gZXhwb3J0cy5pc0RpZ2l0ID0gaXNEaWdpdDtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfc3RhdGUgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvc3RhdGUnKTsgdmFyIF9zdGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdGF0ZSk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG5cbiBleHBvcnRzLmlzSlNYRW5hYmxlZDtcbiBleHBvcnRzLmlzVHlwZVNjcmlwdEVuYWJsZWQ7XG4gZXhwb3J0cy5pc0Zsb3dFbmFibGVkO1xuIGV4cG9ydHMuc3RhdGU7XG4gZXhwb3J0cy5pbnB1dDtcbiBleHBvcnRzLm5leHRDb250ZXh0SWQ7XG5cbiBmdW5jdGlvbiBnZXROZXh0Q29udGV4dElkKCkge1xuICByZXR1cm4gZXhwb3J0cy5uZXh0Q29udGV4dElkKys7XG59IGV4cG9ydHMuZ2V0TmV4dENvbnRleHRJZCA9IGdldE5leHRDb250ZXh0SWQ7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gZnVuY3Rpb24gYXVnbWVudEVycm9yKGVycm9yKSB7XG4gIGlmIChcInBvc1wiIGluIGVycm9yKSB7XG4gICAgY29uc3QgbG9jID0gbG9jYXRpb25Gb3JJbmRleChlcnJvci5wb3MpO1xuICAgIGVycm9yLm1lc3NhZ2UgKz0gYCAoJHtsb2MubGluZX06JHtsb2MuY29sdW1ufSlgO1xuICAgIGVycm9yLmxvYyA9IGxvYztcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59IGV4cG9ydHMuYXVnbWVudEVycm9yID0gYXVnbWVudEVycm9yO1xuXG4gY2xhc3MgTG9jIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3RvcihsaW5lLCBjb2x1bW4pIHtcbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICB9XG59IGV4cG9ydHMuTG9jID0gTG9jO1xuXG4gZnVuY3Rpb24gbG9jYXRpb25Gb3JJbmRleChwb3MpIHtcbiAgbGV0IGxpbmUgPSAxO1xuICBsZXQgY29sdW1uID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3M7IGkrKykge1xuICAgIGlmIChleHBvcnRzLmlucHV0LmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lKys7XG4gICAgICBjb2x1bW4gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW4rKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2MobGluZSwgY29sdW1uKTtcbn0gZXhwb3J0cy5sb2NhdGlvbkZvckluZGV4ID0gbG9jYXRpb25Gb3JJbmRleDtcblxuIGZ1bmN0aW9uIGluaXRQYXJzZXIoXG4gIGlucHV0Q29kZSxcbiAgaXNKU1hFbmFibGVkQXJnLFxuICBpc1R5cGVTY3JpcHRFbmFibGVkQXJnLFxuICBpc0Zsb3dFbmFibGVkQXJnLFxuKSB7XG4gIGV4cG9ydHMuaW5wdXQgPSBpbnB1dENvZGU7XG4gIGV4cG9ydHMuc3RhdGUgPSBuZXcgKDAsIF9zdGF0ZTIuZGVmYXVsdCkoKTtcbiAgZXhwb3J0cy5uZXh0Q29udGV4dElkID0gMTtcbiAgZXhwb3J0cy5pc0pTWEVuYWJsZWQgPSBpc0pTWEVuYWJsZWRBcmc7XG4gIGV4cG9ydHMuaXNUeXBlU2NyaXB0RW5hYmxlZCA9IGlzVHlwZVNjcmlwdEVuYWJsZWRBcmc7XG4gIGV4cG9ydHMuaXNGbG93RW5hYmxlZCA9IGlzRmxvd0VuYWJsZWRBcmc7XG59IGV4cG9ydHMuaW5pdFBhcnNlciA9IGluaXRQYXJzZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2luZGV4Jyk7XG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuXG4vLyAjIyBQYXJzZXIgdXRpbGl0aWVzXG5cbi8vIFRlc3RzIHdoZXRoZXIgcGFyc2VkIHRva2VuIGlzIGEgY29udGV4dHVhbCBrZXl3b3JkLlxuIGZ1bmN0aW9uIGlzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICByZXR1cm4gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkO1xufSBleHBvcnRzLmlzQ29udGV4dHVhbCA9IGlzQ29udGV4dHVhbDtcblxuIGZ1bmN0aW9uIGlzTG9va2FoZWFkQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBsID0gX2luZGV4Lmxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLmNhbGwodm9pZCAwLCApO1xuICByZXR1cm4gbC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUgJiYgbC5jb250ZXh0dWFsS2V5d29yZCA9PT0gY29udGV4dHVhbEtleXdvcmQ7XG59IGV4cG9ydHMuaXNMb29rYWhlYWRDb250ZXh0dWFsID0gaXNMb29rYWhlYWRDb250ZXh0dWFsO1xuXG4vLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdvcmQgaWYgcG9zc2libGUuXG4gZnVuY3Rpb24gZWF0Q29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICByZXR1cm4gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkICYmIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59IGV4cG9ydHMuZWF0Q29udGV4dHVhbCA9IGVhdENvbnRleHR1YWw7XG5cbi8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuIGZ1bmN0aW9uIGV4cGVjdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKCFlYXRDb250ZXh0dWFsKGNvbnRleHR1YWxLZXl3b3JkKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufSBleHBvcnRzLmV4cGVjdENvbnRleHR1YWwgPSBleHBlY3RDb250ZXh0dWFsO1xuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuIGZ1bmN0aW9uIGNhbkluc2VydFNlbWljb2xvbigpIHtcbiAgcmV0dXJuIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lb2YpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8IGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpO1xufSBleHBvcnRzLmNhbkluc2VydFNlbWljb2xvbiA9IGNhbkluc2VydFNlbWljb2xvbjtcblxuIGZ1bmN0aW9uIGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgcHJldlRva2VuID0gX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdFRva0VuZCA9IHByZXZUb2tlbiA/IHByZXZUb2tlbi5lbmQgOiAwO1xuICBmb3IgKGxldCBpID0gbGFzdFRva0VuZDsgaSA8IF9iYXNlLnN0YXRlLnN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOCB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI5XG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLmhhc1ByZWNlZGluZ0xpbmVCcmVhayA9IGhhc1ByZWNlZGluZ0xpbmVCcmVhaztcblxuIGZ1bmN0aW9uIGhhc0ZvbGxvd2luZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgbmV4dFN0YXJ0ID0gX2luZGV4Lm5leHRUb2tlblN0YXJ0LmNhbGwodm9pZCAwLCApO1xuICBmb3IgKGxldCBpID0gX2Jhc2Uuc3RhdGUuZW5kOyBpIDwgbmV4dFN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOCB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI5XG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLmhhc0ZvbGxvd2luZ0xpbmVCcmVhayA9IGhhc0ZvbGxvd2luZ0xpbmVCcmVhaztcblxuIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoKSB7XG4gIHJldHVybiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpIHx8IGNhbkluc2VydFNlbWljb2xvbigpO1xufSBleHBvcnRzLmlzTGluZVRlcm1pbmF0b3IgPSBpc0xpbmVUZXJtaW5hdG9yO1xuXG4vLyBDb25zdW1lIGEgc2VtaWNvbG9uLCBvciwgZmFpbGluZyB0aGF0LCBzZWUgaWYgd2UgYXJlIGFsbG93ZWQgdG9cbi8vIHByZXRlbmQgdGhhdCB0aGVyZSBpcyBhIHNlbWljb2xvbiBhdCB0aGlzIHBvc2l0aW9uLlxuIGZ1bmN0aW9uIHNlbWljb2xvbigpIHtcbiAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICB1bmV4cGVjdGVkKCdVbmV4cGVjdGVkIHRva2VuLCBleHBlY3RlZCBcIjtcIicpO1xuICB9XG59IGV4cG9ydHMuc2VtaWNvbG9uID0gc2VtaWNvbG9uO1xuXG4vLyBFeHBlY3QgYSB0b2tlbiBvZiBhIGdpdmVuIHR5cGUuIElmIGZvdW5kLCBjb25zdW1lIGl0LCBvdGhlcndpc2UsXG4vLyByYWlzZSBhbiB1bmV4cGVjdGVkIHRva2VuIGVycm9yIGF0IGdpdmVuIHBvcy5cbiBmdW5jdGlvbiBleHBlY3QodHlwZSkge1xuICBjb25zdCBtYXRjaGVkID0gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgdHlwZSk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHVuZXhwZWN0ZWQoYFVuZXhwZWN0ZWQgdG9rZW4sIGV4cGVjdGVkIFwiJHtfdHlwZXMuZm9ybWF0VG9rZW5UeXBlLmNhbGwodm9pZCAwLCB0eXBlKX1cImApO1xuICB9XG59IGV4cG9ydHMuZXhwZWN0ID0gZXhwZWN0O1xuXG4vKipcbiAqIFRyYW5zaXRpb24gdGhlIHBhcnNlciB0byBhbiBlcnJvciBzdGF0ZS4gQWxsIGNvZGUgbmVlZHMgdG8gYmUgd3JpdHRlbiB0byBuYXR1cmFsbHkgdW53aW5kIGluIHRoaXNcbiAqIHN0YXRlLCB3aGljaCBhbGxvd3MgdXMgdG8gYmFja3RyYWNrIHdpdGhvdXQgZXhjZXB0aW9ucyBhbmQgd2l0aG91dCBlcnJvciBwbHVtYmluZyBldmVyeXdoZXJlLlxuICovXG4gZnVuY3Rpb24gdW5leHBlY3RlZChtZXNzYWdlID0gXCJVbmV4cGVjdGVkIHRva2VuXCIsIHBvcyA9IF9iYXNlLnN0YXRlLnN0YXJ0KSB7XG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBlcnIgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSk7XG4gIGVyci5wb3MgPSBwb3M7XG4gIF9iYXNlLnN0YXRlLmVycm9yID0gZXJyO1xuICBfYmFzZS5zdGF0ZS5wb3MgPSBfYmFzZS5pbnB1dC5sZW5ndGg7XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lb2YpO1xufSBleHBvcnRzLnVuZXhwZWN0ZWQgPSB1bmV4cGVjdGVkO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF9jaGFyY29kZXMgPSByZXF1aXJlKCcuL2NoYXJjb2RlcycpO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aGl0ZS1zcGFjZVxuIGNvbnN0IFdISVRFU1BBQ0VfQ0hBUlMgPSBbXG4gIDB4MDAwOSxcbiAgMHgwMDBiLFxuICAweDAwMGMsXG4gIF9jaGFyY29kZXMuY2hhckNvZGVzLnNwYWNlLFxuICBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ub25CcmVha2luZ1NwYWNlLFxuICBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5vZ2hhbVNwYWNlTWFyayxcbiAgMHgyMDAwLCAvLyBFTiBRVUFEXG4gIDB4MjAwMSwgLy8gRU0gUVVBRFxuICAweDIwMDIsIC8vIEVOIFNQQUNFXG4gIDB4MjAwMywgLy8gRU0gU1BBQ0VcbiAgMHgyMDA0LCAvLyBUSFJFRS1QRVItRU0gU1BBQ0VcbiAgMHgyMDA1LCAvLyBGT1VSLVBFUi1FTSBTUEFDRVxuICAweDIwMDYsIC8vIFNJWC1QRVItRU0gU1BBQ0VcbiAgMHgyMDA3LCAvLyBGSUdVUkUgU1BBQ0VcbiAgMHgyMDA4LCAvLyBQVU5DVFVBVElPTiBTUEFDRVxuICAweDIwMDksIC8vIFRISU4gU1BBQ0VcbiAgMHgyMDBhLCAvLyBIQUlSIFNQQUNFXG4gIDB4MjAyZiwgLy8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFXG4gIDB4MjA1ZiwgLy8gTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRVxuICAweDMwMDAsIC8vIElERU9HUkFQSElDIFNQQUNFXG4gIDB4ZmVmZiwgLy8gWkVSTyBXSURUSCBOTy1CUkVBSyBTUEFDRVxuXTsgZXhwb3J0cy5XSElURVNQQUNFX0NIQVJTID0gV0hJVEVTUEFDRV9DSEFSUztcblxuIGNvbnN0IHNraXBXaGl0ZVNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKnxcXC9cXCpbXl0qP1xcKlxcLykqL2c7IGV4cG9ydHMuc2tpcFdoaXRlU3BhY2UgPSBza2lwV2hpdGVTcGFjZTtcblxuIGNvbnN0IElTX1dISVRFU1BBQ0UgPSBuZXcgVWludDhBcnJheSg2NTUzNik7IGV4cG9ydHMuSVNfV0hJVEVTUEFDRSA9IElTX1dISVRFU1BBQ0U7XG5mb3IgKGNvbnN0IGNoYXIgb2YgZXhwb3J0cy5XSElURVNQQUNFX0NIQVJTKSB7XG4gIGV4cG9ydHMuSVNfV0hJVEVTUEFDRVtjaGFyXSA9IDE7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4vY2hhcmNvZGVzJyk7XG52YXIgX3doaXRlc3BhY2UgPSByZXF1aXJlKCcuL3doaXRlc3BhY2UnKTtcblxuZnVuY3Rpb24gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoY29kZSkge1xuICBpZiAoY29kZSA8IDQ4KSByZXR1cm4gY29kZSA9PT0gMzY7XG4gIGlmIChjb2RlIDwgNTgpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7XG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTU7XG4gIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGNvZGUgPCAxMjgpIHJldHVybiBmYWxzZTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBub24tQVNDSUkgY2hhciBjb2RlLlwiKTtcbn1cblxuIGNvbnN0IElTX0lERU5USUZJRVJfQ0hBUiA9IG5ldyBVaW50OEFycmF5KDY1NTM2KTsgZXhwb3J0cy5JU19JREVOVElGSUVSX0NIQVIgPSBJU19JREVOVElGSUVSX0NIQVI7XG5mb3IgKGxldCBpID0gMDsgaSA8IDEyODsgaSsrKSB7XG4gIGV4cG9ydHMuSVNfSURFTlRJRklFUl9DSEFSW2ldID0gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoaSkgPyAxIDogMDtcbn1cbmZvciAobGV0IGkgPSAxMjg7IGkgPCA2NTUzNjsgaSsrKSB7XG4gIGV4cG9ydHMuSVNfSURFTlRJRklFUl9DSEFSW2ldID0gMTtcbn1cbi8vIEFzaWRlIGZyb20gd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMsIGFsbCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEFTQ0lJIHNwYWNlIGFyZSBlaXRoZXJcbi8vIGlkZW50aWZpZXIgY2hhcmFjdGVycyBvciBpbnZhbGlkLiBTaW5jZSB3ZSdyZSBub3QgcGVyZm9ybWluZyBjb2RlIHZhbGlkYXRpb24sIHdlIGNhbiBqdXN0XG4vLyB0cmVhdCBhbGwgaW52YWxpZCBjaGFyYWN0ZXJzIGFzIGlkZW50aWZpZXIgY2hhcmFjdGVycy5cbmZvciAoY29uc3Qgd2hpdGVzcGFjZUNoYXIgb2YgX3doaXRlc3BhY2UuV0hJVEVTUEFDRV9DSEFSUykge1xuICBleHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUlt3aGl0ZXNwYWNlQ2hhcl0gPSAwO1xufVxuZXhwb3J0cy5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI4XSA9IDA7XG5leHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUlsweDIwMjldID0gMDtcblxuIGNvbnN0IElTX0lERU5USUZJRVJfU1RBUlQgPSBleHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUi5zbGljZSgpOyBleHBvcnRzLklTX0lERU5USUZJRVJfU1RBUlQgPSBJU19JREVOVElGSUVSX1NUQVJUO1xuZm9yIChsZXQgbnVtQ2hhciA9IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MDsgbnVtQ2hhciA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDk7IG51bUNoYXIrKykge1xuICBleHBvcnRzLklTX0lERU5USUZJRVJfU1RBUlRbbnVtQ2hhcl0gPSAwO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7Ly8gR2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0ISBSdW4gXCJ5YXJuIGdlbmVyYXRlXCIgdG8gcmUtZ2VuZXJhdGUgdGhpcyBmaWxlLlxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbi8vIHByZXR0aWVyLWlnbm9yZVxuIGNvbnN0IFJFQURfV09SRF9UUkVFID0gbmV3IEludDMyQXJyYXkoW1xuICAvLyBcIlwiXG4gIC0xLCAyNywgNzgzLCA5MTgsIDE3NTUsIDIzNzYsIDI4NjIsIDM0ODMsIC0xLCAzNjk5LCAtMSwgNDYxNywgNDc1MiwgNDgzMywgNTEzMCwgNTUwOCwgNTk0MCwgLTEsIDY0ODAsIDY5MzksIDc3NDksIDgxODEsIDg0NTEsIDg2MTMsIC0xLCA4ODI5LCAtMSxcbiAgLy8gXCJhXCJcbiAgLTEsIC0xLCA1NCwgMjQzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzIsIC0xLCAtMSwgLTEsIDY3NSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyXCJcbiAgLTEsIDE2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdHJhXCJcbiAgLTEsIC0xLCAtMSwgMTg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdHJhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYWN0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNcIlxuICAtMSwgLTEsIC0xLCAyNzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNzb3JcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FjY2Vzc29yIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5NCwgLTEsXG4gIC8vIFwiYXNzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXNzZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXNzZXJ0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlcnRzXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnRzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3luXCJcbiAgLTEsIC0xLCAtMSwgNjQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXN5bmNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd1wiXG4gIC0xLCA3MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImF3YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcyOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImF3YWlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FpdFwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXdhaXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZVwiXG4gIC0xLCA4NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZWFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJicmVha1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9icmVhayA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjXCJcbiAgLTEsIDk0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEwNywgLTEsIC0xLCAtMSwgMTI0MiwgLTEsIC0xLCAxMzUwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2FcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgOTcyLCAxMDI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhc2VcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fY2FzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRcIlxuICAtMSwgLTEsIC0xLCAxMDUzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2F0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTA4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRjaFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jYXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVcIlxuICAtMSwgLTEsIC0xLCAxMTYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2hlY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTE4OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMjE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja3NcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xcIlxuICAtMSwgMTI2OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEyOTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNsYXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTMyMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhc3NcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0MDQsIDE2MjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQ1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0clwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0ODUsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1XCJcbiAgLTEsIC0xLCAtMSwgMTUxMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNTM5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE1NjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTU5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjdG9yXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE2NDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTY3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udGludVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTcyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW51ZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jb250aW51ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzgyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMzQ5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVcIlxuICAtMSwgLTEsIDE4MDksIDE5NzEsIC0xLCAtMSwgMjEwNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMjQxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGViXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTgzNiwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTg2MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTg5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdnXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTE3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdnZXJcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fZGVidWdnZXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTk5OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlY2xcIlxuICAtMSwgMjAyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMDUyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMDc5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlY2xhcmVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZlwiXG4gIC0xLCAyMTMzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE2MCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZmF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZmF1bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjIxNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdWx0XCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMjY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlbGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyOTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIzMjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZXRlXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkb1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9kbyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjQwMywgLTEsIDI0ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI1NjUsIC0xLCAtMSxcbiAgLy8gXCJlbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNDMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlbHNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZWxzZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9lbHNlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVuXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjUxMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVudVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlbnVtXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTkyLCAtMSwgLTEsIC0xLCAyNzI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI2MTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjY0NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9yXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNjczLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9ydFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvcnRzXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9leHBvcnRzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3NTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjc4MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRlblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAyODA4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRlbmRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjgzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5kc1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZcIlxuICAtMSwgMjg4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5OTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzE1OSwgLTEsIC0xLCAzMjEzLCAtMSwgLTEsIDMyOTQsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5MTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmFsc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxzZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9mYWxzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzAyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5cIlxuICAtMSwgMzA1MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmluYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMwNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxMDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzEzMiwgLTEsXG4gIC8vIFwiZmluYWxseVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9maW5hbGx5IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzE4NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZvclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9mb3IgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNjcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZyb21cIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20gPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMzIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1blwiXG4gIC0xLCAtMSwgLTEsIDMzNDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMzc1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzQwMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM0MjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNDU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0aW9uXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM1MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM1NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnZXRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2dldCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNTkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvXCJcbiAgLTEsIC0xLCAzNjE4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JcIlxuICAtMSwgMzY0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvYmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNjcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvYmFsXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzUzLCA0MDc3LCAtMSwgLTEsIC0xLCAtMSwgNDU5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaWZcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faWYgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzc4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzgwNywgLTEsIC0xLCAzOTk2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzgzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzODYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4ODgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzkxNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1lblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzk0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1lbnRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzk2OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW50c1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQwMjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvcnRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2luIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTA0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTg1LCA0NDAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDEzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbmZlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDE1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZmVyXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbmZlciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MjEyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RcIlxuICAtMSwgNDIzOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQyNjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuXCJcbiAgLTEsIC0xLCAtMSwgNDI5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDQzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuY2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzQ3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuY2VvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDM3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlb2ZcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faW5zdGFuY2VvZiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0MjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW50ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0NTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0ODIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZcIlxuICAtMSwgNDUwOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW50ZXJmYVwiXG4gIC0xLCAtMSwgLTEsIDQ1MzYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDU2MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhY2VcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaXNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2lzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NjQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2NzEsIC0xLFxuICAvLyBcImtleVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2OTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrZXlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDcyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtleW9mXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9rZXlvZiA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDc3OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDgwNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsZXRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fbGV0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ5OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ4ODcsIC0xLCAtMSxcbiAgLy8gXCJtaXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTE0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibWl4aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDk0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpbnNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21peGlucyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgNTAyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTA0OSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1vZHVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MDc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxMDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdWxlXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5cIlxuICAtMSwgNTE1NywgLTEsIC0xLCAtMSwgNTM3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQyNywgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTIxMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyMzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyNjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcFwiXG4gIC0xLCA1MjkyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhXCJcbiAgLTEsIC0xLCAtMSwgNTMxOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcGFjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MzQ2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcGFjZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwMCwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZXdcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fbmV3IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm51XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQ1NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm51bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0ODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudWxsXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX251bGwgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU1MzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU1NjIsIC0xLCAtMSwgLTEsIC0xLCA1Njk3LCA1NzUxLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvZlwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wXCJcbiAgLTEsIDU1ODksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTYxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY0MywgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NjcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYXF1ZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb3BhcXVlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTcyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdXRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX291dCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDU3NzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm92ZXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDU4ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm92ZXJyaWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5MTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpZGVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTk2NywgLTEsIC0xLCA2MzQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1OTk0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxMjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcmlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjAyMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdlwiXG4gIC0xLCA2MDQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcml2YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjA3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcml2YXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxMDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmF0ZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByb3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxODMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYzMTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZVwiXG4gIC0xLCAtMSwgLTEsIDYyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdGVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjI2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCA2MjkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZWRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdG9cIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RvIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdVwiXG4gIC0xLCAtMSwgNjM3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Mzk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY0MjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJsaVwiXG4gIC0xLCAtMSwgLTEsIDY0NTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJsaWNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjUwNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZVwiXG4gIC0xLCA2NTM0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Njk2LCAtMSwgLTEsIDY4MzEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDY1NjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NTg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY2MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRvbmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY2OSwgLTEsXG4gIC8vIFwicmVhZG9ubHlcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5IDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NzIzLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVxdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3NTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3NzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDY4MDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVxdWlyZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVxdWlyZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjg1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2ODg1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0dXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY5MTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0dXJuXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3JldHVybiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzXCJcbiAgLTEsIDY5NjYsIC0xLCAtMSwgLTEsIDcxODIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzIzNiwgNzM3MSwgLTEsIDc0NzksIC0xLCA3NjE0LCAtMSxcbiAgLy8gXCJzYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjk5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MDIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2F0aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MDQ3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwNzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2F0aXNmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzEyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTU1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpZXNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3NhdGlzZmllcyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcyMDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2V0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9zZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0XCJcbiAgLTEsIDcyNjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdGF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzMxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpXCJcbiAgLTEsIC0xLCAtMSwgNzM0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpY1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc3RhdGljIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Mzk4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDc0MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3VwZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc0NTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBlclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9zdXBlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3dpdFwiXG4gIC0xLCAtMSwgLTEsIDc1NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzU4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y2hcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fc3dpdGNoIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc2NDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bVwiXG4gIC0xLCAtMSwgNzY2OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1iXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzY5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bWJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzcyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bWJvbFwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc3ltYm9sIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Nzc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MDQ2LCAtMSxcbiAgLy8gXCJ0aFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4MDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3ODMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aGlzXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3RoaXMgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidGhyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg4NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRocm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5MTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidGhyb3dcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fdGhyb3cgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTY1LCAtMSwgLTEsIC0xLCA4MDE5LCAtMSxcbiAgLy8gXCJ0cnVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5OTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHJ1ZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl90cnVlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRyeVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl90cnkgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODA3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5cGVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9mXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjA4LCAtMSwgLTEsIC0xLCAtMSwgODM0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4Mjg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pcXVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDgzMTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pcXVlXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91bmlxdWUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1c2luXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg0MjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaW5nXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91c2luZyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidlwiXG4gIC0xLCA4NDc4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODUzMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODUwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZhclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl92YXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg1ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZvaWRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fdm9pZCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NjQwLCA4NzQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NjY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDg3MjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hpbGVcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fd2hpbGUgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg3NzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2l0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndpdGhcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fd2l0aCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODg1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODgzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5aWVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg5MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZWxkXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3lpZWxkIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuXSk7IGV4cG9ydHMuUkVBRF9XT1JEX1RSRUUgPSBSRUFEX1dPUkRfVFJFRTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfYmFzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9iYXNlJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfaW5kZXggPSByZXF1aXJlKCcuL2luZGV4Jyk7XG52YXIgX3JlYWRXb3JkVHJlZSA9IHJlcXVpcmUoJy4vcmVhZFdvcmRUcmVlJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi90eXBlcycpO1xuXG4vKipcbiAqIFJlYWQgYW4gaWRlbnRpZmllciwgcHJvZHVjaW5nIGVpdGhlciBhIG5hbWUgdG9rZW4gb3IgbWF0Y2hpbmcgb24gb25lIG9mIHRoZSBleGlzdGluZyBrZXl3b3Jkcy5cbiAqIEZvciBwZXJmb3JtYW5jZSwgd2UgcHJlLWdlbmVyYXRlIGJpZyBkZWNpc2lvbiB0cmVlIHRoYXQgd2UgdHJhdmVyc2UuIEVhY2ggbm9kZSByZXByZXNlbnRzIGFcbiAqIHByZWZpeCBhbmQgaGFzIDI3IHZhbHVlcywgd2hlcmUgdGhlIGZpcnN0IHZhbHVlIGlzIHRoZSB0b2tlbiBvciBjb250ZXh0dWFsIHRva2VuLCBpZiBhbnkgKC0xIGlmXG4gKiBub3QpLCBhbmQgdGhlIG90aGVyIDI2IHZhbHVlcyBhcmUgdGhlIHRyYW5zaXRpb25zIHRvIG90aGVyIG5vZGVzLCBvciAtMSB0byBzdG9wLlxuICovXG4gZnVuY3Rpb24gcmVhZFdvcmQoKSB7XG4gIGxldCB0cmVlUG9zID0gMDtcbiAgbGV0IGNvZGUgPSAwO1xuICBsZXQgcG9zID0gX2Jhc2Uuc3RhdGUucG9zO1xuICB3aGlsZSAocG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoKSB7XG4gICAgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoY29kZSA8IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZUEgfHwgY29kZSA+IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZVopIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gX3JlYWRXb3JkVHJlZS5SRUFEX1dPUkRfVFJFRVt0cmVlUG9zICsgKGNvZGUgLSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBKSArIDFdO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVQb3MgPSBuZXh0O1xuICAgICAgcG9zKys7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qga2V5d29yZFZhbHVlID0gX3JlYWRXb3JkVHJlZS5SRUFEX1dPUkRfVFJFRVt0cmVlUG9zXTtcbiAgaWYgKGtleXdvcmRWYWx1ZSA+IC0xICYmICFfaWRlbnRpZmllci5JU19JREVOVElGSUVSX0NIQVJbY29kZV0pIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3MgPSBwb3M7XG4gICAgaWYgKGtleXdvcmRWYWx1ZSAmIDEpIHtcbiAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwga2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIGtleXdvcmRWYWx1ZSA+Pj4gMSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHdoaWxlIChwb3MgPCBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW2NoXSkge1xuICAgICAgcG9zKys7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UpIHtcbiAgICAgICAgd2hpbGUgKHBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KHBvcykgIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0Q3VybHlCcmFjZSkge1xuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbiAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KHBvcyArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hdFNpZ24pIHtcbiAgICAgIHBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zID0gcG9zO1xuICBfaW5kZXguZmluaXNoVG9rZW4uY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IHJlYWRXb3JkO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9LyogZXNsaW50IG1heC1sZW46IDAgKi9cblxudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfd2hpdGVzcGFjZSA9IHJlcXVpcmUoJy4uL3V0aWwvd2hpdGVzcGFjZScpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcbnZhciBfcmVhZFdvcmQgPSByZXF1aXJlKCcuL3JlYWRXb3JkJyk7IHZhciBfcmVhZFdvcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhZFdvcmQpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxudmFyIElkZW50aWZpZXJSb2xlOyAoZnVuY3Rpb24gKElkZW50aWZpZXJSb2xlKSB7XG4gIGNvbnN0IEFjY2VzcyA9IDA7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiQWNjZXNzXCJdID0gQWNjZXNzXSA9IFwiQWNjZXNzXCI7XG4gIGNvbnN0IEV4cG9ydEFjY2VzcyA9IEFjY2VzcyArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiRXhwb3J0QWNjZXNzXCJdID0gRXhwb3J0QWNjZXNzXSA9IFwiRXhwb3J0QWNjZXNzXCI7XG4gIGNvbnN0IFRvcExldmVsRGVjbGFyYXRpb24gPSBFeHBvcnRBY2Nlc3MgKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIlRvcExldmVsRGVjbGFyYXRpb25cIl0gPSBUb3BMZXZlbERlY2xhcmF0aW9uXSA9IFwiVG9wTGV2ZWxEZWNsYXJhdGlvblwiO1xuICBjb25zdCBGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uID0gVG9wTGV2ZWxEZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblwiXSA9IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25dID0gXCJGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gPSBGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJCbG9ja1Njb3BlZERlY2xhcmF0aW9uXCJdID0gQmxvY2tTY29wZWREZWNsYXJhdGlvbl0gPSBcIkJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiA9IEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb25cIl0gPSBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uXSA9IFwiT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uID0gT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblwiXSA9IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25dID0gXCJPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gPSBPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXCJdID0gT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbl0gPSBcIk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kID0gT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kXCJdID0gT2JqZWN0U2hvcnRoYW5kXSA9IFwiT2JqZWN0U2hvcnRoYW5kXCI7XG4gIC8vIEFueSBpZGVudGlmaWVyIGJvdW5kIGluIGFuIGltcG9ydCBzdGF0ZW1lbnQsIGUuZy4gYm90aCBBIGFuZCBiIGZyb21cbiAgLy8gYGltcG9ydCBBLCAqIGFzIGIgZnJvbSAnQSc7YFxuICBjb25zdCBJbXBvcnREZWNsYXJhdGlvbiA9IE9iamVjdFNob3J0aGFuZCArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiSW1wb3J0RGVjbGFyYXRpb25cIl0gPSBJbXBvcnREZWNsYXJhdGlvbl0gPSBcIkltcG9ydERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdEtleSA9IEltcG9ydERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RLZXlcIl0gPSBPYmplY3RLZXldID0gXCJPYmplY3RLZXlcIjtcbiAgLy8gVGhlIGBmb29gIGluIGBpbXBvcnQge2ZvbyBhcyBiYXJ9IGZyb20gXCIuL2FiY1wiO2AuXG4gIGNvbnN0IEltcG9ydEFjY2VzcyA9IE9iamVjdEtleSArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiSW1wb3J0QWNjZXNzXCJdID0gSW1wb3J0QWNjZXNzXSA9IFwiSW1wb3J0QWNjZXNzXCI7XG59KShJZGVudGlmaWVyUm9sZSB8fCAoZXhwb3J0cy5JZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlID0ge30pKTtcblxuLyoqXG4gKiBFeHRyYSBpbmZvcm1hdGlvbiBvbiBqc3hUYWdTdGFydCB0b2tlbnMsIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSB0aHJlZVxuICoganN4IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLlxuICovXG52YXIgSlNYUm9sZTsgKGZ1bmN0aW9uIChKU1hSb2xlKSB7XG4gIC8vIFRoZSBlbGVtZW50IGlzIHNlbGYtY2xvc2luZyBvciBoYXMgYSBib2R5IHRoYXQgcmVzb2x2ZXMgdG8gZW1wdHkuIFdlXG4gIC8vIHNob3VsZG4ndCBlbWl0IGNoaWxkcmVuIGF0IGFsbCBpbiB0aGlzIGNhc2UuXG4gIGNvbnN0IE5vQ2hpbGRyZW4gPSAwOyBKU1hSb2xlW0pTWFJvbGVbXCJOb0NoaWxkcmVuXCJdID0gTm9DaGlsZHJlbl0gPSBcIk5vQ2hpbGRyZW5cIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGEgc2luZ2xlIGV4cGxpY2l0IGNoaWxkLCB3aGljaCBtaWdodCBzdGlsbCBiZSBhbiBhcmJpdHJhcnlcbiAgLy8gZXhwcmVzc2lvbiBsaWtlIGFuIGFycmF5LiBXZSBzaG91bGQgZW1pdCB0aGF0IGV4cHJlc3Npb24gYXMgdGhlIGNoaWxkcmVuLlxuICBjb25zdCBPbmVDaGlsZCA9IE5vQ2hpbGRyZW4gKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJPbmVDaGlsZFwiXSA9IE9uZUNoaWxkXSA9IFwiT25lQ2hpbGRcIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGF0IGxlYXN0IHR3byBleHBsaWNpdGx5LXNwZWNpZmllZCBjaGlsZHJlbiBvciBoYXMgc3ByZWFkXG4gIC8vIGNoaWxkcmVuLCBzbyBjaGlsZCBwb3NpdGlvbnMgYXJlIGFzc3VtZWQgdG8gYmUgXCJzdGF0aWNcIi4gV2Ugc2hvdWxkIHdyYXBcbiAgLy8gdGhlc2UgY2hpbGRyZW4gaW4gYW4gYXJyYXkuXG4gIGNvbnN0IFN0YXRpY0NoaWxkcmVuID0gT25lQ2hpbGQgKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJTdGF0aWNDaGlsZHJlblwiXSA9IFN0YXRpY0NoaWxkcmVuXSA9IFwiU3RhdGljQ2hpbGRyZW5cIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGEgcHJvcCBuYW1lZCBcImtleVwiIGFmdGVyIGEgcHJvcCBzcHJlYWQsIHNvIHdlIHNob3VsZCBmYWxsXG4gIC8vIGJhY2sgdG8gdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24uXG4gIGNvbnN0IEtleUFmdGVyUHJvcFNwcmVhZCA9IFN0YXRpY0NoaWxkcmVuICsgMTsgSlNYUm9sZVtKU1hSb2xlW1wiS2V5QWZ0ZXJQcm9wU3ByZWFkXCJdID0gS2V5QWZ0ZXJQcm9wU3ByZWFkXSA9IFwiS2V5QWZ0ZXJQcm9wU3ByZWFkXCI7XG59KShKU1hSb2xlIHx8IChleHBvcnRzLkpTWFJvbGUgPSBKU1hSb2xlID0ge30pKTtcblxuIGZ1bmN0aW9uIGlzRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLlRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvblxuICApO1xufSBleHBvcnRzLmlzRGVjbGFyYXRpb24gPSBpc0RlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uID0gaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNUb3BMZXZlbERlY2xhcmF0aW9uID0gaXNUb3BMZXZlbERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgLy8gVHJlYXQgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyBhcyBibG9jayBzY29wZSBzaW5jZSB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0ZXIgaGVyZS5cbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uID0gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblxuICApO1xufSBleHBvcnRzLmlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbiA9IGlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbjtcblxuIGZ1bmN0aW9uIGlzT2JqZWN0U2hvcnRoYW5kRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgcmV0dXJuIChcbiAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cbiAgKTtcbn0gZXhwb3J0cy5pc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uID0gaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbjtcblxuLy8gT2JqZWN0IHR5cGUgdXNlZCB0byByZXByZXNlbnQgdG9rZW5zLiBOb3RlIHRoYXQgbm9ybWFsbHksIHRva2Vuc1xuLy8gc2ltcGx5IGV4aXN0IGFzIHByb3BlcnRpZXMgb24gdGhlIHBhcnNlciBvYmplY3QuIFRoaXMgaXMgb25seVxuLy8gdXNlZCBmb3IgdGhlIG9uVG9rZW4gY2FsbGJhY2sgYW5kIHRoZSBleHRlcm5hbCB0b2tlbml6ZXIuXG4gY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnR5cGUgPSBfYmFzZS5zdGF0ZS50eXBlO1xuICAgIHRoaXMuY29udGV4dHVhbEtleXdvcmQgPSBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICB0aGlzLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBfYmFzZS5zdGF0ZS5lbmQ7XG4gICAgdGhpcy5zY29wZURlcHRoID0gX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aDtcbiAgICB0aGlzLmlzVHlwZSA9IF9iYXNlLnN0YXRlLmlzVHlwZTtcbiAgICB0aGlzLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB0aGlzLmpzeFJvbGUgPSBudWxsO1xuICAgIHRoaXMuc2hhZG93c0dsb2JhbCA9IGZhbHNlO1xuICAgIHRoaXMuaXNBc3luY09wZXJhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29udGV4dElkID0gbnVsbDtcbiAgICB0aGlzLnJoc0VuZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmlzRXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgIHRoaXMubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzID0gMDtcbiAgICB0aGlzLm51bU51bGxpc2hDb2FsZXNjZUVuZHMgPSAwO1xuICAgIHRoaXMuaXNPcHRpb25hbENoYWluU3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzT3B0aW9uYWxDaGFpbkVuZCA9IGZhbHNlO1xuICAgIHRoaXMuc3Vic2NyaXB0U3RhcnRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5udWxsaXNoU3RhcnRJbmRleCA9IG51bGw7XG4gIH1cblxuICBcbiAgXG4gIFxuICBcbiAgXG4gIFxuICBcbiAgXG4gIC8vIEluaXRpYWxseSBmYWxzZSBmb3IgYWxsIHRva2VucywgdGhlbiBtYXkgYmUgY29tcHV0ZWQgaW4gYSBmb2xsb3ctdXAgc3RlcCB0aGF0IGRvZXMgc2NvcGVcbiAgLy8gYW5hbHlzaXMuXG4gIFxuICAvLyBJbml0aWFsbHkgZmFsc2UgZm9yIGFsbCB0b2tlbnMsIGJ1dCBtYXkgYmUgc2V0IGR1cmluZyB0cmFuc2Zvcm0gdG8gbWFyayBpdCBhcyBjb250YWluaW5nIGFuXG4gIC8vIGF3YWl0IG9wZXJhdGlvbi5cbiAgXG4gIFxuICAvLyBGb3IgYXNzaWdubWVudHMsIHRoZSBpbmRleCBvZiB0aGUgUkhTLiBGb3IgZXhwb3J0IHRva2VucywgdGhlIGVuZCBvZiB0aGUgZXhwb3J0LlxuICBcbiAgLy8gRm9yIGNsYXNzIHRva2VucywgcmVjb3JkcyBpZiB0aGUgY2xhc3MgaXMgYSBjbGFzcyBleHByZXNzaW9uIG9yIGEgY2xhc3Mgc3RhdGVtZW50LlxuICBcbiAgLy8gTnVtYmVyIG9mIHRpbWVzIHRvIGluc2VydCBhIGBudWxsaXNoQ29hbGVzY2UoYCBzbmlwcGV0IGJlZm9yZSB0aGlzIHRva2VuLlxuICBcbiAgLy8gTnVtYmVyIG9mIHRpbWVzIHRvIGluc2VydCBhIGApYCBzbmlwcGV0IGFmdGVyIHRoaXMgdG9rZW4uXG4gIFxuICAvLyBJZiB0cnVlLCBpbnNlcnQgYW4gYG9wdGlvbmFsQ2hhaW4oW2Agc25pcHBldCBiZWZvcmUgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIElmIHRydWUsIGluc2VydCBhIGBdKWAgc25pcHBldCBhZnRlciB0aGlzIHRva2VuLlxuICBcbiAgLy8gVGFnIGZvciBgLmAsIGA/LmAsIGBbYCwgYD8uW2AsIGAoYCwgYW5kIGA/LihgIHRvIGRlbm90ZSB0aGUgXCJyb290XCIgdG9rZW4gZm9yIHRoaXNcbiAgLy8gc3Vic2NyaXB0IGNoYWluLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYWluIGlzIGFuIG9wdGlvbmFsIGNoYWluLlxuICBcbiAgLy8gVGFnIGZvciBgPz9gIG9wZXJhdG9ycyB0byBkZW5vdGUgdGhlIHJvb3QgdG9rZW4gZm9yIHRoaXMgbnVsbGlzaCBjb2FsZXNjaW5nIGNhbGwuXG4gIFxufSBleHBvcnRzLlRva2VuID0gVG9rZW47XG5cbi8vICMjIFRva2VuaXplclxuXG4vLyBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuXG4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zLnB1c2gobmV3IFRva2VuKCkpO1xuICBuZXh0VG9rZW4oKTtcbn0gZXhwb3J0cy5uZXh0ID0gbmV4dDtcblxuLy8gQ2FsbCBpbnN0ZWFkIG9mIG5leHQgd2hlbiBpbnNpZGUgYSB0ZW1wbGF0ZSwgc2luY2UgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LlxuIGZ1bmN0aW9uIG5leHRUZW1wbGF0ZVRva2VuKCkge1xuICBfYmFzZS5zdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIF9iYXNlLnN0YXRlLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUucG9zO1xuICByZWFkVG1wbFRva2VuKCk7XG59IGV4cG9ydHMubmV4dFRlbXBsYXRlVG9rZW4gPSBuZXh0VGVtcGxhdGVUb2tlbjtcblxuLy8gVGhlIHRva2VuaXplciBuZXZlciBwYXJzZXMgcmVnZXhlcyBieSBkZWZhdWx0LiBJbnN0ZWFkLCB0aGUgcGFyc2VyIGlzIHJlc3BvbnNpYmxlIGZvclxuLy8gaW5zdHJ1Y3RpbmcgaXQgdG8gcGFyc2UgYSByZWdleCB3aGVuIHdlIHNlZSBhIHNsYXNoIGF0IHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLlxuIGZ1bmN0aW9uIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKSB7XG4gIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbikge1xuICAgIC0tX2Jhc2Uuc3RhdGUucG9zO1xuICB9XG4gIHJlYWRSZWdleHAoKTtcbn0gZXhwb3J0cy5yZXRva2VuaXplU2xhc2hBc1JlZ2V4ID0gcmV0b2tlbml6ZVNsYXNoQXNSZWdleDtcblxuIGZ1bmN0aW9uIHB1c2hUeXBlQ29udGV4dChleGlzdGluZ1Rva2Vuc0luVHlwZSkge1xuICBmb3IgKGxldCBpID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIGV4aXN0aW5nVG9rZW5zSW5UeXBlOyBpIDwgX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLmlzVHlwZSA9IHRydWU7XG4gIH1cbiAgY29uc3Qgb2xkSXNUeXBlID0gX2Jhc2Uuc3RhdGUuaXNUeXBlO1xuICBfYmFzZS5zdGF0ZS5pc1R5cGUgPSB0cnVlO1xuICByZXR1cm4gb2xkSXNUeXBlO1xufSBleHBvcnRzLnB1c2hUeXBlQ29udGV4dCA9IHB1c2hUeXBlQ29udGV4dDtcblxuIGZ1bmN0aW9uIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSkge1xuICBfYmFzZS5zdGF0ZS5pc1R5cGUgPSBvbGRJc1R5cGU7XG59IGV4cG9ydHMucG9wVHlwZUNvbnRleHQgPSBwb3BUeXBlQ29udGV4dDtcblxuIGZ1bmN0aW9uIGVhdCh0eXBlKSB7XG4gIGlmIChtYXRjaCh0eXBlKSkge1xuICAgIG5leHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0gZXhwb3J0cy5lYXQgPSBlYXQ7XG5cbiBmdW5jdGlvbiBlYXRUeXBlVG9rZW4odG9rZW5UeXBlKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9iYXNlLnN0YXRlLmlzVHlwZTtcbiAgX2Jhc2Uuc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgZWF0KHRva2VuVHlwZSk7XG4gIF9iYXNlLnN0YXRlLmlzVHlwZSA9IG9sZElzVHlwZTtcbn0gZXhwb3J0cy5lYXRUeXBlVG9rZW4gPSBlYXRUeXBlVG9rZW47XG5cbiBmdW5jdGlvbiBtYXRjaCh0eXBlKSB7XG4gIHJldHVybiBfYmFzZS5zdGF0ZS50eXBlID09PSB0eXBlO1xufSBleHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5cbiBmdW5jdGlvbiBsb29rYWhlYWRUeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHlwZTtcbn0gZXhwb3J0cy5sb29rYWhlYWRUeXBlID0gbG9va2FoZWFkVHlwZTtcblxuIGNsYXNzIFR5cGVBbmRLZXl3b3JkIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xuICB9XG59IGV4cG9ydHMuVHlwZUFuZEtleXdvcmQgPSBUeXBlQW5kS2V5d29yZDtcblxuIGZ1bmN0aW9uIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG4gIGNvbnN0IGNvbnRleHR1YWxLZXl3b3JkID0gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gbmV3IFR5cGVBbmRLZXl3b3JkKHR5cGUsIGNvbnRleHR1YWxLZXl3b3JkKTtcbn0gZXhwb3J0cy5sb29rYWhlYWRUeXBlQW5kS2V5d29yZCA9IGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkO1xuXG4gZnVuY3Rpb24gbmV4dFRva2VuU3RhcnQoKSB7XG4gIHJldHVybiBuZXh0VG9rZW5TdGFydFNpbmNlKF9iYXNlLnN0YXRlLnBvcyk7XG59IGV4cG9ydHMubmV4dFRva2VuU3RhcnQgPSBuZXh0VG9rZW5TdGFydDtcblxuIGZ1bmN0aW9uIG5leHRUb2tlblN0YXJ0U2luY2UocG9zKSB7XG4gIF93aGl0ZXNwYWNlLnNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHBvcztcbiAgY29uc3Qgc2tpcCA9IF93aGl0ZXNwYWNlLnNraXBXaGl0ZVNwYWNlLmV4ZWMoX2Jhc2UuaW5wdXQpO1xuICByZXR1cm4gcG9zICsgc2tpcFswXS5sZW5ndGg7XG59IGV4cG9ydHMubmV4dFRva2VuU3RhcnRTaW5jZSA9IG5leHRUb2tlblN0YXJ0U2luY2U7XG5cbiBmdW5jdGlvbiBsb29rYWhlYWRDaGFyQ29kZSgpIHtcbiAgcmV0dXJuIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnQoKSk7XG59IGV4cG9ydHMubG9va2FoZWFkQ2hhckNvZGUgPSBsb29rYWhlYWRDaGFyQ29kZTtcblxuLy8gUmVhZCBhIHNpbmdsZSB0b2tlbiwgdXBkYXRpbmcgdGhlIHBhcnNlciBvYmplY3QncyB0b2tlbi1yZWxhdGVkXG4vLyBwcm9wZXJ0aWVzLlxuIGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgc2tpcFNwYWNlKCk7XG4gIF9iYXNlLnN0YXRlLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUucG9zO1xuICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRva2VucyA9IF9iYXNlLnN0YXRlLnRva2VucztcbiAgICAvLyBXZSBub3JtYWxseSBydW4gcGFzdCB0aGUgZW5kIGEgYml0LCBidXQgaWYgd2UncmUgd2F5IHBhc3QgdGhlIGVuZCwgYXZvaWQgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAvLyBBbHNvIGNoZWNrIHRoZSB0b2tlbiBwb3NpdGlvbnMgcmF0aGVyIHRoYW4gdGhlIHR5cGVzIHNpbmNlIHNvbWV0aW1lcyB3ZSByZXdyaXRlIHRoZSB0b2tlblxuICAgIC8vIHR5cGUgdG8gc29tZXRoaW5nIGVsc2UuXG4gICAgaWYgKFxuICAgICAgdG9rZW5zLmxlbmd0aCA+PSAyICYmXG4gICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnN0YXJ0ID49IF9iYXNlLmlucHV0Lmxlbmd0aCAmJlxuICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXS5zdGFydCA+PSBfYmFzZS5pbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgfVxuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuZW9mKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVhZFRva2VuKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKSk7XG59IGV4cG9ydHMubmV4dFRva2VuID0gbmV4dFRva2VuO1xuXG5mdW5jdGlvbiByZWFkVG9rZW4oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChcbiAgICBfaWRlbnRpZmllci5JU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8XG4gICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoIHx8XG4gICAgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbiAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hdFNpZ24pXG4gICkge1xuICAgIF9yZWFkV29yZDIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBnZXRUb2tlbkZyb21Db2RlKGNvZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNraXBCbG9ja0NvbW1lbnQoKSB7XG4gIHdoaWxlIChcbiAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcykgIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrIHx8XG4gICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2hcbiAgKSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgY29tbWVudFwiLCBfYmFzZS5zdGF0ZS5wb3MgLSAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG59XG5cbiBmdW5jdGlvbiBza2lwTGluZUNvbW1lbnQoc3RhcnRTa2lwKSB7XG4gIGxldCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoKF9iYXNlLnN0YXRlLnBvcyArPSBzdGFydFNraXApKTtcbiAgaWYgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIHdoaWxlIChcbiAgICAgIGNoICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCAmJlxuICAgICAgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmNhcnJpYWdlUmV0dXJuICYmXG4gICAgICBjaCAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGluZVNlcGFyYXRvciAmJlxuICAgICAgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvciAmJlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3MgPCBfYmFzZS5pbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnNraXBMaW5lQ29tbWVudCA9IHNraXBMaW5lQ29tbWVudDtcblxuLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFyc2UgYW5kIGFmdGVyIGV2ZXJ5IHRva2VuLiBTa2lwc1xuLy8gd2hpdGVzcGFjZSBhbmQgY29tbWVudHMuXG4gZnVuY3Rpb24gc2tpcFNwYWNlKCkge1xuICB3aGlsZSAoX2Jhc2Uuc3RhdGUucG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoKSB7XG4gICAgY29uc3QgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybjpcbiAgICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZDpcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGluZVNlcGFyYXRvcjpcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGFyYWdyYXBoU2VwYXJhdG9yOlxuICAgICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2g6XG4gICAgICAgIHN3aXRjaCAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSkge1xuICAgICAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXN0ZXJpc2s6XG4gICAgICAgICAgICBfYmFzZS5zdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICAgIHNraXBCbG9ja0NvbW1lbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgICAgIHNraXBMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKF93aGl0ZXNwYWNlLklTX1dISVRFU1BBQ0VbY2hdKSB7XG4gICAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59IGV4cG9ydHMuc2tpcFNwYWNlID0gc2tpcFNwYWNlO1xuXG4vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0cyB2YXJpb3VzIGZpZWxkcywgYW5kIHNraXBzIHRoZSBzcGFjZSBhZnRlciB0aGUgdG9rZW4sIHNvXG4vLyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG4gZnVuY3Rpb24gZmluaXNoVG9rZW4oXG4gIHR5cGUsXG4gIGNvbnRleHR1YWxLZXl3b3JkID0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLk5PTkUsXG4pIHtcbiAgX2Jhc2Uuc3RhdGUuZW5kID0gX2Jhc2Uuc3RhdGUucG9zO1xuICBfYmFzZS5zdGF0ZS50eXBlID0gdHlwZTtcbiAgX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPSBjb250ZXh0dWFsS2V5d29yZDtcbn0gZXhwb3J0cy5maW5pc2hUb2tlbiA9IGZpbmlzaFRva2VuO1xuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuZnVuY3Rpb24gcmVhZFRva2VuX2RvdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIG5leHRDaGFyIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0OSkge1xuICAgIHJlYWROdW1iZXIodHJ1ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3QgJiYgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZG90KSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zICs9IDM7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gIH0gZWxzZSB7XG4gICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5kb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9zbGFzaCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDIpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuc2xhc2gsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKSB7XG4gIC8vICclKidcbiAgbGV0IHRva2VuVHlwZSA9IGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrID8gX3R5cGVzLlRva2VuVHlwZS5zdGFyIDogX3R5cGVzLlRva2VuVHlwZS5tb2R1bG87XG4gIGxldCB3aWR0aCA9IDE7XG4gIGxldCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG5cbiAgLy8gRXhwb25lbnRpYXRpb24gb3BlcmF0b3IgKipcbiAgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrICYmIG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hc3Rlcmlzaykge1xuICAgIHdpZHRoKys7XG4gICAgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDIpO1xuICAgIHRva2VuVHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuZXhwb25lbnQ7XG4gIH1cblxuICAvLyBNYXRjaCAqPSBvciAlPSwgZGlzYWxsb3dpbmcgKj0+IHdoaWNoIGNhbiBiZSB2YWxpZCBpbiBmbG93LlxuICBpZiAoXG4gICAgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvICYmXG4gICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW5cbiAgKSB7XG4gICAgd2lkdGgrKztcbiAgICB0b2tlblR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbjtcbiAgfVxuXG4gIGZpbmlzaE9wKHRva2VuVHlwZSwgd2lkdGgpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSkge1xuICAvLyAnfCYnXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIC8vIHx8PSBvciAmJj1cbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCAzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfHwgb3IgJiZcbiAgICAgIGZpbmlzaE9wKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gX3R5cGVzLlRva2VuVHlwZS5sb2dpY2FsT1IgOiBfdHlwZXMuVG9rZW5UeXBlLmxvZ2ljYWxBTkQsIDIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAvLyAnfD4nXG4gICAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5waXBlbGluZSwgMik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlICYmIF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIC8vICd8fSdcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VCYXJSLCAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbmlzaE9wKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IgOiBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fY2FyZXQoKSB7XG4gIC8vICdeJ1xuICBjb25zdCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbiwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlWE9SLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGx1c19taW4oY29kZSkge1xuICAvLyAnKy0nXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICAvLyBUZW50YXRpdmVseSBjYWxsIHRoaXMgYSBwcmVmaXggb3BlcmF0b3IsIGJ1dCBpdCBtaWdodCBiZSBjaGFuZ2VkIHRvIHBvc3RmaXggbGF0ZXIuXG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5wcmVJbmNEZWMsIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbiwgMik7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGx1c1NpZ24pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnBsdXMsIDEpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUubWludXMsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9sdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVzc1RoYW4pIHtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCAzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gV2Ugc2VlIDw8LCBidXQgbmVlZCB0byBiZSByZWFsbHkgY2FyZWZ1bCBhYm91dCB3aGV0aGVyIHRvIHRyZWF0IGl0IGFzIGFcbiAgICAvLyB0cnVlIGxlZnQtc2hpZnQgb3IgYXMgdHdvIDwgdG9rZW5zLlxuICAgIGlmIChfYmFzZS5zdGF0ZS5pc1R5cGUpIHtcbiAgICAgIC8vIFdpdGhpbiBhIHR5cGUsIDw8IG1pZ2h0IGNvbWUgdXAgaW4gYSBzbmlwcGV0IGxpa2UgYEFycmF5PDxUPigpID0+IHZvaWQ+YCxcbiAgICAgIC8vIHNvIHRyZWF0IGl0IGFzIHR3byA8IHRva2Vucy4gSW1wb3J0YW50bHksIHRoaXMgc2hvdWxkIG9ubHkgb3ZlcnJpZGUgPDxcbiAgICAgIC8vIHJhdGhlciB0aGFuIG90aGVyIHRva2VucyBsaWtlIDw9IC4gSWYgd2UgdHJlYXRlZCA8PSBhcyA8IGluIGEgdHlwZVxuICAgICAgLy8gY29udGV4dCwgdGhlbiB0aGUgc25pcHBldCBgYSBhcyBUIDw9IDFgIHdvdWxkIGluY29ycmVjdGx5IHN0YXJ0IHBhcnNpbmdcbiAgICAgIC8vIGEgdHlwZSBhcmd1bWVudCBvbiBULiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGBhIGFzIFQgPDwgMWBcbiAgICAgIC8vIGJlY2F1c2UgVHlwZVNjcmlwdCBkaXNhbGxvd3MgdGhhdCBzeW50YXguXG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3V0c2lkZSBhIHR5cGUsIHRoaXMgbWlnaHQgYmUgYSB0cnVlIGxlZnQtc2hpZnQgb3BlcmF0b3IsIG9yIGl0IG1pZ2h0XG4gICAgICAvLyBzdGlsbCBiZSB0d28gb3Blbi10eXBlLWFyZyB0b2tlbnMsIHN1Y2ggYXMgaW4gYGY8PFQ+KCkgPT4gdm9pZD4oKWAuIFdlXG4gICAgICAvLyBsb29rIGF0IHRoZSB0b2tlbiB3aGlsZSBjb25zaWRlcmluZyB0aGUgYGZgLCBzbyB3ZSBkb24ndCB5ZXQga25vdyB0aGF0XG4gICAgICAvLyB3ZSdyZSBpbiBhIHR5cGUgY29udGV4dC4gSW4gdGhpcyBjYXNlLCB3ZSBpbml0aWFsbHkgdG9rZW5pemUgYXMgYVxuICAgICAgLy8gbGVmdC1zaGlmdCBhbmQgY29ycmVjdCBhZnRlci10aGUtZmFjdCBhcyBuZWNlc3NhcnkgaW5cbiAgICAgIC8vIHRzUGFyc2VUeXBlQXJndW1lbnRzV2l0aFBvc3NpYmxlQml0c2hpZnQgLlxuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5iaXRTaGlmdEwsIDIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPD1cbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnJlbGF0aW9uYWxPckVxdWFsLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fZ3QoKSB7XG4gIGlmIChfYmFzZS5zdGF0ZS5pc1R5cGUpIHtcbiAgICAvLyBBdm9pZCByaWdodC1zaGlmdCBmb3IgdGhpbmdzIGxpa2UgYEFycmF5PEFycmF5PHN0cmluZz4+YCBhbmRcbiAgICAvLyBncmVhdGVyLXRoYW4tb3ItZXF1YWwgZm9yIHRoaW5ncyBsaWtlIGBjb25zdCBhOiBBcnJheTxudW1iZXI+PVtdO2AuXG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbiwgMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICBjb25zdCBzaXplID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW4gPyAzIDogMjtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyBzaXplKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCBzaXplICsgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRSLCBzaXplKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPj1cbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnJlbGF0aW9uYWxPckVxdWFsLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuLCAxKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlaW50ZXJwcmV0IGEgcG9zc2libGUgPiB0b2tlbiB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBhIHR5cGUgdG8gYSBub24tdHlwZVxuICogY29udGV4dC5cbiAqXG4gKiBUaGlzIGNvbWVzIHVwIGluIHR3byBzaXR1YXRpb25zIHdoZXJlID49IG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXMgb25lIHRva2VuOlxuICogLSBBZnRlciBhbiBgYXNgIGV4cHJlc3Npb24sIGxpa2UgaW4gdGhlIGNvZGUgYGEgYXMgVCA+PSAxYC5cbiAqIC0gSW4gYSB0eXBlIGFyZ3VtZW50IGluIGFuIGV4cHJlc3Npb24gY29udGV4dCwgZS5nLiBgZihhIDwgYiwgYyA+PSBkKWAsIHdlXG4gKiAgIG5lZWQgdG8gc2VlIHRoZSB0b2tlbiBhcyA+PSBzbyB0aGF0IHdlIGdldCBhbiBlcnJvciBhbmQgYmFja3RyYWNrIHRvXG4gKiAgIG5vcm1hbCBleHByZXNzaW9uIHBhcnNpbmcuXG4gKlxuICogT3RoZXIgc2l0dWF0aW9ucyByZXF1aXJlID49IHRvIGJlIHNlZW4gYXMgdHdvIHRva2VucywgZS5nLlxuICogYGNvbnN0IHg6IEFycmF5PFQ+PVtdO2AsIHNvIGl0J3MgaW1wb3J0YW50IHRvIHRyZWF0ID4gYXMgaXRzIG93biB0b2tlbiBpblxuICogdHlwaWNhbCB0eXBlIHBhcnNpbmcgc2l0dWF0aW9ucy5cbiAqL1xuIGZ1bmN0aW9uIHJlc2Nhbl9ndCgpIHtcbiAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3MgLT0gMTtcbiAgICByZWFkVG9rZW5fZ3QoKTtcbiAgfVxufSBleHBvcnRzLnJlc2Nhbl9ndCA9IHJlc2Nhbl9ndDtcblxuZnVuY3Rpb24gcmVhZFRva2VuX2VxX2V4Y2woY29kZSkge1xuICAvLyAnPSEnXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcbiAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuZXF1YWxpdHksIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMikgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvID8gMyA6IDIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8gJiYgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgLy8gJz0+J1xuICAgIF9iYXNlLnN0YXRlLnBvcyArPSAyO1xuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuICAgIHJldHVybjtcbiAgfVxuICBmaW5pc2hPcChjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5lcXVhbHNUbyA/IF90eXBlcy5Ub2tlblR5cGUuZXEgOiBfdHlwZXMuVG9rZW5UeXBlLmJhbmcsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcXVlc3Rpb24oKSB7XG4gIC8vICc/J1xuICBjb25zdCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG4gIGNvbnN0IG5leHRDaGFyMiA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMik7XG4gIGlmIChcbiAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucXVlc3Rpb25NYXJrICYmXG4gICAgLy8gSW4gRmxvdyAoYnV0IG5vdCBUeXBlU2NyaXB0KSwgPz9zdHJpbmcgaXMgYSB2YWxpZCB0eXBlIHRoYXQgc2hvdWxkIGJlXG4gICAgLy8gdG9rZW5pemVkIGFzIHR3byBpbmRpdmlkdWFsID8gdG9rZW5zLlxuICAgICEoX2Jhc2UuaXNGbG93RW5hYmxlZCAmJiBfYmFzZS5zdGF0ZS5pc1R5cGUpXG4gICkge1xuICAgIGlmIChuZXh0Q2hhcjIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgICAvLyAnPz89J1xuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAnPz8nXG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLm51bGxpc2hDb2FsZXNjaW5nLCAyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmRvdCAmJlxuICAgICEobmV4dENoYXIyID49IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MCAmJiBuZXh0Q2hhcjIgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5KVxuICApIHtcbiAgICAvLyAnLicgbm90IGZvbGxvd2VkIGJ5IGEgbnVtYmVyXG4gICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCk7XG4gIH0gZWxzZSB7XG4gICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbik7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGdldFRva2VuRnJvbUNvZGUoY29kZSkge1xuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLm51bWJlclNpZ246XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuaGFzaCk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgYSBkb3QgZGVwZW5kcyBvbiB3aGV0aGVyIGl0IGlzIGZvbGxvd2VkXG4gICAgLy8gYnkgYSBkaWdpdCBvciBhbm90aGVyIHR3byBkb3RzLlxuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3Q6XG4gICAgICByZWFkVG9rZW5fZG90KCk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBQdW5jdHVhdGlvbiB0b2tlbnMuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0UGFyZW50aGVzaXM6XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0UGFyZW50aGVzaXM6XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnNlbWljb2xvbjpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbW1hOlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRTcXVhcmVCcmFja2V0OlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldDpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlOlxuICAgICAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQgJiYgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckwsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlOlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbG9uOlxuICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbG9uKSB7XG4gICAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuZG91YmxlQ29sb24sIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdWVzdGlvbk1hcms6XG4gICAgICByZWFkVG9rZW5fcXVlc3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbjpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5hdCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmdyYXZlQWNjZW50OlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MDoge1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICAgICAgLy8gJzB4JywgJzBYJywgJzBvJywgJzBPJywgJzBiJywgJzBCJ1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlWCB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlWCB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQiB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlQlxuICAgICAgKSB7XG4gICAgICAgIHJlYWRSYWRpeE51bWJlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFueXRoaW5nIGVsc2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbFxuICAgIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDE6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDI6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDM6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDQ6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDU6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDY6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDc6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDg6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDk6XG4gICAgICByZWFkTnVtYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFF1b3RlcyBwcm9kdWNlIHN0cmluZ3MuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdW90YXRpb25NYXJrOlxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXBvc3Ryb3BoZTpcbiAgICAgIHJlYWRTdHJpbmcoY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBPcGVyYXRvcnMgYXJlIHBhcnNlZCBpbmxpbmUgaW4gdGlueSBzdGF0ZSBtYWNoaW5lcy4gJz0nIChjaGFyQ29kZXMuZXF1YWxzVG8pIGlzXG4gICAgLy8gb2Z0ZW4gcmVmZXJyZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2ZcbiAgICAvLyBjaGFyYWN0ZXJzIGl0IGlzIGdpdmVuIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHJldHVybnMgYSB0b2tlblxuICAgIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1bWVudC5cblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2g6XG4gICAgICByZWFkVG9rZW5fc2xhc2goKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGVyY2VudFNpZ246XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hc3RlcmlzazpcbiAgICAgIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXI6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hbXBlcnNhbmQ6XG4gICAgICByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNhcmV0OlxuICAgICAgcmVhZFRva2VuX2NhcmV0KCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnBsdXNTaWduOlxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaDpcbiAgICAgIHJlYWRUb2tlbl9wbHVzX21pbihjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVzc1RoYW46XG4gICAgICByZWFkVG9rZW5fbHQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICByZWFkVG9rZW5fZ3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG86XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5leGNsYW1hdGlvbk1hcms6XG4gICAgICByZWFkVG9rZW5fZXFfZXhjbChjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMudGlsZGU6XG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnRpbGRlLCAxKTtcbiAgICAgIHJldHVybjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpfSdgLCBfYmFzZS5zdGF0ZS5wb3MpO1xufSBleHBvcnRzLmdldFRva2VuRnJvbUNvZGUgPSBnZXRUb2tlbkZyb21Db2RlO1xuXG5mdW5jdGlvbiBmaW5pc2hPcCh0eXBlLCBzaXplKSB7XG4gIF9iYXNlLnN0YXRlLnBvcyArPSBzaXplO1xuICBmaW5pc2hUb2tlbih0eXBlKTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlZ2V4cCgpIHtcbiAgY29uc3Qgc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBpbkNsYXNzID0gZmFsc2U7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uXCIsIHN0YXJ0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgICAgaW5DbGFzcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldCAmJiBpbkNsYXNzKSB7XG4gICAgICAgIGluQ2xhc3MgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2ggJiYgIWluQ2xhc3MpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoO1xuICAgIH1cbiAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgfVxuICArK19iYXNlLnN0YXRlLnBvcztcbiAgLy8gTmVlZCB0byB1c2UgYHNraXBXb3JkYCBiZWNhdXNlICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaGVyZSAoZG9uJ3QgYXNrKS5cbiAgc2tpcFdvcmQoKTtcblxuICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnJlZ2V4cCk7XG59XG5cbi8qKlxuICogUmVhZCBhIGRlY2ltYWwgaW50ZWdlci4gTm90ZSB0aGF0IHRoaXMgY2FuJ3QgYmUgdW5pZmllZCB3aXRoIHRoZSBzaW1pbGFyIGNvZGVcbiAqIGluIHJlYWRSYWRpeE51bWJlciAod2hpY2ggYWxzbyBoYW5kbGVzIGhleCBkaWdpdHMpIGJlY2F1c2UgXCJlXCIgbmVlZHMgdG8gYmVcbiAqIHRoZSBlbmQgb2YgdGhlIGludGVnZXIgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkgaGFuZGxlIHNjaWVudGlmaWMgbm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlYWRJbnQoKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5KSB8fCBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy51bmRlcnNjb3JlKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRSYWRpeE51bWJlcigpIHtcbiAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7IC8vIDB4XG5cbiAgLy8gV2FsayB0byB0aGUgZW5kIG9mIHRoZSBudW1iZXIsIGFsbG93aW5nIGhleCBkaWdpdHMuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlRikgfHxcbiAgICAgIChjb2RlID49IF9jaGFyY29kZXMuY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy51cHBlcmNhc2VGKSB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudW5kZXJzY29yZVxuICAgICkge1xuICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZU4pIHtcbiAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJpZ2ludCk7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5udW0pO1xuICB9XG59XG5cbi8vIFJlYWQgYW4gaW50ZWdlciwgb2N0YWwgaW50ZWdlciwgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuZnVuY3Rpb24gcmVhZE51bWJlcihzdGFydHNXaXRoRG90KSB7XG4gIGxldCBpc0JpZ0ludCA9IGZhbHNlO1xuICBsZXQgaXNEZWNpbWFsID0gZmFsc2U7XG5cbiAgaWYgKCFzdGFydHNXaXRoRG90KSB7XG4gICAgcmVhZEludCgpO1xuICB9XG5cbiAgbGV0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmRvdCkge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlRSB8fCBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlRSkge1xuICAgIG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdCgrK19iYXNlLnN0YXRlLnBvcyk7XG4gICAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5wbHVzU2lnbiB8fCBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaCkge1xuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgfVxuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTikge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIGlzQmlnSW50ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTSkge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIGlzRGVjaW1hbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNCaWdJbnQpIHtcbiAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJpZ2ludCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzRGVjaW1hbCkge1xuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuZGVjaW1hbCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5udW0pO1xufVxuXG5mdW5jdGlvbiByZWFkU3RyaW5nKHF1b3RlKSB7XG4gIF9iYXNlLnN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+PSBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG4gICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKTtcbn1cblxuLy8gUmVhZHMgdGVtcGxhdGUgc3RyaW5nIHRva2Vucy5cbmZ1bmN0aW9uIHJlYWRUbXBsVG9rZW4oKSB7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChcbiAgICAgIGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmF2ZUFjY2VudCB8fFxuICAgICAgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb2xsYXJTaWduICYmIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKVxuICAgICkge1xuICAgICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA9PT0gX2Jhc2Uuc3RhdGUuc3RhcnQgJiYgbWF0Y2goX3R5cGVzLlRva2VuVHlwZS50ZW1wbGF0ZSkpIHtcbiAgICAgICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb2xsYXJTaWduKSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnRlbXBsYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgIH1cbiAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgfVxufVxuXG4vLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgd29yZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHNuaXBwZXQgYXQgdGhlIGVuZCBvZlxuLy8gcmVhZFdvcmQsIGJ1dCBjYWxsaW5nIHNraXBXb3JkIGZyb20gcmVhZFdvcmQgc2VlbXMgdG8gc2xpZ2h0bHkgaHVydCBwZXJmb3JtYW5jZSBmcm9tIHNvbWUgcm91Z2hcbi8vIG1lYXN1cmVtZW50cy5cbiBmdW5jdGlvbiBza2lwV29yZCgpIHtcbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChfaWRlbnRpZmllci5JU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIC8vIFxcdVxuICAgICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZSkge1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoICYmXG4gICAgICAgICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5yaWdodEN1cmx5QnJhY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnNraXBXb3JkID0gc2tpcFdvcmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIERldGVybWluZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVkIGltcG9ydCBvciBuYW1lZCBleHBvcnQgc3BlY2lmaWVyLlxuICpcbiAqIFRoaXMgc3ludGF4IGlzIHRoZSBgYWAgZnJvbSBzdGF0ZW1lbnRzIGxpa2UgdGhlc2U6XG4gKiBpbXBvcnQge0F9IGZyb20gXCIuL2Zvb1wiO1xuICogZXhwb3J0IHtBfTtcbiAqIGV4cG9ydCB7QX0gZnJvbSBcIi4vZm9vXCI7XG4gKlxuICogQXMgaXQgdHVybnMgb3V0LCB3ZSBjYW4gZXhhY3RseSBjaGFyYWN0ZXJpemUgdGhlIHN5bnRheCBtZWFuaW5nIGJ5IHNpbXBseVxuICogY291bnRpbmcgdGhlIG51bWJlciBvZiB0b2tlbnMsIHdoaWNoIGNhbiBiZSBmcm9tIDEgdG8gNDpcbiAqIHtBfVxuICoge3R5cGUgQX1cbiAqIHtBIGFzIEJ9XG4gKiB7dHlwZSBBIGFzIEJ9XG4gKlxuICogSW4gdGhlIHR5cGUgY2FzZSwgd2UgbmV2ZXIgYWN0dWFsbHkgbmVlZCB0aGUgbmFtZXMgaW4gcHJhY3RpY2UsIHNvIGRvbid0IGdldFxuICogdGhlbS5cbiAqXG4gKiBUT0RPOiBUaGVyZSdzIHNvbWUgcmVkdW5kYW5jeSB3aXRoIHRoZSB0eXBlIGRldGVjdGlvbiBoZXJlIGFuZCB0aGUgaXNUeXBlXG4gKiBmbGFnIHRoYXQncyBhbHJlYWR5IHByZXNlbnQgb24gdG9rZW5zIGluIFRTIG1vZGUuIFRoaXMgZnVuY3Rpb24gY291bGRcbiAqIHBvdGVudGlhbGx5IGJlIHNpbXBsaWZpZWQgYW5kL29yIHB1c2hlZCB0byB0aGUgY2FsbCBzaXRlcyB0byBhdm9pZCB0aGUgb2JqZWN0XG4gKiBhbGxvY2F0aW9uLlxuICovXG4gZnVuY3Rpb24gZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyhcbiAgdG9rZW5zLFxuICBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKSxcbikge1xuICBsZXQgZW5kSW5kZXggPSBpbmRleCArIDE7XG4gIGlmIChpc1NwZWNpZmllckVuZCh0b2tlbnMsIGVuZEluZGV4KSkge1xuICAgIC8vIGltcG9ydCB7QX1cbiAgICBjb25zdCBuYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogZmFsc2UsXG4gICAgICBsZWZ0TmFtZTogbmFtZSxcbiAgICAgIHJpZ2h0TmFtZTogbmFtZSxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgZW5kSW5kZXgrKztcbiAgaWYgKGlzU3BlY2lmaWVyRW5kKHRva2VucywgZW5kSW5kZXgpKSB7XG4gICAgLy8gaW1wb3J0IHt0eXBlIEF9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogdHJ1ZSxcbiAgICAgIGxlZnROYW1lOiBudWxsLFxuICAgICAgcmlnaHROYW1lOiBudWxsLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge0EgYXMgQn1cbiAgICByZXR1cm4ge1xuICAgICAgaXNUeXBlOiBmYWxzZSxcbiAgICAgIGxlZnROYW1lOiB0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSxcbiAgICAgIHJpZ2h0TmFtZTogdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgQSBhcyBCfVxuICAgIHJldHVybiB7XG4gICAgICBpc1R5cGU6IHRydWUsXG4gICAgICBsZWZ0TmFtZTogbnVsbCxcbiAgICAgIHJpZ2h0TmFtZTogbnVsbCxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGltcG9ydC9leHBvcnQgc3BlY2lmaWVyIGF0ICR7aW5kZXh9YCk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm87XG5cbmZ1bmN0aW9uIGlzU3BlY2lmaWVyRW5kKHRva2VucywgaW5kZXgpIHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgcmV0dXJuIHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSIHx8IHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuY29tbWE7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvLyBVc2UgYSBNYXAgcmF0aGVyIHRoYW4gb2JqZWN0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgX19wcm90b19fIGFjY2Vzcy5cbmV4cG9ydHMuIGRlZmF1bHQgPSBuZXcgTWFwKFtcbiAgW1wicXVvdFwiLCBcIlxcdTAwMjJcIl0sXG4gIFtcImFtcFwiLCBcIiZcIl0sXG4gIFtcImFwb3NcIiwgXCJcXHUwMDI3XCJdLFxuICBbXCJsdFwiLCBcIjxcIl0sXG4gIFtcImd0XCIsIFwiPlwiXSxcbiAgW1wibmJzcFwiLCBcIlxcdTAwQTBcIl0sXG4gIFtcImlleGNsXCIsIFwiXFx1MDBBMVwiXSxcbiAgW1wiY2VudFwiLCBcIlxcdTAwQTJcIl0sXG4gIFtcInBvdW5kXCIsIFwiXFx1MDBBM1wiXSxcbiAgW1wiY3VycmVuXCIsIFwiXFx1MDBBNFwiXSxcbiAgW1wieWVuXCIsIFwiXFx1MDBBNVwiXSxcbiAgW1wiYnJ2YmFyXCIsIFwiXFx1MDBBNlwiXSxcbiAgW1wic2VjdFwiLCBcIlxcdTAwQTdcIl0sXG4gIFtcInVtbFwiLCBcIlxcdTAwQThcIl0sXG4gIFtcImNvcHlcIiwgXCJcXHUwMEE5XCJdLFxuICBbXCJvcmRmXCIsIFwiXFx1MDBBQVwiXSxcbiAgW1wibGFxdW9cIiwgXCJcXHUwMEFCXCJdLFxuICBbXCJub3RcIiwgXCJcXHUwMEFDXCJdLFxuICBbXCJzaHlcIiwgXCJcXHUwMEFEXCJdLFxuICBbXCJyZWdcIiwgXCJcXHUwMEFFXCJdLFxuICBbXCJtYWNyXCIsIFwiXFx1MDBBRlwiXSxcbiAgW1wiZGVnXCIsIFwiXFx1MDBCMFwiXSxcbiAgW1wicGx1c21uXCIsIFwiXFx1MDBCMVwiXSxcbiAgW1wic3VwMlwiLCBcIlxcdTAwQjJcIl0sXG4gIFtcInN1cDNcIiwgXCJcXHUwMEIzXCJdLFxuICBbXCJhY3V0ZVwiLCBcIlxcdTAwQjRcIl0sXG4gIFtcIm1pY3JvXCIsIFwiXFx1MDBCNVwiXSxcbiAgW1wicGFyYVwiLCBcIlxcdTAwQjZcIl0sXG4gIFtcIm1pZGRvdFwiLCBcIlxcdTAwQjdcIl0sXG4gIFtcImNlZGlsXCIsIFwiXFx1MDBCOFwiXSxcbiAgW1wic3VwMVwiLCBcIlxcdTAwQjlcIl0sXG4gIFtcIm9yZG1cIiwgXCJcXHUwMEJBXCJdLFxuICBbXCJyYXF1b1wiLCBcIlxcdTAwQkJcIl0sXG4gIFtcImZyYWMxNFwiLCBcIlxcdTAwQkNcIl0sXG4gIFtcImZyYWMxMlwiLCBcIlxcdTAwQkRcIl0sXG4gIFtcImZyYWMzNFwiLCBcIlxcdTAwQkVcIl0sXG4gIFtcImlxdWVzdFwiLCBcIlxcdTAwQkZcIl0sXG4gIFtcIkFncmF2ZVwiLCBcIlxcdTAwQzBcIl0sXG4gIFtcIkFhY3V0ZVwiLCBcIlxcdTAwQzFcIl0sXG4gIFtcIkFjaXJjXCIsIFwiXFx1MDBDMlwiXSxcbiAgW1wiQXRpbGRlXCIsIFwiXFx1MDBDM1wiXSxcbiAgW1wiQXVtbFwiLCBcIlxcdTAwQzRcIl0sXG4gIFtcIkFyaW5nXCIsIFwiXFx1MDBDNVwiXSxcbiAgW1wiQUVsaWdcIiwgXCJcXHUwMEM2XCJdLFxuICBbXCJDY2VkaWxcIiwgXCJcXHUwMEM3XCJdLFxuICBbXCJFZ3JhdmVcIiwgXCJcXHUwMEM4XCJdLFxuICBbXCJFYWN1dGVcIiwgXCJcXHUwMEM5XCJdLFxuICBbXCJFY2lyY1wiLCBcIlxcdTAwQ0FcIl0sXG4gIFtcIkV1bWxcIiwgXCJcXHUwMENCXCJdLFxuICBbXCJJZ3JhdmVcIiwgXCJcXHUwMENDXCJdLFxuICBbXCJJYWN1dGVcIiwgXCJcXHUwMENEXCJdLFxuICBbXCJJY2lyY1wiLCBcIlxcdTAwQ0VcIl0sXG4gIFtcIkl1bWxcIiwgXCJcXHUwMENGXCJdLFxuICBbXCJFVEhcIiwgXCJcXHUwMEQwXCJdLFxuICBbXCJOdGlsZGVcIiwgXCJcXHUwMEQxXCJdLFxuICBbXCJPZ3JhdmVcIiwgXCJcXHUwMEQyXCJdLFxuICBbXCJPYWN1dGVcIiwgXCJcXHUwMEQzXCJdLFxuICBbXCJPY2lyY1wiLCBcIlxcdTAwRDRcIl0sXG4gIFtcIk90aWxkZVwiLCBcIlxcdTAwRDVcIl0sXG4gIFtcIk91bWxcIiwgXCJcXHUwMEQ2XCJdLFxuICBbXCJ0aW1lc1wiLCBcIlxcdTAwRDdcIl0sXG4gIFtcIk9zbGFzaFwiLCBcIlxcdTAwRDhcIl0sXG4gIFtcIlVncmF2ZVwiLCBcIlxcdTAwRDlcIl0sXG4gIFtcIlVhY3V0ZVwiLCBcIlxcdTAwREFcIl0sXG4gIFtcIlVjaXJjXCIsIFwiXFx1MDBEQlwiXSxcbiAgW1wiVXVtbFwiLCBcIlxcdTAwRENcIl0sXG4gIFtcIllhY3V0ZVwiLCBcIlxcdTAwRERcIl0sXG4gIFtcIlRIT1JOXCIsIFwiXFx1MDBERVwiXSxcbiAgW1wic3psaWdcIiwgXCJcXHUwMERGXCJdLFxuICBbXCJhZ3JhdmVcIiwgXCJcXHUwMEUwXCJdLFxuICBbXCJhYWN1dGVcIiwgXCJcXHUwMEUxXCJdLFxuICBbXCJhY2lyY1wiLCBcIlxcdTAwRTJcIl0sXG4gIFtcImF0aWxkZVwiLCBcIlxcdTAwRTNcIl0sXG4gIFtcImF1bWxcIiwgXCJcXHUwMEU0XCJdLFxuICBbXCJhcmluZ1wiLCBcIlxcdTAwRTVcIl0sXG4gIFtcImFlbGlnXCIsIFwiXFx1MDBFNlwiXSxcbiAgW1wiY2NlZGlsXCIsIFwiXFx1MDBFN1wiXSxcbiAgW1wiZWdyYXZlXCIsIFwiXFx1MDBFOFwiXSxcbiAgW1wiZWFjdXRlXCIsIFwiXFx1MDBFOVwiXSxcbiAgW1wiZWNpcmNcIiwgXCJcXHUwMEVBXCJdLFxuICBbXCJldW1sXCIsIFwiXFx1MDBFQlwiXSxcbiAgW1wiaWdyYXZlXCIsIFwiXFx1MDBFQ1wiXSxcbiAgW1wiaWFjdXRlXCIsIFwiXFx1MDBFRFwiXSxcbiAgW1wiaWNpcmNcIiwgXCJcXHUwMEVFXCJdLFxuICBbXCJpdW1sXCIsIFwiXFx1MDBFRlwiXSxcbiAgW1wiZXRoXCIsIFwiXFx1MDBGMFwiXSxcbiAgW1wibnRpbGRlXCIsIFwiXFx1MDBGMVwiXSxcbiAgW1wib2dyYXZlXCIsIFwiXFx1MDBGMlwiXSxcbiAgW1wib2FjdXRlXCIsIFwiXFx1MDBGM1wiXSxcbiAgW1wib2NpcmNcIiwgXCJcXHUwMEY0XCJdLFxuICBbXCJvdGlsZGVcIiwgXCJcXHUwMEY1XCJdLFxuICBbXCJvdW1sXCIsIFwiXFx1MDBGNlwiXSxcbiAgW1wiZGl2aWRlXCIsIFwiXFx1MDBGN1wiXSxcbiAgW1wib3NsYXNoXCIsIFwiXFx1MDBGOFwiXSxcbiAgW1widWdyYXZlXCIsIFwiXFx1MDBGOVwiXSxcbiAgW1widWFjdXRlXCIsIFwiXFx1MDBGQVwiXSxcbiAgW1widWNpcmNcIiwgXCJcXHUwMEZCXCJdLFxuICBbXCJ1dW1sXCIsIFwiXFx1MDBGQ1wiXSxcbiAgW1wieWFjdXRlXCIsIFwiXFx1MDBGRFwiXSxcbiAgW1widGhvcm5cIiwgXCJcXHUwMEZFXCJdLFxuICBbXCJ5dW1sXCIsIFwiXFx1MDBGRlwiXSxcbiAgW1wiT0VsaWdcIiwgXCJcXHUwMTUyXCJdLFxuICBbXCJvZWxpZ1wiLCBcIlxcdTAxNTNcIl0sXG4gIFtcIlNjYXJvblwiLCBcIlxcdTAxNjBcIl0sXG4gIFtcInNjYXJvblwiLCBcIlxcdTAxNjFcIl0sXG4gIFtcIll1bWxcIiwgXCJcXHUwMTc4XCJdLFxuICBbXCJmbm9mXCIsIFwiXFx1MDE5MlwiXSxcbiAgW1wiY2lyY1wiLCBcIlxcdTAyQzZcIl0sXG4gIFtcInRpbGRlXCIsIFwiXFx1MDJEQ1wiXSxcbiAgW1wiQWxwaGFcIiwgXCJcXHUwMzkxXCJdLFxuICBbXCJCZXRhXCIsIFwiXFx1MDM5MlwiXSxcbiAgW1wiR2FtbWFcIiwgXCJcXHUwMzkzXCJdLFxuICBbXCJEZWx0YVwiLCBcIlxcdTAzOTRcIl0sXG4gIFtcIkVwc2lsb25cIiwgXCJcXHUwMzk1XCJdLFxuICBbXCJaZXRhXCIsIFwiXFx1MDM5NlwiXSxcbiAgW1wiRXRhXCIsIFwiXFx1MDM5N1wiXSxcbiAgW1wiVGhldGFcIiwgXCJcXHUwMzk4XCJdLFxuICBbXCJJb3RhXCIsIFwiXFx1MDM5OVwiXSxcbiAgW1wiS2FwcGFcIiwgXCJcXHUwMzlBXCJdLFxuICBbXCJMYW1iZGFcIiwgXCJcXHUwMzlCXCJdLFxuICBbXCJNdVwiLCBcIlxcdTAzOUNcIl0sXG4gIFtcIk51XCIsIFwiXFx1MDM5RFwiXSxcbiAgW1wiWGlcIiwgXCJcXHUwMzlFXCJdLFxuICBbXCJPbWljcm9uXCIsIFwiXFx1MDM5RlwiXSxcbiAgW1wiUGlcIiwgXCJcXHUwM0EwXCJdLFxuICBbXCJSaG9cIiwgXCJcXHUwM0ExXCJdLFxuICBbXCJTaWdtYVwiLCBcIlxcdTAzQTNcIl0sXG4gIFtcIlRhdVwiLCBcIlxcdTAzQTRcIl0sXG4gIFtcIlVwc2lsb25cIiwgXCJcXHUwM0E1XCJdLFxuICBbXCJQaGlcIiwgXCJcXHUwM0E2XCJdLFxuICBbXCJDaGlcIiwgXCJcXHUwM0E3XCJdLFxuICBbXCJQc2lcIiwgXCJcXHUwM0E4XCJdLFxuICBbXCJPbWVnYVwiLCBcIlxcdTAzQTlcIl0sXG4gIFtcImFscGhhXCIsIFwiXFx1MDNCMVwiXSxcbiAgW1wiYmV0YVwiLCBcIlxcdTAzQjJcIl0sXG4gIFtcImdhbW1hXCIsIFwiXFx1MDNCM1wiXSxcbiAgW1wiZGVsdGFcIiwgXCJcXHUwM0I0XCJdLFxuICBbXCJlcHNpbG9uXCIsIFwiXFx1MDNCNVwiXSxcbiAgW1wiemV0YVwiLCBcIlxcdTAzQjZcIl0sXG4gIFtcImV0YVwiLCBcIlxcdTAzQjdcIl0sXG4gIFtcInRoZXRhXCIsIFwiXFx1MDNCOFwiXSxcbiAgW1wiaW90YVwiLCBcIlxcdTAzQjlcIl0sXG4gIFtcImthcHBhXCIsIFwiXFx1MDNCQVwiXSxcbiAgW1wibGFtYmRhXCIsIFwiXFx1MDNCQlwiXSxcbiAgW1wibXVcIiwgXCJcXHUwM0JDXCJdLFxuICBbXCJudVwiLCBcIlxcdTAzQkRcIl0sXG4gIFtcInhpXCIsIFwiXFx1MDNCRVwiXSxcbiAgW1wib21pY3JvblwiLCBcIlxcdTAzQkZcIl0sXG4gIFtcInBpXCIsIFwiXFx1MDNDMFwiXSxcbiAgW1wicmhvXCIsIFwiXFx1MDNDMVwiXSxcbiAgW1wic2lnbWFmXCIsIFwiXFx1MDNDMlwiXSxcbiAgW1wic2lnbWFcIiwgXCJcXHUwM0MzXCJdLFxuICBbXCJ0YXVcIiwgXCJcXHUwM0M0XCJdLFxuICBbXCJ1cHNpbG9uXCIsIFwiXFx1MDNDNVwiXSxcbiAgW1wicGhpXCIsIFwiXFx1MDNDNlwiXSxcbiAgW1wiY2hpXCIsIFwiXFx1MDNDN1wiXSxcbiAgW1wicHNpXCIsIFwiXFx1MDNDOFwiXSxcbiAgW1wib21lZ2FcIiwgXCJcXHUwM0M5XCJdLFxuICBbXCJ0aGV0YXN5bVwiLCBcIlxcdTAzRDFcIl0sXG4gIFtcInVwc2loXCIsIFwiXFx1MDNEMlwiXSxcbiAgW1wicGl2XCIsIFwiXFx1MDNENlwiXSxcbiAgW1wiZW5zcFwiLCBcIlxcdTIwMDJcIl0sXG4gIFtcImVtc3BcIiwgXCJcXHUyMDAzXCJdLFxuICBbXCJ0aGluc3BcIiwgXCJcXHUyMDA5XCJdLFxuICBbXCJ6d25qXCIsIFwiXFx1MjAwQ1wiXSxcbiAgW1wiendqXCIsIFwiXFx1MjAwRFwiXSxcbiAgW1wibHJtXCIsIFwiXFx1MjAwRVwiXSxcbiAgW1wicmxtXCIsIFwiXFx1MjAwRlwiXSxcbiAgW1wibmRhc2hcIiwgXCJcXHUyMDEzXCJdLFxuICBbXCJtZGFzaFwiLCBcIlxcdTIwMTRcIl0sXG4gIFtcImxzcXVvXCIsIFwiXFx1MjAxOFwiXSxcbiAgW1wicnNxdW9cIiwgXCJcXHUyMDE5XCJdLFxuICBbXCJzYnF1b1wiLCBcIlxcdTIwMUFcIl0sXG4gIFtcImxkcXVvXCIsIFwiXFx1MjAxQ1wiXSxcbiAgW1wicmRxdW9cIiwgXCJcXHUyMDFEXCJdLFxuICBbXCJiZHF1b1wiLCBcIlxcdTIwMUVcIl0sXG4gIFtcImRhZ2dlclwiLCBcIlxcdTIwMjBcIl0sXG4gIFtcIkRhZ2dlclwiLCBcIlxcdTIwMjFcIl0sXG4gIFtcImJ1bGxcIiwgXCJcXHUyMDIyXCJdLFxuICBbXCJoZWxsaXBcIiwgXCJcXHUyMDI2XCJdLFxuICBbXCJwZXJtaWxcIiwgXCJcXHUyMDMwXCJdLFxuICBbXCJwcmltZVwiLCBcIlxcdTIwMzJcIl0sXG4gIFtcIlByaW1lXCIsIFwiXFx1MjAzM1wiXSxcbiAgW1wibHNhcXVvXCIsIFwiXFx1MjAzOVwiXSxcbiAgW1wicnNhcXVvXCIsIFwiXFx1MjAzQVwiXSxcbiAgW1wib2xpbmVcIiwgXCJcXHUyMDNFXCJdLFxuICBbXCJmcmFzbFwiLCBcIlxcdTIwNDRcIl0sXG4gIFtcImV1cm9cIiwgXCJcXHUyMEFDXCJdLFxuICBbXCJpbWFnZVwiLCBcIlxcdTIxMTFcIl0sXG4gIFtcIndlaWVycFwiLCBcIlxcdTIxMThcIl0sXG4gIFtcInJlYWxcIiwgXCJcXHUyMTFDXCJdLFxuICBbXCJ0cmFkZVwiLCBcIlxcdTIxMjJcIl0sXG4gIFtcImFsZWZzeW1cIiwgXCJcXHUyMTM1XCJdLFxuICBbXCJsYXJyXCIsIFwiXFx1MjE5MFwiXSxcbiAgW1widWFyclwiLCBcIlxcdTIxOTFcIl0sXG4gIFtcInJhcnJcIiwgXCJcXHUyMTkyXCJdLFxuICBbXCJkYXJyXCIsIFwiXFx1MjE5M1wiXSxcbiAgW1wiaGFyclwiLCBcIlxcdTIxOTRcIl0sXG4gIFtcImNyYXJyXCIsIFwiXFx1MjFCNVwiXSxcbiAgW1wibEFyclwiLCBcIlxcdTIxRDBcIl0sXG4gIFtcInVBcnJcIiwgXCJcXHUyMUQxXCJdLFxuICBbXCJyQXJyXCIsIFwiXFx1MjFEMlwiXSxcbiAgW1wiZEFyclwiLCBcIlxcdTIxRDNcIl0sXG4gIFtcImhBcnJcIiwgXCJcXHUyMUQ0XCJdLFxuICBbXCJmb3JhbGxcIiwgXCJcXHUyMjAwXCJdLFxuICBbXCJwYXJ0XCIsIFwiXFx1MjIwMlwiXSxcbiAgW1wiZXhpc3RcIiwgXCJcXHUyMjAzXCJdLFxuICBbXCJlbXB0eVwiLCBcIlxcdTIyMDVcIl0sXG4gIFtcIm5hYmxhXCIsIFwiXFx1MjIwN1wiXSxcbiAgW1wiaXNpblwiLCBcIlxcdTIyMDhcIl0sXG4gIFtcIm5vdGluXCIsIFwiXFx1MjIwOVwiXSxcbiAgW1wibmlcIiwgXCJcXHUyMjBCXCJdLFxuICBbXCJwcm9kXCIsIFwiXFx1MjIwRlwiXSxcbiAgW1wic3VtXCIsIFwiXFx1MjIxMVwiXSxcbiAgW1wibWludXNcIiwgXCJcXHUyMjEyXCJdLFxuICBbXCJsb3dhc3RcIiwgXCJcXHUyMjE3XCJdLFxuICBbXCJyYWRpY1wiLCBcIlxcdTIyMUFcIl0sXG4gIFtcInByb3BcIiwgXCJcXHUyMjFEXCJdLFxuICBbXCJpbmZpblwiLCBcIlxcdTIyMUVcIl0sXG4gIFtcImFuZ1wiLCBcIlxcdTIyMjBcIl0sXG4gIFtcImFuZFwiLCBcIlxcdTIyMjdcIl0sXG4gIFtcIm9yXCIsIFwiXFx1MjIyOFwiXSxcbiAgW1wiY2FwXCIsIFwiXFx1MjIyOVwiXSxcbiAgW1wiY3VwXCIsIFwiXFx1MjIyQVwiXSxcbiAgW1wiaW50XCIsIFwiXFx1MjIyQlwiXSxcbiAgW1widGhlcmU0XCIsIFwiXFx1MjIzNFwiXSxcbiAgW1wic2ltXCIsIFwiXFx1MjIzQ1wiXSxcbiAgW1wiY29uZ1wiLCBcIlxcdTIyNDVcIl0sXG4gIFtcImFzeW1wXCIsIFwiXFx1MjI0OFwiXSxcbiAgW1wibmVcIiwgXCJcXHUyMjYwXCJdLFxuICBbXCJlcXVpdlwiLCBcIlxcdTIyNjFcIl0sXG4gIFtcImxlXCIsIFwiXFx1MjI2NFwiXSxcbiAgW1wiZ2VcIiwgXCJcXHUyMjY1XCJdLFxuICBbXCJzdWJcIiwgXCJcXHUyMjgyXCJdLFxuICBbXCJzdXBcIiwgXCJcXHUyMjgzXCJdLFxuICBbXCJuc3ViXCIsIFwiXFx1MjI4NFwiXSxcbiAgW1wic3ViZVwiLCBcIlxcdTIyODZcIl0sXG4gIFtcInN1cGVcIiwgXCJcXHUyMjg3XCJdLFxuICBbXCJvcGx1c1wiLCBcIlxcdTIyOTVcIl0sXG4gIFtcIm90aW1lc1wiLCBcIlxcdTIyOTdcIl0sXG4gIFtcInBlcnBcIiwgXCJcXHUyMkE1XCJdLFxuICBbXCJzZG90XCIsIFwiXFx1MjJDNVwiXSxcbiAgW1wibGNlaWxcIiwgXCJcXHUyMzA4XCJdLFxuICBbXCJyY2VpbFwiLCBcIlxcdTIzMDlcIl0sXG4gIFtcImxmbG9vclwiLCBcIlxcdTIzMEFcIl0sXG4gIFtcInJmbG9vclwiLCBcIlxcdTIzMEJcIl0sXG4gIFtcImxhbmdcIiwgXCJcXHUyMzI5XCJdLFxuICBbXCJyYW5nXCIsIFwiXFx1MjMyQVwiXSxcbiAgW1wibG96XCIsIFwiXFx1MjVDQVwiXSxcbiAgW1wic3BhZGVzXCIsIFwiXFx1MjY2MFwiXSxcbiAgW1wiY2x1YnNcIiwgXCJcXHUyNjYzXCJdLFxuICBbXCJoZWFydHNcIiwgXCJcXHUyNjY1XCJdLFxuICBbXCJkaWFtc1wiLCBcIlxcdTI2NjZcIl0sXG5dKTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO1xuXG5cblxuXG5cblxuXG5cbiBmdW5jdGlvbiBnZXRKU1hQcmFnbWFJbmZvKG9wdGlvbnMpIHtcbiAgY29uc3QgW2Jhc2UsIHN1ZmZpeF0gPSBzcGxpdFByYWdtYShvcHRpb25zLmpzeFByYWdtYSB8fCBcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIik7XG4gIGNvbnN0IFtmcmFnbWVudEJhc2UsIGZyYWdtZW50U3VmZml4XSA9IHNwbGl0UHJhZ21hKG9wdGlvbnMuanN4RnJhZ21lbnRQcmFnbWEgfHwgXCJSZWFjdC5GcmFnbWVudFwiKTtcbiAgcmV0dXJuIHtiYXNlLCBzdWZmaXgsIGZyYWdtZW50QmFzZSwgZnJhZ21lbnRTdWZmaXh9O1xufSBleHBvcnRzLmRlZmF1bHQgPSBnZXRKU1hQcmFnbWFJbmZvO1xuXG5mdW5jdGlvbiBzcGxpdFByYWdtYShwcmFnbWEpIHtcbiAgbGV0IGRvdEluZGV4ID0gcHJhZ21hLmluZGV4T2YoXCIuXCIpO1xuICBpZiAoZG90SW5kZXggPT09IC0xKSB7XG4gICAgZG90SW5kZXggPSBwcmFnbWEubGVuZ3RoO1xuICB9XG4gIHJldHVybiBbcHJhZ21hLnNsaWNlKDAsIGRvdEluZGV4KSwgcHJhZ21hLnNsaWNlKGRvdEluZGV4KV07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgY2xhc3MgVHJhbnNmb3JtZXIge1xuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gIFxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRIb2lzdGVkQ29kZSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldFN1ZmZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXG52YXIgX3hodG1sID0gcmVxdWlyZSgnLi4vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sJyk7IHZhciBfeGh0bWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfeGh0bWwpO1xudmFyIF90b2tlbml6ZXIgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9jaGFyY29kZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdXRpbC9jaGFyY29kZXMnKTtcblxudmFyIF9nZXRKU1hQcmFnbWFJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRKU1hQcmFnbWFJbmZvJyk7IHZhciBfZ2V0SlNYUHJhZ21hSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRKU1hQcmFnbWFJbmZvKTtcblxudmFyIF9UcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtZXInKTsgdmFyIF9UcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9UcmFuc2Zvcm1lcik7XG5cbiBjbGFzcyBKU1hUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIFxuICBcbiAgXG5cbiAgLy8gU3RhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBsaW5lIG51bWJlciBvZiBlYWNoIEpTWCB0YWcgaW4gZGV2ZWxvcG1lbnQuXG4gIF9faW5pdCgpIHt0aGlzLmxhc3RMaW5lTnVtYmVyID0gMX1cbiAgX19pbml0MigpIHt0aGlzLmxhc3RJbmRleCA9IDB9XG5cbiAgLy8gSW4gZGV2ZWxvcG1lbnQsIHZhcmlhYmxlIG5hbWUgaG9sZGluZyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLlxuICBfX2luaXQzKCkge3RoaXMuZmlsZW5hbWVWYXJOYW1lID0gbnVsbH1cbiAgLy8gTWFwcGluZyBvZiBjbGFpbWVkIG5hbWVzIGZvciBpbXBvcnRzIGluIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLCBlLGcuXG4gIC8vIHtqc3g6IFwiX2pzeFwifS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGltcG9ydHMgdG8gZ2VuZXJhdGUgaW4gdGhlIHByZWZpeC5cbiAgX19pbml0NCgpIHt0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9ucyA9IHt9fVxuICAvLyBXaGVuIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGltcG9ydHMgaW4gQ0pTIG1vZGUsIHdlIHN0b3JlIHRoZSB2YXJpYWJsZSBuYW1lXG4gIC8vIGhvbGRpbmcgdGhlIGltcG9ydGVkIENKUyBtb2R1bGUgc28gd2UgY2FuIHJlcXVpcmUgaXQgaW4gdGhlIHByZWZpeC5cbiAgX19pbml0NSgpIHt0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9ucyA9IHt9fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3Nvcjt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5vcHRpb25zID0gb3B0aW9ucztKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDIuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0My5jYWxsKHRoaXMpO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDUuY2FsbCh0aGlzKTs7XG4gICAgdGhpcy5qc3hQcmFnbWFJbmZvID0gX2dldEpTWFByYWdtYUluZm8yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lID0gb3B0aW9ucy5qc3hSdW50aW1lID09PSBcImF1dG9tYXRpY1wiO1xuICAgIHRoaXMuanN4SW1wb3J0U291cmNlID0gb3B0aW9ucy5qc3hJbXBvcnRTb3VyY2UgfHwgXCJyZWFjdFwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0pTWFRhZygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgbGV0IHByZWZpeCA9IFwiXCI7XG4gICAgaWYgKHRoaXMuZmlsZW5hbWVWYXJOYW1lKSB7XG4gICAgICBwcmVmaXggKz0gYGNvbnN0ICR7dGhpcy5maWxlbmFtZVZhck5hbWV9ID0gJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZmlsZVBhdGggfHwgXCJcIil9O2A7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICAgIC8vIENKUyBtb2RlOiBlbWl0IHJlcXVpcmUgc3RhdGVtZW50cyBmb3IgYWxsIG1vZHVsZXMgdGhhdCB3ZXJlIHJlZmVyZW5jZWQuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHJlc29sdmVkTmFtZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5janNBdXRvbWF0aWNNb2R1bGVOYW1lUmVzb2x1dGlvbnMpKSB7XG4gICAgICAgICAgcHJlZml4ICs9IGB2YXIgJHtyZXNvbHZlZE5hbWV9ID0gcmVxdWlyZShcIiR7cGF0aH1cIik7YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRVNNIG1vZGU6IGNvbnNvbGlkYXRlIGFuZCBlbWl0IGltcG9ydCBzdGF0ZW1lbnRzIGZvciByZWZlcmVuY2VkIG5hbWVzLlxuICAgICAgICBjb25zdCB7Y3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudFJlc29sdXRpb24sIC4uLm90aGVyUmVzb2x1dGlvbnN9ID1cbiAgICAgICAgICB0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9ucztcbiAgICAgICAgaWYgKGNyZWF0ZUVsZW1lbnRSZXNvbHV0aW9uKSB7XG4gICAgICAgICAgcHJlZml4ICs9IGBpbXBvcnQge2NyZWF0ZUVsZW1lbnQgYXMgJHtjcmVhdGVFbGVtZW50UmVzb2x1dGlvbn19IGZyb20gXCIke3RoaXMuanN4SW1wb3J0U291cmNlfVwiO2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1wb3J0U3BlY2lmaWVycyA9IE9iamVjdC5lbnRyaWVzKG90aGVyUmVzb2x1dGlvbnMpXG4gICAgICAgICAgLm1hcCgoW25hbWUsIHJlc29sdmVkTmFtZV0pID0+IGAke25hbWV9IGFzICR7cmVzb2x2ZWROYW1lfWApXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgaWYgKGltcG9ydFNwZWNpZmllcnMpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRQYXRoID1cbiAgICAgICAgICAgIHRoaXMuanN4SW1wb3J0U291cmNlICsgKHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uID8gXCIvanN4LXJ1bnRpbWVcIiA6IFwiL2pzeC1kZXYtcnVudGltZVwiKTtcbiAgICAgICAgICBwcmVmaXggKz0gYGltcG9ydCB7JHtpbXBvcnRTcGVjaWZpZXJzfX0gZnJvbSBcIiR7aW1wb3J0UGF0aH1cIjtgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBwcm9jZXNzSlNYVGFnKCkge1xuICAgIGNvbnN0IHtqc3hSb2xlLCBzdGFydH0gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAvLyBDYWxjdWxhdGUgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYXQgdGhlIHZlcnkgc3RhcnQgKGlmIGluIGRldmVsb3BtZW50XG4gICAgLy8gbW9kZSkgc28gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBxdWVyaWVkIGluIHRva2VuIG9yZGVyLlxuICAgIGNvbnN0IGVsZW1lbnRMb2NhdGlvbkNvZGUgPSB0aGlzLm9wdGlvbnMucHJvZHVjdGlvbiA/IG51bGwgOiB0aGlzLmdldEVsZW1lbnRMb2NhdGlvbkNvZGUoc3RhcnQpO1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSAmJiBqc3hSb2xlICE9PSBfdG9rZW5pemVyLkpTWFJvbGUuS2V5QWZ0ZXJQcm9wU3ByZWFkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVRhZ1RvSlNYRnVuYyhlbGVtZW50TG9jYXRpb25Db2RlLCBqc3hSb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2Zvcm1UYWdUb0NyZWF0ZUVsZW1lbnQoZWxlbWVudExvY2F0aW9uQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RWxlbWVudExvY2F0aW9uQ29kZShmaXJzdFRva2VuU3RhcnQpIHtcbiAgICBjb25zdCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyRm9ySW5kZXgoZmlyc3RUb2tlblN0YXJ0KTtcbiAgICByZXR1cm4gYGxpbmVOdW1iZXI6ICR7bGluZU51bWJlcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgc291cmNlIHBvc2l0aW9uLiBUaGlzIGlzIGNhbGN1bGF0ZWQgbGF6aWx5IGFuZFxuICAgKiBtdXN0IGJlIGNhbGxlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIGJ5IGluZGV4LlxuICAgKi9cbiAgZ2V0TGluZU51bWJlckZvckluZGV4KGluZGV4KSB7XG4gICAgY29uc3QgY29kZSA9IHRoaXMudG9rZW5zLmNvZGU7XG4gICAgd2hpbGUgKHRoaXMubGFzdEluZGV4IDwgaW5kZXggJiYgdGhpcy5sYXN0SW5kZXggPCBjb2RlLmxlbmd0aCkge1xuICAgICAgaWYgKGNvZGVbdGhpcy5sYXN0SW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgIHRoaXMubGFzdExpbmVOdW1iZXIrKztcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdEluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxhc3RMaW5lTnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGN1cnJlbnQgSlNYIGVsZW1lbnQgdG8gYSBjYWxsIHRvIGpzeCwganN4cywgb3IganN4REVWLiBUaGlzIGlzXG4gICAqIHRoZSBwcmltYXJ5IHRyYW5zZm9ybWF0aW9uIGZvciB0aGUgYXV0b21hdGljIHRyYW5zZm9ybS5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPGRpdiBhPXsxfSBrZXk9ezJ9PkhlbGxve3h9PC9kaXY+XG4gICAqIGJlY29tZXNcbiAgICoganN4cygnZGl2Jywge2E6IDEsIGNoaWxkcmVuOiBbXCJIZWxsb1wiLCB4XX0sIDIpXG4gICAqL1xuICB0cmFuc2Zvcm1UYWdUb0pTWEZ1bmMoZWxlbWVudExvY2F0aW9uQ29kZSwganN4Um9sZSkge1xuICAgIGNvbnN0IGlzU3RhdGljID0ganN4Um9sZSA9PT0gX3Rva2VuaXplci5KU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0SlNYRnVuY0ludm9jYXRpb25Db2RlKGlzU3RhdGljKSk7XG5cbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCB7YCk7XG4gICAgICB0aGlzLnByb2Nlc3NBdXRvbWF0aWNDaGlsZHJlbkFuZEVuZFByb3BzKGpzeFJvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb3JtYWwgb3BlbiB0YWcgb3Igc2VsZi1jbG9zaW5nIHRhZy5cbiAgICAgIHRoaXMucHJvY2Vzc1RhZ0ludHJvKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLCB7XCIpO1xuICAgICAga2V5Q29kZSA9IHRoaXMucHJvY2Vzc1Byb3BzKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5zbGFzaCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWcsIG5vIGNoaWxkcmVuIHRvIGFkZCwgc28gY2xvc2UgdGhlIHByb3BzLlxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFRhZyB3aXRoIGNoaWxkcmVuLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NBdXRvbWF0aWNDaGlsZHJlbkFuZEVuZFByb3BzKGpzeFJvbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZWl0aGVyIC8+IG9yID4gYXQgdGhlIGVuZCBvZiB0aGUgdGFnLlwiKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGEga2V5IHdhcyBwcmVzZW50LCBtb3ZlIGl0IHRvIGl0cyBvd24gYXJnLiBOb3RlIHRoYXQgbW92aW5nIGNvZGVcbiAgICAgIC8vIGxpa2UgdGhpcyB3aWxsIGNhdXNlIGxpbmUgbnVtYmVycyB0byBnZXQgb3V0IG9mIHN5bmMgd2l0aGluIHRoZSBKU1hcbiAgICAgIC8vIGVsZW1lbnQgaWYgdGhlIGtleSBleHByZXNzaW9uIGhhcyBhIG5ld2xpbmUgaW4gaXQuIFRoaXMgaXMgdW5mb3J0dW5hdGUsXG4gICAgICAvLyBidXQgaG9wZWZ1bGx5IHNob3VsZCBiZSByYXJlLlxuICAgICAgaWYgKGtleUNvZGUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCAke2tleUNvZGV9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24pIHtcbiAgICAgIC8vIElmIHRoZSBrZXkgd2Fzbid0IGFscmVhZHkgYWRkZWQsIGFkZCBpdCBub3cgc28gd2UgY2FuIGNvcnJlY3RseSBzZXRcbiAgICAgIC8vIHBvc2l0aW9uYWwgYXJncyBmb3IganN4REVWLlxuICAgICAgaWYgKGtleUNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiwgdm9pZCAwXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCAke2lzU3RhdGljfSwgJHt0aGlzLmdldERldlNvdXJjZShlbGVtZW50TG9jYXRpb25Db2RlKX0sIHRoaXNgKTtcbiAgICB9XG4gICAgLy8gV2UncmUgYXQgdGhlIGNsb3NlLXRhZyBvciB0aGUgZW5kIG9mIGEgc2VsZi1jbG9zaW5nIHRhZywgc28gcmVtb3ZlXG4gICAgLy8gZXZlcnl0aGluZyBlbHNlIGFuZCBjbG9zZSB0aGUgZnVuY3Rpb24gY2FsbC5cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBjdXJyZW50IEpTWCBlbGVtZW50IHRvIGEgY3JlYXRlRWxlbWVudCBjYWxsLiBJbiB0aGUgY2xhc3NpY1xuICAgKiBydW50aW1lLCB0aGlzIGlzIHRoZSBvbmx5IGNhc2UuIEluIHRoZSBhdXRvbWF0aWMgcnVudGltZSwgdGhpcyBpcyBjYWxsZWRcbiAgICogYXMgYSBmYWxsYmFjayBpbiBzb21lIHNpdHVhdGlvbnMuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIDxkaXYgYT17MX0ga2V5PXsyfT5IZWxsb3t4fTwvZGl2PlxuICAgKiBiZWNvbWVzXG4gICAqIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIHthOiAxLCBrZXk6IDJ9LCBcIkhlbGxvXCIsIHgpXG4gICAqL1xuICB0cmFuc2Zvcm1UYWdUb0NyZWF0ZUVsZW1lbnQoZWxlbWVudExvY2F0aW9uQ29kZSkge1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0Q3JlYXRlRWxlbWVudEludm9jYXRpb25Db2RlKCkpO1xuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCBudWxsYCk7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy5wcm9jZXNzUHJvcHNPYmplY3RXaXRoRGV2SW5mbyhlbGVtZW50TG9jYXRpb25Db2RlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuc2xhc2gsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgICAvLyBTZWxmLWNsb3NpbmcgdGFnOyBubyBjaGlsZHJlbiB0byBwcm9jZXNzLlxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAgICAgLy8gVGFnIHdpdGggY2hpbGRyZW4gYW5kIGEgY2xvc2UtdGFnOyBwcm9jZXNzIHRoZSBjaGlsZHJlbiBhcyBhcmdzLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIilcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb2RlIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHRoaXMgY29udGV4dDoganN4LCBqc3hzLFxuICAgKiBvciBqc3hERVYuIFRoZSBmb2xsb3dpbmcgb3Blbi1wYXJlbiBpcyBpbmNsdWRlZCBhcyB3ZWxsLlxuICAgKlxuICAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBmb3IgdGhlIGF1dG9tYXRpYyBydW50aW1lLCBzbyB0aGV5IGFyZSBhbHdheXNcbiAgICogYXV0by1pbXBvcnRlZCwgYnV0IHRoZSBhdXRvLWltcG9ydCB3aWxsIGJlIGVpdGhlciBDSlMgb3IgRVNNIGJhc2VkIG9uIHRoZVxuICAgKiB0YXJnZXQgbW9kdWxlIGZvcm1hdC5cbiAgICovXG4gIGdldEpTWEZ1bmNJbnZvY2F0aW9uQ29kZShpc1N0YXRpYykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJvZHVjdGlvbikge1xuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hzXCIsIFwiL2pzeC1ydW50aW1lXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImpzeFwiLCBcIi9qc3gtcnVudGltZVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImpzeERFVlwiLCBcIi9qc3gtZGV2LXJ1bnRpbWVcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY29kZSB0byB1c2UgZm9yIHRoZSBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uLCBlLmcuXG4gICAqIGBSZWFjdC5jcmVhdGVFbGVtZW50YCwgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmcgb3Blbi1wYXJlbi5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSBjbGFzc2ljIHJ1bnRpbWUuIEZvciB0aGVcbiAgICogYXV0b21hdGljIHJ1bnRpbWUsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIGZhbGxiYWNrIGZ1bmN0aW9uIHRvXG4gICAqIHByZXNlcnZlIGJlaGF2aW9yIHdoZW4gdGhlcmUgaXMgYSBwcm9wIHNwcmVhZCBmb2xsb3dlZCBieSBhbiBleHBsaWNpdFxuICAgKiBrZXkuIEluIHRoYXQgYXV0b21hdGljIHJ1bnRpbWUgY2FzZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5XG4gICAqIGltcG9ydGVkLlxuICAgKi9cbiAgZ2V0Q3JlYXRlRWxlbWVudEludm9jYXRpb25Db2RlKCkge1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImNyZWF0ZUVsZW1lbnRcIiwgXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtqc3hQcmFnbWFJbmZvfSA9IHRoaXM7XG4gICAgICBjb25zdCByZXNvbHZlZFByYWdtYUJhc2VOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3JcbiAgICAgICAgPyB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoanN4UHJhZ21hSW5mby5iYXNlKSB8fCBqc3hQcmFnbWFJbmZvLmJhc2VcbiAgICAgICAgOiBqc3hQcmFnbWFJbmZvLmJhc2U7XG4gICAgICByZXR1cm4gYCR7cmVzb2x2ZWRQcmFnbWFCYXNlTmFtZX0ke2pzeFByYWdtYUluZm8uc3VmZml4fShgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGFzIHRoZSBjb21wb25lbnQgd2hlbiBjb21waWxpbmcgYSBzaG9ydGhhbmRcbiAgICogZnJhZ21lbnQsIGUuZy4gYFJlYWN0LkZyYWdtZW50YC5cbiAgICpcbiAgICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gZWl0aGVyIHRoZSBjbGFzc2ljIG9yIGF1dG9tYXRpYyBydW50aW1lLCBhbmRcbiAgICogdGhlIHZhbHVlIHNob3VsZCBiZSBhdXRvLWltcG9ydGVkIGZvciB0aGUgYXV0b21hdGljIHJ1bnRpbWUuXG4gICAqL1xuICBnZXRGcmFnbWVudENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGFpbUF1dG9JbXBvcnRlZE5hbWUoXG4gICAgICAgIFwiRnJhZ21lbnRcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24gPyBcIi9qc3gtcnVudGltZVwiIDogXCIvanN4LWRldi1ydW50aW1lXCIsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7anN4UHJhZ21hSW5mb30gPSB0aGlzO1xuICAgICAgY29uc3QgcmVzb2x2ZWRGcmFnbWVudFByYWdtYUJhc2VOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3JcbiAgICAgICAgPyB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoanN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2UpIHx8XG4gICAgICAgICAganN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2VcbiAgICAgICAgOiBqc3hQcmFnbWFJbmZvLmZyYWdtZW50QmFzZTtcbiAgICAgIHJldHVybiByZXNvbHZlZEZyYWdtZW50UHJhZ21hQmFzZU5hbWUgKyBqc3hQcmFnbWFJbmZvLmZyYWdtZW50U3VmZml4O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY29kZSB0aGF0IGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBXaGVuIHRoZSBpbXBvcnRzIHRyYW5zZm9ybSBpcyBlbmFibGVkLCB1c2UgdGhlIENKU0ltcG9ydFRyYW5zZm9ybWVyXG4gICAqIHN0cmF0ZWd5IG9mIHVzaW5nIGAuY2FsbCh2b2lkIDAsIC4uLmAgdG8gYXZvaWQgcGFzc2luZyBhIGB0aGlzYCB2YWx1ZSBpbiBhXG4gICAqIHNpdHVhdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lzZSBsb29rIGxpa2UgYSBtZXRob2QgY2FsbC5cbiAgICovXG4gIGNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oZnVuY05hbWUsIGltcG9ydFBhdGhTdWZmaXgpIHtcbiAgICBjb25zdCBmdW5jQ29kZSA9IHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWROYW1lKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KTtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3IpIHtcbiAgICAgIHJldHVybiBgJHtmdW5jQ29kZX0uY2FsbCh2b2lkIDAsIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtmdW5jQ29kZX0oYDtcbiAgICB9XG4gIH1cblxuICBjbGFpbUF1dG9JbXBvcnRlZE5hbWUoZnVuY05hbWUsIGltcG9ydFBhdGhTdWZmaXgpIHtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3IpIHtcbiAgICAgIC8vIENKUyBtb2RlOiBjbGFpbSBhIG5hbWUgZm9yIHRoZSBtb2R1bGUgYW5kIG1hcmsgaXQgZm9yIGltcG9ydC5cbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmpzeEltcG9ydFNvdXJjZSArIGltcG9ydFBhdGhTdWZmaXg7XG4gICAgICBpZiAoIXRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdKSB7XG4gICAgICAgIHRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdID1cbiAgICAgICAgICB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7dGhpcy5janNBdXRvbWF0aWNNb2R1bGVOYW1lUmVzb2x1dGlvbnNbcGF0aF19LiR7ZnVuY05hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRVNNIG1vZGU6IGNsYWltIGEgbmFtZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBuYW1lcyB0aGF0XG4gICAgICAvLyBzaG91bGQgYmUgYXV0by1pbXBvcnRlZCB3aGVuIHRoZSBwcmVmaXggaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKCF0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9uc1tmdW5jTmFtZV0pIHtcbiAgICAgICAgdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnNbZnVuY05hbWVdID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFxuICAgICAgICAgIGBfJHtmdW5jTmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zW2Z1bmNOYW1lXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgZmlyc3QgcGFydCBvZiBhIHRhZywgYmVmb3JlIGFueSBwcm9wcy5cbiAgICovXG4gIHByb2Nlc3NUYWdJbnRybygpIHtcbiAgICAvLyBXYWxrIGZvcndhcmQgdW50aWwgd2Ugc2VlIG9uZSBvZiB0aGVzZSBwYXR0ZXJuczpcbiAgICAvLyBqc3hOYW1lIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLCBwcmVjZWRlZCBieSBhbm90aGVyIGpzeE5hbWUgdG8gZW5kIHRoZSB0YWcgbmFtZS5cbiAgICAvLyBqc3hOYW1lIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLCBwcmVjZWRlZCBieSBncmVhdGVyVGhhbiB0byBlbmQgdGhlIHR5cGUgYXJndW1lbnQuXG4gICAgLy8gW29wZW4gYnJhY2VdIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLlxuICAgIC8vIFtqc3hUYWdFbmRdIHRvIGVuZCB0aGUgb3Blbi10YWcuXG4gICAgLy8gW3NsYXNoLCBqc3hUYWdFbmRdIHRvIGVuZCB0aGUgc2VsZi1jbG9zaW5nIHRhZy5cbiAgICBsZXQgaW50cm9FbmQgPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7XG4gICAgd2hpbGUgKFxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2ludHJvRW5kXS5pc1R5cGUgfHxcbiAgICAgICghdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGludHJvRW5kIC0gMSwgX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQgLSAxLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuLCBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW50cm9FbmQsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGludHJvRW5kLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbnRyb0VuZCwgX3R5cGVzLlRva2VuVHlwZS5zbGFzaCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKVxuICAgICkge1xuICAgICAgaW50cm9FbmQrKztcbiAgICB9XG4gICAgaWYgKGludHJvRW5kID09PSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhMb3dlckNhc2UodGFnTmFtZSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHt0YWdOYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgaW50cm9FbmQpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9wcywgYWRkIHRoZSBwcm9wcyBhcmd1bWVudCB0b1xuICAgKiBSZWFjdC5jcmVhdGVFbGVtZW50LCBpbmNsdWRpbmcgdGhlIGNvbW1hIGJlZm9yZSBpdC5cbiAgICovXG4gIHByb2Nlc3NQcm9wc09iamVjdFdpdGhEZXZJbmZvKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICBjb25zdCBkZXZQcm9wcyA9IHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uXG4gICAgICA/IFwiXCJcbiAgICAgIDogYF9fc2VsZjogdGhpcywgX19zb3VyY2U6ICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9YDtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4TmFtZSkgJiYgIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgaWYgKGRldlByb3BzKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgeyR7ZGV2UHJvcHN9fWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCBudWxsYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwge2ApO1xuICAgIHRoaXMucHJvY2Vzc1Byb3BzKGZhbHNlKTtcbiAgICBpZiAoZGV2UHJvcHMpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCAke2RldlByb3BzfX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIn1cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGUgY29yZSBwYXJ0IG9mIHRoZSBwcm9wcywgYXNzdW1pbmcgdGhhdCBhIHsgaGFzIGFscmVhZHkgYmVlblxuICAgKiBpbnNlcnRlZCBiZWZvcmUgdXMgYW5kIHRoYXQgYSB9IHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdXMuXG4gICAqXG4gICAqIElmIGV4dHJhY3RLZXlDb2RlIGlzIHRydWUgKGkuZS4gd2hlbiB1c2luZyBhbnkganN4Li4uIGZ1bmN0aW9uKSwgYW55IHByb3BcbiAgICogbmFtZWQgXCJrZXlcIiBoYXMgaXRzIGNvZGUgY2FwdHVyZWQgYW5kIHJldHVybmVkIHJhdGhlciB0aGFuIGJlaW5nIGVtaXR0ZWQgdG9cbiAgICogdGhlIG91dHB1dCBjb2RlLiBUaGlzIHNoaWZ0cyBsaW5lIG51bWJlcnMsIGFuZCBlbWl0dGluZyB0aGUgY29kZSBsYXRlciB3aWxsXG4gICAqIGNvcnJlY3QgbGluZSBudW1iZXJzIGFnYWluLiBJZiBubyBrZXkgaXMgZm91bmQgb3IgaWYgZXh0cmFjdEtleUNvZGUgaXNcbiAgICogZmFsc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBudWxsLlxuICAgKi9cbiAgcHJvY2Vzc1Byb3BzKGV4dHJhY3RLZXlDb2RlKSB7XG4gICAgbGV0IGtleUNvZGUgPSBudWxsO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBrZXk9e3ZhbHVlfSBvciBrZXk9XCJ2YWx1ZVwiIHByb3AuXG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICAgICAgaWYgKGV4dHJhY3RLZXlDb2RlICYmIHByb3BOYW1lID09PSBcImtleVwiKSB7XG4gICAgICAgICAgaWYgKGtleUNvZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wcyBsaXN0IGhhcyBtdWx0aXBsZSBrZXlzLiBEaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGFyZVxuICAgICAgICAgICAgLy8gaW5jb25zaXN0ZW50IGFib3V0IHdoYXQgdG8gZG8gaGVyZTogYXMgb2YgdGhpcyB3cml0aW5nLCBCYWJlbCBhbmRcbiAgICAgICAgICAgIC8vIHN3YyBrZWVwIHRoZSAqbGFzdCoga2V5IGFuZCBjb21wbGV0ZWx5IHJlbW92ZSB0aGUgcmVzdCwgd2hpbGVcbiAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgdXNlcyB0aGUgKmZpcnN0KiBrZXkgYW5kIGxlYXZlcyB0aGUgb3RoZXJzIGFzIHJlZ3VsYXJcbiAgICAgICAgICAgIC8vIHByb3BzLiBUaGUgUmVhY3QgdGVhbSBjb2xsYWJvcmF0ZWQgd2l0aCBCYWJlbCBvbiB0aGVcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgYmVoYXZpb3IsIHNvIHByZXN1bWFibHkgdGhlIEJhYmVsIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyBpcyB0aGUgb25lIHRvIHVzZS5cbiAgICAgICAgICAgIC8vIFNpbmNlIHdlIHdvbid0IGV2ZXIgYmUgZW1pdHRpbmcgdGhlIHByZXZpb3VzIGtleSBjb2RlLCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBlbWl0IGl0cyBuZXdsaW5lcyBoZXJlIHNvIHRoYXQgdGhlIGxpbmUgbnVtYmVycyBtYXRjaCB1cFxuICAgICAgICAgICAgLy8gaW4gdGhlIGxvbmcgcnVuLlxuICAgICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShrZXlDb2RlLnJlcGxhY2UoL1teXFxuXS9nLCBcIlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGtleVxuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gPVxuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnRva2Vucy5zbmFwc2hvdCgpO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1Byb3BWYWx1ZSgpO1xuICAgICAgICAgIGtleUNvZGUgPSB0aGlzLnRva2Vucy5kYW5nZXJvdXNseUdldEFuZFJlbW92ZUNvZGVTaW5jZVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgICAvLyBEb24ndCBhZGQgYSBjb21tYVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCI6IFwiKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGhhbmQgcHJvcCBsaWtlIDxpbnB1dCBkaXNhYmxlZCAvPi5cbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgICB0aGlzLnByb2Nlc3NQcm9wTmFtZShwcm9wTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI6IHRydWVcIik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICAvLyBUaGlzIGlzIHByb3Agc3ByZWFkLCBsaWtlIDxkaXYgey4uLmdldFByb3BzKCl9Piwgd2hpY2ggd2UgY2FuIHBhc3NcbiAgICAgICAgLy8gdGhyb3VnaCBmYWlybHkgZGlyZWN0bHkgYXMgYW4gb2JqZWN0IHNwcmVhZC5cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBrZXlDb2RlO1xuICB9XG5cbiAgcHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHtwcm9wTmFtZX0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NQcm9wVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0pTWFRhZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2Nlc3NTdHJpbmdQcm9wVmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU3RyaW5nUHJvcFZhbHVlKCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgdmFsdWVDb2RlID0gdGhpcy50b2tlbnMuY29kZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYU3RyaW5nVmFsdWVMaXRlcmFsKHZhbHVlQ29kZSk7XG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGxpdGVyYWxDb2RlICsgcmVwbGFjZW1lbnRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9wcyBvYmplY3QgbGl0ZXJhbCwgcHJvZHVjZSBhbiBhZGRpdGlvbmFsXG4gICAqIHByb3AgZm9yIHRoZSBjaGlsZHJlbiBhbmQgY2xvc2UgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgKi9cbiAgcHJvY2Vzc0F1dG9tYXRpY0NoaWxkcmVuQW5kRW5kUHJvcHMoanN4Um9sZSkge1xuICAgIGlmIChqc3hSb2xlID09PSBfdG9rZW5pemVyLkpTWFJvbGUuU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgY2hpbGRyZW46IFtcIik7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXX1cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJzZXIgaW5mb3JtYXRpb24gdGVsbHMgdXMgd2hldGhlciB3ZSB3aWxsIHNlZSBhIHJlYWwgY2hpbGQgb3IgaWZcbiAgICAgIC8vIGFsbCByZW1haW5pbmcgY2hpbGRyZW4gKGlmIGFueSkgd2lsbCByZXNvbHZlIHRvIGVtcHR5LiBJZiB0aGVyZSBhcmUgbm9cbiAgICAgIC8vIG5vbi1lbXB0eSBjaGlsZHJlbiwgZG9uJ3QgZW1pdCBhIGNoaWxkcmVuIHByb3AgYXQgYWxsLCBidXQgc3RpbGxcbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gc28gdGhhdCB3ZSBwcm9wZXJseSB0cmFuc2Zvcm0gdGhlIGNvZGUgaW50byBub3RoaW5nLlxuICAgICAgaWYgKGpzeFJvbGUgPT09IF90b2tlbml6ZXIuSlNYUm9sZS5PbmVDaGlsZCkge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiIGNoaWxkcmVuOiBcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGNoaWxkcmVuIGludG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgd2hpY2ggd2lsbCBiZSBlaXRoZXJcbiAgICogYXJndW1lbnRzIHRvIGNyZWF0ZUVsZW1lbnQgb3IgYXJyYXkgZWxlbWVudHMgb2YgYSBjaGlsZHJlbiBwcm9wLlxuICAgKi9cbiAgcHJvY2Vzc0NoaWxkcmVuKG5lZWRzSW5pdGlhbENvbW1hKSB7XG4gICAgbGV0IG5lZWRzQ29tbWEgPSBuZWVkc0luaXRpYWxDb21tYTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpKSB7XG4gICAgICAgIC8vIENsb3NpbmcgdGFnLCBzbyBubyBtb3JlIGNoaWxkcmVuLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGlkRW1pdEVsZW1lbnQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICAvLyBFbXB0eSBpbnRlcnBvbGF0aW9ucyBhbmQgY29tbWVudC1vbmx5IGludGVycG9sYXRpb25zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgLy8gYW5kIGRvbid0IGNyZWF0ZSBhbiBleHRyYSBjaGlsZCBhcmcuXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJcIik7XG4gICAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQpKSB7XG4gICAgICAgIC8vIENoaWxkIEpTWCBlbGVtZW50XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUobmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICB0aGlzLnByb2Nlc3NKU1hUYWcoKTtcbiAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRleHQpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4RW1wdHlUZXh0KSkge1xuICAgICAgICBkaWRFbWl0RWxlbWVudCA9IHRoaXMucHJvY2Vzc0NoaWxkVGV4dEVsZW1lbnQobmVlZHNDb21tYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuIHdoZW4gcHJvY2Vzc2luZyBKU1ggY2hpbGRyZW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRpZEVtaXRFbGVtZW50KSB7XG4gICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIGEgSlNYIHRleHQgZWxlbWVudCBpbnRvIGEgc3RyaW5nIGxpdGVyYWwsIG9yIG5vdGhpbmcgYXQgYWxsIGlmIHRoZSBKU1hcbiAgICogdGV4dCByZXNvbHZlcyB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBzdHJpbmcgbGl0ZXJhbCBpcyBlbWl0dGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRUZXh0RWxlbWVudChuZWVkc0NvbW1hKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYVGV4dExpdGVyYWwodmFsdWVDb2RlKTtcbiAgICBpZiAobGl0ZXJhbENvZGUgPT09ICdcIlwiJykge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50Q29kZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtuZWVkc0NvbW1hID8gXCIsIFwiIDogXCJcIn0ke2xpdGVyYWxDb2RlfSR7cmVwbGFjZW1lbnRDb2RlfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV2U291cmNlKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICByZXR1cm4gYHtmaWxlTmFtZTogJHt0aGlzLmdldEZpbGVuYW1lVmFyTmFtZSgpfSwgJHtlbGVtZW50TG9jYXRpb25Db2RlfX1gO1xuICB9XG5cbiAgZ2V0RmlsZW5hbWVWYXJOYW1lKCkge1xuICAgIGlmICghdGhpcy5maWxlbmFtZVZhck5hbWUpIHtcbiAgICAgIHRoaXMuZmlsZW5hbWVWYXJOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2pzeEZpbGVOYW1lXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWxlbmFtZVZhck5hbWU7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gSlNYVHJhbnNmb3JtZXI7XG5cbi8qKlxuICogU3BlYyBmb3IgaWRlbnRpZmllcnM6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jcHJvZC1JZGVudGlmaWVyU3RhcnQuXG4gKlxuICogUmVhbGx5IG9ubHkgdHJlYXQgYW55dGhpbmcgc3RhcnRpbmcgd2l0aCBhLXogYXMgdGFnIG5hbWVzLiAgYF9gLCBgJGAsIGBcdTAwRTlgXG4gKiBzaG91bGQgYmUgdHJlYXRlZCBhcyBjb21wb25lbnQgbmFtZXNcbiAqL1xuIGZ1bmN0aW9uIHN0YXJ0c1dpdGhMb3dlckNhc2Uocykge1xuICBjb25zdCBmaXJzdENoYXIgPSBzLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBmaXJzdENoYXIgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBmaXJzdENoYXIgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlWjtcbn0gZXhwb3J0cy5zdGFydHNXaXRoTG93ZXJDYXNlID0gc3RhcnRzV2l0aExvd2VyQ2FzZTtcblxuLyoqXG4gKiBUdXJuIHRoZSBnaXZlbiBqc3hUZXh0IHN0cmluZyBpbnRvIGEgSlMgc3RyaW5nIGxpdGVyYWwuIExlYWRpbmcgYW5kIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIG9uIGxpbmVzIGlzIHJlbW92ZWQsIGV4Y2VwdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3Blbi10YWcgYW5kXG4gKiBiZWZvcmUgdGhlIGNsb3NlLXRhZy4gRW1wdHkgbGluZXMgYXJlIGNvbXBsZXRlbHkgcmVtb3ZlZCwgYW5kIHNwYWNlcyBhcmVcbiAqIGFkZGVkIGJldHdlZW4gbGluZXMgYWZ0ZXIgdGhhdC5cbiAqXG4gKiBXZSB1c2UgSlNPTi5zdHJpbmdpZnkgdG8gaW50cm9kdWNlIGVzY2FwZSBjaGFyYWN0ZXJzIGFzIG5lY2Vzc2FyeSwgYW5kIHRyaW1cbiAqIHRoZSBzdGFydCBhbmQgZW5kIG9mIGVhY2ggbGluZSBhbmQgcmVtb3ZlIGJsYW5rIGxpbmVzLlxuICovXG5mdW5jdGlvbiBmb3JtYXRKU1hUZXh0TGl0ZXJhbCh0ZXh0KSB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgd2hpdGVzcGFjZSA9IFwiXCI7XG5cbiAgbGV0IGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSBmYWxzZTtcbiAgbGV0IHNlZW5Ob25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGMgPSB0ZXh0W2ldO1xuICAgIGlmIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxyXCIpIHtcbiAgICAgIGlmICghaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSkge1xuICAgICAgICB3aGl0ZXNwYWNlICs9IGM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICB3aGl0ZXNwYWNlID0gXCJcIjtcbiAgICAgIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2Vlbk5vbldoaXRlc3BhY2UgJiYgaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSkge1xuICAgICAgICByZXN1bHQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gd2hpdGVzcGFjZTtcbiAgICAgIHdoaXRlc3BhY2UgPSBcIlwiO1xuICAgICAgaWYgKGMgPT09IFwiJlwiKSB7XG4gICAgICAgIGNvbnN0IHtlbnRpdHksIG5ld0l9ID0gcHJvY2Vzc0VudGl0eSh0ZXh0LCBpICsgMSk7XG4gICAgICAgIGkgPSBuZXdJIC0gMTtcbiAgICAgICAgcmVzdWx0ICs9IGVudGl0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgfVxuICAgICAgc2Vlbk5vbldoaXRlc3BhY2UgPSB0cnVlO1xuICAgICAgaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICByZXN1bHQgKz0gd2hpdGVzcGFjZTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlIHRoZSBjb2RlIHRoYXQgc2hvdWxkIGJlIHByaW50ZWQgYWZ0ZXIgdGhlIEpTWCB0ZXh0IHN0cmluZyBsaXRlcmFsLFxuICogd2l0aCBtb3N0IGNvbnRlbnQgcmVtb3ZlZCwgYnV0IGFsbCBuZXdsaW5lcyBwcmVzZXJ2ZWQgYW5kIGFsbCBzcGFjaW5nIGF0IHRoZVxuICogZW5kIHByZXNlcnZlZC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYVGV4dFJlcGxhY2VtZW50KHRleHQpIHtcbiAgbGV0IG51bU5ld2xpbmVzID0gMDtcbiAgbGV0IG51bVNwYWNlcyA9IDA7XG4gIGZvciAoY29uc3QgYyBvZiB0ZXh0KSB7XG4gICAgaWYgKGMgPT09IFwiXFxuXCIpIHtcbiAgICAgIG51bU5ld2xpbmVzKys7XG4gICAgICBudW1TcGFjZXMgPSAwO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gXCIgXCIpIHtcbiAgICAgIG51bVNwYWNlcysrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gXCJcXG5cIi5yZXBlYXQobnVtTmV3bGluZXMpICsgXCIgXCIucmVwZWF0KG51bVNwYWNlcyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgc3RyaW5nIGluIHRoZSB2YWx1ZSBwb3NpdGlvbiBvZiBhIEpTWCBwcm9wLlxuICpcbiAqIFVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBjb252ZXJ0QXR0cmlidXRlIGZyb21cbiAqIGJhYmVsLWhlbHBlci1idWlsZGVyLXJlYWN0LWpzeC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYU3RyaW5nVmFsdWVMaXRlcmFsKHRleHQpIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGMgPSB0ZXh0W2ldO1xuICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICBpZiAoL1xccy8udGVzdCh0ZXh0W2kgKyAxXSkpIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIC9cXHMvLnRlc3QodGV4dFtpICsgMV0pKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMgPT09IFwiJlwiKSB7XG4gICAgICBjb25zdCB7ZW50aXR5LCBuZXdJfSA9IHByb2Nlc3NFbnRpdHkodGV4dCwgaSArIDEpO1xuICAgICAgcmVzdWx0ICs9IGVudGl0eTtcbiAgICAgIGkgPSBuZXdJIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXN1bHQpO1xufVxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGEgJiwgc2VlIGlmIHRoZXJlJ3MgYW4gSFRNTCBlbnRpdHkgKHNwZWNpZmllZCBieSBuYW1lLCBkZWNpbWFsXG4gKiBjaGFyIGNvZGUsIG9yIGhleCBjaGFyIGNvZGUpIGFuZCByZXR1cm4gaXQgaWYgc28uXG4gKlxuICogTW9kaWZpZWQgZnJvbSBqc3hSZWFkU3RyaW5nIGluIGJhYmVsLXBhcnNlci5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0VudGl0eSh0ZXh0LCBpbmRleEFmdGVyQW1wZXJzYW5kKSB7XG4gIGxldCBzdHIgPSBcIlwiO1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgZW50aXR5O1xuICBsZXQgaSA9IGluZGV4QWZ0ZXJBbXBlcnNhbmQ7XG5cbiAgaWYgKHRleHRbaV0gPT09IFwiI1wiKSB7XG4gICAgbGV0IHJhZGl4ID0gMTA7XG4gICAgaSsrO1xuICAgIGxldCBudW1TdGFydDtcbiAgICBpZiAodGV4dFtpXSA9PT0gXCJ4XCIpIHtcbiAgICAgIHJhZGl4ID0gMTY7XG4gICAgICBpKys7XG4gICAgICBudW1TdGFydCA9IGk7XG4gICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGlzSGV4RGlnaXQodGV4dC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bVN0YXJ0ID0gaTtcbiAgICAgIHdoaWxlIChpIDwgdGV4dC5sZW5ndGggJiYgaXNEZWNpbWFsRGlnaXQodGV4dC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0ZXh0W2ldID09PSBcIjtcIikge1xuICAgICAgY29uc3QgbnVtU3RyID0gdGV4dC5zbGljZShudW1TdGFydCwgaSk7XG4gICAgICBpZiAobnVtU3RyKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZW50aXR5ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQobnVtU3RyLCByYWRpeCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGNvdW50KysgPCAxMCkge1xuICAgICAgY29uc3QgY2ggPSB0ZXh0W2ldO1xuICAgICAgaSsrO1xuICAgICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICBlbnRpdHkgPSBfeGh0bWwyLmRlZmF1bHQuZ2V0KHN0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RyICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIHtlbnRpdHk6IFwiJlwiLCBuZXdJOiBpbmRleEFmdGVyQW1wZXJzYW5kfTtcbiAgfVxuICByZXR1cm4ge2VudGl0eSwgbmV3STogaX07XG59XG5cbmZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5O1xufVxuXG5mdW5jdGlvbiBpc0hleERpZ2l0KGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBjb2RlIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlQSAmJiBjb2RlIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLnVwcGVyY2FzZUYpXG4gICk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9KU1hUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4uL3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lcicpO1xudmFyIF9nZXRKU1hQcmFnbWFJbmZvID0gcmVxdWlyZSgnLi9nZXRKU1hQcmFnbWFJbmZvJyk7IHZhciBfZ2V0SlNYUHJhZ21hSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRKU1hQcmFnbWFJbmZvKTtcblxuIGZ1bmN0aW9uIGdldE5vblR5cGVJZGVudGlmaWVycyh0b2tlbnMsIG9wdGlvbnMpIHtcbiAgY29uc3QganN4UHJhZ21hSW5mbyA9IF9nZXRKU1hQcmFnbWFJbmZvMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBvcHRpb25zKTtcbiAgY29uc3Qgbm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICAodG9rZW4uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzIHx8XG4gICAgICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZCB8fFxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3MpICYmXG4gICAgICAhdG9rZW4uc2hhZG93c0dsb2JhbFxuICAgICkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikpO1xuICAgIH1cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmJhc2UpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0ICYmXG4gICAgICBpICsgMSA8IHRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZFxuICAgICkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmJhc2UpO1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmZyYWdtZW50QmFzZSk7XG4gICAgfVxuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUgJiYgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICAgIC8vIExvd2VyLWNhc2Ugc2luZ2xlLWNvbXBvbmVudCB0YWcgbmFtZXMgbGlrZSBcImRpdlwiIGRvbid0IGNvdW50LlxuICAgICAgaWYgKCFfSlNYVHJhbnNmb3JtZXIuc3RhcnRzV2l0aExvd2VyQ2FzZS5jYWxsKHZvaWQgMCwgaWRlbnRpZmllck5hbWUpIHx8IHRva2Vucy50b2tlbnNbaSArIDFdLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZG90KSB7XG4gICAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vblR5cGVJZGVudGlmaWVycztcbn0gZXhwb3J0cy5nZXROb25UeXBlSWRlbnRpZmllcnMgPSBnZXROb25UeXBlSWRlbnRpZmllcnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXG52YXIgX3Rva2VuaXplciA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8gPSByZXF1aXJlKCcuL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbycpOyB2YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyk7XG52YXIgX2dldE5vblR5cGVJZGVudGlmaWVycyA9IHJlcXVpcmUoJy4vdXRpbC9nZXROb25UeXBlSWRlbnRpZmllcnMnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgcHJlcHJvY2Vzc2luZyBhbmQgYm9va2tlZXBpbmcgaW1wb3J0IGFuZCBleHBvcnQgZGVjbGFyYXRpb25zIHdpdGhpbiB0aGVcbiAqIGZpbGUuXG4gKlxuICogVHlwZVNjcmlwdCB1c2VzIGEgc2ltcGxlciBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCB1c2UgZnVuY3Rpb25zIGxpa2UgaW50ZXJvcFJlcXVpcmVEZWZhdWx0IGFuZFxuICogaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCwgc28gd2UgYWxzbyBhbGxvdyB0aGF0IG1vZGUgZm9yIGNvbXBhdGliaWxpdHkuXG4gKi9cbiBjbGFzcyBDSlNJbXBvcnRQcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMubm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpfVxuICAgX19pbml0MigpIHt0aGlzLmltcG9ydEluZm9CeVBhdGggPSBuZXcgTWFwKCl9XG4gICBfX2luaXQzKCkge3RoaXMuaW1wb3J0c1RvUmVwbGFjZSA9IG5ldyBNYXAoKX1cbiAgIF9faW5pdDQoKSB7dGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzID0gbmV3IE1hcCgpfVxuICAgX19pbml0NSgpIHt0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUgPSBuZXcgTWFwKCl9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICB0b2tlbnMsXG4gICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICBvcHRpb25zLFxuICAgICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3A7dGhpcy5vcHRpb25zID0gb3B0aW9uczt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMua2VlcFVudXNlZEltcG9ydHMgPSBrZWVwVW51c2VkSW1wb3J0czt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO0NKU0ltcG9ydFByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ1LmNhbGwodGhpcyk7fVxuXG4gIHByZXByb2Nlc3NUb2tlbnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMzQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NJbXBvcnRBdEluZGV4KGkpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5lcSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NFeHBvcnRBdEluZGV4KGkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlSW1wb3J0UmVwbGFjZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW4gVHlwZVNjcmlwdCwgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBvbmx5IGltcG9ydCB0eXBlcyBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICogVGhpcyBpbmNsdWRlcyBgaW1wb3J0IHt9IGZyb20gJ2Zvbyc7YCwgYnV0IG5vdCBgaW1wb3J0ICdmb28nO2AuXG4gICAqL1xuICBwcnVuZVR5cGVPbmx5SW1wb3J0cygpIHtcbiAgICB0aGlzLm5vblR5cGVJZGVudGlmaWVycyA9IF9nZXROb25UeXBlSWRlbnRpZmllcnMuZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmNhbGwodm9pZCAwLCB0aGlzLnRva2VucywgdGhpcy5vcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbXBvcnRJbmZvXSBvZiB0aGlzLmltcG9ydEluZm9CeVBhdGguZW50cmllcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydEluZm8uaGFzQmFyZUltcG9ydCB8fFxuICAgICAgICBpbXBvcnRJbmZvLmhhc1N0YXJFeHBvcnQgfHxcbiAgICAgICAgaW1wb3J0SW5mby5leHBvcnRTdGFyTmFtZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICBpbXBvcnRJbmZvLm5hbWVkRXhwb3J0cy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lcyA9IFtcbiAgICAgICAgLi4uaW1wb3J0SW5mby5kZWZhdWx0TmFtZXMsXG4gICAgICAgIC4uLmltcG9ydEluZm8ud2lsZGNhcmROYW1lcyxcbiAgICAgICAgLi4uaW1wb3J0SW5mby5uYW1lZEltcG9ydHMubWFwKCh7bG9jYWxOYW1lfSkgPT4gbG9jYWxOYW1lKSxcbiAgICAgIF07XG4gICAgICBpZiAobmFtZXMuZXZlcnkoKG5hbWUpID0+IHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKG5hbWUpKSkge1xuICAgICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgICF0aGlzLm5vblR5cGVJZGVudGlmaWVycy5oYXMobmFtZSlcbiAgICApO1xuICB9XG5cbiAgIGdlbmVyYXRlSW1wb3J0UmVwbGFjZW1lbnRzKCkge1xuICAgIGZvciAoY29uc3QgW3BhdGgsIGltcG9ydEluZm9dIG9mIHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVmYXVsdE5hbWVzLFxuICAgICAgICB3aWxkY2FyZE5hbWVzLFxuICAgICAgICBuYW1lZEltcG9ydHMsXG4gICAgICAgIG5hbWVkRXhwb3J0cyxcbiAgICAgICAgZXhwb3J0U3Rhck5hbWVzLFxuICAgICAgICBoYXNTdGFyRXhwb3J0LFxuICAgICAgfSA9IGltcG9ydEluZm87XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGVmYXVsdE5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB3aWxkY2FyZE5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBuYW1lZEltcG9ydHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIG5hbWVkRXhwb3J0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAhaGFzU3RhckV4cG9ydFxuICAgICAgKSB7XG4gICAgICAgIC8vIEltcG9ydCBpcyBuZXZlciB1c2VkLCBzbyBkb24ndCBldmVuIGFzc2lnbiBhIG5hbWUuXG4gICAgICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQocGF0aCwgYHJlcXVpcmUoJyR7cGF0aH0nKTtgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1hcnlJbXBvcnROYW1lID0gdGhpcy5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICBsZXQgc2Vjb25kYXJ5SW1wb3J0TmFtZTtcbiAgICAgIGlmICh0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wKSB7XG4gICAgICAgIHNlY29uZGFyeUltcG9ydE5hbWUgPSBwcmltYXJ5SW1wb3J0TmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZGFyeUltcG9ydE5hbWUgPVxuICAgICAgICAgIHdpbGRjYXJkTmFtZXMubGVuZ3RoID4gMCA/IHdpbGRjYXJkTmFtZXNbMF0gOiB0aGlzLmdldEZyZWVJZGVudGlmaWVyRm9yUGF0aChwYXRoKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXF1aXJlQ29kZSA9IGB2YXIgJHtwcmltYXJ5SW1wb3J0TmFtZX0gPSByZXF1aXJlKCcke3BhdGh9Jyk7YDtcbiAgICAgIGlmICh3aWxkY2FyZE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCB3aWxkY2FyZE5hbWUgb2Ygd2lsZGNhcmROYW1lcykge1xuICAgICAgICAgIGNvbnN0IG1vZHVsZUV4cHIgPSB0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wXG4gICAgICAgICAgICA/IHByaW1hcnlJbXBvcnROYW1lXG4gICAgICAgICAgICA6IGAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pYDtcbiAgICAgICAgICByZXF1aXJlQ29kZSArPSBgIHZhciAke3dpbGRjYXJkTmFtZX0gPSAke21vZHVsZUV4cHJ9O2A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA+IDAgJiYgc2Vjb25kYXJ5SW1wb3J0TmFtZSAhPT0gcHJpbWFyeUltcG9ydE5hbWUpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHtzZWNvbmRhcnlJbXBvcnROYW1lfSA9ICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJpbnRlcm9wUmVxdWlyZVdpbGRjYXJkXCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9KTtgO1xuICAgICAgfSBlbHNlIGlmIChkZWZhdWx0TmFtZXMubGVuZ3RoID4gMCAmJiBzZWNvbmRhcnlJbXBvcnROYW1lICE9PSBwcmltYXJ5SW1wb3J0TmFtZSkge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgIHZhciAke3NlY29uZGFyeUltcG9ydE5hbWV9ID0gJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcbiAgICAgICAgICBcImludGVyb3BSZXF1aXJlRGVmYXVsdFwiLFxuICAgICAgICApfSgke3ByaW1hcnlJbXBvcnROYW1lfSk7YDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB7aW1wb3J0ZWROYW1lLCBsb2NhbE5hbWV9IG9mIG5hbWVkRXhwb3J0cykge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJjcmVhdGVOYW1lZEV4cG9ydEZyb21cIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0sICcke2xvY2FsTmFtZX0nLCAnJHtpbXBvcnRlZE5hbWV9Jyk7YDtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZXhwb3J0U3Rhck5hbWUgb2YgZXhwb3J0U3Rhck5hbWVzKSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgZXhwb3J0cy4ke2V4cG9ydFN0YXJOYW1lfSA9ICR7c2Vjb25kYXJ5SW1wb3J0TmFtZX07YDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNTdGFyRXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcbiAgICAgICAgICBcImNyZWF0ZVN0YXJFeHBvcnRcIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pO2A7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQocGF0aCwgcmVxdWlyZUNvZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRlZmF1bHROYW1lIG9mIGRlZmF1bHROYW1lcykge1xuICAgICAgICB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuc2V0KGRlZmF1bHROYW1lLCBgJHtzZWNvbmRhcnlJbXBvcnROYW1lfS5kZWZhdWx0YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHtpbXBvcnRlZE5hbWUsIGxvY2FsTmFtZX0gb2YgbmFtZWRJbXBvcnRzKSB7XG4gICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQobG9jYWxOYW1lLCBgJHtwcmltYXJ5SW1wb3J0TmFtZX0uJHtpbXBvcnRlZE5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgbGFzdENvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGxhc3RDb21wb25lbnQucmVwbGFjZSgvXFxXL2csIFwiXCIpO1xuICAgIHJldHVybiB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoYF8ke2Jhc2VOYW1lfWApO1xuICB9XG5cbiAgIHByZXByb2Nlc3NJbXBvcnRBdEluZGV4KGluZGV4KSB7XG4gICAgY29uc3QgZGVmYXVsdE5hbWVzID0gW107XG4gICAgY29uc3Qgd2lsZGNhcmROYW1lcyA9IFtdO1xuICAgIGNvbnN0IG5hbWVkSW1wb3J0cyA9IFtdO1xuXG4gICAgaW5kZXgrKztcbiAgICBpZiAoXG4gICAgICAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKSkgJiZcbiAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAxLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIC8vIGltcG9ydCB0eXBlIGRlY2xhcmF0aW9uLCBzbyBubyBuZWVkIHRvIHByb2Nlc3MgYW55dGhpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAvLyBEeW5hbWljIGltcG9ydCwgc28gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIGRlZmF1bHROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgLy8gKiBhc1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIHdpbGRjYXJkTmFtZXMucHVzaCh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXgpKTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCArIDEpO1xuICAgICAgaW5kZXggPSByZXN1bHQubmV3SW5kZXg7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgcmVzdWx0Lm5hbWVkSW1wb3J0cykge1xuICAgICAgICAvLyBUcmVhdCB7ZGVmYXVsdCBhcyBYfSBhcyBhIGRlZmF1bHQgaW1wb3J0IHRvIGVuc3VyZSB1c2FnZSBvZiByZXF1aXJlIGludGVyb3AgaGVscGVyXG4gICAgICAgIGlmIChuYW1lZEltcG9ydC5pbXBvcnRlZE5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgZGVmYXVsdE5hbWVzLnB1c2gobmFtZWRJbXBvcnQubG9jYWxOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lZEltcG9ydHMucHVzaChuYW1lZEltcG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8uZGVmYXVsdE5hbWVzLnB1c2goLi4uZGVmYXVsdE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMucHVzaCguLi53aWxkY2FyZE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLm5hbWVkSW1wb3J0cy5wdXNoKC4uLm5hbWVkSW1wb3J0cyk7XG4gICAgaWYgKGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiYgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiYgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW1wb3J0SW5mby5oYXNCYXJlSW1wb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgcHJlcHJvY2Vzc0V4cG9ydEF0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fdmFyKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2xldCkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc1ZhckV4cG9ydEF0SW5kZXgoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpXG4gICAgKSB7XG4gICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4ICsgMik7XG4gICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcoZXhwb3J0TmFtZSwgZXhwb3J0TmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXggKyAzKTtcbiAgICAgIHRoaXMuYWRkRXhwb3J0QmluZGluZyhleHBvcnROYW1lLCBleHBvcnROYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgdGhpcy5wcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gICBwcmVwcm9jZXNzVmFyRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgLy8gSGFuZGxlIGNhc2VzIGxpa2UgYGV4cG9ydCBsZXQge3h9ID0geTtgLCBzdGFydGluZyBhdCB0aGUgb3Blbi1icmFjZSBpbiB0aGF0IGNhc2UuXG4gICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMjsgOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgaWYgKGRlcHRoID09PSAwICYmICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KDEsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4IC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2ldO1xuICAgICAgICBpZiAoX3Rva2VuaXplci5pc0RlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCB0b2tlbikpIHtcbiAgICAgICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGkpO1xuICAgICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQoZXhwb3J0TmFtZSwgYGV4cG9ydHMuJHtleHBvcnROYW1lfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdGhpcyBleHBvcnQgc3RhdGVtZW50IGp1c3QgaW4gY2FzZSBpdCdzIGFuIGV4cG9ydC4uLmZyb20gc3RhdGVtZW50LlxuICAgKiBJZiBpdCBpcywgY29tYmluZSBpdCBpbnRvIHRoZSBpbXBvcnQgaW5mbyBmb3IgdGhhdCBwYXRoLiBPdGhlcndpc2UsIGp1c3RcbiAgICogYmFpbCBvdXQ7IGl0J2xsIGJlIGhhbmRsZWQgbGF0ZXIuXG4gICAqL1xuICAgcHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIC8vIGV4cG9ydCB7XG4gICAgaW5kZXggKz0gMjtcbiAgICBjb25zdCB7bmV3SW5kZXgsIG5hbWVkSW1wb3J0c30gPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCk7XG4gICAgaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlaW50ZXJwcmV0IFwiYSBhcyBiXCIgdG8gYmUgbG9jYWwvZXhwb3J0ZWQgcmF0aGVyIHRoYW4gaW1wb3J0ZWQvbG9jYWwuXG4gICAgICBmb3IgKGNvbnN0IHtpbXBvcnRlZE5hbWU6IGxvY2FsTmFtZSwgbG9jYWxOYW1lOiBleHBvcnRlZE5hbWV9IG9mIG5hbWVkSW1wb3J0cykge1xuICAgICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcobG9jYWxOYW1lLCBleHBvcnRlZE5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8ubmFtZWRFeHBvcnRzLnB1c2goLi4ubmFtZWRJbXBvcnRzKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpIHtcbiAgICBsZXQgZXhwb3J0ZWROYW1lID0gbnVsbDtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuc3RhciwgX3R5cGVzLlRva2VuVHlwZS5fYXMpKSB7XG4gICAgICAvLyBleHBvcnQgKiBhc1xuICAgICAgaW5kZXggKz0gMztcbiAgICAgIGV4cG9ydGVkTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgICAvLyBmb28gZnJvbVxuICAgICAgaW5kZXggKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0ICogZnJvbVxuICAgICAgaW5kZXggKz0gMztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nIHRva2VuIGF0IHRoZSBlbmQgb2Ygc3RhciBleHBvcnQgc3RhdGVtZW50LlwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlQXRJbmRleChpbmRleCk7XG4gICAgY29uc3QgaW1wb3J0SW5mbyA9IHRoaXMuZ2V0SW1wb3J0SW5mbyhwYXRoKTtcbiAgICBpZiAoZXhwb3J0ZWROYW1lICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRJbmZvLmV4cG9ydFN0YXJOYW1lcy5wdXNoKGV4cG9ydGVkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltcG9ydEluZm8uaGFzU3RhckV4cG9ydCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgIGdldE5hbWVkSW1wb3J0cyhpbmRleCkge1xuICAgIGNvbnN0IG5hbWVkSW1wb3J0cyA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMsIGluZGV4KTtcbiAgICAgIGluZGV4ID0gc3BlY2lmaWVySW5mby5lbmRJbmRleDtcbiAgICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgICAgbmFtZWRJbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGltcG9ydGVkTmFtZTogc3BlY2lmaWVySW5mby5sZWZ0TmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllckluZm8ucmlnaHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0pfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge25ld0luZGV4OiBpbmRleCwgbmFtZWRJbXBvcnRzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBtdXRhYmxlIGltcG9ydCBpbmZvIG9iamVjdCBmb3IgdGhpcyBwYXRoLCBjcmVhdGluZyBvbmUgaWYgaXQgZG9lc24ndFxuICAgKiBleGlzdCB5ZXQuXG4gICAqL1xuICAgZ2V0SW1wb3J0SW5mbyhwYXRoKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJbmZvID0gdGhpcy5pbXBvcnRJbmZvQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoZXhpc3RpbmdJbmZvKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdJbmZvO1xuICAgIH1cbiAgICBjb25zdCBuZXdJbmZvID0ge1xuICAgICAgZGVmYXVsdE5hbWVzOiBbXSxcbiAgICAgIHdpbGRjYXJkTmFtZXM6IFtdLFxuICAgICAgbmFtZWRJbXBvcnRzOiBbXSxcbiAgICAgIG5hbWVkRXhwb3J0czogW10sXG4gICAgICBoYXNCYXJlSW1wb3J0OiBmYWxzZSxcbiAgICAgIGV4cG9ydFN0YXJOYW1lczogW10sXG4gICAgICBoYXNTdGFyRXhwb3J0OiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5zZXQocGF0aCwgbmV3SW5mbyk7XG4gICAgcmV0dXJuIG5ld0luZm87XG4gIH1cblxuICAgYWRkRXhwb3J0QmluZGluZyhsb2NhbE5hbWUsIGV4cG9ydGVkTmFtZSkge1xuICAgIGlmICghdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLmhhcyhsb2NhbE5hbWUpKSB7XG4gICAgICB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuc2V0KGxvY2FsTmFtZSwgW10pO1xuICAgIH1cbiAgICB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuZ2V0KGxvY2FsTmFtZSkucHVzaChleHBvcnRlZE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY29kZSB0byB1c2UgZm9yIHRoZSBpbXBvcnQgZm9yIHRoaXMgcGF0aCwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZlxuICAgKiB0aGUgY29kZSBoYXMgYWxyZWFkeSBiZWVuIFwiY2xhaW1lZFwiIGJ5IGEgcHJldmlvdXMgaW1wb3J0LlxuICAgKi9cbiAgY2xhaW1JbXBvcnRDb2RlKGltcG9ydFBhdGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmltcG9ydHNUb1JlcGxhY2UuZ2V0KGltcG9ydFBhdGgpO1xuICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQoaW1wb3J0UGF0aCwgXCJcIik7XG4gICAgcmV0dXJuIHJlc3VsdCB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGlkZW50aWZpZXJOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5nZXQoaWRlbnRpZmllck5hbWUpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3RyaW5nIGxpa2UgYGV4cG9ydHMuZm9vID0gZXhwb3J0cy5iYXJgLlxuICAgKi9cbiAgcmVzb2x2ZUV4cG9ydEJpbmRpbmcoYXNzaWduZWROYW1lKSB7XG4gICAgY29uc3QgZXhwb3J0ZWROYW1lcyA9IHRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5nZXQoYXNzaWduZWROYW1lKTtcbiAgICBpZiAoIWV4cG9ydGVkTmFtZXMgfHwgZXhwb3J0ZWROYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0ZWROYW1lcy5tYXAoKGV4cG9ydGVkTmFtZSkgPT4gYGV4cG9ydHMuJHtleHBvcnRlZE5hbWV9YCkuam9pbihcIiA9IFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGltcG9ydGVkL2V4cG9ydGVkIG5hbWVzIHdoZXJlIHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gd2hldGhlciB1c2FnZXMgb2YgdGhvc2VcbiAgICogbmFtZXMgYXJlIHNoYWRvd2VkLlxuICAgKi9cbiAgZ2V0R2xvYmFsTmFtZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgLi4udGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzLmtleXMoKSxcbiAgICAgIC4uLnRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5rZXlzKCksXG4gICAgXSk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gQ0pTSW1wb3J0UHJvY2Vzc29yO1xuIiwgInR5cGUgS2V5ID0gc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sO1xuXG4vKipcbiAqIFNldEFycmF5IGFjdHMgbGlrZSBhIGBTZXRgIChhbGxvd2luZyBvbmx5IG9uZSBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIGBrZXlgKSwgYnV0IHByb3ZpZGVzIHRoZVxuICogaW5kZXggb2YgdGhlIGBrZXlgIGluIHRoZSBiYWNraW5nIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgZGVzaWduZWQgdG8gYWxsb3cgc3luY2hyb25pemluZyBhIHNlY29uZCBhcnJheSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgYmFja2luZyBhcnJheSxcbiAqIGxpa2UgaG93IGluIGEgc291cmNlbWFwIGBzb3VyY2VzQ29udGVudFtpXWAgaXMgdGhlIHNvdXJjZSBjb250ZW50IGFzc29jaWF0ZWQgd2l0aCBgc291cmNlW2ldYCxcbiAqIGFuZCB0aGVyZSBhcmUgbmV2ZXIgZHVwbGljYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldEFycmF5PFQgZXh0ZW5kcyBLZXkgPSBLZXk+IHtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9pbmRleGVzOiBSZWNvcmQ8VCwgbnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgZGVjbGFyZSBhcnJheTogcmVhZG9ubHkgVFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luZGV4ZXMgPSB7IF9fcHJvdG9fXzogbnVsbCB9IGFzIGFueTtcbiAgICB0aGlzLmFycmF5ID0gW107XG4gIH1cbn1cblxuaW50ZXJmYWNlIFB1YmxpY1NldDxUIGV4dGVuZHMgS2V5PiB7XG4gIGFycmF5OiBUW107XG4gIF9pbmRleGVzOiBTZXRBcnJheTxUPlsnX2luZGV4ZXMnXTtcbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBzZXQgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3Q8VCBleHRlbmRzIEtleT4oc2V0OiBTZXRBcnJheTxUPik6IFB1YmxpY1NldDxUPiB7XG4gIHJldHVybiBzZXQgYXMgYW55O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBga2V5YCBpbiB0aGUgYmFja2luZyBhcnJheSwgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQgZXh0ZW5kcyBLZXk+KHNldGFycjogU2V0QXJyYXk8VD4sIGtleTogVCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjYXN0KHNldGFycikuX2luZGV4ZXNba2V5XTtcbn1cblxuLyoqXG4gKiBQdXRzIGBrZXlgIGludG8gdGhlIGJhY2tpbmcgYXJyYXksIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuIFJldHVybnNcbiAqIHRoZSBpbmRleCBvZiB0aGUgYGtleWAgaW4gdGhlIGJhY2tpbmcgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXQ8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogbnVtYmVyIHtcbiAgLy8gVGhlIGtleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LiBJZiBpdCBpcyBwcmVzZW50LCBpdCdzIGEgbnVtYmVyLlxuICBjb25zdCBpbmRleCA9IGdldChzZXRhcnIsIGtleSk7XG4gIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaW5kZXg7XG5cbiAgY29uc3QgeyBhcnJheSwgX2luZGV4ZXM6IGluZGV4ZXMgfSA9IGNhc3Qoc2V0YXJyKTtcblxuICBjb25zdCBsZW5ndGggPSBhcnJheS5wdXNoKGtleSk7XG4gIHJldHVybiAoaW5kZXhlc1trZXldID0gbGVuZ3RoIC0gMSk7XG59XG5cbi8qKlxuICogUG9wcyB0aGUgbGFzdCBhZGRlZCBpdGVtIG91dCBvZiB0aGUgU2V0QXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3A8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPik6IHZvaWQge1xuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgbGFzdCA9IGFycmF5LnBvcCgpITtcbiAgaW5kZXhlc1tsYXN0XSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBrZXksIGlmIGl0IGV4aXN0cyBpbiB0aGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlPFQgZXh0ZW5kcyBLZXk+KHNldGFycjogU2V0QXJyYXk8VD4sIGtleTogVCk6IHZvaWQge1xuICBjb25zdCBpbmRleCA9IGdldChzZXRhcnIsIGtleSk7XG4gIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgY29uc3QgeyBhcnJheSwgX2luZGV4ZXM6IGluZGV4ZXMgfSA9IGNhc3Qoc2V0YXJyKTtcbiAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgayA9IGFycmF5W2ldO1xuICAgIGFycmF5W2kgLSAxXSA9IGs7XG4gICAgaW5kZXhlc1trXSEtLTtcbiAgfVxuICBpbmRleGVzW2tleV0gPSB1bmRlZmluZWQ7XG4gIGFycmF5LnBvcCgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RyaW5nUmVhZGVyLCBTdHJpbmdXcml0ZXIgfSBmcm9tICcuL3N0cmluZ3MnO1xuXG5leHBvcnQgY29uc3QgY29tbWEgPSAnLCcuY2hhckNvZGVBdCgwKTtcbmV4cG9ydCBjb25zdCBzZW1pY29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcblxuY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5jb25zdCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCk7IC8vIDY0IHBvc3NpYmxlIGNoYXJzLlxuY29uc3QgY2hhclRvSW50ID0gbmV3IFVpbnQ4QXJyYXkoMTI4KTsgLy8geiBpcyAxMjIgaW4gQVNDSUlcblxuZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICBjb25zdCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgaW50VG9DaGFyW2ldID0gYztcbiAgY2hhclRvSW50W2NdID0gaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyOiBTdHJpbmdSZWFkZXIsIHJlbGF0aXZlOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgc2hpZnQgPSAwO1xuICBsZXQgaW50ZWdlciA9IDA7XG5cbiAgZG8ge1xuICAgIGNvbnN0IGMgPSByZWFkZXIubmV4dCgpO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcblxuICBjb25zdCBzaG91bGROZWdhdGUgPSB2YWx1ZSAmIDE7XG4gIHZhbHVlID4+Pj0gMTtcblxuICBpZiAoc2hvdWxkTmVnYXRlKSB7XG4gICAgdmFsdWUgPSAtMHg4MDAwMDAwMCB8IC12YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZWxhdGl2ZSArIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSW50ZWdlcihidWlsZGVyOiBTdHJpbmdXcml0ZXIsIG51bTogbnVtYmVyLCByZWxhdGl2ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRlbHRhID0gbnVtIC0gcmVsYXRpdmU7XG5cbiAgZGVsdGEgPSBkZWx0YSA8IDAgPyAoLWRlbHRhIDw8IDEpIHwgMSA6IGRlbHRhIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IGRlbHRhICYgMGIwMTExMTE7XG4gICAgZGVsdGEgPj4+PSA1O1xuICAgIGlmIChkZWx0YSA+IDApIGNsYW1wZWQgfD0gMGIxMDAwMDA7XG4gICAgYnVpbGRlci53cml0ZShpbnRUb0NoYXJbY2xhbXBlZF0pO1xuICB9IHdoaWxlIChkZWx0YSA+IDApO1xuXG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNb3JlVmxxKHJlYWRlcjogU3RyaW5nUmVhZGVyLCBtYXg6IG51bWJlcikge1xuICBpZiAocmVhZGVyLnBvcyA+PSBtYXgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlYWRlci5wZWVrKCkgIT09IGNvbW1hO1xufVxuIiwgImNvbnN0IGJ1Zkxlbmd0aCA9IDEwMjQgKiAxNjtcblxuLy8gUHJvdmlkZSBhIGZhbGxiYWNrIGZvciBvbGRlciBlbnZpcm9ubWVudHMuXG5jb25zdCB0ZCA9XG4gIHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IC8qICNfX1BVUkVfXyAqLyBuZXcgVGV4dERlY29kZXIoKVxuICAgIDogdHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHtcbiAgICAgICAgZGVjb2RlKGJ1ZjogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgICAgICAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20oYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIGRlY29kZShidWY6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdXcml0ZXIge1xuICBwb3MgPSAwO1xuICBwcml2YXRlIG91dCA9ICcnO1xuICBwcml2YXRlIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJ1Zkxlbmd0aCk7XG5cbiAgd3JpdGUodjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBidWZmZXIgfSA9IHRoaXM7XG4gICAgYnVmZmVyW3RoaXMucG9zKytdID0gdjtcbiAgICBpZiAodGhpcy5wb3MgPT09IGJ1Zkxlbmd0aCkge1xuICAgICAgdGhpcy5vdXQgKz0gdGQuZGVjb2RlKGJ1ZmZlcik7XG4gICAgICB0aGlzLnBvcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGJ1ZmZlciwgb3V0LCBwb3MgfSA9IHRoaXM7XG4gICAgcmV0dXJuIHBvcyA+IDAgPyBvdXQgKyB0ZC5kZWNvZGUoYnVmZmVyLnN1YmFycmF5KDAsIHBvcykpIDogb3V0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdSZWFkZXIge1xuICBwb3MgPSAwO1xuICBwcml2YXRlIGRlY2xhcmUgYnVmZmVyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYnVmZmVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfVxuXG4gIG5leHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcbiAgfVxuXG4gIHBlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIH1cblxuICBpbmRleE9mKGNoYXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgeyBidWZmZXIsIHBvcyB9ID0gdGhpcztcbiAgICBjb25zdCBpZHggPSBidWZmZXIuaW5kZXhPZihjaGFyLCBwb3MpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gYnVmZmVyLmxlbmd0aCA6IGlkeDtcbiAgfVxufVxuIiwgImltcG9ydCB7IFN0cmluZ1JlYWRlciwgU3RyaW5nV3JpdGVyIH0gZnJvbSAnLi9zdHJpbmdzJztcbmltcG9ydCB7IGNvbW1hLCBkZWNvZGVJbnRlZ2VyLCBlbmNvZGVJbnRlZ2VyLCBoYXNNb3JlVmxxLCBzZW1pY29sb24gfSBmcm9tICcuL3ZscSc7XG5cbmNvbnN0IEVNUFRZOiBhbnlbXSA9IFtdO1xuXG50eXBlIExpbmUgPSBudW1iZXI7XG50eXBlIENvbHVtbiA9IG51bWJlcjtcbnR5cGUgS2luZCA9IG51bWJlcjtcbnR5cGUgTmFtZSA9IG51bWJlcjtcbnR5cGUgVmFyID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNjb3Blc0luZGV4ID0gbnVtYmVyO1xuXG50eXBlIE1peDxBLCBCLCBPPiA9IChBICYgTykgfCAoQiAmIE8pO1xuXG5leHBvcnQgdHlwZSBPcmlnaW5hbFNjb3BlID0gTWl4PFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIEtpbmRdLFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIEtpbmQsIE5hbWVdLFxuICB7IHZhcnM6IFZhcltdIH1cbj47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlZFJhbmdlID0gTWl4PFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW5dLFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIFNvdXJjZXNJbmRleCwgU2NvcGVzSW5kZXhdLFxuICB7XG4gICAgY2FsbHNpdGU6IENhbGxTaXRlIHwgbnVsbDtcbiAgICBiaW5kaW5nczogQmluZGluZ1tdO1xuICAgIGlzU2NvcGU6IGJvb2xlYW47XG4gIH1cbj47XG5leHBvcnQgdHlwZSBDYWxsU2l0ZSA9IFtTb3VyY2VzSW5kZXgsIExpbmUsIENvbHVtbl07XG50eXBlIEJpbmRpbmcgPSBCaW5kaW5nRXhwcmVzc2lvblJhbmdlW107XG5leHBvcnQgdHlwZSBCaW5kaW5nRXhwcmVzc2lvblJhbmdlID0gW05hbWVdIHwgW05hbWUsIExpbmUsIENvbHVtbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVPcmlnaW5hbFNjb3BlcyhpbnB1dDogc3RyaW5nKTogT3JpZ2luYWxTY29wZVtdIHtcbiAgY29uc3QgeyBsZW5ndGggfSA9IGlucHV0O1xuICBjb25zdCByZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTtcbiAgY29uc3Qgc2NvcGVzOiBPcmlnaW5hbFNjb3BlW10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IE9yaWdpbmFsU2NvcGVbXSA9IFtdO1xuICBsZXQgbGluZSA9IDA7XG5cbiAgZm9yICg7IHJlYWRlci5wb3MgPCBsZW5ndGg7IHJlYWRlci5wb3MrKykge1xuICAgIGxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbGluZSk7XG4gICAgY29uc3QgY29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuXG4gICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpITtcbiAgICAgIGxhc3RbMl0gPSBsaW5lO1xuICAgICAgbGFzdFszXSA9IGNvbHVtbjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgY29uc3QgZmllbGRzID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgIGNvbnN0IGhhc05hbWUgPSBmaWVsZHMgJiAwYjAwMDE7XG5cbiAgICBjb25zdCBzY29wZTogT3JpZ2luYWxTY29wZSA9IChcbiAgICAgIGhhc05hbWUgPyBbbGluZSwgY29sdW1uLCAwLCAwLCBraW5kLCBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCldIDogW2xpbmUsIGNvbHVtbiwgMCwgMCwga2luZF1cbiAgICApIGFzIE9yaWdpbmFsU2NvcGU7XG5cbiAgICBsZXQgdmFyczogVmFyW10gPSBFTVBUWTtcbiAgICBpZiAoaGFzTW9yZVZscShyZWFkZXIsIGxlbmd0aCkpIHtcbiAgICAgIHZhcnMgPSBbXTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgdmFyc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICB2YXJzLnB1c2godmFyc0luZGV4KTtcbiAgICAgIH0gd2hpbGUgKGhhc01vcmVWbHEocmVhZGVyLCBsZW5ndGgpKTtcbiAgICB9XG4gICAgc2NvcGUudmFycyA9IHZhcnM7XG5cbiAgICBzY29wZXMucHVzaChzY29wZSk7XG4gICAgc3RhY2sucHVzaChzY29wZSk7XG4gIH1cblxuICByZXR1cm4gc2NvcGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzOiBPcmlnaW5hbFNjb3BlW10pOiBzdHJpbmcge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29wZXMubGVuZ3RoOyApIHtcbiAgICBpID0gX2VuY29kZU9yaWdpbmFsU2NvcGVzKHNjb3BlcywgaSwgd3JpdGVyLCBbMF0pO1xuICB9XG5cbiAgcmV0dXJuIHdyaXRlci5mbHVzaCgpO1xufVxuXG5mdW5jdGlvbiBfZW5jb2RlT3JpZ2luYWxTY29wZXMoXG4gIHNjb3BlczogT3JpZ2luYWxTY29wZVtdLFxuICBpbmRleDogbnVtYmVyLFxuICB3cml0ZXI6IFN0cmluZ1dyaXRlcixcbiAgc3RhdGU6IFtcbiAgICBudW1iZXIsIC8vIEdlbkNvbHVtblxuICBdLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NvcGUgPSBzY29wZXNbaW5kZXhdO1xuICBjb25zdCB7IDA6IHN0YXJ0TGluZSwgMTogc3RhcnRDb2x1bW4sIDI6IGVuZExpbmUsIDM6IGVuZENvbHVtbiwgNDoga2luZCwgdmFycyB9ID0gc2NvcGU7XG5cbiAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcblxuICBzdGF0ZVswXSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzdGFydExpbmUsIHN0YXRlWzBdKTtcbiAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIHN0YXJ0Q29sdW1uLCAwKTtcbiAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGtpbmQsIDApO1xuXG4gIGNvbnN0IGZpZWxkcyA9IHNjb3BlLmxlbmd0aCA9PT0gNiA/IDBiMDAwMSA6IDA7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuICBpZiAoc2NvcGUubGVuZ3RoID09PSA2KSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVbNV0sIDApO1xuXG4gIGZvciAoY29uc3QgdiBvZiB2YXJzKSB7XG4gICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIHYsIDApO1xuICB9XG5cbiAgZm9yIChpbmRleCsrOyBpbmRleCA8IHNjb3Blcy5sZW5ndGg7ICkge1xuICAgIGNvbnN0IG5leHQgPSBzY29wZXNbaW5kZXhdO1xuICAgIGNvbnN0IHsgMDogbCwgMTogYyB9ID0gbmV4dDtcbiAgICBpZiAobCA+IGVuZExpbmUgfHwgKGwgPT09IGVuZExpbmUgJiYgYyA+PSBlbmRDb2x1bW4pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSk7XG4gIH1cblxuICB3cml0ZXIud3JpdGUoY29tbWEpO1xuICBzdGF0ZVswXSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBlbmRMaW5lLCBzdGF0ZVswXSk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBlbmRDb2x1bW4sIDApO1xuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUdlbmVyYXRlZFJhbmdlcyhpbnB1dDogc3RyaW5nKTogR2VuZXJhdGVkUmFuZ2VbXSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBpbnB1dDtcbiAgY29uc3QgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG4gIGNvbnN0IHJhbmdlczogR2VuZXJhdGVkUmFuZ2VbXSA9IFtdO1xuICBjb25zdCBzdGFjazogR2VuZXJhdGVkUmFuZ2VbXSA9IFtdO1xuXG4gIGxldCBnZW5MaW5lID0gMDtcbiAgbGV0IGRlZmluaXRpb25Tb3VyY2VzSW5kZXggPSAwO1xuICBsZXQgZGVmaW5pdGlvblNjb3BlSW5kZXggPSAwO1xuICBsZXQgY2FsbHNpdGVTb3VyY2VzSW5kZXggPSAwO1xuICBsZXQgY2FsbHNpdGVMaW5lID0gMDtcbiAgbGV0IGNhbGxzaXRlQ29sdW1uID0gMDtcbiAgbGV0IGJpbmRpbmdMaW5lID0gMDtcbiAgbGV0IGJpbmRpbmdDb2x1bW4gPSAwO1xuXG4gIGRvIHtcbiAgICBjb25zdCBzZW1pID0gcmVhZGVyLmluZGV4T2YoJzsnKTtcbiAgICBsZXQgZ2VuQ29sdW1uID0gMDtcblxuICAgIGZvciAoOyByZWFkZXIucG9zIDwgc2VtaTsgcmVhZGVyLnBvcysrKSB7XG4gICAgICBnZW5Db2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZ2VuQ29sdW1uKTtcblxuICAgICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgbGFzdFsyXSA9IGdlbkxpbmU7XG4gICAgICAgIGxhc3RbM10gPSBnZW5Db2x1bW47XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICBjb25zdCBoYXNEZWZpbml0aW9uID0gZmllbGRzICYgMGIwMDAxO1xuICAgICAgY29uc3QgaGFzQ2FsbHNpdGUgPSBmaWVsZHMgJiAwYjAwMTA7XG4gICAgICBjb25zdCBoYXNTY29wZSA9IGZpZWxkcyAmIDBiMDEwMDtcblxuICAgICAgbGV0IGNhbGxzaXRlOiBDYWxsU2l0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGJpbmRpbmdzOiBCaW5kaW5nW10gPSBFTVBUWTtcbiAgICAgIGxldCByYW5nZTogR2VuZXJhdGVkUmFuZ2U7XG4gICAgICBpZiAoaGFzRGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBkZWZTb3VyY2VzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZGVmaW5pdGlvblNvdXJjZXNJbmRleCk7XG4gICAgICAgIGRlZmluaXRpb25TY29wZUluZGV4ID0gZGVjb2RlSW50ZWdlcihcbiAgICAgICAgICByZWFkZXIsXG4gICAgICAgICAgZGVmaW5pdGlvblNvdXJjZXNJbmRleCA9PT0gZGVmU291cmNlc0luZGV4ID8gZGVmaW5pdGlvblNjb3BlSW5kZXggOiAwLFxuICAgICAgICApO1xuXG4gICAgICAgIGRlZmluaXRpb25Tb3VyY2VzSW5kZXggPSBkZWZTb3VyY2VzSW5kZXg7XG4gICAgICAgIHJhbmdlID0gW2dlbkxpbmUsIGdlbkNvbHVtbiwgMCwgMCwgZGVmU291cmNlc0luZGV4LCBkZWZpbml0aW9uU2NvcGVJbmRleF0gYXMgR2VuZXJhdGVkUmFuZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZSA9IFtnZW5MaW5lLCBnZW5Db2x1bW4sIDAsIDBdIGFzIEdlbmVyYXRlZFJhbmdlO1xuICAgICAgfVxuXG4gICAgICByYW5nZS5pc1Njb3BlID0gISFoYXNTY29wZTtcblxuICAgICAgaWYgKGhhc0NhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IHByZXZDc2kgPSBjYWxsc2l0ZVNvdXJjZXNJbmRleDtcbiAgICAgICAgY29uc3QgcHJldkxpbmUgPSBjYWxsc2l0ZUxpbmU7XG4gICAgICAgIGNhbGxzaXRlU291cmNlc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGNhbGxzaXRlU291cmNlc0luZGV4KTtcbiAgICAgICAgY29uc3Qgc2FtZVNvdXJjZSA9IHByZXZDc2kgPT09IGNhbGxzaXRlU291cmNlc0luZGV4O1xuICAgICAgICBjYWxsc2l0ZUxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc2FtZVNvdXJjZSA/IGNhbGxzaXRlTGluZSA6IDApO1xuICAgICAgICBjYWxsc2l0ZUNvbHVtbiA9IGRlY29kZUludGVnZXIoXG4gICAgICAgICAgcmVhZGVyLFxuICAgICAgICAgIHNhbWVTb3VyY2UgJiYgcHJldkxpbmUgPT09IGNhbGxzaXRlTGluZSA/IGNhbGxzaXRlQ29sdW1uIDogMCxcbiAgICAgICAgKTtcblxuICAgICAgICBjYWxsc2l0ZSA9IFtjYWxsc2l0ZVNvdXJjZXNJbmRleCwgY2FsbHNpdGVMaW5lLCBjYWxsc2l0ZUNvbHVtbl07XG4gICAgICB9XG4gICAgICByYW5nZS5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICBpZiAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKSB7XG4gICAgICAgIGJpbmRpbmdzID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBiaW5kaW5nTGluZSA9IGdlbkxpbmU7XG4gICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGdlbkNvbHVtbjtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uc0NvdW50ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgIGxldCBleHByZXNzaW9uUmFuZ2VzOiBCaW5kaW5nRXhwcmVzc2lvblJhbmdlW107XG4gICAgICAgICAgaWYgKGV4cHJlc3Npb25zQ291bnQgPCAtMSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlcyA9IFtbZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApXV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IGkgPiBleHByZXNzaW9uc0NvdW50OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkJsID0gYmluZGluZ0xpbmU7XG4gICAgICAgICAgICAgIGJpbmRpbmdMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGJpbmRpbmdMaW5lKTtcbiAgICAgICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBiaW5kaW5nTGluZSA9PT0gcHJldkJsID8gYmluZGluZ0NvbHVtbiA6IDApO1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VzLnB1c2goW2V4cHJlc3Npb24sIGJpbmRpbmdMaW5lLCBiaW5kaW5nQ29sdW1uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZXMgPSBbW2V4cHJlc3Npb25zQ291bnRdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluZGluZ3MucHVzaChleHByZXNzaW9uUmFuZ2VzKTtcbiAgICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmJpbmRpbmdzID0gYmluZGluZ3M7XG5cbiAgICAgIHJhbmdlcy5wdXNoKHJhbmdlKTtcbiAgICAgIHN0YWNrLnB1c2gocmFuZ2UpO1xuICAgIH1cblxuICAgIGdlbkxpbmUrKztcbiAgICByZWFkZXIucG9zID0gc2VtaSArIDE7XG4gIH0gd2hpbGUgKHJlYWRlci5wb3MgPCBsZW5ndGgpO1xuXG4gIHJldHVybiByYW5nZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzOiBHZW5lcmF0ZWRSYW5nZVtdKTogc3RyaW5nIHtcbiAgaWYgKHJhbmdlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyApIHtcbiAgICBpID0gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhyYW5nZXMsIGksIHdyaXRlciwgWzAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcbiAgfVxuXG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cblxuZnVuY3Rpb24gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhcbiAgcmFuZ2VzOiBHZW5lcmF0ZWRSYW5nZVtdLFxuICBpbmRleDogbnVtYmVyLFxuICB3cml0ZXI6IFN0cmluZ1dyaXRlcixcbiAgc3RhdGU6IFtcbiAgICBudW1iZXIsIC8vIEdlbkxpbmVcbiAgICBudW1iZXIsIC8vIEdlbkNvbHVtblxuICAgIG51bWJlciwgLy8gRGVmU291cmNlc0luZGV4XG4gICAgbnVtYmVyLCAvLyBEZWZTY29wZXNJbmRleFxuICAgIG51bWJlciwgLy8gQ2FsbFNvdXJjZXNJbmRleFxuICAgIG51bWJlciwgLy8gQ2FsbExpbmVcbiAgICBudW1iZXIsIC8vIENhbGxDb2x1bW5cbiAgXSxcbik6IG51bWJlciB7XG4gIGNvbnN0IHJhbmdlID0gcmFuZ2VzW2luZGV4XTtcbiAgY29uc3Qge1xuICAgIDA6IHN0YXJ0TGluZSxcbiAgICAxOiBzdGFydENvbHVtbixcbiAgICAyOiBlbmRMaW5lLFxuICAgIDM6IGVuZENvbHVtbixcbiAgICBpc1Njb3BlLFxuICAgIGNhbGxzaXRlLFxuICAgIGJpbmRpbmdzLFxuICB9ID0gcmFuZ2U7XG5cbiAgaWYgKHN0YXRlWzBdIDwgc3RhcnRMaW5lKSB7XG4gICAgY2F0Y2h1cExpbmUod3JpdGVyLCBzdGF0ZVswXSwgc3RhcnRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IHN0YXJ0TGluZTtcbiAgICBzdGF0ZVsxXSA9IDA7XG4gIH0gZWxzZSBpZiAoaW5kZXggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgfVxuXG4gIHN0YXRlWzFdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHJhbmdlWzFdLCBzdGF0ZVsxXSk7XG5cbiAgY29uc3QgZmllbGRzID1cbiAgICAocmFuZ2UubGVuZ3RoID09PSA2ID8gMGIwMDAxIDogMCkgfCAoY2FsbHNpdGUgPyAwYjAwMTAgOiAwKSB8IChpc1Njb3BlID8gMGIwMTAwIDogMCk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuXG4gIGlmIChyYW5nZS5sZW5ndGggPT09IDYpIHtcbiAgICBjb25zdCB7IDQ6IHNvdXJjZXNJbmRleCwgNTogc2NvcGVzSW5kZXggfSA9IHJhbmdlO1xuICAgIGlmIChzb3VyY2VzSW5kZXggIT09IHN0YXRlWzJdKSB7XG4gICAgICBzdGF0ZVszXSA9IDA7XG4gICAgfVxuICAgIHN0YXRlWzJdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNvdXJjZXNJbmRleCwgc3RhdGVbMl0pO1xuICAgIHN0YXRlWzNdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNjb3Blc0luZGV4LCBzdGF0ZVszXSk7XG4gIH1cblxuICBpZiAoY2FsbHNpdGUpIHtcbiAgICBjb25zdCB7IDA6IHNvdXJjZXNJbmRleCwgMTogY2FsbExpbmUsIDI6IGNhbGxDb2x1bW4gfSA9IHJhbmdlLmNhbGxzaXRlITtcbiAgICBpZiAoc291cmNlc0luZGV4ICE9PSBzdGF0ZVs0XSkge1xuICAgICAgc3RhdGVbNV0gPSAwO1xuICAgICAgc3RhdGVbNl0gPSAwO1xuICAgIH0gZWxzZSBpZiAoY2FsbExpbmUgIT09IHN0YXRlWzVdKSB7XG4gICAgICBzdGF0ZVs2XSA9IDA7XG4gICAgfVxuICAgIHN0YXRlWzRdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNvdXJjZXNJbmRleCwgc3RhdGVbNF0pO1xuICAgIHN0YXRlWzVdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGNhbGxMaW5lLCBzdGF0ZVs1XSk7XG4gICAgc3RhdGVbNl0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgY2FsbENvbHVtbiwgc3RhdGVbNl0pO1xuICB9XG5cbiAgaWYgKGJpbmRpbmdzKSB7XG4gICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzKSB7XG4gICAgICBpZiAoYmluZGluZy5sZW5ndGggPiAxKSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgLWJpbmRpbmcubGVuZ3RoLCAwKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBiaW5kaW5nWzBdWzBdO1xuICAgICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cHJlc3Npb24sIDApO1xuICAgICAgbGV0IGJpbmRpbmdTdGFydExpbmUgPSBzdGFydExpbmU7XG4gICAgICBsZXQgYmluZGluZ1N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJpbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwUmFuZ2UgPSBiaW5kaW5nW2ldO1xuICAgICAgICBiaW5kaW5nU3RhcnRMaW5lID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzFdISwgYmluZGluZ1N0YXJ0TGluZSk7XG4gICAgICAgIGJpbmRpbmdTdGFydENvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBleHBSYW5nZVsyXSEsIGJpbmRpbmdTdGFydENvbHVtbik7XG4gICAgICAgIGVuY29kZUludGVnZXIod3JpdGVyLCBleHBSYW5nZVswXSEsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoaW5kZXgrKzsgaW5kZXggPCByYW5nZXMubGVuZ3RoOyApIHtcbiAgICBjb25zdCBuZXh0ID0gcmFuZ2VzW2luZGV4XTtcbiAgICBjb25zdCB7IDA6IGwsIDE6IGMgfSA9IG5leHQ7XG4gICAgaWYgKGwgPiBlbmRMaW5lIHx8IChsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ID0gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhyYW5nZXMsIGluZGV4LCB3cml0ZXIsIHN0YXRlKTtcbiAgfVxuXG4gIGlmIChzdGF0ZVswXSA8IGVuZExpbmUpIHtcbiAgICBjYXRjaHVwTGluZSh3cml0ZXIsIHN0YXRlWzBdLCBlbmRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IGVuZExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2Uge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCBzdGF0ZVsxXSk7XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBjYXRjaHVwTGluZSh3cml0ZXI6IFN0cmluZ1dyaXRlciwgbGFzdExpbmU6IG51bWJlciwgbGluZTogbnVtYmVyKSB7XG4gIGRvIHtcbiAgICB3cml0ZXIud3JpdGUoc2VtaWNvbG9uKTtcbiAgfSB3aGlsZSAoKytsYXN0TGluZSA8IGxpbmUpO1xufVxuIiwgImltcG9ydCB7IGNvbW1hLCBkZWNvZGVJbnRlZ2VyLCBlbmNvZGVJbnRlZ2VyLCBoYXNNb3JlVmxxLCBzZW1pY29sb24gfSBmcm9tICcuL3ZscSc7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZXIsIFN0cmluZ1JlYWRlciB9IGZyb20gJy4vc3RyaW5ncyc7XG5cbmV4cG9ydCB7XG4gIGRlY29kZU9yaWdpbmFsU2NvcGVzLFxuICBlbmNvZGVPcmlnaW5hbFNjb3BlcyxcbiAgZGVjb2RlR2VuZXJhdGVkUmFuZ2VzLFxuICBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMsXG59IGZyb20gJy4vc2NvcGVzJztcbmV4cG9ydCB0eXBlIHsgT3JpZ2luYWxTY29wZSwgR2VuZXJhdGVkUmFuZ2UsIENhbGxTaXRlLCBCaW5kaW5nRXhwcmVzc2lvblJhbmdlIH0gZnJvbSAnLi9zY29wZXMnO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbbnVtYmVyXVxuICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4gIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFNvdXJjZU1hcExpbmUgPSBTb3VyY2VNYXBTZWdtZW50W107XG5leHBvcnQgdHlwZSBTb3VyY2VNYXBNYXBwaW5ncyA9IFNvdXJjZU1hcExpbmVbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShtYXBwaW5nczogc3RyaW5nKTogU291cmNlTWFwTWFwcGluZ3Mge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gbWFwcGluZ3M7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIobWFwcGluZ3MpO1xuICBjb25zdCBkZWNvZGVkOiBTb3VyY2VNYXBNYXBwaW5ncyA9IFtdO1xuICBsZXQgZ2VuQ29sdW1uID0gMDtcbiAgbGV0IHNvdXJjZXNJbmRleCA9IDA7XG4gIGxldCBzb3VyY2VMaW5lID0gMDtcbiAgbGV0IHNvdXJjZUNvbHVtbiA9IDA7XG4gIGxldCBuYW1lc0luZGV4ID0gMDtcblxuICBkbyB7XG4gICAgY29uc3Qgc2VtaSA9IHJlYWRlci5pbmRleE9mKCc7Jyk7XG4gICAgY29uc3QgbGluZTogU291cmNlTWFwTGluZSA9IFtdO1xuICAgIGxldCBzb3J0ZWQgPSB0cnVlO1xuICAgIGxldCBsYXN0Q29sID0gMDtcbiAgICBnZW5Db2x1bW4gPSAwO1xuXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBzZW1pKSB7XG4gICAgICBsZXQgc2VnOiBTb3VyY2VNYXBTZWdtZW50O1xuXG4gICAgICBnZW5Db2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZ2VuQ29sdW1uKTtcbiAgICAgIGlmIChnZW5Db2x1bW4gPCBsYXN0Q29sKSBzb3J0ZWQgPSBmYWxzZTtcbiAgICAgIGxhc3RDb2wgPSBnZW5Db2x1bW47XG5cbiAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgc291cmNlc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZXNJbmRleCk7XG4gICAgICAgIHNvdXJjZUxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlTGluZSk7XG4gICAgICAgIHNvdXJjZUNvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VDb2x1bW4pO1xuXG4gICAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgICBuYW1lc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIG5hbWVzSW5kZXgpO1xuICAgICAgICAgIHNlZyA9IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZyA9IFtnZW5Db2x1bW5dO1xuICAgICAgfVxuXG4gICAgICBsaW5lLnB1c2goc2VnKTtcbiAgICAgIHJlYWRlci5wb3MrKztcbiAgICB9XG5cbiAgICBpZiAoIXNvcnRlZCkgc29ydChsaW5lKTtcbiAgICBkZWNvZGVkLnB1c2gobGluZSk7XG4gICAgcmVhZGVyLnBvcyA9IHNlbWkgKyAxO1xuICB9IHdoaWxlIChyZWFkZXIucG9zIDw9IGxlbmd0aCk7XG5cbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5cbmZ1bmN0aW9uIHNvcnQobGluZTogU291cmNlTWFwU2VnbWVudFtdKSB7XG4gIGxpbmUuc29ydChzb3J0Q29tcGFyYXRvcik7XG59XG5cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGE6IFNvdXJjZU1hcFNlZ21lbnQsIGI6IFNvdXJjZU1hcFNlZ21lbnQpOiBudW1iZXIge1xuICByZXR1cm4gYVswXSAtIGJbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogU291cmNlTWFwTWFwcGluZ3MpOiBzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKGRlY29kZWQ6IFJlYWRvbmx5PFNvdXJjZU1hcE1hcHBpbmdzPik6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogUmVhZG9ubHk8U291cmNlTWFwTWFwcGluZ3M+KTogc3RyaW5nIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGlmIChpID4gMCkgd3JpdGVyLndyaXRlKHNlbWljb2xvbik7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIGxldCBnZW5Db2x1bW4gPSAwO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gbGluZVtqXTtcbiAgICAgIGlmIChqID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcblxuICAgICAgZ2VuQ29sdW1uID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNlZ21lbnRbMF0sIGdlbkNvbHVtbik7XG5cbiAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMSkgY29udGludWU7XG4gICAgICBzb3VyY2VzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFsxXSwgc291cmNlc0luZGV4KTtcbiAgICAgIHNvdXJjZUxpbmUgPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFsyXSwgc291cmNlTGluZSk7XG4gICAgICBzb3VyY2VDb2x1bW4gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFszXSwgc291cmNlQ29sdW1uKTtcblxuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIG5hbWVzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFs0XSwgbmFtZXNJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdyaXRlci5mbHVzaCgpO1xufVxuIiwgIi8vIE1hdGNoZXMgdGhlIHNjaGVtZSBvZiBhIFVSTCwgZWcgXCJodHRwOi8vXCJcbmNvbnN0IHNjaGVtZVJlZ2V4ID0gL15bXFx3Ky4tXSs6XFwvXFwvLztcblxuLyoqXG4gKiBNYXRjaGVzIHRoZSBwYXJ0cyBvZiBhIFVSTDpcbiAqIDEuIFNjaGVtZSwgaW5jbHVkaW5nIFwiOlwiLCBndWFyYW50ZWVkLlxuICogMi4gVXNlci9wYXNzd29yZCwgaW5jbHVkaW5nIFwiQFwiLCBvcHRpb25hbC5cbiAqIDMuIEhvc3QsIGd1YXJhbnRlZWQuXG4gKiA0LiBQb3J0LCBpbmNsdWRpbmcgXCI6XCIsIG9wdGlvbmFsLlxuICogNS4gUGF0aCwgaW5jbHVkaW5nIFwiL1wiLCBvcHRpb25hbC5cbiAqIDYuIFF1ZXJ5LCBpbmNsdWRpbmcgXCI/XCIsIG9wdGlvbmFsLlxuICogNy4gSGFzaCwgaW5jbHVkaW5nIFwiI1wiLCBvcHRpb25hbC5cbiAqL1xuY29uc3QgdXJsUmVnZXggPSAvXihbXFx3Ky4tXSs6KVxcL1xcLyhbXkAvIz9dKkApPyhbXjovIz9dKikoOlxcZCspPyhcXC9bXiM/XSopPyhcXD9bXiNdKik/KCMuKik/LztcblxuLyoqXG4gKiBGaWxlIFVSTHMgYXJlIHdlaXJkLiBUaGV5IGRvbnQnIG5lZWQgdGhlIHJlZ3VsYXIgYC8vYCBpbiB0aGUgc2NoZW1lLCB0aGV5IG1heSBvciBtYXkgbm90IHN0YXJ0XG4gKiB3aXRoIGEgbGVhZGluZyBgL2AsIHRoZXkgY2FuIGhhdmUgYSBkb21haW4gKGJ1dCBvbmx5IGlmIHRoZXkgZG9uJ3Qgc3RhcnQgd2l0aCBhIFdpbmRvd3MgZHJpdmUpLlxuICpcbiAqIDEuIEhvc3QsIG9wdGlvbmFsLlxuICogMi4gUGF0aCwgd2hpY2ggbWF5IGluY2x1ZGUgXCIvXCIsIGd1YXJhbnRlZWQuXG4gKiAzLiBRdWVyeSwgaW5jbHVkaW5nIFwiP1wiLCBvcHRpb25hbC5cbiAqIDQuIEhhc2gsIGluY2x1ZGluZyBcIiNcIiwgb3B0aW9uYWwuXG4gKi9cbmNvbnN0IGZpbGVSZWdleCA9IC9eZmlsZTooPzpcXC9cXC8oKD8hW2Etel06KVteLyM/XSopPyk/KFxcLz9bXiM/XSopKFxcP1teI10qKT8oIy4qKT8vaTtcblxudHlwZSBVcmwgPSB7XG4gIHNjaGVtZTogc3RyaW5nO1xuICB1c2VyOiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbiAgdHlwZTogVXJsVHlwZTtcbn07XG5cbmNvbnN0IGVudW0gVXJsVHlwZSB7XG4gIEVtcHR5ID0gMSxcbiAgSGFzaCA9IDIsXG4gIFF1ZXJ5ID0gMyxcbiAgUmVsYXRpdmVQYXRoID0gNCxcbiAgQWJzb2x1dGVQYXRoID0gNSxcbiAgU2NoZW1lUmVsYXRpdmUgPSA2LFxuICBBYnNvbHV0ZSA9IDcsXG59XG5cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2NoZW1lUmVnZXgudGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGlzU2NoZW1lUmVsYXRpdmVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnLy8nKTtcbn1cblxuZnVuY3Rpb24gaXNBYnNvbHV0ZVBhdGgoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnLycpO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnZmlsZTonKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZShpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlsuPyNdLy50ZXN0KGlucHV0KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBYnNvbHV0ZVVybChpbnB1dDogc3RyaW5nKTogVXJsIHtcbiAgY29uc3QgbWF0Y2ggPSB1cmxSZWdleC5leGVjKGlucHV0KSE7XG4gIHJldHVybiBtYWtlVXJsKFxuICAgIG1hdGNoWzFdLFxuICAgIG1hdGNoWzJdIHx8ICcnLFxuICAgIG1hdGNoWzNdLFxuICAgIG1hdGNoWzRdIHx8ICcnLFxuICAgIG1hdGNoWzVdIHx8ICcvJyxcbiAgICBtYXRjaFs2XSB8fCAnJyxcbiAgICBtYXRjaFs3XSB8fCAnJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWxlVXJsKGlucHV0OiBzdHJpbmcpOiBVcmwge1xuICBjb25zdCBtYXRjaCA9IGZpbGVSZWdleC5leGVjKGlucHV0KSE7XG4gIGNvbnN0IHBhdGggPSBtYXRjaFsyXTtcbiAgcmV0dXJuIG1ha2VVcmwoXG4gICAgJ2ZpbGU6JyxcbiAgICAnJyxcbiAgICBtYXRjaFsxXSB8fCAnJyxcbiAgICAnJyxcbiAgICBpc0Fic29sdXRlUGF0aChwYXRoKSA/IHBhdGggOiAnLycgKyBwYXRoLFxuICAgIG1hdGNoWzNdIHx8ICcnLFxuICAgIG1hdGNoWzRdIHx8ICcnLFxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlVXJsKFxuICBzY2hlbWU6IHN0cmluZyxcbiAgdXNlcjogc3RyaW5nLFxuICBob3N0OiBzdHJpbmcsXG4gIHBvcnQ6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBxdWVyeTogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4pOiBVcmwge1xuICByZXR1cm4ge1xuICAgIHNjaGVtZSxcbiAgICB1c2VyLFxuICAgIGhvc3QsXG4gICAgcG9ydCxcbiAgICBwYXRoLFxuICAgIHF1ZXJ5LFxuICAgIGhhc2gsXG4gICAgdHlwZTogVXJsVHlwZS5BYnNvbHV0ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQ6IHN0cmluZyk6IFVybCB7XG4gIGlmIChpc1NjaGVtZVJlbGF0aXZlVXJsKGlucHV0KSkge1xuICAgIGNvbnN0IHVybCA9IHBhcnNlQWJzb2x1dGVVcmwoJ2h0dHA6JyArIGlucHV0KTtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLnR5cGUgPSBVcmxUeXBlLlNjaGVtZVJlbGF0aXZlO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBpZiAoaXNBYnNvbHV0ZVBhdGgoaW5wdXQpKSB7XG4gICAgY29uc3QgdXJsID0gcGFyc2VBYnNvbHV0ZVVybCgnaHR0cDovL2Zvby5jb20nICsgaW5wdXQpO1xuICAgIHVybC5zY2hlbWUgPSAnJztcbiAgICB1cmwuaG9zdCA9ICcnO1xuICAgIHVybC50eXBlID0gVXJsVHlwZS5BYnNvbHV0ZVBhdGg7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGlmIChpc0ZpbGVVcmwoaW5wdXQpKSByZXR1cm4gcGFyc2VGaWxlVXJsKGlucHV0KTtcblxuICBpZiAoaXNBYnNvbHV0ZVVybChpbnB1dCkpIHJldHVybiBwYXJzZUFic29sdXRlVXJsKGlucHV0KTtcblxuICBjb25zdCB1cmwgPSBwYXJzZUFic29sdXRlVXJsKCdodHRwOi8vZm9vLmNvbS8nICsgaW5wdXQpO1xuICB1cmwuc2NoZW1lID0gJyc7XG4gIHVybC5ob3N0ID0gJyc7XG4gIHVybC50eXBlID0gaW5wdXRcbiAgICA/IGlucHV0LnN0YXJ0c1dpdGgoJz8nKVxuICAgICAgPyBVcmxUeXBlLlF1ZXJ5XG4gICAgICA6IGlucHV0LnN0YXJ0c1dpdGgoJyMnKVxuICAgICAgPyBVcmxUeXBlLkhhc2hcbiAgICAgIDogVXJsVHlwZS5SZWxhdGl2ZVBhdGhcbiAgICA6IFVybFR5cGUuRW1wdHk7XG4gIHJldHVybiB1cmw7XG59XG5cbmZ1bmN0aW9uIHN0cmlwUGF0aEZpbGVuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIElmIGEgcGF0aCBlbmRzIHdpdGggYSBwYXJlbnQgZGlyZWN0b3J5IFwiLi5cIiwgdGhlbiBpdCdzIGEgcmVsYXRpdmUgcGF0aCB3aXRoIGV4Y2VzcyBwYXJlbnRcbiAgLy8gcGF0aHMuIEl0J3Mgbm90IGEgZmlsZSwgc28gd2UgY2FuJ3Qgc3RyaXAgaXQuXG4gIGlmIChwYXRoLmVuZHNXaXRoKCcvLi4nKSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmRleCArIDEpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVBhdGhzKHVybDogVXJsLCBiYXNlOiBVcmwpIHtcbiAgbm9ybWFsaXplUGF0aChiYXNlLCBiYXNlLnR5cGUpO1xuXG4gIC8vIElmIHRoZSBwYXRoIGlzIGp1c3QgYSBcIi9cIiwgdGhlbiBpdCB3YXMgYW4gZW1wdHkgcGF0aCB0byBiZWdpbiB3aXRoIChyZW1lbWJlciwgd2UncmUgYSByZWxhdGl2ZVxuICAvLyBwYXRoKS5cbiAgaWYgKHVybC5wYXRoID09PSAnLycpIHtcbiAgICB1cmwucGF0aCA9IGJhc2UucGF0aDtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNvbHV0aW9uIGhhcHBlbnMgcmVsYXRpdmUgdG8gdGhlIGJhc2UgcGF0aCdzIGRpcmVjdG9yeSwgbm90IHRoZSBmaWxlLlxuICAgIHVybC5wYXRoID0gc3RyaXBQYXRoRmlsZW5hbWUoYmFzZS5wYXRoKSArIHVybC5wYXRoO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHBhdGggY2FuIGhhdmUgZW1wdHkgZGlyZWN0b3JpZXMgXCIvL1wiLCB1bm5lZWRlZCBwYXJlbnRzIFwiZm9vLy4uXCIsIG9yIGN1cnJlbnQgZGlyZWN0b3J5XG4gKiBcImZvby8uXCIuIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRvIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgodXJsOiBVcmwsIHR5cGU6IFVybFR5cGUpIHtcbiAgY29uc3QgcmVsID0gdHlwZSA8PSBVcmxUeXBlLlJlbGF0aXZlUGF0aDtcbiAgY29uc3QgcGllY2VzID0gdXJsLnBhdGguc3BsaXQoJy8nKTtcblxuICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBmaXJzdCBwaWVjZSBhbHdheXMsIHNvIHRoYXQgd2Ugb3V0cHV0IGEgbGVhZGluZyBzbGFzaC4gVGhlIGl0ZW0gYXRcbiAgLy8gcGllY2VzWzBdIGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgbGV0IHBvaW50ZXIgPSAxO1xuXG4gIC8vIFBvc2l0aXZlIGlzIHRoZSBudW1iZXIgb2YgcmVhbCBkaXJlY3RvcmllcyB3ZSd2ZSBvdXRwdXQsIHVzZWQgZm9yIHBvcHBpbmcgYSBwYXJlbnQgZGlyZWN0b3J5LlxuICAvLyBFZywgXCJmb28vYmFyLy4uXCIgd2lsbCBoYXZlIGEgcG9zaXRpdmUgMiwgYW5kIHdlIGNhbiBkZWNyZW1lbnQgdG8gYmUgbGVmdCB3aXRoIGp1c3QgXCJmb29cIi5cbiAgbGV0IHBvc2l0aXZlID0gMDtcblxuICAvLyBXZSBuZWVkIHRvIGtlZXAgYSB0cmFpbGluZyBzbGFzaCBpZiB3ZSBlbmNvdW50ZXIgYW4gZW1wdHkgZGlyZWN0b3J5IChlZywgc3BsaXR0aW5nIFwiZm9vL1wiIHdpbGxcbiAgLy8gZ2VuZXJhdGUgYFtcImZvb1wiLCBcIlwiXWAgcGllY2VzKS4gQW5kLCBpZiB3ZSBwb3AgYSBwYXJlbnQgZGlyZWN0b3J5LiBCdXQgb25jZSB3ZSBlbmNvdW50ZXIgYVxuICAvLyByZWFsIGRpcmVjdG9yeSwgd2Ugd29uJ3QgbmVlZCB0byBhcHBlbmQsIHVubGVzcyB0aGUgb3RoZXIgY29uZGl0aW9ucyBoYXBwZW4gYWdhaW4uXG4gIGxldCBhZGRUcmFpbGluZ1NsYXNoID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwaWVjZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwaWVjZSA9IHBpZWNlc1tpXTtcblxuICAgIC8vIEFuIGVtcHR5IGRpcmVjdG9yeSwgY291bGQgYmUgYSB0cmFpbGluZyBzbGFzaCwgb3IganVzdCBhIGRvdWJsZSBcIi8vXCIgaW4gdGhlIHBhdGguXG4gICAgaWYgKCFwaWVjZSkge1xuICAgICAgYWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSByZWFsIGRpcmVjdG9yeSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGFwcGVuZCBhbnltb3JlLlxuICAgIGFkZFRyYWlsaW5nU2xhc2ggPSBmYWxzZTtcblxuICAgIC8vIEEgY3VycmVudCBkaXJlY3RvcnksIHdoaWNoIHdlIGNhbiBhbHdheXMgZHJvcC5cbiAgICBpZiAocGllY2UgPT09ICcuJykgY29udGludWU7XG5cbiAgICAvLyBBIHBhcmVudCBkaXJlY3RvcnksIHdlIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVhbCBkaXJlY3RvcmllcyB3ZSBjYW4gcG9wLiBFbHNlLCB3ZVxuICAgIC8vIGhhdmUgYW4gZXhjZXNzIG9mIHBhcmVudHMsIGFuZCB3ZSdsbCBuZWVkIHRvIGtlZXAgdGhlIFwiLi5cIi5cbiAgICBpZiAocGllY2UgPT09ICcuLicpIHtcbiAgICAgIGlmIChwb3NpdGl2ZSkge1xuICAgICAgICBhZGRUcmFpbGluZ1NsYXNoID0gdHJ1ZTtcbiAgICAgICAgcG9zaXRpdmUtLTtcbiAgICAgICAgcG9pbnRlci0tO1xuICAgICAgfSBlbHNlIGlmIChyZWwpIHtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gYSByZWxhdGl2ZVBhdGgsIHRoZW4gd2UgbmVlZCB0byBrZWVwIHRoZSBleGNlc3MgcGFyZW50cy4gRWxzZSwgaW4gYW4gYWJzb2x1dGVcbiAgICAgICAgLy8gVVJMLCBwcm90b2NvbCByZWxhdGl2ZSBVUkwsIG9yIGFuIGFic29sdXRlIHBhdGgsIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBleGNlc3MuXG4gICAgICAgIHBpZWNlc1twb2ludGVyKytdID0gcGllY2U7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhIHJlYWwgZGlyZWN0b3J5LiBNb3ZlIGl0IHRvIHRoZSBuZXh0IGluc2VydGlvbiBwb2ludGVyLCB3aGljaCBhY2NvdW50cyBmb3JcbiAgICAvLyBhbnkgcG9wcGVkIG9yIGRyb3BwZWQgZGlyZWN0b3JpZXMuXG4gICAgcGllY2VzW3BvaW50ZXIrK10gPSBwaWVjZTtcbiAgICBwb3NpdGl2ZSsrO1xuICB9XG5cbiAgbGV0IHBhdGggPSAnJztcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludGVyOyBpKyspIHtcbiAgICBwYXRoICs9ICcvJyArIHBpZWNlc1tpXTtcbiAgfVxuICBpZiAoIXBhdGggfHwgKGFkZFRyYWlsaW5nU2xhc2ggJiYgIXBhdGguZW5kc1dpdGgoJy8uLicpKSkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG4gIHVybC5wYXRoID0gcGF0aDtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byByZXNvbHZlIGBpbnB1dGAgVVJML3BhdGggcmVsYXRpdmUgdG8gYGJhc2VgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKGlucHV0OiBzdHJpbmcsIGJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghaW5wdXQgJiYgIWJhc2UpIHJldHVybiAnJztcblxuICBjb25zdCB1cmwgPSBwYXJzZVVybChpbnB1dCk7XG4gIGxldCBpbnB1dFR5cGUgPSB1cmwudHlwZTtcblxuICBpZiAoYmFzZSAmJiBpbnB1dFR5cGUgIT09IFVybFR5cGUuQWJzb2x1dGUpIHtcbiAgICBjb25zdCBiYXNlVXJsID0gcGFyc2VVcmwoYmFzZSk7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVXJsLnR5cGU7XG5cbiAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgY2FzZSBVcmxUeXBlLkVtcHR5OlxuICAgICAgICB1cmwuaGFzaCA9IGJhc2VVcmwuaGFzaDtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIFVybFR5cGUuSGFzaDpcbiAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZVVybC5xdWVyeTtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIFVybFR5cGUuUXVlcnk6XG4gICAgICBjYXNlIFVybFR5cGUuUmVsYXRpdmVQYXRoOlxuICAgICAgICBtZXJnZVBhdGhzKHVybCwgYmFzZVVybCk7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLkFic29sdXRlUGF0aDpcbiAgICAgICAgLy8gVGhlIGhvc3QsIHVzZXIsIGFuZCBwb3J0IGFyZSBqb2luZWQsIHlvdSBjYW4ndCBjb3B5IG9uZSB3aXRob3V0IHRoZSBvdGhlcnMuXG4gICAgICAgIHVybC51c2VyID0gYmFzZVVybC51c2VyO1xuICAgICAgICB1cmwuaG9zdCA9IGJhc2VVcmwuaG9zdDtcbiAgICAgICAgdXJsLnBvcnQgPSBiYXNlVXJsLnBvcnQ7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLlNjaGVtZVJlbGF0aXZlOlxuICAgICAgICAvLyBUaGUgaW5wdXQgZG9lc24ndCBoYXZlIGEgc2NoZW1hIGF0IGxlYXN0LCBzbyB3ZSBuZWVkIHRvIGNvcHkgYXQgbGVhc3QgdGhhdCBvdmVyLlxuICAgICAgICB1cmwuc2NoZW1lID0gYmFzZVVybC5zY2hlbWU7XG4gICAgfVxuICAgIGlmIChiYXNlVHlwZSA+IGlucHV0VHlwZSkgaW5wdXRUeXBlID0gYmFzZVR5cGU7XG4gIH1cblxuICBub3JtYWxpemVQYXRoKHVybCwgaW5wdXRUeXBlKTtcblxuICBjb25zdCBxdWVyeUhhc2ggPSB1cmwucXVlcnkgKyB1cmwuaGFzaDtcbiAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAvLyBUaGlzIGlzIGltcG9zc2libGUsIGJlY2F1c2Ugb2YgdGhlIGVtcHR5IGNoZWNrcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgIC8vIGNhc2UgVXJsVHlwZS5FbXB0eTpcblxuICAgIGNhc2UgVXJsVHlwZS5IYXNoOlxuICAgIGNhc2UgVXJsVHlwZS5RdWVyeTpcbiAgICAgIHJldHVybiBxdWVyeUhhc2g7XG5cbiAgICBjYXNlIFVybFR5cGUuUmVsYXRpdmVQYXRoOiB7XG4gICAgICAvLyBUaGUgZmlyc3QgY2hhciBpcyBhbHdheXMgYSBcIi9cIiwgYW5kIHdlIG5lZWQgaXQgdG8gYmUgcmVsYXRpdmUuXG4gICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGguc2xpY2UoMSk7XG5cbiAgICAgIGlmICghcGF0aCkgcmV0dXJuIHF1ZXJ5SGFzaCB8fCAnLic7XG5cbiAgICAgIGlmIChpc1JlbGF0aXZlKGJhc2UgfHwgaW5wdXQpICYmICFpc1JlbGF0aXZlKHBhdGgpKSB7XG4gICAgICAgIC8vIElmIGJhc2Ugc3RhcnRlZCB3aXRoIGEgbGVhZGluZyBcIi5cIiwgb3IgdGhlcmUgaXMgbm8gYmFzZSBhbmQgaW5wdXQgc3RhcnRlZCB3aXRoIGEgXCIuXCIsXG4gICAgICAgIC8vIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVsYXRpdmUgcGF0aCBzdGFydHMgd2l0aCBhIFwiLlwiLiBXZSBkb24ndCBrbm93IGlmXG4gICAgICAgIC8vIHJlbGF0aXZlIHN0YXJ0cyB3aXRoIGEgXCIuLlwiLCB0aG91Z2gsIHNvIGNoZWNrIGJlZm9yZSBwcmVwZW5kaW5nLlxuICAgICAgICByZXR1cm4gJy4vJyArIHBhdGggKyBxdWVyeUhhc2g7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoICsgcXVlcnlIYXNoO1xuICAgIH1cblxuICAgIGNhc2UgVXJsVHlwZS5BYnNvbHV0ZVBhdGg6XG4gICAgICByZXR1cm4gdXJsLnBhdGggKyBxdWVyeUhhc2g7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVybC5zY2hlbWUgKyAnLy8nICsgdXJsLnVzZXIgKyB1cmwuaG9zdCArIHVybC5wb3J0ICsgdXJsLnBhdGggKyBxdWVyeUhhc2g7XG4gIH1cbn1cbiIsICJpbXBvcnQgcmVzb2x2ZVVyaSBmcm9tICdAanJpZGdld2VsbC9yZXNvbHZlLXVyaSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmUoaW5wdXQ6IHN0cmluZywgYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgLy8gVGhlIGJhc2UgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgYSBkaXJlY3RvcnksIGlmIGl0J3Mgbm90IGVtcHR5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2Jsb2IvOGNiM2VlNTcvbGliL3V0aWwuanMjTDMyN1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi9kYTRhZGJiMy90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9kZXZ0b29scy9mcm9udF9lbmQvc2RrL1NvdXJjZU1hcC5qcyNMNDAwLUw0MDFcbiAgaWYgKGJhc2UgJiYgIWJhc2UuZW5kc1dpdGgoJy8nKSkgYmFzZSArPSAnLyc7XG5cbiAgcmV0dXJuIHJlc29sdmVVcmkoaW5wdXQsIGJhc2UpO1xufVxuIiwgIi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IFwiL1wiLCBidXQgbGVhdmVzIHRoZSBzbGFzaC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaXBGaWxlbmFtZShwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gJyc7XG4gIGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmRleCArIDEpO1xufVxuIiwgInR5cGUgR2VuZXJhdGVkQ29sdW1uID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNvdXJjZUxpbmUgPSBudW1iZXI7XG50eXBlIFNvdXJjZUNvbHVtbiA9IG51bWJlcjtcbnR5cGUgTmFtZXNJbmRleCA9IG51bWJlcjtcblxudHlwZSBHZW5lcmF0ZWRMaW5lID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uLCBOYW1lc0luZGV4XTtcblxuZXhwb3J0IHR5cGUgUmV2ZXJzZVNlZ21lbnQgPSBbU291cmNlQ29sdW1uLCBHZW5lcmF0ZWRMaW5lLCBHZW5lcmF0ZWRDb2x1bW5dO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OID0gMDtcbmV4cG9ydCBjb25zdCBTT1VSQ0VTX0lOREVYID0gMTtcbmV4cG9ydCBjb25zdCBTT1VSQ0VfTElORSA9IDI7XG5leHBvcnQgY29uc3QgU09VUkNFX0NPTFVNTiA9IDM7XG5leHBvcnQgY29uc3QgTkFNRVNfSU5ERVggPSA0O1xuXG5leHBvcnQgY29uc3QgUkVWX0dFTkVSQVRFRF9MSU5FID0gMTtcbmV4cG9ydCBjb25zdCBSRVZfR0VORVJBVEVEX0NPTFVNTiA9IDI7XG4iLCAiaW1wb3J0IHsgQ09MVU1OIH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXliZVNvcnQoXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgb3duZWQ6IGJvb2xlYW4sXG4pOiBTb3VyY2VNYXBTZWdtZW50W11bXSB7XG4gIGNvbnN0IHVuc29ydGVkSW5kZXggPSBuZXh0VW5zb3J0ZWRTZWdtZW50TGluZShtYXBwaW5ncywgMCk7XG4gIGlmICh1bnNvcnRlZEluZGV4ID09PSBtYXBwaW5ncy5sZW5ndGgpIHJldHVybiBtYXBwaW5ncztcblxuICAvLyBJZiB3ZSBvd24gdGhlIGFycmF5IChtZWFuaW5nIHdlIHBhcnNlZCBpdCBmcm9tIEpTT04pLCB0aGVuIHdlJ3JlIGZyZWUgdG8gZGlyZWN0bHkgbXV0YXRlIGl0LiBJZlxuICAvLyBub3QsIHdlIGRvIG5vdCB3YW50IHRvIG1vZGlmeSB0aGUgY29uc3VtZXIncyBpbnB1dCBhcnJheS5cbiAgaWYgKCFvd25lZCkgbWFwcGluZ3MgPSBtYXBwaW5ncy5zbGljZSgpO1xuXG4gIGZvciAobGV0IGkgPSB1bnNvcnRlZEluZGV4OyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpID0gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3MsIGkgKyAxKSkge1xuICAgIG1hcHBpbmdzW2ldID0gc29ydFNlZ21lbnRzKG1hcHBpbmdzW2ldLCBvd25lZCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzO1xufVxuXG5mdW5jdGlvbiBuZXh0VW5zb3J0ZWRTZWdtZW50TGluZShtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaXNTb3J0ZWQobWFwcGluZ3NbaV0pKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gbWFwcGluZ3MubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBpc1NvcnRlZChsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaiA9IDE7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgaWYgKGxpbmVbal1bQ09MVU1OXSA8IGxpbmVbaiAtIDFdW0NPTFVNTl0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNvcnRTZWdtZW50cyhsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sIG93bmVkOiBib29sZWFuKTogU291cmNlTWFwU2VnbWVudFtdIHtcbiAgaWYgKCFvd25lZCkgbGluZSA9IGxpbmUuc2xpY2UoKTtcbiAgcmV0dXJuIGxpbmUuc29ydChzb3J0Q29tcGFyYXRvcik7XG59XG5cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGE6IFNvdXJjZU1hcFNlZ21lbnQsIGI6IFNvdXJjZU1hcFNlZ21lbnQpOiBudW1iZXIge1xuICByZXR1cm4gYVtDT0xVTU5dIC0gYltDT0xVTU5dO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCwgUmV2ZXJzZVNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB7IENPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5leHBvcnQgdHlwZSBNZW1vU3RhdGUgPSB7XG4gIGxhc3RLZXk6IG51bWJlcjtcbiAgbGFzdE5lZWRsZTogbnVtYmVyO1xuICBsYXN0SW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBsZXQgZm91bmQgPSBmYWxzZTtcblxuLyoqXG4gKiBBIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIHRoZSBpbmRleCBpZiBhIG1hdGNoIGlzIGZvdW5kLlxuICogSWYgbm8gbWF0Y2ggaXMgZm91bmQsIHRoZW4gdGhlIGxlZnQtaW5kZXggKHRoZSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0gdGhhdCBjb21lcyBqdXN0XG4gKiBiZWZvcmUgdGhlIGRlc2lyZWQgaW5kZXgpIGlzIHJldHVybmVkLiBUbyBtYWludGFpbiBwcm9wZXIgc29ydCBvcmRlciwgYSBzcGxpY2Ugd291bGQgaGFwcGVuIGF0XG4gKiB0aGUgbmV4dCBpbmRleDpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYXJyYXkgPSBbMSwgM107XG4gKiBjb25zdCBuZWVkbGUgPSAyO1xuICogY29uc3QgaW5kZXggPSBiaW5hcnlTZWFyY2goYXJyYXksIG5lZWRsZSwgKGl0ZW0sIG5lZWRsZSkgPT4gaXRlbSAtIG5lZWRsZSk7XG4gKlxuICogYXNzZXJ0LmVxdWFsKGluZGV4LCAwKTtcbiAqIGFycmF5LnNwbGljZShpbmRleCArIDEsIDAsIG5lZWRsZSk7XG4gKiBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LCBbMSwgMiwgM10pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5hcnlTZWFyY2goXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIGhpZ2g6IG51bWJlcixcbik6IG51bWJlciB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgPj4gMSk7XG4gICAgY29uc3QgY21wID0gaGF5c3RhY2tbbWlkXVtDT0xVTU5dIC0gbmVlZGxlO1xuXG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG5cbiAgICBpZiAoY21wIDwgMCkge1xuICAgICAgbG93ID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaCA9IG1pZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgZm91bmQgPSBmYWxzZTtcbiAgcmV0dXJuIGxvdyAtIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cHBlckJvdW5kKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgaGF5c3RhY2subGVuZ3RoOyBpbmRleCA9IGkrKykge1xuICAgIGlmIChoYXlzdGFja1tpXVtDT0xVTU5dICE9PSBuZWVkbGUpIGJyZWFrO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvd2VyQm91bmQoXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgaW5kZXg6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaW5kZXggPSBpLS0pIHtcbiAgICBpZiAoaGF5c3RhY2tbaV1bQ09MVU1OXSAhPT0gbmVlZGxlKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplZFN0YXRlKCk6IE1lbW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEtleTogLTEsXG4gICAgbGFzdE5lZWRsZTogLTEsXG4gICAgbGFzdEluZGV4OiAtMSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIG92ZXJseSBjb21wbGljYXRlZCBiZWFzdCBpcyBqdXN0IHRvIHJlY29yZCB0aGUgbGFzdCB0ZXN0ZWQgbGluZS9jb2x1bW4gYW5kIHRoZSByZXN1bHRpbmdcbiAqIGluZGV4LCBhbGxvd2luZyB1cyB0byBza2lwIGEgZmV3IHRlc3RzIGlmIG1hcHBpbmdzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChcbiAgaGF5c3RhY2s6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG5lZWRsZTogbnVtYmVyLFxuICBzdGF0ZTogTWVtb1N0YXRlLFxuICBrZXk6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHsgbGFzdEtleSwgbGFzdE5lZWRsZSwgbGFzdEluZGV4IH0gPSBzdGF0ZTtcblxuICBsZXQgbG93ID0gMDtcbiAgbGV0IGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuICBpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG4gICAgaWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkge1xuICAgICAgZm91bmQgPSBsYXN0SW5kZXggIT09IC0xICYmIGhheXN0YWNrW2xhc3RJbmRleF1bQ09MVU1OXSA9PT0gbmVlZGxlO1xuICAgICAgcmV0dXJuIGxhc3RJbmRleDtcbiAgICB9XG5cbiAgICBpZiAobmVlZGxlID49IGxhc3ROZWVkbGUpIHtcbiAgICAgIC8vIGxhc3RJbmRleCBtYXkgYmUgLTEgaWYgdGhlIHByZXZpb3VzIG5lZWRsZSB3YXMgbm90IGZvdW5kLlxuICAgICAgbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2ggPSBsYXN0SW5kZXg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmxhc3RLZXkgPSBrZXk7XG4gIHN0YXRlLmxhc3ROZWVkbGUgPSBuZWVkbGU7XG5cbiAgcmV0dXJuIChzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSk7XG59XG4iLCAiaW1wb3J0IHsgQ09MVU1OLCBTT1VSQ0VTX0lOREVYLCBTT1VSQ0VfTElORSwgU09VUkNFX0NPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHsgbWVtb2l6ZWRCaW5hcnlTZWFyY2gsIHVwcGVyQm91bmQgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5pbXBvcnQgdHlwZSB7IFJldmVyc2VTZWdtZW50LCBTb3VyY2VNYXBTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IE1lbW9TdGF0ZSB9IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZSA9IHtcbiAgX19wcm90b19fOiBudWxsO1xuICBbbGluZTogbnVtYmVyXTogRXhjbHVkZTxSZXZlcnNlU2VnbWVudCwgW251bWJlcl0+W107XG59O1xuXG4vLyBSZWJ1aWxkcyB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLCB3aXRoIG1hcHBpbmdzIHRoYXQgYXJlIG9yZGVyZWQgYnkgc291cmNlIGxpbmUvY29sdW1uIGluc3RlYWRcbi8vIG9mIGdlbmVyYXRlZCBsaW5lL2NvbHVtbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQnlTb3VyY2VzKFxuICBkZWNvZGVkOiByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgbWVtb3M6IE1lbW9TdGF0ZVtdLFxuKTogU291cmNlW10ge1xuICBjb25zdCBzb3VyY2VzOiBTb3VyY2VbXSA9IG1lbW9zLm1hcChidWlsZE51bGxBcnJheSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWcgPSBsaW5lW2pdO1xuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDEpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBzb3VyY2VJbmRleCA9IHNlZ1tTT1VSQ0VTX0lOREVYXTtcbiAgICAgIGNvbnN0IHNvdXJjZUxpbmUgPSBzZWdbU09VUkNFX0xJTkVdO1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc2VnW1NPVVJDRV9DT0xVTU5dO1xuICAgICAgY29uc3Qgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTGluZSA9IChvcmlnaW5hbFNvdXJjZVtzb3VyY2VMaW5lXSB8fD0gW10pO1xuICAgICAgY29uc3QgbWVtbyA9IG1lbW9zW3NvdXJjZUluZGV4XTtcblxuICAgICAgLy8gVGhlIGJpbmFyeSBzZWFyY2ggZWl0aGVyIGZvdW5kIGEgbWF0Y2gsIG9yIGl0IGZvdW5kIHRoZSBsZWZ0LWluZGV4IGp1c3QgYmVmb3JlIHdoZXJlIHRoZVxuICAgICAgLy8gc2VnbWVudCBzaG91bGQgZ28uIEVpdGhlciB3YXksIHdlIHdhbnQgdG8gaW5zZXJ0IGFmdGVyIHRoYXQuIEFuZCB0aGVyZSBtYXkgYmUgbXVsdGlwbGVcbiAgICAgIC8vIGdlbmVyYXRlZCBzZWdtZW50cyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luYWwgbG9jYXRpb24sIHNvIHRoZXJlIG1heSBuZWVkIHRvIG1vdmUgc2V2ZXJhbFxuICAgICAgLy8gaW5kZXhlcyBiZWZvcmUgd2UgZmluZCB3aGVyZSB3ZSBuZWVkIHRvIGluc2VydC5cbiAgICAgIGxldCBpbmRleCA9IHVwcGVyQm91bmQoXG4gICAgICAgIG9yaWdpbmFsTGluZSxcbiAgICAgICAgc291cmNlQ29sdW1uLFxuICAgICAgICBtZW1vaXplZEJpbmFyeVNlYXJjaChvcmlnaW5hbExpbmUsIHNvdXJjZUNvbHVtbiwgbWVtbywgc291cmNlTGluZSksXG4gICAgICApO1xuXG4gICAgICBtZW1vLmxhc3RJbmRleCA9ICsraW5kZXg7XG4gICAgICBpbnNlcnQob3JpZ2luYWxMaW5lLCBpbmRleCwgW3NvdXJjZUNvbHVtbiwgaSwgc2VnW0NPTFVNTl1dKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc291cmNlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0PFQ+KGFycmF5OiBUW10sIGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSB7XG4gIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGg7IGkgPiBpbmRleDsgaS0tKSB7XG4gICAgYXJyYXlbaV0gPSBhcnJheVtpIC0gMV07XG4gIH1cbiAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG59XG5cbi8vIE51bGwgYXJyYXlzIGFsbG93IHVzIHRvIHVzZSBvcmRlcmVkIGluZGV4IGtleXMgd2l0aG91dCBhY3R1YWxseSBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgbWVtb3J5IGxpa2Vcbi8vIGEgcmVhbCBhcnJheS4gV2UgdXNlIGEgbnVsbC1wcm90b3R5cGUgb2JqZWN0IHRvIGF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb24gYW5kIGRlb3B0aW1pemF0aW9ucy5cbi8vIE51bWVyaWMgcHJvcGVydGllcyBvbiBvYmplY3RzIGFyZSBtYWdpY2FsbHkgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgZW5naW5lIHJlZ2FyZGxlc3Mgb2Zcbi8vIHRoZSBpbnNlcnRpb24gb3JkZXIuIFNvLCBieSBzZXR0aW5nIGFueSBudW1lcmljIGtleXMsIGV2ZW4gb3V0IG9mIG9yZGVyLCB3ZSdsbCBnZXQgYXNjZW5kaW5nXG4vLyBvcmRlciB3aGVuIGl0ZXJhdGluZyB3aXRoIGZvci1pbi5cbmZ1bmN0aW9uIGJ1aWxkTnVsbEFycmF5PFQgZXh0ZW5kcyB7IF9fcHJvdG9fXzogbnVsbCB9PigpOiBUIHtcbiAgcmV0dXJuIHsgX19wcm90b19fOiBudWxsIH0gYXMgVDtcbn1cbiIsICJpbXBvcnQgeyBUcmFjZU1hcCwgcHJlc29ydGVkRGVjb2RlZE1hcCwgZGVjb2RlZE1hcHBpbmdzIH0gZnJvbSAnLi90cmFjZS1tYXBwaW5nJztcbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUge1xuICBEZWNvZGVkU291cmNlTWFwLFxuICBEZWNvZGVkU291cmNlTWFwWElucHV0LFxuICBFbmNvZGVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBYSW5wdXQsXG4gIFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LFxuICBTZWN0aW9uWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG50eXBlIEFueU1hcCA9IHtcbiAgbmV3IChtYXA6IFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKTogVHJhY2VNYXA7XG4gIChtYXA6IFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKTogVHJhY2VNYXA7XG59O1xuXG5leHBvcnQgY29uc3QgQW55TWFwOiBBbnlNYXAgPSBmdW5jdGlvbiAobWFwLCBtYXBVcmwpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UobWFwKTtcblxuICBpZiAoISgnc2VjdGlvbnMnIGluIHBhcnNlZCkpIHtcbiAgICByZXR1cm4gbmV3IFRyYWNlTWFwKHBhcnNlZCBhcyBEZWNvZGVkU291cmNlTWFwWElucHV0IHwgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCwgbWFwVXJsKTtcbiAgfVxuXG4gIGNvbnN0IG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSA9IFtdO1xuICBjb25zdCBzb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10gPSBbXTtcbiAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGlnbm9yZUxpc3Q6IG51bWJlcltdID0gW107XG5cbiAgcmVjdXJzZShcbiAgICBwYXJzZWQsXG4gICAgbWFwVXJsLFxuICAgIG1hcHBpbmdzLFxuICAgIHNvdXJjZXMsXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbmFtZXMsXG4gICAgaWdub3JlTGlzdCxcbiAgICAwLFxuICAgIDAsXG4gICAgSW5maW5pdHksXG4gICAgSW5maW5pdHksXG4gICk7XG5cbiAgY29uc3Qgam9pbmVkOiBEZWNvZGVkU291cmNlTWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogcGFyc2VkLmZpbGUsXG4gICAgbmFtZXMsXG4gICAgc291cmNlcyxcbiAgICBzb3VyY2VzQ29udGVudCxcbiAgICBtYXBwaW5ncyxcbiAgICBpZ25vcmVMaXN0LFxuICB9O1xuXG4gIHJldHVybiBwcmVzb3J0ZWREZWNvZGVkTWFwKGpvaW5lZCk7XG59IGFzIEFueU1hcDtcblxuZnVuY3Rpb24gcGFyc2U8VD4obWFwOiBUKTogRXhjbHVkZTxULCBzdHJpbmc+IHtcbiAgcmV0dXJuIHR5cGVvZiBtYXAgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShtYXApIDogbWFwO1xufVxuXG5mdW5jdGlvbiByZWN1cnNlKFxuICBpbnB1dDogU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBtYXBVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgc291cmNlczogc3RyaW5nW10sXG4gIHNvdXJjZXNDb250ZW50OiAoc3RyaW5nIHwgbnVsbClbXSxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBpZ25vcmVMaXN0OiBudW1iZXJbXSxcbiAgbGluZU9mZnNldDogbnVtYmVyLFxuICBjb2x1bW5PZmZzZXQ6IG51bWJlcixcbiAgc3RvcExpbmU6IG51bWJlcixcbiAgc3RvcENvbHVtbjogbnVtYmVyLFxuKSB7XG4gIGNvbnN0IHsgc2VjdGlvbnMgfSA9IGlucHV0O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyBtYXAsIG9mZnNldCB9ID0gc2VjdGlvbnNbaV07XG5cbiAgICBsZXQgc2wgPSBzdG9wTGluZTtcbiAgICBsZXQgc2MgPSBzdG9wQ29sdW1uO1xuICAgIGlmIChpICsgMSA8IHNlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dE9mZnNldCA9IHNlY3Rpb25zW2kgKyAxXS5vZmZzZXQ7XG4gICAgICBzbCA9IE1hdGgubWluKHN0b3BMaW5lLCBsaW5lT2Zmc2V0ICsgbmV4dE9mZnNldC5saW5lKTtcblxuICAgICAgaWYgKHNsID09PSBzdG9wTGluZSkge1xuICAgICAgICBzYyA9IE1hdGgubWluKHN0b3BDb2x1bW4sIGNvbHVtbk9mZnNldCArIG5leHRPZmZzZXQuY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoc2wgPCBzdG9wTGluZSkge1xuICAgICAgICBzYyA9IGNvbHVtbk9mZnNldCArIG5leHRPZmZzZXQuY29sdW1uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFkZFNlY3Rpb24oXG4gICAgICBtYXAsXG4gICAgICBtYXBVcmwsXG4gICAgICBtYXBwaW5ncyxcbiAgICAgIHNvdXJjZXMsXG4gICAgICBzb3VyY2VzQ29udGVudCxcbiAgICAgIG5hbWVzLFxuICAgICAgaWdub3JlTGlzdCxcbiAgICAgIGxpbmVPZmZzZXQgKyBvZmZzZXQubGluZSxcbiAgICAgIGNvbHVtbk9mZnNldCArIG9mZnNldC5jb2x1bW4sXG4gICAgICBzbCxcbiAgICAgIHNjLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2VjdGlvbihcbiAgaW5wdXQ6IFNlY3Rpb25YSW5wdXRbJ21hcCddLFxuICBtYXBVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgc291cmNlczogc3RyaW5nW10sXG4gIHNvdXJjZXNDb250ZW50OiAoc3RyaW5nIHwgbnVsbClbXSxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBpZ25vcmVMaXN0OiBudW1iZXJbXSxcbiAgbGluZU9mZnNldDogbnVtYmVyLFxuICBjb2x1bW5PZmZzZXQ6IG51bWJlcixcbiAgc3RvcExpbmU6IG51bWJlcixcbiAgc3RvcENvbHVtbjogbnVtYmVyLFxuKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKGlucHV0KTtcbiAgaWYgKCdzZWN0aW9ucycgaW4gcGFyc2VkKSByZXR1cm4gcmVjdXJzZSguLi4oYXJndW1lbnRzIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2YgcmVjdXJzZT4pKTtcblxuICBjb25zdCBtYXAgPSBuZXcgVHJhY2VNYXAocGFyc2VkLCBtYXBVcmwpO1xuICBjb25zdCBzb3VyY2VzT2Zmc2V0ID0gc291cmNlcy5sZW5ndGg7XG4gIGNvbnN0IG5hbWVzT2Zmc2V0ID0gbmFtZXMubGVuZ3RoO1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG4gIGNvbnN0IHsgcmVzb2x2ZWRTb3VyY2VzLCBzb3VyY2VzQ29udGVudDogY29udGVudHMsIGlnbm9yZUxpc3Q6IGlnbm9yZXMgfSA9IG1hcDtcblxuICBhcHBlbmQoc291cmNlcywgcmVzb2x2ZWRTb3VyY2VzKTtcbiAgYXBwZW5kKG5hbWVzLCBtYXAubmFtZXMpO1xuXG4gIGlmIChjb250ZW50cykgYXBwZW5kKHNvdXJjZXNDb250ZW50LCBjb250ZW50cyk7XG4gIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFNvdXJjZXMubGVuZ3RoOyBpKyspIHNvdXJjZXNDb250ZW50LnB1c2gobnVsbCk7XG5cbiAgaWYgKGlnbm9yZXMpIGZvciAobGV0IGkgPSAwOyBpIDwgaWdub3Jlcy5sZW5ndGg7IGkrKykgaWdub3JlTGlzdC5wdXNoKGlnbm9yZXNbaV0gKyBzb3VyY2VzT2Zmc2V0KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lSSA9IGxpbmVPZmZzZXQgKyBpO1xuXG4gICAgLy8gV2UgY2FuIG9ubHkgYWRkIHNvIG1hbnkgbGluZXMgYmVmb3JlIHdlIHN0ZXAgaW50byB0aGUgcmFuZ2UgdGhhdCB0aGUgbmV4dCBzZWN0aW9uJ3MgbWFwXG4gICAgLy8gY29udHJvbHMuIFdoZW4gd2UgZ2V0IHRvIHRoZSBsYXN0IGxpbmUsIHRoZW4gd2UnbGwgc3RhcnQgY2hlY2tpbmcgdGhlIHNlZ21lbnRzIHRvIHNlZSBpZlxuICAgIC8vIHRoZXkndmUgY3Jvc3NlZCBpbnRvIHRoZSBjb2x1bW4gcmFuZ2UuIEJ1dCBpdCBtYXkgbm90IGhhdmUgYW55IGNvbHVtbnMgdGhhdCBvdmVyc3RlcCwgc28gd2VcbiAgICAvLyBzdGlsbCBuZWVkIHRvIGNoZWNrIHRoYXQgd2UgZG9uJ3Qgb3ZlcnN0ZXAgbGluZXMsIHRvby5cbiAgICBpZiAobGluZUkgPiBzdG9wTGluZSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIG91dCBsaW5lIG1heSBhbHJlYWR5IGV4aXN0IGluIG1hcHBpbmdzIChpZiB3ZSdyZSBjb250aW51aW5nIHRoZSBsaW5lIHN0YXJ0ZWQgYnkgYVxuICAgIC8vIHByZXZpb3VzIHNlY3Rpb24pLiBPciwgd2UgbWF5IGhhdmUganVtcGVkIGFoZWFkIHNldmVyYWwgbGluZXMgdG8gc3RhcnQgdGhpcyBzZWN0aW9uLlxuICAgIGNvbnN0IG91dCA9IGdldExpbmUobWFwcGluZ3MsIGxpbmVJKTtcbiAgICAvLyBPbiB0aGUgMHRoIGxvb3AsIHRoZSBzZWN0aW9uJ3MgY29sdW1uIG9mZnNldCBzaGlmdHMgdXMgZm9yd2FyZC4gT24gYWxsIG90aGVyIGxpbmVzIChzaW5jZSB0aGVcbiAgICAvLyBtYXAgY2FuIGJlIG11bHRpcGxlIGxpbmVzKSwgaXQgZG9lc24ndC5cbiAgICBjb25zdCBjT2Zmc2V0ID0gaSA9PT0gMCA/IGNvbHVtbk9mZnNldCA6IDA7XG5cbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG4gICAgICBjb25zdCBjb2x1bW4gPSBjT2Zmc2V0ICsgc2VnW0NPTFVNTl07XG5cbiAgICAgIC8vIElmIHRoaXMgc2VnbWVudCBzdGVwcyBpbnRvIHRoZSBjb2x1bW4gcmFuZ2UgdGhhdCB0aGUgbmV4dCBzZWN0aW9uJ3MgbWFwIGNvbnRyb2xzLCB3ZSBuZWVkXG4gICAgICAvLyB0byBzdG9wIGVhcmx5LlxuICAgICAgaWYgKGxpbmVJID09PSBzdG9wTGluZSAmJiBjb2x1bW4gPj0gc3RvcENvbHVtbikgcmV0dXJuO1xuXG4gICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBvdXQucHVzaChbY29sdW1uXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VzSW5kZXggPSBzb3VyY2VzT2Zmc2V0ICsgc2VnW1NPVVJDRVNfSU5ERVhdO1xuICAgICAgY29uc3Qgc291cmNlTGluZSA9IHNlZ1tTT1VSQ0VfTElORV07XG4gICAgICBjb25zdCBzb3VyY2VDb2x1bW4gPSBzZWdbU09VUkNFX0NPTFVNTl07XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgc2VnLmxlbmd0aCA9PT0gNFxuICAgICAgICAgID8gW2NvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW5dXG4gICAgICAgICAgOiBbY29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNPZmZzZXQgKyBzZWdbTkFNRVNfSU5ERVhdXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZDxUPihhcnI6IFRbXSwgb3RoZXI6IFRbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG90aGVyLmxlbmd0aDsgaSsrKSBhcnIucHVzaChvdGhlcltpXSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmU8VD4oYXJyOiBUW11bXSwgaW5kZXg6IG51bWJlcik6IFRbXSB7XG4gIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoOyBpIDw9IGluZGV4OyBpKyspIGFycltpXSA9IFtdO1xuICByZXR1cm4gYXJyW2luZGV4XTtcbn1cbiIsICJpbXBvcnQgeyBlbmNvZGUsIGRlY29kZSB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJy4vcmVzb2x2ZSc7XG5pbXBvcnQgc3RyaXBGaWxlbmFtZSBmcm9tICcuL3N0cmlwLWZpbGVuYW1lJztcbmltcG9ydCBtYXliZVNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCBidWlsZEJ5U291cmNlcyBmcm9tICcuL2J5LXNvdXJjZSc7XG5pbXBvcnQge1xuICBtZW1vaXplZFN0YXRlLFxuICBtZW1vaXplZEJpbmFyeVNlYXJjaCxcbiAgdXBwZXJCb3VuZCxcbiAgbG93ZXJCb3VuZCxcbiAgZm91bmQgYXMgYnNGb3VuZCxcbn0gZnJvbSAnLi9iaW5hcnktc2VhcmNoJztcbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxuICBSRVZfR0VORVJBVEVEX0xJTkUsXG4gIFJFVl9HRU5FUkFURURfQ09MVU1OLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBTZWdtZW50LCBSZXZlcnNlU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHR5cGUge1xuICBTb3VyY2VNYXBWMyxcbiAgRGVjb2RlZFNvdXJjZU1hcCxcbiAgRW5jb2RlZFNvdXJjZU1hcCxcbiAgSW52YWxpZE9yaWdpbmFsTWFwcGluZyxcbiAgT3JpZ2luYWxNYXBwaW5nLFxuICBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyxcbiAgR2VuZXJhdGVkTWFwcGluZyxcbiAgU291cmNlTWFwSW5wdXQsXG4gIE5lZWRsZSxcbiAgU291cmNlTmVlZGxlLFxuICBTb3VyY2VNYXAsXG4gIEVhY2hNYXBwaW5nLFxuICBCaWFzLFxuICBYSW5wdXQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2UgfSBmcm9tICcuL2J5LXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IE1lbW9TdGF0ZSB9IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5cbmV4cG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuZXhwb3J0IHR5cGUge1xuICBTb3VyY2VNYXAsXG4gIERlY29kZWRTb3VyY2VNYXAsXG4gIEVuY29kZWRTb3VyY2VNYXAsXG4gIFNlY3Rpb24sXG4gIFNlY3Rpb25lZFNvdXJjZU1hcCxcbiAgU291cmNlTWFwVjMsXG4gIEJpYXMsXG4gIEVhY2hNYXBwaW5nLFxuICBHZW5lcmF0ZWRNYXBwaW5nLFxuICBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyxcbiAgSW52YWxpZE9yaWdpbmFsTWFwcGluZyxcbiAgTmVlZGxlLFxuICBPcmlnaW5hbE1hcHBpbmcsXG4gIE9yaWdpbmFsTWFwcGluZyBhcyBNYXBwaW5nLFxuICBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCxcbiAgU291cmNlTWFwSW5wdXQsXG4gIFNvdXJjZU5lZWRsZSxcbiAgWElucHV0LFxuICBFbmNvZGVkU291cmNlTWFwWElucHV0LFxuICBEZWNvZGVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBYSW5wdXQsXG4gIFNlY3Rpb25YSW5wdXQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgUHVibGljTWFwIHtcbiAgX2VuY29kZWQ6IFRyYWNlTWFwWydfZW5jb2RlZCddO1xuICBfZGVjb2RlZDogVHJhY2VNYXBbJ19kZWNvZGVkJ107XG4gIF9kZWNvZGVkTWVtbzogVHJhY2VNYXBbJ19kZWNvZGVkTWVtbyddO1xuICBfYnlTb3VyY2VzOiBUcmFjZU1hcFsnX2J5U291cmNlcyddO1xuICBfYnlTb3VyY2VNZW1vczogVHJhY2VNYXBbJ19ieVNvdXJjZU1lbW9zJ107XG59XG5cbmNvbnN0IExJTkVfR1RSX1pFUk8gPSAnYGxpbmVgIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgKGxpbmVzIHN0YXJ0IGF0IGxpbmUgMSknO1xuY29uc3QgQ09MX0dUUl9FUV9aRVJPID0gJ2Bjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApJztcblxuZXhwb3J0IGNvbnN0IExFQVNUX1VQUEVSX0JPVU5EID0gLTE7XG5leHBvcnQgY29uc3QgR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuXG5leHBvcnQgeyBBbnlNYXAgfSBmcm9tICcuL2FueS1tYXAnO1xuXG5leHBvcnQgY2xhc3MgVHJhY2VNYXAgaW1wbGVtZW50cyBTb3VyY2VNYXAge1xuICBkZWNsYXJlIHZlcnNpb246IFNvdXJjZU1hcFYzWyd2ZXJzaW9uJ107XG4gIGRlY2xhcmUgZmlsZTogU291cmNlTWFwVjNbJ2ZpbGUnXTtcbiAgZGVjbGFyZSBuYW1lczogU291cmNlTWFwVjNbJ25hbWVzJ107XG4gIGRlY2xhcmUgc291cmNlUm9vdDogU291cmNlTWFwVjNbJ3NvdXJjZVJvb3QnXTtcbiAgZGVjbGFyZSBzb3VyY2VzOiBTb3VyY2VNYXBWM1snc291cmNlcyddO1xuICBkZWNsYXJlIHNvdXJjZXNDb250ZW50OiBTb3VyY2VNYXBWM1snc291cmNlc0NvbnRlbnQnXTtcbiAgZGVjbGFyZSBpZ25vcmVMaXN0OiBTb3VyY2VNYXBWM1snaWdub3JlTGlzdCddO1xuXG4gIGRlY2xhcmUgcmVzb2x2ZWRTb3VyY2VzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9lbmNvZGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBkZWNsYXJlIF9kZWNvZGVkOiBTb3VyY2VNYXBTZWdtZW50W11bXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9kZWNvZGVkTWVtbzogTWVtb1N0YXRlO1xuXG4gIHByaXZhdGUgZGVjbGFyZSBfYnlTb3VyY2VzOiBTb3VyY2VbXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9ieVNvdXJjZU1lbW9zOiBNZW1vU3RhdGVbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihtYXA6IFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgbWFwID09PSAnc3RyaW5nJztcblxuICAgIGlmICghaXNTdHJpbmcgJiYgKG1hcCBhcyB1bmtub3duIGFzIHsgX2RlY29kZWRNZW1vOiBhbnkgfSkuX2RlY29kZWRNZW1vKSByZXR1cm4gbWFwIGFzIFRyYWNlTWFwO1xuXG4gICAgY29uc3QgcGFyc2VkID0gKGlzU3RyaW5nID8gSlNPTi5wYXJzZShtYXApIDogbWFwKSBhcyBEZWNvZGVkU291cmNlTWFwIHwgRW5jb2RlZFNvdXJjZU1hcDtcblxuICAgIGNvbnN0IHsgdmVyc2lvbiwgZmlsZSwgbmFtZXMsIHNvdXJjZVJvb3QsIHNvdXJjZXMsIHNvdXJjZXNDb250ZW50IH0gPSBwYXJzZWQ7XG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLmZpbGUgPSBmaWxlO1xuICAgIHRoaXMubmFtZXMgPSBuYW1lcyB8fCBbXTtcbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuc291cmNlcyA9IHNvdXJjZXM7XG4gICAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICAgIHRoaXMuaWdub3JlTGlzdCA9IHBhcnNlZC5pZ25vcmVMaXN0IHx8IChwYXJzZWQgYXMgWElucHV0KS54X2dvb2dsZV9pZ25vcmVMaXN0IHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb20gPSByZXNvbHZlKHNvdXJjZVJvb3QgfHwgJycsIHN0cmlwRmlsZW5hbWUobWFwVXJsKSk7XG4gICAgdGhpcy5yZXNvbHZlZFNvdXJjZXMgPSBzb3VyY2VzLm1hcCgocykgPT4gcmVzb2x2ZShzIHx8ICcnLCBmcm9tKSk7XG5cbiAgICBjb25zdCB7IG1hcHBpbmdzIH0gPSBwYXJzZWQ7XG4gICAgaWYgKHR5cGVvZiBtYXBwaW5ncyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncztcbiAgICAgIHRoaXMuX2RlY29kZWQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VuY29kZWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWNvZGVkID0gbWF5YmVTb3J0KG1hcHBpbmdzLCBpc1N0cmluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVjb2RlZE1lbW8gPSBtZW1vaXplZFN0YXRlKCk7XG4gICAgdGhpcy5fYnlTb3VyY2VzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2J5U291cmNlTWVtb3MgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBtYXAgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3QobWFwOiB1bmtub3duKTogUHVibGljTWFwIHtcbiAgcmV0dXJuIG1hcCBhcyBhbnk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZW5jb2RlZCAoVkxRIHN0cmluZykgZm9ybSBvZiB0aGUgU291cmNlTWFwJ3MgbWFwcGluZ3MgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVkTWFwcGluZ3MobWFwOiBUcmFjZU1hcCk6IEVuY29kZWRTb3VyY2VNYXBbJ21hcHBpbmdzJ10ge1xuICByZXR1cm4gKGNhc3QobWFwKS5fZW5jb2RlZCA/Pz0gZW5jb2RlKGNhc3QobWFwKS5fZGVjb2RlZCEpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNvZGVkIChhcnJheSBvZiBsaW5lcyBvZiBzZWdtZW50cykgZm9ybSBvZiB0aGUgU291cmNlTWFwJ3MgbWFwcGluZ3MgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVkTWFwcGluZ3MobWFwOiBUcmFjZU1hcCk6IFJlYWRvbmx5PERlY29kZWRTb3VyY2VNYXBbJ21hcHBpbmdzJ10+IHtcbiAgcmV0dXJuIChjYXN0KG1hcCkuX2RlY29kZWQgfHw9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQhKSk7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgQVBJIHRvIGZpbmQgdGhlIHNlZ21lbnQgYXNzb2NpYXRlZCB3aXRoIGEgZ2VuZXJhdGVkIGxpbmUvY29sdW1uICh0aGluaywgZnJvbSBhXG4gKiBzdGFjayB0cmFjZSkuIExpbmUgYW5kIGNvbHVtbiBoZXJlIGFyZSAwLWJhc2VkLCB1bmxpa2UgYG9yaWdpbmFsUG9zaXRpb25Gb3JgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VTZWdtZW50KFxuICBtYXA6IFRyYWNlTWFwLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuKTogUmVhZG9ubHk8U291cmNlTWFwU2VnbWVudD4gfCBudWxsIHtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuXG4gIC8vIEl0J3MgY29tbW9uIGZvciBwYXJlbnQgc291cmNlIG1hcHMgdG8gaGF2ZSBwb2ludGVycyB0byBsaW5lcyB0aGF0IGhhdmUgbm9cbiAgLy8gbWFwcGluZyAobGlrZSBhIFwiLy8jIHNvdXJjZU1hcHBpbmdVUkw9XCIpIGF0IHRoZSBlbmQgb2YgdGhlIGNoaWxkIGZpbGUuXG4gIGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV07XG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gICAgc2VnbWVudHMsXG4gICAgY2FzdChtYXApLl9kZWNvZGVkTWVtbyxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBHUkVBVEVTVF9MT1dFUl9CT1VORCxcbiAgKTtcblxuICByZXR1cm4gaW5kZXggPT09IC0xID8gbnVsbCA6IHNlZ21lbnRzW2luZGV4XTtcbn1cblxuLyoqXG4gKiBBIGhpZ2hlci1sZXZlbCBBUEkgdG8gZmluZCB0aGUgc291cmNlL2xpbmUvY29sdW1uIGFzc29jaWF0ZWQgd2l0aCBhIGdlbmVyYXRlZCBsaW5lL2NvbHVtblxuICogKHRoaW5rLCBmcm9tIGEgc3RhY2sgdHJhY2UpLiBMaW5lIGlzIDEtYmFzZWQsIGJ1dCBjb2x1bW4gaXMgMC1iYXNlZCwgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvciBpblxuICogYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmlnaW5hbFBvc2l0aW9uRm9yKFxuICBtYXA6IFRyYWNlTWFwLFxuICBuZWVkbGU6IE5lZWRsZSxcbik6IE9yaWdpbmFsTWFwcGluZyB8IEludmFsaWRPcmlnaW5hbE1hcHBpbmcge1xuICBsZXQgeyBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgbGluZS0tO1xuICBpZiAobGluZSA8IDApIHRocm93IG5ldyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcbiAgaWYgKGNvbHVtbiA8IDApIHRocm93IG5ldyBFcnJvcihDT0xfR1RSX0VRX1pFUk8pO1xuXG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVkTWFwcGluZ3MobWFwKTtcblxuICAvLyBJdCdzIGNvbW1vbiBmb3IgcGFyZW50IHNvdXJjZSBtYXBzIHRvIGhhdmUgcG9pbnRlcnMgdG8gbGluZXMgdGhhdCBoYXZlIG5vXG4gIC8vIG1hcHBpbmcgKGxpa2UgYSBcIi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiKSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBmaWxlLlxuICBpZiAobGluZSA+PSBkZWNvZGVkLmxlbmd0aCkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gZGVjb2RlZFtsaW5lXTtcbiAgY29uc3QgaW5kZXggPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgICBzZWdtZW50cyxcbiAgICBjYXN0KG1hcCkuX2RlY29kZWRNZW1vLFxuICAgIGxpbmUsXG4gICAgY29sdW1uLFxuICAgIGJpYXMgfHwgR1JFQVRFU1RfTE9XRVJfQk9VTkQsXG4gICk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG4gIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHsgbmFtZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICByZXR1cm4gT01hcHBpbmcoXG4gICAgcmVzb2x2ZWRTb3VyY2VzW3NlZ21lbnRbU09VUkNFU19JTkRFWF1dLFxuICAgIHNlZ21lbnRbU09VUkNFX0xJTkVdICsgMSxcbiAgICBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLFxuICAgIHNlZ21lbnQubGVuZ3RoID09PSA1ID8gbmFtZXNbc2VnbWVudFtOQU1FU19JTkRFWF1dIDogbnVsbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHBvc2l0aW9uIG9mIHRoZSBwcm92aWRlZCBzb3VyY2UvbGluZS9jb2x1bW4gc291cmNlIHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb25Gb3IoXG4gIG1hcDogVHJhY2VNYXAsXG4gIG5lZWRsZTogU291cmNlTmVlZGxlLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nIHtcbiAgY29uc3QgeyBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB9ID0gbmVlZGxlO1xuICByZXR1cm4gZ2VuZXJhdGVkUG9zaXRpb24obWFwLCBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCBHUkVBVEVTVF9MT1dFUl9CT1VORCwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gcG9zaXRpb25zIG9mIHRoZSBwcm92aWRlZCBzb3VyY2UvbGluZS9jb2x1bW4gc291cmNlIHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKG1hcDogVHJhY2VNYXAsIG5lZWRsZTogU291cmNlTmVlZGxlKTogR2VuZXJhdGVkTWFwcGluZ1tdIHtcbiAgY29uc3QgeyBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB9ID0gbmVlZGxlO1xuICAvLyBTb3VyY2VNYXBDb25zdW1lciB1c2VzIExFQVNUX1VQUEVSX0JPVU5EIGZvciBzb21lIHJlYXNvbiwgc28gd2UgZm9sbG93IHN1aXQuXG4gIHJldHVybiBnZW5lcmF0ZWRQb3NpdGlvbihtYXAsIHNvdXJjZSwgbGluZSwgY29sdW1uLCBiaWFzIHx8IExFQVNUX1VQUEVSX0JPVU5ELCB0cnVlKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBlYWNoIG1hcHBpbmcgaW4gZ2VuZXJhdGVkIHBvc2l0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWFjaE1hcHBpbmcobWFwOiBUcmFjZU1hcCwgY2I6IChtYXBwaW5nOiBFYWNoTWFwcGluZykgPT4gdm9pZCk6IHZvaWQge1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG4gIGNvbnN0IHsgbmFtZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcblxuICAgICAgY29uc3QgZ2VuZXJhdGVkTGluZSA9IGkgKyAxO1xuICAgICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1uID0gc2VnWzBdO1xuICAgICAgbGV0IHNvdXJjZSA9IG51bGw7XG4gICAgICBsZXQgb3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgICAgIGxldCBvcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gICAgICBsZXQgbmFtZSA9IG51bGw7XG4gICAgICBpZiAoc2VnLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBzb3VyY2UgPSByZXNvbHZlZFNvdXJjZXNbc2VnWzFdXTtcbiAgICAgICAgb3JpZ2luYWxMaW5lID0gc2VnWzJdICsgMTtcbiAgICAgICAgb3JpZ2luYWxDb2x1bW4gPSBzZWdbM107XG4gICAgICB9XG4gICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gNSkgbmFtZSA9IG5hbWVzW3NlZ1s0XV07XG5cbiAgICAgIGNiKHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIG9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWUsXG4gICAgICB9IGFzIEVhY2hNYXBwaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSW5kZXgobWFwOiBUcmFjZU1hcCwgc291cmNlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB7IHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICBsZXQgaW5kZXggPSBzb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKGluZGV4ID09PSAtMSkgaW5kZXggPSByZXNvbHZlZFNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBwYXJ0aWN1bGFyIHNvdXJjZSwgaWYgaXRzIGZvdW5kLiBSZXR1cm5zIG51bGwgaWYgbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc291cmNlQ29udGVudEZvcihtYXA6IFRyYWNlTWFwLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHNvdXJjZXNDb250ZW50IH0gPSBtYXA7XG4gIGlmIChzb3VyY2VzQ29udGVudCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5kZXggPSBzb3VyY2VJbmRleChtYXAsIHNvdXJjZSk7XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyBudWxsIDogc291cmNlc0NvbnRlbnRbaW5kZXhdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHNvdXJjZSBpcyBtYXJrZWQgdG8gaWdub3JlIGJ5IHRoZSBzb3VyY2UgbWFwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZ25vcmVkKG1hcDogVHJhY2VNYXAsIHNvdXJjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgaWdub3JlTGlzdCB9ID0gbWFwO1xuICBpZiAoaWdub3JlTGlzdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGluZGV4ID0gc291cmNlSW5kZXgobWFwLCBzb3VyY2UpO1xuICByZXR1cm4gaW5kZXggPT09IC0xID8gZmFsc2UgOiBpZ25vcmVMaXN0LmluY2x1ZGVzKGluZGV4KTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IHNraXBzIHNvcnRpbmcgb2YgdGhlIGlucHV0IG1hcCdzIG1hcHBpbmdzIGFycmF5LCB3aGljaCBjYW4gYmUgZXhwZW5zaXZlIGZvciBsYXJnZXJcbiAqIG1hcHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzb3J0ZWREZWNvZGVkTWFwKG1hcDogRGVjb2RlZFNvdXJjZU1hcCwgbWFwVXJsPzogc3RyaW5nKTogVHJhY2VNYXAge1xuICBjb25zdCB0cmFjZXIgPSBuZXcgVHJhY2VNYXAoY2xvbmUobWFwLCBbXSksIG1hcFVybCk7XG4gIGNhc3QodHJhY2VyKS5fZGVjb2RlZCA9IG1hcC5tYXBwaW5ncztcbiAgcmV0dXJuIHRyYWNlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc291cmNlbWFwIG9iamVjdCAod2l0aCBkZWNvZGVkIG1hcHBpbmdzKSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhIGxpYnJhcnkgdGhhdCBleHBlY3RzXG4gKiBhIHNvdXJjZW1hcCwgb3IgdG8gSlNPTi5zdHJpbmdpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVkTWFwKFxuICBtYXA6IFRyYWNlTWFwLFxuKTogT21pdDxEZWNvZGVkU291cmNlTWFwLCAnbWFwcGluZ3MnPiAmIHsgbWFwcGluZ3M6IHJlYWRvbmx5IFNvdXJjZU1hcFNlZ21lbnRbXVtdIH0ge1xuICByZXR1cm4gY2xvbmUobWFwLCBkZWNvZGVkTWFwcGluZ3MobWFwKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZW5jb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlZE1hcChtYXA6IFRyYWNlTWFwKTogRW5jb2RlZFNvdXJjZU1hcCB7XG4gIHJldHVybiBjbG9uZShtYXAsIGVuY29kZWRNYXBwaW5ncyhtYXApKTtcbn1cblxuZnVuY3Rpb24gY2xvbmU8VCBleHRlbmRzIHN0cmluZyB8IHJlYWRvbmx5IFNvdXJjZU1hcFNlZ21lbnRbXVtdPihcbiAgbWFwOiBUcmFjZU1hcCB8IERlY29kZWRTb3VyY2VNYXAsXG4gIG1hcHBpbmdzOiBULFxuKTogVCBleHRlbmRzIHN0cmluZyA/IEVuY29kZWRTb3VyY2VNYXAgOiBEZWNvZGVkU291cmNlTWFwIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBtYXAudmVyc2lvbixcbiAgICBmaWxlOiBtYXAuZmlsZSxcbiAgICBuYW1lczogbWFwLm5hbWVzLFxuICAgIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290LFxuICAgIHNvdXJjZXM6IG1hcC5zb3VyY2VzLFxuICAgIHNvdXJjZXNDb250ZW50OiBtYXAuc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdDogbWFwLmlnbm9yZUxpc3QgfHwgKG1hcCBhcyBYSW5wdXQpLnhfZ29vZ2xlX2lnbm9yZUxpc3QsXG4gIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiBPTWFwcGluZyhzb3VyY2U6IG51bGwsIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCwgbmFtZTogbnVsbCk6IEludmFsaWRPcmlnaW5hbE1hcHBpbmc7XG5mdW5jdGlvbiBPTWFwcGluZyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4pOiBPcmlnaW5hbE1hcHBpbmc7XG5mdW5jdGlvbiBPTWFwcGluZyhcbiAgc291cmNlOiBzdHJpbmcgfCBudWxsLFxuICBsaW5lOiBudW1iZXIgfCBudWxsLFxuICBjb2x1bW46IG51bWJlciB8IG51bGwsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4pOiBPcmlnaW5hbE1hcHBpbmcgfCBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nIHtcbiAgcmV0dXJuIHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUgfSBhcyBhbnk7XG59XG5cbmZ1bmN0aW9uIEdNYXBwaW5nKGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCk6IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gR01hcHBpbmcobGluZTogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEdlbmVyYXRlZE1hcHBpbmc7XG5mdW5jdGlvbiBHTWFwcGluZyhcbiAgbGluZTogbnVtYmVyIHwgbnVsbCxcbiAgY29sdW1uOiBudW1iZXIgfCBudWxsLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nIHtcbiAgcmV0dXJuIHsgbGluZSwgY29sdW1uIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgc2VnbWVudHM6IFNvdXJjZU1hcFNlZ21lbnRbXSxcbiAgbWVtbzogTWVtb1N0YXRlLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuKTogbnVtYmVyO1xuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBudW1iZXI7XG5mdW5jdGlvbiB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgc2VnbWVudHM6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IG51bWJlciB7XG4gIGxldCBpbmRleCA9IG1lbW9pemVkQmluYXJ5U2VhcmNoKHNlZ21lbnRzLCBjb2x1bW4sIG1lbW8sIGxpbmUpO1xuICBpZiAoYnNGb3VuZCkge1xuICAgIGluZGV4ID0gKGJpYXMgPT09IExFQVNUX1VQUEVSX0JPVU5EID8gdXBwZXJCb3VuZCA6IGxvd2VyQm91bmQpKHNlZ21lbnRzLCBjb2x1bW4sIGluZGV4KTtcbiAgfSBlbHNlIGlmIChiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCkgaW5kZXgrKztcblxuICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGgpIHJldHVybiAtMTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBzbGljZUdlbmVyYXRlZFBvc2l0aW9ucyhcbiAgc2VnbWVudHM6IFJldmVyc2VTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGxldCBtaW4gPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChzZWdtZW50cywgbWVtbywgbGluZSwgY29sdW1uLCBHUkVBVEVTVF9MT1dFUl9CT1VORCk7XG5cbiAgLy8gV2UgaWdub3JlZCB0aGUgYmlhcyB3aGVuIHRyYWNpbmcgdGhlIHNlZ21lbnQgc28gdGhhdCB3ZSdyZSBndWFybmF0ZWVkIHRvIGZpbmQgdGhlIGZpcnN0IChpblxuICAvLyBpbnNlcnRpb24gb3JkZXIpIHNlZ21lbnQgdGhhdCBtYXRjaGVkLiBFdmVuIGlmIHdlIGRpZCByZXNwZWN0IHRoZSBiaWFzIHdoZW4gdHJhY2luZywgd2Ugd291bGRcbiAgLy8gc3RpbGwgbmVlZCB0byBjYWxsIGBsb3dlckJvdW5kKClgIHRvIGZpbmQgdGhlIGZpcnN0IHNlZ21lbnQsIHdoaWNoIGlzIHNsb3dlciB0aGFuIGp1c3QgbG9va2luZ1xuICAvLyBmb3IgdGhlIEdSRUFURVNUX0xPV0VSX0JPVU5EIHRvIGJlZ2luIHdpdGguIFRoZSBvbmx5IGRpZmZlcmVuY2UgdGhhdCBtYXR0ZXJzIGZvciB1cyBpcyB3aGVuIHRoZVxuICAvLyBiaW5hcnkgc2VhcmNoIGRpZG4ndCBtYXRjaCwgaW4gd2hpY2ggY2FzZSBHUkVBVEVTVF9MT1dFUl9CT1VORCBqdXN0IG5lZWRzIHRvIGluY3JlbWVudCB0b1xuICAvLyBtYXRjaCBMRUFTVF9VUFBFUl9CT1VORC5cbiAgaWYgKCFic0ZvdW5kICYmIGJpYXMgPT09IExFQVNUX1VQUEVSX0JPVU5EKSBtaW4rKztcblxuICBpZiAobWluID09PSAtMSB8fCBtaW4gPT09IHNlZ21lbnRzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gIC8vIFdlIG1heSBoYXZlIGZvdW5kIHRoZSBzZWdtZW50IHRoYXQgc3RhcnRlZCBhdCBhbiBlYXJsaWVyIGNvbHVtbi4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlbiB3ZVxuICAvLyBuZWVkIHRvIHNsaWNlIGFsbCBnZW5lcmF0ZWQgc2VnbWVudHMgdGhhdCBtYXRjaCBfdGhhdF8gY29sdW1uLCBiZWNhdXNlIGFsbCBzdWNoIHNlZ21lbnRzIHNwYW5cbiAgLy8gdG8gb3VyIGRlc2lyZWQgY29sdW1uLlxuICBjb25zdCBtYXRjaGVkQ29sdW1uID0gYnNGb3VuZCA/IGNvbHVtbiA6IHNlZ21lbnRzW21pbl1bQ09MVU1OXTtcblxuICAvLyBUaGUgYmluYXJ5IHNlYXJjaCBpcyBub3QgZ3VhcmFudGVlZCB0byBmaW5kIHRoZSBsb3dlciBib3VuZCB3aGVuIGEgbWF0Y2ggd2Fzbid0IGZvdW5kLlxuICBpZiAoIWJzRm91bmQpIG1pbiA9IGxvd2VyQm91bmQoc2VnbWVudHMsIG1hdGNoZWRDb2x1bW4sIG1pbik7XG4gIGNvbnN0IG1heCA9IHVwcGVyQm91bmQoc2VnbWVudHMsIG1hdGNoZWRDb2x1bW4sIG1pbik7XG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoOyBtaW4gPD0gbWF4OyBtaW4rKykge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1ttaW5dO1xuICAgIHJlc3VsdC5wdXNoKEdNYXBwaW5nKHNlZ21lbnRbUkVWX0dFTkVSQVRFRF9MSU5FXSArIDEsIHNlZ21lbnRbUkVWX0dFTkVSQVRFRF9DT0xVTU5dKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IGZhbHNlLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IHRydWUsXG4pOiBHZW5lcmF0ZWRNYXBwaW5nW107XG5mdW5jdGlvbiBnZW5lcmF0ZWRQb3NpdGlvbihcbiAgbWFwOiBUcmFjZU1hcCxcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4gIGFsbDogYm9vbGVhbixcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB8IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGxpbmUtLTtcbiAgaWYgKGxpbmUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoTElORV9HVFJfWkVSTyk7XG4gIGlmIChjb2x1bW4gPCAwKSB0aHJvdyBuZXcgRXJyb3IoQ09MX0dUUl9FUV9aRVJPKTtcblxuICBjb25zdCB7IHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICBsZXQgc291cmNlSW5kZXggPSBzb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKHNvdXJjZUluZGV4ID09PSAtMSkgc291cmNlSW5kZXggPSByZXNvbHZlZFNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuICBpZiAoc291cmNlSW5kZXggPT09IC0xKSByZXR1cm4gYWxsID8gW10gOiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBnZW5lcmF0ZWQgPSAoY2FzdChtYXApLl9ieVNvdXJjZXMgfHw9IGJ1aWxkQnlTb3VyY2VzKFxuICAgIGRlY29kZWRNYXBwaW5ncyhtYXApLFxuICAgIChjYXN0KG1hcCkuX2J5U291cmNlTWVtb3MgPSBzb3VyY2VzLm1hcChtZW1vaXplZFN0YXRlKSksXG4gICkpO1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gZ2VuZXJhdGVkW3NvdXJjZUluZGV4XVtsaW5lXTtcbiAgaWYgKHNlZ21lbnRzID09IG51bGwpIHJldHVybiBhbGwgPyBbXSA6IEdNYXBwaW5nKG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IG1lbW8gPSBjYXN0KG1hcCkuX2J5U291cmNlTWVtb3MhW3NvdXJjZUluZGV4XTtcblxuICBpZiAoYWxsKSByZXR1cm4gc2xpY2VHZW5lcmF0ZWRQb3NpdGlvbnMoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyk7XG5cbiAgY29uc3QgaW5kZXggPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChzZWdtZW50cywgbWVtbywgbGluZSwgY29sdW1uLCBiaWFzKTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIEdNYXBwaW5nKG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG4gIHJldHVybiBHTWFwcGluZyhzZWdtZW50W1JFVl9HRU5FUkFURURfTElORV0gKyAxLCBzZWdtZW50W1JFVl9HRU5FUkFURURfQ09MVU1OXSk7XG59XG4iLCAidHlwZSBHZW5lcmF0ZWRDb2x1bW4gPSBudW1iZXI7XG50eXBlIFNvdXJjZXNJbmRleCA9IG51bWJlcjtcbnR5cGUgU291cmNlTGluZSA9IG51bWJlcjtcbnR5cGUgU291cmNlQ29sdW1uID0gbnVtYmVyO1xudHlwZSBOYW1lc0luZGV4ID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uLCBOYW1lc0luZGV4XTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTiA9IDA7XG5leHBvcnQgY29uc3QgU09VUkNFU19JTkRFWCA9IDE7XG5leHBvcnQgY29uc3QgU09VUkNFX0xJTkUgPSAyO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT0xVTU4gPSAzO1xuZXhwb3J0IGNvbnN0IE5BTUVTX0lOREVYID0gNDtcbiIsICJpbXBvcnQgeyBTZXRBcnJheSwgcHV0LCByZW1vdmUgfSBmcm9tICdAanJpZGdld2VsbC9zZXQtYXJyYXknO1xuaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjJztcbmltcG9ydCB7IFRyYWNlTWFwLCBkZWNvZGVkTWFwcGluZ3MgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuaW1wb3J0IHtcbiAgQ09MVU1OLFxuICBTT1VSQ0VTX0lOREVYLFxuICBTT1VSQ0VfTElORSxcbiAgU09VUkNFX0NPTFVNTixcbiAgTkFNRVNfSU5ERVgsXG59IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcElucHV0IH0gZnJvbSAnQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgRGVjb2RlZFNvdXJjZU1hcCwgRW5jb2RlZFNvdXJjZU1hcCwgUG9zLCBNYXBwaW5nIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFNvdXJjZU1hcCwgRW5jb2RlZFNvdXJjZU1hcCwgTWFwcGluZyB9O1xuXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBmaWxlPzogc3RyaW5nIHwgbnVsbDtcbiAgc291cmNlUm9vdD86IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBOT19OQU1FID0gLTE7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHN0YXRlIHRvIGdlbmVyYXRlIGEgc291cmNlbWFwLlxuICovXG5leHBvcnQgY2xhc3MgR2VuTWFwcGluZyB7XG4gIHByaXZhdGUgZGVjbGFyZSBfbmFtZXM6IFNldEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgZGVjbGFyZSBfc291cmNlczogU2V0QXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9zb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW107XG4gIHByaXZhdGUgZGVjbGFyZSBfbWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdO1xuICBwcml2YXRlIGRlY2xhcmUgX2lnbm9yZUxpc3Q6IFNldEFycmF5PG51bWJlcj47XG4gIGRlY2xhcmUgZmlsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBzb3VyY2VSb290OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHsgZmlsZSwgc291cmNlUm9vdCB9OiBPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9uYW1lcyA9IG5ldyBTZXRBcnJheSgpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXcgU2V0QXJyYXkoKTtcbiAgICB0aGlzLl9zb3VyY2VzQ29udGVudCA9IFtdO1xuICAgIHRoaXMuX21hcHBpbmdzID0gW107XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuX2lnbm9yZUxpc3QgPSBuZXcgU2V0QXJyYXkoKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHVibGljTWFwIHtcbiAgX25hbWVzOiBHZW5NYXBwaW5nWydfbmFtZXMnXTtcbiAgX3NvdXJjZXM6IEdlbk1hcHBpbmdbJ19zb3VyY2VzJ107XG4gIF9zb3VyY2VzQ29udGVudDogR2VuTWFwcGluZ1snX3NvdXJjZXNDb250ZW50J107XG4gIF9tYXBwaW5nczogR2VuTWFwcGluZ1snX21hcHBpbmdzJ107XG4gIF9pZ25vcmVMaXN0OiBHZW5NYXBwaW5nWydfaWdub3JlTGlzdCddO1xufVxuXG4vKipcbiAqIFR5cGVzY3JpcHQgZG9lc24ndCBhbGxvdyBmcmllbmQgYWNjZXNzIHRvIHByaXZhdGUgZmllbGRzLCBzbyB0aGlzIGp1c3QgY2FzdHMgdGhlIG1hcCBpbnRvIGEgdHlwZVxuICogd2l0aCBwdWJsaWMgYWNjZXNzIG1vZGlmaWVycy5cbiAqL1xuZnVuY3Rpb24gY2FzdChtYXA6IHVua25vd24pOiBQdWJsaWNNYXAge1xuICByZXR1cm4gbWFwIGFzIGFueTtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBBUEkgdG8gYXNzb2NpYXRlIGEgZ2VuZXJhdGVkIHBvc2l0aW9uIHdpdGggYW4gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uLiBMaW5lIGFuZFxuICogY29sdW1uIGhlcmUgYXJlIDAtYmFzZWQsIHVubGlrZSBgYWRkTWFwcGluZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWdtZW50KFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIGdlbkxpbmU6IG51bWJlcixcbiAgZ2VuQ29sdW1uOiBudW1iZXIsXG4gIHNvdXJjZT86IG51bGwsXG4gIHNvdXJjZUxpbmU/OiBudWxsLFxuICBzb3VyY2VDb2x1bW4/OiBudWxsLFxuICBuYW1lPzogbnVsbCxcbiAgY29udGVudD86IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWU/OiBudWxsLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgc291cmNlTGluZTogbnVtYmVyLFxuICBzb3VyY2VDb2x1bW46IG51bWJlcixcbiAgbmFtZTogc3RyaW5nLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U/OiBzdHJpbmcgfCBudWxsLFxuICBzb3VyY2VMaW5lPzogbnVtYmVyIHwgbnVsbCxcbiAgc291cmNlQ29sdW1uPzogbnVtYmVyIHwgbnVsbCxcbiAgbmFtZT86IHN0cmluZyB8IG51bGwsXG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsLFxuKTogdm9pZCB7XG4gIHJldHVybiBhZGRTZWdtZW50SW50ZXJuYWwoXG4gICAgZmFsc2UsXG4gICAgbWFwLFxuICAgIGdlbkxpbmUsXG4gICAgZ2VuQ29sdW1uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VMaW5lLFxuICAgIHNvdXJjZUNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59XG5cbi8qKlxuICogQSBoaWdoLWxldmVsIEFQSSB0byBhc3NvY2lhdGUgYSBnZW5lcmF0ZWQgcG9zaXRpb24gd2l0aCBhbiBvcmlnaW5hbCBzb3VyY2UgcG9zaXRpb24uIExpbmUgaXNcbiAqIDEtYmFzZWQsIGJ1dCBjb2x1bW4gaXMgMC1iYXNlZCwgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvciBpbiBgc291cmNlLW1hcGAgbGlicmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1hcHBpbmcoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZT86IG51bGw7XG4gICAgb3JpZ2luYWw/OiBudWxsO1xuICAgIG5hbWU/OiBudWxsO1xuICAgIGNvbnRlbnQ/OiBudWxsO1xuICB9LFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBvcmlnaW5hbDogUG9zO1xuICAgIG5hbWU/OiBudWxsO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsO1xuICB9LFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBvcmlnaW5hbDogUG9zO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW5hbD86IFBvcyB8IG51bGw7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgY29udGVudD86IHN0cmluZyB8IG51bGw7XG4gIH0sXG4pOiB2b2lkIHtcbiAgcmV0dXJuIGFkZE1hcHBpbmdJbnRlcm5hbChmYWxzZSwgbWFwLCBtYXBwaW5nIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGFkZE1hcHBpbmdJbnRlcm5hbD5bMl0pO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgYGFkZFNlZ21lbnRgLCBidXQgd2lsbCBvbmx5IGFkZCB0aGUgc2VnbWVudCBpZiBpdCBnZW5lcmF0ZXMgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoZVxuICogcmVzdWx0aW5nIG1hcC4gVGhpcyBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiBzZWdtZW50cyBhcmUgYWRkZWQgKippbiBvcmRlcioqLCBtZWFuaW5nIHlvdSBzaG91bGRcbiAqIG5vdCBhZGQgYSBzZWdtZW50IHdpdGggYSBsb3dlciBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gdGhhbiBvbmUgdGhhdCBjYW1lIGJlZm9yZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQWRkU2VnbWVudDogdHlwZW9mIGFkZFNlZ21lbnQgPSAoXG4gIG1hcCxcbiAgZ2VuTGluZSxcbiAgZ2VuQ29sdW1uLFxuICBzb3VyY2UsXG4gIHNvdXJjZUxpbmUsXG4gIHNvdXJjZUNvbHVtbixcbiAgbmFtZSxcbiAgY29udGVudCxcbikgPT4ge1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIHRydWUsXG4gICAgbWFwLFxuICAgIGdlbkxpbmUsXG4gICAgZ2VuQ29sdW1uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VMaW5lLFxuICAgIHNvdXJjZUNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59O1xuXG4vKipcbiAqIFNhbWUgYXMgYGFkZE1hcHBpbmdgLCBidXQgd2lsbCBvbmx5IGFkZCB0aGUgbWFwcGluZyBpZiBpdCBnZW5lcmF0ZXMgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoZVxuICogcmVzdWx0aW5nIG1hcC4gVGhpcyBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiBtYXBwaW5ncyBhcmUgYWRkZWQgKippbiBvcmRlcioqLCBtZWFuaW5nIHlvdSBzaG91bGRcbiAqIG5vdCBhZGQgYSBtYXBwaW5nIHdpdGggYSBsb3dlciBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gdGhhbiBvbmUgdGhhdCBjYW1lIGJlZm9yZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQWRkTWFwcGluZzogdHlwZW9mIGFkZE1hcHBpbmcgPSAobWFwLCBtYXBwaW5nKSA9PiB7XG4gIHJldHVybiBhZGRNYXBwaW5nSW50ZXJuYWwodHJ1ZSwgbWFwLCBtYXBwaW5nIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGFkZE1hcHBpbmdJbnRlcm5hbD5bMl0pO1xufTtcblxuLyoqXG4gKiBBZGRzL3JlbW92ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSBzb3VyY2UgbWFwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U291cmNlQ29udGVudChtYXA6IEdlbk1hcHBpbmcsIHNvdXJjZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gIGNvbnN0IHsgX3NvdXJjZXM6IHNvdXJjZXMsIF9zb3VyY2VzQ29udGVudDogc291cmNlc0NvbnRlbnQgfSA9IGNhc3QobWFwKTtcbiAgY29uc3QgaW5kZXggPSBwdXQoc291cmNlcywgc291cmNlKTtcbiAgc291cmNlc0NvbnRlbnRbaW5kZXhdID0gY29udGVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldElnbm9yZShtYXA6IEdlbk1hcHBpbmcsIHNvdXJjZTogc3RyaW5nLCBpZ25vcmUgPSB0cnVlKSB7XG4gIGNvbnN0IHsgX3NvdXJjZXM6IHNvdXJjZXMsIF9zb3VyY2VzQ29udGVudDogc291cmNlc0NvbnRlbnQsIF9pZ25vcmVMaXN0OiBpZ25vcmVMaXN0IH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGluZGV4ID0gcHV0KHNvdXJjZXMsIHNvdXJjZSk7XG4gIGlmIChpbmRleCA9PT0gc291cmNlc0NvbnRlbnQubGVuZ3RoKSBzb3VyY2VzQ29udGVudFtpbmRleF0gPSBudWxsO1xuICBpZiAoaWdub3JlKSBwdXQoaWdub3JlTGlzdCwgaW5kZXgpO1xuICBlbHNlIHJlbW92ZShpZ25vcmVMaXN0LCBpbmRleCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZGVjb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EZWNvZGVkTWFwKG1hcDogR2VuTWFwcGluZyk6IERlY29kZWRTb3VyY2VNYXAge1xuICBjb25zdCB7XG4gICAgX21hcHBpbmdzOiBtYXBwaW5ncyxcbiAgICBfc291cmNlczogc291cmNlcyxcbiAgICBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LFxuICAgIF9uYW1lczogbmFtZXMsXG4gICAgX2lnbm9yZUxpc3Q6IGlnbm9yZUxpc3QsXG4gIH0gPSBjYXN0KG1hcCk7XG4gIHJlbW92ZUVtcHR5RmluYWxMaW5lcyhtYXBwaW5ncyk7XG5cbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6IG1hcC5maWxlIHx8IHVuZGVmaW5lZCxcbiAgICBuYW1lczogbmFtZXMuYXJyYXksXG4gICAgc291cmNlUm9vdDogbWFwLnNvdXJjZVJvb3QgfHwgdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IHNvdXJjZXMuYXJyYXksXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdDogaWdub3JlTGlzdC5hcnJheSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc291cmNlbWFwIG9iamVjdCAod2l0aCBlbmNvZGVkIG1hcHBpbmdzKSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhIGxpYnJhcnkgdGhhdCBleHBlY3RzXG4gKiBhIHNvdXJjZW1hcCwgb3IgdG8gSlNPTi5zdHJpbmdpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VuY29kZWRNYXAobWFwOiBHZW5NYXBwaW5nKTogRW5jb2RlZFNvdXJjZU1hcCB7XG4gIGNvbnN0IGRlY29kZWQgPSB0b0RlY29kZWRNYXAobWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5kZWNvZGVkLFxuICAgIG1hcHBpbmdzOiBlbmNvZGUoZGVjb2RlZC5tYXBwaW5ncyBhcyBTb3VyY2VNYXBTZWdtZW50W11bXSksXG4gIH07XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBHZW5NYXBwaW5nLCB1c2luZyB0aGUgYWxyZWFkeSBwcmVzZW50IG1hcHBpbmdzIG9mIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXAoaW5wdXQ6IFNvdXJjZU1hcElucHV0KTogR2VuTWFwcGluZyB7XG4gIGNvbnN0IG1hcCA9IG5ldyBUcmFjZU1hcChpbnB1dCk7XG4gIGNvbnN0IGdlbiA9IG5ldyBHZW5NYXBwaW5nKHsgZmlsZTogbWFwLmZpbGUsIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290IH0pO1xuXG4gIHB1dEFsbChjYXN0KGdlbikuX25hbWVzLCBtYXAubmFtZXMpO1xuICBwdXRBbGwoY2FzdChnZW4pLl9zb3VyY2VzLCBtYXAuc291cmNlcyBhcyBzdHJpbmdbXSk7XG4gIGNhc3QoZ2VuKS5fc291cmNlc0NvbnRlbnQgPSBtYXAuc291cmNlc0NvbnRlbnQgfHwgbWFwLnNvdXJjZXMubWFwKCgpID0+IG51bGwpO1xuICBjYXN0KGdlbikuX21hcHBpbmdzID0gZGVjb2RlZE1hcHBpbmdzKG1hcCkgYXMgR2VuTWFwcGluZ1snX21hcHBpbmdzJ107XG4gIGlmIChtYXAuaWdub3JlTGlzdCkgcHV0QWxsKGNhc3QoZ2VuKS5faWdub3JlTGlzdCwgbWFwLmlnbm9yZUxpc3QpO1xuXG4gIHJldHVybiBnZW47XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBoaWdoLWxldmVsIG1hcHBpbmcgb2JqZWN0cyBmb3IgZXZlcnkgcmVjb3JkZWQgc2VnbWVudCwgd2hpY2ggY291bGQgdGhlbiBiZVxuICogcGFzc2VkIHRvIHRoZSBgc291cmNlLW1hcGAgbGlicmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbE1hcHBpbmdzKG1hcDogR2VuTWFwcGluZyk6IE1hcHBpbmdbXSB7XG4gIGNvbnN0IG91dDogTWFwcGluZ1tdID0gW107XG4gIGNvbnN0IHsgX21hcHBpbmdzOiBtYXBwaW5ncywgX3NvdXJjZXM6IHNvdXJjZXMsIF9uYW1lczogbmFtZXMgfSA9IGNhc3QobWFwKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IG1hcHBpbmdzW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcblxuICAgICAgY29uc3QgZ2VuZXJhdGVkID0geyBsaW5lOiBpICsgMSwgY29sdW1uOiBzZWdbQ09MVU1OXSB9O1xuICAgICAgbGV0IHNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IG9yaWdpbmFsOiBQb3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2VnLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2VzLmFycmF5W3NlZ1tTT1VSQ0VTX0lOREVYXV07XG4gICAgICAgIG9yaWdpbmFsID0geyBsaW5lOiBzZWdbU09VUkNFX0xJTkVdICsgMSwgY29sdW1uOiBzZWdbU09VUkNFX0NPTFVNTl0gfTtcblxuICAgICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gNSkgbmFtZSA9IG5hbWVzLmFycmF5W3NlZ1tOQU1FU19JTkRFWF1dO1xuICAgICAgfVxuXG4gICAgICBvdXQucHVzaCh7IGdlbmVyYXRlZCwgc291cmNlLCBvcmlnaW5hbCwgbmFtZSB9IGFzIE1hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbi8vIFRoaXMgc3BsaXQgZGVjbGFyYXRpb24gaXMgb25seSBzbyB0aGF0IHRlcnNlciBjYW4gZWxtaW5pYXRlIHRoZSBzdGF0aWMgaW5pdGlhbGl6YXRpb24gYmxvY2suXG5mdW5jdGlvbiBhZGRTZWdtZW50SW50ZXJuYWw8UyBleHRlbmRzIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KFxuICBza2lwYWJsZTogYm9vbGVhbixcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U6IFMsXG4gIHNvdXJjZUxpbmU6IFMgZXh0ZW5kcyBzdHJpbmcgPyBudW1iZXIgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBzb3VyY2VDb2x1bW46IFMgZXh0ZW5kcyBzdHJpbmcgPyBudW1iZXIgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBuYW1lOiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQsXG4gIGNvbnRlbnQ6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZCxcbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgX21hcHBpbmdzOiBtYXBwaW5ncyxcbiAgICBfc291cmNlczogc291cmNlcyxcbiAgICBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LFxuICAgIF9uYW1lczogbmFtZXMsXG4gIH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGxpbmUgPSBnZXRMaW5lKG1hcHBpbmdzLCBnZW5MaW5lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRDb2x1bW5JbmRleChsaW5lLCBnZW5Db2x1bW4pO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgaWYgKHNraXBhYmxlICYmIHNraXBTb3VyY2VsZXNzKGxpbmUsIGluZGV4KSkgcmV0dXJuO1xuICAgIHJldHVybiBpbnNlcnQobGluZSwgaW5kZXgsIFtnZW5Db2x1bW5dKTtcbiAgfVxuXG4gIC8vIFNpZ2gsIFR5cGVTY3JpcHQgY2FuJ3QgZmlndXJlIG91dCBzb3VyY2VMaW5lIGFuZCBzb3VyY2VDb2x1bW4gYXJlbid0IG51bGxpc2ggaWYgc291cmNlXG4gIC8vIGlzbid0IG51bGxpc2guXG4gIGFzc2VydDxudW1iZXI+KHNvdXJjZUxpbmUpO1xuICBhc3NlcnQ8bnVtYmVyPihzb3VyY2VDb2x1bW4pO1xuXG4gIGNvbnN0IHNvdXJjZXNJbmRleCA9IHB1dChzb3VyY2VzLCBzb3VyY2UpO1xuICBjb25zdCBuYW1lc0luZGV4ID0gbmFtZSA/IHB1dChuYW1lcywgbmFtZSkgOiBOT19OQU1FO1xuICBpZiAoc291cmNlc0luZGV4ID09PSBzb3VyY2VzQ29udGVudC5sZW5ndGgpIHNvdXJjZXNDb250ZW50W3NvdXJjZXNJbmRleF0gPSBjb250ZW50ID8/IG51bGw7XG5cbiAgaWYgKHNraXBhYmxlICYmIHNraXBTb3VyY2UobGluZSwgaW5kZXgsIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBpbnNlcnQoXG4gICAgbGluZSxcbiAgICBpbmRleCxcbiAgICBuYW1lXG4gICAgICA/IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XVxuICAgICAgOiBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydDxUPihfdmFsOiB1bmtub3duKTogYXNzZXJ0cyBfdmFsIGlzIFQge1xuICAvLyBub29wLlxufVxuXG5mdW5jdGlvbiBnZXRMaW5lKG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSwgaW5kZXg6IG51bWJlcik6IFNvdXJjZU1hcFNlZ21lbnRbXSB7XG4gIGZvciAobGV0IGkgPSBtYXBwaW5ncy5sZW5ndGg7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgIG1hcHBpbmdzW2ldID0gW107XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzW2luZGV4XTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sdW1uSW5kZXgobGluZTogU291cmNlTWFwU2VnbWVudFtdLCBnZW5Db2x1bW46IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBpbmRleCA9IGxpbmUubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGluZGV4ID0gaS0tKSB7XG4gICAgY29uc3QgY3VycmVudCA9IGxpbmVbaV07XG4gICAgaWYgKGdlbkNvbHVtbiA+PSBjdXJyZW50W0NPTFVNTl0pIGJyZWFrO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0PFQ+KGFycmF5OiBUW10sIGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSB7XG4gIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGg7IGkgPiBpbmRleDsgaS0tKSB7XG4gICAgYXJyYXlbaV0gPSBhcnJheVtpIC0gMV07XG4gIH1cbiAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVtcHR5RmluYWxMaW5lcyhtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10pIHtcbiAgY29uc3QgeyBsZW5ndGggfSA9IG1hcHBpbmdzO1xuICBsZXQgbGVuID0gbGVuZ3RoO1xuICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBsZW4gPSBpLCBpLS0pIHtcbiAgICBpZiAobWFwcGluZ3NbaV0ubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cbiAgaWYgKGxlbiA8IGxlbmd0aCkgbWFwcGluZ3MubGVuZ3RoID0gbGVuO1xufVxuXG5mdW5jdGlvbiBwdXRBbGw8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4oc2V0YXJyOiBTZXRBcnJheTxUPiwgYXJyYXk6IFRbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBwdXQoc2V0YXJyLCBhcnJheVtpXSk7XG59XG5cbmZ1bmN0aW9uIHNraXBTb3VyY2VsZXNzKGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAvLyBUaGUgc3RhcnQgb2YgYSBsaW5lIGlzIGFscmVhZHkgc291cmNlbGVzcywgc28gYWRkaW5nIGEgc291cmNlbGVzcyBzZWdtZW50IHRvIHRoZSBiZWdpbm5pbmdcbiAgLy8gZG9lc24ndCBnZW5lcmF0ZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uLlxuICBpZiAoaW5kZXggPT09IDApIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG4gIC8vIElmIHRoZSBwcmV2aW91cyBzZWdtZW50IGlzIGFsc28gc291cmNlbGVzcywgdGhlbiBhZGRpbmcgYW5vdGhlciBzb3VyY2VsZXNzIHNlZ21lbnQgZG9lc24ndFxuICAvLyBnZW5yYXRlIGFueSBuZXcgaW5mb3JtYXRpb24uIEVsc2UsIHRoaXMgc2VnbWVudCB3aWxsIGVuZCB0aGUgc291cmNlL25hbWVkIHNlZ21lbnQgYW5kIHBvaW50IHRvXG4gIC8vIGEgc291cmNlbGVzcyBwb3NpdGlvbiwgd2hpY2ggaXMgdXNlZnVsLlxuICByZXR1cm4gcHJldi5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIHNraXBTb3VyY2UoXG4gIGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSxcbiAgaW5kZXg6IG51bWJlcixcbiAgc291cmNlc0luZGV4OiBudW1iZXIsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWVzSW5kZXg6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICAvLyBBIHNvdXJjZS9uYW1lZCBzZWdtZW50IGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgZ2l2ZXMgcG9zaXRpb24gYXQgdGhhdCBnZW5Db2x1bW5cbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgcHJldiA9IGxpbmVbaW5kZXggLSAxXTtcblxuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBpcyBzb3VyY2VsZXNzLCB0aGVuIHdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gYSBzb3VyY2UuXG4gIGlmIChwcmV2Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZSBwcmV2aW91cyBzZWdtZW50IG1hcHMgdG8gdGhlIGV4YWN0IHNhbWUgc291cmNlIHBvc2l0aW9uLCB0aGVuIHRoaXMgc2VnbWVudCBkb2Vzbid0XG4gIC8vIHByb3ZpZGUgYW55IG5ldyBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgcmV0dXJuIChcbiAgICBzb3VyY2VzSW5kZXggPT09IHByZXZbU09VUkNFU19JTkRFWF0gJiZcbiAgICBzb3VyY2VMaW5lID09PSBwcmV2W1NPVVJDRV9MSU5FXSAmJlxuICAgIHNvdXJjZUNvbHVtbiA9PT0gcHJldltTT1VSQ0VfQ09MVU1OXSAmJlxuICAgIG5hbWVzSW5kZXggPT09IChwcmV2Lmxlbmd0aCA9PT0gNSA/IHByZXZbTkFNRVNfSU5ERVhdIDogTk9fTkFNRSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRkTWFwcGluZ0ludGVybmFsPFMgZXh0ZW5kcyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgc2tpcGFibGU6IGJvb2xlYW4sXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZTogUztcbiAgICBvcmlnaW5hbDogUyBleHRlbmRzIHN0cmluZyA/IFBvcyA6IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogUyBleHRlbmRzIHN0cmluZyA/IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgOiBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvbnRlbnQ6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSxcbikge1xuICBjb25zdCB7IGdlbmVyYXRlZCwgc291cmNlLCBvcmlnaW5hbCwgbmFtZSwgY29udGVudCB9ID0gbWFwcGluZztcbiAgaWYgKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgICAgc2tpcGFibGUsXG4gICAgICBtYXAsXG4gICAgICBnZW5lcmF0ZWQubGluZSAtIDEsXG4gICAgICBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgfVxuICBhc3NlcnQ8UG9zPihvcmlnaW5hbCk7XG4gIHJldHVybiBhZGRTZWdtZW50SW50ZXJuYWwoXG4gICAgc2tpcGFibGUsXG4gICAgbWFwLFxuICAgIGdlbmVyYXRlZC5saW5lIC0gMSxcbiAgICBnZW5lcmF0ZWQuY29sdW1uLFxuICAgIHNvdXJjZSBhcyBzdHJpbmcsXG4gICAgb3JpZ2luYWwubGluZSAtIDEsXG4gICAgb3JpZ2luYWwuY29sdW1uLFxuICAgIG5hbWUsXG4gICAgY29udGVudCxcbiAgKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfZ2VubWFwcGluZyA9IHJlcXVpcmUoJ0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nJyk7XG5cblxuXG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzJyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc291cmNlIG1hcCBpbmRpY2F0aW5nIHRoYXQgZWFjaCBsaW5lIG1hcHMgZGlyZWN0bHkgdG8gdGhlIG9yaWdpbmFsIGxpbmUsXG4gKiB3aXRoIHRoZSB0b2tlbnMgaW4gdGhlaXIgbmV3IHBvc2l0aW9ucy5cbiAqL1xuIGZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VNYXAoXG4gIHtjb2RlOiBnZW5lcmF0ZWRDb2RlLCBtYXBwaW5nczogcmF3TWFwcGluZ3N9LFxuICBmaWxlUGF0aCxcbiAgb3B0aW9ucyxcbiAgc291cmNlLFxuICB0b2tlbnMsXG4pIHtcbiAgY29uc3Qgc291cmNlQ29sdW1ucyA9IGNvbXB1dGVTb3VyY2VDb2x1bW5zKHNvdXJjZSwgdG9rZW5zKTtcbiAgY29uc3QgbWFwID0gbmV3ICgwLCBfZ2VubWFwcGluZy5HZW5NYXBwaW5nKSh7ZmlsZTogb3B0aW9ucy5jb21waWxlZEZpbGVuYW1lfSk7XG4gIGxldCB0b2tlbkluZGV4ID0gMDtcbiAgLy8gY3VycmVudE1hcHBpbmcgaXMgdGhlIG91dHB1dCBzb3VyY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGlucHV0IHRva2VuIGJlaW5nXG4gIC8vIGNvbnNpZGVyZWQuXG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzWzBdO1xuICB3aGlsZSAoY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiB0b2tlbkluZGV4IDwgcmF3TWFwcGluZ3MubGVuZ3RoIC0gMSkge1xuICAgIHRva2VuSW5kZXgrKztcbiAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICB9XG4gIGxldCBsaW5lID0gMDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgX2dlbm1hcHBpbmcubWF5YmVBZGRTZWdtZW50LmNhbGwodm9pZCAwLCBtYXAsIGxpbmUsIDAsIGZpbGVQYXRoLCBsaW5lLCAwKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGdlbmVyYXRlZENvZGUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gY3VycmVudE1hcHBpbmcpIHtcbiAgICAgIGNvbnN0IGdlbkNvbHVtbiA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XTtcbiAgICAgIF9nZW5tYXBwaW5nLm1heWJlQWRkU2VnbWVudC5jYWxsKHZvaWQgMCwgbWFwLCBsaW5lLCBnZW5Db2x1bW4sIGZpbGVQYXRoLCBsaW5lLCBzb3VyY2VDb2x1bW4pO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAoY3VycmVudE1hcHBpbmcgPT09IGkgfHwgY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgdG9rZW5JbmRleCA8IHJhd01hcHBpbmdzLmxlbmd0aCAtIDFcbiAgICAgICkge1xuICAgICAgICB0b2tlbkluZGV4Kys7XG4gICAgICAgIGN1cnJlbnRNYXBwaW5nID0gcmF3TWFwcGluZ3NbdG9rZW5JbmRleF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChnZW5lcmF0ZWRDb2RlLmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lKys7XG4gICAgICBsaW5lU3RhcnQgPSBpICsgMTtcbiAgICAgIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgICAgIF9nZW5tYXBwaW5nLm1heWJlQWRkU2VnbWVudC5jYWxsKHZvaWQgMCwgbWFwLCBsaW5lLCAwLCBmaWxlUGF0aCwgbGluZSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHtzb3VyY2VSb290LCBzb3VyY2VzQ29udGVudCwgLi4uc291cmNlTWFwfSA9IF9nZW5tYXBwaW5nLnRvRW5jb2RlZE1hcC5jYWxsKHZvaWQgMCwgbWFwKTtcbiAgcmV0dXJuIHNvdXJjZU1hcCA7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGNvbXB1dGVTb3VyY2VNYXA7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG1hcHBpbmcgZWFjaCB0b2tlbiBpbmRleCB0byB0aGUgMC1iYXNlZCBjb2x1bW4gb2YgdGhlIHN0YXJ0XG4gKiBwb3NpdGlvbiBvZiB0aGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VDb2x1bW5zKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuICBsZXQgdG9rZW5JbmRleCA9IDA7XG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHRva2Vuc1t0b2tlbkluZGV4XS5zdGFydDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XSA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgY3VycmVudE1hcHBpbmcgPSB0b2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgfVxuICAgIGlmIChjb2RlLmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvdXJjZUNvbHVtbnM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxuY29uc3QgSEVMUEVSUyA9IHtcbiAgcmVxdWlyZTogYFxuICAgIGltcG9ydCB7Y3JlYXRlUmVxdWlyZSBhcyBDUkVBVEVfUkVRVUlSRV9OQU1FfSBmcm9tIFwibW9kdWxlXCI7XG4gICAgY29uc3QgcmVxdWlyZSA9IENSRUFURV9SRVFVSVJFX05BTUUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgYCxcbiAgaW50ZXJvcFJlcXVpcmVXaWxkY2FyZDogYFxuICAgIGZ1bmN0aW9uIGludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7XG4gICAgICBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3T2JqID0ge307XG4gICAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgaW50ZXJvcFJlcXVpcmVEZWZhdWx0OiBgXG4gICAgZnVuY3Rpb24gaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gICAgfVxuICBgLFxuICBjcmVhdGVOYW1lZEV4cG9ydEZyb206IGBcbiAgICBmdW5jdGlvbiBjcmVhdGVOYW1lZEV4cG9ydEZyb20ob2JqLCBsb2NhbE5hbWUsIGltcG9ydGVkTmFtZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGxvY2FsTmFtZSwge2VudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZ2V0OiAoKSA9PiBvYmpbaW1wb3J0ZWROYW1lXX0pO1xuICAgIH1cbiAgYCxcbiAgLy8gTm90ZSB0aGF0IFR5cGVTY3JpcHQgYW5kIEJhYmVsIGRvIHRoaXMgZGlmZmVyZW50bHk7IFR5cGVTY3JpcHQgZG9lcyBhIHNpbXBsZSBleGlzdGVuY2VcbiAgLy8gY2hlY2sgaW4gdGhlIGV4cG9ydHMgb2JqZWN0IGFuZCBkb2VzIGEgcGxhaW4gYXNzaWdubWVudCwgd2hlcmVhcyBCYWJlbCB1c2VzXG4gIC8vIGRlZmluZVByb3BlcnR5IGFuZCBidWlsZHMgYW4gb2JqZWN0IG9mIGV4cGxpY2l0bHktZXhwb3J0ZWQgbmFtZXMgc28gdGhhdCBzdGFyIGV4cG9ydHMgY2FuXG4gIC8vIGFsd2F5cyB0YWtlIGxvd2VyIHByZWNlZGVuY2UuIEZvciBub3csIHdlIGRvIHRoZSBlYXNpZXIgVHlwZVNjcmlwdCB0aGluZy5cbiAgY3JlYXRlU3RhckV4cG9ydDogYFxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0YXJFeHBvcnQob2JqKSB7XG4gICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwiKVxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGV4cG9ydHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7ZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBnZXQ6ICgpID0+IG9ialtrZXldfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgYCxcbiAgbnVsbGlzaENvYWxlc2NlOiBgXG4gICAgZnVuY3Rpb24gbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHtcbiAgICAgIGlmIChsaHMgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJoc0ZuKCk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBhc3luY051bGxpc2hDb2FsZXNjZTogYFxuICAgIGFzeW5jIGZ1bmN0aW9uIGFzeW5jTnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHtcbiAgICAgIGlmIChsaHMgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJoc0ZuKCk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBvcHRpb25hbENoYWluOiBgXG4gICAgZnVuY3Rpb24gb3B0aW9uYWxDaGFpbihvcHMpIHtcbiAgICAgIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IHZhbHVlID0gb3BzWzBdO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldO1xuICAgICAgICBjb25zdCBmbiA9IG9wc1tpICsgMV07XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICBgLFxuICBhc3luY09wdGlvbmFsQ2hhaW46IGBcbiAgICBhc3luYyBmdW5jdGlvbiBhc3luY09wdGlvbmFsQ2hhaW4ob3BzKSB7XG4gICAgICBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCB2YWx1ZSA9IG9wc1swXTtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIHdoaWxlIChpIDwgb3BzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBvcCA9IG9wc1tpXTtcbiAgICAgICAgY29uc3QgZm4gPSBvcHNbaSArIDFdO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7XG4gICAgICAgICAgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlO1xuICAgICAgICAgIHZhbHVlID0gYXdhaXQgZm4odmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7XG4gICAgICAgICAgdmFsdWUgPSBhd2FpdCBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7XG4gICAgICAgICAgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgYCxcbiAgb3B0aW9uYWxDaGFpbkRlbGV0ZTogYFxuICAgIGZ1bmN0aW9uIG9wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPUFRJT05BTF9DSEFJTl9OQU1FKG9wcyk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuICAgIH1cbiAgYCxcbiAgYXN5bmNPcHRpb25hbENoYWluRGVsZXRlOiBgXG4gICAgYXN5bmMgZnVuY3Rpb24gYXN5bmNPcHRpb25hbENoYWluRGVsZXRlKG9wcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgQVNZTkNfT1BUSU9OQUxfQ0hBSU5fTkFNRShvcHMpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdHJ1ZSA6IHJlc3VsdDtcbiAgICB9XG4gIGAsXG59O1xuXG4gY2xhc3MgSGVscGVyTWFuYWdlciB7XG4gIF9faW5pdCgpIHt0aGlzLmhlbHBlck5hbWVzID0ge319XG4gIF9faW5pdDIoKSB7dGhpcy5jcmVhdGVSZXF1aXJlTmFtZSA9IG51bGx9XG4gIGNvbnN0cnVjdG9yKCBuYW1lTWFuYWdlcikgezt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7SGVscGVyTWFuYWdlci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7SGVscGVyTWFuYWdlci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO31cblxuICBnZXRIZWxwZXJOYW1lKGJhc2VOYW1lKSB7XG4gICAgbGV0IGhlbHBlck5hbWUgPSB0aGlzLmhlbHBlck5hbWVzW2Jhc2VOYW1lXTtcbiAgICBpZiAoaGVscGVyTmFtZSkge1xuICAgICAgcmV0dXJuIGhlbHBlck5hbWU7XG4gICAgfVxuICAgIGhlbHBlck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoYF8ke2Jhc2VOYW1lfWApO1xuICAgIHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdID0gaGVscGVyTmFtZTtcbiAgICByZXR1cm4gaGVscGVyTmFtZTtcbiAgfVxuXG4gIGVtaXRIZWxwZXJzKCkge1xuICAgIGxldCByZXN1bHRDb2RlID0gXCJcIjtcbiAgICBpZiAodGhpcy5oZWxwZXJOYW1lcy5vcHRpb25hbENoYWluRGVsZXRlKSB7XG4gICAgICB0aGlzLmdldEhlbHBlck5hbWUoXCJvcHRpb25hbENoYWluXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oZWxwZXJOYW1lcy5hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUpIHtcbiAgICAgIHRoaXMuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpblwiKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbYmFzZU5hbWUsIGhlbHBlckNvZGVUZW1wbGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMoSEVMUEVSUykpIHtcbiAgICAgIGNvbnN0IGhlbHBlck5hbWUgPSB0aGlzLmhlbHBlck5hbWVzW2Jhc2VOYW1lXTtcbiAgICAgIGxldCBoZWxwZXJDb2RlID0gaGVscGVyQ29kZVRlbXBsYXRlO1xuICAgICAgaWYgKGJhc2VOYW1lID09PSBcIm9wdGlvbmFsQ2hhaW5EZWxldGVcIikge1xuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKFwiT1BUSU9OQUxfQ0hBSU5fTkFNRVwiLCB0aGlzLmhlbHBlck5hbWVzLm9wdGlvbmFsQ2hhaW4pO1xuICAgICAgfSBlbHNlIGlmIChiYXNlTmFtZSA9PT0gXCJhc3luY09wdGlvbmFsQ2hhaW5EZWxldGVcIikge1xuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKFxuICAgICAgICAgIFwiQVNZTkNfT1BUSU9OQUxfQ0hBSU5fTkFNRVwiLFxuICAgICAgICAgIHRoaXMuaGVscGVyTmFtZXMuYXN5bmNPcHRpb25hbENoYWluLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChiYXNlTmFtZSA9PT0gXCJyZXF1aXJlXCIpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2NyZWF0ZVJlcXVpcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyQ29kZSA9IGhlbHBlckNvZGUucmVwbGFjZSgvQ1JFQVRFX1JFUVVJUkVfTkFNRS9nLCB0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWxwZXJOYW1lKSB7XG4gICAgICAgIHJlc3VsdENvZGUgKz0gXCIgXCI7XG4gICAgICAgIHJlc3VsdENvZGUgKz0gaGVscGVyQ29kZS5yZXBsYWNlKGJhc2VOYW1lLCBoZWxwZXJOYW1lKS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRDb2RlO1xuICB9XG59IGV4cG9ydHMuSGVscGVyTWFuYWdlciA9IEhlbHBlck1hbmFnZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi9wYXJzZXIvdG9rZW5pemVyJyk7XG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG4vKipcbiAqIFRyYXZlcnNlIHRoZSBnaXZlbiB0b2tlbnMgYW5kIG1vZGlmeSB0aGVtIGlmIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB0aGF0IHNvbWUgbmFtZXMgc2hhZG93IGdsb2JhbFxuICogdmFyaWFibGVzLlxuICovXG4gZnVuY3Rpb24gaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBpZiAoIWhhc1NoYWRvd2VkR2xvYmFscyh0b2tlbnMsIGdsb2JhbE5hbWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBtYXJrU2hhZG93ZWRHbG9iYWxzKHRva2Vucywgc2NvcGVzLCBnbG9iYWxOYW1lcyk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzO1xuXG4vKipcbiAqIFdlIGNhbiBkbyBhIGZhc3QgdXAtZnJvbnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVjbGFyYXRpb25zIHRvIGdsb2JhbCBuYW1lcy4gSWYgbm90LFxuICogdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGNvbXB1dGluZyBzY29wZSBhc3NpZ25tZW50cy5cbiAqL1xuLy8gRXhwb3J0ZWQgZm9yIHRlc3RpbmcuXG4gZnVuY3Rpb24gaGFzU2hhZG93ZWRHbG9iYWxzKHRva2VucywgZ2xvYmFsTmFtZXMpIHtcbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMudG9rZW5zKSB7XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICBfdG9rZW5pemVyLmlzTm9uVG9wTGV2ZWxEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pICYmXG4gICAgICBnbG9iYWxOYW1lcy5oYXModG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5oYXNTaGFkb3dlZEdsb2JhbHMgPSBoYXNTaGFkb3dlZEdsb2JhbHM7XG5cbmZ1bmN0aW9uIG1hcmtTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBjb25zdCBzY29wZVN0YWNrID0gW107XG4gIGxldCBzY29wZUluZGV4ID0gc2NvcGVzLmxlbmd0aCAtIDE7XG4gIC8vIFNjb3BlcyB3ZXJlIGdlbmVyYXRlZCBhdCBjb21wbGV0aW9uIHRpbWUsIHNvIHRoZXkncmUgc29ydGVkIGJ5IGVuZCBpbmRleCwgc28gd2UgY2FuIG1haW50YWluIGFcbiAgLy8gZ29vZCBzdGFjayBieSBnb2luZyBiYWNrd2FyZHMgdGhyb3VnaCB0aGVtLlxuICBmb3IgKGxldCBpID0gdG9rZW5zLnRva2Vucy5sZW5ndGggLSAxOyA7IGktLSkge1xuICAgIHdoaWxlIChzY29wZVN0YWNrLmxlbmd0aCA+IDAgJiYgc2NvcGVTdGFja1tzY29wZVN0YWNrLmxlbmd0aCAtIDFdLnN0YXJ0VG9rZW5JbmRleCA9PT0gaSArIDEpIHtcbiAgICAgIHNjb3BlU3RhY2sucG9wKCk7XG4gICAgfVxuICAgIHdoaWxlIChzY29wZUluZGV4ID49IDAgJiYgc2NvcGVzW3Njb3BlSW5kZXhdLmVuZFRva2VuSW5kZXggPT09IGkgKyAxKSB7XG4gICAgICBzY29wZVN0YWNrLnB1c2goc2NvcGVzW3Njb3BlSW5kZXhdKTtcbiAgICAgIHNjb3BlSW5kZXgtLTtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBzY29wZXMgYWZ0ZXIgdGhlIGxhc3QgaXRlcmF0aW9uIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UgcG9wIGFsbCBvZiB0aGVtLlxuICAgIGlmIChpIDwgMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2ldO1xuICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgaWYgKHNjb3BlU3RhY2subGVuZ3RoID4gMSAmJiAhdG9rZW4uaXNUeXBlICYmIHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBnbG9iYWxOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIGlmIChfdG9rZW5pemVyLmlzQmxvY2tTY29wZWREZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICAgIG1hcmtTaGFkb3dlZEZvclNjb3BlKHNjb3BlU3RhY2tbc2NvcGVTdGFjay5sZW5ndGggLSAxXSwgdG9rZW5zLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoX3Rva2VuaXplci5pc0Z1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsIHRva2VuKSkge1xuICAgICAgICBsZXQgc3RhY2tJbmRleCA9IHNjb3BlU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKHN0YWNrSW5kZXggPiAwICYmICFzY29wZVN0YWNrW3N0YWNrSW5kZXhdLmlzRnVuY3Rpb25TY29wZSkge1xuICAgICAgICAgIHN0YWNrSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhY2tJbmRleCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgcGFyZW50IGZ1bmN0aW9uIHNjb3BlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZVN0YWNrW3N0YWNrSW5kZXhdLCB0b2tlbnMsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZW1wdHkgc2NvcGUgc3RhY2sgYWZ0ZXIgcHJvY2Vzc2luZyBmaWxlLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZSwgdG9rZW5zLCBuYW1lKSB7XG4gIGZvciAobGV0IGkgPSBzY29wZS5zdGFydFRva2VuSW5kZXg7IGkgPCBzY29wZS5lbmRUb2tlbkluZGV4OyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSB8fCB0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikgPT09IG5hbWVcbiAgICApIHtcbiAgICAgIHRva2VuLnNoYWRvd3NHbG9iYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG4vKipcbiAqIEdldCBhbGwgaWRlbnRpZmllciBuYW1lcyBpbiB0aGUgY29kZSwgaW4gb3JkZXIsIGluY2x1ZGluZyBkdXBsaWNhdGVzLlxuICovXG4gZnVuY3Rpb24gZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2goY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn0gZXhwb3J0cy5kZWZhdWx0ID0gZ2V0SWRlbnRpZmllck5hbWVzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG52YXIgX2dldElkZW50aWZpZXJOYW1lcyA9IHJlcXVpcmUoJy4vdXRpbC9nZXRJZGVudGlmaWVyTmFtZXMnKTsgdmFyIF9nZXRJZGVudGlmaWVyTmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SWRlbnRpZmllck5hbWVzKTtcblxuIGNsYXNzIE5hbWVNYW5hZ2VyIHtcbiAgICBfX2luaXQoKSB7dGhpcy51c2VkTmFtZXMgPSBuZXcgU2V0KCl9XG5cbiAgY29uc3RydWN0b3IoY29kZSwgdG9rZW5zKSB7O05hbWVNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IG5ldyBTZXQoX2dldElkZW50aWZpZXJOYW1lczIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgY29kZSwgdG9rZW5zKSk7XG4gIH1cblxuICBjbGFpbUZyZWVOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBuZXdOYW1lID0gdGhpcy5maW5kRnJlZU5hbWUobmFtZSk7XG4gICAgdGhpcy51c2VkTmFtZXMuYWRkKG5ld05hbWUpO1xuICAgIHJldHVybiBuZXdOYW1lO1xuICB9XG5cbiAgZmluZEZyZWVOYW1lKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMudXNlZE5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGxldCBzdWZmaXhOdW0gPSAyO1xuICAgIHdoaWxlICh0aGlzLnVzZWROYW1lcy5oYXMobmFtZSArIFN0cmluZyhzdWZmaXhOdW0pKSkge1xuICAgICAgc3VmZml4TnVtKys7XG4gICAgfVxuICAgIHJldHVybiBuYW1lICsgU3RyaW5nKHN1ZmZpeE51bSk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gTmFtZU1hbmFnZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGV0YWlsQ29udGV4dCA9IGV4cG9ydHMuTm9vcENvbnRleHQgPSBleHBvcnRzLlZFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhyb3duIGJ5IHZhbGlkYXRpb24uIEJlc2lkZXMgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSwgaXQgaW5jbHVkZXMgdGhlIHBhdGggdG8gdGhlXG4gKiBwcm9wZXJ0eSB3aGljaCB0cmlnZ2VyZWQgdGhlIGZhaWx1cmUuXG4gKi9cbnZhciBWRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWRXJyb3IocGF0aCwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrIGZvciBpbmZvIGFib3V0IHRoaXMgd29ya2Fyb3VuZC5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBWRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVkVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5WRXJyb3IgPSBWRXJyb3I7XG4vKipcbiAqIEZhc3QgaW1wbGVtZW50YXRpb24gb2YgSUNvbnRleHQgdXNlZCBmb3IgZmlyc3QtcGFzcyB2YWxpZGF0aW9uLiBJZiB0aGF0IGZhaWxzLCB3ZSBjYW4gdmFsaWRhdGVcbiAqIHVzaW5nIERldGFpbENvbnRleHQgdG8gY29sbGVjdCBlcnJvciBtZXNzYWdlcy4gVGhhdCdzIGZhc3RlciBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZW4gbWVzc2FnZXNcbiAqIG5vcm1hbGx5IHBhc3MgdmFsaWRhdGlvbi5cbiAqL1xudmFyIE5vb3BDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0KCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUuZmFpbCA9IGZ1bmN0aW9uIChyZWxQYXRoLCBtZXNzYWdlLCBzY29yZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgTm9vcENvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIE5vb3BDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodXIpIHsgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5Ob29wQ29udGV4dCA9IE5vb3BDb250ZXh0O1xuLyoqXG4gKiBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJQ29udGV4dCB0aGF0IGNvbGxlY3RzIG1lYW5pbmdmdWxsIGVycm9ycy5cbiAqL1xudmFyIERldGFpbENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGV0YWlsQ29udGV4dCgpIHtcbiAgICAgICAgLy8gU3RhY2sgb2YgcHJvcGVydHkgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgZm9yIHJlcG9ydGluZyBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICB0aGlzLl9wcm9wTmFtZXMgPSBbXCJcIl07XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW251bGxdO1xuICAgICAgICAvLyBTY29yZSBpcyB1c2VkIHRvIGNob29zZSB0aGUgYmVzdCB1bmlvbiBtZW1iZXIgd2hvc2UgRGV0YWlsQ29udGV4dCB0byB1c2UgZm9yIHJlcG9ydGluZy5cbiAgICAgICAgLy8gSGlnaGVyIHNjb3JlIG1lYW5zIGJldHRlciBtYXRjaCAob3IgcmF0aGVyIGxlc3Mgc2V2ZXJlIG1pc21hdGNoKS5cbiAgICAgICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIH1cbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5mYWlsID0gZnVuY3Rpb24gKHJlbFBhdGgsIG1lc3NhZ2UsIHNjb3JlKSB7XG4gICAgICAgIHRoaXMuX3Byb3BOYW1lcy5wdXNoKHJlbFBhdGgpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zY29yZSArPSBzY29yZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxVbmlvblJlc29sdmVyKCk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodW5pb25SZXNvbHZlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgdSA9IHVuaW9uUmVzb2x2ZXI7XG4gICAgICAgIHZhciBiZXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IHUuY29udGV4dHM7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY3R4ID0gX2NbX2ldO1xuICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGN0eC5fc2NvcmUgPj0gYmVzdC5fc2NvcmUpIHtcbiAgICAgICAgICAgICAgICBiZXN0ID0gY3R4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZXN0ICYmIGJlc3QuX3Njb3JlID4gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5fcHJvcE5hbWVzKS5wdXNoLmFwcGx5KF9hLCBiZXN0Ll9wcm9wTmFtZXMpO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5fbWVzc2FnZXMpLnB1c2guYXBwbHkoX2IsIGJlc3QuX21lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICB2YXIgbXNnUGFydHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3Byb3BOYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9wTmFtZXNbaV07XG4gICAgICAgICAgICBwYXRoICs9ICh0eXBlb2YgcCA9PT0gXCJudW1iZXJcIikgPyBcIltcIiArIHAgKyBcIl1cIiA6IChwID8gXCIuXCIgKyBwIDogXCJcIik7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMuX21lc3NhZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICBtc2dQYXJ0cy5wdXNoKHBhdGggKyBcIiBcIiArIG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVkVycm9yKHBhdGgsIG1zZ1BhcnRzLmpvaW4oXCI7IFwiKSk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5nZXRFcnJvckRldGFpbCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHZhciBkZXRhaWxzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9wcm9wTmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcHJvcE5hbWVzW2ldO1xuICAgICAgICAgICAgcGF0aCArPSAodHlwZW9mIHAgPT09IFwibnVtYmVyXCIpID8gXCJbXCIgKyBwICsgXCJdXCIgOiAocCA/IFwiLlwiICsgcCA6IFwiXCIpO1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKHsgcGF0aDogcGF0aCwgbWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGRldGFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzW2ldLm5lc3RlZCA9IFtkZXRhaWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGV0YWlsID0gZGV0YWlsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5EZXRhaWxDb250ZXh0ID0gRGV0YWlsQ29udGV4dDtcbnZhciBEZXRhaWxVbmlvblJlc29sdmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldGFpbFVuaW9uUmVzb2x2ZXIoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB9XG4gICAgRGV0YWlsVW5pb25SZXNvbHZlci5wcm90b3R5cGUuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN0eCA9IG5ldyBEZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbFVuaW9uUmVzb2x2ZXI7XG59KCkpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIG5vZGVzIHVzZWQgdG8gZGVmaW5lIHR5cGVzIGFuZCB2YWxpZGF0aW9ucyBmb3Igb2JqZWN0cyBhbmQgaW50ZXJmYWNlcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGU6bm8tc2hhZG93ZWQtdmFyaWFibGUgcHJlZmVyLWZvci1vZlxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2ljVHlwZXMgPSBleHBvcnRzLkJhc2ljVHlwZSA9IGV4cG9ydHMuVFBhcmFtTGlzdCA9IGV4cG9ydHMuVFBhcmFtID0gZXhwb3J0cy5wYXJhbSA9IGV4cG9ydHMuVEZ1bmMgPSBleHBvcnRzLmZ1bmMgPSBleHBvcnRzLlRQcm9wID0gZXhwb3J0cy5UT3B0aW9uYWwgPSBleHBvcnRzLm9wdCA9IGV4cG9ydHMuVElmYWNlID0gZXhwb3J0cy5pZmFjZSA9IGV4cG9ydHMuVEVudW1MaXRlcmFsID0gZXhwb3J0cy5lbnVtbGl0ID0gZXhwb3J0cy5URW51bVR5cGUgPSBleHBvcnRzLmVudW10eXBlID0gZXhwb3J0cy5USW50ZXJzZWN0aW9uID0gZXhwb3J0cy5pbnRlcnNlY3Rpb24gPSBleHBvcnRzLlRVbmlvbiA9IGV4cG9ydHMudW5pb24gPSBleHBvcnRzLlRUdXBsZSA9IGV4cG9ydHMudHVwbGUgPSBleHBvcnRzLlRBcnJheSA9IGV4cG9ydHMuYXJyYXkgPSBleHBvcnRzLlRMaXRlcmFsID0gZXhwb3J0cy5saXQgPSBleHBvcnRzLlROYW1lID0gZXhwb3J0cy5uYW1lID0gZXhwb3J0cy5UVHlwZSA9IHZvaWQgMDtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqIE5vZGUgdGhhdCByZXByZXNlbnRzIGEgdHlwZS4gKi9cbnZhciBUVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUVHlwZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIFRUeXBlO1xufSgpKTtcbmV4cG9ydHMuVFR5cGUgPSBUVHlwZTtcbi8qKiBQYXJzZXMgYSB0eXBlIHNwZWMgaW50byBhIFRUeXBlIG5vZGUuICovXG5mdW5jdGlvbiBwYXJzZVNwZWModHlwZVNwZWMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHR5cGVTcGVjID09PSBcInN0cmluZ1wiID8gbmFtZSh0eXBlU3BlYykgOiB0eXBlU3BlYztcbn1cbmZ1bmN0aW9uIGdldE5hbWVkVHlwZShzdWl0ZSwgbmFtZSkge1xuICAgIHZhciB0dHlwZSA9IHN1aXRlW25hbWVdO1xuICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB0eXBlIFwiICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0dHlwZTtcbn1cbi8qKlxuICogRGVmaW5lcyBhIHR5cGUgbmFtZSwgZWl0aGVyIGJ1aWx0LWluLCBvciBkZWZpbmVkIGluIHRoaXMgc3VpdGUuIEl0IGNhbiB0eXBpY2FsbHkgYmUgaW5jbHVkZWQgaW5cbiAqIHRoZSBzcGVjcyBhcyBqdXN0IGEgcGxhaW4gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBuYW1lKHZhbHVlKSB7IHJldHVybiBuZXcgVE5hbWUodmFsdWUpOyB9XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xudmFyIFROYW1lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUTmFtZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUTmFtZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IGEgXCIgKyBuYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFROYW1lLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QsIGFsbG93ZWRQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdHR5cGUgPSBnZXROYW1lZFR5cGUoc3VpdGUsIHRoaXMubmFtZSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gdHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0LCBhbGxvd2VkUHJvcHMpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiBCYXNpY1R5cGUgfHwgdHR5cGUgaW5zdGFuY2VvZiBUTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGNvbXBsZXggdHlwZXMsIGFkZCBhbiBhZGRpdGlvbmFsIFwiaXMgbm90IGEgPFR5cGU+XCIgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHsgcmV0dXJuIGNoZWNrZXIodmFsdWUsIGN0eCkgPyB0cnVlIDogY3R4LmZhaWwobnVsbCwgX3RoaXMuX2ZhaWxNc2csIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFROYW1lO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTmFtZSA9IFROYW1lO1xuLyoqXG4gKiBEZWZpbmVzIGEgbGl0ZXJhbCB2YWx1ZSwgZS5nLiBsaXQoJ2hlbGxvJykgb3IgbGl0KDEyMykuXG4gKi9cbmZ1bmN0aW9uIGxpdCh2YWx1ZSkgeyByZXR1cm4gbmV3IFRMaXRlcmFsKHZhbHVlKTsgfVxuZXhwb3J0cy5saXQgPSBsaXQ7XG52YXIgVExpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRMaXRlcmFsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIF90aGlzLm5hbWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIF90aGlzLl9mYWlsTXNnID0gXCJpcyBub3QgXCIgKyBfdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRMaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiAodmFsdWUgPT09IF90aGlzLnZhbHVlKSA/IHRydWUgOiBjdHguZmFpbChudWxsLCBfdGhpcy5fZmFpbE1zZywgLTEpOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRMaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTGl0ZXJhbCA9IFRMaXRlcmFsO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGFycmF5IHR5cGUsIGUuZy4gYXJyYXkoJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiBhcnJheSh0eXBlU3BlYykgeyByZXR1cm4gbmV3IFRBcnJheShwYXJzZVNwZWModHlwZVNwZWMpKTsgfVxuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xudmFyIFRBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEFycmF5LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRBcnJheSh0dHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRBcnJheS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlciA9IHRoaXMudHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIFwiaXMgbm90IGFuIGFycmF5XCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2VyKHZhbHVlW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKGksIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRBcnJheTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVEFycmF5ID0gVEFycmF5O1xuLyoqXG4gKiBEZWZpbmVzIGEgdHVwbGUgdHlwZSwgZS5nLiB0dXBsZSgnc3RyaW5nJywgJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiB0dXBsZSgpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRUdXBsZSh0eXBlU3BlYy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHBhcnNlU3BlYyh0KTsgfSkpO1xufVxuZXhwb3J0cy50dXBsZSA9IHR1cGxlO1xudmFyIFRUdXBsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVFR1cGxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRUdXBsZSh0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRUdXBsZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlcnMgPSB0aGlzLnR0eXBlcy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTsgfSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwobnVsbCwgXCJpcyBub3QgYW4gYXJyYXlcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1DaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2Vyc1tpXSh2YWx1ZVtpXSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChpLCBudWxsLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFjaGVja2VyKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBpdGVtQ2hlY2tlcnMubGVuZ3RoID8gdHJ1ZSA6XG4gICAgICAgICAgICAgICAgY3R4LmZhaWwoaXRlbUNoZWNrZXJzLmxlbmd0aCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRUdXBsZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVFR1cGxlID0gVFR1cGxlO1xuLyoqXG4gKiBEZWZpbmVzIGEgdW5pb24gdHlwZSwgZS5nLiB1bmlvbignbnVtYmVyJywgJ251bGwnKS5cbiAqL1xuZnVuY3Rpb24gdW5pb24oKSB7XG4gICAgdmFyIHR5cGVTcGVjID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdHlwZVNwZWNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUVW5pb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMudW5pb24gPSB1bmlvbjtcbnZhciBUVW5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRVbmlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUVW5pb24odHR5cGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR0eXBlcyA9IHR0eXBlcztcbiAgICAgICAgdmFyIG5hbWVzID0gdHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdCBpbnN0YW5jZW9mIFROYW1lIHx8IHQgaW5zdGFuY2VvZiBUTGl0ZXJhbCA/IHQubmFtZSA6IG51bGw7IH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuOyB9KTtcbiAgICAgICAgdmFyIG90aGVyVHlwZXMgPSB0dHlwZXMubGVuZ3RoIC0gbmFtZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3RoZXJUeXBlcyA+IDApIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG90aGVyVHlwZXMgKyBcIiBtb3JlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vbmUgb2YgXCIgKyBuYW1lcy5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm9uZSBvZiBcIiArIG90aGVyVHlwZXMgKyBcIiB0eXBlc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVFVuaW9uLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1DaGVja2VycyA9IHRoaXMudHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICB2YXIgdXIgPSBjdHgudW5pb25SZXNvbHZlcigpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWUsIHVyLmNyZWF0ZUNvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5yZXNvbHZlVW5pb24odXIpO1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUVW5pb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRVbmlvbiA9IFRVbmlvbjtcbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcnNlY3Rpb24gdHlwZSwgZS5nLiBpbnRlcnNlY3Rpb24oJ251bWJlcicsICdudWxsJykuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdGlvbigpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRJbnRlcnNlY3Rpb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMuaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uO1xudmFyIFRJbnRlcnNlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRJbnRlcnNlY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdGlvbih0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRJbnRlcnNlY3Rpb24ucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgYWxsb3dlZFByb3BzID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy50dHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKTsgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgdmFyIG9rID0gaXRlbUNoZWNrZXJzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVja2VyKSB7IHJldHVybiBjaGVja2VyKHZhbHVlLCBjdHgpOyB9KTtcbiAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIG51bGwsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJbnRlcnNlY3Rpb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRJbnRlcnNlY3Rpb24gPSBUSW50ZXJzZWN0aW9uO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGVudW0gdHlwZSwgZS5nLiBlbnVtKHsnQSc6IDEsICdCJzogMn0pLlxuICovXG5mdW5jdGlvbiBlbnVtdHlwZSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtVHlwZSh2YWx1ZXMpO1xufVxuZXhwb3J0cy5lbnVtdHlwZSA9IGVudW10eXBlO1xudmFyIFRFbnVtVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEVudW1UeXBlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRFbnVtVHlwZShtZW1iZXJzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICAgICAgICBfdGhpcy52YWxpZFZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vdCBhIHZhbGlkIGVudW0gdmFsdWVcIjtcbiAgICAgICAgX3RoaXMudmFsaWRWYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG1lbWJlcnMpLm1hcChmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWVtYmVyc1tuYW1lXTsgfSkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRFbnVtVHlwZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIChfdGhpcy52YWxpZFZhbHVlcy5oYXModmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1UeXBlO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bVR5cGUgPSBURW51bVR5cGU7XG4vKipcbiAqIERlZmluZXMgYSBsaXRlcmFsIGVudW0gdmFsdWUsIHN1Y2ggYXMgRGlyZWN0aW9uLlVwLCBzcGVjaWZpZWQgYXMgZW51bWxpdChcIkRpcmVjdGlvblwiLCBcIlVwXCIpLlxuICovXG5mdW5jdGlvbiBlbnVtbGl0KG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtTGl0ZXJhbChuYW1lLCBwcm9wKTtcbn1cbmV4cG9ydHMuZW51bWxpdCA9IGVudW1saXQ7XG52YXIgVEVudW1MaXRlcmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhURW51bUxpdGVyYWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEVudW1MaXRlcmFsKGVudW1OYW1lLCBwcm9wKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVudW1OYW1lID0gZW51bU5hbWU7XG4gICAgICAgIF90aGlzLnByb3AgPSBwcm9wO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IFwiICsgZW51bU5hbWUgKyBcIi5cIiArIHByb3A7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHR0eXBlID0gZ2V0TmFtZWRUeXBlKHN1aXRlLCB0aGlzLmVudW1OYW1lKTtcbiAgICAgICAgaWYgKCEodHR5cGUgaW5zdGFuY2VvZiBURW51bVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiIHVzZWQgaW4gZW51bWxpdCBpcyBub3QgYW4gZW51bSB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWwgPSB0dHlwZS5tZW1iZXJzW3RoaXMucHJvcF07XG4gICAgICAgIGlmICghdHR5cGUubWVtYmVycy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3ApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHZhbHVlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiLlwiICsgdGhpcy5wcm9wICsgXCIgdXNlZCBpbiBlbnVtbGl0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkgeyByZXR1cm4gKHZhbHVlID09PSB2YWwpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAtMSk7IH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1MaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bUxpdGVyYWwgPSBURW51bUxpdGVyYWw7XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wcyhwcm9wcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3BzW25hbWVdKTsgfSk7XG59XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gcHJvcCBpbnN0YW5jZW9mIFRPcHRpb25hbCA/XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwcm9wLnR0eXBlLCB0cnVlKSA6XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwYXJzZVNwZWMocHJvcCksIGZhbHNlKTtcbn1cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmZhY2UuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiBpbnRlcmZhY2VzIHRoYXQgaXQgZXh0ZW5kcywgYW5kIHRoZVxuICogc2Vjb25kIGlzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGlmYWNlKGJhc2VzLCBwcm9wcykge1xuICAgIHJldHVybiBuZXcgVElmYWNlKGJhc2VzLCBtYWtlSWZhY2VQcm9wcyhwcm9wcykpO1xufVxuZXhwb3J0cy5pZmFjZSA9IGlmYWNlO1xudmFyIFRJZmFjZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVElmYWNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRJZmFjZShiYXNlcywgcHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYmFzZXMgPSBiYXNlcztcbiAgICAgICAgX3RoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgX3RoaXMucHJvcFNldCA9IG5ldyBTZXQocHJvcHMubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm5hbWU7IH0pKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUSWZhY2UucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBiYXNlQ2hlY2tlcnMgPSB0aGlzLmJhc2VzLm1hcChmdW5jdGlvbiAoYikgeyByZXR1cm4gZ2V0TmFtZWRUeXBlKHN1aXRlLCBiKS5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgdmFyIHByb3BDaGVja2VycyA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7IHJldHVybiBwcm9wLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgLy8gQ29uc2lkZXIgYSBwcm9wIHJlcXVpcmVkIGlmIGl0J3Mgbm90IG9wdGlvbmFsIEFORCBkb2VzIG5vdCBhbGxvdyBmb3IgdW5kZWZpbmVkIGFzIGEgdmFsdWUuXG4gICAgICAgIHZhciBpc1Byb3BSZXF1aXJlZCA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gIXByb3AuaXNPcHQgJiYgIXByb3BDaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBvYmplY3RcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2VDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZUNoZWNrZXJzW2ldKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBfdGhpcy5wcm9wc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdmFsdWVbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BSZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9wQ2hlY2tlcnNbaV0odiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgbnVsbCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wU2V0ID0gdGhpcy5wcm9wU2V0O1xuICAgICAgICBpZiAoYWxsb3dlZFByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BTZXQuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgeyByZXR1cm4gYWxsb3dlZFByb3BzLmFkZChwcm9wKTsgfSk7XG4gICAgICAgICAgICBwcm9wU2V0ID0gYWxsb3dlZFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHN0cmljdCBtb2RlLCBjaGVjayBhbHNvIGZvciB1bmtub3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrZXIodmFsdWUsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wU2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwocHJvcCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJZmFjZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVElmYWNlID0gVElmYWNlO1xuLyoqXG4gKiBEZWZpbmVzIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9uIGFuIGludGVyZmFjZS5cbiAqL1xuZnVuY3Rpb24gb3B0KHR5cGVTcGVjKSB7IHJldHVybiBuZXcgVE9wdGlvbmFsKHBhcnNlU3BlYyh0eXBlU3BlYykpOyB9XG5leHBvcnRzLm9wdCA9IG9wdDtcbnZhciBUT3B0aW9uYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRPcHRpb25hbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUT3B0aW9uYWwodHR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUT3B0aW9uYWwucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXIgPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXRlbUNoZWNrZXIodmFsdWUsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVE9wdGlvbmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UT3B0aW9uYWwgPSBUT3B0aW9uYWw7XG4vKipcbiAqIERlZmluZXMgYSBwcm9wZXJ0eSBpbiBhbiBpbnRlcmZhY2UuXG4gKi9cbnZhciBUUHJvcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUUHJvcChuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUHJvcDtcbn0oKSk7XG5leHBvcnRzLlRQcm9wID0gVFByb3A7XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbi4gVGhlIGZpcnN0IGFyZ3VtZW50IGRlY2xhcmVzIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlLCB0aGUgcmVzdCBkZWNsYXJlXG4gKiBpdHMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gZnVuYyhyZXN1bHRTcGVjKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHBhcmFtc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBURnVuYyhuZXcgVFBhcmFtTGlzdChwYXJhbXMpLCBwYXJzZVNwZWMocmVzdWx0U3BlYykpO1xufVxuZXhwb3J0cy5mdW5jID0gZnVuYztcbnZhciBURnVuYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEZ1bmMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEZ1bmMocGFyYW1MaXN0LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1MaXN0ID0gcGFyYW1MaXN0O1xuICAgICAgICBfdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEZ1bmMucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRydWUgOiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhIGZ1bmN0aW9uXCIsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRGdW5jO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URnVuYyA9IFRGdW5jO1xuLyoqXG4gKiBEZWZpbmVzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBwYXJhbShuYW1lLCB0eXBlU3BlYywgaXNPcHQpIHtcbiAgICByZXR1cm4gbmV3IFRQYXJhbShuYW1lLCBwYXJzZVNwZWModHlwZVNwZWMpLCBCb29sZWFuKGlzT3B0KSk7XG59XG5leHBvcnRzLnBhcmFtID0gcGFyYW07XG52YXIgVFBhcmFtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRQYXJhbShuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUGFyYW07XG59KCkpO1xuZXhwb3J0cy5UUGFyYW0gPSBUUGFyYW07XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdC5cbiAqL1xudmFyIFRQYXJhbUxpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRQYXJhbUxpc3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVFBhcmFtTGlzdChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRQYXJhbUxpc3QucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgdmFyIGlzUGFyYW1SZXF1aXJlZCA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0sIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAhcGFyYW0uaXNPcHQgJiYgIWl0ZW1DaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBhcnJheVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5wYXJhbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1SZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKHAubmFtZSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWVbaV0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChwLm5hbWUsIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tlcih2YWx1ZSwgY3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gaXRlbUNoZWNrZXJzLmxlbmd0aCA/IHRydWUgOlxuICAgICAgICAgICAgICAgIGN0eC5mYWlsKGl0ZW1DaGVja2Vycy5sZW5ndGgsIFwiaXMgZXh0cmFuZW91c1wiLCAyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUUGFyYW1MaXN0O1xufShUVHlwZSkpO1xuZXhwb3J0cy5UUGFyYW1MaXN0ID0gVFBhcmFtTGlzdDtcbi8qKlxuICogU2luZ2xlIFRUeXBlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgYmFzaWMgYnVpbHQtaW4gdHlwZXMuXG4gKi9cbnZhciBCYXNpY1R5cGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhc2ljVHlwZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCYXNpY1R5cGUodmFsaWRhdG9yLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQmFzaWNUeXBlLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiBfdGhpcy52YWxpZGF0b3IodmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLm1lc3NhZ2UsIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIEJhc2ljVHlwZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuQmFzaWNUeXBlID0gQmFzaWNUeXBlO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdWl0ZSBvZiBiYXNpYyB0eXBlcy5cbiAqL1xuZXhwb3J0cy5iYXNpY1R5cGVzID0ge1xuICAgIGFueTogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gdHJ1ZTsgfSwgXCJpcyBpbnZhbGlkXCIpLFxuICAgIG51bWJlcjogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTsgfSwgXCJpcyBub3QgYSBudW1iZXJcIiksXG4gICAgb2JqZWN0OiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdik7IH0sIFwiaXMgbm90IGFuIG9iamVjdFwiKSxcbiAgICBib29sZWFuOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKTsgfSwgXCJpcyBub3QgYSBib29sZWFuXCIpLFxuICAgIHN0cmluZzogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKTsgfSwgXCJpcyBub3QgYSBzdHJpbmdcIiksXG4gICAgc3ltYm9sOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwic3ltYm9sXCIpOyB9LCBcImlzIG5vdCBhIHN5bWJvbFwiKSxcbiAgICB2b2lkOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodiA9PSBudWxsKTsgfSwgXCJpcyBub3Qgdm9pZFwiKSxcbiAgICB1bmRlZmluZWQ6IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2ID09PSB1bmRlZmluZWQpOyB9LCBcImlzIG5vdCB1bmRlZmluZWRcIiksXG4gICAgbnVsbDogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHYgPT09IG51bGwpOyB9LCBcImlzIG5vdCBudWxsXCIpLFxuICAgIG5ldmVyOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmYWxzZTsgfSwgXCJpcyB1bmV4cGVjdGVkXCIpLFxuICAgIERhdGU6IG5ldyBCYXNpY1R5cGUoZ2V0SXNOYXRpdmVDaGVja2VyKFwiW29iamVjdCBEYXRlXVwiKSwgXCJpcyBub3QgYSBEYXRlXCIpLFxuICAgIFJlZ0V4cDogbmV3IEJhc2ljVHlwZShnZXRJc05hdGl2ZUNoZWNrZXIoXCJbb2JqZWN0IFJlZ0V4cF1cIiksIFwiaXMgbm90IGEgUmVnRXhwXCIpLFxufTtcbi8vIFRoaXMgYXBwcm9hY2ggZm9yIGNoZWNraW5nIG5hdGl2ZSBvYmplY3QgdHlwZXMgbWlycm9ycyB0aGF0IG9mIGxvZGFzaC4gSXRzIGFkdmFudGFnZSBvdmVyXG4vLyBgaXNpbnN0YW5jZWAgaXMgdGhhdCBpdCBjYW4gc3RpbGwgcmV0dXJuIHRydWUgZm9yIG5hdGl2ZSBvYmplY3RzIGNyZWF0ZWQgaW4gZGlmZmVyZW50IEpTXG4vLyBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxudmFyIG5hdGl2ZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGdldElzTmF0aXZlQ2hlY2tlcih0YWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgJiYgbmF0aXZlVG9TdHJpbmcuY2FsbCh2KSA9PT0gdGFnOyB9O1xufVxuaWYgKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXMuQnVmZmVyID0gbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHYpOyB9LCBcImlzIG5vdCBhIEJ1ZmZlclwiKTtcbn1cbnZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGFycmF5XzEpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXNbYXJyYXlfMS5uYW1lXSA9IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2IGluc3RhbmNlb2YgYXJyYXlfMSk7IH0sIFwiaXMgbm90IGEgXCIgKyBhcnJheV8xLm5hbWUpO1xufTtcbi8vIFN1cHBvcnQgdHlwZWQgYXJyYXlzIG9mIHZhcmlvdXMgZmxhdm9yc1xuZm9yICh2YXIgX2kgPSAwLCBfYSA9IFtJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXksIEFycmF5QnVmZmVyXTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgYXJyYXlfMSA9IF9hW19pXTtcbiAgICBfbG9vcF8xKGFycmF5XzEpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoZWNrZXIgPSBleHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gdm9pZCAwO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqXG4gKiBFeHBvcnQgZnVuY3Rpb25zIHVzZWQgdG8gZGVmaW5lIGludGVyZmFjZXMuXG4gKi9cbnZhciB0eXBlc18yID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUQXJyYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuVEFycmF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVEVudW1UeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRFbnVtVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRFbnVtTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URW51bUxpdGVyYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJURnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URnVuYzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRJZmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5USWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UTGl0ZXJhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlROYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlROYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVE9wdGlvbmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRPcHRpb25hbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRQYXJhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUGFyYW07IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUGFyYW1MaXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRQYXJhbUxpc3Q7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUHJvcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUHJvcDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRUdXBsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRVbmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVW5pb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUSW50ZXJzZWN0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRJbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5hcnJheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW1saXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuZW51bWxpdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW10eXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLmVudW10eXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5mdW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaWZhY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuaWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIubGl0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5uYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3B0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLm9wdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcmFtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLnBhcmFtOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHVwbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIudHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi51bmlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5pbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNpY1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuQmFzaWNUeXBlOyB9IH0pO1xudmFyIHV0aWxfMiA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfMi5WRXJyb3I7IH0gfSk7XG4vKipcbiAqIFRha2VzIG9uZSBvZiBtb3JlIHR5cGUgc3VpdGVzIChlLmcuIGEgbW9kdWxlIGdlbmVyYXRlZCBieSBgdHMtaW50ZXJmYWNlLWJ1aWxkZXJgKSwgYW5kIGNvbWJpbmVzXG4gKiB0aGVtIGludG8gYSBzdWl0ZSBvZiBpbnRlcmZhY2UgY2hlY2tlcnMuIElmIGEgdHlwZSBpcyB1c2VkIGJ5IG5hbWUsIHRoYXQgbmFtZSBzaG91bGQgYmUgcHJlc2VudFxuICogYW1vbmcgdGhlIHBhc3NlZC1pbiB0eXBlIHN1aXRlcy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IG1hcHMgdHlwZSBuYW1lcyB0byBDaGVja2VyIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrZXJzKCkge1xuICAgIHZhciB0eXBlU3VpdGUgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3VpdGVbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZ1bGxTdWl0ZSA9IE9iamVjdC5hc3NpZ24uYXBwbHkoT2JqZWN0LCBfX3NwcmVhZEFycmF5cyhbe30sIHR5cGVzXzEuYmFzaWNUeXBlc10sIHR5cGVTdWl0ZSkpO1xuICAgIHZhciBjaGVja2VycyA9IHt9O1xuICAgIGZvciAodmFyIF9hID0gMCwgdHlwZVN1aXRlXzEgPSB0eXBlU3VpdGU7IF9hIDwgdHlwZVN1aXRlXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBzdWl0ZV8xID0gdHlwZVN1aXRlXzFbX2FdO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gT2JqZWN0LmtleXMoc3VpdGVfMSk7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9jW19iXTtcbiAgICAgICAgICAgIGNoZWNrZXJzW25hbWVdID0gbmV3IENoZWNrZXIoZnVsbFN1aXRlLCBzdWl0ZV8xW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tlcnM7XG59XG5leHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gY3JlYXRlQ2hlY2tlcnM7XG4vKipcbiAqIENoZWNrZXIgaW1wbGVtZW50cyB2YWxpZGF0aW9uIG9mIG9iamVjdHMsIGFuZCBhbHNvIGluY2x1ZGVzIGFjY2Vzc29ycyB0byB2YWxpZGF0ZSBtZXRob2QgY2FsbHMuXG4gKiBDaGVja2VycyBzaG91bGQgYmUgY3JlYXRlZCB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAuXG4gKi9cbnZhciBDaGVja2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8vIENyZWF0ZSBjaGVja2VycyBieSB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAgZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gQ2hlY2tlcihzdWl0ZSwgdHR5cGUsIF9wYXRoKSB7XG4gICAgICAgIGlmIChfcGF0aCA9PT0gdm9pZCAwKSB7IF9wYXRoID0gJ3ZhbHVlJzsgfVxuICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7XG4gICAgICAgIHRoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRJZmFjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHR0eXBlLnByb3BzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gX2FbX2ldO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KHAubmFtZSwgcC50dHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VyUGxhaW4gPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGVja2VyU3RyaWN0ID0gdGhpcy50dHlwZS5nZXRDaGVja2VyKHN1aXRlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwYXRoIHRvIHJlcG9ydCBpbiBlcnJvcnMsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCJ2YWx1ZVwiLiAoRS5nLiBpZiB0aGUgQ2hlY2tlciBpcyBmb3JcbiAgICAgKiBhIFwicGVyc29uXCIgaW50ZXJmYWNlLCBzZXQgcGF0aCB0byBcInBlcnNvblwiIHRvIHJlcG9ydCBlLmcuIFwicGVyc29uLm5hbWUgaXMgbm90IGEgc3RyaW5nXCIuKVxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnNldFJlcG9ydGVkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgY2hlY2tlcidzIHR5cGUsIG9yIHRocm93IEVycm9yLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9kb0NoZWNrKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7IH07XG4gICAgLyoqXG4gICAgICogQSBmYXN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFRoaXMgcmV0dXJuc1xuICAgICAqIHRydWUgb3IgZmFsc2UsIGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGlzIGZhc3QgYm90aCBvbiBzdWNjZXNzIGFuZCBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlclBsYWluKHZhbHVlLCBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBlcnJvciBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGlmIHRoZSBnaXZlbiB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5IHRoaXNcbiAgICAgKiBDaGVja2VyJ3MgdHlwZSwgb3IgbnVsbCBpZiBpdCBkb2VzLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb1ZhbGlkYXRlKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBzYXRpc2ZpZXMgdGhpcyBjaGVja2VyJ3MgdHlwZSBzdHJpY3RseS4gVGhpcyBjaGVja3MgdGhhdCBvYmplY3RzXG4gICAgICogYW5kIHR1cGxlcyBoYXZlIG5vIGV4dHJhIG1lbWJlcnMuIE5vdGUgdGhhdCB0aGlzIHByZXZlbnRzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNvIHVzdWFsbHlcbiAgICAgKiBhIHBsYWluIGNoZWNrKCkgaXMgbW9yZSBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RDaGVjayA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fZG9DaGVjayh0aGlzLmNoZWNrZXJTdHJpY3QsIHZhbHVlKTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZhc3Qgc3RyaWN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFJldHVybnNcbiAgICAgKiB0cnVlIG9yIGZhbHNlLCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBpcyBmYXN0IGJvdGggb24gc3VjY2VzcyBhbmQgb24gZmFpbHVyZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RUZXN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZXJTdHJpY3QodmFsdWUsIG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIG9iamVjdCBkZXNjcmliaW5nIHRoZSBlcnJvcnMgaWYgdGhlIGdpdmVuIHZhbHVlIGRvZXMgbm90IHNhdGlzZnkgdGhpc1xuICAgICAqIENoZWNrZXIncyB0eXBlIHN0cmljdGx5LCBvciBudWxsIGlmIGl0IGRvZXMuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuc3RyaWN0VmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvVmFsaWRhdGUodGhpcy5jaGVja2VyU3RyaWN0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSB0eXBlIHJlcXVpcmVkIGZvciB0aGUgZ2l2ZW5cbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGlzIGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRQcm9wID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5wcm9wcy5nZXQocHJvcCk7XG4gICAgICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlR5cGUgaGFzIG5vIHByb3BlcnR5IFwiICsgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHR0eXBlLCB0aGlzLl9wYXRoICsgXCIuXCIgKyBwcm9wKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY2hlY2tlciBpcyBmb3IgYW4gaW50ZXJmYWNlLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgdGhlIGFyZ3VtZW50LWxpc3QgcmVxdWlyZWQgdG8gY2FsbFxuICAgICAqIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhpcyBpbnRlcmZhY2UuIEUuZy4gaWYgdGhpcyBDaGVja2VyIGlzIGZvciB0aGUgaW50ZXJmYWNlOlxuICAgICAqICAgIGludGVyZmFjZSBGb28ge1xuICAgICAqICAgICAgZmluZChzOiBzdHJpbmcsIHBvcz86IG51bWJlcik6IG51bWJlcjtcbiAgICAgKiAgICB9XG4gICAgICogVGhlbiBtZXRob2RBcmdzKFwiZmluZFwiKS5jaGVjayguLi4pIHdpbGwgc3VjY2VlZCBmb3IgW1wiZm9vXCJdIGFuZCBbXCJmb29cIiwgM10sIGJ1dCBub3QgZm9yIFsxN10uXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUubWV0aG9kQXJncyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnBhcmFtTGlzdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuXG4gICAgICogbWV0aG9kIG9mIHRoaXMgaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLm1ldGhvZFJlc3VsdCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnJlc3VsdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGEgZnVuY3Rpb24sIHJldHVybnMgYSBDaGVja2VyIGZvciBpdHMgYXJndW1lbnQtbGlzdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRBcmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISh0aGlzLnR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdldEFyZ3MoKSBhcHBsaWVkIHRvIG5vbi1mdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENoZWNrZXIodGhpcy5zdWl0ZSwgdGhpcy50dHlwZS5wYXJhbUxpc3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBjaGVja2VyIGlzIGZvciBhIGZ1bmN0aW9uLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghKHRoaXMudHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRGdW5jKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0UmVzdWx0KCkgYXBwbGllZCB0byBub24tZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRoaXMudHR5cGUucmVzdWx0KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgdHlwZSBmb3Igd2hpY2ggdGhpcyBpcyBhIGNoZWNrZXIuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHR5cGU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgY2hlY2soKSBhbmQgc3RyaWN0Q2hlY2soKS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5fZG9DaGVjayA9IGZ1bmN0aW9uIChjaGVja2VyRnVuYywgdmFsdWUpIHtcbiAgICAgICAgdmFyIG5vb3BDdHggPSBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCk7XG4gICAgICAgIGlmICghY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgICAgICBjaGVja2VyRnVuYyh2YWx1ZSwgZGV0YWlsQ3R4KTtcbiAgICAgICAgICAgIHRocm93IGRldGFpbEN0eC5nZXRFcnJvcih0aGlzLl9wYXRoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2RvVmFsaWRhdGUgPSBmdW5jdGlvbiAoY2hlY2tlckZ1bmMsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub29wQ3R4ID0gbmV3IHV0aWxfMS5Ob29wQ29udGV4dCgpO1xuICAgICAgICBpZiAoY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIGNoZWNrZXJGdW5jKHZhbHVlLCBkZXRhaWxDdHgpO1xuICAgICAgICByZXR1cm4gZGV0YWlsQ3R4LmdldEVycm9yRGV0YWlsKHRoaXMuX3BhdGgpO1xuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2dldE1ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0dHlwZSA9IHRoaXMucHJvcHMuZ2V0KG1ldGhvZE5hbWUpO1xuICAgICAgICBpZiAoIXR0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIGhhcyBubyBwcm9wZXJ0eSBcIiArIG1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3BlcnR5IFwiICsgbWV0aG9kTmFtZSArIFwiIGlzIG5vdCBhIG1ldGhvZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHR5cGU7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hlY2tlcjtcbn0oKSk7XG5leHBvcnRzLkNoZWNrZXIgPSBDaGVja2VyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfS8qKlxuICogVGhpcyBtb2R1bGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGB0cy1pbnRlcmZhY2UtYnVpbGRlcmBcbiAqL1xudmFyIF90c2ludGVyZmFjZWNoZWNrZXIgPSByZXF1aXJlKCd0cy1pbnRlcmZhY2UtY2hlY2tlcicpOyB2YXIgdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF90c2ludGVyZmFjZWNoZWNrZXIpO1xuLy8gdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1xuXG4gY29uc3QgVHJhbnNmb3JtID0gdC51bmlvbihcbiAgdC5saXQoXCJqc3hcIiksXG4gIHQubGl0KFwidHlwZXNjcmlwdFwiKSxcbiAgdC5saXQoXCJmbG93XCIpLFxuICB0LmxpdChcImltcG9ydHNcIiksXG4gIHQubGl0KFwicmVhY3QtaG90LWxvYWRlclwiKSxcbiAgdC5saXQoXCJqZXN0XCIpLFxuKTsgZXhwb3J0cy5UcmFuc2Zvcm0gPSBUcmFuc2Zvcm07XG5cbiBjb25zdCBTb3VyY2VNYXBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICBjb21waWxlZEZpbGVuYW1lOiBcInN0cmluZ1wiLFxufSk7IGV4cG9ydHMuU291cmNlTWFwT3B0aW9ucyA9IFNvdXJjZU1hcE9wdGlvbnM7XG5cbiBjb25zdCBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICB0cmFuc2Zvcm1zOiB0LmFycmF5KFwiVHJhbnNmb3JtXCIpLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeFJ1bnRpbWU6IHQub3B0KHQudW5pb24odC5saXQoXCJjbGFzc2ljXCIpLCB0LmxpdChcImF1dG9tYXRpY1wiKSwgdC5saXQoXCJwcmVzZXJ2ZVwiKSkpLFxuICBwcm9kdWN0aW9uOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeEltcG9ydFNvdXJjZTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeFByYWdtYTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeEZyYWdtZW50UHJhZ21hOiB0Lm9wdChcInN0cmluZ1wiKSxcbiAga2VlcFVudXNlZEltcG9ydHM6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgcHJlc2VydmVEeW5hbWljSW1wb3J0OiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGluamVjdENyZWF0ZVJlcXVpcmVGb3JJbXBvcnRSZXF1aXJlOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgc291cmNlTWFwT3B0aW9uczogdC5vcHQoXCJTb3VyY2VNYXBPcHRpb25zXCIpLFxuICBmaWxlUGF0aDogdC5vcHQoXCJzdHJpbmdcIiksXG59KTsgZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcblxuY29uc3QgZXhwb3J0ZWRUeXBlU3VpdGUgPSB7XG4gIFRyYW5zZm9ybTogZXhwb3J0cy5UcmFuc2Zvcm0sXG4gIFNvdXJjZU1hcE9wdGlvbnM6IGV4cG9ydHMuU291cmNlTWFwT3B0aW9ucyxcbiAgT3B0aW9uczogZXhwb3J0cy5PcHRpb25zLFxufTtcbmV4cG9ydHMuIGRlZmF1bHQgPSBleHBvcnRlZFR5cGVTdWl0ZTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfdHNpbnRlcmZhY2VjaGVja2VyID0gcmVxdWlyZSgndHMtaW50ZXJmYWNlLWNoZWNrZXInKTtcblxudmFyIF9PcHRpb25zZ2VudHlwZXMgPSByZXF1aXJlKCcuL09wdGlvbnMtZ2VuLXR5cGVzJyk7IHZhciBfT3B0aW9uc2dlbnR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX09wdGlvbnNnZW50eXBlcyk7XG5cbmNvbnN0IHtPcHRpb25zOiBPcHRpb25zQ2hlY2tlcn0gPSBfdHNpbnRlcmZhY2VjaGVja2VyLmNyZWF0ZUNoZWNrZXJzLmNhbGwodm9pZCAwLCBfT3B0aW9uc2dlbnR5cGVzMi5kZWZhdWx0KTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiBmdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICBPcHRpb25zQ2hlY2tlci5zdHJpY3RDaGVjayhvcHRpb25zKTtcbn0gZXhwb3J0cy52YWxpZGF0ZU9wdGlvbnMgPSB2YWxpZGF0ZU9wdGlvbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2Zsb3cgPSByZXF1aXJlKCcuLi9wbHVnaW5zL2Zsb3cnKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvdHlwZXNjcmlwdCcpO1xuXG5cblxuXG5cblxuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2luZGV4Jyk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4vZXhwcmVzc2lvbicpO1xudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBmdW5jdGlvbiBwYXJzZVNwcmVhZCgpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIGZhbHNlKTtcbn0gZXhwb3J0cy5wYXJzZVNwcmVhZCA9IHBhcnNlU3ByZWFkO1xuXG4gZnVuY3Rpb24gcGFyc2VSZXN0KGlzQmxvY2tTY29wZSkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpO1xufSBleHBvcnRzLnBhcnNlUmVzdCA9IHBhcnNlUmVzdDtcblxuIGZ1bmN0aW9uIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKTtcbn0gZXhwb3J0cy5wYXJzZUJpbmRpbmdJZGVudGlmaWVyID0gcGFyc2VCaW5kaW5nSWRlbnRpZmllcjtcblxuIGZ1bmN0aW9uIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG59IGV4cG9ydHMucGFyc2VJbXBvcnRlZElkZW50aWZpZXIgPSBwYXJzZUltcG9ydGVkSWRlbnRpZmllcjtcblxuIGZ1bmN0aW9uIG1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyKGlzQmxvY2tTY29wZSkge1xuICBsZXQgaWRlbnRpZmllclJvbGU7XG4gIGlmIChfYmFzZS5zdGF0ZS5zY29wZURlcHRoID09PSAwKSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbjtcbiAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIGlkZW50aWZpZXJSb2xlID0gX2luZGV4LklkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb247XG4gIH1cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IGlkZW50aWZpZXJSb2xlO1xufSBleHBvcnRzLm1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyID0gbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXI7XG5cbi8vIFBhcnNlcyBsdmFsdWUgKGFzc2lnbmFibGUpIGF0b20uXG4gZnVuY3Rpb24gcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpIHtcbiAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOiB7XG4gICAgICAvLyBJbiBUeXBlU2NyaXB0LCBcInRoaXNcIiBtYXkgYmUgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIsIHNvIGFsbG93IGl0LlxuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3lpZWxkOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOiB7XG4gICAgICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5uYW1lO1xuICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TDoge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUJpbmRpbmdMaXN0KF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIsIGlzQmxvY2tTY29wZSwgdHJ1ZSAvKiBhbGxvd0VtcHR5ICovKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VPYmouY2FsbCh2b2lkIDAsIHRydWUsIGlzQmxvY2tTY29wZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQmluZGluZ0F0b20gPSBwYXJzZUJpbmRpbmdBdG9tO1xuXG4gZnVuY3Rpb24gcGFyc2VCaW5kaW5nTGlzdChcbiAgY2xvc2UsXG4gIGlzQmxvY2tTY29wZSxcbiAgYWxsb3dFbXB0eSA9IGZhbHNlLFxuICBhbGxvd01vZGlmaWVycyA9IGZhbHNlLFxuICBjb250ZXh0SWQgPSAwLFxuKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgbGV0IGhhc1JlbW92ZWRDb21tYSA9IGZhbHNlO1xuICBjb25zdCBmaXJzdEl0ZW1Ub2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcblxuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgICAgIC8vIEFmdGVyIGEgXCJ0aGlzXCIgdHlwZSBpbiBUeXBlU2NyaXB0LCB3ZSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGNvbW1hIChpZiBhbnkpIHRvIGFsc28gYmVcbiAgICAgIC8vIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgIGlmICghaGFzUmVtb3ZlZENvbW1hICYmIF9iYXNlLnN0YXRlLnRva2Vuc1tmaXJzdEl0ZW1Ub2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgICBoYXNSZW1vdmVkQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dFbXB0eSAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAvLyBFbXB0eSBpdGVtOyBub3RoaW5nIGZ1cnRoZXIgdG8gcGFyc2UgZm9yIHRoaXMgaXRlbS5cbiAgICB9IGVsc2UgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBwYXJzZVJlc3QoaXNCbG9ja1Njb3BlKTtcbiAgICAgIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgICAgIC8vIFN1cHBvcnQgcmVzdCBlbGVtZW50IHRyYWlsaW5nIGNvbW1hcyBhbGxvd2VkIGJ5IFR5cGVTY3JpcHQgPDIuOS5cbiAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBjbG9zZSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW0oYWxsb3dNb2RpZmllcnMsIGlzQmxvY2tTY29wZSk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMucGFyc2VCaW5kaW5nTGlzdCA9IHBhcnNlQmluZGluZ0xpc3Q7XG5cbmZ1bmN0aW9uIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGFsbG93TW9kaWZpZXJzLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKGFsbG93TW9kaWZpZXJzKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZU1vZGlmaWVycy5jYWxsKHZvaWQgMCwgW1xuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHksXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlLFxuICAgIF0pO1xuICB9XG5cbiAgcGFyc2VNYXliZURlZmF1bHQoaXNCbG9ja1Njb3BlKTtcbiAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUsIHRydWUgLyogbGVmdEFscmVhZHlQYXJzZWQgKi8pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzKCkge1xuICBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS5cbiBmdW5jdGlvbiBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUsIGxlZnRBbHJlYWR5UGFyc2VkID0gZmFsc2UpIHtcbiAgaWYgKCFsZWZ0QWxyZWFkeVBhcnNlZCkge1xuICAgIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbiAgfVxuICBpZiAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVxSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgX2V4cHJlc3Npb24ucGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbn0gZXhwb3J0cy5wYXJzZU1heWJlRGVmYXVsdCA9IHBhcnNlTWF5YmVEZWZhdWx0O1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG52YXIgX2x2YWwgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvbHZhbCcpO1xuXG5cblxuXG5cblxuXG5cbnZhciBfc3RhdGVtZW50ID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL3N0YXRlbWVudCcpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2pzeCA9IHJlcXVpcmUoJy4vanN4Jyk7XG5cbmZ1bmN0aW9uIHRzSXNJZGVudGlmaWVyKCkge1xuICAvLyBUT0RPOiBhY3R1YWxseSBhIGJpdCBtb3JlIGNvbXBsZXggaW4gVHlwZVNjcmlwdCwgYnV0IHNob3VsZG4ndCBtYXR0ZXIuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE1MDA4XG4gIHJldHVybiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpIHtcbiAgcmV0dXJuIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHxcbiAgICBCb29sZWFuKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHx8XG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykgfHxcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubnVtKSB8fFxuICAgIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaWdpbnQpIHx8XG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRlY2ltYWwpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRzTmV4dFRva2VuQ2FuRm9sbG93TW9kaWZpZXIoKSB7XG4gIC8vIE5vdGU6IFR5cGVTY3JpcHQncyBpbXBsZW1lbnRhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZVxuICAvLyBtb3JlIHRoaW5ncyBhcmUgY29uc2lkZXJlZCBtb2RpZmllcnMgdGhlcmUuXG4gIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBoYW5kbGVzIG1vZGlmaWVycyBub3QgaGFuZGxlZCBieSBiYWJ5bG9uIGl0c2VsZi4gQW5kIFwic3RhdGljXCIuXG4gIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgbG9va2FoZWFkLiBXYW50IGEgaGFzTGluZUJyZWFrVXBOZXh0KCkgbWV0aG9kLi4uXG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcblxuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgY2FuRm9sbG93TW9kaWZpZXIgPVxuICAgIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuaGFzaCkgfHxcbiAgICAgIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpKSAmJlxuICAgICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICk7XG5cbiAgaWYgKGNhbkZvbGxvd01vZGlmaWVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1BhcnNlTW9kaWZpZXJzKGFsbG93ZWRNb2RpZmllcnMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtb2RpZmllciA9IHRzUGFyc2VNb2RpZmllcihhbGxvd2VkTW9kaWZpZXJzKTtcbiAgICBpZiAobW9kaWZpZXIgPT09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnRzUGFyc2VNb2RpZmllcnMgPSB0c1BhcnNlTW9kaWZpZXJzO1xuXG4vKiogUGFyc2VzIGEgbW9kaWZpZXIgbWF0Y2hpbmcgb25lIHRoZSBnaXZlbiBtb2RpZmllciBuYW1lcy4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlTW9kaWZpZXIoXG4gIGFsbG93ZWRNb2RpZmllcnMsXG4pIHtcbiAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVyID0gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gIGlmIChhbGxvd2VkTW9kaWZpZXJzLmluZGV4T2YobW9kaWZpZXIpICE9PSAtMSAmJiB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCkpIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHk6XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3JlYWRvbmx5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3Q7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYzpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fc3RhdGljO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWM6XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3B1YmxpYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZTpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fcHJpdmF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkOlxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlOlxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9vdmVycmlkZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZTpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fZGVjbGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVyO1xuICB9XG4gIHJldHVybiBudWxsO1xufSBleHBvcnRzLnRzUGFyc2VNb2RpZmllciA9IHRzUGFyc2VNb2RpZmllcjtcblxuZnVuY3Rpb24gdHNQYXJzZUVudGl0eU5hbWUoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpIHtcbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRoaXNUeXBlUHJlZGljYXRlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUaGlzVHlwZU5vZGUoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVF1ZXJ5KCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZik7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICB0c1BhcnNlSW1wb3J0VHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUltcG9ydFR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlUGFyYW1ldGVyKCkge1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCk7XG4gIGNvbnN0IGhhZEluID0gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW4pO1xuICBjb25zdCBoYWRPdXQgPSBfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX291dCk7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KTtcbiAgaWYgKChoYWRJbiB8fCBoYWRPdXQpICYmICFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAvLyBUaGUgXCJpblwiIG9yIFwib3V0XCIga2V5d29yZCBtdXN0IGhhdmUgYWN0dWFsbHkgYmVlbiB0aGUgdHlwZSBwYXJhbWV0ZXJcbiAgICAvLyBuYW1lLCBzbyBzZXQgaXQgYXMgdGhlIG5hbWUuXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5uYW1lO1xuICB9IGVsc2Uge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG4gZnVuY3Rpb24gdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzID0gdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzO1xuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUudHlwZVBhcmFtZXRlclN0YXJ0KSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIHRzUGFyc2VUeXBlUGFyYW1ldGVyKCk7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG4vLyBOb3RlOiBJbiBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIHdlIG11c3QgcHJvdmlkZSBgeWllbGRDb250ZXh0YCBhbmQgYGF3YWl0Q29udGV4dGAsXG4vLyBidXQgaGVyZSBpdCdzIGFsd2F5cyBmYWxzZSwgYmVjYXVzZSB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgdHlwZXMuXG5mdW5jdGlvbiB0c0ZpbGxTaWduYXR1cmUocmV0dXJuVG9rZW4pIHtcbiAgLy8gQXJyb3cgZm5zICptdXN0KiBoYXZlIHJldHVybiB0b2tlbiAoYD0+YCkuIE5vcm1hbCBmdW5jdGlvbnMgY2FuIG9taXQgaXQuXG4gIGNvbnN0IHJldHVyblRva2VuUmVxdWlyZWQgPSByZXR1cm5Ub2tlbiA9PT0gX3R5cGVzLlRva2VuVHlwZS5hcnJvdztcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAvLyBDcmVhdGUgYSBzY29wZSBldmVuIHRob3VnaCB3ZSdyZSBkb2luZyB0eXBlIHBhcnNpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5XG4gIC8vIHRyZWF0IHBhcmFtcyBhcyB0b3AtbGV2ZWwgYmluZGluZ3MuXG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgdHNQYXJzZUJpbmRpbmdMaXN0Rm9yU2lnbmF0dXJlKGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgaWYgKHJldHVyblRva2VuUmVxdWlyZWQpIHtcbiAgICB0c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24ocmV0dXJuVG9rZW4pO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgcmV0dXJuVG9rZW4pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoaXNCbG9ja1Njb3BlKSB7XG4gIF9sdmFsLnBhcnNlQmluZGluZ0xpc3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBpc0Jsb2NrU2NvcGUpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpIHtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCkge1xuICB0c0ZpbGxTaWduYXR1cmUoX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7IC8vIFNraXAgJ3snXG4gIGNvbnN0IGlzSW5kZXhTaWduYXR1cmUgPSBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNJbmRleFNpZ25hdHVyZTtcbn1cblxuZnVuY3Rpb24gdHNUcnlQYXJzZUluZGV4U2lnbmF0dXJlKCkge1xuICBpZiAoIShfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpICYmIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIHRzUGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpO1xuXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuXG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKGlzUmVhZG9ubHkpIHtcbiAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbik7XG5cbiAgaWYgKCFpc1JlYWRvbmx5ICYmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSkge1xuICAgIHRzRmlsbFNpZ25hdHVyZShfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuICB9IGVsc2Uge1xuICAgIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICAgIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVNZW1iZXIoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgLy8gY2FsbCBzaWduYXR1cmVcbiAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX25ldykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgLy8gY29uc3RydWN0b3Igc2lnbmF0dXJlXG4gICAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlYWRvbmx5ID0gISF0c1BhcnNlTW9kaWZpZXIoW19rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHldKTtcblxuICBjb25zdCBmb3VuZCA9IHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpO1xuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSkgJiZcbiAgICB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKClcbiAgKSB7XG4gICAgLy8gVGhpcyBpcyBhIGdldHRlci9zZXR0ZXIgb24gYSB0eXBlLiBUaGUgdHNOZXh0VG9rZW5DYW5Gb2xsb3dNb2RpZmllclxuICAgIC8vIGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkIG5leHQoKSBmb3IgdXMsIHNvIGNvbnRpbnVlIHBhcnNpbmcgdGhlIG5hbWUuXG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VQcm9wZXJ0eU5hbWUuY2FsbCh2b2lkIDAsIC0xIC8qIFR5cGVzIGRvbid0IG5lZWQgY29udGV4dCBJRHMuICovKTtcbiAgdHNQYXJzZVByb3BlcnR5T3JNZXRob2RTaWduYXR1cmUocmVhZG9ubHkpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUxpdGVyYWwoKSB7XG4gIHRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlT2JqZWN0VHlwZU1lbWJlcnMoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZU1lbWJlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzTG9va2FoZWFkSXNTdGFydE9mTWFwcGVkVHlwZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICBjb25zdCBpc1N0YXJ0T2ZNYXBwZWRUeXBlID0gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCk7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNTdGFydE9mTWFwcGVkVHlwZTtcbn1cblxuZnVuY3Rpb24gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGx1cykgfHwgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5taW51cykpIHtcbiAgICByZXR1cm4gX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfVxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKCF0c0lzSWRlbnRpZmllcigpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICByZXR1cm4gX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbik7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNYXBwZWRUeXBlUGFyYW1ldGVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW4pO1xuICB0c1BhcnNlVHlwZSgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTWFwcGVkVHlwZSgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGx1cykgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCk7XG4gIHRzUGFyc2VNYXBwZWRUeXBlUGFyYW1ldGVyKCk7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wbHVzKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubWludXMpKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgfVxuICB0c1RyeVBhcnNlVHlwZSgpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVUeXBlKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIC8vIERvIG5vdCB2YWxpZGF0ZSBwcmVzZW5jZSBvZiBlaXRoZXIgbm9uZSBvciBvbmx5IGxhYmVsZWQgZWxlbWVudHNcbiAgICB0c1BhcnNlVHVwbGVFbGVtZW50VHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUdXBsZUVsZW1lbnRUeXBlKCkge1xuICAvLyBwYXJzZXMgYC4uLlRzVHlwZVtdYFxuICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlcyBgVHNUeXBlP2BcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICB9XG5cbiAgLy8gVGhlIHR5cGUgd2UgcGFyc2VkIGFib3ZlIHdhcyBhY3R1YWxseSBhIGxhYmVsXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIC8vIExhYmVsZWQgdHVwbGUgdHlwZXMgbXVzdCBhZmZpeCB0aGUgbGFiZWwgd2l0aCBgLi4uYCBvciBgP2AsIHNvIG5vIG5lZWQgdG8gaGFuZGxlIHRob3NlIGhlcmVcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VQYXJlbnRoZXNpemVkVHlwZSgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIHRzUGFyc2VUeXBlKCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVGVtcGxhdGVMaXRlcmFsVHlwZSgpIHtcbiAgLy8gRmluaXNoIGAsIHJlYWQgcXVhc2lcbiAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgJHtcbiAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYWNrUXVvdGUpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgLy8gRmluaXNoIH0sIHJlYWQgcXVhc2lcbiAgICBfaW5kZXgubmV4dFRlbXBsYXRlVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gICAgLy8gRmluaXNoIHF1YXNpLCByZWFkIGVpdGhlciAkeyBvciBgXG4gICAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xufVxuXG52YXIgRnVuY3Rpb25UeXBlOyAoZnVuY3Rpb24gKEZ1bmN0aW9uVHlwZSkge1xuICBjb25zdCBUU0Z1bmN0aW9uVHlwZSA9IDA7IEZ1bmN0aW9uVHlwZVtGdW5jdGlvblR5cGVbXCJUU0Z1bmN0aW9uVHlwZVwiXSA9IFRTRnVuY3Rpb25UeXBlXSA9IFwiVFNGdW5jdGlvblR5cGVcIjtcbiAgY29uc3QgVFNDb25zdHJ1Y3RvclR5cGUgPSBUU0Z1bmN0aW9uVHlwZSArIDE7IEZ1bmN0aW9uVHlwZVtGdW5jdGlvblR5cGVbXCJUU0NvbnN0cnVjdG9yVHlwZVwiXSA9IFRTQ29uc3RydWN0b3JUeXBlXSA9IFwiVFNDb25zdHJ1Y3RvclR5cGVcIjtcbiAgY29uc3QgVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSA9IFRTQ29uc3RydWN0b3JUeXBlICsgMTsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGVcIl0gPSBUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlXSA9IFwiVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZVwiO1xufSkoRnVuY3Rpb25UeXBlIHx8IChGdW5jdGlvblR5cGUgPSB7fSkpO1xuXG5mdW5jdGlvbiB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSkge1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpO1xuICB9XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUgfHwgdHlwZSA9PT0gRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX25ldyk7XG4gIH1cbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBmYWxzZTtcbiAgdHNGaWxsU2lnbmF0dXJlKF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VOb25BcnJheVR5cGUoKSB7XG4gIHN3aXRjaCAoX2Jhc2Uuc3RhdGUudHlwZSkge1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOlxuICAgICAgdHNQYXJzZVR5cGVSZWZlcmVuY2UoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3ZvaWQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9udWxsOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZzpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubnVtOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5iaWdpbnQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmRlY2ltYWw6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90cnVlOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZmFsc2U6XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUxpdGVyYWwuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUxpdGVyYWwuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOiB7XG4gICAgICB0c1BhcnNlVGhpc1R5cGVOb2RlKCk7XG4gICAgICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2lzKSAmJiAhX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZjpcbiAgICAgIHRzUGFyc2VUeXBlUXVlcnkoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydDpcbiAgICAgIHRzUGFyc2VJbXBvcnRUeXBlKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgIGlmICh0c0xvb2thaGVhZElzU3RhcnRPZk1hcHBlZFR5cGUoKSkge1xuICAgICAgICB0c1BhcnNlTWFwcGVkVHlwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHNQYXJzZVR5cGVMaXRlcmFsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMOlxuICAgICAgdHNQYXJzZVR1cGxlVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw6XG4gICAgICB0c1BhcnNlUGFyZW50aGVzaXplZFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlQXJyYXlUeXBlT3JIaWdoZXIoKSB7XG4gIHRzUGFyc2VOb25BcnJheVR5cGUoKTtcbiAgd2hpbGUgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICBpZiAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpKSB7XG4gICAgICAvLyBJZiB3ZSBoaXQgXSBpbW1lZGlhdGVseSwgdGhpcyBpcyBhbiBhcnJheSB0eXBlLCBvdGhlcndpc2UgaXQncyBhbiBpbmRleGVkIGFjY2VzcyB0eXBlLlxuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbmZlclR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW5mZXIpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgLy8gSW5mZXIgdHlwZSBjb25zdHJhaW50cyBpbnRyb2R1Y2UgYW4gYW1iaWd1aXR5IGFib3V0IHdoZXRoZXIgdGhlIFwiZXh0ZW5kc1wiXG4gICAgLy8gaXMgYSBjb25zdHJhaW50IGZvciB0aGlzIGluZmVyIHR5cGUgb3IgaXMgYW5vdGhlciBjb25kaXRpb25hbCB0eXBlLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpO1xuICAgIGNvbnN0IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IF9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSB0cnVlO1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvciB8fCAoIV9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pKSkge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpIHtcbiAgaWYgKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9rZXlvZikgfHxcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdW5pcXVlKSB8fFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSlcbiAgKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgdHNQYXJzZVR5cGVPcGVyYXRvck9ySGlnaGVyKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKSkge1xuICAgIHRzUGFyc2VJbmZlclR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2U7XG4gICAgdHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCk7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcnNlY3Rpb25UeXBlT3JIaWdoZXIoKSB7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZUFORCk7XG4gIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpKSB7XG4gICAgd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZUFORCkpIHtcbiAgICAgIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKSB7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZU9SKTtcbiAgdHNQYXJzZUludGVyc2VjdGlvblR5cGVPckhpZ2hlcigpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VPUikpIHtcbiAgICB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IpKSB7XG4gICAgICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSAmJiB0c0xvb2thaGVhZElzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKTtcbn1cblxuZnVuY3Rpb24gdHNTa2lwUGFyYW1ldGVyU3RhcnQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl90aGlzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIHRoaXMgaXMgYSBwb3NzaWJsZSBhcnJheS9vYmplY3QgZGVzdHJ1Y3R1cmUsIHdhbGsgdG8gdGhlIG1hdGNoaW5nIGJyYWNrZXQvYnJhY2UuXG4gIC8vIFRoZSBuZXh0IHRva2VuIGFmdGVyIHdpbGwgdGVsbCB1cyBkZWZpbml0aXZlbHkgd2hldGhlciB0aGlzIGlzIGEgZnVuY3Rpb24gcGFyYW0uXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgbGV0IGRlcHRoID0gMTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICB3aGlsZSAoZGVwdGggPiAwICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgfVxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNMb29rYWhlYWRJc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIGNvbnN0IGlzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUgPSB0c0lzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKTtcbiAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIHJldHVybiBpc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlO1xufVxuXG5mdW5jdGlvbiB0c0lzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIC8vICggKVxuICAgIC8vICggLi4uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRzU2tpcFBhcmFtZXRlclN0YXJ0KCkpIHtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgLy8gKCB4eHggOlxuICAgICAgLy8gKCB4eHggLFxuICAgICAgLy8gKCB4eHggP1xuICAgICAgLy8gKCB4eHggPVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkge1xuICAgICAgICAvLyAoIHh4eCApID0+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbihyZXR1cm5Ub2tlbikge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCByZXR1cm5Ub2tlbik7XG4gIGNvbnN0IGZpbmlzaGVkUmV0dXJuID0gdHNQYXJzZVR5cGVQcmVkaWNhdGVPckFzc2VydHNQcmVmaXgoKTtcbiAgaWYgKCFmaW5pc2hlZFJldHVybikge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn0gZXhwb3J0cy50c1RyeVBhcnNlVHlwZUFubm90YXRpb24gPSB0c1RyeVBhcnNlVHlwZUFubm90YXRpb247XG5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VUeXBlKCkge1xuICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgZmV3IHNwZWNpYWwgcmV0dXJuIHN5bnRheCBjYXNlczogYHggaXMgVGAsIGBhc3NlcnRzIHhgLCBgYXNzZXJ0cyB4IGlzIFRgLFxuICogYGFzc2VydHMgdGhpcyBpcyBUYC5cbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgd2UgcGFyc2VkIHRoZSByZXR1cm4gdHlwZSwgZmFsc2UgaWYgdGhlcmUncyBzdGlsbCBhIHR5cGUgdG8gYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydHMpKSB7XG4gICAgLy8gTm9ybWFsbHkgdGhpcyBpcyBgYXNzZXJ0cyB4IGlzIFRgLCBidXQgYXQgdGhpcyBwb2ludCwgaXQgbWlnaHQgYmUgYGFzc2VydHMgaXMgVGAgKGEgdXNlci1cbiAgICAvLyBkZWZpbmVkIHR5cGUgZ3VhcmQgb24gdGhlIGBhc3NlcnRzYCB2YXJpYWJsZSkgb3IganVzdCBhIHR5cGUgY2FsbGVkIGBhc3NlcnRzYC5cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pcykpIHtcbiAgICAgIC8vIElmIHdlIHNlZSBgYXNzZXJ0cyBpc2AsIHRoZW4gdGhpcyBtdXN0IGJlIG9mIHRoZSBmb3JtIGBhc3NlcnRzIGlzIFRgLCBzaW5jZVxuICAgICAgLy8gYGFzc2VydHMgaXMgaXMgVGAgaXNuJ3QgdmFsaWQuXG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0c0lzSWRlbnRpZmllcigpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdGhpcykpIHtcbiAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faXMpKSB7XG4gICAgICAgIC8vIElmIHdlIHNlZSBgaXNgLCB0aGVuIHRoaXMgaXMgYGFzc2VydHMgeCBpcyBUYC4gT3RoZXJ3aXNlLCBpdCdzIGBhc3NlcnRzIHhgLlxuICAgICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlZ3VsYXIgdHlwZSwgc28gYmFpbCBvdXQgYW5kIHN0YXJ0IHR5cGUgcGFyc2luZyBmcm9tIHNjcmF0Y2guXG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHNJc0lkZW50aWZpZXIoKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3RoaXMpKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgaWRlbnRpZmllciwgd2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBcImlzXCIgYWZ0ZXIgaXQuXG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pcykgJiYgIV91dGlsLmhhc1ByZWNlZGluZ0xpbmVCcmVhay5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlZ3VsYXIgdHlwZSwgc28gYmFpbCBvdXQgYW5kIHN0YXJ0IHR5cGUgcGFyc2luZyBmcm9tIHNjcmF0Y2guXG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4gZnVuY3Rpb24gdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufSBleHBvcnRzLnRzUGFyc2VUeXBlQW5ub3RhdGlvbiA9IHRzUGFyc2VUeXBlQW5ub3RhdGlvbjtcblxuIGZ1bmN0aW9uIHRzUGFyc2VUeXBlKCkge1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIGlmIChfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgfHwgX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApIHx8ICFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBleHRlbmRzIHR5cGVcbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSB0cnVlO1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIF9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAvLyB0cnVlIHR5cGVcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgLy8gZmFsc2UgdHlwZVxuICB0c1BhcnNlVHlwZSgpO1xufSBleHBvcnRzLnRzUGFyc2VUeXBlID0gdHNQYXJzZVR5cGU7XG5cbmZ1bmN0aW9uIGlzQWJzdHJhY3RDb25zdHJ1Y3RvclNpZ25hdHVyZSgpIHtcbiAgcmV0dXJuIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCkgJiYgX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuX25ldztcbn1cblxuIGZ1bmN0aW9uIHRzUGFyc2VOb25Db25kaXRpb25hbFR5cGUoKSB7XG4gIGlmICh0c0lzU3RhcnRPZkZ1bmN0aW9uVHlwZSgpKSB7XG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTRnVuY3Rpb25UeXBlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fbmV3KSkge1xuICAgIC8vIEFzIGluIGBuZXcgKCkgPT4gRGF0ZWBcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChpc0Fic3RyYWN0Q29uc3RydWN0b3JTaWduYXR1cmUoKSkge1xuICAgIC8vIEFzIGluIGBhYnN0cmFjdCBuZXcgKCkgPT4gRGF0ZWBcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRzUGFyc2VVbmlvblR5cGVPckhpZ2hlcigpO1xufSBleHBvcnRzLnRzUGFyc2VOb25Db25kaXRpb25hbFR5cGUgPSB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlO1xuXG4gZnVuY3Rpb24gdHNQYXJzZVR5cGVBc3NlcnRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICB0c1BhcnNlVHlwZSgpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pO1xuICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIF9leHByZXNzaW9uLnBhcnNlTWF5YmVVbmFyeS5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy50c1BhcnNlVHlwZUFzc2VydGlvbiA9IHRzUGFyc2VUeXBlQXNzZXJ0aW9uO1xuXG4gZnVuY3Rpb24gdHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCgpIHtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgIH1cbiAgICAvLyBQcm9jZXNzID4sIGJ1dCB0aGUgb25lIGFmdGVyIG5lZWRzIHRvIGJlIHBhcnNlZCBKU1gtc3R5bGUuXG4gICAgX2pzeC5uZXh0SlNYVGFnVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCA9IHRzVHJ5UGFyc2VKU1hUeXBlQXJndW1lbnQ7XG5cbmZ1bmN0aW9uIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpIHtcbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzKCk7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cygpIHtcbiAgLy8gTm90ZTogVFMgdXNlcyBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25PckhpZ2hlcixcbiAgLy8gdGhlbiBoYXMgZ3JhbW1hciBlcnJvcnMgbGF0ZXIgaWYgaXQncyBub3QgYW4gRW50aXR5TmFtZS5cbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgdHNQYXJzZUhlcml0YWdlQ2xhdXNlKCk7XG4gIH1cbiAgdHNQYXJzZU9iamVjdFR5cGVNZW1iZXJzKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlQWxpYXNEZWNsYXJhdGlvbigpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bU1lbWJlcigpIHtcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgbmFtZXMgYXJlIGdyYW1tYXIgZXJyb3JzIGluIGFuIGVudW0sIHNvIGFjY2VwdCBqdXN0IHN0cmluZyBsaXRlcmFsIG9yIGlkZW50aWZpZXIuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlTGl0ZXJhbC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgY29uc3QgZXFJbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsICk7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlRW51bU1lbWJlcigpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVCbG9jaygpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIF9zdGF0ZW1lbnQucGFyc2VCbG9ja0JvZHkuY2FsbCh2b2lkIDAsIC8qIGVuZCAqLyBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVPck5hbWVzcGFjZURlY2xhcmF0aW9uKCkge1xuICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VBbWJpZW50RXh0ZXJuYWxNb2R1bGVEZWNsYXJhdGlvbigpIHtcbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgdHNQYXJzZU1vZHVsZUJsb2NrKCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24oKSB7XG4gIF9sdmFsLnBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpO1xuICB0c1BhcnNlTW9kdWxlUmVmZXJlbmNlKCk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24gPSB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb247XG5cbmZ1bmN0aW9uIHRzSXNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpIHtcbiAgcmV0dXJuIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9yZXF1aXJlKSAmJiBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKSB7XG4gIGlmICh0c0lzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UoKSkge1xuICAgIHRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4dGVybmFsTW9kdWxlUmVmZXJlbmNlKCkge1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlcXVpcmUpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VMaXRlcmFsLmNhbGwodm9pZCAwLCApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbn1cblxuLy8gVXRpbGl0aWVzXG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBhIHN0YXRlbWVudCBtYXRjaGVkLlxuZnVuY3Rpb24gdHNUcnlQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChfdXRpbC5pc0xpbmVUZXJtaW5hdG9yLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAoX2Jhc2Uuc3RhdGUudHlwZSkge1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb246IHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHByZWNpc2VseSBnZXQgdGhlIGZ1bmN0aW9uIHN0YXJ0IGhlcmUsIHNpbmNlIGl0J3Mgb25seSB1c2VkIHRvIG1hcmtcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBhcyBhIHR5cGUgaWYgaXQncyBib2RpbGVzcywgYW5kIGl0J3MgYWxyZWFkeSBhIHR5cGUgaGVyZS5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvbi5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSk7XG4gICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzczoge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlQ2xhc3MuY2FsbCh2b2lkIDAsIC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fY29uc3Q6IHtcbiAgICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KSAmJiBfdXRpbC5pc0xvb2thaGVhZENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICAgIC8vIGBjb25zdCBlbnVtID0gMDtgIG5vdCBhbGxvd2VkIGJlY2F1c2UgXCJlbnVtXCIgaXMgYSBzdHJpY3QgbW9kZSByZXNlcnZlZCB3b3JkLlxuICAgICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KTtcbiAgICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fZW51bTtcbiAgICAgICAgdHNQYXJzZUVudW1EZWNsYXJhdGlvbigpO1xuICAgICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl92YXI6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQ6IHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgX3N0YXRlbWVudC5wYXJzZVZhclN0YXRlbWVudC5jYWxsKHZvaWQgMCwgX2Jhc2Uuc3RhdGUudHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5fdmFyKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubmFtZToge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBjb25zdCBjb250ZXh0dWFsS2V5d29yZCA9IF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGlmIChjb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpIHtcbiAgICAgICAgdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0Y2hlZCA9IHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgLyogaXNCZWZvcmVUb2tlbiAqLyB0cnVlKTtcbiAgICAgIH1cbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE5vdGU6IHRoaXMgd29uJ3QgYmUgY2FsbGVkIHVubGVzcyB0aGUga2V5d29yZCBpcyBhbGxvd2VkIGluIGBzaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uYC5cbi8vIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgZGVjbGFyYXRpb24uXG5mdW5jdGlvbiB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiB0c1BhcnNlRGVjbGFyYXRpb24oX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQsIC8qIGlzQmVmb3JlVG9rZW4gKi8gdHJ1ZSk7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgc3RhdGVtZW50LlxuZnVuY3Rpb24gdHNQYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgc3dpdGNoIChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOiB7XG4gICAgICBjb25zdCBkZWNsYXJlVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IHRzVHJ5UGFyc2VEZWNsYXJlKCk7XG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbZGVjbGFyZVRva2VuSW5kZXhdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2xvYmFsOlxuICAgICAgLy8gYGdsb2JhbCB7IH1gICh3aXRoIG5vIGBkZWNsYXJlYCkgbWF5IGFwcGVhciBpbnNpZGUgYW4gYW1iaWVudCBtb2R1bGUgZGVjbGFyYXRpb24uXG4gICAgICAvLyBXb3VsZCBsaWtlIHRvIHVzZSB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24gaGVyZSwgYnV0IGFscmVhZHkgcmFuIHBhc3QgXCJnbG9iYWxcIi5cbiAgICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICB0c1BhcnNlTW9kdWxlQmxvY2soKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHNQYXJzZURlY2xhcmF0aW9uKGNvbnRleHR1YWxLZXl3b3JkLCAvKiBpc0JlZm9yZVRva2VuICovIGZhbHNlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29tbW9uIGNvZGUgZm9yIHBhcnNpbmcgYSBkZWNsYXJhdGlvbi5cbiAqXG4gKiBpc0JlZm9yZVRva2VuIGluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHBhcnNlciBzdGF0ZSBpcyBhdCB0aGUgY29udGV4dHVhbFxuICoga2V5d29yZCAoYW5kIHRoYXQgaXQgaXMgbm90IHlldCBlbWl0dGVkKSByYXRoZXIgdGhhbiByZWFkaW5nIHRoZSB0b2tlbiBhZnRlclxuICogaXQuIFdoZW4gaXNCZWZvcmVUb2tlbiBpcyB0cnVlLCB3ZSBtYXkgYmUgcHJlY2VkZWQgYnkgYW4gYGV4cG9ydGAgdG9rZW4gYW5kXG4gKiBzaG91bGQgaW5jbHVkZSB0aGF0IHRva2VuIGluIGEgdHlwZSBjb250ZXh0IHdlIGNyZWF0ZSwgZS5nLiB0byBoYW5kbGVcbiAqIGBleHBvcnQgaW50ZXJmYWNlYCBvciBgZXhwb3J0IHR5cGVgLiAoVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYW5kIHNob3VsZCBiZVxuICogY2xlYW5lZCB1cCBhdCBzb21lIHBvaW50LilcbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlRGVjbGFyYXRpb24oY29udGV4dHVhbEtleXdvcmQsIGlzQmVmb3JlVG9rZW4pIHtcbiAgc3dpdGNoIChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3Q7XG4gICAgICAgIF9zdGF0ZW1lbnQucGFyc2VDbGFzcy5jYWxsKHZvaWQgMCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSwgLyogb3B0aW9uYWxJZCAqLyBmYWxzZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gICAgICAgIHRzUGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2U6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICAvLyBgbmV4dGAgaXMgdHJ1ZSBpbiBcImV4cG9ydFwiIGFuZCBcImRlY2xhcmVcIiBjb250ZXh0cywgc28gd2Ugd2FudCB0byByZW1vdmUgdGhhdCB0b2tlblxuICAgICAgICAvLyBhcyB3ZWxsLlxuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlSW50ZXJmYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikpIHtcbiAgICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgdHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGU6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pIHtcbiAgaWYgKGlzQmVmb3JlVG9rZW4pIHtcbiAgICAvLyBCYWJlbCBjaGVja3MgaGFzRm9sbG93aW5nTGluZUJyZWFrIGhlcmUgYW5kIHJldHVybnMgZmFsc2UsIGJ1dCB0aGlzXG4gICAgLy8gZG9lc24ndCBhY3R1YWxseSBjb21lIHVwLCBlLmcuIGBleHBvcnQgaW50ZXJmYWNlYCBjYW4gbmV2ZXIgYmUgb24gaXRzIG93blxuICAgIC8vIGxpbmUgaW4gdmFsaWQgY29kZS5cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIGdlbmVyaWMgYXN5bmMgYXJyb3cgZnVuY3Rpb24uXG5mdW5jdGlvbiB0c1RyeVBhcnNlR2VuZXJpY0FzeW5jQXJyb3dGdW5jdGlvbigpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb25QYXJhbXMuY2FsbCh2b2lkIDAsICk7XG4gIHRzVHJ5UGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbigpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuXG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIF9leHByZXNzaW9uLnBhcnNlRnVuY3Rpb25Cb2R5LmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogSWYgbmVjZXNzYXJ5LCBoYWNrIHRoZSB0b2tlbml6ZXIgc3RhdGUgc28gdGhhdCB0aGlzIGJpdHNoaWZ0IHdhcyBhY3R1YWxseSBhXG4gKiBsZXNzLXRoYW4gdG9rZW4sIHRoZW4ga2VlcCBwYXJzaW5nLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gc2l0dWF0aW9uc1xuICogd2hlcmUgd2UgcmVzdG9yZSBmcm9tIHNuYXBzaG90IG9uIGVycm9yICh3aGljaCByZXZlcnRzIHRoaXMgY2hhbmdlKSBvclxuICogd2hlcmUgYml0c2hpZnQgd291bGQgYmUgaWxsZWdhbCBhbnl3YXkgKGUuZy4gaW4gYSBjbGFzcyBcImV4dGVuZHNcIiBjbGF1c2UpLlxuICpcbiAqIFRoaXMgaGFjayBpcyB1c2VmdWwgdG8gaGFuZGxlIHNpdHVhdGlvbnMgbGlrZSBmb288PFQ+KCkgPT4gdm9pZD4oKSB3aGVyZVxuICogdGhlcmUgY2FuIGxlZ2l0aW1hdGVseSBiZSB0d28gb3Blbi1hbmdsZS1icmFja2V0cyBpbiBhIHJvdyBpbiBUUy5cbiAqL1xuZnVuY3Rpb24gdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpIHtcbiAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRMKSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zIC09IDE7XG4gICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKTtcbiAgfVxuICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFyZ3VtZW50cygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbik7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG4gIGlmICghb2xkSXNUeXBlKSB7XG4gICAgLy8gSWYgdGhlIHR5cGUgYXJndW1lbnRzIGFyZSBwcmVzZW50IGluIGFuIGV4cHJlc3Npb24gY29udGV4dCwgZS5nLlxuICAgIC8vIGY8bnVtYmVyPigpLCB0aGVuIHRoZSA+IHNpZ24gc2hvdWxkIGJlIHRva2VuaXplZCBhcyBhIG5vbi10eXBlIHRva2VuLlxuICAgIC8vIEluIHBhcnRpY3VsYXIsIGYoYSA8IGIsIGMgPj0gZCkgc2hvdWxkIHBhcnNlIHRoZSA+PSBhcyBhIHNpbmdsZSB0b2tlbixcbiAgICAvLyByZXN1bHRpbmcgaW4gYSBzeW50YXggZXJyb3IgYW5kIGZhbGxiYWNrIHRvIHRoZSBub24tdHlwZS1hcmdzXG4gICAgLy8gaW50ZXJwcmV0YXRpb24uIEluIHRoZSBzdWNjZXNzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZSA+IGlzIHRva2VuaXplZCBhcyBhXG4gICAgLy8gbm9uLXR5cGUgdG9rZW4sIGl0IHN0aWxsIG11c3QgYmUgbWFya2VkIGFzIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IGlzXG4gICAgLy8gZXJhc2VkLlxuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICBfaW5kZXgucmVzY2FuX2d0LmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbik7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbik7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c0lzRGVjbGFyYXRpb25TdGFydCgpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgIHN3aXRjaCAoX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOlxuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW06XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlOlxuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZTpcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9uYW1lc3BhY2U6XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZTpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMudHNJc0RlY2xhcmF0aW9uU3RhcnQgPSB0c0lzRGVjbGFyYXRpb25TdGFydDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPVkVSUklERVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gZnVuY3Rpb24gdHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkKSB7XG4gIC8vIEZvciBhcnJvdyBmdW5jdGlvbnMsIGBwYXJzZUFycm93YCBoYW5kbGVzIHRoZSByZXR1cm4gdHlwZSBpdHNlbGYuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICB9XG5cbiAgLy8gVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCB0aGUgbm9kZSB0eXBlIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHR5cGUgYWxsb3dzIGEgbWlzc2luZ1xuICAvLyBib2R5LCBidXQgd2Ugc2tpcCB0aGF0IHRvIGF2b2lkIHNlbmRpbmcgYXJvdW5kIHRoZSBub2RlIHR5cGUuIFdlIGluc3RlYWQganVzdCB1c2UgdGhlXG4gIC8vIGFsbG93RXhwcmVzc2lvbkJvZHkgYm9vbGVhbiB0byBtYWtlIHN1cmUgaXQncyBub3QgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgJiYgX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIC8vIFJldHJvYWN0aXZlbHkgbWFyayB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYXMgYSB0eXBlLlxuICAgIGxldCBpID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKFxuICAgICAgaSA+PSAwICYmXG4gICAgICAoX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnN0YXJ0ID49IGZ1bmN0aW9uU3RhcnQgfHxcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQgfHxcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydClcbiAgICApIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keS5jYWxsKHZvaWQgMCwgZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufSBleHBvcnRzLnRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2ggPSB0c1BhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoO1xuXG4gZnVuY3Rpb24gdHNQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubm9uTnVsbEFzc2VydGlvbjtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRMKSkge1xuICAgIC8vIFRoZXJlIGFyZSBudW1iZXIgb2YgdGhpbmdzIHdlIGFyZSBnb2luZyB0byBcIm1heWJlXCIgcGFyc2UsIGxpa2UgdHlwZSBhcmd1bWVudHMgb25cbiAgICAvLyB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbnMuIElmIGFueSBvZiB0aGVtIGZhaWwsIHdhbGsgaXQgYmFjayBhbmQgY29udGludWUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFub0NhbGxzICYmIF9leHByZXNzaW9uLmF0UG9zc2libGVBc3luYy5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgLy8gQWxtb3N0IGNlcnRhaW5seSB0aGlzIGlzIGEgZ2VuZXJpYyBhc3luYyBmdW5jdGlvbiBgYXN5bmMgPFQ+KCkgPT4gLi4uXG4gICAgICAvLyBCdXQgaXQgbWlnaHQgYmUgYSBjYWxsIHdpdGggYSB0eXBlIGFyZ3VtZW50IGBhc3luYzxUPigpO2BcbiAgICAgIGNvbnN0IGFzeW5jQXJyb3dGbiA9IHRzVHJ5UGFyc2VHZW5lcmljQXN5bmNBcnJvd0Z1bmN0aW9uKCk7XG4gICAgICBpZiAoYXN5bmNBcnJvd0ZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICAgIGlmICghbm9DYWxscyAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIC8vIFdpdGggZjxUPigpLCB0aGUgc3Vic2NyaXB0U3RhcnRJbmRleCBtYXJrZXIgaXMgb24gdGhlICggdG9rZW4uXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSkpIHtcbiAgICAgIC8vIFRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGEgdHlwZSBhcmd1bWVudC5cbiAgICAgIF9leHByZXNzaW9uLnBhcnNlVGVtcGxhdGUuY2FsbCh2b2lkIDAsICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIFRoZSByZW1haW5pbmcgcG9zc2libGUgY2FzZSBpcyBhbiBpbnN0YW50aWF0aW9uIGV4cHJlc3Npb24sIGUuZy5cbiAgICAgIC8vIEFycmF5PG51bWJlcj4gLiBDaGVjayBmb3IgYSBmZXcgY2FzZXMgdGhhdCB3b3VsZCBkaXNxdWFsaWZ5IGl0IGFuZFxuICAgICAgLy8gY2F1c2UgdXMgdG8gYmFpbCBvdXQuXG4gICAgICAvLyBhPGI+PmMgaXMgbm90IChhPGI+KT5jLCBidXQgYTwoYj4+YylcbiAgICAgIF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4gfHxcbiAgICAgIC8vIGE8Yj5jIGlzIChhPGIpPmNcbiAgICAgIChfYmFzZS5zdGF0ZS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCAmJlxuICAgICAgICBCb29sZWFuKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0VYUFJFU1NJT05fU1RBUlQpICYmXG4gICAgICAgICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpXG4gICAgKSB7XG4gICAgICAvLyBCYWlsIG91dC4gV2UgaGF2ZSBzb21ldGhpbmcgbGlrZSBhPGI+Yywgd2hpY2ggaXMgbm90IGFuIGV4cHJlc3Npb24gd2l0aFxuICAgICAgLy8gdHlwZSBhcmd1bWVudHMgYnV0IGFuIChhIDwgYikgPiBjIGNvbXBhcmlzb24uXG4gICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIH1cblxuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90KSAmJiBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikge1xuICAgIC8vIElmIHdlIHNlZSBmPy48LCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBvcHRpb25hbCBjYWxsIHdpdGggYSB0eXBlIGFyZ3VtZW50LlxuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0ID0gdHJ1ZTtcbiAgICAvLyBXaXRoIGY/LjxUPigpLCB0aGUgc3Vic2NyaXB0U3RhcnRJbmRleCBtYXJrZXIgaXMgb24gdGhlID8uIHRva2VuLlxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcblxuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfZXhwcmVzc2lvbi5iYXNlUGFyc2VTdWJzY3JpcHQuY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbn0gZXhwb3J0cy50c1BhcnNlU3Vic2NyaXB0ID0gdHNQYXJzZVN1YnNjcmlwdDtcblxuIGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnQoKSB7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpKSB7XG4gICAgLy8gT25lIG9mIHRoZXNlIGNhc2VzOlxuICAgIC8vIGV4cG9ydCBpbXBvcnQgQSA9IEI7XG4gICAgLy8gZXhwb3J0IGltcG9ydCB0eXBlIEEgPSByZXF1aXJlKFwiQVwiKTtcbiAgICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApICE9PSBfdHlwZXMuVG9rZW5UeXBlLmVxKSB7XG4gICAgICAvLyBFYXQgYSBgdHlwZWAgdG9rZW4sIHVubGVzcyBpdCdzIGFjdHVhbGx5IGFuIGlkZW50aWZpZXIgbmFtZS5cbiAgICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgLy8gYGV4cG9ydCA9IHg7YFxuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAvLyBgZXhwb3J0IGFzIG5hbWVzcGFjZSBBO2BcbiAgICAvLyBTZWUgYHBhcnNlTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb25gIGluIFR5cGVTY3JpcHQncyBvd24gcGFyc2VyXG4gICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9uYW1lc3BhY2UpO1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgICAgY29uc3QgbmV4dFR5cGUgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHtmb299IGZyb20gJ2EnO1xuICAgICAgLy8gZXhwb3J0IHR5cGUgKiBmcm9tICdhJzsnXG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJ2EnOydcbiAgICAgIGlmIChuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5icmFjZUwgfHwgbmV4dFR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3Rhcikge1xuICAgICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZUV4cG9ydCA9IHRzVHJ5UGFyc2VFeHBvcnQ7XG5cbi8qKlxuICogUGFyc2UgYSBUUyBpbXBvcnQgc3BlY2lmaWVyLCB3aGljaCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBcInR5cGVcIiBhbmQgbWF5IGJlIG9mXG4gKiB0aGUgZm9ybSBgZm9vIGFzIGJhcmAuXG4gKlxuICogVGhlIG51bWJlciBvZiBpZGVudGlmaWVyLWxpa2UgdG9rZW5zIHdlIHNlZSBoYXBwZW5zIHRvIGJlIGVub3VnaCB0byB1bmlxdWVseVxuICogaWRlbnRpZnkgdGhlIGZvcm0sIHNvIHNpbXBseSBjb3VudCB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIHJhdGhlciB0aGFuXG4gKiBtYXRjaGluZyB0aGUgd29yZHMgYHR5cGVgIG9yIGBhc2AuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBiZWNhdXNlXG4gKiBgdHlwZWAgYW5kIGBhc2AgY291bGQgZWFjaCBhY3R1YWxseSBiZSBwbGFpbiBpZGVudGlmaWVycyByYXRoZXIgdGhhblxuICoga2V5d29yZHMuXG4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICByZXR1cm47XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgIC8vIGltcG9ydCB7dHlwZSBmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb28gYXMgYmFyfVxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0QWNjZXNzO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgLy8gaW1wb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0QWNjZXNzO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gX2luZGV4LklkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDRdLmlzVHlwZSA9IHRydWU7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaXNUeXBlID0gdHJ1ZTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG59IGV4cG9ydHMudHNQYXJzZUltcG9ydFNwZWNpZmllciA9IHRzUGFyc2VJbXBvcnRTcGVjaWZpZXI7XG5cbi8qKlxuICogSnVzdCBsaWtlIG5hbWVkIGltcG9ydCBzcGVjaWZpZXJzLCBleHBvcnQgc3BlY2lmaWVycyBjYW4gaGF2ZSBmcm9tIDEgdG8gNFxuICogdG9rZW5zLCBpbmNsdXNpdmUsIGFuZCB0aGUgbnVtYmVyIG9mIHRva2VucyBkZXRlcm1pbmVzIHRoZSByb2xlIG9mIGVhY2ggdG9rZW4uXG4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlRXhwb3J0U3BlY2lmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gZXhwb3J0IHtmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge3R5cGUgZm9vfVxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMl0uaXNUeXBlID0gdHJ1ZTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge2ZvbyBhcyBiYXJ9XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAzXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgLy8gZXhwb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDRdLmlzVHlwZSA9IHRydWU7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaXNUeXBlID0gdHJ1ZTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG59IGV4cG9ydHMudHNQYXJzZUV4cG9ydFNwZWNpZmllciA9IHRzUGFyc2VFeHBvcnRTcGVjaWZpZXI7XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykge1xuICAgIF9iYXNlLnN0YXRlLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9hYnN0cmFjdDtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTsgLy8gU2tpcCBcImFic3RyYWN0XCJcbiAgICBfc3RhdGVtZW50LnBhcnNlQ2xhc3MuY2FsbCh2b2lkIDAsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSkge1xuICAgIC8vIE1ha2Ugc3VyZSBcImV4cG9ydCBkZWZhdWx0XCIgYXJlIGNvbnNpZGVyZWQgdHlwZSB0b2tlbnMgc28gdGhlIHdob2xlIHRoaW5nIGlzIHJlbW92ZWQuXG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgdHNQYXJzZURlY2xhcmF0aW9uKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlLCB0cnVlKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbiA9IHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbjtcblxuIGZ1bmN0aW9uIHRzVHJ5UGFyc2VTdGF0ZW1lbnRDb250ZW50KCkge1xuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpIHtcbiAgICBjb25zdCBhaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoYWhlYWQudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmIGFoZWFkLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW0pIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpO1xuICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnRzVHJ5UGFyc2VTdGF0ZW1lbnRDb250ZW50ID0gdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQ7XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoaXNTdGF0aWMpIHtcbiAgY29uc3QgbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgdHNQYXJzZU1vZGlmaWVycyhbXG4gICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5LFxuICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYyxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlLFxuICBdKTtcblxuICBjb25zdCBtb2RpZmllcnNFbmRJbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIGNvbnN0IGZvdW5kID0gdHNUcnlQYXJzZUluZGV4U2lnbmF0dXJlKCk7XG4gIGlmIChmb3VuZCkge1xuICAgIC8vIEluZGV4IHNpZ25hdHVyZXMgYXJlIHR5cGUgZGVjbGFyYXRpb25zLCBzbyBzZXQgdGhlIG1vZGlmaWVyIHRva2VucyBhc1xuICAgIC8vIHR5cGUgdG9rZW5zLiBNb3N0IHRva2VucyBjb3VsZCBiZSBhc3N1bWVkIHRvIGJlIHR5cGUgdG9rZW5zLCBidXQgYHN0YXRpY2BcbiAgICAvLyBpcyBhbWJpZ3VvdXMgdW5sZXNzIHdlIHNldCBpdCBleHBsaWNpdGx5IGhlcmUuXG4gICAgY29uc3QgbWVtYmVyU3RhcnRJbmRleCA9IGlzU3RhdGljXG4gICAgICA/IG1lbWJlclN0YXJ0SW5kZXhBZnRlclN0YXRpYyAtIDFcbiAgICAgIDogbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljO1xuICAgIGZvciAobGV0IGkgPSBtZW1iZXJTdGFydEluZGV4OyBpIDwgbW9kaWZpZXJzRW5kSW5kZXg7IGkrKykge1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLmlzVHlwZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy50c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMgPSB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWM7XG5cbi8vIE5vdGU6IFRoZSByZWFzb24gd2UgZG8gdGhpcyBpbiBgcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50YCBhbmQgbm90IGBwYXJzZVN0YXRlbWVudGBcbi8vIGlzIHRoYXQgZS5nLiBgdHlwZSgpYCBpcyB2YWxpZCBKUywgc28gd2UgbXVzdCB0cnkgcGFyc2luZyB0aGF0IGZpcnN0LlxuLy8gSWYgaXQncyByZWFsbHkgYSB0eXBlLCB3ZSB3aWxsIHBhcnNlIGB0eXBlYCBhcyB0aGUgc3RhdGVtZW50LCBhbmQgY2FuIGNvcnJlY3QgaXQgaGVyZVxuLy8gYnkgcGFyc2luZyB0aGUgcmVzdC5cbiBmdW5jdGlvbiB0c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBtYXRjaGVkID0gdHNQYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn0gZXhwb3J0cy50c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCA9IHRzUGFyc2VJZGVudGlmaWVyU3RhdGVtZW50O1xuXG4gZnVuY3Rpb24gdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAvLyBcImV4cG9ydCBkZWNsYXJlXCIgaXMgZXF1aXZhbGVudCB0byBqdXN0IFwiZXhwb3J0XCIuXG4gIGNvbnN0IGlzRGVjbGFyZSA9IF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSk7XG4gIGlmIChpc0RlY2xhcmUpIHtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlO1xuICB9XG5cbiAgbGV0IG1hdGNoZWREZWNsYXJhdGlvbiA9IGZhbHNlO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgaWYgKGlzRGVjbGFyZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgICBtYXRjaGVkRGVjbGFyYXRpb24gPSB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hlZERlY2xhcmF0aW9uID0gdHNUcnlQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2hlZERlY2xhcmF0aW9uKSB7XG4gICAgaWYgKGlzRGVjbGFyZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlU3RhdGVtZW50LmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3N0YXRlbWVudC5wYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMudHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gdHNBZnRlclBhcnNlQ2xhc3NTdXBlcihoYXNTdXBlcikge1xuICBpZiAoaGFzU3VwZXIgJiYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdFNoaWZ0TCkpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5faW1wbGVtZW50cztcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICB0c1BhcnNlSGVyaXRhZ2VDbGF1c2UoKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy50c0FmdGVyUGFyc2VDbGFzc1N1cGVyID0gdHNBZnRlclBhcnNlQ2xhc3NTdXBlcjtcblxuIGZ1bmN0aW9uIHRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZSgpIHtcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG59IGV4cG9ydHMudHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlID0gdHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlO1xuXG4gZnVuY3Rpb24gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufSBleHBvcnRzLnRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zID0gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXM7XG5cbi8vIGBsZXQgeDogbnVtYmVyO2BcbiBmdW5jdGlvbiB0c0FmdGVyUGFyc2VWYXJIZWFkKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJhbmcpO1xuICB9XG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG59IGV4cG9ydHMudHNBZnRlclBhcnNlVmFySGVhZCA9IHRzQWZ0ZXJQYXJzZVZhckhlYWQ7XG5cbi8vIHBhcnNlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBhcnJvdyBmdW5jdGlvbiAtIGxldCBmb28gPSAoYXN5bmMgKCk6IG51bWJlciA9PiB7fSk7XG4gZnVuY3Rpb24gdHNTdGFydFBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbigpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufSBleHBvcnRzLnRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24gPSB0c1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uO1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuIGZ1bmN0aW9uIHRzUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICAvLyBOb3RlOiBXaGVuIHRoZSBKU1ggcGx1Z2luIGlzIG9uLCB0eXBlIGFzc2VydGlvbnMgKGA8VD4geGApIGFyZW4ndCB2YWxpZCBzeW50YXguXG4gIGlmIChfYmFzZS5pc0pTWEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1gobm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduID0gdHNQYXJzZU1heWJlQXNzaWduO1xuXG4gZnVuY3Rpb24gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICByZXR1cm4gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0byBwYXJzZSBKU1ggaWYgcG9zc2libGUuIEJ1dCBtYXkgYmUgYW4gYXJyb3cgZm4uXG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgbGV0IHdhc0Fycm93ID0gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHdhc0Fycm93O1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCB0cnkgYXMgdHlwZS1wYXJhbWV0ZXJpemVkIGFycm93IGZ1bmN0aW9uLlxuICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIHdhc0Fycm93ID0gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgaWYgKCF3YXNBcnJvdykge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICByZXR1cm4gd2FzQXJyb3c7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWCA9IHRzUGFyc2VNYXliZUFzc2lnbldpdGhKU1g7XG5cbiBmdW5jdGlvbiB0c1BhcnNlTWF5YmVBc3NpZ25XaXRob3V0SlNYKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHJldHVybiBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG5cbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gVHlwZVNjcmlwdCdzIGB0cnlQYXJzZVBhcmVudGhlc2l6ZWRBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbmAuXG4gIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBjb25zdCB3YXNBcnJvdyA9IF9leHByZXNzaW9uLmJhc2VQYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIGlmICghd2FzQXJyb3cpIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXNBcnJvdztcbiAgfVxuXG4gIC8vIFRyeSBwYXJzaW5nIGEgdHlwZSBjYXN0IGluc3RlYWQgb2YgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIC8vIFRoaXMgd2lsbCBzdGFydCB3aXRoIGEgdHlwZSBhc3NlcnRpb24gKHZpYSBwYXJzZU1heWJlVW5hcnkpLlxuICAvLyBCdXQgZG9uJ3QgZGlyZWN0bHkgY2FsbCBgdHNQYXJzZVR5cGVBc3NlcnRpb25gIGJlY2F1c2Ugd2Ugd2FudCB0byBoYW5kbGUgYW55IGJpbmFyeSBhZnRlciBpdC5cbiAgcmV0dXJuIF9leHByZXNzaW9uLmJhc2VQYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBub0luLCBpc1dpdGhpblBhcmVucyk7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduV2l0aG91dEpTWCA9IHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1g7XG5cbiBmdW5jdGlvbiB0c1BhcnNlQXJyb3coKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBob3cgdGhlIFRTIHBhcnNlciBkb2VzIGl0LlxuICAgIC8vIFRTIHVzZXMgbG9va2FoZWFkLiBCYWJ5bG9uIHBhcnNlcyBpdCBhcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBhbmQgY29udmVydHMuXG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICAgIGlmIChfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuXG4gICAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xufSBleHBvcnRzLnRzUGFyc2VBcnJvdyA9IHRzUGFyc2VBcnJvdztcblxuLy8gQWxsb3cgdHlwZSBhbm5vdGF0aW9ucyBpbnNpZGUgb2YgYSBwYXJhbWV0ZXIgbGlzdC5cbiBmdW5jdGlvbiB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgdHNUcnlQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn0gZXhwb3J0cy50c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMgPSB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXM7XG5cbiBmdW5jdGlvbiB0c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXRTaGlmdEwpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIF9zdGF0ZW1lbnQuYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzID0gdHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG5cblxuXG5cblxuXG5cblxuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyL2luZGV4Jyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuLi8uLi90cmF2ZXJzZXIvYmFzZScpO1xudmFyIF9leHByZXNzaW9uID0gcmVxdWlyZSgnLi4vLi4vdHJhdmVyc2VyL2V4cHJlc3Npb24nKTtcbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uLy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi8uLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4uL3R5cGVzY3JpcHQnKTtcblxuLyoqXG4gKiBSZWFkIHRva2VuIHdpdGggSlNYIGNvbnRlbnRzLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGRldGVjdGluZyBqc3hUYWdTdGFydCBhbmQgYWxzbyByZWd1bGFyIHRva2VucyB0aGF0IG1pZ2h0IGJlXG4gKiBwYXJ0IG9mIGFuIGV4cHJlc3Npb24sIHRoaXMgY29kZSBkZXRlY3RzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRleHQgcmFuZ2VzXG4gKiB3aXRoaW4gSlNYIGNoaWxkcmVuLiBJbiBvcmRlciB0byBwcm9wZXJseSBjb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLCB3ZVxuICogZGlzdGluZ3Vpc2gganN4VGV4dCBmcm9tIGpzeEVtcHR5VGV4dCwgd2hpY2ggaXMgYSB0ZXh0IHJhbmdlIHRoYXQgc2ltcGxpZmllc1xuICogdG8gdGhlIGVtcHR5IHN0cmluZyBhZnRlciBKU1ggd2hpdGVzcGFjZSB0cmltbWluZy5cbiAqXG4gKiBJdCB0dXJucyBvdXQgdGhhdCBhIEpTWCB0ZXh0IHJhbmdlIHdpbGwgc2ltcGxpZnkgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhbmRcbiAqIG9ubHkgaWYgYm90aCBvZiB0aGVzZSBjb25kaXRpb25zIGhvbGQ6XG4gKiAtIFRoZSByYW5nZSBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKG9ubHkgY291bnRpbmcgc3BhY2UsXG4gKiAgIHRhYiwgXFxyLCBhbmQgXFxuKS5cbiAqIC0gVGhlIHJhbmdlIGhhcyBhdCBsZWFzdCBvbmUgbmV3bGluZS5cbiAqIFRoaXMgY2FuIGJlIHByb3ZlbiBieSBhbmFseXppbmcgYW55IGltcGxlbWVudGF0aW9uIG9mIHdoaXRlc3BhY2UgdHJpbW1pbmcsXG4gKiBlLmcuIGZvcm1hdEpTWFRleHRMaXRlcmFsIGluIFN1Y3Jhc2Ugb3IgY2xlYW5KU1hFbGVtZW50TGl0ZXJhbENoaWxkIGluIEJhYmVsLlxuICovXG5mdW5jdGlvbiBqc3hSZWFkVG9rZW4oKSB7XG4gIGxldCBzYXdOZXdsaW5lID0gZmFsc2U7XG4gIGxldCBzYXdOb25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+PSBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50c1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxlc3NUaGFuIHx8IGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZSkge1xuICAgICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA9PT0gX2Jhc2Uuc3RhdGUuc3RhcnQpIHtcbiAgICAgICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZXNzVGhhbikge1xuICAgICAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9pbmRleC5nZXRUb2tlbkZyb21Db2RlLmNhbGwodm9pZCAwLCBjaCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzYXdOZXdsaW5lICYmICFzYXdOb25XaGl0ZXNwYWNlKSB7XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hFbXB0eVRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgcGFydCBvZiBKU1ggdGV4dC5cbiAgICBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBzYXdOZXdsaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGNoICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5zcGFjZSAmJiBjaCAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gJiYgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnRhYikge1xuICAgICAgc2F3Tm9uV2hpdGVzcGFjZSA9IHRydWU7XG4gICAgfVxuICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGpzeFJlYWRTdHJpbmcocXVvdGUpIHtcbiAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICB9XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpO1xufVxuXG4vLyBSZWFkIGEgSlNYIGlkZW50aWZpZXIgKHZhbGlkIHRhZyBvciBhdHRyaWJ1dGUgbmFtZSkuXG4vL1xuLy8gT3B0aW1pemVkIHZlcnNpb24gc2luY2UgSlNYIGlkZW50aWZpZXJzIGNhbid0IGNvbnRhaW5cbi8vIGVzY2FwZSBjaGFyYWN0ZXJzIGFuZCBzbyBjYW4gYmUgcmVhZCBhcyBzaW5nbGUgc2xpY2UuXG4vLyBBbHNvIGFzc3VtZXMgdGhhdCBmaXJzdCBjaGFyYWN0ZXIgd2FzIGFscmVhZHkgY2hlY2tlZFxuLy8gYnkgaXNJZGVudGlmaWVyU3RhcnQgaW4gcmVhZFRva2VuLlxuXG5mdW5jdGlvbiBqc3hSZWFkV29yZCgpIHtcbiAgbGV0IGNoO1xuICBkbyB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbmV4cGVjdGVkbHkgcmVhY2hlZCB0aGUgZW5kIG9mIGlucHV0LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KCsrX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfSB3aGlsZSAoX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW2NoXSB8fCBjaCA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaCk7XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lKTtcbn1cblxuLy8gUGFyc2UgbmV4dCB0b2tlbiBhcyBKU1ggaWRlbnRpZmllclxuZnVuY3Rpb24ganN4UGFyc2VJZGVudGlmaWVyKCkge1xuICBuZXh0SlNYVGFnVG9rZW4oKTtcbn1cblxuLy8gUGFyc2UgbmFtZXNwYWNlZCBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VOYW1lc3BhY2VkTmFtZShpZGVudGlmaWVyUm9sZSkge1xuICBqc3hQYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIC8vIFBsYWluIGlkZW50aWZpZXIsIHNvIHRoaXMgaXMgYW4gYWNjZXNzLlxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUHJvY2VzcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIG5hbWVzcGFjZWQgbmFtZS5cbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbi8vIFBhcnNlcyBlbGVtZW50IG5hbWUgaW4gYW55IGZvcm0gLSBuYW1lc3BhY2VkLCBtZW1iZXJcbi8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50TmFtZSgpIHtcbiAgY29uc3QgZmlyc3RUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShfaW5kZXguSWRlbnRpZmllclJvbGUuQWNjZXNzKTtcbiAgbGV0IGhhZERvdCA9IGZhbHNlO1xuICB3aGlsZSAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICBoYWREb3QgPSB0cnVlO1xuICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgIGpzeFBhcnNlSWRlbnRpZmllcigpO1xuICB9XG4gIC8vIEZvciB0YWdzIGxpa2UgPGRpdj4gd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgYW5kIG5vIGRvdHMsIHRoZSBuYW1lIGlzXG4gIC8vIGFjdHVhbGx5ICpub3QqIGFuIGlkZW50aWZpZXIgYWNjZXNzLCBzaW5jZSBpdCdzIHJlZmVycmluZyB0byBhIGJ1aWx0LWluXG4gIC8vIHRhZyBuYW1lLiBSZW1vdmUgdGhlIGlkZW50aWZpZXIgcm9sZSBpbiB0aGlzIGNhc2Ugc28gdGhhdCBpdCdzIG5vdFxuICAvLyBhY2NpZGVudGFsbHkgdHJhbnNmb3JtZWQgYnkgdGhlIGltcG9ydHMgdHJhbnNmb3JtIHdoZW4gcHJlc2VydmluZyBKU1guXG4gIGlmICghaGFkRG90KSB7XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IF9iYXNlLnN0YXRlLnRva2Vuc1tmaXJzdFRva2VuSW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoZmlyc3RUb2tlbi5zdGFydCk7XG4gICAgaWYgKGZpcnN0Q2hhciA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGZpcnN0Q2hhciA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VaKSB7XG4gICAgICBmaXJzdFRva2VuLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5mdW5jdGlvbiBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCkge1xuICBzd2l0Y2ggKF9iYXNlLnN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydDpcbiAgICAgIGpzeFBhcnNlRWxlbWVudCgpO1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nOlxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJKU1ggdmFsdWUgc2hvdWxkIGJlIGVpdGhlciBhbiBleHByZXNzaW9uIG9yIGEgcXVvdGVkIEpTWCB0ZXh0XCIpO1xuICB9XG59XG5cbi8vIFBhcnNlIEpTWCBzcHJlYWQgY2hpbGQsIGFmdGVyIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUge1xuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGNsb3NpbmcgfVxuZnVuY3Rpb24ganN4UGFyc2VTcHJlYWRDaGlsZCgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xufVxuXG4vLyBQYXJzZXMgSlNYIG9wZW5pbmcgdGFnIHN0YXJ0aW5nIGFmdGVyIFwiPFwiLlxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0YWcgd2FzIHNlbGYtY2xvc2luZy5cbi8vIERvZXMgbm90IHBhcnNlIHRoZSBsYXN0IHRva2VuLlxuZnVuY3Rpb24ganN4UGFyc2VPcGVuaW5nRWxlbWVudChpbml0aWFsVG9rZW5JbmRleCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZW4tZnJhZ21lbnQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlSlNYVHlwZUFyZ3VtZW50LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGxldCBoYXNTZWVuUHJvcFNwcmVhZCA9IGZhbHNlO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zbGFzaCkgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIGhhc1NlZW5Qcm9wU3ByZWFkID0gdHJ1ZTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCApO1xuICAgICAgLy8gfVxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaGFzU2VlblByb3BTcHJlYWQgJiZcbiAgICAgIF9iYXNlLnN0YXRlLmVuZCAtIF9iYXNlLnN0YXRlLnN0YXJ0ID09PSAzICYmXG4gICAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnN0YXJ0KSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlSyAmJlxuICAgICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5zdGFydCArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VFICYmXG4gICAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnN0YXJ0ICsgMikgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZVlcbiAgICApIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IF9pbmRleC5KU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZDtcbiAgICB9XG4gICAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShfaW5kZXguSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5KTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGlzU2VsZkNsb3NpbmcgPSBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpO1xuICBpZiAoaXNTZWxmQ2xvc2luZykge1xuICAgIC8vIC9cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgfVxuICByZXR1cm4gaXNTZWxmQ2xvc2luZztcbn1cblxuLy8gUGFyc2VzIEpTWCBjbG9zaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjwvXCIuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlQ2xvc2luZ0VsZW1lbnQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgIC8vIEZyYWdtZW50IHN5bnRheCwgc28gd2UgaW1tZWRpYXRlbHkgaGF2ZSBhIHRhZyBlbmQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbn1cblxuLy8gUGFyc2VzIGVudGlyZSBKU1ggZWxlbWVudCwgaW5jbHVkaW5nIGl0cyBvcGVuaW5nIHRhZ1xuLy8gKHN0YXJ0aW5nIGFmdGVyIFwiPFwiKSwgYXR0cmlidXRlcywgY29udGVudHMgYW5kIGNsb3NpbmcgdGFnLlxuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGxhc3QgdG9rZW4uXG5mdW5jdGlvbiBqc3hQYXJzZUVsZW1lbnRBdCgpIHtcbiAgY29uc3QgaW5pdGlhbFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlID0gX2luZGV4LkpTWFJvbGUuTm9DaGlsZHJlbjtcbiAgbGV0IG51bUV4cGxpY2l0Q2hpbGRyZW4gPSAwO1xuICBjb25zdCBpc1NlbGZDbG9zaW5nID0ganN4UGFyc2VPcGVuaW5nRWxlbWVudChpbml0aWFsVG9rZW5JbmRleCk7XG4gIGlmICghaXNTZWxmQ2xvc2luZykge1xuICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydDpcbiAgICAgICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNsYXNoKSkge1xuICAgICAgICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICBqc3hQYXJzZUNsb3NpbmdFbGVtZW50KCk7XG4gICAgICAgICAgICAvLyBLZXkgYWZ0ZXIgcHJvcCBzcHJlYWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG51bWJlciBvZiBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIHN3aXRjaCB0byBjcmVhdGVFbGVtZW50LCB3aGljaCBkb2Vzbid0IGNhcmVcbiAgICAgICAgICAgIC8vIGFib3V0IG51bWJlciBvZiBjaGlsZHJlbi5cbiAgICAgICAgICAgIGlmIChfYmFzZS5zdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgIT09IF9pbmRleC5KU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZCkge1xuICAgICAgICAgICAgICBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IF9pbmRleC5KU1hSb2xlLk9uZUNoaWxkO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bUV4cGxpY2l0Q2hpbGRyZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlID0gX2luZGV4LkpTWFJvbGUuU3RhdGljQ2hpbGRyZW47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbisrO1xuICAgICAgICAgIGpzeFBhcnNlRWxlbWVudEF0KCk7XG4gICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUZXh0OlxuICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4rKztcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmpzeEVtcHR5VGV4dDpcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgICAgICAgICAganN4UGFyc2VTcHJlYWRDaGlsZCgpO1xuICAgICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgICAgLy8gU3ByZWFkIGNoaWxkcmVuIGFyZSBhIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5IG1hcmsgY2hpbGRyZW4gYXNcbiAgICAgICAgICAgIC8vIHN0YXRpYywgc28gY291bnQgaXQgYXMgMiBjaGlsZHJlbiB0byBzYXRpc2Z5IHRoZSBcIm1vcmUgdGhhbiBvbmVcbiAgICAgICAgICAgIC8vIGNoaWxkXCIgY29uZGl0aW9uLlxuICAgICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbiArPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBzZWUge30sIHRoaXMgaXMgYW4gZW1wdHkgcHNldWRvLWV4cHJlc3Npb24gdGhhdCBkb2Vzbid0XG4gICAgICAgICAgICAvLyBjb3VudCBhcyBhIGNoaWxkLlxuICAgICAgICAgICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICAgICAgICBudW1FeHBsaWNpdENoaWxkcmVuKys7XG4gICAgICAgICAgICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGVudGlyZSBKU1ggZWxlbWVudCBmcm9tIGN1cnJlbnQgcG9zaXRpb24uXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbiBmdW5jdGlvbiBqc3hQYXJzZUVsZW1lbnQoKSB7XG4gIG5leHRKU1hUYWdUb2tlbigpO1xuICBqc3hQYXJzZUVsZW1lbnRBdCgpO1xufSBleHBvcnRzLmpzeFBhcnNlRWxlbWVudCA9IGpzeFBhcnNlRWxlbWVudDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3ZlcnJpZGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiBmdW5jdGlvbiBuZXh0SlNYVGFnVG9rZW4oKSB7XG4gIF9iYXNlLnN0YXRlLnRva2Vucy5wdXNoKG5ldyAoMCwgX2luZGV4LlRva2VuKSgpKTtcbiAgX2luZGV4LnNraXBTcGFjZS5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUuc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGNvbnN0IGNvZGUgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG5cbiAgaWYgKF9pZGVudGlmaWVyLklTX0lERU5USUZJRVJfU1RBUlRbY29kZV0pIHtcbiAgICBqc3hSZWFkV29yZCgpO1xuICB9IGVsc2UgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnF1b3RhdGlvbk1hcmsgfHwgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXBvc3Ryb3BoZSkge1xuICAgIGpzeFJlYWRTdHJpbmcoY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIGp1c3Qgb25lIGNoYXJhY3RlciBlYWNoLlxuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmVhdGVyVGhhbjpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZXNzVGhhbjpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnNsYXNoOlxuICAgICAgICBfaW5kZXguZmluaXNoVG9rZW4uY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG86XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZTpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3Q6XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY29sb246XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5uZXh0SlNYVGFnVG9rZW4gPSBuZXh0SlNYVGFnVG9rZW47XG5cbmZ1bmN0aW9uIG5leHRKU1hFeHByVG9rZW4oKSB7XG4gIF9iYXNlLnN0YXRlLnRva2Vucy5wdXNoKG5ldyAoMCwgX2luZGV4LlRva2VuKSgpKTtcbiAgX2Jhc2Uuc3RhdGUuc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGpzeFJlYWRUb2tlbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG52YXIgX2Zsb3cgPSByZXF1aXJlKCcuL2Zsb3cnKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4vdHlwZXNjcmlwdCcpO1xuXG4vKipcbiAqIENvbW1vbiBwYXJzZXIgY29kZSBmb3IgVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuXG4vLyBBbiBhcHBhcmVudCBjb25kaXRpb25hbCBleHByZXNzaW9uIGNvdWxkIGFjdHVhbGx5IGJlIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiBhbiBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbikge1xuICAvLyBJZiB3ZSBzZWUgPzosIHRoaXMgY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBjb25kaXRpb25hbC4gdHlwZWRQYXJzZVBhcmVuSXRlbSB3aWxsIGJlIGNhbGxlZFxuICAvLyBsYXRlciB0byBmaW5pc2ggb2ZmIHRoZSBhcnJvdyBwYXJhbWV0ZXIuIFdlIGFsc28gbmVlZCB0byBoYW5kbGUgYmFyZSA/IHRva2VucyBmb3Igb3B0aW9uYWxcbiAgLy8gcGFyYW1ldGVycyB3aXRob3V0IHR5cGUgYW5ub3RhdGlvbnMsIGkuZS4gPywgYW5kID8pIC5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikpIHtcbiAgICBjb25zdCBuZXh0VHlwZSA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgIGlmIChuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbiB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb21tYSB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2V4cHJlc3Npb24uYmFzZVBhcnNlQ29uZGl0aW9uYWwuY2FsbCh2b2lkIDAsIG5vSW4pO1xufSBleHBvcnRzLnR5cGVkUGFyc2VDb25kaXRpb25hbCA9IHR5cGVkUGFyc2VDb25kaXRpb25hbDtcblxuLy8gTm90ZTogVGhlc2UgXCJ0eXBlIGNhc3RzXCIgYXJlICpub3QqIHZhbGlkIFRTIGV4cHJlc3Npb25zLlxuLy8gQnV0IHdlIHBhcnNlIHRoZW0gaGVyZSBhbmQgY2hhbmdlIHRoZW0gd2hlbiBjb21wbGV0aW5nIHRoZSBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiB0eXBlZFBhcnNlUGFyZW5JdGVtKCkge1xuICBfaW5kZXguZWF0VHlwZVRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgICAgX3R5cGVzY3JpcHQudHNQYXJzZVR5cGVBbm5vdGF0aW9uLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMudHlwZWRQYXJzZVBhcmVuSXRlbSA9IHR5cGVkUGFyc2VQYXJlbkl0ZW07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG4vLyBBIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciBvcGVyYXRlcyBieSBkZWZpbmluZyBmdW5jdGlvbnMgZm9yIGFsbFxuLy8gc3ludGFjdGljIGVsZW1lbnRzLCBhbmQgcmVjdXJzaXZlbHkgY2FsbGluZyB0aG9zZSwgZWFjaCBmdW5jdGlvblxuLy8gYWR2YW5jaW5nIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHJldHVybmluZyBhbiBBU1Qgbm9kZS4gUHJlY2VkZW5jZVxuLy8gb2YgY29uc3RydWN0cyAoZm9yIGV4YW1wbGUsIHRoZSBmYWN0IHRoYXQgYCF4WzFdYCBtZWFucyBgISh4WzFdKWBcbi8vIGluc3RlYWQgb2YgYCgheClbMV1gIGlzIGhhbmRsZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2VyXG4vLyBmdW5jdGlvbiB0aGF0IHBhcnNlcyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzIGlzIGNhbGxlZCBmaXJzdCwgYW5kXG4vLyBpbiB0dXJuIGNhbGxzIHRoZSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBgW11gIHN1YnNjcmlwdHMgXHUyMDE0IHRoYXRcbi8vIHdheSwgaXQnbGwgcmVjZWl2ZSB0aGUgbm9kZSBmb3IgYHhbMV1gIGFscmVhZHkgcGFyc2VkLCBhbmQgd3JhcHNcbi8vICp0aGF0KiBpbiB0aGUgdW5hcnkgb3BlcmF0b3Igbm9kZS5cbi8vXG4vLyBBY29ybiB1c2VzIGFuIFtvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNlcl1bb3BwXSB0byBoYW5kbGUgYmluYXJ5XG4vLyBvcGVyYXRvciBwcmVjZWRlbmNlLCBiZWNhdXNlIGl0IGlzIG11Y2ggbW9yZSBjb21wYWN0IHRoYW4gdXNpbmdcbi8vIHRoZSB0ZWNobmlxdWUgb3V0bGluZWQgYWJvdmUsIHdoaWNoIHVzZXMgZGlmZmVyZW50LCBuZXN0aW5nXG4vLyBmdW5jdGlvbnMgdG8gc3BlY2lmeSBwcmVjZWRlbmNlLCBmb3IgYWxsIG9mIHRoZSB0ZW4gYmluYXJ5XG4vLyBwcmVjZWRlbmNlIGxldmVscyB0aGF0IEphdmFTY3JpcHQgZGVmaW5lcy5cbi8vXG4vLyBbb3BwXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVyYXRvci1wcmVjZWRlbmNlX3BhcnNlclxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZmxvdyA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvZmxvdycpO1xudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvanN4L2luZGV4Jyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGx1Z2lucy90eXBlcycpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIF90eXBlc2NyaXB0ID0gcmVxdWlyZSgnLi4vcGx1Z2lucy90eXBlc2NyaXB0Jyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgX2luZGV4MyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF9zdGF0ZSA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9zdGF0ZScpO1xudmFyIF90eXBlczMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfaWRlbnRpZmllciA9IHJlcXVpcmUoJy4uL3V0aWwvaWRlbnRpZmllcicpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5cblxuXG5cblxuXG52YXIgX2x2YWwgPSByZXF1aXJlKCcuL2x2YWwnKTtcblxuXG5cblxuXG5cblxudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuL3N0YXRlbWVudCcpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBjbGFzcyBTdG9wU3RhdGUge1xuICBcbiAgY29uc3RydWN0b3Ioc3RvcCkge1xuICAgIHRoaXMuc3RvcCA9IHN0b3A7XG4gIH1cbn0gZXhwb3J0cy5TdG9wU3RhdGUgPSBTdG9wU3RhdGU7XG5cbi8vICMjIyBFeHByZXNzaW9uIHBhcnNpbmdcblxuLy8gVGhlc2UgbmVzdCwgZnJvbSB0aGUgbW9zdCBnZW5lcmFsIGV4cHJlc3Npb24gdHlwZSBhdCB0aGUgdG9wIHRvXG4vLyAnYXRvbWljJywgbm9uZGl2aXNpYmxlIGV4cHJlc3Npb24gdHlwZXMgYXQgdGhlIGJvdHRvbS4gTW9zdCBvZlxuLy8gdGhlIGZ1bmN0aW9ucyB3aWxsIHNpbXBseSBsZXQgdGhlIGZ1bmN0aW9uIChzKSBiZWxvdyB0aGVtIHBhcnNlLFxuLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXBcbi8vIHRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBpbm5lciBwYXJzZXIgZ2F2ZSB0aGVtIGluIGFub3RoZXIgbm9kZS5cbiBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24obm9JbiA9IGZhbHNlKSB7XG4gIHBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICB3aGlsZSAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb247XG5cbi8qKlxuICogbm9JbiBpcyB1c2VkIHdoZW4gcGFyc2luZyBhIGZvciBsb29wIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJwcmV0IGEgZm9sbG93aW5nIFwiaW5cIiBhcyB0aGUgYmluYXJ5XG4gKiBvcGVyYXRpb3IuXG4gKiBpc1dpdGhpblBhcmVucyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UncmUgcGFyc2luZyBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBhIGNvbW1hIGV4cHJlc3Npb25cbiAqIG9yIG1pZ2h0IGJlIGFuIGFycm93IGZ1bmN0aW9uIG9yIG1pZ2h0IGJlIGEgRmxvdyB0eXBlIGFzc2VydGlvbiAod2hpY2ggcmVxdWlyZXMgZXhwbGljaXQgcGFyZW5zKS5cbiAqIEluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgYWxsb3cgOiBhbmQgPzogYWZ0ZXIgdGhlIGluaXRpYWwgXCJsZWZ0XCIgcGFydC5cbiAqL1xuIGZ1bmN0aW9uIHBhcnNlTWF5YmVBc3NpZ24obm9JbiA9IGZhbHNlLCBpc1dpdGhpblBhcmVucyA9IGZhbHNlKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgcmV0dXJuIF90eXBlc2NyaXB0LnRzUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gX2Zsb3cuZmxvd1BhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59IGV4cG9ydHMucGFyc2VNYXliZUFzc2lnbiA9IHBhcnNlTWF5YmVBc3NpZ247XG5cbi8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2Zcbi8vIG9wZXJhdG9ycyBsaWtlIGArPWAuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuIGZ1bmN0aW9uIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5feWllbGQpKSB7XG4gICAgcGFyc2VZaWVsZCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm5hbWUpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLl95aWVsZCkpIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlTWF5YmVDb25kaXRpb25hbChub0luKTtcbiAgaWYgKGlzV2l0aGluUGFyZW5zKSB7XG4gICAgcGFyc2VQYXJlbkl0ZW0oKTtcbiAgfVxuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLklTX0FTU0lHTikge1xuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gd2FzQXJyb3c7XG59IGV4cG9ydHMuYmFzZVBhcnNlTWF5YmVBc3NpZ24gPSBiYXNlUGFyc2VNYXliZUFzc2lnbjtcblxuLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVyYXRvci5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhwcmVzc2lvbiB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG5mdW5jdGlvbiBwYXJzZU1heWJlQ29uZGl0aW9uYWwobm9Jbikge1xuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwck9wcyhub0luKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VDb25kaXRpb25hbChub0luKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgfHwgX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF90eXBlcy50eXBlZFBhcnNlQ29uZGl0aW9uYWwuY2FsbCh2b2lkIDAsIG5vSW4pO1xuICB9IGVsc2Uge1xuICAgIGJhc2VQYXJzZUNvbmRpdGlvbmFsKG5vSW4pO1xuICB9XG59XG5cbiBmdW5jdGlvbiBiYXNlUGFyc2VDb25kaXRpb25hbChub0luKSB7XG4gIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29sb24pO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gIH1cbn0gZXhwb3J0cy5iYXNlUGFyc2VDb25kaXRpb25hbCA9IGJhc2VQYXJzZUNvbmRpdGlvbmFsO1xuXG4vLyBTdGFydCB0aGUgcHJlY2VkZW5jZSBwYXJzZXIuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb25cbmZ1bmN0aW9uIHBhcnNlRXhwck9wcyhub0luKSB7XG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VNYXliZVVuYXJ5KCk7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgLTEsIG5vSW4pO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFBhcnNlIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzaW5nXG4vLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLlxuLy8gYG1pblByZWNgIHByb3ZpZGVzIGNvbnRleHQgdGhhdCBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIHN0b3AgYW5kXG4vLyBkZWZlciBmdXJ0aGVyIHBhcnNlciB0byBvbmUgb2YgaXRzIGNhbGxlcnMgd2hlbiBpdCBlbmNvdW50ZXJzIGFuXG4vLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0aGUgc2V0IGl0IGlzIHBhcnNpbmcuXG5mdW5jdGlvbiBwYXJzZUV4cHJPcChzdGFydFRva2VuSW5kZXgsIG1pblByZWMsIG5vSW4pIHtcbiAgaWYgKFxuICAgIF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiZcbiAgICAoX3R5cGVzMy5Ub2tlblR5cGUuX2luICYgX3R5cGVzMy5Ub2tlblR5cGUuUFJFQ0VERU5DRV9NQVNLKSA+IG1pblByZWMgJiZcbiAgICAhX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApICYmXG4gICAgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMpIHx8IF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2F0aXNmaWVzKSlcbiAgKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4My5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgIF90eXBlc2NyaXB0LnRzUGFyc2VUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgIF9pbmRleDMucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgX2luZGV4My5yZXNjYW5fZ3QuY2FsbCh2b2lkIDAsICk7XG4gICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcmVjID0gX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLlBSRUNFREVOQ0VfTUFTSztcbiAgaWYgKHByZWMgPiAwICYmICghbm9JbiB8fCAhX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2luKSkpIHtcbiAgICBpZiAocHJlYyA+IG1pblByZWMpIHtcbiAgICAgIGNvbnN0IG9wID0gX2Jhc2Uuc3RhdGUudHlwZTtcbiAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChvcCA9PT0gX3R5cGVzMy5Ub2tlblR5cGUubnVsbGlzaENvYWxlc2NpbmcpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5udWxsaXNoU3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmhzU3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIHBhcnNlTWF5YmVVbmFyeSgpO1xuICAgICAgLy8gRXh0ZW5kIHRoZSByaWdodCBvcGVyYW5kIG9mIHRoaXMgb3BlcmF0b3IgaWYgcG9zc2libGUuXG4gICAgICBwYXJzZUV4cHJPcChyaHNTdGFydFRva2VuSW5kZXgsIG9wICYgX3R5cGVzMy5Ub2tlblR5cGUuSVNfUklHSFRfQVNTT0NJQVRJVkUgPyBwcmVjIC0gMSA6IHByZWMsIG5vSW4pO1xuICAgICAgaWYgKG9wID09PSBfdHlwZXMzLlRva2VuVHlwZS5udWxsaXNoQ29hbGVzY2luZykge1xuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbc3RhcnRUb2tlbkluZGV4XS5udW1OdWxsaXNoQ29hbGVzY2VTdGFydHMrKztcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5udW1OdWxsaXNoQ29hbGVzY2VFbmRzKys7XG4gICAgICB9XG4gICAgICAvLyBDb250aW51ZSB3aXRoIGFueSBmdXR1cmUgb3BlcmF0b3IgaG9sZGluZyB0aGlzIGV4cHJlc3Npb24gYXMgdGhlIGxlZnQgb3BlcmFuZC5cbiAgICAgIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgbWluUHJlYywgbm9Jbik7XG4gICAgfVxuICB9XG59XG5cbi8vIFBhcnNlIHVuYXJ5IG9wZXJhdG9ycywgYm90aCBwcmVmaXggYW5kIHBvc3RmaXguXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG4gZnVuY3Rpb24gcGFyc2VNYXliZVVuYXJ5KCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiAhX2Jhc2UuaXNKU1hFbmFibGVkICYmIF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlVHlwZUFzc2VydGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmXG4gICAgX2luZGV4My5sb29rYWhlYWRDaGFyQ29kZS5jYWxsKHZvaWQgMCwgKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UgJiZcbiAgICAhX3V0aWwuaGFzRm9sbG93aW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApXG4gICkge1xuICAgIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLklTX1BSRUZJWCkge1xuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMzLlRva2VuVHlwZS5JU19QT1NURklYICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAvLyBUaGUgdG9rZW5pemVyIGNhbGxzIGV2ZXJ5dGhpbmcgYSBwcmVpbmNyZW1lbnQsIHNvIG1ha2UgaXQgYSBwb3N0aW5jcmVtZW50IHdoZW5cbiAgICAvLyB3ZSBzZWUgaXQgaW4gdGhhdCBjb250ZXh0LlxuICAgIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMzLlRva2VuVHlwZS5wcmVJbmNEZWMpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnR5cGUgPSBfdHlwZXMzLlRva2VuVHlwZS5wb3N0SW5jRGVjO1xuICAgIH1cbiAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnBhcnNlTWF5YmVVbmFyeSA9IHBhcnNlTWF5YmVVbmFyeTtcblxuLy8gUGFyc2UgY2FsbCwgZG90LCBhbmQgYFtdYC1zdWJzY3JpcHQgZXhwcmVzc2lvbnMuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG4gZnVuY3Rpb24gcGFyc2VFeHByU3Vic2NyaXB0cygpIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUV4cHJBdG9tKCk7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgpO1xuICAvLyBJZiB0aGVyZSB3YXMgYW55IG9wdGlvbmFsIGNoYWluIG9wZXJhdGlvbiwgdGhlIHN0YXJ0IHRva2VuIHdvdWxkIGJlIG1hcmtlZFxuICAvLyBhcyBzdWNoLCBzbyBhbHNvIG1hcmsgdGhlIGVuZCBub3cuXG4gIGlmIChfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoID4gc3RhcnRUb2tlbkluZGV4ICYmIF9iYXNlLnN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc09wdGlvbmFsQ2hhaW5FbmQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5wYXJzZUV4cHJTdWJzY3JpcHRzID0gcGFyc2VFeHByU3Vic2NyaXB0cztcblxuZnVuY3Rpb24gcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyA9IGZhbHNlKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlU3Vic2NyaXB0cy5jYWxsKHZvaWQgMCwgc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGJhc2VQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgY29uc3Qgc3RvcFN0YXRlID0gbmV3IFN0b3BTdGF0ZShmYWxzZSk7XG4gIGRvIHtcbiAgICBwYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG4gIH0gd2hpbGUgKCFzdG9wU3RhdGUuc3RvcCAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpO1xufSBleHBvcnRzLmJhc2VQYXJzZVN1YnNjcmlwdHMgPSBiYXNlUGFyc2VTdWJzY3JpcHRzO1xuXG5mdW5jdGlvbiBwYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzUGFyc2VTdWJzY3JpcHQuY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlU3Vic2NyaXB0LmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfVxufVxuXG4vKiogU2V0ICdzdGF0ZS5zdG9wID0gdHJ1ZScgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgc3RvcCBwYXJzaW5nIHN1YnNjcmlwdHMuICovXG4gZnVuY3Rpb24gYmFzZVBhcnNlU3Vic2NyaXB0KFxuICBzdGFydFRva2VuSW5kZXgsXG4gIG5vQ2FsbHMsXG4gIHN0b3BTdGF0ZSxcbikge1xuICBpZiAoIW5vQ2FsbHMgJiYgX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdWJsZUNvbG9uKSkge1xuICAgIHBhcnNlTm9DYWxsRXhwcigpO1xuICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAvLyBQcm9wYWdhdGUgc3RhcnRUb2tlbkluZGV4IHNvIHRoYXQgYGE6OmI/LigpYCB3aWxsIGtlZXAgYGFgIGFzIHRoZSBmaXJzdCB0b2tlbi4gV2UgbWF5IHdhbnRcbiAgICAvLyB0byByZXZpc2l0IHRoaXMgaW4gdGhlIGZ1dHVyZSB3aGVuIGZ1bGx5IHN1cHBvcnRpbmcgYmluZCBzeW50YXguXG4gICAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQgPSB0cnVlO1xuICAgIGlmIChub0NhbGxzICYmIF9pbmRleDMubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5MKSB7XG4gICAgICBzdG9wU3RhdGUuc3RvcCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG5cbiAgICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICB9IGVsc2UgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZG90KSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgfSBlbHNlIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldFIpO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICBpZiAoYXRQb3NzaWJsZUFzeW5jKCkpIHtcbiAgICAgIC8vIFdlIHNlZSBcImFzeW5jXCIsIGJ1dCBpdCdzIHBvc3NpYmxlIGl0J3MgYSB1c2FnZSBvZiB0aGUgbmFtZSBcImFzeW5jXCIuIFBhcnNlIGFzIGlmIGl0J3MgYVxuICAgICAgLy8gZnVuY3Rpb24gY2FsbCwgYW5kIGlmIHdlIHNlZSBhbiBhcnJvdyBsYXRlciwgYmFja3RyYWNrIGFuZCByZS1wYXJzZSBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICAgICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgY29uc3QgYXN5bmNTdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gX2Jhc2UuZ2V0TmV4dENvbnRleHRJZC5jYWxsKHZvaWQgMCwgKTtcblxuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuXG4gICAgICBpZiAoc2hvdWxkUGFyc2VBc3luY0Fycm93KCkpIHtcbiAgICAgICAgLy8gV2UgaGl0IGFuIGFycm93LCBzbyBiYWNrdHJhY2sgYW5kIHN0YXJ0IGFnYWluIHBhcnNpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAgICAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCsrO1xuXG4gICAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgcGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKGFzeW5jU3RhcnRUb2tlbkluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgICAgY29uc3QgY2FsbENvbnRleHRJZCA9IF9iYXNlLmdldE5leHRDb250ZXh0SWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJhY2tRdW90ZSkpIHtcbiAgICAvLyBUYWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbi5cbiAgICBwYXJzZVRlbXBsYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICB9XG59IGV4cG9ydHMuYmFzZVBhcnNlU3Vic2NyaXB0ID0gYmFzZVBhcnNlU3Vic2NyaXB0O1xuXG4gZnVuY3Rpb24gYXRQb3NzaWJsZUFzeW5jKCkge1xuICAvLyBUaGlzIHdhcyBtYWRlIGxlc3Mgc3RyaWN0IHRoYW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gdG8gYXZvaWQgcGFzc2luZyBhcm91bmQgbm9kZXMsIGJ1dCBpdFxuICAvLyBzaG91bGQgYmUgc2FmZSB0byBoYXZlIHJhcmUgZmFsc2UgcG9zaXRpdmVzIGhlcmUuXG4gIHJldHVybiAoXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsIClcbiAgKTtcbn0gZXhwb3J0cy5hdFBvc3NpYmxlQXN5bmMgPSBhdFBvc3NpYmxlQXN5bmM7XG5cbiBmdW5jdGlvbiBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIV9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VFeHByTGlzdEl0ZW0oZmFsc2UpO1xuICB9XG59IGV4cG9ydHMucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cyA9IHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHM7XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlQXN5bmNBcnJvdygpIHtcbiAgcmV0dXJuIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbG9uKSB8fCBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG4gIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG59XG5cbi8vIFBhcnNlIGEgbm8tY2FsbCBleHByZXNzaW9uIChsaWtlIGFyZ3VtZW50IG9mIGBuZXdgIG9yIGA6OmAgb3BlcmF0b3JzKS5cblxuZnVuY3Rpb24gcGFyc2VOb0NhbGxFeHByKCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBwYXJzZUV4cHJBdG9tKCk7XG4gIHBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIHRydWUpO1xufVxuXG4vLyBQYXJzZSBhbiBhdG9taWMgZXhwcmVzc2lvbiBcdTIwMTQgZWl0aGVyIGEgc2luZ2xlIHRva2VuIHRoYXQgaXMgYW5cbi8vIGV4cHJlc3Npb24sIGFuIGV4cHJlc3Npb24gc3RhcnRlZCBieSBhIGtleXdvcmQgbGlrZSBgZnVuY3Rpb25gIG9yXG4vLyBgbmV3YCwgb3IgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCxcbi8vIG9yIGB7fWAuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNlZCBleHByZXNzaW9uIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiBwYXJzZUV4cHJBdG9tKCkge1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm1vZHVsbykpIHtcbiAgICAvLyBWOCBpbnRyaW5zaWMgZXhwcmVzc2lvbi4gSnVzdCBwYXJzZSB0aGUgaWRlbnRpZmllciwgYW5kIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGlzIHBhcnNlZFxuICAgIC8vIG5hdHVyYWxseS5cbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuanN4VGV4dCkgfHwgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuanN4RW1wdHlUZXh0KSkge1xuICAgIHBhcnNlTGl0ZXJhbCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5sZXNzVGhhbikgJiYgX2Jhc2UuaXNKU1hFbmFibGVkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9IF90eXBlczMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0O1xuICAgIF9pbmRleC5qc3hQYXJzZUVsZW1lbnQuY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbkJlQXJyb3cgPSBfYmFzZS5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID09PSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5zbGFzaDpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLmFzc2lnbjpcbiAgICAgIF9pbmRleDMucmV0b2tlbml6ZVNsYXNoQXNSZWdleC5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9zdXBlcjpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl90aGlzOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUucmVnZXhwOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUubnVtOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYmlnaW50OlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuZGVjaW1hbDpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLnN0cmluZzpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9udWxsOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuX3RydWU6XG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fZmFsc2U6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9pbXBvcnQ6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgICAvLyBpbXBvcnQubWV0YVxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMzLlRva2VuVHlwZS5uYW1lO1xuICAgICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5uYW1lOiB7XG4gICAgICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSB7XG4gICAgICAgIHBhcnNlQXdhaXQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiZcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSAmJlxuICAgICAgICAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApXG4gICAgICApIHtcbiAgICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb24uY2FsbCh2b2lkIDAsIGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2FuQmVBcnJvdyAmJlxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgICAgICAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApICYmXG4gICAgICAgIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm5hbWUpXG4gICAgICApIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCsrO1xuICAgICAgICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gICAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYXJyb3cpO1xuICAgICAgICAvLyBsZXQgZm9vID0gYXN5bmMgYmFyID0+IHt9O1xuICAgICAgICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2RvKSAmJiAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgX3N0YXRlbWVudC5wYXJzZUJsb2NrLmNhbGwodm9pZCAwLCApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5CZUFycm93ICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYXJyb3cpKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgX2x2YWwubWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIuY2FsbCh2b2lkIDAsIGZhbHNlKTtcbiAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG4gICAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gX2luZGV4My5JZGVudGlmaWVyUm9sZS5BY2Nlc3M7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fZG86IHtcbiAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VCbG9jay5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTDoge1xuICAgICAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uKGNhbkJlQXJyb3cpO1xuICAgICAgcmV0dXJuIHdhc0Fycm93O1xuICAgIH1cblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldEw6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUV4cHJMaXN0KF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSLCB0cnVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgcGFyc2VPYmooZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuX2Z1bmN0aW9uOlxuICAgICAgcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYXQ6XG4gICAgICBfc3RhdGVtZW50LnBhcnNlRGVjb3JhdG9ycy5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9jbGFzczpcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VDbGFzcy5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fbmV3OlxuICAgICAgcGFyc2VOZXcoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgcGFyc2VUZW1wbGF0ZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5kb3VibGVDb2xvbjoge1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgcGFyc2VOb0NhbGxFeHByKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5oYXNoOiB7XG4gICAgICBjb25zdCBjb2RlID0gX2luZGV4My5sb29rYWhlYWRDaGFyQ29kZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChfaWRlbnRpZmllci5JU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8IGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmJhY2tzbGFzaCkge1xuICAgICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIH1cbiAgICAgIC8vIFNtYXJ0IHBpcGVsaW5lIHRvcGljIHJlZmVyZW5jZS5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLnBhcnNlRXhwckF0b20gPSBwYXJzZUV4cHJBdG9tO1xuXG5mdW5jdGlvbiBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKSB7XG4gIF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5oYXNoKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICBjb25zdCBmdW5jdGlvblN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAvLyBmdW5jdGlvbi5zZW50XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH1cbiAgX3N0YXRlbWVudC5wYXJzZUZ1bmN0aW9uLmNhbGwodm9pZCAwLCBmdW5jdGlvblN0YXJ0LCBmYWxzZSk7XG59XG5cbiBmdW5jdGlvbiBwYXJzZUxpdGVyYWwoKSB7XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUxpdGVyYWwgPSBwYXJzZUxpdGVyYWw7XG5cbiBmdW5jdGlvbiBwYXJzZVBhcmVuRXhwcmVzc2lvbigpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpO1xufSBleHBvcnRzLnBhcnNlUGFyZW5FeHByZXNzaW9uID0gcGFyc2VQYXJlbkV4cHJlc3Npb247XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBleHByZXNzaW9uLlxuZnVuY3Rpb24gcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KSB7XG4gIC8vIEFzc3VtZSB0aGlzIGlzIGEgbm9ybWFsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiwgYnV0IGlmIHdlIHNlZSBhbiBhcnJvdywgd2UnbGwgYmFpbCBhbmRcbiAgLy8gc3RhcnQgb3ZlciBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG5cbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpO1xuXG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgd2hpbGUgKCFfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBfbHZhbC5wYXJzZVJlc3QuY2FsbCh2b2lkIDAsIGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gICAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5SKTtcblxuICBpZiAoY2FuQmVBcnJvdyAmJiBzaG91bGRQYXJzZUFycm93KCkpIHtcbiAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlQXJyb3coKTtcbiAgICBpZiAod2FzQXJyb3cpIHtcbiAgICAgIC8vIEl0IHdhcyBhbiBhcnJvdyBmdW5jdGlvbiB0aGlzIHdob2xlIHRpbWUsIHNvIHN0YXJ0IG92ZXIgYW5kIHBhcnNlIGl0IGFzIHBhcmFtcyBzbyB0aGF0IHdlXG4gICAgICAvLyBnZXQgcHJvcGVyIHRva2VuIGFubm90YXRpb25zLlxuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gICAgICAvLyBEb24ndCBzcGVjaWZ5IGEgY29udGV4dCBJRCBiZWNhdXNlIGFycm93IGZ1bmN0aW9ucyBkb24ndCBuZWVkIGEgY29udGV4dCBJRC5cbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHBhcnNlQXJyb3coKTtcbiAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXJtaW5kISBUaGlzIG11c3QgaGF2ZSBiZWVuIHNvbWV0aGluZyB0aGF0IGxvb2tzIHZlcnkgbXVjaCBsaWtlIGFuXG4gICAgICAgIC8vIGFycm93IGZ1bmN0aW9uIGJ1dCB3aGVyZSBpdHMgXCJwYXJhbWV0ZXIgbGlzdFwiIGlzbid0IGFjdHVhbGx5IGEgdmFsaWRcbiAgICAgICAgLy8gcGFyYW1ldGVyIGxpc3QuIEZvcmNlIG5vbi1hcnJvdyBwYXJzaW5nLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvaXNzdWVzLzY2NiBmb3IgYW4gZXhhbXBsZS5cbiAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIHBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oZmFsc2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlQXJyb3coKSB7XG4gIHJldHVybiBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb2xvbikgfHwgIV91dGlsLmNhbkluc2VydFNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBhbiBhcnJvdyB0b2tlbi5cbiBmdW5jdGlvbiBwYXJzZUFycm93KCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHJldHVybiBfdHlwZXNjcmlwdC50c1BhcnNlQXJyb3cuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBfZmxvdy5mbG93UGFyc2VBcnJvdy5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmFycm93KTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQXJyb3cgPSBwYXJzZUFycm93O1xuXG5mdW5jdGlvbiBwYXJzZVBhcmVuSXRlbSgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgfHwgX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF90eXBlcy50eXBlZFBhcnNlUGFyZW5JdGVtLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xpZ2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudCB0b1xuLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwgXHUyMDE0IGF0IGxlYXN0LFxuLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbi8vIGFyZ3VtZW50IHRvIHBhcnNlU3Vic2NyaXB0cyB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIHRoZVxuLy8gYXJndW1lbnQgbGlzdC5cbmZ1bmN0aW9uIHBhcnNlTmV3KCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLl9uZXcpO1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAvLyBuZXcudGFyZ2V0XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlTmV3Q2FsbGVlKCk7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgcGFyc2VFeHByTGlzdChfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3Q2FsbGVlKCkge1xuICBwYXJzZU5vQ2FsbEV4cHIoKTtcbiAgX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90KTtcbn1cblxuIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGUoKSB7XG4gIC8vIEZpbmlzaCBgLCByZWFkIHF1YXNpXG4gIF9pbmRleDMubmV4dFRlbXBsYXRlVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gIC8vIEZpbmlzaCBxdWFzaSwgcmVhZCAke1xuICBfaW5kZXgzLm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB3aGlsZSAoIV9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJhY2tRdW90ZSkgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIC8vIEZpbmlzaCB9LCByZWFkIHF1YXNpXG4gICAgX2luZGV4My5uZXh0VGVtcGxhdGVUb2tlbi5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgZWl0aGVyICR7IG9yIGBcbiAgICBfaW5kZXgzLm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZVRlbXBsYXRlID0gcGFyc2VUZW1wbGF0ZTtcblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuIGZ1bmN0aW9uIHBhcnNlT2JqKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlKSB7XG4gIC8vIEF0dGFjaCBhIGNvbnRleHQgSUQgdG8gdGhlIG9iamVjdCBvcGVuIGFuZCBjbG9zZSBicmFjZSBhbmQgZWFjaCBvYmplY3Qga2V5LlxuICBjb25zdCBjb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuXG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG5cbiAgd2hpbGUgKCFfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpc0dlbmVyYXRvciA9IGZhbHNlO1xuICAgIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgX2x2YWwucGFyc2VTcHJlYWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIE1hcmsgcm9sZSB3aGVuIHRoZSBvbmx5IHRoaW5nIGJlaW5nIHNwcmVhZCBvdmVyIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICAgIGlmIChfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoID09PSBwcmV2aW91c0luZGV4ICsgMikge1xuICAgICAgICAgIF9sdmFsLm1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBpc0Jsb2NrU2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUGF0dGVybikge1xuICAgICAgaXNHZW5lcmF0b3IgPSBfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgfVxuXG4gICAgaWYgKCFpc1BhdHRlcm4gJiYgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuXG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIGlmIChcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29sb24pIHx8XG4gICAgICAgIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTCkgfHxcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSB8fFxuICAgICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5lcSkgfHxcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGtleSBjYWxsZWQgXCJhc3luY1wiIHJhdGhlciB0aGFuIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICAgIGlzR2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZVByb3BlcnR5TmFtZShjb250ZXh0SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZVByb3BlcnR5TmFtZShjb250ZXh0SWQpO1xuICAgIH1cblxuICAgIHBhcnNlT2JqUHJvcFZhbHVlKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlLCBjb250ZXh0SWQpO1xuICB9XG5cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG59IGV4cG9ydHMucGFyc2VPYmogPSBwYXJzZU9iajtcblxuZnVuY3Rpb24gaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pIHtcbiAgLy8gV2UgZ28gb2ZmIG9mIHRoZSBuZXh0IGFuZCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgdGhlIG5vZGUga2V5IGlzIGFjdHVhbGx5IFwiZ2V0XCIgb3IgXCJzZXRcIi5cbiAgLy8gVGhpcyBsZXRzIHVzIGF2b2lkIGdlbmVyYXRpbmcgYSBub2RlLCBhbmQgc2hvdWxkIG9ubHkgbWFrZSB0aGUgdmFsaWRhdGlvbiB3b3JzZS5cbiAgcmV0dXJuIChcbiAgICAhaXNQYXR0ZXJuICYmXG4gICAgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnN0cmluZykgfHwgLy8gZ2V0IFwic3RyaW5nXCIoKSB7fVxuICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUubnVtKSB8fCAvLyBnZXQgMSgpIHt9XG4gICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFja2V0TCkgfHwgLy8gZ2V0IFtcInN0cmluZ1wiXSgpIHt9XG4gICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5uYW1lKSB8fCAvLyBnZXQgZm9vKCkge31cbiAgICAgICEhKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMzLlRva2VuVHlwZS5JU19LRVlXT1JEKSkgLy8gZ2V0IGRlYnVnZ2VyKCkge31cbiAgKTtcbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIGEgbWV0aG9kLlxuZnVuY3Rpb24gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpIHtcbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBtb2RpZmllcnMgYmVjYXVzZSBvYmplY3QgbWV0aG9kcyBjYW4ndCBoYXZlIG9wdGlvbmFsIGJvZGllcywgc29cbiAgLy8gdGhlIHN0YXJ0IHdpbGwgbmV2ZXIgYmUgdXNlZC5cbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgIGlmIChpc1BhdHRlcm4pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgcGFyc2VNZXRob2QoZnVuY3Rpb25TdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pKSB7XG4gICAgcGFyc2VQcm9wZXJ0eU5hbWUob2JqZWN0Q29udGV4dElkKTtcbiAgICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBfbHZhbC5wYXJzZU1heWJlRGVmYXVsdC5jYWxsKHZvaWQgMCwgaXNCbG9ja1Njb3BlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gY29sb24sIHdlIGFzc3VtZSB0aGlzIGlzIGFuIG9iamVjdCBzaG9ydGhhbmQuXG5cbiAgLy8gSWYgd2UncmUgaW4gYSBkZXN0cnVjdHVyaW5nLCB3ZSd2ZSBub3cgZGlzY292ZXJlZCB0aGF0IHRoZSBrZXkgd2FzIGFjdHVhbGx5IGFuIGFzc2lnbmVlLCBzb1xuICAvLyB3ZSBuZWVkIHRvIHRhZyBpdCBhcyBhIGRlY2xhcmF0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNjb3BlLiBPdGhlcndpc2UsIHdlIG1pZ2h0IG5lZWQgdG9cbiAgLy8gdHJhbnNmb3JtIGl0IG9uIGFjY2Vzcywgc28gbWFyayBpdCBhcyBhIG5vcm1hbCBvYmplY3Qgc2hvcnRoYW5kLlxuICBsZXQgaWRlbnRpZmllclJvbGU7XG4gIGlmIChpc1BhdHRlcm4pIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCA9PT0gMCkge1xuICAgICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXgzLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICAgIGlkZW50aWZpZXJSb2xlID0gX2luZGV4My5JZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZGVudGlmaWVyUm9sZSA9IF9pbmRleDMuSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXgzLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZDtcbiAgfVxuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gaWRlbnRpZmllclJvbGU7XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGtub3cgdGhpcyB0byBiZSBhIHBhdHRlcm4gb3IgaWYgd2UncmUgaW4gYW4gYW1iaWd1b3VzIGNvbnRleHQsIGFsbG93XG4gIC8vIHBhcnNpbmcgYXMgaWYgdGhlcmUncyBhIGRlZmF1bHQgdmFsdWUuXG4gIF9sdmFsLnBhcnNlTWF5YmVEZWZhdWx0LmNhbGwodm9pZCAwLCBpc0Jsb2NrU2NvcGUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9ialByb3BWYWx1ZShcbiAgaXNQYXR0ZXJuLFxuICBpc0Jsb2NrU2NvcGUsXG4gIG9iamVjdENvbnRleHRJZCxcbikge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VPYmpQcm9wVmFsdWUuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgY29uc3Qgd2FzTWV0aG9kID0gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpO1xuICBpZiAoIXdhc01ldGhvZCkge1xuICAgIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TmFtZShvYmplY3RDb250ZXh0SWQpIHtcbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VWYXJpYW5jZS5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gb2JqZWN0Q29udGV4dElkO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IG9iamVjdENvbnRleHRJZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUubnVtKSB8fCBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5zdHJpbmcpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJpZ2ludCkgfHwgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZGVjaW1hbCkpIHtcbiAgICAgIHBhcnNlRXhwckF0b20oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VNYXliZVByaXZhdGVOYW1lKCk7XG4gICAgfVxuXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleDMuSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5O1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gb2JqZWN0Q29udGV4dElkO1xuICB9XG59IGV4cG9ydHMucGFyc2VQcm9wZXJ0eU5hbWUgPSBwYXJzZVByb3BlcnR5TmFtZTtcblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cbiBmdW5jdGlvbiBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGZ1bmNDb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuXG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3QgYWxsb3dNb2RpZmllcnMgPSBpc0NvbnN0cnVjdG9yOyAvLyBGb3IgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllc1xuICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb25QYXJhbXMuY2FsbCh2b2lkIDAsIGFsbG93TW9kaWZpZXJzLCBmdW5jQ29udGV4dElkKTtcbiAgcGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIGNvbnN0IGVuZFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfYmFzZS5zdGF0ZS5zY29wZXMucHVzaChuZXcgKDAsIF9zdGF0ZS5TY29wZSkoc3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCB0cnVlKSk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbn0gZXhwb3J0cy5wYXJzZU1ldGhvZCA9IHBhcnNlTWV0aG9kO1xuXG4vLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uLlxuLy8gSWYgdGhlIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIGFuXG4vLyBhc3NpZ25hYmxlIGxpc3QuXG4gZnVuY3Rpb24gcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KSB7XG4gIHBhcnNlRnVuY3Rpb25Cb2R5KHRydWUpO1xuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG59IGV4cG9ydHMucGFyc2VBcnJvd0V4cHJlc3Npb24gPSBwYXJzZUFycm93RXhwcmVzc2lvbjtcblxuIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGZ1bmN0aW9uU3RhcnQsIGZ1bmNDb250ZXh0SWQgPSAwKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xuICB9XG59IGV4cG9ydHMucGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2ggPSBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaDtcblxuIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5KGFsbG93RXhwcmVzc2lvbiwgZnVuY0NvbnRleHRJZCA9IDApIHtcbiAgY29uc3QgaXNFeHByZXNzaW9uID0gYWxsb3dFeHByZXNzaW9uICYmICFfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFjZUwpO1xuXG4gIGlmIChpc0V4cHJlc3Npb24pIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gIH0gZWxzZSB7XG4gICAgX3N0YXRlbWVudC5wYXJzZUJsb2NrLmNhbGwodm9pZCAwLCB0cnVlIC8qIGlzRnVuY3Rpb25TY29wZSAqLywgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUZ1bmN0aW9uQm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5O1xuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucywgYW5kIHJldHVybnMgdGhlbSBhc1xuLy8gYW4gYXJyYXkuIGBjbG9zZWAgaXMgdGhlIHRva2VuIHR5cGUgdGhhdCBlbmRzIHRoZSBsaXN0LCBhbmRcbi8vIGBhbGxvd0VtcHR5YCBjYW4gYmUgdHVybmVkIG9uIHRvIGFsbG93IHN1YnNlcXVlbnQgY29tbWFzIHdpdGhcbi8vIG5vdGhpbmcgaW4gYmV0d2VlbiB0aGVtIHRvIGJlIHBhcnNlZCBhcyBgbnVsbGAgKHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFycmF5IGxpdGVyYWxzKS5cblxuZnVuY3Rpb24gcGFyc2VFeHByTGlzdChjbG9zZSwgYWxsb3dFbXB0eSA9IGZhbHNlKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIHdoaWxlICghX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBjbG9zZSkpIGJyZWFrO1xuICAgIH1cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KSB7XG4gIGlmIChhbGxvd0VtcHR5ICYmIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgbW9yZSB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICB9IGVsc2UgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIF9sdmFsLnBhcnNlU3ByZWFkLmNhbGwodm9pZCAwLCApO1xuICAgIHBhcnNlUGFyZW5JdGVtKCk7XG4gIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgLy8gUGFydGlhbCBmdW5jdGlvbiBhcHBsaWNhdGlvbiBwcm9wb3NhbC5cbiAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VNYXliZUFzc2lnbihmYWxzZSwgdHJ1ZSk7XG4gIH1cbn1cblxuLy8gUGFyc2UgdGhlIG5leHQgdG9rZW4gYXMgYW4gaWRlbnRpZmllci5cbiBmdW5jdGlvbiBwYXJzZUlkZW50aWZpZXIoKSB7XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzMy5Ub2tlblR5cGUubmFtZTtcbn0gZXhwb3J0cy5wYXJzZUlkZW50aWZpZXIgPSBwYXJzZUlkZW50aWZpZXI7XG5cbi8vIFBhcnNlcyBhd2FpdCBleHByZXNzaW9uIGluc2lkZSBhc3luYyBmdW5jdGlvbi5cbmZ1bmN0aW9uIHBhcnNlQXdhaXQoKSB7XG4gIHBhcnNlTWF5YmVVbmFyeSgpO1xufVxuXG4vLyBQYXJzZXMgeWllbGQgZXhwcmVzc2lvbiBpbnNpZGUgZ2VuZXJhdG9yLlxuZnVuY3Rpb24gcGFyc2VZaWVsZCgpIHtcbiAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnNlbWkpICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWpzLW1vZHVsZS1ibG9ja3NcbmZ1bmN0aW9uIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpIHtcbiAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIC8vIEZvciBub3csIGp1c3QgY2FsbCBwYXJzZUJsb2NrQm9keSB0byBwYXJzZSB0aGUgYmxvY2suIEluIHRoZSBmdXR1cmUgd2hlbiB3ZVxuICAvLyBpbXBsZW1lbnQgZnVsbCBzdXBwb3J0LCB3ZSdsbCB3YW50IHRvIGVtaXQgc2NvcGVzIGFuZCBwb3NzaWJseSBvdGhlclxuICAvLyBpbmZvcm1hdGlvbi5cbiAgX3N0YXRlbWVudC5wYXJzZUJsb2NrQm9keS5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOy8qIGVzbGludCBtYXgtbGVuOiAwICovXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfaW5kZXggPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvaW5kZXgnKTtcbnZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9iYXNlJyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG5cblxuXG5cblxuXG5cblxudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvc3RhdGVtZW50Jyk7XG5cblxuXG5cblxuXG5cblxuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvdXRpbCcpO1xuXG5mdW5jdGlvbiBpc01heWJlRGVmYXVsdEltcG9ydChsb29rYWhlYWQpIHtcbiAgcmV0dXJuIChcbiAgICAobG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSB8fCAhIShsb29rYWhlYWQudHlwZSAmIF90eXBlcy5Ub2tlblR5cGUuSVNfS0VZV09SRCkpICYmXG4gICAgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb21cbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHRvaykge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCB0b2sgfHwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIGZsb3dQYXJzZVR5cGUoKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VQcmVkaWNhdGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5tb2R1bG8pO1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5tb2R1bG8pKSB7XG4gICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubW9kdWxvKSkge1xuICAgICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gICAgfVxuICB9XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUNsYXNzKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlSW50ZXJmYWNlaXNoKC8qIGlzQ2xhc3MgKi8gdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVGdW5jdGlvbigpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcblxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICB9XG5cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcblxuICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcblxuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVDbGFzcygpO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUZ1bmN0aW9uKCk7XG4gIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl92YXIpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpKSB7XG4gICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBmbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkpIHtcbiAgICBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpO1xuICB9IGVsc2UgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUludGVyZmFjZSgpO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVFeHBvcnREZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVNb2R1bGUoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwckF0b20uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlSW1wb3J0LmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCk7XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IGNsYXNzIC4uLlxuICAgICAgLy8gZGVjbGFyZSBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAuLi5cbiAgICAgIGZsb3dQYXJzZURlY2xhcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVjbGFyZSBleHBvcnQgZGVmYXVsdCBbdHlwZV07XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdmFyKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB2YXIgLi4uXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikgfHwgLy8gZGVjbGFyZSBleHBvcnQgZnVuY3Rpb24gLi4uXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykgfHwgLy8gZGVjbGFyZSBleHBvcnQgY2xhc3MgLi4uXG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkgLy8gZGVjbGFyZSBleHBvcnQgb3BhcXVlIC4uXG4gICkge1xuICAgIGZsb3dQYXJzZURlY2xhcmUoKTtcbiAgfSBlbHNlIGlmIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RhcikgfHwgLy8gZGVjbGFyZSBleHBvcnQgKiBmcm9tICcnXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgfHwgLy8gZGVjbGFyZSBleHBvcnQge30gLi4uXG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkgfHwgLy8gZGVjbGFyZSBleHBvcnQgaW50ZXJmYWNlIC4uLlxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB0eXBlIC4uLlxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIC8vIGRlY2xhcmUgZXhwb3J0IG9wYXF1ZSB0eXBlIC4uLlxuICApIHtcbiAgICBfc3RhdGVtZW50LnBhcnNlRXhwb3J0LmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyk7XG4gIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZVR5cGVBbGlhcygpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGZsb3dQYXJzZVR5cGVBbGlhcygpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGZsb3dQYXJzZU9wYXF1ZVR5cGUodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVJbnRlcmZhY2UoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuLy8gSW50ZXJmYWNlc1xuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2Vpc2goaXNDbGFzcyA9IGZhbHNlKSB7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlICghaXNDbGFzcyAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21peGlucykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBkbyB7XG4gICAgICBmbG93UGFyc2VJbnRlcmZhY2VFeHRlbmRzKCk7XG4gICAgfSB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpO1xuICB9XG5cbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbXBsZW1lbnRzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cblxuICBmbG93UGFyc2VPYmplY3RUeXBlKGlzQ2xhc3MsIGZhbHNlLCBpc0NsYXNzKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpIHtcbiAgZmxvd1BhcnNlUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIoZmFsc2UpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlKCkge1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFsaWFzKCkge1xuICBmbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcigpO1xuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT3BhcXVlVHlwZShkZWNsYXJlKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIC8vIFBhcnNlIHRoZSBzdXBlcnR5cGVcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIH1cblxuICBpZiAoIWRlY2xhcmUpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gIH1cbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyKCkge1xuICBmbG93UGFyc2VWYXJpYW5jZSgpO1xuICBmbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogdGhpcyBjb25kaXRpb24gaXMgYWxyZWFkeSBjaGVja2VkIGF0IGFsbCBjYWxsIHNpdGVzXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQpKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIGRvIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyKCk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pKSB7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgIH1cbiAgfSB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufSBleHBvcnRzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiA9IGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKSkge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICB9XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2VUeXBlKCkge1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cbiAgZmxvd1BhcnNlT2JqZWN0VHlwZShmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubnVtKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwckF0b20uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVJbmRleGVyKCkge1xuICAvLyBOb3RlOiBicmFja2V0TCBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGlmIChfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbikge1xuICAgIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW50ZXJuYWxTbG90KCkge1xuICAvLyBOb3RlOiBib3RoIGJyYWNrZXRMIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICB9IGVsc2Uge1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbSgpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVDYWxsUHJvcGVydHkoKSB7XG4gIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZShhbGxvd1N0YXRpYywgYWxsb3dFeGFjdCwgYWxsb3dQcm90bykge1xuICBsZXQgZW5kRGVsaW07XG4gIGlmIChhbGxvd0V4YWN0ICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckwpKSB7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlQmFyTCk7XG4gICAgZW5kRGVsaW0gPSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlQmFyUjtcbiAgfSBlbHNlIHtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKTtcbiAgICBlbmREZWxpbSA9IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSO1xuICB9XG5cbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIGVuZERlbGltKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoYWxsb3dQcm90byAmJiBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJvdG8pKSB7XG4gICAgICBjb25zdCBsb29rYWhlYWQgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChsb29rYWhlYWQgIT09IF90eXBlcy5Ub2tlblR5cGUuY29sb24gJiYgbG9va2FoZWFkICE9PSBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKSB7XG4gICAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICBhbGxvd1N0YXRpYyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dTdGF0aWMgJiYgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykpIHtcbiAgICAgIGNvbnN0IGxvb2thaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKGxvb2thaGVhZCAhPT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbiAmJiBsb29rYWhlYWQgIT09IF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxvd1BhcnNlVmFyaWFuY2UoKTtcblxuICAgIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVJbnRlcm5hbFNsb3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVJbmRleGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSkge1xuICAgICAgICBjb25zdCBsb29rYWhlYWQgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lIHx8IGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcgfHwgbG9va2FoZWFkID09PSBfdHlwZXMuVG9rZW5UeXBlLm51bSkge1xuICAgICAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIGZsb3dPYmplY3RUeXBlU2VtaWNvbG9uKCk7XG4gIH1cblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIGVuZERlbGltKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZVByb3BlcnR5KCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gICAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbiAgICB9XG4gICAgLy8gRXhwbGljaXQgaW5leGFjdCBvYmplY3Qgc3ludGF4LlxuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBwcm9wZXJ0eVxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93T2JqZWN0VHlwZVNlbWljb2xvbigpIHtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpICYmICFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhclIpKSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcihpbml0aWFsSWRBbHJlYWR5UGFyc2VkKSB7XG4gIGlmICghaW5pdGlhbElkQWxyZWFkeVBhcnNlZCkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb3QpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCkge1xuICBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcih0cnVlKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVvZlR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKTtcbiAgZmxvd1BhcnNlUHJpbWFyeVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHVwbGVUeXBlKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICAvLyBXZSBhbGxvdyB0cmFpbGluZyBjb21tYXNcbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKSB7XG4gIGNvbnN0IGxvb2thaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICBpZiAobG9va2FoZWFkID09PSBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uIHx8IGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoKTtcbiAgfSBlbHNlIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW1zKCkge1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpICYmICFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKCk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICB9XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxufVxuXG4vLyBUaGUgcGFyc2luZyBvZiB0eXBlcyByb3VnaGx5IHBhcmFsbGVscyB0aGUgcGFyc2luZyBvZiBleHByZXNzaW9ucywgYW5kXG4vLyBwcmltYXJ5IHR5cGVzIGFyZSBraW5kIG9mIGxpa2UgcHJpbWFyeSBleHByZXNzaW9ucy4uLnRoZXkncmUgdGhlXG4vLyBwcmltaXRpdmVzIHdpdGggd2hpY2ggb3RoZXIgdHlwZXMgYXJlIGNvbnN0cnVjdGVkLlxuZnVuY3Rpb24gZmxvd1BhcnNlUHJpbWFyeVR5cGUoKSB7XG4gIGxldCBpc0dyb3VwZWRUeXBlID0gZmFsc2U7XG4gIGNvbnN0IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZSA9IF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICBzd2l0Y2ggKF9iYXNlLnN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubmFtZToge1xuICAgICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgICAgIGZsb3dQYXJzZUludGVyZmFjZVR5cGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgICAgZmxvd1BhcnNlR2VuZXJpY1R5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZShmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEw6XG4gICAgICBmbG93UGFyc2VUdXBsZVR5cGUoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbjpcbiAgICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gICAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KTtcbiAgICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw6XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcblxuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSBncm91cGVkIHR5cGVcbiAgICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgICAgaXNHcm91cGVkVHlwZSA9IHRva2VuICE9PSBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uICYmIHRva2VuICE9PSBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzR3JvdXBlZFR5cGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0dyb3VwZWRUeXBlKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IGZhbHNlO1xuICAgICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICAgICAgICAvLyBBIGAsYCBvciBhIGApID0+YCBtZWFucyB0aGlzIGlzIGFuIGFub255bW91cyBmdW5jdGlvbiB0eXBlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgfHxcbiAgICAgICAgICAhKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVhdCBhIGNvbW1hIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuXG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdyk7XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubWludXM6XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlTGl0ZXJhbC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmc6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLm51bTpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3RydWU6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9mYWxzZTpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX251bGw6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fdm9pZDpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuc3RhcjpcbiAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgcmV0dXJuO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl90eXBlb2YpIHtcbiAgICAgICAgZmxvd1BhcnNlVHlwZW9mVHlwZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUG9zdGZpeFR5cGUoKSB7XG4gIGZsb3dQYXJzZVByaW1hcnlUeXBlKCk7XG4gIHdoaWxlICghX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApICYmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCkpKSB7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKTtcbiAgICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0UikpIHtcbiAgICAgIC8vIEFycmF5IHR5cGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5kZXhlZCBhY2Nlc3MgdHlwZVxuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUHJlZml4VHlwZSgpIHtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgZmxvd1BhcnNlUHJlZml4VHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIGZsb3dQYXJzZVBvc3RmaXhUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpIHtcbiAgZmxvd1BhcnNlUHJlZml4VHlwZSgpO1xuICBpZiAoIV9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCkge1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpO1xuICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpKSB7XG4gICAgZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVVuaW9uVHlwZSgpIHtcbiAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IpO1xuICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VPUikpIHtcbiAgICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZSgpIHtcbiAgZmxvd1BhcnNlVW5pb25UeXBlKCk7XG59XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpIHtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59IGV4cG9ydHMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24gPSBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbjtcblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpIHtcbiAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVZhcmlhbmNlKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBsdXMpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5taW51cykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VWYXJpYW5jZSA9IGZsb3dQYXJzZVZhcmlhbmNlO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPdmVycmlkZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIGZ1bmN0aW9uIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jQ29udGV4dElkKSB7XG4gIC8vIEZvciBhcnJvdyBmdW5jdGlvbnMsIGBwYXJzZUFycm93YCBoYW5kbGVzIHRoZSByZXR1cm4gdHlwZSBpdHNlbGYuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCk7XG4gIH1cblxuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keS5jYWxsKHZvaWQgMCwgZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufSBleHBvcnRzLmZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCA9IGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaDtcblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCkgJiYgX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHtcbiAgICBpZiAobm9DYWxscykge1xuICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgIF9leHByZXNzaW9uLnBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLmNhbGwodm9pZCAwLCApO1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2V4cHJlc3Npb24uYmFzZVBhcnNlU3Vic2NyaXB0LmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG59IGV4cG9ydHMuZmxvd1BhcnNlU3Vic2NyaXB0ID0gZmxvd1BhcnNlU3Vic2NyaXB0O1xuXG4gZnVuY3Rpb24gZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gICAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cyA9IGZsb3dTdGFydFBhcnNlTmV3QXJndW1lbnRzO1xuXG4vLyBpbnRlcmZhY2VzXG4gZnVuY3Rpb24gZmxvd1RyeVBhcnNlU3RhdGVtZW50KCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMuZmxvd1RyeVBhcnNlU3RhdGVtZW50ID0gZmxvd1RyeVBhcnNlU3RhdGVtZW50O1xuXG4gZnVuY3Rpb24gZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMuZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24gPSBmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbjtcblxuLy8gZGVjbGFyZXMsIGludGVyZmFjZXMgYW5kIHR5cGUgYWxpYXNlc1xuIGZ1bmN0aW9uIGZsb3dQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUpIHtcbiAgICBpZiAoXG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl92YXIpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydClcbiAgICApIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBmbG93UGFyc2VUeXBlQWxpYXMoKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBmbG93UGFyc2VPcGFxdWVUeXBlKGZhbHNlKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9XG4gIH1cbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufSBleHBvcnRzLmZsb3dQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQgPSBmbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50O1xuXG4vLyBleHBvcnQgdHlwZVxuIGZ1bmN0aW9uIGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICByZXR1cm4gKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHx8XG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkgfHxcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn0gZXhwb3J0cy5mbG93U2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gZmxvd1Nob3VsZERpc2FsbG93RXhwb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgcmV0dXJuIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAoX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSB8fFxuICAgICAgX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlIHx8XG4gICAgICBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUgfHxcbiAgICAgIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW0pXG4gICk7XG59IGV4cG9ydHMuZmxvd1Nob3VsZERpc2FsbG93RXhwb3J0RGVmYXVsdFNwZWNpZmllciA9IGZsb3dTaG91bGREaXNhbGxvd0V4cG9ydERlZmF1bHRTcGVjaWZpZXI7XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAvLyBleHBvcnQgdHlwZSB7IGZvbywgYmFyIH07XG4gICAgICBfc3RhdGVtZW50LnBhcnNlRXhwb3J0U3BlY2lmaWVycy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VFeHBvcnRGcm9tLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBvcnQgdHlwZSBGb28gPSBCYXI7XG4gICAgICBmbG93UGFyc2VUeXBlQWxpYXMoKTtcbiAgICB9XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9IGVsc2UgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgLy8gZXhwb3J0IG9wYXF1ZSB0eXBlIEZvbyA9IEJhcjtcbiAgICBmbG93UGFyc2VPcGFxdWVUeXBlKGZhbHNlKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBmbG93UGFyc2VJbnRlcmZhY2UoKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgX3N0YXRlbWVudC5wYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgdHJ1ZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3RhcigpIHtcbiAgcmV0dXJuIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSB8fCAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpO1xufSBleHBvcnRzLmZsb3dTaG91bGRQYXJzZUV4cG9ydFN0YXIgPSBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyO1xuXG4gZnVuY3Rpb24gZmxvd1BhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAyKTtcbiAgICBfc3RhdGVtZW50LmJhc2VQYXJzZUV4cG9ydFN0YXIuY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9IGVsc2Uge1xuICAgIF9zdGF0ZW1lbnQuYmFzZVBhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLmZsb3dQYXJzZUV4cG9ydFN0YXIgPSBmbG93UGFyc2VFeHBvcnRTdGFyO1xuXG4vLyBwYXJzZSBhIHRoZSBzdXBlciBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgYW5kIGltcGxlbWVudHNcbiBmdW5jdGlvbiBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpIHtcbiAgaWYgKGhhc1N1cGVyICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cykpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBsZW1lbnRzO1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG4gICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIgPSBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXI7XG5cbi8vIHBhcnNlIHR5cGUgcGFyYW1ldGVycyBmb3Igb2JqZWN0IG1ldGhvZCBzaG9ydGhhbmRcbiBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZU9ialByb3BWYWx1ZSgpIHtcbiAgLy8gbWV0aG9kIHNob3J0aGFuZFxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZU9ialByb3BWYWx1ZSA9IGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlO1xuXG4gZnVuY3Rpb24gZmxvd1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB9XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn0gZXhwb3J0cy5mbG93UGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcyA9IGZsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzO1xuXG4vLyBwYXJzZSB0eXBlb2YgYW5kIHR5cGUgaW1wb3J0c1xuIGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlSW1wb3J0U3BlY2lmaWVycygpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBjb25zdCBsaCA9IF9pbmRleC5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoaXNNYXliZURlZmF1bHRJbXBvcnQobGgpIHx8IGxoLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMIHx8IGxoLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3Rhcikge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzID0gZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzO1xuXG4vLyBwYXJzZSBpbXBvcnQtdHlwZS90eXBlb2Ygc2hvcnRoYW5kXG4gZnVuY3Rpb24gZmxvd1BhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBjb25zdCBpc1R5cGVLZXl3b3JkID1cbiAgICBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8IF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZjtcbiAgaWYgKGlzVHlwZUtleXdvcmQpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSAmJiAhX3V0aWwuaXNMb29rYWhlYWRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoaXNUeXBlS2V5d29yZCAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmICEoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlcy5Ub2tlblR5cGUuSVNfS0VZV09SRCkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgYXMgLGAgb3IgYGltcG9ydCB7dHlwZSBhcyB9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgaW1wb3J0IHt0eXBlIGFzIGZvb2BcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzVHlwZUtleXdvcmQgJiYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fCAhIShfYmFzZS5zdGF0ZS50eXBlICYgX3R5cGVzLlRva2VuVHlwZS5JU19LRVlXT1JEKSkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgZm9vYFxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIgPSBmbG93UGFyc2VJbXBvcnRTcGVjaWZpZXI7XG5cbi8vIHBhcnNlIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVycyAtIGZ1bmN0aW9uIGZvbzxUPigpIHt9XG4gZnVuY3Rpb24gZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcygpIHtcbiAgLy8gT3JpZ2luYWxseSB0aGlzIGNoZWNrZWQgaWYgdGhlIG1ldGhvZCBpcyBhIGdldHRlci9zZXR0ZXIsIGJ1dCBpZiBpdCB3YXMsIHdlJ2QgY3Jhc2ggc29vblxuICAvLyBhbnl3YXksIHNvIGRvbid0IHRyeSB0byBwcm9wYWdhdGUgdGhhdCBpbmZvcm1hdGlvbi5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zID0gZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcztcblxuLy8gcGFyc2UgZmxvdyB0eXBlIGFubm90YXRpb25zIG9uIHZhcmlhYmxlIGRlY2xhcmF0b3IgaGVhZHMgLSBsZXQgZm9vOiBzdHJpbmcgPSBiYXJcbiBmdW5jdGlvbiBmbG93QWZ0ZXJQYXJzZVZhckhlYWQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufSBleHBvcnRzLmZsb3dBZnRlclBhcnNlVmFySGVhZCA9IGZsb3dBZnRlclBhcnNlVmFySGVhZDtcblxuLy8gcGFyc2UgdGhlIHJldHVybiB0eXBlIG9mIGFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIC0gbGV0IGZvbyA9IChhc3luYyAoKTogbnVtYmVyID0+IHt9KTtcbiBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgY29uc3Qgb2xkTm9Bbm9uRnVuY3Rpb25UeXBlID0gX2Jhc2Uuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlO1xuICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IHRydWU7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24gPSBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb247XG5cbi8vIFdlIG5lZWQgdG8gc3VwcG9ydCB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIGFycm93IGZ1bmN0aW9ucy4gVGhpc1xuLy8gaXMgdHJpY2t5LiBUaGVyZSBhcmUgdGhyZWUgc2l0dWF0aW9ucyB3ZSBuZWVkIHRvIGhhbmRsZVxuLy9cbi8vIDEuIFRoaXMgaXMgZWl0aGVyIEpTWCBvciBhbiBhcnJvdyBmdW5jdGlvbi4gV2UnbGwgdHJ5IEpTWCBmaXJzdC4gSWYgdGhhdFxuLy8gICAgZmFpbHMsIHdlJ2xsIHRyeSBhbiBhcnJvdyBmdW5jdGlvbi4gSWYgdGhhdCBmYWlscywgd2UnbGwgdGhyb3cgdGhlIEpTWFxuLy8gICAgZXJyb3IuXG4vLyAyLiBUaGlzIGlzIGFuIGFycm93IGZ1bmN0aW9uLiBXZSdsbCBwYXJzZSB0aGUgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24sXG4vLyAgICBwYXJzZSB0aGUgcmVzdCwgbWFrZSBzdXJlIHRoZSByZXN0IGlzIGFuIGFycm93IGZ1bmN0aW9uLCBhbmQgZ28gZnJvbVxuLy8gICAgdGhlcmVcbi8vIDMuIFRoaXMgaXMgbmVpdGhlci4gSnVzdCBjYWxsIHRoZSBzdXBlciBtZXRob2RcbiBmdW5jdGlvbiBmbG93UGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBsZXQgd2FzQXJyb3cgPSBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3YXNBcnJvdztcbiAgICB9XG5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgd2FzQXJyb3cgPSBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICAgIGlmICh3YXNBcnJvdykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICByZXR1cm4gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbn0gZXhwb3J0cy5mbG93UGFyc2VNYXliZUFzc2lnbiA9IGZsb3dQYXJzZU1heWJlQXNzaWduO1xuXG4vLyBoYW5kbGUgcmV0dXJuIHR5cGVzIGZvciBhcnJvdyBmdW5jdGlvbnNcbiBmdW5jdGlvbiBmbG93UGFyc2VBcnJvdygpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG5cbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgX2Jhc2Uuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcbiAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICBpZiAoX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcblxuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgfVxuICByZXR1cm4gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdyk7XG59IGV4cG9ydHMuZmxvd1BhcnNlQXJyb3cgPSBmbG93UGFyc2VBcnJvdztcblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKFxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiZcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pXG4gICkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlQXN5bmNBcnJvd1dpdGhUeXBlUGFyYW1ldGVycygpO1xuICAgIGlmICh3YXNBcnJvdyAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIH1cblxuICBfZXhwcmVzc2lvbi5iYXNlUGFyc2VTdWJzY3JpcHRzLmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xufSBleHBvcnRzLmZsb3dQYXJzZVN1YnNjcmlwdHMgPSBmbG93UGFyc2VTdWJzY3JpcHRzO1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGFycm93IGZ1bmN0aW9uIGhlcmUuXG5mdW5jdGlvbiBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKSB7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3N0YXRlbWVudC5wYXJzZUZ1bmN0aW9uUGFyYW1zLmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV9leHByZXNzaW9uLnBhcnNlQXJyb3cuY2FsbCh2b2lkIDAsICkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VBcnJvd0V4cHJlc3Npb24uY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlRW51bUJvZHkoKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bUJvZHkoKSB7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICBmbG93UGFyc2VFbnVtTWVtYmVycygpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bU1lbWJlcnMoKSB7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZmxvd1BhcnNlRW51bU1lbWJlcigpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUVudW1NZW1iZXIoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgLy8gRmxvdyBlbnVtIHZhbHVlcyBhcmUgYWx3YXlzIGp1c3Qgb25lIHRva2VuIChhIHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGxpdGVyYWwpLlxuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vaW5kZXgnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF9mbG93ID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9mbG93Jyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgX3R5cGVzY3JpcHQgPSByZXF1aXJlKCcuLi9wbHVnaW5zL3R5cGVzY3JpcHQnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyJyk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3N0YXRlID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3N0YXRlJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4vZXhwcmVzc2lvbicpO1xuXG5cblxuXG5cbnZhciBfbHZhbCA9IHJlcXVpcmUoJy4vbHZhbCcpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBmdW5jdGlvbiBwYXJzZVRvcExldmVsKCkge1xuICBwYXJzZUJsb2NrQm9keShfdHlwZXMuVG9rZW5UeXBlLmVvZik7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKSgwLCBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoLCB0cnVlKSk7XG4gIGlmIChfYmFzZS5zdGF0ZS5zY29wZURlcHRoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjb3BlIGRlcHRoIGF0IGVuZCBvZiBmaWxlOiAke19iYXNlLnN0YXRlLnNjb3BlRGVwdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoMCwgX2luZGV4LkZpbGUpKF9iYXNlLnN0YXRlLnRva2VucywgX2Jhc2Uuc3RhdGUuc2NvcGVzKTtcbn0gZXhwb3J0cy5wYXJzZVRvcExldmVsID0gcGFyc2VUb3BMZXZlbDtcblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxuIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKF9mbG93LmZsb3dUcnlQYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hdCkpIHtcbiAgICBwYXJzZURlY29yYXRvcnMoKTtcbiAgfVxuICBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pO1xufSBleHBvcnRzLnBhcnNlU3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQ7XG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50Q29udGVudChkZWNsYXJhdGlvbikge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmIChfdHlwZXNjcmlwdC50c1RyeVBhcnNlU3RhdGVtZW50Q29udGVudC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0dHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG5cbiAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gIC8vIGNvbXBsZXhpdHkuXG5cbiAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2JyZWFrOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fY29udGludWU6XG4gICAgICBwYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2RlYnVnZ2VyOlxuICAgICAgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZG86XG4gICAgICBwYXJzZURvU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9mb3I6XG4gICAgICBwYXJzZUZvclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb246XG4gICAgICBpZiAoX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLmRvdCkgYnJlYWs7XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgICAgcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzczpcbiAgICAgIGlmICghZGVjbGFyYXRpb24pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUNsYXNzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9pZjpcbiAgICAgIHBhcnNlSWZTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3JldHVybjpcbiAgICAgIHBhcnNlUmV0dXJuU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9zd2l0Y2g6XG4gICAgICBwYXJzZVN3aXRjaFN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fdGhyb3c6XG4gICAgICBwYXJzZVRocm93U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90cnk6XG4gICAgICBwYXJzZVRyeVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdDpcbiAgICAgIGlmICghZGVjbGFyYXRpb24pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7IC8vIE5PVEU6IGZhbGxzIHRocm91Z2ggdG8gX3ZhclxuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl92YXI6XG4gICAgICBwYXJzZVZhclN0YXRlbWVudChzdGFydHR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUuX3Zhcik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3doaWxlOlxuICAgICAgcGFyc2VXaGlsZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFjZUw6XG4gICAgICBwYXJzZUJsb2NrKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLnNlbWk6XG4gICAgICBwYXJzZUVtcHR5U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQ6IHtcbiAgICAgIGNvbnN0IG5leHRUeXBlID0gX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKG5leHRUeXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5kb3QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoc3RhcnR0eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpIHtcbiAgICAgICAgcGFyc2VJbXBvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlRXhwb3J0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOlxuICAgICAgaWYgKF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgICAgICAgLy8gcGVlayBhaGVhZCBhbmQgc2VlIGlmIG5leHQgdG9rZW4gaXMgYSBmdW5jdGlvblxuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gICAgICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSAmJiAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbik7XG4gICAgICAgICAgcGFyc2VGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCB0cnVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nICYmXG4gICAgICAgICFfdXRpbC5oYXNGb2xsb3dpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiZcbiAgICAgICAgLy8gU3RhdGVtZW50cyBsaWtlIGB1c2luZ1swXWAgYW5kIGB1c2luZyBpbiBmb29gIGFyZW4ndCBhY3R1YWwgdXNpbmdcbiAgICAgICAgLy8gZGVjbGFyYXRpb25zLlxuICAgICAgICBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c0F3YWl0VXNpbmcoKSkge1xuICAgICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KTtcbiAgICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gSWYgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgc3RhdGVtZW50IGtleXdvcmQgb3IgYVxuICAvLyBicmFjZSwgaXQncyBhbiBFeHByZXNzaW9uU3RhdGVtZW50IG9yIExhYmVsZWRTdGF0ZW1lbnQuIFdlXG4gIC8vIHNpbXBseSBzdGFydCBwYXJzaW5nIGFuIGV4cHJlc3Npb24sIGFuZCBhZnRlcndhcmRzLCBpZiB0aGVcbiAgLy8gbmV4dCB0b2tlbiBpcyBhIGNvbG9uIGFuZCB0aGUgZXhwcmVzc2lvbiB3YXMgYSBzaW1wbGVcbiAgLy8gSWRlbnRpZmllciBub2RlLCB3ZSBzd2l0Y2ggdG8gaW50ZXJwcmV0aW5nIGl0IGFzIGEgbGFiZWwuXG4gIGNvbnN0IGluaXRpYWxUb2tlbnNMZW5ndGggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIGxldCBzaW1wbGVOYW1lID0gbnVsbDtcbiAgaWYgKF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggPT09IGluaXRpYWxUb2tlbnNMZW5ndGggKyAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHNpbXBsZU5hbWUgPSB0b2tlbi5jb250ZXh0dWFsS2V5d29yZDtcbiAgICB9XG4gIH1cbiAgaWYgKHNpbXBsZU5hbWUgPT0gbnVsbCkge1xuICAgIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIHBhcnNlTGFiZWxlZFN0YXRlbWVudCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgd2FzIGFuIGlkZW50aWZpZXIsIHNvIHdlIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGZsb3cvdHlwZXNjcmlwdC1zcGVjaWZpYyBjYXNlcy5cbiAgICBwYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoc2ltcGxlTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcG9zaXRpb25lZCBhdCBhbiBgYXdhaXQgdXNpbmdgIGRlY2xhcmF0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGNhbiBoYXBwZW4gZWl0aGVyIGluIHBsYWNlIG9mIGEgcmVndWxhciB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICogb3IgaW4gYSBsb29wIGJvZHksIGFuZCBpbiBib3RoIHBsYWNlcywgdGhlcmUgYXJlIHNpbWlsYXItbG9va2luZyBjYXNlcyB3aGVyZVxuICogd2UgbmVlZCB0byByZXR1cm4gZmFsc2UuXG4gKlxuICogRXhhbXBsZXMgcmV0dXJuaW5nIHRydWU6XG4gKiBhd2FpdCB1c2luZyBmb28gPSBiYXIoKTtcbiAqIGZvciAoYXdhaXQgdXNpbmcgYSBvZiBiKSB7fVxuICpcbiAqIEV4YW1wbGVzIHJldHVybmluZyBmYWxzZTpcbiAqIGF3YWl0IHVzaW5nXG4gKiBhd2FpdCB1c2luZyArIDFcbiAqIGF3YWl0IHVzaW5nIGluc3RhbmNlb2YgVFxuICogZm9yIChhd2FpdCB1c2luZzs7KSB7fVxuICpcbiAqIEZvciBub3csIHdlIGVhcmx5IHJldHVybiBpZiB3ZSBkb24ndCBzZWUgYGF3YWl0YCwgdGhlbiBkbyBhIHNpbXBsZVxuICogYmFja3RyYWNraW5nLWJhc2VkIGxvb2thaGVhZCBmb3IgdGhlIGB1c2luZ2AgYW5kIGlkZW50aWZpZXIgdG9rZW5zLiBJbiB0aGVcbiAqIGZ1dHVyZSwgdGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgd2l0aCBhIGNoYXJhY3Rlci1iYXNlZCBhcHByb2FjaC5cbiAqL1xuZnVuY3Rpb24gc3RhcnRzQXdhaXRVc2luZygpIHtcbiAgaWYgKCFfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXdhaXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgLy8gYXdhaXRcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91c2luZykgfHwgX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApKSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHVzaW5nXG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8IF91dGlsLmhhc1ByZWNlZGluZ0xpbmVCcmVhay5jYWxsKHZvaWQgMCwgKSkge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbiBmdW5jdGlvbiBwYXJzZURlY29yYXRvcnMoKSB7XG4gIHdoaWxlIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9yKCk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZURlY29yYXRvcnMgPSBwYXJzZURlY29yYXRvcnM7XG5cbmZ1bmN0aW9uIHBhcnNlRGVjb3JhdG9yKCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICB9IGVsc2Uge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB3aGlsZSAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgICBwYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKTtcbiAgfVxufVxuXG4gZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLmJhc2VQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzID0gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHM7XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBwYXJzZURvU3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl93aGlsZSk7XG4gIF9leHByZXNzaW9uLnBhcnNlUGFyZW5FeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICBfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VBbWJpZ3VvdXNGb3JTdGF0ZW1lbnQoKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyB0b2tlbiBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb24gKGV4cGxpY2l0IHJlc291cmNlXG4gKiBtYW5hZ2VtZW50KSBhcyBwYXJ0IG9mIGEgbG9vcC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNVc2luZ0luTG9vcCgpIHtcbiAgaWYgKCFfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdXNpbmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoaXMgbXVzdCBiZSBgZm9yICh1c2luZyBvZmAsIHdoZXJlIGB1c2luZ2AgaXMgdGhlIG5hbWUgb2YgdGhlIGxvb3BcbiAgLy8gdmFyaWFibGUuXG4gIGlmIChfdXRpbC5pc0xvb2thaGVhZENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBEaXNhbWJpZ3VhdGluZyBiZXR3ZWVuIGEgYGZvcmAgYW5kIGEgYGZvcmAvYGluYCBvciBgZm9yYC9gb2ZgXG4vLyBsb29wIGlzIG5vbi10cml2aWFsLiBCYXNpY2FsbHksIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGluaXQgYHZhcmBcbi8vIHN0YXRlbWVudCBvciBleHByZXNzaW9uLCBkaXNhbGxvd2luZyB0aGUgYGluYCBvcGVyYXRvciAoc2VlXG4vLyB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byBgcGFyc2VFeHByZXNzaW9uYCksIGFuZCB0aGVuIGNoZWNrXG4vLyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIGBpbmAgb3IgYG9mYC4gV2hlbiB0aGVyZSBpcyBubyBpbml0XG4vLyBwYXJ0IChzZW1pY29sb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMpLCBpdFxuLy8gaXMgYSByZWd1bGFyIGBmb3JgIGxvb3AuXG5mdW5jdGlvbiBwYXJzZUFtYmlndW91c0ZvclN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIGxldCBmb3JBd2FpdCA9IGZhbHNlO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSkge1xuICAgIGZvckF3YWl0ID0gdHJ1ZTtcbiAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICBpZiAoZm9yQXdhaXQpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNBd2FpdFVzaW5nID0gc3RhcnRzQXdhaXRVc2luZygpO1xuICBpZiAoaXNBd2FpdFVzaW5nIHx8IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3ZhcikgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fbGV0KSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCkgfHwgaXNVc2luZ0luTG9vcCgpKSB7XG4gICAgaWYgKGlzQXdhaXRVc2luZykge1xuICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCk7XG4gICAgfVxuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZVZhcih0cnVlLCBfYmFzZS5zdGF0ZS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLl92YXIpO1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbikgfHwgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgICAgcGFyc2VGb3JJbihmb3JBd2FpdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2luKSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpKSB7XG4gICAgcGFyc2VGb3JJbihmb3JBd2FpdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgcGFyc2VGb3IoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpIHtcbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VQYXJlbkV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9lbHNlKSkge1xuICAgIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJldHVyblN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIC8vIEluIGByZXR1cm5gIChhbmQgYGJyZWFrYC9gY29udGludWVgKSwgdGhlIGtleXdvcmRzIHdpdGhcbiAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9yIGEgc2VtaWNvbG9uIG9yIHRoZVxuICAvLyBwb3NzaWJpbGl0eSB0byBpbnNlcnQgb25lLlxuXG4gIGlmICghX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VQYXJlbkV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgLy8gRG9uJ3QgYm90aGVyIHZhbGlkYXRpb247IGp1c3QgZ28gdGhyb3VnaCBhbnkgc2VxdWVuY2Ugb2YgY2FzZXMsIGRlZmF1bHRzLCBhbmQgc3RhdGVtZW50cy5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Nhc2UpIHx8IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgICBjb25zdCBpc0Nhc2UgPSBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jYXNlKTtcbiAgICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChpc0Nhc2UpIHtcbiAgICAgICAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICAgICAgfVxuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTsgLy8gQ2xvc2luZyBicmFjZVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKSB7XG4gIF9sdmFsLnBhcnNlQmluZGluZ0F0b20uY2FsbCh2b2lkIDAsIHRydWUgLyogaXNCbG9ja1Njb3BlICovKTtcblxuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIHBhcnNlQmxvY2soKTtcblxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2F0Y2gpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGxldCBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBudWxsO1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgIGNhdGNoQmluZGluZ1N0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICAgIHBhcnNlQ2F0Y2hDbGF1c2VQYXJhbSgpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgfVxuICAgIHBhcnNlQmxvY2soKTtcbiAgICBpZiAoY2F0Y2hCaW5kaW5nU3RhcnRUb2tlbkluZGV4ICE9IG51bGwpIHtcbiAgICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIHNjb3BlIGZvciB0aGUgY2F0Y2ggYmluZGluZyB3aGljaCBpbmNsdWRlcyB0aGUgYmluZGluZyBpdHNlbGYgYW5kIHRoZVxuICAgICAgLy8gY2F0Y2ggYmxvY2suXG4gICAgICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG4gICAgfVxuICB9XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZmluYWxseSkpIHtcbiAgICBwYXJzZUJsb2NrKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIHBhcnNlVmFyU3RhdGVtZW50KGlzQmxvY2tTY29wZSkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlVmFyKGZhbHNlLCBpc0Jsb2NrU2NvcGUpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VWYXJTdGF0ZW1lbnQgPSBwYXJzZVZhclN0YXRlbWVudDtcblxuZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBfZXhwcmVzc2lvbi5wYXJzZVBhcmVuRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGFiZWxlZFN0YXRlbWVudCgpIHtcbiAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdGF0ZW1lbnQgc3RhcnRpbmcgd2l0aCBhbiBpZGVudGlmaWVyIG9mIHRoZSBnaXZlbiBuYW1lLiBTdWJjbGFzc2VzIG1hdGNoIG9uIHRoZSBuYW1lXG4gKiB0byBoYW5kbGUgc3RhdGVtZW50cyBsaWtlIFwiZGVjbGFyZVwiLlxuICovXG5mdW5jdGlvbiBwYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudC5jYWxsKHZvaWQgMCwgY29udGV4dHVhbEtleXdvcmQpO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50LmNhbGwodm9pZCAwLCBjb250ZXh0dWFsS2V5d29yZCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgc2VtaWNvbG9uLWVuY2xvc2VkIGJsb2NrIG9mIHN0YXRlbWVudHMuXG4gZnVuY3Rpb24gcGFyc2VCbG9jayhpc0Z1bmN0aW9uU2NvcGUgPSBmYWxzZSwgY29udGV4dElkID0gMCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICBpZiAoY29udGV4dElkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIH1cbiAgcGFyc2VCbG9ja0JvZHkoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuICBpZiAoY29udGV4dElkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIH1cbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGlzRnVuY3Rpb25TY29wZSkpO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG59IGV4cG9ydHMucGFyc2VCbG9jayA9IHBhcnNlQmxvY2s7XG5cbiBmdW5jdGlvbiBwYXJzZUJsb2NrQm9keShlbmQpIHtcbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgZW5kKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBwYXJzZVN0YXRlbWVudCh0cnVlKTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQmxvY2tCb2R5ID0gcGFyc2VCbG9ja0JvZHk7XG5cbi8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4vLyBleHByZXNzaW9uLlxuXG5mdW5jdGlvbiBwYXJzZUZvcigpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpO1xuICBpZiAoIV90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpO1xuICBpZiAoIV90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG4vLyBQYXJzZSBhIGBmb3JgL2BpbmAgYW5kIGBmb3JgL2BvZmAgbG9vcCwgd2hpY2ggYXJlIGFsbW9zdFxuLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG5mdW5jdGlvbiBwYXJzZUZvckluKGZvckF3YWl0KSB7XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpO1xuICB9IGVsc2Uge1xuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG59XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlVmFyKGlzRm9yLCBpc0Jsb2NrU2NvcGUpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKTtcbiAgICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICBjb25zdCBlcUluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBpc0Zvcik7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbZXFJbmRleF0ucmhzRW5kSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoIV90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFySGVhZChpc0Jsb2NrU2NvcGUpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nQXRvbS5jYWxsKHZvaWQgMCwgaXNCbG9ja1Njb3BlKTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c0FmdGVyUGFyc2VWYXJIZWFkLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93QWZ0ZXJQYXJzZVZhckhlYWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUGFyc2UgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4vLyBgaXNTdGF0ZW1lbnRgIHBhcmFtZXRlcikuXG5cbiBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uKFxuICBmdW5jdGlvblN0YXJ0LFxuICBpc1N0YXRlbWVudCxcbiAgb3B0aW9uYWxJZCA9IGZhbHNlLFxuKSB7XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgaWYgKGlzU3RhdGVtZW50ICYmICFvcHRpb25hbElkICYmICFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmICFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl95aWVsZCkpIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAvLyBFeHByZXNzaW9uLXN0eWxlIGZ1bmN0aW9ucyBzaG91bGQgbGltaXQgdGhlaXIgbmFtZSdzIHNjb3BlIHRvIHRoZSBmdW5jdGlvbiBib2R5LCBzbyB3ZSBtYWtlXG4gICAgLy8gYSBuZXcgZnVuY3Rpb24gc2NvcGUgdG8gZW5mb3JjZSB0aGF0LlxuICAgIGlmICghaXNTdGF0ZW1lbnQpIHtcbiAgICAgIG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gICAgfVxuICAgIF9sdmFsLnBhcnNlQmluZGluZ0lkZW50aWZpZXIuY2FsbCh2b2lkIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCk7XG4gIGNvbnN0IGVuZFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgYmxvY2sgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGJvZHksIHdlIG5lZWQgYSBzZXBhcmF0ZSBmdW5jdGlvbi1zdHlsZSBzY29wZVxuICAvLyB0aGF0IGluY2x1ZGVzIHRoZSBwYXJhbXMuXG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIHRydWUpKTtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aC0tO1xuICBpZiAobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgfVxufSBleHBvcnRzLnBhcnNlRnVuY3Rpb24gPSBwYXJzZUZ1bmN0aW9uO1xuXG4gZnVuY3Rpb24gcGFyc2VGdW5jdGlvblBhcmFtcyhcbiAgYWxsb3dNb2RpZmllcnMgPSBmYWxzZSxcbiAgZnVuY0NvbnRleHRJZCA9IDAsXG4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxuICBfbHZhbC5wYXJzZUJpbmRpbmdMaXN0LmNhbGwodm9pZCAwLCBcbiAgICBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUixcbiAgICBmYWxzZSAvKiBpc0Jsb2NrU2NvcGUgKi8sXG4gICAgZmFsc2UgLyogYWxsb3dFbXB0eSAqLyxcbiAgICBhbGxvd01vZGlmaWVycyxcbiAgICBmdW5jQ29udGV4dElkLFxuICApO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxufSBleHBvcnRzLnBhcnNlRnVuY3Rpb25QYXJhbXMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1zO1xuXG4vLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxuIGZ1bmN0aW9uIHBhcnNlQ2xhc3MoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICAvLyBQdXQgYSBjb250ZXh0IElEIG9uIHRoZSBjbGFzcyBrZXl3b3JkLCB0aGUgb3Blbi1icmFjZSwgYW5kIHRoZSBjbG9zZS1icmFjZSwgc28gdGhhdCBsYXRlclxuICAvLyBjb2RlIGNhbiBlYXNpbHkgbmF2aWdhdGUgdG8gbWVhbmluZ2Z1bCBwb2ludHMgb24gdGhlIGNsYXNzLlxuICBjb25zdCBjb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuXG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNFeHByZXNzaW9uID0gIWlzU3RhdGVtZW50O1xuICAvLyBMaWtlIHdpdGggZnVuY3Rpb25zLCB3ZSBkZWNsYXJlIGEgc3BlY2lhbCBcIm5hbWUgc2NvcGVcIiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbmFtZSB0byB0aGUgZW5kXG4gIC8vIG9mIHRoZSBjbGFzcywgYnV0IG9ubHkgd2l0aCBleHByZXNzaW9uLXN0eWxlIGNsYXNzZXMsIHRvIHJlcHJlc2VudCB0aGUgZmFjdCB0aGF0IHRoZSBuYW1lIGlzXG4gIC8vIGF2YWlsYWJsZSB0byB0aGUgYm9keSBvZiB0aGUgY2xhc3MgYnV0IG5vdCBhbiBvdXRlciBkZWNsYXJhdGlvbi5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG4gIGlmICghaXNTdGF0ZW1lbnQpIHtcbiAgICBuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgfVxuICBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQpO1xuICBwYXJzZUNsYXNzU3VwZXIoKTtcbiAgY29uc3Qgb3BlbkJyYWNlSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBwYXJzZUNsYXNzQm9keShjb250ZXh0SWQpO1xuICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW29wZW5CcmFjZUluZGV4XS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gY29udGV4dElkO1xuICBpZiAobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUNsYXNzID0gcGFyc2VDbGFzcztcblxuZnVuY3Rpb24gaXNDbGFzc1Byb3BlcnR5KCkge1xuICByZXR1cm4gX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lcSkgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc01ldGhvZCgpIHtcbiAgcmV0dXJuIF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoY2xhc3NDb250ZXh0SWQpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXQpKSB7XG4gICAgICBwYXJzZURlY29yYXRvcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlclN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gICAgcGFyc2VDbGFzc01lbWJlcihtZW1iZXJTdGFydCwgY2xhc3NDb250ZXh0SWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXIobWVtYmVyU3RhcnQsIGNsYXNzQ29udGV4dElkKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZU1vZGlmaWVycy5jYWxsKHZvaWQgMCwgW1xuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlLFxuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gICAgXSk7XG4gIH1cbiAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTsgLy8gZWF0cyAnc3RhdGljJ1xuICAgIGlmIChpc0NsYXNzTWV0aG9kKCkpIHtcbiAgICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIC8qIGlzQ29uc3RydWN0b3IgKi8gZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNDbGFzc1Byb3BlcnR5KCkpIHtcbiAgICAgIHBhcnNlQ2xhc3NQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugc29tZXRoaW5nIHN0YXRpY1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3N0YXRpYztcbiAgICBpc1N0YXRpYyA9IHRydWU7XG5cbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3RhdGljIGJsb2NrLiBNYXJrIHRoZSB3b3JkIFwic3RhdGljXCIgd2l0aCB0aGUgY2xhc3MgY29udGV4dCBJRCBmb3IgY2xhc3MgZWxlbWVudFxuICAgICAgLy8gZGV0ZWN0aW9uIGFuZCBwYXJzZSBhcyBhIHJlZ3VsYXIgYmxvY2suXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNsYXNzQ29udGV4dElkO1xuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMobWVtYmVyU3RhcnQsIGlzU3RhdGljLCBjbGFzc0NvbnRleHRJZCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoXG4gIG1lbWJlclN0YXJ0LFxuICBpc1N0YXRpYyxcbiAgY2xhc3NDb250ZXh0SWQsXG4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAoX3R5cGVzY3JpcHQudHNUcnlQYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljLmNhbGwodm9pZCAwLCBpc1N0YXRpYykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgLy8gYSBnZW5lcmF0b3JcbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZUNsYXNzTWV0aG9kKG1lbWJlclN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgdGhlIGlkZW50aWZpZXIgbmFtZSBzbyB3ZSBjYW4gdGVsbCBpZiBpdCdzIGFjdHVhbGx5IGEga2V5d29yZCBsaWtlIFwiYXN5bmNcIiwgXCJnZXRcIiwgb3JcbiAgLy8gXCJzZXRcIi5cbiAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gIGxldCBpc0NvbnN0cnVjdG9yID0gZmFsc2U7XG4gIGNvbnN0IHRva2VuID0gX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgLy8gV2UgYWxsb3cgXCJjb25zdHJ1Y3RvclwiIGFzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGEgc3RyaW5nLlxuICBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpIHtcbiAgICBpc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG5cbiAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIGlzQ29uc3RydWN0b3IpO1xuICB9IGVsc2UgaWYgKGlzQ2xhc3NQcm9wZXJ0eSgpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiYgIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9hc3luYztcbiAgICAvLyBhbiBhc3luYyBtZXRob2RcbiAgICBjb25zdCBpc0dlbmVyYXRvciA9IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJhc3luY1wiOiBnZXQgdGhlIHJlYWwgbmFtZS5cbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgZmFsc2UgLyogaXNDb25zdHJ1Y3RvciAqLyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2dldCB8fFxuICAgICAgdG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSAmJlxuICAgICEoX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSAmJiBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKVxuICApIHtcbiAgICBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3NldDtcbiAgICB9XG4gICAgLy8gYGdldFxcbipgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgcHJvcGVydHkgbmFtZWQgJ2dldCcgZm9sbG93ZWQgYnkgYSBnZW5lcmF0b3IuXG4gICAgLy8gYSBnZXR0ZXIgb3Igc2V0dGVyXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJnZXQvc2V0XCI6IGdldCB0aGUgcmVhbCBuYW1lLlxuICAgIHBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUoY2xhc3NDb250ZXh0SWQpO1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIC8qIGlzQ29uc3RydWN0b3IgKi8gZmFsc2UpO1xuICB9IGVsc2UgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FjY2Vzc29yICYmICFfdXRpbC5pc0xpbmVUZXJtaW5hdG9yLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIC8vIGFuIHVuaW5pdGlhbGl6ZWQgY2xhc3MgcHJvcGVydHkgKGR1ZSB0byBBU0ksIHNpbmNlIHdlIGRvbid0IG90aGVyd2lzZSByZWNvZ25pemUgdGhlIG5leHQgdG9rZW4pXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzTWV0aG9kKGZ1bmN0aW9uU3RhcnQsIGlzQ29uc3RydWN0b3IpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZU1ldGhvZC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgaXNDb25zdHJ1Y3Rvcik7XG59XG5cbi8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgcHJvcGVydHksIGlmIGl0IGlzIGEgc2ltcGxlIGlkZW50aWZpZXIuXG4gZnVuY3Rpb24gcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZVByb3BlcnR5TmFtZS5jYWxsKHZvaWQgMCwgY2xhc3NDb250ZXh0SWQpO1xufSBleHBvcnRzLnBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUgPSBwYXJzZUNsYXNzUHJvcGVydHlOYW1lO1xuXG4gZnVuY3Rpb24gcGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycygpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfdG9rZW5pemVyLnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gICAgX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAgIF90b2tlbml6ZXIucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzID0gcGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycztcblxuIGZ1bmN0aW9uIHBhcnNlQ2xhc3NQcm9wZXJ0eSgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdG9rZW5pemVyLmVhdFR5cGVUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKTtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgY29uc3QgZXF1YWxzVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsICk7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxdWFsc1Rva2VuSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VDbGFzc1Byb3BlcnR5ID0gcGFyc2VDbGFzc1Byb3BlcnR5O1xuXG5mdW5jdGlvbiBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICBpZiAoXG4gICAgX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICghaXNTdGF0ZW1lbnQgfHwgb3B0aW9uYWxJZCkgJiZcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cylcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICAgIF9mbG93LmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIHN1cGVyY2xhc3MuXG5mdW5jdGlvbiBwYXJzZUNsYXNzU3VwZXIoKSB7XG4gIGxldCBoYXNTdXBlciA9IGZhbHNlO1xuICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByU3Vic2NyaXB0cy5jYWxsKHZvaWQgMCwgKTtcbiAgICBoYXNTdXBlciA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaGFzU3VwZXIgPSBmYWxzZTtcbiAgfVxuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzQWZ0ZXJQYXJzZUNsYXNzU3VwZXIuY2FsbCh2b2lkIDAsIGhhc1N1cGVyKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd0FmdGVyUGFyc2VDbGFzc1N1cGVyLmNhbGwodm9pZCAwLCBoYXNTdXBlcik7XG4gIH1cbn1cblxuLy8gUGFyc2VzIG1vZHVsZSBleHBvcnQgZGVjbGFyYXRpb24uXG5cbiBmdW5jdGlvbiBwYXJzZUV4cG9ydCgpIHtcbiAgY29uc3QgZXhwb3J0SW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAoX3R5cGVzY3JpcHQudHNUcnlQYXJzZUV4cG9ydC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBleHBvcnQgKiBmcm9tICcuLi4nXG4gIGlmIChzaG91bGRQYXJzZUV4cG9ydFN0YXIoKSkge1xuICAgIHBhcnNlRXhwb3J0U3RhcigpO1xuICB9IGVsc2UgaWYgKGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgZnJvbVxuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgJiYgX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKTtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzTWF5YmUoKTtcbiAgICB9XG4gICAgcGFyc2VFeHBvcnRGcm9tKCk7XG4gIH0gZWxzZSBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgcGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpO1xuICB9IGVsc2UgaWYgKHNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSkge1xuICAgIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKTtcbiAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgfVxuICBfYmFzZS5zdGF0ZS50b2tlbnNbZXhwb3J0SW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbn0gZXhwb3J0cy5wYXJzZUV4cG9ydCA9IHBhcnNlRXhwb3J0O1xuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmIChfdHlwZXNjcmlwdC50c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAoX2Zsb3cuZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSkge1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJiBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSB7XG4gICAgLy8gYXN5bmMgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICBfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKTtcbiAgICBfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pO1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9ycygpO1xuICAgIHBhcnNlQ2xhc3ModHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlRXhwb3J0RGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3R5cGVzY3JpcHQudHNJc0RlY2xhcmF0aW9uU3RhcnQuY2FsbCh2b2lkIDAsICkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCAmJiBfZmxvdy5mbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgcmV0dXJuIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jO1xuICB9XG5cbiAgaWYgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IF9uZXh0ID0gX3Rva2VuaXplci5uZXh0VG9rZW5TdGFydC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgbG9va2FoZWFkID0gX3Rva2VuaXplci5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgaGFzRnJvbSA9XG4gICAgbG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBsb29rYWhlYWQuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbTtcbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gbG9va2FoZWFkIGFnYWluIHdoZW4gYGV4cG9ydCBkZWZhdWx0IGZyb21gIGlzIHNlZW5cbiAgaWYgKGhhc0Zyb20pIHtcbiAgICBjb25zdCBuZXh0QWZ0ZXJGcm9tID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfdG9rZW5pemVyLm5leHRUb2tlblN0YXJ0U2luY2UuY2FsbCh2b2lkIDAsIF9uZXh0ICsgNCkpO1xuICAgIHJldHVybiBuZXh0QWZ0ZXJGcm9tID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdW90YXRpb25NYXJrIHx8IG5leHRBZnRlckZyb20gPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFwb3N0cm9waGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpIHtcbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBwYXJzZUV4cG9ydEZyb20oKSB7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICB9XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUV4cG9ydEZyb20gPSBwYXJzZUV4cG9ydEZyb207XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gX2Zsb3cuZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFN0YXIoKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGJhc2VQYXJzZUV4cG9ydFN0YXIoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKTtcblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHBhcnNlRXhwb3J0TmFtZXNwYWNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VFeHBvcnRGcm9tKCk7XG4gIH1cbn0gZXhwb3J0cy5iYXNlUGFyc2VFeHBvcnRTdGFyID0gYmFzZVBhcnNlRXhwb3J0U3RhcjtcblxuZnVuY3Rpb24gcGFyc2VFeHBvcnROYW1lc3BhY2UoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYXM7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzTWF5YmUoKTtcbiAgcGFyc2VFeHBvcnRGcm9tKCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiAoXG4gICAgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3R5cGVzY3JpcHQudHNJc0RlY2xhcmF0aW9uU3RhcnQuY2FsbCh2b2lkIDAsICkpIHx8XG4gICAgKF9iYXNlLmlzRmxvd0VuYWJsZWQgJiYgX2Zsb3cuZmxvd1Nob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICkpIHx8XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fdmFyIHx8XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fY29uc3QgfHxcbiAgICBfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQgfHxcbiAgICBfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiB8fFxuICAgIF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzIHx8XG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB8fFxuICAgIF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXQpXG4gICk7XG59XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBleHBvcnRzLlxuIGZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpIHtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcigpO1xuICB9XG59IGV4cG9ydHMucGFyc2VFeHBvcnRTcGVjaWZpZXJzID0gcGFyc2VFeHBvcnRTcGVjaWZpZXJzO1xuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlRXhwb3J0U3BlY2lmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybjtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLkV4cG9ydEFjY2VzcztcbiAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnRpbmcgYXQgdGhlIGBtb2R1bGVgIHRva2VuIGluIGFuIGltcG9ydCwgZGV0ZXJtaW5lIGlmIGl0IHdhcyB0cnVseSBhblxuICogaW1wb3J0IHJlZmxlY3Rpb24gdG9rZW4gb3IganVzdCBsb29rcyBsaWtlIG9uZS5cbiAqXG4gKiBSZXR1cm5zIHRydWUgZm9yOlxuICogaW1wb3J0IG1vZHVsZSBmb28gZnJvbSBcImZvb1wiO1xuICogaW1wb3J0IG1vZHVsZSBmcm9tIGZyb20gXCJmb29cIjtcbiAqXG4gKiBSZXR1cm5zIGZhbHNlIGZvcjpcbiAqIGltcG9ydCBtb2R1bGUgZnJvbSBcImZvb1wiO1xuICogaW1wb3J0IG1vZHVsZSwge2Jhcn0gZnJvbSBcImZvb1wiO1xuICovXG5mdW5jdGlvbiBpc0ltcG9ydFJlZmxlY3Rpb24oKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpO1xuICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEVhdCB0aGUgXCJtb2R1bGVcIiB0b2tlbiBmcm9tIHRoZSBpbXBvcnQgcmVmbGVjdGlvbiBwcm9wb3NhbC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWltcG9ydC1yZWZsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWF5YmVJbXBvcnRSZWZsZWN0aW9uKCkge1xuICAvLyBpc0ltcG9ydFJlZmxlY3Rpb24gZG9lcyBzbmFwc2hvdC9yZXN0b3JlLCBzbyBvbmx5IHJ1biBpdCBpZiB3ZSBzZWUgdGhlIHdvcmRcbiAgLy8gXCJtb2R1bGVcIi5cbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmIGlzSW1wb3J0UmVmbGVjdGlvbigpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIFBhcnNlcyBpbXBvcnQgZGVjbGFyYXRpb24uXG5cbiBmdW5jdGlvbiBwYXJzZUltcG9ydCgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJiBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuZXEpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkICYmIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IGxvb2thaGVhZCA9IF90b2tlbml6ZXIubG9va2FoZWFkVHlwZUFuZEtleXdvcmQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pIHtcbiAgICAgIC8vIE9uZSBvZiB0aGVzZSBgaW1wb3J0IHR5cGVgIGNhc2VzOlxuICAgICAgLy8gaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKTtcbiAgICAgIC8vIGltcG9ydCB0eXBlIEEgZnJvbSAnQSc7XG4gICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpO1xuICAgICAgaWYgKF90b2tlbml6ZXIubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5lcSkge1xuICAgICAgICBfdHlwZXNjcmlwdC50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgaXMgYW4gYGltcG9ydCB0eXBlLi4uZnJvbWAgc3RhdGVtZW50LCB0aGVuIHdlIGFscmVhZHkgYXRlIHRoZVxuICAgICAgLy8gdHlwZSB0b2tlbiwgc28gcHJvY2VlZCB0byB0aGUgcmVndWxhciBpbXBvcnQgcGFyc2VyLlxuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3RhciB8fCBsb29rYWhlYWQudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpIHtcbiAgICAgIC8vIE9uZSBvZiB0aGVzZSBgaW1wb3J0IHR5cGVgIGNhc2VzLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBlYXQgdGhlIHR5cGUgdG9rZW5cbiAgICAgIC8vIGFuZCBwcm9jZWVkIGFzIG5vcm1hbDpcbiAgICAgIC8vIGltcG9ydCB0eXBlICogYXMgQSBmcm9tICdBJztcbiAgICAgIC8vIGltcG9ydCB0eXBlIHthfSBmcm9tICdBJztcbiAgICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGltcG9ydGluZyB0aGUgbmFtZSBcInR5cGVcIi5cbiAgfVxuXG4gIC8vIGltcG9ydCAnLi4uJ1xuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlSW1wb3J0UmVmbGVjdGlvbigpO1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSk7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VJbXBvcnQgPSBwYXJzZUltcG9ydDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBzaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoKSB7XG4gIHJldHVybiBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllckxvY2FsKCkge1xuICBfbHZhbC5wYXJzZUltcG9ydGVkSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGltcG9ydHMuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgaWYgKHNob3VsZFBhcnNlRGVmYXVsdEltcG9ydCgpKSB7XG4gICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAnLi4uJ1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyTG9jYWwoKTtcblxuICAgIGlmICghX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSByZXR1cm47XG4gIH1cblxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKTtcblxuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyTG9jYWwoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlY3QgYW4gYXR0ZW1wdCB0byBkZWVwIGRlc3RydWN0dXJlXG4gICAgICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFxuICAgICAgICAgIFwiRVMyMDE1IG5hbWVkIGltcG9ydHMgZG8gbm90IGRlc3RydWN0dXJlLiBVc2UgYW5vdGhlciBzdGF0ZW1lbnQgZm9yIGRlc3RydWN0dXJpbmcgYWZ0ZXIgdGhlIGltcG9ydC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZUltcG9ydFNwZWNpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9sdmFsLnBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLkltcG9ydEFjY2VzcztcbiAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgX2x2YWwucGFyc2VJbXBvcnRlZElkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBpbXBvcnQgYXR0cmlidXRlcyBsaWtlIGB3aXRoIHt0eXBlOiBcImpzb25cIn1gLCBvciB0aGUgbGVnYWN5IGZvcm1cbiAqIGBhc3NlcnQge3R5cGU6IFwianNvblwifWAuXG4gKlxuICogSW1wb3J0IGF0dHJpYnV0ZXMgdGVjaG5pY2FsbHkgaGF2ZSB0aGVpciBvd24gc3ludGF4LCBidXQgYXJlIGFsd2F5cyBwYXJzZWFibGVcbiAqIGFzIGEgcGxhaW4gSlMgb2JqZWN0LCBzbyBqdXN0IGRvIHRoYXQgZm9yIHNpbXBsaWNpdHkuXG4gKi9cbmZ1bmN0aW9uIG1heWJlUGFyc2VJbXBvcnRBdHRyaWJ1dGVzKCkge1xuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fd2l0aCkgfHwgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQpICYmICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9leHByZXNzaW9uLnBhcnNlT2JqLmNhbGwodm9pZCAwLCBmYWxzZSwgZmFsc2UpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcbnZhciBfaW5kZXggPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvaW5kZXgnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuL3N0YXRlbWVudCcpO1xuXG4gZnVuY3Rpb24gcGFyc2VGaWxlKCkge1xuICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgaWYgKFxuICAgIF9iYXNlLnN0YXRlLnBvcyA9PT0gMCAmJlxuICAgIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoMCkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLm51bWJlclNpZ24gJiZcbiAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5leGNsYW1hdGlvbk1hcmtcbiAgKSB7XG4gICAgX2luZGV4LnNraXBMaW5lQ29tbWVudC5jYWxsKHZvaWQgMCwgMik7XG4gIH1cbiAgX2luZGV4Lm5leHRUb2tlbi5jYWxsKHZvaWQgMCwgKTtcbiAgcmV0dXJuIF9zdGF0ZW1lbnQucGFyc2VUb3BMZXZlbC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUZpbGUgPSBwYXJzZUZpbGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxudmFyIF9iYXNlID0gcmVxdWlyZSgnLi90cmF2ZXJzZXIvYmFzZScpO1xudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4vdHJhdmVyc2VyL2luZGV4Jyk7XG5cbiBjbGFzcyBGaWxlIHtcbiAgXG4gIFxuXG4gIGNvbnN0cnVjdG9yKHRva2Vucywgc2NvcGVzKSB7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5zY29wZXMgPSBzY29wZXM7XG4gIH1cbn0gZXhwb3J0cy5GaWxlID0gRmlsZTtcblxuIGZ1bmN0aW9uIHBhcnNlKFxuICBpbnB1dCxcbiAgaXNKU1hFbmFibGVkLFxuICBpc1R5cGVTY3JpcHRFbmFibGVkLFxuICBpc0Zsb3dFbmFibGVkLFxuKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkICYmIGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29tYmluZSBmbG93IGFuZCB0eXBlc2NyaXB0IHBsdWdpbnMuXCIpO1xuICB9XG4gIF9iYXNlLmluaXRQYXJzZXIuY2FsbCh2b2lkIDAsIGlucHV0LCBpc0pTWEVuYWJsZWQsIGlzVHlwZVNjcmlwdEVuYWJsZWQsIGlzRmxvd0VuYWJsZWQpO1xuICBjb25zdCByZXN1bHQgPSBfaW5kZXgucGFyc2VGaWxlLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0aHJvdyBfYmFzZS5hdWdtZW50RXJyb3IuY2FsbCh2b2lkIDAsIF9iYXNlLnN0YXRlLmVycm9yKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSBleHBvcnRzLnBhcnNlID0gcGFyc2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBvcHRpb25hbCBjaGFpbiBvciBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0aW9uIGhhcyBhbnkgYXdhaXQgc3RhdGVtZW50cyBpblxuICogaXQuIElmIHNvLCB3ZSdsbCBuZWVkIHRvIHRyYW5zcGlsZSB0byBhbiBhc3luYyBvcGVyYXRpb24uXG4gKlxuICogV2UgY29tcHV0ZSB0aGlzIGJ5IHdhbGtpbmcgdGhlIGxlbmd0aCBvZiB0aGUgb3BlcmF0aW9uIGFuZCByZXR1cm5pbmcgdHJ1ZSBpZiB3ZSBzZWUgYW4gYXdhaXRcbiAqIGtleXdvcmQgdXNlZCBhcyBhIHJlYWwgYXdhaXQgKHJhdGhlciB0aGFuIGFuIG9iamVjdCBrZXkgb3IgcHJvcGVydHkgYWNjZXNzKS4gTmVzdGVkIG9wdGlvbmFsXG4gKiBjaGFpbi9udWxsaXNoIG9wZXJhdGlvbnMgbmVlZCB0byBiZSB0cmFja2VkIGJ1dCBkb24ndCBzaWxlbmNlIGF3YWl0LCBidXQgYSBuZXN0ZWQgYXN5bmMgZnVuY3Rpb25cbiAqIChvciBhbnkgb3RoZXIgbmVzdGVkIHNjb3BlKSB3aWxsIG1ha2UgdGhlIGF3YWl0IG5vdCBjb3VudC5cbiAqL1xuIGZ1bmN0aW9uIGlzQXN5bmNPcGVyYXRpb24odG9rZW5zKSB7XG4gIGxldCBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgY29uc3Qgc3RhcnRUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgZG8ge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zLnRva2Vuc1tpbmRleF07XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBkZXB0aCsrO1xuICAgIH1cbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICBkZXB0aC0tO1xuICAgIH1cbiAgICBkZXB0aCArPSB0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VTdGFydHM7XG4gICAgZGVwdGggLT0gdG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kcztcblxuICAgIGlmIChcbiAgICAgIHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0ICYmXG4gICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PSBudWxsICYmXG4gICAgICB0b2tlbi5zY29wZURlcHRoID09PSBzdGFydFRva2VuLnNjb3BlRGVwdGhcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpbmRleCArPSAxO1xuICB9IHdoaWxlIChkZXB0aCA+IDAgJiYgaW5kZXggPCB0b2tlbnMudG9rZW5zLmxlbmd0aCk7XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5kZWZhdWx0ID0gaXNBc3luY09wZXJhdGlvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfaXNBc3luY09wZXJhdGlvbiA9IHJlcXVpcmUoJy4vdXRpbC9pc0FzeW5jT3BlcmF0aW9uJyk7IHZhciBfaXNBc3luY09wZXJhdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0FzeW5jT3BlcmF0aW9uKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG4gY2xhc3MgVG9rZW5Qcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMucmVzdWx0Q29kZSA9IFwiXCJ9XG4gIC8vIEFycmF5IG1hcHBpbmcgaW5wdXQgdG9rZW4gaW5kZXggdG8gb3B0aW9uYWwgc3RyaW5nIGluZGV4IHBvc2l0aW9uIGluIHRoZVxuICAvLyBvdXRwdXQgY29kZS5cbiAgIF9faW5pdDIoKSB7dGhpcy5yZXN1bHRNYXBwaW5ncyA9IG5ldyBBcnJheSh0aGlzLnRva2Vucy5sZW5ndGgpfVxuICAgX19pbml0MygpIHt0aGlzLnRva2VuSW5kZXggPSAwfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICBjb2RlLFxuICAgICB0b2tlbnMsXG4gICAgIGlzRmxvd0VuYWJsZWQsXG4gICAgIGRpc2FibGVFU1RyYW5zZm9ybXMsXG4gICAgIGhlbHBlck1hbmFnZXIsXG4gICkgezt0aGlzLmNvZGUgPSBjb2RlO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNGbG93RW5hYmxlZCA9IGlzRmxvd0VuYWJsZWQ7dGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gZGlzYWJsZUVTVHJhbnNmb3Jtczt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtUb2tlblByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7fVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCB0aGUgdG9rZW4gc3RhdGUgaW4gYSB3YXkgdGhhdCBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIsIHVzZWZ1bCBmb3JcbiAgICogdGhpbmdzIGxpa2UgbG9va2FoZWFkLlxuICAgKlxuICAgKiByZXN1bHRNYXBwaW5ncyBkbyBub3QgbmVlZCB0byBiZSBjb3BpZWQgc2luY2UgaW4gYWxsIHVzZSBjYXNlcywgdGhleSB3aWxsXG4gICAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSBhZnRlciByZXN0b3JlLlxuICAgKi9cbiAgc25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdENvZGU6IHRoaXMucmVzdWx0Q29kZSxcbiAgICAgIHRva2VuSW5kZXg6IHRoaXMudG9rZW5JbmRleCxcbiAgICB9O1xuICB9XG5cbiAgcmVzdG9yZVRvU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgPSBzbmFwc2hvdC5yZXN1bHRDb2RlO1xuICAgIHRoaXMudG9rZW5JbmRleCA9IHNuYXBzaG90LnRva2VuSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGNvZGUgZ2VuZXJhdGVkIHNpbmNlIHRoZSBzbmFwc2hvdCwgbGVhdmluZyB0aGVcbiAgICogY3VycmVudCB0b2tlbiBwb3NpdGlvbiBpbi1wbGFjZS4gVW5saWtlIG1vc3QgVG9rZW5Qcm9jZXNzb3Igb3BlcmF0aW9ucyxcbiAgICogdGhpcyBvcGVyYXRpb24gY2FuIHJlc3VsdCBpbiBpbnB1dC9vdXRwdXQgbGluZSBudW1iZXIgbWlzbWF0Y2hlcyBiZWNhdXNlXG4gICAqIHRoZSByZW1vdmVkIGNvZGUgbWF5IGNvbnRhaW4gbmV3bGluZXMsIHNvIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSB1c2VkXG4gICAqIHNwYXJpbmdseS5cbiAgICovXG4gIGRhbmdlcm91c2x5R2V0QW5kUmVtb3ZlQ29kZVNpbmNlU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdENvZGUuc2xpY2Uoc25hcHNob3QucmVzdWx0Q29kZS5sZW5ndGgpO1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IHNuYXBzaG90LnJlc3VsdENvZGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IFwiXCI7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5ncyA9IG5ldyBBcnJheSh0aGlzLnRva2Vucy5sZW5ndGgpO1xuICAgIHRoaXMudG9rZW5JbmRleCA9IDA7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vuc1tpbmRleF0uY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkXG4gICAgKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkge1xuICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gcHJvY2VzcyBlc2NhcGVzIHNpbmNlIHRlY2huaWNhbGx5IHlvdSBjYW4gaGF2ZSB1bmljb2RlIGVzY2FwZXMgaW4gdmFyaWFibGVcbiAgICAvLyBuYW1lcy5cbiAgICByZXR1cm4gdGhpcy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleChyZWxhdGl2ZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0aGlzLnRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odGhpcy5jdXJyZW50VG9rZW4oKSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHJhd0NvZGVGb3JUb2tlbih0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMuY3VycmVudFRva2VuKCkpO1xuICB9XG5cbiAgc3RyaW5nVmFsdWVGb3JUb2tlbih0b2tlbikge1xuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB3aGVuIHR3byBpbXBvcnRzIGFyZSB0aGUgc2FtZSBhbmQgdG8gcmVzb2x2ZSBUeXBlU2NyaXB0IGVudW0ga2V5cy5cbiAgICAvLyBJZGVhbGx5IHdlJ2QgcHJvY2VzcyBlc2NhcGVzIHdpdGhpbiB0aGUgc3RyaW5ncywgYnV0IGZvciBub3cgd2UgcHJldHR5IG11Y2ggdGFrZSB0aGUgcmF3XG4gICAgLy8gY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gIH1cblxuICBtYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHQxKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MTtcbiAgfVxuXG4gIG1hdGNoZXMyQXRJbmRleChpbmRleCwgdDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJiB0aGlzLnRva2Vuc1tpbmRleCArIDFdLnR5cGUgPT09IHQyO1xuICB9XG5cbiAgbWF0Y2hlczNBdEluZGV4KGluZGV4LCB0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzMSh0MSkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxO1xuICB9XG5cbiAgbWF0Y2hlczIodDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiYgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMV0udHlwZSA9PT0gdDI7XG4gIH1cblxuICBtYXRjaGVzMyh0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDFdLnR5cGUgPT09IHQyICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzNCh0MSwgdDIsIHQzLCB0NCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0XG4gICAgKTtcbiAgfVxuXG4gIG1hdGNoZXM1KHQxLCB0MiwgdDMsIHQ0LCB0NSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0ICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyA0XS50eXBlID09PSB0NVxuICAgICk7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2VuSW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0eXBlLCBjb250ZXh0SWQpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzMSh0eXBlKSAmJiB0aGlzLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29udGV4dElkO1xuICB9XG5cbiAgcHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKSB7XG4gICAgbGV0IHdoaXRlc3BhY2VBbmRDb21tZW50cyA9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5JbmRleCA+IDAgPyB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggLSAxXS5lbmQgOiAwLFxuICAgICAgdGhpcy50b2tlbkluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoID8gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCA6IHRoaXMuY29kZS5sZW5ndGgsXG4gICAgKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dFbmFibGVkKSB7XG4gICAgICB3aGl0ZXNwYWNlQW5kQ29tbWVudHMgPSB3aGl0ZXNwYWNlQW5kQ29tbWVudHMucmVwbGFjZSgvQGZsb3cvZywgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB3aGl0ZXNwYWNlQW5kQ29tbWVudHM7XG4gIH1cblxuICByZXBsYWNlVG9rZW4obmV3Q29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShuZXdDb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKS5yZXBsYWNlKC9bXlxcclxcbl0vZywgXCJcIik7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVtb3ZlSW5pdGlhbFRva2VuKCkge1xuICAgIHRoaXMucmVwbGFjZVRva2VuKFwiXCIpO1xuICB9XG5cbiAgcmVtb3ZlVG9rZW4oKSB7XG4gICAgdGhpcy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY29kZSB1bnRpbCB0aGUgbmV4dCB9LCBhY2NvdW50aW5nIGZvciBiYWxhbmNlZCBicmFjZXMuXG4gICAqL1xuICByZW1vdmVCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICBicmFjZURlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGlmIChicmFjZURlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJyYWNlRGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICBjb3B5RXhwZWN0ZWRUb2tlbih0b2tlblR5cGUpIHtcbiAgICBpZiAodGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS50eXBlICE9PSB0b2tlblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG9rZW4gJHt0b2tlblR5cGV9YCk7XG4gICAgfVxuICAgIHRoaXMuY29weVRva2VuKCk7XG4gIH1cblxuICBjb3B5VG9rZW4oKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTtcbiAgICB0aGlzLmFwcGVuZFRva2VuUHJlZml4KCk7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5nc1t0aGlzLnRva2VuSW5kZXhdID0gdGhpcy5yZXN1bHRDb2RlLmxlbmd0aDtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5jb2RlLnNsaWNlKFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCxcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uZW5kLFxuICAgICk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgY29weVRva2VuV2l0aFByZWZpeChwcmVmaXgpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5QcmVmaXgoKTtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gcHJlZml4O1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uc3RhcnQsXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLmVuZCxcbiAgICApO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5TdWZmaXgoKTtcbiAgICB0aGlzLnRva2VuSW5kZXgrKztcbiAgfVxuXG4gICBhcHBlbmRUb2tlblByZWZpeCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cyB8fCB0b2tlbi5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgdG9rZW4uaXNBc3luY09wZXJhdGlvbiA9IF9pc0FzeW5jT3BlcmF0aW9uMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0czsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IFwiYXdhaXQgXCI7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNOdWxsaXNoQ29hbGVzY2VcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwibnVsbGlzaENvYWxlc2NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJhd2FpdCBcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2VuSW5kZXggPiAwICYmIHRoaXMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkge1xuICAgICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJvcHRpb25hbENoYWluRGVsZXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNPcHRpb25hbENoYWluXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwib3B0aW9uYWxDaGFpblwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihbXCI7XG4gICAgfVxuICB9XG5cbiAgIGFwcGVuZFRva2VuU3VmZml4KCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluRW5kICYmICF0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIl0pXCI7XG4gICAgfVxuICAgIGlmICh0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VFbmRzICYmICF0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kczsgaSsrKSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIikpXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwZW5kQ29kZShjb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IGNvZGU7XG4gIH1cblxuICBjdXJyZW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF07XG4gIH1cblxuICBjdXJyZW50VG9rZW5Db2RlKCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICB9XG5cbiAgdG9rZW5BdFJlbGF0aXZlSW5kZXgocmVsYXRpdmVJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyByZWxhdGl2ZUluZGV4XTtcbiAgfVxuXG4gIGN1cnJlbnRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gdGhlIG5leHQgdG9rZW4uIE9ubHkgc3VpdGFibGUgaW4gcHJlcHJvY2Vzc2luZyBzdGVwcy4gV2hlblxuICAgKiBnZW5lcmF0aW5nIG5ldyBjb2RlLCB5b3Ugc2hvdWxkIHVzZSBjb3B5VG9rZW4gb3IgcmVtb3ZlVG9rZW4uXG4gICAqL1xuICBuZXh0VG9rZW4oKSB7XG4gICAgaWYgKHRoaXMudG9rZW5JbmRleCA9PT0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkbHkgcmVhY2hlZCBlbmQgb2YgaW5wdXQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2VuSW5kZXgrKztcbiAgfVxuXG4gIHByZXZpb3VzVG9rZW4oKSB7XG4gICAgdGhpcy50b2tlbkluZGV4LS07XG4gIH1cblxuICBmaW5pc2goKSB7XG4gICAgaWYgKHRoaXMudG9rZW5JbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byBmaW5pc2ggcHJvY2Vzc2luZyB0b2tlbnMgYmVmb3JlIHJlYWNoaW5nIHRoZSBlbmQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHJldHVybiB7Y29kZTogdGhpcy5yZXN1bHRDb2RlLCBtYXBwaW5nczogdGhpcy5yZXN1bHRNYXBwaW5nc307XG4gIH1cblxuICBpc0F0RW5kKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuSW5kZXggPT09IHRoaXMudG9rZW5zLmxlbmd0aDtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBUb2tlblByb2Nlc3NvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGFzcyBmaWVsZHMgZm9yIHRoaXMgY2xhc3MsIGdpdmVuIGEgdG9rZW4gcHJvY2Vzc29yIHBvaW50aW5nIHRvIHRoZVxuICogb3Blbi1icmFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGNsYXNzLlxuICovXG4gZnVuY3Rpb24gZ2V0Q2xhc3NJbmZvKFxuICByb290VHJhbnNmb3JtZXIsXG4gIHRva2VucyxcbiAgbmFtZU1hbmFnZXIsXG4gIGRpc2FibGVFU1RyYW5zZm9ybXMsXG4pIHtcbiAgY29uc3Qgc25hcHNob3QgPSB0b2tlbnMuc25hcHNob3QoKTtcblxuICBjb25zdCBoZWFkZXJJbmZvID0gcHJvY2Vzc0NsYXNzSGVhZGVyKHRva2Vucyk7XG5cbiAgbGV0IGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzID0gW107XG4gIGNvbnN0IGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyA9IFtdO1xuICBjb25zdCBzdGF0aWNJbml0aWFsaXplck5hbWVzID0gW107XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IG51bGw7XG4gIGNvbnN0IGZpZWxkcyA9IFtdO1xuICBjb25zdCByYW5nZXNUb1JlbW92ZSA9IFtdO1xuXG4gIGNvbnN0IGNsYXNzQ29udGV4dElkID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgaWYgKGNsYXNzQ29udGV4dElkID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub24tbnVsbCBjbGFzcyBjb250ZXh0IElEIG9uIGNsYXNzIG9wZW4tYnJhY2UuXCIpO1xuICB9XG5cbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNsYXNzQ29udGV4dElkKSkge1xuICAgIGlmICh0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvcikgJiYgIXRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICh7Y29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsIGNvbnN0cnVjdG9ySW5zZXJ0UG9zfSA9IHByb2Nlc3NDb25zdHJ1Y3Rvcih0b2tlbnMpKTtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnNlbWkpKSB7XG4gICAgICBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHRva2Vucy5jdXJyZW50SW5kZXgoKSwgZW5kOiB0b2tlbnMuY3VycmVudEluZGV4KCkgKyAxfSk7XG4gICAgICB9XG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgfSBlbHNlIGlmICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVpdGhlciBhIG1ldGhvZCBvciBhIGZpZWxkLiBTa2lwIHRvIHRoZSBpZGVudGlmaWVyIHBhcnQuXG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdGFydEluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgICAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gICAgICBsZXQgaXNFU1ByaXZhdGUgPSBmYWxzZTtcbiAgICAgIGxldCBpc0RlY2xhcmVPckFic3RyYWN0ID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgIGlmICh0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fc3RhdGljKSkge1xuICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuaGFzaCkpIHtcbiAgICAgICAgICBpc0VTUHJpdmF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlKSB8fCB0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpKSB7XG4gICAgICAgICAgaXNEZWNsYXJlT3JBYnN0cmFjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3RhdGljICYmIHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHN0YXRpYyBibG9jaywgc28gZG9uJ3QgcHJvY2VzcyBpdCBpbiBhbnkgc3BlY2lhbCB3YXkuXG4gICAgICAgIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRVNQcml2YXRlKSB7XG4gICAgICAgIC8vIFN1Y3Jhc2UgZG9lc24ndCBhdHRlbXB0IHRvIHRyYW5zcGlsZSBwcml2YXRlIGZpZWxkczsganVzdCBsZWF2ZSB0aGVtIGFzLWlzLlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmXG4gICAgICAgICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgKHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9ID0gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZVN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBza2lwRmllbGROYW1lKHRva2Vucyk7XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCwgc28gbm90aGluZyB0byBwcm9jZXNzLlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgdHlwZSBhbm5vdGF0aW9uIHRoYXQgd2UgbmVlZCB0byBza2lwLlxuICAgICAgd2hpbGUgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICBjb25zdCBlcXVhbHNJbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbml0aWFsaXplciwgc28gd2UgbmVlZCB0byB3cmFwIGluIGFuIGluaXRpYWxpemVyIG1ldGhvZC5cbiAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmICh2YWx1ZUVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcmhzRW5kSW5kZXggb24gY2xhc3MgZmllbGQgYXNzaWdubWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgdmFsdWVFbmQpIHtcbiAgICAgICAgICByb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXRpYWxpemVyTmFtZTtcbiAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgaW5pdGlhbGl6ZXJOYW1lID0gbmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9faW5pdFN0YXRpY1wiKTtcbiAgICAgICAgICBzdGF0aWNJbml0aWFsaXplck5hbWVzLnB1c2goaW5pdGlhbGl6ZXJOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUgPSBuYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX19pbml0XCIpO1xuICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5wdXNoKGluaXRpYWxpemVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmllbGRzIHN0YXJ0IGF0IHRoZSBuYW1lLCBzbyBgc3RhdGljIHggPSAxO2AgaGFzIGEgZmllbGQgcmFuZ2Ugb2YgYHggPSAxO2AuXG4gICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUsXG4gICAgICAgICAgZXF1YWxzSW5kZXgsXG4gICAgICAgICAgc3RhcnQ6IG5hbWVTdGFydEluZGV4LFxuICAgICAgICAgIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMgfHwgaXNEZWNsYXJlT3JBYnN0cmFjdCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBmaWVsZCBkZWNsYXJhdGlvbiwgbGlrZSBgeDtgLiBXaXRoIHRoZSBjbGFzcyB0cmFuc2Zvcm0gZW5hYmxlZCwgd2UganVzdFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxpbmUgc28gdGhhdCBubyBvdXRwdXQgaXMgcHJvZHVjZWQuIFdpdGggdGhlIGNsYXNzIHRyYW5zZm9ybSBkaXNhYmxlZCwgd2VcbiAgICAgICAgLy8gdXN1YWxseSB3YW50IHRvIHByZXNlcnZlIHRoZSBkZWNsYXJhdGlvbiAoYnV0IHN0aWxsIHN0cmlwIHR5cGVzKSwgYnV0IGlmIHRoZSBgZGVjbGFyZWBcbiAgICAgICAgLy8gb3IgYGFic3RyYWN0YCBrZXl3b3JkIGlzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZSB0byBhdm9pZCBpbml0aWFsaXppbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHN0YXRlbWVudFN0YXJ0SW5kZXgsIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9rZW5zLnJlc3RvcmVUb1NuYXBzaG90KHNuYXBzaG90KTtcbiAgaWYgKGRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAvLyBXaXRoIEVTIHRyYW5zZm9ybXMgZGlzYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gdHJhbnNmb3JtIHJlZ3VsYXIgY2xhc3NcbiAgICAvLyBmaWVsZCBkZWNsYXJhdGlvbnMsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHRyaWNrcyB0b1xuICAgIC8vIHJlZmVyZW5jZSB0aGUgY29uc3RydWN0b3IgZm9yIHN0YXRpYyBpbml0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byB0cmFuc2Zvcm1cbiAgICAvLyBUeXBlU2NyaXB0IGZpZWxkIGluaXRpYWxpemVycyBkZWZpbmVkIGFzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgYW5kIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byByZW1vdmUgYGRlY2xhcmVgIGZpZWxkcy4gRm9yIG5vdywgd2UgcnVuIHRoZSBzYW1lIGNvZGVcbiAgICAvLyBwYXRoIGJ1dCBvbWl0IGFueSBmaWVsZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlIGNsYXNzIGhhZCBubyBmaWVsZFxuICAgIC8vIGRlY2xhcmF0aW9ucy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSBmdWxseSBkcm9wIHRoZSBjbGFzcyBmaWVsZHNcbiAgICAvLyB0cmFuc2Zvcm0sIHdlIGNhbiBzaW1wbGlmeSB0aGlzIGNvZGUgc2lnbmlmaWNhbnRseS5cbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzOiBbXSxcbiAgICAgIHN0YXRpY0luaXRpYWxpemVyTmFtZXM6IFtdLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zLFxuICAgICAgZmllbGRzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBnZXRDbGFzc0luZm87XG5cbi8qKlxuICogTW92ZSB0aGUgdG9rZW4gcHJvY2Vzc29yIHRvIHRoZSBuZXh0IG1ldGhvZC9maWVsZCBpbiB0aGUgY2xhc3MuXG4gKlxuICogVG8gZG8gdGhhdCwgd2Ugc2VlayBmb3J3YXJkIHRvIHRoZSBuZXh0IHN0YXJ0IG9mIGEgY2xhc3MgbmFtZSAoZWl0aGVyIGFuIG9wZW5cbiAqIGJyYWNrZXQgb3IgYW4gaWRlbnRpZmllciwgb3IgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UpLCB0aGVuIHNlZWsgYmFja3dhcmQgdG9cbiAqIGluY2x1ZGUgYW55IGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCkge1xuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkICE9PSBjbGFzc0NvbnRleHRJZCkge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxuICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpKSkge1xuICAgIHRva2Vucy5wcmV2aW91c1Rva2VuKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NsYXNzSGVhZGVyKHRva2Vucykge1xuICBjb25zdCBjbGFzc1Rva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBjb25zdCBjb250ZXh0SWQgPSBjbGFzc1Rva2VuLmNvbnRleHRJZDtcbiAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY29udGV4dCBJRCBvbiBjbGFzcyB0b2tlbi5cIik7XG4gIH1cbiAgY29uc3QgaXNFeHByZXNzaW9uID0gY2xhc3NUb2tlbi5pc0V4cHJlc3Npb247XG4gIGlmIChpc0V4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlzRXhwcmVzc2lvbiBvbiBjbGFzcyB0b2tlbi5cIik7XG4gIH1cbiAgbGV0IGNsYXNzTmFtZSA9IG51bGw7XG4gIGxldCBoYXNTdXBlcmNsYXNzID0gZmFsc2U7XG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgY2xhc3NOYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gIH1cbiAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMLCBjb250ZXh0SWQpKSB7XG4gICAgLy8gSWYgdGhpcyBoYXMgYSBzdXBlcmNsYXNzLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhbiBgZXh0ZW5kc2AgdG9rZW4uIElmIGl0IGRvZXNuJ3QgaGF2ZSBhXG4gICAgLy8gc3VwZXJjbGFzcywgb25seSB0eXBlIHBhcmFtZXRlcnMgYW5kIGBpbXBsZW1lbnRzYCBjbGF1c2VzIGNhbiBzaG93IHVwIGhlcmUsIGFsbCBvZiB3aGljaFxuICAgIC8vIGNvbnNpc3Qgb25seSBvZiB0eXBlIHRva2Vucy4gQSBkZWNsYXJhdGlvbiBsaWtlIGBjbGFzcyBBPEIgZXh0ZW5kcyBDPiB7YCBzaG91bGQgKm5vdCogY291bnRcbiAgICAvLyBhcyBoYXZpbmcgYSBzdXBlcmNsYXNzLlxuICAgIGlmICh0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fZXh0ZW5kcykgJiYgIXRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIGhhc1N1cGVyY2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgcmV0dXJuIHtpc0V4cHJlc3Npb24sIGNsYXNzTmFtZSwgaGFzU3VwZXJjbGFzc307XG59XG5cbi8qKlxuICogRXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24gb3V0IG9mIGEgY29uc3RydWN0b3IsIHN0YXJ0aW5nIGF0IHRoZSBcImNvbnN0cnVjdG9yXCIgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucylcblxuXG4ge1xuICBjb25zdCBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyA9IFtdO1xuXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgY29uc3QgY29uc3RydWN0b3JDb250ZXh0SWQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkO1xuICBpZiAoY29uc3RydWN0b3JDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNvbnRleHQgSUQgb24gb3Blbi1wYXJlbiBzdGFydGluZyBjb25zdHJ1Y3RvciBwYXJhbXMuXCIpO1xuICB9XG4gIC8vIEFkdmFuY2UgdGhyb3VnaCBwYXJhbWV0ZXJzIGxvb2tpbmcgZm9yIGFjY2VzcyBtb2RpZmllcnMuXG4gIHdoaWxlICghdG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbChfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUiwgY29uc3RydWN0b3JDb250ZXh0SWQpKSB7XG4gICAgaWYgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQgPT09IGNvbnN0cnVjdG9yQ29udGV4dElkKSB7XG4gICAgICAvLyBDdXJyZW50IHRva2VuIGlzIGFuIG9wZW4gcGFyZW4gb3IgY29tbWEganVzdCBiZWZvcmUgYSBwYXJhbSwgc28gY2hlY2tcbiAgICAgIC8vIHRoYXQgcGFyYW0gZm9yIGFjY2VzcyBtb2RpZmllcnMuXG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICBpZiAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgICAgd2hpbGUgKGlzQWNjZXNzTW9kaWZpZXIodG9rZW5zLmN1cnJlbnRUb2tlbigpKSkge1xuICAgICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgYWZ0ZXIgYWNjZXNzIG1vZGlmaWVycyBpbiBjb25zdHJ1Y3RvciBhcmcuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLnB1c2goYHRoaXMuJHtuYW1lfSA9ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgIH1cbiAgfVxuICAvLyApXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgLy8gQ29uc3RydWN0b3IgdHlwZSBhbm5vdGF0aW9ucyBhcmUgaW52YWxpZCwgYnV0IHNraXAgdGhlbSBhbnl3YXkgc2luY2VcbiAgLy8gdGhleSdyZSBlYXN5IHRvIHNraXAuXG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcblxuICAvLyBBZHZhbmNlIHRocm91Z2ggYm9keSBsb29raW5nIGZvciBhIHN1cGVyIGNhbGwuXG4gIGxldCBmb3VuZFN1cGVyQ2FsbCA9IGZhbHNlO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNvbnN0cnVjdG9yQ29udGV4dElkKSkge1xuICAgIGlmICghZm91bmRTdXBlckNhbGwgJiYgdG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX3N1cGVyLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGNvbnN0IHN1cGVyQ2FsbENvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoc3VwZXJDYWxsQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYSBjb250ZXh0IElEIG9uIHRoZSBzdXBlciBjYWxsXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBzdXBlckNhbGxDb250ZXh0SWQpKSB7XG4gICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgICAgZm91bmRTdXBlckNhbGwgPSB0cnVlO1xuICAgIH1cbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgLy8gfVxuICB0b2tlbnMubmV4dFRva2VuKCk7XG5cbiAgcmV0dXJuIHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGlzIGlzIGFueSB0b2tlbiB0aGF0IGNhbiBnbyBiZWZvcmUgdGhlIG5hbWUgaW4gYSBtZXRob2QvZmllbGQuXG4gKi9cbmZ1bmN0aW9uIGlzQWNjZXNzTW9kaWZpZXIodG9rZW4pIHtcbiAgcmV0dXJuIFtcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9hc3luYyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9nZXQsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fc2V0LFxuICAgIF90eXBlcy5Ub2tlblR5cGUucGx1cyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzLFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX3JlYWRvbmx5LFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX3N0YXRpYyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9wdWJsaWMsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fcHJpdmF0ZSxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fb3ZlcnJpZGUsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5zdGFyLFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX2RlY2xhcmUsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5oYXNoLFxuICBdLmluY2x1ZGVzKHRva2VuLnR5cGUpO1xufVxuXG4vKipcbiAqIFRoZSBuZXh0IHRva2VuIG9yIHNldCBvZiB0b2tlbnMgaXMgZWl0aGVyIGFuIGlkZW50aWZpZXIgb3IgYW4gZXhwcmVzc2lvbiBpbiBzcXVhcmUgYnJhY2tldHMsIGZvclxuICogYSBtZXRob2Qgb3IgZmllbGQgbmFtZS5cbiAqL1xuZnVuY3Rpb24gc2tpcEZpZWxkTmFtZSh0b2tlbnMpIHtcbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgY2xhc3NDb250ZXh0SWQgPSBzdGFydFRva2VuLmNvbnRleHRJZDtcbiAgICBpZiAoY2xhc3NDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgY29udGV4dCBJRCBvbiBjb21wdXRlZCBuYW1lIG9wZW4gYnJhY2tldC5cIik7XG4gICAgfVxuICAgIHdoaWxlICghdG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbChfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9IGVsc2Uge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG4gZnVuY3Rpb24gZWxpZGVJbXBvcnRFcXVhbHModG9rZW5zKSB7XG4gIC8vIGltcG9ydFxuICB0b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gIC8vIG5hbWVcbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vID1cbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vIG5hbWUgb3IgcmVxdWlyZVxuICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgLy8gSGFuZGxlIGVpdGhlciBgaW1wb3J0IEEgPSByZXF1aXJlKCdBJylgIG9yIGBpbXBvcnQgQSA9IEIuQy5EYC5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAvLyAoXG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gcGF0aCBzdHJpbmdcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAvLyApXG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgIC8vIC5cbiAgICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gbmFtZVxuICAgICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IGVsaWRlSW1wb3J0RXF1YWxzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF90b2tlbml6ZXIgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuXG5cblxuXG4gY29uc3QgRU1QVFlfREVDTEFSQVRJT05fSU5GTyA9IHtcbiAgdHlwZURlY2xhcmF0aW9uczogbmV3IFNldCgpLFxuICB2YWx1ZURlY2xhcmF0aW9uczogbmV3IFNldCgpLFxufTsgZXhwb3J0cy5FTVBUWV9ERUNMQVJBVElPTl9JTkZPID0gRU1QVFlfREVDTEFSQVRJT05fSU5GTztcblxuLyoqXG4gKiBHZXQgYWxsIHRvcC1sZXZlbCBpZGVudGlmaWVycyB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQgd2hlbiBleHBvcnRlZCBpbiBUeXBlU2NyaXB0LlxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBJZiBhbiBpZGVudGlmaWVyIGlzIGRlY2xhcmVkIGFzIGBjb25zdCB4YCwgdGhlbiBgZXhwb3J0IHt4fWAgc2hvdWxkIGJlIHByZXNlcnZlZC5cbiAqIC0gSWYgaXQncyBkZWNsYXJlZCBhcyBgdHlwZSB4YCwgdGhlbiBgZXhwb3J0IHt4fWAgc2hvdWxkIGJlIHJlbW92ZWQuXG4gKiAtIElmIGl0J3MgZGVjbGFyZWQgYXMgYm90aCBgY29uc3QgeGAgYW5kIGB0eXBlIHhgLCB0aGVuIHRoZSBleHBvcnQgc2hvdWxkIGJlIHByZXNlcnZlZC5cbiAqIC0gQ2xhc3NlcyBhbmQgZW51bXMgc2hvdWxkIGJlIHByZXNlcnZlZCAoZXZlbiB0aG91Z2ggdGhleSBhbHNvIGludHJvZHVjZSB0eXBlcykuXG4gKiAtIEltcG9ydGVkIGlkZW50aWZpZXJzIHNob3VsZCBiZSBwcmVzZXJ2ZWQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG9cbiAqICAgcnVsZSB0aGVtIG91dC4gLS1pc29sYXRlZE1vZHVsZXMgZGlzYWxsb3dzIHJlLWV4cG9ydHMsIHdoaWNoIGNhdGNoZXMgZXJyb3JzIGhlcmUuXG4gKi9cbiBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHZhbHVlRGVjbGFyYXRpb25zID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBfdG9rZW5pemVyLmlzVG9wTGV2ZWxEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICBpZiAodG9rZW4uaXNUeXBlKSB7XG4gICAgICAgIHR5cGVEZWNsYXJhdGlvbnMuYWRkKHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZURlY2xhcmF0aW9ucy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt0eXBlRGVjbGFyYXRpb25zLCB2YWx1ZURlY2xhcmF0aW9uc307XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldERlY2xhcmF0aW9uSW5mbztcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbi8qKlxuICogU3RhcnRpbmcgYXQgYGV4cG9ydCB7YCwgbG9vayBhaGVhZCBhbmQgcmV0dXJuIGB0cnVlYCBpZiB0aGlzIGlzIGFuXG4gKiBgZXhwb3J0IHsuLi59IGZyb21gIHN0YXRlbWVudCBhbmQgYGZhbHNlYCBpZiB0aGlzIGlzIGEgcGxhaW4gbXVsdGktZXhwb3J0LlxuICovXG4gZnVuY3Rpb24gaXNFeHBvcnRGcm9tKHRva2Vucykge1xuICBsZXQgY2xvc2VCcmFjZUluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICBjbG9zZUJyYWNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gKFxuICAgIHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMiwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpXG4gICk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlzRXhwb3J0RnJvbTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbi8qKlxuICogU3RhcnRpbmcgYXQgYSBwb3RlbnRpYWwgYHdpdGhgIG9yIChsZWdhY3kpIGBhc3NlcnRgIHRva2VuLCByZW1vdmUgdGhlIGltcG9ydFxuICogYXR0cmlidXRlcyBpZiB0aGV5IGV4aXN0LlxuICovXG4gZnVuY3Rpb24gcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRva2Vucykge1xuICBpZiAoXG4gICAgdG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX3dpdGgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICh0b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgJiYgdG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXNzZXJ0KSlcbiAgKSB7XG4gICAgLy8gYXNzZXJ0XG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8ge1xuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIHRva2Vucy5yZW1vdmVCYWxhbmNlZENvZGUoKTtcbiAgICAvLyB9XG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIH1cbn0gZXhwb3J0cy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMgPSByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuLyoqXG4gKiBDb21tb24gbWV0aG9kIHNoYXJpbmcgY29kZSBiZXR3ZWVuIENKUyBhbmQgRVNNIGNhc2VzLCBzaW5jZSB0aGV5J3JlIHRoZSBzYW1lIGhlcmUuXG4gKi9cbiBmdW5jdGlvbiBzaG91bGRFbGlkZURlZmF1bHRFeHBvcnQoXG4gIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gIGtlZXBVbnVzZWRJbXBvcnRzLFxuICB0b2tlbnMsXG4gIGRlY2xhcmF0aW9uSW5mbyxcbikge1xuICBpZiAoIWlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgfHwga2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZXhwb3J0VG9rZW4gPSB0b2tlbnMuY3VycmVudFRva2VuKCk7XG4gIGlmIChleHBvcnRUb2tlbi5yaHNFbmRJbmRleCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgcmhzRW5kSW5kZXggb24gZXhwb3J0IHRva2VuLlwiKTtcbiAgfVxuICAvLyBUaGUgZXhwb3J0IG11c3QgYmUgb2YgdGhlIGZvcm0gYGV4cG9ydCBkZWZhdWx0IGFgIG9yIGBleHBvcnQgZGVmYXVsdCBhO2AuXG4gIGNvbnN0IG51bVRva2VucyA9IGV4cG9ydFRva2VuLnJoc0VuZEluZGV4IC0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICBpZiAoXG4gICAgbnVtVG9rZW5zICE9PSAzICYmXG4gICAgIShudW1Ub2tlbnMgPT09IDQgJiYgdG9rZW5zLm1hdGNoZXMxQXRJbmRleChleHBvcnRUb2tlbi5yaHNFbmRJbmRleCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMik7XG4gIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gIHJldHVybiAoXG4gICAgZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKGV4cG9ydGVkTmFtZSkgJiZcbiAgICAhZGVjbGFyYXRpb25JbmZvLnZhbHVlRGVjbGFyYXRpb25zLmhhcyhleHBvcnRlZE5hbWUpXG4gICk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydDtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfZWxpZGVJbXBvcnRFcXVhbHMgPSByZXF1aXJlKCcuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzJyk7IHZhciBfZWxpZGVJbXBvcnRFcXVhbHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWxpZGVJbXBvcnRFcXVhbHMpO1xuXG5cblxudmFyIF9nZXREZWNsYXJhdGlvbkluZm8gPSByZXF1aXJlKCcuLi91dGlsL2dldERlY2xhcmF0aW9uSW5mbycpOyB2YXIgX2dldERlY2xhcmF0aW9uSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXREZWNsYXJhdGlvbkluZm8pO1xudmFyIF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvJyk7IHZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKTtcbnZhciBfaXNFeHBvcnRGcm9tID0gcmVxdWlyZSgnLi4vdXRpbC9pc0V4cG9ydEZyb20nKTsgdmFyIF9pc0V4cG9ydEZyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNFeHBvcnRGcm9tKTtcbnZhciBfcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi4vdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMnKTtcbnZhciBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0ID0gcmVxdWlyZSgnLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQnKTsgdmFyIF9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KTtcblxuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBDbGFzcyBmb3IgZWRpdGluZyBpbXBvcnQgc3RhdGVtZW50cyB3aGVuIHdlIGFyZSB0cmFuc2Zvcm1pbmcgdG8gY29tbW9uanMuXG4gKi9cbiBjbGFzcyBDSlNJbXBvcnRUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gICBfX2luaXQoKSB7dGhpcy5oYWRFeHBvcnQgPSBmYWxzZX1cbiAgIF9faW5pdDIoKSB7dGhpcy5oYWROYW1lZEV4cG9ydCA9IGZhbHNlfVxuICAgX19pbml0MygpIHt0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSBmYWxzZX1cbiAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICBoZWxwZXJNYW5hZ2VyLFxuICAgICByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLFxuICAgICBlbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wLFxuICAgICBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCxcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgcHJlc2VydmVEeW5hbWljSW1wb3J0LFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3Nvcjt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCA9IGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A7dGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCA9IGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLnByZXNlcnZlRHluYW1pY0ltcG9ydCA9IHByZXNlcnZlRHluYW1pY0ltcG9ydDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7Q0pTSW1wb3J0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTs7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkXG4gICAgICA/IF9nZXREZWNsYXJhdGlvbkluZm8yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VucylcbiAgICAgIDogX2dldERlY2xhcmF0aW9uSW5mby5FTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICB9XG5cbiAgZ2V0UHJlZml4Q29kZSgpIHtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBpZiAodGhpcy5oYWRFeHBvcnQpIHtcbiAgICAgIHByZWZpeCArPSAnT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsnO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wICYmIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCAmJiAhdGhpcy5oYWROYW1lZEV4cG9ydCkge1xuICAgICAgcmV0dXJuIFwiXFxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0ltcG9ydCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSAmJiAhdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0aGlzLmhhZEV4cG9ydCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXhwb3J0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUucG9zdEluY0RlYykpIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgaWRlbnRpZmllciBtYXRjaGluZyBpZiB0aGlzIGRvZXNuJ3QgYXBwbHkuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzUG9zdEluY0RlYygpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSWRlbnRpZmllcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NpZ25tZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbikpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb21wbGV4QXNzaWdubWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5wcmVJbmNEZWMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUHJlSW5jRGVjKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICBwcm9jZXNzSW1wb3J0RXF1YWxzKCkge1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxKTtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3Iuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKGltcG9ydE5hbWUpKSB7XG4gICAgICAvLyBJZiB0aGlzIG5hbWUgaXMgb25seSB1c2VkIGFzIGEgdHlwZSwgZWxpZGUgdGhlIHdob2xlIGltcG9ydC5cbiAgICAgIF9lbGlkZUltcG9ydEVxdWFsczIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGlzOlxuICAgKiBpbXBvcnQgZm9vLCB7YmFyfSBmcm9tICdiYXonO1xuICAgKiBpbnRvXG4gICAqIHZhciBfYmF6ID0gcmVxdWlyZSgnYmF6Jyk7IHZhciBfYmF6MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jheik7XG4gICAqXG4gICAqIFRoZSBpbXBvcnQgY29kZSB3YXMgYWxyZWFkeSBnZW5lcmF0ZWQgaW4gdGhlIGltcG9ydCBwcmVwcm9jZXNzaW5nIHN0ZXAsIHNvXG4gICAqIHdlIGp1c3QgbmVlZCB0byBsb29rIGl0IHVwLlxuICAgKi9cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpIHtcbiAgICAgICAgLy8gQmFpbCBvdXQsIG9ubHkgbWFraW5nIHByb2dyZXNzIGZvciB0aGlzIG9uZSB0b2tlbi5cbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVXcmFwcGVyID0gdGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcFxuICAgICAgICA/IFwiXCJcbiAgICAgICAgOiBgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImludGVyb3BSZXF1aXJlV2lsZGNhcmRcIil9KGA7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gJHtyZXF1aXJlV3JhcHBlcn1yZXF1aXJlYCk7XG4gICAgICBjb25zdCBjb250ZXh0SWQgPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY29udGV4dCBJRCBvbiBkeW5hbWljIGltcG9ydCBpbnZvY2F0aW9uLlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5wYXJlblIsIGNvbnRleHRJZCkpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4ocmVxdWlyZVdyYXBwZXIgPyBcIikpKVwiIDogXCIpKVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFbGlkZUltcG9ydCA9IHRoaXMucmVtb3ZlSW1wb3J0QW5kRGV0ZWN0SWZTaG91bGRFbGlkZSgpO1xuICAgIGlmIChzaG91bGRFbGlkZUltcG9ydCkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgfVxuICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVyYXNlIHRoaXMgaW1wb3J0IChzaW5jZSBhbnkgQ0pTIG91dHB1dCB3b3VsZCBiZSBjb21wbGV0ZWx5IGRpZmZlcmVudCksIGFuZFxuICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGlzIGltcG9ydCBpcyBzaG91bGQgYmUgZWxpZGVkIGR1ZSB0byBiZWluZyBhIHR5cGUtb25seVxuICAgKiBpbXBvcnQuIFN1Y2ggaW1wb3J0cyB3aWxsIG5vdCBiZSBlbWl0dGVkIGF0IGFsbCB0byBhdm9pZCBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEltcG9ydCBlbGlzaW9uIG9ubHkgaGFwcGVucyB3aXRoIHRoZSBUeXBlU2NyaXB0IG9yIEZsb3cgdHJhbnNmb3JtcyBlbmFibGVkLlxuICAgKlxuICAgKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGhhcyBzb21lIGF3a3dhcmQgb3ZlcmxhcCB3aXRoXG4gICAqICBDSlNJbXBvcnRQcm9jZXNzb3IucHJ1bmVUeXBlT25seUltcG9ydHMgLCBhbmQgdGhlIHR3byBzaG91bGQgYmUgdW5pZmllZC5cbiAgICogIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBUeXBlU2NyaXB0IGltcGxpY2l0IGltcG9ydCBuYW1lIGVsaXNpb24sIGFuZCByZW1vdmVzXG4gICAqICBhbiBpbXBvcnQgaWYgYWxsIHR5cGljYWwgaW1wb3J0ZWQgbmFtZXMgKHdpdGhvdXQgYHR5cGVgKSBhcmUgcmVtb3ZlZCBkdWVcbiAgICogIHRvIGJlaW5nIHR5cGUtb25seSBpbXBvcnRzLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgRmxvdyBpbXBvcnQgcmVtb3ZhbCBhbmRcbiAgICogIHByb3Blcmx5IGRpc3Rpbmd1aXNoZXMgYGltcG9ydCAnZm9vJ2AgZnJvbSBgaW1wb3J0IHt9IGZyb20gJ2ZvbydgIGZvciBUU1xuICAgKiAgcHVycG9zZXMuXG4gICAqXG4gICAqIFRoZSBwb3NpdGlvbiBzaG91bGQgZW5kIGF0IHRoZSBpbXBvcnQgc3RyaW5nLlxuICAgKi9cbiAgIHJlbW92ZUltcG9ydEFuZERldGVjdElmU2hvdWxkRWxpZGUoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBcImltcG9ydCB0eXBlXCIgc3RhdGVtZW50LCBzbyBleGl0IGVhcmx5LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBkZWZhdWx0IGltcG9ydCBvciBuYW1lc3BhY2UgaW1wb3J0LCBzbyB0aGVyZSBtdXN0IGJlIHNvbWVcbiAgICAgIC8vIG5vbi10eXBlIGltcG9ydC5cbiAgICAgIHRoaXMucmVtb3ZlUmVtYWluaW5nSW1wb3J0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kTm9uVHlwZUltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBmb3VuZEFueU5hbWVkSW1wb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFueSBuYW1lZCBpbXBvcnRzIGFyZSBvZiB0aGUgZm9ybSBcImZvb1wiIG9yIFwiZm9vIGFzIGJhclwiLCB3aXRoXG4gICAgICAvLyBubyBsZWFkaW5nIFwidHlwZVwiLlxuICAgICAgaWYgKFxuICAgICAgICAoIWZvdW5kTm9uVHlwZUltcG9ydCAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICBmb3VuZEFueU5hbWVkSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8XG4gICAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm91bmROb25UeXBlSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgcmV0dXJuICFmb3VuZE5vblR5cGVJbXBvcnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRmxvd1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIC8vIEluIEZsb3csIHVubGlrZSBUUywgYGltcG9ydCB7fSBmcm9tICdmb28nO2AgcHJlc2VydmVzIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZm91bmRBbnlOYW1lZEltcG9ydCAmJiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgIHJlbW92ZVJlbWFpbmluZ0ltcG9ydCgpIHtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgcHJvY2Vzc0lkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPYmplY3RTaG9ydGhhbmQoKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4uaWRlbnRpZmllclJvbGUgIT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFxuICAgICAgdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbiksXG4gICAgKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRvbGVyYXRlIGFueSBudW1iZXIgb2YgY2xvc2luZyBwYXJlbnMgd2hpbGUgbG9va2luZyBmb3IgYW4gb3BlbmluZyBwYXJlblxuICAgIC8vIHRoYXQgaW5kaWNhdGVzIGEgZnVuY3Rpb24gY2FsbC5cbiAgICBsZXQgcG9zc2libGVPcGVuUGFyZW5JbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMTtcbiAgICB3aGlsZSAoXG4gICAgICBwb3NzaWJsZU9wZW5QYXJlbkluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCAmJlxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW3Bvc3NpYmxlT3BlblBhcmVuSW5kZXhdLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUucGFyZW5SXG4gICAgKSB7XG4gICAgICBwb3NzaWJsZU9wZW5QYXJlbkluZGV4Kys7XG4gICAgfVxuICAgIC8vIEF2b2lkIHRyZWF0aW5nIGltcG9ydGVkIGZ1bmN0aW9ucyBhcyBtZXRob2RzIG9mIHRoZWlyIGBleHBvcnRzYCBvYmplY3RcbiAgICAvLyBieSB1c2luZyBgKDAsIGYpYCB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIGEgcGFyZW4gZXhwcmVzc2lvbi4gRWxzZVxuICAgIC8vIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxgIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgYSBndWFyYW50ZWVkXG4gICAgLy8gZnVuY3Rpb24gY2FsbC4gV2hlbiB1c2luZyBgY2FsbGAsIHBhc3MgdW5kZWZpbmVkIGFzIHRoZSBjb250ZXh0LlxuICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbcG9zc2libGVPcGVuUGFyZW5JbmRleF0udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwgJiZcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUuX25ld1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtyZXBsYWNlbWVudH0uY2FsbCh2b2lkIDAsIGApO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIG9sZCBwYXJlbi5cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgLy8gQmFsYW5jZSBvdXQgdGhlIG5ldyBwYXJlbi5cbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWUgaGVyZTogaHR0cDovLzJhbGl0eS5jb20vMjAxNS8xMi9yZWZlcmVuY2VzLmh0bWxcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtyZXBsYWNlbWVudH0pYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihyZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvY2Vzc09iamVjdFNob3J0aGFuZCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtpZGVudGlmaWVyfTogJHtyZXBsYWNlbWVudH1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb2Nlc3NFeHBvcnQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCwgX3R5cGVzLlRva2VuVHlwZS5fZW51bSlcbiAgICApIHtcbiAgICAgIHRoaXMuaGFkTmFtZWRFeHBvcnQgPSB0cnVlO1xuICAgICAgLy8gTGV0IHRoZSBUeXBlU2NyaXB0IHRyYW5zZm9ybSBoYW5kbGUgaXQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgICB0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSB0cnVlO1xuICAgICAgICAvLyBGbG93IGV4cG9ydCBkZWZhdWx0IGVudW1zIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5nLCBzbyBoYW5kbGUgdGhlbVxuICAgICAgICAvLyBpbiB0aGF0IHRyYW5mb3JtIHJhdGhlciB0aGFuIHRoaXMgb25lLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRCaW5kaW5ncygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJlxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2EgYXMgYn07XG4gICAgICAvLyBleHBvcnQgdHlwZSB7YX0gZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnLi9iJztcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAqXG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9hcykpIHtcbiAgICAgICAgICAvLyBhc1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gbnNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgdHlwZSByZS1leHBvcnQgYC4uLiB9IGZyb20gJy4vVCdgXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmhhZE5hbWVkRXhwb3J0ID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX3ZhcikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fbGV0KSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydFZhcigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8XG4gICAgICAvLyBleHBvcnQgYXN5bmMgZnVuY3Rpb25cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbilcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLmF0KVxuICAgICkge1xuICAgICAgdGhpcy5wcm9jZXNzRXhwb3J0Q2xhc3MoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRTdGFyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGV4cG9ydCBzeW50YXguXCIpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzQXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIC8vIElmIHRoZSBMSFMgaXMgYSB0eXBlIGlkZW50aWZpZXIsIHRoaXMgbXVzdCBiZSBhIGRlY2xhcmF0aW9uIGxpa2UgYGxldCBhOiBiID0gYztgLFxuICAgIC8vIHdpdGggYGJgIGFzIHRoZSBpZGVudGlmaWVyLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhhdCBjYXNlLlxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uaXNUeXBlIHx8IGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAyICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDIsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiBbX3R5cGVzLlRva2VuVHlwZS5fdmFyLCBfdHlwZXMuVG9rZW5UeXBlLl9sZXQsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0XS5pbmNsdWRlcyh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggLSAyXS50eXBlKSkge1xuICAgICAgLy8gRGVjbGFyYXRpb25zIGRvbid0IG5lZWQgYW4gZXh0cmEgYXNzaWdubWVudC4gVGhpcyBkb2Vzbid0IGF2b2lkIHRoZVxuICAgICAgLy8gYXNzaWdubWVudCBmb3IgY29tbWEtc2VwYXJhdGVkIGRlY2xhcmF0aW9ucywgYnV0IGl0J3Mgc3RpbGwgY29ycmVjdFxuICAgICAgLy8gc2luY2UgdGhlIGFzc2lnbm1lbnQgaXMganVzdCByZWR1bmRhbnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFzc2lnbm1lbnRTbmlwcGV0ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IucmVzb2x2ZUV4cG9ydEJpbmRpbmcoXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbiksXG4gICAgKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgYSArPSAzYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKi9cbiAgIHByb2Nlc3NDb21wbGV4QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKSxcbiAgICApO1xuICAgIGlmICghYXNzaWdubWVudFNuaXBwZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgID0gJHthc3NpZ25tZW50U25pcHBldH1gKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHNvbWV0aGluZyBsaWtlIGArK2FgLCB3aGVyZSBgYWAgbWlnaHQgYmUgYW4gZXhwb3J0ZWQgdmFsdWUuXG4gICAqL1xuICAgcHJvY2Vzc1ByZUluY0RlYygpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCArIDFdO1xuICAgIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZ25vcmUgdGhpbmdzIGxpa2UgKythLmIgYW5kICsrYVtiXSBhbmQgKythKCkuYi5cbiAgICBpZiAoXG4gICAgICBpbmRleCArIDIgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4ICsgMiwgX3R5cGVzLlRva2VuVHlwZS5kb3QpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpZmllck5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhpZGVudGlmaWVyTmFtZSk7XG4gICAgaWYgKCFhc3NpZ25tZW50U25pcHBldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9IGApO1xuICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc29tZXRoaW5nIGxpa2UgYGErK2AsIHdoZXJlIGBhYCBtaWdodCBiZSBhbiBleHBvcnRlZCB2YWx1ZS5cbiAgICogVGhpcyBzdGFydHMgYXQgdGhlIGBhYCwgbm90IGF0IHRoZSBgKytgLlxuICAgKi9cbiAgIHByb2Nlc3NQb3N0SW5jRGVjKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgY29uc3QgaWRlbnRpZmllclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgICBjb25zdCBvcGVyYXRvclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4ICsgMV07XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAxICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKTtcbiAgICBjb25zdCBhc3NpZ25tZW50U25pcHBldCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLnJlc29sdmVFeHBvcnRCaW5kaW5nKGlkZW50aWZpZXJOYW1lKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdG9yQ29kZSA9IHRoaXMudG9rZW5zLnJhd0NvZGVGb3JUb2tlbihvcGVyYXRvclRva2VuKTtcbiAgICAvLyBXZSBtaWdodCBhbHNvIHJlcGxhY2UgdGhlIGlkZW50aWZpZXIgd2l0aCBzb21ldGhpbmcgbGlrZSBleHBvcnRzLngsIHNvXG4gICAgLy8gZG8gdGhhdCByZXBsYWNlbWVudCBoZXJlIGFzIHdlbGwuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyTmFtZSkgfHwgaWRlbnRpZmllck5hbWU7XG4gICAgaWYgKG9wZXJhdG9yQ29kZSA9PT0gXCIrK1wiKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYCgke2Jhc2V9ID0gJHthc3NpZ25tZW50U25pcHBldH0gPSAke2Jhc2V9ICsgMSwgJHtiYXNlfSAtIDEpYCk7XG4gICAgfSBlbHNlIGlmIChvcGVyYXRvckNvZGUgPT09IFwiLS1cIikge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoJHtiYXNlfSA9ICR7YXNzaWdubWVudFNuaXBwZXR9ID0gJHtiYXNlfSAtIDEsICR7YmFzZX0gKyAxKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0b3I6ICR7b3BlcmF0b3JDb2RlfWApO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NFeHBvcnREZWZhdWx0KCkge1xuICAgIGxldCBleHBvcnRlZFJ1bnRpbWVWYWx1ZSA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fFxuICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb25cbiAgICAgICh0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24sIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KFxuICAgICAgICAgIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMixcbiAgICAgICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhwb3J0IGNhc2U6IGNoYW5nZSBpdCB0byBhIHRvcC1sZXZlbCBmdW5jdGlvblxuICAgICAgLy8gZGVjbGFyYXRpb24gZm9sbG93ZWQgYnkgZXhwb3J0cyBzdGF0ZW1lbnQuXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuZGVmYXVsdCA9ICR7bmFtZX07YCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM1KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuYXQpXG4gICAgKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc05hbWVkQ2xhc3MoKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLmRlZmF1bHQgPSAke25hbWV9O2ApO1xuICAgICAgLy8gQWZ0ZXIgdGhpcyBwb2ludCwgdGhpcyBpcyBhIHBsYWluIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHN0YXRlbWVudC5cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydDIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgXG4gICAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgICAgdGhpcy5rZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgICAgdGhpcy50b2tlbnMsXG4gICAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLFxuICAgICAgKVxuICAgICkge1xuICAgICAgLy8gSWYgdGhlIGV4cG9ydGVkIHZhbHVlIGlzIGp1c3QgYW4gaWRlbnRpZmllciBhbmQgc2hvdWxkIGJlIGVsaWRlZCBieSBUeXBlU2NyaXB0XG4gICAgICAvLyBydWxlcywgdGhlbiByZW1vdmUgaXQgZW50aXJlbHkuIEl0IHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvcm0gYGV4cG9ydCBkZWZhdWx0IGVgLFxuICAgICAgLy8gd2hlcmUgYGVgIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICBleHBvcnRlZFJ1bnRpbWVWYWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcikge1xuICAgICAgLy8gV2UgbmVlZCB0byBhc3NpZ24gRSB0byBhIHZhcmlhYmxlLiBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG9cbiAgICAgIC8vIFwibGV0IF9kZWZhdWx0OyBleHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdCA9IEVcIlxuICAgICAgY29uc3QgZGVmYXVsdFZhck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfZGVmYXVsdFwiKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgbGV0ICR7ZGVmYXVsdFZhck5hbWV9OyBleHBvcnRzLmApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgPSAke2RlZmF1bHRWYXJOYW1lfSA9YCk7XG4gICAgICB0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIuc2V0RXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUoZGVmYXVsdFZhck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG8gXCJleHBvcnRzLmRlZmF1bHQgPSBFXCJcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcImV4cG9ydHMuXCIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiID1cIik7XG4gICAgfVxuICAgIGlmIChleHBvcnRlZFJ1bnRpbWVWYWx1ZSkge1xuICAgICAgdGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgY29weURlY29yYXRvcnMoKSB7XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYXQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmRvdCk7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgZGVjbGFyYXRpb24gbGlrZSBgZXhwb3J0IHZhcmAsIGBleHBvcnQgbGV0YCwgb3IgYGV4cG9ydCBjb25zdGAuXG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydFZhcigpIHtcbiAgICBpZiAodGhpcy5pc1NpbXBsZUV4cG9ydFZhcigpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NTaW1wbGVFeHBvcnRWYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzQ29tcGxleEV4cG9ydFZhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGV4cG9ydCBpcyBvZiB0aGUgZm9ybTpcbiAgICogZXhwb3J0IHZhci9sZXQvY29uc3QgW3Zhck5hbWVdID0gW2V4cHJdO1xuICAgKiBJbiBvdGhlciB3b3JkcywgZGV0ZXJtaW5lIGlmIGZ1bmN0aW9uIG5hbWUgaW5mZXJlbmNlIG1pZ2h0IGFwcGx5LlxuICAgKi9cbiAgIGlzU2ltcGxlRXhwb3J0VmFyKCkge1xuICAgIGxldCB0b2tlbkluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgLy8gZXhwb3J0XG4gICAgdG9rZW5JbmRleCsrO1xuICAgIC8vIHZhci9sZXQvY29uc3RcbiAgICB0b2tlbkluZGV4Kys7XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodG9rZW5JbmRleCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0b2tlbkluZGV4Kys7XG4gICAgd2hpbGUgKHRva2VuSW5kZXggPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoICYmIHRoaXMudG9rZW5zLnRva2Vuc1t0b2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgIHRva2VuSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodG9rZW5JbmRleCwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGFuIGBleHBvcnQgdmFyYCBkZWNsYXJhdGlvbiBpbml0aWFsaXppbmcgYSBzaW5nbGUgdmFyaWFibGUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGlzOlxuICAgKiBleHBvcnQgY29uc3QgZiA9ICgpID0+IHt9O1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqIGNvbnN0IGYgPSAoKSA9PiB7fTsgZXhwb3J0cy5mID0gZjtcbiAgICpcbiAgICogVGhlIHZhcmlhYmxlIGlzIHVudXNlZCAoZS5nLiBleHBvcnRzLmYgaGFzIHRoZSB0cnVlIHZhbHVlIG9mIHRoZSBleHBvcnQpLlxuICAgKiBXZSBuZWVkIHRvIHByb2R1Y2UgYW4gYXNzaWdubWVudCBvZiB0aGlzIGZvcm0gc28gdGhhdCB0aGUgZnVuY3Rpb24gd2lsbFxuICAgKiBoYXZlIGFuIGluZmVycmVkIG5hbWUgb2YgXCJmXCIsIHdoaWNoIHdvdWxkbid0IGhhcHBlbiBpbiB0aGUgbW9yZSBnZW5lcmFsXG4gICAqIGNhc2UgYmVsb3cuXG4gICAqL1xuICAgcHJvY2Vzc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgY29uc3QgdmFyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgLy8geDogbnVtYmVyICAtPiAgeFxuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCA9IHRva2VuIHdpdGggYW4gZW5kIGluZGV4LlwiKTtcbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGA7IGV4cG9ydHMuJHt2YXJOYW1lfSA9ICR7dmFyTmFtZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gbm9ybWFsIGRlY2xhcmF0aW9uIGV4cG9ydHMsIGluY2x1ZGluZyBoYW5kbGluZyBkZXN0cnVjdHVyaW5nLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhpczpcbiAgICogZXhwb3J0IGNvbnN0IHt4OiBbYSA9IDIsIGJdLCBjfSA9IGQ7XG4gICAqIGJlY29tZXMgdGhpczpcbiAgICogKHt4OiBbZXhwb3J0cy5hID0gMiwgZXhwb3J0cy5iXSwgYzogZXhwb3J0cy5jfSA9IGQ7KVxuICAgKi9cbiAgIHByb2Nlc3NDb21wbGV4RXhwb3J0VmFyKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgY29uc3QgbmVlZHNQYXJlbnMgPSB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgaWYgKG5lZWRzUGFyZW5zKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiKFwiKTtcbiAgICB9XG5cbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvbGxhckJyYWNlTCkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TClcbiAgICAgICkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZGVwdGggPT09IDAgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZVxuICAgICAgKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHZhbHVlcyBtaWdodCBoYXZlIGFzc2lnbm1lbnRzIGluIHRoZSBSSFMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSwgc28gc2tpcCBwYXN0XG4gICAgICAgIC8vIHRoZW0uXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKF90b2tlbml6ZXIuaXNEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KG5hbWUpO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHJlcGxhY2VtZW50IGZvciAke25hbWV9IGluIFxcYGV4cG9ydCB2YXJcXGAgc3ludGF4LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3Rva2VuaXplci5pc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gYCR7bmFtZX06ICR7cmVwbGFjZW1lbnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1BhcmVucykge1xuICAgICAgLy8gU2VlayB0byB0aGUgZW5kIG9mIHRoZSBSSFMuXG4gICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgICAgaWYgKGVuZEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBlbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIGZvbygpIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogZnVuY3Rpb24gZm9vKCkge30gZXhwb3J0cy5mb28gPSBmb287XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCkge1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7bmFtZX0gPSAke25hbWV9O2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgcGFzdCBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGFuZCByZXR1cm4gdGhhdCBuYW1lLlxuICAgKi9cbiAgIHByb2Nlc3NOYW1lZEZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYXN5bmMga2V5d29yZCBpbiBmdW5jdGlvbiBleHBvcnQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICBpZiAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCBjbGFzcyBBIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogY2xhc3MgQSB7fSBleHBvcnRzLkEgPSBBO1xuICAgKi9cbiAgIHByb2Nlc3NFeHBvcnRDbGFzcygpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2Fic3RyYWN0KSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtuYW1lfSA9ICR7bmFtZX07YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCB7YSwgYiBhcyBjfTtcbiAgICogaW50byB0aGlzOlxuICAgKiBleHBvcnRzLmEgPSBhOyBleHBvcnRzLmMgPSBiO1xuICAgKlxuICAgKiBPUlxuICAgKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IHthLCBiIGFzIGN9IGZyb20gJy4vZm9vJztcbiAgICogaW50byB0aGUgcHJlLWdlbmVyYXRlZCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIHRoZSBJbXBvcnRQcm9jZXNzb3IuXG4gICAqXG4gICAqIEZvciB0aGUgZmlyc3QgY2FzZSwgaWYgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gc2tpcFxuICAgKiBleHBvcnRzIHRoYXQgYXJlIG9ubHkgZGVmaW5lZCBhcyB0eXBlcy5cbiAgICovXG4gICBwcm9jZXNzRXhwb3J0QmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcblxuICAgIGNvbnN0IGlzUmVFeHBvcnQgPSBfaXNFeHBvcnRGcm9tMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG5cbiAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnRzID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUV4cG9ydCA9XG4gICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICghaXNSZUV4cG9ydCAmJiB0aGlzLnNob3VsZEVsaWRlRXhwb3J0ZWRJZGVudGlmaWVyKHNwZWNpZmllckluZm8ubGVmdE5hbWUpKTtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlRXhwb3J0KSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHNwZWNpZmllckluZm8ucmlnaHROYW1lO1xuICAgICAgICBpZiAoZXhwb3J0ZWROYW1lID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gc3BlY2lmaWVySW5mby5sZWZ0TmFtZTtcbiAgICAgICAgY29uc3QgbmV3TG9jYWxOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGxvY2FsTmFtZSk7XG4gICAgICAgIGV4cG9ydFN0YXRlbWVudHMucHVzaChgZXhwb3J0cy4ke2V4cG9ydGVkTmFtZX0gPSAke25ld0xvY2FsTmFtZSB8fCBsb2NhbE5hbWV9O2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuY29tbWEsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKSl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gZXhwb3J0Li4uZnJvbSwgc28gdGhyb3cgYXdheSB0aGUgbm9ybWFsIG5hbWVkIGV4cG9ydCBjb2RlXG4gICAgICAvLyBhbmQgdXNlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIEltcG9ydFByb2Nlc3Nvci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgbmFtZWQgZXhwb3J0LCBzbyB1c2UgdGhhdC5cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoZXhwb3J0U3RhdGVtZW50cy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgIHByb2Nlc3NFeHBvcnRTdGFyKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zZW1pKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkRWxpZGVFeHBvcnRlZElkZW50aWZpZXIobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBDSlNJbXBvcnRUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX2VsaWRlSW1wb3J0RXF1YWxzID0gcmVxdWlyZSgnLi4vdXRpbC9lbGlkZUltcG9ydEVxdWFscycpOyB2YXIgX2VsaWRlSW1wb3J0RXF1YWxzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VsaWRlSW1wb3J0RXF1YWxzKTtcblxuXG5cbnZhciBfZ2V0RGVjbGFyYXRpb25JbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXREZWNsYXJhdGlvbkluZm8nKTsgdmFyIF9nZXREZWNsYXJhdGlvbkluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0RGVjbGFyYXRpb25JbmZvKTtcbnZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbycpOyB2YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyk7XG52YXIgX2dldE5vblR5cGVJZGVudGlmaWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzJyk7XG52YXIgX2lzRXhwb3J0RnJvbSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNFeHBvcnRGcm9tJyk7IHZhciBfaXNFeHBvcnRGcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzRXhwb3J0RnJvbSk7XG52YXIgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4uL3V0aWwvcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzJyk7XG52YXIgX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCA9IHJlcXVpcmUoJy4uL3V0aWwvc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0Jyk7IHZhciBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCk7XG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4vKipcbiAqIENsYXNzIGZvciBlZGl0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHdoZW4gd2UgYXJlIGtlZXBpbmcgdGhlIGNvZGUgYXMgRVNNLiBXZSBzdGlsbCBuZWVkIHRvIHJlbW92ZVxuICogdHlwZS1vbmx5IGltcG9ydHMgaW4gVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuIGNsYXNzIEVTTUltcG9ydFRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7O1xuICAgIHRoaXMubm9uVHlwZUlkZW50aWZpZXJzID1cbiAgICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiYgIWtlZXBVbnVzZWRJbXBvcnRzXG4gICAgICAgID8gX2dldE5vblR5cGVJZGVudGlmaWVycy5nZXROb25UeXBlSWRlbnRpZmllcnMuY2FsbCh2b2lkIDAsIHRva2Vucywgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgU2V0KCk7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPVxuICAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJiAha2VlcFVudXNlZEltcG9ydHNcbiAgICAgICAgPyBfZ2V0RGVjbGFyYXRpb25JbmZvMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0b2tlbnMpXG4gICAgICAgIDogX2dldERlY2xhcmF0aW9uSW5mby5FTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICAgIHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUgPSBCb29sZWFuKG9wdGlvbnMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGltcG9ydCB0eXBlIFQgPSByZXF1aXJlKCdUJylcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3QgaXMgYWx3YXlzIGV4YWN0bHkgOCB0b2tlbnMgbG9uZywgc28gcmVtb3ZlIHRoZSA3IHJlbWFpbmluZyB0b2tlbnMuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUuZXEpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpXG4gICAgKSB7XG4gICAgICAvLyBleHBvcnQgaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdCBpcyBhbHdheXMgZXhhY3RseSA5IHRva2VucyBsb25nLCBzbyByZW1vdmUgdGhlIDggcmVtYWluaW5nIHRva2Vucy5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFeHBvcnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc05hbWVkRXhwb3J0cygpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthfTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthIGFzIGJ9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9IGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJy4vYic7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gKlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYXMpKSB7XG4gICAgICAgICAgLy8gYXNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vIG5zXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHR5cGUgcmUtZXhwb3J0IGAuLi4gfSBmcm9tICcuL1QnYFxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnRFcXVhbHMoKSB7XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShpbXBvcnROYW1lKSkge1xuICAgICAgLy8gSWYgdGhpcyBuYW1lIGlzIG9ubHkgdXNlZCBhcyBhIHR5cGUsIGVsaWRlIHRoZSB3aG9sZSBpbXBvcnQuXG4gICAgICBfZWxpZGVJbXBvcnRFcXVhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpIHtcbiAgICAgIC8vIFdlJ3JlIHVzaW5nIHJlcXVpcmUgaW4gYW4gZW52aXJvbm1lbnQgKE5vZGUgRVNNKSB0aGF0IGRvZXNuJ3QgcHJvdmlkZVxuICAgICAgLy8gaXQgYXMgYSBnbG9iYWwsIHNvIGdlbmVyYXRlIGEgaGVscGVyIHRvIGltcG9ydCBpdC5cbiAgICAgIC8vIGltcG9ydCAtPiBjb25zdFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgICAvLyBGb29cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyByZXF1aXJlXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJyZXF1aXJlXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAvLyBEeW5hbWljIGltcG9ydHMgZG9uJ3QgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMudG9rZW5zLnNuYXBzaG90KCk7XG4gICAgY29uc3QgYWxsSW1wb3J0c1JlbW92ZWQgPSB0aGlzLnJlbW92ZUltcG9ydFR5cGVCaW5kaW5ncygpO1xuICAgIGlmIChhbGxJbXBvcnRzUmVtb3ZlZCkge1xuICAgICAgdGhpcy50b2tlbnMucmVzdG9yZVRvU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBfcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLnJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHR5cGUgYmluZGluZ3MgZnJvbSB0aGlzIGltcG9ydCwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgaW1wb3J0IGludGFjdC5cbiAgICpcbiAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBpbXBvcnQgd2FzIE9OTFkgdHlwZXMsIGFuZCB0aHVzIGlzIGVsaWdpYmxlIGZvciByZW1vdmFsLiBUaGlzIHdpbGwgYmFpbCBvdXRcbiAgICogb2YgdGhlIHJlcGxhY2VtZW50IG9wZXJhdGlvbiwgc28gd2UgY2FuIHJldHVybiBlYXJseSBoZXJlLlxuICAgKi9cbiAgIHJlbW92ZUltcG9ydFR5cGVCaW5kaW5ncygpIHtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkgJiZcbiAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gXCJpbXBvcnQgdHlwZVwiIHN0YXRlbWVudCwgc28gZXhpdCBlYXJseS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBiYXJlIGltcG9ydCwgc28gd2Ugc2hvdWxkIHByb2NlZWQgd2l0aCB0aGUgaW1wb3J0LlxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2tpcCB0aGUgXCJtb2R1bGVcIiB0b2tlbiBpbiBpbXBvcnQgcmVmbGVjdGlvbi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cblxuICAgIGxldCBmb3VuZE5vblR5cGVJbXBvcnQgPSBmYWxzZTtcbiAgICBsZXQgZm91bmRBbnlOYW1lZEltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBuZWVkc0NvbW1hID0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUgZGVmYXVsdCBpbXBvcnQuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZSh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gYSBzdGF0ZW1lbnQgbGlrZTpcbiAgICAgICAgICAvLyBpbXBvcnQgQSwgKiBhcyBCIGZyb20gJy4vQSc7XG4gICAgICAgICAgLy8gb3JcbiAgICAgICAgICAvLyBpbXBvcnQgQSwge2Zvb30gZnJvbSAnLi9BJztcbiAgICAgICAgICAvLyB3aGVyZSB0aGUgYEFgIGlzIGJlaW5nIGtlcHQuIFRoZSBjb21tYSBzaG91bGQgYmUgcmVtb3ZlZCBpZiBhbiBvbmx5XG4gICAgICAgICAgLy8gaWYgdGhlIG5leHQgcGFydCBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBlbGlkZWQsIGJ1dCB0aGF0J3MgaGFyZFxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBJbnN0ZWFkLCBhbHdheXMgcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gYW5kIHNldCBhIGZsYWcgdG8gYWRkIGl0IGJhY2sgaWYgbmVjZXNzYXJ5LlxuICAgICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDIpKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnN0YXIpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICBpZiAobmVlZHNDb21tYSkge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlY2lmaWVySW5mby5pc1R5cGUgfHxcbiAgICAgICAgICB0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLnJpZ2h0TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBJbiBGbG93LCB1bmxpa2UgVFMsIGBpbXBvcnQge30gZnJvbSAnZm9vJztgIHByZXNlcnZlcyB0aGUgaW1wb3J0LlxuICAgICAgcmV0dXJuIGZvdW5kQW55TmFtZWRJbXBvcnQgJiYgIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICBzaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5ub25UeXBlSWRlbnRpZmllcnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0RGVmYXVsdCgpIHtcbiAgICBpZiAoXG4gICAgICBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0Mi5kZWZhdWx0LmNhbGwodm9pZCAwLCBcbiAgICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICAgICB0aGlzLmtlZXBVbnVzZWRJbXBvcnRzLFxuICAgICAgICB0aGlzLnRva2VucyxcbiAgICAgICAgdGhpcy5kZWNsYXJhdGlvbkluZm8sXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBJZiB0aGUgZXhwb3J0ZWQgdmFsdWUgaXMganVzdCBhbiBpZGVudGlmaWVyIGFuZCBzaG91bGQgYmUgZWxpZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICAgIC8vIHJ1bGVzLCB0aGVuIHJlbW92ZSBpdCBlbnRpcmVseS4gSXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybSBgZXhwb3J0IGRlZmF1bHQgZWAsXG4gICAgICAvLyB3aGVyZSBgZWAgaXMgYW4gaWRlbnRpZmllci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbHJlYWR5SGFzTmFtZSA9XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoXG4gICAgICAgICAgdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLFxuICAgICAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMsXG4gICAgICAgICkpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2Fic3RyYWN0LCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcywgX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcblxuICAgIGlmICghYWxyZWFkeUhhc05hbWUgJiYgdGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcGxhaW4gXCJleHBvcnQgZGVmYXVsdCBFXCIgc3RhdGVtZW50IGFuZCB3ZSBuZWVkIHRvIGFzc2lnbiBFIHRvIGEgdmFyaWFibGUuXG4gICAgICAvLyBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG8gXCJsZXQgX2RlZmF1bHQ7IGV4cG9ydCBkZWZhdWx0IF9kZWZhdWx0ID0gRVwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9kZWZhdWx0XCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBsZXQgJHtkZWZhdWx0VmFyTmFtZX07IGV4cG9ydGApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgJHtkZWZhdWx0VmFyTmFtZX0gPWApO1xuICAgICAgdGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnNldEV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lKGRlZmF1bHRWYXJOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgc3RhdGVtZW50IHdpdGggb25lIG9mIHRoZXNlIGZvcm1zOlxuICAgKiBleHBvcnQge2EsIHR5cGUgYn07XG4gICAqIGV4cG9ydCB7YywgdHlwZSBkfSBmcm9tICdmb28nO1xuICAgKlxuICAgKiBJbiBib3RoIGNhc2VzLCBhbnkgZXhwbGljaXQgdHlwZSBleHBvcnRzIHNob3VsZCBiZSByZW1vdmVkLiBJbiB0aGUgZmlyc3RcbiAgICogY2FzZSwgd2UgYWxzbyBuZWVkIHRvIGhhbmRsZSBpbXBsaWNpdCBleHBvcnQgZWxpc2lvbiBmb3IgbmFtZXMgZGVjbGFyZWQgYXNcbiAgICogdHlwZXMuIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UgbXVzdCBOT1QgZG8gaW1wbGljaXQgbmFtZWQgZXhwb3J0IGVsaXNpb24sXG4gICAqIGJ1dCB3ZSBtdXN0IHJlbW92ZSB0aGUgcnVudGltZSBpbXBvcnQgaWYgYWxsIGV4cG9ydHMgYXJlIHR5cGUgZXhwb3J0cy5cbiAgICovXG4gICBwcm9jZXNzTmFtZWRFeHBvcnRzKCkge1xuICAgIGlmICghdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuXG4gICAgY29uc3QgaXNSZUV4cG9ydCA9IF9pc0V4cG9ydEZyb20yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICBsZXQgZm91bmROb25UeXBlRXhwb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgaWYgKFxuICAgICAgICBzcGVjaWZpZXJJbmZvLmlzVHlwZSB8fFxuICAgICAgICAoIWlzUmVFeHBvcnQgJiYgdGhpcy5zaG91bGRFbGlkZUV4cG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLmxlZnROYW1lKSlcbiAgICAgICkge1xuICAgICAgICAvLyBUeXBlIGV4cG9ydCwgc28gcmVtb3ZlIGFsbCB0b2tlbnMsIGluY2x1ZGluZyBhbnkgY29tbWEuXG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbi10eXBlIGV4cG9ydCwgc28gY29weSBhbGwgdG9rZW5zLCBpbmNsdWRpbmcgYW55IGNvbW1hLlxuICAgICAgICBmb3VuZE5vblR5cGVFeHBvcnQgPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuXG4gICAgaWYgKCF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmIGlzUmVFeHBvcnQgJiYgIWZvdW5kTm9uVHlwZUV4cG9ydCkge1xuICAgICAgLy8gVGhpcyBpcyBhIHR5cGUtb25seSByZS1leHBvcnQsIHNvIHNraXAgZXZhbHVhdGluZyB0aGUgb3RoZXIgbW9kdWxlLiBUZWNobmljYWxseSB0aGlzXG4gICAgICAvLyBsZWF2ZXMgdGhlIHN0YXRlbWVudCBhcyBgZXhwb3J0IHt9YCwgYnV0IHRoYXQncyBvayBzaW5jZSB0aGF0J3MgYSBuby1vcC5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFU00gZWxpZGVzIGFsbCBpbXBvcnRzIHdpdGggdGhlIHJ1bGUgdGhhdCB3ZSBvbmx5IGVsaWRlIGlmIHdlIHNlZSB0aGF0IGl0J3NcbiAgICogYSB0eXBlIGFuZCBuZXZlciBzZWUgaXQgYXMgYSB2YWx1ZS4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBDSlMsIHdoaWNoXG4gICAqIGVsaWRlcyBpbXBvcnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5rbm93bi5cbiAgICovXG4gICBzaG91bGRFbGlkZUV4cG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBFU01JbXBvcnRUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4gY2xhc3MgRmxvd1RyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCA9IGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQ7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBcnJvd1BhcmFtRW5kKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2VudW0pKSB7XG4gICAgICB0aGlzLnByb2Nlc3NOYW1lZEV4cG9ydEVudW0oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRGVmYXVsdEV4cG9ydEVudW0oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgZGVjbGFyYXRpb24gbGlrZTpcbiAgICogZXhwb3J0IGVudW0gRSAuLi5cbiAgICpcbiAgICogV2l0aCB0aGlzIGltcG9ydHMgdHJhbnNmb3JtLCB0aGlzIGJlY29tZXM6XG4gICAqIGNvbnN0IEUgPSBbW2VudW1dXTsgZXhwb3J0cy5FID0gRTtcbiAgICpcbiAgICogb3RoZXJ3aXNlLCBpdCBiZWNvbWVzOlxuICAgKiBleHBvcnQgY29uc3QgRSA9IFtbZW51bV1dO1xuICAgKi9cbiAgcHJvY2Vzc05hbWVkRXhwb3J0RW51bSgpIHtcbiAgICBpZiAodGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBleHBvcnRcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleCgxKTtcbiAgICAgIHRoaXMucHJvY2Vzc0VudW0oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBkZWNsYXJhdGlvbiBsaWtlOlxuICAgKiBleHBvcnQgZGVmYXVsdCBlbnVtIEVcbiAgICpcbiAgICogV2l0aCB0aGUgaW1wb3J0cyB0cmFuc2Zvcm0sIHRoaXMgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnRzLmRlZmF1bHQgPSBFO1xuICAgKlxuICAgKiBvdGhlcndpc2UsIGl0IGJlY29tZXM6XG4gICAqIGNvbnN0IEUgPSBbW2VudW1dXTsgZXhwb3J0IGRlZmF1bHQgRTtcbiAgICovXG4gIHByb2Nlc3NEZWZhdWx0RXhwb3J0RW51bSgpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyBkZWZhdWx0XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgIHRoaXMucHJvY2Vzc0VudW0oKTtcbiAgICBpZiAodGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgZXhwb3J0cy5kZWZhdWx0ID0gJHtlbnVtTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnQgZGVmYXVsdCAke2VudW1OYW1lfTtgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNwaWxlIGZsb3cgZW51bXMgdG8gaW52b2tlIHRoZSBcImZsb3ctZW51bXMtcnVudGltZVwiIGxpYnJhcnkuXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlIHRyYW5zcGlsZWQgY29kZSBhbHdheXMgdXNlcyBgcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKWAsXG4gICAqIGJ1dCBpZiBmdXR1cmUgZmxleGliaWxpdHkgaXMgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgYSBjb25maWcgb3B0aW9uIGZvclxuICAgKiB0aGlzIHN0cmluZyAoc2ltaWxhciB0byBjb25maWd1cmFibGUgSlNYKS4gRXZlbiB3aGVuIHRhcmdldGluZyBFU00sIHRoZVxuICAgKiBkZWZhdWx0IGJlaGF2aW9yIG9mIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZmxvdy1lbnVtcyBpcyB0byB1c2UgcmVxdWlyZVxuICAgKiByYXRoZXIgdGhhbiBpbmplY3RpbmcgYW4gaW1wb3J0LlxuICAgKlxuICAgKiBGbG93IGVudW1zIGFyZSBxdWl0ZSBhIGJpdCBzaW1wbGVyIHRoYW4gVFMgZW51bXMgYW5kIGhhdmUgc29tZSBjb252ZW5pZW50XG4gICAqIGNvbnN0cmFpbnRzOlxuICAgKiAtIEVsZW1lbnQgaW5pdGlhbGl6ZXJzIG11c3QgYmUgZWl0aGVyIGFsd2F5cyBwcmVzZW50IG9yIGFsd2F5cyBhYnNlbnQuIFRoYXRcbiAgICogICBtZWFucyB0aGF0IHdlIGNhbiB1c2UgZml4ZWQgbG9va2FoZWFkIG9uIHRoZSBmaXJzdCBlbGVtZW50IChpZiBhbnkpIGFuZFxuICAgKiAgIGFzc3VtZSB0aGF0IGFsbCBlbGVtZW50cyBhcmUgbGlrZSB0aGF0LlxuICAgKiAtIFRoZSByaWdodC1oYW5kIHNpZGUgb2YgYW4gZWxlbWVudCBpbml0aWFsaXplciBtdXN0IGJlIGEgbGl0ZXJhbCB2YWx1ZSxcbiAgICogICBub3QgYSBjb21wbGV4IGV4cHJlc3Npb24gYW5kIG5vdCByZWZlcmVuY2luZyBvdGhlciBlbGVtZW50cy4gVGhhdCBtZWFuc1xuICAgKiAgIHdlIGNhbiBzaW1wbHkgY29weSBhIHNpbmdsZSB0b2tlbi5cbiAgICpcbiAgICogRW51bXMgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIHRocmVlIGJhc2ljIGNhc2VzOlxuICAgKlxuICAgKiBNaXJyb3JlZCBlbnVtczpcbiAgICogZW51bSBFIHtBLCBCfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpLk1pcnJvcmVkKFtcIkFcIiwgXCJCXCJdKTtcbiAgICpcbiAgICogSW5pdGlhbGl6ZXIgZW51bXM6XG4gICAqIGVudW0gRSB7QSA9IDEsIEIgPSAyfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpKHtBOiAxLCBCOiAyfSk7XG4gICAqXG4gICAqIFN5bWJvbCBlbnVtczpcbiAgICogZW51bSBFIG9mIHN5bWJvbCB7QSwgQn1cbiAgICogICAtPlxuICAgKiBjb25zdCBFID0gcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKSh7QTogU3ltYm9sKFwiQVwiKSwgQjogU3ltYm9sKFwiQlwiKX0pO1xuICAgKlxuICAgKiBXZSBjYW4gc3RhdGljYWxseSBkZXRlY3Qgd2hpY2ggb2YgdGhlIHRocmVlIGNhc2VzIHRoaXMgaXMgYnkgbG9va2luZyBhdCB0aGVcbiAgICogXCJvZlwiIGRlY2xhcmF0aW9uIChpZiBhbnkpIGFuZCBzZWVpbmcgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaGFzIGFuIGluaXRpYWxpemVyLlxuICAgKiBTaW5jZSB0aGUgb3RoZXIgdHJhbnNmb3JtIGRldGFpbHMgYXJlIHNvIHNpbWlsYXIgYmV0d2VlbiB0aGUgdGhyZWUgY2FzZXMsIHdlXG4gICAqIHVzZSBhIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBhbmQgdmFyeSB0aGUgdHJhbnNmb3JtIHdpdGhpbiBwcm9jZXNzRW51bUVsZW1lbnRcbiAgICogYmFzZWQgb24gY2FzZS5cbiAgICovXG4gIHByb2Nlc3NFbnVtKCkge1xuICAgIC8vIGVudW0gRSAtPiBjb25zdCBFXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcblxuICAgIGxldCBpc1N5bWJvbEVudW0gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpc1N5bWJvbEVudW0gPSB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N5bWJvbCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBoYXNJbml0aWFsaXplcnMgPSB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKTtcbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKCcgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpJyk7XG5cbiAgICBjb25zdCBpc01pcnJvcmVkID0gIWlzU3ltYm9sRW51bSAmJiAhaGFzSW5pdGlhbGl6ZXJzO1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoaXNNaXJyb3JlZCA/IFwiLk1pcnJvcmVkKFtcIiA6IFwiKHtcIik7XG5cbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgLy8gLi4uIGlzIGFsbG93ZWQgYXQgdGhlIGVuZCBhbmQgaGFzIG5vIHJ1bnRpbWUgYmVoYXZpb3IuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtRWxlbWVudChpc1N5bWJvbEVudW0sIGhhc0luaXRpYWxpemVycyk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGlzTWlycm9yZWQgPyBcIl0pO1wiIDogXCJ9KTtcIik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVudW0gZWxlbWVudCwgcHJvZHVjaW5nIGVpdGhlciBhbiBhcnJheSBlbGVtZW50IG9yIGFuXG4gICAqIG9iamVjdCBlbGVtZW50IGJhc2VkIG9uIHdoYXQgdHlwZSBvZiBlbnVtIHRoaXMgaXMuXG4gICAqL1xuICBwcm9jZXNzRW51bUVsZW1lbnQoaXNTeW1ib2xFbnVtLCBoYXNJbml0aWFsaXplcnMpIHtcbiAgICBpZiAoaXNTeW1ib2xFbnVtKSB7XG4gICAgICAvLyBTeW1ib2wgZW51bXMgbmV2ZXIgaGF2ZSBpbml0aWFsaXplcnMgYW5kIGFyZSBleHBhbmRlZCB0byBvYmplY3QgZWxlbWVudHMuXG4gICAgICAvLyBBLCAtPiBBOiBTeW1ib2woXCJBXCIpLFxuICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGA6IFN5bWJvbChcIiR7ZWxlbWVudE5hbWV9XCIpYCk7XG4gICAgfSBlbHNlIGlmIChoYXNJbml0aWFsaXplcnMpIHtcbiAgICAgIC8vIEluaXRpYWxpemVycyBhcmUgZXhwYW5kZWQgdG8gb2JqZWN0IGVsZW1lbnRzLlxuICAgICAgLy8gQSA9IDEsIC0+IEE6IDEsXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCI6XCIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVudW0gZWxlbWVudHMgd2l0aG91dCBpbml0aWFsaXplcnMgYmVjb21lIHN0cmluZyBsaXRlcmFsIGFycmF5IGVsZW1lbnRzLlxuICAgICAgLy8gQSwgLT4gXCJBXCIsXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYFwiJHt0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpfVwiYCk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IEZsb3dUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbihvcHMpIHsgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IGxldCB2YWx1ZSA9IG9wc1swXTsgbGV0IGkgPSAxOyB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHsgY29uc3Qgb3AgPSBvcHNbaV07IGNvbnN0IGZuID0gb3BzW2kgKyAxXTsgaSArPSAyOyBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHsgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlOyB2YWx1ZSA9IGZuKHZhbHVlKTsgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgeyB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTsgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgfSB9IHJldHVybiB2YWx1ZTsgfVxuXG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG5jb25zdCBKRVNUX0dMT0JBTF9OQU1FID0gXCJqZXN0XCI7XG5jb25zdCBIT0lTVEVEX01FVEhPRFMgPSBbXCJtb2NrXCIsIFwidW5tb2NrXCIsIFwiZW5hYmxlQXV0b21vY2tcIiwgXCJkaXNhYmxlQXV0b21vY2tcIl07XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QsIHdoaWNoIGhvaXN0cyB1cCBzb21lIGplc3QgbWV0aG9kXG4gKiBjYWxscyBhYm92ZSB0aGUgaW1wb3J0cyB0byBhbGxvdyB0aGVtIHRvIG92ZXJyaWRlIG90aGVyIGltcG9ydHMuXG4gKlxuICogVG8gcHJlc2VydmUgbGluZSBudW1iZXJzLCByYXRoZXIgdGhhbiBkaXJlY3RseSBtb3ZpbmcgdGhlIGplc3QubW9jayBjb2RlLCB3ZVxuICogd3JhcCBlYWNoIGludm9jYXRpb24gaW4gYSBmdW5jdGlvbiBzdGF0ZW1lbnQgYW5kIHRoZW4gY2FsbCB0aGUgZnVuY3Rpb24gZnJvbVxuICogdGhlIHRvcCBvZiB0aGUgZmlsZS5cbiAqL1xuIGNsYXNzIEplc3RIb2lzdFRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgICBfX2luaXQoKSB7dGhpcy5ob2lzdGVkRnVuY3Rpb25OYW1lcyA9IFtdfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgbmFtZU1hbmFnZXIsXG4gICAgIGltcG9ydFByb2Nlc3NvcixcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7SmVzdEhvaXN0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuc2NvcGVEZXB0aCA9PT0gMCAmJlxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IEpFU1RfR0xPQkFMX05BTUVcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgb25seSB3b3JrcyBpZiBpbXBvcnRzIHRyYW5zZm9ybSBpcyBhY3RpdmUsIHdoaWNoIGl0IHdpbGwgYmUgZm9yIGplc3QuXG4gICAgICAvLyAgICAgICBCdXQgaWYgamVzdCBhZGRzIG1vZHVsZSBzdXBwb3J0IGFuZCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgaW1wb3J0IHRyYW5zZm9ybSwgdGhpcyBuZWVkcyBmaXhpbmcuXG4gICAgICBpZiAoX29wdGlvbmFsQ2hhaW4oW3RoaXMsICdhY2Nlc3MnLCBfID0+IF8uaW1wb3J0UHJvY2Vzc29yLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5nZXRHbG9iYWxOYW1lcywgJ2NhbGwnLCBfMyA9PiBfMygpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5oYXMsICdjYWxsJywgXzUgPT4gXzUoSkVTVF9HTE9CQUxfTkFNRSldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0SG9pc3RlZENhbGxzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0SG9pc3RlZENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaG9pc3RlZEZ1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIHBsYWNlZCBiZWZvcmUgbW9kdWxlIGludGVyb3AgY29kZSwgYnV0IHRoYXQncyBmaW5lIHNpbmNlXG4gICAgICAvLyBpbXBvcnRzIGFyZW4ndCBhbGxvd2VkIGluIG1vZHVsZSBtb2NrIGZhY3Rvcmllcy5cbiAgICAgIHJldHVybiB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLm1hcCgobmFtZSkgPT4gYCR7bmFtZX0oKTtgKS5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbnkgbWV0aG9kcyBjYWxscyBvbiB0aGUgamVzdC1vYmplY3QgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogQWNjb3JkaW5nIHRvIHRoZSBqZXN0IGRvY3MsIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvZW4vamVzdC1vYmplY3QjamVzdG1vY2ttb2R1bGVuYW1lLWZhY3Rvcnktb3B0aW9ucyxcbiAgICogbW9jaywgdW5tb2NrLCBlbmFibGVBdXRvbW9jaywgZGlzYWJsZUF1dG9tb2NrLCBhcmUgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogV2UgZG8gbm90IGFwcGx5IHRoZSBzYW1lIGNoZWNrcyBvZiB0aGUgYXJndW1lbnRzIGFzIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IGRvZXMuXG4gICAqL1xuICAgZXh0cmFjdEhvaXN0ZWRDYWxscygpIHtcbiAgICAvLyBXZSdyZSBoYW5kbGluZyBhIGNoYWluIG9mIGNhbGxzIHdoZXJlIGBqZXN0YCBtYXkgb3IgbWF5IG5vdCBuZWVkIHRvIGJlIGluc2VydGVkIGZvciBlYWNoIGNhbGxcbiAgICAvLyBpbiB0aGUgY2hhaW4sIHNvIHJlbW92ZSB0aGUgaW5pdGlhbCBgamVzdGAgdG8gbWFrZSB0aGUgbG9vcCBpbXBsZW1lbnRhdGlvbiBjbGVhbmVyLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gVHJhY2sgc29tZSBzdGF0ZSBzbyB0aGF0IG11bHRpcGxlIG5vbi1ob2lzdGVkIGNoYWluZWQgY2FsbHMgaW4gYSByb3cga2VlcCB0aGVpciBjaGFpbmluZ1xuICAgIC8vIHN5bnRheC5cbiAgICBsZXQgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGFpbmVkIGNhbGxzIG9uIHRoZSBqZXN0IG9iamVjdC5cbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5kb3QsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgICBjb25zdCBzaG91bGRIb2lzdCA9IEhPSVNURURfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKTtcbiAgICAgIGlmIChzaG91bGRIb2lzdCkge1xuICAgICAgICAvLyBXZSd2ZSBtYXRjaGVkIGUuZy4gYC5tb2NrKC4uLilgIG9yIHNpbWlsYXIgY2FsbC5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgaW5pdGlhbCBgLmAgd2l0aCBgZnVuY3Rpb24gX19qZXN0SG9pc3QoKXtqZXN0LmBcbiAgICAgICAgY29uc3QgaG9pc3RlZEZ1bmN0aW9uTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9famVzdEhvaXN0XCIpO1xuICAgICAgICB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLnB1c2goaG9pc3RlZEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgZnVuY3Rpb24gJHtob2lzdGVkRnVuY3Rpb25OYW1lfSgpeyR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI7fVwiKTtcbiAgICAgICAgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5vbi1ob2lzdGVkIG1ldGhvZCwgc28ganVzdCB0cmFuc2Zvcm0gdGhlIGNvZGUgYXMgdXN1YWwuXG4gICAgICAgIGlmIChmb2xsb3dzTm9uSG9pc3RlZEplc3RDYWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGhvaXN0IHRoZSBwcmV2aW91cyBjYWxsLCB3ZSBjYW4gbGVhdmUgdGhlIGNvZGUgYXMtaXMgdG8gY2hhaW4gb2ZmIG9mIHRoZVxuICAgICAgICAgIC8vIHByZXZpb3VzIG1ldGhvZCBjYWxsLiBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0aGUgY29kZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vd1xuICAgICAgICAgIC8vIGZvciBzdXJlIHRoYXQgdGhlIG1ldGhvZCBhY3R1YWxseSByZXR1cm5lZCB0aGUgamVzdCBvYmplY3QgZm9yIGNoYWluaW5nLlxuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHdlIGhvaXN0ZWQgdGhlIHByZXZpb3VzIGNhbGwsIHdlIGtub3cgaXQgcmV0dXJucyB0aGUgamVzdCBvYmplY3QgYmFjaywgc28gd2UgaW5zZXJ0XG4gICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgYGplc3RgIHRvIGNvbnRpbnVlIHRoZSBjaGFpbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYCR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgICAgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gSmVzdEhvaXN0VHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH12YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuIGNsYXNzIE51bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubnVtKSkge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbkNvZGUoKTtcbiAgICAgIGlmIChjb2RlLmluY2x1ZGVzKFwiX1wiKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oY29kZS5yZXBsYWNlKC9fL2csIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4gY2xhc3MgT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NhdGNoLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICgke3RoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcImVcIil9KWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBPcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1lciBzdXBwb3J0aW5nIHRoZSBvcHRpb25hbCBjaGFpbmluZyBhbmQgbnVsbGlzaCBjb2FsZXNjaW5nIG9wZXJhdG9ycy5cbiAqXG4gKiBUZWNoIHBsYW4gaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlL3dpa2kvU3VjcmFzZS1PcHRpb25hbC1DaGFpbmluZy1hbmQtTnVsbGlzaC1Db2FsZXNjaW5nLVRlY2huaWNhbC1QbGFuXG4gKlxuICogVGhlIHByZWZpeCBhbmQgc3VmZml4IGNvZGUgc25pcHBldHMgYXJlIGhhbmRsZWQgYnkgVG9rZW5Qcm9jZXNzb3IsIGFuZCB0aGlzIHRyYW5zZm9ybWVyIGhhbmRsZXNcbiAqIHRoZSBvcGVyYXRvcnMgdGhlbXNlbHZlcy5cbiAqL1xuIGNsYXNzIE9wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIgZXh0ZW5kcyBfVHJhbnNmb3JtZXIyLmRlZmF1bHQge1xuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgbmFtZU1hbmFnZXIpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm51bGxpc2hDb2FsZXNjaW5nKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbdG9rZW4ubnVsbGlzaFN0YXJ0SW5kZXhdLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIiwgYXN5bmMgKCkgPT4gKFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIsICgpID0+IChcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkpIHtcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgICAgaWYgKG5leHRUb2tlbi5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgY2hhaW5TdGFydCA9IHRva2VuLnN1YnNjcmlwdFN0YXJ0SW5kZXg7XG4gICAgaWYgKFxuICAgICAgY2hhaW5TdGFydCAhPSBudWxsICYmXG4gICAgICB0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNPcHRpb25hbENoYWluU3RhcnQgJiZcbiAgICAgIC8vIFN1cGVyIHN1YnNjcmlwdHMgY2FuJ3QgYmUgb3B0aW9uYWwgKHNpbmNlIHN1cGVyIGlzIG5ldmVyIG51bGwvdW5kZWZpbmVkKSwgYW5kIHRoZSBzeW50YXhcbiAgICAgIC8vIHJlbGllcyBvbiB0aGUgc3Vic2NyaXB0IGJlaW5nIGludGFjdCwgc28gbGVhdmUgdGhpcyB0b2tlbiBhbG9uZS5cbiAgICAgIHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLl9zdXBlclxuICAgICkge1xuICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfXCIpO1xuICAgICAgbGV0IGFycm93U3RhcnRTbmlwcGV0O1xuICAgICAgaWYgKFxuICAgICAgICBjaGFpblN0YXJ0ID4gMCAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2hhaW5TdGFydCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkgJiZcbiAgICAgICAgdGhpcy5pc0xhc3RTdWJzY3JpcHRJbkNoYWluKClcbiAgICAgICkge1xuICAgICAgICAvLyBEZWxldGUgb3BlcmF0aW9ucyBhcmUgc3BlY2lhbDogd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBkZWxldGUga2V5d29yZCwgYW5kIHRvIHN0aWxsXG4gICAgICAgIC8vIHBlcmZvcm0gYSBkZWxldGUsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgZGVsZXRlIGluIHRoZSB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgY2hhaW4sIHdoaWNoXG4gICAgICAgIC8vIGluIGNvcnJlY3QgY29kZSB3aWxsIGFsd2F5cyBiZSBhIHByb3BlcnR5IGFjY2Vzcy5cbiAgICAgICAgYXJyb3dTdGFydFNuaXBwZXQgPSBgJHtwYXJhbX0gPT4gZGVsZXRlICR7cGFyYW19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycm93U3RhcnRTbmlwcGV0ID0gYCR7cGFyYW19ID0+ICR7cGFyYW19YDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICBhcnJvd1N0YXJ0U25pcHBldCA9IGBhc3luYyAke2Fycm93U3RhcnRTbmlwcGV0fWA7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90LCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmp1c3RTa2lwcGVkU3VwZXIoKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIuYmluZCh0aGlzKVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbENhbGwnLCAke2Fycm93U3RhcnRTbmlwcGV0fWApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ29wdGlvbmFsQWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH0uYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdhY2Nlc3MnLCAke2Fycm93U3RhcnRTbmlwcGV0fS5gKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnYWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH1bYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgICBpZiAodGhpcy5qdXN0U2tpcHBlZFN1cGVyKCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLmJpbmQodGhpcylcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnY2FsbCcsICR7YXJyb3dTdGFydFNuaXBwZXR9KGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdWJzY3JpcHQgb3BlcmF0b3IgaW4gb3B0aW9uYWwgY2hhaW4uXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgdGhlIGxhc3Qgb2YgaXRzIGNoYWluLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBpdCdzIGVsaWdpYmxlXG4gICAqIHRvIGhhdmUgYSBkZWxldGUgb3AgaW5zZXJ0ZWQuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGlzIGJ5IHdhbGtpbmcgZm9yd2FyZCB1bnRpbCB3ZSBkZXRlcm1pbmUgb25lIHdheSBvciBhbm90aGVyLiBFYWNoXG4gICAqIGlzT3B0aW9uYWxDaGFpblN0YXJ0IHRva2VuIG11c3QgYmUgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgaXNPcHRpb25hbENoYWluRW5kIHRva2VuIGFmdGVyIGl0IGluXG4gICAqIGEgbmVzdGluZyB3YXksIHNvIHdlIGNhbiB0cmFjayBkZXB0aCBhbmQgd2FsayB0byB0aGUgZW5kIG9mIHRoZSBjaGFpbiAodGhlIHBvaW50IHdoZXJlIHRoZVxuICAgKiBkZXB0aCBnb2VzIG5lZ2F0aXZlKSBhbmQgc2VlIGlmIGFueSBvdGhlciBzdWJzY3JpcHQgdG9rZW4gaXMgYWZ0ZXIgdXMgaW4gdGhlIGNoYWluLlxuICAgKi9cbiAgaXNMYXN0U3Vic2NyaXB0SW5DaGFpbigpIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7IDsgaSsrKSB7XG4gICAgICBpZiAoaSA+PSB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGlsZSBmaW5kaW5nIHRoZSBlbmQgb2YgdGhlIGFjY2VzcyBjaGFpbi5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMudG9rZW5zW2ldLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpXS5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgc3Vic2NyaXB0IHRva2VuIGlzIGEgbGF0ZXIgb25lIGluIHRoZSBzYW1lIGNoYWluLlxuICAgICAgaWYgKGRlcHRoID09PSAwICYmIHRoaXMudG9rZW5zLnRva2Vuc1tpXS5zdWJzY3JpcHRTdGFydEluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHRoZSBvcGVuLXBhcmVuIGluIGFuIGV4cHJlc3Npb24gbGlrZSBzdXBlci5hKCk/LmIuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGlzIGJ5IHdhbGtpbmcgYmFja3dhcmQgdG8gZmluZCB0aGUgcHJldmlvdXMgc3Vic2NyaXB0LiBJZiB0aGF0IHN1YnNjcmlwdCB3YXNcbiAgICogcHJlY2VkZWQgYnkgYSBzdXBlciwgdGhlbiB3ZSBtdXN0IGJlIHRoZSBzdWJzY3JpcHQgYWZ0ZXIgaXQsIHNvIGlmIHRoaXMgaXMgYSBjYWxsIGV4cHJlc3Npb24sXG4gICAqIHdlJ2xsIG5lZWQgdG8gYXR0YWNoIHRoZSByaWdodCBjb250ZXh0LlxuICAgKi9cbiAganVzdFNraXBwZWRTdXBlcigpIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGxldCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIC0gMTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJSZWFjaGVkIHRoZSBzdGFydCBvZiB0aGUgY29kZSB3aGlsZSBmaW5kaW5nIHRoZSBzdGFydCBvZiB0aGUgYWNjZXNzIGNoYWluLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICAgIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHN1YnNjcmlwdCB0b2tlbiBpcyBhIGxhdGVyIG9uZSBpbiB0aGUgc2FtZSBjaGFpbi5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCAmJiB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLnN1YnNjcmlwdFN0YXJ0SW5kZXggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4IC0gMV0udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fc3VwZXI7XG4gICAgICB9XG4gICAgICBpbmRleC0tO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBPcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSwgd2hpY2ggYWRkcyBhXG4gKiBkaXNwbGF5IG5hbWUgdG8gdXNhZ2VzIG9mIFJlYWN0LmNyZWF0ZUNsYXNzIGFuZCBjcmVhdGVSZWFjdENsYXNzLlxuICovXG4gY2xhc3MgUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7dGhpcy5vcHRpb25zID0gb3B0aW9uczs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBpZiAodGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKSA9PT0gXCJjcmVhdGVSZWFjdENsYXNzXCIpIHtcbiAgICAgIGNvbnN0IG5ld05hbWUgPVxuICAgICAgICB0aGlzLmltcG9ydFByb2Nlc3NvciAmJiB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoXCJjcmVhdGVSZWFjdENsYXNzXCIpO1xuICAgICAgaWYgKG5ld05hbWUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtuZXdOYW1lfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5kb3QsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IFwiUmVhY3RcIiAmJlxuICAgICAgdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMikgPT09IFwiY3JlYXRlQ2xhc3NcIlxuICAgICkge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFwiUmVhY3RcIikgfHwgXCJSZWFjdFwiXG4gICAgICAgIDogXCJSZWFjdFwiO1xuICAgICAgaWYgKG5ld05hbWUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKG5ld05hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSB0b2tlbiBwb3NpdGlvbiBhdCB0aGUgb3Blbi1wYXJlbi5cbiAgICovXG4gICB0cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpIHtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuZmluZERpc3BsYXlOYW1lKHN0YXJ0SW5kZXgpO1xuICAgIGlmICghZGlzcGxheU5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc05lZWRzRGlzcGxheU5hbWUoKSkge1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgZGlzcGxheU5hbWU6ICcke2Rpc3BsYXlOYW1lfScsYCk7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgfVxuICB9XG5cbiAgIGZpbmREaXNwbGF5TmFtZShzdGFydEluZGV4KSB7XG4gICAgaWYgKHN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChzdGFydEluZGV4IC0gMiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBhc3NpZ25tZW50IChvciBkZWNsYXJhdGlvbikgYW5kIHRoZSBMSFMgaXMgZWl0aGVyIGFuIGlkZW50aWZpZXIgb3IgYSBtZW1iZXJcbiAgICAgIC8vIGV4cHJlc3Npb24gZW5kaW5nIGluIGFuIGlkZW50aWZpZXIsIHNvIHVzZSB0aGF0IGlkZW50aWZpZXIgbmFtZS5cbiAgICAgIHJldHVybiB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoc3RhcnRJbmRleCAtIDIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBzdGFydEluZGV4ID49IDIgJiZcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1tzdGFydEluZGV4IC0gMl0uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5XG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCBsaXRlcmFsIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChzdGFydEluZGV4IC0gMik7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoc3RhcnRJbmRleCAtIDIsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERpc3BsYXlOYW1lRnJvbUZpbGVuYW1lKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgIGdldERpc3BsYXlOYW1lRnJvbUZpbGVuYW1lKCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5vcHRpb25zLmZpbGVQYXRoIHx8IFwidW5rbm93blwiO1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgZG90SW5kZXggPSBmaWxlbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgY29uc3QgYmFzZUZpbGVuYW1lID0gZG90SW5kZXggPT09IC0xID8gZmlsZW5hbWUgOiBmaWxlbmFtZS5zbGljZSgwLCBkb3RJbmRleCk7XG4gICAgaWYgKGJhc2VGaWxlbmFtZSA9PT0gXCJpbmRleFwiICYmIHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMl0pIHtcbiAgICAgIHJldHVybiBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZUZpbGVuYW1lO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBvbmx5IHdhbnQgdG8gYWRkIGEgZGlzcGxheSBuYW1lIHdoZW4gdGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwgY29udGFpbmluZ1xuICAgKiBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIGFuIG9iamVjdCBsaXRlcmFsIHdpdGhvdXQgYGRpc3BsYXlOYW1lYCBhcyBhblxuICAgKiBleGlzdGluZyBrZXkuXG4gICAqL1xuICAgY2xhc3NOZWVkc0Rpc3BsYXlOYW1lKCkge1xuICAgIGxldCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUaGUgYmxvY2sgc3RhcnRzIG9uIHRoZSB7LCBhbmQgd2UgZXhwZWN0IGFueSBkaXNwbGF5TmFtZSBrZXkgdG8gYmUgaW5cbiAgICAvLyB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdG8gaWdub3JlIG90aGVyIG90aGVyIGNvbnRleHRzIHRvIGF2b2lkIG1hdGNoaW5nXG4gICAgLy8gbmVzdGVkIGRpc3BsYXlOYW1lIGtleXMuXG4gICAgY29uc3Qgb2JqZWN0U3RhcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBjb25zdCBvYmplY3RDb250ZXh0SWQgPSB0aGlzLnRva2Vucy50b2tlbnNbb2JqZWN0U3RhcnRJbmRleF0uY29udGV4dElkO1xuICAgIGlmIChvYmplY3RDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY29udGV4dCBJRCBvbiBvYmplY3Qgb3Blbi1icmFjZS5cIik7XG4gICAgfVxuXG4gICAgZm9yICg7IGluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSICYmIHRva2VuLmNvbnRleHRJZCA9PT0gb2JqZWN0Q29udGV4dElkKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkgPT09IFwiZGlzcGxheU5hbWVcIiAmJlxuICAgICAgICB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLmlkZW50aWZpZXJSb2xlID09PSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLk9iamVjdEtleSAmJlxuICAgICAgICB0b2tlbi5jb250ZXh0SWQgPT09IG9iamVjdENvbnRleHRJZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFdlIGZvdW5kIGEgZGlzcGxheU5hbWUga2V5LCBzbyBiYWlsIG91dC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmRleCA9PT0gdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiBwcm9jZXNzaW5nIFJlYWN0IGNsYXNzLlwiKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGtub3cgd2UgaGF2ZSBjcmVhdGVDbGFzcyB3aXRoIGFuIG9iamVjdCB3aXRoIG5vXG4gICAgLy8gZGlzcGxheSBuYW1lLCBzbyB3ZSB3YW50IHRvIHByb2NlZWQgYXMgbG9uZyBhcyB0aGF0IHdhcyB0aGUgb25seSBhcmd1bWVudC5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBSZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH12YXIgX3Rva2VuaXplciA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXInKTtcblxudmFyIF9UcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtZXInKTsgdmFyIF9UcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9UcmFuc2Zvcm1lcik7XG5cbiBjbGFzcyBSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgIF9faW5pdCgpIHt0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lID0gbnVsbH1cblxuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgZmlsZVBhdGgpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTs7XG4gIH1cblxuICBzZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgIHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUgPSBleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnRlck1vZHVsZSA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5lbnRlck1vZHVsZTtcbiAgICAgICAgZW50ZXJNb2R1bGUgJiYgZW50ZXJNb2R1bGUobW9kdWxlKTtcbiAgICAgIH0pKCk7YFxuICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBjb25zdCB0b3BMZXZlbE5hbWVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMudG9rZW5zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0b2tlbi5pc1R5cGUgJiZcbiAgICAgICAgX3Rva2VuaXplci5pc1RvcExldmVsRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsIHRva2VuKSAmJlxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSAhPT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvblxuICAgICAgKSB7XG4gICAgICAgIHRvcExldmVsTmFtZXMuYWRkKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmFtZXNUb1JlZ2lzdGVyID0gQXJyYXkuZnJvbSh0b3BMZXZlbE5hbWVzKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICB2YXJpYWJsZU5hbWU6IG5hbWUsXG4gICAgICB1bmlxdWVMb2NhbE5hbWU6IG5hbWUsXG4gICAgfSkpO1xuICAgIGlmICh0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lKSB7XG4gICAgICBuYW1lc1RvUmVnaXN0ZXIucHVzaCh7XG4gICAgICAgIHZhcmlhYmxlTmFtZTogdGhpcy5leHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSxcbiAgICAgICAgdW5pcXVlTG9jYWxOYW1lOiBcImRlZmF1bHRcIixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYFxuOyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZWFjdEhvdExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5kZWZhdWx0O1xuICB2YXIgbGVhdmVNb2R1bGUgPSByZXF1aXJlKCdyZWFjdC1ob3QtbG9hZGVyJykubGVhdmVNb2R1bGU7XG4gIGlmICghcmVhY3RIb3RMb2FkZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiR7bmFtZXNUb1JlZ2lzdGVyXG4gIC5tYXAoXG4gICAgKHt2YXJpYWJsZU5hbWUsIHVuaXF1ZUxvY2FsTmFtZX0pID0+XG4gICAgICBgICByZWFjdEhvdExvYWRlci5yZWdpc3Rlcigke3ZhcmlhYmxlTmFtZX0sIFwiJHt1bmlxdWVMb2NhbE5hbWV9XCIsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMuZmlsZVBhdGggfHwgXCJcIixcbiAgICAgICl9KTtgLFxuICApXG4gIC5qb2luKFwiXFxuXCIpfVxuICBsZWF2ZU1vZHVsZShtb2R1bGUpO1xufSkoKTtgO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfaWRlbnRpZmllciA9IHJlcXVpcmUoJy4uL3BhcnNlci91dGlsL2lkZW50aWZpZXInKTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvTGV4aWNhbF9ncmFtbWFyXG4vLyBIYXJkLWNvZGUgYSBsaXN0IG9mIHJlc2VydmVkIHdvcmRzIHJhdGhlciB0aGFuIHRyeWluZyB0byB1c2Uga2V5d29yZHMgb3IgY29udGV4dHVhbCBrZXl3b3Jkc1xuLy8gZnJvbSB0aGUgcGFyc2VyLCBzaW5jZSBjdXJyZW50bHkgdGhlcmUgYXJlIHZhcmlvdXMgZXhjZXB0aW9ucywgbGlrZSBgcGFja2FnZWAgYmVpbmcgcmVzZXJ2ZWRcbi8vIGJ1dCB1bnVzZWQgYW5kIHZhcmlvdXMgY29udGV4dHVhbCBrZXl3b3JkcyBiZWluZyByZXNlcnZlZC4gTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGFsbCBjb2RlXG4vLyBjb21waWxlZCBieSBTdWNyYXNlIGlzIGluIGEgbW9kdWxlLCBzbyBzdHJpY3QgbW9kZSB3b3JkcyBhbmQgYXdhaXQgYXJlIGFsbCBjb25zaWRlcmVkIHJlc2VydmVkXG4vLyBoZXJlLlxuY29uc3QgUkVTRVJWRURfV09SRFMgPSBuZXcgU2V0KFtcbiAgLy8gUmVzZXJ2ZWQga2V5d29yZHMgYXMgb2YgRUNNQVNjcmlwdCAyMDE1XG4gIFwiYnJlYWtcIixcbiAgXCJjYXNlXCIsXG4gIFwiY2F0Y2hcIixcbiAgXCJjbGFzc1wiLFxuICBcImNvbnN0XCIsXG4gIFwiY29udGludWVcIixcbiAgXCJkZWJ1Z2dlclwiLFxuICBcImRlZmF1bHRcIixcbiAgXCJkZWxldGVcIixcbiAgXCJkb1wiLFxuICBcImVsc2VcIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCIsXG4gIFwiZmluYWxseVwiLFxuICBcImZvclwiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwiaWZcIixcbiAgXCJpbXBvcnRcIixcbiAgXCJpblwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJuZXdcIixcbiAgXCJyZXR1cm5cIixcbiAgXCJzdXBlclwiLFxuICBcInN3aXRjaFwiLFxuICBcInRoaXNcIixcbiAgXCJ0aHJvd1wiLFxuICBcInRyeVwiLFxuICBcInR5cGVvZlwiLFxuICBcInZhclwiLFxuICBcInZvaWRcIixcbiAgXCJ3aGlsZVwiLFxuICBcIndpdGhcIixcbiAgXCJ5aWVsZFwiLFxuICAvLyBGdXR1cmUgcmVzZXJ2ZWQga2V5d29yZHNcbiAgXCJlbnVtXCIsXG4gIFwiaW1wbGVtZW50c1wiLFxuICBcImludGVyZmFjZVwiLFxuICBcImxldFwiLFxuICBcInBhY2thZ2VcIixcbiAgXCJwcml2YXRlXCIsXG4gIFwicHJvdGVjdGVkXCIsXG4gIFwicHVibGljXCIsXG4gIFwic3RhdGljXCIsXG4gIFwiYXdhaXRcIixcbiAgLy8gTGl0ZXJhbHMgdGhhdCBjYW5ub3QgYmUgdXNlZCBhcyBpZGVudGlmaWVyc1xuICBcImZhbHNlXCIsXG4gIFwibnVsbFwiLFxuICBcInRydWVcIixcbl0pO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhIGxlZ2FsIHZhcmlhYmxlIG5hbWUuXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgd2hlbiB0cmFuc2Zvcm1pbmcgVHlwZVNjcmlwdCBlbnVtczsgaWYgYW4gZW51bSBrZXkgaXMgYSB2YWxpZFxuICogdmFyaWFibGUgbmFtZSwgaXQgbWlnaHQgYmUgcmVmZXJlbmNlZCBsYXRlciBpbiB0aGUgZW51bSwgc28gd2UgbmVlZCB0b1xuICogZGVjbGFyZSBhIHZhcmlhYmxlLlxuICovXG4gZnVuY3Rpb24gaXNJZGVudGlmaWVyKG5hbWUpIHtcbiAgaWYgKG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9TVEFSVFtuYW1lLmNoYXJDb2RlQXQoMCldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW25hbWUuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICFSRVNFUlZFRF9XT1JEUy5oYXMobmFtZSk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlzSWRlbnRpZmllcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9pc0lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lzSWRlbnRpZmllcicpOyB2YXIgX2lzSWRlbnRpZmllcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0lkZW50aWZpZXIpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuIGNsYXNzIFR5cGVTY3JpcHRUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlQXJyb3dQYXJhbUVuZCgpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBc3luY0Fycm93V2l0aFR5cGVQYXJhbXMoKSB8fFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wdWJsaWMpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wcml2YXRlKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9yZWFkb25seSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX292ZXJyaWRlKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5ub25OdWxsQXNzZXJ0aW9uKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2VudW0pIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZW51bSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fY29uc3QsIF90eXBlcy5Ub2tlblR5cGUuX2VudW0pXG4gICAgKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtKHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb2Nlc3NFbnVtKGlzRXhwb3J0ID0gZmFsc2UpIHtcbiAgICAvLyBXZSBtaWdodCBoYXZlIFwiZXhwb3J0IGNvbnN0IGVudW1cIiwgc28ganVzdCByZW1vdmUgYWxsIHJlbGV2YW50IHRva2Vucy5cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2VudW0pKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgIXRoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcImV4cG9ydCBcIik7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYHZhciAke2VudW1OYW1lfTsgKGZ1bmN0aW9uICgke2VudW1OYW1lfSlgKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgdGhpcy5wcm9jZXNzRW51bUJvZHkoZW51bU5hbWUpO1xuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8IChleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX0gPSB7fSkpO2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8ICgke2VudW1OYW1lfSA9IHt9KSk7YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhbiBlbnVtIGludG8gZXF1aXZhbGVudCBKUy4gVGhpcyBoYXMgY29tcGxleGl0eSBpbiBhIGZldyBwbGFjZXM6XG4gICAqIC0gVFMgYWxsb3dzIHN0cmluZyBlbnVtcywgbnVtZXJpYyBlbnVtcywgYW5kIGEgbWl4IG9mIHRoZSB0d28gc3R5bGVzIHdpdGhpbiBhbiBlbnVtLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSByZWZlcmVuY2VkIGluIGxhdGVyIGVudW0gdmFsdWVzLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSBzdHJpbmdzLlxuICAgKiAtIFdoZW4gZW51bSB2YWx1ZXMgYXJlIG9taXR0ZWQsIHRoZXkgc2hvdWxkIGZvbGxvdyBhbiBhdXRvLWluY3JlbWVudCBiZWhhdmlvci5cbiAgICovXG4gIHByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSkge1xuICAgIC8vIENvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHByZXZpb3VzIGVudW0gbWVtYmVyLCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgLy8gZW51bSBtZW1iZXIuXG4gICAgbGV0IHByZXZpb3VzVmFsdWVDb2RlID0gbnVsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lfSA9IHRoaXMuZXh0cmFjdEVudW1LZXlJbmZvKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuZXEsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLmVxLCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZywgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaW5nTGl0ZXJhbEVudW1NZW1iZXIoZW51bU5hbWUsIG5hbWVTdHJpbmdDb2RlLCB2YXJpYWJsZU5hbWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NFeHBsaWNpdFZhbHVlRW51bU1lbWJlcihlbnVtTmFtZSwgbmFtZVN0cmluZ0NvZGUsIHZhcmlhYmxlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NJbXBsaWNpdFZhbHVlRW51bU1lbWJlcihcbiAgICAgICAgICBlbnVtTmFtZSxcbiAgICAgICAgICBuYW1lU3RyaW5nQ29kZSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHByZXZpb3VzVmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUgPSBgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG5hbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlbnVtIGtleSwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjb2RlIHRvIGVtaXRcbiAgICogYW5kIHdoZXRoZXIgd2Ugc2hvdWxkIGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoaXMgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIFNvbWUgY2FzZXMgdG8ga2VlcCBpbiBtaW5kOlxuICAgKiAtIEVudW0ga2V5cyBjYW4gYmUgaW1wbGljaXRseSByZWZlcmVuY2VkIGxhdGVyLCBlLmcuIGBYID0gMSwgWSA9IFhgLiBJbiBTdWNyYXNlLCB3ZSBpbXBsZW1lbnRcbiAgICogICB0aGlzIGJ5IGRlY2xhcmluZyBhIHZhcmlhYmxlIGBYYCBzbyB0aGF0IGxhdGVyIGV4cHJlc3Npb25zIGNhbiB1c2UgaXQuXG4gICAqIC0gSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGlkZW50aWZpZXIga2V5IHN5bnRheCwgZW51bSBrZXlzIGFyZSBhbGxvd2VkIHRvIGJlIHN0cmluZyBsaXRlcmFscyxcbiAgICogICBlLmcuIGBcImhlbGxvIHdvcmxkXCIgPSAzLGAuIFRlbXBsYXRlIGxpdGVyYWwgc3ludGF4IGlzIE5PVCBhbGxvd2VkLlxuICAgKiAtIEV2ZW4gaWYgdGhlIGVudW0ga2V5IGlzIGRlZmluZWQgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgaXQgbWF5IHN0aWxsIGJlIHJlZmVyZW5jZWQgYnkgaWRlbnRpZmllclxuICAgKiAgIGxhdGVyLCBlLmcuIGBcIlhcIiA9IDEsIFkgPSBYYC4gVGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGEgc3RyaW5nXG4gICAqICAgbGl0ZXJhbCBpcyBpZGVudGlmaWVyLWxpa2UgYW5kIGVtaXQgYSB2YXJpYWJsZSBpZiBzbywgZXZlbiBpZiB0aGUgZGVjbGFyYXRpb24gZGlkIG5vdCB1c2UgYW5cbiAgICogICBpZGVudGlmaWVyLlxuICAgKiAtIFJlc2VydmVkIGtleXdvcmRzIGxpa2UgYGJyZWFrYCBhcmUgdmFsaWQgZW51bSBrZXlzLCBidXQgYXJlIG5vdCB2YWxpZCB0byBiZSByZWZlcmVuY2VkIGxhdGVyXG4gICAqICAgYW5kIHdvdWxkIGJlIGEgc3ludGF4IGVycm9yIGlmIHdlIGVtaXR0ZWQgYSB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBza2lwIHRoZSB2YXJpYWJsZVxuICAgKiAgIGRlY2xhcmF0aW9uIGluIHRob3NlIGNhc2VzLlxuICAgKlxuICAgKiBUaGUgdmFyaWFibGVOYW1lIHJldHVybiB2YWx1ZSBjYXB0dXJlcyB0aGVzZSBudWFuY2VzOiBpZiBub24tbnVsbCwgd2UgY2FuIGFuZCBtdXN0IGVtaXQgYVxuICAgKiB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgYW5kIGlmIG51bGwsIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QuXG4gICAqL1xuICBleHRyYWN0RW51bUtleUluZm8obmFtZVRva2VuKSB7XG4gICAgaWYgKG5hbWVUb2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKG5hbWVUb2tlbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lU3RyaW5nQ29kZTogYFwiJHtuYW1lfVwiYCxcbiAgICAgICAgdmFyaWFibGVOYW1lOiBfaXNJZGVudGlmaWVyMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBuYW1lKSA/IG5hbWUgOiBudWxsLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG5hbWVUb2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlRm9yVG9rZW4obmFtZVRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWVTdHJpbmdDb2RlOiB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKG5hbWVUb2tlbi5zdGFydCwgbmFtZVRva2VuLmVuZCksXG4gICAgICAgIHZhcmlhYmxlTmFtZTogX2lzSWRlbnRpZmllcjIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgbmFtZSkgPyBuYW1lIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5hbWUgb3Igc3RyaW5nIGF0IGJlZ2lubmluZyBvZiBlbnVtIGVsZW1lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgd2hlcmUgdGhlIFJIUyBpcyBqdXN0IGEgc3RyaW5nIGxpdGVyYWwgKG5vdCBvbWl0dGVkLCBub3QgYSBudW1iZXIsIGFuZFxuICAgKiBub3QgYSBjb21wbGV4IGV4cHJlc3Npb24pLiBUaGlzIGlzIHRoZSB0eXBpY2FsIGZvcm0gZm9yIFRTIHN0cmluZyBlbnVtcywgYW5kIGluIHRoaXMgY2FzZSwgd2VcbiAgICogZG8gKm5vdCogY3JlYXRlIGEgcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBkZWxldGluZyB0aGUga2V5IHRva2VuLCB3aGVuIHRoZSB0b2tlbiBwcm9jZXNzb3IgaXMgYXQgdGhlIGVxdWFscyBzaWduLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkgPSBcInNvbWUgdmFsdWVcIlxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5ID0gXCJzb21lIHZhbHVlXCI7IE15RW51bVtcInNvbWVLZXlcIl0gPSBzb21lS2V5O1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXlcIiA9IFwic29tZSB2YWx1ZVwiXG4gICAqIC0+XG4gICAqIE15RW51bVtcInNvbWUga2V5XCJdID0gXCJzb21lIHZhbHVlXCI7XG4gICAqL1xuICBwcm9jZXNzU3RyaW5nTGl0ZXJhbEVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICApIHtcbiAgICBpZiAodmFyaWFibGVOYW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYGNvbnN0ICR7dmFyaWFibGVOYW1lfWApO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyB2YWx1ZSBzdHJpbmdcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOyAke2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhcmlhYmxlTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XWApO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyB2YWx1ZSBzdHJpbmdcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIjtcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBlbnVtIG1lbWJlciBpbml0aWFsaXplZCB3aXRoIGFuIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0LWhhbmQgc2lkZSAob3RoZXIgdGhhbiBhXG4gICAqIHN0cmluZyBsaXRlcmFsKS4gSW4gdGhlc2UgY2FzZXMsIHdlIHNob3VsZCB0cmFuc2Zvcm0gdGhlIGV4cHJlc3Npb24gYW5kIGVtaXQgY29kZSB0aGF0IHNldHMgdXBcbiAgICogYSByZXZlcnNlIG1hcHBpbmcuXG4gICAqXG4gICAqIFRoZSBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgb3BlcmF0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBleHByZXNzaW9ucyB0aGF0IGNhbiBiZVxuICAgKiBcImNvbnN0YW50IGZvbGRlZFwiIGF0IGNvbXBpbGUgdGltZSAoaS5lLiBjb25zaXN0IG9mIG51bWJlciBsaXRlcmFscyBhbmQgc2ltcGxlIG1hdGggb3BlcmF0aW9uc1xuICAgKiBvbiB0aG9zZSBudW1iZXJzKSBhbmQgb25lcyB0aGF0IGFyZSBkeW5hbWljLiBGb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMsIGl0IGVtaXRzIHRoZSByZXNvbHZlZFxuICAgKiBudW1lcmljIHZhbHVlLCBhbmQgYXV0by1pbmNyZW1lbnRpbmcgaXMgb25seSBhbGxvd2VkIGluIHRoYXQgY2FzZS4gRXZhbHVhdGluZyBleHByZXNzaW9ucyBhdFxuICAgKiBjb21waWxlIHRpbWUgd291bGQgYWRkIHNpZ25pZmljYW50IGNvbXBsZXhpdHkgdG8gU3VjcmFzZSwgc28gU3VjcmFzZSBpbnN0ZWFkIGxlYXZlcyB0aGVcbiAgICogZXhwcmVzc2lvbiBhcy1pcywgYW5kIHdpbGwgbGF0ZXIgZW1pdCBzb21ldGhpbmcgbGlrZSBgTXlFbnVtW1wicHJldmlvdXNLZXlcIl0gKyAxYCB0byBpbXBsZW1lbnRcbiAgICogYXV0by1pbmNyZW1lbnRpbmcuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGRlbGV0aW5nIHRoZSBrZXkgdG9rZW4sIHdoZW4gdGhlIHRva2VuIHByb2Nlc3NvciBpcyBhdCB0aGUgZXF1YWxzIHNpZ24uXG4gICAqXG4gICAqIEV4YW1wbGUgMTpcbiAgICogc29tZUtleSA9IDEgKyAxXG4gICAqIC0+XG4gICAqIGNvbnN0IHNvbWVLZXkgPSAxICsgMTsgTXlFbnVtW015RW51bVtcInNvbWVLZXlcIl0gPSBzb21lS2V5XSA9IFwic29tZUtleVwiO1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXlcIiA9IDEgKyAxXG4gICAqIC0+XG4gICAqIE15RW51bVtNeUVudW1bXCJzb21lIGtleVwiXSA9IDEgKyAxXSA9IFwic29tZSBrZXlcIjtcbiAgICovXG4gIHByb2Nlc3NFeHBsaWNpdFZhbHVlRW51bU1lbWJlcihcbiAgICBlbnVtTmFtZSxcbiAgICBuYW1lU3RyaW5nQ29kZSxcbiAgICB2YXJpYWJsZU5hbWUsXG4gICkge1xuICAgIGNvbnN0IHJoc0VuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgaWYgKHJoc0VuZEluZGV4ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHJoc0VuZEluZGV4IG9uIGVudW0gYXNzaWduLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYGNvbnN0ICR7dmFyaWFibGVOYW1lfWApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByaHNFbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgIGA7ICR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XSA9ICR7dmFyaWFibGVOYW1lfV0gPSAke25hbWVTdHJpbmdDb2RlfTtgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgJHtlbnVtTmFtZX1bJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJoc0VuZEluZGV4KSB7XG4gICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgXSA9ICR7bmFtZVN0cmluZ0NvZGV9O2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgd2l0aCBubyByaWdodC1oYW5kIHNpZGUgZXhwcmVzc2lvbi4gSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgaXMgdGhlXG4gICAqIHByZXZpb3VzIHZhbHVlIHBsdXMgMSwgb3IgMCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUuIFdlIHNob3VsZCBhbHNvIGFsd2F5cyBlbWl0IGFcbiAgICogcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkyXG4gICAqIC0+XG4gICAqIGNvbnN0IHNvbWVLZXkyID0gc29tZUtleTEgKyAxOyBNeUVudW1bTXlFbnVtW1wic29tZUtleTJcIl0gPSBzb21lS2V5Ml0gPSBcInNvbWVLZXkyXCI7XG4gICAqXG4gICAqIEV4YW1wbGUgMjpcbiAgICogXCJzb21lIGtleSAyXCJcbiAgICogLT5cbiAgICogTXlFbnVtW015RW51bVtcInNvbWUga2V5IDJcIl0gPSBzb21lS2V5MSArIDFdID0gXCJzb21lIGtleSAyXCI7XG4gICAqL1xuICBwcm9jZXNzSW1wbGljaXRWYWx1ZUVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICAgIHByZXZpb3VzVmFsdWVDb2RlLFxuICApIHtcbiAgICBsZXQgdmFsdWVDb2RlID0gcHJldmlvdXNWYWx1ZUNvZGUgIT0gbnVsbCA/IGAke3ByZXZpb3VzVmFsdWVDb2RlfSArIDFgIDogXCIwXCI7XG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX0gPSAke3ZhbHVlQ29kZX07IGApO1xuICAgICAgdmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgYCR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XSA9ICR7dmFsdWVDb2RlfV0gPSAke25hbWVTdHJpbmdDb2RlfTtgLFxuICAgICk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gVHlwZVNjcmlwdFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfZ2V0Q2xhc3NJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRDbGFzc0luZm8nKTsgdmFyIF9nZXRDbGFzc0luZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0Q2xhc3NJbmZvKTtcbnZhciBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL0NKU0ltcG9ydFRyYW5zZm9ybWVyJyk7IHZhciBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQ0pTSW1wb3J0VHJhbnNmb3JtZXIpO1xudmFyIF9FU01JbXBvcnRUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vRVNNSW1wb3J0VHJhbnNmb3JtZXInKTsgdmFyIF9FU01JbXBvcnRUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9FU01JbXBvcnRUcmFuc2Zvcm1lcik7XG52YXIgX0Zsb3dUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vRmxvd1RyYW5zZm9ybWVyJyk7IHZhciBfRmxvd1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0Zsb3dUcmFuc2Zvcm1lcik7XG52YXIgX0plc3RIb2lzdFRyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9KZXN0SG9pc3RUcmFuc2Zvcm1lcicpOyB2YXIgX0plc3RIb2lzdFRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0plc3RIb2lzdFRyYW5zZm9ybWVyKTtcbnZhciBfSlNYVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL0pTWFRyYW5zZm9ybWVyJyk7IHZhciBfSlNYVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfSlNYVHJhbnNmb3JtZXIpO1xudmFyIF9OdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcicpOyB2YXIgX051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9OdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIpO1xudmFyIF9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyJyk7IHZhciBfT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyKTtcbnZhciBfT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lcicpOyB2YXIgX09wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lcik7XG52YXIgX1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyJyk7IHZhciBfUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lcik7XG52YXIgX1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXInKTsgdmFyIF9SZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuXG52YXIgX1R5cGVTY3JpcHRUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHlwZVNjcmlwdFRyYW5zZm9ybWVyJyk7IHZhciBfVHlwZVNjcmlwdFRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1R5cGVTY3JpcHRUcmFuc2Zvcm1lcik7XG5cblxuXG5cblxuXG5cblxuIGNsYXNzIFJvb3RUcmFuc2Zvcm1lciB7XG4gICBfX2luaXQoKSB7dGhpcy50cmFuc2Zvcm1lcnMgPSBbXX1cbiAgXG4gIFxuICAgX19pbml0MigpIHt0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcyA9IFtdfVxuICBcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdWNyYXNlQ29udGV4dCxcbiAgICB0cmFuc2Zvcm1zLFxuICAgIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AsXG4gICAgb3B0aW9ucyxcbiAgKSB7O1Jvb3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Um9vdFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0Lm5hbWVNYW5hZ2VyO1xuICAgIHRoaXMuaGVscGVyTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0LmhlbHBlck1hbmFnZXI7XG4gICAgY29uc3Qge3Rva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3J9ID0gc3VjcmFzZUNvbnRleHQ7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlblByb2Nlc3NvcjtcbiAgICB0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKTtcbiAgICB0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkID0gdHJhbnNmb3Jtcy5pbmNsdWRlcyhcInJlYWN0LWhvdC1sb2FkZXJcIik7XG4gICAgdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gQm9vbGVhbihvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpO1xuXG4gICAgaWYgKCFvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyAoMCwgX09wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRva2VuUHJvY2Vzc29yLCB0aGlzLm5hbWVNYW5hZ2VyKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKG5ldyAoMCwgX051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcjIuZGVmYXVsdCkodG9rZW5Qcm9jZXNzb3IpKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2gobmV3ICgwLCBfT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lcjIuZGVmYXVsdCkodG9rZW5Qcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIpKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMuanN4UnVudGltZSAhPT0gXCJwcmVzZXJ2ZVwiKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgICAgbmV3ICgwLCBfSlNYVHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRoaXMsIHRva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIsIG9wdGlvbnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgaW1wb3J0UHJvY2Vzc29yLCBvcHRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBudWxsO1xuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwicmVhY3QtaG90LWxvYWRlclwiKSkge1xuICAgICAgaWYgKCFvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbGVQYXRoIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIHJlYWN0LWhvdC1sb2FkZXIgdHJhbnNmb3JtLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBuZXcgKDAsIF9SZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0b2tlblByb2Nlc3Nvciwgb3B0aW9ucy5maWxlUGF0aCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHdheXMgd2FudCB0byBlbmFibGUgdGhlIGltcG9ydHMgdHJhbnNmb3JtZXIsIGV2ZW4gd2hlbiB0aGUgaW1wb3J0IHRyYW5zZm9ybVxuICAgIC8vIGl0c2VsZiBpc24ndCBlbmFibGVkLCBzaW5jZSB3ZSBuZWVkIHRvIGRvIHR5cGUtb25seSBpbXBvcnQgcHJ1bmluZyBmb3IgYm90aCBGbG93IGFuZFxuICAgIC8vIFR5cGVTY3JpcHQuXG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgICBpZiAoaW1wb3J0UHJvY2Vzc29yID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGltcG9ydFByb2Nlc3NvciB3aXRoIGltcG9ydHMgdHJhbnNmb3JtIGVuYWJsZWQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIyLmRlZmF1bHQpKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICAgICAgIHRoaXMubmFtZU1hbmFnZXIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJNYW5hZ2VyLFxuICAgICAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIsXG4gICAgICAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3ApLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgKDAsIF9FU01JbXBvcnRUcmFuc2Zvcm1lcjIuZGVmYXVsdCkoXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgdGhpcy5uYW1lTWFuYWdlcixcbiAgICAgICAgICB0aGlzLmhlbHBlck1hbmFnZXIsXG4gICAgICAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSxcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfRmxvd1RyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgdHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgKDAsIF9UeXBlU2NyaXB0VHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRoaXMsIHRva2VuUHJvY2Vzc29yLCB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImplc3RcIikpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyAoMCwgX0plc3RIb2lzdFRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgdGhpcy5uYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKCkge1xuICAgIHRoaXMudG9rZW5zLnJlc2V0KCk7XG4gICAgdGhpcy5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgY29uc3Qgc2hvdWxkQWRkVXNlU3RyaWN0ID0gdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkO1xuICAgIC8vIFwidXNlIHN0cmljdFwiIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCwgc28gb3ZlcnJpZGUgdGhlIG5vcm1hbCB0cmFuc2Zvcm1lciBvcmRlci5cbiAgICBsZXQgcHJlZml4ID0gc2hvdWxkQWRkVXNlU3RyaWN0ID8gJ1widXNlIHN0cmljdFwiOycgOiBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHByZWZpeCArPSB0cmFuc2Zvcm1lci5nZXRQcmVmaXhDb2RlKCk7XG4gICAgfVxuICAgIHByZWZpeCArPSB0aGlzLmhlbHBlck1hbmFnZXIuZW1pdEhlbHBlcnMoKTtcbiAgICBwcmVmaXggKz0gdGhpcy5nZW5lcmF0ZWRWYXJpYWJsZXMubWFwKCh2KSA9PiBgIHZhciAke3Z9O2ApLmpvaW4oXCJcIik7XG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuICAgICAgcHJlZml4ICs9IHRyYW5zZm9ybWVyLmdldEhvaXN0ZWRDb2RlKCk7XG4gICAgfVxuICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHN1ZmZpeCArPSB0cmFuc2Zvcm1lci5nZXRTdWZmaXhDb2RlKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9rZW5zLmZpbmlzaCgpO1xuICAgIGxldCB7Y29kZX0gPSByZXN1bHQ7XG4gICAgaWYgKGNvZGUuc3RhcnRzV2l0aChcIiMhXCIpKSB7XG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gY29kZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgaWYgKG5ld2xpbmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3bGluZUluZGV4ID0gY29kZS5sZW5ndGg7XG4gICAgICAgIGNvZGUgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IGNvZGUuc2xpY2UoMCwgbmV3bGluZUluZGV4ICsgMSkgKyBwcmVmaXggKyBjb2RlLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpICsgc3VmZml4LFxuICAgICAgICAvLyBUaGUgaGFzaGJhbmcgbGluZSBoYXMgbm8gdG9rZW5zLCBzbyBzaGlmdGluZyB0aGUgdG9rZW5zIHRvIGFjY291bnRcbiAgICAgICAgLy8gZm9yIHByZWZpeCBjYW4gaGFwcGVuIG5vcm1hbGx5LlxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBwcmVmaXggKyBjb2RlICsgc3VmZml4LFxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLmlzQXRFbmQoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvbGxhckJyYWNlTCkpIHtcbiAgICAgICAgYnJhY2VEZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgICBwYXJlbkRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgICBpZiAocGFyZW5EZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbkRlcHRoLS07XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NUb2tlbigpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDbGFzcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG4gICAgICBjb25zdCB3YXNQcm9jZXNzZWQgPSB0cmFuc2Zvcm1lci5wcm9jZXNzKCk7XG4gICAgICBpZiAod2FzUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCBwYXN0IGEgY2xhc3Mgd2l0aCBhIG5hbWUgYW5kIHJldHVybiB0aGF0IG5hbWUuXG4gICAqL1xuICBwcm9jZXNzTmFtZWRDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpZGVudGlmaWVyIGZvciBleHBvcnRlZCBjbGFzcyBuYW1lLlwiKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIHRoaXMucHJvY2Vzc0NsYXNzKCk7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBwcm9jZXNzQ2xhc3MoKSB7XG4gICAgY29uc3QgY2xhc3NJbmZvID0gX2dldENsYXNzSW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcywgdGhpcy50b2tlbnMsIHRoaXMubmFtZU1hbmFnZXIsIHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcyk7XG5cbiAgICAvLyBCb3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzIG5lZWQgYSBjbGFzcyBuYW1lIHRvIHVzZSB0byBpbnZva2UgdGhlIGluaXRpYWxpemVyLCBzb1xuICAgIC8vIGFzc2lnbiB0byBvbmUgaWYgbmVjZXNzYXJ5LlxuICAgIGNvbnN0IG5lZWRzQ29tbWFFeHByZXNzaW9uID1cbiAgICAgIChjbGFzc0luZm8uaGVhZGVySW5mby5pc0V4cHJlc3Npb24gfHwgIWNsYXNzSW5mby5oZWFkZXJJbmZvLmNsYXNzTmFtZSkgJiZcbiAgICAgIGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLmxlbmd0aCArIGNsYXNzSW5mby5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGxldCBjbGFzc05hbWUgPSBjbGFzc0luZm8uaGVhZGVySW5mby5jbGFzc05hbWU7XG4gICAgaWYgKG5lZWRzQ29tbWFFeHByZXNzaW9uKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY2xhc3NcIik7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7Y2xhc3NOYW1lfSA9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NUb2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNvbnRleHRJZCA9IGNsYXNzVG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgdG8gaGF2ZSBhIGNvbnRleHQgSUQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcyk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwsIGNvbnRleHRJZCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzQ2xhc3NCb2R5KGNsYXNzSW5mbywgY2xhc3NOYW1lKTtcblxuICAgIGNvbnN0IHN0YXRpY0luaXRpYWxpemVyU3RhdGVtZW50cyA9IGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLm1hcChcbiAgICAgIChuYW1lKSA9PiBgJHtjbGFzc05hbWV9LiR7bmFtZX0oKWAsXG4gICAgKTtcbiAgICBpZiAobmVlZHNDb21tYUV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgIGAsICR7c3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLm1hcCgocykgPT4gYCR7c30sIGApLmpvaW4oXCJcIil9JHtjbGFzc05hbWV9KWAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NJbmZvLnN0YXRpY0luaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7c3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLm1hcCgocykgPT4gYCR7c307YCkuam9pbihcIiBcIil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHdhbnQgdG8ganVzdCBoYW5kbGUgY2xhc3MgZmllbGRzIGluIGFsbCBjb250ZXh0cywgc2luY2UgVHlwZVNjcmlwdCBzdXBwb3J0cyB0aGVtLiBMYXRlcixcbiAgICogd2hlbiBzb21lIEpTIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IGNsYXNzIGZpZWxkcywgdGhpcyBzaG91bGQgYmUgbWFkZSBvcHRpb25hbC5cbiAgICovXG4gIHByb2Nlc3NDbGFzc0JvZHkoY2xhc3NJbmZvLCBjbGFzc05hbWUpIHtcbiAgICBjb25zdCB7XG4gICAgICBoZWFkZXJJbmZvLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIHJhbmdlc1RvUmVtb3ZlLFxuICAgIH0gPSBjbGFzc0luZm87XG4gICAgbGV0IGZpZWxkSW5kZXggPSAwO1xuICAgIGxldCByYW5nZVRvUmVtb3ZlSW5kZXggPSAwO1xuICAgIGNvbnN0IGNsYXNzQ29udGV4dElkID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkO1xuICAgIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub24tbnVsbCBjb250ZXh0IElEIG9uIGNsYXNzLlwiKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgIGlmICh0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBcIl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSwgY29kZSkge3RoaXNba2V5XSA9IGV2YWwoY29kZSk7fVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkc0NvbnN0cnVjdG9ySW5pdCA9XG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cy5sZW5ndGggKyBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGlmIChjb25zdHJ1Y3Rvckluc2VydFBvcyA9PT0gbnVsbCAmJiBuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlID0gdGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJJbmZvLmhhc1N1cGVyY2xhc3MpIHtcbiAgICAgICAgY29uc3QgYXJnc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJhcmdzXCIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgIGBjb25zdHJ1Y3RvciguLi4ke2FyZ3NOYW1lfSkgeyBzdXBlciguLi4ke2FyZ3NOYW1lfSk7ICR7Y29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlfTsgfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdHJ1Y3RvcigpIHsgJHtjb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvZGV9OyB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNsYXNzQ29udGV4dElkKSkge1xuICAgICAgaWYgKGZpZWxkSW5kZXggPCBmaWVsZHMubGVuZ3RoICYmIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID09PSBmaWVsZHNbZmllbGRJbmRleF0uc3RhcnQpIHtcbiAgICAgICAgbGV0IG5lZWRzQ2xvc2VCcmFjZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW5XaXRoUHJlZml4KGAke2ZpZWxkc1tmaWVsZEluZGV4XS5pbml0aWFsaXplck5hbWV9KCkge3RoaXNgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5udW0pKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuV2l0aFByZWZpeChgJHtmaWVsZHNbZmllbGRJbmRleF0uaW5pdGlhbGl6ZXJOYW1lfSgpIHt0aGlzW2ApO1xuICAgICAgICAgIG5lZWRzQ2xvc2VCcmFjZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuV2l0aFByZWZpeChgJHtmaWVsZHNbZmllbGRJbmRleF0uaW5pdGlhbGl6ZXJOYW1lfSgpIHt0aGlzLmApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IGZpZWxkc1tmaWVsZEluZGV4XS5lbmQpIHtcbiAgICAgICAgICBpZiAobmVlZHNDbG9zZUJyYWNlICYmIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID09PSBmaWVsZHNbZmllbGRJbmRleF0uZXF1YWxzSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJdXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJ9XCIpO1xuICAgICAgICBmaWVsZEluZGV4Kys7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByYW5nZVRvUmVtb3ZlSW5kZXggPCByYW5nZXNUb1JlbW92ZS5sZW5ndGggJiZcbiAgICAgICAgdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPj0gcmFuZ2VzVG9SZW1vdmVbcmFuZ2VUb1JlbW92ZUluZGV4XS5zdGFydFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uZW5kKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgcmFuZ2VzVG9SZW1vdmVbcmFuZ2VUb1JlbW92ZUluZGV4XS5lbmQpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlVG9SZW1vdmVJbmRleCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gY29uc3RydWN0b3JJbnNlcnRQb3MpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIGlmIChuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgICAgICBgOyR7dGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgKX07YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gIH1cblxuICBtYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMsXG4gICAgY2xhc3NOYW1lLFxuICApIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAuLi5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubWFwKChuYW1lKSA9PiBgJHtjbGFzc05hbWV9LnByb3RvdHlwZS4ke25hbWV9LmNhbGwodGhpcylgKSxcbiAgICBdLmpvaW4oXCI7XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IGl0J3Mgb2sgdG8gc2ltcGx5IHJlbW92ZSB0eXBlIHRva2VucywgYnV0IHdlIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsIHdoZW4gZGVhbGluZyB3aXRoXG4gICAqIGFycm93IGZ1bmN0aW9uIHJldHVybiB0eXBlcyBzaW5jZSB0aGV5IGNhbiBjb25mdXNlIHRoZSBwYXJzZXIuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCB0byBtb3ZlXG4gICAqIHRoZSBjbG9zZS1wYXJlbiB0byB0aGUgc2FtZSBsaW5lIGFzIHRoZSBhcnJvdy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlL2lzc3Vlcy8zOTEgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHByb2Nlc3NQb3NzaWJsZUFycm93UGFyYW1FbmQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSAmJiB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgxKS5pc1R5cGUpIHtcbiAgICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgICAgLy8gTG9vayBhaGVhZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBhcnJvdyBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZS5cbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy50b2tlbnNbbmV4dE5vblR5cGVJbmRleF0uaXNUeXBlKSB7XG4gICAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgobmV4dE5vblR5cGVJbmRleCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IG5leHROb25UeXBlSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIpID0+XCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIG1pZ2h0IGJlIG9mIHRoZSBmb3JtOlxuICAgKlxuICAgKiBhc3luYyA8XG4gICAqICAgVFxuICAgKiA+KCkgPT4ge31cbiAgICpcbiAgICogaW4gd2hpY2ggY2FzZSwgcmVtb3ZpbmcgdGhlIHR5cGUgcGFyYW1ldGVycyB3aWxsIGNhdXNlIGEgc3ludGF4IGVycm9yLiBEZXRlY3QgdGhpcyBjYXNlIGFuZFxuICAgKiBtb3ZlIHRoZSBvcGVuLXBhcmVuIGVhcmxpZXIuXG4gICAqL1xuICBwcm9jZXNzUG9zc2libGVBc3luY0Fycm93V2l0aFR5cGVQYXJhbXMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYXN5bmMpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgIGlmIChuZXh0VG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbiB8fCAhbmV4dFRva2VuLmlzVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLnRva2Vuc1tuZXh0Tm9uVHlwZUluZGV4XS5pc1R5cGUpIHtcbiAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChuZXh0Tm9uVHlwZUluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcImFzeW5jIChcIik7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IG5leHROb25UeXBlSW5kZXgpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAvLyBXZSBhdGUgYSAoIHRva2VuLCBzbyB3ZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHRva2VucyBpbiBiZXR3ZWVuIGFuZCB0aGVuIHRoZSApIHRva2VuIHNvIHRoYXRcbiAgICAgIC8vIHdlIHJlbWFpbiBiYWxhbmNlZC5cbiAgICAgIHRoaXMucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2hpZnRNYXBwaW5ncyhcbiAgICBtYXBwaW5ncyxcbiAgICBwcmVmaXhMZW5ndGgsXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSBtYXBwaW5nc1tpXTtcbiAgICAgIGlmIChtYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwcGluZ3NbaV0gPSBtYXBwaW5nICsgcHJlZml4TGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gUm9vdFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTGluZXNBbmRDb2x1bW5zID0gdm9pZCAwO1xudmFyIExGID0gJ1xcbic7XG52YXIgQ1IgPSAnXFxyJztcbnZhciBMaW5lc0FuZENvbHVtbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGluZXNBbmRDb2x1bW5zKHN0cmluZykge1xuICAgICAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICAgICAgdmFyIG9mZnNldHMgPSBbMF07XG4gICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IHN0cmluZy5sZW5ndGg7KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZ1tvZmZzZXRdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBMRjpcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IExGLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ1I6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDUi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdbb2Zmc2V0XSA9PT0gTEYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBMRi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgIH1cbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxvY2F0aW9uRm9ySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0cyA9IHRoaXMub2Zmc2V0cztcbiAgICAgICAgd2hpbGUgKG9mZnNldHNbbGluZSArIDFdIDw9IGluZGV4KSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IGluZGV4IC0gb2Zmc2V0c1tsaW5lXTtcbiAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICB9O1xuICAgIExpbmVzQW5kQ29sdW1ucy5wcm90b3R5cGUuaW5kZXhGb3JMb2NhdGlvbiA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmUsIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbjtcbiAgICAgICAgaWYgKGxpbmUgPCAwIHx8IGxpbmUgPj0gdGhpcy5vZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA8IDAgfHwgY29sdW1uID4gdGhpcy5sZW5ndGhPZkxpbmUobGluZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbbGluZV0gKyBjb2x1bW47XG4gICAgfTtcbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxlbmd0aE9mTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldHNbbGluZV07XG4gICAgICAgIHZhciBuZXh0T2Zmc2V0ID0gbGluZSA9PT0gdGhpcy5vZmZzZXRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gdGhpcy5zdHJpbmcubGVuZ3RoXG4gICAgICAgICAgICA6IHRoaXMub2Zmc2V0c1tsaW5lICsgMV07XG4gICAgICAgIHJldHVybiBuZXh0T2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH07XG4gICAgcmV0dXJuIExpbmVzQW5kQ29sdW1ucztcbn0oKSk7XG5leHBvcnRzLkxpbmVzQW5kQ29sdW1ucyA9IExpbmVzQW5kQ29sdW1ucztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTGluZXNBbmRDb2x1bW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF9saW5lc2FuZGNvbHVtbnMgPSByZXF1aXJlKCdsaW5lcy1hbmQtY29sdW1ucycpOyB2YXIgX2xpbmVzYW5kY29sdW1uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9saW5lc2FuZGNvbHVtbnMpO1xuXG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbiBmdW5jdGlvbiBmb3JtYXRUb2tlbnMoY29kZSwgdG9rZW5zKSB7XG4gIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCB0b2tlbktleXMgPSBPYmplY3Qua2V5cyh0b2tlbnNbMF0pLmZpbHRlcihcbiAgICAoaykgPT4gayAhPT0gXCJ0eXBlXCIgJiYgayAhPT0gXCJ2YWx1ZVwiICYmIGsgIT09IFwic3RhcnRcIiAmJiBrICE9PSBcImVuZFwiICYmIGsgIT09IFwibG9jXCIsXG4gICk7XG4gIGNvbnN0IHR5cGVLZXlzID0gT2JqZWN0LmtleXModG9rZW5zWzBdLnR5cGUpLmZpbHRlcigoaykgPT4gayAhPT0gXCJsYWJlbFwiICYmIGsgIT09IFwia2V5d29yZFwiKTtcblxuICBjb25zdCBoZWFkaW5ncyA9IFtcIkxvY2F0aW9uXCIsIFwiTGFiZWxcIiwgXCJSYXdcIiwgLi4udG9rZW5LZXlzLCAuLi50eXBlS2V5c107XG5cbiAgY29uc3QgbGluZXMgPSBuZXcgKDAsIF9saW5lc2FuZGNvbHVtbnMyLmRlZmF1bHQpKGNvZGUpO1xuICBjb25zdCByb3dzID0gW2hlYWRpbmdzLCAuLi50b2tlbnMubWFwKGdldFRva2VuQ29tcG9uZW50cyldO1xuICBjb25zdCBwYWRkaW5nID0gaGVhZGluZ3MubWFwKCgpID0+IDApO1xuICBmb3IgKGNvbnN0IGNvbXBvbmVudHMgb2Ygcm93cykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFkZGluZ1tpXSA9IE1hdGgubWF4KHBhZGRpbmdbaV0sIGNvbXBvbmVudHNbaV0ubGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvd3NcbiAgICAubWFwKChjb21wb25lbnRzKSA9PiBjb21wb25lbnRzLm1hcCgoY29tcG9uZW50LCBpKSA9PiBjb21wb25lbnQucGFkRW5kKHBhZGRpbmdbaV0pKS5qb2luKFwiIFwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBmdW5jdGlvbiBnZXRUb2tlbkNvbXBvbmVudHModG9rZW4pIHtcbiAgICBjb25zdCByYXcgPSBjb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIHJldHVybiBbXG4gICAgICBmb3JtYXRSYW5nZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKSxcbiAgICAgIF90eXBlcy5mb3JtYXRUb2tlblR5cGUuY2FsbCh2b2lkIDAsIHRva2VuLnR5cGUpLFxuICAgICAgdHJ1bmNhdGUoU3RyaW5nKHJhdyksIDE0KSxcbiAgICAgIC8vIEB0cy1pZ25vcmU6IEludGVudGlvbmFsIGR5bmFtaWMgYWNjZXNzIGJ5IGtleS5cbiAgICAgIC4uLnRva2VuS2V5cy5tYXAoKGtleSkgPT4gZm9ybWF0VmFsdWUodG9rZW5ba2V5XSwga2V5KSksXG4gICAgICAvLyBAdHMtaWdub3JlOiBJbnRlbnRpb25hbCBkeW5hbWljIGFjY2VzcyBieSBrZXkuXG4gICAgICAuLi50eXBlS2V5cy5tYXAoKGtleSkgPT4gZm9ybWF0VmFsdWUodG9rZW4udHlwZVtrZXldLCBrZXkpKSxcbiAgICBdO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUsIGtleSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gYCR7Zm9ybWF0UG9zKHN0YXJ0KX0tJHtmb3JtYXRQb3MoZW5kKX1gO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UG9zKHBvcykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbGluZXMubG9jYXRpb25Gb3JJbmRleChwb3MpO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBcIlVua25vd25cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xvY2F0aW9uLmxpbmUgKyAxfToke2xvY2F0aW9uLmNvbHVtbiArIDF9YDtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0VG9rZW5zO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW5ndGgpIHtcbiAgaWYgKHMubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke3Muc2xpY2UoMCwgbGVuZ3RoIC0gMyl9Li4uYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvID0gcmVxdWlyZSgnLi9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvJyk7IHZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKTtcblxuLyoqXG4gKiBTcGVjaWFsIGNhc2UgY29kZSB0byBzY2FuIGZvciBpbXBvcnRlZCBuYW1lcyBpbiBFU00gVHlwZVNjcmlwdC4gV2UgbmVlZCB0byBkbyB0aGlzIHNvIHdlIGNhblxuICogcHJvcGVybHkgZ2V0IGdsb2JhbHMgc28gd2UgY2FuIGNvbXB1dGUgc2hhZG93ZWQgZ2xvYmFscy5cbiAqXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gbG9naWMgaW4gQ0pTSW1wb3J0UHJvY2Vzc29yLCBidXQgdHJpbW1lZCBkb3duIHRvIGF2b2lkIGxvZ2ljIHdpdGggQ0pTXG4gKiByZXBsYWNlbWVudCBhbmQgZmxvdyB0eXBlIGltcG9ydHMuXG4gKi9cbiBmdW5jdGlvbiBnZXRUU0ltcG9ydGVkTmFtZXModG9rZW5zKSB7XG4gIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBuZXcgU2V0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KSAmJlxuICAgICAgIXRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUuZXEpXG4gICAgKSB7XG4gICAgICBjb2xsZWN0TmFtZXNGb3JJbXBvcnQodG9rZW5zLCBpLCBpbXBvcnRlZE5hbWVzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkTmFtZXM7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldFRTSW1wb3J0ZWROYW1lcztcblxuZnVuY3Rpb24gY29sbGVjdE5hbWVzRm9ySW1wb3J0KFxuICB0b2tlbnMsXG4gIGluZGV4LFxuICBpbXBvcnRlZE5hbWVzLFxuKSB7XG4gIGluZGV4Kys7XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAvLyAqIGFzXG4gICAgaW5kZXggKz0gMjtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICBpbmRleCsrO1xuICAgIGNvbGxlY3ROYW1lc0Zvck5hbWVkSW1wb3J0KHRva2VucywgaW5kZXgsIGltcG9ydGVkTmFtZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3ROYW1lc0Zvck5hbWVkSW1wb3J0KFxuICB0b2tlbnMsXG4gIGluZGV4LFxuICBpbXBvcnRlZE5hbWVzLFxuKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdG9rZW5zLCBpbmRleCk7XG4gICAgaW5kZXggPSBzcGVjaWZpZXJJbmZvLmVuZEluZGV4O1xuICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgIGltcG9ydGVkTmFtZXMuYWRkKHNwZWNpZmllckluZm8ucmlnaHROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5zLnRva2Vuc1tpbmRleF0pfWApO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF9DSlNJbXBvcnRQcm9jZXNzb3IgPSByZXF1aXJlKCcuL0NKU0ltcG9ydFByb2Nlc3NvcicpOyB2YXIgX0NKU0ltcG9ydFByb2Nlc3NvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9DSlNJbXBvcnRQcm9jZXNzb3IpO1xudmFyIF9jb21wdXRlU291cmNlTWFwID0gcmVxdWlyZSgnLi9jb21wdXRlU291cmNlTWFwJyk7IHZhciBfY29tcHV0ZVNvdXJjZU1hcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wdXRlU291cmNlTWFwKTtcbnZhciBfSGVscGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vSGVscGVyTWFuYWdlcicpO1xudmFyIF9pZGVudGlmeVNoYWRvd2VkR2xvYmFscyA9IHJlcXVpcmUoJy4vaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMnKTsgdmFyIF9pZGVudGlmeVNoYWRvd2VkR2xvYmFsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pZGVudGlmeVNoYWRvd2VkR2xvYmFscyk7XG52YXIgX05hbWVNYW5hZ2VyID0gcmVxdWlyZSgnLi9OYW1lTWFuYWdlcicpOyB2YXIgX05hbWVNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX05hbWVNYW5hZ2VyKTtcbnZhciBfT3B0aW9ucyA9IHJlcXVpcmUoJy4vT3B0aW9ucycpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG5cbnZhciBfVG9rZW5Qcm9jZXNzb3IgPSByZXF1aXJlKCcuL1Rva2VuUHJvY2Vzc29yJyk7IHZhciBfVG9rZW5Qcm9jZXNzb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9rZW5Qcm9jZXNzb3IpO1xudmFyIF9Sb290VHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL3RyYW5zZm9ybWVycy9Sb290VHJhbnNmb3JtZXInKTsgdmFyIF9Sb290VHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUm9vdFRyYW5zZm9ybWVyKTtcbnZhciBfZm9ybWF0VG9rZW5zID0gcmVxdWlyZSgnLi91dGlsL2Zvcm1hdFRva2VucycpOyB2YXIgX2Zvcm1hdFRva2VuczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mb3JtYXRUb2tlbnMpO1xudmFyIF9nZXRUU0ltcG9ydGVkTmFtZXMgPSByZXF1aXJlKCcuL3V0aWwvZ2V0VFNJbXBvcnRlZE5hbWVzJyk7IHZhciBfZ2V0VFNJbXBvcnRlZE5hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFRTSW1wb3J0ZWROYW1lcyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuO1xuXG4gZnVuY3Rpb24gZ2V0VmVyc2lvbigpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIFwiMy4zNS4wXCI7XG59IGV4cG9ydHMuZ2V0VmVyc2lvbiA9IGdldFZlcnNpb247XG5cbiBmdW5jdGlvbiB0cmFuc2Zvcm0oY29kZSwgb3B0aW9ucykge1xuICBfT3B0aW9ucy52YWxpZGF0ZU9wdGlvbnMuY2FsbCh2b2lkIDAsIG9wdGlvbnMpO1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y3Jhc2VDb250ZXh0ID0gZ2V0U3VjcmFzZUNvbnRleHQoY29kZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgKDAsIF9Sb290VHJhbnNmb3JtZXIyLmRlZmF1bHQpKFxuICAgICAgc3VjcmFzZUNvbnRleHQsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMsXG4gICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCksXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXJSZXN1bHQgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oKTtcbiAgICBsZXQgcmVzdWx0ID0ge2NvZGU6IHRyYW5zZm9ybWVyUmVzdWx0LmNvZGV9O1xuICAgIGlmIChvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGdlbmVyYXRpbmcgYSBzb3VyY2UgbWFwLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBzb3VyY2VNYXA6IF9jb21wdXRlU291cmNlTWFwMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBcbiAgICAgICAgICB0cmFuc2Zvcm1lclJlc3VsdCxcbiAgICAgICAgICBvcHRpb25zLmZpbGVQYXRoLFxuICAgICAgICAgIG9wdGlvbnMuc291cmNlTWFwT3B0aW9ucyxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHN1Y3Jhc2VDb250ZXh0LnRva2VuUHJvY2Vzc29yLnRva2VucyxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICBlLm1lc3NhZ2UgPSBgRXJyb3IgdHJhbnNmb3JtaW5nICR7b3B0aW9ucy5maWxlUGF0aH06ICR7ZS5tZXNzYWdlfWA7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn0gZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cbi8qKlxuICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWNyYXNlIHRva2VucywgbW9zdGx5IHVzZWZ1bCBmb3JcbiAqIGRpYWdub3N0aWMgcHVycG9zZXMuXG4gKi9cbiBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRUb2tlbnMoY29kZSwgb3B0aW9ucykge1xuICBjb25zdCB0b2tlbnMgPSBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKS50b2tlblByb2Nlc3Nvci50b2tlbnM7XG4gIHJldHVybiBfZm9ybWF0VG9rZW5zMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBjb2RlLCB0b2tlbnMpO1xufSBleHBvcnRzLmdldEZvcm1hdHRlZFRva2VucyA9IGdldEZvcm1hdHRlZFRva2VucztcblxuLyoqXG4gKiBDYWxsIGludG8gdGhlIHBhcnNlci90b2tlbml6ZXIgYW5kIGRvIHNvbWUgZnVydGhlciBwcmVwcm9jZXNzaW5nOlxuICogLSBDb21lIHVwIHdpdGggYSBzZXQgb2YgdXNlZCBuYW1lcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gbmV3IG5hbWVzLlxuICogLSBQcmVwcm9jZXNzIGFsbCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgc28gd2Uga25vdyB3aGljaCBnbG9iYWxzIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICogLSBDb21wdXRlIHNpdHVhdGlvbnMgd2hlcmUgYW55IG9mIHRob3NlIGdsb2JhbHMgYXJlIHNoYWRvd2VkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2UgcHJlcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgc2tpcHBlZCBiYXNlZCBvbiB3aGF0IGFjdHVhbCB3b3JrIGlzXG4gKiBiZWluZyBkb25lLlxuICovXG5mdW5jdGlvbiBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGlzSlNYRW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKTtcbiAgY29uc3QgaXNUeXBlU2NyaXB0RW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIik7XG4gIGNvbnN0IGlzRmxvd0VuYWJsZWQgPSBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpO1xuICBjb25zdCBkaXNhYmxlRVNUcmFuc2Zvcm1zID0gb3B0aW9ucy5kaXNhYmxlRVNUcmFuc2Zvcm1zID09PSB0cnVlO1xuICBjb25zdCBmaWxlID0gX3BhcnNlci5wYXJzZS5jYWxsKHZvaWQgMCwgY29kZSwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnM7XG4gIGNvbnN0IHNjb3BlcyA9IGZpbGUuc2NvcGVzO1xuXG4gIGNvbnN0IG5hbWVNYW5hZ2VyID0gbmV3ICgwLCBfTmFtZU1hbmFnZXIyLmRlZmF1bHQpKGNvZGUsIHRva2Vucyk7XG4gIGNvbnN0IGhlbHBlck1hbmFnZXIgPSBuZXcgKDAsIF9IZWxwZXJNYW5hZ2VyLkhlbHBlck1hbmFnZXIpKG5hbWVNYW5hZ2VyKTtcbiAgY29uc3QgdG9rZW5Qcm9jZXNzb3IgPSBuZXcgKDAsIF9Ub2tlblByb2Nlc3NvcjIuZGVmYXVsdCkoXG4gICAgY29kZSxcbiAgICB0b2tlbnMsXG4gICAgaXNGbG93RW5hYmxlZCxcbiAgICBkaXNhYmxlRVNUcmFuc2Zvcm1zLFxuICAgIGhlbHBlck1hbmFnZXIsXG4gICk7XG4gIGNvbnN0IGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gQm9vbGVhbihvcHRpb25zLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wKTtcblxuICBsZXQgaW1wb3J0UHJvY2Vzc29yID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpIHtcbiAgICBpbXBvcnRQcm9jZXNzb3IgPSBuZXcgKDAsIF9DSlNJbXBvcnRQcm9jZXNzb3IyLmRlZmF1bHQpKFxuICAgICAgbmFtZU1hbmFnZXIsXG4gICAgICB0b2tlblByb2Nlc3NvcixcbiAgICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIiksXG4gICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgaGVscGVyTWFuYWdlcixcbiAgICApO1xuICAgIGltcG9ydFByb2Nlc3Nvci5wcmVwcm9jZXNzVG9rZW5zKCk7XG4gICAgLy8gV2UgbmVlZCB0byBtYXJrIHNoYWRvd2VkIGdsb2JhbHMgYWZ0ZXIgcHJvY2Vzc2luZyBpbXBvcnRzIHNvIHdlIGtub3cgdGhhdCB0aGUgZ2xvYmFscyBhcmUsXG4gICAgLy8gYnV0IGJlZm9yZSB0eXBlLW9ubHkgaW1wb3J0IHBydW5pbmcsIHNpbmNlIHRoYXQgcmVsaWVzIG9uIHNoYWRvd2luZyBpbmZvcm1hdGlvbi5cbiAgICBfaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIGltcG9ydFByb2Nlc3Nvci5nZXRHbG9iYWxOYW1lcygpKTtcbiAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSAmJiAhb3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgICAgaW1wb3J0UHJvY2Vzc29yLnBydW5lVHlwZU9ubHlJbXBvcnRzKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIikgJiYgIW9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICAvLyBTaGFkb3dlZCBnbG9iYWwgZGV0ZWN0aW9uIGlzIG5lZWRlZCBmb3IgVFMgaW1wbGljaXQgZWxpc2lvbiBvZiBpbXBvcnRlZCBuYW1lcy5cbiAgICBfaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIF9nZXRUU0ltcG9ydGVkTmFtZXMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yKSk7XG4gIH1cbiAgcmV0dXJuIHt0b2tlblByb2Nlc3Nvciwgc2NvcGVzLCBuYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yLCBoZWxwZXJNYW5hZ2VyfTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO3ZhciBiPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGU9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsZj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxnPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksaz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLGw9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxtPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxuPWI/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMscT1iP1xuU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6NjAxMjAscj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNix2PWI/U3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpOjYwMTIxLHc9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIik6NjAxMTcseD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik6NjAxMTgseT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTo2MDExOTtcbmZ1bmN0aW9uIHooYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHU9YS4kJHR5cGVvZjtzd2l0Y2godSl7Y2FzZSBjOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGw6Y2FzZSBtOmNhc2UgZTpjYXNlIGc6Y2FzZSBmOmNhc2UgcDpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgbjpjYXNlIHQ6Y2FzZSByOmNhc2UgaDpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB1fX1jYXNlIGQ6cmV0dXJuIHV9fX1mdW5jdGlvbiBBKGEpe3JldHVybiB6KGEpPT09bX1leHBvcnRzLkFzeW5jTW9kZT1sO2V4cG9ydHMuQ29uY3VycmVudE1vZGU9bTtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1rO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWg7ZXhwb3J0cy5FbGVtZW50PWM7ZXhwb3J0cy5Gb3J3YXJkUmVmPW47ZXhwb3J0cy5GcmFnbWVudD1lO2V4cG9ydHMuTGF6eT10O2V4cG9ydHMuTWVtbz1yO2V4cG9ydHMuUG9ydGFsPWQ7XG5leHBvcnRzLlByb2ZpbGVyPWc7ZXhwb3J0cy5TdHJpY3RNb2RlPWY7ZXhwb3J0cy5TdXNwZW5zZT1wO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIEEoYSl8fHooYSk9PT1sfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9QTtleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09a307ZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWh9O2V4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1jfTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PW59O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWV9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09dH07XG5leHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXJ9O2V4cG9ydHMuaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1kfTtleHBvcnRzLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1nfTtleHBvcnRzLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWZ9O2V4cG9ydHMuaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXB9O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWV8fGE9PT1tfHxhPT09Z3x8YT09PWZ8fGE9PT1wfHxhPT09cXx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT10fHxhLiQkdHlwZW9mPT09cnx8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1rfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PXd8fGEuJCR0eXBlb2Y9PT14fHxhLiQkdHlwZW9mPT09eXx8YS4kJHR5cGVvZj09PXYpfTtleHBvcnRzLnR5cGVPZj16O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBFTVBUWV9BUlIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNoYW5nZSB0aGUgdHlwZSBvZiBgb2JqYCB0byBiZSBgTyAmIFBgXG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIG9ialtpXSA9IHByb3BzW2ldO1xuXHRyZXR1cm4gLyoqIEB0eXBlIHtPICYgUH0gKi8gKG9iaik7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hpbGQgbm9kZSBmcm9tIGl0cyBwYXJlbnQgaWYgYXR0YWNoZWQuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvclxuICogSUUxMSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgYEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSgpYC4gVXNpbmcgdGhpcyBmdW5jdGlvblxuICogaXMgc21hbGxlciB0aGFuIGluY2x1ZGluZyBhIGRlZGljYXRlZCBwb2x5ZmlsbC5cbiAqIEBwYXJhbSB7cHJlYWN0LkNvbnRhaW5lck5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVtb3ZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0aWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZSA9IEVNUFRZX0FSUi5zbGljZTtcbiIsICJpbXBvcnQgeyBfY2F0Y2hFcnJvciB9IGZyb20gJy4vZGlmZi9jYXRjaC1lcnJvcic7XG5cbi8qKlxuICogVGhlIGBvcHRpb25gIG9iamVjdCBjYW4gcG90ZW50aWFsbHkgY29udGFpbiBjYWxsYmFjayBmdW5jdGlvbnNcbiAqIHRoYXQgYXJlIGNhbGxlZCBkdXJpbmcgdmFyaW91cyBzdGFnZXMgb2Ygb3VyIHJlbmRlcmVyLiBUaGlzIGlzIHRoZVxuICogZm91bmRhdGlvbiBvbiB3aGljaCBhbGwgb3VyIGFkZG9ucyBsaWtlIGBwcmVhY3QvZGVidWdgLCBgcHJlYWN0L2NvbXBhdGAsXG4gKiBhbmQgYHByZWFjdC9ob29rc2AgYXJlIGJhc2VkIG9uLiBTZWUgdGhlIGBPcHRpb25zYCB0eXBlIGluIGBpbnRlcm5hbC5kLnRzYFxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb24gaG9va3MgKG1vc3QgZWRpdG9ycy9JREVzIGFsbG93IHlvdSB0b1xuICogY3RybCtjbGljayBvciBjbWQrY2xpY2sgb24gbWFjIHRoZSB0eXBlIGRlZmluaXRpb24gYmVsb3cpLlxuICogQHR5cGUge09wdGlvbnN9XG4gKi9cbmNvbnN0IG9wdGlvbnMgPSB7XG5cdF9jYXRjaEVycm9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcHRpb25zO1xuIiwgImltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5cbmxldCB2bm9kZUlkID0gMDtcblxuLyoqXG4gKiBDcmVhdGUgYW4gdmlydHVhbCBub2RlICh1c2VkIGZvciBKU1gpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvciBmb3IgdGhpc1xuICogdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4nKS5Db21wb25lbnRDaGlsZHJlbj59IFtjaGlsZHJlbl0gVGhlIGNoaWxkcmVuIG9mIHRoZVxuICogdmlydHVhbCBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0ge30sXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRpO1xuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jaGlsZHJlbiA9XG5cdFx0XHRhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGNoaWxkcmVuO1xuXHR9XG5cblx0Ly8gSWYgYSBDb21wb25lbnQgVk5vZGUsIGNoZWNrIGZvciBhbmQgYXBwbHkgZGVmYXVsdFByb3BzXG5cdC8vIE5vdGU6IHR5cGUgbWF5IGJlIHVuZGVmaW5lZCBpbiBkZXZlbG9wbWVudCwgbXVzdCBuZXZlciBlcnJvciBoZXJlLlxuXHRpZiAodHlwZW9mIHR5cGUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlLmRlZmF1bHRQcm9wcyAhPSBudWxsKSB7XG5cdFx0Zm9yIChpIGluIHR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdHlwZS5kZWZhdWx0UHJvcHNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG5vcm1hbGl6ZWRQcm9wcywga2V5LCByZWYsIG51bGwpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlICh1c2VkIGludGVybmFsbHkgYnkgUHJlYWN0KVxuICogQHBhcmFtIHtWTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnRcbiAqIENvbnN0cnVjdG9yIGZvciB0aGlzIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBwcm9wcyBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHZpcnR1YWwgbm9kZS5cbiAqIElmIHRoaXMgdmlydHVhbCBub2RlIHJlcHJlc2VudHMgYSB0ZXh0IG5vZGUsIHRoaXMgaXMgdGhlIHRleHQgb2YgdGhlIG5vZGUgKHN0cmluZyBvciBudW1iZXIpLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBrZXkgVGhlIGtleSBmb3IgdGhpcyB2aXJ0dWFsIG5vZGUsIHVzZWQgd2hlblxuICogZGlmZmluZyBpdCBhZ2FpbnN0IGl0cyBjaGlsZHJlblxuICogQHBhcmFtIHtWTm9kZVtcInJlZlwiXX0gcmVmIFRoZSByZWYgcHJvcGVydHkgdGhhdCB3aWxsXG4gKiByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBjcmVhdGVkIGNoaWxkXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCByZWYsIG9yaWdpbmFsKSB7XG5cdC8vIFY4IHNlZW1zIHRvIGJlIGJldHRlciBhdCBkZXRlY3RpbmcgdHlwZSBzaGFwZXMgaWYgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBjYWxsIHNpdGVcblx0Ly8gRG8gbm90IGlubGluZSBpbnRvIGNyZWF0ZUVsZW1lbnQgYW5kIGNvZXJjZVRvVk5vZGUhXG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHMsXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRfY2hpbGRyZW46IG51bGwsXG5cdFx0X3BhcmVudDogbnVsbCxcblx0XHRfZGVwdGg6IDAsXG5cdFx0X2RvbTogbnVsbCxcblx0XHQvLyBfbmV4dERvbSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHVuZGVmaW5lZCBiL2MgaXQgd2lsbCBldmVudHVhbGx5XG5cdFx0Ly8gYmUgc2V0IHRvIGRvbS5uZXh0U2libGluZyB3aGljaCBjYW4gcmV0dXJuIGBudWxsYCBhbmQgaXQgaXMgaW1wb3J0YW50XG5cdFx0Ly8gdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVuaW5pdGlhbGl6ZWQgX25leHREb20gYW5kXG5cdFx0Ly8gYSBfbmV4dERvbSB0aGF0IGhhcyBiZWVuIHNldCB0byBgbnVsbGBcblx0XHRfbmV4dERvbTogdW5kZWZpbmVkLFxuXHRcdF9jb21wb25lbnQ6IG51bGwsXG5cdFx0Y29uc3RydWN0b3I6IHVuZGVmaW5lZCxcblx0XHRfb3JpZ2luYWw6IG9yaWdpbmFsID09IG51bGwgPyArK3Zub2RlSWQgOiBvcmlnaW5hbCxcblx0XHRfaW5kZXg6IC0xLFxuXHRcdF9mbGFnczogMFxuXHR9O1xuXG5cdC8vIE9ubHkgaW52b2tlIHRoZSB2bm9kZSBob29rIGlmIHRoaXMgd2FzICpub3QqIGEgZGlyZWN0IGNvcHk6XG5cdGlmIChvcmlnaW5hbCA9PSBudWxsICYmIG9wdGlvbnMudm5vZGUgIT0gbnVsbCkgb3B0aW9ucy52bm9kZSh2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuXHRyZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGcmFnbWVudChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCBQcmVhY3QgVk5vZGUuXG4gKiBAcGFyYW0geyp9IHZub2RlXG4gKiBAcmV0dXJucyB7dm5vZGUgaXMgVk5vZGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRWxlbWVudCA9IHZub2RlID0+XG5cdHZub2RlICE9IG51bGwgJiYgdm5vZGUuY29uc3RydWN0b3IgPT0gdW5kZWZpbmVkO1xuIiwgImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBkaWZmLCBjb21taXRSb290IH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGNsYXNzLiBQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2hcbiAqIHRyaWdnZXIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgVGhlIGluaXRpYWwgY29tcG9uZW50IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgaW5pdGlhbCBjb250ZXh0IGZyb20gcGFyZW50IGNvbXBvbmVudHMnXG4gKiBnZXRDaGlsZENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHVwZGF0ZSwgY2FsbGJhY2spIHtcblx0Ly8gb25seSBjbG9uZSBzdGF0ZSB3aGVuIGNvcHlpbmcgdG8gbmV4dFN0YXRlIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgcztcblx0aWYgKHRoaXMuX25leHRTdGF0ZSAhPSBudWxsICYmIHRoaXMuX25leHRTdGF0ZSAhPT0gdGhpcy5zdGF0ZSkge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGU7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZSA9IGFzc2lnbih7fSwgdGhpcy5zdGF0ZSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVwZGF0ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gU29tZSBsaWJyYXJpZXMgbGlrZSBgaW1tZXJgIG1hcmsgdGhlIGN1cnJlbnQgc3RhdGUgYXMgcmVhZG9ubHksXG5cdFx0Ly8gcHJldmVudGluZyB1cyBmcm9tIG11dGF0aW5nIGl0LCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LiBTZWUgIzI3MTZcblx0XHR1cGRhdGUgPSB1cGRhdGUoYXNzaWduKHt9LCBzKSwgdGhpcy5wcm9wcyk7XG5cdH1cblxuXHRpZiAodXBkYXRlKSB7XG5cdFx0YXNzaWduKHMsIHVwZGF0ZSk7XG5cdH1cblxuXHQvLyBTa2lwIHVwZGF0ZSBpZiB1cGRhdGVyIGZ1bmN0aW9uIHJldHVybmVkIG51bGxcblx0aWYgKHVwZGF0ZSA9PSBudWxsKSByZXR1cm47XG5cblx0aWYgKHRoaXMuX3Zub2RlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnRcbiAqIEB0aGlzIHtDb21wb25lbnR9XG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzXG4gKiByZS1yZW5kZXJlZFxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHQvLyBTZXQgcmVuZGVyIG1vZGUgc28gdGhhdCB3ZSBjYW4gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgcmVuZGVyIHJlcXVlc3Rcblx0XHQvLyBpcyBjb21pbmcgZnJvbS4gV2UgbmVlZCB0aGlzIGJlY2F1c2UgZm9yY2VVcGRhdGUgc2hvdWxkIG5ldmVyIGNhbGxcblx0XHQvLyBzaG91bGRDb21wb25lbnRVcGRhdGVcblx0XHR0aGlzLl9mb3JjZSA9IHRydWU7XG5cdFx0aWYgKGNhbGxiYWNrKSB0aGlzLl9yZW5kZXJDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gKiBWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgKGVnOiBKU1ggYXR0cmlidXRlcykgcmVjZWl2ZWQgZnJvbSBwYXJlbnRcbiAqIGVsZW1lbnQvY29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgVGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgbmVhcmVzdFxuICogYW5jZXN0b3IncyBgZ2V0Q2hpbGRDb250ZXh0KClgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50Q2hpbGRyZW4gfCB2b2lkfVxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBGcmFnbWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbY2hpbGRJbmRleF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbVNpYmxpbmcodm5vZGUsIGNoaWxkSW5kZXgpIHtcblx0aWYgKGNoaWxkSW5kZXggPT0gbnVsbCkge1xuXHRcdC8vIFVzZSBjaGlsZEluZGV4PT1udWxsIGFzIGEgc2lnbmFsIHRvIHJlc3VtZSB0aGUgc2VhcmNoIGZyb20gdGhlIHZub2RlJ3Mgc2libGluZ1xuXHRcdHJldHVybiB2bm9kZS5fcGFyZW50XG5cdFx0XHQ/IGdldERvbVNpYmxpbmcodm5vZGUuX3BhcmVudCwgdm5vZGUuX2luZGV4ICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgb2xkVk5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IG9sZFZOb2RlLl9kb20sXG5cdFx0Y29tbWl0UXVldWUgPSBbXSxcblx0XHRyZWZRdWV1ZSA9IFtdO1xuXG5cdGlmIChjb21wb25lbnQuX3BhcmVudERvbSkge1xuXHRcdGNvbnN0IG5ld1ZOb2RlID0gYXNzaWduKHt9LCBvbGRWTm9kZSk7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsICsgMTtcblx0XHRpZiAob3B0aW9ucy52bm9kZSkgb3B0aW9ucy52bm9kZShuZXdWTm9kZSk7XG5cblx0XHRkaWZmKFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20ubmFtZXNwYWNlVVJJLFxuXHRcdFx0b2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFID8gW29sZERvbV0gOiBudWxsLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20gPT0gbnVsbCA/IGdldERvbVNpYmxpbmcob2xkVk5vZGUpIDogb2xkRG9tLFxuXHRcdFx0ISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKSxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9IG9sZFZOb2RlLl9vcmlnaW5hbDtcblx0XHRuZXdWTm9kZS5fcGFyZW50Ll9jaGlsZHJlbltuZXdWTm9kZS5faW5kZXhdID0gbmV3Vk5vZGU7XG5cdFx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgbmV3Vk5vZGUsIHJlZlF1ZXVlKTtcblxuXHRcdGlmIChuZXdWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdFx0dXBkYXRlUGFyZW50RG9tUG9pbnRlcnMobmV3Vk5vZGUpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKSB7XG5cdGlmICgodm5vZGUgPSB2bm9kZS5fcGFyZW50KSAhPSBudWxsICYmIHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdHZub2RlLl9kb20gPSB2bm9kZS5fY29tcG9uZW50LmJhc2UgPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdm5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgY2hpbGQgPSB2bm9kZS5fY2hpbGRyZW5baV07XG5cdFx0XHRpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5fZG9tICE9IG51bGwpIHtcblx0XHRcdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IGNoaWxkLl9kb207XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1cGRhdGVQYXJlbnREb21Qb2ludGVycyh2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyIHF1ZXVlXG4gKiBAdHlwZSB7QXJyYXk8Q29tcG9uZW50Pn1cbiAqL1xubGV0IHJlcmVuZGVyUXVldWUgPSBbXTtcblxuLypcbiAqIFRoZSB2YWx1ZSBvZiBgQ29tcG9uZW50LmRlYm91bmNlYCBtdXN0IGFzeW5jaHJvbm91c2x5IGludm9rZSB0aGUgcGFzc2VkIGluIGNhbGxiYWNrLiBJdCBpc1xuICogaW1wb3J0YW50IHRoYXQgY29udHJpYnV0b3JzIHRvIFByZWFjdCBjYW4gY29uc2lzdGVudGx5IHJlYXNvbiBhYm91dCB3aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAsIGV0Yy5cbiAqIGRvLCBhbmQgd2hlbiB0aGVpciBlZmZlY3RzIHdpbGwgYmUgYXBwbGllZC4gU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3Igc29tZSBmdXJ0aGVyIHJlYWRpbmcgb24gZGVzaWduaW5nXG4gKiBhc3luY2hyb25vdXMgQVBJcy5cbiAqICogW0Rlc2lnbmluZyBBUElzIGZvciBBc3luY2hyb255XShodHRwczovL2Jsb2cuaXpzLm1lLzIwMTMvMDgvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gKiAqIFtDYWxsYmFja3Mgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91c10oaHR0cHM6Ly9ibG9nLm9tZXRlci5jb20vMjAxMS8wNy8yNC9jYWxsYmFja3Mtc3luY2hyb25vdXMtYW5kLWFzeW5jaHJvbm91cy8pXG4gKi9cblxubGV0IHByZXZEZWJvdW5jZTtcblxuY29uc3QgZGVmZXIgPVxuXHR0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nXG5cdFx0PyBQcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpXG5cdFx0OiBzZXRUaW1lb3V0O1xuXG4vKipcbiAqIEVucXVldWUgYSByZXJlbmRlciBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtDb21wb25lbnR9IGMgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjKSB7XG5cdGlmIChcblx0XHQoIWMuX2RpcnR5ICYmXG5cdFx0XHQoYy5fZGlydHkgPSB0cnVlKSAmJlxuXHRcdFx0cmVyZW5kZXJRdWV1ZS5wdXNoKGMpICYmXG5cdFx0XHQhcHJvY2Vzcy5fcmVyZW5kZXJDb3VudCsrKSB8fFxuXHRcdHByZXZEZWJvdW5jZSAhPT0gb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ1xuXHQpIHtcblx0XHRwcmV2RGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nO1xuXHRcdChwcmV2RGVib3VuY2UgfHwgZGVmZXIpKHByb2Nlc3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21wb25lbnR9IGFcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBiXG4gKi9cbmNvbnN0IGRlcHRoU29ydCA9IChhLCBiKSA9PiBhLl92bm9kZS5fZGVwdGggLSBiLl92bm9kZS5fZGVwdGg7XG5cbi8qKiBGbHVzaCB0aGUgcmVuZGVyIHF1ZXVlIGJ5IHJlcmVuZGVyaW5nIGFsbCBxdWV1ZWQgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gcHJvY2VzcygpIHtcblx0bGV0IGM7XG5cdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHQvLyBEb24ndCB1cGRhdGUgYHJlbmRlckNvdW50YCB5ZXQuIEtlZXAgaXRzIHZhbHVlIG5vbi16ZXJvIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnlcblx0Ly8gcHJvY2VzcygpIGNhbGxzIGZyb20gZ2V0dGluZyBzY2hlZHVsZWQgd2hpbGUgYHF1ZXVlYCBpcyBzdGlsbCBiZWluZyBjb25zdW1lZC5cblx0d2hpbGUgKChjID0gcmVyZW5kZXJRdWV1ZS5zaGlmdCgpKSkge1xuXHRcdGlmIChjLl9kaXJ0eSkge1xuXHRcdFx0bGV0IHJlbmRlclF1ZXVlTGVuZ3RoID0gcmVyZW5kZXJRdWV1ZS5sZW5ndGg7XG5cdFx0XHRyZW5kZXJDb21wb25lbnQoYyk7XG5cdFx0XHRpZiAocmVyZW5kZXJRdWV1ZS5sZW5ndGggPiByZW5kZXJRdWV1ZUxlbmd0aCkge1xuXHRcdFx0XHQvLyBXaGVuIGkuZS4gcmVyZW5kZXJpbmcgYSBwcm92aWRlciBhZGRpdGlvbmFsIG5ldyBpdGVtcyBjYW4gYmUgaW5qZWN0ZWQsIHdlIHdhbnQgdG9cblx0XHRcdFx0Ly8ga2VlcCB0aGUgb3JkZXIgZnJvbSB0b3AgdG8gYm90dG9tIHdpdGggdGhvc2UgbmV3IGl0ZW1zIHNvIHdlIGNhbiBoYW5kbGUgdGhlbSBpbiBhXG5cdFx0XHRcdC8vIHNpbmdsZSBwYXNzXG5cdFx0XHRcdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRwcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbn1cblxucHJvY2Vzcy5fcmVyZW5kZXJDb3VudCA9IDA7XG4iLCAiaW1wb3J0IHsgSVNfTk9OX0RJTUVOU0lPTkFMIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG5mdW5jdGlvbiBzZXRTdHlsZShzdHlsZSwga2V5LCB2YWx1ZSkge1xuXHRpZiAoa2V5WzBdID09PSAnLScpIHtcblx0XHRzdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcblx0fSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3R5bGVba2V5XSA9ICcnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnbnVtYmVyJyB8fCBJU19OT05fRElNRU5TSU9OQUwudGVzdChrZXkpKSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlW2tleV0gPSB2YWx1ZSArICdweCc7XG5cdH1cbn1cblxuLy8gQSBsb2dpY2FsIGNsb2NrIHRvIHNvbHZlIGlzc3VlcyBsaWtlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmVhY3Rqcy9wcmVhY3QvaXNzdWVzLzM5MjcuXG4vLyBXaGVuIHRoZSBET00gcGVyZm9ybXMgYW4gZXZlbnQgaXQgbGVhdmVzIG1pY3JvLXRpY2tzIGluIGJldHdlZW4gYnViYmxpbmcgdXAgd2hpY2ggbWVhbnMgdGhhdFxuLy8gYW4gZXZlbnQgY2FuIHRyaWdnZXIgb24gYSBuZXdseSByZWF0ZWQgRE9NLW5vZGUgd2hpbGUgdGhlIGV2ZW50IGJ1YmJsZXMgdXAuXG4vL1xuLy8gT3JpZ2luYWxseSBpbnNwaXJlZCBieSBWdWVcbi8vIChodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29yZS9ibG9iL2NhZWI4YTY4ODExYTFiMGY3OS9wYWNrYWdlcy9ydW50aW1lLWRvbS9zcmMvbW9kdWxlcy9ldmVudHMudHMjTDkwLUwxMDEpLFxuLy8gYnV0IG1vZGlmaWVkIHRvIHVzZSBhIGxvZ2ljYWwgY2xvY2sgaW5zdGVhZCBvZiBEYXRlLm5vdygpIGluIGNhc2UgZXZlbnQgaGFuZGxlcnMgZ2V0IGF0dGFjaGVkXG4vLyBhbmQgZXZlbnRzIGdldCBkaXNwYXRjaGVkIGR1cmluZyB0aGUgc2FtZSBtaWxsaXNlY29uZC5cbi8vXG4vLyBUaGUgY2xvY2sgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgZWFjaCBuZXcgZXZlbnQgZGlzcGF0Y2guIFRoaXMgYWxsb3dzIDEgMDAwIDAwMCBuZXcgZXZlbnRzXG4vLyBwZXIgc2Vjb25kIGZvciBvdmVyIDI4MCB5ZWFycyBiZWZvcmUgdGhlIHZhbHVlIHJlYWNoZXMgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgKDIqKjUzIC0gMSkuXG5sZXQgZXZlbnRDbG9jayA9IDA7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgdmFsdWUgb24gYSBET00gbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBub2RlIHRvIG1vZGlmeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0b1xuICogQHBhcmFtIHsqfSBvbGRWYWx1ZSBUaGUgb2xkIHZhbHVlIHRoZSBwcm9wZXJ0eSBoYWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGRvbSwgbmFtZSwgdmFsdWUsIG9sZFZhbHVlLCBuYW1lc3BhY2UpIHtcblx0bGV0IHVzZUNhcHR1cmU7XG5cblx0bzogaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRkb20uc3R5bGUuY3NzVGV4dCA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIG9sZFZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gb2xkVmFsdWUgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9sZFZhbHVlKSB7XG5cdFx0XHRcdGZvciAobmFtZSBpbiBvbGRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICghKHZhbHVlICYmIG5hbWUgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRzZXRTdHlsZShkb20uc3R5bGUsIG5hbWUsICcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdGZvciAobmFtZSBpbiB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmICghb2xkVmFsdWUgfHwgdmFsdWVbbmFtZV0gIT09IG9sZFZhbHVlW25hbWVdKSB7XG5cdFx0XHRcdFx0XHRzZXRTdHlsZShkb20uc3R5bGUsIG5hbWUsIHZhbHVlW25hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gQmVuY2htYXJrIGZvciBjb21wYXJpc29uOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzU3NGM5NTRiZGI5NjViOWEwMDk2NWFjNlxuXHRlbHNlIGlmIChuYW1lWzBdID09PSAnbycgJiYgbmFtZVsxXSA9PT0gJ24nKSB7XG5cdFx0dXNlQ2FwdHVyZSA9XG5cdFx0XHRuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSwgJyQxJykpO1xuXG5cdFx0Ly8gSW5mZXIgY29ycmVjdCBjYXNpbmcgZm9yIERPTSBidWlsdC1pbiBldmVudHM6XG5cdFx0aWYgKFxuXHRcdFx0bmFtZS50b0xvd2VyQ2FzZSgpIGluIGRvbSB8fFxuXHRcdFx0bmFtZSA9PT0gJ29uRm9jdXNPdXQnIHx8XG5cdFx0XHRuYW1lID09PSAnb25Gb2N1c0luJ1xuXHRcdClcblx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMik7XG5cdFx0ZWxzZSBuYW1lID0gbmFtZS5zbGljZSgyKTtcblxuXHRcdGlmICghZG9tLl9saXN0ZW5lcnMpIGRvbS5fbGlzdGVuZXJzID0ge307XG5cdFx0ZG9tLl9saXN0ZW5lcnNbbmFtZSArIHVzZUNhcHR1cmVdID0gdmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGlmICghb2xkVmFsdWUpIHtcblx0XHRcdFx0dmFsdWUuX2F0dGFjaGVkID0gZXZlbnRDbG9jaztcblx0XHRcdFx0ZG9tLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR1c2VDYXB0dXJlID8gZXZlbnRQcm94eUNhcHR1cmUgOiBldmVudFByb3h5LFxuXHRcdFx0XHRcdHVzZUNhcHR1cmVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlLl9hdHRhY2hlZCA9IG9sZFZhbHVlLl9hdHRhY2hlZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHksXG5cdFx0XHRcdHVzZUNhcHR1cmVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChuYW1lc3BhY2UgPT0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJykge1xuXHRcdFx0Ly8gTm9ybWFsaXplIGluY29ycmVjdCBwcm9wIHVzYWdlIGZvciBTVkc6XG5cdFx0XHQvLyAtIHhsaW5rOmhyZWYgLyB4bGlua0hyZWYgLS0+IGhyZWYgKHhsaW5rOmhyZWYgd2FzIHJlbW92ZWQgZnJvbSBTVkcgYW5kIGlzbid0IG5lZWRlZClcblx0XHRcdC8vIC0gY2xhc3NOYW1lIC0tPiBjbGFzc1xuXHRcdFx0bmFtZSA9IG5hbWUucmVwbGFjZSgveGxpbmsoSHw6aCkvLCAnaCcpLnJlcGxhY2UoL3NOYW1lJC8sICdzJyk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG5hbWUgIT0gJ3dpZHRoJyAmJlxuXHRcdFx0bmFtZSAhPSAnaGVpZ2h0JyAmJlxuXHRcdFx0bmFtZSAhPSAnaHJlZicgJiZcblx0XHRcdG5hbWUgIT0gJ2xpc3QnICYmXG5cdFx0XHRuYW1lICE9ICdmb3JtJyAmJlxuXHRcdFx0Ly8gRGVmYXVsdCB2YWx1ZSBpbiBicm93c2VycyBpcyBgLTFgIGFuZCBhbiBlbXB0eSBzdHJpbmcgaXNcblx0XHRcdC8vIGNhc3QgdG8gYDBgIGluc3RlYWRcblx0XHRcdG5hbWUgIT0gJ3RhYkluZGV4JyAmJlxuXHRcdFx0bmFtZSAhPSAnZG93bmxvYWQnICYmXG5cdFx0XHRuYW1lICE9ICdyb3dTcGFuJyAmJlxuXHRcdFx0bmFtZSAhPSAnY29sU3BhbicgJiZcblx0XHRcdG5hbWUgIT0gJ3JvbGUnICYmXG5cdFx0XHRuYW1lICE9ICdwb3BvdmVyJyAmJlxuXHRcdFx0bmFtZSBpbiBkb21cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRvbVtuYW1lXSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xuXHRcdFx0XHQvLyBsYWJlbGxlZCBicmVhayBpcyAxYiBzbWFsbGVyIGhlcmUgdGhhbiBhIHJldHVybiBzdGF0ZW1lbnQgKHNvcnJ5KVxuXHRcdFx0XHRicmVhayBvO1xuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHR9XG5cblx0XHQvLyBhcmlhLSBhbmQgZGF0YS0gYXR0cmlidXRlcyBoYXZlIG5vIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uXG5cdFx0Ly8gQSBgZmFsc2VgIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nXG5cdFx0Ly8gcHJlc2VudCwgc28gd2UgY2FuJ3QgcmVtb3ZlIGl0LiBGb3Igbm9uLWJvb2xlYW4gYXJpYVxuXHRcdC8vIGF0dHJpYnV0ZXMgd2UgY291bGQgdHJlYXQgZmFsc2UgYXMgYSByZW1vdmFsLCBidXQgdGhlXG5cdFx0Ly8gYW1vdW50IG9mIGV4Y2VwdGlvbnMgd291bGQgY29zdCB0b28gbWFueSBieXRlcy4gT24gdG9wIG9mXG5cdFx0Ly8gdGhhdCBvdGhlciBmcmFtZXdvcmtzIGdlbmVyYWxseSBzdHJpbmdpZnkgYGZhbHNlYC5cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gbmV2ZXIgc2VyaWFsaXplIGZ1bmN0aW9ucyBhcyBhdHRyaWJ1dGUgdmFsdWVzXG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSAhPT0gZmFsc2UgfHwgbmFtZVs0XSA9PT0gJy0nKSkge1xuXHRcdFx0ZG9tLnNldEF0dHJpYnV0ZShuYW1lLCBuYW1lID09ICdwb3BvdmVyJyAmJiB2YWx1ZSA9PSB0cnVlID8gJycgOiB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV2ZW50IHByb3h5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSB1c2VDYXB0dXJlIElzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY2FwdHVyZSBwaGFzZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50UHJveHkodXNlQ2FwdHVyZSkge1xuXHQvKipcblx0ICogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRsZXJzXG5cdCAqIEBwYXJhbSB7UHJlYWN0RXZlbnR9IGUgVGhlIGV2ZW50IG9iamVjdCBmcm9tIHRoZSBicm93c2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG5cdFx0XHRjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZS50eXBlICsgdXNlQ2FwdHVyZV07XG5cdFx0XHRpZiAoZS5fZGlzcGF0Y2hlZCA9PSBudWxsKSB7XG5cdFx0XHRcdGUuX2Rpc3BhdGNoZWQgPSBldmVudENsb2NrKys7XG5cblx0XHRcdFx0Ly8gV2hlbiBgZS5fZGlzcGF0Y2hlZGAgaXMgc21hbGxlciB0aGFuIHRoZSB0aW1lIHdoZW4gdGhlIHRhcmdldGVkIGV2ZW50XG5cdFx0XHRcdC8vIGhhbmRsZXIgd2FzIGF0dGFjaGVkIHdlIGtub3cgd2UgaGF2ZSBidWJibGVkIHVwIHRvIGFuIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWRcblx0XHRcdFx0Ly8gZHVyaW5nIHBhdGNoaW5nIHRoZSBET00uXG5cdFx0XHR9IGVsc2UgaWYgKGUuX2Rpc3BhdGNoZWQgPCBldmVudEhhbmRsZXIuX2F0dGFjaGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBldmVudEhhbmRsZXIob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IGV2ZW50UHJveHkgPSBjcmVhdGVFdmVudFByb3h5KGZhbHNlKTtcbmNvbnN0IGV2ZW50UHJveHlDYXB0dXJlID0gY3JlYXRlRXZlbnRQcm94eSh0cnVlKTtcbiIsICJpbXBvcnQgeyBlbnF1ZXVlUmVuZGVyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgbGV0IGkgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNvbnRleHRJZCkge1xuXHRjb250ZXh0SWQgPSAnX19jQycgKyBpKys7XG5cblx0Y29uc3QgY29udGV4dCA9IHtcblx0XHRfaWQ6IGNvbnRleHRJZCxcblx0XHRfZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRDb25zdW1lcihwcm9wcywgY29udGV4dFZhbHVlKSB7XG5cdFx0XHQvLyByZXR1cm4gcHJvcHMuY2hpbGRyZW4oXG5cdFx0XHQvLyBcdGNvbnRleHRbY29udGV4dElkXSA/IGNvbnRleHRbY29udGV4dElkXS5wcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuXHRcdFx0Ly8gKTtcblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbihjb250ZXh0VmFsdWUpO1xuXHRcdH0sXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRQcm92aWRlcihwcm9wcykge1xuXHRcdFx0aWYgKCF0aGlzLmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0XHQvKiogQHR5cGUge1NldDxDb21wb25lbnQ+IHwgbnVsbH0gKi9cblx0XHRcdFx0bGV0IHN1YnMgPSBuZXcgU2V0KCk7XG5cdFx0XHRcdGxldCBjdHggPSB7fTtcblx0XHRcdFx0Y3R4W2NvbnRleHRJZF0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gKCkgPT4gY3R4O1xuXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c3VicyA9IG51bGw7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiAoX3Byb3BzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJvcHMudmFsdWUgIT09IF9wcm9wcy52YWx1ZSkge1xuXHRcdFx0XHRcdFx0c3Vicy5mb3JFYWNoKGMgPT4ge1xuXHRcdFx0XHRcdFx0XHRjLl9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGVucXVldWVSZW5kZXIoYyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zdWIgPSBjID0+IHtcblx0XHRcdFx0XHRzdWJzLmFkZChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHN1YnMpIHtcblx0XHRcdFx0XHRcdFx0c3Vicy5kZWxldGUoYyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAob2xkKSBvbGQuY2FsbChjKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG5cdFx0fVxuXHR9O1xuXG5cdC8vIERldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3Qgd2hlbiBpdFxuXHQvLyBlbmNvdW50ZXJzIGEgUHJvdmlkZXIuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnRcblx0Ly8gc2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIHRoZSBjb250ZXh0IG9iamVjdCBpbnN0ZWFkXG5cdC8vIG9mIG9uIHRoZSBjb21wb25lbnQgaXRzZWxmLiBTZWU6XG5cdC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9jb250ZXh0Lmh0bWwjY29udGV4dGRpc3BsYXluYW1lXG5cblx0cmV0dXJuIChjb250ZXh0LlByb3ZpZGVyLl9jb250ZXh0UmVmID0gY29udGV4dC5Db25zdW1lci5jb250ZXh0VHlwZSA9XG5cdFx0Y29udGV4dCk7XG59XG4iLCAiaW1wb3J0IHsgZGlmZiwgdW5tb3VudCwgYXBwbHlSZWYgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZVZOb2RlLCBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IEVNUFRZX09CSiwgRU1QVFlfQVJSLCBJTlNFUlRfVk5PREUsIE1BVENIRUQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5cbi8qKlxuICogRGlmZiB0aGUgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBET00gZWxlbWVudCB3aG9zZSBjaGlsZHJlbiBhcmUgYmVpbmdcbiAqIGRpZmZlZFxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1BhcmVudFZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG9sZFBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRQYXJlbnRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZSB3aG9zZSBjaGlsZHJlbiBzaG91bGQgYmVcbiAqIGRpZmYnZWQgYWdhaW5zdCBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3QgLSBtb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbSBUaGUgY3VycmVudCBhdHRhY2hlZCBET00gZWxlbWVudCBhbnkgbmV3IGRvbVxuICogZWxlbWVudHMgc2hvdWxkIGJlIHBsYWNlZCBhcm91bmQuIExpa2VseSBgbnVsbGAgb24gZmlyc3QgcmVuZGVyIChleGNlcHQgd2hlblxuICogaHlkcmF0aW5nKS4gQ2FuIGJlIGEgc2libGluZyBET00gZWxlbWVudCB3aGVuIGRpZmZpbmcgRnJhZ21lbnRzIHRoYXQgaGF2ZVxuICogc2libGluZ3MuIEluIG1vc3QgY2FzZXMsIGl0IHN0YXJ0cyBvdXQgYXMgYG9sZENoaWxkcmVuWzBdLl9kb21gLlxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGlsZHJlbihcblx0cGFyZW50RG9tLFxuXHRyZW5kZXJSZXN1bHQsXG5cdG5ld1BhcmVudFZOb2RlLFxuXHRvbGRQYXJlbnRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0bmFtZXNwYWNlLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IGksXG5cdFx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0XHRvbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdGNoaWxkVk5vZGUsXG5cdFx0LyoqIEB0eXBlIHtQcmVhY3RFbGVtZW50fSAqL1xuXHRcdG5ld0RvbSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0Zmlyc3RDaGlsZERvbTtcblxuXHQvLyBUaGlzIGlzIGEgY29tcHJlc3Npb24gb2Ygb2xkUGFyZW50Vk5vZGUhPW51bGwgJiYgb2xkUGFyZW50Vk5vZGUgIT0gRU1QVFlfT0JKICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbiB8fCBFTVBUWV9BUlJcblx0Ly8gYXMgRU1QVFlfT0JKLl9jaGlsZHJlbiBzaG91bGQgYmUgYHVuZGVmaW5lZGAuXG5cdC8qKiBAdHlwZSB7Vk5vZGVbXX0gKi9cblx0bGV0IG9sZENoaWxkcmVuID0gKG9sZFBhcmVudFZOb2RlICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbikgfHwgRU1QVFlfQVJSO1xuXG5cdGxldCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkobmV3UGFyZW50Vk5vZGUsIHJlbmRlclJlc3VsdCwgb2xkQ2hpbGRyZW4pO1xuXHRvbGREb20gPSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV07XG5cdFx0aWYgKGNoaWxkVk5vZGUgPT0gbnVsbCkgY29udGludWU7XG5cblx0XHQvLyBBdCB0aGlzIHBvaW50LCBjb25zdHJ1Y3ROZXdDaGlsZHJlbkFycmF5IGhhcyBhc3NpZ25lZCBfaW5kZXggdG8gYmUgdGhlXG5cdFx0Ly8gbWF0Y2hpbmdJbmRleCBmb3IgdGhpcyBWTm9kZSdzIG9sZFZOb2RlIChvciAtMSBpZiB0aGVyZSBpcyBubyBvbGRWTm9kZSkuXG5cdFx0aWYgKGNoaWxkVk5vZGUuX2luZGV4ID09PSAtMSkge1xuXHRcdFx0b2xkVk5vZGUgPSBFTVBUWV9PQko7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bY2hpbGRWTm9kZS5faW5kZXhdIHx8IEVNUFRZX09CSjtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgY2hpbGRWTm9kZS5faW5kZXggdG8gaXRzIGZpbmFsIGluZGV4XG5cdFx0Y2hpbGRWTm9kZS5faW5kZXggPSBpO1xuXG5cdFx0Ly8gTW9ycGggdGhlIG9sZCBlbGVtZW50IGludG8gdGhlIG5ldyBvbmUsIGJ1dCBkb24ndCBhcHBlbmQgaXQgdG8gdGhlIGRvbSB5ZXRcblx0XHRkaWZmKFxuXHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20sXG5cdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblxuXHRcdC8vIEFkanVzdCBET00gbm9kZXNcblx0XHRuZXdEb20gPSBjaGlsZFZOb2RlLl9kb207XG5cdFx0aWYgKGNoaWxkVk5vZGUucmVmICYmIG9sZFZOb2RlLnJlZiAhPSBjaGlsZFZOb2RlLnJlZikge1xuXHRcdFx0aWYgKG9sZFZOb2RlLnJlZikge1xuXHRcdFx0XHRhcHBseVJlZihvbGRWTm9kZS5yZWYsIG51bGwsIGNoaWxkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdFx0cmVmUXVldWUucHVzaChcblx0XHRcdFx0Y2hpbGRWTm9kZS5yZWYsXG5cdFx0XHRcdGNoaWxkVk5vZGUuX2NvbXBvbmVudCB8fCBuZXdEb20sXG5cdFx0XHRcdGNoaWxkVk5vZGVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpcnN0Q2hpbGREb20gPT0gbnVsbCAmJiBuZXdEb20gIT0gbnVsbCkge1xuXHRcdFx0Zmlyc3RDaGlsZERvbSA9IG5ld0RvbTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlLl9mbGFncyAmIElOU0VSVF9WTk9ERSB8fFxuXHRcdFx0b2xkVk5vZGUuX2NoaWxkcmVuID09PSBjaGlsZFZOb2RlLl9jaGlsZHJlblxuXHRcdCkge1xuXHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkVk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0XHRjaGlsZFZOb2RlLl9uZXh0RG9tICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIFNpbmNlIEZyYWdtZW50cyBvciBjb21wb25lbnRzIHRoYXQgcmV0dXJuIEZyYWdtZW50IGxpa2UgVk5vZGVzIGNhblxuXHRcdFx0Ly8gY29udGFpbiBtdWx0aXBsZSBET00gbm9kZXMgYXMgdGhlIHNhbWUgbGV2ZWwsIGNvbnRpbnVlIHRoZSBkaWZmIGZyb21cblx0XHRcdC8vIHRoZSBzaWJsaW5nIG9mIGxhc3QgRE9NIGNoaWxkIG9mIHRoaXMgY2hpbGQgVk5vZGVcblx0XHRcdG9sZERvbSA9IGNoaWxkVk5vZGUuX25leHREb207XG5cdFx0fSBlbHNlIGlmIChuZXdEb20pIHtcblx0XHRcdG9sZERvbSA9IG5ld0RvbS5uZXh0U2libGluZztcblx0XHR9XG5cblx0XHQvLyBFYWdlcmx5IGNsZWFudXAgX25leHREb20uIFdlIGRvbid0IG5lZWQgdG8gcGVyc2lzdCB0aGUgdmFsdWUgYmVjYXVzZSBpdFxuXHRcdC8vIGlzIG9ubHkgdXNlZCBieSBgZGlmZkNoaWxkcmVuYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcmVzdW1lIHRoZSBkaWZmXG5cdFx0Ly8gYWZ0ZXIgZGlmZmluZyBDb21wb25lbnRzIGFuZCBGcmFnbWVudHMuIE9uY2Ugd2Ugc3RvcmUgaXQgdGhlIG5leHRET01cblx0XHQvLyBsb2NhbCB2YXIsIHdlIGNhbiBjbGVhbiB1cCB0aGUgcHJvcGVydHkuIEFsc28gcHJldmVudHMgdXMgaGFuZ2luZyBvbiB0b1xuXHRcdC8vIERPTSBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4gdW5tb3VudGVkLlxuXHRcdGNoaWxkVk5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG5cblx0XHQvLyBVbnNldCBkaWZmaW5nIGZsYWdzXG5cdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJj0gfihJTlNFUlRfVk5PREUgfCBNQVRDSEVEKTtcblx0fVxuXG5cdC8vIFRPRE86IFdpdGggbmV3IGNoaWxkIGRpZmZpbmcgYWxnbywgY29uc2lkZXIgYWx0IHdheXMgdG8gZGlmZiBGcmFnbWVudHMuXG5cdC8vIFN1Y2ggYXMgZHJvcHBpbmcgb2xkRG9tIGFuZCBtb3ZpbmcgZnJhZ21lbnRzIGluIHBsYWNlXG5cdC8vXG5cdC8vIEJlY2F1c2UgdGhlIG5ld1BhcmVudFZOb2RlIGlzIEZyYWdtZW50LWxpa2UsIHdlIG5lZWQgdG8gc2V0IGl0J3Ncblx0Ly8gX25leHREb20gcHJvcGVydHkgdG8gdGhlIG5leHRTaWJsaW5nIG9mIGl0cyBsYXN0IGNoaWxkIERPTSBub2RlLlxuXHQvL1xuXHQvLyBgb2xkRG9tYCBjb250YWlucyB0aGUgY29ycmVjdCB2YWx1ZSBoZXJlIGJlY2F1c2UgaWYgdGhlIGxhc3QgY2hpbGRcblx0Ly8gaXMgYSBGcmFnbWVudC1saWtlLCB0aGVuIG9sZERvbSBoYXMgYWxyZWFkeSBiZWVuIHNldCB0byB0aGF0IGNoaWxkJ3MgX25leHREb20uXG5cdC8vIElmIHRoZSBsYXN0IGNoaWxkIGlzIGEgRE9NIFZOb2RlLCB0aGVuIG9sZERvbSB3aWxsIGJlIHNldCB0byB0aGF0IERPTVxuXHQvLyBub2RlJ3MgbmV4dFNpYmxpbmcuXG5cdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gb2xkRG9tO1xuXHRuZXdQYXJlbnRWTm9kZS5fZG9tID0gZmlyc3RDaGlsZERvbTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbikge1xuXHQvKiogQHR5cGUge251bWJlcn0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBjaGlsZFZOb2RlO1xuXHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRsZXQgb2xkVk5vZGU7XG5cblx0Y29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSByZW5kZXJSZXN1bHQubGVuZ3RoO1xuXHRsZXQgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGgsXG5cdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbkxlbmd0aDtcblxuXHRsZXQgc2tldyA9IDA7XG5cblx0bmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBXZSBhcmUgcmV1c2luZyB0aGUgY2hpbGRWTm9kZSB2YXJpYWJsZSB0byBob2xkIGJvdGggdGhlXG5cdFx0Ly8gcHJlIGFuZCBwb3N0IG5vcm1hbGl6ZWQgY2hpbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUgPSByZW5kZXJSZXN1bHRbaV07XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlID09IG51bGwgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdib29sZWFuJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Z1bmN0aW9uJ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Ly8gSWYgdGhpcyBuZXdWTm9kZSBpcyBiZWluZyByZXVzZWQgKGUuZy4gPGRpdj57cmV1c2V9e3JldXNlfTwvZGl2PikgaW4gdGhlIHNhbWUgZGlmZixcblx0XHQvLyBvciB3ZSBhcmUgcmVuZGVyaW5nIGEgY29tcG9uZW50IChlLmcuIHNldFN0YXRlKSBjb3B5IHRoZSBvbGRWTm9kZXMgc28gaXQgY2FuIGhhdmVcblx0XHQvLyBpdCdzIG93biBET00gJiBldGMuIHBvaW50ZXJzXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnc3RyaW5nJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ251bWJlcicgfHxcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2Zcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdiaWdpbnQnIHx8XG5cdFx0XHRjaGlsZFZOb2RlLmNvbnN0cnVjdG9yID09IFN0cmluZ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheShjaGlsZFZOb2RlKSkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRGcmFnbWVudCxcblx0XHRcdFx0eyBjaGlsZHJlbjogY2hpbGRWTm9kZSB9LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoY2hpbGRWTm9kZS5jb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkICYmIGNoaWxkVk5vZGUuX2RlcHRoID4gMCkge1xuXHRcdFx0Ly8gVk5vZGUgaXMgYWxyZWFkeSBpbiB1c2UsIGNsb25lIGl0LiBUaGlzIGNhbiBoYXBwZW4gaW4gdGhlIGZvbGxvd2luZ1xuXHRcdFx0Ly8gc2NlbmFyaW86XG5cdFx0XHQvLyAgIGNvbnN0IHJldXNlID0gPGRpdiAvPlxuXHRcdFx0Ly8gICA8ZGl2PntyZXVzZX08c3BhbiAvPntyZXVzZX08L2Rpdj5cblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0Y2hpbGRWTm9kZS50eXBlLFxuXHRcdFx0XHRjaGlsZFZOb2RlLnByb3BzLFxuXHRcdFx0XHRjaGlsZFZOb2RlLmtleSxcblx0XHRcdFx0Y2hpbGRWTm9kZS5yZWYgPyBjaGlsZFZOb2RlLnJlZiA6IG51bGwsXG5cdFx0XHRcdGNoaWxkVk5vZGUuX29yaWdpbmFsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY2hpbGRWTm9kZTtcblx0XHR9XG5cblx0XHRjb25zdCBza2V3ZWRJbmRleCA9IGkgKyBza2V3O1xuXHRcdGNoaWxkVk5vZGUuX3BhcmVudCA9IG5ld1BhcmVudFZOb2RlO1xuXHRcdGNoaWxkVk5vZGUuX2RlcHRoID0gbmV3UGFyZW50Vk5vZGUuX2RlcHRoICsgMTtcblxuXHRcdC8vIFRlbXBvcmFyaWx5IHN0b3JlIHRoZSBtYXRjaGluZ0luZGV4IG9uIHRoZSBfaW5kZXggcHJvcGVydHkgc28gd2UgY2FuIHB1bGxcblx0XHQvLyBvdXQgdGhlIG9sZFZOb2RlIGluIGRpZmZDaGlsZHJlbi4gV2UnbGwgb3ZlcnJpZGUgdGhpcyB0byB0aGUgVk5vZGUnc1xuXHRcdC8vIGZpbmFsIGluZGV4IGFmdGVyIHVzaW5nIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSBvbGRWTm9kZVxuXHRcdGNvbnN0IG1hdGNoaW5nSW5kZXggPSAoY2hpbGRWTm9kZS5faW5kZXggPSBmaW5kTWF0Y2hpbmdJbmRleChcblx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRvbGRDaGlsZHJlbixcblx0XHRcdHNrZXdlZEluZGV4LFxuXHRcdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW5cblx0XHQpKTtcblxuXHRcdG9sZFZOb2RlID0gbnVsbDtcblx0XHRpZiAobWF0Y2hpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bbWF0Y2hpbmdJbmRleF07XG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbi0tO1xuXHRcdFx0aWYgKG9sZFZOb2RlKSB7XG5cdFx0XHRcdG9sZFZOb2RlLl9mbGFncyB8PSBNQVRDSEVEO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhlcmUsIHdlIGRlZmluZSBpc01vdW50aW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHNrZXcgZGlmZmluZ1xuXHRcdC8vIGFsZ29yaXRobS4gTm9kZXMgdGhhdCBhcmUgdW5zdXNwZW5kaW5nIGFyZSBjb25zaWRlcmVkIG1vdW50aW5nIGFuZCB3ZSBkZXRlY3Rcblx0XHQvLyB0aGlzIGJ5IGNoZWNraW5nIGlmIG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbFxuXHRcdGNvbnN0IGlzTW91bnRpbmcgPSBvbGRWTm9kZSA9PSBudWxsIHx8IG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbDtcblxuXHRcdGlmIChpc01vdW50aW5nKSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PSAtMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlIGFyZSBtb3VudGluZyBhIERPTSBWTm9kZSwgbWFyayBpdCBmb3IgaW5zZXJ0aW9uXG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkVk5vZGUudHlwZSAhPSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggIT09IHNrZXdlZEluZGV4KSB7XG5cdFx0XHQvLyBXaGVuIHdlIG1vdmUgZWxlbWVudHMgYXJvdW5kIGkuZS4gWzAsIDEsIDJdIC0tPiBbMSwgMCwgMl1cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDEsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMSB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIDAgYW5kIG91ciBza2V3IGlzIDBcblx0XHRcdC8vICAgICB3ZSBzZXQgdGhlIHNrZXcgdG8gMSBhcyB3ZSBmb3VuZCBhbiBvZmZzZXQuXG5cdFx0XHQvLyAtLT4gd2UgZGlmZiAwLCB3ZSBmaW5kIGl0IGF0IHBvc2l0aW9uIDAgd2hpbGUgb3VyIHNrZXdlZCBpbmRleCBpcyBhdCAyIGFuZCBvdXIgc2tldyBpcyAxXG5cdFx0XHQvLyAgICAgdGhpcyBtYWtlcyB1cyBpbmNyZWFzZSB0aGUgc2tldyBhZ2Fpbi5cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDIsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMiB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIGF0IDQgYW5kIG91ciBza2V3IGlzIDJcblx0XHRcdC8vXG5cdFx0XHQvLyB0aGlzIGJlY29tZXMgYW4gb3B0aW1pemF0aW9uIHF1ZXN0aW9uIHdoZXJlIGN1cnJlbnRseSB3ZSBzZWUgYSAxIGVsZW1lbnQgb2Zmc2V0IGFzIGFuIGluc2VydGlvblxuXHRcdFx0Ly8gb3IgZGVsZXRpb24gaS5lLiB3ZSBvcHRpbWl6ZSBmb3IgWzAsIDEsIDJdIC0tPiBbOSwgMCwgMSwgMl1cblx0XHRcdC8vIHdoaWxlIGEgbW9yZSB0aGFuIDEgb2Zmc2V0IHdlIHNlZSBhcyBhIHN3YXAuXG5cdFx0XHQvLyBXZSBjb3VsZCBwcm9iYWJseSBidWlsZCBoZXVyaXN0aWNzIGZvciBoYXZpbmcgYW4gb3B0aW1pemVkIGNvdXJzZSBvZiBhY3Rpb24gaGVyZSBhcyB3ZWxsLCBidXRcblx0XHRcdC8vIG1pZ2h0IGdvIGF0IHRoZSBjb3N0IG9mIHNvbWUgYnl0ZXMuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIGZvciBpLmUuIG9ubHkgc3dhcHMgd2UnZCBqdXN0IGRvIHRoZSBsYXN0IHR3byBjb2RlLWJyYW5jaGVzIGFuZCBoYXZlXG5cdFx0XHQvLyBvbmx5IHRoZSBmaXJzdCBpdGVtIGJlIGEgcmUtc2NvdXRpbmcgYW5kIGFsbCB0aGUgb3RoZXJzIGZhbGwgaW4gdGhlaXIgc2tld2VkIGNvdW50ZXItcGFydC5cblx0XHRcdC8vIFdlIGNvdWxkIGFsc28gZnVydGhlciBvcHRpbWl6ZSBmb3Igc3dhcHNcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IHNrZXdlZEluZGV4IC0gMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggPT0gc2tld2VkSW5kZXggKyAxKSB7XG5cdFx0XHRcdHNrZXcrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID4gc2tld2VkSW5kZXgpIHtcblx0XHRcdFx0XHRza2V3LS07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2tldysrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSB0aGlzIFZOb2RlJ3MgRE9NIGlmIHRoZSBvcmlnaW5hbCBpbmRleCAobWF0Y2hpbmdJbmRleCkgZG9lc24ndFxuXHRcdFx0XHQvLyBtYXRjaCB0aGUgbmV3IHNrZXcgaW5kZXggKGkgKyBuZXcgc2tldylcblx0XHRcdFx0Ly8gSW4gdGhlIGZvcm1lciB0d28gYnJhbmNoZXMgd2Uga25vdyB0aGF0IGl0IG1hdGNoZXMgYWZ0ZXIgc2tld2luZ1xuXHRcdFx0XHRjaGlsZFZOb2RlLl9mbGFncyB8PSBJTlNFUlRfVk5PREU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHJlbWFpbmluZyBvbGRDaGlsZHJlbiBpZiB0aGVyZSBhcmUgYW55LiBMb29wIGZvcndhcmRzIHNvIHRoYXQgYXMgd2Vcblx0Ly8gdW5tb3VudCBET00gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvbGRDaGlsZHJlbiwgd2UgY2FuIGFkanVzdCBvbGREb20gdG9cblx0Ly8gcG9pbnQgdG8gdGhlIG5leHQgY2hpbGQsIHdoaWNoIG5lZWRzIHRvIGJlIHRoZSBmaXJzdCBET00gbm9kZSB0aGF0IHdvbid0IGJlXG5cdC8vIHVubW91bnRlZC5cblx0aWYgKHJlbWFpbmluZ09sZENoaWxkcmVuKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApIHtcblx0XHRcdFx0aWYgKG9sZFZOb2RlLl9kb20gPT0gbmV3UGFyZW50Vk5vZGUuX25leHREb20pIHtcblx0XHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dW5tb3VudChvbGRWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb21cbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpbnNlcnQocGFyZW50Vk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKSB7XG5cdC8vIE5vdGU6IFZOb2RlcyBpbiBuZXN0ZWQgc3VzcGVuZGVkIHRyZWVzIG1heSBiZSBtaXNzaW5nIF9jaGlsZHJlbi5cblxuXHRpZiAodHlwZW9mIHBhcmVudFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGxldCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLl9jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMDsgY2hpbGRyZW4gJiYgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2hpbGRyZW5baV0pIHtcblx0XHRcdFx0Ly8gSWYgd2UgZW50ZXIgdGhpcyBjb2RlIHBhdGggb24gc0NVIGJhaWxvdXQsIHdoZXJlIHdlIGNvcHlcblx0XHRcdFx0Ly8gb2xkVk5vZGUuX2NoaWxkcmVuIHRvIG5ld1ZOb2RlLl9jaGlsZHJlbiwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIG9sZFxuXHRcdFx0XHQvLyBjaGlsZHJlbidzIF9wYXJlbnQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV3Vk5vZGUgKHBhcmVudFZOb2RlXG5cdFx0XHRcdC8vIGhlcmUpLlxuXHRcdFx0XHRjaGlsZHJlbltpXS5fcGFyZW50ID0gcGFyZW50Vk5vZGU7XG5cdFx0XHRcdG9sZERvbSA9IGluc2VydChjaGlsZHJlbltpXSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvbGREb207XG5cdH0gZWxzZSBpZiAocGFyZW50Vk5vZGUuX2RvbSAhPSBvbGREb20pIHtcblx0XHRpZiAob2xkRG9tICYmIHBhcmVudFZOb2RlLnR5cGUgJiYgIXBhcmVudERvbS5jb250YWlucyhvbGREb20pKSB7XG5cdFx0XHRvbGREb20gPSBnZXREb21TaWJsaW5nKHBhcmVudFZOb2RlKTtcblx0XHR9XG5cdFx0cGFyZW50RG9tLmluc2VydEJlZm9yZShwYXJlbnRWTm9kZS5fZG9tLCBvbGREb20gfHwgbnVsbCk7XG5cdFx0b2xkRG9tID0gcGFyZW50Vk5vZGUuX2RvbTtcblx0fVxuXG5cdGRvIHtcblx0XHRvbGREb20gPSBvbGREb20gJiYgb2xkRG9tLm5leHRTaWJsaW5nO1xuXHR9IHdoaWxlIChvbGREb20gIT0gbnVsbCAmJiBvbGREb20ubm9kZVR5cGUgPT09IDgpO1xuXG5cdHJldHVybiBvbGREb207XG59XG5cbi8qKlxuICogRmxhdHRlbiBhbmQgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbn0gY2hpbGRyZW4gVGhlIHVuZmxhdHRlbmVkIGNoaWxkcmVuIG9mIGEgdmlydHVhbFxuICogbm9kZVxuICogQHJldHVybnMge1ZOb2RlW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NoaWxkQXJyYXkoY2hpbGRyZW4sIG91dCkge1xuXHRvdXQgPSBvdXQgfHwgW107XG5cdGlmIChjaGlsZHJlbiA9PSBudWxsIHx8IHR5cGVvZiBjaGlsZHJlbiA9PSAnYm9vbGVhbicpIHtcblx0fSBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuXHRcdGNoaWxkcmVuLnNvbWUoY2hpbGQgPT4ge1xuXHRcdFx0dG9DaGlsZEFycmF5KGNoaWxkLCBvdXQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG91dC5wdXNoKGNoaWxkcmVuKTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IGNoaWxkVk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3ZWRJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IHJlbWFpbmluZ09sZENoaWxkcmVuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdJbmRleChcblx0Y2hpbGRWTm9kZSxcblx0b2xkQ2hpbGRyZW4sXG5cdHNrZXdlZEluZGV4LFxuXHRyZW1haW5pbmdPbGRDaGlsZHJlblxuKSB7XG5cdGNvbnN0IGtleSA9IGNoaWxkVk5vZGUua2V5O1xuXHRjb25zdCB0eXBlID0gY2hpbGRWTm9kZS50eXBlO1xuXHRsZXQgeCA9IHNrZXdlZEluZGV4IC0gMTtcblx0bGV0IHkgPSBza2V3ZWRJbmRleCArIDE7XG5cdGxldCBvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3NrZXdlZEluZGV4XTtcblxuXHQvLyBXZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNlYXJjaCBpZiB0aGVyZSBhcmUgbW9yZSBjaGlsZHJlblxuXHQvLyAocmVtYWluaW5nT2xkQ2hpbGRyZW4pIHRvIHNlYXJjaC4gSG93ZXZlciwgaWYgdGhlIG9sZFZOb2RlIHdlIGp1c3QgbG9va2VkXG5cdC8vIGF0IHNrZXdlZEluZGV4IHdhcyBub3QgYWxyZWFkeSB1c2VkIGluIHRoaXMgZGlmZiwgdGhlbiB0aGVyZSBtdXN0IGJlIGF0XG5cdC8vIGxlYXN0IDEgb3RoZXIgKHNvIGdyZWF0ZXIgdGhhbiAxKSByZW1haW5pbmdPbGRDaGlsZHJlbiB0byBhdHRlbXB0IHRvIG1hdGNoXG5cdC8vIGFnYWluc3QuIFNvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGNoZWNrcyB0aGF0IGVuc3VyaW5nXG5cdC8vIHJlbWFpbmluZ09sZENoaWxkcmVuID4gMSBpZiB0aGUgb2xkVk5vZGUgaXMgbm90IGFscmVhZHkgdXNlZC9tYXRjaGVkLiBFbHNlXG5cdC8vIGlmIHRoZSBvbGRWTm9kZSB3YXMgbnVsbCBvciBtYXRjaGVkLCB0aGVuIHRoZXJlIGNvdWxkIG5lZWRzIHRvIGJlIGF0IGxlYXN0XG5cdC8vIDEgKGFrYSBgcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAwYCkgY2hpbGRyZW4gdG8gZmluZCBhbmQgY29tcGFyZSBhZ2FpbnN0LlxuXHRsZXQgc2hvdWxkU2VhcmNoID1cblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA+XG5cdFx0KG9sZFZOb2RlICE9IG51bGwgJiYgKG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwID8gMSA6IDApO1xuXG5cdGlmIChcblx0XHRvbGRWTm9kZSA9PT0gbnVsbCB8fFxuXHRcdChvbGRWTm9kZSAmJlxuXHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZSAmJlxuXHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwKVxuXHQpIHtcblx0XHRyZXR1cm4gc2tld2VkSW5kZXg7XG5cdH0gZWxzZSBpZiAoc2hvdWxkU2VhcmNoKSB7XG5cdFx0d2hpbGUgKHggPj0gMCB8fCB5IDwgb2xkQ2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRpZiAoeCA+PSAwKSB7XG5cdFx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5beF07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvbGRWTm9kZSAmJlxuXHRcdFx0XHRcdChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMCAmJlxuXHRcdFx0XHRcdGtleSA9PSBvbGRWTm9kZS5rZXkgJiZcblx0XHRcdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiB4O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHgtLTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt5XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0eSsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiAtMTtcbn1cbiIsICJpbXBvcnQge1xuXHRFTVBUWV9PQkosXG5cdE1PREVfSFlEUkFURSxcblx0TU9ERV9TVVNQRU5ERUQsXG5cdFJFU0VUX01PREVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIGdldERvbVNpYmxpbmcgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgeyBkaWZmQ2hpbGRyZW4gfSBmcm9tICcuL2NoaWxkcmVuJztcbmltcG9ydCB7IHNldFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBhc3NpZ24sIGlzQXJyYXksIHJlbW92ZU5vZGUsIHNsaWNlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuLi9vcHRpb25zJztcblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIGFuZCBhcHBseSBwcm9wZXIgY2hhbmdlcyB0byB0aGUgRE9NXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgcGFyZW50IG9mIHRoZSBET00gZWxlbWVudFxuICogQHBhcmFtIHtWTm9kZX0gbmV3Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdC4gTW9kaWZpZWQgYnlcbiAqIGdldENoaWxkQ29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBDdXJyZW50IG5hbWVzcGFjZSBvZiB0aGUgRE9NIG5vZGUgKEhUTUwsIFNWRywgb3IgTWF0aE1MKVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0bmFtZXNwYWNlLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0LyoqIEB0eXBlIHthbnl9ICovXG5cdGxldCB0bXAsXG5cdFx0bmV3VHlwZSA9IG5ld1ZOb2RlLnR5cGU7XG5cblx0Ly8gV2hlbiBwYXNzaW5nIHRocm91Z2ggY3JlYXRlRWxlbWVudCBpdCBhc3NpZ25zIHRoZSBvYmplY3Rcblx0Ly8gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkLiBUaGlzIHRvIHByZXZlbnQgSlNPTi1pbmplY3Rpb24uXG5cdGlmIChuZXdWTm9kZS5jb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuXHQvLyBJZiB0aGUgcHJldmlvdXMgZGlmZiBiYWlsZWQgb3V0LCByZXN1bWUgY3JlYXRpbmcvaHlkcmF0aW5nLlxuXHRpZiAob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9TVVNQRU5ERUQpIHtcblx0XHRpc0h5ZHJhdGluZyA9ICEhKG9sZFZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSk7XG5cdFx0b2xkRG9tID0gbmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBbb2xkRG9tXTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5fZGlmZikpIHRtcChuZXdWTm9kZSk7XG5cblx0b3V0ZXI6IGlmICh0eXBlb2YgbmV3VHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCBjLCBpc05ldywgb2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCwgY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uO1xuXHRcdFx0bGV0IG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7XG5cdFx0XHRjb25zdCBpc0NsYXNzQ29tcG9uZW50ID1cblx0XHRcdFx0J3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXI7XG5cblx0XHRcdC8vIE5lY2Vzc2FyeSBmb3IgY3JlYXRlQ29udGV4dCBhcGkuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIHBhc3Ncblx0XHRcdC8vIHRoZSBjb250ZXh0IHZhbHVlIGFzIGB0aGlzLmNvbnRleHRgIGp1c3QgZm9yIHRoaXMgY29tcG9uZW50LlxuXHRcdFx0dG1wID0gbmV3VHlwZS5jb250ZXh0VHlwZTtcblx0XHRcdGxldCBwcm92aWRlciA9IHRtcCAmJiBnbG9iYWxDb250ZXh0W3RtcC5faWRdO1xuXHRcdFx0bGV0IGNvbXBvbmVudENvbnRleHQgPSB0bXBcblx0XHRcdFx0PyBwcm92aWRlclxuXHRcdFx0XHRcdD8gcHJvdmlkZXIucHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IHRtcC5fZGVmYXVsdFZhbHVlXG5cdFx0XHRcdDogZ2xvYmFsQ29udGV4dDtcblxuXHRcdFx0Ly8gR2V0IGNvbXBvbmVudCBhbmQgc2V0IGl0IHRvIGBjYFxuXHRcdFx0aWYgKG9sZFZOb2RlLl9jb21wb25lbnQpIHtcblx0XHRcdFx0YyA9IG5ld1ZOb2RlLl9jb21wb25lbnQgPSBvbGRWTm9kZS5fY29tcG9uZW50O1xuXHRcdFx0XHRjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gYy5fcGVuZGluZ0Vycm9yO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW5zdGFudGlhdGUgdGhlIG5ldyBjb21wb25lbnRcblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBCYXNlQ29tcG9uZW50KFxuXHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjLmNvbnN0cnVjdG9yID0gbmV3VHlwZTtcblx0XHRcdFx0XHRjLnJlbmRlciA9IGRvUmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm92aWRlcikgcHJvdmlkZXIuc3ViKGMpO1xuXG5cdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0aWYgKCFjLnN0YXRlKSBjLnN0YXRlID0ge307XG5cdFx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRcdGMuX2dsb2JhbENvbnRleHQgPSBnbG9iYWxDb250ZXh0O1xuXHRcdFx0XHRpc05ldyA9IGMuX2RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludm9rZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuX25leHRTdGF0ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGMuX25leHRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKGMuX25leHRTdGF0ZSA9PSBjLnN0YXRlKSB7XG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlID0gYXNzaWduKHt9LCBjLl9uZXh0U3RhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXNzaWduKFxuXHRcdFx0XHRcdGMuX25leHRTdGF0ZSxcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXdQcm9wcywgYy5fbmV4dFN0YXRlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRvbGRQcm9wcyA9IGMucHJvcHM7XG5cdFx0XHRvbGRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHRjLl92bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0XHQvLyBJbnZva2UgcHJlLXJlbmRlciBsaWZlY3ljbGUgbWV0aG9kc1xuXHRcdFx0aWYgKGlzTmV3KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0NsYXNzQ29tcG9uZW50ICYmXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50ICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuY29tcG9uZW50RGlkTW91bnQgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuY29tcG9uZW50RGlkTW91bnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNDbGFzc0NvbXBvbmVudCAmJlxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRuZXdQcm9wcyAhPT0gb2xkUHJvcHMgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFjLl9mb3JjZSAmJlxuXHRcdFx0XHRcdCgoYy5zaG91bGRDb21wb25lbnRVcGRhdGUgIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Yy5zaG91bGRDb21wb25lbnRVcGRhdGUoXG5cdFx0XHRcdFx0XHRcdG5ld1Byb3BzLFxuXHRcdFx0XHRcdFx0XHRjLl9uZXh0U3RhdGUsXG5cdFx0XHRcdFx0XHRcdGNvbXBvbmVudENvbnRleHRcblx0XHRcdFx0XHRcdCkgPT09IGZhbHNlKSB8fFxuXHRcdFx0XHRcdFx0bmV3Vk5vZGUuX29yaWdpbmFsID09PSBvbGRWTm9kZS5fb3JpZ2luYWwpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIE1vcmUgaW5mbyBhYm91dCB0aGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0pvdmlEZUNyb29jay9iZWM1ZjJjZTkzNTQ0ZDJlNjA3MGVmOGUwMDM2ZTRlOFxuXHRcdFx0XHRcdGlmIChuZXdWTm9kZS5fb3JpZ2luYWwgIT09IG9sZFZOb2RlLl9vcmlnaW5hbCkge1xuXHRcdFx0XHRcdFx0Ly8gV2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgYmFpbCBiZWNhdXNlIG9mIHNDVSB3ZSBoYXZlIHRvIHVwZGF0ZVxuXHRcdFx0XHRcdFx0Ly8gdGhlIHByb3BzLCBzdGF0ZSBhbmQgZGlydHktc3RhdGUuXG5cdFx0XHRcdFx0XHQvLyB3aGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggc3RyaWN0LWVxdWFsaXR5IHdlIGRvbid0IGFzIHRoZSBjaGlsZCBjb3VsZCBzdGlsbFxuXHRcdFx0XHRcdFx0Ly8gYmUgZGlydGllZCBzZWUgIzM4ODNcblx0XHRcdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4uc29tZSh2bm9kZSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodm5vZGUpIHZub2RlLl9wYXJlbnQgPSBuZXdWTm9kZTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYy5fc3RhdGVDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuX3N0YXRlQ2FsbGJhY2tzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblxuXHRcdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrIG91dGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGMuY29tcG9uZW50V2lsbFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5jb21wb25lbnREaWRVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0XHRcdGMuY29tcG9uZW50RGlkVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSwgc25hcHNob3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRjLl9wYXJlbnREb20gPSBwYXJlbnREb207XG5cdFx0XHRjLl9mb3JjZSA9IGZhbHNlO1xuXG5cdFx0XHRsZXQgcmVuZGVySG9vayA9IG9wdGlvbnMuX3JlbmRlcixcblx0XHRcdFx0Y291bnQgPSAwO1xuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0dG1wID0gYy5yZW5kZXIoYy5wcm9wcywgYy5zdGF0ZSwgYy5jb250ZXh0KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmICFpc05ldyAmJiBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0c25hcHNob3QgPSBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBpc1RvcExldmVsRnJhZ21lbnQgPVxuXHRcdFx0XHR0bXAgIT0gbnVsbCAmJiB0bXAudHlwZSA9PT0gRnJhZ21lbnQgJiYgdG1wLmtleSA9PSBudWxsO1xuXHRcdFx0bGV0IHJlbmRlclJlc3VsdCA9IGlzVG9wTGV2ZWxGcmFnbWVudCA/IHRtcC5wcm9wcy5jaGlsZHJlbiA6IHRtcDtcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRwYXJlbnREb20sXG5cdFx0XHRcdGlzQXJyYXkocmVuZGVyUmVzdWx0KSA/IHJlbmRlclJlc3VsdCA6IFtyZW5kZXJSZXN1bHRdLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Yy5iYXNlID0gbmV3Vk5vZGUuX2RvbTtcblxuXHRcdFx0Ly8gV2Ugc3VjY2Vzc2Z1bGx5IHJlbmRlcmVkIHRoaXMgVk5vZGUsIHVuc2V0IGFueSBzdG9yZWQgaHlkcmF0aW9uL2JhaWxvdXQgc3RhdGU6XG5cdFx0XHRuZXdWTm9kZS5fZmxhZ3MgJj0gUkVTRVRfTU9ERTtcblxuXHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0XHRjLl9wZW5kaW5nRXJyb3IgPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Ly8gaWYgaHlkcmF0aW5nIG9yIGNyZWF0aW5nIGluaXRpYWwgdHJlZSwgYmFpbG91dCBwcmVzZXJ2ZXMgRE9NOlxuXHRcdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2ZsYWdzIHw9IGlzSHlkcmF0aW5nXG5cdFx0XHRcdFx0PyBNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRFxuXHRcdFx0XHRcdDogTU9ERV9TVVNQRU5ERUQ7XG5cblx0XHRcdFx0d2hpbGUgKG9sZERvbSAmJiBvbGREb20ubm9kZVR5cGUgPT09IDggJiYgb2xkRG9tLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0b2xkRG9tID0gb2xkRG9tLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuW2V4Y2Vzc0RvbUNoaWxkcmVuLmluZGV4T2Yob2xkRG9tKV0gPSBudWxsO1xuXHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkRG9tO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgbmV3Vk5vZGUsIG9sZFZOb2RlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPT0gbnVsbCAmJlxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsXG5cdCkge1xuXHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0fSBlbHNlIHtcblx0XHRuZXdWTm9kZS5fZG9tID0gZGlmZkVsZW1lbnROb2Rlcyhcblx0XHRcdG9sZFZOb2RlLl9kb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5kaWZmZWQpKSB0bXAobmV3Vk5vZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzXG4gKiB3aGljaCBoYXZlIGNhbGxiYWNrcyB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtWTm9kZX0gcm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Um9vdChjb21taXRRdWV1ZSwgcm9vdCwgcmVmUXVldWUpIHtcblx0cm9vdC5fbmV4dERvbSA9IHVuZGVmaW5lZDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJlZlF1ZXVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0YXBwbHlSZWYocmVmUXVldWVbaV0sIHJlZlF1ZXVlWysraV0sIHJlZlF1ZXVlWysraV0pO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuX2NvbW1pdCkgb3B0aW9ucy5fY29tbWl0KHJvb3QsIGNvbW1pdFF1ZXVlKTtcblxuXHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFJldXNlIHRoZSBjb21taXRRdWV1ZSB2YXJpYWJsZSBoZXJlIHNvIHRoZSB0eXBlIGNoYW5nZXNcblx0XHRcdGNvbW1pdFF1ZXVlID0gYy5fcmVuZGVyQ2FsbGJhY2tzO1xuXHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGNiID0+IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBTZWUgYWJvdmUgY29tbWVudCBvbiBjb21taXRRdWV1ZVxuXHRcdFx0XHRjYi5jYWxsKGMpO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjLl92bm9kZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIHJlcHJlc2VudGluZyBET00gZWxlbWVudFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgdmlydHVhbCBub2Rlc1xuICogYmVpbmcgZGlmZmVkXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGRpZmZFbGVtZW50Tm9kZXMoXG5cdGRvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IG9sZFByb3BzID0gb2xkVk5vZGUucHJvcHM7XG5cdGxldCBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzO1xuXHRsZXQgbm9kZVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5ld1ZOb2RlLnR5cGUpO1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG5ld0h0bWw7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG9sZEh0bWw7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50Q2hpbGRyZW59ICovXG5cdGxldCBuZXdDaGlsZHJlbjtcblx0bGV0IHZhbHVlO1xuXHRsZXQgaW5wdXRWYWx1ZTtcblx0bGV0IGNoZWNrZWQ7XG5cblx0Ly8gVHJhY2tzIGVudGVyaW5nIGFuZCBleGl0aW5nIG5hbWVzcGFjZXMgd2hlbiBkZXNjZW5kaW5nIHRocm91Z2ggdGhlIHRyZWUuXG5cdGlmIChub2RlVHlwZSA9PT0gJ3N2ZycpIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cdGVsc2UgaWYgKG5vZGVUeXBlID09PSAnbWF0aCcpXG5cdFx0bmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuXHRlbHNlIGlmICghbmFtZXNwYWNlKSBuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG5cblx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZXhjZXNzRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbHVlID0gZXhjZXNzRG9tQ2hpbGRyZW5baV07XG5cblx0XHRcdC8vIGlmIG5ld1ZOb2RlIG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiBvciB0aGUgYGRvbWBcblx0XHRcdC8vIGFyZ3VtZW50IG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiwgcmVtb3ZlIGl0IGZyb21cblx0XHRcdC8vIGV4Y2Vzc0RvbUNoaWxkcmVuIHNvIGl0IGlzbid0IGxhdGVyIHJlbW92ZWQgaW4gZGlmZkNoaWxkcmVuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHZhbHVlICYmXG5cdFx0XHRcdCdzZXRBdHRyaWJ1dGUnIGluIHZhbHVlID09PSAhIW5vZGVUeXBlICYmXG5cdFx0XHRcdChub2RlVHlwZSA/IHZhbHVlLmxvY2FsTmFtZSA9PT0gbm9kZVR5cGUgOiB2YWx1ZS5ub2RlVHlwZSA9PT0gMylcblx0XHRcdCkge1xuXHRcdFx0XHRkb20gPSB2YWx1ZTtcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5baV0gPSBudWxsO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoZG9tID09IG51bGwpIHtcblx0XHRpZiAobm9kZVR5cGUgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdQcm9wcyk7XG5cdFx0fVxuXG5cdFx0ZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0bm9kZVR5cGUsXG5cdFx0XHRuZXdQcm9wcy5pcyAmJiBuZXdQcm9wc1xuXHRcdCk7XG5cblx0XHQvLyB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbm9kZSwgc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzIGEgbmV3IHN1YnRyZWUgKGluXG5cdFx0Ly8gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpZiAoaXNIeWRyYXRpbmcpIHtcblx0XHRcdGlmIChvcHRpb25zLl9oeWRyYXRpb25NaXNtYXRjaClcblx0XHRcdFx0b3B0aW9ucy5faHlkcmF0aW9uTWlzbWF0Y2gobmV3Vk5vZGUsIGV4Y2Vzc0RvbUNoaWxkcmVuKTtcblx0XHRcdGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIHdlIGNyZWF0ZWQgYSBuZXcgcGFyZW50LCBzbyBub25lIG9mIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIGNoaWxkcmVuIGNhbiBiZSByZXVzZWQ6XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBudWxsO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBJZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIG5vdCBoeWRyYXRpbmcgYnV0IGFyZSB1c2luZ1xuXHRcdC8vIGV4aXN0aW5nIERPTSAoZS5nLiByZXBsYWNlTm9kZSkgd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTVxuXHRcdC8vIGF0dHJpYnV0ZXMgdG8gZGlmZiB0aGVtXG5cdFx0aWYgKCFpc0h5ZHJhdGluZyAmJiBleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRvbGRQcm9wcyA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLmF0dHJpYnV0ZXNbaV07XG5cdFx0XHRcdG9sZFByb3BzW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIG9sZFByb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG9sZFByb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0b2xkSHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmICghKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoaSA9PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIG5ld1Byb3BzKSB8fFxuXHRcdFx0XHRcdChpID09ICdjaGVja2VkJyAmJiAnZGVmYXVsdENoZWNrZWQnIGluIG5ld1Byb3BzKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIER1cmluZyBoeWRyYXRpb24sIHByb3BzIGFyZSBub3QgZGlmZmVkIGF0IGFsbCAoaW5jbHVkaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKVxuXHRcdC8vIEBUT0RPIHdlIHNob3VsZCB3YXJuIGluIGRlYnVnIG1vZGUgd2hlbiBwcm9wcyBkb24ndCBtYXRjaCBoZXJlLlxuXHRcdGZvciAoaSBpbiBuZXdQcm9wcykge1xuXHRcdFx0dmFsdWUgPSBuZXdQcm9wc1tpXTtcblx0XHRcdGlmIChpID09ICdjaGlsZHJlbicpIHtcblx0XHRcdFx0bmV3Q2hpbGRyZW4gPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnKSB7XG5cdFx0XHRcdG5ld0h0bWwgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAndmFsdWUnKSB7XG5cdFx0XHRcdGlucHV0VmFsdWUgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnY2hlY2tlZCcpIHtcblx0XHRcdFx0Y2hlY2tlZCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCFpc0h5ZHJhdGluZyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykgJiZcblx0XHRcdFx0b2xkUHJvcHNbaV0gIT09IHZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCB2YWx1ZSwgb2xkUHJvcHNbaV0sIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5ldyB2bm9kZSBkaWRuJ3QgaGF2ZSBkYW5nZXJvdXNseVNldElubmVySFRNTCwgZGlmZiBpdHMgY2hpbGRyZW5cblx0XHRpZiAobmV3SHRtbCkge1xuXHRcdFx0Ly8gQXZvaWQgcmUtYXBwbHlpbmcgdGhlIHNhbWUgJ19faHRtbCcgaWYgaXQgZGlkIG5vdCBjaGFuZ2VkIGJldHdlZW4gcmUtcmVuZGVyXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFpc0h5ZHJhdGluZyAmJlxuXHRcdFx0XHQoIW9sZEh0bWwgfHxcblx0XHRcdFx0XHQobmV3SHRtbC5fX2h0bWwgIT09IG9sZEh0bWwuX19odG1sICYmXG5cdFx0XHRcdFx0XHRuZXdIdG1sLl9faHRtbCAhPT0gZG9tLmlubmVySFRNTCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0ZG9tLmlubmVySFRNTCA9IG5ld0h0bWwuX19odG1sO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9sZEh0bWwpIGRvbS5pbm5lckhUTUwgPSAnJztcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRkb20sXG5cdFx0XHRcdGlzQXJyYXkobmV3Q2hpbGRyZW4pID8gbmV3Q2hpbGRyZW4gOiBbbmV3Q2hpbGRyZW5dLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5vZGVUeXBlID09PSAnZm9yZWlnbk9iamVjdCdcblx0XHRcdFx0XHQ/ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJ1xuXHRcdFx0XHRcdDogbmFtZXNwYWNlLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuXG5cdFx0XHRcdFx0PyBleGNlc3NEb21DaGlsZHJlblswXVxuXHRcdFx0XHRcdDogb2xkVk5vZGUuX2NoaWxkcmVuICYmIGdldERvbVNpYmxpbmcob2xkVk5vZGUsIDApLFxuXHRcdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdFx0cmVmUXVldWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBub3QgcGFydCBvZiBhbnkgdm5vZGUuXG5cdFx0XHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKGkgPSBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGktLTsgKSB7XG5cdFx0XHRcdFx0cmVtb3ZlTm9kZShleGNlc3NEb21DaGlsZHJlbltpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBcyBhYm92ZSwgZG9uJ3QgZGlmZiBwcm9wcyBkdXJpbmcgaHlkcmF0aW9uXG5cdFx0aWYgKCFpc0h5ZHJhdGluZykge1xuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0XHRpZiAobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgaW5wdXRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0Ly8gIzI3NTYgRm9yIHRoZSA8cHJvZ3Jlc3M+LWVsZW1lbnQgdGhlIGluaXRpYWwgdmFsdWUgaXMgMCxcblx0XHRcdFx0Ly8gZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5vdCBiZWluZyBwcmVzZW50LiBXaGVuIHRoZSBhdHRyaWJ1dGVcblx0XHRcdFx0Ly8gaXMgbWlzc2luZyB0aGUgcHJvZ3Jlc3MgYmFyIGlzIHRyZWF0ZWQgYXMgaW5kZXRlcm1pbmF0ZS5cblx0XHRcdFx0Ly8gVG8gZml4IHRoYXQgd2UnbGwgYWx3YXlzIHVwZGF0ZSBpdCB3aGVuIGl0IGlzIDAgZm9yIHByb2dyZXNzIGVsZW1lbnRzXG5cdFx0XHRcdChpbnB1dFZhbHVlICE9PSBkb21baV0gfHxcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgIWlucHV0VmFsdWUpIHx8XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBJRSAxMSB0byBmaXggPHNlbGVjdD4gdmFsdWUgbm90IGJlaW5nIHVwZGF0ZWQuXG5cdFx0XHRcdFx0Ly8gVG8gYXZvaWQgYSBzdGFsZSBzZWxlY3QgdmFsdWUgd2UgbmVlZCB0byBzZXQgdGhlIG9wdGlvbi52YWx1ZVxuXHRcdFx0XHRcdC8vIGFnYWluLCB3aGljaCB0cmlnZ2VycyBJRTExIHRvIHJlLWV2YWx1YXRlIHRoZSBzZWxlY3QgdmFsdWVcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdvcHRpb24nICYmIGlucHV0VmFsdWUgIT09IG9sZFByb3BzW2ldKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGlucHV0VmFsdWUsIG9sZFByb3BzW2ldLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0gJ2NoZWNrZWQnO1xuXHRcdFx0aWYgKGNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBjaGVja2VkICE9PSBkb21baV0pIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCBjaGVja2VkLCBvbGRQcm9wc1tpXSwgbmFtZXNwYWNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZG9tO1xufVxuXG4vKipcbiAqIEludm9rZSBvciB1cGRhdGUgYSByZWYsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgZnVuY3Rpb24gb3Igb2JqZWN0IHJlZi5cbiAqIEBwYXJhbSB7UmVmPGFueT4gJiB7IF91bm1vdW50PzogdW5rbm93biB9fSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUsIHZub2RlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IGhhc1JlZlVubW91bnQgPSB0eXBlb2YgcmVmLl91bm1vdW50ID09ICdmdW5jdGlvbic7XG5cdFx0XHRpZiAoaGFzUmVmVW5tb3VudCkge1xuXHRcdFx0XHQvLyBAdHMtaWdub3JlIFRTIGRvZXNuJ3QgbGlrZSBtb3ZpbmcgbmFycm93aW5nIGNoZWNrcyBpbnRvIHZhcmlhYmxlc1xuXHRcdFx0XHRyZWYuX3VubW91bnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNSZWZVbm1vdW50IHx8IHZhbHVlICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gU3RvcmUgdGhlIGNsZWFudXAgZnVuY3Rpb24gb24gdGhlIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgdG8gYXZvaWQgc2hhcGVcblx0XHRcdFx0Ly8gdHJhbnNpdGlvbmluZyB2bm9kZVxuXHRcdFx0XHRyZWYuX3VubW91bnQgPSByZWYodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSByZWYuY3VycmVudCA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCB2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBVbm1vdW50IGEgdmlydHVhbCBub2RlIGZyb20gdGhlIHRyZWUgYW5kIGFwcGx5IERPTSBjaGFuZ2VzXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHVubW91bnRcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlIFRoZSBwYXJlbnQgb2YgdGhlIFZOb2RlIHRoYXQgaW5pdGlhdGVkIHRoZSB1bm1vdW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwUmVtb3ZlXSBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJlbnQgbm9kZSBvZiB0aGVcbiAqIGN1cnJlbnQgZWxlbWVudCBpcyBhbHJlYWR5IGRldGFjaGVkIGZyb20gdGhlIERPTS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnQodm5vZGUsIHBhcmVudFZOb2RlLCBza2lwUmVtb3ZlKSB7XG5cdGxldCByO1xuXHRpZiAob3B0aW9ucy51bm1vdW50KSBvcHRpb25zLnVubW91bnQodm5vZGUpO1xuXG5cdGlmICgociA9IHZub2RlLnJlZikpIHtcblx0XHRpZiAoIXIuY3VycmVudCB8fCByLmN1cnJlbnQgPT09IHZub2RlLl9kb20pIHtcblx0XHRcdGFwcGx5UmVmKHIsIG51bGwsIHBhcmVudFZOb2RlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoKHIgPSB2bm9kZS5fY29tcG9uZW50KSAhPSBudWxsKSB7XG5cdFx0aWYgKHIuY29tcG9uZW50V2lsbFVubW91bnQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBwYXJlbnRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ci5iYXNlID0gci5fcGFyZW50RG9tID0gbnVsbDtcblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jaGlsZHJlbikpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChyW2ldKSB7XG5cdFx0XHRcdHVubW91bnQoXG5cdFx0XHRcdFx0cltpXSxcblx0XHRcdFx0XHRwYXJlbnRWTm9kZSxcblx0XHRcdFx0XHRza2lwUmVtb3ZlIHx8IHR5cGVvZiB2bm9kZS50eXBlICE9ICdmdW5jdGlvbidcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIXNraXBSZW1vdmUpIHtcblx0XHRyZW1vdmVOb2RlKHZub2RlLl9kb20pO1xuXHR9XG5cblx0Ly8gTXVzdCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYF9uZXh0RG9tYFxuXHQvLyBmb3Igd2hpY2ggYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUuIFNlZSBjb21tZW50IGluIGBjcmVhdGUtZWxlbWVudC5qc2Bcblx0dm5vZGUuX2NvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQgPSB2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb21taXRSb290LCBkaWZmIH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFJlbmRlciBhIFByZWFjdCB2aXJ0dWFsIG5vZGUgaW50byBhIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnQgfCBvYmplY3R9IFtyZXBsYWNlTm9kZV0gT3B0aW9uYWw6IEF0dGVtcHQgdG8gcmUtdXNlIGFuXG4gKiBleGlzdGluZyBET00gdHJlZSByb290ZWQgYXQgYHJlcGxhY2VOb2RlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnREb20sIHJlcGxhY2VOb2RlKSB7XG5cdGlmIChvcHRpb25zLl9yb290KSBvcHRpb25zLl9yb290KHZub2RlLCBwYXJlbnREb20pO1xuXG5cdC8vIFdlIGFidXNlIHRoZSBgcmVwbGFjZU5vZGVgIHBhcmFtZXRlciBpbiBgaHlkcmF0ZSgpYCB0byBzaWduYWwgaWYgd2UgYXJlIGluXG5cdC8vIGh5ZHJhdGlvbiBtb2RlIG9yIG5vdCBieSBwYXNzaW5nIHRoZSBgaHlkcmF0ZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIERPTVxuXHQvLyBlbGVtZW50Li5cblx0bGV0IGlzSHlkcmF0aW5nID0gdHlwZW9mIHJlcGxhY2VOb2RlID09ICdmdW5jdGlvbic7XG5cblx0Ly8gVG8gYmUgYWJsZSB0byBzdXBwb3J0IGNhbGxpbmcgYHJlbmRlcigpYCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZVxuXHQvLyBET00gbm9kZSwgd2UgbmVlZCB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIHRyZWUuIFdlIGRvXG5cdC8vIHRoaXMgYnkgYXNzaWduaW5nIGEgbmV3IGBfY2hpbGRyZW5gIHByb3BlcnR5IHRvIERPTSBub2RlcyB3aGljaCBwb2ludHNcblx0Ly8gdG8gdGhlIGxhc3QgcmVuZGVyZWQgdHJlZS4gQnkgZGVmYXVsdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50LCB3aGljaFxuXHQvLyBtZWFucyB0aGF0IHdlIGFyZSBtb3VudGluZyBhIG5ldyB0cmVlIGZvciB0aGUgZmlyc3QgdGltZS5cblx0bGV0IG9sZFZOb2RlID0gaXNIeWRyYXRpbmdcblx0XHQ/IG51bGxcblx0XHQ6IChyZXBsYWNlTm9kZSAmJiByZXBsYWNlTm9kZS5fY2hpbGRyZW4pIHx8IHBhcmVudERvbS5fY2hpbGRyZW47XG5cblx0dm5vZGUgPSAoKCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZSkgfHwgcGFyZW50RG9tKS5fY2hpbGRyZW4gPVxuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIFt2bm9kZV0pO1xuXG5cdC8vIExpc3Qgb2YgZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZmZpbmcuXG5cdGxldCBjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cdGRpZmYoXG5cdFx0cGFyZW50RG9tLFxuXHRcdC8vIERldGVybWluZSB0aGUgbmV3IHZub2RlIHRyZWUgYW5kIHN0b3JlIGl0IG9uIHRoZSBET00gZWxlbWVudCBvblxuXHRcdC8vIG91ciBjdXN0b20gYF9jaGlsZHJlbmAgcHJvcGVydHkuXG5cdFx0dm5vZGUsXG5cdFx0b2xkVk5vZGUgfHwgRU1QVFlfT0JKLFxuXHRcdEVNUFRZX09CSixcblx0XHRwYXJlbnREb20ubmFtZXNwYWNlVVJJLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyBbcmVwbGFjZU5vZGVdXG5cdFx0XHQ6IG9sZFZOb2RlXG5cdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHQ6IHBhcmVudERvbS5maXJzdENoaWxkXG5cdFx0XHRcdFx0PyBzbGljZS5jYWxsKHBhcmVudERvbS5jaGlsZE5vZGVzKVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRjb21taXRRdWV1ZSxcblx0XHQhaXNIeWRyYXRpbmcgJiYgcmVwbGFjZU5vZGVcblx0XHRcdD8gcmVwbGFjZU5vZGVcblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdFx0PyBvbGRWTm9kZS5fZG9tXG5cdFx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGQsXG5cdFx0aXNIeWRyYXRpbmcsXG5cdFx0cmVmUXVldWVcblx0KTtcblxuXHQvLyBGbHVzaCBhbGwgcXVldWVkIGVmZmVjdHNcblx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgdm5vZGUsIHJlZlF1ZXVlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgRE9NIGVsZW1lbnQgd2l0aCBkYXRhIGZyb20gYSBQcmVhY3QgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHVwZGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZSh2bm9kZSwgcGFyZW50RG9tKSB7XG5cdHJlbmRlcih2bm9kZSwgcGFyZW50RG9tLCBoeWRyYXRlKTtcbn1cbiIsICIvKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgZXJyb3IgYm91bmRhcnkgdG8gYSB0aHJvd24gZXJyb3IgYW5kIGNhbGwgaXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBlcnJvciBUaGUgdGhyb3duIHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdGhhdCB0aHJldyB0aGUgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IChleGNlcHRcbiAqIGZvciB1bm1vdW50aW5nIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGhpZ2hlc3QgcGFyZW50IHRoYXQgd2FzIGJlaW5nXG4gKiB1bm1vdW50ZWQpXG4gKiBAcGFyYW0ge1ZOb2RlfSBbb2xkVk5vZGVdXG4gKiBAcGFyYW0ge0Vycm9ySW5mb30gW2Vycm9ySW5mb11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jYXRjaEVycm9yKGVycm9yLCB2bm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbykge1xuXHQvKiogQHR5cGUge0NvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCxcblx0XHQvKiogQHR5cGUge0NvbXBvbmVudFR5cGV9ICovXG5cdFx0Y3Rvcixcblx0XHQvKiogQHR5cGUge2Jvb2xlYW59ICovXG5cdFx0aGFuZGxlZDtcblxuXHRmb3IgKDsgKHZub2RlID0gdm5vZGUuX3BhcmVudCk7ICkge1xuXHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgIWNvbXBvbmVudC5fcHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y3RvciA9IGNvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuXHRcdFx0XHRpZiAoY3RvciAmJiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50LnNldFN0YXRlKGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyB8fCB7fSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGlzIGlzIGFuIGVycm9yIGJvdW5kYXJ5LiBNYXJrIGl0IGFzIGhhdmluZyBiYWlsZWQgb3V0LCBhbmQgd2hldGhlciBpdCB3YXMgbWlkLWh5ZHJhdGlvbi5cblx0XHRcdFx0aWYgKGhhbmRsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGNvbXBvbmVudC5fcGVuZGluZ0Vycm9yID0gY29tcG9uZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgZXJyb3I7XG59XG4iLCAiaW1wb3J0IHsgYXNzaWduLCBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVWTm9kZSB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuXG4vKipcbiAqIENsb25lcyB0aGUgZ2l2ZW4gVk5vZGUsIG9wdGlvbmFsbHkgYWRkaW5nIGF0dHJpYnV0ZXMvcHJvcHMgYW5kIHJlcGxhY2luZyBpdHNcbiAqIGNoaWxkcmVuLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWRcbiAqIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KHZub2RlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IGFzc2lnbih7fSwgdm5vZGUucHJvcHMpLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRsZXQgZGVmYXVsdFByb3BzO1xuXG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0ZGVmYXVsdFByb3BzID0gdm5vZGUudHlwZS5kZWZhdWx0UHJvcHM7XG5cdH1cblxuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAocHJvcHNbaV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZShcblx0XHR2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXkgfHwgdm5vZGUua2V5LFxuXHRcdHJlZiB8fCB2bm9kZS5yZWYsXG5cdFx0bnVsbFxuXHQpO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgYXMgX29wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG4vKiogQHR5cGUge251bWJlcn0gKi9cbmxldCBjdXJyZW50SW5kZXg7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xubGV0IHByZXZpb3VzQ29tcG9uZW50O1xuXG4vKiogQHR5cGUge251bWJlcn0gKi9cbmxldCBjdXJyZW50SG9vayA9IDA7XG5cbi8qKiBAdHlwZSB7QXJyYXk8aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50Pn0gKi9cbmxldCBhZnRlclBhaW50RWZmZWN0cyA9IFtdO1xuXG4vLyBDYXN0IHRvIHVzZSBpbnRlcm5hbCBPcHRpb25zIHR5cGVcbmNvbnN0IG9wdGlvbnMgPSAvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLk9wdGlvbnN9ICovIChfb3B0aW9ucyk7XG5cbmxldCBvbGRCZWZvcmVEaWZmID0gb3B0aW9ucy5fZGlmZjtcbmxldCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5sZXQgb2xkQWZ0ZXJEaWZmID0gb3B0aW9ucy5kaWZmZWQ7XG5sZXQgb2xkQ29tbWl0ID0gb3B0aW9ucy5fY29tbWl0O1xubGV0IG9sZEJlZm9yZVVubW91bnQgPSBvcHRpb25zLnVubW91bnQ7XG5sZXQgb2xkUm9vdCA9IG9wdGlvbnMuX3Jvb3Q7XG5cbmNvbnN0IFJBRl9USU1FT1VUID0gMTAwO1xubGV0IHByZXZSYWY7XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuX2RpZmYgPSB2bm9kZSA9PiB7XG5cdGN1cnJlbnRDb21wb25lbnQgPSBudWxsO1xuXHRpZiAob2xkQmVmb3JlRGlmZikgb2xkQmVmb3JlRGlmZih2bm9kZSk7XG59O1xuXG5vcHRpb25zLl9yb290ID0gKHZub2RlLCBwYXJlbnREb20pID0+IHtcblx0aWYgKHZub2RlICYmIHBhcmVudERvbS5fY2hpbGRyZW4gJiYgcGFyZW50RG9tLl9jaGlsZHJlbi5fbWFzaykge1xuXHRcdHZub2RlLl9tYXNrID0gcGFyZW50RG9tLl9jaGlsZHJlbi5fbWFzaztcblx0fVxuXG5cdGlmIChvbGRSb290KSBvbGRSb290KHZub2RlLCBwYXJlbnREb20pO1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fcmVuZGVyID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQmVmb3JlUmVuZGVyKSBvbGRCZWZvcmVSZW5kZXIodm5vZGUpO1xuXG5cdGN1cnJlbnRDb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRjdXJyZW50SW5kZXggPSAwO1xuXG5cdGNvbnN0IGhvb2tzID0gY3VycmVudENvbXBvbmVudC5fX2hvb2tzO1xuXHRpZiAoaG9va3MpIHtcblx0XHRpZiAocHJldmlvdXNDb21wb25lbnQgPT09IGN1cnJlbnRDb21wb25lbnQpIHtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0Y3VycmVudENvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRob29rcy5fbGlzdC5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGhvb2tJdGVtLl9uZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRob29rSXRlbS5fdmFsdWUgPSBob29rSXRlbS5fbmV4dFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhvb2tJdGVtLl9wZW5kaW5nQXJncyA9IGhvb2tJdGVtLl9uZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VFZmZlY3QpO1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50SW5kZXggPSAwO1xuXHRcdH1cblx0fVxuXHRwcmV2aW91c0NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQ7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLmRpZmZlZCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEFmdGVyRGlmZikgb2xkQWZ0ZXJEaWZmKHZub2RlKTtcblxuXHRjb25zdCBjID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGMgJiYgYy5fX2hvb2tzKSB7XG5cdFx0aWYgKGMuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMubGVuZ3RoKSBhZnRlclBhaW50KGFmdGVyUGFpbnRFZmZlY3RzLnB1c2goYykpO1xuXHRcdGMuX19ob29rcy5fbGlzdC5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdGlmIChob29rSXRlbS5fcGVuZGluZ0FyZ3MpIHtcblx0XHRcdFx0aG9va0l0ZW0uX2FyZ3MgPSBob29rSXRlbS5fcGVuZGluZ0FyZ3M7XG5cdFx0XHR9XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ0FyZ3MgPSB1bmRlZmluZWQ7XG5cdFx0fSk7XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRPRE86IEltcHJvdmUgdHlwaW5nIG9mIGNvbW1pdFF1ZXVlIHBhcmFtZXRlclxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlLCBjb21taXRRdWV1ZTogYW55KSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fY29tbWl0ID0gKHZub2RlLCBjb21taXRRdWV1ZSkgPT4ge1xuXHRjb21taXRRdWV1ZS5zb21lKGNvbXBvbmVudCA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZpbHRlcihjYiA9PlxuXHRcdFx0XHRjYi5fdmFsdWUgPyBpbnZva2VFZmZlY3QoY2IpIDogdHJ1ZVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzKSBjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0pO1xuXHRcdFx0Y29tbWl0UXVldWUgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAob2xkQ29tbWl0KSBvbGRDb21taXQodm5vZGUsIGNvbW1pdFF1ZXVlKTtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMudW5tb3VudCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEJlZm9yZVVubW91bnQpIG9sZEJlZm9yZVVubW91bnQodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRsZXQgaGFzRXJyb3JlZDtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChzID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGludm9rZUNsZWFudXAocyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGhhc0Vycm9yZWQgPSBlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGMuX19ob29rcyA9IHVuZGVmaW5lZDtcblx0XHRpZiAoaGFzRXJyb3JlZCkgb3B0aW9ucy5fY2F0Y2hFcnJvcihoYXNFcnJvcmVkLCBjLl92bm9kZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGEgaG9vaydzIHN0YXRlIGZyb20gdGhlIGN1cnJlbnRDb21wb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBnZXRIb29rU3RhdGUoaW5kZXgsIHR5cGUpIHtcblx0aWYgKG9wdGlvbnMuX2hvb2spIHtcblx0XHRvcHRpb25zLl9ob29rKGN1cnJlbnRDb21wb25lbnQsIGluZGV4LCBjdXJyZW50SG9vayB8fCB0eXBlKTtcblx0fVxuXHRjdXJyZW50SG9vayA9IDA7XG5cblx0Ly8gTGFyZ2VseSBpbnNwaXJlZCBieTpcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iL2Y2YmU3MzQ2OGU2ZWM0NmIwZmY1YWEzY2M0YzliYWY3MmEyOTAyNWEvc3JjL2hvb2tzL2NvcmVfaG9va3MubWpzXG5cdC8vICogaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWwta2xlaW4vZnVuY3kuanMvYmxvYi82NTBiZWFhNThjNDNjMzNhNzQ4MjBhM2M5OGIzYzcwNzljZjJlMzMzL3NyYy9yZW5kZXJlci5tanNcblx0Ly8gT3RoZXIgaW1wbGVtZW50YXRpb25zIHRvIGxvb2sgYXQ6XG5cdC8vICogaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL21ub3gwNXFwOFxuXHRjb25zdCBob29rcyA9XG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzIHx8XG5cdFx0KGN1cnJlbnRDb21wb25lbnQuX19ob29rcyA9IHtcblx0XHRcdF9saXN0OiBbXSxcblx0XHRcdF9wZW5kaW5nRWZmZWN0czogW11cblx0XHR9KTtcblxuXHRpZiAoaW5kZXggPj0gaG9va3MuX2xpc3QubGVuZ3RoKSB7XG5cdFx0aG9va3MuX2xpc3QucHVzaCh7fSk7XG5cdH1cblxuXHRyZXR1cm4gaG9va3MuX2xpc3RbaW5kZXhdO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gU1xuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5EaXNwYXRjaDxpbXBvcnQoJy4vaW5kZXgnKS5TdGF0ZVVwZGF0ZXI8Uz4+fSBbaW5pdGlhbFN0YXRlXVxuICogQHJldHVybnMge1tTLCAoc3RhdGU6IFMpID0+IHZvaWRdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG5cdGN1cnJlbnRIb29rID0gMTtcblx0cmV0dXJuIHVzZVJlZHVjZXIoaW52b2tlT3JSZXR1cm4sIGluaXRpYWxTdGF0ZSk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBTXG4gKiBAdGVtcGxhdGUge3Vua25vd259IEFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuUmVkdWNlcjxTLCBBPn0gcmVkdWNlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5EaXNwYXRjaDxpbXBvcnQoJy4vaW5kZXgnKS5TdGF0ZVVwZGF0ZXI8Uz4+fSBpbml0aWFsU3RhdGVcbiAqIEBwYXJhbSB7KGluaXRpYWxTdGF0ZTogYW55KSA9PiB2b2lkfSBbaW5pdF1cbiAqIEByZXR1cm5zIHtbIFMsIChzdGF0ZTogUykgPT4gdm9pZCBdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIGluaXQpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5SZWR1Y2VySG9va1N0YXRlfSAqL1xuXHRjb25zdCBob29rU3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDIpO1xuXHRob29rU3RhdGUuX3JlZHVjZXIgPSByZWR1Y2VyO1xuXHRpZiAoIWhvb2tTdGF0ZS5fY29tcG9uZW50KSB7XG5cdFx0aG9va1N0YXRlLl92YWx1ZSA9IFtcblx0XHRcdCFpbml0ID8gaW52b2tlT3JSZXR1cm4odW5kZWZpbmVkLCBpbml0aWFsU3RhdGUpIDogaW5pdChpbml0aWFsU3RhdGUpLFxuXG5cdFx0XHRhY3Rpb24gPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBob29rU3RhdGUuX25leHRWYWx1ZVxuXHRcdFx0XHRcdD8gaG9va1N0YXRlLl9uZXh0VmFsdWVbMF1cblx0XHRcdFx0XHQ6IGhvb2tTdGF0ZS5fdmFsdWVbMF07XG5cdFx0XHRcdGNvbnN0IG5leHRWYWx1ZSA9IGhvb2tTdGF0ZS5fcmVkdWNlcihjdXJyZW50VmFsdWUsIGFjdGlvbik7XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAhPT0gbmV4dFZhbHVlKSB7XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9uZXh0VmFsdWUgPSBbbmV4dFZhbHVlLCBob29rU3RhdGUuX3ZhbHVlWzFdXTtcblx0XHRcdFx0XHRob29rU3RhdGUuX2NvbXBvbmVudC5zZXRTdGF0ZSh7fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0aG9va1N0YXRlLl9jb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50O1xuXG5cdFx0aWYgKCFjdXJyZW50Q29tcG9uZW50Ll9oYXNTY3VGcm9tSG9va3MpIHtcblx0XHRcdGN1cnJlbnRDb21wb25lbnQuX2hhc1NjdUZyb21Ib29rcyA9IHRydWU7XG5cdFx0XHRsZXQgcHJldlNjdSA9IGN1cnJlbnRDb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlO1xuXHRcdFx0Y29uc3QgcHJldkNXVSA9IGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZTtcblxuXHRcdFx0Ly8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZm9yY2VkIHVwZGF0ZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCB3aWxsXG5cdFx0XHQvLyBub3QgYmUgY2FsbGVkLiBCdXQgd2UgdXNlIHRoYXQgdG8gdXBkYXRlIHRoZSBob29rIHZhbHVlcywgc28gd2Vcblx0XHRcdC8vIG5lZWQgdG8gY2FsbCBpdC5cblx0XHRcdGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIChwLCBzLCBjKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9mb3JjZSkge1xuXHRcdFx0XHRcdGxldCB0bXAgPSBwcmV2U2N1O1xuXHRcdFx0XHRcdC8vIENsZWFyIHRvIGF2b2lkIG90aGVyIHNDVSBob29rcyBmcm9tIGJlaW5nIGNhbGxlZFxuXHRcdFx0XHRcdHByZXZTY3UgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0dXBkYXRlSG9va1N0YXRlKHAsIHMsIGMpO1xuXHRcdFx0XHRcdHByZXZTY3UgPSB0bXA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJldkNXVSkgcHJldkNXVS5jYWxsKHRoaXMsIHAsIHMsIGMpO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gVGhpcyBTQ1UgaGFzIHRoZSBwdXJwb3NlIG9mIGJhaWxpbmcgb3V0IGFmdGVyIHJlcGVhdGVkIHVwZGF0ZXNcblx0XHRcdC8vIHRvIHN0YXRlZnVsIGhvb2tzLlxuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIG5leHQgdmFsdWUgaW4gX25leHRWYWx1ZVswXSBhbmQga2VlcCBkb2luZyB0aGF0IGZvciBhbGxcblx0XHRcdC8vIHN0YXRlIHNldHRlcnMsIGlmIHdlIGhhdmUgbmV4dCBzdGF0ZXMgYW5kXG5cdFx0XHQvLyBhbGwgbmV4dCBzdGF0ZXMgd2l0aGluIGEgY29tcG9uZW50IGVuZCB1cCBiZWluZyBlcXVhbCB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZVxuXHRcdFx0Ly8gd2UgYXJlIHNhZmUgdG8gYmFpbCBvdXQgZm9yIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LlxuXHRcdFx0LyoqXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudFtcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiXX1cblx0XHRcdCAqL1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSAtIFdlIGRvbid0IHVzZSBUUyB0byBkb3dudHJhbnNwaWxlXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW5uZXItZGVjbGFyYXRpb25zXG5cdFx0XHRmdW5jdGlvbiB1cGRhdGVIb29rU3RhdGUocCwgcywgYykge1xuXHRcdFx0XHRpZiAoIWhvb2tTdGF0ZS5fY29tcG9uZW50Ll9faG9va3MpIHJldHVybiB0cnVlO1xuXG5cdFx0XHRcdC8qKiBAdHlwZSB7KHg6IGltcG9ydCgnLi9pbnRlcm5hbCcpLkhvb2tTdGF0ZSkgPT4geCBpcyBpbXBvcnQoJy4vaW50ZXJuYWwnKS5SZWR1Y2VySG9va1N0YXRlfSAqL1xuXHRcdFx0XHRjb25zdCBpc1N0YXRlSG9vayA9IHggPT4gISF4Ll9jb21wb25lbnQ7XG5cdFx0XHRcdGNvbnN0IHN0YXRlSG9va3MgPVxuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZmlsdGVyKGlzU3RhdGVIb29rKTtcblxuXHRcdFx0XHRjb25zdCBhbGxIb29rc0VtcHR5ID0gc3RhdGVIb29rcy5ldmVyeSh4ID0+ICF4Ll9uZXh0VmFsdWUpO1xuXHRcdFx0XHQvLyBXaGVuIHdlIGhhdmUgbm8gdXBkYXRlZCBob29rcyBpbiB0aGUgY29tcG9uZW50IHdlIGludm9rZSB0aGUgcHJldmlvdXMgU0NVIG9yXG5cdFx0XHRcdC8vIHRyYXZlcnNlIHRoZSBWRE9NIHRyZWUgZnVydGhlci5cblx0XHRcdFx0aWYgKGFsbEhvb2tzRW1wdHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldlNjdSA/IHByZXZTY3UuY2FsbCh0aGlzLCBwLCBzLCBjKSA6IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSBjaGVjayB3aGV0aGVyIHdlIGhhdmUgY29tcG9uZW50cyB3aXRoIGEgbmV4dFZhbHVlIHNldCB0aGF0XG5cdFx0XHRcdC8vIGhhdmUgdmFsdWVzIHRoYXQgYXJlbid0IGVxdWFsIHRvIG9uZSBhbm90aGVyIHRoaXMgcHVzaGVzXG5cdFx0XHRcdC8vIHVzIHRvIHVwZGF0ZSBmdXJ0aGVyIGRvd24gdGhlIHRyZWVcblx0XHRcdFx0bGV0IHNob3VsZFVwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHRzdGF0ZUhvb2tzLmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRcdGlmIChob29rSXRlbS5fbmV4dFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBob29rSXRlbS5fdmFsdWVbMF07XG5cdFx0XHRcdFx0XHRob29rSXRlbS5fdmFsdWUgPSBob29rSXRlbS5fbmV4dFZhbHVlO1xuXHRcdFx0XHRcdFx0aG9va0l0ZW0uX25leHRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgIT09IGhvb2tJdGVtLl92YWx1ZVswXSkgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBzaG91bGRVcGRhdGUgfHwgaG9va1N0YXRlLl9jb21wb25lbnQucHJvcHMgIT09IHBcblx0XHRcdFx0XHQ/IHByZXZTY3Vcblx0XHRcdFx0XHRcdD8gcHJldlNjdS5jYWxsKHRoaXMsIHAsIHMsIGMpXG5cdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50Q29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHVwZGF0ZUhvb2tTdGF0ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gaG9va1N0YXRlLl9uZXh0VmFsdWUgfHwgaG9va1N0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdH0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVmZmVjdChjYWxsYmFjaywgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDMpO1xuXHRpZiAoIW9wdGlvbnMuX3NraXBFZmZlY3RzICYmIGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGNhbGxiYWNrO1xuXHRcdHN0YXRlLl9wZW5kaW5nQXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLnB1c2goc3RhdGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA0KTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXG5cdFx0Y3VycmVudENvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goc3RhdGUpO1xuXHR9XG59XG5cbi8qKiBAdHlwZSB7KGluaXRpYWxWYWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG5cdGN1cnJlbnRIb29rID0gNTtcblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4gKHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH0pLCBbXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlZlxuICogQHBhcmFtIHsoKSA9PiBvYmplY3R9IGNyZWF0ZUhhbmRsZVxuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZUhhbmRsZSwgYXJncykge1xuXHRjdXJyZW50SG9vayA9IDY7XG5cdHVzZUxheW91dEVmZmVjdChcblx0XHQoKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIHJlZiA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlZihjcmVhdGVIYW5kbGUoKSk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiByZWYobnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlZikge1xuXHRcdFx0XHRyZWYuY3VycmVudCA9IGNyZWF0ZUhhbmRsZSgpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4gKHJlZi5jdXJyZW50ID0gbnVsbCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRhcmdzID09IG51bGwgPyBhcmdzIDogYXJncy5jb25jYXQocmVmKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gVFxuICogQHBhcmFtIHsoKSA9PiBUfSBmYWN0b3J5XG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge1R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZW1vKGZhY3RvcnksIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5NZW1vSG9va1N0YXRlPFQ+fSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgNyk7XG5cdGlmIChhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBmYWN0b3J5KCk7XG5cdFx0c3RhdGUuX2FyZ3MgPSBhcmdzO1xuXHRcdHN0YXRlLl9mYWN0b3J5ID0gZmFjdG9yeTtcblx0fVxuXG5cdHJldHVybiBzdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA4O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiBjYWxsYmFjaywgYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RDb250ZXh0fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250ZXh0KGNvbnRleHQpIHtcblx0Y29uc3QgcHJvdmlkZXIgPSBjdXJyZW50Q29tcG9uZW50LmNvbnRleHRbY29udGV4dC5faWRdO1xuXHQvLyBXZSBjb3VsZCBza2lwIHRoaXMgY2FsbCBoZXJlLCBidXQgdGhhbiB3ZSdkIG5vdCBjYWxsXG5cdC8vIGBvcHRpb25zLl9ob29rYC4gV2UgbmVlZCB0byBkbyB0aGF0IGluIG9yZGVyIHRvIG1ha2Vcblx0Ly8gdGhlIGRldnRvb2xzIGF3YXJlIG9mIHRoaXMgaG9vay5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db250ZXh0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgOSk7XG5cdC8vIFRoZSBkZXZ0b29scyBuZWVkcyBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgb2JqZWN0IHRvXG5cdC8vIGJlIGFibGUgdG8gcHVsbCBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3ZpZGVyXG5cdC8vIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUuXG5cdHN0YXRlLl9jb250ZXh0ID0gY29udGV4dDtcblx0aWYgKCFwcm92aWRlcikgcmV0dXJuIGNvbnRleHQuX2RlZmF1bHRWYWx1ZTtcblx0Ly8gVGhpcyBpcyBwcm9iYWJseSBub3Qgc2FmZSB0byBjb252ZXJ0IHRvIFwiIVwiXG5cdGlmIChzdGF0ZS5fdmFsdWUgPT0gbnVsbCkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IHRydWU7XG5cdFx0cHJvdmlkZXIuc3ViKGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cdHJldHVybiBwcm92aWRlci5wcm9wcy52YWx1ZTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgY3VzdG9tIGxhYmVsIGZvciBhIGN1c3RvbSBob29rIGZvciB0aGUgZGV2dG9vbHMgcGFuZWxcbiAqIEB0eXBlIHs8VD4odmFsdWU6IFQsIGNiPzogKHZhbHVlOiBUKSA9PiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXIpIHtcblx0aWYgKG9wdGlvbnMudXNlRGVidWdWYWx1ZSkge1xuXHRcdG9wdGlvbnMudXNlRGVidWdWYWx1ZShcblx0XHRcdGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWx1ZSkgOiAvKiogQHR5cGUge2FueX0qLyAodmFsdWUpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KGVycm9yOiB1bmtub3duLCBlcnJvckluZm86IGltcG9ydCgncHJlYWN0JykuRXJyb3JJbmZvKSA9PiB2b2lkfSBjYlxuICogQHJldHVybnMge1t1bmtub3duLCAoKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVycm9yQm91bmRhcnkoY2IpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FcnJvckJvdW5kYXJ5SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTApO1xuXHRjb25zdCBlcnJTdGF0ZSA9IHVzZVN0YXRlKCk7XG5cdHN0YXRlLl92YWx1ZSA9IGNiO1xuXHRpZiAoIWN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2gpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoID0gKGVyciwgZXJyb3JJbmZvKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUuX3ZhbHVlKSBzdGF0ZS5fdmFsdWUoZXJyLCBlcnJvckluZm8pO1xuXHRcdFx0ZXJyU3RhdGVbMV0oZXJyKTtcblx0XHR9O1xuXHR9XG5cdHJldHVybiBbXG5cdFx0ZXJyU3RhdGVbMF0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0ZXJyU3RhdGVbMV0odW5kZWZpbmVkKTtcblx0XHR9XG5cdF07XG59XG5cbi8qKiBAdHlwZSB7KCkgPT4gc3RyaW5nfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLklkSG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTEpO1xuXHRpZiAoIXN0YXRlLl92YWx1ZSkge1xuXHRcdC8vIEdyYWIgZWl0aGVyIHRoZSByb290IG5vZGUgb3IgdGhlIG5lYXJlc3QgYXN5bmMgYm91bmRhcnkgbm9kZS5cblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbC5kJykuVk5vZGV9ICovXG5cdFx0bGV0IHJvb3QgPSBjdXJyZW50Q29tcG9uZW50Ll92bm9kZTtcblx0XHR3aGlsZSAocm9vdCAhPT0gbnVsbCAmJiAhcm9vdC5fbWFzayAmJiByb290Ll9wYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHJvb3QgPSByb290Ll9wYXJlbnQ7XG5cdFx0fVxuXG5cdFx0bGV0IG1hc2sgPSByb290Ll9tYXNrIHx8IChyb290Ll9tYXNrID0gWzAsIDBdKTtcblx0XHRzdGF0ZS5fdmFsdWUgPSAnUCcgKyBtYXNrWzBdICsgJy0nICsgbWFza1sxXSsrO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBBZnRlciBwYWludCBlZmZlY3RzIGNvbnN1bWVyLlxuICovXG5mdW5jdGlvbiBmbHVzaEFmdGVyUGFpbnRFZmZlY3RzKCkge1xuXHRsZXQgY29tcG9uZW50O1xuXHR3aGlsZSAoKGNvbXBvbmVudCA9IGFmdGVyUGFpbnRFZmZlY3RzLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKCFjb21wb25lbnQuX3BhcmVudERvbSB8fCAhY29tcG9uZW50Ll9faG9va3MpIGNvbnRpbnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmxldCBIQVNfUkFGID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PSAnZnVuY3Rpb24nO1xuXG4vKipcbiAqIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgYnJvd3NlciBoYXMgYSBjaGFuY2UgdG8gcGFpbnQgYSBuZXcgZnJhbWUuXG4gKiBEbyB0aGlzIGJ5IGNvbWJpbmluZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKHJBRikgKyBzZXRUaW1lb3V0IHRvIGludm9rZSBhIGNhbGxiYWNrIGFmdGVyXG4gKiB0aGUgbmV4dCBicm93c2VyIGZyYW1lLlxuICpcbiAqIEFsc28sIHNjaGVkdWxlIGEgdGltZW91dCBpbiBwYXJhbGxlbCB0byB0aGUgdGhlIHJBRiB0byBlbnN1cmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWRcbiAqIGV2ZW4gaWYgUkFGIGRvZXNuJ3QgZmlyZSAoZm9yIGV4YW1wbGUgaWYgdGhlIGJyb3dzZXIgdGFiIGlzIG5vdCB2aXNpYmxlKVxuICpcbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYWZ0ZXJOZXh0RnJhbWUoY2FsbGJhY2spIHtcblx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0aWYgKEhBU19SQUYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG5cdFx0c2V0VGltZW91dChjYWxsYmFjayk7XG5cdH07XG5cdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGRvbmUsIFJBRl9USU1FT1VUKTtcblxuXHRsZXQgcmFmO1xuXHRpZiAoSEFTX1JBRikge1xuXHRcdHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb25lKTtcblx0fVxufVxuXG4vLyBOb3RlOiBpZiBzb21lb25lIHVzZWQgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSxcbi8vIHRoZW4gZWZmZWN0cyB3aWxsIEFMV0FZUyBydW4gb24gdGhlIE5FWFQgZnJhbWUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUsIGluY3VycmluZyBhIH4xNm1zIGRlbGF5LlxuLy8gUGVyaGFwcyB0aGlzIGlzIG5vdCBzdWNoIGEgYmlnIGRlYWwuXG4vKipcbiAqIFNjaGVkdWxlIGFmdGVyUGFpbnRFZmZlY3RzIGZsdXNoIGFmdGVyIHRoZSBicm93c2VyIHBhaW50c1xuICogQHBhcmFtIHtudW1iZXJ9IG5ld1F1ZXVlTGVuZ3RoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJQYWludChuZXdRdWV1ZUxlbmd0aCkge1xuXHRpZiAobmV3UXVldWVMZW5ndGggPT09IDEgfHwgcHJldlJhZiAhPT0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRwcmV2UmFmID0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdFx0KHByZXZSYWYgfHwgYWZ0ZXJOZXh0RnJhbWUpKGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VDbGVhbnVwKGhvb2spIHtcblx0Ly8gQSBob29rIGNsZWFudXAgY2FuIGludHJvZHVjZSBhIGNhbGwgdG8gcmVuZGVyIHdoaWNoIGNyZWF0ZXMgYSBuZXcgcm9vdCwgdGhpcyB3aWxsIGNhbGwgb3B0aW9ucy52bm9kZVxuXHQvLyBhbmQgbW92ZSB0aGUgY3VycmVudENvbXBvbmVudCBhd2F5LlxuXHRjb25zdCBjb21wID0gY3VycmVudENvbXBvbmVudDtcblx0bGV0IGNsZWFudXAgPSBob29rLl9jbGVhbnVwO1xuXHRpZiAodHlwZW9mIGNsZWFudXAgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGhvb2suX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cdFx0Y2xlYW51cCgpO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogSW52b2tlIGEgSG9vaydzIGVmZmVjdFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VFZmZlY3QoaG9vaykge1xuXHQvLyBBIGhvb2sgY2FsbCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRob29rLl9jbGVhbnVwID0gaG9vay5fdmFsdWUoKTtcblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3duW119IG9sZEFyZ3NcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBuZXdBcmdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gYXJnc0NoYW5nZWQob2xkQXJncywgbmV3QXJncykge1xuXHRyZXR1cm4gKFxuXHRcdCFvbGRBcmdzIHx8XG5cdFx0b2xkQXJncy5sZW5ndGggIT09IG5ld0FyZ3MubGVuZ3RoIHx8XG5cdFx0bmV3QXJncy5zb21lKChhcmcsIGluZGV4KSA9PiBhcmcgIT09IG9sZEFyZ3NbaW5kZXhdKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7QXJnfSBhcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiBhbnl9IGZcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGludm9rZU9yUmV0dXJuKGFyZywgZikge1xuXHRyZXR1cm4gdHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJyA/IGYoYXJnKSA6IGY7XG59XG4iLCAiLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcblx0cmV0dXJuIC8qKiBAdHlwZSB7TyAmIFB9ICovIChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIGhhdmUgYSBkaWZmZXJlbnQgc2hhcGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhhLCBiKSB7XG5cdGZvciAobGV0IGkgaW4gYSkgaWYgKGkgIT09ICdfX3NvdXJjZScgJiYgIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiBhW2ldICE9PSBiW2ldKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlXG4gKiBAcGFyYW0geyp9IHhcbiAqIEBwYXJhbSB7Kn0geVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4LCB5KSB7XG5cdHJldHVybiAoeCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENvbXBvbmVudCBjbGFzcyB3aXRoIGEgcHJlZGVmaW5lZCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwLCBjKSB7XG5cdHRoaXMucHJvcHMgPSBwO1xuXHR0aGlzLmNvbnRleHQgPSBjO1xufVxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG4vLyBTb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBjaGVjayBpZiB0aGlzIHByb3BlcnR5IGlzIHByZXNlbnRcblB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIE1lbW9pemUgYSBjb21wb25lbnQsIHNvIHRoYXQgaXQgb25seSB1cGRhdGVzIHdoZW4gdGhlIHByb3BzIGFjdHVhbGx5IGhhdmVcbiAqIGNoYW5nZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkga25vd24gYXMgYFJlYWN0LnB1cmVgLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH0gYyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICogQHBhcmFtIHsocHJldjogb2JqZWN0LCBuZXh0OiBvYmplY3QpID0+IGJvb2xlYW59IFtjb21wYXJlcl0gQ3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vKGMsIGNvbXBhcmVyKSB7XG5cdGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShuZXh0UHJvcHMpIHtcblx0XHRsZXQgcmVmID0gdGhpcy5wcm9wcy5yZWY7XG5cdFx0bGV0IHVwZGF0ZVJlZiA9IHJlZiA9PSBuZXh0UHJvcHMucmVmO1xuXHRcdGlmICghdXBkYXRlUmVmICYmIHJlZikge1xuXHRcdFx0cmVmLmNhbGwgPyByZWYobnVsbCkgOiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBhcmVyKSB7XG5cdFx0XHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgbmV4dFByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gIWNvbXBhcmVyKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgIXVwZGF0ZVJlZjtcblx0fVxuXG5cdGZ1bmN0aW9uIE1lbW9lZChwcm9wcykge1xuXHRcdHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gc2hvdWxkVXBkYXRlO1xuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGMsIHByb3BzKTtcblx0fVxuXHRNZW1vZWQuZGlzcGxheU5hbWUgPSAnTWVtbygnICsgKGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lKSArICcpJztcblx0TWVtb2VkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblx0TWVtb2VkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRyZXR1cm4gTWVtb2VkO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG5sZXQgb2xkRGlmZkhvb2sgPSBvcHRpb25zLl9kaWZmO1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0aWYgKHZub2RlLnR5cGUgJiYgdm5vZGUudHlwZS5fZm9yd2FyZGVkICYmIHZub2RlLnJlZikge1xuXHRcdHZub2RlLnByb3BzLnJlZiA9IHZub2RlLnJlZjtcblx0XHR2bm9kZS5yZWYgPSBudWxsO1xuXHR9XG5cdGlmIChvbGREaWZmSG9vaykgb2xkRGlmZkhvb2sodm5vZGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IFJFQUNUX0ZPUldBUkRfU1lNQk9MID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRTeW1ib2wuZm9yICYmXG5cdFx0U3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSkgfHxcblx0MHhmNDc7XG5cbi8qKlxuICogUGFzcyByZWYgZG93biB0byBhIGNoaWxkLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIGxpYnJhcmllcyB3aXRoIEhPQ3MgdGhhdFxuICogd3JhcCBjb21wb25lbnRzLiBVc2luZyBgZm9yd2FyZFJlZmAgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGEgcmVmZXJlbmNlXG4gKiBvZiB0aGUgd3JhcHBlZCBjb21wb25lbnQgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIHdyYXBwZXIgaXRzZWxmLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Gb3J3YXJkRm59IGZuXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmKGZuKSB7XG5cdGZ1bmN0aW9uIEZvcndhcmRlZChwcm9wcykge1xuXHRcdGlmICghKCdyZWYnIGluIHByb3BzKSkgcmV0dXJuIGZuKHByb3BzLCBudWxsKTtcblxuXHRcdGxldCByZWYgPSBwcm9wcy5yZWY7XG5cdFx0ZGVsZXRlIHByb3BzLnJlZjtcblx0XHRjb25zdCByZXN1bHQgPSBmbihwcm9wcywgcmVmKTtcblx0XHRwcm9wcy5yZWYgPSByZWY7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIG1vYngtcmVhY3QgY2hlY2tzIGZvciB0aGlzIGJlaW5nIHByZXNlbnRcblx0Rm9yd2FyZGVkLiQkdHlwZW9mID0gUkVBQ1RfRk9SV0FSRF9TWU1CT0w7XG5cdC8vIG1vYngtcmVhY3QgaGVhdmlseSByZWxpZXMgb24gaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblx0Ly8gSXQgZXhwZWN0cyBhbiBvYmplY3QgaGVyZSB3aXRoIGEgYHJlbmRlcmAgcHJvcGVydHksXG5cdC8vIGFuZCBwcm90b3R5cGUucmVuZGVyIHdpbGwgZmFpbC4gV2l0aG91dCB0aGlzXG5cdC8vIG1vYngtcmVhY3QgdGhyb3dzLlxuXHRGb3J3YXJkZWQucmVuZGVyID0gRm9yd2FyZGVkO1xuXG5cdEZvcndhcmRlZC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IEZvcndhcmRlZC5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0Rm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gJ0ZvcndhcmRSZWYoJyArIChmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lKSArICcpJztcblx0cmV0dXJuIEZvcndhcmRlZDtcbn1cbiIsICJpbXBvcnQgeyB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuXG5jb25zdCBtYXBGbiA9IChjaGlsZHJlbiwgZm4pID0+IHtcblx0aWYgKGNoaWxkcmVuID09IG51bGwpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gdG9DaGlsZEFycmF5KHRvQ2hpbGRBcnJheShjaGlsZHJlbikubWFwKGZuKSk7XG59O1xuXG4vLyBUaGlzIEFQSSBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGZvciBQcmVhY3QsIHNvIGl0J3MgYmFzaWNhbGx5IHBhc3N0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IENoaWxkcmVuID0ge1xuXHRtYXA6IG1hcEZuLFxuXHRmb3JFYWNoOiBtYXBGbixcblx0Y291bnQoY2hpbGRyZW4pIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gPyB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pLmxlbmd0aCA6IDA7XG5cdH0sXG5cdG9ubHkoY2hpbGRyZW4pIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gdG9DaGlsZEFycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAobm9ybWFsaXplZC5sZW5ndGggIT09IDEpIHRocm93ICdDaGlsZHJlbi5vbmx5Jztcblx0XHRyZXR1cm4gbm9ybWFsaXplZFswXTtcblx0fSxcblx0dG9BcnJheTogdG9DaGlsZEFycmF5XG59O1xuIiwgImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCwgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi4vLi4vc3JjL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBvbGRDYXRjaEVycm9yID0gb3B0aW9ucy5fY2F0Y2hFcnJvcjtcbm9wdGlvbnMuX2NhdGNoRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IsIG5ld1ZOb2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKSB7XG5cdGlmIChlcnJvci50aGVuKSB7XG5cdFx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdFx0bGV0IGNvbXBvbmVudDtcblx0XHRsZXQgdm5vZGUgPSBuZXdWTm9kZTtcblxuXHRcdGZvciAoOyAodm5vZGUgPSB2bm9kZS5fcGFyZW50KTsgKSB7XG5cdFx0XHRpZiAoKGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQpICYmIGNvbXBvbmVudC5fY2hpbGREaWRTdXNwZW5kKSB7XG5cdFx0XHRcdGlmIChuZXdWTm9kZS5fZG9tID09IG51bGwpIHtcblx0XHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBvbGRWTm9kZS5fY2hpbGRyZW47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gRG9uJ3QgY2FsbCBvbGRDYXRjaEVycm9yIGlmIHdlIGZvdW5kIGEgU3VzcGVuc2Vcblx0XHRcdFx0cmV0dXJuIGNvbXBvbmVudC5fY2hpbGREaWRTdXNwZW5kKGVycm9yLCBuZXdWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdG9sZENhdGNoRXJyb3IoZXJyb3IsIG5ld1ZOb2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKTtcbn07XG5cbmNvbnN0IG9sZFVubW91bnQgPSBvcHRpb25zLnVubW91bnQ7XG5vcHRpb25zLnVubW91bnQgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdGNvbnN0IGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50Ll9vblJlc29sdmUpIHtcblx0XHRjb21wb25lbnQuX29uUmVzb2x2ZSgpO1xuXHR9XG5cblx0Ly8gaWYgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBoeWRyYXRpbmdcblx0Ly8gbW9zdCBsaWtlbHkgaXQgaXMgYmVjYXVzZSB0aGUgY29tcG9uZW50IGlzIHN1c3BlbmRlZFxuXHQvLyB3ZSBzZXQgdGhlIHZub2RlLnR5cGUgYXMgYG51bGxgIHNvIHRoYXQgaXQgaXMgbm90IGEgdHlwZW9mIGZ1bmN0aW9uXG5cdC8vIHNvIHRoZSB1bm1vdW50IHdpbGwgcmVtb3ZlIHRoZSB2bm9kZS5fZG9tXG5cdGlmIChjb21wb25lbnQgJiYgdm5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKSB7XG5cdFx0dm5vZGUudHlwZSA9IG51bGw7XG5cdH1cblxuXHRpZiAob2xkVW5tb3VudCkgb2xkVW5tb3VudCh2bm9kZSk7XG59O1xuXG5mdW5jdGlvbiBkZXRhY2hlZENsb25lKHZub2RlLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKSB7XG5cdGlmICh2bm9kZSkge1xuXHRcdGlmICh2bm9kZS5fY29tcG9uZW50ICYmIHZub2RlLl9jb21wb25lbnQuX19ob29rcykge1xuXHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzLl9saXN0LmZvckVhY2goZWZmZWN0ID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBlZmZlY3QuX2NsZWFudXAgPT0gJ2Z1bmN0aW9uJykgZWZmZWN0Ll9jbGVhbnVwKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzID0gbnVsbDtcblx0XHR9XG5cblx0XHR2bm9kZSA9IGFzc2lnbih7fSwgdm5vZGUpO1xuXHRcdGlmICh2bm9kZS5fY29tcG9uZW50ICE9IG51bGwpIHtcblx0XHRcdGlmICh2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPT09IHBhcmVudERvbSkge1xuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPSBkZXRhY2hlZFBhcmVudDtcblx0XHRcdH1cblx0XHRcdHZub2RlLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0ZGV0YWNoZWRDbG9uZShjaGlsZCwgZGV0YWNoZWRQYXJlbnQsIHBhcmVudERvbSlcblx0XHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU9yaWdpbmFsKHZub2RlLCBkZXRhY2hlZFBhcmVudCwgb3JpZ2luYWxQYXJlbnQpIHtcblx0aWYgKHZub2RlICYmIG9yaWdpbmFsUGFyZW50KSB7XG5cdFx0dm5vZGUuX29yaWdpbmFsID0gbnVsbDtcblx0XHR2bm9kZS5fY2hpbGRyZW4gPVxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuICYmXG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4ubWFwKGNoaWxkID0+XG5cdFx0XHRcdHJlbW92ZU9yaWdpbmFsKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgb3JpZ2luYWxQYXJlbnQpXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQpIHtcblx0XHRcdGlmICh2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPT09IGRldGFjaGVkUGFyZW50KSB7XG5cdFx0XHRcdGlmICh2bm9kZS5fZG9tKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxQYXJlbnQuYXBwZW5kQ2hpbGQodm5vZGUuX2RvbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fZm9yY2UgPSB0cnVlO1xuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPSBvcmlnaW5hbFBhcmVudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8vIGhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXNcbmV4cG9ydCBmdW5jdGlvbiBTdXNwZW5zZSgpIHtcblx0Ly8gd2UgZG8gbm90IGNhbGwgc3VwZXIgaGVyZSB0byBnb2xmIHNvbWUgYnl0ZXMuLi5cblx0dGhpcy5fcGVuZGluZ1N1c3BlbnNpb25Db3VudCA9IDA7XG5cdHRoaXMuX3N1c3BlbmRlcnMgPSBudWxsO1xuXHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsO1xufVxuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZS5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG5cbi8qKlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fVxuICogQHBhcmFtIHtQcm9taXNlfSBwcm9taXNlIFRoZSB0aHJvd24gcHJvbWlzZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZTxhbnksIGFueT59IHN1c3BlbmRpbmdWTm9kZSBUaGUgc3VzcGVuZGluZyBjb21wb25lbnRcbiAqL1xuU3VzcGVuc2UucHJvdG90eXBlLl9jaGlsZERpZFN1c3BlbmQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3VzcGVuZGluZ1ZOb2RlKSB7XG5cdGNvbnN0IHN1c3BlbmRpbmdDb21wb25lbnQgPSBzdXNwZW5kaW5nVk5vZGUuX2NvbXBvbmVudDtcblxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fSAqL1xuXHRjb25zdCBjID0gdGhpcztcblxuXHRpZiAoYy5fc3VzcGVuZGVycyA9PSBudWxsKSB7XG5cdFx0Yy5fc3VzcGVuZGVycyA9IFtdO1xuXHR9XG5cdGMuX3N1c3BlbmRlcnMucHVzaChzdXNwZW5kaW5nQ29tcG9uZW50KTtcblxuXHRjb25zdCByZXNvbHZlID0gc3VzcGVuZGVkKGMuX3Zub2RlKTtcblxuXHRsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcblx0Y29uc3Qgb25SZXNvbHZlZCA9ICgpID0+IHtcblx0XHRpZiAocmVzb2x2ZWQpIHJldHVybjtcblxuXHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRzdXNwZW5kaW5nQ29tcG9uZW50Ll9vblJlc29sdmUgPSBudWxsO1xuXG5cdFx0aWYgKHJlc29sdmUpIHtcblx0XHRcdHJlc29sdmUob25TdXNwZW5zaW9uQ29tcGxldGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvblN1c3BlbnNpb25Db21wbGV0ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzdXNwZW5kaW5nQ29tcG9uZW50Ll9vblJlc29sdmUgPSBvblJlc29sdmVkO1xuXG5cdGNvbnN0IG9uU3VzcGVuc2lvbkNvbXBsZXRlID0gKCkgPT4ge1xuXHRcdGlmICghLS1jLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50KSB7XG5cdFx0XHQvLyBJZiB0aGUgc3VzcGVuc2lvbiB3YXMgZHVyaW5nIGh5ZHJhdGlvbiB3ZSBkb24ndCBuZWVkIHRvIHJlc3RvcmUgdGhlXG5cdFx0XHQvLyBzdXNwZW5kZWQgY2hpbGRyZW4gaW50byB0aGUgX2NoaWxkcmVuIGFycmF5XG5cdFx0XHRpZiAoYy5zdGF0ZS5fc3VzcGVuZGVkKSB7XG5cdFx0XHRcdGNvbnN0IHN1c3BlbmRlZFZOb2RlID0gYy5zdGF0ZS5fc3VzcGVuZGVkO1xuXHRcdFx0XHRjLl92bm9kZS5fY2hpbGRyZW5bMF0gPSByZW1vdmVPcmlnaW5hbChcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRcdFx0c3VzcGVuZGVkVk5vZGUuX2NvbXBvbmVudC5fb3JpZ2luYWxQYXJlbnREb21cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsKSB9KTtcblxuXHRcdFx0bGV0IHN1c3BlbmRlZDtcblx0XHRcdHdoaWxlICgoc3VzcGVuZGVkID0gYy5fc3VzcGVuZGVycy5wb3AoKSkpIHtcblx0XHRcdFx0c3VzcGVuZGVkLmZvcmNlVXBkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBXZSBkbyBub3Qgc2V0IGBzdXNwZW5kZWQ6IHRydWVgIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB3ZSB3YW50IHRoZSBhY3R1YWwgbWFya3VwXG5cdCAqIHRvIHJlbWFpbiBvbiBzY3JlZW4gYW5kIGh5ZHJhdGUgaXQgd2hlbiB0aGUgc3VzcGVuc2UgYWN0dWFsbHkgZ2V0cyByZXNvbHZlZC5cblx0ICogV2hpbGUgaW4gbm9uLWh5ZHJhdGlvbiBjYXNlcyB0aGUgdXN1YWwgZmFsbGJhY2sgLT4gY29tcG9uZW50IGZsb3cgd291bGQgb2Njb3VyLlxuXHQgKi9cblx0aWYgKFxuXHRcdCFjLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50KysgJiZcblx0XHQhKHN1c3BlbmRpbmdWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpXG5cdCkge1xuXHRcdGMuc2V0U3RhdGUoeyBfc3VzcGVuZGVkOiAoYy5fZGV0YWNoT25OZXh0UmVuZGVyID0gYy5fdm5vZGUuX2NoaWxkcmVuWzBdKSB9KTtcblx0fVxuXHRwcm9taXNlLnRoZW4ob25SZXNvbHZlZCwgb25SZXNvbHZlZCk7XG59O1xuXG5TdXNwZW5zZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdHRoaXMuX3N1c3BlbmRlcnMgPSBbXTtcbn07XG5cbi8qKlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5TdXNwZW5zZUNvbXBvbmVudFtcInByb3BzXCJdfSBwcm9wc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5TdXNwZW5zZVN0YXRlfSBzdGF0ZVxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzLCBzdGF0ZSkge1xuXHRpZiAodGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyKSB7XG5cdFx0Ly8gV2hlbiB0aGUgU3VzcGVuc2UncyBfdm5vZGUgd2FzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGNyZWF0ZVZOb2RlXG5cdFx0Ly8gKGkuZS4gZHVlIHRvIGEgc2V0U3RhdGUgZnVydGhlciB1cCBpbiB0aGUgdHJlZSlcblx0XHQvLyBpdCdzIF9jaGlsZHJlbiBwcm9wIGlzIG51bGwsIGluIHRoaXMgY2FzZSB3ZSBcImZvcmdldFwiIGFib3V0IHRoZSBwYXJrZWQgdm5vZGVzIHRvIGRldGFjaFxuXHRcdGlmICh0aGlzLl92bm9kZS5fY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGRldGFjaGVkUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRjb25zdCBkZXRhY2hlZENvbXBvbmVudCA9IHRoaXMuX3Zub2RlLl9jaGlsZHJlblswXS5fY29tcG9uZW50O1xuXHRcdFx0dGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdID0gZGV0YWNoZWRDbG9uZShcblx0XHRcdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyLFxuXHRcdFx0XHRkZXRhY2hlZFBhcmVudCxcblx0XHRcdFx0KGRldGFjaGVkQ29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbSA9IGRldGFjaGVkQ29tcG9uZW50Ll9wYXJlbnREb20pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG5cdH1cblxuXHQvLyBXcmFwIGZhbGxiYWNrIHRyZWUgaW4gYSBWTm9kZSB0aGF0IHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nIG1hcmtlZCBhcyBhYm9ydGluZyBtaWQtaHlkcmF0aW9uOlxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSAqL1xuXHRjb25zdCBmYWxsYmFjayA9XG5cdFx0c3RhdGUuX3N1c3BlbmRlZCAmJiBjcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCBwcm9wcy5mYWxsYmFjayk7XG5cdGlmIChmYWxsYmFjaykgZmFsbGJhY2suX2ZsYWdzICY9IH5NT0RFX0hZRFJBVEU7XG5cblx0cmV0dXJuIFtcblx0XHRjcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCBzdGF0ZS5fc3VzcGVuZGVkID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuKSxcblx0XHRmYWxsYmFja1xuXHRdO1xufTtcblxuLyoqXG4gKiBDaGVja3MgYW5kIGNhbGxzIHRoZSBwYXJlbnQgY29tcG9uZW50J3MgX3N1c3BlbmRlZCBtZXRob2QsIHBhc3NpbmcgaW4gdGhlXG4gKiBzdXNwZW5kZWQgdm5vZGUuIFRoaXMgaXMgYSB3YXkgZm9yIGEgcGFyZW50IChlLmcuIFN1c3BlbnNlTGlzdCkgdG8gZ2V0IG5vdGlmaWVkXG4gKiB0aGF0IG9uZSBvZiBpdHMgY2hpbGRyZW4vZGVzY2VuZGFudHMgc3VzcGVuZGVkLlxuICpcbiAqIFRoZSBwYXJlbnQgTUFZIHJldHVybiBhIGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgd2lsbCBnZXQgY2FsbGVkIHdoZW4gdGhlXG4gKiBzdXNwZW5zaW9uIHJlc29sdmVzLCBub3RpZnlpbmcgdGhlIHBhcmVudCBvZiB0aGUgZmFjdC5cbiAqIE1vcmVvdmVyLCB0aGUgY2FsbGJhY2sgZ2V0cyBmdW5jdGlvbiBgdW5zdXNwZW5kYCBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc29sdmVkXG4gKiBjaGlsZCBkZXNjZW5kYW50IHdpbGwgbm90IGFjdHVhbGx5IGdldCB1bnN1c3BlbmRlZCB1bnRpbCBgdW5zdXNwZW5kYCBnZXRzIGNhbGxlZC5cbiAqIFRoaXMgaXMgYSB3YXkgZm9yIHRoZSBwYXJlbnQgdG8gZGVsYXkgdW5zdXNwZW5kaW5nLlxuICpcbiAqIElmIHRoZSBwYXJlbnQgZG9lcyBub3QgcmV0dXJuIGEgY2FsbGJhY2sgdGhlbiB0aGUgcmVzb2x2ZWQgdm5vZGVcbiAqIGdldHMgdW5zdXNwZW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBpdCByZXNvbHZlcy5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZVxuICogQHJldHVybnMgeygodW5zdXNwZW5kOiAoKSA9PiB2b2lkKSA9PiB2b2lkKT99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXNwZW5kZWQodm5vZGUpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdGxldCBjb21wb25lbnQgPSB2bm9kZS5fcGFyZW50Ll9jb21wb25lbnQ7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50Ll9zdXNwZW5kZWQgJiYgY29tcG9uZW50Ll9zdXNwZW5kZWQodm5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF6eShsb2FkZXIpIHtcblx0bGV0IHByb207XG5cdGxldCBjb21wb25lbnQ7XG5cdGxldCBlcnJvcjtcblxuXHRmdW5jdGlvbiBMYXp5KHByb3BzKSB7XG5cdFx0aWYgKCFwcm9tKSB7XG5cdFx0XHRwcm9tID0gbG9hZGVyKCk7XG5cdFx0XHRwcm9tLnRoZW4oXG5cdFx0XHRcdGV4cG9ydHMgPT4ge1xuXHRcdFx0XHRcdGNvbXBvbmVudCA9IGV4cG9ydHMuZGVmYXVsdCB8fCBleHBvcnRzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlID0+IHtcblx0XHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBvbmVudCkge1xuXHRcdFx0dGhyb3cgcHJvbTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHByb3BzKTtcblx0fVxuXG5cdExhenkuZGlzcGxheU5hbWUgPSAnTGF6eSc7XG5cdExhenkuX2ZvcndhcmRlZCA9IHRydWU7XG5cdHJldHVybiBMYXp5O1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCwgdG9DaGlsZEFycmF5IH0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7IHN1c3BlbmRlZCB9IGZyb20gJy4vc3VzcGVuc2UuanMnO1xuXG4vLyBJbmRleGVzIHRvIGxpbmtlZCBsaXN0IG5vZGVzIChub2RlcyBhcmUgc3RvcmVkIGFzIGFycmF5cyB0byBzYXZlIGJ5dGVzKS5cbmNvbnN0IFNVU1BFTkRFRF9DT1VOVCA9IDA7XG5jb25zdCBSRVNPTFZFRF9DT1VOVCA9IDE7XG5jb25zdCBORVhUX05PREUgPSAyO1xuXG4vLyBIYXZpbmcgY3VzdG9tIGluaGVyaXRhbmNlIGluc3RlYWQgb2YgYSBjbGFzcyBoZXJlIHNhdmVzIGEgbG90IG9mIGJ5dGVzLlxuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlTGlzdCgpIHtcblx0dGhpcy5fbmV4dCA9IG51bGw7XG5cdHRoaXMuX21hcCA9IG51bGw7XG59XG5cbi8vIE1hcmsgb25lIG9mIGNoaWxkJ3MgZWFybGllciBzdXNwZW5zaW9ucyBhcyByZXNvbHZlZC5cbi8vIFNvbWUgcGVuZGluZyBjYWxsYmFja3MgbWF5IGJlY29tZSBjYWxsYWJsZSBkdWUgdG8gdGhpc1xuLy8gKGUuZy4gdGhlIGxhc3Qgc3VzcGVuZGVkIGRlc2NlbmRhbnQgZ2V0cyByZXNvbHZlZCB3aGVuXG4vLyByZXZlYWxPcmRlciA9PT0gJ3RvZ2V0aGVyJykuIFByb2Nlc3MgdGhvc2UgY2FsbGJhY2tzIGFzIHdlbGwuXG5jb25zdCByZXNvbHZlID0gKGxpc3QsIGNoaWxkLCBub2RlKSA9PiB7XG5cdGlmICgrK25vZGVbUkVTT0xWRURfQ09VTlRdID09PSBub2RlW1NVU1BFTkRFRF9DT1VOVF0pIHtcblx0XHQvLyBUaGUgbnVtYmVyIGEgY2hpbGQgKG9yIGFueSBvZiBpdHMgZGVzY2VuZGFudHMpIGhhcyBiZWVuIHN1c3BlbmRlZFxuXHRcdC8vIG1hdGNoZXMgdGhlIG51bWJlciBvZiB0aW1lcyBpdCdzIGJlZW4gcmVzb2x2ZWQuIFRoZXJlZm9yZSB3ZVxuXHRcdC8vIG1hcmsgdGhlIGNoaWxkIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQgYnkgZGVsZXRpbmcgaXQgZnJvbSAuX21hcC5cblx0XHQvLyBUaGlzIGlzIHVzZWQgdG8gZmlndXJlIG91dCB3aGVuICphbGwqIGNoaWxkcmVuIGhhdmUgYmVlbiBjb21wbGV0ZWx5XG5cdFx0Ly8gcmVzb2x2ZWQgd2hlbiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInLlxuXHRcdGxpc3QuX21hcC5kZWxldGUoY2hpbGQpO1xuXHR9XG5cblx0Ly8gSWYgcmV2ZWFsT3JkZXIgaXMgZmFsc3kgdGhlbiB3ZSBjYW4gZG8gYW4gZWFybHkgZXhpdCwgYXMgdGhlXG5cdC8vIGNhbGxiYWNrcyB3b24ndCBnZXQgcXVldWVkIGluIHRoZSBub2RlIGFueXdheS5cblx0Ly8gSWYgcmV2ZWFsT3JkZXIgaXMgJ3RvZ2V0aGVyJyB0aGVuIGFsc28gZG8gYW4gZWFybHkgZXhpdFxuXHQvLyBpZiBhbGwgc3VzcGVuZGVkIGRlc2NlbmRhbnRzIGhhdmUgbm90IHlldCBiZWVuIHJlc29sdmVkLlxuXHRpZiAoXG5cdFx0IWxpc3QucHJvcHMucmV2ZWFsT3JkZXIgfHxcblx0XHQobGlzdC5wcm9wcy5yZXZlYWxPcmRlclswXSA9PT0gJ3QnICYmIGxpc3QuX21hcC5zaXplKVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBXYWxrIHRoZSBjdXJyZW50bHkgc3VzcGVuZGVkIGNoaWxkcmVuIGluIG9yZGVyLCBjYWxsaW5nIHRoZWlyXG5cdC8vIHN0b3JlZCBjYWxsYmFja3Mgb24gdGhlIHdheS4gU3RvcCBpZiB3ZSBlbmNvdW50ZXIgYSBjaGlsZCB0aGF0XG5cdC8vIGhhcyBub3QgYmVlbiBjb21wbGV0ZWx5IHJlc29sdmVkIHlldC5cblx0bm9kZSA9IGxpc3QuX25leHQ7XG5cdHdoaWxlIChub2RlKSB7XG5cdFx0d2hpbGUgKG5vZGUubGVuZ3RoID4gMykge1xuXHRcdFx0bm9kZS5wb3AoKSgpO1xuXHRcdH1cblx0XHRpZiAobm9kZVtSRVNPTFZFRF9DT1VOVF0gPCBub2RlW1NVU1BFTkRFRF9DT1VOVF0pIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRsaXN0Ll9uZXh0ID0gbm9kZSA9IG5vZGVbTkVYVF9OT0RFXTtcblx0fVxufTtcblxuLy8gVGhpbmdzIHdlIGRvIGhlcmUgdG8gc2F2ZSBzb21lIGJ5dGVzIGJ1dCBhcmUgbm90IHByb3BlciBKUyBpbmhlcml0YW5jZTpcbi8vIC0gY2FsbCBgbmV3IENvbXBvbmVudCgpYCBhcyB0aGUgcHJvdG90eXBlXG4vLyAtIGRvIG5vdCBzZXQgYFN1c3BlbnNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcmAgdG8gYFN1c3BlbnNlYFxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZS5fc3VzcGVuZGVkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG5cdGNvbnN0IGxpc3QgPSB0aGlzO1xuXHRjb25zdCBkZWxlZ2F0ZWQgPSBzdXNwZW5kZWQobGlzdC5fdm5vZGUpO1xuXG5cdGxldCBub2RlID0gbGlzdC5fbWFwLmdldChjaGlsZCk7XG5cdG5vZGVbU1VTUEVOREVEX0NPVU5UXSsrO1xuXG5cdHJldHVybiB1bnN1c3BlbmQgPT4ge1xuXHRcdGNvbnN0IHdyYXBwZWRVbnN1c3BlbmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWxpc3QucHJvcHMucmV2ZWFsT3JkZXIpIHtcblx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRoZSB1bmRlZmluZWQgKGZhbHN5KSByZXZlYWxPcmRlciwgYXMgdGhlcmVcblx0XHRcdFx0Ly8gaXMgbm8gbmVlZCB0byBjb29yZGluYXRlIGEgc3BlY2lmaWMgb3JkZXIgb3IgdW5zdXNwZW5kcy5cblx0XHRcdFx0dW5zdXNwZW5kKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlLnB1c2godW5zdXNwZW5kKTtcblx0XHRcdFx0cmVzb2x2ZShsaXN0LCBjaGlsZCwgbm9kZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoZGVsZWdhdGVkKSB7XG5cdFx0XHRkZWxlZ2F0ZWQod3JhcHBlZFVuc3VzcGVuZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXBwZWRVbnN1c3BlbmQoKTtcblx0XHR9XG5cdH07XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IGNoaWxkcmVuID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKTtcblx0aWYgKHByb3BzLnJldmVhbE9yZGVyICYmIHByb3BzLnJldmVhbE9yZGVyWzBdID09PSAnYicpIHtcblx0XHQvLyBJZiBvcmRlciA9PT0gJ2JhY2t3YXJkcycgKG9yLCB3ZWxsLCBhbnl0aGluZyBzdGFydGluZyB3aXRoIGEgJ2InKVxuXHRcdC8vIHRoZW4gZmxpcCB0aGUgY2hpbGQgbGlzdCBhcm91bmQgc28gdGhhdCB0aGUgbGFzdCBjaGlsZCB3aWxsIGJlXG5cdFx0Ly8gdGhlIGZpcnN0IGluIHRoZSBsaW5rZWQgbGlzdC5cblx0XHRjaGlsZHJlbi5yZXZlcnNlKCk7XG5cdH1cblx0Ly8gQnVpbGQgdGhlIGxpbmtlZCBsaXN0LiBJdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGluIHJldmVyc2Ugb3JkZXJcblx0Ly8gc28gdGhhdCBgX25leHRgIHBvaW50cyB0byB0aGUgZmlyc3QgbGlua2VkIGxpc3Qgbm9kZSB0byBiZSByZXNvbHZlZC5cblx0Zm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aDsgaS0tOyApIHtcblx0XHQvLyBDcmVhdGUgYSBuZXcgbGlua2VkIGxpc3Qgbm9kZSBhcyBhbiBhcnJheSBvZiBmb3JtOlxuXHRcdC8vIFx0W3N1c3BlbmRlZF9jb3VudCwgcmVzb2x2ZWRfY291bnQsIG5leHRfbm9kZV1cblx0XHQvLyB3aGVyZSBzdXNwZW5kZWRfY291bnQgYW5kIHJlc29sdmVkX2NvdW50IGFyZSBudW1lcmljIGNvdW50ZXJzIGZvclxuXHRcdC8vIGtlZXBpbmcgdHJhY2sgaG93IG1hbnkgdGltZXMgYSBub2RlIGhhcyBiZWVuIHN1c3BlbmRlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0Ly9cblx0XHQvLyBOb3RlIHRoYXQgc3VzcGVuZGVkX2NvdW50IHN0YXJ0cyBmcm9tIDEgaW5zdGVhZCBvZiAwLCBzbyB3ZSBjYW4gYmxvY2tcblx0XHQvLyBwcm9jZXNzaW5nIGNhbGxiYWNrcyB1bnRpbCBjb21wb25lbnREaWRNb3VudCBoYXMgYmVlbiBjYWxsZWQuIEluIGEgc2Vuc2Vcblx0XHQvLyBub2RlIGlzIHN1c3BlbmRlZCBhdCBsZWFzdCB1bnRpbCBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZCFcblx0XHQvL1xuXHRcdC8vIFBlbmRpbmcgY2FsbGJhY2tzIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBub2RlOlxuXHRcdC8vIFx0W3N1c3BlbmRlZF9jb3VudCwgcmVzb2x2ZWRfY291bnQsIG5leHRfbm9kZSwgY2FsbGJhY2tfMCwgY2FsbGJhY2tfMSwgLi4uXVxuXHRcdHRoaXMuX21hcC5zZXQoY2hpbGRyZW5baV0sICh0aGlzLl9uZXh0ID0gWzEsIDAsIHRoaXMuX25leHRdKSk7XG5cdH1cblx0cmV0dXJuIHByb3BzLmNoaWxkcmVuO1xufTtcblxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPVxuXHRTdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuXHRcdC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2hpbGRyZW4gYWZ0ZXIgbW91bnRpbmcgZm9yIHR3byByZWFzb25zOlxuXHRcdC8vIDEuIEFzIGVhY2ggbm9kZVtTVVNQRU5ERURfQ09VTlRdIHN0YXJ0cyBmcm9tIDEsIHRoaXMgaXRlcmF0aW9uIGluY3JlYXNlc1xuXHRcdC8vICAgIGVhY2ggbm9kZVtSRUxFQVNFRF9DT1VOVF0gYnkgMSwgdGhlcmVmb3JlIGJhbGFuY2luZyB0aGUgY291bnRlcnMuXG5cdFx0Ly8gICAgVGhlIG5vZGVzIGNhbiBub3cgYmUgY29tcGxldGVseSBjb25zdW1lZCBmcm9tIHRoZSBsaW5rZWQgbGlzdC5cblx0XHQvLyAyLiBIYW5kbGUgbm9kZXMgdGhhdCBtaWdodCBoYXZlIGdvdHRlbiByZXNvbHZlZCBiZXR3ZWVuIHJlbmRlciBhbmRcblx0XHQvLyAgICBjb21wb25lbnREaWRNb3VudC5cblx0XHR0aGlzLl9tYXAuZm9yRWFjaCgobm9kZSwgY2hpbGQpID0+IHtcblx0XHRcdHJlc29sdmUodGhpcywgY2hpbGQsIG5vZGUpO1xuXHRcdH0pO1xuXHR9O1xuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgcmVuZGVyIH0gZnJvbSAncHJlYWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vc3JjL2luZGV4JykuUmVuZGVyYWJsZVByb3BzPHsgY29udGV4dDogYW55IH0+fSBwcm9wc1xuICovXG5mdW5jdGlvbiBDb250ZXh0UHJvdmlkZXIocHJvcHMpIHtcblx0dGhpcy5nZXRDaGlsZENvbnRleHQgPSAoKSA9PiBwcm9wcy5jb250ZXh0O1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogUG9ydGFsIGNvbXBvbmVudFxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gcHJvcHNcbiAqXG4gKiBUT0RPOiB1c2UgY3JlYXRlUm9vdCgpIGluc3RlYWQgb2YgZmFrZSByb290XG4gKi9cbmZ1bmN0aW9uIFBvcnRhbChwcm9wcykge1xuXHRjb25zdCBfdGhpcyA9IHRoaXM7XG5cdGxldCBjb250YWluZXIgPSBwcm9wcy5fY29udGFpbmVyO1xuXG5cdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuXHRcdHJlbmRlcihudWxsLCBfdGhpcy5fdGVtcCk7XG5cdFx0X3RoaXMuX3RlbXAgPSBudWxsO1xuXHRcdF90aGlzLl9jb250YWluZXIgPSBudWxsO1xuXHR9O1xuXG5cdC8vIFdoZW4gd2UgY2hhbmdlIGNvbnRhaW5lciB3ZSBzaG91bGQgY2xlYXIgb3VyIG9sZCBjb250YWluZXIgYW5kXG5cdC8vIGluZGljYXRlIGEgbmV3IG1vdW50LlxuXHRpZiAoX3RoaXMuX2NvbnRhaW5lciAmJiBfdGhpcy5fY29udGFpbmVyICE9PSBjb250YWluZXIpIHtcblx0XHRfdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHR9XG5cblx0aWYgKCFfdGhpcy5fdGVtcCkge1xuXHRcdF90aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cblx0XHQvLyBDcmVhdGUgYSBmYWtlIERPTSBwYXJlbnQgbm9kZSB0aGF0IG1hbmFnZXMgYSBzdWJzZXQgb2YgYGNvbnRhaW5lcmAncyBjaGlsZHJlbjpcblx0XHRfdGhpcy5fdGVtcCA9IHtcblx0XHRcdG5vZGVUeXBlOiAxLFxuXHRcdFx0cGFyZW50Tm9kZTogY29udGFpbmVyLFxuXHRcdFx0Y2hpbGROb2RlczogW10sXG5cdFx0XHRjb250YWluczogKCkgPT4gdHJ1ZSxcblx0XHRcdGFwcGVuZENoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG5cdFx0XHR9LFxuXHRcdFx0aW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmUpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRyZW1vdmVDaGlsZChjaGlsZCkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKSA+Pj4gMSwgMSk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBSZW5kZXIgb3VyIHdyYXBwaW5nIGVsZW1lbnQgaW50byB0ZW1wLlxuXHRyZW5kZXIoXG5cdFx0Y3JlYXRlRWxlbWVudChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogX3RoaXMuY29udGV4dCB9LCBwcm9wcy5fdm5vZGUpLFxuXHRcdF90aGlzLl90ZW1wXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFBvcnRhbGAgdG8gY29udGludWUgcmVuZGVyaW5nIHRoZSB2bm9kZSB0cmVlIGF0IGEgZGlmZmVyZW50IERPTSBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgRE9NIG5vZGUgdG8gY29udGludWUgcmVuZGVyaW5nIGluIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9ydGFsKHZub2RlLCBjb250YWluZXIpIHtcblx0Y29uc3QgZWwgPSBjcmVhdGVFbGVtZW50KFBvcnRhbCwgeyBfdm5vZGU6IHZub2RlLCBfY29udGFpbmVyOiBjb250YWluZXIgfSk7XG5cdGVsLmNvbnRhaW5lckluZm8gPSBjb250YWluZXI7XG5cdHJldHVybiBlbDtcbn1cbiIsICJpbXBvcnQge1xuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRoeWRyYXRlIGFzIHByZWFjdEh5ZHJhdGUsXG5cdG9wdGlvbnMsXG5cdHRvQ2hpbGRBcnJheSxcblx0Q29tcG9uZW50XG59IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQge1xuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZSxcblx0dXNlRWZmZWN0LFxuXHR1c2VJZCxcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VNZW1vLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VSZWYsXG5cdHVzZVN0YXRlXG59IGZyb20gJ3ByZWFjdC9ob29rcyc7XG5pbXBvcnQge1xuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHR1c2VUcmFuc2l0aW9uXG59IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG5cdDB4ZWFjNztcblxuY29uc3QgQ0FNRUxfUFJPUFMgPVxuXHQvXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS87XG5jb25zdCBPTl9BTkkgPSAvXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvO1xuY29uc3QgQ0FNRUxfUkVQTEFDRSA9IC9bQS1aMC05XS9nO1xuY29uc3QgSVNfRE9NID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLy8gSW5wdXQgdHlwZXMgZm9yIHdoaWNoIG9uY2hhbmdlIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIG9uaW5wdXQuXG4vLyB0eXBlPVwiZmlsZXxjaGVja2JveHxyYWRpb1wiLCBwbHVzIFwicmFuZ2VcIiBpbiBJRTExLlxuLy8gKElFMTEgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCwgd2hpY2ggd2UgdXNlIGhlcmUgdG8gdHVybiBgcmFkYCBpbnRvIGByYWAgd2hpY2ggbWF0Y2hlcyBcInJhbmdlXCIpXG5jb25zdCBvbkNoYW5nZUlucHV0VHlwZSA9IHR5cGUgPT5cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09ICdzeW1ib2wnXG5cdFx0PyAvZmlsfGNoZXxyYWQvXG5cdFx0OiAvZmlsfGNoZXxyYS9cblx0KS50ZXN0KHR5cGUpO1xuXG4vLyBTb21lIGxpYnJhcmllcyBsaWtlIGByZWFjdC12aXJ0dWFsaXplZGAgZXhwbGljaXRseSBjaGVjayBmb3IgdGhpcy5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG4vLyBgVU5TQUZFXypgIGxpZmVjeWNsZSBob29rc1xuLy8gUHJlYWN0IG9ubHkgZXZlciBpbnZva2VzIHRoZSB1bnByZWZpeGVkIG1ldGhvZHMuXG4vLyBIZXJlIHdlIHByb3ZpZGUgYSBiYXNlIFwiZmFsbGJhY2tcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbGxzIGFueSBkZWZpbmVkIFVOU0FGRV8gcHJlZml4ZWQgbWV0aG9kLlxuLy8gLSBJZiBhIGNvbXBvbmVudCBkZWZpbmVzIGl0cyBvd24gYGNvbXBvbmVudERpZE1vdW50KClgIChpbmNsdWRpbmcgdmlhIGRlZmluZVByb3BlcnR5KSwgdXNlIHRoYXQuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgYFVOU0FGRV9jb21wb25lbnREaWRNb3VudCgpYCwgYGNvbXBvbmVudERpZE1vdW50YCBpcyB0aGUgYWxpYXMgZ2V0dGVyL3NldHRlci5cbi8vIC0gSWYgYW55dGhpbmcgYXNzaWducyB0byBhbiBgVU5TQUZFXypgIHByb3BlcnR5LCB0aGUgYXNzaWdubWVudCBpcyBmb3J3YXJkZWQgdG8gdGhlIHVucHJlZml4ZWQgcHJvcGVydHkuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMTk0MVxuW1xuXHQnY29tcG9uZW50V2lsbE1vdW50Jyxcblx0J2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuXHQnY29tcG9uZW50V2lsbFVwZGF0ZSdcbl0uZm9yRWFjaChrZXkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwga2V5LCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzWydVTlNBRkVfJyArIGtleV07XG5cdFx0fSxcblx0XHRzZXQodikge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogdlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vKipcbiAqIFByb3h5IHJlbmRlcigpIHNpbmNlIFJlYWN0IHJldHVybnMgYSBDb21wb25lbnQgcmVmZXJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGUgVk5vZGUgdHJlZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gcGFyZW50IERPTSBub2RlIHRvIHJlbmRlciB2bm9kZSB0cmVlIGludG9cbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2NhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHJlbmRlcmluZ1xuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudCB8IG51bGx9IFRoZSByb290IGNvbXBvbmVudCByZWZlcmVuY2Ugb3IgbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnQsIGNhbGxiYWNrKSB7XG5cdC8vIFJlYWN0IGRlc3Ryb3lzIGFueSBleGlzdGluZyBET00gbm9kZXMsIHNlZSAjMTcyN1xuXHQvLyAuLi5idXQgb25seSBvbiB0aGUgZmlyc3QgcmVuZGVyLCBzZWUgIzE4Mjhcblx0aWYgKHBhcmVudC5fY2hpbGRyZW4gPT0gbnVsbCkge1xuXHRcdHBhcmVudC50ZXh0Q29udGVudCA9ICcnO1xuXHR9XG5cblx0cHJlYWN0UmVuZGVyKHZub2RlLCBwYXJlbnQpO1xuXHRpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG5cblx0cmV0dXJuIHZub2RlID8gdm5vZGUuX2NvbXBvbmVudCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnQsIGNhbGxiYWNrKSB7XG5cdHByZWFjdEh5ZHJhdGUodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxubGV0IG9sZEV2ZW50SG9vayA9IG9wdGlvbnMuZXZlbnQ7XG5vcHRpb25zLmV2ZW50ID0gZSA9PiB7XG5cdGlmIChvbGRFdmVudEhvb2spIGUgPSBvbGRFdmVudEhvb2soZSk7XG5cblx0ZS5wZXJzaXN0ID0gZW1wdHk7XG5cdGUuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBpc1Byb3BhZ2F0aW9uU3RvcHBlZDtcblx0ZS5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBpc0RlZmF1bHRQcmV2ZW50ZWQ7XG5cdHJldHVybiAoZS5uYXRpdmVFdmVudCA9IGUpO1xufTtcblxuZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5mdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpIHtcblx0cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlO1xufVxuXG5mdW5jdGlvbiBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG5cdHJldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ7XG59XG5cbmNvbnN0IGNsYXNzTmFtZURlc2NyaXB0b3JOb25FbnVtYmVyYWJsZSA9IHtcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzLmNsYXNzO1xuXHR9XG59O1xuXG5mdW5jdGlvbiBoYW5kbGVEb21WTm9kZSh2bm9kZSkge1xuXHRsZXQgcHJvcHMgPSB2bm9kZS5wcm9wcyxcblx0XHR0eXBlID0gdm5vZGUudHlwZSxcblx0XHRub3JtYWxpemVkUHJvcHMgPSB7fTtcblxuXHRsZXQgaXNOb25EYXNoZWRUeXBlID0gdHlwZS5pbmRleE9mKCctJykgPT09IC0xO1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSB7XG5cdFx0bGV0IHZhbHVlID0gcHJvcHNbaV07XG5cblx0XHRpZiAoXG5cdFx0XHQoaSA9PT0gJ3ZhbHVlJyAmJiAnZGVmYXVsdFZhbHVlJyBpbiBwcm9wcyAmJiB2YWx1ZSA9PSBudWxsKSB8fFxuXHRcdFx0Ly8gRW11bGF0ZSBSZWFjdCdzIGJlaGF2aW9yIG9mIG5vdCByZW5kZXJpbmcgdGhlIGNvbnRlbnRzIG9mIG5vc2NyaXB0IHRhZ3Mgb24gdGhlIGNsaWVudC5cblx0XHRcdChJU19ET00gJiYgaSA9PT0gJ2NoaWxkcmVuJyAmJiB0eXBlID09PSAnbm9zY3JpcHQnKSB8fFxuXHRcdFx0aSA9PT0gJ2NsYXNzJyB8fFxuXHRcdFx0aSA9PT0gJ2NsYXNzTmFtZSdcblx0XHQpIHtcblx0XHRcdC8vIFNraXAgYXBwbHlpbmcgdmFsdWUgaWYgaXQgaXMgbnVsbC91bmRlZmluZWQgYW5kIHdlIGFscmVhZHkgc2V0XG5cdFx0XHQvLyBhIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGxldCBsb3dlckNhc2VkID0gaS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmIChpID09PSAnZGVmYXVsdFZhbHVlJyAmJiAndmFsdWUnIGluIHByb3BzICYmIHByb3BzLnZhbHVlID09IG51bGwpIHtcblx0XHRcdC8vIGBkZWZhdWx0VmFsdWVgIGlzIHRyZWF0ZWQgYXMgYSBmYWxsYmFjayBgdmFsdWVgIHdoZW4gYSB2YWx1ZSBwcm9wIGlzIHByZXNlbnQgYnV0IG51bGwvdW5kZWZpbmVkLlxuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgZm9yIEVsZW1lbnRzIHdpdGggbm8gdmFsdWUgcHJvcCBpcyB0aGUgc2FtZSBhcyB0aGUgRE9NIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eS5cblx0XHRcdGkgPSAndmFsdWUnO1xuXHRcdH0gZWxzZSBpZiAoaSA9PT0gJ2Rvd25sb2FkJyAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gQ2FsbGluZyBgc2V0QXR0cmlidXRlYCB3aXRoIGEgdHJ1dGh5IHZhbHVlIHdpbGwgbGVhZCB0byBpdCBiZWluZ1xuXHRcdFx0Ly8gcGFzc2VkIGFzIGEgc3RyaW5naWZpZWQgdmFsdWUsIGUuZy4gYGRvd25sb2FkPVwidHJ1ZVwiYC4gUmVhY3Rcblx0XHRcdC8vIGNvbnZlcnRzIGl0IHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkLCBvdGhlcndpc2UgdGhlIGF0dHJpYnV0ZVxuXHRcdFx0Ly8gdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBmaWxlIG5hbWUgYW5kIHRoZSBmaWxlIHdpbGwgYmUgY2FsbGVkXG5cdFx0XHQvLyBcInRydWVcIiB1cG9uIGRvd25sb2FkaW5nIGl0LlxuXHRcdFx0dmFsdWUgPSAnJztcblx0XHR9IGVsc2UgaWYgKGxvd2VyQ2FzZWQgPT09ICd0cmFuc2xhdGUnICYmIHZhbHVlID09PSAnbm8nKSB7XG5cdFx0XHR2YWx1ZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZFswXSA9PT0gJ28nICYmIGxvd2VyQ2FzZWRbMV0gPT09ICduJykge1xuXHRcdFx0aWYgKGxvd2VyQ2FzZWQgPT09ICdvbmRvdWJsZWNsaWNrJykge1xuXHRcdFx0XHRpID0gJ29uZGJsY2xpY2snO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0bG93ZXJDYXNlZCA9PT0gJ29uY2hhbmdlJyAmJlxuXHRcdFx0XHQodHlwZSA9PT0gJ2lucHV0JyB8fCB0eXBlID09PSAndGV4dGFyZWEnKSAmJlxuXHRcdFx0XHQhb25DaGFuZ2VJbnB1dFR5cGUocHJvcHMudHlwZSlcblx0XHRcdCkge1xuXHRcdFx0XHRsb3dlckNhc2VkID0gaSA9ICdvbmlucHV0Jztcblx0XHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uZm9jdXMnKSB7XG5cdFx0XHRcdGkgPSAnb25mb2N1c2luJztcblx0XHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uYmx1cicpIHtcblx0XHRcdFx0aSA9ICdvbmZvY3Vzb3V0Jztcblx0XHRcdH0gZWxzZSBpZiAoT05fQU5JLnRlc3QoaSkpIHtcblx0XHRcdFx0aSA9IGxvd2VyQ2FzZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc05vbkRhc2hlZFR5cGUgJiYgQ0FNRUxfUFJPUFMudGVzdChpKSkge1xuXHRcdFx0aSA9IGkucmVwbGFjZShDQU1FTF9SRVBMQUNFLCAnLSQmJykudG9Mb3dlckNhc2UoKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHR2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VwcG9ydCBmb3Igb25JbnB1dCBhbmQgb25DaGFuZ2UsIHNlZSAjMzU2MVxuXHRcdC8vIGlmIHdlIGhhdmUgYW4gb25pbnB1dCBwcm9wIGFscmVhZHkgY2hhbmdlIGl0IHRvIG9uaW5wdXRDYXB0dXJlXG5cdFx0aWYgKGxvd2VyQ2FzZWQgPT09ICdvbmlucHV0Jykge1xuXHRcdFx0aSA9IGxvd2VyQ2FzZWQ7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldKSB7XG5cdFx0XHRcdGkgPSAnb25pbnB1dENhcHR1cmUnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHZhbHVlO1xuXHR9XG5cblx0Ly8gQWRkIHN1cHBvcnQgZm9yIGFycmF5IHNlbGVjdCB2YWx1ZXM6IDxzZWxlY3QgbXVsdGlwbGUgdmFsdWU9e1tdfSAvPlxuXHRpZiAoXG5cdFx0dHlwZSA9PSAnc2VsZWN0JyAmJlxuXHRcdG5vcm1hbGl6ZWRQcm9wcy5tdWx0aXBsZSAmJlxuXHRcdEFycmF5LmlzQXJyYXkobm9ybWFsaXplZFByb3BzLnZhbHVlKVxuXHQpIHtcblx0XHQvLyBmb3JFYWNoKCkgYWx3YXlzIHJldHVybnMgdW5kZWZpbmVkLCB3aGljaCB3ZSBhYnVzZSBoZXJlIHRvIHVuc2V0IHRoZSB2YWx1ZSBwcm9wLlxuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKSAhPSAtMTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIEFkZGluZyBzdXBwb3J0IGZvciBkZWZhdWx0VmFsdWUgaW4gc2VsZWN0IHRhZ1xuXHRpZiAodHlwZSA9PSAnc2VsZWN0JyAmJiBub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcblx0XHRub3JtYWxpemVkUHJvcHMudmFsdWUgPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZvckVhY2goY2hpbGQgPT4ge1xuXHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wcy5tdWx0aXBsZSkge1xuXHRcdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0bm9ybWFsaXplZFByb3BzLmRlZmF1bHRWYWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKSAhPSAtMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlID09IGNoaWxkLnByb3BzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHByb3BzLmNsYXNzICYmICFwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBwcm9wcy5jbGFzcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRub3JtYWxpemVkUHJvcHMsXG5cdFx0XHQnY2xhc3NOYW1lJyxcblx0XHRcdGNsYXNzTmFtZURlc2NyaXB0b3JOb25FbnVtYmVyYWJsZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICYmICFwcm9wcy5jbGFzcykge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IG5vcm1hbGl6ZWRQcm9wcy5jbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWU7XG5cdH0gZWxzZSBpZiAocHJvcHMuY2xhc3MgJiYgcHJvcHMuY2xhc3NOYW1lKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fVxuXG5cdHZub2RlLnByb3BzID0gbm9ybWFsaXplZFByb3BzO1xufVxuXG5sZXQgb2xkVk5vZGVIb29rID0gb3B0aW9ucy52bm9kZTtcbm9wdGlvbnMudm5vZGUgPSB2bm9kZSA9PiB7XG5cdC8vIG9ubHkgbm9ybWFsaXplIHByb3BzIG9uIEVsZW1lbnQgbm9kZXNcblx0aWYgKHR5cGVvZiB2bm9kZS50eXBlID09PSAnc3RyaW5nJykge1xuXHRcdGhhbmRsZURvbVZOb2RlKHZub2RlKTtcblx0fVxuXG5cdHZub2RlLiQkdHlwZW9mID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG5cdGlmIChvbGRWTm9kZUhvb2spIG9sZFZOb2RlSG9vayh2bm9kZSk7XG59O1xuXG4vLyBPbmx5IG5lZWRlZCBmb3IgcmVhY3QtcmVsYXlcbmxldCBjdXJyZW50Q29tcG9uZW50O1xuY29uc3Qgb2xkQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5fcmVuZGVyO1xub3B0aW9ucy5fcmVuZGVyID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIHtcblx0XHRvbGRCZWZvcmVSZW5kZXIodm5vZGUpO1xuXHR9XG5cdGN1cnJlbnRDb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50O1xufTtcblxuY29uc3Qgb2xkRGlmZmVkID0gb3B0aW9ucy5kaWZmZWQ7XG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLmRpZmZlZCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHRpZiAob2xkRGlmZmVkKSB7XG5cdFx0b2xkRGlmZmVkKHZub2RlKTtcblx0fVxuXG5cdGNvbnN0IHByb3BzID0gdm5vZGUucHJvcHM7XG5cdGNvbnN0IGRvbSA9IHZub2RlLl9kb207XG5cblx0aWYgKFxuXHRcdGRvbSAhPSBudWxsICYmXG5cdFx0dm5vZGUudHlwZSA9PT0gJ3RleHRhcmVhJyAmJlxuXHRcdCd2YWx1ZScgaW4gcHJvcHMgJiZcblx0XHRwcm9wcy52YWx1ZSAhPT0gZG9tLnZhbHVlXG5cdCkge1xuXHRcdGRvbS52YWx1ZSA9IHByb3BzLnZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLnZhbHVlO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG59O1xuXG4vLyBUaGlzIGlzIGEgdmVyeSB2ZXJ5IHByaXZhdGUgaW50ZXJuYWwgZnVuY3Rpb24gZm9yIFJlYWN0IGl0XG4vLyBpcyB1c2VkIHRvIHNvcnQtb2YgZG8gcnVudGltZSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbmV4cG9ydCBjb25zdCBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IHtcblx0UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjoge1xuXHRcdGN1cnJlbnQ6IHtcblx0XHRcdHJlYWRDb250ZXh0KGNvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRDb21wb25lbnQuX2dsb2JhbENvbnRleHRbY29udGV4dC5faWRdLnByb3BzLnZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdHVzZUNhbGxiYWNrLFxuXHRcdFx0dXNlQ29udGV4dCxcblx0XHRcdHVzZURlYnVnVmFsdWUsXG5cdFx0XHR1c2VEZWZlcnJlZFZhbHVlLFxuXHRcdFx0dXNlRWZmZWN0LFxuXHRcdFx0dXNlSWQsXG5cdFx0XHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHRcdFx0dXNlSW5zZXJ0aW9uRWZmZWN0LFxuXHRcdFx0dXNlTGF5b3V0RWZmZWN0LFxuXHRcdFx0dXNlTWVtbyxcblx0XHRcdC8vIHVzZU11dGFibGVTb3VyY2UsIC8vIGV4cGVyaW1lbnRhbC1vbmx5IGFuZCByZXBsYWNlZCBieSB1U0VTLCBsaWtlbHkgbm90IHdvcnRoIHN1cHBvcnRpbmdcblx0XHRcdHVzZVJlZHVjZXIsXG5cdFx0XHR1c2VSZWYsXG5cdFx0XHR1c2VTdGF0ZSxcblx0XHRcdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRcdFx0dXNlVHJhbnNpdGlvblxuXHRcdH1cblx0fVxufTtcbiIsICJpbXBvcnQge1xuXHRjcmVhdGVFbGVtZW50LFxuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRjbG9uZUVsZW1lbnQgYXMgcHJlYWN0Q2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdENvbXBvbmVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0RnJhZ21lbnRcbn0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7XG5cdHVzZVN0YXRlLFxuXHR1c2VJZCxcblx0dXNlUmVkdWNlcixcblx0dXNlRWZmZWN0LFxuXHR1c2VMYXlvdXRFZmZlY3QsXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWVcbn0gZnJvbSAncHJlYWN0L2hvb2tzJztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICcuL1B1cmVDb21wb25lbnQnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4vbWVtbyc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAnLi9mb3J3YXJkUmVmJztcbmltcG9ydCB7IENoaWxkcmVuIH0gZnJvbSAnLi9DaGlsZHJlbic7XG5pbXBvcnQgeyBTdXNwZW5zZSwgbGF6eSB9IGZyb20gJy4vc3VzcGVuc2UnO1xuaW1wb3J0IHsgU3VzcGVuc2VMaXN0IH0gZnJvbSAnLi9zdXNwZW5zZS1saXN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJy4vcG9ydGFscyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge1xuXHRoeWRyYXRlLFxuXHRyZW5kZXIsXG5cdFJFQUNUX0VMRU1FTlRfVFlQRSxcblx0X19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURcbn0gZnJvbSAnLi9yZW5kZXInO1xuXG5jb25zdCB2ZXJzaW9uID0gJzE4LjMuMSc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxuLyoqXG4gKiBMZWdhY3kgdmVyc2lvbiBvZiBjcmVhdGVFbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnQgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBlbGVtZW50IGlzIGEgdmFsaWQgKHApcmVhY3Qgbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpIHtcblx0cmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBlbGVtZW50IGlzIGEgRnJhZ21lbnQgbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRnJhZ21lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC50eXBlID09PSBGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBNZW1vIG5vZGUuXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc01lbW8oZWxlbWVudCkge1xuXHRyZXR1cm4gKFxuXHRcdCEhZWxlbWVudCAmJlxuXHRcdCEhZWxlbWVudC5kaXNwbGF5TmFtZSAmJlxuXHRcdCh0eXBlb2YgZWxlbWVudC5kaXNwbGF5TmFtZSA9PT0gJ3N0cmluZycgfHxcblx0XHRcdGVsZW1lbnQuZGlzcGxheU5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpICYmXG5cdFx0ZWxlbWVudC5kaXNwbGF5TmFtZS5zdGFydHNXaXRoKCdNZW1vKCcpXG5cdCk7XG59XG5cbi8qKlxuICogV3JhcCBgY2xvbmVFbGVtZW50YCB0byBhYm9ydCBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgZWxlbWVudCBhbmQgYXBwbHlcbiAqIGFsbCB2bm9kZSBub3JtYWxpemF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IGVsZW1lbnQgVGhlIHZub2RlIHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgdG8gYWRkIHdoZW4gY2xvbmluZ1xuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRDaGlsZHJlbj59IHJlc3QgT3B0aW9uYWwgY29tcG9uZW50IGNoaWxkcmVuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50KSB7XG5cdGlmICghaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRyZXR1cm4gcHJlYWN0Q2xvbmVFbGVtZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY29tcG9uZW50IHRyZWUgZnJvbSB0aGUgRE9NLCBpbmNsdWRpbmcgc3RhdGUgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBjb250YWluZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuXHRpZiAoY29udGFpbmVyLl9jaGlsZHJlbikge1xuXHRcdHByZWFjdFJlbmRlcihudWxsLCBjb250YWluZXIpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1hdGNoaW5nIERPTSBub2RlIGZvciBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnQgfCBudWxsfVxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnQpIHtcblx0cmV0dXJuIChcblx0XHQoY29tcG9uZW50ICYmXG5cdFx0XHQoY29tcG9uZW50LmJhc2UgfHwgKGNvbXBvbmVudC5ub2RlVHlwZSA9PT0gMSAmJiBjb21wb25lbnQpKSkgfHxcblx0XHRudWxsXG5cdCk7XG59XG5cbi8qKlxuICogRGVwcmVjYXRlZCB3YXkgdG8gY29udHJvbCBiYXRjaGVkIHJlbmRlcmluZyBpbnNpZGUgdGhlIHJlY29uY2lsZXIsIGJ1dCB3ZVxuICogYWxyZWFkeSBzY2hlZHVsZSBpbiBiYXRjaGVzIGluc2lkZSBvdXIgcmVuZGVyaW5nIGNvZGVcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiB2b2lkfSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSB1cGRhdGVkXG4gKiBAcGFyYW0ge0FyZ30gW2FyZ10gT3B0aW9uYWwgYXJndW1lbnQgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFja1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5jb25zdCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIEluIFJlYWN0LCBgZmx1c2hTeW5jYCBmbHVzaGVzIHRoZSBlbnRpcmUgdHJlZSBhbmQgZm9yY2VzIGEgcmVyZW5kZXIuIEl0J3NcbiAqIGltcGxtZW50ZWQgaGVyZSBhcyBhIG5vLW9wLlxuICogQHRlbXBsYXRlIEFyZ1xuICogQHRlbXBsYXRlIFJlc3VsdFxuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IFJlc3VsdH0gY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zIGJlZm9yZSB0aGUgZmx1c2hcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBmbHVzaFN5bmMgPSAoY2FsbGJhY2ssIGFyZykgPT4gY2FsbGJhY2soYXJnKTtcblxuLyoqXG4gKiBTdHJpY3QgTW9kZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gUHJlYWN0LCBzbyB3ZSBwcm92aWRlIGEgc3RhbmQtaW4gZm9yIGl0XG4gKiB0aGF0IGp1c3QgcmVuZGVycyBpdHMgY2hpbGRyZW4gd2l0aG91dCBpbXBvc2luZyBhbnkgcmVzdHJpY3Rpb25zLlxuICovXG5jb25zdCBTdHJpY3RNb2RlID0gRnJhZ21lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2IpIHtcblx0Y2IoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURlZmVycmVkVmFsdWUodmFsKSB7XG5cdHJldHVybiB2YWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCkge1xuXHRyZXR1cm4gW2ZhbHNlLCBzdGFydFRyYW5zaXRpb25dO1xufVxuXG4vLyBUT0RPOiBpbiB0aGVvcnkgdGhpcyBzaG91bGQgYmUgZG9uZSBhZnRlciBhIFZOb2RlIGlzIGRpZmZlZCBhcyB3ZSB3YW50IHRvIGluc2VydFxuLy8gc3R5bGVzLy4uLiBiZWZvcmUgaXQgYXR0YWNoZXNcbmV4cG9ydCBjb25zdCB1c2VJbnNlcnRpb25FZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5cbi8vIGNvbXBhdCB0byByZWFjdC1pc1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuXG4vKipcbiAqIFRoaXMgaXMgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYWluL3BhY2thZ2VzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NyYy91c2VTeW5jRXh0ZXJuYWxTdG9yZVNoaW1DbGllbnQuanMjTDg0XG4gKiBvbiBhIGhpZ2ggbGV2ZWwgdGhpcyBjdXRzIG91dCB0aGUgd2FybmluZ3MsIC4uLiBhbmQgYXR0ZW1wdHMgYSBzbWFsbGVyIGltcGxlbWVudGF0aW9uXG4gKiBAdHlwZWRlZiB7eyBfdmFsdWU6IGFueTsgX2dldFNuYXBzaG90OiAoKSA9PiBhbnkgfX0gU3RvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcblx0Y29uc3QgdmFsdWUgPSBnZXRTbmFwc2hvdCgpO1xuXG5cdC8qKlxuXHQgKiBAdHlwZWRlZiB7eyBfaW5zdGFuY2U6IFN0b3JlIH19IFN0b3JlUmVmXG5cdCAqIEB0eXBlIHtbU3RvcmVSZWYsIChzdG9yZTogU3RvcmVSZWYpID0+IHZvaWRdfVxuXHQgKi9cblx0Y29uc3QgW3sgX2luc3RhbmNlIH0sIGZvcmNlVXBkYXRlXSA9IHVzZVN0YXRlKHtcblx0XHRfaW5zdGFuY2U6IHsgX3ZhbHVlOiB2YWx1ZSwgX2dldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9XG5cdH0pO1xuXG5cdHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG5cdFx0X2luc3RhbmNlLl92YWx1ZSA9IHZhbHVlO1xuXHRcdF9pbnN0YW5jZS5fZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcblxuXHRcdGlmIChkaWRTbmFwc2hvdENoYW5nZShfaW5zdGFuY2UpKSB7XG5cdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHR9XG5cdH0sIFtzdWJzY3JpYmUsIHZhbHVlLCBnZXRTbmFwc2hvdF0pO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sIFtzdWJzY3JpYmVdKTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBAdHlwZSB7KGluc3Q6IFN0b3JlKSA9PiBib29sZWFufSAqL1xuZnVuY3Rpb24gZGlkU25hcHNob3RDaGFuZ2UoaW5zdCkge1xuXHRjb25zdCBsYXRlc3RHZXRTbmFwc2hvdCA9IGluc3QuX2dldFNuYXBzaG90O1xuXHRjb25zdCBwcmV2VmFsdWUgPSBpbnN0Ll92YWx1ZTtcblx0dHJ5IHtcblx0XHRjb25zdCBuZXh0VmFsdWUgPSBsYXRlc3RHZXRTbmFwc2hvdCgpO1xuXHRcdHJldHVybiAhaXMocHJldlZhbHVlLCBuZXh0VmFsdWUpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCAqIGZyb20gJ3ByZWFjdC9ob29rcyc7XG5leHBvcnQge1xuXHR2ZXJzaW9uLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRoeWRyYXRlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRjcmVhdGVQb3J0YWwsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRGcmFnbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGlzRnJhZ21lbnQsXG5cdGlzTWVtbyxcblx0ZmluZERPTU5vZGUsXG5cdENvbXBvbmVudCxcblx0UHVyZUNvbXBvbmVudCxcblx0bWVtbyxcblx0Zm9yd2FyZFJlZixcblx0Zmx1c2hTeW5jLFxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5cdHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLFxuXHRTdHJpY3RNb2RlLFxuXHRTdXNwZW5zZSxcblx0U3VzcGVuc2VMaXN0LFxuXHRsYXp5LFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufTtcblxuLy8gUmVhY3QgY29waWVzIHRoZSBuYW1lZCBleHBvcnRzIHRvIHRoZSBkZWZhdWx0IG9uZS5cbmV4cG9ydCBkZWZhdWx0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlSW5zZXJ0aW9uRWZmZWN0LFxuXHR1c2VUcmFuc2l0aW9uLFxuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VTeW5jRXh0ZXJuYWxTdG9yZSxcblx0c3RhcnRUcmFuc2l0aW9uLFxuXHR1c2VSZWYsXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdHVzZU1lbW8sXG5cdHVzZUNhbGxiYWNrLFxuXHR1c2VDb250ZXh0LFxuXHR1c2VEZWJ1Z1ZhbHVlLFxuXHR2ZXJzaW9uLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRoeWRyYXRlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRjcmVhdGVQb3J0YWwsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRGcmFnbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGlzRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLFxuXHRTdHJpY3RNb2RlLFxuXHRTdXNwZW5zZSxcblx0U3VzcGVuc2VMaXN0LFxuXHRsYXp5LFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiAhMFxufSk7XG5cbnZhciByZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSwgaW5kZXggPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBkb2N1bWVudCA/IHJlYWN0LnVzZUxheW91dEVmZmVjdCA6IHJlYWN0LnVzZUVmZmVjdDtcblxuZXhwb3J0cy5kZWZhdWx0ID0gaW5kZXg7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgaW5kZXggPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gcmVhY3QudXNlTGF5b3V0RWZmZWN0IDogcmVhY3QudXNlRWZmZWN0O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBpbmRleDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5wcm9kLmpzXCIpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5kZXYuanNcIik7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBjYWNoZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhY2hlICYmIGNhY2hlLmxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgY2FjaGUubGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUubGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWNoZSA9IHtcbiAgICAgICAgICAgIGxhc3RSZXN1bHQ6IGxhc3RSZXN1bHQsXG4gICAgICAgICAgICBsYXN0QXJnczogbmV3QXJncyxcbiAgICAgICAgICAgIGxhc3RUaGlzOiB0aGlzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgbWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgY2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVPbmU7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHkuanNcIik7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQyLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKGUuaW5jbHVkZXMobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIik7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBzLmxlbmd0aDsgcisrKSBvID0gc1tyXSwgdC5pbmNsdWRlcyhvKSB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogdCxcbiAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9XG4gIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZSAmJiBzZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2dldFByb3RvdHlwZU9mKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gIH0gY2F0Y2ggKHQpIHt9XG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiKTtcbnZhciBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSByZXF1aXJlKFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIik7XG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IHJlcXVpcmUoXCIuL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanNcIik7XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIodCkge1xuICB2YXIgciA9IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlLFxuICAgICAgbyA9IGdldFByb3RvdHlwZU9mKHQpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgcyA9IGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgZSA9IFJlZmxlY3QuY29uc3RydWN0KG8sIGFyZ3VtZW50cywgcyk7XG4gICAgfSBlbHNlIGUgPSBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgZSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVTdXBlciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHtcbiAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXkocikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkge1xuICByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHtcbiAgICByYXc6IHtcbiAgICAgIHZhbHVlOiBPYmplY3QuZnJlZXplKHQpXG4gICAgfVxuICB9KSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5sZXQgX1dJTkRPVyA9IHt9O1xubGV0IF9ET0NVTUVOVCA9IHt9O1xubGV0IF9NVVRBVElPTl9PQlNFUlZFUiA9IG51bGw7XG5sZXQgX1BFUkZPUk1BTkNFID0ge1xuICBtYXJrOiBub29wLFxuICBtZWFzdXJlOiBub29wXG59O1xuXG50cnkge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIF9XSU5ET1cgPSB3aW5kb3c7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSBfRE9DVU1FTlQgPSBkb2N1bWVudDtcbiAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykgX01VVEFUSU9OX09CU0VSVkVSID0gTXV0YXRpb25PYnNlcnZlcjtcbiAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcpIF9QRVJGT1JNQU5DRSA9IHBlcmZvcm1hbmNlO1xufSBjYXRjaCAoZSkge31cblxuY29uc3Qge1xuICB1c2VyQWdlbnQgPSAnJ1xufSA9IF9XSU5ET1cubmF2aWdhdG9yIHx8IHt9O1xuY29uc3QgV0lORE9XID0gX1dJTkRPVztcbmNvbnN0IERPQ1VNRU5UID0gX0RPQ1VNRU5UO1xuY29uc3QgTVVUQVRJT05fT0JTRVJWRVIgPSBfTVVUQVRJT05fT0JTRVJWRVI7XG5jb25zdCBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTtcbmNvbnN0IElTX0JST1dTRVIgPSAhIVdJTkRPVy5kb2N1bWVudDtcbmNvbnN0IElTX0RPTSA9ICEhRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50ICYmICEhRE9DVU1FTlQuaGVhZCAmJiB0eXBlb2YgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgRE9DVU1FTlQuY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG52YXIgYSA9IFwiY2xhc3NpY1wiLFxuICAgIHQgPSBcImR1b3RvbmVcIixcbiAgICByID0gXCJzaGFycFwiLFxuICAgIG8gPSBcInNoYXJwLWR1b3RvbmVcIixcbiAgICBjID0gW2EsIHQsIHIsIG9dO1xuXG52YXIgZXQkMSA9IHtcbiAgY2xhc3NpYzoge1xuICAgIDkwMDogXCJmYXNcIixcbiAgICA0MDA6IFwiZmFyXCIsXG4gICAgbm9ybWFsOiBcImZhclwiLFxuICAgIDMwMDogXCJmYWxcIixcbiAgICAxMDA6IFwiZmF0XCJcbiAgfSxcbiAgc2hhcnA6IHtcbiAgICA5MDA6IFwiZmFzc1wiLFxuICAgIDQwMDogXCJmYXNyXCIsXG4gICAgMzAwOiBcImZhc2xcIixcbiAgICAxMDA6IFwiZmFzdFwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgOTAwOiBcImZhc2RzXCJcbiAgfVxufTtcbnZhciBidCA9IHtcbiAga2l0OiB7XG4gICAgZmFrOiBcImtpdFwiLFxuICAgIFwiZmEta2l0XCI6IFwia2l0XCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgZmFrZDogXCJraXQtZHVvdG9uZVwiLFxuICAgIFwiZmEta2l0LWR1b3RvbmVcIjogXCJraXQtZHVvdG9uZVwiXG4gIH1cbn0sXG4gICAgQ3QgPSBbXCJraXRcIl07XG52YXIgRHQgPSAvZmEoc3xyfGx8dHxkfGJ8a3xrZHxzc3xzcnxzbHxzdHxzZHMpP1tcXC1cXCBdLyxcbiAgICBLdCA9IC9Gb250ID9Bd2Vzb21lID8oWzU2IF0qKShTb2xpZHxSZWd1bGFyfExpZ2h0fFRoaW58RHVvdG9uZXxCcmFuZHN8RnJlZXxQcm98U2hhcnAgRHVvdG9uZXxTaGFycHxLaXQpPy4qL2k7XG52YXIgYW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIDUgRnJlZVwiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA1IFByb1wiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIixcbiAgICBub3JtYWw6IFwiZmFyXCIsXG4gICAgMzAwOiBcImZhbFwiXG4gIH0sXG4gIFwiRm9udCBBd2Vzb21lIDUgQnJhbmRzXCI6IHtcbiAgICA0MDA6IFwiZmFiXCIsXG4gICAgbm9ybWFsOiBcImZhYlwiXG4gIH0sXG4gIFwiRm9udCBBd2Vzb21lIDUgRHVvdG9uZVwiOiB7XG4gICAgOTAwOiBcImZhZFwiXG4gIH1cbn07XG52YXIgZW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIDYgRnJlZVwiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IFByb1wiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIixcbiAgICBub3JtYWw6IFwiZmFyXCIsXG4gICAgMzAwOiBcImZhbFwiLFxuICAgIDEwMDogXCJmYXRcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1wiOiB7XG4gICAgNDAwOiBcImZhYlwiLFxuICAgIG5vcm1hbDogXCJmYWJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IER1b3RvbmVcIjoge1xuICAgIDkwMDogXCJmYWRcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IFNoYXJwXCI6IHtcbiAgICA5MDA6IFwiZmFzc1wiLFxuICAgIDQwMDogXCJmYXNyXCIsXG4gICAgbm9ybWFsOiBcImZhc3JcIixcbiAgICAzMDA6IFwiZmFzbFwiLFxuICAgIDEwMDogXCJmYXN0XCJcbiAgfSxcbiAgXCJGb250IEF3ZXNvbWUgNiBTaGFycCBEdW90b25lXCI6IHtcbiAgICA5MDA6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIGxvID0ge1xuICBjbGFzc2ljOiB7XG4gICAgXCJmYS1icmFuZHNcIjogXCJmYWJcIixcbiAgICBcImZhLWR1b3RvbmVcIjogXCJmYWRcIixcbiAgICBcImZhLWxpZ2h0XCI6IFwiZmFsXCIsXG4gICAgXCJmYS1yZWd1bGFyXCI6IFwiZmFyXCIsXG4gICAgXCJmYS1zb2xpZFwiOiBcImZhc1wiLFxuICAgIFwiZmEtdGhpblwiOiBcImZhdFwiXG4gIH0sXG4gIHNoYXJwOiB7XG4gICAgXCJmYS1zb2xpZFwiOiBcImZhc3NcIixcbiAgICBcImZhLXJlZ3VsYXJcIjogXCJmYXNyXCIsXG4gICAgXCJmYS1saWdodFwiOiBcImZhc2xcIixcbiAgICBcImZhLXRoaW5cIjogXCJmYXN0XCJcbiAgfSxcbiAgXCJzaGFycC1kdW90b25lXCI6IHtcbiAgICBcImZhLXNvbGlkXCI6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIHkgPSB7XG4gIGNsYXNzaWM6IFtcImZhc1wiLCBcImZhclwiLCBcImZhbFwiLCBcImZhdFwiXSxcbiAgc2hhcnA6IFtcImZhc3NcIiwgXCJmYXNyXCIsIFwiZmFzbFwiLCBcImZhc3RcIl0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiBbXCJmYXNkc1wiXVxufSxcbiAgICBubyA9IHtcbiAgY2xhc3NpYzoge1xuICAgIGZhYjogXCJmYS1icmFuZHNcIixcbiAgICBmYWQ6IFwiZmEtZHVvdG9uZVwiLFxuICAgIGZhbDogXCJmYS1saWdodFwiLFxuICAgIGZhcjogXCJmYS1yZWd1bGFyXCIsXG4gICAgZmFzOiBcImZhLXNvbGlkXCIsXG4gICAgZmF0OiBcImZhLXRoaW5cIlxuICB9LFxuICBzaGFycDoge1xuICAgIGZhc3M6IFwiZmEtc29saWRcIixcbiAgICBmYXNyOiBcImZhLXJlZ3VsYXJcIixcbiAgICBmYXNsOiBcImZhLWxpZ2h0XCIsXG4gICAgZmFzdDogXCJmYS10aGluXCJcbiAgfSxcbiAgXCJzaGFycC1kdW90b25lXCI6IHtcbiAgICBmYXNkczogXCJmYS1zb2xpZFwiXG4gIH1cbn0sXG4gICAgZm8gPSB7XG4gIGNsYXNzaWM6IHtcbiAgICBzb2xpZDogXCJmYXNcIixcbiAgICByZWd1bGFyOiBcImZhclwiLFxuICAgIGxpZ2h0OiBcImZhbFwiLFxuICAgIHRoaW46IFwiZmF0XCIsXG4gICAgZHVvdG9uZTogXCJmYWRcIixcbiAgICBicmFuZHM6IFwiZmFiXCJcbiAgfSxcbiAgc2hhcnA6IHtcbiAgICBzb2xpZDogXCJmYXNzXCIsXG4gICAgcmVndWxhcjogXCJmYXNyXCIsXG4gICAgbGlnaHQ6IFwiZmFzbFwiLFxuICAgIHRoaW46IFwiZmFzdFwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgc29saWQ6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIGhvID0ge1xuICBjbGFzc2ljOiB7XG4gICAgZmE6IFwic29saWRcIixcbiAgICBmYXM6IFwic29saWRcIixcbiAgICBcImZhLXNvbGlkXCI6IFwic29saWRcIixcbiAgICBmYXI6IFwicmVndWxhclwiLFxuICAgIFwiZmEtcmVndWxhclwiOiBcInJlZ3VsYXJcIixcbiAgICBmYWw6IFwibGlnaHRcIixcbiAgICBcImZhLWxpZ2h0XCI6IFwibGlnaHRcIixcbiAgICBmYXQ6IFwidGhpblwiLFxuICAgIFwiZmEtdGhpblwiOiBcInRoaW5cIixcbiAgICBmYWQ6IFwiZHVvdG9uZVwiLFxuICAgIFwiZmEtZHVvdG9uZVwiOiBcImR1b3RvbmVcIixcbiAgICBmYWI6IFwiYnJhbmRzXCIsXG4gICAgXCJmYS1icmFuZHNcIjogXCJicmFuZHNcIlxuICB9LFxuICBzaGFycDoge1xuICAgIGZhOiBcInNvbGlkXCIsXG4gICAgZmFzczogXCJzb2xpZFwiLFxuICAgIFwiZmEtc29saWRcIjogXCJzb2xpZFwiLFxuICAgIGZhc3I6IFwicmVndWxhclwiLFxuICAgIFwiZmEtcmVndWxhclwiOiBcInJlZ3VsYXJcIixcbiAgICBmYXNsOiBcImxpZ2h0XCIsXG4gICAgXCJmYS1saWdodFwiOiBcImxpZ2h0XCIsXG4gICAgZmFzdDogXCJ0aGluXCIsXG4gICAgXCJmYS10aGluXCI6IFwidGhpblwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgZmE6IFwic29saWRcIixcbiAgICBmYXNkczogXCJzb2xpZFwiLFxuICAgIFwiZmEtc29saWRcIjogXCJzb2xpZFwiXG4gIH1cbn0sXG4gICAgeCQxID0gW1wic29saWRcIiwgXCJyZWd1bGFyXCIsIFwibGlnaHRcIiwgXCJ0aGluXCIsIFwiZHVvdG9uZVwiLCBcImJyYW5kc1wiXSxcbiAgICB1JDEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLFxuICAgIG0kMSA9IHUkMS5jb25jYXQoWzExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSksXG4gICAgdCQxID0ge1xuICBHUk9VUDogXCJkdW90b25lLWdyb3VwXCIsXG4gIFNXQVBfT1BBQ0lUWTogXCJzd2FwLW9wYWNpdHlcIixcbiAgUFJJTUFSWTogXCJwcmltYXJ5XCIsXG4gIFNFQ09OREFSWTogXCJzZWNvbmRhcnlcIlxufSxcbiAgICB5byA9IFsuLi5PYmplY3Qua2V5cyh5KSwgLi4ueCQxLCBcIjJ4c1wiLCBcInhzXCIsIFwic21cIiwgXCJsZ1wiLCBcInhsXCIsIFwiMnhsXCIsIFwiYmVhdFwiLCBcImJvcmRlclwiLCBcImZhZGVcIiwgXCJiZWF0LWZhZGVcIiwgXCJib3VuY2VcIiwgXCJmbGlwLWJvdGhcIiwgXCJmbGlwLWhvcml6b250YWxcIiwgXCJmbGlwLXZlcnRpY2FsXCIsIFwiZmxpcFwiLCBcImZ3XCIsIFwiaW52ZXJzZVwiLCBcImxheWVycy1jb3VudGVyXCIsIFwibGF5ZXJzLXRleHRcIiwgXCJsYXllcnNcIiwgXCJsaVwiLCBcInB1bGwtbGVmdFwiLCBcInB1bGwtcmlnaHRcIiwgXCJwdWxzZVwiLCBcInJvdGF0ZS0xODBcIiwgXCJyb3RhdGUtMjcwXCIsIFwicm90YXRlLTkwXCIsIFwicm90YXRlLWJ5XCIsIFwic2hha2VcIiwgXCJzcGluLXB1bHNlXCIsIFwic3Bpbi1yZXZlcnNlXCIsIFwic3BpblwiLCBcInN0YWNrLTF4XCIsIFwic3RhY2stMnhcIiwgXCJzdGFja1wiLCBcInVsXCIsIHQkMS5HUk9VUCwgdCQxLlNXQVBfT1BBQ0lUWSwgdCQxLlBSSU1BUlksIHQkMS5TRUNPTkRBUlldLmNvbmNhdCh1JDEubWFwKG8gPT4gXCJcIi5jb25jYXQobywgXCJ4XCIpKSkuY29uY2F0KG0kMS5tYXAobyA9PiBcInctXCIuY29uY2F0KG8pKSk7XG52YXIgbW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIEtpdFwiOiB7XG4gICAgNDAwOiBcImZha1wiLFxuICAgIG5vcm1hbDogXCJmYWtcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSBLaXQgRHVvdG9uZVwiOiB7XG4gICAgNDAwOiBcImZha2RcIixcbiAgICBub3JtYWw6IFwiZmFrZFwiXG4gIH1cbn0sXG4gICAgSW8gPSB7XG4gIGtpdDoge1xuICAgIFwiZmEta2l0XCI6IFwiZmFrXCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgXCJmYS1raXQtZHVvdG9uZVwiOiBcImZha2RcIlxuICB9XG59LFxuICAgIEZvID0ge1xuICBraXQ6IHtcbiAgICBmYWs6IFwiZmEta2l0XCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgZmFrZDogXCJmYS1raXQtZHVvdG9uZVwiXG4gIH1cbn0sXG4gICAgU28gPSB7XG4gIGtpdDoge1xuICAgIGtpdDogXCJmYWtcIlxuICB9LFxuICBcImtpdC1kdW90b25lXCI6IHtcbiAgICBcImtpdC1kdW90b25lXCI6IFwiZmFrZFwiXG4gIH1cbn07XG5cbmNvbnN0IE5BTUVTUEFDRV9JREVOVElGSUVSID0gJ19fX0ZPTlRfQVdFU09NRV9fXyc7XG5jb25zdCBVTklUU19JTl9HUklEID0gMTY7XG5jb25zdCBERUZBVUxUX0NTU19QUkVGSVggPSAnZmEnO1xuY29uc3QgREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUyA9ICdzdmctaW5saW5lLS1mYSc7XG5jb25zdCBEQVRBX0ZBX0kyU1ZHID0gJ2RhdGEtZmEtaTJzdmcnO1xuY29uc3QgREFUQV9GQV9QU0VVRE9fRUxFTUVOVCA9ICdkYXRhLWZhLXBzZXVkby1lbGVtZW50JztcbmNvbnN0IERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORyA9ICdkYXRhLWZhLXBzZXVkby1lbGVtZW50LXBlbmRpbmcnO1xuY29uc3QgREFUQV9QUkVGSVggPSAnZGF0YS1wcmVmaXgnO1xuY29uc3QgREFUQV9JQ09OID0gJ2RhdGEtaWNvbic7XG5jb25zdCBIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MgPSAnZm9udGF3ZXNvbWUtaTJzdmcnO1xuY29uc3QgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAnYXN5bmMnO1xuY29uc3QgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMgPSBbJ0hUTUwnLCAnSEVBRCcsICdTVFlMRScsICdTQ1JJUFQnXTtcbmNvbnN0IFBST0RVQ1RJT04gPSAoKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuICB9IGNhdGNoIChlJCQxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KSgpO1xuY29uc3QgRkFNSUxJRVMgPSBbYSwgciwgb107XG5cbmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikge1xuICAvLyBEZWZhdWx0cyB0byB0aGUgY2xhc3NpYyBmYW1pbHkgaWYgZmFtaWx5IGlzIG5vdCBhdmFpbGFibGVcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgPyB0YXJnZXRbcHJvcF0gOiB0YXJnZXRbYV07XG4gICAgfVxuXG4gIH0pO1xufVxuXG5jb25zdCBfUFJFRklYX1RPX1NUWUxFID0geyAuLi5ob1xufTtcbl9QUkVGSVhfVE9fU1RZTEVbYV0gPSB7IC4uLmhvW2FdLFxuICAuLi5idFsna2l0J10sXG4gIC4uLmJ0WydraXQtZHVvdG9uZSddXG59O1xuY29uc3QgUFJFRklYX1RPX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19TVFlMRSk7XG5jb25zdCBfU1RZTEVfVE9fUFJFRklYID0geyAuLi5mb1xufTtcbl9TVFlMRV9UT19QUkVGSVhbYV0gPSB7IC4uLl9TVFlMRV9UT19QUkVGSVhbYV0sXG4gIC4uLlNvWydraXQnXSxcbiAgLi4uU29bJ2tpdC1kdW90b25lJ11cbn07XG5jb25zdCBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfU1RZTEVfVE9fUFJFRklYKTtcbmNvbnN0IF9QUkVGSVhfVE9fTE9OR19TVFlMRSA9IHsgLi4ubm9cbn07XG5fUFJFRklYX1RPX0xPTkdfU1RZTEVbYV0gPSB7IC4uLl9QUkVGSVhfVE9fTE9OR19TVFlMRVthXSxcbiAgLi4uRm9bJ2tpdCddXG59O1xuY29uc3QgUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBmYW1pbHlQcm94eShfUFJFRklYX1RPX0xPTkdfU1RZTEUpO1xuY29uc3QgX0xPTkdfU1RZTEVfVE9fUFJFRklYID0geyAuLi5sb1xufTtcbl9MT05HX1NUWUxFX1RPX1BSRUZJWFthXSA9IHsgLi4uX0xPTkdfU1RZTEVfVE9fUFJFRklYW2FdLFxuICAuLi5Jb1sna2l0J11cbn07XG5jb25zdCBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KF9MT05HX1NUWUxFX1RPX1BSRUZJWCk7XG5jb25zdCBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiA9IER0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5cbmNvbnN0IExBWUVSU19URVhUX0NMQVNTTkFNRSA9ICdmYS1sYXllcnMtdGV4dCc7XG5jb25zdCBGT05UX0ZBTUlMWV9QQVRURVJOID0gS3Q7XG5jb25zdCBfRk9OVF9XRUlHSFRfVE9fUFJFRklYID0geyAuLi5ldCQxXG59O1xuY29uc3QgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCk7XG5jb25zdCBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWydjbGFzcycsICdkYXRhLXByZWZpeCcsICdkYXRhLWljb24nLCAnZGF0YS1mYS10cmFuc2Zvcm0nLCAnZGF0YS1mYS1tYXNrJ107XG5jb25zdCBEVU9UT05FX0NMQVNTRVMgPSB0JDE7XG5jb25zdCBwcmVmaXhlcyA9IG5ldyBTZXQoKTtcbk9iamVjdC5rZXlzKFNUWUxFX1RPX1BSRUZJWFthXSkubWFwKHByZWZpeGVzLmFkZC5iaW5kKHByZWZpeGVzKSk7XG5PYmplY3Qua2V5cyhTVFlMRV9UT19QUkVGSVhbcl0pLm1hcChwcmVmaXhlcy5hZGQuYmluZChwcmVmaXhlcykpO1xuT2JqZWN0LmtleXMoU1RZTEVfVE9fUFJFRklYW29dKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbmNvbnN0IFJFU0VSVkVEX0NMQVNTRVMgPSBbLi4uQ3QsIC4uLnlvXTtcblxuY29uc3QgaW5pdGlhbCA9IFdJTkRPVy5Gb250QXdlc29tZUNvbmZpZyB8fCB7fTtcblxuZnVuY3Rpb24gZ2V0QXR0ckNvbmZpZyhhdHRyKSB7XG4gIHZhciBlbGVtZW50ID0gRE9DVU1FTlQucXVlcnlTZWxlY3Rvcignc2NyaXB0WycgKyBhdHRyICsgJ10nKTtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIC8vIEdldHRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgb2NjdXIgaWYgdGhlIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhlIEhUTUwgdGFnIGJ1dCB3aXRob3V0IGEgdmFsdWVcbiAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIHRvZ2dsZWQgdG8gdHJ1ZVxuICBpZiAodmFsID09PSAnJykgcmV0dXJuIHRydWU7XG4gIGlmICh2YWwgPT09ICdmYWxzZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKHZhbCA9PT0gJ3RydWUnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHZhbDtcbn1cblxuaWYgKERPQ1VNRU5UICYmIHR5cGVvZiBET0NVTUVOVC5xdWVyeVNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnN0IGF0dHJzID0gW1snZGF0YS1mYW1pbHktcHJlZml4JywgJ2ZhbWlseVByZWZpeCddLCBbJ2RhdGEtY3NzLXByZWZpeCcsICdjc3NQcmVmaXgnXSwgWydkYXRhLWZhbWlseS1kZWZhdWx0JywgJ2ZhbWlseURlZmF1bHQnXSwgWydkYXRhLXN0eWxlLWRlZmF1bHQnLCAnc3R5bGVEZWZhdWx0J10sIFsnZGF0YS1yZXBsYWNlbWVudC1jbGFzcycsICdyZXBsYWNlbWVudENsYXNzJ10sIFsnZGF0YS1hdXRvLXJlcGxhY2Utc3ZnJywgJ2F1dG9SZXBsYWNlU3ZnJ10sIFsnZGF0YS1hdXRvLWFkZC1jc3MnLCAnYXV0b0FkZENzcyddLCBbJ2RhdGEtYXV0by1hMTF5JywgJ2F1dG9BMTF5J10sIFsnZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzJywgJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJ10sIFsnZGF0YS1vYnNlcnZlLW11dGF0aW9ucycsICdvYnNlcnZlTXV0YXRpb25zJ10sIFsnZGF0YS1tdXRhdGUtYXBwcm9hY2gnLCAnbXV0YXRlQXBwcm9hY2gnXSwgWydkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlJywgJ2tlZXBPcmlnaW5hbFNvdXJjZSddLCBbJ2RhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZScsICdtZWFzdXJlUGVyZm9ybWFuY2UnXSwgWydkYXRhLXNob3ctbWlzc2luZy1pY29ucycsICdzaG93TWlzc2luZ0ljb25zJ11dO1xuICBhdHRycy5mb3JFYWNoKF9yZWYgPT4ge1xuICAgIGxldCBbYXR0ciwga2V5XSA9IF9yZWY7XG4gICAgY29uc3QgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpO1xuXG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IF9kZWZhdWx0ID0ge1xuICBzdHlsZURlZmF1bHQ6ICdzb2xpZCcsXG4gIGZhbWlseURlZmF1bHQ6ICdjbGFzc2ljJyxcbiAgY3NzUHJlZml4OiBERUZBVUxUX0NTU19QUkVGSVgsXG4gIHJlcGxhY2VtZW50Q2xhc3M6IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsXG4gIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLFxuICBhdXRvQWRkQ3NzOiB0cnVlLFxuICBhdXRvQTExeTogdHJ1ZSxcbiAgc2VhcmNoUHNldWRvRWxlbWVudHM6IGZhbHNlLFxuICBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLFxuICBtdXRhdGVBcHByb2FjaDogJ2FzeW5jJyxcbiAga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLFxuICBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLFxuICBzaG93TWlzc2luZ0ljb25zOiB0cnVlXG59OyAvLyBmYW1pbHlQcmVmaXggaXMgZGVwcmVjYXRlZCBidXQgd2UgbXVzdCBzdGlsbCBzdXBwb3J0IGl0IGlmIHByZXNlbnRcblxuaWYgKGluaXRpYWwuZmFtaWx5UHJlZml4KSB7XG4gIGluaXRpYWwuY3NzUHJlZml4ID0gaW5pdGlhbC5mYW1pbHlQcmVmaXg7XG59XG5cbmNvbnN0IF9jb25maWcgPSB7IC4uLl9kZWZhdWx0LFxuICAuLi5pbml0aWFsXG59O1xuaWYgKCFfY29uZmlnLmF1dG9SZXBsYWNlU3ZnKSBfY29uZmlnLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTtcbmNvbnN0IGNvbmZpZyA9IHt9O1xuT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goa2V5ID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbmZpZywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIF9jb25maWdba2V5XSA9IHZhbDtcblxuICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChjYiA9PiBjYihjb25maWcpKTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9jb25maWdba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7IC8vIGZhbWlseVByZWZpeCBpcyBkZXByZWNhdGVkIGFzIG9mIDYuMi4wIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBpbiA3LjAuMFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCAnZmFtaWx5UHJlZml4Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBfY29uZmlnLmNzc1ByZWZpeCA9IHZhbDtcblxuICAgIF9vbkNoYW5nZUNiLmZvckVhY2goY2IgPT4gY2IoY29uZmlnKSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY29uZmlnLmNzc1ByZWZpeDtcbiAgfVxufSk7XG5XSU5ET1cuRm9udEF3ZXNvbWVDb25maWcgPSBjb25maWc7XG5jb25zdCBfb25DaGFuZ2VDYiA9IFtdO1xuZnVuY3Rpb24gb25DaGFuZ2UoY2IpIHtcbiAgX29uQ2hhbmdlQ2IucHVzaChjYik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBfb25DaGFuZ2VDYi5zcGxpY2UoX29uQ2hhbmdlQ2IuaW5kZXhPZihjYiksIDEpO1xuICB9O1xufVxuXG5jb25zdCBkJDIgPSBVTklUU19JTl9HUklEO1xuY29uc3QgbWVhbmluZ2xlc3NUcmFuc2Zvcm0gPSB7XG4gIHNpemU6IDE2LFxuICB4OiAwLFxuICB5OiAwLFxuICByb3RhdGU6IDAsXG4gIGZsaXBYOiBmYWxzZSxcbiAgZmxpcFk6IGZhbHNlXG59O1xuZnVuY3Rpb24gaW5zZXJ0Q3NzKGNzcykge1xuICBpZiAoIWNzcyB8fCAhSVNfRE9NKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICBjb25zdCBoZWFkQ2hpbGRyZW4gPSBET0NVTUVOVC5oZWFkLmNoaWxkTm9kZXM7XG4gIGxldCBiZWZvcmVDaGlsZCA9IG51bGw7XG5cbiAgZm9yIChsZXQgaSA9IGhlYWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gaGVhZENoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChbJ1NUWUxFJywgJ0xJTksnXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHtcbiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7XG4gICAgfVxuICB9XG5cbiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTtcbiAgcmV0dXJuIGNzcztcbn1cbmNvbnN0IGlkUG9vbCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG5mdW5jdGlvbiBuZXh0VW5pcXVlSWQoKSB7XG4gIGxldCBzaXplID0gMTI7XG4gIGxldCBpZCA9ICcnO1xuXG4gIHdoaWxlIChzaXplLS0gPiAwKSB7XG4gICAgaWQgKz0gaWRQb29sW01hdGgucmFuZG9tKCkgKiA2MiB8IDBdO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgY29uc3QgYXJyYXkgPSBbXTtcblxuICBmb3IgKGxldCBpID0gKG9iaiB8fCBbXSkubGVuZ3RoID4+PiAwOyBpLS07KSB7XG4gICAgYXJyYXlbaV0gPSBvYmpbaV07XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5mdW5jdGlvbiBjbGFzc0FycmF5KG5vZGUpIHtcbiAgaWYgKG5vZGUuY2xhc3NMaXN0KSB7XG4gICAgcmV0dXJuIHRvQXJyYXkobm9kZS5jbGFzc0xpc3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpLnNwbGl0KCcgJykuZmlsdGVyKGkgPT4gaSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChzdHIpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpLnJlcGxhY2UoLycvZywgJyYjMzk7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cbmZ1bmN0aW9uIGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMgfHwge30pLnJlZHVjZSgoYWNjLCBhdHRyaWJ1dGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIFwiXCIuY29uY2F0KGF0dHJpYnV0ZU5hbWUsIFwiPVxcXCJcIikuY29uY2F0KGh0bWxFc2NhcGUoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSksIFwiXFxcIiBcIik7XG4gIH0sICcnKS50cmltKCk7XG59XG5mdW5jdGlvbiBqb2luU3R5bGVzKHN0eWxlcykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzIHx8IHt9KS5yZWR1Y2UoKGFjYywgc3R5bGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIFwiXCIuY29uY2F0KHN0eWxlTmFtZSwgXCI6IFwiKS5jb25jYXQoc3R5bGVzW3N0eWxlTmFtZV0udHJpbSgpLCBcIjtcIik7XG4gIH0sICcnKTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHRyYW5zZm9ybS5zaXplICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5zaXplIHx8IHRyYW5zZm9ybS54ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS54IHx8IHRyYW5zZm9ybS55ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS55IHx8IHRyYW5zZm9ybS5yb3RhdGUgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnJvdGF0ZSB8fCB0cmFuc2Zvcm0uZmxpcFggfHwgdHJhbnNmb3JtLmZsaXBZO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtRm9yU3ZnKF9yZWYpIHtcbiAgbGV0IHtcbiAgICB0cmFuc2Zvcm0sXG4gICAgY29udGFpbmVyV2lkdGgsXG4gICAgaWNvbldpZHRoXG4gIH0gPSBfcmVmO1xuICBjb25zdCBvdXRlciA9IHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKFwiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIDIsIFwiIDI1NilcIilcbiAgfTtcbiAgY29uc3QgaW5uZXJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIi5jb25jYXQodHJhbnNmb3JtLnggKiAzMiwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnkgKiAzMiwgXCIpIFwiKTtcbiAgY29uc3QgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICBjb25zdCBpbm5lclJvdGF0ZSA9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcIiAwIDApXCIpO1xuICBjb25zdCBpbm5lciA9IHtcbiAgICB0cmFuc2Zvcm06IFwiXCIuY29uY2F0KGlubmVyVHJhbnNsYXRlLCBcIiBcIikuY29uY2F0KGlubmVyU2NhbGUsIFwiIFwiKS5jb25jYXQoaW5uZXJSb3RhdGUpXG4gIH07XG4gIGNvbnN0IHBhdGggPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICB9O1xuICByZXR1cm4ge1xuICAgIG91dGVyLFxuICAgIGlubmVyLFxuICAgIHBhdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUZvckNzcyhfcmVmMikge1xuICBsZXQge1xuICAgIHRyYW5zZm9ybSxcbiAgICB3aWR0aCA9IFVOSVRTX0lOX0dSSUQsXG4gICAgaGVpZ2h0ID0gVU5JVFNfSU5fR1JJRCxcbiAgICBzdGFydENlbnRlcmVkID0gZmFsc2VcbiAgfSA9IF9yZWYyO1xuICBsZXQgdmFsID0gJyc7XG5cbiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyIC0gd2lkdGggLyAyLCBcImVtLCBcIikuY29uY2F0KHRyYW5zZm9ybS55IC8gZCQyIC0gaGVpZ2h0IC8gMiwgXCJlbSkgXCIpO1xuICB9IGVsc2UgaWYgKHN0YXJ0Q2VudGVyZWQpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoY2FsYygtNTAlICsgXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyLCBcImVtKSwgY2FsYygtNTAlICsgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQkMiwgXCJlbSkpIFwiKTtcbiAgfSBlbHNlIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyLCBcImVtLCBcIikuY29uY2F0KHRyYW5zZm9ybS55IC8gZCQyLCBcImVtKSBcIik7XG4gIH1cblxuICB2YWwgKz0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtLmZsaXBZID8gLTEgOiAxKSwgXCIpIFwiKTtcbiAgdmFsICs9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcImRlZykgXCIpO1xuICByZXR1cm4gdmFsO1xufVxuXG52YXIgYmFzZVN0eWxlcyA9IFwiOnJvb3QsIDpob3N0IHtcXG4gIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgRnJlZVxcXCI7XFxuICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgRnJlZVxcXCI7XFxuICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFByb1xcXCI7XFxuICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgUHJvXFxcIjtcXG4gIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBEdW90b25lXFxcIjtcXG4gIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1xcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTaGFycFxcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC10aGluOiBub3JtYWwgMTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTaGFycFxcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnAgRHVvdG9uZVxcXCI7XFxufVxcblxcbnN2Zzpub3QoOnJvb3QpLnN2Zy1pbmxpbmUtLWZhLCBzdmc6bm90KDpob3N0KS5zdmctaW5saW5lLS1mYSB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEge1xcbiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTtcXG4gIGhlaWdodDogMWVtO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xcbiAgdmVydGljYWwtYWxpZ246IDAuMWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xcbiAgdmVydGljYWwtYWxpZ246IDBlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzA1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIHRvcDogMC4yNWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEtZncge1xcbiAgd2lkdGg6IHZhcigtLWZhLWZ3LXdpZHRoLCAxLjI1ZW0pO1xcbn1cXG5cXG4uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYSB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG4gIHdpZHRoOiAxZW07XFxufVxcbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5mYS1sYXllcnMtdGV4dCB7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycy1jb3VudGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpO1xcbiAgbWF4LXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1heC13aWR0aCwgNWVtKTtcXG4gIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nOiB2YXIoLS1mYS1jb3VudGVyLXBhZGRpbmcsIDAuMjVlbSAwLjVlbSk7XFxuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG59XFxuXFxuLmZhLWxheWVycy1ib3R0b20tcmlnaHQge1xcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRvcDogYXV0bztcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7XFxufVxcblxcbi5mYS1sYXllcnMtYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xcbiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7XFxuICByaWdodDogYXV0bztcXG4gIHRvcDogYXV0bztcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcXG59XFxuXFxuLmZhLWxheWVycy10b3AtcmlnaHQge1xcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XFxufVxcblxcbi5mYS1sYXllcnMtdG9wLWxlZnQge1xcbiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7XFxuICByaWdodDogYXV0bztcXG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcXG59XFxuXFxuLmZhLTF4IHtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5cXG4uZmEtMngge1xcbiAgZm9udC1zaXplOiAyZW07XFxufVxcblxcbi5mYS0zeCB7XFxuICBmb250LXNpemU6IDNlbTtcXG59XFxuXFxuLmZhLTR4IHtcXG4gIGZvbnQtc2l6ZTogNGVtO1xcbn1cXG5cXG4uZmEtNXgge1xcbiAgZm9udC1zaXplOiA1ZW07XFxufVxcblxcbi5mYS02eCB7XFxuICBmb250LXNpemU6IDZlbTtcXG59XFxuXFxuLmZhLTd4IHtcXG4gIGZvbnQtc2l6ZTogN2VtO1xcbn1cXG5cXG4uZmEtOHgge1xcbiAgZm9udC1zaXplOiA4ZW07XFxufVxcblxcbi5mYS05eCB7XFxuICBmb250LXNpemU6IDllbTtcXG59XFxuXFxuLmZhLTEweCB7XFxuICBmb250LXNpemU6IDEwZW07XFxufVxcblxcbi5mYS0yeHMge1xcbiAgZm9udC1zaXplOiAwLjYyNWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjI1ZW07XFxufVxcblxcbi5mYS14cyB7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA4MzMzMzMzMzdlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAwLjEyNWVtO1xcbn1cXG5cXG4uZmEtc20ge1xcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMDcxNDI4NTcxOGVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMDUzNTcxNDI5NWVtO1xcbn1cXG5cXG4uZmEtbGcge1xcbiAgZm9udC1zaXplOiAxLjI1ZW07XFxuICBsaW5lLWhlaWdodDogMC4wNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3NWVtO1xcbn1cXG5cXG4uZmEteGwge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA0MTY2NjY2ODJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG59XFxuXFxuLmZhLTJ4bCB7XFxuICBmb250LXNpemU6IDJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjAzMTI1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTg3NWVtO1xcbn1cXG5cXG4uZmEtZncge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDEuMjVlbTtcXG59XFxuXFxuLmZhLXVsIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmZhLXVsID4gbGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZmEtbGkge1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uZmEtYm9yZGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTtcXG4gIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wOGVtKTtcXG4gIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjJlbSAwLjI1ZW0gMC4xNWVtKTtcXG59XFxuXFxuLmZhLXB1bGwtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTtcXG59XFxuXFxuLmZhLXB1bGwtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxufVxcblxcbi5mYS1iZWF0IHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0O1xcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbn1cXG5cXG4uZmEtYm91bmNlIHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpO1xcbn1cXG5cXG4uZmEtZmFkZSB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xcbn1cXG5cXG4uZmEtYmVhdC1mYWRlIHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTtcXG59XFxuXFxuLmZhLWZsaXAge1xcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XFxufVxcblxcbi5mYS1zaGFrZSB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpO1xcbn1cXG5cXG4uZmEtc3BpbiB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjtcXG4gIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxufVxcblxcbi5mYS1zcGluLXJldmVyc2Uge1xcbiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xcbn1cXG5cXG4uZmEtcHVsc2UsXFxuLmZhLXNwaW4tcHVsc2Uge1xcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5mYS1iZWF0LFxcbi5mYS1ib3VuY2UsXFxuLmZhLWZhZGUsXFxuLmZhLWJlYXQtZmFkZSxcXG4uZmEtZmxpcCxcXG4uZmEtcHVsc2UsXFxuLmZhLXNoYWtlLFxcbi5mYS1zcGluLFxcbi5mYS1zcGluLXB1bHNlIHtcXG4gICAgYW5pbWF0aW9uLWRlbGF5OiAtMW1zO1xcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDFtcztcXG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcXG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWJlYXQge1xcbiAgMCUsIDkwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA0NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1ib3VuY2Uge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAxMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDMwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNTclIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgfVxcbiAgNjQlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1iZWF0LWZhZGUge1xcbiAgMCUsIDEwMCUge1xcbiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWZsaXAge1xcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZmEtc2hha2Uge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgfVxcbiAgNCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7XFxuICB9XFxuICA4JSwgMjQlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTtcXG4gIH1cXG4gIDEyJSwgMjglIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgfVxcbiAgMTYlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcXG4gIH1cXG4gIDIwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcXG4gIH1cXG4gIDMyJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICB9XFxuICAzNiUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7XFxuICB9XFxuICA0MCUsIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuLmZhLXJvdGF0ZS05MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMTgwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMjcwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XFxufVxcblxcbi5mYS1mbGlwLWhvcml6b250YWwge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XFxufVxcblxcbi5mYS1mbGlwLXZlcnRpY2FsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xcbn1cXG5cXG4uZmEtZmxpcC1ib3RoLFxcbi5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7XFxufVxcblxcbi5mYS1yb3RhdGUtYnkge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7XFxufVxcblxcbi5mYS1zdGFjayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgaGVpZ2h0OiAyZW07XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMi41ZW07XFxufVxcblxcbi5mYS1zdGFjay0xeCxcXG4uZmEtc3RhY2stMngge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG1hcmdpbjogYXV0bztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHdpZHRoOiAxLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7XFxuICBoZWlnaHQ6IDJlbTtcXG4gIHdpZHRoOiAyLjVlbTtcXG59XFxuXFxuLmZhLWludmVyc2Uge1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbn1cXG5cXG4uc3Itb25seSxcXG4uZmEtc3Itb25seSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAtMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG5cXG4uc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cyksXFxuLmZhLXNyLW9ubHktZm9jdXNhYmxlOm5vdCg6Zm9jdXMpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IC0xcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7XFxuICBmaWxsOiB2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcXG59XFxuXFxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xcbiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXByaW1hcnkge1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XFxuICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpO1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSxcXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtc2Vjb25kYXJ5IHtcXG4gIGZpbGw6IGJsYWNrO1xcbn1cXG5cXG4uZmFkLmZhLWludmVyc2UsXFxuLmZhLWR1b3RvbmUuZmEtaW52ZXJzZSB7XFxuICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7XFxufVwiO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGNvbnN0IGRjcCA9IERFRkFVTFRfQ1NTX1BSRUZJWDtcbiAgY29uc3QgZHJjID0gREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUztcbiAgY29uc3QgZnAgPSBjb25maWcuY3NzUHJlZml4O1xuICBjb25zdCByYyA9IGNvbmZpZy5yZXBsYWNlbWVudENsYXNzO1xuICBsZXQgcyA9IGJhc2VTdHlsZXM7XG5cbiAgaWYgKGZwICE9PSBkY3AgfHwgcmMgIT09IGRyYykge1xuICAgIGNvbnN0IGRQYXR0ID0gbmV3IFJlZ0V4cChcIlxcXFwuXCIuY29uY2F0KGRjcCwgXCJcXFxcLVwiKSwgJ2cnKTtcbiAgICBjb25zdCBjdXN0b21Qcm9wUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLS1cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIGNvbnN0IHJQYXR0ID0gbmV3IFJlZ0V4cChcIlxcXFwuXCIuY29uY2F0KGRyYyksICdnJyk7XG4gICAgcyA9IHMucmVwbGFjZShkUGF0dCwgXCIuXCIuY29uY2F0KGZwLCBcIi1cIikpLnJlcGxhY2UoY3VzdG9tUHJvcFBhdHQsIFwiLS1cIi5jb25jYXQoZnAsIFwiLVwiKSkucmVwbGFjZShyUGF0dCwgXCIuXCIuY29uY2F0KHJjKSk7XG4gIH1cblxuICByZXR1cm4gcztcbn1cblxubGV0IF9jc3NJbnNlcnRlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnN1cmVDc3MoKSB7XG4gIGlmIChjb25maWcuYXV0b0FkZENzcyAmJiAhX2Nzc0luc2VydGVkKSB7XG4gICAgaW5zZXJ0Q3NzKGNzcygpKTtcbiAgICBfY3NzSW5zZXJ0ZWQgPSB0cnVlO1xuICB9XG59XG5cbnZhciBJbmplY3RDU1MgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIGNzcyxcbiAgICAgICAgaW5zZXJ0Q3NzOiBlbnN1cmVDc3NcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfSxcblxuICAgICAgYmVmb3JlSTJzdmcoKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfVxuXG59O1xuXG5jb25zdCB3JDEgPSBXSU5ET1cgfHwge307XG5pZiAoIXckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0pIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0gPSB7fTtcbmlmICghdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMpIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uc3R5bGVzID0ge307XG5pZiAoIXckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MpIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MgPSB7fTtcbmlmICghdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcykgdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcyA9IFtdO1xudmFyIG5hbWVzcGFjZSA9IHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl07XG5cbmNvbnN0IGZ1bmN0aW9ucyA9IFtdO1xuXG5jb25zdCBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgRE9DVU1FTlQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxpc3RlbmVyKTtcbiAgbG9hZGVkID0gMTtcbiAgZnVuY3Rpb25zLm1hcChmbiA9PiBmbigpKTtcbn07XG5cbmxldCBsb2FkZWQgPSBmYWxzZTtcblxuaWYgKElTX0RPTSkge1xuICBsb2FkZWQgPSAoRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsID8gL15sb2FkZWR8XmMvIDogL15sb2FkZWR8Xml8XmMvKS50ZXN0KERPQ1VNRU5ULnJlYWR5U3RhdGUpO1xuICBpZiAoIWxvYWRlZCkgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxpc3RlbmVyKTtcbn1cblxuZnVuY3Rpb24gZG9tcmVhZHkgKGZuKSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZnVuY3Rpb25zLnB1c2goZm4pO1xufVxuXG5mdW5jdGlvbiB0b0h0bWwoYWJzdHJhY3ROb2Rlcykge1xuICBjb25zdCB7XG4gICAgdGFnLFxuICAgIGF0dHJpYnV0ZXMgPSB7fSxcbiAgICBjaGlsZHJlbiA9IFtdXG4gIH0gPSBhYnN0cmFjdE5vZGVzO1xuXG4gIGlmICh0eXBlb2YgYWJzdHJhY3ROb2RlcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaHRtbEVzY2FwZShhYnN0cmFjdE5vZGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCI8XCIuY29uY2F0KHRhZywgXCIgXCIpLmNvbmNhdChqb2luQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSwgXCI+XCIpLmNvbmNhdChjaGlsZHJlbi5tYXAodG9IdG1sKS5qb2luKCcnKSwgXCI8L1wiKS5jb25jYXQodGFnLCBcIj5cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gaWNvbkZyb21NYXBwaW5nKG1hcHBpbmcsIHByZWZpeCwgaWNvbk5hbWUpIHtcbiAgaWYgKG1hcHBpbmcgJiYgbWFwcGluZ1twcmVmaXhdICYmIG1hcHBpbmdbcHJlZml4XVtpY29uTmFtZV0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4LFxuICAgICAgaWNvbk5hbWUsXG4gICAgICBpY29uOiBtYXBwaW5nW3ByZWZpeF1baWNvbk5hbWVdXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciB0byBiaW5kIGEgZnVuY3Rpb24ga25vd24gdG8gaGF2ZSA0IGFyZ3VtZW50c1xuICogdG8gYSBnaXZlbiBjb250ZXh0LlxuICovXG5cbnZhciBiaW5kSW50ZXJuYWw0ID0gZnVuY3Rpb24gYmluZEludGVybmFsNChmdW5jLCB0aGlzQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNDb250ZXh0LCBhLCBiLCBjLCBkKTtcbiAgfTtcbn07XG5cbi8qKlxuICogIyBSZWR1Y2VcbiAqXG4gKiBBIGZhc3Qgb2JqZWN0IGAucmVkdWNlKClgIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gICBzdWJqZWN0ICAgICAgVGhlIG9iamVjdCB0byByZWR1Y2Ugb3Zlci5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgVGhlIHJlZHVjZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gIHttaXhlZH0gICAgaW5pdGlhbFZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgcmVkdWNlciwgZGVmYXVsdHMgdG8gc3ViamVjdFswXS5cbiAqIEBwYXJhbSAge09iamVjdH0gICB0aGlzQ29udGV4dCAgVGhlIGNvbnRleHQgZm9yIHRoZSByZWR1Y2VyLlxuICogQHJldHVybiB7bWl4ZWR9ICAgICAgICAgICAgICAgICBUaGUgZmluYWwgcmVzdWx0LlxuICovXG5cblxudmFyIHJlZHVjZSA9IGZ1bmN0aW9uIGZhc3RSZWR1Y2VPYmplY3Qoc3ViamVjdCwgZm4sIGluaXRpYWxWYWx1ZSwgdGhpc0NvbnRleHQpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzdWJqZWN0KSxcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgaXRlcmF0b3IgPSB0aGlzQ29udGV4dCAhPT0gdW5kZWZpbmVkID8gYmluZEludGVybmFsNChmbiwgdGhpc0NvbnRleHQpIDogZm4sXG4gICAgICBpLFxuICAgICAga2V5LFxuICAgICAgcmVzdWx0O1xuXG4gIGlmIChpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAxO1xuICAgIHJlc3VsdCA9IHN1YmplY3Rba2V5c1swXV07XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gICAgcmVzdWx0ID0gaW5pdGlhbFZhbHVlO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCBzdWJqZWN0W2tleV0sIGtleSwgc3ViamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiB1Y3MyZGVjb2RlKCkgYW5kIGNvZGVQb2ludEF0KCkgYXJlIGJvdGggd29ya3Mgb2YgTWF0aGlhcyBCeW5lbnMgYW5kIGxpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIENvcHlyaWdodCBNYXRoaWFzIEJ5bmVucyA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlLz5cblxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiAqIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4gKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIGxldCBjb3VudGVyID0gMDtcbiAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblxuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblxuICAgICAgaWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgICAgIG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHRvSGV4KHVuaWNvZGUpIHtcbiAgY29uc3QgZGVjb2RlZCA9IHVjczJkZWNvZGUodW5pY29kZSk7XG4gIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMSA/IGRlY29kZWRbMF0udG9TdHJpbmcoMTYpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgaW5kZXgpIHtcbiAgY29uc3Qgc2l6ZSA9IHN0cmluZy5sZW5ndGg7XG4gIGxldCBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgbGV0IHNlY29uZDtcblxuICBpZiAoZmlyc3QgPj0gMHhEODAwICYmIGZpcnN0IDw9IDB4REJGRiAmJiBzaXplID4gaW5kZXggKyAxKSB7XG4gICAgc2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblxuICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHtcbiAgICAgIHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaXJzdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSWNvbnMoaWNvbnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGljb25zKS5yZWR1Y2UoKGFjYywgaWNvbk5hbWUpID0+IHtcbiAgICBjb25zdCBpY29uID0gaWNvbnNbaWNvbk5hbWVdO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gISFpY29uLmljb247XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIGFjY1tpY29uLmljb25OYW1lXSA9IGljb24uaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2ljb25OYW1lXSA9IGljb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXgsIGljb25zKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBjb25zdCB7XG4gICAgc2tpcEhvb2tzID0gZmFsc2VcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUljb25zKGljb25zKTtcblxuICBpZiAodHlwZW9mIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrID09PSAnZnVuY3Rpb24nICYmICFza2lwSG9va3MpIHtcbiAgICBuYW1lc3BhY2UuaG9va3MuYWRkUGFjayhwcmVmaXgsIG5vcm1hbGl6ZUljb25zKGljb25zKSk7XG4gIH0gZWxzZSB7XG4gICAgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdID0geyAuLi4obmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdIHx8IHt9KSxcbiAgICAgIC4uLm5vcm1hbGl6ZWRcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBGb250IEF3ZXNvbWUgNCB1c2VkIHRoZSBwcmVmaXggb2YgYGZhYCBmb3IgYWxsIGljb25zLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb25cbiAgICogb2YgbmV3IHN0eWxlcyB3ZSBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZW0uIFByZWZpeCBgZmFgIGlzIG5vdyBhbiBhbGlhc1xuICAgKiBmb3IgYGZhc2Agc28gd2UnbGwgZWFzZSB0aGUgdXBncmFkZSBwcm9jZXNzIGZvciBvdXIgdXNlcnMgYnkgYXV0b21hdGljYWxseSBkZWZpbmluZ1xuICAgKiB0aGlzIGFzIHdlbGwuXG4gICAqL1xuXG5cbiAgaWYgKHByZWZpeCA9PT0gJ2ZhcycpIHtcbiAgICBkZWZpbmVJY29ucygnZmEnLCBpY29ucyk7XG4gIH1cbn1cblxuY29uc3Qge1xuICBzdHlsZXMsXG4gIHNoaW1zXG59ID0gbmFtZXNwYWNlO1xuY29uc3QgTE9OR19TVFlMRSA9IHtcbiAgW2FdOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW2FdKSxcbiAgW3JdOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW3JdKSxcbiAgW29dOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW29dKVxufTtcbmxldCBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IG51bGw7XG5sZXQgX2J5VW5pY29kZSA9IHt9O1xubGV0IF9ieUxpZ2F0dXJlID0ge307XG5sZXQgX2J5T2xkTmFtZSA9IHt9O1xubGV0IF9ieU9sZFVuaWNvZGUgPSB7fTtcbmxldCBfYnlBbGlhcyA9IHt9O1xuY29uc3QgUFJFRklYRVMgPSB7XG4gIFthXTogT2JqZWN0LmtleXMoUFJFRklYX1RPX1NUWUxFW2FdKSxcbiAgW3JdOiBPYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbcl0pLFxuICBbb106IE9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtvXSlcbn07XG5cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQobmFtZSkge1xuICByZXR1cm4gflJFU0VSVkVEX0NMQVNTRVMuaW5kZXhPZihuYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWUoY3NzUHJlZml4LCBjbHMpIHtcbiAgY29uc3QgcGFydHMgPSBjbHMuc3BsaXQoJy0nKTtcbiAgY29uc3QgcHJlZml4ID0gcGFydHNbMF07XG4gIGNvbnN0IGljb25OYW1lID0gcGFydHMuc2xpY2UoMSkuam9pbignLScpO1xuXG4gIGlmIChwcmVmaXggPT09IGNzc1ByZWZpeCAmJiBpY29uTmFtZSAhPT0gJycgJiYgIWlzUmVzZXJ2ZWQoaWNvbk5hbWUpKSB7XG4gICAgcmV0dXJuIGljb25OYW1lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5jb25zdCBidWlsZCA9ICgpID0+IHtcbiAgY29uc3QgbG9va3VwID0gcmVkdWNlciA9PiB7XG4gICAgcmV0dXJuIHJlZHVjZShzdHlsZXMsIChvJCQxLCBzdHlsZSwgcHJlZml4KSA9PiB7XG4gICAgICBvJCQxW3ByZWZpeF0gPSByZWR1Y2Uoc3R5bGUsIHJlZHVjZXIsIHt9KTtcbiAgICAgIHJldHVybiBvJCQxO1xuICAgIH0sIHt9KTtcbiAgfTtcblxuICBfYnlVbmljb2RlID0gbG9va3VwKChhY2MsIGljb24sIGljb25OYW1lKSA9PiB7XG4gICAgaWYgKGljb25bM10pIHtcbiAgICAgIGFjY1tpY29uWzNdXSA9IGljb25OYW1lO1xuICAgIH1cblxuICAgIGlmIChpY29uWzJdKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gaWNvblsyXS5maWx0ZXIoYSQkMSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gJ251bWJlcic7XG4gICAgICB9KTtcbiAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgIGFjY1thbGlhcy50b1N0cmluZygxNildID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5TGlnYXR1cmUgPSBsb29rdXAoKGFjYywgaWNvbiwgaWNvbk5hbWUpID0+IHtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IGljb25bMl0uZmlsdGVyKGEkJDEgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEkJDEgPT09ICdzdHJpbmcnO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5QWxpYXMgPSBsb29rdXAoKGFjYywgaWNvbiwgaWNvbk5hbWUpID0+IHtcbiAgICBjb25zdCBhbGlhc2VzID0gaWNvblsyXTtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG4gICAgYWxpYXNlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9KTsgLy8gSWYgd2UgaGF2ZSBhIEtpdCwgd2UgY2FuJ3QgZGV0ZXJtaW5lIGlmIHJlZ3VsYXIgaXMgYXZhaWxhYmxlIHNpbmNlIHdlXG4gIC8vIGNvdWxkIGJlIGF1dG8tZmV0Y2hpbmcgaXQuIFdlJ2xsIGhhdmUgdG8gYXNzdW1lIHRoYXQgaXQgaXMgYXZhaWxhYmxlLlxuXG4gIGNvbnN0IGhhc1JlZ3VsYXIgPSAnZmFyJyBpbiBzdHlsZXMgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZztcbiAgY29uc3Qgc2hpbUxvb2t1cHMgPSByZWR1Y2Uoc2hpbXMsIChhY2MsIHNoaW0pID0+IHtcbiAgICBjb25zdCBtYXliZU5hbWVNYXliZVVuaWNvZGUgPSBzaGltWzBdO1xuICAgIGxldCBwcmVmaXggPSBzaGltWzFdO1xuICAgIGNvbnN0IGljb25OYW1lID0gc2hpbVsyXTtcblxuICAgIGlmIChwcmVmaXggPT09ICdmYXInICYmICFoYXNSZWd1bGFyKSB7XG4gICAgICBwcmVmaXggPSAnZmFzJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFjYy5uYW1lc1ttYXliZU5hbWVNYXliZVVuaWNvZGVdID0ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHtcbiAgICBuYW1lczoge30sXG4gICAgdW5pY29kZXM6IHt9XG4gIH0pO1xuICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7XG4gIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlcztcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnLnN0eWxlRGVmYXVsdCwge1xuICAgIGZhbWlseTogY29uZmlnLmZhbWlseURlZmF1bHRcbiAgfSk7XG59O1xub25DaGFuZ2UoYyQkMSA9PiB7XG4gIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGMkJDEuc3R5bGVEZWZhdWx0LCB7XG4gICAgZmFtaWx5OiBjb25maWcuZmFtaWx5RGVmYXVsdFxuICB9KTtcbn0pO1xuYnVpbGQoKTtcbmZ1bmN0aW9uIGJ5VW5pY29kZShwcmVmaXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIChfYnlVbmljb2RlW3ByZWZpeF0gfHwge30pW3VuaWNvZGVdO1xufVxuZnVuY3Rpb24gYnlMaWdhdHVyZShwcmVmaXgsIGxpZ2F0dXJlKSB7XG4gIHJldHVybiAoX2J5TGlnYXR1cmVbcHJlZml4XSB8fCB7fSlbbGlnYXR1cmVdO1xufVxuZnVuY3Rpb24gYnlBbGlhcyhwcmVmaXgsIGFsaWFzKSB7XG4gIHJldHVybiAoX2J5QWxpYXNbcHJlZml4XSB8fCB7fSlbYWxpYXNdO1xufVxuZnVuY3Rpb24gYnlPbGROYW1lKG5hbWUpIHtcbiAgcmV0dXJuIF9ieU9sZE5hbWVbbmFtZV0gfHwge1xuICAgIHByZWZpeDogbnVsbCxcbiAgICBpY29uTmFtZTogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gYnlPbGRVbmljb2RlKHVuaWNvZGUpIHtcbiAgY29uc3Qgb2xkVW5pY29kZSA9IF9ieU9sZFVuaWNvZGVbdW5pY29kZV07XG4gIGNvbnN0IG5ld1VuaWNvZGUgPSBieVVuaWNvZGUoJ2ZhcycsIHVuaWNvZGUpO1xuICByZXR1cm4gb2xkVW5pY29kZSB8fCAobmV3VW5pY29kZSA/IHtcbiAgICBwcmVmaXg6ICdmYXMnLFxuICAgIGljb25OYW1lOiBuZXdVbmljb2RlXG4gIH0gOiBudWxsKSB8fCB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkge1xuICByZXR1cm4gX2RlZmF1bHRVc2FibGVQcmVmaXg7XG59XG5jb25zdCBlbXB0eUNhbm9uaWNhbEljb24gPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsLFxuICAgIHJlc3Q6IFtdXG4gIH07XG59O1xuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlT3JQcmVmaXgpIHtcbiAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIGNvbnN0IHtcbiAgICBmYW1pbHkgPSBhXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHN0eWxlID0gUFJFRklYX1RPX1NUWUxFW2ZhbWlseV1bc3R5bGVPclByZWZpeF07XG4gIGNvbnN0IHByZWZpeCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTtcbiAgY29uc3QgZGVmaW5lZCA9IHN0eWxlT3JQcmVmaXggaW4gbmFtZXNwYWNlLnN0eWxlcyA/IHN0eWxlT3JQcmVmaXggOiBudWxsO1xuICBjb25zdCByZXN1bHQgPSBwcmVmaXggfHwgZGVmaW5lZCB8fCBudWxsO1xuICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgUFJFRklYRVNfRk9SX0ZBTUlMWSA9IHtcbiAgW2FdOiBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVthXSksXG4gIFtyXTogT2JqZWN0LmtleXMoUFJFRklYX1RPX0xPTkdfU1RZTEVbcl0pLFxuICBbb106IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW29dKVxufTtcbmZ1bmN0aW9uIGdldENhbm9uaWNhbEljb24odmFsdWVzKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBjb25zdCB7XG4gICAgc2tpcExvb2t1cHMgPSBmYWxzZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmYW1Qcm9wcyA9IHtcbiAgICBbYV06IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoYSksXG4gICAgW3JdOiBcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KHIpLFxuICAgIFtvXTogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChvKVxuICB9O1xuICBsZXQgZ2l2ZW5QcmVmaXggPSBudWxsO1xuICBsZXQgZmFtaWx5ID0gYTtcbiAgY29uc3Qgbm9uRHVvdG9uZUZhbWlseUlkcyA9IGMuZmlsdGVyKGZhbWlseUlkID0+IGZhbWlseUlkICE9PSB0KTtcbiAgbm9uRHVvdG9uZUZhbWlseUlkcy5mb3JFYWNoKGZhbWlseUlkID0+IHtcbiAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW2ZhbWlseUlkXSkgfHwgdmFsdWVzLnNvbWUodiQkMSA9PiBQUkVGSVhFU19GT1JfRkFNSUxZW2ZhbWlseUlkXS5pbmNsdWRlcyh2JCQxKSkpIHtcbiAgICAgIGZhbWlseSA9IGZhbWlseUlkO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGNhbm9uaWNhbCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgY2xzKSA9PiB7XG4gICAgY29uc3QgaWNvbk5hbWUgPSBnZXRJY29uTmFtZShjb25maWcuY3NzUHJlZml4LCBjbHMpO1xuXG4gICAgaWYgKHN0eWxlc1tjbHNdKSB7XG4gICAgICBjbHMgPSBMT05HX1NUWUxFW2ZhbWlseV0uaW5jbHVkZXMoY2xzKSA/IExPTkdfU1RZTEVfVE9fUFJFRklYW2ZhbWlseV1bY2xzXSA6IGNscztcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGNscztcbiAgICB9IGVsc2UgaWYgKFBSRUZJWEVTW2ZhbWlseV0uaW5kZXhPZihjbHMpID4gLTEpIHtcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjbHMsIHtcbiAgICAgICAgZmFtaWx5XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGljb25OYW1lKSB7XG4gICAgICBhY2MuaWNvbk5hbWUgPSBpY29uTmFtZTtcbiAgICB9IGVsc2UgaWYgKGNscyAhPT0gY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgJiYgIW5vbkR1b3RvbmVGYW1pbHlJZHMuc29tZShmYW1pbHlOYW1lID0+IGNscyA9PT0gZmFtUHJvcHNbZmFtaWx5TmFtZV0pKSB7XG4gICAgICBhY2MucmVzdC5wdXNoKGNscyk7XG4gICAgfVxuXG4gICAgaWYgKCFza2lwTG9va3VwcyAmJiBhY2MucHJlZml4ICYmIGFjYy5pY29uTmFtZSkge1xuICAgICAgY29uc3Qgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAnZmEnID8gYnlPbGROYW1lKGFjYy5pY29uTmFtZSkgOiB7fTtcbiAgICAgIGNvbnN0IGFsaWFzSWNvbk5hbWUgPSBieUFsaWFzKGFjYy5wcmVmaXgsIGFjYy5pY29uTmFtZSk7XG5cbiAgICAgIGlmIChzaGltLnByZWZpeCkge1xuICAgICAgICBnaXZlblByZWZpeCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFjYy5pY29uTmFtZSA9IHNoaW0uaWNvbk5hbWUgfHwgYWxpYXNJY29uTmFtZSB8fCBhY2MuaWNvbk5hbWU7XG4gICAgICBhY2MucHJlZml4ID0gc2hpbS5wcmVmaXggfHwgYWNjLnByZWZpeDtcblxuICAgICAgaWYgKGFjYy5wcmVmaXggPT09ICdmYXInICYmICFzdHlsZXNbJ2ZhciddICYmIHN0eWxlc1snZmFzJ10gJiYgIWNvbmZpZy5hdXRvRmV0Y2hTdmcpIHtcbiAgICAgICAgLy8gQWxsb3cgYSBmYWxsYmFjayBmcm9tIHRoZSByZWd1bGFyIHN0eWxlIHRvIHNvbGlkIGlmIHJlZ3VsYXIgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgICAvLyBidXQgb25seSBpZiB3ZSBhcmVuJ3QgYXV0by1mZXRjaGluZyBTVkdzXG4gICAgICAgIGFjYy5wcmVmaXggPSAnZmFzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBlbXB0eUNhbm9uaWNhbEljb24oKSk7XG5cbiAgaWYgKHZhbHVlcy5pbmNsdWRlcygnZmEtYnJhbmRzJykgfHwgdmFsdWVzLmluY2x1ZGVzKCdmYWInKSkge1xuICAgIGNhbm9uaWNhbC5wcmVmaXggPSAnZmFiJztcbiAgfVxuXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMoJ2ZhLWR1b3RvbmUnKSB8fCB2YWx1ZXMuaW5jbHVkZXMoJ2ZhZCcpKSB7XG4gICAgY2Fub25pY2FsLnByZWZpeCA9ICdmYWQnO1xuICB9XG5cbiAgaWYgKCFjYW5vbmljYWwucHJlZml4ICYmIGZhbWlseSA9PT0gciAmJiAoc3R5bGVzWydmYXNzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc3MnO1xuICAgIGNhbm9uaWNhbC5pY29uTmFtZSA9IGJ5QWxpYXMoY2Fub25pY2FsLnByZWZpeCwgY2Fub25pY2FsLmljb25OYW1lKSB8fCBjYW5vbmljYWwuaWNvbk5hbWU7XG4gIH1cblxuICBpZiAoIWNhbm9uaWNhbC5wcmVmaXggJiYgZmFtaWx5ID09PSBvICYmIChzdHlsZXNbJ2Zhc2RzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc2RzJztcbiAgICBjYW5vbmljYWwuaWNvbk5hbWUgPSBieUFsaWFzKGNhbm9uaWNhbC5wcmVmaXgsIGNhbm9uaWNhbC5pY29uTmFtZSkgfHwgY2Fub25pY2FsLmljb25OYW1lO1xuICB9XG5cbiAgaWYgKGNhbm9uaWNhbC5wcmVmaXggPT09ICdmYScgfHwgZ2l2ZW5QcmVmaXggPT09ICdmYScpIHtcbiAgICAvLyBUaGUgZmEgcHJlZml4IGlzIG5vdCBjYW5vbmljYWwuIFNvIGlmIGl0IGhhcyBtYWRlIGl0IHRocm91Z2ggdW50aWwgdGhpcyBwb2ludFxuICAgIC8vIHdlIHdpbGwgc2hpZnQgaXQgdG8gdGhlIGNvcnJlY3QgcHJlZml4LlxuICAgIGNhbm9uaWNhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgfHwgJ2Zhcyc7XG4gIH1cblxuICByZXR1cm4gY2Fub25pY2FsO1xufVxuXG5jbGFzcyBMaWJyYXJ5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICB9XG5cbiAgYWRkKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGRlZmluaXRpb25zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZGl0aW9ucyA9IGRlZmluaXRpb25zLnJlZHVjZSh0aGlzLl9wdWxsRGVmaW5pdGlvbnMsIHt9KTtcbiAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbnNba2V5XSA9IHsgLi4uKHRoaXMuZGVmaW5pdGlvbnNba2V5XSB8fCB7fSksXG4gICAgICAgIC4uLmFkZGl0aW9uc1trZXldXG4gICAgICB9O1xuICAgICAgZGVmaW5lSWNvbnMoa2V5LCBhZGRpdGlvbnNba2V5XSk7IC8vIFRPRE8gY2FuIHdlIHN0b3AgZG9pbmcgdGhpcz8gV2UgY2FuJ3QgZ2V0IHRoZSBpY29ucyBieSAnZmEtc29saWQnIGFueSBsb25nZXIgc28gdGhpcyBwcm9iYWJseSBuZWVkcyB0byBjaGFuZ2VcblxuICAgICAgY29uc3QgbG9uZ1ByZWZpeCA9IFBSRUZJWF9UT19MT05HX1NUWUxFW2FdW2tleV07XG4gICAgICBpZiAobG9uZ1ByZWZpeCkgZGVmaW5lSWNvbnMobG9uZ1ByZWZpeCwgYWRkaXRpb25zW2tleV0pO1xuICAgICAgYnVpbGQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgfVxuXG4gIF9wdWxsRGVmaW5pdGlvbnMoYWRkaXRpb25zLCBkZWZpbml0aW9uKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGRlZmluaXRpb24ucHJlZml4ICYmIGRlZmluaXRpb24uaWNvbk5hbWUgJiYgZGVmaW5pdGlvbi5pY29uID8ge1xuICAgICAgMDogZGVmaW5pdGlvblxuICAgIH0gOiBkZWZpbml0aW9uO1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lLFxuICAgICAgICBpY29uXG4gICAgICB9ID0gbm9ybWFsaXplZFtrZXldO1xuICAgICAgY29uc3QgYWxpYXNlcyA9IGljb25bMl07XG4gICAgICBpZiAoIWFkZGl0aW9uc1twcmVmaXhdKSBhZGRpdGlvbnNbcHJlZml4XSA9IHt9O1xuXG4gICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXhdW2FsaWFzXSA9IGljb247XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25zW3ByZWZpeF1baWNvbk5hbWVdID0gaWNvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gYWRkaXRpb25zO1xuICB9XG5cbn1cblxubGV0IF9wbHVnaW5zID0gW107XG5sZXQgX2hvb2tzID0ge307XG5jb25zdCBwcm92aWRlcnMgPSB7fTtcbmNvbnN0IGRlZmF1bHRQcm92aWRlcktleXMgPSBPYmplY3Qua2V5cyhwcm92aWRlcnMpO1xuZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW5zKG5leHRQbHVnaW5zLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgbWl4b3V0c1RvOiBvYmpcbiAgfSA9IF9yZWY7XG4gIF9wbHVnaW5zID0gbmV4dFBsdWdpbnM7XG4gIF9ob29rcyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goayA9PiB7XG4gICAgaWYgKGRlZmF1bHRQcm92aWRlcktleXMuaW5kZXhPZihrKSA9PT0gLTEpIHtcbiAgICAgIGRlbGV0ZSBwcm92aWRlcnNba107XG4gICAgfVxuICB9KTtcblxuICBfcGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgY29uc3QgbWl4b3V0ID0gcGx1Z2luLm1peG91dCA/IHBsdWdpbi5taXhvdXQoKSA6IHt9O1xuICAgIE9iamVjdC5rZXlzKG1peG91dCkuZm9yRWFjaCh0ayA9PiB7XG4gICAgICBpZiAodHlwZW9mIG1peG91dFt0a10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqW3RrXSA9IG1peG91dFt0a107XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbWl4b3V0W3RrXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0W3RrXSkuZm9yRWFjaChzayA9PiB7XG4gICAgICAgICAgaWYgKCFvYmpbdGtdKSB7XG4gICAgICAgICAgICBvYmpbdGtdID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2JqW3RrXVtza10gPSBtaXhvdXRbdGtdW3NrXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGx1Z2luLmhvb2tzKSB7XG4gICAgICBjb25zdCBob29rcyA9IHBsdWdpbi5ob29rcygpO1xuICAgICAgT2JqZWN0LmtleXMoaG9va3MpLmZvckVhY2goaG9vayA9PiB7XG4gICAgICAgIGlmICghX2hvb2tzW2hvb2tdKSB7XG4gICAgICAgICAgX2hvb2tzW2hvb2tdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBfaG9va3NbaG9va10ucHVzaChob29rc1tob29rXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2luLnByb3ZpZGVzKSB7XG4gICAgICBwbHVnaW4ucHJvdmlkZXMocHJvdmlkZXJzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBjaGFpbkhvb2tzKGhvb2ssIGFjY3VtdWxhdG9yKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGNvbnN0IGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChob29rRm4gPT4ge1xuICAgIGFjY3VtdWxhdG9yID0gaG9va0ZuLmFwcGx5KG51bGwsIFthY2N1bXVsYXRvciwgLi4uYXJnc10pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgY29uc3QgaG9va0ZucyA9IF9ob29rc1tob29rXSB8fCBbXTtcbiAgaG9va0Zucy5mb3JFYWNoKGhvb2tGbiA9PiB7XG4gICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNhbGxQcm92aWRlZCgpIHtcbiAgY29uc3QgaG9vayA9IGFyZ3VtZW50c1swXTtcbiAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHJldHVybiBwcm92aWRlcnNbaG9va10gPyBwcm92aWRlcnNbaG9va10uYXBwbHkobnVsbCwgYXJncykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uRGVmaW5pdGlvbihpY29uTG9va3VwKSB7XG4gIGlmIChpY29uTG9va3VwLnByZWZpeCA9PT0gJ2ZhJykge1xuICAgIGljb25Mb29rdXAucHJlZml4ID0gJ2Zhcyc7XG4gIH1cblxuICBsZXQge1xuICAgIGljb25OYW1lXG4gIH0gPSBpY29uTG9va3VwO1xuICBjb25zdCBwcmVmaXggPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybjtcbiAgaWNvbk5hbWUgPSBieUFsaWFzKHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25OYW1lO1xuICByZXR1cm4gaWNvbkZyb21NYXBwaW5nKGxpYnJhcnkuZGVmaW5pdGlvbnMsIHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXgsIGljb25OYW1lKTtcbn1cbmNvbnN0IGxpYnJhcnkgPSBuZXcgTGlicmFyeSgpO1xuY29uc3Qgbm9BdXRvID0gKCkgPT4ge1xuICBjb25maWcuYXV0b1JlcGxhY2VTdmcgPSBmYWxzZTtcbiAgY29uZmlnLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTtcbiAgY2FsbEhvb2tzKCdub0F1dG8nKTtcbn07XG5jb25zdCBkb20gPSB7XG4gIGkyc3ZnOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBpZiAoSVNfRE9NKSB7XG4gICAgICBjYWxsSG9va3MoJ2JlZm9yZUkyc3ZnJywgcGFyYW1zKTtcbiAgICAgIGNhbGxQcm92aWRlZCgncHNldWRvRWxlbWVudHMyc3ZnJywgcGFyYW1zKTtcbiAgICAgIHJldHVybiBjYWxsUHJvdmlkZWQoJ2kyc3ZnJywgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignT3BlcmF0aW9uIHJlcXVpcmVzIGEgRE9NIG9mIHNvbWUga2luZC4nKSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDogZnVuY3Rpb24gKCkge1xuICAgIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dG9SZXBsYWNlU3ZnUm9vdFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7XG4gICAgZG9tcmVhZHkoKCkgPT4ge1xuICAgICAgYXV0b1JlcGxhY2Uoe1xuICAgICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3RcbiAgICAgIH0pO1xuICAgICAgY2FsbEhvb2tzKCd3YXRjaCcsIHBhcmFtcyk7XG4gICAgfSk7XG4gIH1cbn07XG5jb25zdCBwYXJzZSA9IHtcbiAgaWNvbjogaWNvbiA9PiB7XG4gICAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ29iamVjdCcgJiYgaWNvbi5wcmVmaXggJiYgaWNvbi5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBpY29uLnByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMoaWNvbi5wcmVmaXgsIGljb24uaWNvbk5hbWUpIHx8IGljb24uaWNvbk5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IGljb25OYW1lID0gaWNvblsxXS5pbmRleE9mKCdmYS0nKSA9PT0gMCA/IGljb25bMV0uc2xpY2UoMykgOiBpY29uWzFdO1xuICAgICAgY29uc3QgcHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGljb25bMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhwcmVmaXgsIGljb25OYW1lKSB8fCBpY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnICYmIChpY29uLmluZGV4T2YoXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpKSA+IC0xIHx8IGljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkge1xuICAgICAgY29uc3QgY2Fub25pY2FsSWNvbiA9IGdldENhbm9uaWNhbEljb24oaWNvbi5zcGxpdCgnICcpLCB7XG4gICAgICAgIHNraXBMb29rdXBzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogY2Fub25pY2FsSWNvbi5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpLFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhjYW5vbmljYWxJY29uLnByZWZpeCwgY2Fub25pY2FsSWNvbi5pY29uTmFtZSkgfHwgY2Fub25pY2FsSWNvbi5pY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lOiBieUFsaWFzKHByZWZpeCwgaWNvbikgfHwgaWNvblxuICAgICAgfTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBhcGkgPSB7XG4gIG5vQXV0byxcbiAgY29uZmlnLFxuICBkb20sXG4gIHBhcnNlLFxuICBsaWJyYXJ5LFxuICBmaW5kSWNvbkRlZmluaXRpb24sXG4gIHRvSHRtbFxufTtcblxuY29uc3QgYXV0b1JlcGxhY2UgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICBjb25zdCB7XG4gICAgYXV0b1JlcGxhY2VTdmdSb290ID0gRE9DVU1FTlRcbiAgfSA9IHBhcmFtcztcbiAgaWYgKChPYmplY3Qua2V5cyhuYW1lc3BhY2Uuc3R5bGVzKS5sZW5ndGggPiAwIHx8IGNvbmZpZy5hdXRvRmV0Y2hTdmcpICYmIElTX0RPTSAmJiBjb25maWcuYXV0b1JlcGxhY2VTdmcpIGFwaS5kb20uaTJzdmcoe1xuICAgIG5vZGU6IGF1dG9SZXBsYWNlU3ZnUm9vdFxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbVZhcmlhbnRzKHZhbCwgYWJzdHJhY3RDcmVhdG9yKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICdhYnN0cmFjdCcsIHtcbiAgICBnZXQ6IGFic3RyYWN0Q3JlYXRvclxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ2h0bWwnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdmFsLmFic3RyYWN0Lm1hcChhID0+IHRvSHRtbChhKSk7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ25vZGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIUlTX0RPTSkgcmV0dXJuO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdmFsLmh0bWw7XG4gICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGFzSWNvbiAoX3JlZikge1xuICBsZXQge1xuICAgIGNoaWxkcmVuLFxuICAgIG1haW4sXG4gICAgbWFzayxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN0eWxlcyxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IF9yZWY7XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pICYmIG1haW4uZm91bmQgJiYgIW1hc2suZm91bmQpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBtYWluO1xuICAgIGNvbnN0IG9mZnNldCA9IHtcbiAgICAgIHg6IHdpZHRoIC8gaGVpZ2h0IC8gMixcbiAgICAgIHk6IDAuNVxuICAgIH07XG4gICAgYXR0cmlidXRlc1snc3R5bGUnXSA9IGpvaW5TdHlsZXMoeyAuLi5zdHlsZXMsXG4gICAgICAndHJhbnNmb3JtLW9yaWdpbic6IFwiXCIuY29uY2F0KG9mZnNldC54ICsgdHJhbnNmb3JtLnggLyAxNiwgXCJlbSBcIikuY29uY2F0KG9mZnNldC55ICsgdHJhbnNmb3JtLnkgLyAxNiwgXCJlbVwiKVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFt7XG4gICAgdGFnOiAnc3ZnJyxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGNoaWxkcmVuXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBhc1N5bWJvbCAoX3JlZikge1xuICBsZXQge1xuICAgIHByZWZpeCxcbiAgICBpY29uTmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN5bWJvbFxuICB9ID0gX3JlZjtcbiAgY29uc3QgaWQgPSBzeW1ib2wgPT09IHRydWUgPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiLVwiKS5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiBzeW1ib2w7XG4gIHJldHVybiBbe1xuICAgIHRhZzogJ3N2ZycsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbe1xuICAgICAgdGFnOiAnc3ltYm9sJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgaWRcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlblxuICAgIH1dXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBtYWtlSW5saW5lU3ZnQWJzdHJhY3QocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICBpY29uczoge1xuICAgICAgbWFpbixcbiAgICAgIG1hc2tcbiAgICB9LFxuICAgIHByZWZpeCxcbiAgICBpY29uTmFtZSxcbiAgICB0cmFuc2Zvcm0sXG4gICAgc3ltYm9sLFxuICAgIHRpdGxlLFxuICAgIG1hc2tJZCxcbiAgICB0aXRsZUlkLFxuICAgIGV4dHJhLFxuICAgIHdhdGNoYWJsZSA9IGZhbHNlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IG1hc2suZm91bmQgPyBtYXNrIDogbWFpbjtcbiAgY29uc3QgaXNVcGxvYWRlZEljb24gPSBwcmVmaXggPT09ICdmYWsnO1xuICBjb25zdCBhdHRyQ2xhc3MgPSBbY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiAnJ10uZmlsdGVyKGMgPT4gZXh0cmEuY2xhc3Nlcy5pbmRleE9mKGMpID09PSAtMSkuZmlsdGVyKGMgPT4gYyAhPT0gJycgfHwgISFjKS5jb25jYXQoZXh0cmEuY2xhc3Nlcykuam9pbignICcpO1xuICBsZXQgY29udGVudCA9IHtcbiAgICBjaGlsZHJlbjogW10sXG4gICAgYXR0cmlidXRlczogeyAuLi5leHRyYS5hdHRyaWJ1dGVzLFxuICAgICAgJ2RhdGEtcHJlZml4JzogcHJlZml4LFxuICAgICAgJ2RhdGEtaWNvbic6IGljb25OYW1lLFxuICAgICAgJ2NsYXNzJzogYXR0ckNsYXNzLFxuICAgICAgJ3JvbGUnOiBleHRyYS5hdHRyaWJ1dGVzLnJvbGUgfHwgJ2ltZycsXG4gICAgICAneG1sbnMnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgICAgJ3ZpZXdCb3gnOiBcIjAgMCBcIi5jb25jYXQod2lkdGgsIFwiIFwiKS5jb25jYXQoaGVpZ2h0KVxuICAgIH1cbiAgfTtcbiAgY29uc3QgdXBsb2FkZWRJY29uV2lkdGhTdHlsZSA9IGlzVXBsb2FkZWRJY29uICYmICF+ZXh0cmEuY2xhc3Nlcy5pbmRleE9mKCdmYS1mdycpID8ge1xuICAgIHdpZHRoOiBcIlwiLmNvbmNhdCh3aWR0aCAvIGhlaWdodCAqIDE2ICogMC4wNjI1LCBcImVtXCIpXG4gIH0gOiB7fTtcblxuICBpZiAod2F0Y2hhYmxlKSB7XG4gICAgY29udGVudC5hdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gJyc7XG4gIH1cblxuICBpZiAodGl0bGUpIHtcbiAgICBjb250ZW50LmNoaWxkcmVuLnB1c2goe1xuICAgICAgdGFnOiAndGl0bGUnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogY29udGVudC5hdHRyaWJ1dGVzWydhcmlhLWxhYmVsbGVkYnknXSB8fCBcInRpdGxlLVwiLmNvbmNhdCh0aXRsZUlkIHx8IG5leHRVbmlxdWVJZCgpKVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gICAgZGVsZXRlIGNvbnRlbnQuYXR0cmlidXRlcy50aXRsZTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSB7IC4uLmNvbnRlbnQsXG4gICAgcHJlZml4LFxuICAgIGljb25OYW1lLFxuICAgIG1haW4sXG4gICAgbWFzayxcbiAgICBtYXNrSWQsXG4gICAgdHJhbnNmb3JtLFxuICAgIHN5bWJvbCxcbiAgICBzdHlsZXM6IHsgLi4udXBsb2FkZWRJY29uV2lkdGhTdHlsZSxcbiAgICAgIC4uLmV4dHJhLnN0eWxlc1xuICAgIH1cbiAgfTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGF0dHJpYnV0ZXNcbiAgfSA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdE1hc2snLCBhcmdzKSB8fCB7XG4gICAgY2hpbGRyZW46IFtdLFxuICAgIGF0dHJpYnV0ZXM6IHt9XG4gIH0gOiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RJY29uJywgYXJncykgfHwge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuICB9O1xuICBhcmdzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIGFyZ3MuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG5cbiAgaWYgKHN5bWJvbCkge1xuICAgIHJldHVybiBhc1N5bWJvbChhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXNJY29uKGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgY29udGVudCxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdHJhbnNmb3JtLFxuICAgIHRpdGxlLFxuICAgIGV4dHJhLFxuICAgIHdhdGNoYWJsZSA9IGZhbHNlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7IC4uLmV4dHJhLmF0dHJpYnV0ZXMsXG4gICAgLi4uKHRpdGxlID8ge1xuICAgICAgJ3RpdGxlJzogdGl0bGVcbiAgICB9IDoge30pLFxuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH07XG5cbiAgaWYgKHdhdGNoYWJsZSkge1xuICAgIGF0dHJpYnV0ZXNbREFUQV9GQV9JMlNWR10gPSAnJztcbiAgfVxuXG4gIGNvbnN0IHN0eWxlcyA9IHsgLi4uZXh0cmEuc3R5bGVzXG4gIH07XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgc3R5bGVzWyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybUZvckNzcyh7XG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdGFydENlbnRlcmVkOiB0cnVlLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9KTtcbiAgICBzdHlsZXNbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBzdHlsZXNbJ3RyYW5zZm9ybSddO1xuICB9XG5cbiAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICBjb25zdCB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdChwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgdGl0bGUsXG4gICAgZXh0cmFcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYXR0cmlidXRlcyA9IHsgLi4uZXh0cmEuYXR0cmlidXRlcyxcbiAgICAuLi4odGl0bGUgPyB7XG4gICAgICAndGl0bGUnOiB0aXRsZVxuICAgIH0gOiB7fSksXG4gICAgJ2NsYXNzJzogZXh0cmEuY2xhc3Nlcy5qb2luKCcgJylcbiAgfTtcbiAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKGV4dHJhLnN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICBjb25zdCB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG5jb25zdCB7XG4gIHN0eWxlczogc3R5bGVzJDFcbn0gPSBuYW1lc3BhY2U7XG5mdW5jdGlvbiBhc0ZvdW5kSWNvbihpY29uKSB7XG4gIGNvbnN0IHdpZHRoID0gaWNvblswXTtcbiAgY29uc3QgaGVpZ2h0ID0gaWNvblsxXTtcbiAgY29uc3QgW3ZlY3RvckRhdGFdID0gaWNvbi5zbGljZSg0KTtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZlY3RvckRhdGEpKSB7XG4gICAgZWxlbWVudCA9IHtcbiAgICAgIHRhZzogJ2cnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuR1JPVVApXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlNFQ09OREFSWSksXG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgZDogdmVjdG9yRGF0YVswXVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlBSSU1BUlkpLFxuICAgICAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMV1cbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQgPSB7XG4gICAgICB0YWc6ICdwYXRoJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgIGQ6IHZlY3RvckRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3VuZDogdHJ1ZSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgaWNvbjogZWxlbWVudFxuICB9O1xufVxuY29uc3QgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7XG4gIGZvdW5kOiBmYWxzZSxcbiAgd2lkdGg6IDUxMixcbiAgaGVpZ2h0OiA1MTJcbn07XG5cbmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4KSB7XG4gIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSWNvbiB3aXRoIG5hbWUgXFxcIlwiLmNvbmNhdChpY29uTmFtZSwgXCJcXFwiIGFuZCBwcmVmaXggXFxcIlwiKS5jb25jYXQocHJlZml4LCBcIlxcXCIgaXMgbWlzc2luZy5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpIHtcbiAgbGV0IGdpdmVuUHJlZml4ID0gcHJlZml4O1xuXG4gIGlmIChwcmVmaXggPT09ICdmYScgJiYgY29uZmlnLnN0eWxlRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgIHByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGdpdmVuUHJlZml4ID09PSAnZmEnKSB7XG4gICAgICBjb25zdCBzaGltID0gYnlPbGROYW1lKGljb25OYW1lKSB8fCB7fTtcbiAgICAgIGljb25OYW1lID0gc2hpbS5pY29uTmFtZSB8fCBpY29uTmFtZTtcbiAgICAgIHByZWZpeCA9IHNoaW0ucHJlZml4IHx8IHByZWZpeDtcbiAgICB9XG5cbiAgICBpZiAoaWNvbk5hbWUgJiYgcHJlZml4ICYmIHN0eWxlcyQxW3ByZWZpeF0gJiYgc3R5bGVzJDFbcHJlZml4XVtpY29uTmFtZV0pIHtcbiAgICAgIGNvbnN0IGljb24gPSBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXTtcbiAgICAgIHJldHVybiByZXNvbHZlKGFzRm91bmRJY29uKGljb24pKTtcbiAgICB9XG5cbiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeCk7XG4gICAgcmVzb2x2ZSh7IC4uLm1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluLFxuICAgICAgaWNvbjogY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUgPyBjYWxsUHJvdmlkZWQoJ21pc3NpbmdJY29uQWJzdHJhY3QnKSB8fCB7fSA6IHt9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBub29wJDEgPSAoKSA9PiB7fTtcblxuY29uc3QgcCQyID0gY29uZmlnLm1lYXN1cmVQZXJmb3JtYW5jZSAmJiBQRVJGT1JNQU5DRSAmJiBQRVJGT1JNQU5DRS5tYXJrICYmIFBFUkZPUk1BTkNFLm1lYXN1cmUgPyBQRVJGT1JNQU5DRSA6IHtcbiAgbWFyazogbm9vcCQxLFxuICBtZWFzdXJlOiBub29wJDFcbn07XG5jb25zdCBwcmVhbWJsZSA9IFwiRkEgXFxcIjYuNi4wXFxcIlwiO1xuXG5jb25zdCBiZWdpbiA9IG5hbWUgPT4ge1xuICBwJDIubWFyayhcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBiZWdpbnNcIikpO1xuICByZXR1cm4gKCkgPT4gZW5kKG5hbWUpO1xufTtcblxuY29uc3QgZW5kID0gbmFtZSA9PiB7XG4gIHAkMi5tYXJrKFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGVuZHNcIikpO1xuICBwJDIubWVhc3VyZShcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lKSwgXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSwgXCIgYmVnaW5zXCIpLCBcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBlbmRzXCIpKTtcbn07XG5cbnZhciBwZXJmID0ge1xuICBiZWdpbixcbiAgZW5kXG59O1xuXG5jb25zdCBub29wJDIgPSAoKSA9PiB7fTtcblxuZnVuY3Rpb24gaXNXYXRjaGVkKG5vZGUpIHtcbiAgY29uc3QgaTJzdmcgPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpIDogbnVsbDtcbiAgcmV0dXJuIHR5cGVvZiBpMnN2ZyA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGhhc1ByZWZpeEFuZEljb24obm9kZSkge1xuICBjb25zdCBwcmVmaXggPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSA6IG51bGw7XG4gIGNvbnN0IGljb24gPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsO1xuICByZXR1cm4gcHJlZml4ICYmIGljb247XG59XG5cbmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUuY2xhc3NMaXN0ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHtcbiAgaWYgKGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlO1xuICB9XG5cbiAgY29uc3QgbXV0YXRvciA9IG11dGF0b3JzW2NvbmZpZy5hdXRvUmVwbGFjZVN2Z107XG4gIHJldHVybiBtdXRhdG9yIHx8IG11dGF0b3JzLnJlcGxhY2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyh0YWcpIHtcbiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB0YWcpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykge1xuICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0U1ZHKGFic3RyYWN0T2JqKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBjb25zdCB7XG4gICAgY2VGbiA9IGFic3RyYWN0T2JqLnRhZyA9PT0gJ3N2ZycgPyBjcmVhdGVFbGVtZW50TlMgOiBjcmVhdGVFbGVtZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKHR5cGVvZiBhYnN0cmFjdE9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopO1xuICB9XG5cbiAgY29uc3QgdGFnID0gY2VGbihhYnN0cmFjdE9iai50YWcpO1xuICBPYmplY3Qua2V5cyhhYnN0cmFjdE9iai5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKGtleSwgYWJzdHJhY3RPYmouYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG4gIGNvbnN0IGNoaWxkcmVuID0gYWJzdHJhY3RPYmouY2hpbGRyZW4gfHwgW107XG4gIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgdGFnLmFwcGVuZENoaWxkKGNvbnZlcnRTVkcoY2hpbGQsIHtcbiAgICAgIGNlRm5cbiAgICB9KSk7XG4gIH0pO1xuICByZXR1cm4gdGFnO1xufVxuXG5mdW5jdGlvbiBub2RlQXNDb21tZW50KG5vZGUpIHtcbiAgbGV0IGNvbW1lbnQgPSBcIiBcIi5jb25jYXQobm9kZS5vdXRlckhUTUwsIFwiIFwiKTtcbiAgLyogQkVHSU4uQVRUUklCVVRJT04gKi9cblxuICBjb21tZW50ID0gXCJcIi5jb25jYXQoY29tbWVudCwgXCJGb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIFwiKTtcbiAgLyogRU5ELkFUVFJJQlVUSU9OICovXG5cbiAgcmV0dXJuIGNvbW1lbnQ7XG59XG5cbmNvbnN0IG11dGF0b3JzID0ge1xuICByZXBsYWNlOiBmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICBjb25zdCBub2RlID0gbXV0YXRpb25bMF07XG5cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBtdXRhdGlvblsxXS5mb3JFYWNoKGFic3RyYWN0ID0+IHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb252ZXJ0U1ZHKGFic3RyYWN0KSwgbm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZy5rZWVwT3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZSkpO1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbW1lbnQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5lc3Q6IGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvblswXTtcbiAgICBjb25zdCBhYnN0cmFjdCA9IG11dGF0aW9uWzFdOyAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXBsYWNlZCBub2RlIHdlIGRvIG5vdCB3YW50IHRvIGNvbnRpbnVlIG5lc3Rpbmcgd2l0aGluIGl0LlxuICAgIC8vIFNob3J0LWNpcmN1aXQgdG8gdGhlIHN0YW5kYXJkIHJlcGxhY2VtZW50XG5cbiAgICBpZiAofmNsYXNzQXJyYXkobm9kZSkuaW5kZXhPZihjb25maWcucmVwbGFjZW1lbnRDbGFzcykpIHtcbiAgICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlKG11dGF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JTdmcgPSBuZXcgUmVnRXhwKFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLS4qXCIpKTtcbiAgICBkZWxldGUgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5pZDtcblxuICAgIGlmIChhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzKSB7XG4gICAgICBjb25zdCBzcGxpdENsYXNzZXMgPSBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzLnNwbGl0KCcgJykucmVkdWNlKChhY2MsIGNscykgPT4ge1xuICAgICAgICBpZiAoY2xzID09PSBjb25maWcucmVwbGFjZW1lbnRDbGFzcyB8fCBjbHMubWF0Y2goZm9yU3ZnKSkge1xuICAgICAgICAgIGFjYy50b1N2Zy5wdXNoKGNscyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjLnRvTm9kZS5wdXNoKGNscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge1xuICAgICAgICB0b05vZGU6IFtdLFxuICAgICAgICB0b1N2ZzogW11cbiAgICAgIH0pO1xuICAgICAgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcyA9IHNwbGl0Q2xhc3Nlcy50b1N2Zy5qb2luKCcgJyk7XG5cbiAgICAgIGlmIChzcGxpdENsYXNzZXMudG9Ob2RlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHNwbGl0Q2xhc3Nlcy50b05vZGUuam9pbignICcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbm5lckhUTUwgPSBhYnN0cmFjdC5tYXAoYSA9PiB0b0h0bWwoYSkpLmpvaW4oJ1xcbicpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICcnKTtcbiAgICBub2RlLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDtcbiAgfVxufTtcblxuZnVuY3Rpb24gcGVyZm9ybU9wZXJhdGlvblN5bmMob3ApIHtcbiAgb3AoKTtcbn1cblxuZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGNhbGxiYWNrRnVuY3Rpb24gPSB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3AkMjtcblxuICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIGNhbGxiYWNrRnVuY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgZnJhbWUgPSBwZXJmb3JtT3BlcmF0aW9uU3luYztcblxuICAgIGlmIChjb25maWcubXV0YXRlQXBwcm9hY2ggPT09IE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DKSB7XG4gICAgICBmcmFtZSA9IFdJTkRPVy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcGVyZm9ybU9wZXJhdGlvblN5bmM7XG4gICAgfVxuXG4gICAgZnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3QgbXV0YXRvciA9IGdldE11dGF0b3IoKTtcbiAgICAgIGNvbnN0IG1hcmsgPSBwZXJmLmJlZ2luKCdtdXRhdGUnKTtcbiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7XG4gICAgICBtYXJrKCk7XG4gICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgfSk7XG4gIH1cbn1cbmxldCBkaXNhYmxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkge1xuICBkaXNhYmxlZCA9IHRydWU7XG59XG5mdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbn1cbmxldCBtbyQxID0gbnVsbDtcbmZ1bmN0aW9uIG9ic2VydmUob3B0aW9ucykge1xuICBpZiAoIU1VVEFUSU9OX09CU0VSVkVSKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFjb25maWcub2JzZXJ2ZU11dGF0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB0cmVlQ2FsbGJhY2sgPSBub29wJDIsXG4gICAgbm9kZUNhbGxiYWNrID0gbm9vcCQyLFxuICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBub29wJDIsXG4gICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBET0NVTUVOVFxuICB9ID0gb3B0aW9ucztcbiAgbW8kMSA9IG5ldyBNVVRBVElPTl9PQlNFUlZFUihvYmplY3RzID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBkZWZhdWx0UHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICAgIHRvQXJyYXkob2JqZWN0cykuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb25SZWNvcmQuYWRkZWROb2Rlcy5sZW5ndGggPiAwICYmICFpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQuYWRkZWROb2Rlc1swXSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5zZWFyY2hQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyZWVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uUmVjb3JkLnRhcmdldC5wYXJlbnROb2RlICYmIGNvbmZpZy5zZWFyY2hQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldC5wYXJlbnROb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiBpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQudGFyZ2V0KSAmJiB+QVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTi5pbmRleE9mKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lID09PSAnY2xhc3MnICYmIGhhc1ByZWZpeEFuZEljb24obXV0YXRpb25SZWNvcmQudGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGljb25OYW1lXG4gICAgICAgICAgfSA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShtdXRhdGlvblJlY29yZC50YXJnZXQpKTtcbiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXggfHwgZGVmYXVsdFByZWZpeCk7XG4gICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgbm9kZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIG1vJDEub2JzZXJ2ZShvYnNlcnZlTXV0YXRpb25zUm9vdCwge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG4gIGlmICghbW8kMSkgcmV0dXJuO1xuICBtbyQxLmRpc2Nvbm5lY3QoKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVQYXJzZXIgKG5vZGUpIHtcbiAgY29uc3Qgc3R5bGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgbGV0IHZhbCA9IFtdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHZhbCA9IHN0eWxlLnNwbGl0KCc7JykucmVkdWNlKChhY2MsIHN0eWxlKSA9PiB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBzdHlsZS5zcGxpdCgnOicpO1xuICAgICAgY29uc3QgcHJvcCA9IHN0eWxlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzLnNsaWNlKDEpO1xuXG4gICAgICBpZiAocHJvcCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFjY1twcm9wXSA9IHZhbHVlLmpvaW4oJzonKS50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gY2xhc3NQYXJzZXIgKG5vZGUpIHtcbiAgY29uc3QgZXhpc3RpbmdQcmVmaXggPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmVmaXgnKTtcbiAgY29uc3QgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgY29uc3QgaW5uZXJUZXh0ID0gbm9kZS5pbm5lclRleHQgIT09IHVuZGVmaW5lZCA/IG5vZGUuaW5uZXJUZXh0LnRyaW0oKSA6ICcnO1xuICBsZXQgdmFsID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG5vZGUpKTtcblxuICBpZiAoIXZhbC5wcmVmaXgpIHtcbiAgICB2YWwucHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nUHJlZml4ICYmIGV4aXN0aW5nSWNvbk5hbWUpIHtcbiAgICB2YWwucHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7XG4gICAgdmFsLmljb25OYW1lID0gZXhpc3RpbmdJY29uTmFtZTtcbiAgfVxuXG4gIGlmICh2YWwuaWNvbk5hbWUgJiYgdmFsLnByZWZpeCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBpZiAodmFsLnByZWZpeCAmJiBpbm5lclRleHQubGVuZ3RoID4gMCkge1xuICAgIHZhbC5pY29uTmFtZSA9IGJ5TGlnYXR1cmUodmFsLnByZWZpeCwgbm9kZS5pbm5lclRleHQpIHx8IGJ5VW5pY29kZSh2YWwucHJlZml4LCB0b0hleChub2RlLmlubmVyVGV4dCkpO1xuICB9XG5cbiAgaWYgKCF2YWwuaWNvbk5hbWUgJiYgY29uZmlnLmF1dG9GZXRjaFN2ZyAmJiBub2RlLmZpcnN0Q2hpbGQgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHZhbC5pY29uTmFtZSA9IG5vZGUuZmlyc3RDaGlsZC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gYXR0cmlidXRlc1BhcnNlciAobm9kZSkge1xuICBjb25zdCBleHRyYUF0dHJpYnV0ZXMgPSB0b0FycmF5KG5vZGUuYXR0cmlidXRlcykucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICBpZiAoYWNjLm5hbWUgIT09ICdjbGFzcycgJiYgYWNjLm5hbWUgIT09ICdzdHlsZScpIHtcbiAgICAgIGFjY1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIGNvbnN0IHRpdGxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIGNvbnN0IHRpdGxlSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10aXRsZS1pZCcpO1xuXG4gIGlmIChjb25maWcuYXV0b0ExMXkpIHtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snYXJpYS1sYWJlbGxlZGJ5J10gPSBcIlwiLmNvbmNhdChjb25maWcucmVwbGFjZW1lbnRDbGFzcywgXCItdGl0bGUtXCIpLmNvbmNhdCh0aXRsZUlkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4dHJhQXR0cmlidXRlcztcbn1cblxuZnVuY3Rpb24gYmxhbmtNZXRhKCkge1xuICByZXR1cm4ge1xuICAgIGljb25OYW1lOiBudWxsLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHRpdGxlSWQ6IG51bGwsXG4gICAgcHJlZml4OiBudWxsLFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgc3ltYm9sOiBmYWxzZSxcbiAgICBtYXNrOiB7XG4gICAgICBpY29uTmFtZTogbnVsbCxcbiAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgIHJlc3Q6IFtdXG4gICAgfSxcbiAgICBtYXNrSWQ6IG51bGwsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgc3R5bGVzOiB7fSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gcGFyc2VNZXRhKG5vZGUpIHtcbiAgbGV0IHBhcnNlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIHN0eWxlUGFyc2VyOiB0cnVlXG4gIH07XG4gIGNvbnN0IHtcbiAgICBpY29uTmFtZSxcbiAgICBwcmVmaXgsXG4gICAgcmVzdDogZXh0cmFDbGFzc2VzXG4gIH0gPSBjbGFzc1BhcnNlcihub2RlKTtcbiAgY29uc3QgZXh0cmFBdHRyaWJ1dGVzID0gYXR0cmlidXRlc1BhcnNlcihub2RlKTtcbiAgY29uc3QgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoJ3BhcnNlTm9kZUF0dHJpYnV0ZXMnLCB7fSwgbm9kZSk7XG4gIGxldCBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUpIDogW107XG4gIHJldHVybiB7XG4gICAgaWNvbk5hbWUsXG4gICAgdGl0bGU6IG5vZGUuZ2V0QXR0cmlidXRlKCd0aXRsZScpLFxuICAgIHRpdGxlSWQ6IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWZhLXRpdGxlLWlkJyksXG4gICAgcHJlZml4LFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcyxcbiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBleHRyYUF0dHJpYnV0ZXNcbiAgICB9LFxuICAgIC4uLnBsdWdpbk1ldGFcbiAgfTtcbn1cblxuY29uc3Qge1xuICBzdHlsZXM6IHN0eWxlcyQyXG59ID0gbmFtZXNwYWNlO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpIHtcbiAgY29uc3Qgbm9kZU1ldGEgPSBjb25maWcuYXV0b1JlcGxhY2VTdmcgPT09ICduZXN0JyA/IHBhcnNlTWV0YShub2RlLCB7XG4gICAgc3R5bGVQYXJzZXI6IGZhbHNlXG4gIH0pIDogcGFyc2VNZXRhKG5vZGUpO1xuXG4gIGlmICh+bm9kZU1ldGEuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKExBWUVSU19URVhUX0NMQVNTTkFNRSkpIHtcbiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCdnZW5lcmF0ZUxheWVyc1RleHQnLCBub2RlLCBub2RlTWV0YSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uJywgbm9kZSwgbm9kZU1ldGEpO1xuICB9XG59XG5cbmxldCBrbm93blByZWZpeGVzID0gbmV3IFNldCgpO1xuRkFNSUxJRVMubWFwKGZhbWlseSA9PiB7XG4gIGtub3duUHJlZml4ZXMuYWRkKFwiZmEtXCIuY29uY2F0KGZhbWlseSkpO1xufSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbYV0pLm1hcChrbm93blByZWZpeGVzLmFkZC5iaW5kKGtub3duUHJlZml4ZXMpKTtcbk9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtyXSkubWFwKGtub3duUHJlZml4ZXMuYWRkLmJpbmQoa25vd25QcmVmaXhlcykpO1xuT2JqZWN0LmtleXMoUFJFRklYX1RPX1NUWUxFW29dKS5tYXAoa25vd25QcmVmaXhlcy5hZGQuYmluZChrbm93blByZWZpeGVzKSk7XG5rbm93blByZWZpeGVzID0gWy4uLmtub3duUHJlZml4ZXNdO1xuXG5mdW5jdGlvbiBvblRyZWUocm9vdCkge1xuICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gIGlmICghSVNfRE9NKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIGNvbnN0IGh0bWxDbGFzc0xpc3QgPSBET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0O1xuXG4gIGNvbnN0IGhjbEFkZCA9IHN1ZmZpeCA9PiBodG1sQ2xhc3NMaXN0LmFkZChcIlwiLmNvbmNhdChIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MsIFwiLVwiKS5jb25jYXQoc3VmZml4KSk7XG5cbiAgY29uc3QgaGNsUmVtb3ZlID0gc3VmZml4ID0+IGh0bWxDbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgXCItXCIpLmNvbmNhdChzdWZmaXgpKTtcblxuICBjb25zdCBwcmVmaXhlcyA9IGNvbmZpZy5hdXRvRmV0Y2hTdmcgPyBrbm93blByZWZpeGVzIDogRkFNSUxJRVMubWFwKGYkJDEgPT4gXCJmYS1cIi5jb25jYXQoZiQkMSkpLmNvbmNhdChPYmplY3Qua2V5cyhzdHlsZXMkMikpO1xuXG4gIGlmICghcHJlZml4ZXMuaW5jbHVkZXMoJ2ZhJykpIHtcbiAgICBwcmVmaXhlcy5wdXNoKCdmYScpO1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZXNEb21RdWVyeSA9IFtcIi5cIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKV0uY29uY2F0KHByZWZpeGVzLm1hcChwJCQxID0+IFwiLlwiLmNvbmNhdChwJCQxLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKSkpLmpvaW4oJywgJyk7XG5cbiAgaWYgKHByZWZpeGVzRG9tUXVlcnkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZXMgPSBbXTtcblxuICB0cnkge1xuICAgIGNhbmRpZGF0ZXMgPSB0b0FycmF5KHJvb3QucXVlcnlTZWxlY3RvckFsbChwcmVmaXhlc0RvbVF1ZXJ5KSk7XG4gIH0gY2F0Y2ggKGUkJDEpIHsvLyBub29wXG4gIH1cblxuICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgaGNsQWRkKCdwZW5kaW5nJyk7XG4gICAgaGNsUmVtb3ZlKCdjb21wbGV0ZScpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGNvbnN0IG1hcmsgPSBwZXJmLmJlZ2luKCdvblRyZWUnKTtcbiAgY29uc3QgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtdXRhdGlvbiA9IGdlbmVyYXRlTXV0YXRpb24obm9kZSk7XG5cbiAgICAgIGlmIChtdXRhdGlvbikge1xuICAgICAgICBhY2MucHVzaChtdXRhdGlvbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSQkMSkge1xuICAgICAgaWYgKCFQUk9EVUNUSU9OKSB7XG4gICAgICAgIGlmIChlJCQxLm5hbWUgPT09ICdNaXNzaW5nSWNvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUkJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIFByb21pc2UuYWxsKG11dGF0aW9ucykudGhlbihyZXNvbHZlZE11dGF0aW9ucyA9PiB7XG4gICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCAoKSA9PiB7XG4gICAgICAgIGhjbEFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhjbEFkZCgnY29tcGxldGUnKTtcbiAgICAgICAgaGNsUmVtb3ZlKCdwZW5kaW5nJyk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIG1hcmsoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZSQkMSA9PiB7XG4gICAgICBtYXJrKCk7XG4gICAgICByZWplY3QoZSQkMSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvbk5vZGUobm9kZSkge1xuICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gIGdlbmVyYXRlTXV0YXRpb24obm9kZSkudGhlbihtdXRhdGlvbiA9PiB7XG4gICAgaWYgKG11dGF0aW9uKSB7XG4gICAgICBwZXJmb3JtKFttdXRhdGlvbl0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSWNvbnMobmV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG1heWJlSWNvbkRlZmluaXRpb24pIHtcbiAgICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBjb25zdCBpY29uRGVmaW5pdGlvbiA9IChtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KS5pY29uID8gbWF5YmVJY29uRGVmaW5pdGlvbiA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KTtcbiAgICBsZXQge1xuICAgICAgbWFza1xuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAobWFzaykge1xuICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChpY29uRGVmaW5pdGlvbiwgeyAuLi5wYXJhbXMsXG4gICAgICBtYXNrXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IHJlbmRlciA9IGZ1bmN0aW9uIChpY29uRGVmaW5pdGlvbikge1xuICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgY29uc3Qge1xuICAgIHRyYW5zZm9ybSA9IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgIHN5bWJvbCA9IGZhbHNlLFxuICAgIG1hc2sgPSBudWxsLFxuICAgIG1hc2tJZCA9IG51bGwsXG4gICAgdGl0bGUgPSBudWxsLFxuICAgIHRpdGxlSWQgPSBudWxsLFxuICAgIGNsYXNzZXMgPSBbXSxcbiAgICBhdHRyaWJ1dGVzID0ge30sXG4gICAgc3R5bGVzID0ge31cbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFpY29uRGVmaW5pdGlvbikgcmV0dXJuO1xuICBjb25zdCB7XG4gICAgcHJlZml4LFxuICAgIGljb25OYW1lLFxuICAgIGljb25cbiAgfSA9IGljb25EZWZpbml0aW9uO1xuICByZXR1cm4gZG9tVmFyaWFudHMoe1xuICAgIHR5cGU6ICdpY29uJyxcbiAgICAuLi5pY29uRGVmaW5pdGlvblxuICB9LCAoKSA9PiB7XG4gICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICBpY29uRGVmaW5pdGlvbixcbiAgICAgIHBhcmFtc1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hdXRvQTExeSkge1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgICBhdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJbmxpbmVTdmdBYnN0cmFjdCh7XG4gICAgICBpY29uczoge1xuICAgICAgICBtYWluOiBhc0ZvdW5kSWNvbihpY29uKSxcbiAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7XG4gICAgICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJlZml4LFxuICAgICAgaWNvbk5hbWUsXG4gICAgICB0cmFuc2Zvcm06IHsgLi4ubWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgICAgIC4uLnRyYW5zZm9ybVxuICAgICAgfSxcbiAgICAgIHN5bWJvbCxcbiAgICAgIHRpdGxlLFxuICAgICAgbWFza0lkLFxuICAgICAgdGl0bGVJZCxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlcyxcbiAgICAgICAgY2xhc3Nlc1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG52YXIgUmVwbGFjZUVsZW1lbnRzID0ge1xuICBtaXhvdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IHJlc29sdmVJY29ucyhyZW5kZXIpXG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikge1xuICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7XG4gICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5vZGUgPSBET0NVTUVOVCxcbiAgICAgICAgY2FsbGJhY2sgPSAoKSA9PiB7fVxuICAgICAgfSA9IHBhcmFtcztcbiAgICAgIHJldHVybiBvblRyZWUobm9kZSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGljb25OYW1lLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdGl0bGVJZCxcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHN5bWJvbCxcbiAgICAgICAgbWFzayxcbiAgICAgICAgbWFza0lkLFxuICAgICAgICBleHRyYVxuICAgICAgfSA9IG5vZGVNZXRhO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLCBtYXNrLmljb25OYW1lID8gZmluZEljb24obWFzay5pY29uTmFtZSwgbWFzay5wcmVmaXgpIDogUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBmb3VuZDogZmFsc2UsXG4gICAgICAgICAgd2lkdGg6IDUxMixcbiAgICAgICAgICBoZWlnaHQ6IDUxMixcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9KV0pLnRoZW4oX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IFttYWluLCBtYXNrXSA9IF9yZWY7XG4gICAgICAgICAgcmVzb2x2ZShbbm9kZSwgbWFrZUlubGluZVN2Z0Fic3RyYWN0KHtcbiAgICAgICAgICAgIGljb25zOiB7XG4gICAgICAgICAgICAgIG1haW4sXG4gICAgICAgICAgICAgIG1hc2tcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBpY29uTmFtZSxcbiAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgIG1hc2tJZCxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdGl0bGVJZCxcbiAgICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICAgICAgfSldKTtcbiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVBYnN0cmFjdEljb24gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBtYWluLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHN0eWxlc1xuICAgICAgfSA9IF9yZWYyO1xuICAgICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgICAgIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBzdHlsZVN0cmluZztcbiAgICAgIH1cblxuICAgICAgbGV0IG5leHRDaGlsZDtcblxuICAgICAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgICAgIG5leHRDaGlsZCA9IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nJywge1xuICAgICAgICAgIG1haW4sXG4gICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLFxuICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxudmFyIExheWVycyA9IHtcbiAgbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXllcihhc3NlbWJsZXIpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjbGFzc2VzID0gW11cbiAgICAgICAgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAnbGF5ZXInXG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICBjYWxsSG9va3MoJ2JlZm9yZURPTUVsZW1lbnRDcmVhdGlvbicsIHtcbiAgICAgICAgICAgIGFzc2VtYmxlcixcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICAgIGFzc2VtYmxlcihhcmdzID0+IHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYS5hYnN0cmFjdCk7XG4gICAgICAgICAgICB9KSA6IGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFyZ3MuYWJzdHJhY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzXCIpLCAuLi5jbGFzc2VzXS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgIH1dO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH07XG4gIH1cblxufTtcblxudmFyIExheWVyc0NvdW50ZXIgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnRlcihjb250ZW50KSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdGl0bGUgPSBudWxsLFxuICAgICAgICAgIGNsYXNzZXMgPSBbXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzID0ge30sXG4gICAgICAgICAgc3R5bGVzID0ge31cbiAgICAgICAgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAnY291bnRlcicsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3Qoe1xuICAgICAgICAgICAgY29udGVudDogY29udGVudC50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtY291bnRlclwiKSwgLi4uY2xhc3Nlc11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbnZhciBMYXllcnNUZXh0ID0ge1xuICBtaXhvdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQoY29udGVudCkge1xuICAgICAgICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgICAgICAgIHRpdGxlID0gbnVsbCxcbiAgICAgICAgICBjbGFzc2VzID0gW10sXG4gICAgICAgICAgYXR0cmlidXRlcyA9IHt9LFxuICAgICAgICAgIHN0eWxlcyA9IHt9XG4gICAgICAgIH0gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgIGNhbGxIb29rcygnYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uJywge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHsgLi4ubWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgIC4uLnRyYW5zZm9ybVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzLXRleHRcIiksIC4uLmNsYXNzZXNdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGV4dHJhXG4gICAgICB9ID0gbm9kZU1ldGE7XG4gICAgICBsZXQgd2lkdGggPSBudWxsO1xuICAgICAgbGV0IGhlaWdodCA9IG51bGw7XG5cbiAgICAgIGlmIChJU19JRSkge1xuICAgICAgICBjb25zdCBjb21wdXRlZEZvbnRTaXplID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5mb250U2l6ZSwgMTApO1xuICAgICAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB3aWR0aCA9IGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCAvIGNvbXB1dGVkRm9udFNpemU7XG4gICAgICAgIGhlaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLyBjb21wdXRlZEZvbnRTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmF1dG9BMTF5ICYmICF0aXRsZSkge1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgY29udGVudDogbm9kZS5pbm5lckhUTUwsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGV4dHJhLFxuICAgICAgICB3YXRjaGFibGU6IHRydWVcbiAgICAgIH0pXSk7XG4gICAgfTtcbiAgfVxuXG59O1xuXG5jb25zdCBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKCdcXHV7MjJ9JywgJ3VnJyk7XG5jb25zdCBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTtcbmNvbnN0IF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0geyAuLi57XG4gICAgRm9udEF3ZXNvbWU6IHtcbiAgICAgIG5vcm1hbDogJ2ZhcycsXG4gICAgICA0MDA6ICdmYXMnXG4gICAgfVxuICB9LFxuICAuLi5lbyxcbiAgLi4uYW8sXG4gIC4uLm1vXG59O1xuY29uc3QgRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCA9IE9iamVjdC5rZXlzKF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gIGFjY1trZXkudG9Mb3dlckNhc2UoKV0gPSBfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtrZXldO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3QgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLID0gT2JqZWN0LmtleXMoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKChhY2MsIGZvbnRGYW1pbHkpID0+IHtcbiAgY29uc3Qgd2VpZ2h0cyA9IEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVhbZm9udEZhbWlseV07XG4gIGFjY1tmb250RmFtaWx5XSA9IHdlaWdodHNbOTAwXSB8fCBbLi4uT2JqZWN0LmVudHJpZXMod2VpZ2h0cyldWzBdWzFdO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuZnVuY3Rpb24gaGV4VmFsdWVGcm9tQ29udGVudChjb250ZW50KSB7XG4gIGNvbnN0IGNsZWFuZWQgPSBjb250ZW50LnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAnJyk7XG4gIGNvbnN0IGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KGNsZWFuZWQsIDApO1xuICBjb25zdCBpc1ByZXBlbmRUZW4gPSBjb2RlUG9pbnQgPj0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMF0gJiYgY29kZVBvaW50IDw9IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzFdO1xuICBjb25zdCBpc0RvdWJsZWQgPSBjbGVhbmVkLmxlbmd0aCA9PT0gMiA/IGNsZWFuZWRbMF0gPT09IGNsZWFuZWRbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogaXNEb3VibGVkID8gdG9IZXgoY2xlYW5lZFswXSkgOiB0b0hleChjbGVhbmVkKSxcbiAgICBpc1NlY29uZGFyeTogaXNQcmVwZW5kVGVuIHx8IGlzRG91YmxlZFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHtcbiAgY29uc3QgZm9udEZhbWlseVNhbml0aXplZCA9IGZvbnRGYW1pbHkucmVwbGFjZSgvXlsnXCJdfFsnXCJdJC9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZm9udFdlaWdodEludGVnZXIgPSBwYXJzZUludChmb250V2VpZ2h0KTtcbiAgY29uc3QgZm9udFdlaWdodFNhbml0aXplZCA9IGlzTmFOKGZvbnRXZWlnaHRJbnRlZ2VyKSA/ICdub3JtYWwnIDogZm9udFdlaWdodEludGVnZXI7XG4gIHJldHVybiAoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtmb250RmFtaWx5U2FuaXRpemVkXSB8fCB7fSlbZm9udFdlaWdodFNhbml0aXplZF0gfHwgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgcG9zaXRpb24pIHtcbiAgY29uc3QgcGVuZGluZ0F0dHJpYnV0ZSA9IFwiXCIuY29uY2F0KERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORykuY29uY2F0KHBvc2l0aW9uLnJlcGxhY2UoJzonLCAnLScpKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUocGVuZGluZ0F0dHJpYnV0ZSkgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgbm9kZSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRvQXJyYXkobm9kZS5jaGlsZHJlbik7XG4gICAgY29uc3QgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgPSBjaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSA9PT0gcG9zaXRpb24pWzBdO1xuICAgIGNvbnN0IHN0eWxlcyA9IFdJTkRPVy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIHBvc2l0aW9uKTtcbiAgICBjb25zdCBmb250RmFtaWx5ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtZmFtaWx5Jyk7XG4gICAgY29uc3QgZm9udEZhbWlseU1hdGNoID0gZm9udEZhbWlseS5tYXRjaChGT05UX0ZBTUlMWV9QQVRURVJOKTtcbiAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtd2VpZ2h0Jyk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgJiYgIWZvbnRGYW1pbHlNYXRjaCkge1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgaXQgYnV0IHRoZSBjdXJyZW50IGNvbXB1dGVkIHN0eWxlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGZvbnQtZmFtaWx5LFxuICAgICAgLy8gdGhhdCBwcm9iYWJseSBtZWFucyB0aGF0IGEgY2xhc3MgbmFtZSB0aGF0IHdhcyBwcmV2aW91c2x5IHByZXNlbnQgdG8gbWFrZSB0aGUgaWNvbiBoYXMgYmVlblxuICAgICAgLy8gcmVtb3ZlZC4gU28gd2Ugbm93IHNob3VsZCBkZWxldGUgdGhlIGljb24uXG4gICAgICBub2RlLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSBlbHNlIGlmIChmb250RmFtaWx5TWF0Y2ggJiYgY29udGVudCAhPT0gJ25vbmUnICYmIGNvbnRlbnQgIT09ICcnKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcbiAgICAgIGxldCBwcmVmaXggPSBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBoZXhWYWx1ZSxcbiAgICAgICAgaXNTZWNvbmRhcnlcbiAgICAgIH0gPSBoZXhWYWx1ZUZyb21Db250ZW50KGNvbnRlbnQpO1xuICAgICAgY29uc3QgaXNWNCA9IGZvbnRGYW1pbHlNYXRjaFswXS5zdGFydHNXaXRoKCdGb250QXdlc29tZScpO1xuICAgICAgbGV0IGljb25OYW1lID0gYnlVbmljb2RlKHByZWZpeCwgaGV4VmFsdWUpO1xuICAgICAgbGV0IGljb25JZGVudGlmaWVyID0gaWNvbk5hbWU7XG5cbiAgICAgIGlmIChpc1Y0KSB7XG4gICAgICAgIGNvbnN0IGljb25OYW1lNCA9IGJ5T2xkVW5pY29kZShoZXhWYWx1ZSk7XG5cbiAgICAgICAgaWYgKGljb25OYW1lNC5pY29uTmFtZSAmJiBpY29uTmFtZTQucHJlZml4KSB7XG4gICAgICAgICAgaWNvbk5hbWUgPSBpY29uTmFtZTQuaWNvbk5hbWU7XG4gICAgICAgICAgcHJlZml4ID0gaWNvbk5hbWU0LnByZWZpeDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBPbmx5IGNvbnZlcnQgdGhlIHBzZXVkbyBlbGVtZW50IGluIHRoaXMgOjpiZWZvcmUvOjphZnRlciBwb3NpdGlvbiBpbnRvIGFuIGljb24gaWYgd2UgaGF2ZW4ndFxuICAgICAgLy8gYWxyZWFkeSBkb25lIHNvIHdpdGggdGhlIHNhbWUgcHJlZml4IGFuZCBpY29uTmFtZVxuXG5cbiAgICAgIGlmIChpY29uTmFtZSAmJiAhaXNTZWNvbmRhcnkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpICE9PSBwcmVmaXggfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgIT09IGljb25JZGVudGlmaWVyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlLCBpY29uSWRlbnRpZmllcik7XG5cbiAgICAgICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KSB7XG4gICAgICAgICAgLy8gRGVsZXRlIHRoZSBvbGQgb25lLCBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhIG5ldyBvbmVcbiAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBibGFua01ldGEoKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGV4dHJhXG4gICAgICAgIH0gPSBtZXRhO1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzW0RBVEFfRkFfUFNFVURPX0VMRU1FTlRdID0gcG9zaXRpb247XG4gICAgICAgIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLnRoZW4obWFpbiA9PiB7XG4gICAgICAgICAgY29uc3QgYWJzdHJhY3QgPSBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoeyAuLi5tZXRhLFxuICAgICAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgICAgbWFpbixcbiAgICAgICAgICAgICAgbWFzazogZW1wdHlDYW5vbmljYWxJY29uKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBpY29uTmFtZTogaWNvbklkZW50aWZpZXIsXG4gICAgICAgICAgICBleHRyYSxcbiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQub3V0ZXJIVE1MID0gYWJzdHJhY3QubWFwKGEgPT4gdG9IdG1sKGEpKS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgJzo6YmVmb3JlJyksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCAnOjphZnRlcicpXSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuaGVhZCAmJiAhflRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLmluZGV4T2Yobm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gJ3N2ZycpO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hQc2V1ZG9FbGVtZW50cyhyb290KSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRvQXJyYXkocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihwcm9jZXNzYWJsZSkubWFwKHJlcGxhY2UpO1xuICAgIGNvbnN0IGVuZCA9IHBlcmYuYmVnaW4oJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJyk7XG4gICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgUHJvbWlzZS5hbGwob3BlcmF0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICBlbmQoKTtcbiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZW5kKCk7XG4gICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgcmVqZWN0KCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG52YXIgUHNldWRvRWxlbWVudHMgPSB7XG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50cztcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICBwcm92aWRlcnMucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBub2RlID0gRE9DVU1FTlRcbiAgICAgIH0gPSBwYXJhbXM7XG5cbiAgICAgIGlmIChjb25maWcuc2VhcmNoUHNldWRvRWxlbWVudHMpIHtcbiAgICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHMobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG59O1xuXG5sZXQgX3Vud2F0Y2hlZCA9IGZhbHNlO1xudmFyIE11dGF0aW9uT2JzZXJ2ZXIkMSA9IHtcbiAgbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb206IHtcbiAgICAgICAgdW53YXRjaCgpIHtcbiAgICAgICAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTtcbiAgICAgICAgICBfdW53YXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9vdHN0cmFwKCkge1xuICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoJ211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MnLCB7fSkpO1xuICAgICAgfSxcblxuICAgICAgbm9BdXRvKCkge1xuICAgICAgICBkaXNjb25uZWN0KCk7XG4gICAgICB9LFxuXG4gICAgICB3YXRjaChwYXJhbXMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290XG4gICAgICAgIH0gPSBwYXJhbXM7XG5cbiAgICAgICAgaWYgKF91bndhdGNoZWQpIHtcbiAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygnbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcycsIHtcbiAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbmNvbnN0IHBhcnNlVHJhbnNmb3JtU3RyaW5nID0gdHJhbnNmb3JtU3RyaW5nID0+IHtcbiAgbGV0IHRyYW5zZm9ybSA9IHtcbiAgICBzaXplOiAxNixcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgZmxpcFg6IGZhbHNlLFxuICAgIGZsaXBZOiBmYWxzZSxcbiAgICByb3RhdGU6IDBcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybVN0cmluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykucmVkdWNlKChhY2MsIG4pID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IG4udG9Mb3dlckNhc2UoKS5zcGxpdCgnLScpO1xuICAgIGNvbnN0IGZpcnN0ID0gcGFydHNbMF07XG4gICAgbGV0IHJlc3QgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCctJyk7XG5cbiAgICBpZiAoZmlyc3QgJiYgcmVzdCA9PT0gJ2gnKSB7XG4gICAgICBhY2MuZmxpcFggPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBpZiAoZmlyc3QgJiYgcmVzdCA9PT0gJ3YnKSB7XG4gICAgICBhY2MuZmxpcFkgPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICByZXN0ID0gcGFyc2VGbG9hdChyZXN0KTtcblxuICAgIGlmIChpc05hTihyZXN0KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpcnN0KSB7XG4gICAgICBjYXNlICdncm93JzpcbiAgICAgICAgYWNjLnNpemUgPSBhY2Muc2l6ZSArIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzaHJpbmsnOlxuICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplIC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBhY2MueCA9IGFjYy54IC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgYWNjLnggPSBhY2MueCArIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIGFjYy55ID0gYWNjLnkgLSByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIGFjYy55ID0gYWNjLnkgKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncm90YXRlJzpcbiAgICAgICAgYWNjLnJvdGF0ZSA9IGFjYy5yb3RhdGUgKyByZXN0O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB0cmFuc2Zvcm0pO1xufTtcbnZhciBQb3dlclRyYW5zZm9ybXMgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1TdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdHJpbmcgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10cmFuc2Zvcm0nKTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtU3RyaW5nKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IudHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHJhbnNmb3JtU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cblxuICAgIH07XG4gIH0sXG5cbiAgcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYWluLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGNvbnRhaW5lcldpZHRoLFxuICAgICAgICBpY29uV2lkdGhcbiAgICAgIH0gPSBfcmVmO1xuICAgICAgY29uc3Qgb3V0ZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIuY29uY2F0KGNvbnRhaW5lcldpZHRoIC8gMiwgXCIgMjU2KVwiKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlubmVyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54ICogMzIsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS55ICogMzIsIFwiKSBcIik7XG4gICAgICBjb25zdCBpbm5lclNjYWxlID0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFggPyAtMSA6IDEpLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0uc2l6ZSAvIDE2ICogKHRyYW5zZm9ybS5mbGlwWSA/IC0xIDogMSksIFwiKSBcIik7XG4gICAgICBjb25zdCBpbm5lclJvdGF0ZSA9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcIiAwIDApXCIpO1xuICAgICAgY29uc3QgaW5uZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXRoID0ge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKFwiLmNvbmNhdChpY29uV2lkdGggLyAyICogLTEsIFwiIC0yNTYpXCIpXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IHtcbiAgICAgICAgb3V0ZXIsXG4gICAgICAgIGlubmVyLFxuICAgICAgICBwYXRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnZycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4ub3BlcmF0aW9ucy5vdXRlclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLm9wZXJhdGlvbnMuaW5uZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiBtYWluLmljb24udGFnLFxuICAgICAgICAgICAgY2hpbGRyZW46IG1haW4uaWNvbi5jaGlsZHJlbixcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4ubWFpbi5pY29uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIC4uLm9wZXJhdGlvbnMucGF0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxuY29uc3QgQUxMX1NQQUNFID0ge1xuICB4OiAwLFxuICB5OiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJ1xufTtcblxuZnVuY3Rpb24gZmlsbEJsYWNrKGFic3RyYWN0KSB7XG4gIGxldCBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICBpZiAoYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsIHx8IGZvcmNlKSkge1xuICAgIGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCA9ICdibGFjayc7XG4gIH1cblxuICByZXR1cm4gYWJzdHJhY3Q7XG59XG5cbmZ1bmN0aW9uIGRlR3JvdXAoYWJzdHJhY3QpIHtcbiAgaWYgKGFic3RyYWN0LnRhZyA9PT0gJ2cnKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0LmNoaWxkcmVuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbYWJzdHJhY3RdO1xuICB9XG59XG5cbnZhciBNYXNrcyA9IHtcbiAgaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgY29uc3QgbWFza0RhdGEgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrJyk7XG4gICAgICAgIGNvbnN0IG1hc2sgPSAhbWFza0RhdGEgPyBlbXB0eUNhbm9uaWNhbEljb24oKSA6IGdldENhbm9uaWNhbEljb24obWFza0RhdGEuc3BsaXQoJyAnKS5tYXAoaSA9PiBpLnRyaW0oKSkpO1xuXG4gICAgICAgIGlmICghbWFzay5wcmVmaXgpIHtcbiAgICAgICAgICBtYXNrLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrO1xuICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrLWlkJyk7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cblxuICAgIH07XG4gIH0sXG5cbiAgcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBtYWluLFxuICAgICAgICBtYXNrLFxuICAgICAgICBtYXNrSWQ6IGV4cGxpY2l0TWFza0lkLFxuICAgICAgICB0cmFuc2Zvcm1cbiAgICAgIH0gPSBfcmVmO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aDogbWFpbldpZHRoLFxuICAgICAgICBpY29uOiBtYWluUGF0aFxuICAgICAgfSA9IG1haW47XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoOiBtYXNrV2lkdGgsXG4gICAgICAgIGljb246IG1hc2tQYXRoXG4gICAgICB9ID0gbWFzaztcbiAgICAgIGNvbnN0IHRyYW5zID0gdHJhbnNmb3JtRm9yU3ZnKHtcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICBjb250YWluZXJXaWR0aDogbWFza1dpZHRoLFxuICAgICAgICBpY29uV2lkdGg6IG1haW5XaWR0aFxuICAgICAgfSk7XG4gICAgICBjb25zdCBtYXNrUmVjdCA9IHtcbiAgICAgICAgdGFnOiAncmVjdCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uQUxMX1NQQUNFLFxuICAgICAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbiA9IG1haW5QYXRoLmNoaWxkcmVuID8ge1xuICAgICAgICBjaGlsZHJlbjogbWFpblBhdGguY2hpbGRyZW4ubWFwKGZpbGxCbGFjaylcbiAgICAgIH0gOiB7fTtcbiAgICAgIGNvbnN0IG1hc2tJbm5lckdyb3VwID0ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi50cmFucy5pbm5lclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW2ZpbGxCbGFjayh7XG4gICAgICAgICAgdGFnOiBtYWluUGF0aC50YWcsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5tYWluUGF0aC5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgLi4udHJhbnMucGF0aFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4ubWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluXG4gICAgICAgIH0pXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tPdXRlckdyb3VwID0ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi50cmFucy5vdXRlclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW21hc2tJbm5lckdyb3VwXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tJZCA9IFwibWFzay1cIi5jb25jYXQoZXhwbGljaXRNYXNrSWQgfHwgbmV4dFVuaXF1ZUlkKCkpO1xuICAgICAgY29uc3QgY2xpcElkID0gXCJjbGlwLVwiLmNvbmNhdChleHBsaWNpdE1hc2tJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICBjb25zdCBtYXNrVGFnID0ge1xuICAgICAgICB0YWc6ICdtYXNrJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi5BTExfU1BBQ0UsXG4gICAgICAgICAgaWQ6IG1hc2tJZCxcbiAgICAgICAgICBtYXNrVW5pdHM6ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgbWFza0NvbnRlbnRVbml0czogJ3VzZXJTcGFjZU9uVXNlJ1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW21hc2tSZWN0LCBtYXNrT3V0ZXJHcm91cF1cbiAgICAgIH07XG4gICAgICBjb25zdCBkZWZzID0ge1xuICAgICAgICB0YWc6ICdkZWZzJyxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdGFnOiAnY2xpcFBhdGgnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBjbGlwSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBkZUdyb3VwKG1hc2tQYXRoKVxuICAgICAgICB9LCBtYXNrVGFnXVxuICAgICAgfTtcbiAgICAgIGNoaWxkcmVuLnB1c2goZGVmcywge1xuICAgICAgICB0YWc6ICdyZWN0JyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgICAgICdjbGlwLXBhdGgnOiBcInVybCgjXCIuY29uY2F0KGNsaXBJZCwgXCIpXCIpLFxuICAgICAgICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQobWFza0lkLCBcIilcIiksXG4gICAgICAgICAgLi4uQUxMX1NQQUNFXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG59O1xuXG52YXIgTWlzc2luZ0ljb25JbmRpY2F0b3IgPSB7XG4gIHByb3ZpZGVzKHByb3ZpZGVycykge1xuICAgIGxldCByZWR1Y2VNb3Rpb24gPSBmYWxzZTtcblxuICAgIGlmIChXSU5ET1cubWF0Y2hNZWRpYSkge1xuICAgICAgcmVkdWNlTW90aW9uID0gV0lORE9XLm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcm92aWRlcnMubWlzc2luZ0ljb25BYnN0cmFjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdDaGlsZHJlbiA9IFtdO1xuICAgICAgY29uc3QgRklMTCA9IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcidcbiAgICAgIH07XG4gICAgICBjb25zdCBBTklNQVRJT05fQkFTRSA9IHtcbiAgICAgICAgYXR0cmlidXRlVHlwZTogJ1hNTCcsXG4gICAgICAgIHJlcGVhdENvdW50OiAnaW5kZWZpbml0ZScsXG4gICAgICAgIGR1cjogJzJzJ1xuICAgICAgfTsgLy8gUmluZ1xuXG4gICAgICBnQ2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgZDogJ00xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHonXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgT1BBQ0lUWV9BTklNQVRFID0geyAuLi5BTklNQVRJT05fQkFTRSxcbiAgICAgICAgYXR0cmlidXRlTmFtZTogJ29wYWNpdHknXG4gICAgICB9O1xuICAgICAgY29uc3QgZG90ID0ge1xuICAgICAgICB0YWc6ICdjaXJjbGUnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgY3g6ICcyNTYnLFxuICAgICAgICAgIGN5OiAnMzY0JyxcbiAgICAgICAgICByOiAnMjgnXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfTtcblxuICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHtcbiAgICAgICAgZG90LmNoaWxkcmVuLnB1c2goe1xuICAgICAgICAgIHRhZzogJ2FuaW1hdGUnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uQU5JTUFUSU9OX0JBU0UsXG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAncicsXG4gICAgICAgICAgICB2YWx1ZXM6ICcyODsxNDsyODsyODsxNDsyODsnXG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5PUEFDSVRZX0FOSU1BVEUsXG4gICAgICAgICAgICB2YWx1ZXM6ICcxOzA7MTsxOzA7MTsnXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTtcbiAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uRklMTCxcbiAgICAgICAgICBvcGFjaXR5OiAnMScsXG4gICAgICAgICAgZDogJ00yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnonXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiByZWR1Y2VNb3Rpb24gPyBbXSA6IFt7XG4gICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5PUEFDSVRZX0FOSU1BVEUsXG4gICAgICAgICAgICB2YWx1ZXM6ICcxOzA7MDswOzA7MTsnXG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7XG4gICAgICAgIC8vIEV4Y2xhbWF0aW9uXG4gICAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICB0YWc6ICdwYXRoJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgICBvcGFjaXR5OiAnMCcsXG4gICAgICAgICAgICBkOiAnTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLk9QQUNJVFlfQU5JTUFURSxcbiAgICAgICAgICAgICAgdmFsdWVzOiAnMDswOzE7MTswOzA7J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICdjbGFzcyc6ICdtaXNzaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogZ0NoaWxkcmVuXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxudmFyIFN2Z1N5bWJvbHMgPSB7XG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbERhdGEgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1zeW1ib2wnKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gc3ltYm9sRGF0YSA9PT0gbnVsbCA/IGZhbHNlIDogc3ltYm9sRGF0YSA9PT0gJycgPyB0cnVlIDogc3ltYm9sRGF0YTtcbiAgICAgICAgYWNjdW11bGF0b3JbJ3N5bWJvbCddID0gc3ltYm9sO1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbnZhciBwbHVnaW5zID0gW0luamVjdENTUywgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIFBzZXVkb0VsZW1lbnRzLCBNdXRhdGlvbk9ic2VydmVyJDEsIFBvd2VyVHJhbnNmb3JtcywgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzXTtcblxucmVnaXN0ZXJQbHVnaW5zKHBsdWdpbnMsIHtcbiAgbWl4b3V0c1RvOiBhcGlcbn0pO1xuY29uc3Qgbm9BdXRvJDEgPSBhcGkubm9BdXRvO1xuY29uc3QgY29uZmlnJDEgPSBhcGkuY29uZmlnO1xuY29uc3QgbGlicmFyeSQxID0gYXBpLmxpYnJhcnk7XG5jb25zdCBkb20kMSA9IGFwaS5kb207XG5jb25zdCBwYXJzZSQxID0gYXBpLnBhcnNlO1xuY29uc3QgZmluZEljb25EZWZpbml0aW9uJDEgPSBhcGkuZmluZEljb25EZWZpbml0aW9uO1xuY29uc3QgdG9IdG1sJDEgPSBhcGkudG9IdG1sO1xuY29uc3QgaWNvbiA9IGFwaS5pY29uO1xuY29uc3QgbGF5ZXIgPSBhcGkubGF5ZXI7XG5jb25zdCB0ZXh0ID0gYXBpLnRleHQ7XG5jb25zdCBjb3VudGVyID0gYXBpLmNvdW50ZXI7XG5cbmV4cG9ydCB7IG5vQXV0byQxIGFzIG5vQXV0bywgY29uZmlnJDEgYXMgY29uZmlnLCBsaWJyYXJ5JDEgYXMgbGlicmFyeSwgZG9tJDEgYXMgZG9tLCBwYXJzZSQxIGFzIHBhcnNlLCBmaW5kSWNvbkRlZmluaXRpb24kMSBhcyBmaW5kSWNvbkRlZmluaXRpb24sIHRvSHRtbCQxIGFzIHRvSHRtbCwgaWNvbiwgbGF5ZXIsIHRleHQsIGNvdW50ZXIsIGFwaSB9O1xuIiwgIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnKSwgcmVxdWlyZSgncHJvcC10eXBlcycpLCByZXF1aXJlKCdyZWFjdCcpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJywgJ3Byb3AtdHlwZXMnLCAncmVhY3QnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbFtcInJlYWN0LWZvbnRhd2Vzb21lXCJdID0ge30sIGdsb2JhbC5Gb250QXdlc29tZSwgZ2xvYmFsLlByb3BUeXBlcywgZ2xvYmFsLlJlYWN0KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIGZvbnRhd2Vzb21lU3ZnQ29yZSwgUHJvcFR5cGVzLCBSZWFjdCkgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9XG5cbiAgdmFyIFByb3BUeXBlc19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koUHJvcFR5cGVzKTtcbiAgdmFyIFJlYWN0X19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShSZWFjdCk7XG5cbiAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfSwgX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHZhciB0YXJnZXQgPSB7fTtcbiAgICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gICAgdmFyIGtleSwgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgICB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG5cbiAgICB2YXIga2V5LCBpO1xuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG5cbiAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgLy8gR2V0IENTUyBjbGFzcyBsaXN0IGZyb20gYSBwcm9wcyBvYmplY3RcbiAgZnVuY3Rpb24gY2xhc3NMaXN0KHByb3BzKSB7XG4gICAgdmFyIF9jbGFzc2VzO1xuXG4gICAgdmFyIGJlYXQgPSBwcm9wcy5iZWF0LFxuICAgICAgICBmYWRlID0gcHJvcHMuZmFkZSxcbiAgICAgICAgYmVhdEZhZGUgPSBwcm9wcy5iZWF0RmFkZSxcbiAgICAgICAgYm91bmNlID0gcHJvcHMuYm91bmNlLFxuICAgICAgICBzaGFrZSA9IHByb3BzLnNoYWtlLFxuICAgICAgICBmbGFzaCA9IHByb3BzLmZsYXNoLFxuICAgICAgICBzcGluID0gcHJvcHMuc3BpbixcbiAgICAgICAgc3BpblB1bHNlID0gcHJvcHMuc3BpblB1bHNlLFxuICAgICAgICBzcGluUmV2ZXJzZSA9IHByb3BzLnNwaW5SZXZlcnNlLFxuICAgICAgICBwdWxzZSA9IHByb3BzLnB1bHNlLFxuICAgICAgICBmaXhlZFdpZHRoID0gcHJvcHMuZml4ZWRXaWR0aCxcbiAgICAgICAgaW52ZXJzZSA9IHByb3BzLmludmVyc2UsXG4gICAgICAgIGJvcmRlciA9IHByb3BzLmJvcmRlcixcbiAgICAgICAgbGlzdEl0ZW0gPSBwcm9wcy5saXN0SXRlbSxcbiAgICAgICAgZmxpcCA9IHByb3BzLmZsaXAsXG4gICAgICAgIHNpemUgPSBwcm9wcy5zaXplLFxuICAgICAgICByb3RhdGlvbiA9IHByb3BzLnJvdGF0aW9uLFxuICAgICAgICBwdWxsID0gcHJvcHMucHVsbDsgLy8gbWFwIG9mIENTUyBjbGFzcyBuYW1lcyB0byBwcm9wZXJ0aWVzXG5cbiAgICB2YXIgY2xhc3NlcyA9IChfY2xhc3NlcyA9IHtcbiAgICAgICdmYS1iZWF0JzogYmVhdCxcbiAgICAgICdmYS1mYWRlJzogZmFkZSxcbiAgICAgICdmYS1iZWF0LWZhZGUnOiBiZWF0RmFkZSxcbiAgICAgICdmYS1ib3VuY2UnOiBib3VuY2UsXG4gICAgICAnZmEtc2hha2UnOiBzaGFrZSxcbiAgICAgICdmYS1mbGFzaCc6IGZsYXNoLFxuICAgICAgJ2ZhLXNwaW4nOiBzcGluLFxuICAgICAgJ2ZhLXNwaW4tcmV2ZXJzZSc6IHNwaW5SZXZlcnNlLFxuICAgICAgJ2ZhLXNwaW4tcHVsc2UnOiBzcGluUHVsc2UsXG4gICAgICAnZmEtcHVsc2UnOiBwdWxzZSxcbiAgICAgICdmYS1mdyc6IGZpeGVkV2lkdGgsXG4gICAgICAnZmEtaW52ZXJzZSc6IGludmVyc2UsXG4gICAgICAnZmEtYm9yZGVyJzogYm9yZGVyLFxuICAgICAgJ2ZhLWxpJzogbGlzdEl0ZW0sXG4gICAgICAnZmEtZmxpcCc6IGZsaXAgPT09IHRydWUsXG4gICAgICAnZmEtZmxpcC1ob3Jpem9udGFsJzogZmxpcCA9PT0gJ2hvcml6b250YWwnIHx8IGZsaXAgPT09ICdib3RoJyxcbiAgICAgICdmYS1mbGlwLXZlcnRpY2FsJzogZmxpcCA9PT0gJ3ZlcnRpY2FsJyB8fCBmbGlwID09PSAnYm90aCdcbiAgICB9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsIFwiZmEtXCIuY29uY2F0KHNpemUpLCB0eXBlb2Ygc2l6ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2l6ZSAhPT0gbnVsbCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1yb3RhdGUtXCIuY29uY2F0KHJvdGF0aW9uKSwgdHlwZW9mIHJvdGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiByb3RhdGlvbiAhPT0gbnVsbCAmJiByb3RhdGlvbiAhPT0gMCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1wdWxsLVwiLmNvbmNhdChwdWxsKSwgdHlwZW9mIHB1bGwgIT09ICd1bmRlZmluZWQnICYmIHB1bGwgIT09IG51bGwpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsICdmYS1zd2FwLW9wYWNpdHknLCBwcm9wcy5zd2FwT3BhY2l0eSksIF9jbGFzc2VzKTsgLy8gbWFwIG92ZXIgYWxsIHRoZSBrZXlzIGluIHRoZSBjbGFzc2VzIG9iamVjdFxuICAgIC8vIHJldHVybiBhbiBhcnJheSBvZiB0aGUga2V5cyB3aGVyZSB0aGUgdmFsdWUgZm9yIHRoZSBrZXkgaXMgbm90IG51bGxcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjbGFzc2VzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGNsYXNzZXNba2V5XSA/IGtleSA6IG51bGw7XG4gICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBDYW1lbGl6ZSB0YWtlbiBmcm9tIGh1bXBzXG4gIC8vIGh1bXBzIGlzIGNvcHlyaWdodCBcdTAwQTkgMjAxMisgRG9tIENocmlzdGllXG4gIC8vIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAgLy8gUGVyZm9ybWFudCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG9iamVjdCBjb2VyY2VzIHRvIGEgbnVtYmVyXG4gIGZ1bmN0aW9uIF9pc051bWVyaWNhbChvYmopIHtcbiAgICBvYmogPSBvYmogLSAwOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cbiAgICByZXR1cm4gb2JqID09PSBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgICBpZiAoX2lzTnVtZXJpY2FsKHN0cmluZykpIHtcbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcblxuXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1tcXC1fXFxzXSsoLik/L2csIGZ1bmN0aW9uIChtYXRjaCwgY2hyKSB7XG4gICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICB9KTsgLy8gRW5zdXJlIDFzdCBjaGFyIGlzIGFsd2F5cyBsb3dlcmNhc2VcblxuICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyKDEpO1xuICB9XG5cbiAgdmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdO1xuXG4gIGZ1bmN0aW9uIGNhcGl0YWxpemUodmFsKSB7XG4gICAgcmV0dXJuIHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbC5zbGljZSgxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlVG9PYmplY3Qoc3R5bGUpIHtcbiAgICByZXR1cm4gc3R5bGUuc3BsaXQoJzsnKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYWlyKSB7XG4gICAgICB2YXIgaSA9IHBhaXIuaW5kZXhPZignOicpO1xuICAgICAgdmFyIHByb3AgPSBjYW1lbGl6ZShwYWlyLnNsaWNlKDAsIGkpKTtcbiAgICAgIHZhciB2YWx1ZSA9IHBhaXIuc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICAgIHByb3Auc3RhcnRzV2l0aCgnd2Via2l0JykgPyBhY2NbY2FwaXRhbGl6ZShwcm9wKV0gPSB2YWx1ZSA6IGFjY1twcm9wXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0KGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnQpIHtcbiAgICB2YXIgZXh0cmFQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSAoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNvbnZlcnQoY3JlYXRlRWxlbWVudCwgY2hpbGQpO1xuICAgIH0pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGRvdC1ub3RhdGlvbiAqL1xuXG4gICAgdmFyIG1peGlucyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgdmFyIHZhbCA9IGVsZW1lbnQuYXR0cmlidXRlc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgYWNjLmF0dHJzWydjbGFzc05hbWUnXSA9IHZhbDtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudC5hdHRyaWJ1dGVzWydjbGFzcyddO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgICBhY2MuYXR0cnNbJ3N0eWxlJ10gPSBzdHlsZVRvT2JqZWN0KHZhbCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ2FyaWEtJykgPT09IDAgfHwga2V5LmluZGV4T2YoJ2RhdGEtJykgPT09IDApIHtcbiAgICAgICAgICAgIGFjYy5hdHRyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5hdHRyc1tjYW1lbGl6ZShrZXkpXSA9IHZhbDtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7XG4gICAgICBhdHRyczoge31cbiAgICB9KTtcblxuICAgIHZhciBfZXh0cmFQcm9wcyRzdHlsZSA9IGV4dHJhUHJvcHMuc3R5bGUsXG4gICAgICAgIGV4aXN0aW5nU3R5bGUgPSBfZXh0cmFQcm9wcyRzdHlsZSA9PT0gdm9pZCAwID8ge30gOiBfZXh0cmFQcm9wcyRzdHlsZSxcbiAgICAgICAgcmVtYWluaW5nID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGV4dHJhUHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICBtaXhpbnMuYXR0cnNbJ3N0eWxlJ10gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWl4aW5zLmF0dHJzWydzdHlsZSddKSwgZXhpc3RpbmdTdHlsZSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkodm9pZCAwLCBbZWxlbWVudC50YWcsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtaXhpbnMuYXR0cnMpLCByZW1haW5pbmcpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNoaWxkcmVuKSkpO1xuICB9XG5cbiAgdmFyIFBST0RVQ1RJT04gPSBmYWxzZTtcblxuICB0cnkge1xuICAgIFBST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGZ1bmN0aW9uIGxvZyAoKSB7XG4gICAgaWYgKCFQUk9EVUNUSU9OICYmIGNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29uc29sZTtcblxuICAgICAgKF9jb25zb2xlID0gY29uc29sZSkuZXJyb3IuYXBwbHkoX2NvbnNvbGUsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplSWNvbkFyZ3MoaWNvbikge1xuICAgIC8vIHRoaXMgaGFzIGV2ZXJ5dGhpbmcgdGhhdCBpdCBuZWVkcyB0byBiZSByZW5kZXJlZCB3aGljaCBtZWFucyBpdCB3YXMgcHJvYmFibHkgaW1wb3J0ZWRcbiAgICAvLyBkaXJlY3RseSBmcm9tIGFuIGljb24gc3ZnIHBhY2thZ2VcbiAgICBpZiAoaWNvbiAmJiBfdHlwZW9mKGljb24pID09PSAnb2JqZWN0JyAmJiBpY29uLnByZWZpeCAmJiBpY29uLmljb25OYW1lICYmIGljb24uaWNvbikge1xuICAgICAgcmV0dXJuIGljb247XG4gICAgfVxuXG4gICAgaWYgKGZvbnRhd2Vzb21lU3ZnQ29yZS5wYXJzZS5pY29uKSB7XG4gICAgICByZXR1cm4gZm9udGF3ZXNvbWVTdmdDb3JlLnBhcnNlLmljb24oaWNvbik7XG4gICAgfSAvLyBpZiB0aGUgaWNvbiBpcyBudWxsLCB0aGVyZSdzIG5vdGhpbmcgdG8gZG9cblxuXG4gICAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaWYgdGhlIGljb24gaXMgYW4gb2JqZWN0IGFuZCBoYXMgYSBwcmVmaXggYW5kIGFuIGljb24gbmFtZSwgcmV0dXJuIGl0XG5cblxuICAgIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiBpY29uO1xuICAgIH0gLy8gaWYgaXQncyBhbiBhcnJheSB3aXRoIGxlbmd0aCBvZiB0d29cblxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIHVzZSB0aGUgZmlyc3QgaXRlbSBhcyBwcmVmaXgsIHNlY29uZCBhcyBpY29uIG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogaWNvblswXSxcbiAgICAgICAgaWNvbk5hbWU6IGljb25bMV1cbiAgICAgIH07XG4gICAgfSAvLyBpZiBpdCdzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIGljb24gbmFtZVxuXG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXg6ICdmYXMnLFxuICAgICAgICBpY29uTmFtZTogaWNvblxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIGEga2V5IG9mIGtleVxuICAvLyBhbmQgYSB2YWx1ZSBvZiB2YWx1ZVxuICAvLyBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldFxuICBmdW5jdGlvbiBvYmplY3RXaXRoS2V5KGtleSwgdmFsdWUpIHtcbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXlcbiAgICAvLyBvciBpdCdzIG5vdCBhbiBhcnJheSBidXQgaXQgaXMgdHJ1dGh5XG4gICAgLy8gdGhlbiBjcmVhdGUgdGhlIG9iamVjdCB3aXRoIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZVxuICAgIC8vIGlmIG5vdCwgcmV0dXJuIGFuIGVtcHR5IGFycmF5XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlID8gX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIHZhbHVlKSA6IHt9O1xuICB9XG5cbiAgdmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBib3JkZXI6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgbWFzazogbnVsbCxcbiAgICBtYXNrSWQ6IG51bGwsXG4gICAgZml4ZWRXaWR0aDogZmFsc2UsXG4gICAgaW52ZXJzZTogZmFsc2UsXG4gICAgZmxpcDogZmFsc2UsXG4gICAgaWNvbjogbnVsbCxcbiAgICBsaXN0SXRlbTogZmFsc2UsXG4gICAgcHVsbDogbnVsbCxcbiAgICBwdWxzZTogZmFsc2UsXG4gICAgcm90YXRpb246IG51bGwsXG4gICAgc2l6ZTogbnVsbCxcbiAgICBzcGluOiBmYWxzZSxcbiAgICBzcGluUHVsc2U6IGZhbHNlLFxuICAgIHNwaW5SZXZlcnNlOiBmYWxzZSxcbiAgICBiZWF0OiBmYWxzZSxcbiAgICBmYWRlOiBmYWxzZSxcbiAgICBiZWF0RmFkZTogZmFsc2UsXG4gICAgYm91bmNlOiBmYWxzZSxcbiAgICBzaGFrZTogZmFsc2UsXG4gICAgc3ltYm9sOiBmYWxzZSxcbiAgICB0aXRsZTogJycsXG4gICAgdGl0bGVJZDogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgc3dhcE9wYWNpdHk6IGZhbHNlXG4gIH07XG4gIHZhciBGb250QXdlc29tZUljb24gPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgYWxsUHJvcHMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZGVmYXVsdFByb3BzKSwgcHJvcHMpO1xuXG4gICAgdmFyIGljb25BcmdzID0gYWxsUHJvcHMuaWNvbixcbiAgICAgICAgbWFza0FyZ3MgPSBhbGxQcm9wcy5tYXNrLFxuICAgICAgICBzeW1ib2wgPSBhbGxQcm9wcy5zeW1ib2wsXG4gICAgICAgIGNsYXNzTmFtZSA9IGFsbFByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgdGl0bGUgPSBhbGxQcm9wcy50aXRsZSxcbiAgICAgICAgdGl0bGVJZCA9IGFsbFByb3BzLnRpdGxlSWQsXG4gICAgICAgIG1hc2tJZCA9IGFsbFByb3BzLm1hc2tJZDtcbiAgICB2YXIgaWNvbkxvb2t1cCA9IG5vcm1hbGl6ZUljb25BcmdzKGljb25BcmdzKTtcbiAgICB2YXIgY2xhc3NlcyA9IG9iamVjdFdpdGhLZXkoJ2NsYXNzZXMnLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTGlzdChhbGxQcm9wcykpLCBfdG9Db25zdW1hYmxlQXJyYXkoKGNsYXNzTmFtZSB8fCAnJykuc3BsaXQoJyAnKSkpKTtcbiAgICB2YXIgdHJhbnNmb3JtID0gb2JqZWN0V2l0aEtleSgndHJhbnNmb3JtJywgdHlwZW9mIGFsbFByb3BzLnRyYW5zZm9ybSA9PT0gJ3N0cmluZycgPyBmb250YXdlc29tZVN2Z0NvcmUucGFyc2UudHJhbnNmb3JtKGFsbFByb3BzLnRyYW5zZm9ybSkgOiBhbGxQcm9wcy50cmFuc2Zvcm0pO1xuICAgIHZhciBtYXNrID0gb2JqZWN0V2l0aEtleSgnbWFzaycsIG5vcm1hbGl6ZUljb25BcmdzKG1hc2tBcmdzKSk7XG4gICAgdmFyIHJlbmRlcmVkSWNvbiA9IGZvbnRhd2Vzb21lU3ZnQ29yZS5pY29uKGljb25Mb29rdXAsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjbGFzc2VzKSwgdHJhbnNmb3JtKSwgbWFzayksIHt9LCB7XG4gICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIHRpdGxlSWQ6IHRpdGxlSWQsXG4gICAgICBtYXNrSWQ6IG1hc2tJZFxuICAgIH0pKTtcblxuICAgIGlmICghcmVuZGVyZWRJY29uKSB7XG4gICAgICBsb2coJ0NvdWxkIG5vdCBmaW5kIGljb24nLCBpY29uTG9va3VwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhYnN0cmFjdCA9IHJlbmRlcmVkSWNvbi5hYnN0cmFjdDtcbiAgICB2YXIgZXh0cmFQcm9wcyA9IHtcbiAgICAgIHJlZjogcmVmXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhhbGxQcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoIWRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGV4dHJhUHJvcHNba2V5XSA9IGFsbFByb3BzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnZlcnRDdXJyeShhYnN0cmFjdFswXSwgZXh0cmFQcm9wcyk7XG4gIH0pO1xuICBGb250QXdlc29tZUljb24uZGlzcGxheU5hbWUgPSAnRm9udEF3ZXNvbWVJY29uJztcbiAgRm9udEF3ZXNvbWVJY29uLnByb3BUeXBlcyA9IHtcbiAgICBiZWF0OiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgYm9yZGVyOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgYmVhdEZhZGU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBib3VuY2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uc3RyaW5nLFxuICAgIGZhZGU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBmbGFzaDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIG1hc2s6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub25lT2ZUeXBlKFtQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9iamVjdCwgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5hcnJheSwgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5zdHJpbmddKSxcbiAgICBtYXNrSWQ6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uc3RyaW5nLFxuICAgIGZpeGVkV2lkdGg6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBpbnZlcnNlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgZmxpcDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbdHJ1ZSwgZmFsc2UsICdob3Jpem9udGFsJywgJ3ZlcnRpY2FsJywgJ2JvdGgnXSksXG4gICAgaWNvbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoW1Byb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub2JqZWN0LCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmFycmF5LCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZ10pLFxuICAgIGxpc3RJdGVtOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgcHVsbDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbJ3JpZ2h0JywgJ2xlZnQnXSksXG4gICAgcHVsc2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICByb3RhdGlvbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbMCwgOTAsIDE4MCwgMjcwXSksXG4gICAgc2hha2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBzaXplOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9uZU9mKFsnMnhzJywgJ3hzJywgJ3NtJywgJ2xnJywgJ3hsJywgJzJ4bCcsICcxeCcsICcyeCcsICczeCcsICc0eCcsICc1eCcsICc2eCcsICc3eCcsICc4eCcsICc5eCcsICcxMHgnXSksXG4gICAgc3BpbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIHNwaW5QdWxzZTogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIHNwaW5SZXZlcnNlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgc3ltYm9sOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9uZU9mVHlwZShbUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZ10pLFxuICAgIHRpdGxlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgICB0aXRsZUlkOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgICB0cmFuc2Zvcm06IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub25lT2ZUeXBlKFtQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZywgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vYmplY3RdKSxcbiAgICBzd2FwT3BhY2l0eTogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sXG4gIH07XG4gIHZhciBjb252ZXJ0Q3VycnkgPSBjb252ZXJ0LmJpbmQobnVsbCwgUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQpO1xuXG4gIGV4cG9ydHMuRm9udEF3ZXNvbWVJY29uID0gRm9udEF3ZXNvbWVJY29uO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gZXhwb3J0cy5hc1NldCA9IGV4cG9ydHMuc2ltcGxlQ29tcGFyYXRvciA9IGV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBDb21wYXJlcyBEZWZhdWx0Q29tcGFyYWJsZXMgdG8gZm9ybSBhIHN0cmljdCBwYXJ0aWFsIG9yZGVyaW5nLlxyXG4gKlxyXG4gKiBIYW5kbGVzICsvLTAgYW5kIE5hTiBsaWtlIE1hcDogTmFOIGlzIGVxdWFsIHRvIE5hTiwgYW5kIC0wIGlzIGVxdWFsIHRvICswLlxyXG4gKlxyXG4gKiBBcnJheXMgYXJlIGNvbXBhcmVkIHVzaW5nICc8JyBhbmQgJz4nLCB3aGljaCBtYXkgY2F1c2UgdW5leHBlY3RlZCBlcXVhbGl0eTpcclxuICogZm9yIGV4YW1wbGUgWzFdIHdpbGwgYmUgY29uc2lkZXJlZCBlcXVhbCB0byBbJzEnXS5cclxuICpcclxuICogVHdvIG9iamVjdHMgd2l0aCBlcXVhbCB2YWx1ZU9mIGNvbXBhcmUgdGhlIHNhbWUsIGJ1dCBjb21wYXJlIHVuZXF1YWwgdG9cclxuICogcHJpbWl0aXZlcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICAvLyBTcGVjaWFsIGNhc2UgZmluaXRlIG51bWJlcnMgZmlyc3QgZm9yIHBlcmZvcm1hbmNlLlxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB0cmljayBvZiB1c2luZyAnYSAtIGInIGFuZCBjaGVja2luZyBmb3IgTmFOIHRvIGRldGVjdCBub24tbnVtYmVyc1xyXG4gICAgLy8gZG9lcyBub3Qgd29yayBpZiB0aGUgc3RyaW5ncyBhcmUgbnVtZXJpYyAoZXg6IFwiNVwiKS4gVGhpcyB3b3VsZCBsZWFkaW5nIG1vc3QgXHJcbiAgICAvLyBjb21wYXJpc29uIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGFwcHJvYWNoIHRvIGZhaWwgdG8gaGF2ZSB0cmFuc2l0aXZpdHkuXHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGEpICYmIE51bWJlci5pc0Zpbml0ZShiKSkge1xyXG4gICAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH1cclxuICAgIC8vIFRoZSBkZWZhdWx0IDwgYW5kID4gb3BlcmF0b3JzIGFyZSBub3QgdG90YWxseSBvcmRlcmVkLiBUbyBhbGxvdyB0eXBlcyB0byBiZSBtaXhlZFxyXG4gICAgLy8gaW4gYSBzaW5nbGUgY29sbGVjdGlvbiwgY29tcGFyZSB0eXBlcyBhbmQgb3JkZXIgdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBieSB0eXBlLlxyXG4gICAgdmFyIHRhID0gdHlwZW9mIGE7XHJcbiAgICB2YXIgdGIgPSB0eXBlb2YgYjtcclxuICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICByZXR1cm4gdGEgPCB0YiA/IC0xIDogMTtcclxuICAgIH1cclxuICAgIGlmICh0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBzdGFuZGFyZGl6ZWQgSmF2YVNjcmlwdCBidWc6IG51bGwgaXMgbm90IGFuIG9iamVjdCwgYnV0IHR5cGVvZiBzYXlzIGl0IGlzXHJcbiAgICAgICAgaWYgKGEgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBiID09PSBudWxsID8gMCA6IC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKGIgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGEgPSBhLnZhbHVlT2YoKTtcclxuICAgICAgICBiID0gYi52YWx1ZU9mKCk7XHJcbiAgICAgICAgdGEgPSB0eXBlb2YgYTtcclxuICAgICAgICB0YiA9IHR5cGVvZiBiO1xyXG4gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgdHdvIHZhbHVlT2YoKXMgcHJvZHVjaW5nIGRpZmZlcmVudCB0eXBlc1xyXG4gICAgICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYSBhbmQgYiBhcmUgbm93IHRoZSBzYW1lIHR5cGUsIGFuZCB3aWxsIGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkgXHJcbiAgICAvLyAod2hpY2ggd2UgYXNzdW1lIGhvbGRzIG51bWJlcnMgb3Igc3RyaW5ncyksIG9yIHNvbWV0aGluZyB1bnN1cHBvcnRlZC5cclxuICAgIGlmIChhIDwgYilcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICBpZiAoYSA+IGIpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIC8vIE9yZGVyIE5hTiBsZXNzIHRoYW4gb3RoZXIgbnVtYmVyc1xyXG4gICAgaWYgKE51bWJlci5pc05hTihhKSlcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGIpID8gMCA6IC0xO1xyXG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzTmFOKGIpKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gVGhpcyBjb3VsZCBiZSB0d28gb2JqZWN0cyAoZS5nLiBbN10gYW5kIFsnNyddKSB0aGF0IGFyZW4ndCBvcmRlcmVkXHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IDAgOiBOdW1iZXIuTmFOO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcclxuO1xyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJhdG9yKGEsIGIpIHtcclxuICAgIHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMDtcclxufVxyXG5leHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBzaW1wbGVDb21wYXJhdG9yO1xyXG47XHJcbi8qKlxyXG4gKiBBIHJlYXNvbmFibHkgZmFzdCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB3aXRoIGEgcG93ZXJmdWwgQVBJLlxyXG4gKiBMYXJnZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQgTWFwLiBCVHJlZSBpcyBhIEIrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUsXHJcbiAqIHNvIHRoZSBjb2xsZWN0aW9uIGlzIHNvcnRlZCBieSBrZXkuXHJcbiAqXHJcbiAqIEIrIHRyZWVzIHRlbmQgdG8gdXNlIG1lbW9yeSBtb3JlIGVmZmljaWVudGx5IHRoYW4gaGFzaHRhYmxlcyBzdWNoIGFzIHRoZVxyXG4gKiBzdGFuZGFyZCBNYXAsIGVzcGVjaWFsbHkgd2hlbiB0aGUgY29sbGVjdGlvbiBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZlxyXG4gKiBpdGVtcy4gSG93ZXZlciwgbWFpbnRhaW5pbmcgdGhlIHNvcnQgb3JkZXIgbWFrZXMgdGhlbSBtb2Rlc3RseSBzbG93ZXI6XHJcbiAqIE8obG9nIHNpemUpIHJhdGhlciB0aGFuIE8oMSkuIFRoaXMgQisgdHJlZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBPKDEpXHJcbiAqIGZhc3QgY2xvbmluZy4gSXQgYWxzbyBzdXBwb3J0cyBmcmVlemUoKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXRcclxuICogYSBCVHJlZSBpcyBub3QgY2hhbmdlZCBhY2NpZGVudGFsbHkuXHJcbiAqXHJcbiAqIENvbmZ1c2luZ2x5LCB0aGUgRVM2IE1hcC5mb3JFYWNoKGMpIG1ldGhvZCBjYWxscyBjKHZhbHVlLGtleSkgaW5zdGVhZCBvZlxyXG4gKiBjKGtleSx2YWx1ZSksIGluIGNvbnRyYXN0IHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBzZXQoKSBhbmQgZW50cmllcygpXHJcbiAqIHdoaWNoIHB1dCB0aGUga2V5IGZpcnN0LiBJIGNhbiBvbmx5IGFzc3VtZSB0aGF0IHRoZSBvcmRlciB3YXMgcmV2ZXJzZWQgb25cclxuICogdGhlIHRoZW9yeSB0aGF0IHVzZXJzIHdvdWxkIHVzdWFsbHkgd2FudCB0byBleGFtaW5lIHZhbHVlcyBhbmQgaWdub3JlIGtleXMuXHJcbiAqIEJUcmVlJ3MgZm9yRWFjaCgpIHRoZXJlZm9yZSB3b3JrcyB0aGUgc2FtZSB3YXksIGJ1dCBhIHNlY29uZCBtZXRob2RcclxuICogYC5mb3JFYWNoUGFpcigoa2V5LHZhbHVlKT0+ey4uLn0pYCBpcyBwcm92aWRlZCB3aGljaCBzZW5kcyB5b3UgdGhlIGtleVxyXG4gKiBmaXJzdCBhbmQgdGhlIHZhbHVlIHNlY29uZDsgdGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgaXQgaXNcclxuICogdGhlIFwibmF0aXZlXCIgZm9yLWVhY2ggbWV0aG9kIGZvciB0aGlzIGNsYXNzLlxyXG4gKlxyXG4gKiBPdXQgb2YgdGhlIGJveCwgQlRyZWUgc3VwcG9ydHMga2V5cyB0aGF0IGFyZSBudW1iZXJzLCBzdHJpbmdzLCBhcnJheXMgb2ZcclxuICogbnVtYmVycy9zdHJpbmdzLCBEYXRlLCBhbmQgb2JqZWN0cyB0aGF0IGhhdmUgYSB2YWx1ZU9mKCkgbWV0aG9kIHJldHVybmluZyBhXHJcbiAqIG51bWJlciBvciBzdHJpbmcuIE90aGVyIGRhdGEgdHlwZXMsIHN1Y2ggYXMgYXJyYXlzIG9mIERhdGUgb3IgY3VzdG9tXHJcbiAqIG9iamVjdHMsIHJlcXVpcmUgYSBjdXN0b20gY29tcGFyYXRvciwgd2hpY2ggeW91IG11c3QgcGFzcyBhcyB0aGUgc2Vjb25kXHJcbiAqIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciAodGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcclxuICogaW5pdGlhbCBpdGVtcykuIFN5bWJvbHMgY2Fubm90IGJlIHVzZWQgYXMga2V5cyBiZWNhdXNlIHRoZXkgYXJlIHVub3JkZXJlZFxyXG4gKiAob25lIFN5bWJvbCBpcyBuZXZlciBcImdyZWF0ZXJcIiBvciBcImxlc3NcIiB0aGFuIGFub3RoZXIpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBHaXZlbiBhIHtuYW1lOiBzdHJpbmcsIGFnZTogbnVtYmVyfSBvYmplY3QsIHlvdSBjYW4gY3JlYXRlIGEgdHJlZSBzb3J0ZWQgYnlcclxuICogbmFtZSBhbmQgdGhlbiBieSBhZ2UgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiAgICAgdmFyIHRyZWUgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCAoYSwgYikgPT4ge1xyXG4gKiAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAxOyAvLyBSZXR1cm4gYSBudW1iZXIgPjAgd2hlbiBhID4gYlxyXG4gKiAgICAgICBlbHNlIGlmIChhLm5hbWUgPCBiLm5hbWUpXHJcbiAqICAgICAgICAgcmV0dXJuIC0xOyAvLyBSZXR1cm4gYSBudW1iZXIgPDAgd2hlbiBhIDwgYlxyXG4gKiAgICAgICBlbHNlIC8vIG5hbWVzIGFyZSBlcXVhbCAob3IgaW5jb21wYXJhYmxlKVxyXG4gKiAgICAgICAgIHJldHVybiBhLmFnZSAtIGIuYWdlOyAvLyBSZXR1cm4gPjAgd2hlbiBhLmFnZSA+IGIuYWdlXHJcbiAqICAgICB9KTtcclxuICpcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6MTd9LCBcImhhcHB5XCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJGcmFuXCIsIGFnZTo0MH0sIFwiYnVzeSAmIHN0cmVzc2VkXCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJCaWxsXCIsIGFnZTo1NX0sIFwicmVjZW50bHkgbGFpZCBvZmZcIik7XHJcbiAqICAgICB0cmVlLmZvckVhY2hQYWlyKChrLCB2KSA9PiB7XHJcbiAqICAgICAgIGNvbnNvbGUubG9nKGBOYW1lOiAke2submFtZX0gQWdlOiAke2suYWdlfSBTdGF0dXM6ICR7dn1gKTtcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIFwicmFuZ2VcIiBtZXRob2RzIChgZm9yRWFjaCwgZm9yUmFuZ2UsIGVkaXRSYW5nZWApIHdpbGwgcmV0dXJuIHRoZSBudW1iZXJcclxuICogb2YgZWxlbWVudHMgdGhhdCB3ZXJlIHNjYW5uZWQuIEluIGFkZGl0aW9uLCB0aGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un1cclxuICogdG8gc3RvcCBlYXJseSBhbmQgcmV0dXJuIFIgZnJvbSB0aGUgb3V0ZXIgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIC0gVE9ETzogVGVzdCBwZXJmb3JtYW5jZSBvZiBwcmVhbGxvY2F0aW5nIHZhbHVlcyBhcnJheSBhdCBtYXggc2l6ZVxyXG4gKiAtIFRPRE86IEFkZCBmYXN0IGluaXRpYWxpemF0aW9uIHdoZW4gYSBzb3J0ZWQgYXJyYXkgaXMgcHJvdmlkZWQgdG8gY29uc3RydWN0b3JcclxuICpcclxuICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3F3ZXJ0aWUvYnRyZWUtdHlwZXNjcmlwdFxyXG4gKlxyXG4gKiBBcmUgeW91IGEgQyMgZGV2ZWxvcGVyPyBZb3UgbWlnaHQgbGlrZSB0aGUgc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMgSSBtYWRlIGZvciBDIzpcclxuICogQkRpY3Rpb25hcnksIEJMaXN0LCBldGMuIFNlZSBodHRwOi8vY29yZS5sb3ljLm5ldC9jb2xsZWN0aW9ucy9cclxuICpcclxuICogQGF1dGhvciBEYXZpZCBQaWVwZ3Jhc3NcclxuICovXHJcbnZhciBCVHJlZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gZW1wdHkgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBjb21wYXJlIEN1c3RvbSBmdW5jdGlvbiB0byBjb21wYXJlIHBhaXJzIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlLlxyXG4gICAgICogICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0Q29tcGFyYXRvciB3aWxsIGJlIHVzZWQgd2hpY2ggaXMgdmFsaWQgYXMgbG9uZyBhcyBLIGV4dGVuZHMgRGVmYXVsdENvbXBhcmFibGUuXHJcbiAgICAgKiBAcGFyYW0gZW50cmllcyBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZVxyXG4gICAgICogQHBhcmFtIG1heE5vZGVTaXplIEJyYW5jaGluZyBmYWN0b3IgKG1heGltdW0gaXRlbXMgb3IgY2hpbGRyZW4gcGVyIG5vZGUpXHJcbiAgICAgKiAgIE11c3QgYmUgaW4gcmFuZ2UgNC4uMjU2LiBJZiB1bmRlZmluZWQgb3IgPDQgdGhlbiBkZWZhdWx0IGlzIHVzZWQ7IGlmID4yNTYgdGhlbiAyNTYuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJUcmVlKGVudHJpZXMsIGNvbXBhcmUsIG1heE5vZGVTaXplKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgICAgICB0aGlzLl9tYXhOb2RlU2l6ZSA9IG1heE5vZGVTaXplID49IDQgPyBNYXRoLm1pbihtYXhOb2RlU2l6ZSwgMjU2KSA6IDMyO1xyXG4gICAgICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJhdG9yO1xyXG4gICAgICAgIGlmIChlbnRyaWVzKVxyXG4gICAgICAgICAgICB0aGlzLnNldFBhaXJzKGVudHJpZXMpO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8vIEVTNiBNYXA8SyxWPiBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWZmIHRoZSB0cmVlIGNvbnRhaW5zIG5vIGtleS12YWx1ZSBwYWlycy4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7IH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBSZWxlYXNlcyB0aGUgdHJlZSBzbyB0aGF0IGl0cyBzaXplIGlzIDAuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRVM2IE1hcCwgdGhlIGFyZ3VtZW50IG9yZGVyIHRvXHJcbiAgICAgKiAgdGhlIGNhbGxiYWNrIGlzIGJhY2t3YXJkczogdmFsdWUgZmlyc3QsIHRoZW4ga2V5LiBDYWxsIGZvckVhY2hQYWlyXHJcbiAgICAgKiAgaW5zdGVhZCB0byByZWNlaXZlIHRoZSBrZXkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICogQHBhcmFtIHRoaXNBcmcgSWYgcHJvdmlkZWQsIHRoaXMgcGFyYW1ldGVyIGlzIGFzc2lnbmVkIGFzIHRoZSBgdGhpc2BcclxuICAgICAqICAgICAgICB2YWx1ZSBmb3IgZWFjaCBjYWxsYmFjay5cclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHRoYXQgd2VyZSBzZW50IHRvIHRoZSBjYWxsYmFjayxcclxuICAgICAqICAgICAgICBvciB0aGUgUiB2YWx1ZSBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzQXJnICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gY2FsbGJhY2sodiwgaywgX3RoaXMpOyB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIFRoZSBjYWxsYmFjayBjYW4gcmV0dXJuIHticmVhazpSfSAod2hlcmUgUiBpcyBhbnkgdmFsdWVcclxuICAgICAqICBleGNlcHQgdW5kZWZpbmVkKSB0byBzdG9wIGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gUiBmcm9tIGZvckVhY2hQYWlyLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4ge2JyZWFrOlJ9IHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUi5cclxuICAgICAqICAgICAgICBUaGUgcmVhc29uIHRoYXQgeW91IG11c3QgcmV0dXJuIHticmVhazpSfSBpbnN0ZWFkIG9mIHNpbXBseSBSXHJcbiAgICAgKiAgICAgICAgaXRzZWxmIGlzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGVkaXRSYW5nZSgpLCB3aGljaCBhbGxvd3NcclxuICAgICAqICAgICAgICBtdWx0aXBsZSBhY3Rpb25zLCBub3QganVzdCBicmVha2luZy5cclxuICAgICAqIEBwYXJhbSBpbml0aWFsQ291bnRlciBUaGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgb2ZcclxuICAgICAqICAgICAgICBgb25Gb3VuZGAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGUgY291bnRlciBpbmNyZWFzZXNcclxuICAgICAqICAgICAgICBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQgdmFsdWU6IDBcclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgc2VudCB0byB0aGUgY2FsbGJhY2sgKHBsdXMgaW5pdGlhbENvdW50ZXIsXHJcbiAgICAgKiAgICAgICAgaWYgeW91IHByb3ZpZGVkIG9uZSkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5lZCB7YnJlYWs6Un0gdGhlblxyXG4gICAgICogICAgICAgIHRoZSBSIHZhbHVlIGlzIHJldHVybmVkIGluc3RlYWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZm9yRWFjaFBhaXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHRoaXMubWluS2V5KCksIGhpZ2ggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGxvdywgaGlnaCwgdHJ1ZSwgY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgcGFpciBpbiB0aGUgdHJlZSBhbmQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgYSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlLCBvciBkZWZhdWx0VmFsdWUgaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdGhpcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9yIG92ZXJ3cml0ZXMgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc29ydCBvcmRlciBvZlxyXG4gICAgICogICAgICAgIGRhdGEgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUga2V5IChvcHRpb25hbClcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcga2V5LXZhbHVlIHBhaXJcclxuICAgICAqICAgICAgICAoZGVmYXVsdDogdHJ1ZSkuIElmIHRoaXMgaXMgZmFsc2UgYW5kIHRoZXJlIGlzIGFuIGV4aXN0aW5nXHJcbiAgICAgKiAgICAgICAga2V5LXZhbHVlIHBhaXIgdGhlbiB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5ldyBrZXktdmFsdWUgcGFpciB3YXMgYWRkZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICogTm90ZTogd2hlbiBvdmVyd3JpdGluZyBhIHByZXZpb3VzIGVudHJ5LCB0aGUga2V5IGlzIHVwZGF0ZWRcclxuICAgICAqIGFzIHdlbGwgYXMgdGhlIHZhbHVlLiBUaGlzIGhhcyBubyBlZmZlY3QgdW5sZXNzIHRoZSBuZXcga2V5XHJcbiAgICAgKiBoYXMgZGF0YSB0aGF0IGRvZXMgbm90IGFmZmVjdCBpdHMgc29ydCBvcmRlci5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fcm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHRoaXMuX3Jvb3QuY2xvbmUoKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcm9vdC5zZXQoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0aGlzKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgLy8gUm9vdCBub2RlIGhhcyBzcGxpdCwgc28gY3JlYXRlIGEgbmV3IHJvb3Qgbm9kZS5cclxuICAgICAgICB0aGlzLl9yb290ID0gbmV3IEJOb2RlSW50ZXJuYWwoW3RoaXMuX3Jvb3QsIHJlc3VsdF0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzIGluIHRoZSBCKyB0cmVlLCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKiBVc2UgZ2V0KCkgZm9yIGJlc3QgcGVyZm9ybWFuY2U7IHVzZSBoYXMoKSBpZiB5b3UgbmVlZCB0b1xyXG4gICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBcInVuZGVmaW5lZCB2YWx1ZVwiIGFuZCBcImtleSBub3QgcHJlc2VudFwiLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZGV0ZWN0XHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGtleSwga2V5LCB0cnVlLCB1bmRlZmluZWQpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZmluZFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHBhaXIgd2FzIGZvdW5kIGFuZCByZW1vdmVkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgRGVsZXRlUmFuZ2UpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LXZhbHVlIHBhaXJzIHNldC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoUGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0UGFpcnMocGFpcnMsIG92ZXJ3cml0ZSkgIT09IDAgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5cyBwcmVzZW50LlxyXG4gICAgICogIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGFkZC4gSWYgYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0cmVlLFxyXG4gICAgICogICAgICAgICBuZWl0aGVyIHRoZSBleGlzdGluZyBrZXkgbm9yIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBtb2RpZmllZC5cclxuICAgICAqICBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBhbGwga2V5cyBhbHJlYWR5XHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcywgYWxsXHJcbiAgICAgKiAgbm9kZShzKSBsZWFkaW5nIHRvIGV4aXN0aW5nIGtleXMgYXJlIGNsb25lZCBldmVuIGlmIHRoZSBjb2xsZWN0aW9uIGlzXHJcbiAgICAgKiAgdWx0aW1hdGVseSB1bmNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhLZXlzID0gZnVuY3Rpb24gKGtleXMsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKSwgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY2hhbmdlZCA9IG51LnNldChrZXlzW2ldLCB1bmRlZmluZWQsIGZhbHNlKSB8fCBjaGFuZ2VkO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5UaGlzSWZVbmNoYW5nZWQgJiYgIWNoYW5nZWQgPyB0aGlzIDogbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LlxyXG4gICAgICogIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIG5vZGUocykgbGVhZGluZ1xyXG4gICAgICogIHRvIHdoZXJlIHRoZSBrZXkgd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBhcmUgY2xvbmVkIGV2ZW4gd2hlbiB0aGUga2V5XHJcbiAgICAgKiAgdHVybnMgb3V0IG5vdCB0byBleGlzdCBhbmQgdGhlIGNvbGxlY3Rpb24gaXMgdW5jaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dCA9IGZ1bmN0aW9uIChrZXksIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhvdXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIG5vbmUgb2YgdGhlIGtleXNcclxuICAgICAqICBleGlzdGVkLiBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZFxyXG4gICAgICogIGV2ZW4gd2hlbiB0aGUga2V5IHR1cm5zIG91dCBub3QgdG8gZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0S2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LmRlbGV0ZUtleXMoa2V5cykgfHwgIXJldHVyblRoaXNJZlVuY2hhbmdlZCA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMgcmVtb3ZlZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChudS5kZWxldGVSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSA9PT0gMCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBwYWlycyByZW1vdmVkIHdoZW5ldmVyIHRoZSBjYWxsYmFja1xyXG4gICAgICogIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuIGB3aGVyZSgpYCBpcyBhIHN5bm9ueW0gZm9yIHRoaXMgbWV0aG9kLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIHZhciBkZWw7XHJcbiAgICAgICAgbnUuZWRpdEFsbChmdW5jdGlvbiAoaywgdiwgaSkge1xyXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKGssIHYsIGkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbCA9IERlbGV0ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWRlbCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBhbGwgdmFsdWVzIGFsdGVyZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5tYXBWYWx1ZXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgdG1wID0ge307XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcC52YWx1ZSA9IGNhbGxiYWNrKHYsIGssIGkpLCB0bXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgIHZhciBpID0gMCwgcCA9IGluaXRpYWxWYWx1ZTtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSwgUmV1c2VkQXJyYXkpLCBuZXh0O1xyXG4gICAgICAgIHdoaWxlICghKG5leHQgPSBpdC5uZXh0KCkpLmRvbmUpXHJcbiAgICAgICAgICAgIHAgPSBjYWxsYmFjayhwLCBuZXh0LnZhbHVlLCBpKyssIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJdGVyYXRvciBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiBvcmRlciAoYXNjZW5kaW5nIG9yZGVyIGlmXHJcbiAgICAgKiAgdGhlIGNvbGxlY3Rpb24ncyBjb21wYXJhdG9yIHVzZXMgYXNjZW5kaW5nIG9yZGVyLCBhcyBpcyB0aGUgZGVmYXVsdC4pXHJcbiAgICAgKiAgQHBhcmFtIGxvd2VzdEtleSBGaXJzdCBrZXkgdG8gYmUgaXRlcmF0ZWQsIG9yIHVuZGVmaW5lZCB0byBzdGFydCBhdFxyXG4gICAgICogICAgICAgICBtaW5LZXkoKS4gSWYgdGhlIHNwZWNpZmllZCBrZXkgZG9lc24ndCBleGlzdCB0aGVuIGl0ZXJhdGlvblxyXG4gICAgICogICAgICAgICBzdGFydHMgYXQgdGhlIG5leHQgaGlnaGVyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uIChsb3dlc3RLZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGluZm8gPSB0aGlzLmZpbmRQYXRoKGxvd2VzdEtleSk7XHJcbiAgICAgICAgaWYgKGluZm8gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSA9IGluZm8ubm9kZXF1ZXVlLCBub2RlaW5kZXggPSBpbmZvLm5vZGVpbmRleCwgbGVhZiA9IGluZm8ubGVhZjtcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgdmFyIGkgPSAobG93ZXN0S2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGxlYWYuaW5kZXhPZihsb3dlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gbGVhZi5rZXlzW2ldLCByZXVzZWRBcnJheVsxXSA9IGxlYWYudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXVzZWRBcnJheSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgbGVhZiBub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gLTE7Oykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbGV2ZWwgPj0gbm9kZXF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBqdW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbm9kZWluZGV4W2xldmVsXSA8IG5vZGVxdWV1ZVtsZXZlbF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZXZlbCA+IDA7IGxldmVsLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtsZXZlbCAtIDFdID0gbm9kZXF1ZXVlW2xldmVsXVtub2RlaW5kZXhbbGV2ZWxdXS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVpbmRleFtsZXZlbCAtIDFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmID0gbm9kZXF1ZXVlWzBdW25vZGVpbmRleFswXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiByZXZlcnNlZCBvcmRlci5cclxuICAgICAqICBAcGFyYW0gaGlnaGVzdEtleSBLZXkgYXQgd2hpY2ggdG8gc3RhcnQgaXRlcmF0aW5nLCBvciB1bmRlZmluZWQgdG9cclxuICAgICAqICAgICAgICAgc3RhcnQgYXQgbWF4S2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGxvd2VyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICogIEBwYXJhbSBza2lwSGlnaGVzdCBJZmYgdGhpcyBmbGFnIGlzIHRydWUgYW5kIHRoZSBoaWdoZXN0S2V5IGV4aXN0cyBpbiB0aGVcclxuICAgICAqICAgICAgICAgY29sbGVjdGlvbiwgdGhlIHBhaXIgbWF0Y2hpbmcgaGlnaGVzdEtleSBpcyBza2lwcGVkLCBub3QgaXRlcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQgPSBmdW5jdGlvbiAoaGlnaGVzdEtleSwgcmV1c2VkQXJyYXksIHNraXBIaWdoZXN0KSB7XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBoaWdoZXN0S2V5ID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICAgICAgc2tpcEhpZ2hlc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKTsgLy8gY29sbGVjdGlvbiBpcyBlbXB0eVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2EgPSB0aGlzLmZpbmRQYXRoKGhpZ2hlc3RLZXkpIHx8IHRoaXMuZmluZFBhdGgodGhpcy5tYXhLZXkoKSksIG5vZGVxdWV1ZSA9IF9hLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gX2Eubm9kZWluZGV4LCBsZWFmID0gX2EubGVhZjtcclxuICAgICAgICBjaGVjayghbm9kZXF1ZXVlWzBdIHx8IGxlYWYgPT09IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dLCBcIndhdCFcIik7XHJcbiAgICAgICAgdmFyIGkgPSBsZWFmLmluZGV4T2YoaGlnaGVzdEtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKCFza2lwSGlnaGVzdCAmJiBpIDwgbGVhZi5rZXlzLmxlbmd0aCAmJiB0aGlzLl9jb21wYXJlKGxlYWYua2V5c1tpXSwgaGlnaGVzdEtleSkgPD0gMClcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHJldXNlZEFycmF5ICE9PSB1bmRlZmluZWQgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBqdW1wOiBmb3IgKDs7KSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1pID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW5vZGVpbmRleFtsZXZlbF0gPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbCAtIDFdLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gbGVhZi5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogVXNlZCBieSBlbnRyaWVzKCkgYW5kIGVudHJpZXNSZXZlcnNlZCgpIHRvIHByZXBhcmUgdG8gc3RhcnQgaXRlcmF0aW5nLlxyXG4gICAgICogSXQgZGV2ZWxvcHMgYSBcIm5vZGUgcXVldWVcIiBmb3IgZWFjaCBub24tbGVhZiBsZXZlbCBvZiB0aGUgdHJlZS5cclxuICAgICAqIExldmVscyBhcmUgbnVtYmVyZWQgXCJib3R0b20tdXBcIiBzbyB0aGF0IGxldmVsIDAgaXMgYSBsaXN0IG9mIGxlYWZcclxuICAgICAqIG5vZGVzIGZyb20gYSBsb3ctbGV2ZWwgbm9uLWxlYWYgbm9kZS4gVGhlIHF1ZXVlIGF0IGEgZ2l2ZW4gbGV2ZWwgTFxyXG4gICAgICogY29uc2lzdHMgb2Ygbm9kZXF1ZXVlW0xdIHdoaWNoIGlzIHRoZSBjaGlsZHJlbiBvZiBhIEJOb2RlSW50ZXJuYWwsXHJcbiAgICAgKiBhbmQgbm9kZWluZGV4W0xdLCB0aGUgY3VycmVudCBpbmRleCB3aXRoaW4gdGhhdCBjaGlsZCBsaXN0LCBzdWNoXHJcbiAgICAgKiBzdWNoIHRoYXQgbm9kZXF1ZXVlW0wtMV0gPT09IG5vZGVxdWV1ZVtMXVtub2RlaW5kZXhbTF1dLmNoaWxkcmVuLlxyXG4gICAgICogKEhvd2V2ZXIgaW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlIG9yZGVyIGlzIHJldmVyc2VkLilcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbmRQYXRoID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXh0bm9kZSA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSwgbm9kZWluZGV4O1xyXG4gICAgICAgIGlmIChuZXh0bm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgbm9kZXF1ZXVlID0gRW1wdHlBcnJheSwgbm9kZWluZGV4ID0gRW1wdHlBcnJheTsgLy8gYXZvaWQgYWxsb2NhdGlvbnNcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IFtdLCBub2RlaW5kZXggPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7ICFuZXh0bm9kZS5pc0xlYWY7IGQrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2RdID0gbmV4dG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBub2RlaW5kZXhbZF0gPSBrZXkgPT09IHVuZGVmaW5lZCA/IDAgOiBuZXh0bm9kZS5pbmRleE9mKGtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZWluZGV4W2RdID49IG5vZGVxdWV1ZVtkXS5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBmaXJzdCBrZXkgPiBtYXhLZXkoKVxyXG4gICAgICAgICAgICAgICAgbmV4dG5vZGUgPSBub2RlcXVldWVbZF1bbm9kZWluZGV4W2RdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlcXVldWUucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICBub2RlaW5kZXgucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBub2RlcXVldWU6IG5vZGVxdWV1ZSwgbm9kZWluZGV4OiBub2RlaW5kZXgsIGxlYWY6IG5leHRub2RlIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgdGhpc2AgYW5kIGBvdGhlcmAuXHJcbiAgICAgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIGRpZmYgaXMgcmV0dXJuZWQgdmlhIGludm9jYXRpb25zIG9mIHN1cHBsaWVkIGhhbmRsZXJzLlxyXG4gICAgICogVGhlIGNvbXB1dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHR3byB0cmVlcyBoYXZlIGxhcmdlIGFtb3VudHNcclxuICAgICAqIG9mIHNoYXJlZCBkYXRhIChvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgY2xvbmVgIG9yIGB3aXRoYCBBUElzKSBhbmQgd2lsbCBhdm9pZFxyXG4gICAgICogYW55IGl0ZXJhdGlvbiBvZiBzaGFyZWQgc3RhdGUuXHJcbiAgICAgKiBUaGUgaGFuZGxlcnMgY2FuIGNhdXNlIGNvbXB1dGF0aW9uIHRvIGVhcmx5IGV4aXQgYnkgcmV0dXJuaW5nIHticmVhazogUn0uXHJcbiAgICAgKiBOZWl0aGVyIG9mIHRoZSBjb2xsZWN0aW9ucyBzaG91bGQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGNvbXBhcmlzb24gcHJvY2VzcyAoaW4geW91ciBjYWxsYmFja3MpLCBhcyB0aGlzIG1ldGhvZCBhc3N1bWVzIHRoZXkgd2lsbCBub3QgYmUgbXV0YXRlZC5cclxuICAgICAqIEBwYXJhbSBvdGhlciBUaGUgdHJlZSB0byBjb21wdXRlIGEgZGlmZiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIG9ubHlUaGlzIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgdGhpc2AuXHJcbiAgICAgKiBAcGFyYW0gb25seU90aGVyIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgb3RoZXJgLlxyXG4gICAgICogQHBhcmFtIGRpZmZlcmVudCBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyB3aXRoIGRpZmZlcmluZyB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kaWZmQWdhaW5zdCA9IGZ1bmN0aW9uIChvdGhlciwgb25seVRoaXMsIG9ubHlPdGhlciwgZGlmZmVyZW50KSB7XHJcbiAgICAgICAgaWYgKG90aGVyLl9jb21wYXJlICE9PSB0aGlzLl9jb21wYXJlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgY29tcGFyYXRvcnMgYXJlIG5vdCB0aGUgc2FtZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkgfHwgb3RoZXIuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5ICYmIG90aGVyLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAvLyBJZiBvbmUgdHJlZSBpcyBlbXB0eSwgZXZlcnl0aGluZyB3aWxsIGJlIGFuIG9ubHlUaGlzL29ubHlPdGhlci5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBvbmx5T3RoZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlciksIG9ubHlPdGhlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBvbmx5VGhpcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogQlRyZWUuc3RlcFRvRW5kKEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEN1cnNvci1iYXNlZCBkaWZmIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxyXG4gICAgICAgIC8vIC0gVW50aWwgbmVpdGhlciBjdXJzb3IgaGFzIG5hdmlnYXRlZCB0byB0aGUgZW5kIG9mIHRoZSB0cmVlLCBkbyB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAtIElmIHRoZSBgdGhpc2AgY3Vyc29yIGlzIFwiYmVoaW5kXCIgdGhlIGBvdGhlcmAgY3Vyc29yIChzdHJpY3RseSA8LCB2aWEgY29tcGFyZSksIGFkdmFuY2UgaXQuXHJcbiAgICAgICAgLy8gIC0gT3RoZXJ3aXNlLCBhZHZhbmNlIHRoZSBgb3RoZXJgIGN1cnNvci5cclxuICAgICAgICAvLyAgLSBBbnkgdGltZSBhIGN1cnNvciBpcyBzdGVwcGVkLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmc6XHJcbiAgICAgICAgLy8gICAgLSBJZiBlaXRoZXIgY3Vyc29yIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyOlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID09PSBvdGhlckN1cnNvciBhbmQgdGhlIHZhbHVlcyBkaWZmZXIsIGl0IGlzIGEgRGlmZmVyZW50LlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID4gb3RoZXJDdXJzb3IgYW5kIG90aGVyQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlPdGhlci5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA8IG90aGVyQ3Vyc29yIGFuZCB0aGlzQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlUaGlzIGFzIGxvbmcgYXMgdGhlIG1vc3QgcmVjZW50IFxyXG4gICAgICAgIC8vICAgICAgICBjdXJzb3Igc3RlcCB3YXMgKm5vdCogb3RoZXJDdXJzb3IgYWR2YW5jaW5nIGZyb20gYSB0aWUuIFRoZSBleHRyYSBjb25kaXRpb24gYXZvaWRzIGVycm9uZW91cyBPbmx5T3RoZXIgY2FsbHMgXHJcbiAgICAgICAgLy8gICAgICAgIHRoYXQgd291bGQgb2NjdXIgZHVlIHRvIG90aGVyQ3Vyc29yIGJlaW5nIHRoZSBcImxlYWRlclwiLlxyXG4gICAgICAgIC8vICAgIC0gT3RoZXJ3aXNlLCBpZiBib3RoIGN1cnNvcnMgcG9pbnQgdG8gbm9kZXMsIGNvbXBhcmUgdGhlbS4gSWYgdGhleSBhcmUgZXF1YWwgYnkgcmVmZXJlbmNlIChzaGFyZWQpLCBza2lwXHJcbiAgICAgICAgLy8gICAgICBib3RoIGN1cnNvcnMgdG8gdGhlIG5leHQgbm9kZSBpbiB0aGUgd2Fsay5cclxuICAgICAgICAvLyAtIE9uY2Ugb25lIGN1cnNvciBoYXMgZmluaXNoZWQgc3RlcHBpbmcsIGFueSByZW1haW5pbmcgc3RlcHMgKGlmIGFueSkgYXJlIHRha2VuIGFuZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGxvZ2dlZFxyXG4gICAgICAgIC8vICAgYXMgT25seU90aGVyIChpZiBvdGhlckN1cnNvciBpcyBzdGVwcGluZykgb3IgT25seVRoaXMgKGlmIHRoaXNDdXJzb3IgaXMgc3RlcHBpbmcpLlxyXG4gICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIGdpdmVzIHRoZSBjcml0aWNhbCBndWFyYW50ZWUgdGhhdCBhbGwgbG9jYXRpb25zIChib3RoIG5vZGVzIGFuZCBrZXkvdmFsdWUgcGFpcnMpIGluIGJvdGggdHJlZXMgdGhhdCBcclxuICAgICAgICAvLyBhcmUgaWRlbnRpY2FsIGJ5IHZhbHVlIChhbmQgcG9zc2libHkgYnkgcmVmZXJlbmNlKSB3aWxsIGJlIHZpc2l0ZWQgKmF0IHRoZSBzYW1lIHRpbWUqIGJ5IHRoZSBjdXJzb3JzLlxyXG4gICAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgcG9zc2liaWxpdHkgb2YgZW1pdHRpbmcgaW5jb3JyZWN0IGRpZmZzLCBhcyB3ZWxsIGFzIGFsbG93aW5nIGZvciBza2lwcGluZyBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIF9jb21wYXJlID0gdGhpcy5fY29tcGFyZTtcclxuICAgICAgICB2YXIgdGhpc0N1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpO1xyXG4gICAgICAgIHZhciBvdGhlckN1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKG90aGVyKTtcclxuICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciBob3cgdGhpc1N0ZXBwZWRMYXN0IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICAgIC8vIFN0ZXAgb3JkZXIgaXMgb25seSB1c2VkIHdoZW4gZWl0aGVyIGN1cnNvciBpcyBhdCBhIGxlYWYsIGFuZCBjdXJzb3JzIGFsd2F5cyBzdGFydCBhdCBhIG5vZGUuXHJcbiAgICAgICAgdmFyIHRoaXNTdWNjZXNzID0gdHJ1ZSwgb3RoZXJTdWNjZXNzID0gdHJ1ZSwgcHJldkN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzU3VjY2VzcyAmJiBvdGhlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICB2YXIgdGhpc0xlYWYgPSB0aGlzQ3Vyc29yLmxlYWYsIHRoaXNJbnRlcm5hbFNwaW5lID0gdGhpc0N1cnNvci5pbnRlcm5hbFNwaW5lLCB0aGlzTGV2ZWxJbmRpY2VzID0gdGhpc0N1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIHZhciBvdGhlckxlYWYgPSBvdGhlckN1cnNvci5sZWFmLCBvdGhlckludGVybmFsU3BpbmUgPSBvdGhlckN1cnNvci5pbnRlcm5hbFNwaW5lLCBvdGhlckxldmVsSW5kaWNlcyA9IG90aGVyQ3Vyc29yLmxldmVsSW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKHRoaXNMZWFmIHx8IG90aGVyTGVhZikge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnNvcnMgd2VyZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBsYXN0IHN0ZXAsIHRoZW4gdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZDdXJzb3JPcmRlciAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgb3RoZXJMZWFmICYmIGRpZmZlcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXF1YWwga2V5cywgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmlzKHZhbFRoaXMsIHZhbE90aGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBkaWZmZXJlbnQodGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzLCB2YWxPdGhlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyc29yT3JkZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGtub3cgdGhhdCBlaXRoZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIG90aGVyQ3Vyc29yIHN0ZXBwZWQgbGFzdCBmcm9tIGEgc3RhcnRpbmcgcG9zaXRpb24gdGhhdCB0cmFpbGVkIHRoaXNDdXJzb3IsIGFuZCBpcyBzdGlsbCBiZWhpbmQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIHRoaXNDdXJzb3Igc3RlcHBlZCBsYXN0IGFuZCBsZWFwZnJvZ2dlZCBvdGhlckN1cnNvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgb2YgdGhlc2UgY2FzZXMgaXMgYW4gXCJvbmx5IG90aGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTGVhZiAmJiBvbmx5T3RoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclZhbCA9IG90aGVyTGVhZi52YWx1ZXNbb3RoZXJMZXZlbEluZGljZXNbb3RoZXJMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlPdGhlcihvdGhlckN1cnNvci5jdXJyZW50S2V5LCBvdGhlclZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9ubHlUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzTGVhZiAmJiBwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb25seVRoaXModGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXNMZWFmICYmICFvdGhlckxlYWYgJiYgY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0VGhpcyA9IHRoaXNJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE90aGVyID0gb3RoZXJJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZVtsYXN0VGhpc11bdGhpc0xldmVsSW5kaWNlc1tsYXN0VGhpc11dO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZVtsYXN0T3RoZXJdW290aGVyTGV2ZWxJbmRpY2VzW2xhc3RPdGhlcl1dO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPdGhlciA9PT0gbm9kZVRoaXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBvdGhlclN1Y2Nlc3MgPSBCVHJlZS5zdGVwKG90aGVyQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSBjdXJzb3JPcmRlcjtcclxuICAgICAgICAgICAgaWYgKGN1cnNvck9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1N1Y2Nlc3MgPSBCVHJlZS5zdGVwKHRoaXNDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXNTdWNjZXNzICYmIG9ubHlUaGlzKVxyXG4gICAgICAgICAgICByZXR1cm4gQlRyZWUuZmluaXNoQ3Vyc29yV2Fsayh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUsIG9ubHlUaGlzKTtcclxuICAgICAgICBpZiAob3RoZXJTdWNjZXNzICYmIG9ubHlPdGhlcilcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsob3RoZXJDdXJzb3IsIHRoaXNDdXJzb3IsIF9jb21wYXJlLCBvbmx5T3RoZXIpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCVHJlZS5maW5pc2hDdXJzb3JXYWxrID0gZnVuY3Rpb24gKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjb21wYXJlZCA9IEJUcmVlLmNvbXBhcmUoY3Vyc29yLCBjdXJzb3JGaW5pc2hlZCwgY29tcGFyZUtleXMpO1xyXG4gICAgICAgIGlmIChjb21wYXJlZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIUJUcmVlLnN0ZXAoY3Vyc29yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmVkIDwgMCkge1xyXG4gICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJjdXJzb3Igd2FsayB0ZXJtaW5hdGVkIGVhcmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQlRyZWUuc3RlcFRvRW5kKGN1cnNvciwgY2FsbGJhY2spO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnN0ZXBUb0VuZCA9IGZ1bmN0aW9uIChjdXJzb3IsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGNhblN0ZXAgPSB0cnVlO1xyXG4gICAgICAgIHdoaWxlIChjYW5TdGVwKSB7XHJcbiAgICAgICAgICAgIHZhciBsZWFmID0gY3Vyc29yLmxlYWYsIGxldmVsSW5kaWNlcyA9IGN1cnNvci5sZXZlbEluZGljZXMsIGN1cnJlbnRLZXkgPSBjdXJzb3IuY3VycmVudEtleTtcclxuICAgICAgICAgICAgaWYgKGxlYWYpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxlYWYudmFsdWVzW2xldmVsSW5kaWNlc1tsZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKGN1cnJlbnRLZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FuU3RlcCA9IEJUcmVlLnN0ZXAoY3Vyc29yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5tYWtlRGlmZkN1cnNvciA9IGZ1bmN0aW9uICh0cmVlKSB7XHJcbiAgICAgICAgdmFyIF9yb290ID0gdHJlZS5fcm9vdCwgaGVpZ2h0ID0gdHJlZS5oZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBoZWlnaHQsIGludGVybmFsU3BpbmU6IFtbX3Jvb3RdXSwgbGV2ZWxJbmRpY2VzOiBbMF0sIGxlYWY6IHVuZGVmaW5lZCwgY3VycmVudEtleTogX3Jvb3QubWF4S2V5KCkgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc3RlcCBpbiB0aGUgd2FsayBvZiBpdHMgdHJlZS5cclxuICAgICAqIEN1cnNvcnMgYXJlIHdhbGtlZCBiYWNrd2FyZHMgaW4gc29ydCBvcmRlciwgYXMgdGhpcyBhbGxvd3MgdGhlbSB0byBsZXZlcmFnZSBtYXhLZXkoKSBpbiBvcmRlciB0byBiZSBjb21wYXJlZCBpbiBPKDEpLlxyXG4gICAgICogQHBhcmFtIGN1cnNvciBUaGUgY3Vyc29yIHRvIHN0ZXBcclxuICAgICAqIEBwYXJhbSBzdGVwVG9Ob2RlIElmIHRydWUsIHRoZSBjdXJzb3Igd2lsbCBiZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBub2RlIChza2lwcGluZyB2YWx1ZXMpXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIHRoZSBzdGVwIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBjdXJzb3IgdG8gbW92ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdHJlZS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUuc3RlcCA9IGZ1bmN0aW9uIChjdXJzb3IsIHN0ZXBUb05vZGUpIHtcclxuICAgICAgICB2YXIgaW50ZXJuYWxTcGluZSA9IGN1cnNvci5pbnRlcm5hbFNwaW5lLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBsZWFmID0gY3Vyc29yLmxlYWY7XHJcbiAgICAgICAgaWYgKHN0ZXBUb05vZGUgPT09IHRydWUgfHwgbGVhZikge1xyXG4gICAgICAgICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gbGV2ZWxJbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gU3RlcCB0byB0aGUgbmV4dCBub2RlIG9ubHkgaWY6XHJcbiAgICAgICAgICAgIC8vIC0gV2UgYXJlIGV4cGxpY2l0bHkgZGlyZWN0ZWQgdG8gdmlhIHN0ZXBUb05vZGUsIG9yXHJcbiAgICAgICAgICAgIC8vIC0gVGhlcmUgYXJlIG5vIGtleS92YWx1ZSBwYWlycyBsZWZ0IHRvIHN0ZXAgdG8gaW4gdGhpcyBsZWFmXHJcbiAgICAgICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwaW5lTGVuZ3RoID0gaW50ZXJuYWxTcGluZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAvLyBSb290IGlzIGxlYWZcclxuICAgICAgICAgICAgICAgIGlmIChzcGluZUxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBXYWxrIGJhY2sgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIG5ldyBzdWJ0cmVlIHRvIGRlc2NlbmQgaW50b1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVMZXZlbEluZGV4ID0gc3BpbmVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxldmVsSW5kZXhXYWxrQmFjayA9IG5vZGVMZXZlbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxldmVsSW5kZXhXYWxrQmFjayA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbGV2ZWxzTGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWYgc3RhdGUgZnJvbSBjdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbGtlZCB1cHdhcmRzIHBhc3QgYW55IGludGVybmFsIG5vZGUsIHNsaWNlIHRoZW0gb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGV4V2Fsa0JhY2sgPCBub2RlTGV2ZWxJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5pbnRlcm5hbFNwaW5lID0gaW50ZXJuYWxTcGluZS5zbGljZSgwLCBsZXZlbEluZGV4V2Fsa0JhY2sgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgaW50ZXJuYWwgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGludGVybmFsU3BpbmVbbGV2ZWxJbmRleFdhbGtCYWNrXVstLWxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsSW5kZXhXYWxrQmFjay0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGlzIGluIHRoZSBmYXIgbGVmdCBsZWFmIG9mIHRoZSB0cmVlLCBubyBtb3JlIG5vZGVzIHRvIGVudW1lcmF0ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgbGVhZiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSAtLWxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbGVhZi5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIEN1cnNvciBkb2VzIG5vdCBwb2ludCB0byBhIHZhbHVlIGluIGEgbGVhZiwgc28gbW92ZSBkb3dud2FyZHNcclxuICAgICAgICAgICAgdmFyIG5leHRMZXZlbCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gbmV4dExldmVsIC0gMTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpbnRlcm5hbFNwaW5lW2N1cnJlbnRMZXZlbF1bbGV2ZWxJbmRpY2VzW2N1cnJlbnRMZXZlbF1dO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEVudGVyaW5nIGludG8gYSBsZWFmLiBTZXQgdGhlIGN1cnNvciB0byBwb2ludCBhdCB0aGUgbGFzdCBrZXkvdmFsdWUgcGFpci5cclxuICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBub2RlLnZhbHVlcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBub2RlLmtleXNbdmFsdWVJbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTcGluZVtuZXh0TGV2ZWxdID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEluZGljZXNbbmV4dExldmVsXSA9IGNoaWxkSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGNoaWxkcmVuW2NoaWxkSW5kZXhdLm1heEtleSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHRoZSB0d28gY3Vyc29ycy4gUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgd2hpY2ggY3Vyc29yIGlzIGFoZWFkIGluIGEgd2Fsay5cclxuICAgICAqIE5vdGUgdGhhdCBjdXJzb3JzIGFyZSBhZHZhbmNlZCBpbiByZXZlcnNlIHNvcnRpbmcgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3Vyc29yQSwgY3Vyc29yQiwgY29tcGFyZUtleXMpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0QSA9IGN1cnNvckEuaGVpZ2h0LCBjdXJyZW50S2V5QSA9IGN1cnNvckEuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQSA9IGN1cnNvckEubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIHZhciBoZWlnaHRCID0gY3Vyc29yQi5oZWlnaHQsIGN1cnJlbnRLZXlCID0gY3Vyc29yQi5jdXJyZW50S2V5LCBsZXZlbEluZGljZXNCID0gY3Vyc29yQi5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgY29tcGFyaXNvbiBvcmRlciwgYXMgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyXHJcbiAgICAgICAgdmFyIGtleUNvbXBhcmlzb24gPSBjb21wYXJlS2V5cyhjdXJyZW50S2V5QiwgY3VycmVudEtleUEpO1xyXG4gICAgICAgIGlmIChrZXlDb21wYXJpc29uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlDb21wYXJpc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOb3JtYWxpemUgZGVwdGggdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBzaG9ydGVzdCB0cmVlLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNvbmN1cnJlbnQgY3Vyc29yIHdhbGtzIG9mIHRyZWVzIG9mIGRpZmZlcmluZyBoZWlnaHRzIGNhbiByZWxpYWJseSBsYW5kIG9uIHNoYXJlZCBub2RlcyBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gICAgICAgIC8vIFRvIGFjY29tcGxpc2ggdGhpcywgYSBjdXJzb3IgdGhhdCBpcyBvbiBhbiBpbnRlcm5hbCBub2RlIGF0IGRlcHRoIEQxIHdpdGggbWF4S2V5IFggaXMgY29uc2lkZXJlZCBcImJlaGluZFwiIGEgY3Vyc29yIG9uIGFuXHJcbiAgICAgICAgLy8gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMiB3aXRoIG1heEtleSBZLCB3aGVuIEQxIDwgRDIuIFRodXMsIGFsd2F5cyB3YWxraW5nIHRoZSBjdXJzb3IgdGhhdCBpcyBcImJlaGluZFwiIHdpbGwgYWxsb3cgdGhlIGN1cnNvclxyXG4gICAgICAgIC8vIGF0IHNoYWxsb3dlciBkZXB0aCAoYnV0IGVxdWFsIG1heEtleSkgdG8gXCJjYXRjaCB1cFwiIGFuZCBsYW5kIG9uIHNoYXJlZCBub2Rlcy5cclxuICAgICAgICB2YXIgaGVpZ2h0TWluID0gaGVpZ2h0QSA8IGhlaWdodEIgPyBoZWlnaHRBIDogaGVpZ2h0QjtcclxuICAgICAgICB2YXIgZGVwdGhBTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0EubGVuZ3RoIC0gKGhlaWdodEEgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHZhciBkZXB0aEJOb3JtYWxpemVkID0gbGV2ZWxJbmRpY2VzQi5sZW5ndGggLSAoaGVpZ2h0QiAtIGhlaWdodE1pbik7XHJcbiAgICAgICAgcmV0dXJuIGRlcHRoQU5vcm1hbGl6ZWQgLSBkZXB0aEJOb3JtYWxpemVkO1xyXG4gICAgfTtcclxuICAgIC8vIEVuZCBvZiBoZWxwZXIgbWV0aG9kcyBmb3IgZGlmZkFnYWluc3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSBrZXlzIG9mIGVhY2ggcGFpciBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIChmaXJzdEtleSkge1xyXG4gICAgICAgIHZhciBpdCA9IHRoaXMuZW50cmllcyhmaXJzdEtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBuID0gaXQubmV4dCgpO1xyXG4gICAgICAgICAgICBpZiAobi52YWx1ZSlcclxuICAgICAgICAgICAgICAgIG4udmFsdWUgPSBuLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSB2YWx1ZXMgb2YgZWFjaCBwYWlyIGluIG9yZGVyIGJ5IGtleS5cclxuICAgICAqICBAcGFyYW0gZmlyc3RLZXk6IE1pbmltdW0ga2V5IHdob3NlIGFzc29jaWF0ZWQgdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVsxXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJtYXhOb2RlU2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbi92YWx1ZXMgYmVmb3JlIG5vZGVzIHdpbGwgc3BsaXQuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhOb2RlU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogR2V0cyB0aGUgbG93ZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTyhsb2cgc2l6ZSkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9yb290Lm1pbktleSgpOyB9O1xyXG4gICAgLyoqIEdldHMgdGhlIGhpZ2hlc3Qga2V5IGluIHRoZSB0cmVlLiBDb21wbGV4aXR5OiBPKDEpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWF4S2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKTsgfTtcclxuICAgIC8qKiBRdWlja2x5IGNsb25lcyB0aGUgdHJlZSBieSBtYXJraW5nIHRoZSByb290IG5vZGUgYXMgc2hhcmVkLlxyXG4gICAgICogIEJvdGggY29waWVzIHJlbWFpbiBlZGl0YWJsZS4gV2hlbiB5b3UgbW9kaWZ5IGVpdGhlciBjb3B5LCBhbnlcclxuICAgICAqICBub2RlcyB0aGF0IGFyZSBzaGFyZWQgKG9yIHBvdGVudGlhbGx5IHNoYXJlZCkgYmV0d2VlbiB0aGUgdHdvXHJcbiAgICAgKiAgY29waWVzIGFyZSBjbG9uZWQgc28gdGhhdCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IG90aGVyIGNvcGllcy5cclxuICAgICAqICBUaGlzIGlzIGtub3duIGFzIGNvcHktb24td3JpdGUgYmVoYXZpb3IsIG9yIFwibGF6eSBjb3B5aW5nXCIuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogUGVyZm9ybXMgYSBncmVlZHkgY2xvbmUsIGltbWVkaWF0ZWx5IGR1cGxpY2F0aW5nIGFueSBub2RlcyB0aGF0IGFyZVxyXG4gICAgICogIG5vdCBjdXJyZW50bHkgbWFya2VkIGFzIHNoYXJlZCwgaW4gb3JkZXIgdG8gYXZvaWQgbWFya2luZyBhbnlcclxuICAgICAqICBhZGRpdGlvbmFsIG5vZGVzIGFzIHNoYXJlZC5cclxuICAgICAqICBAcGFyYW0gZm9yY2UgQ2xvbmUgYWxsIG5vZGVzLCBldmVuIHNoYXJlZCBvbmVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgdGhpcy5fY29tcGFyZSwgdGhpcy5fbWF4Tm9kZVNpemUpO1xyXG4gICAgICAgIHJlc3VsdC5fcm9vdCA9IHRoaXMuX3Jvb3QuZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhbiBhcnJheSBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDdGRkZGRkZGOyB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluS2V5KCksIG1heCA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZShtaW4sIG1heCwgdHJ1ZSwgbWF4TGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIGtleXMsIHNvcnRlZCAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaChrKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIHZhbHVlcywgc29ydGVkIGJ5IGtleSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnZhbHVlc0FycmF5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHsgcmVzdWx0cy5wdXNoKHYpOyB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRyZWUncyBkYXRhIGJhc2VkIG9uIHRvQXJyYXkoKS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkudG9TdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICAvKiogU3RvcmVzIGEga2V5LXZhbHVlIHBhaXIgb25seSBpZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5IHdhcyBhZGRlZFxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRJZk5vdFByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldChrZXksIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lKS5cclxuICAgICAqIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvd2VzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5taW5QYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0SGlnaGVyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgbG93ZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRIaWdoZXJQYWlyKGtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBwICYmIHBbMF07XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiAgSWYga2V5ID09PSB1bmRlZmluZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaGlnaGVzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgZmFsc2UsIHJldXNlZEFycmF5KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUgbmV4dCBrZXkgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0TG93ZXJLZXkodW5kZWZpbmVkKSByZXR1cm5zIHRoZSBoaWdoZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRMb3dlcktleSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMubmV4dExvd2VyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCB0aGlzLl9jb21wYXJlLCB0cnVlLCByZXVzZWRBcnJheSB8fCBbXSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQga2V5IGlmIGl0IGV4aXN0c1xyXG4gICAgICogIG9yIHRoZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBsb3dlciBwYWlyIG90aGVyd2lzZS4gSWYgdGhlcmUgaXMgbm9cclxuICAgICAqICBuZXh0IGxvd2VyIHBhaXIsIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICogKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBFZGl0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEga2V5IGluIHRoZSB0cmVlLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGtleSBleGlzdGVkLCBmYWxzZSBpZiBub3QuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGtleSwga2V5LCB0cnVlLCBmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlIH0pOyB9KSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2Yga2V5cywgc29ydGVkIGJ5IGtleS5cclxuICAgICAqIEVhY2ggcmV0dXJuZWQgcGFpciBpcyBhbHNvIGFuIGFycmF5OiBwYWlyWzBdIGlzIHRoZSBrZXksIHBhaXJbMV0gaXMgdGhlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IGluIHRoZSBhcnJheSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFRoaXMgbWV0aG9kIHJldHVybnMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgaXRzIHBhaXIgd2lsbCBiZSBpbmNsdWRlZFxyXG4gICAgICogICAgICAgIGluIHRoZSBvdXRwdXQgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS4gTm90ZTogaWYgdGhlXHJcbiAgICAgKiAgICAgICAgYGxvd2Aga2V5IGlzIHByZXNlbnQsIGl0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxyXG4gICAgICogQHBhcmFtIG1heExlbmd0aCBMZW5ndGggbGltaXQuIGdldFJhbmdlIHdpbGwgc3RvcCBzY2FubmluZyB0aGUgdHJlZSB3aGVuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBhcnJheSByZWFjaGVzIHRoaXMgc2l6ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocmVzdWx0Lmxlbmd0aCArIGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gdm9pZCAwKSB7IG1heExlbmd0aCA9IDB4M0ZGRkZGRjsgfVxyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKFtrLCB2XSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmxlbmd0aCA+IG1heExlbmd0aCA/IEJyZWFrIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGFsbCBwYWlycyBmcm9tIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXHJcbiAgICAgKiBAcGFyYW0gcGFpcnMgUGFpcnMgdG8gYWRkIHRvIHRoaXMgdHJlZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzLFxyXG4gICAgICogICAgICAgIGxhdGVyIHBhaXJzIGN1cnJlbnRseSBvdmVyd3JpdGUgZWFybGllciBvbmVzIChlLmcuIFtbMCwxXSxbMCw3XV1cclxuICAgICAqICAgICAgICBhc3NvY2lhdGVzIDAgd2l0aCA3LilcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgcGFpcnMgdGhhdCBhbHJlYWR5IGV4aXN0IChpZiBmYWxzZSxcclxuICAgICAqICAgICAgICBwYWlyc1tpXSBpcyBpZ25vcmVkIHdoZW4gdGhlIGtleSBwYWlyc1tpXVswXSBhbHJlYWR5IGV4aXN0cy4pXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHBhaXJzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhwYWlycy5sZW5ndGggKiBsb2coc2l6ZSArIHBhaXJzLmxlbmd0aCkpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycyA9IGZ1bmN0aW9uIChwYWlycywgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgdmFyIGFkZGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXQocGFpcnNbaV1bMF0sIHBhaXJzW2ldWzFdLCBvdmVyd3JpdGUpKVxyXG4gICAgICAgICAgICAgICAgYWRkZWQrKztcclxuICAgICAgICByZXR1cm4gYWRkZWQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIGluIGFzY2VuZGluZyBvcmRlciBieSBrZXkuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIG11c3Qgbm90IGluc2VydCBvciByZW1vdmUgaXRlbXMgaW4gdGhlXHJcbiAgICAgKiBjb2xsZWN0aW9uLiBEb2luZyBzbyBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0byB0aGVcclxuICAgICAqIGNhbGxiYWNrIGFmdGVyd2FyZC5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBzY2FubmVkIHdpbGwgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsb3dgLlxyXG4gICAgICogQHBhcmFtIGhpZ2ggU2Nhbm5pbmcgc3RvcHMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgYG9uRm91bmRgIGlzIGNhbGxlZCBmb3JcclxuICAgICAqICAgICAgICB0aGF0IGZpbmFsIHBhaXIgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgSW5pdGlhbCB0aGlyZCBhcmd1bWVudCBvZiBvbkZvdW5kLiBUaGlzIHZhbHVlXHJcbiAgICAgKiAgICAgICAgaW5jcmVhc2VzIGJ5IG9uZSBlYWNoIHRpbWUgYG9uRm91bmRgIGlzIGNhbGxlZC4gRGVmYXVsdDogMFxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgZm91bmQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG9uRm91bmQsIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLl9yb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGZhbHNlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB2YWx1ZXMgZm9yIGEgc3Vic2VxdWVuY2Ugb2Yga2V5cy5cclxuICAgICAqIE5vdGU6IHRoZSBjYWxsYmFjayBgb25Gb3VuZGAgc2hvdWxkIGlkZWFsbHkgYmUgYSBwdXJlIGZ1bmN0aW9uLlxyXG4gICAgICogICBTcGVjZmljYWxseSwgaXQgbXVzdCBub3QgaW5zZXJ0IGl0ZW1zLCBjYWxsIGNsb25lKCksIG9yIGNoYW5nZVxyXG4gICAgICogICB0aGUgY29sbGVjdGlvbiBleGNlcHQgdmlhIHJldHVybiB2YWx1ZTsgb3V0LW9mLWJhbmQgZWRpdGluZyBtYXlcclxuICAgICAqICAgY2F1c2UgYW4gZXhjZXB0aW9uIG9yIG1heSBjYXVzZSBpbmNvcnJlY3QgZGF0YSB0byBiZSBzZW50IHRvXHJcbiAgICAgKiAgIHRoZSBjYWxsYmFjayAoZHVwbGljYXRlIG9yIG1pc3NlZCBpdGVtcykuIEl0IG11c3Qgbm90IGNhdXNlIGFcclxuICAgICAqICAgY2xvbmUoKSBvZiB0aGUgY29sbGVjdGlvbiwgb3RoZXJ3aXNlIHRoZSBjbG9uZSBjb3VsZCBiZSBtb2RpZmllZFxyXG4gICAgICogICBieSBjaGFuZ2VzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiBge3ZhbHVlOnZ9YCB0byBjaGFuZ2UgdGhlIHZhbHVlIGFzc29jaWF0ZWRcclxuICAgICAqICAgICAgICB3aXRoIHRoZSBjdXJyZW50IGtleSwgYHtkZWxldGU6dHJ1ZX1gIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBwYWlyLFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUiwgb3IgaXQgY2FuIHJldHVybiBub3RoaW5nXHJcbiAgICAgKiAgICAgICAgKHVuZGVmaW5lZCBvciB7fSkgdG8gY2F1c2Ugbm8gZWZmZWN0IGFuZCBjb250aW51ZSBpdGVyYXRpbmcuXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgY2FuIGJlIGNvbWJpbmVkIHdpdGggb25lIG9mIHRoZSBvdGhlciB0d28gY29tbWFuZHMuXHJcbiAgICAgKiAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGBjb3VudGVyYCBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGl0ZXJhdGVkXHJcbiAgICAgKiAgICAgICAgcHJldmlvdXNseTsgaXQgZXF1YWxzIDAgd2hlbiBgb25Gb3VuZGAgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgc2Nhbm5lZCwgb3IgUiBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWRcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5LlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiAgIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2YgaXRlbXMgc2Nhbm5lZCArIGxvZyBzaXplKVxyXG4gICAgICogICBOb3RlOiBpZiB0aGUgdHJlZSBoYXMgYmVlbiBjbG9uZWQgd2l0aCBjbG9uZSgpLCBhbnkgc2hhcmVkXHJcbiAgICAgKiAgIG5vZGVzIGFyZSBjb3BpZWQgYmVmb3JlIGBvbkZvdW5kYCBpcyBjYWxsZWQuIFRoaXMgdGFrZXMgTyhuKSB0aW1lXHJcbiAgICAgKiAgIHdoZXJlIG4gaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBhbW91bnQgb2Ygc2hhcmVkIGRhdGEgc2Nhbm5lZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICBpZiAocm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmNsb25lKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHIgPSByb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHRydWUsIHRoaXMsIGluaXRpYWxDb3VudGVyIHx8IDAsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHZhciBpc1NoYXJlZCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgd2hpbGUgKHJvb3Qua2V5cy5sZW5ndGggPD0gMSAmJiAhcm9vdC5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIGlzU2hhcmVkIHx8IChpc1NoYXJlZCA9IHJvb3QuaXNTaGFyZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmtleXMubGVuZ3RoID09PSAwID8gRW1wdHlMZWFmIDpcclxuICAgICAgICAgICAgICAgICAgICByb290LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIGFueSBhbmNlc3RvciBvZiB0aGUgbmV3IHJvb3Qgd2FzIHNoYXJlZCwgdGhlIG5ldyByb290IG11c3QgYWxzbyBiZSBzaGFyZWRcclxuICAgICAgICAgICAgaWYgKGlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICByb290LmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKiogU2FtZSBhcyBgZWRpdFJhbmdlYCBleGNlcHQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBhbGwgcGFpcnMuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZWRpdEFsbCA9IGZ1bmN0aW9uIChvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcmFuZ2Ugb2Yga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBgaGlnaGAga2V5LCBpZiBwcmVzZW50LCBpcyBkZWxldGVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCB3ZXJlIGRlbGV0ZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplICsgbnVtYmVyIG9mIGl0ZW1zIGRlbGV0ZWQpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kZWxldGVSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIERlbGV0ZVJhbmdlKTtcclxuICAgIH07XHJcbiAgICAvKiogRGVsZXRlcyBhIHNlcmllcyBvZiBrZXlzIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlS2V5cyA9IGZ1bmN0aW9uIChrZXlzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlKGtleXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgcisrO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcclxuICAgICAgICAvKiogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlOiB0aGUgbnVtYmVyIG9mIGludGVybmFsIG5vZGVzIGJldHdlZW4gdGhlXHJcbiAgICAgICAgICogIEJUcmVlIG9iamVjdCBhbmQgaXRzIGxlYWYgbm9kZXMgKHplcm8gaWYgdGhlcmUgYXJlIG5vIGludGVybmFsIG5vZGVzKS4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gLTE7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQrKztcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmlzTGVhZiA/IHVuZGVmaW5lZCA6IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogTWFrZXMgdGhlIG9iamVjdCByZWFkLW9ubHkgdG8gZW5zdXJlIGl0IGlzIG5vdCBhY2NpZGVudGFsbHkgbW9kaWZpZWQuXHJcbiAgICAgKiAgRnJlZXppbmcgZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJtYW5lbnQ7IHVuZnJlZXplKCkgcmV2ZXJzZXMgdGhlIGVmZmVjdC5cclxuICAgICAqICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSByZXBsYWNpbmcgbXV0YXRvciBmdW5jdGlvbnMgd2l0aCBhIGZ1bmN0aW9uXHJcbiAgICAgKiAgdGhhdCB0aHJvd3MgYW4gRXJyb3IuIENvbXBhcmVkIHRvIHVzaW5nIGEgcHJvcGVydHkgKGUuZy4gdGhpcy5pc0Zyb3plbilcclxuICAgICAqICB0aGlzIGltcGxlbWVudGF0aW9uIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBpbiBub24tZnJvemVuIEJUcmVlcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdCA9IHRoaXM7XHJcbiAgICAgICAgLy8gTm90ZTogYWxsIG90aGVyIG11dGF0b3JzIHVsdGltYXRlbHkgY2FsbCBzZXQoKSBvciBlZGl0UmFuZ2UoKSBcclxuICAgICAgICAvLyAgICAgICBzbyB3ZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRob3NlIG90aGVycy5cclxuICAgICAgICB0LmNsZWFyID0gdC5zZXQgPSB0LmVkaXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGVkIHRvIG1vZGlmeSBhIGZyb3plbiBCVHJlZVwiKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8qKiBFbnN1cmVzIG11dGF0aW9ucyBhcmUgYWxsb3dlZCwgcmV2ZXJzaW5nIHRoZSBlZmZlY3Qgb2YgZnJlZXplKCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcIlRoZSBvcGVyYW5kIG9mIGEgJ2RlbGV0ZScgb3BlcmF0b3IgbXVzdCBiZSBvcHRpb25hbC5cIlxyXG4gICAgICAgIC8vICAgICAgICAgICAgKHdyb25nOiBkZWxldGUgZG9lcyBub3QgYWZmZWN0IHRoZSBwcm90b3R5cGUuKVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNsZWFyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5zZXQ7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSYW5nZTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRnJvemVuXCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0cmVlIGFwcGVhcnMgdG8gYmUgZnJvemVuLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgnZWRpdFJhbmdlJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIFNjYW5zIHRoZSB0cmVlIGZvciBzaWducyBvZiBzZXJpb3VzIGJ1Z3MgKGUuZy4gdGhpcy5zaXplIGRvZXNuJ3QgbWF0Y2hcclxuICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMsIGludGVybmFsIG5vZGVzIG5vdCBjYWNoaW5nIG1heCBlbGVtZW50IHByb3Blcmx5Li4uKVxyXG4gICAgICogIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2Ygbm9kZXMpLCBpLmUuIE8oc2l6ZSkuIFRoaXMgbWV0aG9kXHJcbiAgICAgKiAgc2tpcHMgdGhlIG1vc3QgZXhwZW5zaXZlIHRlc3QgLSB3aGV0aGVyIGFsbCBrZXlzIGFyZSBzb3J0ZWQgLSBidXQgaXRcclxuICAgICAqICBkb2VzIGNoZWNrIHRoYXQgbWF4S2V5KCkgb2YgdGhlIGNoaWxkcmVuIG9mIGludGVybmFsIG5vZGVzIGFyZSBzb3J0ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3Jvb3QuY2hlY2tWYWxpZCgwLCB0aGlzLCAwKTtcclxuICAgICAgICBjaGVjayhzaXplID09PSB0aGlzLnNpemUsIFwic2l6ZSBtaXNtYXRjaDogY291bnRlZCBcIiwgc2l6ZSwgXCJidXQgc3RvcmVkXCIsIHRoaXMuc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJUcmVlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCVHJlZTtcclxuLyoqIEEgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBpdHMgYXJndW1lbnQsIHR5cGVkIGFzXHJcbiAqICBgSVNvcnRlZFNldDxLPmAgaWYgdGhlIEJUcmVlIGltcGxlbWVudHMgaXQsIGFzIGl0IGRvZXMgaWYgYFYgZXh0ZW5kcyB1bmRlZmluZWRgLlxyXG4gKiAgSWYgYFZgIGNhbm5vdCBiZSBgdW5kZWZpbmVkYCwgaXQgcmV0dXJucyBgdW5rbm93bmAgaW5zdGVhZC4gT3IgYXQgbGVhc3QsIHRoYXRcclxuICogIHdhcyB0aGUgaW50ZW50aW9uLCBidXQgVHlwZVNjcmlwdCBpcyBhY3Rpbmcgd2VpcmQgYW5kIG1heSByZXR1cm4gYElTb3J0ZWRTZXQ8Sz5gXHJcbiAqICBldmVuIGlmIGBWYCBjYW4ndCBiZSBgdW5kZWZpbmVkYCAoZGlzY3Vzc2lvbjogYnRyZWUtdHlwZXNjcmlwdCBpc3N1ZSAjMTQpICovXHJcbmZ1bmN0aW9uIGFzU2V0KGJ0cmVlKSB7XHJcbiAgICByZXR1cm4gYnRyZWU7XHJcbn1cclxuZXhwb3J0cy5hc1NldCA9IGFzU2V0O1xyXG5pZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcikgLy8gaXRlcmF0b3IgaXMgZXF1aXZhbGVudCB0byBlbnRyaWVzKClcclxuICAgIEJUcmVlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gQlRyZWUucHJvdG90eXBlLmVudHJpZXM7XHJcbkJUcmVlLnByb3RvdHlwZS53aGVyZSA9IEJUcmVlLnByb3RvdHlwZS5maWx0ZXI7XHJcbkJUcmVlLnByb3RvdHlwZS5zZXRSYW5nZSA9IEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycztcclxuQlRyZWUucHJvdG90eXBlLmFkZCA9IEJUcmVlLnByb3RvdHlwZS5zZXQ7IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSVNldFNpbms8Sz5cclxuZnVuY3Rpb24gaXRlcmF0b3IobmV4dCkge1xyXG4gICAgaWYgKG5leHQgPT09IHZvaWQgMCkgeyBuZXh0ID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7IH0pOyB9XHJcbiAgICB2YXIgcmVzdWx0ID0geyBuZXh0OiBuZXh0IH07XHJcbiAgICBpZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcilcclxuICAgICAgICByZXN1bHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qKiBMZWFmIG5vZGUgLyBiYXNlIGNsYXNzLiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQk5vZGUoa2V5cywgdmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGtleXMgPT09IHZvaWQgMCkgeyBrZXlzID0gW107IH1cclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzIHx8IHVuZGVmVmFscztcclxuICAgICAgICB0aGlzLmlzU2hhcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJOb2RlLnByb3RvdHlwZSwgXCJpc0xlYWZcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIFNoYXJlZCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXlzW3RoaXMua2V5cy5sZW5ndGggLSAxXTtcclxuICAgIH07XHJcbiAgICAvLyBJZiBrZXkgbm90IGZvdW5kLCByZXR1cm5zIGleZmFpbFhvciB3aGVyZSBpIGlzIHRoZSBpbnNlcnRpb24gaW5kZXguXHJcbiAgICAvLyBDYWxsZXJzIHRoYXQgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlIHdhcyBhIG1hdGNoIHdpbGwgc2V0IGZhaWxYb3I9MC5cclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKGtleSwgZmFpbFhvciwgY21wKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSBrZXlzLmxlbmd0aCwgbWlkID0gaGkgPj4gMTtcclxuICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xyXG4gICAgICAgICAgICB2YXIgYyA9IGNtcChrZXlzW21pZF0sIGtleSk7XHJcbiAgICAgICAgICAgIGlmIChjIDwgMClcclxuICAgICAgICAgICAgICAgIGxvID0gbWlkICsgMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+IDApIC8vIGtleSA8IGtleXNbbWlkXVxyXG4gICAgICAgICAgICAgICAgaGkgPSBtaWQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGMgaXMgTmFOIG9yIG90aGVyd2lzZSBpbnZhbGlkXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgPj4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1pZCBeIGZhaWxYb3I7XHJcbiAgICAgICAgLy8gVW5yb2xsZWQgdmVyc2lvbjogYmVuY2htYXJrcyBzaG93IHNhbWUgc3BlZWQsIG5vdCB3b3J0aCB1c2luZ1xyXG4gICAgICAgIC8qdmFyIGkgPSAxLCBjOiBudW1iZXIgPSAwLCBzdW0gPSAwO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICBpID0gMztcclxuICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgICAgIGkgPSA3O1xyXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gMTYpIHtcclxuICAgICAgICAgICAgICBpID0gMTU7XHJcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBpID0gMzE7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgaSA9IDEyNztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNjQgOiAtNjQ7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAzMiA6IC0zMjtcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxNiA6IC0xNjtcclxuICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyA4IDogLTg7XHJcbiAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNCA6IC00O1xyXG4gICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDIgOiAtMjtcclxuICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxIDogLTE7XHJcbiAgICAgICAgYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMTtcclxuICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICBpZiAoYyA8IDApIHtcclxuICAgICAgICAgICsraTtcclxuICAgICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN1bSAhPT0gc3VtKSB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoIF4gZmFpbFhvcjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGMgPT09IDAgPyBpIDogaSBeIGZhaWxYb3I7Ki9cclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBtaXNjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1swXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzWzBdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhQYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMua2V5cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2xhc3RJbmRleF07XHJcbiAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlKHRoaXMua2V5cy5zbGljZSgwKSwgdiA9PT0gdW5kZWZWYWxzID8gdiA6IHYuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5ncmVlZHlDbG9uZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2hhcmVkICYmICFmb3JjZSA/IHRoaXMgOiB0aGlzLmNsb25lKCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIHRyZWUuX2NvbXBhcmUpO1xyXG4gICAgICAgIHJldHVybiBpIDwgMCA/IGRlZmF1bHRWYWx1ZSA6IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgY29tcGFyZSk7XHJcbiAgICAgICAgdmFyIGluZGV4T3JMb3dlciA9IGkgPCAwID8gfmkgLSAxIDogKGluY2x1c2l2ZSA/IGkgOiBpIC0gMSk7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIDogKGluY2x1c2l2ZSA/IGkgOiBpICsgMSk7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA8IGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0ga2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgdkwgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2sodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscyA/IGtMIDw9IHZMIDoga0wgPT09IHZMLCBcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcIiwgZGVwdGgsIFwid2l0aCBsZW5ndGhzXCIsIGtMLCB2TCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgY2hlY2sgZm9yIFwibm9kZSB0b28gc21hbGxcIiBiZWNhdXNlIHNvbWV0aW1lcyBhIG5vZGVcclxuICAgICAgICAvLyBjYW4gbGVnaXRpbWF0ZWx5IGhhdmUgc2l6ZSAxLiBUaGlzIG9jY3VycyBpZiB0aGVyZSBpcyBhIGJhdGNoIFxyXG4gICAgICAgIC8vIGRlbGV0aW9uLCBsZWF2aW5nIGEgbm9kZSBvZiBzaXplIDEsIGFuZCB0aGUgc2libGluZ3MgYXJlIGZ1bGwgc29cclxuICAgICAgICAvLyBpdCBjYW4ndCBiZSBtZXJnZWQgd2l0aCBhZGphY2VudCBub2Rlcy4gSG93ZXZlciwgdGhlIHBhcmVudCB3aWxsXHJcbiAgICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIGF2ZXJhZ2Ugbm9kZSBzaXplIGlzIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG1heGltdW0uXHJcbiAgICAgICAgY2hlY2soZGVwdGggPT0gMCB8fCBrTCA+IDAsIFwiZW1wdHkgbGVhZiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGtMO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgLy8ga2V5IGRvZXMgbm90IGV4aXN0IHlldFxyXG4gICAgICAgICAgICBpID0gfmk7XHJcbiAgICAgICAgICAgIHRyZWUuX3NpemUrKztcclxuICAgICAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCB0cmVlLl9tYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBsZWFmIG5vZGUgaXMgZnVsbCBhbmQgbXVzdCBzcGxpdFxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChpID4gdGhpcy5rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGkgLT0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gS2V5IGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB1c3VhbGx5IHRoaXMgaXMgYSBuby1vcCwgYnV0IHNvbWUgdXNlcnMgbWF5IHdpc2ggdG8gZWRpdCB0aGUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnJlaWZ5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmluc2VydEluTGVhZiA9IGZ1bmN0aW9uIChpLCBrZXksIHZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBrZXkpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRlZlZhbHMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpXHJcbiAgICAgICAgICAgICAgICB1bmRlZlZhbHMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHVuZGVmVmFscy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDAsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB2YXIgdiA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHYucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdiA9IHRoaXMucmVpZnlWYWx1ZXMoKTtcclxuICAgICAgICAgICAgdi5wdXNoKHJocy52YWx1ZXMuc2hpZnQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoKHJocy5rZXlzLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAobGhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnVuc2hpZnQodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYudW5zaGlmdChsaHMudmFsdWVzLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICB2YXIgaGFsZiA9IHRoaXMua2V5cy5sZW5ndGggPj4gMSwga2V5cyA9IHRoaXMua2V5cy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyB1bmRlZlZhbHMgOiB0aGlzLnZhbHVlcy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZShrZXlzLCB2YWx1ZXMpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCkge1xyXG4gICAgICAgIHZhciBjbXAgPSB0cmVlLl9jb21wYXJlO1xyXG4gICAgICAgIHZhciBpTG93LCBpSGlnaDtcclxuICAgICAgICBpZiAoaGlnaCA9PT0gbG93KSB7XHJcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhpZ2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgICAgIGlIaWdoID0gKGlMb3cgPSB0aGlzLmluZGV4T2YobG93LCAtMSwgY21wKSkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoaUxvdyA8IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKTtcclxuICAgICAgICAgICAgaUhpZ2ggPSB0aGlzLmluZGV4T2YoaGlnaCwgLTEsIGNtcCk7XHJcbiAgICAgICAgICAgIGlmIChpSGlnaCA8IDApXHJcbiAgICAgICAgICAgICAgICBpSGlnaCA9IH5pSGlnaDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5jbHVkZUhpZ2ggPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICBpSGlnaCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgdmFsdWVzID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKG9uRm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gaUxvdzsgaSA8IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9uRm91bmQoa2V5LCB2YWx1ZXNbaV0sIGNvdW50KyspO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGtleXNbaV0gfHwgdGhpcy5pc1NoYXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlIGlsbGVnYWxseSBjaGFuZ2VkIG9yIGNsb25lZCBpbiBlZGl0UmFuZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZS5fc2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUhpZ2gtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb3VudCArPSBpSGlnaCAtIGlMb3c7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGVudGlyZSBjb250ZW50cyBvZiByaWdodC1oYW5kIHNpYmxpbmcgKHJocyBpcyBsZWZ0IHVuY2hhbmdlZCkgKi9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBfKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHJocy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaC5hcHBseSh0aGlzLnZhbHVlcywgcmhzLnJlaWZ5VmFsdWVzKCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZTtcclxufSgpKTtcclxuLyoqIEludGVybmFsIG5vZGUgKG5vbi1sZWFmIG5vZGUpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG52YXIgQk5vZGVJbnRlcm5hbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhCTm9kZUludGVybmFsLCBfc3VwZXIpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IG1hcmsgYGNoaWxkcmVuYCBhcyBzaGFyZWQsIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyXHJcbiAgICAgKiB0byBlbnN1cmUgY2hpbGRyZW4gYXJlIGVpdGhlciBtYXJrZWQgc2hhcmVkLCBvciBhcmVuJ3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCTm9kZUludGVybmFsKGNoaWxkcmVuLCBrZXlzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAga2V5cyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAga2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGtleXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwoY2hpbGRyZW4sIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHZhciBudSA9IG5ldyBCTm9kZUludGVybmFsKHRoaXMuY2hpbGRyZW4uc2xpY2UoMCksIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgbnUuY2hpbGRyZW5baV0gPSBudS5jaGlsZHJlbltpXS5ncmVlZHlDbG9uZShmb3JjZSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1pbktleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5taW5LZXkoKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5QYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0ubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCB0cmVlLl9jb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBpIDwgY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW5baV0uZ2V0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmIChpID49IGNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmdldFBhaXJPck5leHRMb3dlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLCBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGkgPCBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpICsgMV0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgY0wgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBjaGVjayhrTCA9PT0gY0wsIFwia2V5cy9jaGlsZHJlbiBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcImxlbmd0aHNcIiwga0wsIGNMLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIGNoZWNrKGtMID4gMSB8fCBkZXB0aCA+IDAsIFwiaW50ZXJuYWwgbm9kZSBoYXMgbGVuZ3RoXCIsIGtMLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHZhciBzaXplID0gMCwgYyA9IHRoaXMuY2hpbGRyZW4sIGsgPSB0aGlzLmtleXMsIGNoaWxkU2l6ZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjTDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNpemUgKz0gY1tpXS5jaGVja1ZhbGlkKGRlcHRoICsgMSwgdHJlZSwgYmFzZUluZGV4ICsgc2l6ZSk7XHJcbiAgICAgICAgICAgIGNoaWxkU2l6ZSArPSBjW2ldLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjaGVjayhzaXplID49IGNoaWxkU2l6ZSwgXCJ3dGZcIiwgYmFzZUluZGV4KTsgLy8gbm8gd2F5IHRoaXMgd2lsbCBldmVyIGZhaWxcclxuICAgICAgICAgICAgY2hlY2soaSA9PT0gMCB8fCBjW2kgLSAxXS5jb25zdHJ1Y3RvciA9PT0gY1tpXS5jb25zdHJ1Y3RvciwgXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChjW2ldLm1heEtleSgpICE9IGtbaV0pXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJrZXlzW1wiLCBpLCBcIl0gPVwiLCBrW2ldLCBcImlzIHdyb25nLCBzaG91bGQgYmUgXCIsIGNbaV0ubWF4S2V5KCksIFwiYXQgZGVwdGhcIiwgZGVwdGgsIFwiYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmICghKGkgPT09IDAgfHwgdHJlZS5fY29tcGFyZShrW2kgLSAxXSwga1tpXSkgPCAwKSlcclxuICAgICAgICAgICAgICAgIGNoZWNrKGZhbHNlLCBcInNvcnQgdmlvbGF0aW9uIGF0IGRlcHRoXCIsIGRlcHRoLCBcImluZGV4XCIsIGksIFwia2V5c1wiLCBrW2kgLSAxXSwga1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDIwMjAvMDg6IEJUcmVlIGRvZXNuJ3QgYWx3YXlzIGF2b2lkIGdyb3NzbHkgdW5kZXJzaXplZCBub2RlcyxcclxuICAgICAgICAvLyBidXQgQUZBSUsgc3VjaCBub2RlcyBhcmUgcHJldHR5IGhhcm1sZXNzLCBzbyBhY2NlcHQgdGhlbS5cclxuICAgICAgICB2YXIgdG9vZmV3ID0gY2hpbGRTaXplID09PSAwOyAvLyBjaGlsZFNpemUgPCAodHJlZS5tYXhOb2RlU2l6ZSA+PiAxKSpjTDtcclxuICAgICAgICBpZiAodG9vZmV3IHx8IGNoaWxkU2l6ZSA+IHRyZWUubWF4Tm9kZVNpemUgKiBjTClcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIHRvb2ZldyA/IFwidG9vIGZld1wiIDogXCJ0b28gbWFueVwiLCBcImNoaWxkcmVuIChcIiwgY2hpbGRTaXplLCBzaXplLCBcIikgYXQgZGVwdGhcIiwgZGVwdGgsIFwibWF4Tm9kZVNpemU6XCIsIHRyZWUubWF4Tm9kZVNpemUsIFwiY2hpbGRyZW4ubGVuZ3RoOlwiLCBjTCwgXCJiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHNpemU7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGMgPSB0aGlzLmNoaWxkcmVuLCBtYXggPSB0cmVlLl9tYXhOb2RlU2l6ZSwgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMuaW5kZXhPZihrZXksIDAsIGNtcCksIGMubGVuZ3RoIC0gMSksIGNoaWxkID0gY1tpXTtcclxuICAgICAgICBpZiAoY2hpbGQuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIGNbaV0gPSBjaGlsZCA9IGNoaWxkLmNsb25lKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkLmtleXMubGVuZ3RoID49IG1heCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBpcyBmdWxsOyBpbnNlcnRpbmcgYW55dGhpbmcgZWxzZSB3aWxsIGNhdXNlIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFNoaWZ0aW5nIGFuIGl0ZW0gdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2libGluZyBtYXkgYXZvaWQgYSBzcGxpdC5cclxuICAgICAgICAgICAgLy8gV2UgY2FuIGRvIGEgc2hpZnQgaWYgdGhlIGFkamFjZW50IG5vZGUgaXMgbm90IGZ1bGwgYW5kIGlmIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBjYW4gc3RpbGwgYmUgcGxhY2VkIGluIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgdGhlIHNoaWZ0LlxyXG4gICAgICAgICAgICB2YXIgb3RoZXI7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiAob3RoZXIgPSBjW2kgLSAxXSkua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLmtleXNbMF0sIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpIC0gMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbVJpZ2h0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpIC0gMV0gPSBvdGhlci5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgob3RoZXIgPSBjW2kgKyAxXSkgIT09IHVuZGVmaW5lZCAmJiBvdGhlci5rZXlzLmxlbmd0aCA8IG1heCAmJiBjbXAoY2hpbGQubWF4S2V5KCksIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpICsgMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbUxlZnQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY1tpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGQuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleXNbaV0gPSBjaGlsZC5tYXhLZXkoKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAvLyBUaGUgY2hpbGQgaGFzIHNwbGl0IGFuZCBgcmVzdWx0YCBpcyBhIG5ldyByaWdodCBjaGlsZC4uLiBkb2VzIGl0IGZpdD9cclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA8IG1heCkgeyAvLyB5ZXNcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gbm8sIHdlIG11c3Qgc3BsaXQgYWxzb1xyXG4gICAgICAgICAgICB2YXIgbmV3UmlnaHRTaWJsaW5nID0gdGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLCB0YXJnZXQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoY21wKHJlc3VsdC5tYXhLZXkoKSwgdGhpcy5tYXhLZXkoKSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0Lmluc2VydChpICsgMSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGBjaGlsZGAgYXQgaW5kZXggYGlgLlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZGAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIHRoYXQgZWl0aGVyIGNoaWxkIGlzIG1hcmtlZCBzaGFyZWQsIG9yIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBhbm90aGVyIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChpLCBjaGlsZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGNoaWxkKTtcclxuICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDAsIGNoaWxkLm1heEtleSgpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IHRoaXMgbm9kZS5cclxuICAgICAqIE1vZGlmaWVzIHRoaXMgdG8gcmVtb3ZlIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgaXRlbXMsIHJldHVybmluZyBhIHNlcGFyYXRlIG5vZGUgY29udGFpbmluZyB0aGVtLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+PiAxO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNwbGljZShoYWxmKSwgdGhpcy5rZXlzLnNwbGljZShoYWxmKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2gocmhzLmNoaWxkcmVuLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tTGVmdCA9IGZ1bmN0aW9uIChsaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMudW5zaGlmdChsaHMua2V5cy5wb3AoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGxocy5jaGlsZHJlbi5wb3AoKSk7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBOb3RlOiBgY291bnRgIGlzIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgb25Gb3VuZGAuIFxyXG4gICAgLy8gICAgICAgQSBsZWFmIG5vZGUncyBgZm9yUmFuZ2VgIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgdmFsdWUgZm9yIHRoaXMgY291bnRlcixcclxuICAgIC8vICAgICAgIHVubGVzcyB0aGUgb3BlcmF0aW9uIGlzIHRvIHN0b3AgZWFybHkuXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKSwgaSA9IGlMb3c7XHJcbiAgICAgICAgdmFyIGlIaWdoID0gTWF0aC5taW4oaGlnaCA9PT0gbG93ID8gaUxvdyA6IHRoaXMuaW5kZXhPZihoaWdoLCAwLCBjbXApLCBrZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgIGlmICghZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2VcclxuICAgICAgICAgICAgZm9yICg7IGkgPD0gaUhpZ2g7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGkgPD0gaUhpZ2gpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBpZiBjaGlsZHJlbltpXSBpcyBlbXB0eSB0aGVuIGtleXNbaV09dW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgIFRoaXMgaXMgYW4gaW52YWxpZCBzdGF0ZSwgYnV0IGl0IGlzIGZpeGVkIGJlbG93LlxyXG4gICAgICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZWxldGlvbnMgbWF5IGhhdmUgb2NjdXJyZWQsIHNvIGxvb2sgZm9yIG9wcG9ydHVuaXRpZXMgdG8gbWVyZ2Ugbm9kZXMuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFsZiA9IHRyZWUuX21heE5vZGVTaXplID4+IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaUxvdyA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaUxvdy0tO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gaUhpZ2g7IGkgPj0gaUxvdzsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoIDw9IGhhbGYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeU1lcmdlKGksIHRyZWUuX21heE5vZGVTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gY2hpbGQgaXMgZW1wdHkhIGRlbGV0ZSBpdCFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiBjaGlsZHJlblswXS5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJlbXB0aW5lc3MgYnVnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogTWVyZ2VzIGNoaWxkIGkgd2l0aCBjaGlsZCBpKzEgaWYgdGhlaXIgY29tYmluZWQgc2l6ZSBpcyBub3QgdG9vIGxhcmdlICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50cnlNZXJnZSA9IGZ1bmN0aW9uIChpLCBtYXhTaXplKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSAwICYmIGkgKyAxIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCArIGNoaWxkcmVuW2kgKyAxXS5rZXlzLmxlbmd0aCA8PSBtYXhTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpIC8vIGNsb25lZCBhbHJlYWR5IFVOTEVTUyBpIGlzIG91dHNpZGUgc2NhbiByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLm1lcmdlU2libGluZyhjaGlsZHJlbltpICsgMV0sIG1heFNpemUpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSArIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIGNoaWxkcmVuIGZyb20gYHJoc2AgaW50byB0aGlzLlxyXG4gICAgICogYHJoc2AgbXVzdCBiZSBwYXJ0IG9mIHRoaXMgdHJlZSwgYW5kIGJlIHJlbW92ZWQgZnJvbSBpdCBhZnRlciB0aGlzIGNhbGxcclxuICAgICAqIChvdGhlcndpc2UgaXNTaGFyZWQgZm9yIGl0cyBjaGlsZHJlbiBjb3VsZCBiZSBpbmNvcnJlY3QpLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIC8vIGFzc2VydCAhdGhpcy5pc1NoYXJlZDtcclxuICAgICAgICB2YXIgb2xkTGVuZ3RoID0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsIHJocy5rZXlzKTtcclxuICAgICAgICB2YXIgcmhzQ2hpbGRyZW4gPSByaHMuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4sIHJoc0NoaWxkcmVuKTtcclxuICAgICAgICBpZiAocmhzLmlzU2hhcmVkICYmICF0aGlzLmlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEFsbCBjaGlsZHJlbiBvZiBhIHNoYXJlZCBub2RlIGFyZSBpbXBsaWNpdGx5IHNoYXJlZCwgYW5kIHNpbmNlIHRoZWlyIG5ld1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgaXMgbm90IHNoYXJlZCwgdGhleSBtdXN0IG5vdyBiZSBleHBsaWNpdGx5IG1hcmtlZCBhcyBzaGFyZWQuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmhzQ2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByaHNDaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG91ciBjaGlsZHJlbiBhcmUgdGhlbXNlbHZlcyBhbG1vc3QgZW1wdHkgZHVlIHRvIGEgbWFzcy1kZWxldGUsXHJcbiAgICAgICAgLy8gdGhleSBtYXkgbmVlZCB0byBiZSBtZXJnZWQgdG9vIChidXQgb25seSB0aGUgb2xkTGVuZ3RoLTEgYW5kIGl0c1xyXG4gICAgICAgIC8vIHJpZ2h0IHNpYmxpbmcgc2hvdWxkIG5lZWQgdGhpcykuXHJcbiAgICAgICAgdGhpcy50cnlNZXJnZShvbGRMZW5ndGggLSAxLCBtYXhOb2RlU2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJOb2RlSW50ZXJuYWw7XHJcbn0oQk5vZGUpKTtcclxuLy8gT3B0aW1pemF0aW9uOiB0aGlzIGFycmF5IG9mIGB1bmRlZmluZWRgcyBpcyB1c2VkIGluc3RlYWQgb2YgYSBub3JtYWxcclxuLy8gYXJyYXkgb2YgdmFsdWVzIGluIG5vZGVzIHdoZXJlIGB1bmRlZmluZWRgIGlzIHRoZSBvbmx5IHZhbHVlLlxyXG4vLyBJdHMgbGVuZ3RoIGlzIGV4dGVuZGVkIHRvIG1heCBub2RlIHNpemUgb24gZmlyc3QgdXNlOyBzaW5jZSBpdCBjYW5cclxuLy8gYmUgc2hhcmVkIGJldHdlZW4gdHJlZXMgd2l0aCBkaWZmZXJlbnQgbWF4aW11bXMsIGl0cyBsZW5ndGggY2FuIG9ubHlcclxuLy8gaW5jcmVhc2UsIG5ldmVyIGRlY3JlYXNlLiBJdHMgdHlwZSBzaG91bGQgYmUgdW5kZWZpbmVkW10gYnV0IHN0cmFuZ2VseVxyXG4vLyBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHRoZSBjb21wYXJpc29uIFZbXSA9PT0gdW5kZWZpbmVkW10uIFRvIHByZXZlbnRcclxuLy8gdXNlcnMgZnJvbSBtYWtpbmcgdGhpcyBhcnJheSB0b28gbGFyZ2UsIEJUcmVlIGhhcyBhIG1heGltdW0gbm9kZSBzaXplLlxyXG4vL1xyXG4vLyBGQVE6IHVuZGVmVmFsc1tpXSBpcyBhbHJlYWR5IHVuZGVmaW5lZCwgc28gd2h5IGluY3JlYXNlIHRoZSBhcnJheSBzaXplP1xyXG4vLyBSZWFkaW5nIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhbiBhcnJheSBpcyByZWxhdGl2ZWx5IHNsb3cgYmVjYXVzZSBpdFxyXG4vLyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNjYW5uaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uXHJcbnZhciB1bmRlZlZhbHMgPSBbXTtcclxudmFyIERlbGV0ZSA9IHsgZGVsZXRlOiB0cnVlIH0sIERlbGV0ZVJhbmdlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gRGVsZXRlOyB9O1xyXG52YXIgQnJlYWsgPSB7IGJyZWFrOiB0cnVlIH07XHJcbnZhciBFbXB0eUxlYWYgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG4gPSBuZXcgQk5vZGUoKTtcclxuICAgIG4uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG47XHJcbn0pKCk7XHJcbnZhciBFbXB0eUFycmF5ID0gW107XHJcbnZhciBSZXVzZWRBcnJheSA9IFtdOyAvLyBhc3N1bWVkIHRocmVhZC1sb2NhbFxyXG5mdW5jdGlvbiBjaGVjayhmYWN0KSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmYWN0KSB7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KCdCKyB0cmVlJyk7IC8vIGF0IGJlZ2lubmluZyBvZiBtZXNzYWdlXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFyZ3Muam9pbignICcpKTtcclxuICAgIH1cclxufVxyXG4vKiogQSBCVHJlZSBmcm96ZW4gaW4gdGhlIGVtcHR5IHN0YXRlLiAqL1xyXG5leHBvcnRzLkVtcHR5QlRyZWUgPSAoZnVuY3Rpb24gKCkgeyB2YXIgdCA9IG5ldyBCVHJlZSgpOyB0LmZyZWV6ZSgpOyByZXR1cm4gdDsgfSkoKTtcclxuIiwgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBNSVRcbiAqIEBjb3B5cmlnaHQgMjAyMCBFeWFzIFJhbmpvdXMgPGV5YXMucmFuam91c0BnbWFpbC5jb20+XG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIFF1ZXVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBxdWV1ZS5cbiAgICogQHBhcmFtIHthcnJheX0gW2VsZW1lbnRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG9iamVjdH0gZWxlbWVudFxuICAgKi9cbiAgZW5xdWV1ZShlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xvYmplY3R9IGVsZW1lbnRcbiAgICovXG4gIHB1c2goZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVucXVldWUoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIGRlcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcm9udCgpO1xuICAgIHRoaXMuX29mZnNldCArPSAxO1xuXG4gICAgaWYgKHRoaXMuX29mZnNldCAqIDIgPCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHJldHVybiBmaXJzdDtcblxuICAgIC8vIG9ubHkgcmVtb3ZlIGRlcXVldWVkIGVsZW1lbnRzIHdoZW4gcmVhY2hpbmcgaGFsZiBzaXplXG4gICAgLy8gdG8gZGVjcmVhc2UgbGF0ZW5jeSBvZiBzaGlmdGluZyBlbGVtZW50cy5cbiAgICB0aGlzLl9lbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRzLnNsaWNlKHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIHBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXF1ZXVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZnJvbnQgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgZnJvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpID4gMCA/IHRoaXMuX2VsZW1lbnRzW3RoaXMuX29mZnNldF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJhY2sgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgYmFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPiAwID8gdGhpcy5fZWxlbWVudHNbdGhpcy5fZWxlbWVudHMubGVuZ3RoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLmxlbmd0aCAtIHRoaXMuX29mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSBhcyBhbiBhcnJheS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAqL1xuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5zbGljZSh0aGlzLl9vZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBxdWV1ZS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgUXVldWUodGhpcy5fZWxlbWVudHMuc2xpY2UodGhpcy5fb2Zmc2V0KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHF1ZXVlIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqIEBwdWJsaWNcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge2FycmF5fSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tQXJyYXkoZWxlbWVudHMpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXVlKGVsZW1lbnRzKTtcbiAgfVxufVxuXG5leHBvcnRzLlF1ZXVlID0gUXVldWU7XG4iLCAiY29uc3QgeyBRdWV1ZSB9ID0gcmVxdWlyZSgnLi9zcmMvcXVldWUnKTtcblxuZXhwb3J0cy5RdWV1ZSA9IFF1ZXVlO1xuIiwgImltcG9ydCB7IERhdGFjb3JlQXBpIH0gZnJvbSBcImFwaS9hcGlcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MsIFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBEYXRhY29yZVF1ZXJ5VmlldyBhcyBEYXRhY29yZUpTVmlldywgVklFV19UWVBFX0RBVEFDT1JFSlMgfSBmcm9tIFwidWkvdmlldy1wYWdlXCI7XG5pbXBvcnQgeyBJbmRleFN0YXR1c0JhciB9IGZyb20gXCJ1aS9pbmRleC1zdGF0dXNcIjtcblxuLyoqIFJlYWN0aXZlIGRhdGEgZW5naW5lIGZvciB5b3VyIE9ic2lkaWFuLm1kIHZhdWx0LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIC8qKiBQbHVnaW4td2lkZSBkZWZhdWx0IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBzZXR0aW5nczogU2V0dGluZ3M7XG5cbiAgICAvKiogQ2VudHJhbCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgY29yZTogRGF0YWNvcmU7XG4gICAgLyoqIEV4dGVybmFsbHkgdmlzaWJsZSBBUEkgZm9yIHF1ZXJ5aW5nLiAqL1xuICAgIHB1YmxpYyBhcGk6IERhdGFjb3JlQXBpO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgKGF3YWl0IHRoaXMubG9hZERhdGEoKSkgPz8ge30pO1xuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IEdlbmVyYWxTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvcmUgQVBJIGZvciB1c2FnZSBpbiBhbGwgdmlld3MgYW5kIGRvd25zdHJlYW0gYXBwcy5cbiAgICAgICAgdGhpcy5hZGRDaGlsZCgodGhpcy5jb3JlID0gbmV3IERhdGFjb3JlKHRoaXMuYXBwLCB0aGlzLm1hbmlmZXN0LnZlcnNpb24sIHRoaXMuc2V0dGluZ3MpKSk7XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IERhdGFjb3JlQXBpKHRoaXMuY29yZSk7XG5cbiAgICAgICAgLy8gQWRkIGEgdmlzdWFsIGFpZCBmb3Igd2hhdCBkYXRhY29yZSBpcyBjdXJyZW50bHkgZG9pbmcuXG4gICAgICAgIHRoaXMubW91bnRJbmRleFN0YXRlKHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpLCB0aGlzLmNvcmUpO1xuXG4gICAgICAgIC8vIFByaW1hcnkgdmlzdWFsIGVsZW1lbnRzIChEYXRhY29yZUpTIGFuZCBEYXRhY29yZSBibG9ja3MpLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JlanNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmVqc3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JldHNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmV0c3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBWaWV3czogRGF0YWNvcmVKUyB2aWV3LlxuICAgICAgICAvLyBAdHMtaWdub3JlIGJlIHF1aWV0XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3KFZJRVdfVFlQRV9EQVRBQ09SRUpTLCAobGVhZikgPT4gbmV3IERhdGFjb3JlSlNWaWV3KGxlYWYsIHRoaXMuYXBpKSk7XG5cbiAgICAgICAgLy8gQWRkIGEgY29tbWFuZCBmb3IgY3JlYXRpbmcgYSBuZXcgdmlldyBwYWdlLlxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiZGF0YWNvcmUtYWRkLXZpZXctcGFnZVwiLFxuICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgVmlldyBQYWdlXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihcInRhYlwiKTtcbiAgICAgICAgICAgICAgICBuZXdMZWFmLnNldFZpZXdTdGF0ZSh7IHR5cGU6IFZJRVdfVFlQRV9EQVRBQ09SRUpTLCBhY3RpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLnNldEFjdGl2ZUxlYWYobmV3TGVhZiwgeyBmb2N1czogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIEpTIGhpZ2hsaWdodGluZyBmb3IgY29kZWJsb2Nrcy5cbiAgICAgICAgdGhpcy5yZWdpc3Rlcih0aGlzLnJlZ2lzdGVyQ29kZWJsb2NrSGlnaGxpZ2h0aW5nKCkpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgYXMgc29vbiBhcyB0aGUgd29ya3NwYWNlIGlzIHJlYWR5LlxuICAgICAgICBpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoYXN5bmMgKCkgPT4gdGhpcy5jb3JlLmluaXRpYWxpemUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvcmUuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSB0aGUgQVBJIGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBhbnkgY29udGV4dC5cbiAgICAgICAgd2luZG93LmRhdGFjb3JlID0gdGhpcy5hcGk7XG5cbiAgICAgICAgLy8gYm9uIGFwcGV0aXRcbiAgICAgICAgY29uc29sZS5sb2coYERhdGFjb3JlOiB2ZXJzaW9uICR7dGhpcy5tYW5pZmVzdC52ZXJzaW9ufSAocmVxdWlyZXMgb2JzaWRpYW4gJHt0aGlzLm1hbmlmZXN0Lm1pbkFwcFZlcnNpb259KWApO1xuICAgIH1cblxuICAgIG9udW5sb2FkKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRGF0YWNvcmU6IHZlcnNpb24gJHt0aGlzLm1hbmlmZXN0LnZlcnNpb259IHVubG9hZGVkLmApO1xuICAgIH1cblxuICAgIC8qKiBSZWdpc3RlciBjb2RlYmxvY2sgaGlnaGxpZ2h0aW5nIGFuZCByZXR1cm4gYSBjbG9zdXJlIHdoaWNoIHVucmVnaXN0ZXJzLiAqL1xuICAgIHJlZ2lzdGVyQ29kZWJsb2NrSGlnaGxpZ2h0aW5nKCk6ICgpID0+IHZvaWQge1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmVqc1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqYXZhc2NyaXB0XCIpKTtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImpzeFwiKSk7XG4gICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZXRzXCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImphdmFzY3JpcHRcIikpO1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwianN4XCIpKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmVqc3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJudWxsXCIpKTtcbiAgICAgICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZXRzeFwiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJudWxsXCIpKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIHRoZSBnaXZlbiBzZXR0aW5ncyB0byBuZXcgdmFsdWVzLiAqL1xuICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPFNldHRpbmdzPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogUmVuZGVyIGRhdGFjb3JlIGluZGV4aW5nIHN0YXR1cyB1c2luZyB0aGUgaW5kZXguICovXG4gICAgcHJpdmF0ZSBtb3VudEluZGV4U3RhdGUocm9vdDogSFRNTEVsZW1lbnQsIGNvcmU6IERhdGFjb3JlKTogdm9pZCB7XG4gICAgICAgIHJlbmRlcihjcmVhdGVFbGVtZW50KEluZGV4U3RhdHVzQmFyLCB7IGRhdGFjb3JlOiBjb3JlIH0pLCByb290KTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHJlbmRlcihudWxsLCByb290KSk7XG4gICAgfVxufVxuXG4vKiogRGF0YWNvcmUgU2V0dGluZ3MgVGFiLiAqL1xuY2xhc3MgR2VuZXJhbFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHByaXZhdGUgcGx1Z2luOiBEYXRhY29yZVBsdWdpbikge1xuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlZpZXdzXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiUGFnaW5hdGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBzcGxpdHMgdXAgdmlld3MgaW50byBwYWdlcyBvZiByZXN1bHRzIHdoaWNoIGNhbiBiZSB0cmF2ZXJzZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInZpYSBidXR0b25zIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgdmlldy4gVGhpcyBzdWJzdGFudGlhbGx5IGltcHJvdmVzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGUgcGVyZm9ybWFuY2Ugb2YgbGFyZ2Ugdmlld3MsIGFuZCBjYW4gaGVscCB3aXRoIHZpc3VhbCBjbHV0dGVyLiBOb3RlIHRoYXQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBzZXQgb24gYSBwZXItdmlldyBiYXNpcy5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRQYWdpbmdFbmFibGVkKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0UGFnaW5nRW5hYmxlZDogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJEZWZhdWx0IFBhZ2UgU2l6ZVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gc2hvdyBwZXIgcGFnZSwgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIG9uIGEgcGVyLXZpZXcgYmFzaXMuXCIpXG4gICAgICAgICAgICAuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgT1BUSU9OUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCIyNVwiOiBcIjI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiNTBcIjogXCI1MFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjEwMFwiOiBcIjEwMFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjIwMFwiOiBcIjIwMFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjUwMFwiOiBcIjUwMFwiLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IFwiXCIgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgaWYgKCEoY3VycmVudCBpbiBPUFRJT05TKSkgT1BUSU9OU1tjdXJyZW50XSA9IGN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAuYWRkT3B0aW9ucyhPUFRJT05TKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoY3VycmVudClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGRlZmF1bHRQYWdlU2l6ZTogcGFyc2VkIHwgMCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJTY3JvbGwgb24gUGFnZSBDaGFuZ2VcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiSWYgZW5hYmxlZCwgdGFibGUgdGhhdCBhcmUgcGFnZWQgd2lsbCBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiB0aGUgcGFnZSBjaGFuZ2VzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIG9uIGEgcGVyLXZpZXcgYmFzaXMuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zY3JvbGxPblBhZ2VDaGFuZ2UpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHNjcm9sbE9uUGFnZUNoYW5nZTogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRW5hYmxlIEphdmFzY3JpcHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBKYXZhc2NyaXB0IGNvZGVibG9ja3Mgd2lsbCBiZSBldmFsdWF0ZWQuXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSnMpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGVuYWJsZUpzOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiRm9ybWF0dGluZ1wiIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkVtcHR5IFZhbHVlc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJXaGF0IHRvIHNob3cgZm9yIHVuc2V0L2VtcHR5IHByb3BlcnRpZXMuXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVuZGVyTnVsbEFzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyByZW5kZXJOdWxsQXM6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBEYXRlIEZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlcyBhcmUgcmVuZGVyZWQgaW4uIFVzZXMgbHV4b24gZGF0ZSBmb3JtYXR0aW5nIChodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L2x1eG9uL2Jsb2IvbWFzdGVyL2RvY3MvZm9ybWF0dGluZy5tZCNmb3JtYXR0aW5nLXdpdGgtdG9rZW5zLXN0cmluZ3MtZm9yLWN0aHVsaHUpLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBkYXRlIGZvcm1hdCBpcyB2YWxpZFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhEYXRlLm5vdygpKS50b0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdERhdGVGb3JtYXQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBEYXRlLVRpbWUgZm9ybWF0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIlRoZSBkZWZhdWx0IGZvcm1hdCB0aGF0IGRhdGUtdGltZXMgYXJlIHJlbmRlcmVkIGluLiBVc2VzIGx1eG9uIGRhdGUgZm9ybWF0dGluZyAoaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9sdXhvbi9ibG9iL21hc3Rlci9kb2NzL2Zvcm1hdHRpbmcubWQjZm9ybWF0dGluZy13aXRoLXRva2Vucy1zdHJpbmdzLWZvci1jdGh1bGh1KS5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5mcm9tTWlsbGlzKERhdGUubm93KCkpLnRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0RGF0ZVRpbWVGb3JtYXQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJQZXJmb3JtYW5jZSBUdW5pbmdcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJJbmxpbmUgRmllbGRzXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIGlubGluZSBmaWVsZHMgd2lsbCBiZSBwYXJzZWQgaW4gYWxsIGRvY3VtZW50cy4gRmluZGluZyBpbmxpbmUgZmllbGRzIHJlcXVpcmVzIGEgZnVsbCB0ZXh0IHNjYW4gdGhyb3VnaCBlYWNoIGRvY3VtZW50LCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwid2hpY2ggbm90aWNhYmx5IHNsb3dzIGRvd24gaW5kZXhpbmcgZm9yIGxhcmdlIHZhdWx0cy4gRGlzYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIG1lYW4gbWV0YWRhdGEgd2lsbCBvbmx5IGNvbWUgZnJvbSB0YWdzLCBsaW5rcywgYW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJQcm9wZXJ0aWVzIC8gZnJvbnRtYXR0ZXJcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmluZGV4SW5saW5lRmllbGRzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbmRleElubGluZUZpZWxkczogdmFsdWUgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogUmVxdWVzdCBhIGZ1bGwgaW5kZXggZHJvcCArIHJlaW5kZXggZm9yIGNvcnJlY3RuZXNzLlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiSW1wb3J0ZXIgVGhyZWFkc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgbnVtYmVyIG9mIGltcG9ydGVyIHRocmVhZHMgdG8gdXNlIGZvciBwYXJzaW5nIG1ldGFkYXRhLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKFwiXCIgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbXBvcnRlck51bVRocmVhZHMpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbXBvcnRlck51bVRocmVhZHM6IHBhcnNlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkltcG9ydGVyIFV0aWxpemF0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkhvdyBtdWNoIENQVSB0aW1lIGVhY2ggaW1wb3J0ZXIgdGhyZWFkIHNob3VsZCB1c2UsIGFzIGEgZnJhY3Rpb24gKDAuMSAtIDEuMCkuXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1wb3J0ZXJVdGlsaXphdGlvbi50b0ZpeGVkKDIpKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRlZCA9IE1hdGgubWF4KDAuMSwgTWF0aC5taW4oMS4wLCBwYXJzZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbXBvcnRlclV0aWxpemF0aW9uOiBsaW1pdGVkIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiTWF4aW11bSBSZWN1cnNpdmUgUmVuZGVyIERlcHRoXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIk1heGltdW0gZGVwdGggdGhhdCBvYmplY3RzIHdpbGwgYmUgcmVuZGVyZWQgdG8gKGkuZS4sIGhvdyBtYW55IGxldmVscyBvZiBzdWJwcm9wZXJ0aWVzXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIndpbGwgYmUgcmVuZGVyZWQgYnkgZGVmYXVsdCkuIFRoaXMgYXZvaWRzIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gc2VsZi1yZWZlcmVudGlhbCBvYmplY3RzXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImFuZCBlbnN1cmVzIHRoYXQgcmVuZGVyaW5nIG9iamVjdHMgaXMgYWNjZXB0YWJseSBwZXJmb3JtYW50LlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgudG9TdHJpbmcoKSkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogcGFyc2VkIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlJlY3Vyc2l2ZSBzdWJ0YXNrIGNvbXBsZXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBvciBub3Qgc3VidGFza3Mgc2hvdWxkIGJlIGNvbXBsZXRlZCBhbG9uZyB3aXRoIHRoZWlyIHBhcmVudCBpbiBkYXRhY29yZSB0YXNrIHZpZXdzXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0YikgPT4ge1xuICAgICAgICAgICAgICAgIHRiLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnJlY3Vyc2l2ZVRhc2tDb21wbGV0aW9uKS5vbkNoYW5nZShhc3luYyAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgcmVjdXJzaXZlVGFza0NvbXBsZXRpb246IHZhbCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiVGFza3NcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJUYXNrIENvbXBsZXRpb24gVGV4dFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJOYW1lIG9mIGlubGluZSBmaWVsZCBpbiB3aGljaCB0byBzdG9yZSB0YXNrIGNvbXBsZXRpb24gZGF0ZS90aW1lXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFza0NvbXBsZXRpb25UZXh0KS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyB0YXNrQ29tcGxldGlvblRleHQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiVXNlIEVtb2ppIFNob3J0aGFuZCBmb3IgVGFzayBDb21wbGV0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIGF1dG9tYXRpYyBjb21wbGV0aW9uIHdpbGwgdXNlIGFuIGVtb2ppIHNob3J0aGFuZCBcdTI3MDUgWVlZWS1NTS1ERFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJpbnN0ZWFkIG9mIFtjb21wbGV0aW9uOjogZGF0ZV0uXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRiKSA9PiB7XG4gICAgICAgICAgICAgICAgdGIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZCkub25DaGFuZ2UoYXN5bmMgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHRhc2tDb21wbGV0aW9uVXNlRW1vamlTaG9ydGhhbmQ6IHZhbCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi96b25lLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgSW52YWxpZFpvbmUgZnJvbSBcIi4vem9uZXMvaW52YWxpZFpvbmUuanNcIjtcbmltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBWRVJTSU9OID0gXCIyLjUuMlwiO1xuXG5leHBvcnQge1xuICBWRVJTSU9OLFxuICBEYXRlVGltZSxcbiAgRHVyYXRpb24sXG4gIEludGVydmFsLFxuICBJbmZvLFxuICBab25lLFxuICBGaXhlZE9mZnNldFpvbmUsXG4gIElBTkFab25lLFxuICBJbnZhbGlkWm9uZSxcbiAgU3lzdGVtWm9uZSxcbiAgU2V0dGluZ3MsXG59O1xuIiwgIi8vIHRoZXNlIGFyZW4ndCByZWFsbHkgcHJpdmF0ZSwgYnV0IG5vciBhcmUgdGhleSByZWFsbHkgdXNlZnVsIHRvIGRvY3VtZW50XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTHV4b25FcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREYXRlVGltZUVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIERhdGVUaW1lOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkSW50ZXJ2YWxFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBJbnRlcnZhbDogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZER1cmF0aW9uRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkVW5pdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHVuaXQpIHtcbiAgICBzdXBlcihgSW52YWxpZCB1bml0ICR7dW5pdH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgWm9uZUlzQWJzdHJhY3RFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlpvbmUgaXMgYW4gYWJzdHJhY3QgY2xhc3NcIik7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3QgbiA9IFwibnVtZXJpY1wiLFxuICBzID0gXCJzaG9ydFwiLFxuICBsID0gXCJsb25nXCI7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfTUVEID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfTUVEX1dJVEhfV0VFS0RBWSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgd2Vla2RheTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX0ZVTEwgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9IVUdFID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfU0lNUExFID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX0xPTkdfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfU0lNUExFID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfU0VDT05EUyA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9IVUdFID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG4iLCAiLypcbiAgVGhpcyBpcyBqdXN0IGEganVuayBkcmF3ZXIsIGNvbnRhaW5pbmcgYW55dGhpbmcgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgY2xhc3Nlcy5cbiAgQmVjYXVzZSBMdXhvbiBpcyBzbWFsbChpc2gpLCB0aGlzIHNob3VsZCBzdGF5IHNtYWxsIGFuZCB3ZSB3b24ndCB3b3JyeSBhYm91dCBzcGxpdHRpbmdcbiAgaXQgdXAgaW50bywgc2F5LCBwYXJzaW5nVXRpbC5qcyBhbmQgYmFzaWNVdGlsLmpzIGFuZCBzbyBvbi4gQnV0IHRoZXkgYXJlIGRpdmlkZWQgdXAgYnkgZmVhdHVyZSBhcmVhLlxuKi9cblxuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG4vLyBUWVBFU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIiAmJiBvICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInN0cmluZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59XG5cbi8vIENBUEFCSUxJVElFU1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVsYXRpdmUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsICE9PSBcInVuZGVmaW5lZFwiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gT0JKRUNUUyBBTkQgQVJSQVlTXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZUFycmF5KHRoaW5nKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHRoaW5nKSA/IHRoaW5nIDogW3RoaW5nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlc3RCeShhcnIsIGJ5LCBjb21wYXJlKSB7XG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gYXJyLnJlZHVjZSgoYmVzdCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHBhaXIgPSBbYnkobmV4dCksIG5leHRdO1xuICAgIGlmICghYmVzdCkge1xuICAgICAgcmV0dXJuIHBhaXI7XG4gICAgfSBlbHNlIGlmIChjb21wYXJlKGJlc3RbMF0sIHBhaXJbMF0pID09PSBiZXN0WzBdKSB7XG4gICAgICByZXR1cm4gYmVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhaXI7XG4gICAgfVxuICB9LCBudWxsKVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2sob2JqLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYSwgaykgPT4ge1xuICAgIGFba10gPSBvYmpba107XG4gICAgcmV0dXJuIGE7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbi8vIE5VTUJFUlMgQU5EIFNUUklOR1NcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVnZXJCZXR3ZWVuKHRoaW5nLCBib3R0b20sIHRvcCkge1xuICByZXR1cm4gaXNJbnRlZ2VyKHRoaW5nKSAmJiB0aGluZyA+PSBib3R0b20gJiYgdGhpbmcgPD0gdG9wO1xufVxuXG4vLyB4ICUgbiBidXQgdGFrZXMgdGhlIHNpZ24gb2YgbiBpbnN0ZWFkIG9mIHhcbmV4cG9ydCBmdW5jdGlvbiBmbG9vck1vZCh4LCBuKSB7XG4gIHJldHVybiB4IC0gbiAqIE1hdGguZmxvb3IoeCAvIG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkU3RhcnQoaW5wdXQsIG4gPSAyKSB7XG4gIGNvbnN0IGlzTmVnID0gaW5wdXQgPCAwO1xuICBsZXQgcGFkZGVkO1xuICBpZiAoaXNOZWcpIHtcbiAgICBwYWRkZWQgPSBcIi1cIiArIChcIlwiICsgLWlucHV0KS5wYWRTdGFydChuLCBcIjBcIik7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGVkID0gKFwiXCIgKyBpbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9XG4gIHJldHVybiBwYWRkZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVnZXIoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUludChzdHJpbmcsIDEwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbG9hdGluZyhzdHJpbmcpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNaWxsaXMoZnJhY3Rpb24pIHtcbiAgLy8gUmV0dXJuIHVuZGVmaW5lZCAoaW5zdGVhZCBvZiAwKSBpbiB0aGVzZSBjYXNlcywgd2hlcmUgZnJhY3Rpb24gaXMgbm90IHNldFxuICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb24pIHx8IGZyYWN0aW9uID09PSBudWxsIHx8IGZyYWN0aW9uID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmID0gcGFyc2VGbG9hdChcIjAuXCIgKyBmcmFjdGlvbikgKiAxMDAwO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGYpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvKG51bWJlciwgZGlnaXRzLCB0b3dhcmRaZXJvID0gZmFsc2UpIHtcbiAgY29uc3QgZmFjdG9yID0gMTAgKiogZGlnaXRzLFxuICAgIHJvdW5kZXIgPSB0b3dhcmRaZXJvID8gTWF0aC50cnVuYyA6IE1hdGgucm91bmQ7XG4gIHJldHVybiByb3VuZGVyKG51bWJlciAqIGZhY3RvcikgLyBmYWN0b3I7XG59XG5cbi8vIERBVEUgQkFTSUNTXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgY29uc3QgbW9kTW9udGggPSBmbG9vck1vZChtb250aCAtIDEsIDEyKSArIDEsXG4gICAgbW9kWWVhciA9IHllYXIgKyAobW9udGggLSBtb2RNb250aCkgLyAxMjtcblxuICBpZiAobW9kTW9udGggPT09IDIpIHtcbiAgICByZXR1cm4gaXNMZWFwWWVhcihtb2RZZWFyKSA/IDI5IDogMjg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vZE1vbnRoIC0gMV07XG4gIH1cbn1cblxuLy8gY292ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgbG9jYWwgdGltZXN0YW1wIChlcG9jaCwgYnV0IHdpdGggdGhlIG9mZnNldCBiYWtlZCBpbilcbmV4cG9ydCBmdW5jdGlvbiBvYmpUb0xvY2FsVFMob2JqKSB7XG4gIGxldCBkID0gRGF0ZS5VVEMoXG4gICAgb2JqLnllYXIsXG4gICAgb2JqLm1vbnRoIC0gMSxcbiAgICBvYmouZGF5LFxuICAgIG9iai5ob3VyLFxuICAgIG9iai5taW51dGUsXG4gICAgb2JqLnNlY29uZCxcbiAgICBvYmoubWlsbGlzZWNvbmRcbiAgKTtcblxuICAvLyBmb3IgbGVnYWN5IHJlYXNvbnMsIHllYXJzIGJldHdlZW4gMCBhbmQgOTkgYXJlIGludGVycHJldGVkIGFzIDE5WFg7IHJldmVydCB0aGF0XG4gIGlmIChvYmoueWVhciA8IDEwMCAmJiBvYmoueWVhciA+PSAwKSB7XG4gICAgZCA9IG5ldyBEYXRlKGQpO1xuICAgIGQuc2V0VVRDRnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCk7XG4gIH1cbiAgcmV0dXJuICtkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla3NJbldlZWtZZWFyKHdlZWtZZWFyKSB7XG4gIGNvbnN0IHAxID1cbiAgICAgICh3ZWVrWWVhciArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0KSAtXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyAxMDApICtcbiAgICAgICAgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQwMCkpICVcbiAgICAgIDcsXG4gICAgbGFzdCA9IHdlZWtZZWFyIC0gMSxcbiAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3O1xuICByZXR1cm4gcDEgPT09IDQgfHwgcDIgPT09IDMgPyA1MyA6IDUyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhcikge1xuICBpZiAoeWVhciA+IDk5KSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSByZXR1cm4geWVhciA+IDYwID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjtcbn1cblxuLy8gUEFSU0lOR1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Vab25lSW5mbyh0cywgb2Zmc2V0Rm9ybWF0LCBsb2NhbGUsIHRpbWVab25lID0gbnVsbCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpLFxuICAgIGludGxPcHRzID0ge1xuICAgICAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgIH07XG5cbiAgaWYgKHRpbWVab25lKSB7XG4gICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkID0geyB0aW1lWm9uZU5hbWU6IG9mZnNldEZvcm1hdCwgLi4uaW50bE9wdHMgfTtcblxuICBjb25zdCBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKVxuICAgIC5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gICAgLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRpbWV6b25lbmFtZVwiKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7XG59XG5cbi8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwXG5leHBvcnQgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikge1xuICBsZXQgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTtcblxuICAvLyBkb24ndCB8fCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSAtMFxuICBpZiAoTnVtYmVyLmlzTmFOKG9mZkhvdXIpKSB7XG4gICAgb2ZmSG91ciA9IDA7XG4gIH1cblxuICBjb25zdCBvZmZNaW4gPSBwYXJzZUludChvZmZNaW51dGVTdHIsIDEwKSB8fCAwLFxuICAgIG9mZk1pblNpZ25lZCA9IG9mZkhvdXIgPCAwIHx8IE9iamVjdC5pcyhvZmZIb3VyLCAtMCkgPyAtb2ZmTWluIDogb2ZmTWluO1xuICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkO1xufVxuXG4vLyBDT0VSQ0lPTlxuXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWUpIHtcbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWUgPT09IFwiXCIgfHwgTnVtYmVyLmlzTmFOKG51bWVyaWNWYWx1ZSkpXG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBJbnZhbGlkIHVuaXQgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgcmV0dXJuIG51bWVyaWNWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IHUgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHtcbiAgICAgIGNvbnN0IHYgPSBvYmpbdV07XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE9mZnNldChvZmZzZXQsIGZvcm1hdCkge1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSxcbiAgICBtaW51dGVzID0gTWF0aC50cnVuYyhNYXRoLmFicyhvZmZzZXQgJSA2MCkpLFxuICAgIHNpZ24gPSBvZmZzZXQgPj0gMCA/IFwiK1wiIDogXCItXCI7XG5cbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7cGFkU3RhcnQoaG91cnMsIDIpfToke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtob3Vyc30ke21pbnV0ZXMgPiAwID8gYDoke21pbnV0ZXN9YCA6IFwiXCJ9YDtcbiAgICBjYXNlIFwidGVjaGllXCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX0ke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBWYWx1ZSBmb3JtYXQgJHtmb3JtYXR9IGlzIG91dCBvZiByYW5nZSBmb3IgcHJvcGVydHkgZm9ybWF0YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVPYmplY3Qob2JqKSB7XG4gIHJldHVybiBwaWNrKG9iaiwgW1wiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlhbmFSZWdleCA9XG4gIC9bQS1aYS16XystXXsxLDI1Nn0oPzo6P1xcL1tBLVphLXowLTlfKy1dezEsMjU2fSg/OlxcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vO1xuIiwgImltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGljayB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBPYmplY3Qua2V5cyhvYmopLnNvcnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY29uc3QgbW9udGhzTG9uZyA9IFtcbiAgXCJKYW51YXJ5XCIsXG4gIFwiRmVicnVhcnlcIixcbiAgXCJNYXJjaFwiLFxuICBcIkFwcmlsXCIsXG4gIFwiTWF5XCIsXG4gIFwiSnVuZVwiLFxuICBcIkp1bHlcIixcbiAgXCJBdWd1c3RcIixcbiAgXCJTZXB0ZW1iZXJcIixcbiAgXCJPY3RvYmVyXCIsXG4gIFwiTm92ZW1iZXJcIixcbiAgXCJEZWNlbWJlclwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IG1vbnRoc1Nob3J0ID0gW1xuICBcIkphblwiLFxuICBcIkZlYlwiLFxuICBcIk1hclwiLFxuICBcIkFwclwiLFxuICBcIk1heVwiLFxuICBcIkp1blwiLFxuICBcIkp1bFwiLFxuICBcIkF1Z1wiLFxuICBcIlNlcFwiLFxuICBcIk9jdFwiLFxuICBcIk5vdlwiLFxuICBcIkRlY1wiLFxuXTtcblxuZXhwb3J0IGNvbnN0IG1vbnRoc05hcnJvdyA9IFtcIkpcIiwgXCJGXCIsIFwiTVwiLCBcIkFcIiwgXCJNXCIsIFwiSlwiLCBcIkpcIiwgXCJBXCIsIFwiU1wiLCBcIk9cIiwgXCJOXCIsIFwiRFwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRocyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLm1vbnRoc05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLm1vbnRoc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNMb25nXTtcbiAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgcmV0dXJuIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiLCBcIjEwXCIsIFwiMTFcIiwgXCIxMlwiXTtcbiAgICBjYXNlIFwiMi1kaWdpdFwiOlxuICAgICAgcmV0dXJuIFtcIjAxXCIsIFwiMDJcIiwgXCIwM1wiLCBcIjA0XCIsIFwiMDVcIiwgXCIwNlwiLCBcIjA3XCIsIFwiMDhcIiwgXCIwOVwiLCBcIjEwXCIsIFwiMTFcIiwgXCIxMlwiXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHdlZWtkYXlzTG9uZyA9IFtcbiAgXCJNb25kYXlcIixcbiAgXCJUdWVzZGF5XCIsXG4gIFwiV2VkbmVzZGF5XCIsXG4gIFwiVGh1cnNkYXlcIixcbiAgXCJGcmlkYXlcIixcbiAgXCJTYXR1cmRheVwiLFxuICBcIlN1bmRheVwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IHdlZWtkYXlzU2hvcnQgPSBbXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c05hcnJvdyA9IFtcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiLCBcIlNcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrZGF5cyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNMb25nXTtcbiAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgcmV0dXJuIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtZXJpZGllbXMgPSBbXCJBTVwiLCBcIlBNXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc0xvbmcgPSBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl07XG5cbmV4cG9ydCBjb25zdCBlcmFzU2hvcnQgPSBbXCJCQ1wiLCBcIkFEXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc05hcnJvdyA9IFtcIkJcIiwgXCJBXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gZXJhcyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLmVyYXNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLmVyYXNMb25nXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIHtcbiAgcmV0dXJuIG1lcmlkaWVtc1tkdC5ob3VyIDwgMTIgPyAwIDogMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gd2Vla2RheXMobGVuZ3RoKVtkdC53ZWVrZGF5IC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG1vbnRocyhsZW5ndGgpW2R0Lm1vbnRoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcmFGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBlcmFzKGxlbmd0aClbZHQueWVhciA8IDAgPyAwIDogMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIG51bWVyaWMgPSBcImFsd2F5c1wiLCBuYXJyb3cgPSBmYWxzZSkge1xuICBjb25zdCB1bml0cyA9IHtcbiAgICB5ZWFyczogW1wieWVhclwiLCBcInlyLlwiXSxcbiAgICBxdWFydGVyczogW1wicXVhcnRlclwiLCBcInF0ci5cIl0sXG4gICAgbW9udGhzOiBbXCJtb250aFwiLCBcIm1vLlwiXSxcbiAgICB3ZWVrczogW1wid2Vla1wiLCBcIndrLlwiXSxcbiAgICBkYXlzOiBbXCJkYXlcIiwgXCJkYXlcIiwgXCJkYXlzXCJdLFxuICAgIGhvdXJzOiBbXCJob3VyXCIsIFwiaHIuXCJdLFxuICAgIG1pbnV0ZXM6IFtcIm1pbnV0ZVwiLCBcIm1pbi5cIl0sXG4gICAgc2Vjb25kczogW1wic2Vjb25kXCIsIFwic2VjLlwiXSxcbiAgfTtcblxuICBjb25zdCBsYXN0YWJsZSA9IFtcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIl0uaW5kZXhPZih1bml0KSA9PT0gLTE7XG5cbiAgaWYgKG51bWVyaWMgPT09IFwiYXV0b1wiICYmIGxhc3RhYmxlKSB7XG4gICAgY29uc3QgaXNEYXkgPSB1bml0ID09PSBcImRheXNcIjtcbiAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwidG9tb3Jyb3dcIiA6IGBuZXh0ICR7dW5pdHNbdW5pdF1bMF19YDtcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwieWVzdGVyZGF5XCIgOiBgbGFzdCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwidG9kYXlcIiA6IGB0aGlzICR7dW5pdHNbdW5pdF1bMF19YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGZhbGwgdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzSW5QYXN0ID0gT2JqZWN0LmlzKGNvdW50LCAtMCkgfHwgY291bnQgPCAwLFxuICAgIGZtdFZhbHVlID0gTWF0aC5hYnMoY291bnQpLFxuICAgIHNpbmd1bGFyID0gZm10VmFsdWUgPT09IDEsXG4gICAgbGlsVW5pdHMgPSB1bml0c1t1bml0XSxcbiAgICBmbXRVbml0ID0gbmFycm93XG4gICAgICA/IHNpbmd1bGFyXG4gICAgICAgID8gbGlsVW5pdHNbMV1cbiAgICAgICAgOiBsaWxVbml0c1syXSB8fCBsaWxVbml0c1sxXVxuICAgICAgOiBzaW5ndWxhclxuICAgICAgPyB1bml0c1t1bml0XVswXVxuICAgICAgOiB1bml0O1xuICByZXR1cm4gaXNJblBhc3QgPyBgJHtmbXRWYWx1ZX0gJHtmbXRVbml0fSBhZ29gIDogYGluICR7Zm10VmFsdWV9ICR7Zm10VW5pdH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKGtub3duRm9ybWF0KSB7XG4gIC8vIHRoZXNlIGFsbCBoYXZlIHRoZSBvZmZzZXRzIHJlbW92ZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGVtXG4gIC8vIHdpdGhvdXQgYWxsIHRoZSBpbnRsIHN0dWZmIHRoaXMgaXMgYmFja2ZpbGxpbmdcbiAgY29uc3QgZmlsdGVyZWQgPSBwaWNrKGtub3duRm9ybWF0LCBbXG4gICAgICBcIndlZWtkYXlcIixcbiAgICAgIFwiZXJhXCIsXG4gICAgICBcInllYXJcIixcbiAgICAgIFwibW9udGhcIixcbiAgICAgIFwiZGF5XCIsXG4gICAgICBcImhvdXJcIixcbiAgICAgIFwibWludXRlXCIsXG4gICAgICBcInNlY29uZFwiLFxuICAgICAgXCJ0aW1lWm9uZU5hbWVcIixcbiAgICAgIFwiaG91ckN5Y2xlXCIsXG4gICAgXSksXG4gICAga2V5ID0gc3RyaW5naWZ5KGZpbHRlcmVkKSxcbiAgICBkYXRlVGltZUh1Z2UgPSBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX1NIT1JUKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX01FRCk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZKTpcbiAgICAgIHJldHVybiBcIkVFRSwgTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfSFVHRSk6XG4gICAgICByZXR1cm4gXCJFRUVFLCBMTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfU0lNUExFKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiaDptbTpzcyBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9TSU1QTEUpOlxuICAgICAgcmV0dXJuIFwiSEg6bW1cIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkhIOm1tOnNzXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQpOlxuICAgICAgcmV0dXJuIFwiSEg6bW1cIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX1NIT1JUKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRCk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9GVUxMKTpcbiAgICAgIHJldHVybiBcIkxMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9IVUdFKTpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTS9kL3l5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKTpcbiAgICAgIHJldHVybiBcIkVFRSwgZCBMTEwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGVUaW1lSHVnZTtcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9mb3JtYXRzLmpzXCI7XG5pbXBvcnQgeyBwYWRTdGFydCB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykge1xuICBsZXQgcyA9IFwiXCI7XG4gIGZvciAoY29uc3QgdG9rZW4gb2Ygc3BsaXRzKSB7XG4gICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgIHMgKz0gdG9rZW4udmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmNvbnN0IG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSB7XG4gIEQ6IEZvcm1hdHMuREFURV9TSE9SVCxcbiAgREQ6IEZvcm1hdHMuREFURV9NRUQsXG4gIERERDogRm9ybWF0cy5EQVRFX0ZVTEwsXG4gIEREREQ6IEZvcm1hdHMuREFURV9IVUdFLFxuICB0OiBGb3JtYXRzLlRJTUVfU0lNUExFLFxuICB0dDogRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUyxcbiAgdHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIHR0dHQ6IEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VULFxuICBUOiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFLFxuICBUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyxcbiAgVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIFRUVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VULFxuICBmOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JULFxuICBmZjogRm9ybWF0cy5EQVRFVElNRV9NRUQsXG4gIGZmZjogRm9ybWF0cy5EQVRFVElNRV9GVUxMLFxuICBmZmZmOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0UsXG4gIEY6IEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLFxuICBGRjogRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTLFxuICBGRkY6IEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsXG4gIEZGRkY6IEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0dGVyIHtcbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGb3JtYXQoZm10KSB7XG4gICAgbGV0IGN1cnJlbnQgPSBudWxsLFxuICAgICAgY3VycmVudEZ1bGwgPSBcIlwiLFxuICAgICAgYnJhY2tldGVkID0gZmFsc2U7XG4gICAgY29uc3Qgc3BsaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSBmbXQuY2hhckF0KGkpO1xuICAgICAgaWYgKGMgPT09IFwiJ1wiKSB7XG4gICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIGN1cnJlbnRGdWxsID0gXCJcIjtcbiAgICAgICAgYnJhY2tldGVkID0gIWJyYWNrZXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoYnJhY2tldGVkKSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgY3VycmVudEZ1bGwgKz0gYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBmYWxzZSwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RnVsbCA9IGM7XG4gICAgICAgIGN1cnJlbnQgPSBjO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BsaXRzO1xuICB9XG5cbiAgc3RhdGljIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pIHtcbiAgICByZXR1cm4gbWFjcm9Ub2tlblRvRm9ybWF0T3B0c1t0b2tlbl07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdE9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSBmb3JtYXRPcHRzO1xuICAgIHRoaXMubG9jID0gbG9jYWxlO1xuICAgIHRoaXMuc3lzdGVtTG9jID0gbnVsbDtcbiAgfVxuXG4gIGZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBvcHRzKSB7XG4gICAgaWYgKHRoaXMuc3lzdGVtTG9jID09PSBudWxsKSB7XG4gICAgICB0aGlzLnN5c3RlbUxvYyA9IHRoaXMubG9jLnJlZGVmYXVsdFRvU3lzdGVtKCk7XG4gICAgfVxuICAgIGNvbnN0IGRmID0gdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZHQsIHsgLi4udGhpcy5vcHRzLCAuLi5vcHRzIH0pO1xuICAgIHJldHVybiBkZi5mb3JtYXQoKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZVBhcnRzKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0VG9QYXJ0cygpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cblxuICBudW0obiwgcCA9IDApIHtcbiAgICAvLyB3ZSBnZXQgc29tZSBwZXJmIG91dCBvZiBkb2luZyB0aGlzIGhlcmUsIGFubm95aW5nbHlcbiAgICBpZiAodGhpcy5vcHRzLmZvcmNlU2ltcGxlKSB7XG4gICAgICByZXR1cm4gcGFkU3RhcnQobiwgcCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG5cbiAgICBpZiAocCA+IDApIHtcbiAgICAgIG9wdHMucGFkVG8gPSBwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIob3B0cykuZm9ybWF0KG4pO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmbXQpIHtcbiAgICBjb25zdCBrbm93bkVuZ2xpc2ggPSB0aGlzLmxvYy5saXN0aW5nTW9kZSgpID09PSBcImVuXCIsXG4gICAgICB1c2VEYXRlVGltZUZvcm1hdHRlciA9IHRoaXMubG9jLm91dHB1dENhbGVuZGFyICYmIHRoaXMubG9jLm91dHB1dENhbGVuZGFyICE9PSBcImdyZWdvcnlcIixcbiAgICAgIHN0cmluZyA9IChvcHRzLCBleHRyYWN0KSA9PiB0aGlzLmxvYy5leHRyYWN0KGR0LCBvcHRzLCBleHRyYWN0KSxcbiAgICAgIGZvcm1hdE9mZnNldCA9IChvcHRzKSA9PiB7XG4gICAgICAgIGlmIChkdC5pc09mZnNldEZpeGVkICYmIGR0Lm9mZnNldCA9PT0gMCAmJiBvcHRzLmFsbG93Wikge1xuICAgICAgICAgIHJldHVybiBcIlpcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkdC5pc1ZhbGlkID8gZHQuem9uZS5mb3JtYXRPZmZzZXQoZHQudHMsIG9wdHMuZm9ybWF0KSA6IFwiXCI7XG4gICAgICB9LFxuICAgICAgbWVyaWRpZW0gPSAoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubWVyaWRpZW1Gb3JEYXRlVGltZShkdClcbiAgICAgICAgICA6IHN0cmluZyh7IGhvdXI6IFwibnVtZXJpY1wiLCBob3VyQ3ljbGU6IFwiaDEyXCIgfSwgXCJkYXlwZXJpb2RcIiksXG4gICAgICBtb250aCA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC5tb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpXG4gICAgICAgICAgOiBzdHJpbmcoc3RhbmRhbG9uZSA/IHsgbW9udGg6IGxlbmd0aCB9IDogeyBtb250aDogbGVuZ3RoLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIiksXG4gICAgICB3ZWVrZGF5ID0gKGxlbmd0aCwgc3RhbmRhbG9uZSkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLndlZWtkYXlGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKFxuICAgICAgICAgICAgICBzdGFuZGFsb25lID8geyB3ZWVrZGF5OiBsZW5ndGggfSA6IHsgd2Vla2RheTogbGVuZ3RoLCBtb250aDogXCJsb25nXCIsIGRheTogXCJudW1lcmljXCIgfSxcbiAgICAgICAgICAgICAgXCJ3ZWVrZGF5XCJcbiAgICAgICAgICAgICksXG4gICAgICBtYXliZU1hY3JvID0gKHRva2VuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdHMgPSBGb3JtYXR0ZXIubWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbik7XG4gICAgICAgIGlmIChmb3JtYXRPcHRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIGZvcm1hdE9wdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVyYSA9IChsZW5ndGgpID0+XG4gICAgICAgIGtub3duRW5nbGlzaCA/IEVuZ2xpc2guZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgOiBzdHJpbmcoeyBlcmE6IGxlbmd0aCB9LCBcImVyYVwiKSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAodG9rZW4pID0+IHtcbiAgICAgICAgLy8gV2hlcmUgcG9zc2libGU6IGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL3RyYW5zbGF0aW9uL2RhdGUtdGltZS0xL2RhdGUtdGltZSNUT0MtU3RhbmRhbG9uZS12cy4tRm9ybWF0LVN0eWxlc1xuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgLy8gbXNcbiAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kKTtcbiAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWlsbGlzZWNvbmQsIDMpO1xuICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuc2Vjb25kLCAyKTtcbiAgICAgICAgICAvLyBmcmFjdGlvbmFsIHNlY29uZHNcbiAgICAgICAgICBjYXNlIFwidXVcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTApLCAyKTtcbiAgICAgICAgICBjYXNlIFwidXV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwMCkpO1xuICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSk7XG4gICAgICAgICAgY2FzZSBcIm1tXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWludXRlLCAyKTtcbiAgICAgICAgICAvLyBob3Vyc1xuICAgICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIpO1xuICAgICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyLCAyKTtcbiAgICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIpO1xuICAgICAgICAgIGNhc2UgXCJISFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIsIDIpO1xuICAgICAgICAgIC8vIG9mZnNldFxuICAgICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICs2XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcIm5hcnJvd1wiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICswNjowMFxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJzaG9ydFwiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDYwMFxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJ0ZWNoaWVcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEVTVFxuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgeyBmb3JtYXQ6IFwic2hvcnRcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEVhc3Rlcm4gU3RhbmRhcmQgVGltZVxuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgeyBmb3JtYXQ6IFwibG9uZ1wiLCBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZSB9KTtcbiAgICAgICAgICAvLyB6b25lXG4gICAgICAgICAgY2FzZSBcInpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmVOYW1lO1xuICAgICAgICAgIC8vIG1lcmlkaWVtc1xuICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICByZXR1cm4gbWVyaWRpZW0oKTtcbiAgICAgICAgICAvLyBkYXRlc1xuICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwibnVtZXJpY1wiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5KTtcbiAgICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IGRheTogXCIyLWRpZ2l0XCIgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXksIDIpO1xuICAgICAgICAgIC8vIHdlZWtkYXlzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcbiAgICAgICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlc2RheSdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibG9uZ1wiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCB0cnVlKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIGZvcm1hdFxuICAgICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcbiAgICAgICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJzaG9ydFwiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVCdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibmFycm93XCIsIGZhbHNlKTtcbiAgICAgICAgICAvLyBtb250aHMgLSBzdGFuZGFsb25lXG4gICAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxLCBkb2Vzbid0IHNlZW0gdG8gd29ya1xuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwiMi1kaWdpdFwiLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCwgMik7XG4gICAgICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW5cbiAgICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEpcbiAgICAgICAgICAgIHJldHVybiBtb250aChcIm5hcnJvd1wiLCB0cnVlKTtcbiAgICAgICAgICAvLyBtb250aHMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoKTtcbiAgICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFudWFyeVxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibG9uZ1wiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIk1NTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEpcbiAgICAgICAgICAgIHJldHVybiBtb250aChcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8geWVhcnNcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAyMDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIikgOiB0aGlzLm51bShkdC55ZWFyKTtcbiAgICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMTRcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwiMi1kaWdpdFwiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJ5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMTJcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJ5eXl5eXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA2KTtcbiAgICAgICAgICAvLyBlcmFzXG4gICAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQURcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJzaG9ydFwiKTtcbiAgICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQW5ubyBEb21pbmlcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJsb25nXCIpO1xuICAgICAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICAgICAgcmV0dXJuIGVyYShcIm5hcnJvd1wiKTtcbiAgICAgICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrWWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7XG4gICAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrWWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrTnVtYmVyKTtcbiAgICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrTnVtYmVyLCAyKTtcbiAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm9yZGluYWwpO1xuICAgICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsLCAzKTtcbiAgICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQucXVhcnRlcik7XG4gICAgICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQucXVhcnRlciwgMik7XG4gICAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0LnRzIC8gMTAwMCkpO1xuICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQudHMpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVNYWNybyh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCB0b2tlblRvU3RyaW5nKTtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhkdXIsIGZtdCkge1xuICAgIGNvbnN0IHRva2VuVG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7XG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaW51dGVcIjtcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJkYXlcIjtcbiAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwid2Vla1wiO1xuICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtb250aFwiO1xuICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5Ub1N0cmluZyA9IChsaWxkdXIpID0+ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBtYXBwZWQgPSB0b2tlblRvRmllbGQodG9rZW4pO1xuICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGxpbGR1ci5nZXQobWFwcGVkKSwgdG9rZW4ubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2tlbnMgPSBGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSxcbiAgICAgIHJlYWxUb2tlbnMgPSB0b2tlbnMucmVkdWNlKFxuICAgICAgICAoZm91bmQsIHsgbGl0ZXJhbCwgdmFsIH0pID0+IChsaXRlcmFsID8gZm91bmQgOiBmb3VuZC5jb25jYXQodmFsKSksXG4gICAgICAgIFtdXG4gICAgICApLFxuICAgICAgY29sbGFwc2VkID0gZHVyLnNoaWZ0VG8oLi4ucmVhbFRva2Vucy5tYXAodG9rZW5Ub0ZpZWxkKS5maWx0ZXIoKHQpID0+IHQpKTtcbiAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKHRva2VucywgdG9rZW5Ub1N0cmluZyhjb2xsYXBzZWQpKTtcbiAgfVxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWQge1xuICBjb25zdHJ1Y3RvcihyZWFzb24sIGV4cGxhbmF0aW9uKSB7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgdGhpcy5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uO1xuICB9XG5cbiAgdG9NZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmV4cGxhbmF0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5yZWFzb259OiAke3RoaXMuZXhwbGFuYXRpb259YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFpvbmVJc0Fic3RyYWN0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpvbmUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB6b25lLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIG9mZnNldE5hbWUodHMsIG9wdHMpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1pvbmV9IG90aGVyWm9uZSAtIHRoZSB6b25lIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBzaW5nbGV0b24gPSBudWxsO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGxvY2FsIHpvbmUgZm9yIHRoaXMgSmF2YVNjcmlwdCBlbnZpcm9ubWVudC5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeXN0ZW1ab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGxvY2FsIHpvbmVcbiAgICogQHJldHVybiB7U3lzdGVtWm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgaW5zdGFuY2UoKSB7XG4gICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkge1xuICAgICAgc2luZ2xldG9uID0gbmV3IFN5c3RlbVpvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcInN5c3RlbVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQodHMpIHtcbiAgICByZXR1cm4gLW5ldyBEYXRlKHRzKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBwYXJzZVpvbmVJbmZvLCBpc1VuZGVmaW5lZCwgb2JqVG9Mb2NhbFRTIH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IGR0ZkNhY2hlID0ge307XG5mdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt6b25lXSkge1xuICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6IHpvbmUsXG4gICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgIGRheTogXCIyLWRpZ2l0XCIsXG4gICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICBzZWNvbmQ6IFwiMi1kaWdpdFwiLFxuICAgICAgZXJhOiBcInNob3J0XCIsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3pvbmVdO1xufVxuXG5jb25zdCB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGVyYTogMyxcbiAgaG91cjogNCxcbiAgbWludXRlOiA1LFxuICBzZWNvbmQ6IDYsXG59O1xuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csIFwiXCIpLFxuICAgIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKykgKEFEfEJDKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCksXG4gICAgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkO1xuICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTtcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICBjb25zdCBmaWxsZWQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBmb3JtYXR0ZWRbaV07XG4gICAgY29uc3QgcG9zID0gdHlwZVRvUG9zW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJhXCIpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQocG9zKSkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkO1xufVxuXG5sZXQgaWFuYVpvbmVDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElBTkFab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZVxuICAgKiBAcmV0dXJuIHtJQU5BWm9uZX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUobmFtZSkge1xuICAgIGlmICghaWFuYVpvbmVDYWNoZVtuYW1lXSkge1xuICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgbG9jYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBpYW5hWm9uZUNhY2hlID0ge307XG4gICAgZHRmQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIHNwZWNpZmllci4gVGhpcyBvbmx5IGNoZWNrcyB0aGUgc3RyaW5nJ3MgZm9ybWF0LCBub3QgdGhhdCB0aGUgc3BlY2lmaWVyIGlkZW50aWZpZXMgYSBrbm93biB6b25lOyBzZWUgaXNWYWxpZFpvbmUgZm9yIHRoYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvblxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgZm9yIHNvbWUgdmFsaWQgSUFOQSBuYW1lcy4gVXNlIGlzVmFsaWRab25lIGluc3RlYWQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFNwZWNpZmllcihzKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFpvbmUocyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2tcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJBbWVyaWNhL05ld19Zb3JrXCIpIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIkZhbnRhc2lhL0Nhc3RsZVwiKSAvLz0+IGZhbHNlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiU3BvcnR+fmJsb3JwXCIpIC8vPT4gZmFsc2VcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkWm9uZSh6b25lKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHsgdGltZVpvbmU6IHpvbmUgfSkuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBwcml2YXRlICoqL1xuICAgIHRoaXMuem9uZU5hbWUgPSBuYW1lO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnZhbGlkID0gSUFOQVpvbmUuaXNWYWxpZFpvbmUobmFtZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJpYW5hXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKHRzLCB7IGZvcm1hdCwgbG9jYWxlIH0pIHtcbiAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKTtcblxuICAgIGlmIChpc05hTihkYXRlKSkgcmV0dXJuIE5hTjtcblxuICAgIGNvbnN0IGR0ZiA9IG1ha2VEVEYodGhpcy5uYW1lKTtcbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXksIGFkT3JCYywgaG91ciwgbWludXRlLCBzZWNvbmRdID0gZHRmLmZvcm1hdFRvUGFydHNcbiAgICAgID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKVxuICAgICAgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpO1xuXG4gICAgaWYgKGFkT3JCYyA9PT0gXCJCQ1wiKSB7XG4gICAgICB5ZWFyID0gLU1hdGguYWJzKHllYXIpICsgMTtcbiAgICB9XG5cbiAgICAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdFxuICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7XG5cbiAgICBjb25zdCBhc1VUQyA9IG9ialRvTG9jYWxUUyh7XG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXksXG4gICAgICBob3VyOiBhZGp1c3RlZEhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZDogMCxcbiAgICB9KTtcblxuICAgIGxldCBhc1RTID0gK2RhdGU7XG4gICAgY29uc3Qgb3ZlciA9IGFzVFMgJSAxMDAwO1xuICAgIGFzVFMgLT0gb3ZlciA+PSAwID8gb3ZlciA6IDEwMDAgKyBvdmVyO1xuICAgIHJldHVybiAoYXNVVEMgLSBhc1RTKSAvICg2MCAqIDEwMDApO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJpYW5hXCIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBzaWduZWRPZmZzZXQgfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBBIHpvbmUgd2l0aCBhIGZpeGVkIG9mZnNldCAobWVhbmluZyBubyBEU1QpXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRml4ZWRPZmZzZXRab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVVRDXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgdXRjSW5zdGFuY2UoKSB7XG4gICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkge1xuICAgICAgc2luZ2xldG9uID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZSgwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFRoZSBvZmZzZXQgaW4gbWludXRlc1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgaW5zdGFuY2Uob2Zmc2V0KSB7XG4gICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZSA6IG5ldyBGaXhlZE9mZnNldFpvbmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgRml4ZWRPZmZzZXRab25lIGZyb20gYSBVVEMgb2Zmc2V0IHN0cmluZywgbGlrZSBcIlVUQys2XCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgb2Zmc2V0IHN0cmluZyB0byBwYXJzZVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMrNlwiKVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMrMDZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDLTY6MDBcIilcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIHBhcnNlU3BlY2lmaWVyKHMpIHtcbiAgICBpZiAocykge1xuICAgICAgY29uc3QgciA9IHMubWF0Y2goL151dGMoPzooWystXVxcZHsxLDJ9KSg/OjooXFxkezJ9KSk/KT8kL2kpO1xuICAgICAgaWYgKHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaXhlZE9mZnNldFpvbmUoc2lnbmVkT2Zmc2V0KHJbMV0sIHJbMl0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihvZmZzZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLmZpeGVkID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiZml4ZWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZpeGVkID09PSAwID8gXCJVVENcIiA6IGBVVEMke2Zvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBcIm5hcnJvd1wiKX1gO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIGlmICh0aGlzLmZpeGVkID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJFdGMvVVRDXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgRXRjL0dNVCR7Zm9ybWF0T2Zmc2V0KC10aGlzLmZpeGVkLCBcIm5hcnJvd1wiKX1gO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmZpeGVkO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJmaXhlZFwiICYmIG90aGVyWm9uZS5maXhlZCA9PT0gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxuLyoqXG4gKiBBIHpvbmUgdGhhdCBmYWlsZWQgdG8gcGFyc2UuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLlxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWRab25lIGV4dGVuZHMgWm9uZSB7XG4gIGNvbnN0cnVjdG9yKHpvbmVOYW1lKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogIEBwcml2YXRlICovXG4gICAgdGhpcy56b25lTmFtZSA9IHpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaW52YWxpZFwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgIi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSW52YWxpZFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5cbmltcG9ydCB7IGlzVW5kZWZpbmVkLCBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkge1xuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRab25lO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJlZCA9PT0gXCJsb2NhbFwiIHx8IGxvd2VyZWQgPT09IFwic3lzdGVtXCIpIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgICBlbHNlIGlmIChsb3dlcmVkID09PSBcInV0Y1wiIHx8IGxvd2VyZWQgPT09IFwiZ210XCIpIHJldHVybiBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7XG4gICAgZWxzZSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKGxvd2VyZWQpIHx8IElBTkFab25lLmNyZWF0ZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0Lm9mZnNldCAmJiB0eXBlb2YgaW5wdXQub2Zmc2V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gVGhpcyBpcyBkdW1iLCBidXQgdGhlIGluc3RhbmNlb2YgY2hlY2sgYWJvdmUgZG9lc24ndCBzZWVtIHRvIHJlYWxseSB3b3JrXG4gICAgLy8gc28gd2UncmUgZHVjayBjaGVja2luZyBpdFxuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEludmFsaWRab25lKGlucHV0KTtcbiAgfVxufVxuIiwgImltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVab25lIH0gZnJvbSBcIi4vaW1wbC96b25lVXRpbC5qc1wiO1xuXG5sZXQgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSxcbiAgZGVmYXVsdFpvbmUgPSBcInN5c3RlbVwiLFxuICBkZWZhdWx0TG9jYWxlID0gbnVsbCxcbiAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG51bGwsXG4gIHRocm93T25JbnZhbGlkO1xuXG4vKipcbiAqIFNldHRpbmdzIGNvbnRhaW5zIHN0YXRpYyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgY29udHJvbCBMdXhvbidzIG92ZXJhbGwgYmVoYXZpb3IuIEx1eG9uIGlzIGEgc2ltcGxlIGxpYnJhcnkgd2l0aCBmZXcgb3B0aW9ucywgYnV0IHRoZSBvbmVzIGl0IGRvZXMgaGF2ZSBsaXZlIGhlcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgbm93KCkge1xuICAgIHJldHVybiBub3c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC5cbiAgICogVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBudW1iZXIsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gRXBvY2ggbWlsbGlzZWNvbmQgY291bnRcbiAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiBEYXRlLm5vdygpICsgMzAwMCAvLyBwcmV0ZW5kIGl0IGlzIDMgc2Vjb25kcyBpbiB0aGUgZnV0dXJlXG4gICAqIEBleGFtcGxlIFNldHRpbmdzLm5vdyA9ICgpID0+IDAgLy8gYWx3YXlzIHByZXRlbmQgaXQncyBKYW4gMSwgMTk3MCBhdCBtaWRuaWdodCBpbiBVVEMgdGltZVxuICAgKi9cbiAgc3RhdGljIHNldCBub3cobikge1xuICAgIG5vdyA9IG47XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSB0byBjcmVhdGUgRGF0ZVRpbWVzIGluLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBVc2UgdGhlIHZhbHVlIFwic3lzdGVtXCIgdG8gcmVzZXQgdGhpcyB2YWx1ZSB0byB0aGUgc3lzdGVtJ3MgdGltZSB6b25lLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0Wm9uZSh6b25lKSB7XG4gICAgZGVmYXVsdFpvbmUgPSB6b25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgb2JqZWN0IGN1cnJlbnRseSB1c2VkIHRvIGNyZWF0ZSBEYXRlVGltZXMuIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUgKHRoZSBvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIHRoYXQgcnVucyB0aGlzIGNvZGUpLlxuICAgKiBAdHlwZSB7Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFpvbmUoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoZGVmYXVsdFpvbmUsIFN5c3RlbVpvbmUuaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0TG9jYWxlKCkge1xuICAgIHJldHVybiBkZWZhdWx0TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKGxvY2FsZSkge1xuICAgIGRlZmF1bHRMb2NhbGUgPSBsb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbShudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nU3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPdXRwdXRDYWxlbmRhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKG91dHB1dENhbGVuZGFyKSB7XG4gICAgZGVmYXVsdE91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGdldCB0aHJvd09uSW52YWxpZCgpIHtcbiAgICByZXR1cm4gdGhyb3dPbkludmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIHNldCB0aHJvd09uSW52YWxpZCh0KSB7XG4gICAgdGhyb3dPbkludmFsaWQgPSB0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IEx1eG9uJ3MgZ2xvYmFsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGVzKCkge1xuICAgIExvY2FsZS5yZXNldENhY2hlKCk7XG4gICAgSUFOQVpvbmUucmVzZXRDYWNoZSgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcGFkU3RhcnQsIHJvdW5kVG8sIGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0ICogYXMgRW5nbGlzaCBmcm9tIFwiLi9lbmdsaXNoLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4uL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5cbi8vIHRvZG8gLSByZW1hcCBjYWNoaW5nXG5cbmxldCBpbnRsTEZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkTEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bExGQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bExGQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuICByZXR1cm4gZHRmO1xufVxuXG5sZXQgaW50bERUQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZERURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBkdGYgPSBpbnRsRFRDYWNoZVtrZXldO1xuICBpZiAoIWR0Zikge1xuICAgIGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bERUQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuICByZXR1cm4gZHRmO1xufVxuXG5sZXQgaW50bE51bUNhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRJTkYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgaW5mID0gaW50bE51bUNhY2hlW2tleV07XG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bE51bUNhY2hlW2tleV0gPSBpbmY7XG4gIH1cbiAgcmV0dXJuIGluZjtcbn1cblxubGV0IGludGxSZWxDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkUlRGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYmFzZSwgLi4uY2FjaGVLZXlPcHRzIH0gPSBvcHRzOyAvLyBleGNsdWRlIGBiYXNlYCBmcm9tIHRoZSBvcHRpb25zXG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIGNhY2hlS2V5T3B0c10pO1xuICBsZXQgaW5mID0gaW50bFJlbENhY2hlW2tleV07XG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bFJlbENhY2hlW2tleV0gPSBpbmY7XG4gIH1cbiAgcmV0dXJuIGluZjtcbn1cblxubGV0IHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbmZ1bmN0aW9uIHN5c3RlbUxvY2FsZSgpIHtcbiAgaWYgKHN5c0xvY2FsZUNhY2hlKSB7XG4gICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlO1xuICB9IGVsc2Uge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7XG4gICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlU3RyaW5nKGxvY2FsZVN0cikge1xuICAvLyBJIHJlYWxseSB3YW50IHRvIGF2b2lkIHdyaXRpbmcgYSBCQ1AgNDcgcGFyc2VyXG4gIC8vIHNlZSwgZS5nLiBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL2JjcC00N1xuICAvLyBJbnN0ZWFkLCB3ZSdsbCBkbyB0aGlzOlxuXG4gIC8vIGEpIGlmIHRoZSBzdHJpbmcgaGFzIG5vIC11IGV4dGVuc2lvbnMsIGp1c3QgbGVhdmUgaXQgYWxvbmVcbiAgLy8gYikgaWYgaXQgZG9lcywgdXNlIEludGwgdG8gcmVzb2x2ZSBldmVyeXRoaW5nXG4gIC8vIGMpIGlmIEludGwgZmFpbHMsIHRyeSBhZ2FpbiB3aXRob3V0IHRoZSAtdVxuXG4gIGNvbnN0IHVJbmRleCA9IGxvY2FsZVN0ci5pbmRleE9mKFwiLXUtXCIpO1xuICBpZiAodUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBbbG9jYWxlU3RyXTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBjb25zdCBzbWFsbGVyID0gbG9jYWxlU3RyLnN1YnN0cmluZygwLCB1SW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKGxvY2FsZVN0cikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihzbWFsbGVyKS5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG51bWJlcmluZ1N5c3RlbSwgY2FsZW5kYXIgfSA9IG9wdGlvbnM7XG4gICAgLy8gcmV0dXJuIHRoZSBzbWFsbGVyIG9uZSBzbyB0aGF0IHdlIGNhbiBhcHBlbmQgdGhlIGNhbGVuZGFyIGFuZCBudW1iZXJpbmcgb3ZlcnJpZGVzIHRvIGl0XG4gICAgcmV0dXJuIFtzbWFsbGVyLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRsQ29uZmlnU3RyaW5nKGxvY2FsZVN0ciwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikge1xuICBpZiAob3V0cHV0Q2FsZW5kYXIgfHwgbnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgbG9jYWxlU3RyICs9IFwiLXVcIjtcblxuICAgIGlmIChvdXRwdXRDYWxlbmRhcikge1xuICAgICAgbG9jYWxlU3RyICs9IGAtY2EtJHtvdXRwdXRDYWxlbmRhcn1gO1xuICAgIH1cblxuICAgIGlmIChudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLW51LSR7bnVtYmVyaW5nU3lzdGVtfWA7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvY2FsZVN0cjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBNb250aHMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgY29uc3QgZHQgPSBEYXRlVGltZS51dGMoMjAxNiwgaSwgMSk7XG4gICAgbXMucHVzaChmKGR0KSk7XG4gIH1cbiAgcmV0dXJuIG1zO1xufVxuXG5mdW5jdGlvbiBtYXBXZWVrZGF5cyhmKSB7XG4gIGNvbnN0IG1zID0gW107XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IDc7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMyArIGkpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbGlzdFN0dWZmKGxvYywgbGVuZ3RoLCBkZWZhdWx0T0ssIGVuZ2xpc2hGbiwgaW50bEZuKSB7XG4gIGNvbnN0IG1vZGUgPSBsb2MubGlzdGluZ01vZGUoZGVmYXVsdE9LKTtcblxuICBpZiAobW9kZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJlblwiKSB7XG4gICAgcmV0dXJuIGVuZ2xpc2hGbihsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0Zhc3ROdW1iZXJzKGxvYykge1xuICBpZiAobG9jLm51bWJlcmluZ1N5c3RlbSAmJiBsb2MubnVtYmVyaW5nU3lzdGVtICE9PSBcImxhdG5cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgbG9jLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIgfHxcbiAgICAgICFsb2MubG9jYWxlIHx8XG4gICAgICBsb2MubG9jYWxlLnN0YXJ0c1dpdGgoXCJlblwiKSB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jLmludGwpLnJlc29sdmVkT3B0aW9ucygpLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCJcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5TnVtYmVyRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgZm9yY2VTaW1wbGUsIG9wdHMpIHtcbiAgICB0aGlzLnBhZFRvID0gb3B0cy5wYWRUbyB8fCAwO1xuICAgIHRoaXMuZmxvb3IgPSBvcHRzLmZsb29yIHx8IGZhbHNlO1xuXG4gICAgY29uc3QgeyBwYWRUbywgZmxvb3IsIC4uLm90aGVyT3B0cyB9ID0gb3B0cztcblxuICAgIGlmICghZm9yY2VTaW1wbGUgfHwgT2JqZWN0LmtleXMob3RoZXJPcHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpbnRsT3B0cyA9IHsgdXNlR3JvdXBpbmc6IGZhbHNlLCAuLi5vcHRzIH07XG4gICAgICBpZiAob3B0cy5wYWRUbyA+IDApIGludGxPcHRzLm1pbmltdW1JbnRlZ2VyRGlnaXRzID0gb3B0cy5wYWRUbztcbiAgICAgIHRoaXMuaW5mID0gZ2V0Q2FjaGVkSU5GKGludGwsIGludGxPcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoaSkge1xuICAgIGlmICh0aGlzLmluZikge1xuICAgICAgY29uc3QgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7XG4gICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHNcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiByb3VuZFRvKGksIDMpO1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KGZpeGVkLCB0aGlzLnBhZFRvKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNsYXNzIFBvbHlEYXRlRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoZHQsIGludGwsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuXG4gICAgbGV0IHo7XG4gICAgaWYgKGR0LnpvbmUuaXNVbml2ZXJzYWwpIHtcbiAgICAgIC8vIFVUQy04IG9yIEV0Yy9VVEMtOCBhcmUgbm90IHBhcnQgb2YgdHpkYXRhLCBvbmx5IEV0Yy9HTVQrOCBhbmQgdGhlIGxpa2UuXG4gICAgICAvLyBUaGF0IGlzIHdoeSBmaXhlZC1vZmZzZXQgVFogaXMgc2V0IHRvIHRoYXQgdW5sZXNzIGl0IGlzOlxuICAgICAgLy8gMS4gUmVwcmVzZW50aW5nIG9mZnNldCAwIHdoZW4gVVRDIGlzIHVzZWQgdG8gbWFpbnRhaW4gcHJldmlvdXMgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGJlY29tZSBHTVQuXG4gICAgICAvLyAyLiBVbnN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcjpcbiAgICAgIC8vICAgIC0gc29tZSBkbyBub3Qgc3VwcG9ydCBFdGMvXG4gICAgICAvLyAgICAtIDwgRXRjL0dNVC0xNCwgPiBFdGMvR01UKzEyLCBhbmQgMzAtbWludXRlIG9yIDQ1LW1pbnV0ZSBvZmZzZXRzIGFyZSBub3QgcGFydCBvZiB0emRhdGFcbiAgICAgIGNvbnN0IGdtdE9mZnNldCA9IC0xICogKGR0Lm9mZnNldCAvIDYwKTtcbiAgICAgIGNvbnN0IG9mZnNldFogPSBnbXRPZmZzZXQgPj0gMCA/IGBFdGMvR01UKyR7Z210T2Zmc2V0fWAgOiBgRXRjL0dNVCR7Z210T2Zmc2V0fWA7XG4gICAgICBpZiAoZHQub2Zmc2V0ICE9PSAwICYmIElBTkFab25lLmNyZWF0ZShvZmZzZXRaKS52YWxpZCkge1xuICAgICAgICB6ID0gb2Zmc2V0WjtcbiAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm90IGFsbCBmaXhlZC1vZmZzZXQgem9uZXMgbGlrZSBFdGMvKzQ6MzAgYXJlIHByZXNlbnQgaW4gdHpkYXRhLlxuICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIG1ha2UgZG8uIFR3byBjYXNlczpcbiAgICAgICAgLy8gMS4gVGhlIGZvcm1hdCBvcHRpb25zIHRlbGwgdXMgdG8gc2hvdyB0aGUgem9uZS4gV2UgY2FuJ3QgZG8gdGhhdCwgc28gdGhlIGJlc3RcbiAgICAgICAgLy8gd2UgY2FuIGRvIGlzIGZvcm1hdCB0aGUgZGF0ZSBpbiBVVEMuXG4gICAgICAgIC8vIDIuIFRoZSBmb3JtYXQgb3B0aW9ucyBkb24ndCB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFRoZW4gd2UgY2FuIGFkanVzdCB0aGVtXG4gICAgICAgIC8vIHRoZSB0aW1lIGFuZCB0ZWxsIHRoZSBmb3JtYXR0ZXIgdG8gc2hvdyBpdCB0byB1cyBpbiBVVEMsIHNvIHRoYXQgdGhlIHRpbWUgaXMgcmlnaHRcbiAgICAgICAgLy8gYW5kIHRoZSBiYWQgem9uZSBkb2Vzbid0IHNob3cgdXAuXG4gICAgICAgIHogPSBcIlVUQ1wiO1xuICAgICAgICBpZiAob3B0cy50aW1lWm9uZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0Lm9mZnNldCA9PT0gMCA/IGR0IDogRGF0ZVRpbWUuZnJvbU1pbGxpcyhkdC50cyArIGR0Lm9mZnNldCAqIDYwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGR0LnpvbmUudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICB6ID0gZHQuem9uZS5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGludGxPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBpZiAoeikge1xuICAgICAgaW50bE9wdHMudGltZVpvbmUgPSB6O1xuICAgIH1cbiAgICB0aGlzLmR0ZiA9IGdldENhY2hlZERURihpbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICBmb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0VG9QYXJ0cyh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBvbHlSZWxGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBpc0VuZ2xpc2gsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSB7IHN0eWxlOiBcImxvbmdcIiwgLi4ub3B0cyB9O1xuICAgIGlmICghaXNFbmdsaXNoICYmIGhhc1JlbGF0aXZlKCkpIHtcbiAgICAgIHRoaXMucnRmID0gZ2V0Q2FjaGVkUlRGKGludGwsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChjb3VudCwgdW5pdCkge1xuICAgIGlmICh0aGlzLnJ0Zikge1xuICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFbmdsaXNoLmZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgdGhpcy5vcHRzLm51bWVyaWMsIHRoaXMub3B0cy5zdHlsZSAhPT0gXCJsb25nXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxlIHtcbiAgc3RhdGljIGZyb21PcHRzKG9wdHMpIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShvcHRzLmxvY2FsZSwgb3B0cy5udW1iZXJpbmdTeXN0ZW0sIG9wdHMub3V0cHV0Q2FsZW5kYXIsIG9wdHMuZGVmYXVsdFRvRU4pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIsIGRlZmF1bHRUb0VOID0gZmFsc2UpIHtcbiAgICBjb25zdCBzcGVjaWZpZWRMb2NhbGUgPSBsb2NhbGUgfHwgU2V0dGluZ3MuZGVmYXVsdExvY2FsZTtcbiAgICAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuIHJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0c1xuICAgIGNvbnN0IGxvY2FsZVIgPSBzcGVjaWZpZWRMb2NhbGUgfHwgKGRlZmF1bHRUb0VOID8gXCJlbi1VU1wiIDogc3lzdGVtTG9jYWxlKCkpO1xuICAgIGNvbnN0IG51bWJlcmluZ1N5c3RlbVIgPSBudW1iZXJpbmdTeXN0ZW0gfHwgU2V0dGluZ3MuZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgICBjb25zdCBvdXRwdXRDYWxlbmRhclIgPSBvdXRwdXRDYWxlbmRhciB8fCBTZXR0aW5ncy5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGUobG9jYWxlUiwgbnVtYmVyaW5nU3lzdGVtUiwgb3V0cHV0Q2FsZW5kYXJSLCBzcGVjaWZpZWRMb2NhbGUpO1xuICB9XG5cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsO1xuICAgIGludGxEVENhY2hlID0ge307XG4gICAgaW50bE51bUNhY2hlID0ge307XG4gICAgaW50bFJlbENhY2hlID0ge307XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdCh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhciB9ID0ge30pIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBudW1iZXJpbmcsIG91dHB1dENhbGVuZGFyLCBzcGVjaWZpZWRMb2NhbGUpIHtcbiAgICBjb25zdCBbcGFyc2VkTG9jYWxlLCBwYXJzZWROdW1iZXJpbmdTeXN0ZW0sIHBhcnNlZE91dHB1dENhbGVuZGFyXSA9IHBhcnNlTG9jYWxlU3RyaW5nKGxvY2FsZSk7XG5cbiAgICB0aGlzLmxvY2FsZSA9IHBhcnNlZExvY2FsZTtcbiAgICB0aGlzLm51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZyB8fCBwYXJzZWROdW1iZXJpbmdTeXN0ZW0gfHwgbnVsbDtcbiAgICB0aGlzLm91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXIgfHwgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgfHwgbnVsbDtcbiAgICB0aGlzLmludGwgPSBpbnRsQ29uZmlnU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLm51bWJlcmluZ1N5c3RlbSwgdGhpcy5vdXRwdXRDYWxlbmRhcik7XG5cbiAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tb250aHNDYWNoZSA9IHsgZm9ybWF0OiB7fSwgc3RhbmRhbG9uZToge30gfTtcbiAgICB0aGlzLm1lcmlkaWVtQ2FjaGUgPSBudWxsO1xuICAgIHRoaXMuZXJhQ2FjaGUgPSB7fTtcblxuICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlO1xuICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGZhc3ROdW1iZXJzKCkge1xuICAgIGlmICh0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID09IG51bGwpIHtcbiAgICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBzdXBwb3J0c0Zhc3ROdW1iZXJzKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkO1xuICB9XG5cbiAgbGlzdGluZ01vZGUoKSB7XG4gICAgY29uc3QgaXNBY3R1YWxseUVuID0gdGhpcy5pc0VuZ2xpc2goKTtcbiAgICBjb25zdCBoYXNOb1dlaXJkbmVzcyA9XG4gICAgICAodGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG51bGwgfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiKSAmJlxuICAgICAgKHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG51bGwgfHwgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gXCJncmVnb3J5XCIpO1xuICAgIHJldHVybiBpc0FjdHVhbGx5RW4gJiYgaGFzTm9XZWlyZG5lc3MgPyBcImVuXCIgOiBcImludGxcIjtcbiAgfVxuXG4gIGNsb25lKGFsdHMpIHtcbiAgICBpZiAoIWFsdHMgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUoXG4gICAgICAgIGFsdHMubG9jYWxlIHx8IHRoaXMuc3BlY2lmaWVkTG9jYWxlLFxuICAgICAgICBhbHRzLm51bWJlcmluZ1N5c3RlbSB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgYWx0cy5vdXRwdXRDYWxlbmRhciB8fCB0aGlzLm91dHB1dENhbGVuZGFyLFxuICAgICAgICBhbHRzLmRlZmF1bHRUb0VOIHx8IGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlZGVmYXVsdFRvRU4oYWx0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi5hbHRzLCBkZWZhdWx0VG9FTjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlZGVmYXVsdFRvU3lzdGVtKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IGZhbHNlIH0pO1xuICB9XG5cbiAgbW9udGhzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLm1vbnRocywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IGZvcm1hdCA/IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9IDogeyBtb250aDogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBNb250aHMoKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwibW9udGhcIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgd2Vla2RheXMobGVuZ3RoLCBmb3JtYXQgPSBmYWxzZSwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2gud2Vla2RheXMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXRcbiAgICAgICAgICA/IHsgd2Vla2RheTogbGVuZ3RoLCB5ZWFyOiBcIm51bWVyaWNcIiwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH1cbiAgICAgICAgICA6IHsgd2Vla2RheTogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwV2Vla2RheXMoKGR0KSA9PlxuICAgICAgICAgIHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJ3ZWVrZGF5XCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1lcmlkaWVtcyhkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZihcbiAgICAgIHRoaXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0T0ssXG4gICAgICAoKSA9PiBFbmdsaXNoLm1lcmlkaWVtcyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gSW4gdGhlb3J5IHRoZXJlIGNvdWxkIGJlIGFyaWJpdHJhcnkgZGF5IHBlcmlvZHMuIFdlJ3JlIGdvbm5hIGFzc3VtZSB0aGVyZSBhcmUgZXhhY3RseSB0d29cbiAgICAgICAgLy8gZm9yIEFNIGFuZCBQTS4gVGhpcyBpcyBwcm9iYWJseSB3cm9uZywgYnV0IGl0J3MgbWFrZXMgcGFyc2luZyB3YXkgZWFzaWVyLlxuICAgICAgICBpZiAoIXRoaXMubWVyaWRpZW1DYWNoZSkge1xuICAgICAgICAgIGNvbnN0IGludGwgPSB7IGhvdXI6IFwibnVtZXJpY1wiLCBob3VyQ3ljbGU6IFwiaDEyXCIgfTtcbiAgICAgICAgICB0aGlzLm1lcmlkaWVtQ2FjaGUgPSBbRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgOSksIERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDE5KV0ubWFwKFxuICAgICAgICAgICAgKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZGF5cGVyaW9kXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1lcmlkaWVtQ2FjaGU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGVyYXMobGVuZ3RoLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5lcmFzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0geyBlcmE6IGxlbmd0aCB9O1xuXG4gICAgICAvLyBUaGlzIGlzIHByb2JsZW1hdGljLiBEaWZmZXJlbnQgY2FsZW5kYXJzIGFyZSBnb2luZyB0byBkZWZpbmUgZXJhcyB0b3RhbGx5IGRpZmZlcmVudGx5LiBXaGF0IEkgbmVlZCBpcyB0aGUgbWluaW11bSBzZXQgb2YgZGF0ZXNcbiAgICAgIC8vIHRvIGRlZmluaXRlbHkgZW51bWVyYXRlIHRoZW0uXG4gICAgICBpZiAoIXRoaXMuZXJhQ2FjaGVbbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZXJhXCIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmVyYUNhY2hlW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSxcbiAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksXG4gICAgICBtYXRjaGluZyA9IHJlc3VsdHMuZmluZCgobSkgPT4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkKTtcbiAgICByZXR1cm4gbWF0Y2hpbmcgPyBtYXRjaGluZy52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBudW1iZXJGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgLy8gdGhpcyBmb3JjZXNpbXBsZSBvcHRpb24gaXMgbmV2ZXIgdXNlZCAodGhlIG9ubHkgY2FsbGVyIHNob3J0LWNpcmN1aXRzIG9uIGl0LCBidXQgaXQgc2VlbXMgc2FmZXIgdG8gbGVhdmUpXG4gICAgLy8gKGluIGNvbnRyYXN0LCB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9uIGlzIHVzZWQgaGVhdmlseSlcbiAgICByZXR1cm4gbmV3IFBvbHlOdW1iZXJGb3JtYXR0ZXIodGhpcy5pbnRsLCBvcHRzLmZvcmNlU2ltcGxlIHx8IHRoaXMuZmFzdE51bWJlcnMsIG9wdHMpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTtcbiAgfVxuXG4gIHJlbEZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTtcbiAgfVxuXG4gIGxpc3RGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7XG4gIH1cblxuICBpc0VuZ2xpc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBcImVuXCIgfHxcbiAgICAgIHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCkgPT09IFwiZW4tdXNcIiB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUuc3RhcnRzV2l0aChcImVuLXVzXCIpXG4gICAgKTtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gb3RoZXIubG9jYWxlICYmXG4gICAgICB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gb3RoZXIubnVtYmVyaW5nU3lzdGVtICYmXG4gICAgICB0aGlzLm91dHB1dENhbGVuZGFyID09PSBvdGhlci5vdXRwdXRDYWxlbmRhclxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICB1bnRydW5jYXRlWWVhcixcbiAgc2lnbmVkT2Zmc2V0LFxuICBwYXJzZUludGVnZXIsXG4gIHBhcnNlTWlsbGlzLFxuICBpYW5hUmVnZXgsXG4gIGlzVW5kZWZpbmVkLFxuICBwYXJzZUZsb2F0aW5nXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5cbi8qXG4gKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOlxuICogVHdvIHRoaW5ncyBnbyBpbnRvIHBhcnNpbmc6IGEgcmVnZXggdG8gbWF0Y2ggd2l0aCBhbmQgYW4gZXh0cmFjdG9yIHRvIHRha2UgYXBhcnQgdGhlIGdyb3VwcyBpbiB0aGUgbWF0Y2guXG4gKiBBbiBleHRyYWN0b3IgaXMganVzdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWdleCBtYXRjaCBhcnJheSBhbmQgcmV0dXJucyBhIHsgeWVhcjogLi4uLCBtb250aDogLi4uIH0gb2JqZWN0XG4gKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS5cbiAqIEV4dHJhY3RvcnMgY2FuIHRha2UgYSBcImN1cnNvclwiIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0IGluIHRoZSBtYXRjaCB0byBsb29rIGF0LiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gY29tYmluZSBleHRyYWN0b3JzLlxuICogY29tYmluZUV4dHJhY3RvcnMoKSBkb2VzIHRoZSB3b3JrIG9mIGNvbWJpbmluZyB0aGVtLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjdXJzb3IgdGhyb3VnaCBtdWx0aXBsZSBleHRyYWN0aW9ucy5cbiAqIFNvbWUgZXh0cmFjdGlvbnMgYXJlIHN1cGVyIGR1bWIgYW5kIHNpbXBsZVBhcnNlIGFuZCBmcm9tU3RyaW5ncyBoZWxwIERSWSB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKC4uLnJlZ2V4ZXMpIHtcbiAgY29uc3QgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKChmLCByKSA9PiBmICsgci5zb3VyY2UsIFwiXCIpO1xuICByZXR1cm4gUmVnRXhwKGBeJHtmdWxsfSRgKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUV4dHJhY3RvcnMoLi4uZXh0cmFjdG9ycykge1xuICByZXR1cm4gbSA9PlxuICAgIGV4dHJhY3RvcnNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbbWVyZ2VkVmFscywgbWVyZ2VkWm9uZSwgY3Vyc29yXSwgZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBbdmFsLCB6b25lLCBuZXh0XSA9IGV4KG0sIGN1cnNvcik7XG4gICAgICAgICAgcmV0dXJuIFt7IC4uLm1lcmdlZFZhbHMsIC4uLnZhbCB9LCB6b25lIHx8IG1lcmdlZFpvbmUsIG5leHRdO1xuICAgICAgICB9LFxuICAgICAgICBbe30sIG51bGwsIDFdXG4gICAgICApXG4gICAgICAuc2xpY2UoMCwgMik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHMsIC4uLnBhdHRlcm5zKSB7XG4gIGlmIChzID09IG51bGwpIHtcbiAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcmVnZXgsIGV4dHJhY3Rvcl0gb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gcmVnZXguZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIGV4dHJhY3RvcihtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtudWxsLCBudWxsXTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlUGFyc2UoLi4ua2V5cykge1xuICByZXR1cm4gKG1hdGNoLCBjdXJzb3IpID0+IHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRba2V5c1tpXV0gPSBwYXJzZUludGVnZXIobWF0Y2hbY3Vyc29yICsgaV0pO1xuICAgIH1cbiAgICByZXR1cm4gW3JldCwgbnVsbCwgY3Vyc29yICsgaV07XG4gIH07XG59XG5cbi8vIElTTyBhbmQgU1FMIHBhcnNpbmdcbmNvbnN0IG9mZnNldFJlZ2V4ID0gLyg/OihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8pLztcbmNvbnN0IGlzb0V4dGVuZGVkWm9uZSA9IGAoPzoke29mZnNldFJlZ2V4LnNvdXJjZX0/KD86XFxcXFsoJHtpYW5hUmVnZXguc291cmNlfSlcXFxcXSk/KT9gO1xuY29uc3QgaXNvVGltZUJhc2VSZWdleCA9IC8oXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Wy4sXShcXGR7MSwzMH0pKT8pPyk/LztcbmNvbnN0IGlzb1RpbWVSZWdleCA9IFJlZ0V4cChgJHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0ke2lzb0V4dGVuZGVkWm9uZX1gKTtcbmNvbnN0IGlzb1RpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86VCR7aXNvVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuY29uc3QgaXNvWW1kUmVnZXggPSAvKFsrLV1cXGR7Nn18XFxkezR9KSg/Oi0/KFxcZFxcZCkoPzotPyhcXGRcXGQpKT8pPy87XG5jb25zdCBpc29XZWVrUmVnZXggPSAvKFxcZHs0fSktP1coXFxkXFxkKSg/Oi0/KFxcZCkpPy87XG5jb25zdCBpc29PcmRpbmFsUmVnZXggPSAvKFxcZHs0fSktPyhcXGR7M30pLztcbmNvbnN0IGV4dHJhY3RJU09XZWVrRGF0YSA9IHNpbXBsZVBhcnNlKFwid2Vla1llYXJcIiwgXCJ3ZWVrTnVtYmVyXCIsIFwid2Vla0RheVwiKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0YSA9IHNpbXBsZVBhcnNlKFwieWVhclwiLCBcIm9yZGluYWxcIik7XG5jb25zdCBzcWxZbWRSZWdleCA9IC8oXFxkezR9KS0oXFxkXFxkKS0oXFxkXFxkKS87IC8vIGR1bWJlZC1kb3duIHZlcnNpb24gb2YgdGhlIElTTyBvbmVcbmNvbnN0IHNxbFRpbWVSZWdleCA9IFJlZ0V4cChcbiAgYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9ID8oPzoke29mZnNldFJlZ2V4LnNvdXJjZX18KCR7aWFuYVJlZ2V4LnNvdXJjZX0pKT9gXG4pO1xuY29uc3Qgc3FsVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzogJHtzcWxUaW1lUmVnZXguc291cmNlfSk/YCk7XG5cbmZ1bmN0aW9uIGludChtYXRjaCwgcG9zLCBmYWxsYmFjaykge1xuICBjb25zdCBtID0gbWF0Y2hbcG9zXTtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKG0pID8gZmFsbGJhY2sgOiBwYXJzZUludGVnZXIobSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJU09ZbWQobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHllYXI6IGludChtYXRjaCwgY3Vyc29yKSxcbiAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSxcbiAgICBkYXk6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMSlcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaG91cnM6IGludChtYXRjaCwgY3Vyc29yLCAwKSxcbiAgICBtaW51dGVzOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDApLFxuICAgIHNlY29uZHM6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiBwYXJzZU1pbGxpcyhtYXRjaFtjdXJzb3IgKyAzXSlcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDRdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPT2Zmc2V0KG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgbG9jYWwgPSAhbWF0Y2hbY3Vyc29yXSAmJiAhbWF0Y2hbY3Vyc29yICsgMV0sXG4gICAgZnVsbE9mZnNldCA9IHNpZ25lZE9mZnNldChtYXRjaFtjdXJzb3IgKyAxXSwgbWF0Y2hbY3Vyc29yICsgMl0pLFxuICAgIHpvbmUgPSBsb2NhbCA/IG51bGwgOiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoZnVsbE9mZnNldCk7XG4gIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SUFOQVpvbmUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCB6b25lID0gbWF0Y2hbY3Vyc29yXSA/IElBTkFab25lLmNyZWF0ZShtYXRjaFtjdXJzb3JdKSA6IG51bGw7XG4gIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDFdO1xufVxuXG4vLyBJU08gdGltZSBwYXJzaW5nXG5cbmNvbnN0IGlzb1RpbWVPbmx5ID0gUmVnRXhwKGBeVD8ke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSRgKTtcblxuLy8gSVNPIGR1cmF0aW9uIHBhcnNpbmdcblxuY29uc3QgaXNvRHVyYXRpb24gPSAvXi0/UCg/Oig/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVkpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KU0pPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVcpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KUQpPyg/OlQoPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylIKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0pKD86Wy4sXSgtP1xcZHsxLDIwfSkpP1MpPyk/KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0SVNPRHVyYXRpb24obWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgIHMsXG4gICAgeWVhclN0cixcbiAgICBtb250aFN0cixcbiAgICB3ZWVrU3RyLFxuICAgIGRheVN0cixcbiAgICBob3VyU3RyLFxuICAgIG1pbnV0ZVN0cixcbiAgICBzZWNvbmRTdHIsXG4gICAgbWlsbGlzZWNvbmRzU3RyXG4gIF0gPSBtYXRjaDtcblxuICBjb25zdCBoYXNOZWdhdGl2ZVByZWZpeCA9IHNbMF0gPT09IFwiLVwiO1xuICBjb25zdCBuZWdhdGl2ZVNlY29uZHMgPSBzZWNvbmRTdHIgJiYgc2Vjb25kU3RyWzBdID09PSBcIi1cIjtcblxuICBjb25zdCBtYXliZU5lZ2F0ZSA9IChudW0sIGZvcmNlID0gZmFsc2UpID0+XG4gICAgbnVtICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IChudW0gJiYgaGFzTmVnYXRpdmVQcmVmaXgpKSA/IC1udW0gOiBudW07XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB5ZWFyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh5ZWFyU3RyKSksXG4gICAgICBtb250aHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcobW9udGhTdHIpKSxcbiAgICAgIHdlZWtzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHdlZWtTdHIpKSxcbiAgICAgIGRheXM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoZGF5U3RyKSksXG4gICAgICBob3VyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhob3VyU3RyKSksXG4gICAgICBtaW51dGVzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1pbnV0ZVN0cikpLFxuICAgICAgc2Vjb25kczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhzZWNvbmRTdHIpLCBzZWNvbmRTdHIgPT09IFwiLTBcIiksXG4gICAgICBtaWxsaXNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlTWlsbGlzKG1pbGxpc2Vjb25kc1N0ciksIG5lZ2F0aXZlU2Vjb25kcylcbiAgICB9XG4gIF07XG59XG5cbi8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9ya1xuLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlblxuLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXRcbmNvbnN0IG9ic09mZnNldHMgPSB7XG4gIEdNVDogMCxcbiAgRURUOiAtNCAqIDYwLFxuICBFU1Q6IC01ICogNjAsXG4gIENEVDogLTUgKiA2MCxcbiAgQ1NUOiAtNiAqIDYwLFxuICBNRFQ6IC02ICogNjAsXG4gIE1TVDogLTcgKiA2MCxcbiAgUERUOiAtNyAqIDYwLFxuICBQU1Q6IC04ICogNjBcbn07XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB5ZWFyOiB5ZWFyU3RyLmxlbmd0aCA9PT0gMiA/IHVudHJ1bmNhdGVZZWFyKHBhcnNlSW50ZWdlcih5ZWFyU3RyKSkgOiBwYXJzZUludGVnZXIoeWVhclN0ciksXG4gICAgbW9udGg6IEVuZ2xpc2gubW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0cikgKyAxLFxuICAgIGRheTogcGFyc2VJbnRlZ2VyKGRheVN0ciksXG4gICAgaG91cjogcGFyc2VJbnRlZ2VyKGhvdXJTdHIpLFxuICAgIG1pbnV0ZTogcGFyc2VJbnRlZ2VyKG1pbnV0ZVN0cilcbiAgfTtcblxuICBpZiAoc2Vjb25kU3RyKSByZXN1bHQuc2Vjb25kID0gcGFyc2VJbnRlZ2VyKHNlY29uZFN0cik7XG4gIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgcmVzdWx0LndlZWtkYXkgPVxuICAgICAgd2Vla2RheVN0ci5sZW5ndGggPiAzXG4gICAgICAgID8gRW5nbGlzaC53ZWVrZGF5c0xvbmcuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDFcbiAgICAgICAgOiBFbmdsaXNoLndlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBSRkMgMjgyMi81MzIyXG5jb25zdCByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSxcXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KD86KFsrLV1cXGRcXGQpKFxcZFxcZCkpKSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMjgyMihtYXRjaCkge1xuICBjb25zdCBbXG4gICAgICAsXG4gICAgICB3ZWVrZGF5U3RyLFxuICAgICAgZGF5U3RyLFxuICAgICAgbW9udGhTdHIsXG4gICAgICB5ZWFyU3RyLFxuICAgICAgaG91clN0cixcbiAgICAgIG1pbnV0ZVN0cixcbiAgICAgIHNlY29uZFN0cixcbiAgICAgIG9ic09mZnNldCxcbiAgICAgIG1pbE9mZnNldCxcbiAgICAgIG9mZkhvdXJTdHIsXG4gICAgICBvZmZNaW51dGVTdHJcbiAgICBdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChvYnNPZmZzZXQpIHtcbiAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gIH0gZWxzZSBpZiAobWlsT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzdWx0LCBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCldO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvKFxcc1xccyspL2csIFwiIFwiKVxuICAgIC50cmltKCk7XG59XG5cbi8vIGh0dHAgZGF0ZVxuXG5jb25zdCByZmMxMTIzID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSwgKFxcZFxcZCkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXFxkezR9KSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgcmZjODUwID0gL14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXFxkXFxkKS0oSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpLShcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIEdNVCQvLFxuICBhc2NpaSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxcZHxcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIChcXGR7NH0pJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMxMTIzT3I4NTAobWF0Y2gpIHtcbiAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHJdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCB5ZWFyU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmNvbnN0IGlzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29ZbWRSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvV2Vla1JlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29UaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1RpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09ZbWQsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1dlZWtEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPT3JkaW5hbERhdGEsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG4vKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSxcbiAgICBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3JmYzExMjMsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFthc2NpaSwgZXh0cmFjdEFTQ0lJXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EdXJhdGlvbihzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pO1xufVxuXG5jb25zdCBleHRyYWN0SVNPVGltZU9ubHkgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTT1RpbWVPbmx5KHMpIHtcbiAgcmV0dXJuIHBhcnNlKHMsIFtpc29UaW1lT25seSwgZXh0cmFjdElTT1RpbWVPbmx5XSk7XG59XG5cbmNvbnN0IHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTtcblxuY29uc3QgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTUUwocykge1xuICByZXR1cm4gcGFyc2UoXG4gICAgcyxcbiAgICBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLFxuICAgIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV1cbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW52YWxpZER1cmF0aW9uRXJyb3IsIEludmFsaWRVbml0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ltcGwvaW52YWxpZC5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHsgcGFyc2VJU09EdXJhdGlvbiwgcGFyc2VJU09UaW1lT25seSB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7XG4gIGFzTnVtYmVyLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaXNOdW1iZXIsXG4gIGlzVW5kZWZpbmVkLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRHVyYXRpb25cIjtcblxuLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IGxvd09yZGVyTWF0cml4ID0ge1xuICAgIHdlZWtzOiB7XG4gICAgICBkYXlzOiA3LFxuICAgICAgaG91cnM6IDcgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBkYXlzOiB7XG4gICAgICBob3VyczogMjQsXG4gICAgICBtaW51dGVzOiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgaG91cnM6IHsgbWludXRlczogNjAsIHNlY29uZHM6IDYwICogNjAsIG1pbGxpc2Vjb25kczogNjAgKiA2MCAqIDEwMDAgfSxcbiAgICBtaW51dGVzOiB7IHNlY29uZHM6IDYwLCBtaWxsaXNlY29uZHM6IDYwICogMTAwMCB9LFxuICAgIHNlY29uZHM6IHsgbWlsbGlzZWNvbmRzOiAxMDAwIH0sXG4gIH0sXG4gIGNhc3VhbE1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IDUyLFxuICAgICAgZGF5czogMzY1LFxuICAgICAgaG91cnM6IDM2NSAqIDI0LFxuICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogMTMsXG4gICAgICBkYXlzOiA5MSxcbiAgICAgIGhvdXJzOiA5MSAqIDI0LFxuICAgICAgbWludXRlczogOTEgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IDQsXG4gICAgICBkYXlzOiAzMCxcbiAgICAgIGhvdXJzOiAzMCAqIDI0LFxuICAgICAgbWludXRlczogMzAgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH0sXG4gIGRheXNJblllYXJBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDAwLFxuICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLFxuICBhY2N1cmF0ZU1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUsXG4gICAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgcXVhcnRlcnM6IHtcbiAgICAgIG1vbnRoczogMyxcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCxcbiAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsXG4gICAgICBob3VyczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0KSAvIDQsXG4gICAgICBtaW51dGVzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCkgLyA0LFxuICAgICAgc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCkgLyA0LFxuICAgICAgbWlsbGlzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCkgLyA0LFxuICAgIH0sXG4gICAgbW9udGhzOiB7XG4gICAgICB3ZWVrczogZGF5c0luTW9udGhBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICAuLi5sb3dPcmRlck1hdHJpeCxcbiAgfTtcblxuLy8gdW5pdHMgb3JkZXJlZCBieSBzaXplXG5jb25zdCBvcmRlcmVkVW5pdHMgPSBbXG4gIFwieWVhcnNcIixcbiAgXCJxdWFydGVyc1wiLFxuICBcIm1vbnRoc1wiLFxuICBcIndlZWtzXCIsXG4gIFwiZGF5c1wiLFxuICBcImhvdXJzXCIsXG4gIFwibWludXRlc1wiLFxuICBcInNlY29uZHNcIixcbiAgXCJtaWxsaXNlY29uZHNcIixcbl07XG5cbmNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cy5zbGljZSgwKS5yZXZlcnNlKCk7XG5cbi8vIGNsb25lIHJlYWxseSBtZWFucyBcImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlc1wiXG5mdW5jdGlvbiBjbG9uZShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHtcbiAgLy8gZGVlcCBtZXJnZSBmb3IgdmFsc1xuICBjb25zdCBjb25mID0ge1xuICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcywgLi4uKGFsdHMudmFsdWVzIHx8IHt9KSB9LFxuICAgIGxvYzogZHVyLmxvYy5jbG9uZShhbHRzLmxvYyksXG4gICAgY29udmVyc2lvbkFjY3VyYWN5OiBhbHRzLmNvbnZlcnNpb25BY2N1cmFjeSB8fCBkdXIuY29udmVyc2lvbkFjY3VyYWN5LFxuICB9O1xuICByZXR1cm4gbmV3IER1cmF0aW9uKGNvbmYpO1xufVxuXG5mdW5jdGlvbiBhbnRpVHJ1bmMobikge1xuICByZXR1cm4gbiA8IDAgPyBNYXRoLmZsb29yKG4pIDogTWF0aC5jZWlsKG4pO1xufVxuXG4vLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzXG5mdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCwgZnJvbU1hcCwgZnJvbVVuaXQsIHRvTWFwLCB0b1VuaXQpIHtcbiAgY29uc3QgY29udiA9IG1hdHJpeFt0b1VuaXRdW2Zyb21Vbml0XSxcbiAgICByYXcgPSBmcm9tTWFwW2Zyb21Vbml0XSAvIGNvbnYsXG4gICAgc2FtZVNpZ24gPSBNYXRoLnNpZ24ocmF3KSA9PT0gTWF0aC5zaWduKHRvTWFwW3RvVW5pdF0pLFxuICAgIC8vIG9rLCBzbyB0aGlzIGlzIHdpbGQsIGJ1dCBzZWUgdGhlIG1hdHJpeCBpbiB0aGUgdGVzdHNcbiAgICBhZGRlZCA9XG4gICAgICAhc2FtZVNpZ24gJiYgdG9NYXBbdG9Vbml0XSAhPT0gMCAmJiBNYXRoLmFicyhyYXcpIDw9IDEgPyBhbnRpVHJ1bmMocmF3KSA6IE1hdGgudHJ1bmMocmF3KTtcbiAgdG9NYXBbdG9Vbml0XSArPSBhZGRlZDtcbiAgZnJvbU1hcFtmcm9tVW5pdF0gLT0gYWRkZWQgKiBjb252O1xufVxuXG4vLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZXMobWF0cml4LCB2YWxzKSB7XG4gIHJldmVyc2VVbml0cy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh2YWxzW2N1cnJlbnRdKSkge1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIGNvbnZlcnQobWF0cml4LCB2YWxzLCBwcmV2aW91cywgdmFscywgY3VycmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cbiAgfSwgbnVsbCk7XG59XG5cbi8qKlxuICogQSBEdXJhdGlvbiBvYmplY3QgcmVwcmVzZW50cyBhIHBlcmlvZCBvZiB0aW1lLCBsaWtlIFwiMiBtb250aHNcIiBvciBcIjEgZGF5LCAxIGhvdXJcIi4gQ29uY2VwdHVhbGx5LCBpdCdzIGp1c3QgYSBtYXAgb2YgdW5pdHMgdG8gdGhlaXIgcXVhbnRpdGllcywgYWNjb21wYW5pZWQgYnkgc29tZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYW5kIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uIFRoZXkgY2FuIGJlIHVzZWQgb24gdGhlaXIgb3duIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgTHV4b24gdHlwZXM7IGZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c30gdG8gYWRkIGEgRHVyYXRpb24gb2JqZWN0IHRvIGEgRGF0ZVRpbWUsIHByb2R1Y2luZyBhbm90aGVyIERhdGVUaW1lLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gRHVyYXRpb246XG4gKlxuICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGEgRHVyYXRpb24sIHVzZSB7QGxpbmsgRHVyYXRpb24jZnJvbU1pbGxpc30sIHtAbGluayBEdXJhdGlvbiNmcm9tT2JqZWN0fSwgb3Ige0BsaW5rIER1cmF0aW9uI2Zyb21JU099LlxuICogKiAqKlVuaXQgdmFsdWVzKiogU2VlIHRoZSB7QGxpbmsgRHVyYXRpb24jeWVhcnN9LCB7QGxpbmsgRHVyYXRpb24jbW9udGhzfSwge0BsaW5rIER1cmF0aW9uI3dlZWtzfSwge0BsaW5rIER1cmF0aW9uI2RheXN9LCB7QGxpbmsgRHVyYXRpb24jaG91cnN9LCB7QGxpbmsgRHVyYXRpb24jbWludXRlc30sIHtAbGluayBEdXJhdGlvbiNzZWNvbmRzfSwge0BsaW5rIER1cmF0aW9uI21pbGxpc2Vjb25kc30gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgIHtAbGluayBEdXJhdGlvbiNsb2NhbGV9IGFuZCB7QGxpbmsgRHVyYXRpb24jbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgbmV3IER1cmF0aW9ucyBvdXQgb2Ygb2xkIG9uZXMgdXNlIHtAbGluayBEdXJhdGlvbiNwbHVzfSwge0BsaW5rIER1cmF0aW9uI21pbnVzfSwge0BsaW5rIER1cmF0aW9uI25vcm1hbGl6ZX0sIHtAbGluayBEdXJhdGlvbiNzZXR9LCB7QGxpbmsgRHVyYXRpb24jcmVjb25maWd1cmV9LCB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30sIGFuZCB7QGxpbmsgRHVyYXRpb24jbmVnYXRlfS5cbiAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBEdXJhdGlvbiBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBEdXJhdGlvbiNhc30sIHtAbGluayBEdXJhdGlvbiN0b0lTT30sIHtAbGluayBEdXJhdGlvbiN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgRHVyYXRpb24jdG9KU09OfVxuICpcbiAqIFRoZXJlJ3MgYXJlIG1vcmUgbWV0aG9kcyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgdmFsaWRpdHksIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb24ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIGNvbnN0IGFjY3VyYXRlID0gY29uZmlnLmNvbnZlcnNpb25BY2N1cmFjeSA9PT0gXCJsb25ndGVybVwiIHx8IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlcztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY29udmVyc2lvbkFjY3VyYWN5ID0gYWNjdXJhdGUgPyBcImxvbmd0ZXJtXCIgOiBcImNhc3VhbFwiO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5tYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4O1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkR1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRHVyYXRpb24gZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBvZiBtaWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21NaWxsaXMoY291bnQsIG9wdHMpIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogY291bnQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIElmIHRoaXMgb2JqZWN0IGlzIGVtcHR5IHRoZW4gYSB6ZXJvIG1pbGxpc2Vjb25kcyBkdXJhdGlvbiBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5xdWFydGVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1vbnRoc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5c1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPVtdXSAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAke1xuICAgICAgICAgIG9iaiA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIG9ialxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHtcbiAgICAgIHZhbHVlczogbm9ybWFsaXplT2JqZWN0KG9iaiwgRHVyYXRpb24ubm9ybWFsaXplVW5pdCksXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLFxuICAgICAgY29udmVyc2lvbkFjY3VyYWN5OiBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIER1cmF0aW9uTGlrZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBEdXJhdGlvbn0gZHVyYXRpb25MaWtlXG4gICAqIE9uZSBvZjpcbiAgICogLSBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy5cbiAgICogLSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kc1xuICAgKiAtIER1cmF0aW9uIGluc3RhbmNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb25MaWtlKSB7XG4gICAgaWYgKGlzTnVtYmVyKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tTWlsbGlzKGR1cmF0aW9uTGlrZSk7XG4gICAgfSBlbHNlIGlmIChEdXJhdGlvbi5pc0R1cmF0aW9uKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBkdXJhdGlvbkxpa2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb25MaWtlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBVbmtub3duIGR1cmF0aW9uIGFyZ3VtZW50ICR7ZHVyYXRpb25MaWtlfSBvZiB0eXBlICR7dHlwZW9mIGR1cmF0aW9uTGlrZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQM1k2TTFXNERUMTJIMzBNNVMnKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMywgbW9udGhzOiA2LCB3ZWVrczogMSwgZGF5czogNCwgaG91cnM6IDEyLCBtaW51dGVzOiAzMCwgc2Vjb25kczogNSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1BUMjNIJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDIzIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDVZM00nKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogNSwgbW9udGhzOiAzIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT0R1cmF0aW9uKHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIHRpbWUgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjIyOjMzLjQ0NCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMjIsIHNlY29uZHM6IDMzLCBtaWxsaXNlY29uZHM6IDQ0NCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU09UaW1lKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPVGltZU9ubHkodGV4dCk7XG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBkYXRldGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIER1cmF0aW9uIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTtcblxuICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWREdXJhdGlvbkVycm9yKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IER1cmF0aW9uKHsgaW52YWxpZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVVbml0KHVuaXQpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgeWVhcjogXCJ5ZWFyc1wiLFxuICAgICAgeWVhcnM6IFwieWVhcnNcIixcbiAgICAgIHF1YXJ0ZXI6IFwicXVhcnRlcnNcIixcbiAgICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBtb250aDogXCJtb250aHNcIixcbiAgICAgIG1vbnRoczogXCJtb250aHNcIixcbiAgICAgIHdlZWs6IFwid2Vla3NcIixcbiAgICAgIHdlZWtzOiBcIndlZWtzXCIsXG4gICAgICBkYXk6IFwiZGF5c1wiLFxuICAgICAgZGF5czogXCJkYXlzXCIsXG4gICAgICBob3VyOiBcImhvdXJzXCIsXG4gICAgICBob3VyczogXCJob3Vyc1wiLFxuICAgICAgbWludXRlOiBcIm1pbnV0ZXNcIixcbiAgICAgIG1pbnV0ZXM6IFwibWludXRlc1wiLFxuICAgICAgc2Vjb25kOiBcInNlY29uZHNcIixcbiAgICAgIHNlY29uZHM6IFwic2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRzXCIsXG4gICAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRzXCIsXG4gICAgfVt1bml0ID8gdW5pdC50b0xvd2VyQ2FzZSgpIDogdW5pdF07XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgRHVyYXRpb24uIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0R1cmF0aW9uKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRHVyYXRpb24pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQidcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLmxvY2FsZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRHVyYXRpb25cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLiBZb3UgbWF5IHVzZSB0aGVzZSB0b2tlbnM6XG4gICAqICogYFNgIGZvciBtaWxsaXNlY29uZHNcbiAgICogKiBgc2AgZm9yIHNlY29uZHNcbiAgICogKiBgbWAgZm9yIG1pbnV0ZXNcbiAgICogKiBgaGAgZm9yIGhvdXJzXG4gICAqICogYGRgIGZvciBkYXlzXG4gICAqICogYHdgIGZvciB3ZWVrc1xuICAgKiAqIGBNYCBmb3IgbW9udGhzXG4gICAqICogYHlgIGZvciB5ZWFyc1xuICAgKiBOb3RlczpcbiAgICogKiBBZGQgcGFkZGluZyBieSByZXBlYXRpbmcgdGhlIHRva2VuLCBlLmcuIFwieXlcIiBwYWRzIHRoZSB5ZWFycyB0byB0d28gZGlnaXRzLCBcImhoaGhcIiBwYWRzIHRoZSBob3VycyBvdXQgdG8gZm91ciBkaWdpdHNcbiAgICogKiBUb2tlbnMgY2FuIGJlIGVzY2FwZWQgYnkgd3JhcHBpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuICAgKiAqIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgc2V0IG9mIHVuaXRzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHVzaW5nIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSBhbmQgdGhlIER1cmF0aW9ucydzIGNvbnZlcnNpb24gYWNjdXJhY3kgc2V0dGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsb29yPXRydWVdIC0gZmxvb3IgbnVtZXJpY2FsIHZhbHVlc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJ5IGQgc1wiKSAvLz0+IFwiMSA2IDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJ5eSBkZCBzc3NcIikgLy89PiBcIjAxIDA2IDAwMlwiXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcIk0gU1wiKSAvLz0+IFwiMTIgNTE4NDAyMDAwXCJcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZm10LCBvcHRzID0ge30pIHtcbiAgICAvLyByZXZlcnNlLWNvbXBhdCBzaW5jZSAxLjI7IHdlIGFsd2F5cyByb3VuZCBkb3duIG5vdywgbmV2ZXIgdXAsIGFuZCB3ZSBkbyBpdCBieSBkZWZhdWx0XG4gICAgY29uc3QgZm10T3B0cyA9IHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBmbG9vcjogb3B0cy5yb3VuZCAhPT0gZmFsc2UgJiYgb3B0cy5mbG9vciAhPT0gZmFsc2UsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MsIGZtdE9wdHMpLmZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIER1cmF0aW9uIHdpdGggYWxsIHVuaXRzIGluY2x1ZGVkLlxuICAgKiBUbyBtb2RpZnkgaXRzIGJlaGF2aW9yIHVzZSB0aGUgYGxpc3RTdHlsZWAgYW5kIGFueSBJbnRsLk51bWJlckZvcm1hdCBvcHRpb24sIHRob3VnaCBgdW5pdERpc3BsYXlgIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9OdW1iZXJGb3JtYXRcbiAgICogQHBhcmFtIG9wdHMgLSBPbiBvcHRpb24gb2JqZWN0IHRvIG92ZXJyaWRlIHRoZSBmb3JtYXR0aW5nLiBBY2NlcHRzIHRoZSBzYW1lIGtleXMgYXMgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIG9mIHRoZSBuYXRpdmUgYEludC5OdW1iZXJGb3JtYXRgIGNvbnN0cnVjdG9yLCBhcyB3ZWxsIGFzIGBsaXN0U3R5bGVgLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgZHVyID0gRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEsIGhvdXJzOiA1LCBtaW51dGVzOiA2IH0pXG4gICAqIGR1ci50b0h1bWFuKCkgLy89PiAnMSBkYXksIDUgaG91cnMsIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyBsaXN0U3R5bGU6IFwibG9uZ1wiIH0pIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCBhbmQgNiBtaW51dGVzJ1xuICAgKiBkdXIudG9IdW1hbih7IHVuaXREaXNwbGF5OiBcInNob3J0XCIgfSkgLy89PiAnMSBkYXksIDUgaHIsIDYgbWluJ1xuICAgKiBgYGBcbiAgICovXG4gIHRvSHVtYW4ob3B0cyA9IHt9KSB7XG4gICAgY29uc3QgbCA9IG9yZGVyZWRVbml0c1xuICAgICAgLm1hcCgodW5pdCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlc1t1bml0XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NcbiAgICAgICAgICAubnVtYmVyRm9ybWF0dGVyKHsgc3R5bGU6IFwidW5pdFwiLCB1bml0RGlzcGxheTogXCJsb25nXCIsIC4uLm9wdHMsIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpIH0pXG4gICAgICAgICAgLmZvcm1hdCh2YWwpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG4pID0+IG4pO1xuXG4gICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAubGlzdEZvcm1hdHRlcih7IHR5cGU6IFwiY29uanVuY3Rpb25cIiwgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8IFwibmFycm93XCIsIC4uLm9wdHMgfSlcbiAgICAgIC5mb3JtYXQobCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcbiAgICByZXR1cm4geyAuLi50aGlzLnZhbHVlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDMsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDNZVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA1IH0pLnRvSVNPKCkgLy89PiAnUDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogNSB9KS50b0lTTygpIC8vPT4gJ1BUNU0nXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oKSB7XG4gICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZ1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzID0gXCJQXCI7XG4gICAgaWYgKHRoaXMueWVhcnMgIT09IDApIHMgKz0gdGhpcy55ZWFycyArIFwiWVwiO1xuICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgXCJXXCI7XG4gICAgaWYgKHRoaXMuZGF5cyAhPT0gMCkgcyArPSB0aGlzLmRheXMgKyBcIkRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgcyArPSBcIlRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgXCJIXCI7XG4gICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgLy8gdGhpcyB3aWxsIGhhbmRsZSBcImZsb2F0aW5nIHBvaW50IG1hZG5lc3NcIiBieSByZW1vdmluZyBleHRyYSBkZWNpbWFsIHBsYWNlc1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTg4MDA0L2lzLWZsb2F0aW5nLXBvaW50LW1hdGgtYnJva2VuXG4gICAgICBzICs9IHJvdW5kVG8odGhpcy5zZWNvbmRzICsgdGhpcy5taWxsaXNlY29uZHMgLyAxMDAwLCAzKSArIFwiU1wiO1xuICAgIGlmIChzID09PSBcIlBcIikgcyArPSBcIlQwU1wiO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS5cbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWlsbGlzID0gdGhpcy50b01pbGxpcygpO1xuICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7XG5cbiAgICBvcHRzID0ge1xuICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NTZWNvbmRzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVQcmVmaXg6IGZhbHNlLFxuICAgICAgZm9ybWF0OiBcImV4dGVuZGVkXCIsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2hpZnRUbyhcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIiwgXCJtaWxsaXNlY29uZHNcIik7XG5cbiAgICBsZXQgZm10ID0gb3B0cy5mb3JtYXQgPT09IFwiYmFzaWNcIiA/IFwiaGhtbVwiIDogXCJoaDptbVwiO1xuXG4gICAgaWYgKCFvcHRzLnN1cHByZXNzU2Vjb25kcyB8fCB2YWx1ZS5zZWNvbmRzICE9PSAwIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkge1xuICAgICAgZm10ICs9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcInNzXCIgOiBcIjpzc1wiO1xuICAgICAgaWYgKCFvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkge1xuICAgICAgICBmbXQgKz0gXCIuU1NTXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IHZhbHVlLnRvRm9ybWF0KGZtdCk7XG5cbiAgICBpZiAob3B0cy5pbmNsdWRlUHJlZml4KSB7XG4gICAgICBzdHIgPSBcIlRcIiArIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5hcyhcIm1pbGxpc2Vjb25kc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLiBBbGlhcyBvZiB7QGxpbmsgdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gbG9uZ2VyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHBsdXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGR1ci52YWx1ZXMsIGspIHx8IGhhc093blByb3BlcnR5KHRoaXMudmFsdWVzLCBrKSkge1xuICAgICAgICByZXN1bHRba10gPSBkdXIuZ2V0KGspICsgdGhpcy5nZXQoayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIHNob3J0ZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBtaW51cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuICAgIHJldHVybiB0aGlzLnBsdXMoZHVyLm5lZ2F0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FsZSB0aGlzIER1cmF0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB1bml0LiBBcml0eSBpcyAxIG9yIDI6IHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCBhbmQsIG9wdGlvbmFsbHksIHRoZSB1bml0IG5hbWUuIE11c3QgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKHggPT4geCAqIDIpIC8vPT4geyBob3VyczogMiwgbWludXRlczogNjAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKCh4LCB1KSA9PiB1ID09PSBcImhvdXJcIiA/IHggKiAyIDogeCkgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWFwVW5pdHMoZm4pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCd5ZWFycycpIC8vPT4gMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnbW9udGhzJykgLy89PiAwXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCdkYXlzJykgLy89PiAzXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KV07XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVyc1xuICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgeWVhcnM6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IGhvdXJzOiA4LCBtaW51dGVzOiAzMCB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBtaXhlZCA9IHsgLi4udGhpcy52YWx1ZXMsIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpIH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBtaXhlZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgZHVyLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgY29udmVyc2lvbkFjY3VyYWN5IH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0gfSksXG4gICAgICBvcHRzID0geyBsb2MgfTtcblxuICAgIGlmIChjb252ZXJzaW9uQWNjdXJhY3kpIHtcbiAgICAgIG9wdHMuY29udmVyc2lvbkFjY3VyYWN5ID0gY29udmVyc2lvbkFjY3VyYWN5O1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZHVyYXRpb24gaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGVzJyBvciAnZGF5cydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnZGF5cycpIC8vPT4gMzY1XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ21vbnRocycpIC8vPT4gMTJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7aG91cnM6IDYwfSkuYXMoJ2RheXMnKSAvLz0+IDIuNVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBhcyh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuc2hpZnRUbyh1bml0KS5nZXQodW5pdCkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoaXMgRHVyYXRpb24gdG8gaXRzIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBpbiBpdHMgY3VycmVudCB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAyLCBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxNSwgZGF5czogMjU1IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMiwgbWludXRlczogLTQ1IH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMTUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5vcm1hbGl6ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudG9PYmplY3QoKTtcbiAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoaXMgRHVyYXRpb24gaW50byBpdHMgcmVwcmVzZW50YXRpb24gaW4gYSBkaWZmZXJlbnQgc2V0IG9mIHVuaXRzLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLnNoaWZ0VG8oJ21pbnV0ZXMnLCAnbWlsbGlzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgbWludXRlczogNjAsIG1pbGxpc2Vjb25kczogMzAwMDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNoaWZ0VG8oLi4udW5pdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1bml0cyA9IHVuaXRzLm1hcCgodSkgPT4gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1KSk7XG5cbiAgICBjb25zdCBidWlsdCA9IHt9LFxuICAgICAgYWNjdW11bGF0ZWQgPSB7fSxcbiAgICAgIHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbGV0IGxhc3RVbml0O1xuXG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKHVuaXRzLmluZGV4T2YoaykgPj0gMCkge1xuICAgICAgICBsYXN0VW5pdCA9IGs7XG5cbiAgICAgICAgbGV0IG93biA9IDA7XG5cbiAgICAgICAgLy8gYW55dGhpbmcgd2UgaGF2ZW4ndCBib2lsZWQgZG93biB5ZXQgc2hvdWxkIGdldCBib2lsZWQgdG8gdGhpcyB1bml0XG4gICAgICAgIGZvciAoY29uc3QgYWsgaW4gYWNjdW11bGF0ZWQpIHtcbiAgICAgICAgICBvd24gKz0gdGhpcy5tYXRyaXhbYWtdW2tdICogYWNjdW11bGF0ZWRbYWtdO1xuICAgICAgICAgIGFjY3VtdWxhdGVkW2FrXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbHVzIGFueXRoaW5nIHRoYXQncyBhbHJlYWR5IGluIHRoaXMgdW5pdFxuICAgICAgICBpZiAoaXNOdW1iZXIodmFsc1trXSkpIHtcbiAgICAgICAgICBvd24gKz0gdmFsc1trXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGkgPSBNYXRoLnRydW5jKG93bik7XG4gICAgICAgIGJ1aWx0W2tdID0gaTtcbiAgICAgICAgYWNjdW11bGF0ZWRba10gPSAob3duICogMTAwMCAtIGkgKiAxMDAwKSAvIDEwMDA7XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGNoYWluIHRoYXQgc2hvdWxkIGJlIHJvbGxlZCB1cCBpbiB0byB0aGlzXG4gICAgICAgIGZvciAoY29uc3QgZG93biBpbiB2YWxzKSB7XG4gICAgICAgICAgaWYgKG9yZGVyZWRVbml0cy5pbmRleE9mKGRvd24pID4gb3JkZXJlZFVuaXRzLmluZGV4T2YoaykpIHtcbiAgICAgICAgICAgIGNvbnZlcnQodGhpcy5tYXRyaXgsIHZhbHMsIGRvd24sIGJ1aWx0LCBrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRoZSB3aW5ncyB0byBib2lsIGl0IGxhdGVyXG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gdmFsc1trXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbnl0aGluZyBsZWZ0b3ZlciBiZWNvbWVzIHRoZSBkZWNpbWFsIGZvciB0aGUgbGFzdCB1bml0XG4gICAgLy8gbGFzdFVuaXQgbXVzdCBiZSBkZWZpbmVkIHNpbmNlIHVuaXRzIGlzIG5vdCBlbXB0eVxuICAgIGZvciAoY29uc3Qga2V5IGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICBpZiAoYWNjdW11bGF0ZWRba2V5XSAhPT0gMCkge1xuICAgICAgICBidWlsdFtsYXN0VW5pdF0gKz1cbiAgICAgICAgICBrZXkgPT09IGxhc3RVbml0ID8gYWNjdW11bGF0ZWRba2V5XSA6IGFjY3VtdWxhdGVkW2tleV0gLyB0aGlzLm1hdHJpeFtsYXN0VW5pdF1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IGJ1aWx0IH0sIHRydWUpLm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmVnYXRpdmUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5uZWdhdGUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogLTEsIHNlY29uZHM6IC0zMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbmVnYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBuZWdhdGVkID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgbmVnYXRlZFtrXSA9IHRoaXMudmFsdWVzW2tdID09PSAwID8gMCA6IC10aGlzLnZhbHVlc1trXTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBuZWdhdGVkIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgeWVhcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnllYXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBxdWFydGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMucXVhcnRlcnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRocy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtb250aHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1vbnRocyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2Vla3NcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMud2Vla3MgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheXMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuZGF5cyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91cnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmhvdXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGVzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbnV0ZXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlY29uZHMuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCBzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5zZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaWxsaXNlY29uZHMuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCBtaWxsaXNlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbGxpc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgRHVyYXRpb24gaXMgaW52YWxpZC4gSW52YWxpZCBkdXJhdGlvbnMgYXJlIHJldHVybmVkIGJ5IGRpZmYgb3BlcmF0aW9uc1xuICAgKiBvbiBpbnZhbGlkIERhdGVUaW1lcyBvciBJbnRlcnZhbHMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRXF1YWxpdHkgY2hlY2tcbiAgICogVHdvIER1cmF0aW9ucyBhcmUgZXF1YWwgaWZmIHRoZXkgaGF2ZSB0aGUgc2FtZSB1bml0cyBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBlYWNoIHVuaXQuXG4gICAqIEBwYXJhbSB7RHVyYXRpb259IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcSh2MSwgdjIpIHtcbiAgICAgIC8vIENvbnNpZGVyIDAgYW5kIHVuZGVmaW5lZCBhcyBlcXVhbFxuICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQgfHwgdjEgPT09IDApIHJldHVybiB2MiA9PT0gdW5kZWZpbmVkIHx8IHYyID09PSAwO1xuICAgICAgcmV0dXJuIHYxID09PSB2MjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHUgb2Ygb3JkZXJlZFVuaXRzKSB7XG4gICAgICBpZiAoIWVxKHRoaXMudmFsdWVzW3VdLCBvdGhlci52YWx1ZXNbdV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgRGF0ZVRpbWUsIHsgZnJpZW5kbHlEYXRlVGltZSB9IGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWRJbnRlcnZhbEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcblxuY29uc3QgSU5WQUxJRCA9IFwiSW52YWxpZCBJbnRlcnZhbFwiO1xuXG4vLyBjaGVja3MgaWYgdGhlIHN0YXJ0IGlzIGVxdWFsIHRvIG9yIGJlZm9yZSB0aGUgZW5kXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXJ0RW5kKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCB8fCAhc3RhcnQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXJ0XCIpO1xuICB9IGVsc2UgaWYgKCFlbmQgfHwgIWVuZC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJtaXNzaW5nIG9yIGludmFsaWQgZW5kXCIpO1xuICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXG4gICAgICBcImVuZCBiZWZvcmUgc3RhcnRcIixcbiAgICAgIGBUaGUgZW5kIG9mIGFuIGludGVydmFsIG11c3QgYmUgYWZ0ZXIgaXRzIHN0YXJ0LCBidXQgeW91IGhhZCBzdGFydD0ke3N0YXJ0LnRvSVNPKCl9IGFuZCBlbmQ9JHtlbmQudG9JU08oKX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEFuIEludGVydmFsIG9iamVjdCByZXByZXNlbnRzIGEgaGFsZi1vcGVuIGludGVydmFsIG9mIHRpbWUsIHdoZXJlIGVhY2ggZW5kcG9pbnQgaXMgYSB7QGxpbmsgRGF0ZVRpbWV9LiBDb25jZXB0dWFsbHksIGl0J3MgYSBjb250YWluZXIgZm9yIHRob3NlIHR3byBlbmRwb2ludHMsIGFjY29tcGFuaWVkIGJ5IG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCBjb21wYXJpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIEludGVydmFsOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhbiBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNmcm9tRGF0ZVRpbWVzfSwge0BsaW5rIEludGVydmFsI2FmdGVyfSwge0BsaW5rIEludGVydmFsI2JlZm9yZX0sIG9yIHtAbGluayBJbnRlcnZhbCNmcm9tSVNPfS5cbiAqICogKipBY2Nlc3NvcnMqKiBVc2Uge0BsaW5rIEludGVydmFsI3N0YXJ0fSBhbmQge0BsaW5rIEludGVydmFsI2VuZH0gdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kLlxuICogKiAqKkludGVycm9nYXRpb24qKiBUbyBhbmFseXplIHRoZSBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNjb3VudH0sIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9LCB7QGxpbmsgSW50ZXJ2YWwjaGFzU2FtZX0sIHtAbGluayBJbnRlcnZhbCNjb250YWluc30sIHtAbGluayBJbnRlcnZhbCNpc0FmdGVyfSwgb3Ige0BsaW5rIEludGVydmFsI2lzQmVmb3JlfS5cbiAqICogKipUcmFuc2Zvcm1hdGlvbioqIFRvIGNyZWF0ZSBvdGhlciBJbnRlcnZhbHMgb3V0IG9mIHRoaXMgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI3NldH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEF0fSwge0BsaW5rIEludGVydmFsI3NwbGl0Qnl9LCB7QGxpbmsgSW50ZXJ2YWwjZGl2aWRlRXF1YWxseX0sIHtAbGluayBJbnRlcnZhbCNtZXJnZX0sIHtAbGluayBJbnRlcnZhbCN4b3J9LCB7QGxpbmsgSW50ZXJ2YWwjdW5pb259LCB7QGxpbmsgSW50ZXJ2YWwjaW50ZXJzZWN0aW9ufSwgb3Ige0BsaW5rIEludGVydmFsI2RpZmZlcmVuY2V9LlxuICogKiAqKkNvbXBhcmlzb24qKiBUbyBjb21wYXJlIHRoaXMgSW50ZXJ2YWwgdG8gYW5vdGhlciBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZXF1YWxzfSwge0BsaW5rIEludGVydmFsI292ZXJsYXBzfSwge0BsaW5rIEludGVydmFsI2FidXRzU3RhcnR9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNFbmR9LCB7QGxpbmsgSW50ZXJ2YWwjZW5ndWxmc31cbiAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBJbnRlcnZhbCBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBJbnRlcnZhbCN0b1N0cmluZ30sIHtAbGluayBJbnRlcnZhbCN0b0lTT30sIHtAbGluayBJbnRlcnZhbCN0b0lTT0RhdGV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09UaW1lfSwge0BsaW5rIEludGVydmFsI3RvRm9ybWF0fSwgYW5kIHtAbGluayBJbnRlcnZhbCN0b0R1cmF0aW9ufS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWwge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMucyA9IGNvbmZpZy5zdGFydDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmUgPSBjb25maWcuZW5kO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc0x1eG9uSW50ZXJ2YWwgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIEludGVydmFsIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTtcblxuICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnRlcnZhbEVycm9yKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHsgaW52YWxpZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYW4gZW5kIERhdGVUaW1lLiBJbmNsdXNpdmUgb2YgdGhlIHN0YXJ0IGJ1dCBub3QgdGhlIGVuZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnRcbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGJ1aWx0U3RhcnQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KSxcbiAgICAgIGJ1aWx0RW5kID0gZnJpZW5kbHlEYXRlVGltZShlbmQpO1xuXG4gICAgY29uc3QgdmFsaWRhdGVFcnJvciA9IHZhbGlkYXRlU3RhcnRFbmQoYnVpbHRTdGFydCwgYnVpbHRFbmQpO1xuXG4gICAgaWYgKHZhbGlkYXRlRXJyb3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7XG4gICAgICAgIHN0YXJ0OiBidWlsdFN0YXJ0LFxuICAgICAgICBlbmQ6IGJ1aWx0RW5kLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhIHN0YXJ0IERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCB0by5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBhZnRlcihzdGFydCwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQsIGR0LnBsdXMoZHVyKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gZW5kIERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCBiYWNrd2FyZHMgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGJlZm9yZShlbmQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdC5taW51cyhkdXIpLCBkdCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gSVNPIDg2MDEgc3RyaW5nLlxuICAgKiBBY2NlcHRzIGA8c3RhcnQ+LzxlbmQ+YCwgYDxzdGFydD4vPGR1cmF0aW9uPmAsIGFuZCBgPGR1cmF0aW9uPi88ZW5kPmAgZm9ybWF0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gb3B0aW9ucyB0byBwYXNzIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSBhbmQgb3B0aW9uYWxseSB7QGxpbmsgRHVyYXRpb24jZnJvbUlTT31cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFsc1xuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcywgZV0gPSAodGV4dCB8fCBcIlwiKS5zcGxpdChcIi9cIiwgMik7XG4gICAgaWYgKHMgJiYgZSkge1xuICAgICAgbGV0IHN0YXJ0LCBzdGFydElzVmFsaWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFydCA9IERhdGVUaW1lLmZyb21JU08ocywgb3B0cyk7XG4gICAgICAgIHN0YXJ0SXNWYWxpZCA9IHN0YXJ0LmlzVmFsaWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN0YXJ0SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZW5kLCBlbmRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGVuZC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQgJiYgZW5kSXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCwgZW5kKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0SXNWYWxpZCkge1xuICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKGUsIG9wdHMpO1xuICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYWZ0ZXIoc3RhcnQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW5kSXNWYWxpZCkge1xuICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYmVmb3JlKGVuZCwgZHVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gSW50ZXJ2YWwuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0ludGVydmFsKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uSW50ZXJ2YWwpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSBJbnRlcnZhbFxuICAgKiBAdHlwZSB7RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgc3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucyA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZW5kIG9mIHRoZSBJbnRlcnZhbFxuICAgKiBAdHlwZSB7RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgZW5kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGF0IGxlYXN0IGl0cyBzdGFydCwgbWVhbmluZyB0aGF0IHRoZSBJbnRlcnZhbCBpc24ndCAnYmFja3dhcmRzJy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIEludGVydmFsIGlzIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBJbnRlcnZhbCBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbCBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIHJldHVybiB0aGUgbGVuZ3RoIGluLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBsZW5ndGgodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0R1cmF0aW9uKC4uLlt1bml0XSkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvdW50IG9mIG1pbnV0ZXMsIGhvdXJzLCBkYXlzLCBtb250aHMsIG9yIHllYXJzIGluY2x1ZGVkIGluIHRoZSBJbnRlcnZhbCwgZXZlbiBpbiBwYXJ0LlxuICAgKiBVbmxpa2Uge0BsaW5rIEludGVydmFsI2xlbmd0aH0gdGhpcyBjb3VudHMgc2VjdGlvbnMgb2YgdGhlIGNhbGVuZGFyLCBub3QgcGVyaW9kcyBvZiB0aW1lLCBlLmcuIHNwZWNpZnlpbmcgJ2RheSdcbiAgICogYXNrcyAnd2hhdCBkYXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhpcyBpbnRlcnZhbD8nLCBub3QgJ2hvdyBtYW55IGRheXMgbG9uZyBpcyB0aGlzIGludGVydmFsPydcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt1bml0PSdtaWxsaXNlY29uZHMnXSAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY291bnQuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGNvdW50KHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0LnN0YXJ0T2YodW5pdCksXG4gICAgICBlbmQgPSB0aGlzLmVuZC5zdGFydE9mKHVuaXQpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvblxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaGFzU2FtZSh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuaXNFbXB0eSgpIHx8IHRoaXMuZS5taW51cygxKS5oYXNTYW1lKHRoaXMucywgdW5pdCkgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIERhdGVUaW1lcy5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucy52YWx1ZU9mKCkgPT09IHRoaXMuZS52YWx1ZU9mKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0FmdGVyKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zID4gZGF0ZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQmVmb3JlKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5lIDw9IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnRhaW5zKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zIDw9IGRhdGVUaW1lICYmIHRoaXMuZSA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0c1wiIHRoZSBzdGFydCBhbmQvb3IgZW5kIGRhdGVzLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIHRvIHNldFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuc3RhcnQgLSB0aGUgc3RhcnRpbmcgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLmVuZCAtIHRoZSBlbmRpbmcgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzZXQoeyBzdGFydCwgZW5kIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCB8fCB0aGlzLnMsIGVuZCB8fCB0aGlzLmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgYXQgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIERhdGVUaW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QXQoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBzb3J0ZWQgPSBkYXRlVGltZXNcbiAgICAgICAgLm1hcChmcmllbmRseURhdGVUaW1lKVxuICAgICAgICAuZmlsdGVyKChkKSA9PiB0aGlzLmNvbnRhaW5zKGQpKVxuICAgICAgICAuc29ydCgpLFxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIGxldCB7IHMgfSA9IHRoaXMsXG4gICAgICBpID0gMDtcblxuICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IHNvcnRlZFtpXSB8fCB0aGlzLmUsXG4gICAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7XG4gICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7XG4gICAgICBzID0gbmV4dDtcbiAgICAgIGkgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gc21hbGxlciBJbnRlcnZhbHMsIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWxcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBsZW5ndGggb2YgZWFjaCByZXN1bHRpbmcgaW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3BsaXRCeShkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIWR1ci5pc1ZhbGlkIHx8IGR1ci5hcyhcIm1pbGxpc2Vjb25kc1wiKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCB7IHMgfSA9IHRoaXMsXG4gICAgICBpZHggPSAxLFxuICAgICAgbmV4dDtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLnN0YXJ0LnBsdXMoZHVyLm1hcFVuaXRzKCh4KSA9PiB4ICogaWR4KSk7XG4gICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc21hbGxlciBpbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJPZlBhcnRzIC0gVGhlIG51bWJlciBvZiBJbnRlcnZhbHMgdG8gZGl2aWRlIHRoZSBJbnRlcnZhbCBpbnRvLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpdmlkZUVxdWFsbHkobnVtYmVyT2ZQYXJ0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuc3BsaXRCeSh0aGlzLmxlbmd0aCgpIC8gbnVtYmVyT2ZQYXJ0cykuc2xpY2UoMCwgbnVtYmVyT2ZQYXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxcbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIG92ZXJsYXBzKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZSA+IG90aGVyLnMgJiYgdGhpcy5zIDwgb3RoZXIuZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBzdGFydC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGFidXRzU3RhcnQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArdGhpcy5lID09PSArb3RoZXIucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIGVuZC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGFidXRzRW5kKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK290aGVyLmUgPT09ICt0aGlzLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBlbmd1bGZzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlbmd1bGZzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zIDw9IG90aGVyLnMgJiYgdGhpcy5lID49IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBhcyB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmVxdWFscyhvdGhlci5zKSAmJiB0aGlzLmUuZXF1YWxzKG90aGVyLmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtYXhpbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtaW5pbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGludGVyc2VjdGlvbiBpcyBlbXB0eSwgbWVhbmluZywgdGhlIGludGVydmFscyBkb24ndCBpbnRlcnNlY3QuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMgPiBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucyxcbiAgICAgIGUgPSB0aGlzLmUgPCBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTtcblxuICAgIGlmIChzID49IGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgdW5pb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWluaW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWF4aW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICB1bmlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zIDwgb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lID4gb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIGludG8gYSBlcXVpdmFsZW50IG1pbmltYWwgc2V0IG9mIEludGVydmFscy5cbiAgICogQ29tYmluZXMgb3ZlcmxhcHBpbmcgYW5kIGFkamFjZW50IEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmdlKGludGVydmFscykge1xuICAgIGNvbnN0IFtmb3VuZCwgZmluYWxdID0gaW50ZXJ2YWxzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5zIC0gYi5zKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtzb2ZhciwgY3VycmVudF0sIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5vdmVybGFwcyhpdGVtKSB8fCBjdXJyZW50LmFidXRzU3RhcnQoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIsIGN1cnJlbnQudW5pb24oaXRlbSldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLmNvbmNhdChbY3VycmVudF0pLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgbnVsbF1cbiAgICAgICk7XG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBmb3VuZC5wdXNoKGZpbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBJbnRlcnZhbHMgcmVwcmVzZW50aW5nIHRoZSBzcGFucyBvZiB0aW1lIHRoYXQgb25seSBhcHBlYXIgaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgeG9yKGludGVydmFscykge1xuICAgIGxldCBzdGFydCA9IG51bGwsXG4gICAgICBjdXJyZW50Q291bnQgPSAwO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXSxcbiAgICAgIGVuZHMgPSBpbnRlcnZhbHMubWFwKChpKSA9PiBbXG4gICAgICAgIHsgdGltZTogaS5zLCB0eXBlOiBcInNcIiB9LFxuICAgICAgICB7IHRpbWU6IGkuZSwgdHlwZTogXCJlXCIgfSxcbiAgICAgIF0pLFxuICAgICAgZmxhdHRlbmVkID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5lbmRzKSxcbiAgICAgIGFyciA9IGZsYXR0ZW5lZC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIGFycikge1xuICAgICAgY3VycmVudENvdW50ICs9IGkudHlwZSA9PT0gXCJzXCIgPyAxIDogLTE7XG5cbiAgICAgIGlmIChjdXJyZW50Q291bnQgPT09IDEpIHtcbiAgICAgICAgc3RhcnQgPSBpLnRpbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhcnQgJiYgK3N0YXJ0ICE9PSAraS50aW1lKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGkudGltZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBJbnRlcnZhbC5tZXJnZShyZXN1bHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBzcGFuIG9mIHRpbWUgaW4gdGhpcyBJbnRlcnZhbCB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHsuLi5JbnRlcnZhbH0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgZGlmZmVyZW5jZSguLi5pbnRlcnZhbHMpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwueG9yKFt0aGlzXS5jb25jYXQoaW50ZXJ2YWxzKSlcbiAgICAgIC5tYXAoKGkpID0+IHRoaXMuaW50ZXJzZWN0aW9uKGkpKVxuICAgICAgLmZpbHRlcigoaSkgPT4gaSAmJiAhaS5pc0VtcHR5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbCBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGBbJHt0aGlzLnMudG9JU08oKX0gXHUyMDEzICR7dGhpcy5lLnRvSVNPKCl9KWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT31cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08ob3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPKG9wdHMpfS8ke3RoaXMuZS50b0lTTyhvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIFRoZSB0aW1lIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aW1lIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIFRoZSBkYXRlIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT31cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT1RpbWUob3B0cyl9LyR7dGhpcy5lLnRvSVNPVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGVGb3JtYXQgLSB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBzdHJpbmcgZm9ybWF0cyB0aGUgc3RhcnQgYW5kIGVuZCB0aW1lLiBTZWUge0BsaW5rIERhdGVUaW1lI3RvRm9ybWF0fSBmb3IgZGV0YWlscy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5zZXBhcmF0b3IgPSAgJyBcdTIwMTMgJ10gLSBhIHNlcGFyYXRvciB0byBwbGFjZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHJlcHJlc2VudGF0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChkYXRlRm9ybWF0LCB7IHNlcGFyYXRvciA9IFwiIFx1MjAxMyBcIiB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0Zvcm1hdChkYXRlRm9ybWF0KX0ke3NlcGFyYXRvcn0ke3RoaXMuZS50b0Zvcm1hdChkYXRlRm9ybWF0KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgdGltZSBzcGFubmVkIGJ5IHRoaXMgaW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oKS50b09iamVjdCgpIC8vPT4geyBtaWxsaXNlY29uZHM6IDg4NDg5MjU3IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignZGF5cycpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDEuMDI0MTgxMjE1Mjc3Nzc3OCB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQuODIwOTUgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQsIHNlY29uZHM6IDQ5LjI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ3NlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBzZWNvbmRzOiA4ODQ4OS4yNTcgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHRvRHVyYXRpb24odW5pdCwgb3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCh0aGlzLmludmFsaWRSZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lLmRpZmYodGhpcy5zLCB1bml0LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gbWFwRm4gb24gdGhlIGludGVydmFsIHN0YXJ0IGFuZCBlbmQsIHJldHVybmluZyBhIG5ldyBJbnRlcnZhbCBmcm9tIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1hcEZuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS5tYXBFbmRwb2ludHMoZW5kcG9pbnQgPT4gZW5kcG9pbnQudG9VVEMoKSlcbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnBsdXMoeyBob3VyczogMiB9KSlcbiAgICovXG4gIG1hcEVuZHBvaW50cyhtYXBGbikge1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKG1hcEZuKHRoaXMucyksIG1hcEZuKHRoaXMuZSkpO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxuaW1wb3J0IHsgaGFzUmVsYXRpdmUgfSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcblxuLyoqXG4gKiBUaGUgSW5mbyBjbGFzcyBjb250YWlucyBzdGF0aWMgbWV0aG9kcyBmb3IgcmV0cmlldmluZyBnZW5lcmFsIHRpbWUgYW5kIGRhdGUgcmVsYXRlZCBkYXRhLiBGb3IgZXhhbXBsZSwgaXQgaGFzIG1ldGhvZHMgZm9yIGZpbmRpbmcgb3V0IGlmIGEgdGltZSB6b25lIGhhcyBhIERTVCwgZm9yIGxpc3RpbmcgdGhlIG1vbnRocyBpbiBhbnkgc3VwcG9ydGVkIGxvY2FsZSwgYW5kIGZvciBkaXNjb3ZlcmluZyB3aGljaCBvZiBMdXhvbiBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmZvIHtcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBjb250YWlucyBhIERTVC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW3pvbmU9J2xvY2FsJ10gLSBab25lIHRvIGNoZWNrLiBEZWZhdWx0cyB0byB0aGUgZW52aXJvbm1lbnQncyBsb2NhbCB6b25lLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGhhc0RTVCh6b25lID0gU2V0dGluZ3MuZGVmYXVsdFpvbmUpIHtcbiAgICBjb25zdCBwcm90byA9IERhdGVUaW1lLm5vdygpLnNldFpvbmUoem9uZSkuc2V0KHsgbW9udGg6IDEyIH0pO1xuXG4gICAgcmV0dXJuICF6b25lLmlzVW5pdmVyc2FsICYmIHByb3RvLm9mZnNldCAhPT0gcHJvdG8uc2V0KHsgbW9udGg6IDYgfSkub2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBpcyBhIHZhbGlkIElBTkEgc3BlY2lmaWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFpvbmUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkSUFOQVpvbmUoem9uZSkge1xuICAgIHJldHVybiBJQU5BWm9uZS5pc1ZhbGlkWm9uZSh6b25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgaW50byBhIHtAbGluayBab25lfSBpbnN0YW5jZS5cbiAgICpcbiAgICogKiBJZiBgaW5wdXRgIGlzIGFscmVhZHkgYSBab25lIGluc3RhbmNlLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyBjb250YWluaW5nIGEgdmFsaWQgdGltZSB6b25lIG5hbWUsIGEgWm9uZSBpbnN0YW5jZVxuICAgKiAgIHdpdGggdGhhdCBuYW1lIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgdGhhdCBkb2Vzbid0IHJlZmVyIHRvIGEga25vd24gdGltZSB6b25lLCBhIFpvbmVcbiAgICogICBpbnN0YW5jZSB3aXRoIHtAbGluayBab25lI2lzVmFsaWR9ID09IGZhbHNlIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dCBpcyBhIG51bWJlciwgYSBab25lIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBmaXhlZCBvZmZzZXRcbiAgICogICBpbiBtaW51dGVzIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCB0aGUgZGVmYXVsdCB6b25lIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfG51bWJlcn0gW2lucHV0XSAtIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHJldHVybiB7Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVab25lKGlucHV0KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoaW5wdXQsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2NjEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdsb25nJywgeyBvdXRwdXRDYWxlbmRhcjogJ2lzbGFtaWMnIH0pWzBdIC8vPT4gJ1JhYmlcdTAyQkIgSSdcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgbW9udGhzKFxuICAgIGxlbmd0aCA9IFwibG9uZ1wiLFxuICAgIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCwgb3V0cHV0Q2FsZW5kYXIgPSBcImdyZWdvcnlcIiB9ID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IG1vbnRoIG5hbWVzLlxuICAgKiBGb3JtYXQgbW9udGhzIGRpZmZlciBmcm9tIHN0YW5kYWxvbmUgbW9udGhzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byB0aGUgZGF5IG9mIHRoZSBtb250aC4gSW4gc29tZSBsYW5ndWFnZXMsIHRoYXRcbiAgICogY2hhbmdlcyB0aGUgc3RyaW5nLlxuICAgKiBTZWUge0BsaW5rIEluZm8jbW9udGhzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRoc0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgd2VlayBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgd2Vla2RheSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKClbMF0gLy89PiAnTW9uZGF5J1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcpWzBdIC8vPT4gJ01vbidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9KVswXSAvLz0+ICdsdW4uJ1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ1x1MDYyN1x1MDY0NFx1MDYyN1x1MDYyQlx1MDY0Nlx1MDY0QVx1MDY0NidcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXMobGVuZ3RoID0gXCJsb25nXCIsIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IHdlZWsgbmFtZXMuXG4gICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI3dlZWtkYXlzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9bnVsbF0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF1cbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICdcdTEwMTRcdTEwMzZcdTEwMTRcdTEwMDBcdTEwM0EnLCAnXHUxMDBBXHUxMDE0XHUxMDMxJyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmlkaWVtcyh7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J3Nob3J0J10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBlcmEgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJzaG9ydFwiIG9yIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXVxuICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnKSAvLz0+IFsgJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJywgeyBsb2NhbGU6ICdmcicgfSkgLy89PiBbICdhdmFudCBKXHUwMEU5c3VzLUNocmlzdCcsICdhcHJcdTAwRThzIEpcdTAwRTlzdXMtQ2hyaXN0JyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIGVyYXMobGVuZ3RoID0gXCJzaG9ydFwiLCB7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudWxsLCBcImdyZWdvcnlcIikuZXJhcyhsZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmZWF0dXJlcyBpbiB0aGlzIGVudmlyb25tZW50LlxuICAgKiBTb21lIGZlYXR1cmVzIG9mIEx1eG9uIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuIEZvciBleGFtcGxlLCBvbiBvbGRlciBicm93c2VycywgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuXG4gICAqIEtleXM6XG4gICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZ1xuICAgKiBAZXhhbXBsZSBJbmZvLmZlYXR1cmVzKCkgLy89PiB7IHJlbGF0aXZlOiBmYWxzZSB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmZWF0dXJlcygpIHtcbiAgICByZXR1cm4geyByZWxhdGl2ZTogaGFzUmVsYXRpdmUoKSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7XG4gIGNvbnN0IHV0Y0RheVN0YXJ0ID0gKGR0KSA9PiBkdC50b1VUQygwLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksXG4gICAgbXMgPSB1dGNEYXlTdGFydChsYXRlcikgLSB1dGNEYXlTdGFydChlYXJsaWVyKTtcbiAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoXCJkYXlzXCIpKTtcbn1cblxuZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHtcbiAgY29uc3QgZGlmZmVycyA9IFtcbiAgICBbXCJ5ZWFyc1wiLCAoYSwgYikgPT4gYi55ZWFyIC0gYS55ZWFyXSxcbiAgICBbXCJxdWFydGVyc1wiLCAoYSwgYikgPT4gYi5xdWFydGVyIC0gYS5xdWFydGVyXSxcbiAgICBbXCJtb250aHNcIiwgKGEsIGIpID0+IGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMl0sXG4gICAgW1xuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgZGF5cyA9IGRheURpZmYoYSwgYik7XG4gICAgICAgIHJldHVybiAoZGF5cyAtIChkYXlzICUgNykpIC8gNztcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXCJkYXlzXCIsIGRheURpZmZdLFxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSB7fTtcbiAgbGV0IGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7XG5cbiAgZm9yIChjb25zdCBbdW5pdCwgZGlmZmVyXSBvZiBkaWZmZXJzKSB7XG4gICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkge1xuICAgICAgbG93ZXN0T3JkZXIgPSB1bml0O1xuXG4gICAgICBsZXQgZGVsdGEgPSBkaWZmZXIoY3Vyc29yLCBsYXRlcik7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFt1bml0XTogZGVsdGEgfSk7XG5cbiAgICAgIGlmIChoaWdoV2F0ZXIgPiBsYXRlcikge1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGx1cyh7IFt1bml0XTogZGVsdGEgLSAxIH0pO1xuICAgICAgICBkZWx0YSAtPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3Vyc29yID0gaGlnaFdhdGVyO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRzW3VuaXRdID0gZGVsdGE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBvcHRzKSB7XG4gIGxldCBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXSA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyk7XG5cbiAgY29uc3QgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7XG5cbiAgY29uc3QgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKFxuICAgICh1KSA9PiBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCJdLmluZGV4T2YodSkgPj0gMFxuICApO1xuXG4gIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFtsb3dlc3RPcmRlcl06IDEgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhpZ2hXYXRlciAhPT0gY3Vyc29yKSB7XG4gICAgICByZXN1bHRzW2xvd2VzdE9yZGVyXSA9IChyZXN1bHRzW2xvd2VzdE9yZGVyXSB8fCAwKSArIHJlbWFpbmluZ01pbGxpcyAvIChoaWdoV2F0ZXIgLSBjdXJzb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gRHVyYXRpb24uZnJvbU9iamVjdChyZXN1bHRzLCBvcHRzKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpXG4gICAgICAuc2hpZnRUbyguLi5sb3dlck9yZGVyVW5pdHMpXG4gICAgICAucGx1cyhkdXJhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG59XG4iLCAiY29uc3QgbnVtYmVyaW5nU3lzdGVtcyA9IHtcbiAgYXJhYjogXCJbXFx1MDY2MC1cXHUwNjY5XVwiLFxuICBhcmFiZXh0OiBcIltcXHUwNkYwLVxcdTA2RjldXCIsXG4gIGJhbGk6IFwiW1xcdTFCNTAtXFx1MUI1OV1cIixcbiAgYmVuZzogXCJbXFx1MDlFNi1cXHUwOUVGXVwiLFxuICBkZXZhOiBcIltcXHUwOTY2LVxcdTA5NkZdXCIsXG4gIGZ1bGx3aWRlOiBcIltcXHVGRjEwLVxcdUZGMTldXCIsXG4gIGd1anI6IFwiW1xcdTBBRTYtXFx1MEFFRl1cIixcbiAgaGFuaWRlYzogXCJbXHUzMDA3fFx1NEUwMHxcdTRFOEN8XHU0RTA5fFx1NTZEQnxcdTRFOTR8XHU1MTZEfFx1NEUwM3xcdTUxNkJ8XHU0RTVEXVwiLFxuICBraG1yOiBcIltcXHUxN0UwLVxcdTE3RTldXCIsXG4gIGtuZGE6IFwiW1xcdTBDRTYtXFx1MENFRl1cIixcbiAgbGFvbzogXCJbXFx1MEVEMC1cXHUwRUQ5XVwiLFxuICBsaW1iOiBcIltcXHUxOTQ2LVxcdTE5NEZdXCIsXG4gIG1seW06IFwiW1xcdTBENjYtXFx1MEQ2Rl1cIixcbiAgbW9uZzogXCJbXFx1MTgxMC1cXHUxODE5XVwiLFxuICBteW1yOiBcIltcXHUxMDQwLVxcdTEwNDldXCIsXG4gIG9yeWE6IFwiW1xcdTBCNjYtXFx1MEI2Rl1cIixcbiAgdGFtbGRlYzogXCJbXFx1MEJFNi1cXHUwQkVGXVwiLFxuICB0ZWx1OiBcIltcXHUwQzY2LVxcdTBDNkZdXCIsXG4gIHRoYWk6IFwiW1xcdTBFNTAtXFx1MEU1OV1cIixcbiAgdGlidDogXCJbXFx1MEYyMC1cXHUwRjI5XVwiLFxuICBsYXRuOiBcIlxcXFxkXCIsXG59O1xuXG5jb25zdCBudW1iZXJpbmdTeXN0ZW1zVVRGMTYgPSB7XG4gIGFyYWI6IFsxNjMyLCAxNjQxXSxcbiAgYXJhYmV4dDogWzE3NzYsIDE3ODVdLFxuICBiYWxpOiBbNjk5MiwgNzAwMV0sXG4gIGJlbmc6IFsyNTM0LCAyNTQzXSxcbiAgZGV2YTogWzI0MDYsIDI0MTVdLFxuICBmdWxsd2lkZTogWzY1Mjk2LCA2NTMwM10sXG4gIGd1anI6IFsyNzkwLCAyNzk5XSxcbiAga2htcjogWzYxMTIsIDYxMjFdLFxuICBrbmRhOiBbMzMwMiwgMzMxMV0sXG4gIGxhb286IFszNzkyLCAzODAxXSxcbiAgbGltYjogWzY0NzAsIDY0NzldLFxuICBtbHltOiBbMzQzMCwgMzQzOV0sXG4gIG1vbmc6IFs2MTYwLCA2MTY5XSxcbiAgbXltcjogWzQxNjAsIDQxNjldLFxuICBvcnlhOiBbMjkxOCwgMjkyN10sXG4gIHRhbWxkZWM6IFszMDQ2LCAzMDU1XSxcbiAgdGVsdTogWzMxNzQsIDMxODNdLFxuICB0aGFpOiBbMzY2NCwgMzY3M10sXG4gIHRpYnQ6IFszODcyLCAzODgxXSxcbn07XG5cbmNvbnN0IGhhbmlkZWNDaGFycyA9IG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYy5yZXBsYWNlKC9bXFxbfFxcXV0vZywgXCJcIikuc3BsaXQoXCJcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURpZ2l0cyhzdHIpIHtcbiAgbGV0IHZhbHVlID0gcGFyc2VJbnQoc3RyLCAxMCk7XG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcblxuICAgICAgaWYgKHN0cltpXS5zZWFyY2gobnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjKSAhPT0gLTEpIHtcbiAgICAgICAgdmFsdWUgKz0gaGFuaWRlY0NoYXJzLmluZGV4T2Yoc3RyW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG51bWJlcmluZ1N5c3RlbXNVVEYxNikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBudW1iZXJpbmdTeXN0ZW1zVVRGMTZba2V5XTtcbiAgICAgICAgICBpZiAoY29kZSA+PSBtaW4gJiYgY29kZSA8PSBtYXgpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IGNvZGUgLSBtaW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlnaXRSZWdleCh7IG51bWJlcmluZ1N5c3RlbSB9LCBhcHBlbmQgPSBcIlwiKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKGAke251bWJlcmluZ1N5c3RlbXNbbnVtYmVyaW5nU3lzdGVtIHx8IFwibGF0blwiXX0ke2FwcGVuZH1gKTtcbn1cbiIsICJpbXBvcnQgeyBwYXJzZU1pbGxpcywgaXNVbmRlZmluZWQsIHVudHJ1bmNhdGVZZWFyLCBzaWduZWRPZmZzZXQsIGhhc093blByb3BlcnR5IH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IEZvcm1hdHRlciBmcm9tIFwiLi9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IHsgZGlnaXRSZWdleCwgcGFyc2VEaWdpdHMgfSBmcm9tIFwiLi9kaWdpdHMuanNcIjtcbmltcG9ydCB7IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG5jb25zdCBNSVNTSU5HX0ZUUCA9IFwibWlzc2luZyBJbnRsLkRhdGVUaW1lRm9ybWF0LmZvcm1hdFRvUGFydHMgc3VwcG9ydFwiO1xuXG5mdW5jdGlvbiBpbnRVbml0KHJlZ2V4LCBwb3N0ID0gKGkpID0+IGkpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoW3NdKSA9PiBwb3N0KHBhcnNlRGlnaXRzKHMpKSB9O1xufVxuXG5jb25zdCBOQlNQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApO1xuY29uc3Qgc3BhY2VPck5CU1AgPSBgWyAke05CU1B9XWA7XG5jb25zdCBzcGFjZU9yTkJTUFJlZ0V4cCA9IG5ldyBSZWdFeHAoc3BhY2VPck5CU1AsIFwiZ1wiKTtcblxuZnVuY3Rpb24gZml4TGlzdFJlZ2V4KHMpIHtcbiAgLy8gbWFrZSBkb3RzIG9wdGlvbmFsIGFuZCBhbHNvIG1ha2UgdGhlbSBsaXRlcmFsXG4gIC8vIG1ha2Ugc3BhY2UgYW5kIG5vbiBicmVha2FibGUgc3BhY2UgY2hhcmFjdGVycyBpbnRlcmNoYW5nZWFibGVcbiAgcmV0dXJuIHMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC4/XCIpLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIHNwYWNlT3JOQlNQKTtcbn1cblxuZnVuY3Rpb24gc3RyaXBJbnNlbnNpdGl2aXRpZXMocykge1xuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXC4vZywgXCJcIikgLy8gaWdub3JlIGRvdHMgdGhhdCB3ZXJlIG1hZGUgb3B0aW9uYWxcbiAgICAucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgXCIgXCIpIC8vIGludGVyY2hhbmdlIHNwYWNlIGFuZCBuYnNwXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG9uZU9mKHN0cmluZ3MsIHN0YXJ0SW5kZXgpIHtcbiAgaWYgKHN0cmluZ3MgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnZXg6IFJlZ0V4cChzdHJpbmdzLm1hcChmaXhMaXN0UmVnZXgpLmpvaW4oXCJ8XCIpKSxcbiAgICAgIGRlc2VyOiAoW3NdKSA9PlxuICAgICAgICBzdHJpbmdzLmZpbmRJbmRleCgoaSkgPT4gc3RyaXBJbnNlbnNpdGl2aXRpZXMocykgPT09IHN0cmlwSW5zZW5zaXRpdml0aWVzKGkpKSArIHN0YXJ0SW5kZXgsXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvZmZzZXQocmVnZXgsIGdyb3Vwcykge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbLCBoLCBtXSkgPT4gc2lnbmVkT2Zmc2V0KGgsIG0pLCBncm91cHMgfTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlKHJlZ2V4KSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcyB9O1xufVxuXG5mdW5jdGlvbiBlc2NhcGVUb2tlbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiB1bml0Rm9yVG9rZW4odG9rZW4sIGxvYykge1xuICBjb25zdCBvbmUgPSBkaWdpdFJlZ2V4KGxvYyksXG4gICAgdHdvID0gZGlnaXRSZWdleChsb2MsIFwiezJ9XCIpLFxuICAgIHRocmVlID0gZGlnaXRSZWdleChsb2MsIFwiezN9XCIpLFxuICAgIGZvdXIgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7NH1cIiksXG4gICAgc2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezZ9XCIpLFxuICAgIG9uZU9yVHdvID0gZGlnaXRSZWdleChsb2MsIFwiezEsMn1cIiksXG4gICAgb25lVG9UaHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDN9XCIpLFxuICAgIG9uZVRvU2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezEsNn1cIiksXG4gICAgb25lVG9OaW5lID0gZGlnaXRSZWdleChsb2MsIFwiezEsOX1cIiksXG4gICAgdHdvVG9Gb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezIsNH1cIiksXG4gICAgZm91clRvU2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezQsNn1cIiksXG4gICAgbGl0ZXJhbCA9ICh0KSA9PiAoeyByZWdleDogUmVnRXhwKGVzY2FwZVRva2VuKHQudmFsKSksIGRlc2VyOiAoW3NdKSA9PiBzLCBsaXRlcmFsOiB0cnVlIH0pLFxuICAgIHVuaXRhdGUgPSAodCkgPT4ge1xuICAgICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHQudmFsKSB7XG4gICAgICAgIC8vIGVyYVxuICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcyhcInNob3J0XCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcyhcImxvbmdcIiwgZmFsc2UpLCAwKTtcbiAgICAgICAgLy8geWVhcnNcbiAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1NpeCk7XG4gICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwieXl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTtcbiAgICAgICAgLy8gbW9udGhzXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJzaG9ydFwiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBkYXRlc1xuICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgLy8gb3JkaW5hbHNcbiAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTtcbiAgICAgICAgY2FzZSBcIm9vb1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTtcbiAgICAgICAgLy8gdGltZVxuICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcImhoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJTU1NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpO1xuICAgICAgICBjYXNlIFwidXVcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIC8vIG1lcmlkaWVtXG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tZXJpZGllbXMoKSwgMCk7XG4gICAgICAgIC8vIHdlZWtZZWFyIChrKVxuICAgICAgICBjYXNlIFwia2tra1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgLy8gd2Vla051bWJlciAoVylcbiAgICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJXV1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIHdlZWtkYXlzXG4gICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTtcbiAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJsb25nXCIsIHRydWUsIGZhbHNlKSwgMSk7XG4gICAgICAgIC8vIG9mZnNldC96b25lXG4gICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKD86Oigke3R3by5zb3VyY2V9KSk/YCksIDIpO1xuICAgICAgICBjYXNlIFwiWlpaXCI6XG4gICAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKGAoWystXSR7b25lT3JUd28uc291cmNlfSkoJHt0d28uc291cmNlfSk/YCksIDIpO1xuICAgICAgICAvLyB3ZSBkb24ndCBzdXBwb3J0IFpaWlogKFBTVCkgb3IgWlpaWlogKFBhY2lmaWMgU3RhbmRhcmQgVGltZSkgaW4gcGFyc2luZ1xuICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IHdheSB0byBmaWd1cmUgb3V0IHdoYXQgdGhleSBhcmVcbiAgICAgICAgY2FzZSBcInpcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKC9bYS16XystL117MSwyNTZ9Py9pKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbGl0ZXJhbCh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGNvbnN0IHVuaXQgPSB1bml0YXRlKHRva2VuKSB8fCB7XG4gICAgaW52YWxpZFJlYXNvbjogTUlTU0lOR19GVFAsXG4gIH07XG5cbiAgdW5pdC50b2tlbiA9IHRva2VuO1xuXG4gIHJldHVybiB1bml0O1xufVxuXG5jb25zdCBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbCA9IHtcbiAgeWVhcjoge1xuICAgIFwiMi1kaWdpdFwiOiBcInl5XCIsXG4gICAgbnVtZXJpYzogXCJ5eXl5eVwiLFxuICB9LFxuICBtb250aDoge1xuICAgIG51bWVyaWM6IFwiTVwiLFxuICAgIFwiMi1kaWdpdFwiOiBcIk1NXCIsXG4gICAgc2hvcnQ6IFwiTU1NXCIsXG4gICAgbG9uZzogXCJNTU1NXCIsXG4gIH0sXG4gIGRheToge1xuICAgIG51bWVyaWM6IFwiZFwiLFxuICAgIFwiMi1kaWdpdFwiOiBcImRkXCIsXG4gIH0sXG4gIHdlZWtkYXk6IHtcbiAgICBzaG9ydDogXCJFRUVcIixcbiAgICBsb25nOiBcIkVFRUVcIixcbiAgfSxcbiAgZGF5cGVyaW9kOiBcImFcIixcbiAgZGF5UGVyaW9kOiBcImFcIixcbiAgaG91cjoge1xuICAgIG51bWVyaWM6IFwiaFwiLFxuICAgIFwiMi1kaWdpdFwiOiBcImhoXCIsXG4gIH0sXG4gIG1pbnV0ZToge1xuICAgIG51bWVyaWM6IFwibVwiLFxuICAgIFwiMi1kaWdpdFwiOiBcIm1tXCIsXG4gIH0sXG4gIHNlY29uZDoge1xuICAgIG51bWVyaWM6IFwic1wiLFxuICAgIFwiMi1kaWdpdFwiOiBcInNzXCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiB0b2tlbkZvclBhcnQocGFydCwgbG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHBhcnQ7XG5cbiAgaWYgKHR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IHRydWUsXG4gICAgICB2YWw6IHZhbHVlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzdHlsZSA9IGZvcm1hdE9wdHNbdHlwZV07XG5cbiAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW3R5cGVdO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZhbCA9IHZhbFtzdHlsZV07XG4gIH1cblxuICBpZiAodmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IGZhbHNlLFxuICAgICAgdmFsLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7XG4gIGNvbnN0IHJlID0gdW5pdHMubWFwKCh1KSA9PiB1LnJlZ2V4KS5yZWR1Y2UoKGYsIHIpID0+IGAke2Z9KCR7ci5zb3VyY2V9KWAsIFwiXCIpO1xuICByZXR1cm4gW2BeJHtyZX0kYCwgdW5pdHNdO1xufVxuXG5mdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBjb25zdCBhbGwgPSB7fTtcbiAgICBsZXQgbWF0Y2hJbmRleCA9IDE7XG4gICAgZm9yIChjb25zdCBpIGluIGhhbmRsZXJzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7XG4gICAgICAgIGNvbnN0IGggPSBoYW5kbGVyc1tpXSxcbiAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7XG4gICAgICAgIGlmICghaC5saXRlcmFsICYmIGgudG9rZW4pIHtcbiAgICAgICAgICBhbGxbaC50b2tlbi52YWxbMF1dID0gaC5kZXNlcihtYXRjaGVzLnNsaWNlKG1hdGNoSW5kZXgsIG1hdGNoSW5kZXggKyBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaEluZGV4ICs9IGdyb3VwcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbWF0Y2hlcywge31dO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykge1xuICBjb25zdCB0b0ZpZWxkID0gKHRva2VuKSA9PiB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgcmV0dXJuIFwibWlsbGlzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICByZXR1cm4gXCJvcmRpbmFsXCI7XG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgIHJldHVybiBcInllYXJcIjtcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrZGF5XCI7XG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrTnVtYmVyXCI7XG4gICAgICBjYXNlIFwia1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrWWVhclwiO1xuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFwicXVhcnRlclwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxldCB6b25lID0gbnVsbDtcbiAgbGV0IHNwZWNpZmljT2Zmc2V0O1xuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMueikpIHtcbiAgICB6b25lID0gSUFOQVpvbmUuY3JlYXRlKG1hdGNoZXMueik7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHtcbiAgICBpZiAoIXpvbmUpIHtcbiAgICAgIHpvbmUgPSBuZXcgRml4ZWRPZmZzZXRab25lKG1hdGNoZXMuWik7XG4gICAgfVxuICAgIHNwZWNpZmljT2Zmc2V0ID0gbWF0Y2hlcy5aO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7XG4gICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuaCkpIHtcbiAgICBpZiAobWF0Y2hlcy5oIDwgMTIgJiYgbWF0Y2hlcy5hID09PSAxKSB7XG4gICAgICBtYXRjaGVzLmggKz0gMTI7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzLmggPT09IDEyICYmIG1hdGNoZXMuYSA9PT0gMCkge1xuICAgICAgbWF0Y2hlcy5oID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2hlcy5HID09PSAwICYmIG1hdGNoZXMueSkge1xuICAgIG1hdGNoZXMueSA9IC1tYXRjaGVzLnk7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHtcbiAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpO1xuICB9XG5cbiAgY29uc3QgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZSgociwgaykgPT4ge1xuICAgIGNvbnN0IGYgPSB0b0ZpZWxkKGspO1xuICAgIGlmIChmKSB7XG4gICAgICByW2ZdID0gbWF0Y2hlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSwge30pO1xuXG4gIHJldHVybiBbdmFscywgem9uZSwgc3BlY2lmaWNPZmZzZXRdO1xufVxuXG5sZXQgZHVtbXlEYXRlVGltZUNhY2hlID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0RHVtbXlEYXRlVGltZSgpIHtcbiAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHtcbiAgICBkdW1teURhdGVUaW1lQ2FjaGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpO1xuICB9XG5cbiAgcmV0dXJuIGR1bW15RGF0ZVRpbWVDYWNoZTtcbn1cblxuZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHtcbiAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTtcblxuICBpZiAoIWZvcm1hdE9wdHMpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZXIgPSBGb3JtYXR0ZXIuY3JlYXRlKGxvY2FsZSwgZm9ybWF0T3B0cyk7XG4gIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdERhdGVUaW1lUGFydHMoZ2V0RHVtbXlEYXRlVGltZSgpKTtcblxuICBjb25zdCB0b2tlbnMgPSBwYXJ0cy5tYXAoKHApID0+IHRva2VuRm9yUGFydChwLCBsb2NhbGUsIGZvcm1hdE9wdHMpKTtcblxuICBpZiAodG9rZW5zLmluY2x1ZGVzKHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBleHBhbmRNYWNyb1Rva2Vucyh0b2tlbnMsIGxvY2FsZSkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi50b2tlbnMubWFwKCh0KSA9PiBtYXliZUV4cGFuZE1hY3JvVG9rZW4odCwgbG9jYWxlKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB0b2tlbnMgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm9ybWF0KSwgbG9jYWxlKSxcbiAgICB1bml0cyA9IHRva2Vucy5tYXAoKHQpID0+IHVuaXRGb3JUb2tlbih0LCBsb2NhbGUpKSxcbiAgICBkaXNxdWFsaWZ5aW5nVW5pdCA9IHVuaXRzLmZpbmQoKHQpID0+IHQuaW52YWxpZFJlYXNvbik7XG5cbiAgaWYgKGRpc3F1YWxpZnlpbmdVbml0KSB7XG4gICAgcmV0dXJuIHsgaW5wdXQsIHRva2VucywgaW52YWxpZFJlYXNvbjogZGlzcXVhbGlmeWluZ1VuaXQuaW52YWxpZFJlYXNvbiB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtyZWdleFN0cmluZywgaGFuZGxlcnNdID0gYnVpbGRSZWdleCh1bml0cyksXG4gICAgICByZWdleCA9IFJlZ0V4cChyZWdleFN0cmluZywgXCJpXCIpLFxuICAgICAgW3Jhd01hdGNoZXMsIG1hdGNoZXNdID0gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycyksXG4gICAgICBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldF0gPSBtYXRjaGVzXG4gICAgICAgID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKVxuICAgICAgICA6IFtudWxsLCBudWxsLCB1bmRlZmluZWRdO1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCBcImFcIikgJiYgaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJIXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXRcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5wdXQsIHRva2VucywgcmVnZXgsIHJhd01hdGNoZXMsIG1hdGNoZXMsIHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCk7XG4gIHJldHVybiBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZFJlYXNvbl07XG59XG4iLCAiaW1wb3J0IHtcbiAgaW50ZWdlckJldHdlZW4sXG4gIGlzTGVhcFllYXIsXG4gIHRpbWVPYmplY3QsXG4gIGRheXNJblllYXIsXG4gIGRheXNJbk1vbnRoLFxuICB3ZWVrc0luV2Vla1llYXIsXG4gIGlzSW50ZWdlcixcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW52YWxpZC5qc1wiO1xuXG5jb25zdCBub25MZWFwTGFkZGVyID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSxcbiAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07XG5cbmZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7XG4gIHJldHVybiBuZXcgSW52YWxpZChcbiAgICBcInVuaXQgb3V0IG9mIHJhbmdlXCIsXG4gICAgYHlvdSBzcGVjaWZpZWQgJHt2YWx1ZX0gKG9mIHR5cGUgJHt0eXBlb2YgdmFsdWV9KSBhcyBhICR7dW5pdH0sIHdoaWNoIGlzIGludmFsaWRgXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCAtIDEsIGRheSkpO1xuXG4gIGlmICh5ZWFyIDwgMTAwICYmIHllYXIgPj0gMCkge1xuICAgIGQuc2V0VVRDRnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCk7XG4gIH1cblxuICBjb25zdCBqcyA9IGQuZ2V0VVRDRGF5KCk7XG5cbiAgcmV0dXJuIGpzID09PSAwID8gNyA6IGpzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSB7XG4gIHJldHVybiBkYXkgKyAoaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyKVttb250aCAtIDFdO1xufVxuXG5mdW5jdGlvbiB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpIHtcbiAgY29uc3QgdGFibGUgPSBpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIsXG4gICAgbW9udGgwID0gdGFibGUuZmluZEluZGV4KChpKSA9PiBpIDwgb3JkaW5hbCksXG4gICAgZGF5ID0gb3JkaW5hbCAtIHRhYmxlW21vbnRoMF07XG4gIHJldHVybiB7IG1vbnRoOiBtb250aDAgKyAxLCBkYXkgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaikge1xuICBjb25zdCB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IGdyZWdPYmosXG4gICAgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpLFxuICAgIHdlZWtkYXkgPSBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSk7XG5cbiAgbGV0IHdlZWtOdW1iZXIgPSBNYXRoLmZsb29yKChvcmRpbmFsIC0gd2Vla2RheSArIDEwKSAvIDcpLFxuICAgIHdlZWtZZWFyO1xuXG4gIGlmICh3ZWVrTnVtYmVyIDwgMSkge1xuICAgIHdlZWtZZWFyID0geWVhciAtIDE7XG4gICAgd2Vla051bWJlciA9IHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAod2Vla051bWJlciA+IHdlZWtzSW5XZWVrWWVhcih5ZWFyKSkge1xuICAgIHdlZWtZZWFyID0geWVhciArIDE7XG4gICAgd2Vla051bWJlciA9IDE7XG4gIH0gZWxzZSB7XG4gICAgd2Vla1llYXIgPSB5ZWFyO1xuICB9XG5cbiAgcmV0dXJuIHsgd2Vla1llYXIsIHdlZWtOdW1iZXIsIHdlZWtkYXksIC4uLnRpbWVPYmplY3QoZ3JlZ09iaikgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtUb0dyZWdvcmlhbih3ZWVrRGF0YSkge1xuICBjb25zdCB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5IH0gPSB3ZWVrRGF0YSxcbiAgICB3ZWVrZGF5T2ZKYW40ID0gZGF5T2ZXZWVrKHdlZWtZZWFyLCAxLCA0KSxcbiAgICB5ZWFySW5EYXlzID0gZGF5c0luWWVhcih3ZWVrWWVhcik7XG5cbiAgbGV0IG9yZGluYWwgPSB3ZWVrTnVtYmVyICogNyArIHdlZWtkYXkgLSB3ZWVrZGF5T2ZKYW40IC0gMyxcbiAgICB5ZWFyO1xuXG4gIGlmIChvcmRpbmFsIDwgMSkge1xuICAgIHllYXIgPSB3ZWVrWWVhciAtIDE7XG4gICAgb3JkaW5hbCArPSBkYXlzSW5ZZWFyKHllYXIpO1xuICB9IGVsc2UgaWYgKG9yZGluYWwgPiB5ZWFySW5EYXlzKSB7XG4gICAgeWVhciA9IHdlZWtZZWFyICsgMTtcbiAgICBvcmRpbmFsIC09IGRheXNJblllYXIod2Vla1llYXIpO1xuICB9IGVsc2Uge1xuICAgIHllYXIgPSB3ZWVrWWVhcjtcbiAgfVxuXG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdCh3ZWVrRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyZWdvcmlhblRvT3JkaW5hbChncmVnRGF0YSkge1xuICBjb25zdCB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IGdyZWdEYXRhO1xuICBjb25zdCBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSk7XG4gIHJldHVybiB7IHllYXIsIG9yZGluYWwsIC4uLnRpbWVPYmplY3QoZ3JlZ0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRpbmFsVG9HcmVnb3JpYW4ob3JkaW5hbERhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBvcmRpbmFsIH0gPSBvcmRpbmFsRGF0YTtcbiAgY29uc3QgeyBtb250aCwgZGF5IH0gPSB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpO1xuICByZXR1cm4geyB5ZWFyLCBtb250aCwgZGF5LCAuLi50aW1lT2JqZWN0KG9yZGluYWxEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLndlZWtZZWFyKSxcbiAgICB2YWxpZFdlZWsgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla051bWJlciwgMSwgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhcikpLFxuICAgIHZhbGlkV2Vla2RheSA9IGludGVnZXJCZXR3ZWVuKG9iai53ZWVrZGF5LCAxLCA3KTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtZZWFyXCIsIG9iai53ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkV2Vlaykge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtcIiwgb2JqLndlZWspO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrZGF5XCIsIG9iai53ZWVrZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRPcmRpbmFsRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai55ZWFyKSxcbiAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm9yZGluYWxcIiwgb2JqLm9yZGluYWwpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRNb250aCA9IGludGVnZXJCZXR3ZWVuKG9iai5tb250aCwgMSwgMTIpLFxuICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtb250aFwiLCBvYmoubW9udGgpO1xuICB9IGVsc2UgaWYgKCF2YWxpZERheSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcImRheVwiLCBvYmouZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHtcbiAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSA9IG9iajtcbiAgY29uc3QgdmFsaWRIb3VyID1cbiAgICAgIGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fFxuICAgICAgKGhvdXIgPT09IDI0ICYmIG1pbnV0ZSA9PT0gMCAmJiBzZWNvbmQgPT09IDAgJiYgbWlsbGlzZWNvbmQgPT09IDApLFxuICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksXG4gICAgdmFsaWRTZWNvbmQgPSBpbnRlZ2VyQmV0d2VlbihzZWNvbmQsIDAsIDU5KSxcbiAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7XG5cbiAgaWYgKCF2YWxpZEhvdXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJob3VyXCIsIGhvdXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInNlY29uZFwiLCBzZWNvbmQpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBJbmZvIGZyb20gXCIuL2luZm8uanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQge1xuICBpc1VuZGVmaW5lZCxcbiAgbWF5YmVBcnJheSxcbiAgaXNEYXRlLFxuICBpc051bWJlcixcbiAgYmVzdEJ5LFxuICBkYXlzSW5Nb250aCxcbiAgZGF5c0luWWVhcixcbiAgaXNMZWFwWWVhcixcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG4gIG9ialRvTG9jYWxUUyxcbiAgcGFkU3RhcnQsXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcbmltcG9ydCBkaWZmIGZyb20gXCIuL2ltcGwvZGlmZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSRkMyODIyRGF0ZSwgcGFyc2VJU09EYXRlLCBwYXJzZUhUVFBEYXRlLCBwYXJzZVNRTCB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlRnJvbVRva2VucywgZXhwbGFpbkZyb21Ub2tlbnMgfSBmcm9tIFwiLi9pbXBsL3Rva2VuUGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBncmVnb3JpYW5Ub1dlZWssXG4gIHdlZWtUb0dyZWdvcmlhbixcbiAgZ3JlZ29yaWFuVG9PcmRpbmFsLFxuICBvcmRpbmFsVG9HcmVnb3JpYW4sXG4gIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhLFxuICBoYXNJbnZhbGlkV2Vla0RhdGEsXG4gIGhhc0ludmFsaWRPcmRpbmFsRGF0YSxcbiAgaGFzSW52YWxpZFRpbWVEYXRhLFxufSBmcm9tIFwiLi9pbXBsL2NvbnZlcnNpb25zLmpzXCI7XG5pbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2ltcGwvZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yLFxuICBJbnZhbGlkVW5pdEVycm9yLFxuICBJbnZhbGlkRGF0ZVRpbWVFcnJvcixcbn0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcblxuY29uc3QgSU5WQUxJRCA9IFwiSW52YWxpZCBEYXRlVGltZVwiO1xuY29uc3QgTUFYX0RBVEUgPSA4LjY0ZTE1O1xuXG5mdW5jdGlvbiB1bnN1cHBvcnRlZFpvbmUoem9uZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXCJ1bnN1cHBvcnRlZCB6b25lXCIsIGB0aGUgem9uZSBcIiR7em9uZS5uYW1lfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbn1cblxuLy8gd2UgY2FjaGUgd2VlayBkYXRhIG9uIHRoZSBEVCBvYmplY3QgYW5kIHRoaXMgaW50ZXJtZWRpYXRlcyB0aGUgY2FjaGVcbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHtcbiAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7XG4gICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7XG4gIH1cbiAgcmV0dXJuIGR0LndlZWtEYXRhO1xufVxuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMsIFwibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zXCIuIGFsbCBcInNldHRlcnNcIiByZWFsbHkgdXNlIHRoaXNcbi8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBjbG9uZShpbnN0LCBhbHRzKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgdHM6IGluc3QudHMsXG4gICAgem9uZTogaW5zdC56b25lLFxuICAgIGM6IGluc3QuYyxcbiAgICBvOiBpbnN0Lm8sXG4gICAgbG9jOiBpbnN0LmxvYyxcbiAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQsXG4gIH07XG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyAuLi5jdXJyZW50LCAuLi5hbHRzLCBvbGQ6IGN1cnJlbnQgfSk7XG59XG5cbi8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaFxuLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVClcbmZ1bmN0aW9uIGZpeE9mZnNldChsb2NhbFRTLCBvLCB0eikge1xuICAvLyBPdXIgVVRDIHRpbWUgaXMganVzdCBhIGd1ZXNzIGJlY2F1c2Ugb3VyIG9mZnNldCBpcyBqdXN0IGEgZ3Vlc3NcbiAgbGV0IHV0Y0d1ZXNzID0gbG9jYWxUUyAtIG8gKiA2MCAqIDEwMDA7XG5cbiAgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0c1xuICBjb25zdCBvMiA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG5cbiAgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lXG4gIGlmIChvID09PSBvMikge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG9dO1xuICB9XG5cbiAgLy8gSWYgbm90LCBjaGFuZ2UgdGhlIHRzIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBvZmZzZXRcbiAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7XG5cbiAgLy8gSWYgdGhhdCBnaXZlcyB1cyB0aGUgbG9jYWwgdGltZSB3ZSB3YW50LCB3ZSdyZSBkb25lXG4gIGNvbnN0IG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTtcbiAgaWYgKG8yID09PSBvMykge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG8yXTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWVcbiAgcmV0dXJuIFtsb2NhbFRTIC0gTWF0aC5taW4obzIsIG8zKSAqIDYwICogMTAwMCwgTWF0aC5tYXgobzIsIG8zKV07XG59XG5cbi8vIGNvbnZlcnQgYW4gZXBvY2ggdGltZXN0YW1wIGludG8gYSBjYWxlbmRhciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0XG5mdW5jdGlvbiB0c1RvT2JqKHRzLCBvZmZzZXQpIHtcbiAgdHMgKz0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgZGF5OiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlOiBkLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBzZWNvbmQ6IGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICB9O1xufVxuXG4vLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wXG5mdW5jdGlvbiBvYmpUb1RTKG9iaiwgb2Zmc2V0LCB6b25lKSB7XG4gIHJldHVybiBmaXhPZmZzZXQob2JqVG9Mb2NhbFRTKG9iaiksIG9mZnNldCwgem9uZSk7XG59XG5cbi8vIGNyZWF0ZSBhIG5ldyBEVCBpbnN0YW5jZSBieSBhZGRpbmcgYSBkdXJhdGlvbiwgYWRqdXN0aW5nIGZvciBEU1RzXG5mdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikge1xuICBjb25zdCBvUHJlID0gaW5zdC5vLFxuICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLFxuICAgIGMgPSB7XG4gICAgICAuLi5pbnN0LmMsXG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXk6XG4gICAgICAgIE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci5kYXlzKSArXG4gICAgICAgIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcsXG4gICAgfSxcbiAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3Qoe1xuICAgICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICAgIHF1YXJ0ZXJzOiBkdXIucXVhcnRlcnMgLSBNYXRoLnRydW5jKGR1ci5xdWFydGVycyksXG4gICAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLFxuICAgICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSxcbiAgICAgIGRheXM6IGR1ci5kYXlzIC0gTWF0aC50cnVuYyhkdXIuZGF5cyksXG4gICAgICBob3VyczogZHVyLmhvdXJzLFxuICAgICAgbWludXRlczogZHVyLm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBkdXIuc2Vjb25kcyxcbiAgICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcyxcbiAgICB9KS5hcyhcIm1pbGxpc2Vjb25kc1wiKSxcbiAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpO1xuXG4gIGxldCBbdHMsIG9dID0gZml4T2Zmc2V0KGxvY2FsVFMsIG9QcmUsIGluc3Quem9uZSk7XG5cbiAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7XG4gICAgdHMgKz0gbWlsbGlzVG9BZGQ7XG4gICAgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZVxuICAgIG8gPSBpbnN0LnpvbmUub2Zmc2V0KHRzKTtcbiAgfVxuXG4gIHJldHVybiB7IHRzLCBvIH07XG59XG5cbi8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlc1xuLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9uc1xuZnVuY3Rpb24gcGFyc2VEYXRhVG9EYXRlVGltZShwYXJzZWQsIHBhcnNlZFpvbmUsIG9wdHMsIGZvcm1hdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpIHtcbiAgY29uc3QgeyBzZXRab25lLCB6b25lIH0gPSBvcHRzO1xuICBpZiAocGFyc2VkICYmIE9iamVjdC5rZXlzKHBhcnNlZCkubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3QgaW50ZXJwcmV0YXRpb25ab25lID0gcGFyc2VkWm9uZSB8fCB6b25lLFxuICAgICAgaW5zdCA9IERhdGVUaW1lLmZyb21PYmplY3QocGFyc2VkLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHpvbmU6IGludGVycHJldGF0aW9uWm9uZSxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXQsXG4gICAgICB9KTtcbiAgICByZXR1cm4gc2V0Wm9uZSA/IGluc3QgOiBpbnN0LnNldFpvbmUoem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoXG4gICAgICBuZXcgSW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgJHtmb3JtYXR9YClcbiAgICApO1xuICB9XG59XG5cbi8vIGlmIHlvdSB3YW50IHRvIG91dHB1dCBhIHRlY2huaWNhbCBmb3JtYXQgKGUuZy4gUkZDIDI4MjIpLCB0aGlzIGhlbHBlclxuLy8gaGVscHMgaGFuZGxlIHRoZSBkZXRhaWxzXG5mdW5jdGlvbiB0b1RlY2hGb3JtYXQoZHQsIGZvcm1hdCwgYWxsb3daID0gdHJ1ZSkge1xuICByZXR1cm4gZHQuaXNWYWxpZFxuICAgID8gRm9ybWF0dGVyLmNyZWF0ZShMb2NhbGUuY3JlYXRlKFwiZW4tVVNcIiksIHtcbiAgICAgICAgYWxsb3daLFxuICAgICAgICBmb3JjZVNpbXBsZTogdHJ1ZSxcbiAgICAgIH0pLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm9ybWF0KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9JU09EYXRlKG8sIGV4dGVuZGVkKSB7XG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBvLmMueWVhciA+IDk5OTkgfHwgby5jLnllYXIgPCAwO1xuICBsZXQgYyA9IFwiXCI7XG4gIGlmIChsb25nRm9ybWF0ICYmIG8uYy55ZWFyID49IDApIGMgKz0gXCIrXCI7XG4gIGMgKz0gcGFkU3RhcnQoby5jLnllYXIsIGxvbmdGb3JtYXQgPyA2IDogNCk7XG5cbiAgaWYgKGV4dGVuZGVkKSB7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1vbnRoKTtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiB0b0lTT1RpbWUoXG4gIG8sXG4gIGV4dGVuZGVkLFxuICBzdXBwcmVzc1NlY29uZHMsXG4gIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICBpbmNsdWRlT2Zmc2V0LFxuICBleHRlbmRlZFpvbmVcbikge1xuICBsZXQgYyA9IHBhZFN0YXJ0KG8uYy5ob3VyKTtcbiAgaWYgKGV4dGVuZGVkKSB7XG4gICAgYyArPSBcIjpcIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICAgIGlmIChvLmMuc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc1NlY29uZHMpIHtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbnV0ZSk7XG4gIH1cblxuICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMuc2Vjb25kKTtcblxuICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7XG4gICAgICBjICs9IFwiLlwiO1xuICAgICAgYyArPSBwYWRTdGFydChvLmMubWlsbGlzZWNvbmQsIDMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7XG4gICAgICBjICs9IFwiWlwiO1xuICAgIH0gZWxzZSBpZiAoby5vIDwgMCkge1xuICAgICAgYyArPSBcIi1cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYygtby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgKz0gXCIrXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vICUgNjApKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ZW5kZWRab25lKSB7XG4gICAgYyArPSBcIltcIiArIG8uem9uZS5pYW5hTmFtZSArIFwiXVwiO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG4vLyBkZWZhdWx0cyBmb3IgdW5zcGVjaWZpZWQgdW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnNcbmNvbnN0IGRlZmF1bHRVbml0VmFsdWVzID0ge1xuICAgIG1vbnRoOiAxLFxuICAgIGRheTogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH0sXG4gIGRlZmF1bHRXZWVrVW5pdFZhbHVlcyA9IHtcbiAgICB3ZWVrTnVtYmVyOiAxLFxuICAgIHdlZWtkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7XG4gICAgb3JkaW5hbDogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH07XG5cbi8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzc1xuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1wieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdLFxuICBvcmRlcmVkV2Vla1VuaXRzID0gW1xuICAgIFwid2Vla1llYXJcIixcbiAgICBcIndlZWtOdW1iZXJcIixcbiAgICBcIndlZWtkYXlcIixcbiAgICBcImhvdXJcIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwic2Vjb25kXCIsXG4gICAgXCJtaWxsaXNlY29uZFwiLFxuICBdLFxuICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gW1wieWVhclwiLCBcIm9yZGluYWxcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl07XG5cbi8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0c1xuZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIG1vbnRoOiBcIm1vbnRoXCIsXG4gICAgbW9udGhzOiBcIm1vbnRoXCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVzOiBcIm1pbnV0ZVwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kczogXCJzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZFwiLFxuICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZFwiLFxuICAgIHdlZWtkYXk6IFwid2Vla2RheVwiLFxuICAgIHdlZWtkYXlzOiBcIndlZWtkYXlcIixcbiAgICB3ZWVrbnVtYmVyOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVrc251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla251bWJlcnM6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWt5ZWFyOiBcIndlZWtZZWFyXCIsXG4gICAgd2Vla3llYXJzOiBcIndlZWtZZWFyXCIsXG4gICAgb3JkaW5hbDogXCJvcmRpbmFsXCIsXG4gIH1bdW5pdC50b0xvd2VyQ2FzZSgpXTtcblxuICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vLyB0aGlzIGlzIGEgZHVtYmVkIGRvd24gdmVyc2lvbiBvZiBmcm9tT2JqZWN0KCkgdGhhdCBydW5zIGFib3V0IDYwJSBmYXN0ZXJcbi8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHNcbi8vIGFyZSBwcmVzZW50LCBhbmQgc28gb24uXG5mdW5jdGlvbiBxdWlja0RUKG9iaiwgb3B0cykge1xuICBjb25zdCB6b25lID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSxcbiAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICB0c05vdyA9IFNldHRpbmdzLm5vdygpO1xuXG4gIGxldCB0cywgbztcblxuICAvLyBhc3N1bWUgd2UgaGF2ZSB0aGUgaGlnaGVyLW9yZGVyIHVuaXRzXG4gIGlmICghaXNVbmRlZmluZWQob2JqLnllYXIpKSB7XG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKGlzVW5kZWZpbmVkKG9ialt1XSkpIHtcbiAgICAgICAgb2JqW3VdID0gZGVmYXVsdFVuaXRWYWx1ZXNbdV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG9iaik7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG9mZnNldFByb3ZpcyA9IHpvbmUub2Zmc2V0KHRzTm93KTtcbiAgICBbdHMsIG9dID0gb2JqVG9UUyhvYmosIG9mZnNldFByb3Zpcywgem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgdHMgPSB0c05vdztcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyB0cywgem9uZSwgbG9jLCBvIH0pO1xufVxuXG5mdW5jdGlvbiBkaWZmUmVsYXRpdmUoc3RhcnQsIGVuZCwgb3B0cykge1xuICBjb25zdCByb3VuZCA9IGlzVW5kZWZpbmVkKG9wdHMucm91bmQpID8gdHJ1ZSA6IG9wdHMucm91bmQsXG4gICAgZm9ybWF0ID0gKGMsIHVuaXQpID0+IHtcbiAgICAgIGMgPSByb3VuZFRvKGMsIHJvdW5kIHx8IG9wdHMuY2FsZW5kYXJ5ID8gMCA6IDIsIHRydWUpO1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gZW5kLmxvYy5jbG9uZShvcHRzKS5yZWxGb3JtYXR0ZXIob3B0cyk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjLCB1bml0KTtcbiAgICB9LFxuICAgIGRpZmZlciA9ICh1bml0KSA9PiB7XG4gICAgICBpZiAob3B0cy5jYWxlbmRhcnkpIHtcbiAgICAgICAgaWYgKCFlbmQuaGFzU2FtZShzdGFydCwgdW5pdCkpIHtcbiAgICAgICAgICByZXR1cm4gZW5kLnN0YXJ0T2YodW5pdCkuZGlmZihzdGFydC5zdGFydE9mKHVuaXQpLCB1bml0KS5nZXQodW5pdCk7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgaWYgKG9wdHMudW5pdCkge1xuICAgIHJldHVybiBmb3JtYXQoZGlmZmVyKG9wdHMudW5pdCksIG9wdHMudW5pdCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHVuaXQgb2Ygb3B0cy51bml0cykge1xuICAgIGNvbnN0IGNvdW50ID0gZGlmZmVyKHVuaXQpO1xuICAgIGlmIChNYXRoLmFicyhjb3VudCkgPj0gMSkge1xuICAgICAgcmV0dXJuIGZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3RhcnQgPiBlbmQgPyAtMCA6IDAsIG9wdHMudW5pdHNbb3B0cy51bml0cy5sZW5ndGggLSAxXSk7XG59XG5cbmZ1bmN0aW9uIGxhc3RPcHRzKGFyZ0xpc3QpIHtcbiAgbGV0IG9wdHMgPSB7fSxcbiAgICBhcmdzO1xuICBpZiAoYXJnTGlzdC5sZW5ndGggPiAwICYmIHR5cGVvZiBhcmdMaXN0W2FyZ0xpc3QubGVuZ3RoIC0gMV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBvcHRzID0gYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdO1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpLnNsaWNlKDAsIGFyZ0xpc3QubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgYXJncyA9IEFycmF5LmZyb20oYXJnTGlzdCk7XG4gIH1cbiAgcmV0dXJuIFtvcHRzLCBhcmdzXTtcbn1cblxuLyoqXG4gKiBBIERhdGVUaW1lIGlzIGFuIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyBkYXRlIGFuZCB0aW1lIGFuZCBhY2NvbXBhbnlpbmcgbWV0aG9kcy4gSXQgY29udGFpbnMgY2xhc3MgYW5kIGluc3RhbmNlIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogQSBEYXRlVGltZSBjb21wcmlzZXMgb2Y6XG4gKiAqIEEgdGltZXN0YW1wLiBFYWNoIERhdGVUaW1lIGluc3RhbmNlIHJlZmVycyB0byBhIHNwZWNpZmljIG1pbGxpc2Vjb25kIG9mIHRoZSBVbml4IGVwb2NoLlxuICogKiBBIHRpbWUgem9uZS4gRWFjaCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGluIHRoZSBjb250ZXh0IG9mIGEgc3BlY2lmaWMgem9uZSAoYnkgZGVmYXVsdCB0aGUgbG9jYWwgc3lzdGVtJ3Mgem9uZSkuXG4gKiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0aGF0IGVmZmVjdCBob3cgb3V0cHV0IHN0cmluZ3MgYXJlIGZvcm1hdHRlZCwgc3VjaCBhcyBgbG9jYWxlYCwgYG51bWJlcmluZ1N5c3RlbWAsIGFuZCBgb3V0cHV0Q2FsZW5kYXJgLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXM6XG4gKlxuICogKiAqKkNyZWF0aW9uKio6IFRvIGNyZWF0ZSBhIERhdGVUaW1lIGZyb20gaXRzIGNvbXBvbmVudHMsIHVzZSBvbmUgb2YgaXRzIGZhY3RvcnkgY2xhc3MgbWV0aG9kczoge0BsaW5rIERhdGVUaW1lI2xvY2FsfSwge0BsaW5rIERhdGVUaW1lI3V0Y30sIGFuZCAobW9zdCBmbGV4aWJseSkge0BsaW5rIERhdGVUaW1lI2Zyb21PYmplY3R9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21JU099LCB7QGxpbmsgRGF0ZVRpbWUjZnJvbUhUVFB9LCBhbmQge0BsaW5rIERhdGVUaW1lI2Zyb21SRkMyODIyfS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgY3VzdG9tIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjZnJvbUZvcm1hdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIG5hdGl2ZSBKUyBkYXRlLCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21KU0RhdGV9LlxuICogKiAqKkdyZWdvcmlhbiBjYWxlbmRhciBhbmQgdGltZSoqOiBUbyBleGFtaW5lIHRoZSBHcmVnb3JpYW4gcHJvcGVydGllcyBvZiBhIERhdGVUaW1lIGluZGl2aWR1YWxseSAoaS5lIGFzIG9wcG9zZWQgdG8gY29sbGVjdGl2ZWx5IHRocm91Z2gge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSksIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbW9udGh9LFxuICoge0BsaW5rIERhdGVUaW1lI2RheX0sIHtAbGluayBEYXRlVGltZSNob3VyfSwge0BsaW5rIERhdGVUaW1lI21pbnV0ZX0sIHtAbGluayBEYXRlVGltZSNzZWNvbmR9LCB7QGxpbmsgRGF0ZVRpbWUjbWlsbGlzZWNvbmR9IGFjY2Vzc29ycy5cbiAqICogKipXZWVrIGNhbGVuZGFyKio6IEZvciBJU08gd2VlayBjYWxlbmRhciBhdHRyaWJ1dGVzLCBzZWUgdGhlIHtAbGluayBEYXRlVGltZSN3ZWVrWWVhcn0sIHtAbGluayBEYXRlVGltZSN3ZWVrTnVtYmVyfSwgYW5kIHtAbGluayBEYXRlVGltZSN3ZWVrZGF5fSBhY2Nlc3NvcnMuXG4gKiAqICoqQ29uZmlndXJhdGlvbioqIFNlZSB0aGUge0BsaW5rIERhdGVUaW1lI2xvY2FsZX0gYW5kIHtAbGluayBEYXRlVGltZSNudW1iZXJpbmdTeXN0ZW19IGFjY2Vzc29ycy5cbiAqICogKipUcmFuc2Zvcm1hdGlvbioqOiBUbyB0cmFuc2Zvcm0gdGhlIERhdGVUaW1lIGludG8gb3RoZXIgRGF0ZVRpbWVzLCB1c2Uge0BsaW5rIERhdGVUaW1lI3NldH0sIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0sIHtAbGluayBEYXRlVGltZSNzZXRab25lfSwge0BsaW5rIERhdGVUaW1lI3NldExvY2FsZX0sIHtAbGluayBEYXRlVGltZS5wbHVzfSwge0BsaW5rIERhdGVUaW1lI21pbnVzfSwge0BsaW5rIERhdGVUaW1lI2VuZE9mfSwge0BsaW5rIERhdGVUaW1lI3N0YXJ0T2Z9LCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9LCBhbmQge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9LlxuICogKiAqKk91dHB1dCoqOiBUbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmV9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZUNhbGVuZGFyfSwge0BsaW5rIERhdGVUaW1lI3RvSlNPTn0sIHtAbGluayBEYXRlVGltZSN0b0lTT30sIHtAbGluayBEYXRlVGltZSN0b0hUVFB9LCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SRkMyODIyfSwge0BsaW5rIERhdGVUaW1lI3RvU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvRm9ybWF0fSwge0BsaW5rIERhdGVUaW1lI3RvTWlsbGlzfSBhbmQge0BsaW5rIERhdGVUaW1lI3RvSlNEYXRlfS5cbiAqXG4gKiBUaGVyZSdzIHBsZW50eSBvdGhlcnMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24sIHRpbWUgem9uZXMsIGFsdGVybmF0aXZlIGNhbGVuZGFycywgdmFsaWRpdHksIGFuZCBzbyBvbiwgc2VlIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlVGltZSB7XG4gIC8qKlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIGNvbnN0IHpvbmUgPSBjb25maWcuem9uZSB8fCBTZXR0aW5ncy5kZWZhdWx0Wm9uZTtcblxuICAgIGxldCBpbnZhbGlkID1cbiAgICAgIGNvbmZpZy5pbnZhbGlkIHx8XG4gICAgICAoTnVtYmVyLmlzTmFOKGNvbmZpZy50cykgPyBuZXcgSW52YWxpZChcImludmFsaWQgaW5wdXRcIikgOiBudWxsKSB8fFxuICAgICAgKCF6b25lLmlzVmFsaWQgPyB1bnN1cHBvcnRlZFpvbmUoem9uZSkgOiBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRzID0gaXNVbmRlZmluZWQoY29uZmlnLnRzKSA/IFNldHRpbmdzLm5vdygpIDogY29uZmlnLnRzO1xuXG4gICAgbGV0IGMgPSBudWxsLFxuICAgICAgbyA9IG51bGw7XG4gICAgaWYgKCFpbnZhbGlkKSB7XG4gICAgICBjb25zdCB1bmNoYW5nZWQgPSBjb25maWcub2xkICYmIGNvbmZpZy5vbGQudHMgPT09IHRoaXMudHMgJiYgY29uZmlnLm9sZC56b25lLmVxdWFscyh6b25lKTtcblxuICAgICAgaWYgKHVuY2hhbmdlZCkge1xuICAgICAgICBbYywgb10gPSBbY29uZmlnLm9sZC5jLCBjb25maWcub2xkLm9dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3QgPSB6b25lLm9mZnNldCh0aGlzLnRzKTtcbiAgICAgICAgYyA9IHRzVG9PYmoodGhpcy50cywgb3QpO1xuICAgICAgICBpbnZhbGlkID0gTnVtYmVyLmlzTmFOKGMueWVhcikgPyBuZXcgSW52YWxpZChcImludmFsaWQgaW5wdXRcIikgOiBudWxsO1xuICAgICAgICBjID0gaW52YWxpZCA/IG51bGwgOiBjO1xuICAgICAgICBvID0gaW52YWxpZCA/IG51bGwgOiBvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl96b25lID0gem9uZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGludmFsaWQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy53ZWVrRGF0YSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jID0gYztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLm8gPSBvO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkRhdGVUaW1lID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIENPTlNUUlVDVFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmb3IgdGhlIGN1cnJlbnQgaW5zdGFudCwgaW4gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICpcbiAgICogVXNlIFNldHRpbmdzIHRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgdmFsdWVzIGlmIG5lZWRlZC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9JU08oKSAvL34+IG5vdyBpbiB0aGUgSVNPIGZvcm1hdFxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBub3coKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9jYWwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgbG9jYWwoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21vbnRoPTFdIC0gVGhlIG1vbnRoLCAxLWluZGV4ZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKHsgem9uZTogXCJBbWVyaWNhL05ld19Zb3JrXCIgfSkgICAgICAvL34+IG5vdywgaW4gVVMgZWFzdCBjb2FzdCB0aW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDAsIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCB7IHpvbmU6IFwidXRjXCIgfSkgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDAsIGluIFVUQ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwLCA3NjUpICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbG9jYWwoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBpbiBVVENcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgdXRjKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtob3VyPTBdIC0gVGhlIGhvdXIgb2YgdGhlIGRheSwgaW4gMjQtaG91ciB0aW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kPTBdIC0gVGhlIHNlY29uZCBvZiB0aGUgbWludXRlLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaWxsaXNlY29uZD0wXSAtIFRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogXCJmclwiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIHV0YygpIHtcbiAgICBjb25zdCBbb3B0cywgYXJnc10gPSBsYXN0T3B0cyhhcmd1bWVudHMpLFxuICAgICAgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF0gPSBhcmdzO1xuXG4gICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIHJldHVybiBxdWlja0RUKHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNEYXRlKGRhdGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRzID0gaXNEYXRlKGRhdGUpID8gZGF0ZS52YWx1ZU9mKCkgOiBOYU47XG4gICAgaWYgKE51bWJlci5pc05hTih0cykpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgIHRzOiB0cyxcbiAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihtaWxsaXNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IC1NQVhfREFURSB8fCBtaWxsaXNlY29uZHMgPiBNQVhfREFURSkge1xuICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2UgYmVjYXVzZSB3ZSBjYW4gc3RpbGwgZW5kIHVwIG91dCBvZiByYW5nZSBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgc2hpZnRpbmcsIGJ1dCBpdCdzIGEgc3RhcnRcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiVGltZXN0YW1wIG91dCBvZiByYW5nZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICAgIHRzOiBtaWxsaXNlY29uZHMsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tU2Vjb25kcyhzZWNvbmRzLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzTnVtYmVyKHNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICAgIHRzOiBzZWNvbmRzICogMTAwMCxcbiAgICAgICAgem9uZTogbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSxcbiAgICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXInIGFuZCAnaG91cicgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb21cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyIC0gYSB5ZWFyLCBzdWNoIGFzIDE5ODdcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aCAtIGEgbW9udGgsIDEtMTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXkgLSBhIGRheSBvZiB0aGUgbW9udGgsIDEtMzEsIGRlcGVuZGluZyBvbiB0aGUgbW9udGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5vcmRpbmFsIC0gZGF5IG9mIHRoZSB5ZWFyLCAxLTM2NSBvciAzNjZcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrWWVhciAtIGFuIElTTyB3ZWVrIHllYXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrTnVtYmVyIC0gYW4gSVNPIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrZGF5IC0gYW4gSVNPIHdlZWtkYXksIDEtNywgd2hlcmUgMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91ciAtIGhvdXIgb2YgdGhlIGRheSwgMC0yM1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZSAtIG1pbnV0ZSBvZiB0aGUgaG91ciwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZCAtIHNlY29uZCBvZiB0aGUgbWludXRlLCAwLTU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmQgLSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCAwLTk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGludGVycHJldCB0aGUgbnVtYmVycyBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgem9uZS4gQ2FuIHRha2UgYW55IHZhbHVlIHRha2VuIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBzZXRab25lKClcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIsIG1vbnRoOiA1LCBkYXk6IDI1fSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIgfSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSkgLy9+PiB0b2RheSBhdCAxMDoyNjowNlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICd1dGMnIH0pLFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdsb2NhbCcgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnQW1lcmljYS9OZXdfWW9yaycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHdlZWtZZWFyOiAyMDE2LCB3ZWVrTnVtYmVyOiAyLCB3ZWVrZGF5OiAzIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzIwMTYtMDEtMTMnXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBvYmogPSBvYmogfHwge307XG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHNOb3cgPSBTZXR0aW5ncy5ub3coKSxcbiAgICAgIG9mZnNldFByb3ZpcyA9ICFpc1VuZGVmaW5lZChvcHRzLnNwZWNpZmljT2Zmc2V0KVxuICAgICAgICA/IG9wdHMuc3BlY2lmaWNPZmZzZXRcbiAgICAgICAgOiB6b25lVG9Vc2Uub2Zmc2V0KHRzTm93KSxcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0KSxcbiAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLFxuICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksXG4gICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksXG4gICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELFxuICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXIsXG4gICAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTtcblxuICAgIC8vIGNhc2VzOlxuICAgIC8vIGp1c3QgYSB3ZWVrZGF5IC0+IHRoaXMgd2VlaydzIGluc3RhbmNlIG9mIHRoYXQgd2Vla2RheSwgbm8gd29ycmllc1xuICAgIC8vIChncmVnb3JpYW4gZGF0YSBvciBvcmRpbmFsKSArICh3ZWVrWWVhciBvciB3ZWVrTnVtYmVyKSAtPiBlcnJvclxuICAgIC8vIChncmVnb3JpYW4gbW9udGggb3IgZGF5KSArIG9yZGluYWwgLT4gZXJyb3JcbiAgICAvLyBvdGhlcndpc2UganVzdCB1c2Ugd2Vla3Mgb3Igb3JkaW5hbHMgb3IgZ3JlZ29yaWFuLCBkZXBlbmRpbmcgb24gd2hhdCdzIHNwZWNpZmllZFxuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVdlZWtEYXRhID0gZGVmaW5pdGVXZWVrRGVmIHx8IChub3JtYWxpemVkLndlZWtkYXkgJiYgIWNvbnRhaW5zR3JlZ29yKTtcblxuICAgIC8vIGNvbmZpZ3VyZSBvdXJzZWx2ZXMgdG8gZGVhbCB3aXRoIGdyZWdvcmlhbiBkYXRlcyBvciB3ZWVrIHN0dWZmXG4gICAgbGV0IHVuaXRzLFxuICAgICAgZGVmYXVsdFZhbHVlcyxcbiAgICAgIG9iak5vdyA9IHRzVG9PYmoodHNOb3csIG9mZnNldFByb3Zpcyk7XG4gICAgaWYgKHVzZVdlZWtEYXRhKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRXZWVrVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFdlZWtVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9XZWVrKG9iak5vdyk7XG4gICAgfSBlbHNlIGlmIChjb250YWluc09yZGluYWwpIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZE9yZGluYWxVbml0cztcbiAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXM7XG4gICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub09yZGluYWwob2JqTm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFVuaXRWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBtaXNzaW5nIHN0dWZmXG4gICAgbGV0IGZvdW5kRmlyc3QgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHUgb2YgdW5pdHMpIHtcbiAgICAgIGNvbnN0IHYgPSBub3JtYWxpemVkW3VdO1xuICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkge1xuICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZm91bmRGaXJzdCkge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWRbdV0gPSBvYmpOb3dbdV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB2YWx1ZXMgd2UgaGF2ZSBhcmUgaW4gcmFuZ2VcbiAgICBjb25zdCBoaWdoZXJPcmRlckludmFsaWQgPSB1c2VXZWVrRGF0YVxuICAgICAgICA/IGhhc0ludmFsaWRXZWVrRGF0YShub3JtYWxpemVkKVxuICAgICAgICA6IGNvbnRhaW5zT3JkaW5hbFxuICAgICAgICA/IGhhc0ludmFsaWRPcmRpbmFsRGF0YShub3JtYWxpemVkKVxuICAgICAgICA6IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG5vcm1hbGl6ZWQpLFxuICAgICAgaW52YWxpZCA9IGhpZ2hlck9yZGVySW52YWxpZCB8fCBoYXNJbnZhbGlkVGltZURhdGEobm9ybWFsaXplZCk7XG5cbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfVxuXG4gICAgLy8gY29tcHV0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICBjb25zdCBncmVnb3JpYW4gPSB1c2VXZWVrRGF0YVxuICAgICAgICA/IHdlZWtUb0dyZWdvcmlhbihub3JtYWxpemVkKVxuICAgICAgICA6IGNvbnRhaW5zT3JkaW5hbFxuICAgICAgICA/IG9yZGluYWxUb0dyZWdvcmlhbihub3JtYWxpemVkKVxuICAgICAgICA6IG5vcm1hbGl6ZWQsXG4gICAgICBbdHNGaW5hbCwgb2Zmc2V0RmluYWxdID0gb2JqVG9UUyhncmVnb3JpYW4sIG9mZnNldFByb3Zpcywgem9uZVRvVXNlKSxcbiAgICAgIGluc3QgPSBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogdHNGaW5hbCxcbiAgICAgICAgem9uZTogem9uZVRvVXNlLFxuICAgICAgICBvOiBvZmZzZXRGaW5hbCxcbiAgICAgICAgbG9jLFxuICAgICAgfSk7XG5cbiAgICAvLyBncmVnb3JpYW4gZGF0YSArIHdlZWtkYXkgc2VydmVzIG9ubHkgdG8gdmFsaWRhdGVcbiAgICBpZiAobm9ybWFsaXplZC53ZWVrZGF5ICYmIGNvbnRhaW5zR3JlZ29yICYmIG9iai53ZWVrZGF5ICE9PSBpbnN0LndlZWtkYXkpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgICBcIm1pc21hdGNoZWQgd2Vla2RheVwiLFxuICAgICAgICBgeW91IGNhbid0IHNwZWNpZnkgYm90aCBhIHdlZWtkYXkgb2YgJHtub3JtYWxpemVkLndlZWtkYXl9IGFuZCBhIGRhdGUgb2YgJHtpbnN0LnRvSVNPKCl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIElTTyA4NjAxIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW1dIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJywge3NldFpvbmU6IHRydWV9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycsIHt6b25lOiAndXRjJ30pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSVNPRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIklTTyA4NjAxXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiUkZDIDI4MjJcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSFRUUCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUhUVFBEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiSFRUUFwiLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHRleHQpIHx8IGlzVW5kZWZpbmVkKGZtdCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwgfSA9IG9wdHMsXG4gICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBkZWZhdWx0VG9FTjogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgW3ZhbHMsIHBhcnNlZFpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkXSA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIGBmb3JtYXQgJHtmbXR9YCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdCBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZVxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNRTCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVNRTCh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlNRTFwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEYXRlVGltZSBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZVRpbWVFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlVGltZS4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzRGF0ZVRpbWUobykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25EYXRlVGltZSkgfHwgZmFsc2U7XG4gIH1cblxuICAvLyBJTkZPXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA3LCA0KS5nZXQoJ21vbnRoJyk7IC8vPT4gN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA3LCA0KS5nZXQoJ2RheScpOyAvLz0+IDRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0KHVuaXQpIHtcbiAgICByZXR1cm4gdGhpc1t1bml0XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIERhdGVUaW1lIGlzIHZhbGlkLiBJbnZhbGlkIERhdGVUaW1lcyBvY2N1ciB3aGVuOlxuICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBmcm9tIGludmFsaWQgY2FsZW5kYXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIDEzdGggbW9udGggb3IgRmVicnVhcnkgMzBcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgYnkgYW4gb3BlcmF0aW9uIG9uIGFub3RoZXIgaW52YWxpZCBkYXRlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIERhdGVUaW1lIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9jYWxlIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2VuLUdCJy4gVGhlIGxvY2FsZSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLmxvY2FsZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvdXRwdXQgY2FsZW5kYXIgb2YgYSBEYXRlVGltZSwgc3VjaCAnaXNsYW1pYycuIFRoZSBvdXRwdXQgY2FsZW5kYXIgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb3V0cHV0Q2FsZW5kYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm91dHB1dENhbGVuZGFyIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRpbWUgem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBEYXRlVGltZS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBnZXQgem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB6b25lTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLm5hbWUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgeWVhclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkueWVhciAvLz0+IDIwMTdcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB5ZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMueWVhciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHF1YXJ0ZXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnF1YXJ0ZXIgLy89PiAyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gTWF0aC5jZWlsKHRoaXMuYy5tb250aCAvIDMpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9udGggKDEtMTIpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkubW9udGggLy89PiA1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5tb250aCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgbW9udGggKDEtMzBpc2gpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuZGF5IC8vPT4gMjVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5kYXkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBob3VyIG9mIHRoZSBkYXkgKDAtMjMpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSkuaG91ciAvLz0+IDlcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBob3VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuaG91ciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciAoMC01OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCkubWludXRlIC8vPT4gMzBcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taW51dGUgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSAoMC01OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIpLnNlY29uZCAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuc2Vjb25kIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCAoMC05OTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyLCA2NTQpLm1pbGxpc2Vjb25kIC8vPT4gNjU0XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taWxsaXNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWsgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTIsIDMxKS53ZWVrWWVhciAvLz0+IDIwMTVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrWWVhciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWsgbnVtYmVyIG9mIHRoZSB3ZWVrIHllYXIgKDEtNTJpc2gpLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLndlZWtOdW1iZXIgLy89PiAyMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla051bWJlciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgd2Vlay5cbiAgICogMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMSwgMzEpLndlZWtkYXkgLy89PiA0XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla2RheSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3JkaW5hbCAobWVhbmluZyB0aGUgZGF5IG9mIHRoZSB5ZWFyKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkub3JkaW5hbCAvLz0+IDE0NVxuICAgKiBAdHlwZSB7bnVtYmVyfERhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IG9yZGluYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLm9yZGluYWwgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCBtb250aCBuYW1lLCBzdWNoIGFzICdPY3QnLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aFNob3J0IC8vPT4gT2N0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0b2JlcicuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoTG9uZyAvLz0+IE9jdG9iZXJcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBtb250aExvbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IHdlZWtkYXksIHN1Y2ggYXMgJ01vbicuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlTaG9ydCAvLz0+IE1vblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cyhcInNob3J0XCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIHdlZWtkYXksIHN1Y2ggYXMgJ01vbmRheScuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlMb25nIC8vPT4gTW9uZGF5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgd2Vla2RheUxvbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJsb25nXCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBVVEMgb2Zmc2V0IG9mIHRoaXMgRGF0ZVRpbWUgaW4gbWludXRlc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5vZmZzZXQgLy89PiAtMjQwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLm9mZnNldCAvLz0+IDBcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/ICt0aGlzLm8gOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaG9ydCBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVTVFwiIG9yIFwiRURUXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVTaG9ydCgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywge1xuICAgICAgICBmb3JtYXQ6IFwic2hvcnRcIixcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nIGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlIFwiRWFzdGVybiBTdGFuZGFyZCBUaW1lXCIgb3IgXCJFYXN0ZXJuIERheWxpZ2h0IFRpbWVcIi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb2Zmc2V0TmFtZUxvbmcoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcImxvbmdcIixcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgdGhpcyB6b25lJ3Mgb2Zmc2V0IGV2ZXIgY2hhbmdlcywgYXMgaW4gYSBEU1QuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzT2Zmc2V0Rml4ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgdGhlIERhdGVUaW1lIGlzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc0luRFNUKCkge1xuICAgIGlmICh0aGlzLmlzT2Zmc2V0Rml4ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7IG1vbnRoOiAxLCBkYXk6IDEgfSkub2Zmc2V0IHx8XG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogNSB9KS5vZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERhdGVUaW1lIGlzIGluIGEgbGVhcCB5ZWFyLCBmYWxzZSBvdGhlcndpc2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuaXNJbkxlYXBZZWFyIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5pc0luTGVhcFllYXIgLy89PiBmYWxzZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc0luTGVhcFllYXIoKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgbW9udGhcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMikuZGF5c0luTW9udGggLy89PiAyOVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAzKS5kYXlzSW5Nb250aCAvLz0+IDMxXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5c0luTW9udGgoKSB7XG4gICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuZGF5c0luWWVhciAvLz0+IDM2NlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5kYXlzSW5ZZWFyIC8vPT4gMzY1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5c0luWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZGF5c0luWWVhcih0aGlzLnllYXIpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAwNCkud2Vla3NJbldlZWtZZWFyIC8vPT4gNTNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykud2Vla3NJbldlZWtZZWFyIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrc0luV2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHdlZWtzSW5XZWVrWWVhcih0aGlzLndlZWtZZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBJbnRsIG9wdGlvbnMgZm9yIHRoaXMgRGF0ZVRpbWUuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIGZvcm1hdHRpbmcgbWV0aG9kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIHRoZSBzYW1lIG9wdGlvbnMgYXMgdG9Mb2NhbGVTdHJpbmdcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgcmVzb2x2ZWRMb2NhbGVPcHRpb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBGb3JtYXR0ZXIuY3JlYXRlKFxuICAgICAgdGhpcy5sb2MuY2xvbmUob3B0cyksXG4gICAgICBvcHRzXG4gICAgKS5yZXNvbHZlZE9wdGlvbnModGhpcyk7XG4gICAgcmV0dXJuIHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyOiBjYWxlbmRhciB9O1xuICB9XG5cbiAgLy8gVFJBTlNGT1JNXG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBVVEMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0oJ3V0YycpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gb3B0aW9uYWxseSwgYW4gb2Zmc2V0IGZyb20gVVRDIGluIG1pbnV0ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPXt9XSAtIG9wdGlvbnMgdG8gcGFzcyB0byBgc2V0Wm9uZSgpYFxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHRvVVRDKG9mZnNldCA9IDAsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byB0aGUgaG9zdCdzIGxvY2FsIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBgc2V0Wm9uZSgnbG9jYWwnKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b0xvY2FsKCkge1xuICAgIHJldHVybiB0aGlzLnNldFpvbmUoU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc2V0dGVyIGtlZXBzIHRoZSB1bmRlcmx5aW5nIHRpbWUgdGhlIHNhbWUgKGFzIGluLCB0aGUgc2FtZSB0aW1lc3RhbXApLCBidXQgdGhlIG5ldyBpbnN0YW5jZSB3aWxsIHJlcG9ydCBkaWZmZXJlbnQgbG9jYWwgdGltZXMgYW5kIGNvbnNpZGVyIERTVHMgd2hlbiBtYWtpbmcgY29tcHV0YXRpb25zLCBhcyB3aXRoIHtAbGluayBEYXRlVGltZSNwbHVzfS4gWW91IG1heSB3aXNoIHRvIHVzZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0gYW5kIHtAbGluayBEYXRlVGltZSN0b1VUQ30gd2hpY2ggcHJvdmlkZSBzaW1wbGUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGNvbW1vbmx5IHVzZWQgem9uZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5rZWVwTG9jYWxUaW1lPWZhbHNlXSAtIElmIHRydWUsIGFkanVzdCB0aGUgdW5kZXJseWluZyB0aW1lIHNvIHRoYXQgdGhlIGxvY2FsIHRpbWUgc3RheXMgdGhlIHNhbWUsIGJ1dCBpbiB0aGUgdGFyZ2V0IHpvbmUuIFlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdGhpcy5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRab25lKHpvbmUsIHsga2VlcExvY2FsVGltZSA9IGZhbHNlLCBrZWVwQ2FsZW5kYXJUaW1lID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgem9uZSA9IG5vcm1hbGl6ZVpvbmUoem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICh6b25lLmVxdWFscyh0aGlzLnpvbmUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2UgaWYgKCF6b25lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZXdUUyA9IHRoaXMudHM7XG4gICAgICBpZiAoa2VlcExvY2FsVGltZSB8fCBrZWVwQ2FsZW5kYXJUaW1lKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldEd1ZXNzID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGNvbnN0IGFzT2JqID0gdGhpcy50b09iamVjdCgpO1xuICAgICAgICBbbmV3VFNdID0gb2JqVG9UUyhhc09iaiwgb2Zmc2V0R3Vlc3MsIHpvbmUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdHM6IG5ld1RTLCB6b25lIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3Igb3V0cHV0Q2FsZW5kYXIuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSB0aGUgcHJvcGVydGllcyB0byBzZXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgY29uc3QgbG9jID0gdGhpcy5sb2MuY2xvbmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgbG9jIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIGxvY2FsZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBKdXN0IGEgY29udmVuaWVudCBhbGlhcyBmb3IgcmVjb25maWd1cmUoeyBsb2NhbGUgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnNldExvY2FsZSgnZW4tR0InKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7IGxvY2FsZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHVuaXRzLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIFlvdSBjYW4gb25seSBzZXQgdW5pdHMgd2l0aCB0aGlzIG1ldGhvZDsgZm9yIFwic2V0dGluZ1wiIG1ldGFkYXRhLCBzZWUge0BsaW5rIERhdGVUaW1lI3JlY29uZmlndXJlfSBhbmQge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9LlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAxNyB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyBob3VyOiA4LCBtaW51dGU6IDMwIH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHdlZWtkYXk6IDUgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAwNSwgb3JkaW5hbDogMjM0IH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0KHZhbHVlcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3QodmFsdWVzLCBub3JtYWxpemVVbml0KSxcbiAgICAgIHNldHRpbmdXZWVrU3R1ZmYgPVxuICAgICAgICAhaXNVbmRlZmluZWQobm9ybWFsaXplZC53ZWVrWWVhcikgfHxcbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla051bWJlcikgfHxcbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla2RheSksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyO1xuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGxldCBtaXhlZDtcbiAgICBpZiAoc2V0dGluZ1dlZWtTdHVmZikge1xuICAgICAgbWl4ZWQgPSB3ZWVrVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub1dlZWsodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7XG4gICAgICBtaXhlZCA9IG9yZGluYWxUb0dyZWdvcmlhbih7IC4uLmdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLCAuLi5ub3JtYWxpemVkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaXhlZCA9IHsgLi4udGhpcy50b09iamVjdCgpLCAuLi5ub3JtYWxpemVkIH07XG5cbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBzZXQgdGhlIGRheSBidXQgd2UgZW5kZWQgdXAgb24gYW4gb3ZlcmZsb3cgZGF0ZSxcbiAgICAgIC8vIHVzZSB0aGUgbGFzdCBkYXkgb2YgdGhlIHJpZ2h0IG1vbnRoXG4gICAgICBpZiAoaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpKSB7XG4gICAgICAgIG1peGVkLmRheSA9IE1hdGgubWluKGRheXNJbk1vbnRoKG1peGVkLnllYXIsIG1peGVkLm1vbnRoKSwgbWl4ZWQuZGF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBbdHMsIG9dID0gb2JqVG9UUyhtaXhlZCwgdGhpcy5vLCB0aGlzLnpvbmUpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzLCBvIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqXG4gICAqIEFkZGluZyBob3VycywgbWludXRlcywgc2Vjb25kcywgb3IgbWlsbGlzZWNvbmRzIGluY3JlYXNlcyB0aGUgdGltZXN0YW1wIGJ5IHRoZSByaWdodCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBBZGRpbmcgZGF5cywgbW9udGhzLCBvciB5ZWFycyBzaGlmdHMgdGhlIGNhbGVuZGFyLCBhY2NvdW50aW5nIGZvciBEU1RzIGFuZCBsZWFwIHllYXJzIGFsb25nIHRoZSB3YXkuIFRodXMsIGBkdC5wbHVzKHsgaG91cnM6IDI0IH0pYCBtYXkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHRpbWUgdGhhbiBgZHQucGx1cyh7IGRheXM6IDEgfSlgIGlmIHRoZXJlJ3MgYSBEU1Qgc2hpZnQgaW4gYmV0d2Vlbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKDEyMykgLy9+PiBpbiAxMjMgbWlsbGlzZWNvbmRzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBtaW51dGVzOiAxNSB9KSAvL34+IGluIDE1IG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkgLy9+PiB0aGlzIHRpbWUgdG9tb3Jyb3dcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IC0xIH0pIC8vfj4gdGhpcyB0aW1lIHllc3RlcmRheVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgaG91cnM6IDMsIG1pbnV0ZXM6IDEzIH0pIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSkgLy9+PiBpbiAzIGhyLCAxMyBtaW5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0IGEgcGVyaW9kIG9mIHRpbWUgdG8gdGhpcyBEYXRlVGltZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVcbiAgICogU2VlIHtAbGluayBEYXRlVGltZSNwbHVzfVxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbikubmVnYXRlKCk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSB1bml0IG9mIHRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGJlZ2lubmluZyBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignbW9udGgnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZigneWVhcicpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAxLTAxJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd3ZWVrJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDMnLCB3ZWVrcyBhbHdheXMgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignZGF5JykudG9JU09UaW1lKCk7IC8vPT4gJzAwOjAwLjAwMC0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2hvdXInKS50b0lTT1RpbWUoKTsgLy89PiAnMDU6MDA6MDAuMDAwLTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXJ0T2YodW5pdCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBvID0ge30sXG4gICAgICBub3JtYWxpemVkVW5pdCA9IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCk7XG4gICAgc3dpdGNoIChub3JtYWxpemVkVW5pdCkge1xuICAgICAgY2FzZSBcInllYXJzXCI6XG4gICAgICAgIG8ubW9udGggPSAxO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInF1YXJ0ZXJzXCI6XG4gICAgICBjYXNlIFwibW9udGhzXCI6XG4gICAgICAgIG8uZGF5ID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJ3ZWVrc1wiOlxuICAgICAgY2FzZSBcImRheXNcIjpcbiAgICAgICAgby5ob3VyID0gMDtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJob3Vyc1wiOlxuICAgICAgICBvLm1pbnV0ZSA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwibWludXRlc1wiOlxuICAgICAgICBvLnNlY29uZCA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwic2Vjb25kc1wiOlxuICAgICAgICBvLm1pbGxpc2Vjb25kID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlsbGlzZWNvbmRzXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gbm8gZGVmYXVsdCwgaW52YWxpZCB1bml0cyB0aHJvdyBpbiBub3JtYWxpemVVbml0KClcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09IFwid2Vla3NcIikge1xuICAgICAgby53ZWVrZGF5ID0gMTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09IFwicXVhcnRlcnNcIikge1xuICAgICAgY29uc3QgcSA9IE1hdGguY2VpbCh0aGlzLm1vbnRoIC8gMyk7XG4gICAgICBvLm1vbnRoID0gKHEgLSAxKSAqIDMgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNldChvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoaXMgRGF0ZVRpbWUgdG8gdGhlIGVuZCAobWVhbmluZyB0aGUgbGFzdCBtaWxsaXNlY29uZCkgb2YgYSB1bml0IG9mIHRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBUaGUgdW5pdCB0byBnbyB0byB0aGUgZW5kIG9mLiBDYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCBvciAnbWlsbGlzZWNvbmQnLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIGVuZE9mKHVuaXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IHRoaXMucGx1cyh7IFt1bml0XTogMSB9KVxuICAgICAgICAgIC5zdGFydE9mKHVuaXQpXG4gICAgICAgICAgLm1pbnVzKDEpXG4gICAgICA6IHRoaXM7XG4gIH1cblxuICAvLyBPVVRQVVRcblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoXCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcydcIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuXG4gICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGxvY2FsZTogJ2VuLWdiJyB9KTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiAnQXByaWwgMjAsIDIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLlRJTUVfU0lNUExFKTsgLy89PiAnMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVUSU1FX1NIT1JUKTsgLy89PiAnNC8yMC8yMDE3LCAxMTozMiBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnbG9uZycsIG1vbnRoOiAnbG9uZycsIGRheTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHVyc2RheSwgQXByaWwgMjAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ3Nob3J0JywgbW9udGg6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHUsIEFwciAyMCwgMTE6MjcgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91ckN5Y2xlOiAnaDIzJyB9KTsgLy89PiAnMTE6MzInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvTG9jYWxlU3RyaW5nKGZvcm1hdE9wdHMgPSBGb3JtYXRzLkRBVEVfU0hPUlQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgZm9ybWF0T3B0cykuZm9ybWF0RGF0ZVRpbWUodGhpcylcbiAgICAgIDogSU5WQUxJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZvcm1hdCBcInBhcnRzXCIsIG1lYW5pbmcgaW5kaXZpZHVhbCB0b2tlbnMgYWxvbmcgd2l0aCBtZXRhZGF0YS4gVGhpcyBpcyBhbGxvd3MgY2FsbGVycyB0byBwb3N0LXByb2Nlc3MgaW5kaXZpZHVhbCBzZWN0aW9ucyBvZiB0aGUgZm9ybWF0dGVkIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQvZm9ybWF0VG9QYXJ0c1xuICAgKiBAcGFyYW0gb3B0cyB7T2JqZWN0fSAtIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucywgc2FtZSBhcyBgdG9Mb2NhbGVTdHJpbmdgLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVBhcnRzKCk7IC8vPT4gW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2RheScsIHZhbHVlOiAnMjUnIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdtb250aCcsIHZhbHVlOiAnMDUnIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICd5ZWFyJywgdmFsdWU6ICcxOTgyJyB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+IF1cbiAgICovXG4gIHRvTG9jYWxlUGFydHMob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBvcHRzKS5mb3JtYXREYXRlVGltZVBhcnRzKHRoaXMpXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oe1xuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09PSBcImV4dGVuZGVkXCI7XG5cbiAgICBsZXQgYyA9IHRvSVNPRGF0ZSh0aGlzLCBleHQpO1xuICAgIGMgKz0gXCJUXCI7XG4gICAgYyArPSB0b0lTT1RpbWUodGhpcywgZXh0LCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgZGF0ZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1J1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT0RhdGUoeyBmb3JtYXQgPSBcImV4dGVuZGVkXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0b0lTT0RhdGUodGhpcywgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPV2Vla0RhdGUoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcImtra2stJ1cnV1ctY1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZSh7XG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBpbmNsdWRlUHJlZml4ID0gZmFsc2UsXG4gICAgZXh0ZW5kZWRab25lID0gZmFsc2UsXG4gICAgZm9ybWF0ID0gXCJleHRlbmRlZFwiLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGMgPSBpbmNsdWRlUHJlZml4ID8gXCJUXCIgOiBcIlwiO1xuICAgIHJldHVybiAoXG4gICAgICBjICtcbiAgICAgIHRvSVNPVGltZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIsXG4gICAgICAgIHN1cHByZXNzU2Vjb25kcyxcbiAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMsXG4gICAgICAgIGluY2x1ZGVPZmZzZXQsXG4gICAgICAgIGV4dGVuZGVkWm9uZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBSRkMgMjgyMi1jb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgLTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvUkZDMjgyMigpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcIiwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEhUVFAgaGVhZGVycy4gVGhlIG91dHB1dCBpcyBhbHdheXMgZXhwcmVzc2VkIGluIEdNVC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgR01UJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9IVFRQKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcy50b1VUQygpLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCdcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1NRTERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVab25lOiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxUaW1lKHsgaW5jbHVkZU9mZnNldCA9IHRydWUsIGluY2x1ZGVab25lID0gZmFsc2UsIGluY2x1ZGVPZmZzZXRTcGFjZSA9IHRydWUgfSA9IHt9KSB7XG4gICAgbGV0IGZtdCA9IFwiSEg6bW06c3MuU1NTXCI7XG5cbiAgICBpZiAoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkge1xuICAgICAgaWYgKGluY2x1ZGVPZmZzZXRTcGFjZSkge1xuICAgICAgICBmbXQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVpvbmUpIHtcbiAgICAgICAgZm10ICs9IFwielwiO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgICAgIGZtdCArPSBcIlpaXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUwob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKG9wdHMpfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9JU08oKSA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuIEFsaWFzIG9mIHtAbGluayBEYXRlVGltZSN0b01pbGxpc31cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy50b01pbGxpcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHRvU2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyAvIDEwMDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyAoYXMgYSB3aG9sZSBudW1iZXIpIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHRvVW5peEludGVnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguZmxvb3IodGhpcy50cyAvIDEwMDApIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBCU09OIHNlcmlhbGl6YWJsZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge0RhdGV9XG4gICAqL1xuICB0b0JTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU0RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLlxuICAgKiBAcGFyYW0gb3B0cyAtIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVDb25maWc9ZmFsc2VdIC0gaW5jbHVkZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgaW4gdGhlIG91dHB1dFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICB0b09iamVjdChvcHRzID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHt9O1xuXG4gICAgY29uc3QgYmFzZSA9IHsgLi4udGhpcy5jIH07XG5cbiAgICBpZiAob3B0cy5pbmNsdWRlQ29uZmlnKSB7XG4gICAgICBiYXNlLm91dHB1dENhbGVuZGFyID0gdGhpcy5vdXRwdXRDYWxlbmRhcjtcbiAgICAgIGJhc2UubnVtYmVyaW5nU3lzdGVtID0gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtO1xuICAgICAgYmFzZS5sb2NhbGUgPSB0aGlzLmxvYy5sb2NhbGU7XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IERhdGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9KU0RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU4pO1xuICB9XG5cbiAgLy8gQ09NUEFSRVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gRGF0ZVRpbWVzIGFzIGEgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciBhcnJheSBvZiB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgaTEgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgyLTA1LTI1VDA5OjQ1JyksXG4gICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTtcbiAgICogaTIuZGlmZihpMSkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA0MzgwNzUwMDAwMCB9XG4gICAqIGkyLmRpZmYoaTEsICdob3VycycpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMjE2OC43NSB9XG4gICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJywgJ2hvdXJzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LCBob3VyczogMC43NSB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgZGlmZihvdGhlckRhdGVUaW1lLCB1bml0ID0gXCJtaWxsaXNlY29uZHNcIiwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyRGF0ZVRpbWUuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJjcmVhdGVkIGJ5IGRpZmZpbmcgYW4gaW52YWxpZCBEYXRlVGltZVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJPcHRzID0geyBsb2NhbGU6IHRoaXMubG9jYWxlLCBudW1iZXJpbmdTeXN0ZW06IHRoaXMubnVtYmVyaW5nU3lzdGVtLCAuLi5vcHRzIH07XG5cbiAgICBjb25zdCB1bml0cyA9IG1heWJlQXJyYXkodW5pdCkubWFwKER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgb3RoZXJJc0xhdGVyID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCkgPiB0aGlzLnZhbHVlT2YoKSxcbiAgICAgIGVhcmxpZXIgPSBvdGhlcklzTGF0ZXIgPyB0aGlzIDogb3RoZXJEYXRlVGltZSxcbiAgICAgIGxhdGVyID0gb3RoZXJJc0xhdGVyID8gb3RoZXJEYXRlVGltZSA6IHRoaXMsXG4gICAgICBkaWZmZWQgPSBkaWZmKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgZHVyT3B0cyk7XG5cbiAgICByZXR1cm4gb3RoZXJJc0xhdGVyID8gZGlmZmVkLm5lZ2F0ZSgpIDogZGlmZmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIHJpZ2h0IG5vdy5cbiAgICogU2VlIHtAbGluayBEYXRlVGltZSNkaWZmfVxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgZGlmZk5vdyh1bml0ID0gXCJtaWxsaXNlY29uZHNcIiwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZihEYXRlVGltZS5ub3coKSwgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHNwYW5uaW5nIGJldHdlZW4gdGhpcyBEYXRlVGltZSBhbmQgYW5vdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIGVuZCBwb2ludCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICB1bnRpbChvdGhlckRhdGVUaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEludGVydmFsLmZyb21EYXRlVGltZXModGhpcywgb3RoZXJEYXRlVGltZSkgOiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgRGF0ZVRpbWUgaXMgaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lIGFzIGFub3RoZXIgRGF0ZVRpbWUuXG4gICAqIEhpZ2hlci1vcmRlciB1bml0cyBtdXN0IGFsc28gYmUgaWRlbnRpY2FsIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBgdHJ1ZWAuXG4gICAqIE5vdGUgdGhhdCB0aW1lIHpvbmVzIGFyZSAqKmlnbm9yZWQqKiBpbiB0aGlzIGNvbXBhcmlzb24sIHdoaWNoIGNvbXBhcmVzIHRoZSAqKmxvY2FsKiogY2FsZW5kYXIgdGltZS4gVXNlIHtAbGluayBEYXRlVGltZSNzZXRab25lfSB0byBjb252ZXJ0IG9uZSBvZiB0aGUgZGF0ZXMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5oYXNTYW1lKG90aGVyRFQsICdkYXknKTsgLy9+PiB0cnVlIGlmIG90aGVyRFQgaXMgaW4gdGhlIHNhbWUgY3VycmVudCBjYWxlbmRhciBkYXlcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUob3RoZXJEYXRlVGltZSwgdW5pdCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpbnB1dE1zID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCk7XG4gICAgY29uc3QgYWRqdXN0ZWRUb1pvbmUgPSB0aGlzLnNldFpvbmUob3RoZXJEYXRlVGltZS56b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSk7XG4gICAgcmV0dXJuIGFkanVzdGVkVG9ab25lLnN0YXJ0T2YodW5pdCkgPD0gaW5wdXRNcyAmJiBpbnB1dE1zIDw9IGFkanVzdGVkVG9ab25lLmVuZE9mKHVuaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBtaWxsaXNlY29uZCwgaGF2ZSB0aGUgc2FtZSB6b25lIGFuZCBsb2NhdGlvbiwgYW5kIGFyZSBib3RoIHZhbGlkLlxuICAgKiBUbyBjb21wYXJlIGp1c3QgdGhlIG1pbGxpc2Vjb25kIHZhbHVlcywgdXNlIGArZHQxID09PSArZHQyYC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXIgLSB0aGUgb3RoZXIgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVmFsaWQgJiZcbiAgICAgIG90aGVyLmlzVmFsaWQgJiZcbiAgICAgIHRoaXMudmFsdWVPZigpID09PSBvdGhlci52YWx1ZU9mKCkgJiZcbiAgICAgIHRoaXMuem9uZS5lcXVhbHMob3RoZXIuem9uZSkgJiZcbiAgICAgIHRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyB0aW1lIHJlbGF0aXZlIHRvIG5vdywgc3VjaCBhcyBcImluIHR3byBkYXlzXCIuIENhbiBvbmx5IGludGVybmF0aW9uYWxpemUgaWYgeW91clxuICAgKiBwbGF0Zm9ybSBzdXBwb3J0cyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC4gUm91bmRzIGRvd24gYnkgZGVmYXVsdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gW29wdGlvbnMuYmFzZT1EYXRlVGltZS5ub3coKV0gLSB0aGUgRGF0ZVRpbWUgdG8gdXNlIGFzIHRoZSBiYXNpcyB0byB3aGljaCB0aGlzIHRpbWUgaXMgY29tcGFyZWQuIERlZmF1bHRzIHRvIG5vdy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPVwibG9uZ1wiXSAtIHRoZSBzdHlsZSBvZiB1bml0cywgbXVzdCBiZSBcImxvbmdcIiwgXCJzaG9ydFwiLCBvciBcIm5hcnJvd1wiXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBvcHRpb25zLnVuaXQgLSB1c2UgYSBzcGVjaWZpYyB1bml0IG9yIGFycmF5IG9mIHVuaXRzOyBpZiBvbWl0dGVkLCBvciBhbiBhcnJheSwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIGJlc3QgdW5pdC4gVXNlIGFuIGFycmF5IG9yIG9uZSBvZiBcInllYXJzXCIsIFwicXVhcnRlcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgb3IgXCJzZWNvbmRzXCJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yb3VuZD10cnVlXSAtIHdoZXRoZXIgdG8gcm91bmQgdGhlIG51bWJlcnMgaW4gdGhlIG91dHB1dC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBhZGRpbmc9MF0gLSBwYWRkaW5nIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBhbGxvd3MgeW91IHRvIHJvdW5kIHVwIHRoZSByZXN1bHQgaWYgaXQgZml0cyBpbnNpZGUgdGhlIHRocmVzaG9sZC4gRG9uJ3QgdXNlIGluIGNvbWJpbmF0aW9uIHdpdGgge3JvdW5kOiBmYWxzZX0gYmVjYXVzZSB0aGUgZGVjaW1hbCBvdXRwdXQgd2lsbCBpbmNsdWRlIHRoZSBwYWRkaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcImluIDEgZGF5XCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKFwiZXNcIikudG9SZWxhdGl2ZSh7IGRheXM6IDEgfSkgLy89PiBcImRlbnRybyBkZSAxIGRcdTAwRURhXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSh7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkYW5zIDIzIGhldXJlc1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgZGF5czogMiB9KS50b1JlbGF0aXZlKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSh7IHVuaXQ6IFwiaG91cnNcIiB9KSAvLz0+IFwiNDggaG91cnMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBob3VyczogMzYgfSkudG9SZWxhdGl2ZSh7IHJvdW5kOiBmYWxzZSB9KSAvLz0+IFwiMS41IGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJhc2UgPSBvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgeyB6b25lOiB0aGlzLnpvbmUgfSksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nID8gKHRoaXMgPCBiYXNlID8gLW9wdGlvbnMucGFkZGluZyA6IG9wdGlvbnMucGFkZGluZykgOiAwO1xuICAgIGxldCB1bml0cyA9IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIl07XG4gICAgbGV0IHVuaXQgPSBvcHRpb25zLnVuaXQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy51bml0KSkge1xuICAgICAgdW5pdHMgPSBvcHRpb25zLnVuaXQ7XG4gICAgICB1bml0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKGJhc2UsIHRoaXMucGx1cyhwYWRkaW5nKSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYWx3YXlzXCIsXG4gICAgICB1bml0cyxcbiAgICAgIHVuaXQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGRhdGUgcmVsYXRpdmUgdG8gdG9kYXksIHN1Y2ggYXMgXCJ5ZXN0ZXJkYXlcIiBvciBcIm5leHQgbW9udGhcIi5cbiAgICogT25seSBpbnRlcm5hdGlvbmFsaXplcyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0cyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gW29wdGlvbnMuYmFzZT1EYXRlVGltZS5ub3coKV0gLSB0aGUgRGF0ZVRpbWUgdG8gdXNlIGFzIHRoZSBiYXNpcyB0byB3aGljaCB0aGlzIHRpbWUgaXMgY29tcGFyZWQuIERlZmF1bHRzIHRvIG5vdy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnVuaXQgLSB1c2UgYSBzcGVjaWZpYyB1bml0OyBpZiBvbWl0dGVkLCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgdW5pdC4gVXNlIG9uZSBvZiBcInllYXJzXCIsIFwicXVhcnRlcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBvciBcImRheXNcIlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCJ0b21vcnJvd1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+IFwiXCJtYVx1MDBGMWFuYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcih7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkZW1haW5cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKi9cbiAgdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBkaWZmUmVsYXRpdmUob3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLCB0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbnVtZXJpYzogXCJhdXRvXCIsXG4gICAgICB1bml0czogW1wieWVhcnNcIiwgXCJtb250aHNcIiwgXCJkYXlzXCJdLFxuICAgICAgY2FsZW5kYXJ5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWluIG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtaW5pbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtaW4oLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtYXgoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1heCByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5tYXgpO1xuICB9XG5cbiAgLy8gTUlTQ1xuXG4gIC8qKlxuICAgKiBFeHBsYWluIGhvdyBhIHN0cmluZyB3b3VsZCBiZSBwYXJzZWQgYnkgZnJvbUZvcm1hdCgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRpb25zLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcbiAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXRFeHBsYWluIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gRk9STUFUIFBSRVNFVFNcblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAxMC8xNC8xOTgzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfTUVEKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnVHVlc2RheSwgT2N0b2JlciAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfSFVHRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfU0lNUExFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRWFzdGVybiBEYXlsaWdodCBUaW1lJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9NRUQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUztcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseURhdGVUaW1lKGRhdGVUaW1laXNoKSB7XG4gIGlmIChEYXRlVGltZS5pc0RhdGVUaW1lKGRhdGVUaW1laXNoKSkge1xuICAgIHJldHVybiBkYXRlVGltZWlzaDtcbiAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiBkYXRlVGltZWlzaC52YWx1ZU9mICYmIGlzTnVtYmVyKGRhdGVUaW1laXNoLnZhbHVlT2YoKSkpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZShkYXRlVGltZWlzaCk7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAke2RhdGVUaW1laXNofSwgb2YgdHlwZSAke3R5cGVvZiBkYXRlVGltZWlzaH1gXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tIFwiZW1vamktcmVnZXhcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbi8qKiBUZXN0LWVudmlyb25tZW50LWZyaWVuZGx5IGZ1bmN0aW9uIHdoaWNoIGZldGNoZXMgdGhlIGN1cnJlbnQgc3lzdGVtIGxvY2FsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImVuLVVTXCI7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2U7XG59XG5cbi8vIERhdGUvVGltZSBSZW5kZXJpbmdcblxuLyoqIE5vcm1hbGl6ZSBhIGR1cmF0aW9uIHRvIGFsbCBvZiB0aGUgcHJvcGVyIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUR1cmF0aW9uKGR1cjogRHVyYXRpb24pIHtcbiAgICBpZiAoZHVyID09PSB1bmRlZmluZWQgfHwgZHVyID09PSBudWxsKSByZXR1cm4gZHVyO1xuXG4gICAgcmV0dXJuIGR1ci5zaGlmdFRvKFwieWVhcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpLm5vcm1hbGl6ZSgpO1xufVxuXG4vKiogU3RyaXAgdGhlIHRpbWUgY29tcG9uZW50cyBvZiBhIGRhdGUgdGltZSBvYmplY3QuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBUaW1lKGR0OiBEYXRlVGltZSk6IERhdGVUaW1lIHtcbiAgICBpZiAoZHQgPT09IG51bGwgfHwgZHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGR0O1xuXG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3Qoe1xuICAgICAgICB5ZWFyOiBkdC55ZWFyLFxuICAgICAgICBtb250aDogZHQubW9udGgsXG4gICAgICAgIGRheTogZHQuZGF5LFxuICAgIH0pO1xufVxuXG4vKiogVHJ5IHRvIGV4dHJhY3QgYSBZWVlZTU1ERCBkYXRlIGZyb20gYSBzdHJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGUoc3RyOiBzdHJpbmcpOiBEYXRlVGltZSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGRhdGVNYXRjaCA9IC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmICghZGF0ZU1hdGNoKSBkYXRlTWF0Y2ggPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pLy5leGVjKHN0cik7XG4gICAgaWYgKGRhdGVNYXRjaCkge1xuICAgICAgICBsZXQgeWVhciA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbMV0pO1xuICAgICAgICBsZXQgbW9udGggPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzJdKTtcbiAgICAgICAgbGV0IGRheSA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbM10pO1xuICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXIsIG1vbnRoLCBkYXkgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlbmRlciBhIERhdGVUaW1lIGluIGEgbWluaW1hbCBmb3JtYXQgdG8gc2F2ZSBzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNaW5pbWFsRGF0ZSh0aW1lOiBEYXRlVGltZSwgZGF0ZUZvcm1hdDogc3RyaW5nLCBkYXRlVGltZUZvcm1hdDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbGV2YW50IHRpbWUgc3BlY2lmaWVkLCBmYWxsIGJhY2sgdG8ganVzdCByZW5kZXJpbmcgdGhlIGRhdGUuXG4gICAgaWYgKHRpbWUuc2Vjb25kID09IDAgJiYgdGltZS5taW51dGUgPT0gMCAmJiB0aW1lLmhvdXIgPT0gMCkge1xuICAgICAgICByZXR1cm4gdGltZS50b0xvY2FsKCkudG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVUaW1lRm9ybWF0LCB7IGxvY2FsZSB9KTtcbn1cblxuLyoqIFJlbmRlciBhIGR1cmF0aW9uIGluIGEgbWluaW1hbCBmb3JtYXQgdG8gc2F2ZSBzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNaW5pbWFsRHVyYXRpb24oZHVyOiBEdXJhdGlvbik6IHN0cmluZyB7XG4gICAgZHVyID0gbm9ybWFsaXplRHVyYXRpb24oZHVyKTtcblxuICAgIC8vIFRPRE86IEx1eG9uIGRvZXMgbm90IGhhdmUgbXVsdGktbGluZ3VhbC9sb2NhbGUtYXdhcmUgZHVyYXRpb24gcmVuZGVyaW5nLlxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGlmIChkdXIueWVhcnMpIHJlc3VsdCArPSBgJHtkdXIueWVhcnN9IHllYXJzLCBgO1xuICAgIGlmIChkdXIubW9udGhzKSByZXN1bHQgKz0gYCR7ZHVyLm1vbnRoc30gbW9udGhzLCBgO1xuICAgIGlmIChkdXIud2Vla3MpIHJlc3VsdCArPSBgJHtkdXIud2Vla3N9IHdlZWtzLCBgO1xuICAgIGlmIChkdXIuZGF5cykgcmVzdWx0ICs9IGAke2R1ci5kYXlzfSBkYXlzLCBgO1xuICAgIGlmIChkdXIuaG91cnMpIHJlc3VsdCArPSBgJHtkdXIuaG91cnN9IGhvdXJzLCBgO1xuICAgIGlmIChkdXIubWludXRlcykgcmVzdWx0ICs9IGAke2R1ci5taW51dGVzfSBtaW51dGVzLCBgO1xuICAgIGlmIChkdXIuc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLnNlY29uZHMpfSBzZWNvbmRzLCBgO1xuICAgIGlmIChkdXIubWlsbGlzZWNvbmRzKSByZXN1bHQgKz0gYCR7TWF0aC5yb3VuZChkdXIubWlsbGlzZWNvbmRzKX0gbXMsIGA7XG5cbiAgICBpZiAocmVzdWx0LmVuZHNXaXRoKFwiLCBcIikpIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFBhdGggdXRpbGl0aWVzLlxuXG4vKiogR2V0IHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gcGF0aCAoaS5lLiwgbGlrZSBjb21wdXRpbmcgJ3BhdGgvLi4nKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRGb2xkZXIocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xufVxuXG4vKiogR2V0IHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBmaWxlIHJlZmVyZW5jZWQgaW4gdGhlIGdpdmVuIHBhdGgsIGJ5IHN0cmlwcGluZyB0aGUgcGFyZW50IGZvbGRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5pbmNsdWRlcyhcIi9cIikgPyBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogcGF0aDtcbn1cblxuLyoqIEdldCB0aGUgXCJ0aXRsZVwiIGZvciBhIGZpbGUsIGJ5IHN0cmlwcGluZyBvdGhlciBwYXJ0cyBvZiB0aGUgcGF0aCBhcyB3ZWxsIGFzIHRoZSBleHRlbnNpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVRpdGxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoXCIvXCIpKSBwYXRoID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5tZFwiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMyk7XG4gICAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIGV4dGVuc2lvbiBvZiBhIGZpbGUgZnJvbSB0aGUgZmlsZSBwYXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcGF0aC5pbmNsdWRlcyhcIi5cIikpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xufVxuXG4vLyBUYWcgZXh0cmFjdGlvbi5cblxuLyoqIFBhcnNlIGFsbCBzdWJ0YWdzIG91dCBvZiB0aGUgZ2l2ZW4gdGFnLiBJLmUuLCAjaGVsbG8vaS9hbSB3b3VsZCB5aWVsZCBbI2hlbGxvL2kvYW0sICNoZWxsby9pLCAjaGVsbG9dLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdWJ0YWdzKHRhZ3M6IHN0cmluZyB8IEl0ZXJhYmxlPHN0cmluZz4pOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IHRhZyBvZiB0eXBlb2YgdGFncyA9PT0gXCJzdHJpbmdcIiA/IFt0YWdzXSA6IHRhZ3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgd2hpbGUgKHRhZy5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAgICAgICAgIHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgdGFnLmxhc3RJbmRleE9mKFwiL1wiKSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0YWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFNwbGl0IGVhY2ggYmxvY2sgYW5kIHNlY3Rpb24gbGluayBpbnRvIHRoZSBvcmlnaW5hbCBsaW5rIGFuZCBhIGNvcnJlc3BvbmRpbmcgZmlsZSBsaW5rLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGaWxlTGlua3MoZWxpbmtzOiBMaW5rW10pOiBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogTGlua1tdID0gW107XG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGVsaW5rcykge1xuICAgICAgICByZXN1bHQucHVzaChsaW5rKTtcblxuICAgICAgICBjb25zdCBmaWxlTGluayA9IGxpbmsudG9GaWxlKCk7XG4gICAgICAgIGlmIChsaW5rLnR5cGUgIT0gXCJmaWxlXCIgJiYgIXJlc3VsdC5maW5kKChleGlzdGluZykgPT4gZXhpc3RpbmcuZXF1YWxzKGZpbGVMaW5rKSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZpbGVMaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFN0cmluZyBlc2NhcGluZyBhbmQgY2Fub25pY2FsaXphdGlvbi5cblxuLyoqXG4gKiBFc2NhcGUgcmVnZXggY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdleChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5jb25zdCBIRUFERVJfQ0FOT05JQ0FMSVpFUjogUC5QYXJzZXI8c3RyaW5nPiA9IFAuYWx0KFxuICAgIFAucmVnZXgobmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpKSxcbiAgICBQLnJlZ2V4KC9bMC05XFxwe0xldHRlcn1fLV0rL3UpLFxuICAgIFAud2hpdGVzcGFjZS5tYXAoKF8pID0+IFwiIFwiKSxcbiAgICBQLmFueS5tYXAoKF8pID0+IFwiIFwiKVxuKVxuICAgIC5tYW55KClcbiAgICAubWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpLnNwbGl0KC9cXHMrLykuam9pbihcIiBcIikudHJpbSgpO1xuICAgIH0pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIHRleHQgaW4gYSBoZWFkZXIgdG8gYmUgc29tZXRoaW5nIHRoYXQgaXMgYWN0dWFsbHkgbGlua2FibGUgdG8uIFRoaXMgbWltaWNzXG4gKiBob3cgT2JzaWRpYW4gZG9lcyBpdCdzIG5vcm1hbGl6YXRpb24sIGNvbGxhcHNpbmcgcmVwZWF0ZWQgc3BhY2VzIGFuZCBzdHJpcHBpbmcgb3V0IGNvbnRyb2wgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsoaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBIRUFERVJfQ0FOT05JQ0FMSVpFUi50cnlQYXJzZShoZWFkZXIpO1xufVxuXG4vLyBGYXN0IGV4dHJhY3Rpb24gb2YgbGluZSByYW5nZXMgZnJvbSBsYXJnZSBwaWVjZXMgb2YgdGV4dC5cblxuLyoqIFVwZGF0ZSB0aGUgbGluZSByYW5nZSBmcm9tIFtzdGFydCwgZW5kKSB3aXRoIHRoZSBnaXZlbiBmdW5jdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmVwbGFjZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmdW5jOiAobGluZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXRhLCBvZmZzZXRdID0gbGluZVNwYW4odGV4dCwgc3RhcnQsIGVuZCk7XG4gICAgaWYgKCFvZmZzZXQpIHJldHVybiB0ZXh0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgZGF0YS5zdWJzdHJpbmcoMCwgb2Zmc2V0LnN0YXJ0KSArIGZ1bmMoZGF0YS5zdWJzdHJpbmcob2Zmc2V0LnN0YXJ0LCBvZmZzZXQuZW5kKSkgKyBkYXRhLnN1YnN0cmluZyhvZmZzZXQuZW5kKVxuICAgICk7XG59XG5cbi8qKiBFeHRyYWN0IHRoZSBsaW5lcyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpLCBhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgb2Zmc2V0cyBvZiB0aGUgc3RhcnQgYW5kIGVuZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lU3BhbihcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlclxuKTogW3N0cmluZywgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkXSB7XG4gICAgc3RhcnQgPSBNYXRoLm1heChzdGFydCwgMCk7XG4gICAgZW5kID0gTWF0aC5tYXgoZW5kLCAwKTtcblxuICAgIGlmIChzdGFydCA+PSBlbmQpIHJldHVybiBbXCJcIiwgdW5kZWZpbmVkXTtcblxuICAgIC8vIFN0YXJ0IGJ5IGZpbmRpbmcgdGhlIHN0YXJ0aW5nIGxpbmUgb2Zmc2V0LlxuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gc2tpcE5ld2xpbmVzKHRleHQsIDAsIHN0YXJ0KTtcbiAgICBpZiAoc3RhcnRPZmZzZXQgPT0gLTEpIHJldHVybiBbXCJcIiwgdW5kZWZpbmVkXTtcblxuICAgIGNvbnN0IGVuZE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCBzdGFydE9mZnNldCwgZW5kIC0gc3RhcnQpO1xuICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQpLCB7IHN0YXJ0OiBzdGFydE9mZnNldCwgZW5kOiB0ZXh0Lmxlbmd0aCB9XTtcbiAgICBlbHNlIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIDEpLCB7IHN0YXJ0OiBzdGFydE9mZnNldCwgZW5kOiBlbmRPZmZzZXQgLSAxIH1dO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKS4gU3RhcnQgaXMgaW5jbHVzaXZlLCBlbmQgaXMgZXhjbHVzaXZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmVSYW5nZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGluZVNwYW4odGV4dCwgc3RhcnQsIGVuZClbMF07XG59XG5cbi8qKiBTa2lwIHtjb3VudH0gdG90YWwgbmV3bGluZXMsIHJldHVybmluZyB0aGUgc3RhcnQgb2YgdGhlIGxpbmUge2NvdW50fSBsaW5lcyBhZnRlciB0aGUgY3VycmVudCBsaW5lLiBJZiBjb3VudCBpcyAwLCB0aGUgaW5pdGlhbCBvZmZzZXQgaXMgcmV0dXJuZWQuICovXG5leHBvcnQgZnVuY3Rpb24gc2tpcE5ld2xpbmVzKHRleHQ6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGNvdW50ID09IDApIHJldHVybiBzdGFydDtcblxuICAgIGxldCBwb3NpdGlvbiA9IHN0YXJ0O1xuICAgIHdoaWxlIChjb3VudCA+IDApIHtcbiAgICAgICAgcG9zaXRpb24gPSB0ZXh0LmluZGV4T2YoXCJcXG5cIiwgcG9zaXRpb24pO1xuICAgICAgICBpZiAocG9zaXRpb24gPT0gLTEpIHJldHVybiAtMTtcblxuICAgICAgICBjb3VudC0tO1xuICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvbjtcbn1cbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IHtcbiAgICBCaW5hcnlPcCxcbiAgICBFeHByZXNzaW9uLFxuICAgIEV4cHJlc3Npb25zLFxuICAgIExhbWJkYUV4cHJlc3Npb24sXG4gICAgTGlzdEV4cHJlc3Npb24sXG4gICAgTGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgT2JqZWN0RXhwcmVzc2lvbixcbiAgICBWYXJpYWJsZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHtcbiAgICBJbmRleENoaWxkT2YsXG4gICAgSW5kZXhQYXRoLFxuICAgIEluZGV4SWQsXG4gICAgSW5kZXhOb3QsXG4gICAgSW5kZXhQYXJlbnRPZixcbiAgICBJbmRleFF1ZXJ5LFxuICAgIEluZGV4VGFnZ2VkLFxuICAgIEluZGV4VHlwZWQsXG4gICAgSW5kZXhMaW5rZWQsXG4gICAgSW5kZXhGaWVsZCxcbiAgICBJbmRleEV4cHJlc3Npb24sXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUGFyc2luZyBQcmltaXRpdmVzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFByaW1pdGl2ZSBwYXJzaW5nIGZvciBjb21tb25seSBzZWVuIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVzTGFuZ3VhZ2Uge1xuICAgIG51bWJlcjogbnVtYmVyO1xuICAgIHN0cmluZzogc3RyaW5nO1xuICAgIGVzY2FwZUNoYXJhY3Rlcjogc3RyaW5nO1xuICAgIGJvb2w6IGJvb2xlYW47XG4gICAgdGFnOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGxpbms6IExpbms7XG4gICAgZW1iZWRMaW5rOiBMaW5rO1xuICAgIHJvb3REYXRlOiBEYXRlVGltZTtcbiAgICBkYXRlU2hvcnRoYW5kOiBrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTO1xuICAgIGRhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVQbHVzOiBEYXRlVGltZTtcbiAgICBkdXJhdGlvblR5cGU6IGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUztcbiAgICBkdXJhdGlvbjogRHVyYXRpb247XG4gICAgcmF3TnVsbDogc3RyaW5nO1xuXG4gICAgYmluYXJ5UGx1c01pbnVzOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlNdWxEaXY6IEJpbmFyeU9wO1xuICAgIGJpbmFyeUNvbXBhcmVPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5QW5kT3A6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU9yT3A6IEJpbmFyeU9wO1xuXG4gICAgLy8gTGl0ZXJhbCBmaWVsZCBwYXJzaW5nIGZvciBpbmdlc3RpbmcgaW5saW5lIGZpZWxkcyBhbmQgZnJvbnRtYXR0ZXIuXG4gICAgYXRvbUlubGluZUZpZWxkOiBMaXRlcmFsO1xuICAgIGlubGluZUZpZWxkTGlzdDogTGl0ZXJhbFtdO1xuICAgIGlubGluZUZpZWxkOiBMaXRlcmFsO1xufVxuXG4vKiogSW1wbGVtZW50YXRpb25zIGZvciBtYW55IHByaW1pdGl2ZXMuICovXG5leHBvcnQgY29uc3QgUFJJTUlUSVZFUyA9IFAuY3JlYXRlTGFuZ3VhZ2U8UHJpbWl0aXZlc0xhbmd1YWdlPih7XG4gICAgbnVtYmVyOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLy0/WzAtOV0rKFxcLlswLTldKyk/LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSlcbiAgICAgICAgICAgIC5kZXNjKFwibnVtYmVyXCIpLFxuXG4gICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1xcJykuXG4gICAgc3RyaW5nOiAocSkgPT5cbiAgICAgICAgUC5zdHJpbmcoJ1wiJylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIFAuYWx0KHEuZXNjYXBlQ2hhcmFjdGVyLCBQLm5vbmVPZignXCJcXFxcJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdExlYXN0KDApXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoYXJzKSA9PiBjaGFycy5qb2luKFwiXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNraXAoUC5zdHJpbmcoJ1wiJykpXG4gICAgICAgICAgICAuZGVzYyhcInN0cmluZ1wiKSxcblxuICAgIGVzY2FwZUNoYXJhY3RlcjogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiXFxcXFwiKVxuICAgICAgICAgICAgLnRoZW4oUC5hbnkpXG4gICAgICAgICAgICAubWFwKChlc2NhcGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICdcIicpIHJldHVybiAnXCInO1xuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09PSBcIlxcXFxcIikgcmV0dXJuIFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXFxcXFwiICsgZXNjYXBlZDtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuXG4gICAgYm9vbDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiYm9vbGVhblwiKSxcblxuICAgIC8vIEEgdGFnIG9mIHRoZSBmb3JtICcjc3R1ZmYvaGVsbG8tdGhlcmUnLlxuICAgIHRhZzogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIjXCIpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1teXFx1MjAwMC1cXHUyMDZGXFx1MkUwMC1cXHUyRTdGJyFcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxbXFxdXFxcXFxcc10vKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ0YWdcIiksXG5cbiAgICAvLyBBIHZhcmlhYmxlIGlkZW50aWZpZXIsIHdoaWNoIGlzIGFscGhhbnVtZXJpYyBhbmQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yLi4uIGVtb2ppLlxuICAgIGlkZW50aWZpZXI6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bXFxwe0xldHRlcn0kXS91KSwgUC5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoXCJ0ZXh0XCIpKSxcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn0kXy1dL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLm1hbnkoKSxcbiAgICAgICAgICAgIChmaXJzdCwgcmVzdCkgPT4gZmlyc3QgKyByZXN0LmpvaW4oXCJcIilcbiAgICAgICAgKS5kZXNjKFwidmFyaWFibGVcIiksXG5cbiAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uXG4gICAgbGluazogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXFtcXFsoW15cXFtcXF1dKj8pXFxdXFxdL3UsIDEpXG4gICAgICAgICAgICAubWFwKChsaW5rSW5uZXIpID0+IExpbmsucGFyc2VJbm5lcihsaW5rSW5uZXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBBbiBlbWJlZGRhYmxlIGxpbmsgd2hpY2ggY2FuIHN0YXJ0IHdpdGggJyEnLiBUaGlzIG92ZXJsYXBzIHdpdGggdGhlIG5vcm1hbCBuZWdhdGlvbiBvcGVyYXRvciwgc28gaXQgaXMgb25seVxuICAgIC8vIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBwYXJzaW5nLlxuICAgIGVtYmVkTGluazogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHtcbiAgICAgICAgICAgIGlmIChwLmxlbmd0aCA+IDApIGwuZW1iZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIH0pLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci5cbiAgICBiaW5hcnlQbHVzTWludXM6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvXFwrfC0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicrJyBvciAnLSdcIiksXG5cbiAgICAvLyBCaW5hcnkgdGltZXMgb3IgZGl2aWRlIG9wZXJhdG9yLlxuICAgIGJpbmFyeU11bERpdjogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCp8XFwvfCUvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicqJyBvciAnLycgb3IgJyUnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5Q29tcGFyZU9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLz49fDw9fCE9fD58PHw9LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gc3RyIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInPj0nIG9yICc8PScgb3IgJyE9JyBvciAnPScgb3IgJz4nIG9yICc8J1wiKSxcblxuICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLlxuICAgIGJpbmFyeUFuZE9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL2FuZHwmL2kpXG4gICAgICAgICAgICAubWFwKChfc3RyKSA9PiBcIiZcIiBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJ2FuZCdcIiksXG4gICAgYmluYXJ5T3JPcDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9vcnxcXHwvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwifFwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInb3InXCIpLFxuXG4gICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uXG4gICAgcm9vdERhdGU6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChQLnJlZ2V4cCgvXFxkezR9LyksIFAuc3RyaW5nKFwiLVwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoeWVhciwgXywgbW9udGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTtcbiAgICAgICAgfSkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVwiKSxcbiAgICBkYXRlU2hvcnRoYW5kOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEQVRFX1NIT1JUSEFORFMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTPixcbiAgICBkYXRlOiAocSkgPT5cbiAgICAgICAgY2hhaW5PcHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5yb290RGF0ZSxcbiAgICAgICAgICAgICh5bTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBkYXkpID0+IHltLnNldCh7IGRheTogTnVtYmVyLnBhcnNlSW50KGRheSkgfSkpLFxuICAgICAgICAgICAgKHltZDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJUXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSxcbiAgICAgICAgICAgICh5bWRoOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh5bWRobTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCI6XCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgIHltZGhtLnNldCh7IHNlY29uZDogTnVtYmVyLnBhcnNlSW50KHNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtczogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUC5yZWdleHAoL1xcZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB5bWRobXMuc2V0KHsgbWlsbGlzZWNvbmQ6IE51bWJlci5wYXJzZUludChtaWxsaXNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zdWNjZWVkKHltZGhtcykgLy8gcGFzc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZHQ6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIitcIikub3IoUC5zdHJpbmcoXCItXCIpKSwgUC5yZWdleHAoL1xcZHsxLDJ9KDpcXGR7Mn0pPy8pLCAocG0sIGhyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZShcIlVUQ1wiICsgcG0gKyBociwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiWlwiKSwgKCkgPT4gZHQuc2V0Wm9uZShcInV0Y1wiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIltcIiksIFAucmVnZXhwKC9bMC05QS1aYS16Ky1cXC9dKy91KSwgUC5zdHJpbmcoXCJdXCIpLCAoX2EsIHpvbmUsIF9iKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLmFzc2VydCgoZHQ6IERhdGVUaW1lKSA9PiBkdC5pc1ZhbGlkLCBcInZhbGlkIGRhdGVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuXG4gICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS5cbiAgICBkYXRlUGx1czogKHEpID0+XG4gICAgICAgIFAuYWx0PERhdGVUaW1lPihcbiAgICAgICAgICAgIHEuZGF0ZVNob3J0aGFuZC5tYXAoKGQpID0+IERBVEVfU0hPUlRIQU5EU1tkXSgpKSxcbiAgICAgICAgICAgIHEuZGF0ZVxuICAgICAgICApLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXCIpLFxuXG4gICAgLy8gQSBkdXJhdGlvbiBvZiB0aW1lLlxuICAgIGR1cmF0aW9uVHlwZTogKF8pID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoRFVSQVRJT05fVFlQRVMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgRFVSQVRJT05fVFlQRVM+LFxuICAgIGR1cmF0aW9uOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5udW1iZXIsIFAub3B0V2hpdGVzcGFjZSwgcS5kdXJhdGlvblR5cGUsIChjb3VudCwgXywgdCkgPT5cbiAgICAgICAgICAgIERVUkFUSU9OX1RZUEVTW3RdLm1hcFVuaXRzKCh4KSA9PiB4ICogY291bnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXBCeTEoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5vcihQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgLm1hcCgoZHVyYXRpb25zKSA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvbiBsaWtlIDRocjJtaW5cIiksXG5cbiAgICAvLyBBIHJhdyBudWxsIHZhbHVlLlxuICAgIHJhd051bGw6IChfKSA9PiBQLnN0cmluZyhcIm51bGxcIiksXG5cbiAgICAvLyBJbmxpbmUgZmllbGQgdmFsdWUgcGFyc2luZy5cbiAgICBhdG9tSW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIHEuZGF0ZSxcbiAgICAgICAgICAgIHEuZHVyYXRpb24ubWFwKChkKSA9PiBub3JtYWxpemVEdXJhdGlvbihkKSksXG4gICAgICAgICAgICBxLnN0cmluZyxcbiAgICAgICAgICAgIHEudGFnLFxuICAgICAgICAgICAgcS5lbWJlZExpbmssXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEucmF3TnVsbFxuICAgICAgICApLFxuICAgIGlubGluZUZpZWxkTGlzdDogKHEpID0+IHEuYXRvbUlubGluZUZpZWxkLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKHEuYXRvbUlubGluZUZpZWxkKSksXG4gICAgaW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIFAuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PlxuICAgICAgICAgICAgICAgIFtmXS5jb25jYXQobClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxLmF0b21JbmxpbmVGaWVsZFxuICAgICAgICApLFxufSk7XG5cbi8qKiBFbW9qaSByZWdleCwgc3RycHBpbmcgYW55IHJlZ2V4IGZsYWdzIGl0IGhhcy4gKi9cbmNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpO1xuXG4vKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqL1xuZXhwb3J0IGNvbnN0IERVUkFUSU9OX1RZUEVTID0ge1xuICAgIHllYXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5ZWFyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHlyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG5cbiAgICBtb250aDogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb250aHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW86IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW9zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuXG4gICAgd2VlazogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdlZWtzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2s6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3a3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3OiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG5cbiAgICBkYXk6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGRheXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuXG4gICAgaG91cjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhvdXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaHI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG5cbiAgICBtaW51dGU6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbnV0ZXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbjogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG5cbiAgICBzZWNvbmQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlY29uZHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlYzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG59O1xuXG4vKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovXG5leHBvcnQgY29uc3QgREFURV9TSE9SVEhBTkRTID0ge1xuICAgIG5vdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKSxcbiAgICB0b2RheTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwiZGF5XCIpLFxuICAgIHllc3RlcmRheTogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5taW51cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgdG9tb3Jyb3c6ICgpID0+XG4gICAgICAgIERhdGVUaW1lLmxvY2FsKClcbiAgICAgICAgICAgIC5zdGFydE9mKFwiZGF5XCIpXG4gICAgICAgICAgICAucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgc293OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIFwic3RhcnQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIGVvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIndlZWtcIiksXG4gICAgXCJlbmQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBzb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgXCJzdGFydC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgZW95OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwieWVhclwiKSxcbiAgICBcImVuZC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIHNvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwibW9udGhcIiksXG4gICAgXCJzdGFydC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBlb206ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbiAgICBcImVuZC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwibW9udGhcIiksXG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBFeHByZXNzaW9uIExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFBvc3RmaXhGcmFnbWVudCA9XG4gICAgfCB7IHR5cGU6IFwiZG90XCI7IGV4cHI6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiaW5kZXhcIjsgZXhwcjogRXhwcmVzc2lvbiB9XG4gICAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgZXhwcnM6IEV4cHJlc3Npb25bXSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cHJlc3Npb25MYW5ndWFnZSB7XG4gICAgdmFyaWFibGU6IFZhcmlhYmxlRXhwcmVzc2lvbjtcbiAgICBudW1iZXI6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGJvb2w6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIHN0cmluZzogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZGF0ZTogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZHVyYXRpb246IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGxpbms6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIG51bGw6IExpdGVyYWxFeHByZXNzaW9uO1xuXG4gICAgbGlzdDogTGlzdEV4cHJlc3Npb247XG4gICAgb2JqZWN0OiBPYmplY3RFeHByZXNzaW9uO1xuXG4gICAgbmVnYXRlZDogRXhwcmVzc2lvbjtcbiAgICBhdG9tOiBFeHByZXNzaW9uO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGxhbWJkYTogTGFtYmRhRXhwcmVzc2lvbjtcblxuICAgIC8vIFBvc3RmaXggcGFyc2VycyBmb3IgZnVuY3Rpb24gY2FsbHMgJiB0aGUgbGlrZS5cbiAgICBkb3RQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgaW5kZXhQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgZnVuY3Rpb25Qb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG5cbiAgICAvLyBCaW5hcnkgb3AgcGFyc2Vycy5cbiAgICBiaW5hcnlNdWxEaXY6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5UGx1c01pbnVzOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeUNvbXBhcmU6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Qm9vbGVhbjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlPcDogRXhwcmVzc2lvbjtcbiAgICBwYXJlbnM6IEV4cHJlc3Npb247XG4gICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBmb3IgdGhlIGRhdGFjb3JlIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIHdoaWNoIHByb3ZpZGVzIHNpbXBsZSBhbmQgdmFndWVseSBKUy1sb29raW5nIGNvbXB1dGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRVhQUkVTU0lPTiA9IFAuY3JlYXRlTGFuZ3VhZ2U8RXhwcmVzc2lvbkxhbmd1YWdlPih7XG4gICAgLy8gRmllbGQgcGFyc2luZy5cbiAgICB2YXJpYWJsZTogKF8pID0+IFBSSU1JVElWRVMuaWRlbnRpZmllci5tYXAoRXhwcmVzc2lvbnMudmFyaWFibGUpLmRlc2MoXCJ2YXJpYWJsZVwiKSxcbiAgICBudW1iZXI6IChfKSA9PiBQUklNSVRJVkVTLm51bWJlci5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcIm51bWJlclwiKSxcbiAgICBzdHJpbmc6IChfKSA9PiBQUklNSVRJVkVTLnN0cmluZy5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcInN0cmluZ1wiKSxcbiAgICBib29sOiAoXykgPT4gUFJJTUlUSVZFUy5ib29sLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwiYm9vbGVhblwiKSxcbiAgICBkYXRlOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkYXRlXCIsIFBSSU1JVElWRVMuZGF0ZVBsdXMpXG4gICAgICAgICAgICAubWFwKChbX2Z1bmMsIGRhdGVdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGRhdGUpKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlXCIpLFxuICAgIGR1cmF0aW9uOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkdXJcIiwgUFJJTUlUSVZFUy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZHVyXSkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChkdXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvblwiKSxcbiAgICBudWxsOiAoXykgPT4gUFJJTUlUSVZFUy5yYXdOdWxsLm1hcCgoXykgPT4gRXhwcmVzc2lvbnMuTlVMTCksXG4gICAgbGluazogKF8pID0+IFBSSU1JVElWRVMubGluay5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCksXG4gICAgbGlzdDogKHEpID0+XG4gICAgICAgIHEuZXhwcmVzc2lvblxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIltcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIl1cIikpKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGlzdChsKSlcbiAgICAgICAgICAgIC5kZXNjKFwibGlzdFwiKSxcbiAgICBvYmplY3Q6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZyksXG4gICAgICAgICAgICBQLnN0cmluZyhcIjpcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgKG5hbWUsIF9zZXAsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIntcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIn1cIikpKVxuICAgICAgICAgICAgLm1hcCgodmFscykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdmFscykgcmVzW2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb25zLm9iamVjdChyZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZXNjKFwib2JqZWN0ICgneyBhOiAxLCBiOiAyIH0nKVwiKSxcblxuICAgIGF0b206IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC8vIFBsYWNlIGVtYmVkIGxpbmtzIGFib3ZlIG5lZ2F0ZWQgZmllbGRzIGFzIHRoZXkgYXJlIHRoZSBzcGVjaWFsIHBhcnNlciBjYXNlICchW1t0aGluZ11dJyBhbmQgYXJlIGdlbmVyYWxseSB1bmFtYmlnaW91cy5cbiAgICAgICAgICAgIFBSSU1JVElWRVMuZW1iZWRMaW5rLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChsKSksXG4gICAgICAgICAgICBxLm5lZ2F0ZWQsXG4gICAgICAgICAgICBxLmxpbmssXG4gICAgICAgICAgICBxLmxpc3QsXG4gICAgICAgICAgICBxLm9iamVjdCxcbiAgICAgICAgICAgIHEubGFtYmRhLFxuICAgICAgICAgICAgcS5wYXJlbnMsXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbixcbiAgICAgICAgICAgIHEubnVsbCxcbiAgICAgICAgICAgIHEudmFyaWFibGVcbiAgICAgICAgKSxcbiAgICBpbmRleDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKHEuYXRvbSwgUC5hbHQocS5kb3RQb3N0Zml4LCBxLmluZGV4UG9zdGZpeCwgcS5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwgKG9iaiwgcG9zdGZpeGVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICAgICAgZm9yIChsZXQgcG9zdCBvZiBwb3N0Zml4ZXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZG90XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocG9zdC5leHByKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIHBvc3QuZXhwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5mdW5jKHJlc3VsdCwgcG9zdC5leHBycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgIG5lZ2F0ZWQ6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIiFcIiksIHEuaW5kZXgsIChfLCBmaWVsZCkgPT4gRXhwcmVzc2lvbnMubmVnYXRlKGZpZWxkKSkuZGVzYyhcIm5lZ2F0ZWQgZmllbGRcIiksXG4gICAgcGFyZW5zOiAocSkgPT4gcS5leHByZXNzaW9uLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBsYW1iZGE6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIC5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiKFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIFAuc3RyaW5nKFwiKVwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCI9PlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAoaWRlbnQsIF9pZ25vcmUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsYW1iZGFcIiwgYXJndW1lbnRzOiBpZGVudCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIGRvdFBvc3RmaXg6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIi5cIiksIFBSSU1JVElWRVMuaWRlbnRpZmllciwgKF8sIGV4cHIpID0+ICh7IHR5cGU6IFwiZG90XCIsIGV4cHIgfSkpLFxuICAgIGluZGV4UG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJbXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJdXCIpLFxuICAgICAgICAgICAgKF8sIF8yLCBleHByLCBfMywgXzQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImluZGV4XCIsIGV4cHIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBmdW5jdGlvblBvc3RmaXg6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKFwiKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbi5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKVwiKSxcbiAgICAgICAgICAgIChfLCBfMSwgZXhwcnMsIF8yLCBfMykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgZXhwcnMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIC8vIFRoZSBwcmVjZWRlbmNlIGhpZXJhcmNoeSBvZiBvcGVyYXRvcnMgLSBtdWx0aXBseS9kaXZpZGUsIGFkZC9zdWJ0cmFjdCwgY29tcGFyZSwgYW5kIHRoZW4gYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgIGJpbmFyeU11bERpdjogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmluZGV4LCBQUklNSVRJVkVTLmJpbmFyeU11bERpdiwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeVBsdXNNaW51czogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdiwgUFJJTUlUSVZFUy5iaW5hcnlQbHVzTWludXMsIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlDb21wYXJlOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5UGx1c01pbnVzLCBQUklNSVRJVkVTLmJpbmFyeUNvbXBhcmVPcCwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUJvb2xlYW46IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlDb21wYXJlLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLm9yKFBSSU1JVElWRVMuYmluYXJ5T3JPcCksIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlPcDogKHEpID0+IHEuYmluYXJ5Qm9vbGVhbixcblxuICAgIGV4cHJlc3Npb246IChxKSA9PiBxLmJpbmFyeU9wLFxufSk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBRdWVyeSBMYW5ndWFnZSAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFN1cHBvcnRlZCB0eXBlcyBpbiB0aGUgZ3JhbW1hciBmb3IgaW5kZXggcXVlcmllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlMYW5ndWFnZSB7XG4gICAgcXVlcnlUYWc6IEluZGV4VGFnZ2VkO1xuICAgIHF1ZXJ5SWQ6IEluZGV4SWQ7XG4gICAgcXVlcnlUeXBlOiBJbmRleFR5cGVkO1xuICAgIHF1ZXJ5UGF0aDogSW5kZXhQYXRoO1xuICAgIHF1ZXJ5UGFyZW50T2Y6IEluZGV4UGFyZW50T2Y7XG4gICAgcXVlcnlDaGlsZE9mOiBJbmRleENoaWxkT2Y7XG4gICAgcXVlcnlTaW1wbGVMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5TGlua2VkOiBJbmRleExpbmtlZDtcbiAgICBxdWVyeUV4aXN0czogSW5kZXhGaWVsZDtcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeVJhd0V4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeU5lZ2F0ZTogSW5kZXhOb3Q7XG4gICAgcXVlcnlQYXJlbnM6IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBdG9tOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5QW5kczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeU9yczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbn1cblxuLyoqXG4gKiBQYXJzZXIgZm9yIHRoZSBxdWVyeSBsYW5ndWFnZS4gRGlkIEkgcmVhbGx5IG5lZWQgYSBxdWVyeSBsYW5ndWFnZSBpbnN0ZWFkIG9mIGp1c3QgYSBiZXR0ZXIgVUk/IFByb2JhYmx5IG5vdC5cbiAqIEJ1dCBxdWVyeSBsYW5ndWFnZXMgYXJlIGZ1biBmb3IgdGhlIHdob2xlIGZhbWlseSBhbmQgYXQgc29tZSBwb2ludCB5b3UgZ2V0IHNvIHVzZWQgdG8gd3JpdGluZyB0aGVtIHRoYXRcbiAqIHlvdSBkb24ndCBzdG9wIHRvIHRoaW5rIGlmIHlvdSAqbmVlZCogdG8gd3JpdGUgdGhlbSBhbnltb3JlLiBJdCdzIGdvb2QgdHlwaW5nIHByYWN0aWNlIGZvciBldmVyeW9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVRVJZID0gUC5jcmVhdGVMYW5ndWFnZTxRdWVyeUxhbmd1YWdlPih7XG4gICAgcXVlcnlUYWc6IChfKSA9PiBQUklNSVRJVkVTLnRhZy5tYXAoKHZhbHVlKSA9PiAoeyB0eXBlOiBcInRhZ2dlZFwiLCB2YWx1ZSB9KSksXG4gICAgcXVlcnlJZDogKF8pID0+IGNyZWF0ZUZ1bmN0aW9uKFwiaWRcIiwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW18sIGlkXSkgPT4gKHsgdHlwZTogXCJpZFwiLCB2YWx1ZTogaWQgfSkpLFxuICAgIHF1ZXJ5VHlwZTogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiQFwiKVxuICAgICAgICAgICAgLnRoZW4oUFJJTUlUSVZFUy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidHlwZWRcIiwgdmFsdWU6IHZhbHVlIH0pKSxcblxuICAgIHF1ZXJ5UGF0aDogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9lP3BhdGgvaSkuZGVzYyhcIltlXXBhdGhcIiksIFBSSU1JVElWRVMuc3RyaW5nKS5tYXAoKFtmdW5jLCBwYXRoXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhdGgsXG4gICAgICAgICAgICBleGFjdDogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcImVwYXRoXCIsXG4gICAgICAgIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW50T2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvcGFyZW50b2Z8c3VwZXJ0cmVlL2kpLmRlc2MoXCJwYXJlbnRvZlwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgY2hpbGRyZW5dKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXJlbnQtb2ZcIixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwic3VwZXJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUNoaWxkT2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXCJjaGlsZG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBwYXJlbnRzXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hpbGQtb2ZcIixcbiAgICAgICAgICAgIHBhcmVudHMsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdWJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogKF8pID0+XG4gICAgICAgIFBSSU1JVElWRVMubGluay5tYXAoKGxpbmspID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlOiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogbGluayB9LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImluY29taW5nXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUxpbmtlZDogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9saW5rc3RvfGxpbmtlZGZyb218Y29ubmVjdGVkL2kpLmRlc2MoXCJjb25uZWN0ZWRcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHNvdXJjZV0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uOlxuICAgICAgICAgICAgICAgIGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtzdG9cIiA/IFwiaW5jb21pbmdcIiA6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtlZGZyb21cIiA/IFwib3V0Z29pbmdcIiA6IFwiYm90aFwiLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlFeGlzdHM6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhpc3RzL2kpLmRlc2MoXCJleGlzdHNcIiksIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZykpLm1hcChcbiAgICAgICAgICAgIChbX2Z1bmMsIGlkZW50XSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlkZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhwci9pKS5kZXNjKFwiZXhwclwiKSwgRVhQUkVTU0lPTi5leHByZXNzaW9uKS5tYXAoKFtfLCBleHByXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogKHEpID0+IEVYUFJFU1NJT04uYmluYXJ5Q29tcGFyZS5tYXAoKGV4cHIpID0+ICh7IHR5cGU6IFwiZXhwcmVzc2lvblwiLCBleHByZXNzaW9uOiBleHByIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW5zOiAocSkgPT4gcS5xdWVyeS50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgcXVlcnlOZWdhdGU6IChxKSA9PlxuICAgICAgICBQLnN0cmluZyhcIiFcIilcbiAgICAgICAgICAgIC5za2lwKFAub3B0V2hpdGVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKHEucXVlcnlBdG9tKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJub3RcIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICBxdWVyeUF0b206IChxKSA9PlxuICAgICAgICBQLmFsdDxJbmRleFF1ZXJ5PihcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnMsXG4gICAgICAgICAgICBxLnF1ZXJ5TmVnYXRlLFxuICAgICAgICAgICAgcS5xdWVyeVNpbXBsZUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlUYWcsXG4gICAgICAgICAgICBxLnF1ZXJ5VHlwZSxcbiAgICAgICAgICAgIHEucXVlcnlJZCxcbiAgICAgICAgICAgIHEucXVlcnlFeGlzdHMsXG4gICAgICAgICAgICBxLnF1ZXJ5Q2hpbGRPZixcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnRPZixcbiAgICAgICAgICAgIHEucXVlcnlMaW5rZWQsXG4gICAgICAgICAgICBxLnF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIHEucXVlcnlRdW90ZWRFeHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gRXhwcmVzc2lvbnMgYXJlIGVzc2VudGlhbGx5IHRoZSBcImNhdGNoLWFsbFwiIG9mIG90aGVyd2lzZSB1bnBhcnNlYWJsZSB0ZXJtcywgc28gdGhleSBzaG91bGQgZ28gYWJzb2x1dGUgbGFzdC5cbiAgICAgICAgICAgIHEucXVlcnlSYXdFeHByZXNzaW9uXG4gICAgICAgICksXG4gICAgcXVlcnlBbmRzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBdG9tLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLCAobGVmdCwgX29wLCByaWdodCkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiYW5kXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5T3JzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBbmRzLCBQUklNSVRJVkVTLmJpbmFyeU9yT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJvclwiLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtsZWZ0LCByaWdodF0sXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeTogKHEpID0+IHEucXVlcnlPcnMudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxufSk7XG5cbi8qKiBSZXR1cm4gYSBuZXcgcGFyc2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSB1bmRlcmx5aW5nIHBhcnNlciBhbmQgcmV0dXJucyBpdCdzIHJhdyBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJhdzxUPihiYXNlOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtULCBzdHJpbmddPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIHsgdmFsdWU6IFtyZXN1bHQudmFsdWUsIGlucHV0LnN1YnN0cmluZyhpLCByZXN1bHQuaW5kZXgpXSB9KTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuLyoqIENyZWF0ZSBhIGxlZnQtYXNzb2NpYXRpdmUgYmluYXJ5IHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGdpdmVuIHN1Yi1lbGVtZW50IGFuZCBzZXBhcmF0b3IuIEhhbmRsZXMgd2hpdGVzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5hcnlQYXJzZXI8VCwgVT4oXG4gICAgY2hpbGQ6IFAuUGFyc2VyPFQ+LFxuICAgIHNlcDogUC5QYXJzZXI8VT4sXG4gICAgY29tYmluZTogKGE6IFQsIGI6IFUsIGM6IFQpID0+IFRcbik6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5zZXFNYXAoY2hpbGQsIFAuc2VxKFAub3B0V2hpdGVzcGFjZSwgc2VwLCBQLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4ge1xuICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkgcmV0dXJuIGZpcnN0O1xuXG4gICAgICAgIGxldCBub2RlID0gY29tYmluZShmaXJzdCwgcmVzdFswXVsxXSwgcmVzdFswXVszXSk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJzZXIgd2hpY2ggcGFyc2VzIFxcPGZ1bmN0aW9uXFw+KFxcPGFyZ3NcXD4pLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbjxUPihmdW5jOiBzdHJpbmcgfCBQLlBhcnNlcjxzdHJpbmc+LCBhcmdzOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtzdHJpbmcsIFRdPiB7XG4gICAgY29uc3QgcmVhbEZ1bmMgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IFAuc3RyaW5nKGZ1bmMpIDogZnVuYztcbiAgICByZXR1cm4gUC5zZXFNYXAoXG4gICAgICAgIHJlYWxGdW5jLnNraXAoUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgYXJncy50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgICAgIChmLCBhKSA9PiBbZiwgYV1cbiAgICApO1xufVxuXG4vKiogQ2hhaW5zIGEgbGlzdCBvZiBwYXJzZXJzOyB0aGUgZmlyc3Qgb25lIG11c3Qgc3VjY2VlZCwgYnV0IGZvbGxvd2luZyBvbmVzIG1heSBmYWlsIHdpdGhvdXQgZmFpbGluZyB0aGUgb3ZlcmFsbCBwYXJzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbk9wdDxUPihiYXNlOiBQLlBhcnNlcjxUPiwgLi4uZnVuY3M6ICgocjogVCkgPT4gUC5QYXJzZXI8VD4pW10pOiBQLlBhcnNlcjxUPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IChmdW5jKHJlc3VsdC52YWx1ZSBhcyBUKSBhcyBhbnkpLl8oaW5wdXQsIHJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGV4cHJlc3Npb25zXG4gKi9cbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IHJlbmRlck1pbmltYWxEYXRlLCByZW5kZXJNaW5pbWFsRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLy8gUmUtZXhwb3J0cyBvZiB1c2VmdWwgZ2VuZXJpYyB0eXBlcy5cbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqIFNob3J0aGFuZCBmb3IgYSBtYXBwaW5nIGZyb20ga2V5cyB0byB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBEYXRhT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgYW55Pjtcbi8qKiBUaGUgbGl0ZXJhbCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHF1ZXJ5IGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIExpdGVyYWxUeXBlID1cbiAgICB8IFwiYm9vbGVhblwiXG4gICAgfCBcIm51bWJlclwiXG4gICAgfCBcInN0cmluZ1wiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJkdXJhdGlvblwiXG4gICAgfCBcImxpbmtcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcImZ1bmN0aW9uXCJcbiAgICB8IFwibnVsbFwiO1xuLyoqIFRoZSByYXcgdmFsdWVzIHRoYXQgYSBsaXRlcmFsIGNhbiB0YWtlIG9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgRGF0ZVRpbWVcbiAgICB8IER1cmF0aW9uXG4gICAgfCBMaW5rXG4gICAgfCBBcnJheTxMaXRlcmFsPlxuICAgIHwgRGF0YU9iamVjdFxuICAgIHwgRnVuY3Rpb25cbiAgICB8IG51bGw7XG5cbi8qKiBNYXBzIHRoZSBzdHJpbmcgdHlwZSB0byBpdCdzIGV4dGVybmFsLCBBUEktZmFjaW5nIHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHI8VCBleHRlbmRzIExpdGVyYWxUeXBlPiA9IFQgZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgID8gYm9vbGVhblxuICAgIDogVCBleHRlbmRzIFwibnVtYmVyXCJcbiAgICA/IG51bWJlclxuICAgIDogVCBleHRlbmRzIFwic3RyaW5nXCJcbiAgICA/IHN0cmluZ1xuICAgIDogVCBleHRlbmRzIFwiZHVyYXRpb25cIlxuICAgID8gRHVyYXRpb25cbiAgICA6IFQgZXh0ZW5kcyBcImRhdGVcIlxuICAgID8gRGF0ZVRpbWVcbiAgICA6IFQgZXh0ZW5kcyBcIm51bGxcIlxuICAgID8gbnVsbFxuICAgIDogVCBleHRlbmRzIFwibGlua1wiXG4gICAgPyBMaW5rXG4gICAgOiBUIGV4dGVuZHMgXCJhcnJheVwiXG4gICAgPyBBcnJheTxMaXRlcmFsPlxuICAgIDogVCBleHRlbmRzIFwib2JqZWN0XCJcbiAgICA/IERhdGFPYmplY3RcbiAgICA6IFQgZXh0ZW5kcyBcImZ1bmN0aW9uXCJcbiAgICA/IEZ1bmN0aW9uXG4gICAgOiBhbnk7XG5cbi8qKiBBIHdyYXBwZWQgbGl0ZXJhbCB2YWx1ZSB3aGljaCBjYW4gYmUgc3dpdGNoZWQgb24uICovXG5leHBvcnQgdHlwZSBXcmFwcGVkTGl0ZXJhbCA9XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcInN0cmluZ1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJudW1iZXJcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYm9vbGVhblwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJkYXRlXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImR1cmF0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImxpbmtcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYXJyYXlcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwib2JqZWN0XCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImZ1bmN0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bGxcIj47XG5cbi8qKiBDb21iaW5lcyBhIHRleHR1YWwgdHlwZSBhbmQgdmFsdWU7IHByaW1hcmlseSB1c2VmdWwgZm9yIHN3aXRjaGluZyBvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsV3JhcHBlcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+IHtcbiAgICB0eXBlOiBUO1xuICAgIHZhbHVlOiBMaXRlcmFsUmVwcjxUPjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgVXRpbGl0eSBsaWJyYXJ5IGZvciBoYW5kbGluZyBsaXRlcmFsIHZhbHVlcy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgTGl0ZXJhbHMge1xuICAgIC8qKiBTZXR0aW5ncyB1c2VkIHdoZW4gZm9ybWF0dGluZyBsaXRlcmFsIHZhbHVlcyB0byB0ZXh0LiAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVG9TdHJpbmdTZXR0aW5ncyB7XG4gICAgICAgIC8qKiBXaGF0IGEgbnVsbCB3aWxsIHJlbmRlciBhcy4gKi9cbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUgZm9ybWF0LiAqL1xuICAgICAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUtdGltZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFNhbmUsIEVuZ2xpc2gtYmFzZWQgZGVmYXVsdHMgZm9yIGRhdGUgZm9ybWF0cy4gKi9cbiAgICBleHBvcnQgY29uc3QgREVGQVVMVF9UT19TVFJJTkc6IFRvU3RyaW5nU2V0dGluZ3MgPSB7XG4gICAgICAgIG51bGxSZXByZXNlbnRhdGlvbjogXCItXCIsXG5cbiAgICAgICAgZGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcbiAgICB9O1xuXG4gICAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlIGludG8gYSByZWFzb25hYmxlLCBNYXJrZG93bi1mcmllbmRseSBzdHJpbmcgaWYgcG9zc2libGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKFxuICAgICAgICBmaWVsZDogYW55LFxuICAgICAgICBzZXR0aW5nOiBUb1N0cmluZ1NldHRpbmdzID0gREVGQVVMVF9UT19TVFJJTkcsXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZy5udWxsUmVwcmVzZW50YXRpb247XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIjxmdW5jdGlvbj5cIjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHJlc3VsdCArPSBcIltcIjtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoKGYpID0+IHRvU3RyaW5nKGYsIHNldHRpbmcsIHRydWUpKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiXVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCJ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGUpID0+IGVbMF0gKyBcIjogXCIgKyB0b1N0cmluZyhlWzFdLCBzZXR0aW5nLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIiB9XCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyTWluaW1hbERhdGUod3JhcHBlZC52YWx1ZSwgc2V0dGluZy5kYXRlRm9ybWF0LCBzZXR0aW5nLmRhdGVUaW1lRm9ybWF0KTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRHVyYXRpb24od3JhcHBlZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwVmFsdWUodmFsOiBMaXRlcmFsKTogV3JhcHBlZExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNOdWxsKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVsbFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJib29sZWFuXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEdXJhdGlvbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJhcnJheVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKSByZXR1cm4geyB0eXBlOiBcImxpbmtcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgbWFwIGNvbXBsZXggb2JqZWN0cyBhdCB0aGUgbGVhdmVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXBMZWF2ZXModmFsOiBMaXRlcmFsLCBmdW5jOiAodDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDogRGF0YU9iamVjdCA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHJlc3VsdFtrZXldID0gbWFwTGVhdmVzKHZhbHVlLCBmdW5jKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBMaXRlcmFsW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbCkgcmVzdWx0LnB1c2gobWFwTGVhdmVzKHZhbHVlLCBmdW5jKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiB0d28gYXJiaXRyYXJ5IGxpdGVyYWxzIGFyZSBlcXVhbC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZXF1YWxzKGZpcnN0OiBMaXRlcmFsIHwgdW5kZWZpbmVkLCBzZWNvbmQ6IExpdGVyYWwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoZmlyc3QsIHNlY29uZCkgPT0gMDtcbiAgICB9XG5cbiAgICAvKiogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdmFsdWVzLiBQcm9kdWNlcyBhIHRvdGFsIG9yZGVyaW5nIG92ZXIgQU5ZIHBvc3NpYmxlIGRhdGFjb3JlIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKFxuICAgICAgICB2YWwxOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICB2YWwyOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICBsaW5rTm9ybWFsaXplcj86IChsaW5rOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICk6IG51bWJlciB7XG4gICAgICAgIC8vIFJlZmVyZW5jZSBlcXVhbGl0eSAtIHNob3J0IGNpcmN1aXQuXG4gICAgICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gMDtcblxuICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkL251bGxzIGZpcnN0LlxuICAgICAgICBpZiAodmFsMSA9PT0gdW5kZWZpbmVkKSB2YWwxID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkgdmFsMiA9IG51bGw7XG4gICAgICAgIGlmICh2YWwxID09PSBudWxsICYmIHZhbDIgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmICh2YWwxID09PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgaWYgKHZhbDIgPT09IG51bGwpIHJldHVybiAxO1xuXG4gICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi5cbiAgICAgICAgbGV0IHdyYXAxID0gd3JhcFZhbHVlKHZhbDEpO1xuICAgICAgICBsZXQgd3JhcDIgPSB3cmFwVmFsdWUodmFsMik7XG5cbiAgICAgICAgaWYgKHdyYXAxID09PSB1bmRlZmluZWQgJiYgd3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHdyYXAxID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAod3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBvbiBkaWZmZXJlbnQgdHlwZXMgb3Igb24gcmVmZXJlbmNlIGVxdWFsaXR5LlxuICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKSByZXR1cm4gd3JhcDEudHlwZS5sb2NhbGVDb21wYXJlKHdyYXAyLnR5cGUpO1xuICAgICAgICBpZiAod3JhcDEudmFsdWUgPT09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXAxLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUubG9jYWxlQ29tcGFyZSh3cmFwMi52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBudW1iZXIpKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB3cmFwMS52YWx1ZSA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsxID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWUgYXMgTGluaztcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplID0gbGlua05vcm1hbGl6ZXIgPz8gKCh4OiBzdHJpbmcpID0+IHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY29tcGFyZSBieSBmaWxlIG5hbWUgb3IgZGlzcGxheSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rIGVxdWFsaXR5LiBDb21wYXJlIGJ5IHBhdGguXG4gICAgICAgICAgICAgICAgbGV0IHBhdGhDb21wYXJlID0gbm9ybWFsaXplKGxpbmsxLnBhdGgpLmxvY2FsZUNvbXBhcmUobm9ybWFsaXplKGxpbmsyLnBhdGgpKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aENvbXBhcmUgIT0gMCkgcmV0dXJuIHBhdGhDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHR5cGUuXG4gICAgICAgICAgICAgICAgbGV0IHR5cGVDb21wYXJlID0gbGluazEudHlwZS5sb2NhbGVDb21wYXJlKGxpbmsyLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZSAhPSAwKSByZXR1cm4gdHlwZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgc3VicGF0aCBleGlzdGVuY2UuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiBsaW5rMi5zdWJwYXRoKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKSByZXR1cm4gMDtcblxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIGJvdGggaGF2ZSBhIHN1YnBhdGgsIGNvbXBhcmUgYnkgc3VicGF0aC5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGxpbmsxLnN1YnBhdGggPz8gXCJcIikubG9jYWxlQ29tcGFyZShsaW5rMi5zdWJwYXRoID8/IFwiXCIpO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBsZXQgZjEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZSBhcyBhbnlbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wID0gY29tcGFyZShmMVtpbmRleF0sIGYyW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpO1xuICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTtcbiAgICAgICAgICAgICAgICBrMS5zb3J0KCk7XG4gICAgICAgICAgICAgICAgazIuc29ydCgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGtleUNvbXBhcmUgPSBjb21wYXJlKGsxLCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKGtleUNvbXBhcmUgIT0gMCkgcmV0dXJuIGtleUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgazEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKG8xW2tleV0sIG8yW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gY29tcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YWNvcmUgdHlwZSBmb3IgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsOiBhbnkpOiBMaXRlcmFsVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB3cmFwVmFsdWUodmFsKT8udHlwZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBcInRydXRoeVwiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShmaWVsZDogTGl0ZXJhbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcyhcInNlY29uZHNcIikgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod3JhcHBlZC52YWx1ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERlZXAgY29weSBhIGZpZWxkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUIGV4dGVuZHMgTGl0ZXJhbD4oZmllbGQ6IFQpOiBUIHtcbiAgICAgICAgaWYgKGZpZWxkID09PSBudWxsIHx8IGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBmaWVsZDtcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAoW10gYXMgTGl0ZXJhbFtdKS5jb25jYXQoZmllbGQubWFwKCh2KSA9PiBkZWVwQ29weSh2KSkpIGFzIFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QoZmllbGQpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkKSkgcmVzdWx0W2tleV0gPSBkZWVwQ29weSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWw6IGFueSk6IHZhbCBpcyBEYXRlVGltZSB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlVGltZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGR1cmF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0R1cmF0aW9uKHZhbDogYW55KTogdmFsIGlzIER1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiB2YWwgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsOiBhbnkpOiB2YWwgaXMgYW55W10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbDogYW55KTogdmFsIGlzIGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xpbmsodmFsOiBhbnkpOiB2YWwgaXMgTGluayB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rO1xuICAgIH1cblxuICAgIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCAoYW5kIG5vdCBhbnkgb3RoZXIgZGF0YWNvcmUtcmVjb2duaXplZCBvYmplY3QtbGlrZSB0eXBlKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsOiBhbnkpOiB2YWwgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhaXNBcnJheSh2YWwpICYmXG4gICAgICAgICAgICAhaXNEdXJhdGlvbih2YWwpICYmXG4gICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0xpbmsodmFsKSAmJlxuICAgICAgICAgICAgIWlzTnVsbCh2YWwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG59XG5cbi8qKiBBIGdyb3VwaW5nIG9uIGEgdHlwZSB3aGljaCBzdXBwb3J0cyByZWN1cnNpdmVseS1uZXN0ZWQgZ3JvdXBzLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cEVsZW1lbnQ8VD4gPSB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfTtcbi8qKlxuICogQSBncm91cGluZywgd2hpY2ggY2FuIGJlIGVpdGhlcjpcbiAqIC0gYW4gYXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSBgVGAsIG9yXG4gKiAtIGFuIGFycmF5IG9mIHtAbGluayBHcm91cGVsZW1lbnR9c1xuICpcbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgR3JvdXBpbmc8VD4gPSBUW10gfCBHcm91cEVsZW1lbnQ8VD5bXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIEdyb3VwaW5ncyB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGdyb3VwIGVudHJ5IGlzIGEgc3RhbmRhbG9uZSB2YWx1ZSwgb3IgYSBncm91cGluZyBvZiBzdWItZW50cmllcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50R3JvdXA8VD4oZW50cnk6IGFueSk6IGVudHJ5IGlzIEdyb3VwRWxlbWVudDxUPiB7XG4gICAgICAgIHJldHVybiBMaXRlcmFscy5pc09iamVjdChlbnRyeSkgJiYgT2JqZWN0LmtleXMoZW50cnkpLmxlbmd0aCA9PSAyICYmIFwia2V5XCIgaW4gZW50cnkgJiYgXCJyb3dzXCIgaW4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgZ3JvdXBpbmcgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBpbmc8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+W10ge1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVudHJ5KSBpZiAoIWlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgbGVhZiBhbmQgaGFzIG5vIHN1Ymdyb3VwaW5ncy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNMZWFmPFQ+KGVudHJ5OiBHcm91cGluZzxUPik6IGVudHJ5IGlzIFRbXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgcmVjdXJzaXZlIGdyb3VwaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihlbGVtZW50czogR3JvdXBpbmc8VD4gfCBHcm91cEVsZW1lbnQ8VD4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcm91cGluZyhlbGVtZW50cykpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgc3ViZ3JvdXAgb2YgZWxlbWVudHMpIHJlc3VsdCArPSBjb3VudChzdWJncm91cC5yb3dzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IHNsaWNlIGEgZ3JvdXBpbmcsIHByZXNlcnZpbmcgdGhlIGdyb3VwIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGVsZW1lbnRzIFtzdGFydC4uLmVuZCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBHcm91cGluZzxUPiB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGlzTGVhZihlbGVtZW50cykpIHJldHVybiBlbGVtZW50cy5zbGljZShzdGFydCwgZW5kKTtcblxuICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBncm91cCB0aGF0IGNvbnRhaW5zIGluZGV4IGBzdGFydGAuXG4gICAgICAgIGxldCBpbmRleCA9IDAsXG4gICAgICAgICAgICBzZWVuID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gKyBjb3VudChlbGVtZW50c1tpbmRleF0pIDw9IHN0YXJ0KSB7XG4gICAgICAgICAgICBzZWVuICs9IGNvdW50KGVsZW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RhcnQgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgZ3JvdXBpbmdzLlxuICAgICAgICBpZiAoaW5kZXggPj0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfVtdID0gW107XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuIDwgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU2l6ZSA9IGNvdW50KGdyb3VwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnQgPSBNYXRoLm1heChzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICBjb25zdCBncm91cEVuZCA9IE1hdGgubWluKGdyb3VwU2l6ZSArIHNlZW4sIGVuZCk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGdyb3VwLmtleSxcbiAgICAgICAgICAgICAgICByb3dzOiBzbGljZShncm91cC5yb3dzLCBncm91cFN0YXJ0IC0gc2VlbiwgZ3JvdXBFbmQgLSBzZWVuKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWVuICs9IGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbi8qKlxuICogIEZ1bmN0aW9uYWwgcmV0dXJuIHR5cGUgZm9yIGVycm9yIGhhbmRsaW5nLlxuICogQGhpZGRlblxuICogKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogdHJ1ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwPFU+KGY6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0TWFwPFU+KGY6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIFJlc3VsdDxULCBVPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmltYXA8VDIsIEUyPihzdWNjOiAoYTogVCkgPT4gVDIsIF9mYWlsOiAoYjogRSkgPT4gRTIpOiBSZXN1bHQ8VDIsIEUyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChzdWNjKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZShfdmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNhc3Q8VT4oKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2VUaHJvdyhfbWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG4vKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGVycm9yOiBFKSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oX2Y6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIEZhaWx1cmU8VSwgRT47XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oX2Y6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGYodGhpcy5lcnJvcikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KF9zdWNjOiAoYTogVCkgPT4gVDIsIGZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXJyKGZhaWwpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKHZhbHVlOiBUKTogVCB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KG1lc3NhZ2U/OiAoZTogRSkgPT4gc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSh0aGlzLmVycm9yKSk7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiXCIgKyB0aGlzLmVycm9yKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBtb25hZGljIHJlc3VsdCB0eXBlIHdoaWNoIHN0b3JlcyBlaXRoZXIgXCJzdWNjZXNzXCIgb3IgXCJmYWlsdXJlXCIuIEFuIGFsdGVybmF0aXZlIGhhbmRsaW5nIGV4Y2VwdGlvbmFsIGJlaGF2aW9yXG4gKiBieSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBTdWNjZXNzPFQsIEU+IHwgRmFpbHVyZTxULCBFPjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBNb25hZGljICdSZXN1bHQnIHR5cGUgd2hpY2ggZW5jYXBzdWxhdGVzIHdoZXRoZXIgYSBwcm9jZWR1cmUgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYXMgd2VsbCBhcyBpdCdzIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgc3VjY2VzcyByZXN1bHQgd3JhcHBpbmcgdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGZhaWx1cmUgdmFsdWUgd3JhcHBpbmcgdGhlIGdpdmVuIGVycm9yLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlPFQsIEU+KGVycm9yOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGVycm9yKTtcbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZsYXRNYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IFJlc3VsdDxPLCBFPlxuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpZiAoc2Vjb25kLnN1Y2Nlc3NmdWwpIHJldHVybiBmKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFpbHVyZShzZWNvbmQuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoZmlyc3QuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEpvaW4gdHdvIHJlc3VsdHMgd2l0aCBhIGJpLWZ1bmN0aW9uIGFuZCByZXR1cm4gYSBuZXcgcmVzdWx0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IE9cbiAgICApOiBSZXN1bHQ8TywgRT4ge1xuICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpO1xuICAgIH1cblxuICAgIC8qKiBNYXAgYSBmYWlsYWJsZSBmdW5jdGlvbiBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCwgcmV0dXJuaW5nIGVhcmx5IG9uIGZhaWx1cmUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcEFsbDxULCBPLCBFPihpbnB1dDogSXRlcmFibGU8VD4sIGZ1bmM6IChpbnB1dDogVCkgPT4gUmVzdWx0PE8sIEU+KTogUmVzdWx0PE9bXSwgRT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IE9bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGZ1bmMoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW91dHB1dC5zdWNjZXNzZnVsKSByZXR1cm4gb3V0cHV0LmNhc3QoKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gob3V0cHV0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKiBDYXRjaCBhbnkgZXJyb3JzIGluIGEgY2FsbCwgcmV0dXJuaW5nIGEgcmVzdWx0IGluc3RlYWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRyeWluZzxUPihjYWxsOiAoKSA9PiBUKTogUmVzdWx0PFQsIEVycm9yPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY2FsbCgpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udmVydCBhIHByb21pc2Ugd2hpY2ggbWF5IHRocm93IGludG8gYSBwcm9taXNlIHdoaWNoIHJldHVybnMgYSByZXN1bHQgb2YgdGhlIHN1Y2Nlc3NmdWwgdmFsdWUgb3IgYW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jPFQ+KHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFJlc3VsdDxULCBFcnJvcj4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyhhd2FpdCBwcm9taXNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG5leHBvcnQgdHlwZSBFdmVyeXRoaW5nID0geyB0eXBlOiBcImV2ZXJ5dGhpbmdcIiB9O1xuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuLyoqIFNldCB3aGljaCBtYXRjaGVzIHRoZSBuZWdhdGlvbiBvZiBhIHNldC4gKi9cbmV4cG9ydCB0eXBlIE5lZ2F0ZWQ8VD4gPSB7IHR5cGU6IFwibmVnYXRlZFwiOyB2YWx1ZTogU2V0PFQ+IH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgYW4gYWN0dWFsIHNldCBvZiB2YWx1ZXMuICAqL1xuZXhwb3J0IHR5cGUgQXRvbTxUPiA9IHsgdHlwZTogXCJhdG9tXCI7IHZhbHVlOiBTZXQ8VD4gfTtcblxuLyoqIEFic3RyYWN0IGZpbHRlciB0eXBlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgZmlsdGVyIG9wZXJhdGlvbnMgdG8gdGhlIGRhdGEgc3RvcmUuICovXG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBFdmVyeXRoaW5nIHwgTm90aGluZyB8IEF0b208VD4gfCBOZWdhdGVkPFQ+O1xuXG4vKiogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVmZmljaWVudGx5IG9wZXJhdGluZyBvbiBmaWx0ZXJzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJzIHtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IEVWRVJZVEhJTkc6IEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4gICAgLyoqIFN0YXRpYyBmaWx0ZXIgd2hpY2ggbWF0Y2hlcyBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuICAgIC8qKiBFbXB0eSBzZXQgY29uc3RhbnQuICovXG4gICAgZXhwb3J0IGNvbnN0IEVNUFRZX1NFVDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhdG9tPFQ+KHNldDogU2V0PFQ+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHNldC5zaXplID09IDApIHJldHVybiBOT1RISU5HO1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYXRvbVwiLCB2YWx1ZTogc2V0IH07XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIGZpbHRlciB0aGF0IG1hdGNoZXMgZXZlcnl0aGluZyBvciBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUPih2YWx1ZTogYm9vbGVhbik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIEVWRVJZVEhJTkc7XG4gICAgICAgIGVsc2UgcmV0dXJuIE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBhdG9tIGZpbHRlciB3aGljaCBpcyBOT1RISU5HIGlmIHNldCBpcyB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlQXRvbTxUPihzZXQ6IFNldDxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBzZXQgIT09IHVuZGVmaW5lZCA/IGF0b20oc2V0KSA6IE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5lZ2F0ZWQgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWQ8VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIEVWRVJZVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJuZWdhdGVkXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogUHJvZHVjZXMgdGhlIG5lZ2F0aW9uIG9mIGEgZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VD4oZmlsdGVyOiBGaWx0ZXI8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBOT1RISU5HO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZWQoZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0b20oZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGZpbHRlciBpcyBkZWZpbml0aXZlbHkgY3VycmVudGx5IGVtcHR5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlLnNpemUgPT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBhIHRvcC1sZXZlbCBmaWx0ZXIgd2l0aCB0aGUgc2V0IG9mIGFsbCBhdmFpbGFibGUgb2JqZWN0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPiwgZXZlcnl0aGluZzogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZXJ5dGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlcnl0aGluZztcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldEludGVyc2VjdE5lZ2F0aW9uKGV2ZXJ5dGhpbmcsIGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGFuIGl0ZXJhYmxlIG9mIGZpbHRlcnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdDxUPihlbGVtZW50czogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5SW50ZXJzZWN0KGVsZW1lbnRzLCAoeCkgPT4geCk7XG4gICAgfVxuXG4gICAgLyoqIEludGVyc2VjdCBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgaW50ZXJzZWN0aW9uIHdvdWxkIHByb2R1Y2UgTk9USElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUludGVyc2VjdDxJLCBUPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgICAgICAvLyBFVkVSWVRISU5HIGZpbHRlcnMgYXJlIHJlZHVuZGFudCBpbiBBTkRzLCBza2lwIHRoZW0uXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugc3RhcnQgd2l0aCBzb21ldGhpbmcgb2YgdGhlIGZvcm0gYSAmJiBiICYmICFjICYmICFkLlxuICAgICAgICAvLyBJZiBubyB0ZXJtcywgdGhlbiBldmVyeXRoaW5nIHdhcyBFVkVSWVRISU5HIHNvIHJldHVybiB0aGF0LlxuICAgICAgICAvLyBJZiBvbmx5IGF0b21zLCBqdXN0IGludGVyc2VjdCB0aGVtIChhICYmIGIpLlxuICAgICAgICAvLyBJZiBvbmx5IG5lZ2F0aW9ucywgdGhlbiByZXdyaXRlICFjICYmICFkID0+ICEoYyB8fCBkKSBhbmQgcmV0dXJuIG5lZ2F0ZWQoYyB8fCBkKS5cbiAgICAgICAgLy8gSWYgYm90aCwgY29tcHV0ZSB4ID0gKGEgJiYgYikgYW5kIHkgPSAoYyB8fCBkKSwgYW5kIHRoZW4gY29tcHV0ZSB4ICYmICF5LlxuXG4gICAgICAgIGlmIChhdG9tcy5sZW5ndGggPT0gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdG9tcy5sZW5ndGggPiAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF0b20oc2V0SW50ZXJzZWN0KGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRVbmlvbihuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChhdG9tcyksIHNldFVuaW9uKG5lZ2F0aW9ucykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycywgcHJvZHVjaW5nIGEgc2luZ2xlIHJlc3VsdCBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuaW9uPFQ+KGZpbHRlcnM6IEl0ZXJhYmxlPEZpbHRlcjxUPj4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eVVuaW9uKGZpbHRlcnMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eVVuaW9uPEksIFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxJPiwgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBGaWx0ZXI8VD4gfCB1bmRlZmluZWQpOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eUZhaWxhYmxlVW5pb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUZhaWxhYmxlVW5pb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyB3aWxsIHByb2R1Y2UgZXZlcnl0aGluZyBhbHdheXMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRVZFUllUSElORyk7XG4gICAgICAgICAgICAvLyBFbXB0eSBmaWx0ZXJzIGFyZSByZWR1bmRhbnQuXG4gICAgICAgICAgICBpZiAoZW1wdHkoZmlsdGVyKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFdpbGwgb25seSBiZSBsZWZ0IHdpdGggYXRvbXMgb3IgbmVnYXRpb25zLlxuICAgICAgICAgICAgaWYgKGZpbHRlci50eXBlID09IFwiYXRvbVwiKSBhdG9tcy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PSBcIm5lZ2F0ZWRcIikgbmVnYXRpb25zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9yIGlzIGEgYml0IGhhcmRlciB0aGFuIEFORCBzaW5jZSB5b3UgY2FuIGVuZCB1cCB3aXRoIHNjZW5hcmlvcyBsaWtlIGEgfHwgIWIsIHdoaWNoIGFyZVxuICAgICAgICAvLyBub3QgY29tcHV0YWJsZSBkaXJlY3RseS4gSG93ZXZlciwgd2UgY2FuIGRvIGJvb2xlYW4gbG9naWMgdG8gYWx3YXlzIHByb2R1Y2UgYSBzaW5nbGVcbiAgICAgICAgLy8gc2V0LlxuICAgICAgICAvLyBJZiBub3RoaW5nID0+IG5vdGhpbmcsIG5vIG5vbi1lbXB0eSBmaWx0ZXJzLlxuICAgICAgICAvLyBJZiBhdG9tcyBidXQgbm8gbmVnYXRpb25zIChhIHx8IGIgfHwgYykgPT4gY29tcHV0ZSB1bmlvbi5cbiAgICAgICAgLy8gSWYgbmVnYXRpb25zIGJ1dCBubyBhdG9tcyAoIWEgfHwgIWIgfHwgIWMpID0+IHJld3JpdGUgYXMgIShhICYmIGIgJiYgYykuXG4gICAgICAgIC8vIElmIGJvdGg6IChhIHx8IGIgfHwgIWMgfHwgIWQpID0+IGNvbWJpbmUgZWFjaCBwYXJ0IGludG8gKGEgfHwgYikgfHwgKCFjIHx8ICFkKSA9PiAoYSB8fCBiKSB8fCAhKGMgJiYgZCkgPT4gZSB8fCAhZiA9PiAhKCFlICYmIGYpIHdoaWNoXG4gICAgICAgIC8vIGNhbiBiZSBjb21wdXRlZCB1c2luZyBpbnRlcnNlY3Rpb24gbG9naWMuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKE5PVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldFVuaW9uKGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5uZWdhdGVkKHNldEludGVyc2VjdChuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRJbnRlcnNlY3ROZWdhdGlvbihzZXRJbnRlcnNlY3QobmVnYXRpb25zKSwgc2V0VW5pb24oYXRvbXMpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVmZmljaWVudGx5IGNvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3Q8VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gU29ydCBieSBzaXplIGFuZCBjb21iaW5lIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNldCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgc29ydGVkID0gKFtdIGFzIFNldDxUPltdKS5jb25jYXQoc2V0cykuc29ydCgoYSwgYikgPT4gYS5zaXplIC0gYi5zaXplKTtcblxuICAgICAgICB3aGlsZSAoc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBzb3J0ZWQucG9wKCkhO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNvcnRlZFswXSkge1xuICAgICAgICAgICAgICAgIGlmIChsYXJnZXN0LmhhcyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGVkWzBdID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFswXTtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgdW5pb24gb2Ygc2V0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0VW5pb248VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSB1c2VmdWwgb3B0aW1pemF0aW9uIGZvciBzZXQgdW5pb25zLCBzbyBqdXN0IGFkZCB0aGVtIGFsbCBJIGd1ZXNzLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2V0IG9mIHNldHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSBhdG9tICYmICFuZWdhdGVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3ROZWdhdGlvbjxUPihhdG9tOiBTZXQ8VD4sIG5lZ2F0ZWQ6IFNldDxUPik6IFNldDxUPiB7XG4gICAgICAgIGlmIChhdG9tLnNpemUgPiBuZWdhdGVkLnNpemUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHksIHNpbmNlIEknbSBub3Qgc3VyZSBpdCdzIGFueSBmYXN0ZXIgd2l0aCB0aGUgY29weS5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoYXRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIG5lZ2F0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IC8qIGF0b20uc2l6ZSA8IG5lZ2F0aW9uLnNpemUgKi8gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGF0b20pIHtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRlZC5oYXMoZWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuXG4vKiogQ29tcGFyaXNvbiBvcGVyYXRvcnMgd2hpY2ggeWllbGQgdHJ1ZS9mYWxzZS4gKi9cbmV4cG9ydCB0eXBlIENvbXBhcmVPcCA9IFwiPlwiIHwgXCI+PVwiIHwgXCI8PVwiIHwgXCI8XCIgfCBcIj1cIiB8IFwiIT1cIjtcbi8qKiBBcml0aG1ldGljIG9wZXJhdG9ycyB3aGljaCB5aWVsZCBudW1iZXJzIGFuZCBvdGhlciB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBBcml0aG1ldGljT3AgPSBcIitcIiB8IFwiLVwiIHwgXCIqXCIgfCBcIi9cIiB8IFwiJVwiIHwgXCImXCIgfCBcInxcIjtcbi8qKiBJbmRleCBhIHZhbHVlIGludG8gYW5vdGhlciB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIExvZ2ljYWxPcCA9IFwiaW5kZXhcIjtcbi8qKiBBbGwgdmFsaWQgYmluYXJ5IG9wZXJhdG9ycy4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wID0gQ29tcGFyZU9wIHwgQXJpdGhtZXRpY09wIHwgTG9naWNhbE9wO1xuXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uID1cbiAgICB8IExpdGVyYWxFeHByZXNzaW9uXG4gICAgfCBWYXJpYWJsZUV4cHJlc3Npb25cbiAgICB8IExpc3RFeHByZXNzaW9uXG4gICAgfCBPYmplY3RFeHByZXNzaW9uXG4gICAgfCBCaW5hcnlPcEV4cHJlc3Npb25cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgTGFtYmRhRXhwcmVzc2lvblxuICAgIHwgTmVnYXRlZEV4cHJlc3Npb247XG5cbi8qKiBMaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIHNvbWUgZmllbGQgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBMaXRlcmFsO1xufVxuXG4vKiogQSB2YXJpYWJsZSBmaWVsZCBmb3IgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcInZhcmlhYmxlXCI7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogQSBsaXN0IGxpdGVyYWwsIHdoaWNoIGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBmaWVsZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImxpc3RcIjtcbiAgICB2YWx1ZXM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIG9iamVjdCBsaXRlcmFsLCB3aGljaCBpcyBhIG1hcHBpbmcgb2YgbmFtZSB0byBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJvYmplY3RcIjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+O1xufVxuXG4vKiogQSBiaW5hcnkgb3BlcmF0b3IgZXhwcmVzc2lvbiB3aGljaCBjb21iaW5lcyB0d28gc3Vibm9kZXMgc29tZWhvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImJpbmFyeW9wXCI7XG4gICAgbGVmdDogRXhwcmVzc2lvbjtcbiAgICByaWdodDogRXhwcmVzc2lvbjtcbiAgICBvcDogQmluYXJ5T3A7XG59XG5cbi8qKiBBIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggY2FsbHMgYSBmdW5jdGlvbiBvbiAwIG9yIG1vcmUgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiZnVuY3Rpb25cIjtcbiAgICAvKiogRWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb3IgYSBGdW5jdGlvbiBvYmplY3QuICovXG4gICAgZnVuYzogRXhwcmVzc2lvbjtcbiAgICAvKiogVGhlIGxpc3Qgb2YgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICovXG4gICAgYXJndW1lbnRzOiBFeHByZXNzaW9uW107XG59XG5cbi8qKiBBbiBpbmxpbmUgZnVuY3Rpb24gYWNjZXB0aW5nIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBhbmQgcHJvZHVjaW5nIGEgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGFtYmRhXCI7XG4gICAgLyoqIEFuIG9yZGVyZWQgbGlzdCBvZiBuYW1lZCBhcmd1bWVudHMuICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmdbXTtcbiAgICAvKiogVGhlIGZpZWxkIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBhcmd1bWVudHMgaW4gY29udGV4dC4gKi9cbiAgICB2YWx1ZTogRXhwcmVzc2lvbjtcbn1cblxuLyoqIEFuIGV4cHJlc3Npb24gd2hpY2ggbmVnYXRlcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJuZWdhdGVkXCI7XG5cbiAgICAvKiogVGhlIGNoaWxkIGZpZWxkIHRvIG5lZ2F0ZS4gKi9cbiAgICBjaGlsZDogRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBFeHByZXNzaW9ucyB7XG4gICAgLyoqIFRoZSBpbXBsaWNpdCBmaWVsZCByZWZlcmVuY2luZyB0aGUgY3VycmVudCBmaWVsZC4gKi9cbiAgICBleHBvcnQgY29uc3QgUk9XOiBzdHJpbmcgPSBcIiRyb3dcIjtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZShuYW1lOiBzdHJpbmcpOiBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQ6IEV4cHJlc3Npb24sIG9wOiBCaW5hcnlPcCwgcmlnaHQ6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0LCBvcCwgcmlnaHQgfSBhcyBCaW5hcnlPcEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4KG9iajogRXhwcmVzc2lvbiwgaW5kZXg6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0OiBvYmosIHJpZ2h0OiBpbmRleCwgb3A6IFwiaW5kZXhcIiB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qtbm90YXRpb24tZm9ybWF0IGludG8gYSB2YXJpYWJsZSB3aGljaCBpbmRleGVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmRleFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IEV4cHJlc3Npb24ge1xuICAgICAgICBsZXQgcGFydHMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiA9IEV4cHJlc3Npb25zLnZhcmlhYmxlKHBhcnRzWzBdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gRXhwcmVzc2lvbnMuaW5kZXgocmVzdWx0LCBFeHByZXNzaW9ucy5saXRlcmFsKHBhcnRzW2luZGV4XSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGFtYmRhKGFyZ3M6IHN0cmluZ1tdLCB2YWx1ZTogRXhwcmVzc2lvbik6IExhbWJkYUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGFyZ3MsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZ1bmMoZnVuYzogRXhwcmVzc2lvbiwgYXJnczogRXhwcmVzc2lvbltdKTogRnVuY3Rpb25FeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBmdW5jLCBhcmd1bWVudHM6IGFyZ3MgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGlzdCh2YWx1ZXM6IEV4cHJlc3Npb25bXSk6IExpc3RFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvYmplY3QodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uPik6IE9iamVjdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlKGNoaWxkOiBFeHByZXNzaW9uKTogTmVnYXRlZEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgY2hpbGQgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNDb21wYXJlT3Aob3A6IEJpbmFyeU9wKTogb3AgaXMgQ29tcGFyZU9wIHtcbiAgICAgICAgcmV0dXJuIG9wID09IFwiPD1cIiB8fCBvcCA9PSBcIjxcIiB8fCBvcCA9PSBcIj5cIiB8fCBvcCA9PSBcIj49XCIgfHwgb3AgPT0gXCIhPVwiIHx8IG9wID09IFwiPVwiO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGEgc2V0IG9mIGFsbCB1bmJvdW5kIHZhcmlhYmxlcyAoaS5lLiwgdmFyaWFibGVzIG5vdCBwcm92aWRlZCBieSBgcm93YCwgbGFtYmRhcywgb3Igc2ltaWxhci4pICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuYm91bmRWYXJpYWJsZXMoZXhwcjogRXhwcmVzc2lvbiwgYm91bmQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbUk9XXSkpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgYHJvd1tcIi4uLi5cIl1gLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXhwci5vcCA9PT0gXCJpbmRleFwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC50eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLmxlZnQubmFtZSA9PSBST1cgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5yaWdodC50eXBlID09IFwibGl0ZXJhbFwiICYmXG4gICAgICAgICAgICAgICAgICAgIExpdGVyYWxzLmlzU3RyaW5nKGV4cHIucmlnaHQudmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZC5oYXMoZXhwci5yaWdodC52YWx1ZSkpIHJldHVybiBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIucmlnaHQudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBjaGVjayBsZWZ0IGFuZCByaWdodC5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5zZXRVbmlvbihbdW5ib3VuZFZhcmlhYmxlcyhleHByLmxlZnQsIGJvdW5kKSwgdW5ib3VuZFZhcmlhYmxlcyhleHByLnJpZ2h0LCBib3VuZCldKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIuYXJndW1lbnRzLm1hcCgoYSkgPT4gdW5ib3VuZFZhcmlhYmxlcyhhLCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZCA9IGJvdW5kID8/IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBleHByLmFyZ3VtZW50cykgbmV3Qm91bmQuYWRkKGFyZyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLnZhbHVlLCBuZXdCb3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIudmFsdWVzLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuYm91bmRWYXJpYWJsZXMoZXhwci5jaGlsZCwgYm91bmQpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKE9iamVjdC52YWx1ZXMoZXhwci52YWx1ZXMpLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJpYWJsZVwiOlxuICAgICAgICAgICAgICAgIGlmIChib3VuZCAmJiBib3VuZC5oYXMoZXhwci5uYW1lKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBuZXcgU2V0KFtleHByLm5hbWVdKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW5kZXIgYW4gZXhwcmVzc2lvbiBhcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vcCA9PT0gXCJpbmRleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfVske3RvU3RyaW5nKGV4cHIucmlnaHQpfV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfSAke2V4cHIub3B9ICR7dG9TdHJpbmcoZXhwci5yaWdodCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmZ1bmMpfSgke2V4cHIuYXJndW1lbnRzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfSlgO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZXhwci5hcmd1bWVudHMuam9pbihcIiwgXCIpfSkgPT4gJHt0b1N0cmluZyhleHByLnZhbHVlKX1gO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske2V4cHIudmFsdWVzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfV1gO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCEke3RvU3RyaW5nKGV4cHIuY2hpbGQpfWA7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyhleHByLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt0b1N0cmluZyh2KX1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfX1gO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubmFtZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShleHByLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHt3cmFwcGVkLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaXRlcmFscy50b1N0cmluZyh3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgTlVMTCA9IEV4cHJlc3Npb25zLmxpdGVyYWwobnVsbCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGNvcmUgcHJlYWN0IC8gcmVuZGVyaW5nIHV0aWxpdGllcyBmb3IgYWxsIHZpZXcgdHlwZXMuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3VycmVudExvY2FsZSwgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlRGltZW5zaW9ucywgaXNJbWFnZUVtYmVkIH0gZnJvbSBcInV0aWxzL21lZGlhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUVycm9yQm91bmRhcnkgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBQcm9wc1dpdGhDaGlsZHJlbiwgbWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCJhcGkvdWkvZW1iZWRcIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Q29tcG9uZW50Pih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBBUFBfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8QXBwPih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBEQVRBQ09SRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxEYXRhY29yZT4odW5kZWZpbmVkISk7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8U2V0dGluZ3M+KHVuZGVmaW5lZCEpO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRfRklMRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxzdHJpbmc+KFwiXCIpO1xuXG4vKiogTW9yZSBjb21wYWN0IHByb3ZpZGVyIGZvciBhbGwgb2YgdGhlIGRhdGFjb3JlIHJlYWN0IGNvbnRleHRzLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERhdGFjb3JlQ29udGV4dFByb3ZpZGVyKHtcbiAgICBjaGlsZHJlbixcbiAgICBhcHAsXG4gICAgY29tcG9uZW50LFxuICAgIGRhdGFjb3JlLFxuICAgIHNldHRpbmdzLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48e1xuICAgIGFwcDogQXBwO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50O1xuICAgIGRhdGFjb3JlOiBEYXRhY29yZTtcbiAgICBzZXR0aW5nczogU2V0dGluZ3M7XG59Pikge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50fT5cbiAgICAgICAgICAgIDxBUFBfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17YXBwfT5cbiAgICAgICAgICAgICAgICA8REFUQUNPUkVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17ZGF0YWNvcmV9PlxuICAgICAgICAgICAgICAgICAgICA8U0VUVElOR1NfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17c2V0dGluZ3N9PntjaGlsZHJlbn08L1NFVFRJTkdTX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9EQVRBQ09SRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgPC9DT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpbmsoeyBsaW5rLCBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGggfTogeyBsaW5rOiBMaW5rIHwgc3RyaW5nOyBzb3VyY2VQYXRoPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB3b3Jrc3BhY2UgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKT8ud29ya3NwYWNlO1xuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBjdXJyZW50UGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IHBhcnNlZCA9IHVzZU1lbW8oKCkgPT4gKExpdGVyYWxzLmlzTGluayhsaW5rKSA/IGxpbmsgOiBMaW5rLmluZmVyKGxpbmspKSwgW2xpbmtdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXd0YWIgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgICAgIHdvcmtzcGFjZT8ub3BlbkxpbmtUZXh0KHBhcnNlZC5vYnNpZGlhbkxpbmsoKSwgc291cmNlUGF0aCwgbmV3dGFiKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3BhcnNlZCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGFcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhcnNlZC5kaXNwbGF5T3JEZWZhdWx0KCl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW50ZXJuYWwtbGlua1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIGRhdGEtaHJlZj17cGFyc2VkLm9ic2lkaWFuTGluaygpfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cGFyc2VkLmRpc3BsYXlPckRlZmF1bHQoKX1cbiAgICAgICAgPC9hPlxuICAgICk7XG59XG5cbi8qKlxuICogQ29waWVzIGhvdyBhbiBPYnNpZGlhbiBsaW5rIGlzIHJlbmRlcmVkIGJ1dCBpcyBhYm91dCBhbiBvcmRlciBvZiBtYWduaXR1ZGUgZmFzdGVyIHRvIHJlbmRlciB0aGFuIHZpYSBtYXJrZG93biByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3QgT2JzaWRpYW5MaW5rID0gbWVtbyhSYXdMaW5rKTtcblxuLyoqQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd01hcmtkb3duKHtcbiAgICBjb250ZW50LFxuICAgIHNvdXJjZVBhdGg6IG1heWJlU291cmNlUGF0aCxcbiAgICBpbmxpbmUgPSB0cnVlLFxuICAgIHN0eWxlLFxuICAgIGNscyxcbiAgICBvbkNsaWNrLFxufToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgIGNscz86IHN0cmluZztcbiAgICBvbkNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBhbnk7XG59KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcblxuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBtYXliZVNvdXJjZVBhdGggPz8gZGVmYXVsdFBhdGg7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgY29udGFpbmVyLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBjb250ZW50LCBjb250YWluZXIuY3VycmVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmN1cnJlbnQgfHwgIWlubGluZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBVbndyYXAgYW55IGNyZWF0ZWQgcGFyYWdyYXBoIGVsZW1lbnRzIGlmIHdlIGFyZSBpbmxpbmUuXG4gICAgICAgICAgICBsZXQgcGFyYWdyYXBoID0gY29udGFpbmVyLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInBcIik7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcGFyYWdyYXBoLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoLnJlcGxhY2VXaXRoKC4uLkFycmF5LmZyb20oY2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGggPSBjb250YWluZXIuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwicFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGF2ZSBlbWJlZHMgYWN0dWFsbHkgbG9hZCBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgYXMgcGxhaW4gdGV4dC5cbiAgICAgICAgICAgIGxldCBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIHdoaWxlIChlbWJlZCkge1xuICAgICAgICAgICAgICAgIGVtYmVkLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgICAgICA8QVBQX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e2FwcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RW1iZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rPXtMaW5rLnBhcnNlSW5uZXIoZW1iZWQuZ2V0QXR0cmlidXRlKFwic3JjXCIpID8/IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj4sXG4gICAgICAgICAgICAgICAgICAgIGVtYmVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbWJlZC5hZGRDbGFzcyhcImlzLWxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgICBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW2NvbnRlbnQsIHNvdXJjZVBhdGgsIGlubGluZSwgY29udGFpbmVyLmN1cnJlbnRdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e2NvbnRhaW5lcn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2Nsc30gb25DbGljaz17b25DbGlja30+PC9zcGFuPjtcbn1cblxuLyoqXG4gKiBIYWNreSBwcmVhY3QgY29tcG9uZW50IHdoaWNoIHdyYXBzIE9ic2lkaWFuJ3MgbWFya2Rvd24gcmVuZGVyZXIgaW50byBhIG5lYXQgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IE1hcmtkb3duID0gbWVtbyhSYXdNYXJrZG93bik7XG5cbi8qKlxuICogQGhpZGRlblxuICogIEludGVsbGlnZW50bHkgcmVuZGVyIGFuIGFyYml0cmFyeSBsaXRlcmFsIHZhbHVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpdCh7XG4gICAgdmFsdWUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxuICAgIGlubGluZSA9IGZhbHNlLFxuICAgIGRlcHRoID0gMCxcbn06IFByb3BzV2l0aENoaWxkcmVuPHtcbiAgICB2YWx1ZTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgZGVwdGg/OiBudW1iZXI7XG59Pikge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBkZWZhdWx0UGF0aDtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYmV5b25kIHRoZSBtYXhpbXVtIHJlbmRlciBkZXB0aC5cbiAgICBpZiAoZGVwdGggPj0gc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgpIHJldHVybiA8RnJhZ21lbnQ+Li4uPC9GcmFnbWVudD47XG5cbiAgICBpZiAoTGl0ZXJhbHMuaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiA8TWFya2Rvd24gaW5saW5lPXtpbmxpbmV9IGNvbnRlbnQ9e3NldHRpbmdzLnJlbmRlck51bGxBc30gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxNYXJrZG93biBpbmxpbmU9e2lubGluZX0gY29udGVudD17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiA8RnJhZ21lbnQ+e1wiXCIgKyB2YWx1ZX08L0ZyYWdtZW50PjtcbiAgICB9IGVsc2UgaWYgKExpdGVyYWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57XCJcIiArIHZhbHVlfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtyZW5kZXJNaW5pbWFsRGF0ZSh2YWx1ZSwgc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQsIHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCwgY3VycmVudExvY2FsZSgpKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0R1cmF0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gPEZyYWdtZW50PntyZW5kZXJNaW5pbWFsRHVyYXRpb24odmFsdWUpfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2YgaW1hZ2UvdmlkZW8vZXRjIGVtYmVkZGluZ3MgdG8gYnlwYXNzIHRoZSBPYnNpZGlhbiBBUEkgbm90IHdvcmtpbmcuXG4gICAgICAgIGlmIChpc0ltYWdlRW1iZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdCh2YWx1ZS5wYXRoLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgICAgIGlmICghcmVhbEZpbGUpIHJldHVybiA8TWFya2Rvd24gY29udGVudD17dmFsdWUubWFya2Rvd24oKX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG5cbiAgICAgICAgICAgIGxldCBkaW1lbnNpb25zID0gZXh0cmFjdEltYWdlRGltZW5zaW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgcmVzb3VyY2VQYXRoID0gYXBwLnZhdWx0LmdldFJlc291cmNlUGF0aChyZWFsRmlsZSk7XG5cbiAgICAgICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IGhlaWdodD17ZGltZW5zaW9uc1sxXX0gLz47XG4gICAgICAgICAgICBlbHNlIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IC8+O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gPGltZyBhbHQ9e3ZhbHVlLnBhdGh9IHNyYz17cmVzb3VyY2VQYXRofSAvPjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbWJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxFbWJlZCBsaW5rPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXtpbmxpbmV9IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPYnNpZGlhbkxpbmsgbGluaz17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD4mbHQ7ZnVuY3Rpb24mZ3Q7PC9GcmFnbWVudD47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtcImRhdGF2aWV3IGRhdGF2aWV3LXVsIGRhdGF2aWV3LXJlc3VsdC1saXN0LXVsXCJ9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cImRhdGF2aWV3LXJlc3VsdC1saXN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDApIHJldHVybiA8RnJhZ21lbnQ+Jmx0O0VtcHR5IExpc3QmZ3Q7PC9GcmFnbWVudD47XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZGF0YXZpZXcgZGF0YXZpZXctcmVzdWx0LWxpc3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5kZXggPT0gMCA/IFwiXCIgOiBcIiwgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIC8vIERvbid0IHJlbmRlciBjbGFzc2VzIGluIGNhc2UgdGhleSBoYXZlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOyBzcG9vcHkuXG4gICAgICAgIGlmICh2YWx1ZT8uY29uc3RydWN0b3I/Lm5hbWUgJiYgdmFsdWU/LmNvbnN0cnVjdG9yPy5uYW1lICE9IFwiT2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O3t2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfSZndDs8L0ZyYWdtZW50PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy11bCBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LXVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy1saSBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX06IDxMaXQgdmFsdWU9e3ZhbHVlfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e2lubGluZX0gZGVwdGg9e2RlcHRoICsgMX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT0gMCkgcmV0dXJuIDxGcmFnbWVudD4mbHQ7RW1wdHkgT2JqZWN0Jmd0OzwvRnJhZ21lbnQ+O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGF2aWV3IGRhdGF2aWV3LXJlc3VsdC1vYmplY3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmRleCA9PSAwID8gXCJcIiA6IFwiLCBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7a2V5fTogPExpdCB2YWx1ZT17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O1VucmVjb2duaXplZDoge0pTT04uc3RyaW5naWZ5KHZhbHVlKX0mZ3Q7PC9GcmFnbWVudD47XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogSW50ZWxsaWdlbnRseSByZW5kZXIgYW4gYXJiaXRyYXJ5IGxpdGVyYWwgdmFsdWUuICovXG5leHBvcnQgY29uc3QgTGl0ID0gbWVtbyhSYXdMaXQpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJlbmRlciBhIHByZXR0eSBjZW50ZXJlZCBlcnJvciBtZXNzYWdlIGluIGEgYm94LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVycm9yTWVzc2FnZSh7XG4gICAgdGl0bGUsXG4gICAgbWVzc2FnZSxcbiAgICBlcnJvcixcbiAgICByZXNldCxcbn06IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlc2V0PzogKCkgPT4gdm9pZDtcbn0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLWJveFwiPlxuICAgICAgICAgICAge3RpdGxlICYmIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci10aXRsZVwiPnt0aXRsZX08L2g0Pn1cbiAgICAgICAgICAgIHttZXNzYWdlICYmIDxwIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLW1lc3NhZ2VcIj57bWVzc2FnZX08L3A+fVxuICAgICAgICAgICAge2Vycm9yICYmIDxwcmUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZXJyb3ItcHJlXCI+e2Vycm9yfTwvcHJlPn1cbiAgICAgICAgICAgIHtyZXNldCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci1yZXRyeVwiIG9uQ2xpY2s9e3Jlc2V0fT5cbiAgICAgICAgICAgICAgICAgICAgUmVydW5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBBIHNpbXBsZSBlcnJvciBib3VuZGFyeSB3aGljaCByZW5kZXJzIGEgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpbXBsZUVycm9yQm91bmRhcnkoe1xuICAgIHRpdGxlLFxuICAgIG1lc3NhZ2UsXG4gICAgY2hpbGRyZW4sXG59OiBQcm9wc1dpdGhDaGlsZHJlbjx7IHRpdGxlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgW2Vycm9yLCByZXNldF0gPSB1c2VFcnJvckJvdW5kYXJ5KCk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgdGl0bGU9e3RpdGxlfSBtZXNzYWdlPXttZXNzYWdlfSBlcnJvcj17ZXJyb3Iuc3RhY2t9IHJlc2V0PXtyZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW59PC9GcmFnbWVudD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbmV4cG9ydCBjb25zdCBJTUFHRV9FWFRFTlNJT05TID0gT2JqZWN0LmZyZWV6ZShcbiAgICBuZXcgU2V0KFtcbiAgICAgICAgXCIudGlmXCIsXG4gICAgICAgIFwiLnRpZmZcIixcbiAgICAgICAgXCIuZ2lmXCIsXG4gICAgICAgIFwiLnBuZ1wiLFxuICAgICAgICBcIi5hcG5nXCIsXG4gICAgICAgIFwiLmF2aWZcIixcbiAgICAgICAgXCIuanBnXCIsXG4gICAgICAgIFwiLmpwZWdcIixcbiAgICAgICAgXCIuamZpZlwiLFxuICAgICAgICBcIi5wamVwZ1wiLFxuICAgICAgICBcIi5wanBcIixcbiAgICAgICAgXCIuc3ZnXCIsXG4gICAgICAgIFwiLndlYnBcIixcbiAgICAgICAgXCIuYm1wXCIsXG4gICAgICAgIFwiLmljb1wiLFxuICAgICAgICBcIi5jdXJcIixcbiAgICBdKVxuKTtcblxuLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGxpbmsgcG9pbnRzIHRvIGFuIGVtYmVkZGVkIGltYWdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2VFbWJlZChsaW5rOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaW5rLnBhdGguY29udGFpbnMoXCIuXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZXh0ZW5zaW9uID0gbGluay5wYXRoLnN1YnN0cmluZyhsaW5rLnBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICByZXR1cm4gbGluay50eXBlID09IFwiZmlsZVwiICYmIGxpbmsuZW1iZWQgJiYgSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKTtcbn1cblxuLyoqIEV4dHJhY3QgdGV4dCBvZiB0aGUgZm9ybSAnV3hIJyBvciAnVycgZnJvbSB0aGUgZGlzcGxheSBvZiBhIGxpbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEltYWdlRGltZW5zaW9ucyhsaW5rOiBMaW5rKTogW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWxpbmsuZGlzcGxheSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBtYXRjaCA9IC9eKFxcZCspeChcXGQrKSQvaXUuZXhlYyhsaW5rLmRpc3BsYXkpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIFtwYXJzZUludChtYXRjaFsxXSksIHBhcnNlSW50KG1hdGNoWzJdKV07XG5cbiAgICBsZXQgbWF0Y2gyID0gL14oXFxkKykvLmV4ZWMobGluay5kaXNwbGF5KTtcbiAgICBpZiAobWF0Y2gyKSByZXR1cm4gW3BhcnNlSW50KG1hdGNoMlsxXSldO1xuXG4gICAgLy8gTm8gbWF0Y2guXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKiogTm9ybWFsIGh5ZHJhdGlvbiB0aGF0IGF0dGFjaGVzIHRvIGEgRE9NIHRyZWUgYnV0IGRvZXMgbm90IGRpZmYgaXQuICovXG5leHBvcnQgY29uc3QgTU9ERV9IWURSQVRFID0gMSA8PCA1O1xuLyoqIFNpZ25pZmllcyB0aGlzIFZOb2RlIHN1c3BlbmRlZCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyICovXG5leHBvcnQgY29uc3QgTU9ERV9TVVNQRU5ERUQgPSAxIDw8IDc7XG4vKiogSW5kaWNhdGVzIHRoYXQgdGhpcyBub2RlIG5lZWRzIHRvIGJlIGluc2VydGVkIHdoaWxlIHBhdGNoaW5nIGNoaWxkcmVuICovXG5leHBvcnQgY29uc3QgSU5TRVJUX1ZOT0RFID0gMSA8PCAxNjtcbi8qKiBJbmRpY2F0ZXMgYSBWTm9kZSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYW5vdGhlciBWTm9kZSBpbiB0aGUgZGlmZiAqL1xuZXhwb3J0IGNvbnN0IE1BVENIRUQgPSAxIDw8IDE3O1xuXG4vKiogUmVzZXQgYWxsIG1vZGUgZmxhZ3MgKi9cbmV4cG9ydCBjb25zdCBSRVNFVF9NT0RFID0gfihNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRCk7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkogPSAvKiogQHR5cGUge2FueX0gKi8gKHt9KTtcbmV4cG9ydCBjb25zdCBFTVBUWV9BUlIgPSBbXTtcbmV4cG9ydCBjb25zdCBJU19OT05fRElNRU5TSU9OQUwgPVxuXHQvYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pO1xuIiwgImltcG9ydCB7IEVNUFRZX0FSUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2hhbmdlIHRoZSB0eXBlIG9mIGBvYmpgIHRvIGJlIGBPICYgUGBcblx0Zm9yIChsZXQgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG5cdHJldHVybiAvKiogQHR5cGUge08gJiBQfSAqLyAob2JqKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjaGlsZCBub2RlIGZyb20gaXRzIHBhcmVudCBpZiBhdHRhY2hlZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yXG4gKiBJRTExIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKClgLiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBpcyBzbWFsbGVyIHRoYW4gaW5jbHVkaW5nIGEgZGVkaWNhdGVkIHBvbHlmaWxsLlxuICogQHBhcmFtIHtwcmVhY3QuQ29udGFpbmVyTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuXHRpZiAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUpIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWNlID0gRU1QVFlfQVJSLnNsaWNlO1xuIiwgImltcG9ydCB7IF9jYXRjaEVycm9yIH0gZnJvbSAnLi9kaWZmL2NhdGNoLWVycm9yJztcblxuLyoqXG4gKiBUaGUgYG9wdGlvbmAgb2JqZWN0IGNhbiBwb3RlbnRpYWxseSBjb250YWluIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICogdGhhdCBhcmUgY2FsbGVkIGR1cmluZyB2YXJpb3VzIHN0YWdlcyBvZiBvdXIgcmVuZGVyZXIuIFRoaXMgaXMgdGhlXG4gKiBmb3VuZGF0aW9uIG9uIHdoaWNoIGFsbCBvdXIgYWRkb25zIGxpa2UgYHByZWFjdC9kZWJ1Z2AsIGBwcmVhY3QvY29tcGF0YCxcbiAqIGFuZCBgcHJlYWN0L2hvb2tzYCBhcmUgYmFzZWQgb24uIFNlZSB0aGUgYE9wdGlvbnNgIHR5cGUgaW4gYGludGVybmFsLmQudHNgXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbiBob29rcyAobW9zdCBlZGl0b3JzL0lERXMgYWxsb3cgeW91IHRvXG4gKiBjdHJsK2NsaWNrIG9yIGNtZCtjbGljayBvbiBtYWMgdGhlIHR5cGUgZGVmaW5pdGlvbiBiZWxvdykuXG4gKiBAdHlwZSB7T3B0aW9uc31cbiAqL1xuY29uc3Qgb3B0aW9ucyA9IHtcblx0X2NhdGNoRXJyb3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wdGlvbnM7XG4iLCAiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi9vcHRpb25zJztcblxubGV0IHZub2RlSWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZSBhbiB2aXJ0dWFsIG5vZGUgKHVzZWQgZm9yIEpTWClcbiAqIEBwYXJhbSB7Vk5vZGVbXCJ0eXBlXCJdfSB0eXBlIFRoZSBub2RlIG5hbWUgb3IgQ29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciB0aGlzXG4gKiB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Byb3BzXSBUaGUgcHJvcGVydGllcyBvZiB0aGUgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLicpLkNvbXBvbmVudENoaWxkcmVuPn0gW2NoaWxkcmVuXSBUaGUgY2hpbGRyZW4gb2YgdGhlXG4gKiB2aXJ0dWFsIG5vZGVcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSB7fSxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdGk7XG5cdGZvciAoaSBpbiBwcm9wcykge1xuXHRcdGlmIChpID09ICdrZXknKSBrZXkgPSBwcm9wc1tpXTtcblx0XHRlbHNlIGlmIChpID09ICdyZWYnKSByZWYgPSBwcm9wc1tpXTtcblx0XHRlbHNlIG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHByb3BzW2ldO1xuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNoaWxkcmVuID1cblx0XHRcdGFyZ3VtZW50cy5sZW5ndGggPiAzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogY2hpbGRyZW47XG5cdH1cblxuXHQvLyBJZiBhIENvbXBvbmVudCBWTm9kZSwgY2hlY2sgZm9yIGFuZCBhcHBseSBkZWZhdWx0UHJvcHNcblx0Ly8gTm90ZTogdHlwZSBtYXkgYmUgdW5kZWZpbmVkIGluIGRldmVsb3BtZW50LCBtdXN0IG5ldmVyIGVycm9yIGhlcmUuXG5cdGlmICh0eXBlb2YgdHlwZSA9PSAnZnVuY3Rpb24nICYmIHR5cGUuZGVmYXVsdFByb3BzICE9IG51bGwpIHtcblx0XHRmb3IgKGkgaW4gdHlwZS5kZWZhdWx0UHJvcHMpIHtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSB0eXBlLmRlZmF1bHRQcm9wc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgbm9ybWFsaXplZFByb3BzLCBrZXksIHJlZiwgbnVsbCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgVk5vZGUgKHVzZWQgaW50ZXJuYWxseSBieSBQcmVhY3QpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudFxuICogQ29uc3RydWN0b3IgZm9yIHRoaXMgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IHN0cmluZyB8IG51bWJlciB8IG51bGx9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgdmlydHVhbCBub2RlLlxuICogSWYgdGhpcyB2aXJ0dWFsIG5vZGUgcmVwcmVzZW50cyBhIHRleHQgbm9kZSwgdGhpcyBpcyB0aGUgdGV4dCBvZiB0aGUgbm9kZSAoc3RyaW5nIG9yIG51bWJlcikuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG51bGx9IGtleSBUaGUga2V5IGZvciB0aGlzIHZpcnR1YWwgbm9kZSwgdXNlZCB3aGVuXG4gKiBkaWZmaW5nIGl0IGFnYWluc3QgaXRzIGNoaWxkcmVuXG4gKiBAcGFyYW0ge1ZOb2RlW1wicmVmXCJdfSByZWYgVGhlIHJlZiBwcm9wZXJ0eSB0aGF0IHdpbGxcbiAqIHJlY2VpdmUgYSByZWZlcmVuY2UgdG8gaXRzIGNyZWF0ZWQgY2hpbGRcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZOb2RlKHR5cGUsIHByb3BzLCBrZXksIHJlZiwgb3JpZ2luYWwpIHtcblx0Ly8gVjggc2VlbXMgdG8gYmUgYmV0dGVyIGF0IGRldGVjdGluZyB0eXBlIHNoYXBlcyBpZiB0aGUgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIGNhbGwgc2l0ZVxuXHQvLyBEbyBub3QgaW5saW5lIGludG8gY3JlYXRlRWxlbWVudCBhbmQgY29lcmNlVG9WTm9kZSFcblx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0Y29uc3Qgdm5vZGUgPSB7XG5cdFx0dHlwZSxcblx0XHRwcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdC8vIF9uZXh0RG9tIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdW5kZWZpbmVkIGIvYyBpdCB3aWxsIGV2ZW50dWFsbHlcblx0XHQvLyBiZSBzZXQgdG8gZG9tLm5leHRTaWJsaW5nIHdoaWNoIGNhbiByZXR1cm4gYG51bGxgIGFuZCBpdCBpcyBpbXBvcnRhbnRcblx0XHQvLyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5pbml0aWFsaXplZCBfbmV4dERvbSBhbmRcblx0XHQvLyBhIF9uZXh0RG9tIHRoYXQgaGFzIGJlZW4gc2V0IHRvIGBudWxsYFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogb3JpZ2luYWwgPT0gbnVsbCA/ICsrdm5vZGVJZCA6IG9yaWdpbmFsLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwXG5cdH07XG5cblx0Ly8gT25seSBpbnZva2UgdGhlIHZub2RlIGhvb2sgaWYgdGhpcyB3YXMgKm5vdCogYSBkaXJlY3QgY29weTpcblx0aWYgKG9yaWdpbmFsID09IG51bGwgJiYgb3B0aW9ucy52bm9kZSAhPSBudWxsKSBvcHRpb25zLnZub2RlKHZub2RlKTtcblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG5cdHJldHVybiB7IGN1cnJlbnQ6IG51bGwgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdtZW50KHByb3BzKSB7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIFByZWFjdCBWTm9kZS5cbiAqIEBwYXJhbSB7Kn0gdm5vZGVcbiAqIEByZXR1cm5zIHt2bm9kZSBpcyBWTm9kZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsaWRFbGVtZW50ID0gdm5vZGUgPT5cblx0dm5vZGUgIT0gbnVsbCAmJiB2bm9kZS5jb25zdHJ1Y3RvciA9PSB1bmRlZmluZWQ7XG4iLCAiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGRpZmYsIGNvbW1pdFJvb3QgfSBmcm9tICcuL2RpZmYvaW5kZXgnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQmFzZSBDb21wb25lbnQgY2xhc3MuIFByb3ZpZGVzIGBzZXRTdGF0ZSgpYCBhbmQgYGZvcmNlVXBkYXRlKClgLCB3aGljaFxuICogdHJpZ2dlciByZW5kZXJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBUaGUgaW5pdGlhbCBjb21wb25lbnQgcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IFRoZSBpbml0aWFsIGNvbnRleHQgZnJvbSBwYXJlbnQgY29tcG9uZW50cydcbiAqIGdldENoaWxkQ29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gQmFzZUNvbXBvbmVudChwcm9wcywgY29udGV4dCkge1xuXHR0aGlzLnByb3BzID0gcHJvcHM7XG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbi8qKlxuICogVXBkYXRlIGNvbXBvbmVudCBzdGF0ZSBhbmQgc2NoZWR1bGUgYSByZS1yZW5kZXIuXG4gKiBAdGhpcyB7Q29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCAoKHM6IG9iamVjdCwgcDogb2JqZWN0KSA9PiBvYmplY3QpfSB1cGRhdGUgQSBoYXNoIG9mIHN0YXRlXG4gKiBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB3aXRoIG5ldyB2YWx1ZXMgb3IgYSBmdW5jdGlvbiB0aGF0IGdpdmVuIHRoZSBjdXJyZW50XG4gKiBzdGF0ZSBhbmQgcHJvcHMgcmV0dXJucyBhIG5ldyBwYXJ0aWFsIHN0YXRlXG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb25jZSBjb21wb25lbnQgc3RhdGUgaXNcbiAqIHVwZGF0ZWRcbiAqL1xuQmFzZUNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAodXBkYXRlLCBjYWxsYmFjaykge1xuXHQvLyBvbmx5IGNsb25lIHN0YXRlIHdoZW4gY29weWluZyB0byBuZXh0U3RhdGUgdGhlIGZpcnN0IHRpbWUuXG5cdGxldCBzO1xuXHRpZiAodGhpcy5fbmV4dFN0YXRlICE9IG51bGwgJiYgdGhpcy5fbmV4dFN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZTtcblx0fSBlbHNlIHtcblx0XHRzID0gdGhpcy5fbmV4dFN0YXRlID0gYXNzaWduKHt9LCB0aGlzLnN0YXRlKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgdXBkYXRlID09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBTb21lIGxpYnJhcmllcyBsaWtlIGBpbW1lcmAgbWFyayB0aGUgY3VycmVudCBzdGF0ZSBhcyByZWFkb25seSxcblx0XHQvLyBwcmV2ZW50aW5nIHVzIGZyb20gbXV0YXRpbmcgaXQsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuIFNlZSAjMjcxNlxuXHRcdHVwZGF0ZSA9IHVwZGF0ZShhc3NpZ24oe30sIHMpLCB0aGlzLnByb3BzKTtcblx0fVxuXG5cdGlmICh1cGRhdGUpIHtcblx0XHRhc3NpZ24ocywgdXBkYXRlKTtcblx0fVxuXG5cdC8vIFNraXAgdXBkYXRlIGlmIHVwZGF0ZXIgZnVuY3Rpb24gcmV0dXJuZWQgbnVsbFxuXHRpZiAodXBkYXRlID09IG51bGwpIHJldHVybjtcblxuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdHRoaXMuX3N0YXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuXHRcdH1cblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9XG59O1xuXG4vKipcbiAqIEltbWVkaWF0ZWx5IHBlcmZvcm0gYSBzeW5jaHJvbm91cyByZS1yZW5kZXIgb2YgdGhlIGNvbXBvbmVudFxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2NhbGxiYWNrXSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBjb21wb25lbnQgaXNcbiAqIHJlLXJlbmRlcmVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdGlmICh0aGlzLl92bm9kZSkge1xuXHRcdC8vIFNldCByZW5kZXIgbW9kZSBzbyB0aGF0IHdlIGNhbiBkaWZmZXJlbnRpYXRlIHdoZXJlIHRoZSByZW5kZXIgcmVxdWVzdFxuXHRcdC8vIGlzIGNvbWluZyBmcm9tLiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBmb3JjZVVwZGF0ZSBzaG91bGQgbmV2ZXIgY2FsbFxuXHRcdC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuXHRcdHRoaXMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRpZiAoY2FsbGJhY2spIHRoaXMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFjY2VwdHMgYHByb3BzYCBhbmQgYHN0YXRlYCwgYW5kIHJldHVybnMgYSBuZXcgVmlydHVhbCBET00gdHJlZSB0byBidWlsZC5cbiAqIFZpcnR1YWwgRE9NIGlzIGdlbmVyYWxseSBjb25zdHJ1Y3RlZCB2aWEgW0pTWF0oaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4KS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyAoZWc6IEpTWCBhdHRyaWJ1dGVzKSByZWNlaXZlZCBmcm9tIHBhcmVudFxuICogZWxlbWVudC9jb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSBUaGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgQ29udGV4dCBvYmplY3QsIGFzIHJldHVybmVkIGJ5IHRoZSBuZWFyZXN0XG4gKiBhbmNlc3RvcidzIGBnZXRDaGlsZENvbnRleHQoKWBcbiAqIEByZXR1cm5zIHtDb21wb25lbnRDaGlsZHJlbiB8IHZvaWR9XG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9IEZyYWdtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGx9IFtjaGlsZEluZGV4XVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9tU2libGluZyh2bm9kZSwgY2hpbGRJbmRleCkge1xuXHRpZiAoY2hpbGRJbmRleCA9PSBudWxsKSB7XG5cdFx0Ly8gVXNlIGNoaWxkSW5kZXg9PW51bGwgYXMgYSBzaWduYWwgdG8gcmVzdW1lIHRoZSBzZWFyY2ggZnJvbSB0aGUgdm5vZGUncyBzaWJsaW5nXG5cdFx0cmV0dXJuIHZub2RlLl9wYXJlbnRcblx0XHRcdD8gZ2V0RG9tU2libGluZyh2bm9kZS5fcGFyZW50LCB2bm9kZS5faW5kZXggKyAxKVxuXHRcdFx0OiBudWxsO1xuXHR9XG5cblx0bGV0IHNpYmxpbmc7XG5cdGZvciAoOyBjaGlsZEluZGV4IDwgdm5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgY2hpbGRJbmRleCsrKSB7XG5cdFx0c2libGluZyA9IHZub2RlLl9jaGlsZHJlbltjaGlsZEluZGV4XTtcblxuXHRcdGlmIChzaWJsaW5nICE9IG51bGwgJiYgc2libGluZy5fZG9tICE9IG51bGwpIHtcblx0XHRcdC8vIFNpbmNlIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzIGtlZXBzIF9kb20gcG9pbnRlciBjb3JyZWN0LFxuXHRcdFx0Ly8gd2UgY2FuIHJlbHkgb24gX2RvbSB0byB0ZWxsIHVzIGlmIHRoaXMgc3VidHJlZSBjb250YWlucyBhXG5cdFx0XHQvLyByZW5kZXJlZCBET00gbm9kZSwgYW5kIHdoYXQgdGhlIGZpcnN0IHJlbmRlcmVkIERPTSBub2RlIGlzXG5cdFx0XHRyZXR1cm4gc2libGluZy5fZG9tO1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIG5vdCBmb3VuZCBhIERPTSBub2RlIGluIHRoaXMgdm5vZGUncyBjaGlsZHJlbi5cblx0Ly8gV2UgbXVzdCByZXN1bWUgZnJvbSB0aGlzIHZub2RlJ3Mgc2libGluZyAoaW4gaXQncyBwYXJlbnQgX2NoaWxkcmVuIGFycmF5KVxuXHQvLyBPbmx5IGNsaW1iIHVwIGFuZCBzZWFyY2ggdGhlIHBhcmVudCBpZiB3ZSBhcmVuJ3Qgc2VhcmNoaW5nIHRocm91Z2ggYSBET01cblx0Ly8gVk5vZGUgKG1lYW5pbmcgd2UgcmVhY2hlZCB0aGUgRE9NIHBhcmVudCBvZiB0aGUgb3JpZ2luYWwgdm5vZGUgdGhhdCBiZWdhblxuXHQvLyB0aGUgc2VhcmNoKVxuXHRyZXR1cm4gdHlwZW9mIHZub2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJyA/IGdldERvbVNpYmxpbmcodm5vZGUpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGluLXBsYWNlIHJlLXJlbmRlcmluZyBvZiBhIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBjb21wb25lbnQgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdGxldCBvbGRWTm9kZSA9IGNvbXBvbmVudC5fdm5vZGUsXG5cdFx0b2xkRG9tID0gb2xkVk5vZGUuX2RvbSxcblx0XHRjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cblx0aWYgKGNvbXBvbmVudC5fcGFyZW50RG9tKSB7XG5cdFx0Y29uc3QgbmV3Vk5vZGUgPSBhc3NpZ24oe30sIG9sZFZOb2RlKTtcblx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBvbGRWTm9kZS5fb3JpZ2luYWwgKyAxO1xuXHRcdGlmIChvcHRpb25zLnZub2RlKSBvcHRpb25zLnZub2RlKG5ld1ZOb2RlKTtcblxuXHRcdGRpZmYoXG5cdFx0XHRjb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRjb21wb25lbnQuX2dsb2JhbENvbnRleHQsXG5cdFx0XHRjb21wb25lbnQuX3BhcmVudERvbS5uYW1lc3BhY2VVUkksXG5cdFx0XHRvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUgPyBbb2xkRG9tXSA6IG51bGwsXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSA9PSBudWxsID8gZ2V0RG9tU2libGluZyhvbGRWTm9kZSkgOiBvbGREb20sXG5cdFx0XHQhIShvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsO1xuXHRcdG5ld1ZOb2RlLl9wYXJlbnQuX2NoaWxkcmVuW25ld1ZOb2RlLl9pbmRleF0gPSBuZXdWTm9kZTtcblx0XHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCBuZXdWTm9kZSwgcmVmUXVldWUpO1xuXG5cdFx0aWYgKG5ld1ZOb2RlLl9kb20gIT0gb2xkRG9tKSB7XG5cdFx0XHR1cGRhdGVQYXJlbnREb21Qb2ludGVycyhuZXdWTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUGFyZW50RG9tUG9pbnRlcnModm5vZGUpIHtcblx0aWYgKCh2bm9kZSA9IHZub2RlLl9wYXJlbnQpICE9IG51bGwgJiYgdm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjaGlsZCA9IHZub2RlLl9jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLl9kb20gIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5fZG9tID0gdm5vZGUuX2NvbXBvbmVudC5iYXNlID0gY2hpbGQuX2RvbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXIgcXVldWVcbiAqIEB0eXBlIHtBcnJheTxDb21wb25lbnQ+fVxuICovXG5sZXQgcmVyZW5kZXJRdWV1ZSA9IFtdO1xuXG4vKlxuICogVGhlIHZhbHVlIG9mIGBDb21wb25lbnQuZGVib3VuY2VgIG11c3QgYXN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBwYXNzZWQgaW4gY2FsbGJhY2suIEl0IGlzXG4gKiBpbXBvcnRhbnQgdGhhdCBjb250cmlidXRvcnMgdG8gUHJlYWN0IGNhbiBjb25zaXN0ZW50bHkgcmVhc29uIGFib3V0IHdoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCwgZXRjLlxuICogZG8sIGFuZCB3aGVuIHRoZWlyIGVmZmVjdHMgd2lsbCBiZSBhcHBsaWVkLiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBzb21lIGZ1cnRoZXIgcmVhZGluZyBvbiBkZXNpZ25pbmdcbiAqIGFzeW5jaHJvbm91cyBBUElzLlxuICogKiBbRGVzaWduaW5nIEFQSXMgZm9yIEFzeW5jaHJvbnldKGh0dHBzOi8vYmxvZy5penMubWUvMjAxMy8wOC9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAqICogW0NhbGxiYWNrcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzXShodHRwczovL2Jsb2cub21ldGVyLmNvbS8yMDExLzA3LzI0L2NhbGxiYWNrcy1zeW5jaHJvbm91cy1hbmQtYXN5bmNocm9ub3VzLylcbiAqL1xuXG5sZXQgcHJldkRlYm91bmNlO1xuXG5jb25zdCBkZWZlciA9XG5cdHR5cGVvZiBQcm9taXNlID09ICdmdW5jdGlvbidcblx0XHQ/IFByb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSlcblx0XHQ6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogRW5xdWV1ZSBhIHJlcmVuZGVyIG9mIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYyBUaGUgY29tcG9uZW50IHRvIHJlcmVuZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGMpIHtcblx0aWYgKFxuXHRcdCghYy5fZGlydHkgJiZcblx0XHRcdChjLl9kaXJ0eSA9IHRydWUpICYmXG5cdFx0XHRyZXJlbmRlclF1ZXVlLnB1c2goYykgJiZcblx0XHRcdCFwcm9jZXNzLl9yZXJlbmRlckNvdW50KyspIHx8XG5cdFx0cHJldkRlYm91bmNlICE9PSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nXG5cdCkge1xuXHRcdHByZXZEZWJvdW5jZSA9IG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmc7XG5cdFx0KHByZXZEZWJvdW5jZSB8fCBkZWZlcikocHJvY2Vzcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYVxuICogQHBhcmFtIHtDb21wb25lbnR9IGJcbiAqL1xuY29uc3QgZGVwdGhTb3J0ID0gKGEsIGIpID0+IGEuX3Zub2RlLl9kZXB0aCAtIGIuX3Zub2RlLl9kZXB0aDtcblxuLyoqIEZsdXNoIHRoZSByZW5kZXIgcXVldWUgYnkgcmVyZW5kZXJpbmcgYWxsIHF1ZXVlZCBjb21wb25lbnRzICovXG5mdW5jdGlvbiBwcm9jZXNzKCkge1xuXHRsZXQgYztcblx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdC8vIERvbid0IHVwZGF0ZSBgcmVuZGVyQ291bnRgIHlldC4gS2VlcCBpdHMgdmFsdWUgbm9uLXplcm8gdG8gcHJldmVudCB1bm5lY2Vzc2FyeVxuXHQvLyBwcm9jZXNzKCkgY2FsbHMgZnJvbSBnZXR0aW5nIHNjaGVkdWxlZCB3aGlsZSBgcXVldWVgIGlzIHN0aWxsIGJlaW5nIGNvbnN1bWVkLlxuXHR3aGlsZSAoKGMgPSByZXJlbmRlclF1ZXVlLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKGMuX2RpcnR5KSB7XG5cdFx0XHRsZXQgcmVuZGVyUXVldWVMZW5ndGggPSByZXJlbmRlclF1ZXVlLmxlbmd0aDtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjKTtcblx0XHRcdGlmIChyZXJlbmRlclF1ZXVlLmxlbmd0aCA+IHJlbmRlclF1ZXVlTGVuZ3RoKSB7XG5cdFx0XHRcdC8vIFdoZW4gaS5lLiByZXJlbmRlcmluZyBhIHByb3ZpZGVyIGFkZGl0aW9uYWwgbmV3IGl0ZW1zIGNhbiBiZSBpbmplY3RlZCwgd2Ugd2FudCB0b1xuXHRcdFx0XHQvLyBrZWVwIHRoZSBvcmRlciBmcm9tIHRvcCB0byBib3R0b20gd2l0aCB0aG9zZSBuZXcgaXRlbXMgc28gd2UgY2FuIGhhbmRsZSB0aGVtIGluIGFcblx0XHRcdFx0Ly8gc2luZ2xlIHBhc3Ncblx0XHRcdFx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSAwO1xufVxuXG5wcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbiIsICJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBrZXksIHZhbHVlKSB7XG5cdGlmIChrZXlbMF0gPT09ICctJykge1xuXHRcdHN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRzdHlsZVtrZXldID0gJyc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9ICdudW1iZXInIHx8IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGtleSkpIHtcblx0XHRzdHlsZVtrZXldID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlICsgJ3B4Jztcblx0fVxufVxuXG4vLyBBIGxvZ2ljYWwgY2xvY2sgdG8gc29sdmUgaXNzdWVzIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMzkyNy5cbi8vIFdoZW4gdGhlIERPTSBwZXJmb3JtcyBhbiBldmVudCBpdCBsZWF2ZXMgbWljcm8tdGlja3MgaW4gYmV0d2VlbiBidWJibGluZyB1cCB3aGljaCBtZWFucyB0aGF0XG4vLyBhbiBldmVudCBjYW4gdHJpZ2dlciBvbiBhIG5ld2x5IHJlYXRlZCBET00tbm9kZSB3aGlsZSB0aGUgZXZlbnQgYnViYmxlcyB1cC5cbi8vXG4vLyBPcmlnaW5hbGx5IGluc3BpcmVkIGJ5IFZ1ZVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2Jsb2IvY2FlYjhhNjg4MTFhMWIwZjc5L3BhY2thZ2VzL3J1bnRpbWUtZG9tL3NyYy9tb2R1bGVzL2V2ZW50cy50cyNMOTAtTDEwMSksXG4vLyBidXQgbW9kaWZpZWQgdG8gdXNlIGEgbG9naWNhbCBjbG9jayBpbnN0ZWFkIG9mIERhdGUubm93KCkgaW4gY2FzZSBldmVudCBoYW5kbGVycyBnZXQgYXR0YWNoZWRcbi8vIGFuZCBldmVudHMgZ2V0IGRpc3BhdGNoZWQgZHVyaW5nIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuLy9cbi8vIFRoZSBjbG9jayBpcyBpbmNyZW1lbnRlZCBhZnRlciBlYWNoIG5ldyBldmVudCBkaXNwYXRjaC4gVGhpcyBhbGxvd3MgMSAwMDAgMDAwIG5ldyBldmVudHNcbi8vIHBlciBzZWNvbmQgZm9yIG92ZXIgMjgwIHllYXJzIGJlZm9yZSB0aGUgdmFsdWUgcmVhY2hlcyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAoMioqNTMgLSAxKS5cbmxldCBldmVudENsb2NrID0gMDtcblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIG5vZGUgdG8gbW9kaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvXG4gKiBAcGFyYW0geyp9IG9sZFZhbHVlIFRoZSBvbGQgdmFsdWUgdGhlIHByb3BlcnR5IGhhZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoZG9tLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUsIG5hbWVzcGFjZSkge1xuXHRsZXQgdXNlQ2FwdHVyZTtcblxuXHRvOiBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkVmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSBvbGRWYWx1ZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2xkVmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCEodmFsdWUgJiYgbmFtZSBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIHZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCFvbGRWYWx1ZSB8fCB2YWx1ZVtuYW1lXSAhPT0gb2xkVmFsdWVbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgdmFsdWVbbmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBCZW5jaG1hcmsgZm9yIGNvbXBhcmlzb246IGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNTc0Yzk1NGJkYjk2NWI5YTAwOTY1YWM2XG5cdGVsc2UgaWYgKG5hbWVbMF0gPT09ICdvJyAmJiBuYW1lWzFdID09PSAnbicpIHtcblx0XHR1c2VDYXB0dXJlID1cblx0XHRcdG5hbWUgIT09IChuYW1lID0gbmFtZS5yZXBsYWNlKC8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLCAnJDEnKSk7XG5cblx0XHQvLyBJbmZlciBjb3JyZWN0IGNhc2luZyBmb3IgRE9NIGJ1aWx0LWluIGV2ZW50czpcblx0XHRpZiAoXG5cdFx0XHRuYW1lLnRvTG93ZXJDYXNlKCkgaW4gZG9tIHx8XG5cdFx0XHRuYW1lID09PSAnb25Gb2N1c091dCcgfHxcblx0XHRcdG5hbWUgPT09ICdvbkZvY3VzSW4nXG5cdFx0KVxuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgyKTtcblx0XHRlbHNlIG5hbWUgPSBuYW1lLnNsaWNlKDIpO1xuXG5cdFx0aWYgKCFkb20uX2xpc3RlbmVycykgZG9tLl9saXN0ZW5lcnMgPSB7fTtcblx0XHRkb20uX2xpc3RlbmVyc1tuYW1lICsgdXNlQ2FwdHVyZV0gPSB2YWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0aWYgKCFvbGRWYWx1ZSkge1xuXHRcdFx0XHR2YWx1ZS5fYXR0YWNoZWQgPSBldmVudENsb2NrO1xuXHRcdFx0XHRkb20uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHksXG5cdFx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWUuX2F0dGFjaGVkID0gb2xkVmFsdWUuX2F0dGFjaGVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dXNlQ2FwdHVyZSA/IGV2ZW50UHJveHlDYXB0dXJlIDogZXZlbnRQcm94eSxcblx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKG5hbWVzcGFjZSA9PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgaW5jb3JyZWN0IHByb3AgdXNhZ2UgZm9yIFNWRzpcblx0XHRcdC8vIC0geGxpbms6aHJlZiAvIHhsaW5rSHJlZiAtLT4gaHJlZiAoeGxpbms6aHJlZiB3YXMgcmVtb3ZlZCBmcm9tIFNWRyBhbmQgaXNuJ3QgbmVlZGVkKVxuXHRcdFx0Ly8gLSBjbGFzc05hbWUgLS0+IGNsYXNzXG5cdFx0XHRuYW1lID0gbmFtZS5yZXBsYWNlKC94bGluayhIfDpoKS8sICdoJykucmVwbGFjZSgvc05hbWUkLywgJ3MnKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bmFtZSAhPSAnd2lkdGgnICYmXG5cdFx0XHRuYW1lICE9ICdoZWlnaHQnICYmXG5cdFx0XHRuYW1lICE9ICdocmVmJyAmJlxuXHRcdFx0bmFtZSAhPSAnbGlzdCcgJiZcblx0XHRcdG5hbWUgIT0gJ2Zvcm0nICYmXG5cdFx0XHQvLyBEZWZhdWx0IHZhbHVlIGluIGJyb3dzZXJzIGlzIGAtMWAgYW5kIGFuIGVtcHR5IHN0cmluZyBpc1xuXHRcdFx0Ly8gY2FzdCB0byBgMGAgaW5zdGVhZFxuXHRcdFx0bmFtZSAhPSAndGFiSW5kZXgnICYmXG5cdFx0XHRuYW1lICE9ICdkb3dubG9hZCcgJiZcblx0XHRcdG5hbWUgIT0gJ3Jvd1NwYW4nICYmXG5cdFx0XHRuYW1lICE9ICdjb2xTcGFuJyAmJlxuXHRcdFx0bmFtZSAhPSAncm9sZScgJiZcblx0XHRcdG5hbWUgIT0gJ3BvcG92ZXInICYmXG5cdFx0XHRuYW1lIGluIGRvbVxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZG9tW25hbWVdID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG5cdFx0XHRcdC8vIGxhYmVsbGVkIGJyZWFrIGlzIDFiIHNtYWxsZXIgaGVyZSB0aGFuIGEgcmV0dXJuIHN0YXRlbWVudCAoc29ycnkpXG5cdFx0XHRcdGJyZWFrIG87XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdC8vIGFyaWEtIGFuZCBkYXRhLSBhdHRyaWJ1dGVzIGhhdmUgbm8gYm9vbGVhbiByZXByZXNlbnRhdGlvbi5cblx0XHQvLyBBIGBmYWxzZWAgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGF0dHJpYnV0ZSBub3QgYmVpbmdcblx0XHQvLyBwcmVzZW50LCBzbyB3ZSBjYW4ndCByZW1vdmUgaXQuIEZvciBub24tYm9vbGVhbiBhcmlhXG5cdFx0Ly8gYXR0cmlidXRlcyB3ZSBjb3VsZCB0cmVhdCBmYWxzZSBhcyBhIHJlbW92YWwsIGJ1dCB0aGVcblx0XHQvLyBhbW91bnQgb2YgZXhjZXB0aW9ucyB3b3VsZCBjb3N0IHRvbyBtYW55IGJ5dGVzLiBPbiB0b3Agb2Zcblx0XHQvLyB0aGF0IG90aGVyIGZyYW1ld29ya3MgZ2VuZXJhbGx5IHN0cmluZ2lmeSBgZmFsc2VgLlxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBuZXZlciBzZXJpYWxpemUgZnVuY3Rpb25zIGFzIGF0dHJpYnV0ZSB2YWx1ZXNcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlICE9PSBmYWxzZSB8fCBuYW1lWzRdID09PSAnLScpKSB7XG5cdFx0XHRkb20uc2V0QXR0cmlidXRlKG5hbWUsIG5hbWUgPT0gJ3BvcG92ZXInICYmIHZhbHVlID09IHRydWUgPyAnJyA6IHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXZlbnQgcHJveHkgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUNhcHR1cmUgSXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjYXB0dXJlIHBoYXNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXZlbnRQcm94eSh1c2VDYXB0dXJlKSB7XG5cdC8qKlxuXHQgKiBQcm94eSBhbiBldmVudCB0byBob29rZWQgZXZlbnQgaGFuZGxlcnNcblx0ICogQHBhcmFtIHtQcmVhY3RFdmVudH0gZSBUaGUgZXZlbnQgb2JqZWN0IGZyb20gdGhlIGJyb3dzZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJldHVybiBmdW5jdGlvbiAoZSkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcblx0XHRcdGNvbnN0IGV2ZW50SGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tlLnR5cGUgKyB1c2VDYXB0dXJlXTtcblx0XHRcdGlmIChlLl9kaXNwYXRjaGVkID09IG51bGwpIHtcblx0XHRcdFx0ZS5fZGlzcGF0Y2hlZCA9IGV2ZW50Q2xvY2srKztcblxuXHRcdFx0XHQvLyBXaGVuIGBlLl9kaXNwYXRjaGVkYCBpcyBzbWFsbGVyIHRoYW4gdGhlIHRpbWUgd2hlbiB0aGUgdGFyZ2V0ZWQgZXZlbnRcblx0XHRcdFx0Ly8gaGFuZGxlciB3YXMgYXR0YWNoZWQgd2Uga25vdyB3ZSBoYXZlIGJ1YmJsZWQgdXAgdG8gYW4gZWxlbWVudCB0aGF0IHdhcyBhZGRlZFxuXHRcdFx0XHQvLyBkdXJpbmcgcGF0Y2hpbmcgdGhlIERPTS5cblx0XHRcdH0gZWxzZSBpZiAoZS5fZGlzcGF0Y2hlZCA8IGV2ZW50SGFuZGxlci5fYXR0YWNoZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGV2ZW50SGFuZGxlcihvcHRpb25zLmV2ZW50ID8gb3B0aW9ucy5ldmVudChlKSA6IGUpO1xuXHRcdH1cblx0fTtcbn1cblxuY29uc3QgZXZlbnRQcm94eSA9IGNyZWF0ZUV2ZW50UHJveHkoZmFsc2UpO1xuY29uc3QgZXZlbnRQcm94eUNhcHR1cmUgPSBjcmVhdGVFdmVudFByb3h5KHRydWUpO1xuIiwgImltcG9ydCB7IGVucXVldWVSZW5kZXIgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5cbmV4cG9ydCBsZXQgaSA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY29udGV4dElkKSB7XG5cdGNvbnRleHRJZCA9ICdfX2NDJyArIGkrKztcblxuXHRjb25zdCBjb250ZXh0ID0ge1xuXHRcdF9pZDogY29udGV4dElkLFxuXHRcdF9kZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcblx0XHQvKiogQHR5cGUge0Z1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdENvbnN1bWVyKHByb3BzLCBjb250ZXh0VmFsdWUpIHtcblx0XHRcdC8vIHJldHVybiBwcm9wcy5jaGlsZHJlbihcblx0XHRcdC8vIFx0Y29udGV4dFtjb250ZXh0SWRdID8gY29udGV4dFtjb250ZXh0SWRdLnByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlXG5cdFx0XHQvLyApO1xuXHRcdFx0cmV0dXJuIHByb3BzLmNoaWxkcmVuKGNvbnRleHRWYWx1ZSk7XG5cdFx0fSxcblx0XHQvKiogQHR5cGUge0Z1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdFByb3ZpZGVyKHByb3BzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0Q2hpbGRDb250ZXh0KSB7XG5cdFx0XHRcdC8qKiBAdHlwZSB7U2V0PENvbXBvbmVudD4gfCBudWxsfSAqL1xuXHRcdFx0XHRsZXQgc3VicyA9IG5ldyBTZXQoKTtcblx0XHRcdFx0bGV0IGN0eCA9IHt9O1xuXHRcdFx0XHRjdHhbY29udGV4dElkXSA9IHRoaXM7XG5cblx0XHRcdFx0dGhpcy5nZXRDaGlsZENvbnRleHQgPSAoKSA9PiBjdHg7XG5cblx0XHRcdFx0dGhpcy5jb21wb25lbnRXaWxsVW5tb3VudCA9ICgpID0+IHtcblx0XHRcdFx0XHRzdWJzID0gbnVsbDtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChfcHJvcHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gX3Byb3BzLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRzdWJzLmZvckVhY2goYyA9PiB7XG5cdFx0XHRcdFx0XHRcdGMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnN1YiA9IGMgPT4ge1xuXHRcdFx0XHRcdHN1YnMuYWRkKGMpO1xuXHRcdFx0XHRcdGxldCBvbGQgPSBjLmNvbXBvbmVudFdpbGxVbm1vdW50O1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoc3Vicykge1xuXHRcdFx0XHRcdFx0XHRzdWJzLmRlbGV0ZShjKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvbGQpIG9sZC5jYWxsKGMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcblx0XHR9XG5cdH07XG5cblx0Ly8gRGV2dG9vbHMgbmVlZHMgYWNjZXNzIHRvIHRoZSBjb250ZXh0IG9iamVjdCB3aGVuIGl0XG5cdC8vIGVuY291bnRlcnMgYSBQcm92aWRlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydFxuXHQvLyBzZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gdGhlIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcblx0Ly8gb2Ygb24gdGhlIGNvbXBvbmVudCBpdHNlbGYuIFNlZTpcblx0Ly8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbnRleHQuaHRtbCNjb250ZXh0ZGlzcGxheW5hbWVcblxuXHRyZXR1cm4gKGNvbnRleHQuUHJvdmlkZXIuX2NvbnRleHRSZWYgPSBjb250ZXh0LkNvbnN1bWVyLmNvbnRleHRUeXBlID1cblx0XHRjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBkaWZmLCB1bm1vdW50LCBhcHBseVJlZiB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKLCBFTVBUWV9BUlIsIElOU0VSVF9WTk9ERSwgTUFUQ0hFRCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuLyoqXG4gKiBEaWZmIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlIGNoaWxkcmVuIGFyZSBiZWluZ1xuICogZGlmZmVkXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZX0gbmV3UGFyZW50Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlXG4gKiBkaWZmJ2VkIGFnYWluc3Qgb2xkUGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5XG4gKiBnZXRDaGlsZENvbnRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgQ3VycmVudCBuYW1lc3BhY2Ugb2YgdGhlIERPTSBub2RlIChIVE1MLCBTVkcsIG9yIE1hdGhNTClcbiAqIEBwYXJhbSB7QXJyYXk8UHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50cyB3aGljaCBoYXZlIGNhbGxiYWNrc1xuICogdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tIFRoZSBjdXJyZW50IGF0dGFjaGVkIERPTSBlbGVtZW50IGFueSBuZXcgZG9tXG4gKiBlbGVtZW50cyBzaG91bGQgYmUgcGxhY2VkIGFyb3VuZC4gTGlrZWx5IGBudWxsYCBvbiBmaXJzdCByZW5kZXIgKGV4Y2VwdCB3aGVuXG4gKiBoeWRyYXRpbmcpLiBDYW4gYmUgYSBzaWJsaW5nIERPTSBlbGVtZW50IHdoZW4gZGlmZmluZyBGcmFnbWVudHMgdGhhdCBoYXZlXG4gKiBzaWJsaW5ncy4gSW4gbW9zdCBjYXNlcywgaXQgc3RhcnRzIG91dCBhcyBgb2xkQ2hpbGRyZW5bMF0uX2RvbWAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkNoaWxkcmVuKFxuXHRwYXJlbnREb20sXG5cdHJlbmRlclJlc3VsdCxcblx0bmV3UGFyZW50Vk5vZGUsXG5cdG9sZFBhcmVudFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHRsZXQgaSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdG9sZFZOb2RlLFxuXHRcdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdFx0Y2hpbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0bmV3RG9tLFxuXHRcdC8qKiBAdHlwZSB7UHJlYWN0RWxlbWVudH0gKi9cblx0XHRmaXJzdENoaWxkRG9tO1xuXG5cdC8vIFRoaXMgaXMgYSBjb21wcmVzc2lvbiBvZiBvbGRQYXJlbnRWTm9kZSE9bnVsbCAmJiBvbGRQYXJlbnRWTm9kZSAhPSBFTVBUWV9PQkogJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuIHx8IEVNUFRZX0FSUlxuXHQvLyBhcyBFTVBUWV9PQkouX2NoaWxkcmVuIHNob3VsZCBiZSBgdW5kZWZpbmVkYC5cblx0LyoqIEB0eXBlIHtWTm9kZVtdfSAqL1xuXHRsZXQgb2xkQ2hpbGRyZW4gPSAob2xkUGFyZW50Vk5vZGUgJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuKSB8fCBFTVBUWV9BUlI7XG5cblx0bGV0IG5ld0NoaWxkcmVuTGVuZ3RoID0gcmVuZGVyUmVzdWx0Lmxlbmd0aDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IG9sZERvbTtcblx0Y29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbik7XG5cdG9sZERvbSA9IG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXTtcblx0XHRpZiAoY2hpbGRWTm9kZSA9PSBudWxsKSBjb250aW51ZTtcblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkgaGFzIGFzc2lnbmVkIF9pbmRleCB0byBiZSB0aGVcblx0XHQvLyBtYXRjaGluZ0luZGV4IGZvciB0aGlzIFZOb2RlJ3Mgb2xkVk5vZGUgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIG9sZFZOb2RlKS5cblx0XHRpZiAoY2hpbGRWTm9kZS5faW5kZXggPT09IC0xKSB7XG5cdFx0XHRvbGRWTm9kZSA9IEVNUFRZX09CSjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltjaGlsZFZOb2RlLl9pbmRleF0gfHwgRU1QVFlfT0JKO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBjaGlsZFZOb2RlLl9pbmRleCB0byBpdHMgZmluYWwgaW5kZXhcblx0XHRjaGlsZFZOb2RlLl9pbmRleCA9IGk7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0Ly8gQWRqdXN0IERPTSBub2Rlc1xuXHRcdG5ld0RvbSA9IGNoaWxkVk5vZGUuX2RvbTtcblx0XHRpZiAoY2hpbGRWTm9kZS5yZWYgJiYgb2xkVk5vZGUucmVmICE9IGNoaWxkVk5vZGUucmVmKSB7XG5cdFx0XHRpZiAob2xkVk5vZGUucmVmKSB7XG5cdFx0XHRcdGFwcGx5UmVmKG9sZFZOb2RlLnJlZiwgbnVsbCwgY2hpbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0XHRyZWZRdWV1ZS5wdXNoKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZixcblx0XHRcdFx0Y2hpbGRWTm9kZS5fY29tcG9uZW50IHx8IG5ld0RvbSxcblx0XHRcdFx0Y2hpbGRWTm9kZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZmlyc3RDaGlsZERvbSA9PSBudWxsICYmIG5ld0RvbSAhPSBudWxsKSB7XG5cdFx0XHRmaXJzdENoaWxkRG9tID0gbmV3RG9tO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzICYgSU5TRVJUX1ZOT0RFIHx8XG5cdFx0XHRvbGRWTm9kZS5fY2hpbGRyZW4gPT09IGNoaWxkVk5vZGUuX2NoaWxkcmVuXG5cdFx0KSB7XG5cdFx0XHRvbGREb20gPSBpbnNlcnQoY2hpbGRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZS50eXBlID09ICdmdW5jdGlvbicgJiZcblx0XHRcdGNoaWxkVk5vZGUuX25leHREb20gIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Ly8gU2luY2UgRnJhZ21lbnRzIG9yIGNvbXBvbmVudHMgdGhhdCByZXR1cm4gRnJhZ21lbnQgbGlrZSBWTm9kZXMgY2FuXG5cdFx0XHQvLyBjb250YWluIG11bHRpcGxlIERPTSBub2RlcyBhcyB0aGUgc2FtZSBsZXZlbCwgY29udGludWUgdGhlIGRpZmYgZnJvbVxuXHRcdFx0Ly8gdGhlIHNpYmxpbmcgb2YgbGFzdCBET00gY2hpbGQgb2YgdGhpcyBjaGlsZCBWTm9kZVxuXHRcdFx0b2xkRG9tID0gY2hpbGRWTm9kZS5fbmV4dERvbTtcblx0XHR9IGVsc2UgaWYgKG5ld0RvbSkge1xuXHRcdFx0b2xkRG9tID0gbmV3RG9tLm5leHRTaWJsaW5nO1xuXHRcdH1cblxuXHRcdC8vIEVhZ2VybHkgY2xlYW51cCBfbmV4dERvbS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJzaXN0IHRoZSB2YWx1ZSBiZWNhdXNlIGl0XG5cdFx0Ly8gaXMgb25seSB1c2VkIGJ5IGBkaWZmQ2hpbGRyZW5gIHRvIGRldGVybWluZSB3aGVyZSB0byByZXN1bWUgdGhlIGRpZmZcblx0XHQvLyBhZnRlciBkaWZmaW5nIENvbXBvbmVudHMgYW5kIEZyYWdtZW50cy4gT25jZSB3ZSBzdG9yZSBpdCB0aGUgbmV4dERPTVxuXHRcdC8vIGxvY2FsIHZhciwgd2UgY2FuIGNsZWFuIHVwIHRoZSBwcm9wZXJ0eS4gQWxzbyBwcmV2ZW50cyB1cyBoYW5naW5nIG9uIHRvXG5cdFx0Ly8gRE9NIG5vZGVzIHRoYXQgbWF5IGhhdmUgYmVlbiB1bm1vdW50ZWQuXG5cdFx0Y2hpbGRWTm9kZS5fbmV4dERvbSA9IHVuZGVmaW5lZDtcblxuXHRcdC8vIFVuc2V0IGRpZmZpbmcgZmxhZ3Ncblx0XHRjaGlsZFZOb2RlLl9mbGFncyAmPSB+KElOU0VSVF9WTk9ERSB8IE1BVENIRUQpO1xuXHR9XG5cblx0Ly8gVE9ETzogV2l0aCBuZXcgY2hpbGQgZGlmZmluZyBhbGdvLCBjb25zaWRlciBhbHQgd2F5cyB0byBkaWZmIEZyYWdtZW50cy5cblx0Ly8gU3VjaCBhcyBkcm9wcGluZyBvbGREb20gYW5kIG1vdmluZyBmcmFnbWVudHMgaW4gcGxhY2Vcblx0Ly9cblx0Ly8gQmVjYXVzZSB0aGUgbmV3UGFyZW50Vk5vZGUgaXMgRnJhZ21lbnQtbGlrZSwgd2UgbmVlZCB0byBzZXQgaXQnc1xuXHQvLyBfbmV4dERvbSBwcm9wZXJ0eSB0byB0aGUgbmV4dFNpYmxpbmcgb2YgaXRzIGxhc3QgY2hpbGQgRE9NIG5vZGUuXG5cdC8vXG5cdC8vIGBvbGREb21gIGNvbnRhaW5zIHRoZSBjb3JyZWN0IHZhbHVlIGhlcmUgYmVjYXVzZSBpZiB0aGUgbGFzdCBjaGlsZFxuXHQvLyBpcyBhIEZyYWdtZW50LWxpa2UsIHRoZW4gb2xkRG9tIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHRvIHRoYXQgY2hpbGQncyBfbmV4dERvbS5cblx0Ly8gSWYgdGhlIGxhc3QgY2hpbGQgaXMgYSBET00gVk5vZGUsIHRoZW4gb2xkRG9tIHdpbGwgYmUgc2V0IHRvIHRoYXQgRE9NXG5cdC8vIG5vZGUncyBuZXh0U2libGluZy5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdG5ld1BhcmVudFZOb2RlLl9kb20gPSBmaXJzdENoaWxkRG9tO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3ROZXdDaGlsZHJlbkFycmF5KG5ld1BhcmVudFZOb2RlLCByZW5kZXJSZXN1bHQsIG9sZENoaWxkcmVuKSB7XG5cdC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuXHRsZXQgaTtcblx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0bGV0IGNoaWxkVk5vZGU7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBvbGRWTm9kZTtcblxuXHRjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cdGxldCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aCxcblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuTGVuZ3RoO1xuXG5cdGxldCBza2V3ID0gMDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IG5ld0NoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGFyZSByZXVzaW5nIHRoZSBjaGlsZFZOb2RlIHZhcmlhYmxlIHRvIGhvbGQgYm90aCB0aGVcblx0XHQvLyBwcmUgYW5kIHBvc3Qgbm9ybWFsaXplZCBjaGlsZFZOb2RlXG5cdFx0Y2hpbGRWTm9kZSA9IHJlbmRlclJlc3VsdFtpXTtcblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUgPT0gbnVsbCB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Jvb2xlYW4nIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnZnVuY3Rpb24nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gbnVsbDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBJZiB0aGlzIG5ld1ZOb2RlIGlzIGJlaW5nIHJldXNlZCAoZS5nLiA8ZGl2PntyZXVzZX17cmV1c2V9PC9kaXY+KSBpbiB0aGUgc2FtZSBkaWZmLFxuXHRcdC8vIG9yIHdlIGFyZSByZW5kZXJpbmcgYSBjb21wb25lbnQgKGUuZy4gc2V0U3RhdGUpIGNvcHkgdGhlIG9sZFZOb2RlcyBzbyBpdCBjYW4gaGF2ZVxuXHRcdC8vIGl0J3Mgb3duIERPTSAmIGV0Yy4gcG9pbnRlcnNcblx0XHRlbHNlIGlmIChcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdzdHJpbmcnIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnbnVtYmVyJyB8fFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2JpZ2ludCcgfHxcblx0XHRcdGNoaWxkVk5vZGUuY29uc3RydWN0b3IgPT0gU3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KGNoaWxkVk5vZGUpKSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHR7IGNoaWxkcmVuOiBjaGlsZFZOb2RlIH0sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjaGlsZFZOb2RlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgJiYgY2hpbGRWTm9kZS5fZGVwdGggPiAwKSB7XG5cdFx0XHQvLyBWTm9kZSBpcyBhbHJlYWR5IGluIHVzZSwgY2xvbmUgaXQuIFRoaXMgY2FuIGhhcHBlbiBpbiB0aGUgZm9sbG93aW5nXG5cdFx0XHQvLyBzY2VuYXJpbzpcblx0XHRcdC8vICAgY29uc3QgcmV1c2UgPSA8ZGl2IC8+XG5cdFx0XHQvLyAgIDxkaXY+e3JldXNlfTxzcGFuIC8+e3JldXNlfTwvZGl2PlxuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnR5cGUsXG5cdFx0XHRcdGNoaWxkVk5vZGUucHJvcHMsXG5cdFx0XHRcdGNoaWxkVk5vZGUua2V5LFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZiA/IGNoaWxkVk5vZGUucmVmIDogbnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZS5fb3JpZ2luYWxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjaGlsZFZOb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZXdlZEluZGV4ID0gaSArIHNrZXc7XG5cdFx0Y2hpbGRWTm9kZS5fcGFyZW50ID0gbmV3UGFyZW50Vk5vZGU7XG5cdFx0Y2hpbGRWTm9kZS5fZGVwdGggPSBuZXdQYXJlbnRWTm9kZS5fZGVwdGggKyAxO1xuXG5cdFx0Ly8gVGVtcG9yYXJpbHkgc3RvcmUgdGhlIG1hdGNoaW5nSW5kZXggb24gdGhlIF9pbmRleCBwcm9wZXJ0eSBzbyB3ZSBjYW4gcHVsbFxuXHRcdC8vIG91dCB0aGUgb2xkVk5vZGUgaW4gZGlmZkNoaWxkcmVuLiBXZSdsbCBvdmVycmlkZSB0aGlzIHRvIHRoZSBWTm9kZSdzXG5cdFx0Ly8gZmluYWwgaW5kZXggYWZ0ZXIgdXNpbmcgdGhpcyBwcm9wZXJ0eSB0byBnZXQgdGhlIG9sZFZOb2RlXG5cdFx0Y29uc3QgbWF0Y2hpbmdJbmRleCA9IChjaGlsZFZOb2RlLl9pbmRleCA9IGZpbmRNYXRjaGluZ0luZGV4KFxuXHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdG9sZENoaWxkcmVuLFxuXHRcdFx0c2tld2VkSW5kZXgsXG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlblxuXHRcdCkpO1xuXG5cdFx0b2xkVk5vZGUgPSBudWxsO1xuXHRcdGlmIChtYXRjaGluZ0luZGV4ICE9PSAtMSkge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblttYXRjaGluZ0luZGV4XTtcblx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuLS07XG5cdFx0XHRpZiAob2xkVk5vZGUpIHtcblx0XHRcdFx0b2xkVk5vZGUuX2ZsYWdzIHw9IE1BVENIRUQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSGVyZSwgd2UgZGVmaW5lIGlzTW91bnRpbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgc2tldyBkaWZmaW5nXG5cdFx0Ly8gYWxnb3JpdGhtLiBOb2RlcyB0aGF0IGFyZSB1bnN1c3BlbmRpbmcgYXJlIGNvbnNpZGVyZWQgbW91bnRpbmcgYW5kIHdlIGRldGVjdFxuXHRcdC8vIHRoaXMgYnkgY2hlY2tpbmcgaWYgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsXG5cdFx0Y29uc3QgaXNNb3VudGluZyA9IG9sZFZOb2RlID09IG51bGwgfHwgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsO1xuXG5cdFx0aWYgKGlzTW91bnRpbmcpIHtcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IC0xKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgYXJlIG1vdW50aW5nIGEgRE9NIFZOb2RlLCBtYXJrIGl0IGZvciBpbnNlcnRpb25cblx0XHRcdGlmICh0eXBlb2YgY2hpbGRWTm9kZS50eXBlICE9ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgfD0gSU5TRVJUX1ZOT0RFO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCAhPT0gc2tld2VkSW5kZXgpIHtcblx0XHRcdC8vIFdoZW4gd2UgbW92ZSBlbGVtZW50cyBhcm91bmQgaS5lLiBbMCwgMSwgMl0gLS0+IFsxLCAwLCAyXVxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMSwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAxIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgMCBhbmQgb3VyIHNrZXcgaXMgMFxuXHRcdFx0Ly8gICAgIHdlIHNldCB0aGUgc2tldyB0byAxIGFzIHdlIGZvdW5kIGFuIG9mZnNldC5cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDAsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMCB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIGF0IDIgYW5kIG91ciBza2V3IGlzIDFcblx0XHRcdC8vICAgICB0aGlzIG1ha2VzIHVzIGluY3JlYXNlIHRoZSBza2V3IGFnYWluLlxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMiwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAyIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgYXQgNCBhbmQgb3VyIHNrZXcgaXMgMlxuXHRcdFx0Ly9cblx0XHRcdC8vIHRoaXMgYmVjb21lcyBhbiBvcHRpbWl6YXRpb24gcXVlc3Rpb24gd2hlcmUgY3VycmVudGx5IHdlIHNlZSBhIDEgZWxlbWVudCBvZmZzZXQgYXMgYW4gaW5zZXJ0aW9uXG5cdFx0XHQvLyBvciBkZWxldGlvbiBpLmUuIHdlIG9wdGltaXplIGZvciBbMCwgMSwgMl0gLS0+IFs5LCAwLCAxLCAyXVxuXHRcdFx0Ly8gd2hpbGUgYSBtb3JlIHRoYW4gMSBvZmZzZXQgd2Ugc2VlIGFzIGEgc3dhcC5cblx0XHRcdC8vIFdlIGNvdWxkIHByb2JhYmx5IGJ1aWxkIGhldXJpc3RpY3MgZm9yIGhhdmluZyBhbiBvcHRpbWl6ZWQgY291cnNlIG9mIGFjdGlvbiBoZXJlIGFzIHdlbGwsIGJ1dFxuXHRcdFx0Ly8gbWlnaHQgZ28gYXQgdGhlIGNvc3Qgb2Ygc29tZSBieXRlcy5cblx0XHRcdC8vXG5cdFx0XHQvLyBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgZm9yIGkuZS4gb25seSBzd2FwcyB3ZSdkIGp1c3QgZG8gdGhlIGxhc3QgdHdvIGNvZGUtYnJhbmNoZXMgYW5kIGhhdmVcblx0XHRcdC8vIG9ubHkgdGhlIGZpcnN0IGl0ZW0gYmUgYSByZS1zY291dGluZyBhbmQgYWxsIHRoZSBvdGhlcnMgZmFsbCBpbiB0aGVpciBza2V3ZWQgY291bnRlci1wYXJ0LlxuXHRcdFx0Ly8gV2UgY291bGQgYWxzbyBmdXJ0aGVyIG9wdGltaXplIGZvciBzd2Fwc1xuXHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPT0gc2tld2VkSW5kZXggLSAxKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA9PSBza2V3ZWRJbmRleCArIDEpIHtcblx0XHRcdFx0c2tldysrO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPiBza2V3ZWRJbmRleCkge1xuXHRcdFx0XHRcdHNrZXctLTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRza2V3Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIHRoaXMgVk5vZGUncyBET00gaWYgdGhlIG9yaWdpbmFsIGluZGV4IChtYXRjaGluZ0luZGV4KSBkb2Vzbid0XG5cdFx0XHRcdC8vIG1hdGNoIHRoZSBuZXcgc2tldyBpbmRleCAoaSArIG5ldyBza2V3KVxuXHRcdFx0XHQvLyBJbiB0aGUgZm9ybWVyIHR3byBicmFuY2hlcyB3ZSBrbm93IHRoYXQgaXQgbWF0Y2hlcyBhZnRlciBza2V3aW5nXG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgcmVtYWluaW5nIG9sZENoaWxkcmVuIGlmIHRoZXJlIGFyZSBhbnkuIExvb3AgZm9yd2FyZHMgc28gdGhhdCBhcyB3ZVxuXHQvLyB1bm1vdW50IERPTSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9sZENoaWxkcmVuLCB3ZSBjYW4gYWRqdXN0IG9sZERvbSB0b1xuXHQvLyBwb2ludCB0byB0aGUgbmV4dCBjaGlsZCwgd2hpY2ggbmVlZHMgdG8gYmUgdGhlIGZpcnN0IERPTSBub2RlIHRoYXQgd29uJ3QgYmVcblx0Ly8gdW5tb3VudGVkLlxuXHRpZiAocmVtYWluaW5nT2xkQ2hpbGRyZW4pIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltpXTtcblx0XHRcdGlmIChvbGRWTm9kZSAhPSBudWxsICYmIChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMCkge1xuXHRcdFx0XHRpZiAob2xkVk5vZGUuX2RvbSA9PSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSkge1xuXHRcdFx0XHRcdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gZ2V0RG9tU2libGluZyhvbGRWTm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR1bm1vdW50KG9sZFZOb2RlLCBvbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbVxuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGluc2VydChwYXJlbnRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pIHtcblx0Ly8gTm90ZTogVk5vZGVzIGluIG5lc3RlZCBzdXNwZW5kZWQgdHJlZXMgbWF5IGJlIG1pc3NpbmcgX2NoaWxkcmVuLlxuXG5cdGlmICh0eXBlb2YgcGFyZW50Vk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bGV0IGNoaWxkcmVuID0gcGFyZW50Vk5vZGUuX2NoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwOyBjaGlsZHJlbiAmJiBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjaGlsZHJlbltpXSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbnRlciB0aGlzIGNvZGUgcGF0aCBvbiBzQ1UgYmFpbG91dCwgd2hlcmUgd2UgY29weVxuXHRcdFx0XHQvLyBvbGRWTm9kZS5fY2hpbGRyZW4gdG8gbmV3Vk5vZGUuX2NoaWxkcmVuLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb2xkXG5cdFx0XHRcdC8vIGNoaWxkcmVuJ3MgX3BhcmVudCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXdWTm9kZSAocGFyZW50Vk5vZGVcblx0XHRcdFx0Ly8gaGVyZSkuXG5cdFx0XHRcdGNoaWxkcmVuW2ldLl9wYXJlbnQgPSBwYXJlbnRWTm9kZTtcblx0XHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkcmVuW2ldLCBvbGREb20sIHBhcmVudERvbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9sZERvbTtcblx0fSBlbHNlIGlmIChwYXJlbnRWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdGlmIChvbGREb20gJiYgcGFyZW50Vk5vZGUudHlwZSAmJiAhcGFyZW50RG9tLmNvbnRhaW5zKG9sZERvbSkpIHtcblx0XHRcdG9sZERvbSA9IGdldERvbVNpYmxpbmcocGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKHBhcmVudFZOb2RlLl9kb20sIG9sZERvbSB8fCBudWxsKTtcblx0XHRvbGREb20gPSBwYXJlbnRWTm9kZS5fZG9tO1xuXHR9XG5cblx0ZG8ge1xuXHRcdG9sZERvbSA9IG9sZERvbSAmJiBvbGREb20ubmV4dFNpYmxpbmc7XG5cdH0gd2hpbGUgKG9sZERvbSAhPSBudWxsICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCk7XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVufSBjaGlsZHJlbiBUaGUgdW5mbGF0dGVuZWQgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsXG4gKiBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGVbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hpbGRBcnJheShjaGlsZHJlbiwgb3V0KSB7XG5cdG91dCA9IG91dCB8fCBbXTtcblx0aWYgKGNoaWxkcmVuID09IG51bGwgfHwgdHlwZW9mIGNoaWxkcmVuID09ICdib29sZWFuJykge1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4uc29tZShjaGlsZCA9PiB7XG5cdFx0XHR0b0NoaWxkQXJyYXkoY2hpbGQsIG91dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0LnB1c2goY2hpbGRyZW4pO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gY2hpbGRWTm9kZVxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdlZEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtYWluaW5nT2xkQ2hpbGRyZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0luZGV4KFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRDaGlsZHJlbixcblx0c2tld2VkSW5kZXgsXG5cdHJlbWFpbmluZ09sZENoaWxkcmVuXG4pIHtcblx0Y29uc3Qga2V5ID0gY2hpbGRWTm9kZS5rZXk7XG5cdGNvbnN0IHR5cGUgPSBjaGlsZFZOb2RlLnR5cGU7XG5cdGxldCB4ID0gc2tld2VkSW5kZXggLSAxO1xuXHRsZXQgeSA9IHNrZXdlZEluZGV4ICsgMTtcblx0bGV0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXG5cdC8vIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGlmIHRoZXJlIGFyZSBtb3JlIGNoaWxkcmVuXG5cdC8vIChyZW1haW5pbmdPbGRDaGlsZHJlbikgdG8gc2VhcmNoLiBIb3dldmVyLCBpZiB0aGUgb2xkVk5vZGUgd2UganVzdCBsb29rZWRcblx0Ly8gYXQgc2tld2VkSW5kZXggd2FzIG5vdCBhbHJlYWR5IHVzZWQgaW4gdGhpcyBkaWZmLCB0aGVuIHRoZXJlIG11c3QgYmUgYXRcblx0Ly8gbGVhc3QgMSBvdGhlciAoc28gZ3JlYXRlciB0aGFuIDEpIHJlbWFpbmluZ09sZENoaWxkcmVuIHRvIGF0dGVtcHQgdG8gbWF0Y2hcblx0Ly8gYWdhaW5zdC4gU28gdGhlIGZvbGxvd2luZyBjb25kaXRpb24gY2hlY2tzIHRoYXQgZW5zdXJpbmdcblx0Ly8gcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAxIGlmIHRoZSBvbGRWTm9kZSBpcyBub3QgYWxyZWFkeSB1c2VkL21hdGNoZWQuIEVsc2Vcblx0Ly8gaWYgdGhlIG9sZFZOb2RlIHdhcyBudWxsIG9yIG1hdGNoZWQsIHRoZW4gdGhlcmUgY291bGQgbmVlZHMgdG8gYmUgYXQgbGVhc3Rcblx0Ly8gMSAoYWthIGByZW1haW5pbmdPbGRDaGlsZHJlbiA+IDBgKSBjaGlsZHJlbiB0byBmaW5kIGFuZCBjb21wYXJlIGFnYWluc3QuXG5cdGxldCBzaG91bGRTZWFyY2ggPVxuXHRcdHJlbWFpbmluZ09sZENoaWxkcmVuID5cblx0XHQob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgPyAxIDogMCk7XG5cblx0aWYgKFxuXHRcdG9sZFZOb2RlID09PSBudWxsIHx8XG5cdFx0KG9sZFZOb2RlICYmXG5cdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlICYmXG5cdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBza2V3ZWRJbmRleDtcblx0fSBlbHNlIGlmIChzaG91bGRTZWFyY2gpIHtcblx0XHR3aGlsZSAoeCA+PSAwIHx8IHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdGlmICh4ID49IDApIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt4XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHg7XG5cdFx0XHRcdH1cblx0XHRcdFx0eC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoeSA8IG9sZENoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3ldO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b2xkVk5vZGUgJiZcblx0XHRcdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgJiZcblx0XHRcdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4geTtcblx0XHRcdFx0fVxuXHRcdFx0XHR5Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuIiwgImltcG9ydCB7XG5cdEVNUFRZX09CSixcblx0TU9ERV9IWURSQVRFLFxuXHRNT0RFX1NVU1BFTkRFRCxcblx0UkVTRVRfTU9ERVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IGRpZmZDaGlsZHJlbiB9IGZyb20gJy4vY2hpbGRyZW4nO1xuaW1wb3J0IHsgc2V0UHJvcGVydHkgfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7IGFzc2lnbiwgaXNBcnJheSwgcmVtb3ZlTm9kZSwgc2xpY2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgYW5kIGFwcGx5IHByb3BlciBjaGFuZ2VzIHRvIHRoZSBET01cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBwYXJlbnQgb2YgdGhlIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0LiBNb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbSBUaGUgY3VycmVudCBhdHRhY2hlZCBET00gZWxlbWVudCBhbnkgbmV3IGRvbVxuICogZWxlbWVudHMgc2hvdWxkIGJlIHBsYWNlZCBhcm91bmQuIExpa2VseSBgbnVsbGAgb24gZmlyc3QgcmVuZGVyIChleGNlcHQgd2hlblxuICogaHlkcmF0aW5nKS4gQ2FuIGJlIGEgc2libGluZyBET00gZWxlbWVudCB3aGVuIGRpZmZpbmcgRnJhZ21lbnRzIHRoYXQgaGF2ZVxuICogc2libGluZ3MuIEluIG1vc3QgY2FzZXMsIGl0IHN0YXJ0cyBvdXQgYXMgYG9sZENoaWxkcmVuWzBdLl9kb21gLlxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmYoXG5cdHBhcmVudERvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IHRtcCxcblx0XHRuZXdUeXBlID0gbmV3Vk5vZGUudHlwZTtcblxuXHQvLyBXaGVuIHBhc3NpbmcgdGhyb3VnaCBjcmVhdGVFbGVtZW50IGl0IGFzc2lnbnMgdGhlIG9iamVjdFxuXHQvLyBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWQuIFRoaXMgdG8gcHJldmVudCBKU09OLWluamVjdGlvbi5cblx0aWYgKG5ld1ZOb2RlLmNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG5cdC8vIElmIHRoZSBwcmV2aW91cyBkaWZmIGJhaWxlZCBvdXQsIHJlc3VtZSBjcmVhdGluZy9oeWRyYXRpbmcuXG5cdGlmIChvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX1NVU1BFTkRFRCkge1xuXHRcdGlzSHlkcmF0aW5nID0gISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKTtcblx0XHRvbGREb20gPSBuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IFtvbGREb21dO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLl9kaWZmKSkgdG1wKG5ld1ZOb2RlKTtcblxuXHRvdXRlcjogaWYgKHR5cGVvZiBuZXdUeXBlID09ICdmdW5jdGlvbicpIHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IGMsIGlzTmV3LCBvbGRQcm9wcywgb2xkU3RhdGUsIHNuYXBzaG90LCBjbGVhclByb2Nlc3NpbmdFeGNlcHRpb247XG5cdFx0XHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblx0XHRcdGNvbnN0IGlzQ2xhc3NDb21wb25lbnQgPVxuXHRcdFx0XHQncHJvdG90eXBlJyBpbiBuZXdUeXBlICYmIG5ld1R5cGUucHJvdG90eXBlLnJlbmRlcjtcblxuXHRcdFx0Ly8gTmVjZXNzYXJ5IGZvciBjcmVhdGVDb250ZXh0IGFwaS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgcGFzc1xuXHRcdFx0Ly8gdGhlIGNvbnRleHQgdmFsdWUgYXMgYHRoaXMuY29udGV4dGAganVzdCBmb3IgdGhpcyBjb21wb25lbnQuXG5cdFx0XHR0bXAgPSBuZXdUeXBlLmNvbnRleHRUeXBlO1xuXHRcdFx0bGV0IHByb3ZpZGVyID0gdG1wICYmIGdsb2JhbENvbnRleHRbdG1wLl9pZF07XG5cdFx0XHRsZXQgY29tcG9uZW50Q29udGV4dCA9IHRtcFxuXHRcdFx0XHQ/IHByb3ZpZGVyXG5cdFx0XHRcdFx0PyBwcm92aWRlci5wcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogdG1wLl9kZWZhdWx0VmFsdWVcblx0XHRcdFx0OiBnbG9iYWxDb250ZXh0O1xuXG5cdFx0XHQvLyBHZXQgY29tcG9uZW50IGFuZCBzZXQgaXQgdG8gYGNgXG5cdFx0XHRpZiAob2xkVk5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0XHRjID0gbmV3Vk5vZGUuX2NvbXBvbmVudCA9IG9sZFZOb2RlLl9jb21wb25lbnQ7XG5cdFx0XHRcdGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wZW5kaW5nRXJyb3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnN0YW50aWF0ZSB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCkge1xuXHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVGhlIGNoZWNrIGFib3ZlIHZlcmlmaWVzIHRoYXQgbmV3VHlwZSBpcyBzdXBwb3NlIHRvIGJlIGNvbnN0cnVjdGVkXG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NvbXBvbmVudCA9IGMgPSBuZXcgbmV3VHlwZShuZXdQcm9wcywgY29tcG9uZW50Q29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVHJ1c3QgbWUsIENvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2Ugd2FudFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IEJhc2VDb21wb25lbnQoXG5cdFx0XHRcdFx0XHRuZXdQcm9wcyxcblx0XHRcdFx0XHRcdGNvbXBvbmVudENvbnRleHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGMuY29uc3RydWN0b3IgPSBuZXdUeXBlO1xuXHRcdFx0XHRcdGMucmVuZGVyID0gZG9SZW5kZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3ZpZGVyKSBwcm92aWRlci5zdWIoYyk7XG5cblx0XHRcdFx0Yy5wcm9wcyA9IG5ld1Byb3BzO1xuXHRcdFx0XHRpZiAoIWMuc3RhdGUpIGMuc3RhdGUgPSB7fTtcblx0XHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdFx0Yy5fZ2xvYmFsQ29udGV4dCA9IGdsb2JhbENvbnRleHQ7XG5cdFx0XHRcdGlzTmV3ID0gYy5fZGlydHkgPSB0cnVlO1xuXHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSW52b2tlIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5fbmV4dFN0YXRlID09IG51bGwpIHtcblx0XHRcdFx0Yy5fbmV4dFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgbmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoYy5fbmV4dFN0YXRlID09IGMuc3RhdGUpIHtcblx0XHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIGMuX25leHRTdGF0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhc3NpZ24oXG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZFByb3BzID0gYy5wcm9wcztcblx0XHRcdG9sZFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdGMuX3Zub2RlID0gbmV3Vk5vZGU7XG5cblx0XHRcdC8vIEludm9rZSBwcmUtcmVuZGVyIGxpZmVjeWNsZSBtZXRob2RzXG5cdFx0XHRpZiAoaXNOZXcpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQ2xhc3NDb21wb25lbnQgJiZcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PSBudWxsICYmXG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5jb21wb25lbnREaWRNb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5jb21wb25lbnREaWRNb3VudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0NsYXNzQ29tcG9uZW50ICYmXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdG5ld1Byb3BzICE9PSBvbGRQcm9wcyAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAhPSBudWxsXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgY29tcG9uZW50Q29udGV4dCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWMuX2ZvcmNlICYmXG5cdFx0XHRcdFx0KChjLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPSBudWxsICYmXG5cdFx0XHRcdFx0XHRjLnNob3VsZENvbXBvbmVudFVwZGF0ZShcblx0XHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRcdGMuX25leHRTdGF0ZSxcblx0XHRcdFx0XHRcdFx0Y29tcG9uZW50Q29udGV4dFxuXHRcdFx0XHRcdFx0KSA9PT0gZmFsc2UpIHx8XG5cdFx0XHRcdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPT09IG9sZFZOb2RlLl9vcmlnaW5hbClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gTW9yZSBpbmZvIGFib3V0IHRoaXMgaGVyZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vSm92aURlQ3Jvb2NrL2JlYzVmMmNlOTM1NDRkMmU2MDcwZWY4ZTAwMzZlNGU4XG5cdFx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9vcmlnaW5hbCAhPT0gb2xkVk5vZGUuX29yaWdpbmFsKSB7XG5cdFx0XHRcdFx0XHQvLyBXaGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBiYWlsIGJlY2F1c2Ugb2Ygc0NVIHdlIGhhdmUgdG8gdXBkYXRlXG5cdFx0XHRcdFx0XHQvLyB0aGUgcHJvcHMsIHN0YXRlIGFuZCBkaXJ0eS1zdGF0ZS5cblx0XHRcdFx0XHRcdC8vIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBzdHJpY3QtZXF1YWxpdHkgd2UgZG9uJ3QgYXMgdGhlIGNoaWxkIGNvdWxkIHN0aWxsXG5cdFx0XHRcdFx0XHQvLyBiZSBkaXJ0aWVkIHNlZSAjMzg4M1xuXHRcdFx0XHRcdFx0Yy5wcm9wcyA9IG5ld1Byb3BzO1xuXHRcdFx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0XHRcdGMuX2RpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbi5zb21lKHZub2RlID0+IHtcblx0XHRcdFx0XHRcdGlmICh2bm9kZSkgdm5vZGUuX3BhcmVudCA9IG5ld1ZOb2RlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjLl9zdGF0ZUNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjLl9zdGF0ZUNhbGxiYWNrcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbW1pdFF1ZXVlLnB1c2goYyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWsgb3V0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnRXaWxsVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIGMuX25leHRTdGF0ZSwgY29tcG9uZW50Q29udGV4dCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCAmJiBjLmNvbXBvbmVudERpZFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0Yy5jb21wb25lbnREaWRVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdGMuX3BhcmVudERvbSA9IHBhcmVudERvbTtcblx0XHRcdGMuX2ZvcmNlID0gZmFsc2U7XG5cblx0XHRcdGxldCByZW5kZXJIb29rID0gb3B0aW9ucy5fcmVuZGVyLFxuXHRcdFx0XHRjb3VudCA9IDA7XG5cdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCkge1xuXHRcdFx0XHRjLnN0YXRlID0gYy5fbmV4dFN0YXRlO1xuXHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChyZW5kZXJIb29rKSByZW5kZXJIb29rKG5ld1ZOb2RlKTtcblxuXHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYy5fc3RhdGVDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MucHVzaChjLl9zdGF0ZUNhbGxiYWNrc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZW5kZXJIb29rKSByZW5kZXJIb29rKG5ld1ZOb2RlKTtcblxuXHRcdFx0XHRcdHRtcCA9IGMucmVuZGVyKGMucHJvcHMsIGMuc3RhdGUsIGMuY29udGV4dCk7XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgc2V0U3RhdGUgY2FsbGVkIGluIHJlbmRlciwgc2VlICMyNTUzXG5cdFx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0fSB3aGlsZSAoYy5fZGlydHkgJiYgKytjb3VudCA8IDI1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblxuXHRcdFx0aWYgKGMuZ2V0Q2hpbGRDb250ZXh0ICE9IG51bGwpIHtcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCA9IGFzc2lnbihhc3NpZ24oe30sIGdsb2JhbENvbnRleHQpLCBjLmdldENoaWxkQ29udGV4dCgpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgIWlzTmV3ICYmIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRzbmFwc2hvdCA9IGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGlzVG9wTGV2ZWxGcmFnbWVudCA9XG5cdFx0XHRcdHRtcCAhPSBudWxsICYmIHRtcC50eXBlID09PSBGcmFnbWVudCAmJiB0bXAua2V5ID09IG51bGw7XG5cdFx0XHRsZXQgcmVuZGVyUmVzdWx0ID0gaXNUb3BMZXZlbEZyYWdtZW50ID8gdG1wLnByb3BzLmNoaWxkcmVuIDogdG1wO1xuXG5cdFx0XHRkaWZmQ2hpbGRyZW4oXG5cdFx0XHRcdHBhcmVudERvbSxcblx0XHRcdFx0aXNBcnJheShyZW5kZXJSZXN1bHQpID8gcmVuZGVyUmVzdWx0IDogW3JlbmRlclJlc3VsdF0sXG5cdFx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0XHRvbGRWTm9kZSxcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdG9sZERvbSxcblx0XHRcdFx0aXNIeWRyYXRpbmcsXG5cdFx0XHRcdHJlZlF1ZXVlXG5cdFx0XHQpO1xuXG5cdFx0XHRjLmJhc2UgPSBuZXdWTm9kZS5fZG9tO1xuXG5cdFx0XHQvLyBXZSBzdWNjZXNzZnVsbHkgcmVuZGVyZWQgdGhpcyBWTm9kZSwgdW5zZXQgYW55IHN0b3JlZCBoeWRyYXRpb24vYmFpbG91dCBzdGF0ZTpcblx0XHRcdG5ld1ZOb2RlLl9mbGFncyAmPSBSRVNFVF9NT0RFO1xuXG5cdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHRcdGMuX3BlbmRpbmdFcnJvciA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9IG51bGw7XG5cdFx0XHQvLyBpZiBoeWRyYXRpbmcgb3IgY3JlYXRpbmcgaW5pdGlhbCB0cmVlLCBiYWlsb3V0IHByZXNlcnZlcyBET006XG5cdFx0XHRpZiAoaXNIeWRyYXRpbmcgfHwgZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRuZXdWTm9kZS5fZmxhZ3MgfD0gaXNIeWRyYXRpbmdcblx0XHRcdFx0XHQ/IE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEXG5cdFx0XHRcdFx0OiBNT0RFX1NVU1BFTkRFRDtcblxuXHRcdFx0XHR3aGlsZSAob2xkRG9tICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCAmJiBvbGREb20ubmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0XHRvbGREb20gPSBvbGREb20ubmV4dFNpYmxpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5bZXhjZXNzRG9tQ2hpbGRyZW4uaW5kZXhPZihvbGREb20pXSA9IG51bGw7XG5cdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGREb207XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0fVxuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBuZXdWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9PSBudWxsICYmXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID09PSBvbGRWTm9kZS5fb3JpZ2luYWxcblx0KSB7XG5cdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZOb2RlLl9kb20gPSBkaWZmRWxlbWVudE5vZGVzKFxuXHRcdFx0b2xkVk5vZGUuX2RvbSxcblx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLmRpZmZlZCkpIHRtcChuZXdWTm9kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHNcbiAqIHdoaWNoIGhhdmUgY2FsbGJhY2tzIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ZOb2RlfSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXRSb290KGNvbW1pdFF1ZXVlLCByb290LCByZWZRdWV1ZSkge1xuXHRyb290Ll9uZXh0RG9tID0gdW5kZWZpbmVkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmVmUXVldWUubGVuZ3RoOyBpKyspIHtcblx0XHRhcHBseVJlZihyZWZRdWV1ZVtpXSwgcmVmUXVldWVbKytpXSwgcmVmUXVldWVbKytpXSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5fY29tbWl0KSBvcHRpb25zLl9jb21taXQocm9vdCwgY29tbWl0UXVldWUpO1xuXG5cdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgUmV1c2UgdGhlIGNvbW1pdFF1ZXVlIHZhcmlhYmxlIGhlcmUgc28gdGhlIHR5cGUgY2hhbmdlc1xuXHRcdFx0Y29tbWl0UXVldWUgPSBjLl9yZW5kZXJDYWxsYmFja3M7XG5cdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoY2IgPT4ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFNlZSBhYm92ZSBjb21tZW50IG9uIGNvbW1pdFF1ZXVlXG5cdFx0XHRcdGNiLmNhbGwoYyk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIGMuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgcmVwcmVzZW50aW5nIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSB2aXJ0dWFsIG5vZGVzXG4gKiBiZWluZyBkaWZmZWRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1ZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgQ3VycmVudCBuYW1lc3BhY2Ugb2YgdGhlIERPTSBub2RlIChIVE1MLCBTVkcsIG9yIE1hdGhNTClcbiAqIEBwYXJhbSB7QXJyYXk8UHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50cyB3aGljaCBoYXZlIGNhbGxiYWNrc1xuICogdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKiBAcmV0dXJucyB7UHJlYWN0RWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZGlmZkVsZW1lbnROb2Rlcyhcblx0ZG9tLFxuXHRuZXdWTm9kZSxcblx0b2xkVk5vZGUsXG5cdGdsb2JhbENvbnRleHQsXG5cdG5hbWVzcGFjZSxcblx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdGNvbW1pdFF1ZXVlLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHRsZXQgb2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcztcblx0bGV0IG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7XG5cdGxldCBub2RlVHlwZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobmV3Vk5vZGUudHlwZSk7XG5cdC8qKiBAdHlwZSB7YW55fSAqL1xuXHRsZXQgaTtcblx0LyoqIEB0eXBlIHt7IF9faHRtbD86IHN0cmluZyB9fSAqL1xuXHRsZXQgbmV3SHRtbDtcblx0LyoqIEB0eXBlIHt7IF9faHRtbD86IHN0cmluZyB9fSAqL1xuXHRsZXQgb2xkSHRtbDtcblx0LyoqIEB0eXBlIHtDb21wb25lbnRDaGlsZHJlbn0gKi9cblx0bGV0IG5ld0NoaWxkcmVuO1xuXHRsZXQgdmFsdWU7XG5cdGxldCBpbnB1dFZhbHVlO1xuXHRsZXQgY2hlY2tlZDtcblxuXHQvLyBUcmFja3MgZW50ZXJpbmcgYW5kIGV4aXRpbmcgbmFtZXNwYWNlcyB3aGVuIGRlc2NlbmRpbmcgdGhyb3VnaCB0aGUgdHJlZS5cblx0aWYgKG5vZGVUeXBlID09PSAnc3ZnJykgbmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcblx0ZWxzZSBpZiAobm9kZVR5cGUgPT09ICdtYXRoJylcblx0XHRuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG5cdGVsc2UgaWYgKCFuYW1lc3BhY2UpIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcblxuXHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGZvciAoaSA9IDA7IGkgPCBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWUgPSBleGNlc3NEb21DaGlsZHJlbltpXTtcblxuXHRcdFx0Ly8gaWYgbmV3Vk5vZGUgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuIG9yIHRoZSBgZG9tYFxuXHRcdFx0Ly8gYXJndW1lbnQgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuLCByZW1vdmUgaXQgZnJvbVxuXHRcdFx0Ly8gZXhjZXNzRG9tQ2hpbGRyZW4gc28gaXQgaXNuJ3QgbGF0ZXIgcmVtb3ZlZCBpbiBkaWZmQ2hpbGRyZW5cblx0XHRcdGlmIChcblx0XHRcdFx0dmFsdWUgJiZcblx0XHRcdFx0J3NldEF0dHJpYnV0ZScgaW4gdmFsdWUgPT09ICEhbm9kZVR5cGUgJiZcblx0XHRcdFx0KG5vZGVUeXBlID8gdmFsdWUubG9jYWxOYW1lID09PSBub2RlVHlwZSA6IHZhbHVlLm5vZGVUeXBlID09PSAzKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbSA9IHZhbHVlO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChkb20gPT0gbnVsbCkge1xuXHRcdGlmIChub2RlVHlwZSA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHRkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG5cdFx0XHRuYW1lc3BhY2UsXG5cdFx0XHRub2RlVHlwZSxcblx0XHRcdG5ld1Byb3BzLmlzICYmIG5ld1Byb3BzXG5cdFx0KTtcblxuXHRcdC8vIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBub2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoaXMgaXMgYSBuZXcgc3VidHJlZSAoaW5cblx0XHQvLyBjYXNlIHdlIGFyZSBoeWRyYXRpbmcpLCB0aGlzIGRlb3B0cyB0aGUgaHlkcmF0ZVxuXHRcdGlmIChpc0h5ZHJhdGluZykge1xuXHRcdFx0aWYgKG9wdGlvbnMuX2h5ZHJhdGlvbk1pc21hdGNoKVxuXHRcdFx0XHRvcHRpb25zLl9oeWRyYXRpb25NaXNtYXRjaChuZXdWTm9kZSwgZXhjZXNzRG9tQ2hpbGRyZW4pO1xuXHRcdFx0aXNIeWRyYXRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gd2UgY3JlYXRlZCBhIG5ldyBwYXJlbnQsIHNvIG5vbmUgb2YgdGhlIHByZXZpb3VzbHkgYXR0YWNoZWQgY2hpbGRyZW4gY2FuIGJlIHJldXNlZDpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IG51bGw7XG5cdH1cblxuXHRpZiAobm9kZVR5cGUgPT09IG51bGwpIHtcblx0XHQvLyBEdXJpbmcgaHlkcmF0aW9uLCB3ZSBzdGlsbCBoYXZlIHRvIHNwbGl0IG1lcmdlZCB0ZXh0IGZyb20gU1NSJ2QgSFRNTC5cblx0XHRpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzICYmICghaXNIeWRyYXRpbmcgfHwgZG9tLmRhdGEgIT09IG5ld1Byb3BzKSkge1xuXHRcdFx0ZG9tLmRhdGEgPSBuZXdQcm9wcztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgZXhjZXNzRG9tQ2hpbGRyZW4gd2FzIG5vdCBudWxsLCByZXBvcHVsYXRlIGl0IHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCdzIGNoaWxkcmVuOlxuXHRcdGV4Y2Vzc0RvbUNoaWxkcmVuID0gZXhjZXNzRG9tQ2hpbGRyZW4gJiYgc2xpY2UuY2FsbChkb20uY2hpbGROb2Rlcyk7XG5cblx0XHRvbGRQcm9wcyA9IG9sZFZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjtcblxuXHRcdC8vIElmIHdlIGFyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBhcmUgbm90IGh5ZHJhdGluZyBidXQgYXJlIHVzaW5nXG5cdFx0Ly8gZXhpc3RpbmcgRE9NIChlLmcuIHJlcGxhY2VOb2RlKSB3ZSBzaG91bGQgcmVhZCB0aGUgZXhpc3RpbmcgRE9NXG5cdFx0Ly8gYXR0cmlidXRlcyB0byBkaWZmIHRoZW1cblx0XHRpZiAoIWlzSHlkcmF0aW5nICYmIGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdG9sZFByb3BzID0ge307XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZG9tLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFsdWUgPSBkb20uYXR0cmlidXRlc1tpXTtcblx0XHRcdFx0b2xkUHJvcHNbdmFsdWUubmFtZV0gPSB2YWx1ZS52YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gb2xkUHJvcHMpIHtcblx0XHRcdHZhbHVlID0gb2xkUHJvcHNbaV07XG5cdFx0XHRpZiAoaSA9PSAnY2hpbGRyZW4nKSB7XG5cdFx0XHR9IGVsc2UgaWYgKGkgPT0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJykge1xuXHRcdFx0XHRvbGRIdG1sID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKCEoaSBpbiBuZXdQcm9wcykpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChpID09ICd2YWx1ZScgJiYgJ2RlZmF1bHRWYWx1ZScgaW4gbmV3UHJvcHMpIHx8XG5cdFx0XHRcdFx0KGkgPT0gJ2NoZWNrZWQnICYmICdkZWZhdWx0Q2hlY2tlZCcgaW4gbmV3UHJvcHMpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldFByb3BlcnR5KGRvbSwgaSwgbnVsbCwgdmFsdWUsIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgcHJvcHMgYXJlIG5vdCBkaWZmZWQgYXQgYWxsIChpbmNsdWRpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpXG5cdFx0Ly8gQFRPRE8gd2Ugc2hvdWxkIHdhcm4gaW4gZGVidWcgbW9kZSB3aGVuIHByb3BzIGRvbid0IG1hdGNoIGhlcmUuXG5cdFx0Zm9yIChpIGluIG5ld1Byb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG5ld1Byb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0XHRuZXdDaGlsZHJlbiA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0bmV3SHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICd2YWx1ZScpIHtcblx0XHRcdFx0aW5wdXRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdjaGVja2VkJykge1xuXHRcdFx0XHRjaGVja2VkID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoIWlzSHlkcmF0aW5nIHx8IHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRvbGRQcm9wc1tpXSAhPT0gdmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIHZhbHVlLCBvbGRQcm9wc1tpXSwgbmFtZXNwYWNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmV3IHZub2RlIGRpZG4ndCBoYXZlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLCBkaWZmIGl0cyBjaGlsZHJlblxuXHRcdGlmIChuZXdIdG1sKSB7XG5cdFx0XHQvLyBBdm9pZCByZS1hcHBseWluZyB0aGUgc2FtZSAnX19odG1sJyBpZiBpdCBkaWQgbm90IGNoYW5nZWQgYmV0d2VlbiByZS1yZW5kZXJcblx0XHRcdGlmIChcblx0XHRcdFx0IWlzSHlkcmF0aW5nICYmXG5cdFx0XHRcdCghb2xkSHRtbCB8fFxuXHRcdFx0XHRcdChuZXdIdG1sLl9faHRtbCAhPT0gb2xkSHRtbC5fX2h0bWwgJiZcblx0XHRcdFx0XHRcdG5ld0h0bWwuX19odG1sICE9PSBkb20uaW5uZXJIVE1MKSlcblx0XHRcdCkge1xuXHRcdFx0XHRkb20uaW5uZXJIVE1MID0gbmV3SHRtbC5fX2h0bWw7XG5cdFx0XHR9XG5cblx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob2xkSHRtbCkgZG9tLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRkaWZmQ2hpbGRyZW4oXG5cdFx0XHRcdGRvbSxcblx0XHRcdFx0aXNBcnJheShuZXdDaGlsZHJlbikgPyBuZXdDaGlsZHJlbiA6IFtuZXdDaGlsZHJlbl0sXG5cdFx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0XHRvbGRWTm9kZSxcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdFx0bm9kZVR5cGUgPT09ICdmb3JlaWduT2JqZWN0J1xuXHRcdFx0XHRcdD8gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnXG5cdFx0XHRcdFx0OiBuYW1lc3BhY2UsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5cblx0XHRcdFx0XHQ/IGV4Y2Vzc0RvbUNoaWxkcmVuWzBdXG5cdFx0XHRcdFx0OiBvbGRWTm9kZS5fY2hpbGRyZW4gJiYgZ2V0RG9tU2libGluZyhvbGRWTm9kZSwgMCksXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gUmVtb3ZlIGNoaWxkcmVuIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGFueSB2bm9kZS5cblx0XHRcdGlmIChleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRcdGZvciAoaSA9IGV4Y2Vzc0RvbUNoaWxkcmVuLmxlbmd0aDsgaS0tOyApIHtcblx0XHRcdFx0XHRyZW1vdmVOb2RlKGV4Y2Vzc0RvbUNoaWxkcmVuW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFzIGFib3ZlLCBkb24ndCBkaWZmIHByb3BzIGR1cmluZyBoeWRyYXRpb25cblx0XHRpZiAoIWlzSHlkcmF0aW5nKSB7XG5cdFx0XHRpID0gJ3ZhbHVlJztcblx0XHRcdGlmIChub2RlVHlwZSA9PT0gJ3Byb2dyZXNzJyAmJiBpbnB1dFZhbHVlID09IG51bGwpIHtcblx0XHRcdFx0ZG9tLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQvLyAjMjc1NiBGb3IgdGhlIDxwcm9ncmVzcz4tZWxlbWVudCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyAwLFxuXHRcdFx0XHQvLyBkZXNwaXRlIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nIHByZXNlbnQuIFdoZW4gdGhlIGF0dHJpYnV0ZVxuXHRcdFx0XHQvLyBpcyBtaXNzaW5nIHRoZSBwcm9ncmVzcyBiYXIgaXMgdHJlYXRlZCBhcyBpbmRldGVybWluYXRlLlxuXHRcdFx0XHQvLyBUbyBmaXggdGhhdCB3ZSdsbCBhbHdheXMgdXBkYXRlIGl0IHdoZW4gaXQgaXMgMCBmb3IgcHJvZ3Jlc3MgZWxlbWVudHNcblx0XHRcdFx0KGlucHV0VmFsdWUgIT09IGRvbVtpXSB8fFxuXHRcdFx0XHRcdChub2RlVHlwZSA9PT0gJ3Byb2dyZXNzJyAmJiAhaW5wdXRWYWx1ZSkgfHxcblx0XHRcdFx0XHQvLyBUaGlzIGlzIG9ubHkgZm9yIElFIDExIHRvIGZpeCA8c2VsZWN0PiB2YWx1ZSBub3QgYmVpbmcgdXBkYXRlZC5cblx0XHRcdFx0XHQvLyBUbyBhdm9pZCBhIHN0YWxlIHNlbGVjdCB2YWx1ZSB3ZSBuZWVkIHRvIHNldCB0aGUgb3B0aW9uLnZhbHVlXG5cdFx0XHRcdFx0Ly8gYWdhaW4sIHdoaWNoIHRyaWdnZXJzIElFMTEgdG8gcmUtZXZhbHVhdGUgdGhlIHNlbGVjdCB2YWx1ZVxuXHRcdFx0XHRcdChub2RlVHlwZSA9PT0gJ29wdGlvbicgJiYgaW5wdXRWYWx1ZSAhPT0gb2xkUHJvcHNbaV0pKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNldFByb3BlcnR5KGRvbSwgaSwgaW5wdXRWYWx1ZSwgb2xkUHJvcHNbaV0sIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSAnY2hlY2tlZCc7XG5cdFx0XHRpZiAoY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIGNoZWNrZWQgIT09IGRvbVtpXSkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGNoZWNrZWQsIG9sZFByb3BzW2ldLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkb207XG59XG5cbi8qKlxuICogSW52b2tlIG9yIHVwZGF0ZSBhIHJlZiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgYSBmdW5jdGlvbiBvciBvYmplY3QgcmVmLlxuICogQHBhcmFtIHtSZWY8YW55PiAmIHsgX3VubW91bnQ/OiB1bmtub3duIH19IHJlZlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSZWYocmVmLCB2YWx1ZSwgdm5vZGUpIHtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIHJlZiA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRsZXQgaGFzUmVmVW5tb3VudCA9IHR5cGVvZiByZWYuX3VubW91bnQgPT0gJ2Z1bmN0aW9uJztcblx0XHRcdGlmIChoYXNSZWZVbm1vdW50KSB7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgVFMgZG9lc24ndCBsaWtlIG1vdmluZyBuYXJyb3dpbmcgY2hlY2tzIGludG8gdmFyaWFibGVzXG5cdFx0XHRcdHJlZi5fdW5tb3VudCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1JlZlVubW91bnQgfHwgdmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgY2xlYW51cCBmdW5jdGlvbiBvbiB0aGUgZnVuY3Rpb25cblx0XHRcdFx0Ly8gaW5zdGFuY2Ugb2JqZWN0IGl0c2VsZiB0byBhdm9pZCBzaGFwZVxuXHRcdFx0XHQvLyB0cmFuc2l0aW9uaW5nIHZub2RlXG5cdFx0XHRcdHJlZi5fdW5tb3VudCA9IHJlZih2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHJlZi5jdXJyZW50ID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFVubW91bnQgYSB2aXJ0dWFsIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgYXBwbHkgRE9NIGNoYW5nZXNcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gdW5tb3VudFxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGUgVGhlIHBhcmVudCBvZiB0aGUgVk5vZGUgdGhhdCBpbml0aWF0ZWQgdGhlIHVubW91bnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBSZW1vdmVdIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIHBhcmVudCBub2RlIG9mIHRoZVxuICogY3VycmVudCBlbGVtZW50IGlzIGFscmVhZHkgZGV0YWNoZWQgZnJvbSB0aGUgRE9NLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudCh2bm9kZSwgcGFyZW50Vk5vZGUsIHNraXBSZW1vdmUpIHtcblx0bGV0IHI7XG5cdGlmIChvcHRpb25zLnVubW91bnQpIG9wdGlvbnMudW5tb3VudCh2bm9kZSk7XG5cblx0aWYgKChyID0gdm5vZGUucmVmKSkge1xuXHRcdGlmICghci5jdXJyZW50IHx8IHIuY3VycmVudCA9PT0gdm5vZGUuX2RvbSkge1xuXHRcdFx0YXBwbHlSZWYociwgbnVsbCwgcGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jb21wb25lbnQpICE9IG51bGwpIHtcblx0XHRpZiAoci5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHBhcmVudFZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyLmJhc2UgPSByLl9wYXJlbnREb20gPSBudWxsO1xuXHR9XG5cblx0aWYgKChyID0gdm5vZGUuX2NoaWxkcmVuKSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHJbaV0pIHtcblx0XHRcdFx0dW5tb3VudChcblx0XHRcdFx0XHRyW2ldLFxuXHRcdFx0XHRcdHBhcmVudFZOb2RlLFxuXHRcdFx0XHRcdHNraXBSZW1vdmUgfHwgdHlwZW9mIHZub2RlLnR5cGUgIT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICghc2tpcFJlbW92ZSkge1xuXHRcdHJlbW92ZU5vZGUodm5vZGUuX2RvbSk7XG5cdH1cblxuXHQvLyBNdXN0IGJlIHNldCB0byBgdW5kZWZpbmVkYCB0byBwcm9wZXJseSBjbGVhbiB1cCBgX25leHREb21gXG5cdC8vIGZvciB3aGljaCBgbnVsbGAgaXMgYSB2YWxpZCB2YWx1ZS4gU2VlIGNvbW1lbnQgaW4gYGNyZWF0ZS1lbGVtZW50LmpzYFxuXHR2bm9kZS5fY29tcG9uZW50ID0gdm5vZGUuX3BhcmVudCA9IHZub2RlLl9kb20gPSB2bm9kZS5fbmV4dERvbSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBgLnJlbmRlcigpYCBtZXRob2QgZm9yIGEgUEZDIGJhY2tpbmcgaW5zdGFuY2UuICovXG5mdW5jdGlvbiBkb1JlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpO1xufVxuIiwgImltcG9ydCB7IEVNUFRZX09CSiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbW1pdFJvb3QsIGRpZmYgfSBmcm9tICcuL2RpZmYvaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgRnJhZ21lbnQgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogUmVuZGVyIGEgUHJlYWN0IHZpcnR1YWwgbm9kZSBpbnRvIGEgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG9cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudCB8IG9iamVjdH0gW3JlcGxhY2VOb2RlXSBPcHRpb25hbDogQXR0ZW1wdCB0byByZS11c2UgYW5cbiAqIGV4aXN0aW5nIERPTSB0cmVlIHJvb3RlZCBhdCBgcmVwbGFjZU5vZGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudERvbSwgcmVwbGFjZU5vZGUpIHtcblx0aWYgKG9wdGlvbnMuX3Jvb3QpIG9wdGlvbnMuX3Jvb3Qodm5vZGUsIHBhcmVudERvbSk7XG5cblx0Ly8gV2UgYWJ1c2UgdGhlIGByZXBsYWNlTm9kZWAgcGFyYW1ldGVyIGluIGBoeWRyYXRlKClgIHRvIHNpZ25hbCBpZiB3ZSBhcmUgaW5cblx0Ly8gaHlkcmF0aW9uIG1vZGUgb3Igbm90IGJ5IHBhc3NpbmcgdGhlIGBoeWRyYXRlYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgRE9NXG5cdC8vIGVsZW1lbnQuLlxuXHRsZXQgaXNIeWRyYXRpbmcgPSB0eXBlb2YgcmVwbGFjZU5vZGUgPT0gJ2Z1bmN0aW9uJztcblxuXHQvLyBUbyBiZSBhYmxlIHRvIHN1cHBvcnQgY2FsbGluZyBgcmVuZGVyKClgIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lXG5cdC8vIERPTSBub2RlLCB3ZSBuZWVkIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgdHJlZS4gV2UgZG9cblx0Ly8gdGhpcyBieSBhc3NpZ25pbmcgYSBuZXcgYF9jaGlsZHJlbmAgcHJvcGVydHkgdG8gRE9NIG5vZGVzIHdoaWNoIHBvaW50c1xuXHQvLyB0byB0aGUgbGFzdCByZW5kZXJlZCB0cmVlLiBCeSBkZWZhdWx0IHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIHdoaWNoXG5cdC8vIG1lYW5zIHRoYXQgd2UgYXJlIG1vdW50aW5nIGEgbmV3IHRyZWUgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgb2xkVk5vZGUgPSBpc0h5ZHJhdGluZ1xuXHRcdD8gbnVsbFxuXHRcdDogKHJlcGxhY2VOb2RlICYmIHJlcGxhY2VOb2RlLl9jaGlsZHJlbikgfHwgcGFyZW50RG9tLl9jaGlsZHJlbjtcblxuXHR2bm9kZSA9ICgoIWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlKSB8fCBwYXJlbnREb20pLl9jaGlsZHJlbiA9XG5cdFx0Y3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgW3Zub2RlXSk7XG5cblx0Ly8gTGlzdCBvZiBlZmZlY3RzIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlmZmluZy5cblx0bGV0IGNvbW1pdFF1ZXVlID0gW10sXG5cdFx0cmVmUXVldWUgPSBbXTtcblx0ZGlmZihcblx0XHRwYXJlbnREb20sXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSBuZXcgdm5vZGUgdHJlZSBhbmQgc3RvcmUgaXQgb24gdGhlIERPTSBlbGVtZW50IG9uXG5cdFx0Ly8gb3VyIGN1c3RvbSBgX2NoaWxkcmVuYCBwcm9wZXJ0eS5cblx0XHR2bm9kZSxcblx0XHRvbGRWTm9kZSB8fCBFTVBUWV9PQkosXG5cdFx0RU1QVFlfT0JKLFxuXHRcdHBhcmVudERvbS5uYW1lc3BhY2VVUkksXG5cdFx0IWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlXG5cdFx0XHQ/IFtyZXBsYWNlTm9kZV1cblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdFx0PyBudWxsXG5cdFx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGRcblx0XHRcdFx0XHQ/IHNsaWNlLmNhbGwocGFyZW50RG9tLmNoaWxkTm9kZXMpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdGNvbW1pdFF1ZXVlLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyByZXBsYWNlTm9kZVxuXHRcdFx0OiBvbGRWTm9kZVxuXHRcdFx0XHQ/IG9sZFZOb2RlLl9kb21cblx0XHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZCxcblx0XHRpc0h5ZHJhdGluZyxcblx0XHRyZWZRdWV1ZVxuXHQpO1xuXG5cdC8vIEZsdXNoIGFsbCBxdWV1ZWQgZWZmZWN0c1xuXHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCB2bm9kZSwgcmVmUXVldWUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBET00gZWxlbWVudCB3aXRoIGRhdGEgZnJvbSBhIFByZWFjdCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gdXBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnREb20pIHtcblx0cmVuZGVyKHZub2RlLCBwYXJlbnREb20sIGh5ZHJhdGUpO1xufVxuIiwgImltcG9ydCB7IGFzc2lnbiwgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcblxuLyoqXG4gKiBDbG9uZXMgdGhlIGdpdmVuIFZOb2RlLCBvcHRpb25hbGx5IGFkZGluZyBhdHRyaWJ1dGVzL3Byb3BzIGFuZCByZXBsYWNpbmcgaXRzXG4gKiBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIERPTSBlbGVtZW50IHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgQXR0cmlidXRlcy9wcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkXG4gKiBhcyByZXBsYWNlbWVudCBjaGlsZHJlbi5cbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBhc3NpZ24oe30sIHZub2RlLnByb3BzKSxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdGk7XG5cblx0bGV0IGRlZmF1bHRQcm9wcztcblxuXHRpZiAodm5vZGUudHlwZSAmJiB2bm9kZS50eXBlLmRlZmF1bHRQcm9wcykge1xuXHRcdGRlZmF1bHRQcm9wcyA9IHZub2RlLnR5cGUuZGVmYXVsdFByb3BzO1xuXHR9XG5cblx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0aWYgKGkgPT0gJ2tleScpIGtleSA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKGkgPT0gJ3JlZicpIHJlZiA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKHByb3BzW2ldID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IGRlZmF1bHRQcm9wc1tpXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcHJvcHNbaV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNoaWxkcmVuID1cblx0XHRcdGFyZ3VtZW50cy5sZW5ndGggPiAzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogY2hpbGRyZW47XG5cdH1cblxuXHRyZXR1cm4gY3JlYXRlVk5vZGUoXG5cdFx0dm5vZGUudHlwZSxcblx0XHRub3JtYWxpemVkUHJvcHMsXG5cdFx0a2V5IHx8IHZub2RlLmtleSxcblx0XHRyZWYgfHwgdm5vZGUucmVmLFxuXHRcdG51bGxcblx0KTtcbn1cbiIsICIvKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgZXJyb3IgYm91bmRhcnkgdG8gYSB0aHJvd24gZXJyb3IgYW5kIGNhbGwgaXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBlcnJvciBUaGUgdGhyb3duIHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdGhhdCB0aHJldyB0aGUgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IChleGNlcHRcbiAqIGZvciB1bm1vdW50aW5nIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGhpZ2hlc3QgcGFyZW50IHRoYXQgd2FzIGJlaW5nXG4gKiB1bm1vdW50ZWQpXG4gKiBAcGFyYW0ge1ZOb2RlfSBbb2xkVk5vZGVdXG4gKiBAcGFyYW0ge0Vycm9ySW5mb30gW2Vycm9ySW5mb11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jYXRjaEVycm9yKGVycm9yLCB2bm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbykge1xuXHQvKiogQHR5cGUge0NvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCxcblx0XHQvKiogQHR5cGUge0NvbXBvbmVudFR5cGV9ICovXG5cdFx0Y3Rvcixcblx0XHQvKiogQHR5cGUge2Jvb2xlYW59ICovXG5cdFx0aGFuZGxlZDtcblxuXHRmb3IgKDsgKHZub2RlID0gdm5vZGUuX3BhcmVudCk7ICkge1xuXHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgIWNvbXBvbmVudC5fcHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y3RvciA9IGNvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuXHRcdFx0XHRpZiAoY3RvciAmJiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50LnNldFN0YXRlKGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyB8fCB7fSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGlzIGlzIGFuIGVycm9yIGJvdW5kYXJ5LiBNYXJrIGl0IGFzIGhhdmluZyBiYWlsZWQgb3V0LCBhbmQgd2hldGhlciBpdCB3YXMgbWlkLWh5ZHJhdGlvbi5cblx0XHRcdFx0aWYgKGhhbmRsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGNvbXBvbmVudC5fcGVuZGluZ0Vycm9yID0gY29tcG9uZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgZXJyb3I7XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9ucyBhcyBfb3B0aW9ucyB9IGZyb20gJ3ByZWFjdCc7XG5cbi8qKiBAdHlwZSB7bnVtYmVyfSAqL1xubGV0IGN1cnJlbnRJbmRleDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5sZXQgY3VycmVudENvbXBvbmVudDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5sZXQgcHJldmlvdXNDb21wb25lbnQ7XG5cbi8qKiBAdHlwZSB7bnVtYmVyfSAqL1xubGV0IGN1cnJlbnRIb29rID0gMDtcblxuLyoqIEB0eXBlIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnQ+fSAqL1xubGV0IGFmdGVyUGFpbnRFZmZlY3RzID0gW107XG5cbi8vIENhc3QgdG8gdXNlIGludGVybmFsIE9wdGlvbnMgdHlwZVxuY29uc3Qgb3B0aW9ucyA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuT3B0aW9uc30gKi8gKF9vcHRpb25zKTtcblxubGV0IG9sZEJlZm9yZURpZmYgPSBvcHRpb25zLl9kaWZmO1xubGV0IG9sZEJlZm9yZVJlbmRlciA9IG9wdGlvbnMuX3JlbmRlcjtcbmxldCBvbGRBZnRlckRpZmYgPSBvcHRpb25zLmRpZmZlZDtcbmxldCBvbGRDb21taXQgPSBvcHRpb25zLl9jb21taXQ7XG5sZXQgb2xkQmVmb3JlVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbmxldCBvbGRSb290ID0gb3B0aW9ucy5fcm9vdDtcblxuY29uc3QgUkFGX1RJTUVPVVQgPSAxMDA7XG5sZXQgcHJldlJhZjtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdGlmIChvbGRCZWZvcmVEaWZmKSBvbGRCZWZvcmVEaWZmKHZub2RlKTtcbn07XG5cbm9wdGlvbnMuX3Jvb3QgPSAodm5vZGUsIHBhcmVudERvbSkgPT4ge1xuXHRpZiAodm5vZGUgJiYgcGFyZW50RG9tLl9jaGlsZHJlbiAmJiBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrKSB7XG5cdFx0dm5vZGUuX21hc2sgPSBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrO1xuXHR9XG5cblx0aWYgKG9sZFJvb3QpIG9sZFJvb3Qodm5vZGUsIHBhcmVudERvbSk7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLl9yZW5kZXIgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGN1cnJlbnRJbmRleCA9IDA7XG5cblx0Y29uc3QgaG9va3MgPSBjdXJyZW50Q29tcG9uZW50Ll9faG9va3M7XG5cdGlmIChob29rcykge1xuXHRcdGlmIChwcmV2aW91c0NvbXBvbmVudCA9PT0gY3VycmVudENvbXBvbmVudCkge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGhvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aG9va0l0ZW0uX3BlbmRpbmdBcmdzID0gaG9va0l0ZW0uX25leHRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdGN1cnJlbnRJbmRleCA9IDA7XG5cdFx0fVxuXHR9XG5cdHByZXZpb3VzQ29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudDtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQWZ0ZXJEaWZmKSBvbGRBZnRlckRpZmYodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRpZiAoYy5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5sZW5ndGgpIGFmdGVyUGFpbnQoYWZ0ZXJQYWludEVmZmVjdHMucHVzaChjKSk7XG5cdFx0Yy5fX2hvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0aWYgKGhvb2tJdGVtLl9wZW5kaW5nQXJncykge1xuXHRcdFx0XHRob29rSXRlbS5fYXJncyA9IGhvb2tJdGVtLl9wZW5kaW5nQXJncztcblx0XHRcdH1cblx0XHRcdGhvb2tJdGVtLl9wZW5kaW5nQXJncyA9IHVuZGVmaW5lZDtcblx0XHR9KTtcblx0fVxuXHRwcmV2aW91c0NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQgPSBudWxsO1xufTtcblxuLy8gVE9ETzogSW1wcm92ZSB0eXBpbmcgb2YgY29tbWl0UXVldWUgcGFyYW1ldGVyXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUsIGNvbW1pdFF1ZXVlOiBhbnkpID0+IHZvaWR9ICovXG5vcHRpb25zLl9jb21taXQgPSAodm5vZGUsIGNvbW1pdFF1ZXVlKSA9PiB7XG5cdGNvbW1pdFF1ZXVlLnNvbWUoY29tcG9uZW50ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzID0gY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZmlsdGVyKGNiID0+XG5cdFx0XHRcdGNiLl92YWx1ZSA/IGludm9rZUVmZmVjdChjYikgOiB0cnVlXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MpIGMuX3JlbmRlckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0fSk7XG5cdFx0XHRjb21taXRRdWV1ZSA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvbGRDb21taXQpIG9sZENvbW1pdCh2bm9kZSwgY29tbWl0UXVldWUpO1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy51bm1vdW50ID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQmVmb3JlVW5tb3VudCkgb2xkQmVmb3JlVW5tb3VudCh2bm9kZSk7XG5cblx0Y29uc3QgYyA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjICYmIGMuX19ob29rcykge1xuXHRcdGxldCBoYXNFcnJvcmVkO1xuXHRcdGMuX19ob29rcy5fbGlzdC5mb3JFYWNoKHMgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW52b2tlQ2xlYW51cChzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aGFzRXJyb3JlZCA9IGU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Yy5fX2hvb2tzID0gdW5kZWZpbmVkO1xuXHRcdGlmIChoYXNFcnJvcmVkKSBvcHRpb25zLl9jYXRjaEVycm9yKGhhc0Vycm9yZWQsIGMuX3Zub2RlKTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXQgYSBob29rJ3Mgc3RhdGUgZnJvbSB0aGUgY3VycmVudENvbXBvbmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaG9vayB0byBnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIFRoZSBpbmRleCBvZiB0aGUgaG9vayB0byBnZXRcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tTdGF0ZShpbmRleCwgdHlwZSkge1xuXHRpZiAob3B0aW9ucy5faG9vaykge1xuXHRcdG9wdGlvbnMuX2hvb2soY3VycmVudENvbXBvbmVudCwgaW5kZXgsIGN1cnJlbnRIb29rIHx8IHR5cGUpO1xuXHR9XG5cdGN1cnJlbnRIb29rID0gMDtcblxuXHQvLyBMYXJnZWx5IGluc3BpcmVkIGJ5OlxuXHQvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNoYWVsLWtsZWluL2Z1bmN5LmpzL2Jsb2IvZjZiZTczNDY4ZTZlYzQ2YjBmZjVhYTNjYzRjOWJhZjcyYTI5MDI1YS9zcmMvaG9va3MvY29yZV9ob29rcy5tanNcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iLzY1MGJlYWE1OGM0M2MzM2E3NDgyMGEzYzk4YjNjNzA3OWNmMmUzMzMvc3JjL3JlbmRlcmVyLm1qc1xuXHQvLyBPdGhlciBpbXBsZW1lbnRhdGlvbnMgdG8gbG9vayBhdDpcblx0Ly8gKiBodHRwczovL2NvZGVzYW5kYm94LmlvL3MvbW5veDA1cXA4XG5cdGNvbnN0IGhvb2tzID1cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9faG9va3MgfHxcblx0XHQoY3VycmVudENvbXBvbmVudC5fX2hvb2tzID0ge1xuXHRcdFx0X2xpc3Q6IFtdLFxuXHRcdFx0X3BlbmRpbmdFZmZlY3RzOiBbXVxuXHRcdH0pO1xuXG5cdGlmIChpbmRleCA+PSBob29rcy5fbGlzdC5sZW5ndGgpIHtcblx0XHRob29rcy5fbGlzdC5wdXNoKHt9KTtcblx0fVxuXG5cdHJldHVybiBob29rcy5fbGlzdFtpbmRleF07XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBTXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkRpc3BhdGNoPGltcG9ydCgnLi9pbmRleCcpLlN0YXRlVXBkYXRlcjxTPj59IFtpbml0aWFsU3RhdGVdXG4gKiBAcmV0dXJucyB7W1MsIChzdGF0ZTogUykgPT4gdm9pZF19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcblx0Y3VycmVudEhvb2sgPSAxO1xuXHRyZXR1cm4gdXNlUmVkdWNlcihpbnZva2VPclJldHVybiwgaW5pdGlhbFN0YXRlKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFNcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gQVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5SZWR1Y2VyPFMsIEE+fSByZWR1Y2VyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkRpc3BhdGNoPGltcG9ydCgnLi9pbmRleCcpLlN0YXRlVXBkYXRlcjxTPj59IGluaXRpYWxTdGF0ZVxuICogQHBhcmFtIHsoaW5pdGlhbFN0YXRlOiBhbnkpID0+IHZvaWR9IFtpbml0XVxuICogQHJldHVybnMge1sgUywgKHN0YXRlOiBTKSA9PiB2b2lkIF19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgaW5pdCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlJlZHVjZXJIb29rU3RhdGV9ICovXG5cdGNvbnN0IGhvb2tTdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMik7XG5cdGhvb2tTdGF0ZS5fcmVkdWNlciA9IHJlZHVjZXI7XG5cdGlmICghaG9va1N0YXRlLl9jb21wb25lbnQpIHtcblx0XHRob29rU3RhdGUuX3ZhbHVlID0gW1xuXHRcdFx0IWluaXQgPyBpbnZva2VPclJldHVybih1bmRlZmluZWQsIGluaXRpYWxTdGF0ZSkgOiBpbml0KGluaXRpYWxTdGF0ZSksXG5cblx0XHRcdGFjdGlvbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGhvb2tTdGF0ZS5fbmV4dFZhbHVlXG5cdFx0XHRcdFx0PyBob29rU3RhdGUuX25leHRWYWx1ZVswXVxuXHRcdFx0XHRcdDogaG9va1N0YXRlLl92YWx1ZVswXTtcblx0XHRcdFx0Y29uc3QgbmV4dFZhbHVlID0gaG9va1N0YXRlLl9yZWR1Y2VyKGN1cnJlbnRWYWx1ZSwgYWN0aW9uKTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlICE9PSBuZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRob29rU3RhdGUuX25leHRWYWx1ZSA9IFtuZXh0VmFsdWUsIGhvb2tTdGF0ZS5fdmFsdWVbMV1dO1xuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50LnNldFN0YXRlKHt9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cblx0XHRob29rU3RhdGUuX2NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQ7XG5cblx0XHRpZiAoIWN1cnJlbnRDb21wb25lbnQuX2hhc1NjdUZyb21Ib29rcykge1xuXHRcdFx0Y3VycmVudENvbXBvbmVudC5faGFzU2N1RnJvbUhvb2tzID0gdHJ1ZTtcblx0XHRcdGxldCBwcmV2U2N1ID0gY3VycmVudENvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGU7XG5cdFx0XHRjb25zdCBwcmV2Q1dVID0gY3VycmVudENvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlO1xuXG5cdFx0XHQvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmb3JjZWQgdXBkYXRlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgIHdpbGxcblx0XHRcdC8vIG5vdCBiZSBjYWxsZWQuIEJ1dCB3ZSB1c2UgdGhhdCB0byB1cGRhdGUgdGhlIGhvb2sgdmFsdWVzLCBzbyB3ZVxuXHRcdFx0Ly8gbmVlZCB0byBjYWxsIGl0LlxuXHRcdFx0Y3VycmVudENvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gKHAsIHMsIGMpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2ZvcmNlKSB7XG5cdFx0XHRcdFx0bGV0IHRtcCA9IHByZXZTY3U7XG5cdFx0XHRcdFx0Ly8gQ2xlYXIgdG8gYXZvaWQgb3RoZXIgc0NVIGhvb2tzIGZyb20gYmVpbmcgY2FsbGVkXG5cdFx0XHRcdFx0cHJldlNjdSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR1cGRhdGVIb29rU3RhdGUocCwgcywgYyk7XG5cdFx0XHRcdFx0cHJldlNjdSA9IHRtcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwcmV2Q1dVKSBwcmV2Q1dVLmNhbGwodGhpcywgcCwgcywgYyk7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBUaGlzIFNDVSBoYXMgdGhlIHB1cnBvc2Ugb2YgYmFpbGluZyBvdXQgYWZ0ZXIgcmVwZWF0ZWQgdXBkYXRlc1xuXHRcdFx0Ly8gdG8gc3RhdGVmdWwgaG9va3MuXG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgbmV4dCB2YWx1ZSBpbiBfbmV4dFZhbHVlWzBdIGFuZCBrZWVwIGRvaW5nIHRoYXQgZm9yIGFsbFxuXHRcdFx0Ly8gc3RhdGUgc2V0dGVycywgaWYgd2UgaGF2ZSBuZXh0IHN0YXRlcyBhbmRcblx0XHRcdC8vIGFsbCBuZXh0IHN0YXRlcyB3aXRoaW4gYSBjb21wb25lbnQgZW5kIHVwIGJlaW5nIGVxdWFsIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlXG5cdFx0XHQvLyB3ZSBhcmUgc2FmZSB0byBiYWlsIG91dCBmb3IgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuXG5cdFx0XHQvKipcblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50W1wic2hvdWxkQ29tcG9uZW50VXBkYXRlXCJdfVxuXHRcdFx0ICovXG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gV2UgZG9uJ3QgdXNlIFRTIHRvIGRvd250cmFuc3BpbGVcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbm5lci1kZWNsYXJhdGlvbnNcblx0XHRcdGZ1bmN0aW9uIHVwZGF0ZUhvb2tTdGF0ZShwLCBzLCBjKSB7XG5cdFx0XHRcdGlmICghaG9va1N0YXRlLl9jb21wb25lbnQuX19ob29rcykgcmV0dXJuIHRydWU7XG5cblx0XHRcdFx0LyoqIEB0eXBlIHsoeDogaW1wb3J0KCcuL2ludGVybmFsJykuSG9va1N0YXRlKSA9PiB4IGlzIGltcG9ydCgnLi9pbnRlcm5hbCcpLlJlZHVjZXJIb29rU3RhdGV9ICovXG5cdFx0XHRcdGNvbnN0IGlzU3RhdGVIb29rID0geCA9PiAhIXguX2NvbXBvbmVudDtcblx0XHRcdFx0Y29uc3Qgc3RhdGVIb29rcyA9XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9jb21wb25lbnQuX19ob29rcy5fbGlzdC5maWx0ZXIoaXNTdGF0ZUhvb2spO1xuXG5cdFx0XHRcdGNvbnN0IGFsbEhvb2tzRW1wdHkgPSBzdGF0ZUhvb2tzLmV2ZXJ5KHggPT4gIXguX25leHRWYWx1ZSk7XG5cdFx0XHRcdC8vIFdoZW4gd2UgaGF2ZSBubyB1cGRhdGVkIGhvb2tzIGluIHRoZSBjb21wb25lbnQgd2UgaW52b2tlIHRoZSBwcmV2aW91cyBTQ1Ugb3Jcblx0XHRcdFx0Ly8gdHJhdmVyc2UgdGhlIFZET00gdHJlZSBmdXJ0aGVyLlxuXHRcdFx0XHRpZiAoYWxsSG9va3NFbXB0eSkge1xuXHRcdFx0XHRcdHJldHVybiBwcmV2U2N1ID8gcHJldlNjdS5jYWxsKHRoaXMsIHAsIHMsIGMpIDogdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBjb21wb25lbnRzIHdpdGggYSBuZXh0VmFsdWUgc2V0IHRoYXRcblx0XHRcdFx0Ly8gaGF2ZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgZXF1YWwgdG8gb25lIGFub3RoZXIgdGhpcyBwdXNoZXNcblx0XHRcdFx0Ly8gdXMgdG8gdXBkYXRlIGZ1cnRoZXIgZG93biB0aGUgdHJlZVxuXHRcdFx0XHRsZXQgc2hvdWxkVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdHN0YXRlSG9va3MuZm9yRWFjaChob29rSXRlbSA9PiB7XG5cdFx0XHRcdFx0aWYgKGhvb2tJdGVtLl9uZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGhvb2tJdGVtLl92YWx1ZVswXTtcblx0XHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdFx0XHRob29rSXRlbS5fbmV4dFZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAhPT0gaG9va0l0ZW0uX3ZhbHVlWzBdKSBzaG91bGRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIHNob3VsZFVwZGF0ZSB8fCBob29rU3RhdGUuX2NvbXBvbmVudC5wcm9wcyAhPT0gcFxuXHRcdFx0XHRcdD8gcHJldlNjdVxuXHRcdFx0XHRcdFx0PyBwcmV2U2N1LmNhbGwodGhpcywgcCwgcywgYylcblx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRDb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdXBkYXRlSG9va1N0YXRlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBob29rU3RhdGUuX25leHRWYWx1ZSB8fCBob29rU3RhdGUuX3ZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0fSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRWZmZWN0KGNhbGxiYWNrLCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMyk7XG5cdGlmICghb3B0aW9ucy5fc2tpcEVmZmVjdHMgJiYgYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gY2FsbGJhY2s7XG5cdFx0c3RhdGUuX3BlbmRpbmdBcmdzID0gYXJncztcblxuXHRcdGN1cnJlbnRDb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMucHVzaChzdGF0ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdH0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjYWxsYmFjaywgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDQpO1xuXHRpZiAoIW9wdGlvbnMuX3NraXBFZmZlY3RzICYmIGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGNhbGxiYWNrO1xuXHRcdHN0YXRlLl9wZW5kaW5nQXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MucHVzaChzdGF0ZSk7XG5cdH1cbn1cblxuLyoqIEB0eXBlIHsoaW5pdGlhbFZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcblx0Y3VycmVudEhvb2sgPSA1O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiAoeyBjdXJyZW50OiBpbml0aWFsVmFsdWUgfSksIFtdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmXG4gKiBAcGFyYW0geygpID0+IG9iamVjdH0gY3JlYXRlSGFuZGxlXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlSGFuZGxlLCBhcmdzKSB7XG5cdGN1cnJlbnRIb29rID0gNjtcblx0dXNlTGF5b3V0RWZmZWN0KFxuXHRcdCgpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcmVmID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVmKGNyZWF0ZUhhbmRsZSgpKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHJlZihudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAocmVmKSB7XG5cdFx0XHRcdHJlZi5jdXJyZW50ID0gY3JlYXRlSGFuZGxlKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFyZ3MgPT0gbnVsbCA/IGFyZ3MgOiBhcmdzLmNvbmNhdChyZWYpXG5cdCk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBUXG4gKiBAcGFyYW0geygpID0+IFR9IGZhY3RvcnlcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbW8oZmFjdG9yeSwgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLk1lbW9Ib29rU3RhdGU8VD59ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA3KTtcblx0aWYgKGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGZhY3RvcnkoKTtcblx0XHRzdGF0ZS5fYXJncyA9IGFyZ3M7XG5cdFx0c3RhdGUuX2ZhY3RvcnkgPSBmYWN0b3J5O1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMgeygpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgYXJncykge1xuXHRjdXJyZW50SG9vayA9IDg7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+IGNhbGxiYWNrLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdENvbnRleHR9IGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbnRleHQoY29udGV4dCkge1xuXHRjb25zdCBwcm92aWRlciA9IGN1cnJlbnRDb21wb25lbnQuY29udGV4dFtjb250ZXh0Ll9pZF07XG5cdC8vIFdlIGNvdWxkIHNraXAgdGhpcyBjYWxsIGhlcmUsIGJ1dCB0aGFuIHdlJ2Qgbm90IGNhbGxcblx0Ly8gYG9wdGlvbnMuX2hvb2tgLiBXZSBuZWVkIHRvIGRvIHRoYXQgaW4gb3JkZXIgdG8gbWFrZVxuXHQvLyB0aGUgZGV2dG9vbHMgYXdhcmUgb2YgdGhpcyBob29rLlxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbnRleHRIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA5KTtcblx0Ly8gVGhlIGRldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3QgdG9cblx0Ly8gYmUgYWJsZSB0byBwdWxsIG9mIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gbm8gcHJvdmlkZXJcblx0Ly8gaXMgcHJlc2VudCBpbiB0aGUgdHJlZS5cblx0c3RhdGUuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRpZiAoIXByb3ZpZGVyKSByZXR1cm4gY29udGV4dC5fZGVmYXVsdFZhbHVlO1xuXHQvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBzYWZlIHRvIGNvbnZlcnQgdG8gXCIhXCJcblx0aWYgKHN0YXRlLl92YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gdHJ1ZTtcblx0XHRwcm92aWRlci5zdWIoY3VycmVudENvbXBvbmVudCk7XG5cdH1cblx0cmV0dXJuIHByb3ZpZGVyLnByb3BzLnZhbHVlO1xufVxuXG4vKipcbiAqIERpc3BsYXkgYSBjdXN0b20gbGFiZWwgZm9yIGEgY3VzdG9tIGhvb2sgZm9yIHRoZSBkZXZ0b29scyBwYW5lbFxuICogQHR5cGUgezxUPih2YWx1ZTogVCwgY2I/OiAodmFsdWU6IFQpID0+IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlcikge1xuXHRpZiAob3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKSB7XG5cdFx0b3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKFxuXHRcdFx0Zm9ybWF0dGVyID8gZm9ybWF0dGVyKHZhbHVlKSA6IC8qKiBAdHlwZSB7YW55fSovICh2YWx1ZSlcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsoZXJyb3I6IHVua25vd24sIGVycm9ySW5mbzogaW1wb3J0KCdwcmVhY3QnKS5FcnJvckluZm8pID0+IHZvaWR9IGNiXG4gKiBAcmV0dXJucyB7W3Vua25vd24sICgpID0+IHZvaWRdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRXJyb3JCb3VuZGFyeShjYikge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVycm9yQm91bmRhcnlIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAxMCk7XG5cdGNvbnN0IGVyclN0YXRlID0gdXNlU3RhdGUoKTtcblx0c3RhdGUuX3ZhbHVlID0gY2I7XG5cdGlmICghY3VycmVudENvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaCkge1xuXHRcdGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggPSAoZXJyLCBlcnJvckluZm8pID0+IHtcblx0XHRcdGlmIChzdGF0ZS5fdmFsdWUpIHN0YXRlLl92YWx1ZShlcnIsIGVycm9ySW5mbyk7XG5cdFx0XHRlcnJTdGF0ZVsxXShlcnIpO1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIFtcblx0XHRlcnJTdGF0ZVswXSxcblx0XHQoKSA9PiB7XG5cdFx0XHRlcnJTdGF0ZVsxXSh1bmRlZmluZWQpO1xuXHRcdH1cblx0XTtcbn1cblxuLyoqIEB0eXBlIHsoKSA9PiBzdHJpbmd9ICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuSWRIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAxMSk7XG5cdGlmICghc3RhdGUuX3ZhbHVlKSB7XG5cdFx0Ly8gR3JhYiBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgbmVhcmVzdCBhc3luYyBib3VuZGFyeSBub2RlLlxuXHRcdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsLmQnKS5WTm9kZX0gKi9cblx0XHRsZXQgcm9vdCA9IGN1cnJlbnRDb21wb25lbnQuX3Zub2RlO1xuXHRcdHdoaWxlIChyb290ICE9PSBudWxsICYmICFyb290Ll9tYXNrICYmIHJvb3QuX3BhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0cm9vdCA9IHJvb3QuX3BhcmVudDtcblx0XHR9XG5cblx0XHRsZXQgbWFzayA9IHJvb3QuX21hc2sgfHwgKHJvb3QuX21hc2sgPSBbMCwgMF0pO1xuXHRcdHN0YXRlLl92YWx1ZSA9ICdQJyArIG1hc2tbMF0gKyAnLScgKyBtYXNrWzFdKys7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGUuX3ZhbHVlO1xufVxuXG4vKipcbiAqIEFmdGVyIHBhaW50IGVmZmVjdHMgY29uc3VtZXIuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMoKSB7XG5cdGxldCBjb21wb25lbnQ7XG5cdHdoaWxlICgoY29tcG9uZW50ID0gYWZ0ZXJQYWludEVmZmVjdHMuc2hpZnQoKSkpIHtcblx0XHRpZiAoIWNvbXBvbmVudC5fcGFyZW50RG9tIHx8ICFjb21wb25lbnQuX19ob29rcykgY29udGludWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUNsZWFudXApO1xuXHRcdFx0Y29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlRWZmZWN0KTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH1cbn1cblxubGV0IEhBU19SQUYgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09ICdmdW5jdGlvbic7XG5cbi8qKlxuICogU2NoZWR1bGUgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludCBhIG5ldyBmcmFtZS5cbiAqIERvIHRoaXMgYnkgY29tYmluaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSAockFGKSArIHNldFRpbWVvdXQgdG8gaW52b2tlIGEgY2FsbGJhY2sgYWZ0ZXJcbiAqIHRoZSBuZXh0IGJyb3dzZXIgZnJhbWUuXG4gKlxuICogQWxzbywgc2NoZWR1bGUgYSB0aW1lb3V0IGluIHBhcmFsbGVsIHRvIHRoZSB0aGUgckFGIHRvIGVuc3VyZSB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZFxuICogZXZlbiBpZiBSQUYgZG9lc24ndCBmaXJlIChmb3IgZXhhbXBsZSBpZiB0aGUgYnJvd3NlciB0YWIgaXMgbm90IHZpc2libGUpXG4gKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhZnRlck5leHRGcmFtZShjYWxsYmFjaykge1xuXHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRpZiAoSEFTX1JBRikgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTtcblx0XHRzZXRUaW1lb3V0KGNhbGxiYWNrKTtcblx0fTtcblx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoZG9uZSwgUkFGX1RJTUVPVVQpO1xuXG5cdGxldCByYWY7XG5cdGlmIChIQVNfUkFGKSB7XG5cdFx0cmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvbmUpO1xuXHR9XG59XG5cbi8vIE5vdGU6IGlmIHNvbWVvbmUgdXNlZCBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLFxuLy8gdGhlbiBlZmZlY3RzIHdpbGwgQUxXQVlTIHJ1biBvbiB0aGUgTkVYVCBmcmFtZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IG9uZSwgaW5jdXJyaW5nIGEgfjE2bXMgZGVsYXkuXG4vLyBQZXJoYXBzIHRoaXMgaXMgbm90IHN1Y2ggYSBiaWcgZGVhbC5cbi8qKlxuICogU2NoZWR1bGUgYWZ0ZXJQYWludEVmZmVjdHMgZmx1c2ggYWZ0ZXIgdGhlIGJyb3dzZXIgcGFpbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3UXVldWVMZW5ndGhcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZnRlclBhaW50KG5ld1F1ZXVlTGVuZ3RoKSB7XG5cdGlmIChuZXdRdWV1ZUxlbmd0aCA9PT0gMSB8fCBwcmV2UmFmICE9PSBvcHRpb25zLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuXHRcdHByZXZSYWYgPSBvcHRpb25zLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0XHQocHJldlJhZiB8fCBhZnRlck5leHRGcmFtZSkoZmx1c2hBZnRlclBhaW50RWZmZWN0cyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkhvb2tTdGF0ZX0gaG9va1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGludm9rZUNsZWFudXAoaG9vaykge1xuXHQvLyBBIGhvb2sgY2xlYW51cCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRsZXQgY2xlYW51cCA9IGhvb2suX2NsZWFudXA7XG5cdGlmICh0eXBlb2YgY2xlYW51cCA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0aG9vay5fY2xlYW51cCA9IHVuZGVmaW5lZDtcblx0XHRjbGVhbnVwKCk7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gY29tcDtcbn1cblxuLyoqXG4gKiBJbnZva2UgYSBIb29rJ3MgZWZmZWN0XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gaG9va1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGludm9rZUVmZmVjdChob29rKSB7XG5cdC8vIEEgaG9vayBjYWxsIGNhbiBpbnRyb2R1Y2UgYSBjYWxsIHRvIHJlbmRlciB3aGljaCBjcmVhdGVzIGEgbmV3IHJvb3QsIHRoaXMgd2lsbCBjYWxsIG9wdGlvbnMudm5vZGVcblx0Ly8gYW5kIG1vdmUgdGhlIGN1cnJlbnRDb21wb25lbnQgYXdheS5cblx0Y29uc3QgY29tcCA9IGN1cnJlbnRDb21wb25lbnQ7XG5cdGhvb2suX2NsZWFudXAgPSBob29rLl92YWx1ZSgpO1xuXHRjdXJyZW50Q29tcG9uZW50ID0gY29tcDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gb2xkQXJnc1xuICogQHBhcmFtIHt1bmtub3duW119IG5ld0FyZ3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBhcmdzQ2hhbmdlZChvbGRBcmdzLCBuZXdBcmdzKSB7XG5cdHJldHVybiAoXG5cdFx0IW9sZEFyZ3MgfHxcblx0XHRvbGRBcmdzLmxlbmd0aCAhPT0gbmV3QXJncy5sZW5ndGggfHxcblx0XHRuZXdBcmdzLnNvbWUoKGFyZywgaW5kZXgpID0+IGFyZyAhPT0gb2xkQXJnc1tpbmRleF0pXG5cdCk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHtBcmd9IGFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IGFueX0gZlxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gaW52b2tlT3JSZXR1cm4oYXJnLCBmKSB7XG5cdHJldHVybiB0eXBlb2YgZiA9PSAnZnVuY3Rpb24nID8gZihhcmcpIDogZjtcbn1cbiIsICIvKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIG9ialtpXSA9IHByb3BzW2ldO1xuXHRyZXR1cm4gLyoqIEB0eXBlIHtPICYgUH0gKi8gKG9iaik7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIG9iamVjdHMgaGF2ZSBhIGRpZmZlcmVudCBzaGFwZVxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKGEsIGIpIHtcblx0Zm9yIChsZXQgaSBpbiBhKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiAhKGkgaW4gYikpIHJldHVybiB0cnVlO1xuXHRmb3IgKGxldCBpIGluIGIpIGlmIChpICE9PSAnX19zb3VyY2UnICYmIGFbaV0gIT09IGJbaV0pIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWVcbiAqIEBwYXJhbSB7Kn0geFxuICogQHBhcmFtIHsqfSB5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKHgsIHkpIHtcblx0cmV0dXJuICh4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzaGFsbG93RGlmZmVycyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQ29tcG9uZW50IGNsYXNzIHdpdGggYSBwcmVkZWZpbmVkIGBzaG91bGRDb21wb25lbnRVcGRhdGVgIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQdXJlQ29tcG9uZW50KHAsIGMpIHtcblx0dGhpcy5wcm9wcyA9IHA7XG5cdHRoaXMuY29udGV4dCA9IGM7XG59XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcbi8vIFNvbWUgdGhpcmQtcGFydHkgbGlicmFyaWVzIGNoZWNrIGlmIHRoaXMgcHJvcGVydHkgaXMgcHJlc2VudFxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24gKHByb3BzLCBzdGF0ZSkge1xuXHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgcHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzaGFsbG93RGlmZmVycyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogTWVtb2l6ZSBhIGNvbXBvbmVudCwgc28gdGhhdCBpdCBvbmx5IHVwZGF0ZXMgd2hlbiB0aGUgcHJvcHMgYWN0dWFsbHkgaGF2ZVxuICogY2hhbmdlZC4gVGhpcyB3YXMgcHJldmlvdXNseSBrbm93biBhcyBgUmVhY3QucHVyZWAuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fSBjIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gKiBAcGFyYW0geyhwcmV2OiBvYmplY3QsIG5leHQ6IG9iamVjdCkgPT4gYm9vbGVhbn0gW2NvbXBhcmVyXSBDdXN0b20gZXF1YWxpdHkgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW8oYywgY29tcGFyZXIpIHtcblx0ZnVuY3Rpb24gc2hvdWxkVXBkYXRlKG5leHRQcm9wcykge1xuXHRcdGxldCByZWYgPSB0aGlzLnByb3BzLnJlZjtcblx0XHRsZXQgdXBkYXRlUmVmID0gcmVmID09IG5leHRQcm9wcy5yZWY7XG5cdFx0aWYgKCF1cGRhdGVSZWYgJiYgcmVmKSB7XG5cdFx0XHRyZWYuY2FsbCA/IHJlZihudWxsKSA6IChyZWYuY3VycmVudCA9IG51bGwpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcGFyZXIpIHtcblx0XHRcdHJldHVybiBzaGFsbG93RGlmZmVycyh0aGlzLnByb3BzLCBuZXh0UHJvcHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiAhY29tcGFyZXIodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCAhdXBkYXRlUmVmO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWVtb2VkKHByb3BzKSB7XG5cdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBzaG91bGRVcGRhdGU7XG5cdFx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQoYywgcHJvcHMpO1xuXHR9XG5cdE1lbW9lZC5kaXNwbGF5TmFtZSA9ICdNZW1vKCcgKyAoYy5kaXNwbGF5TmFtZSB8fCBjLm5hbWUpICsgJyknO1xuXHRNZW1vZWQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXHRNZW1vZWQuX2ZvcndhcmRlZCA9IHRydWU7XG5cdHJldHVybiBNZW1vZWQ7XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJ3ByZWFjdCc7XG5cbmxldCBvbGREaWZmSG9vayA9IG9wdGlvbnMuX2RpZmY7XG5vcHRpb25zLl9kaWZmID0gdm5vZGUgPT4ge1xuXHRpZiAodm5vZGUudHlwZSAmJiB2bm9kZS50eXBlLl9mb3J3YXJkZWQgJiYgdm5vZGUucmVmKSB7XG5cdFx0dm5vZGUucHJvcHMucmVmID0gdm5vZGUucmVmO1xuXHRcdHZub2RlLnJlZiA9IG51bGw7XG5cdH1cblx0aWYgKG9sZERpZmZIb29rKSBvbGREaWZmSG9vayh2bm9kZSk7XG59O1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRk9SV0FSRF9TWU1CT0wgPVxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJlxuXHRcdFN5bWJvbC5mb3IgJiZcblx0XHRTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpKSB8fFxuXHQweGY0NztcblxuLyoqXG4gKiBQYXNzIHJlZiBkb3duIHRvIGEgY2hpbGQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gbGlicmFyaWVzIHdpdGggSE9DcyB0aGF0XG4gKiB3cmFwIGNvbXBvbmVudHMuIFVzaW5nIGBmb3J3YXJkUmVmYCB0aGVyZSBpcyBhbiBlYXN5IHdheSB0byBnZXQgYSByZWZlcmVuY2VcbiAqIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudCBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgd3JhcHBlciBpdHNlbGYuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkZvcndhcmRGbn0gZm5cbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWYoZm4pIHtcblx0ZnVuY3Rpb24gRm9yd2FyZGVkKHByb3BzKSB7XG5cdFx0aWYgKCEoJ3JlZicgaW4gcHJvcHMpKSByZXR1cm4gZm4ocHJvcHMsIG51bGwpO1xuXG5cdFx0bGV0IHJlZiA9IHByb3BzLnJlZjtcblx0XHRkZWxldGUgcHJvcHMucmVmO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZuKHByb3BzLCByZWYpO1xuXHRcdHByb3BzLnJlZiA9IHJlZjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gbW9ieC1yZWFjdCBjaGVja3MgZm9yIHRoaXMgYmVpbmcgcHJlc2VudFxuXHRGb3J3YXJkZWQuJCR0eXBlb2YgPSBSRUFDVF9GT1JXQVJEX1NZTUJPTDtcblx0Ly8gbW9ieC1yZWFjdCBoZWF2aWx5IHJlbGllcyBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXHQvLyBJdCBleHBlY3RzIGFuIG9iamVjdCBoZXJlIHdpdGggYSBgcmVuZGVyYCBwcm9wZXJ0eSxcblx0Ly8gYW5kIHByb3RvdHlwZS5yZW5kZXIgd2lsbCBmYWlsLiBXaXRob3V0IHRoaXNcblx0Ly8gbW9ieC1yZWFjdCB0aHJvd3MuXG5cdEZvcndhcmRlZC5yZW5kZXIgPSBGb3J3YXJkZWQ7XG5cblx0Rm9yd2FyZGVkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gRm9yd2FyZGVkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRGb3J3YXJkZWQuZGlzcGxheU5hbWUgPSAnRm9yd2FyZFJlZignICsgKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUpICsgJyknO1xuXHRyZXR1cm4gRm9yd2FyZGVkO1xufVxuIiwgImltcG9ydCB7IHRvQ2hpbGRBcnJheSB9IGZyb20gJ3ByZWFjdCc7XG5cbmNvbnN0IG1hcEZuID0gKGNoaWxkcmVuLCBmbikgPT4ge1xuXHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB0b0NoaWxkQXJyYXkodG9DaGlsZEFycmF5KGNoaWxkcmVuKS5tYXAoZm4pKTtcbn07XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5leHBvcnQgY29uc3QgQ2hpbGRyZW4gPSB7XG5cdG1hcDogbWFwRm4sXG5cdGZvckVhY2g6IG1hcEZuLFxuXHRjb3VudChjaGlsZHJlbikge1xuXHRcdHJldHVybiBjaGlsZHJlbiA/IHRvQ2hpbGRBcnJheShjaGlsZHJlbikubGVuZ3RoIDogMDtcblx0fSxcblx0b25seShjaGlsZHJlbikge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChub3JtYWxpemVkLmxlbmd0aCAhPT0gMSkgdGhyb3cgJ0NoaWxkcmVuLm9ubHknO1xuXHRcdHJldHVybiBub3JtYWxpemVkWzBdO1xuXHR9LFxuXHR0b0FycmF5OiB0b0NoaWxkQXJyYXlcbn07XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50LCBvcHRpb25zLCBGcmFnbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuLi8uLi9zcmMvY29uc3RhbnRzJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG9sZENhdGNoRXJyb3IgPSBvcHRpb25zLl9jYXRjaEVycm9yO1xub3B0aW9ucy5fY2F0Y2hFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0aWYgKGVycm9yLnRoZW4pIHtcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0XHRsZXQgY29tcG9uZW50O1xuXHRcdGxldCB2bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0Zm9yICg7ICh2bm9kZSA9IHZub2RlLl9wYXJlbnQpOyApIHtcblx0XHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQpIHtcblx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9kb20gPT0gbnVsbCkge1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBEb24ndCBjYWxsIG9sZENhdGNoRXJyb3IgaWYgd2UgZm91bmQgYSBTdXNwZW5zZVxuXHRcdFx0XHRyZXR1cm4gY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQoZXJyb3IsIG5ld1ZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0b2xkQ2F0Y2hFcnJvcihlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pO1xufTtcblxuY29uc3Qgb2xkVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbm9wdGlvbnMudW5tb3VudCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0Y29uc3QgY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuX29uUmVzb2x2ZSkge1xuXHRcdGNvbXBvbmVudC5fb25SZXNvbHZlKCk7XG5cdH1cblxuXHQvLyBpZiB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGh5ZHJhdGluZ1xuXHQvLyBtb3N0IGxpa2VseSBpdCBpcyBiZWNhdXNlIHRoZSBjb21wb25lbnQgaXMgc3VzcGVuZGVkXG5cdC8vIHdlIHNldCB0aGUgdm5vZGUudHlwZSBhcyBgbnVsbGAgc28gdGhhdCBpdCBpcyBub3QgYSB0eXBlb2YgZnVuY3Rpb25cblx0Ly8gc28gdGhlIHVubW91bnQgd2lsbCByZW1vdmUgdGhlIHZub2RlLl9kb21cblx0aWYgKGNvbXBvbmVudCAmJiB2bm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpIHtcblx0XHR2bm9kZS50eXBlID0gbnVsbDtcblx0fVxuXG5cdGlmIChvbGRVbm1vdW50KSBvbGRVbm1vdW50KHZub2RlKTtcbn07XG5cbmZ1bmN0aW9uIGRldGFjaGVkQ2xvbmUodm5vZGUsIGRldGFjaGVkUGFyZW50LCBwYXJlbnREb20pIHtcblx0aWYgKHZub2RlKSB7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgJiYgdm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzKSB7XG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZm9yRWFjaChlZmZlY3QgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGVmZmVjdC5fY2xlYW51cCA9PSAnZnVuY3Rpb24nKSBlZmZlY3QuX2NsZWFudXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlID0gYXNzaWduKHt9LCB2bm9kZSk7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gcGFyZW50RG9tKSB7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IGRldGFjaGVkUGFyZW50O1xuXHRcdFx0fVxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dm5vZGUuX2NoaWxkcmVuID1cblx0XHRcdHZub2RlLl9jaGlsZHJlbiAmJlxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuLm1hcChjaGlsZCA9PlxuXHRcdFx0XHRkZXRhY2hlZENsb25lKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKVxuXHRcdFx0KTtcblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JpZ2luYWwodm5vZGUsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudCkge1xuXHRpZiAodm5vZGUgJiYgb3JpZ2luYWxQYXJlbnQpIHtcblx0XHR2bm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0cmVtb3ZlT3JpZ2luYWwoY2hpbGQsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudClcblx0XHRcdCk7XG5cblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gZGV0YWNoZWRQYXJlbnQpIHtcblx0XHRcdFx0aWYgKHZub2RlLl9kb20pIHtcblx0XHRcdFx0XHRvcmlnaW5hbFBhcmVudC5hcHBlbmRDaGlsZCh2bm9kZS5fZG9tKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IG9yaWdpbmFsUGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuLy8gaGF2aW5nIGN1c3RvbSBpbmhlcml0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MgaGVyZSBzYXZlcyBhIGxvdCBvZiBieXRlc1xuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlKCkge1xuXHQvLyB3ZSBkbyBub3QgY2FsbCBzdXBlciBoZXJlIHRvIGdvbGYgc29tZSBieXRlcy4uLlxuXHR0aGlzLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50ID0gMDtcblx0dGhpcy5fc3VzcGVuZGVycyA9IG51bGw7XG5cdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG59XG5cbi8vIFRoaW5ncyB3ZSBkbyBoZXJlIHRvIHNhdmUgc29tZSBieXRlcyBidXQgYXJlIG5vdCBwcm9wZXIgSlMgaW5oZXJpdGFuY2U6XG4vLyAtIGNhbGwgYG5ldyBDb21wb25lbnQoKWAgYXMgdGhlIHByb3RvdHlwZVxuLy8gLSBkbyBub3Qgc2V0IGBTdXNwZW5zZS5wcm90b3R5cGUuY29uc3RydWN0b3JgIHRvIGBTdXNwZW5zZWBcblN1c3BlbnNlLnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge1Byb21pc2V9IHByb21pc2UgVGhlIHRocm93biBwcm9taXNlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlPGFueSwgYW55Pn0gc3VzcGVuZGluZ1ZOb2RlIFRoZSBzdXNwZW5kaW5nIGNvbXBvbmVudFxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUuX2NoaWxkRGlkU3VzcGVuZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdXNwZW5kaW5nVk5vZGUpIHtcblx0Y29uc3Qgc3VzcGVuZGluZ0NvbXBvbmVudCA9IHN1c3BlbmRpbmdWTm9kZS5fY29tcG9uZW50O1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9ICovXG5cdGNvbnN0IGMgPSB0aGlzO1xuXG5cdGlmIChjLl9zdXNwZW5kZXJzID09IG51bGwpIHtcblx0XHRjLl9zdXNwZW5kZXJzID0gW107XG5cdH1cblx0Yy5fc3VzcGVuZGVycy5wdXNoKHN1c3BlbmRpbmdDb21wb25lbnQpO1xuXG5cdGNvbnN0IHJlc29sdmUgPSBzdXNwZW5kZWQoYy5fdm5vZGUpO1xuXG5cdGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXHRjb25zdCBvblJlc29sdmVkID0gKCkgPT4ge1xuXHRcdGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuXG5cdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG51bGw7XG5cblx0XHRpZiAocmVzb2x2ZSkge1xuXHRcdFx0cmVzb2x2ZShvblN1c3BlbnNpb25Db21wbGV0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uU3VzcGVuc2lvbkNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG9uUmVzb2x2ZWQ7XG5cblx0Y29uc3Qgb25TdXNwZW5zaW9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKCEtLWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQpIHtcblx0XHRcdC8vIElmIHRoZSBzdXNwZW5zaW9uIHdhcyBkdXJpbmcgaHlkcmF0aW9uIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSB0aGVcblx0XHRcdC8vIHN1c3BlbmRlZCBjaGlsZHJlbiBpbnRvIHRoZSBfY2hpbGRyZW4gYXJyYXlcblx0XHRcdGlmIChjLnN0YXRlLl9zdXNwZW5kZWQpIHtcblx0XHRcdFx0Y29uc3Qgc3VzcGVuZGVkVk5vZGUgPSBjLnN0YXRlLl9zdXNwZW5kZWQ7XG5cdFx0XHRcdGMuX3Zub2RlLl9jaGlsZHJlblswXSA9IHJlbW92ZU9yaWdpbmFsKFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLl9jb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjLnNldFN0YXRlKHsgX3N1c3BlbmRlZDogKGMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGwpIH0pO1xuXG5cdFx0XHRsZXQgc3VzcGVuZGVkO1xuXHRcdFx0d2hpbGUgKChzdXNwZW5kZWQgPSBjLl9zdXNwZW5kZXJzLnBvcCgpKSkge1xuXHRcdFx0XHRzdXNwZW5kZWQuZm9yY2VVcGRhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIFdlIGRvIG5vdCBzZXQgYHN1c3BlbmRlZDogdHJ1ZWAgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHdlIHdhbnQgdGhlIGFjdHVhbCBtYXJrdXBcblx0ICogdG8gcmVtYWluIG9uIHNjcmVlbiBhbmQgaHlkcmF0ZSBpdCB3aGVuIHRoZSBzdXNwZW5zZSBhY3R1YWxseSBnZXRzIHJlc29sdmVkLlxuXHQgKiBXaGlsZSBpbiBub24taHlkcmF0aW9uIGNhc2VzIHRoZSB1c3VhbCBmYWxsYmFjayAtPiBjb21wb25lbnQgZmxvdyB3b3VsZCBvY2NvdXIuXG5cdCAqL1xuXHRpZiAoXG5cdFx0IWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQrKyAmJlxuXHRcdCEoc3VzcGVuZGluZ1ZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSlcblx0KSB7XG5cdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBjLl92bm9kZS5fY2hpbGRyZW5bMF0pIH0pO1xuXHR9XG5cdHByb21pc2UudGhlbihvblJlc29sdmVkLCBvblJlc29sdmVkKTtcbn07XG5cblN1c3BlbnNlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5fc3VzcGVuZGVycyA9IFtdO1xufTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50W1wicHJvcHNcIl19IHByb3BzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlU3RhdGV9IHN0YXRlXG4gKi9cblN1c3BlbnNlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJvcHMsIHN0YXRlKSB7XG5cdGlmICh0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIpIHtcblx0XHQvLyBXaGVuIHRoZSBTdXNwZW5zZSdzIF92bm9kZSB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gY3JlYXRlVk5vZGVcblx0XHQvLyAoaS5lLiBkdWUgdG8gYSBzZXRTdGF0ZSBmdXJ0aGVyIHVwIGluIHRoZSB0cmVlKVxuXHRcdC8vIGl0J3MgX2NoaWxkcmVuIHByb3AgaXMgbnVsbCwgaW4gdGhpcyBjYXNlIHdlIFwiZm9yZ2V0XCIgYWJvdXQgdGhlIHBhcmtlZCB2bm9kZXMgdG8gZGV0YWNoXG5cdFx0aWYgKHRoaXMuX3Zub2RlLl9jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgZGV0YWNoZWRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGNvbnN0IGRldGFjaGVkQ29tcG9uZW50ID0gdGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdLl9jb21wb25lbnQ7XG5cdFx0XHR0aGlzLl92bm9kZS5fY2hpbGRyZW5bMF0gPSBkZXRhY2hlZENsb25lKFxuXHRcdFx0XHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIsXG5cdFx0XHRcdGRldGFjaGVkUGFyZW50LFxuXHRcdFx0XHQoZGV0YWNoZWRDb21wb25lbnQuX29yaWdpbmFsUGFyZW50RG9tID0gZGV0YWNoZWRDb21wb25lbnQuX3BhcmVudERvbSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyID0gbnVsbDtcblx0fVxuXG5cdC8vIFdyYXAgZmFsbGJhY2sgdHJlZSBpbiBhIFZOb2RlIHRoYXQgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcgbWFya2VkIGFzIGFib3J0aW5nIG1pZC1oeWRyYXRpb246XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9ICovXG5cdGNvbnN0IGZhbGxiYWNrID1cblx0XHRzdGF0ZS5fc3VzcGVuZGVkICYmIGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHByb3BzLmZhbGxiYWNrKTtcblx0aWYgKGZhbGxiYWNrKSBmYWxsYmFjay5fZmxhZ3MgJj0gfk1PREVfSFlEUkFURTtcblxuXHRyZXR1cm4gW1xuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHN0YXRlLl9zdXNwZW5kZWQgPyBudWxsIDogcHJvcHMuY2hpbGRyZW4pLFxuXHRcdGZhbGxiYWNrXG5cdF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBhbmQgY2FsbHMgdGhlIHBhcmVudCBjb21wb25lbnQncyBfc3VzcGVuZGVkIG1ldGhvZCwgcGFzc2luZyBpbiB0aGVcbiAqIHN1c3BlbmRlZCB2bm9kZS4gVGhpcyBpcyBhIHdheSBmb3IgYSBwYXJlbnQgKGUuZy4gU3VzcGVuc2VMaXN0KSB0byBnZXQgbm90aWZpZWRcbiAqIHRoYXQgb25lIG9mIGl0cyBjaGlsZHJlbi9kZXNjZW5kYW50cyBzdXNwZW5kZWQuXG4gKlxuICogVGhlIHBhcmVudCBNQVkgcmV0dXJuIGEgY2FsbGJhY2suIFRoZSBjYWxsYmFjayB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGVcbiAqIHN1c3BlbnNpb24gcmVzb2x2ZXMsIG5vdGlmeWluZyB0aGUgcGFyZW50IG9mIHRoZSBmYWN0LlxuICogTW9yZW92ZXIsIHRoZSBjYWxsYmFjayBnZXRzIGZ1bmN0aW9uIGB1bnN1c3BlbmRgIGFzIGEgcGFyYW1ldGVyLiBUaGUgcmVzb2x2ZWRcbiAqIGNoaWxkIGRlc2NlbmRhbnQgd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHVuc3VzcGVuZGVkIHVudGlsIGB1bnN1c3BlbmRgIGdldHMgY2FsbGVkLlxuICogVGhpcyBpcyBhIHdheSBmb3IgdGhlIHBhcmVudCB0byBkZWxheSB1bnN1c3BlbmRpbmcuXG4gKlxuICogSWYgdGhlIHBhcmVudCBkb2VzIG5vdCByZXR1cm4gYSBjYWxsYmFjayB0aGVuIHRoZSByZXNvbHZlZCB2bm9kZVxuICogZ2V0cyB1bnN1c3BlbmRlZCBpbW1lZGlhdGVseSB3aGVuIGl0IHJlc29sdmVzLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlXG4gKiBAcmV0dXJucyB7KCh1bnN1c3BlbmQ6ICgpID0+IHZvaWQpID0+IHZvaWQpP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1c3BlbmRlZCh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQuX2NvbXBvbmVudDtcblx0cmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCh2bm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGxvYWRlcikge1xuXHRsZXQgcHJvbTtcblx0bGV0IGNvbXBvbmVudDtcblx0bGV0IGVycm9yO1xuXG5cdGZ1bmN0aW9uIExhenkocHJvcHMpIHtcblx0XHRpZiAoIXByb20pIHtcblx0XHRcdHByb20gPSBsb2FkZXIoKTtcblx0XHRcdHByb20udGhlbihcblx0XHRcdFx0ZXhwb3J0cyA9PiB7XG5cdFx0XHRcdFx0Y29tcG9uZW50ID0gZXhwb3J0cy5kZWZhdWx0IHx8IGV4cG9ydHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGUgPT4ge1xuXHRcdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblxuXHRcdGlmICghY29tcG9uZW50KSB7XG5cdFx0XHR0aHJvdyBwcm9tO1xuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpO1xuXHR9XG5cblx0TGF6eS5kaXNwbGF5TmFtZSA9ICdMYXp5Jztcblx0TGF6eS5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0cmV0dXJuIExhenk7XG59XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc3VzcGVuZGVkIH0gZnJvbSAnLi9zdXNwZW5zZS5qcyc7XG5cbi8vIEluZGV4ZXMgdG8gbGlua2VkIGxpc3Qgbm9kZXMgKG5vZGVzIGFyZSBzdG9yZWQgYXMgYXJyYXlzIHRvIHNhdmUgYnl0ZXMpLlxuY29uc3QgU1VTUEVOREVEX0NPVU5UID0gMDtcbmNvbnN0IFJFU09MVkVEX0NPVU5UID0gMTtcbmNvbnN0IE5FWFRfTk9ERSA9IDI7XG5cbi8vIEhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXMuXG5leHBvcnQgZnVuY3Rpb24gU3VzcGVuc2VMaXN0KCkge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbnVsbDtcbn1cblxuLy8gTWFyayBvbmUgb2YgY2hpbGQncyBlYXJsaWVyIHN1c3BlbnNpb25zIGFzIHJlc29sdmVkLlxuLy8gU29tZSBwZW5kaW5nIGNhbGxiYWNrcyBtYXkgYmVjb21lIGNhbGxhYmxlIGR1ZSB0byB0aGlzXG4vLyAoZS5nLiB0aGUgbGFzdCBzdXNwZW5kZWQgZGVzY2VuZGFudCBnZXRzIHJlc29sdmVkIHdoZW5cbi8vIHJldmVhbE9yZGVyID09PSAndG9nZXRoZXInKS4gUHJvY2VzcyB0aG9zZSBjYWxsYmFja3MgYXMgd2VsbC5cbmNvbnN0IHJlc29sdmUgPSAobGlzdCwgY2hpbGQsIG5vZGUpID0+IHtcblx0aWYgKCsrbm9kZVtSRVNPTFZFRF9DT1VOVF0gPT09IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdC8vIFRoZSBudW1iZXIgYSBjaGlsZCAob3IgYW55IG9mIGl0cyBkZXNjZW5kYW50cykgaGFzIGJlZW4gc3VzcGVuZGVkXG5cdFx0Ly8gbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGl0J3MgYmVlbiByZXNvbHZlZC4gVGhlcmVmb3JlIHdlXG5cdFx0Ly8gbWFyayB0aGUgY2hpbGQgYXMgY29tcGxldGVseSByZXNvbHZlZCBieSBkZWxldGluZyBpdCBmcm9tIC5fbWFwLlxuXHRcdC8vIFRoaXMgaXMgdXNlZCB0byBmaWd1cmUgb3V0IHdoZW4gKmFsbCogY2hpbGRyZW4gaGF2ZSBiZWVuIGNvbXBsZXRlbHlcblx0XHQvLyByZXNvbHZlZCB3aGVuIHJldmVhbE9yZGVyIGlzICd0b2dldGhlcicuXG5cdFx0bGlzdC5fbWFwLmRlbGV0ZShjaGlsZCk7XG5cdH1cblxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyBmYWxzeSB0aGVuIHdlIGNhbiBkbyBhbiBlYXJseSBleGl0LCBhcyB0aGVcblx0Ly8gY2FsbGJhY2tzIHdvbid0IGdldCBxdWV1ZWQgaW4gdGhlIG5vZGUgYW55d2F5LlxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInIHRoZW4gYWxzbyBkbyBhbiBlYXJseSBleGl0XG5cdC8vIGlmIGFsbCBzdXNwZW5kZWQgZGVzY2VuZGFudHMgaGF2ZSBub3QgeWV0IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChcblx0XHQhbGlzdC5wcm9wcy5yZXZlYWxPcmRlciB8fFxuXHRcdChsaXN0LnByb3BzLnJldmVhbE9yZGVyWzBdID09PSAndCcgJiYgbGlzdC5fbWFwLnNpemUpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFdhbGsgdGhlIGN1cnJlbnRseSBzdXNwZW5kZWQgY2hpbGRyZW4gaW4gb3JkZXIsIGNhbGxpbmcgdGhlaXJcblx0Ly8gc3RvcmVkIGNhbGxiYWNrcyBvbiB0aGUgd2F5LiBTdG9wIGlmIHdlIGVuY291bnRlciBhIGNoaWxkIHRoYXRcblx0Ly8gaGFzIG5vdCBiZWVuIGNvbXBsZXRlbHkgcmVzb2x2ZWQgeWV0LlxuXHRub2RlID0gbGlzdC5fbmV4dDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHR3aGlsZSAobm9kZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRub2RlLnBvcCgpKCk7XG5cdFx0fVxuXHRcdGlmIChub2RlW1JFU09MVkVEX0NPVU5UXSA8IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGxpc3QuX25leHQgPSBub2RlID0gbm9kZVtORVhUX05PREVdO1xuXHR9XG59O1xuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlID0gbmV3IENvbXBvbmVudCgpO1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLl9zdXNwZW5kZWQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0Y29uc3QgbGlzdCA9IHRoaXM7XG5cdGNvbnN0IGRlbGVnYXRlZCA9IHN1c3BlbmRlZChsaXN0Ll92bm9kZSk7XG5cblx0bGV0IG5vZGUgPSBsaXN0Ll9tYXAuZ2V0KGNoaWxkKTtcblx0bm9kZVtTVVNQRU5ERURfQ09VTlRdKys7XG5cblx0cmV0dXJuIHVuc3VzcGVuZCA9PiB7XG5cdFx0Y29uc3Qgd3JhcHBlZFVuc3VzcGVuZCA9ICgpID0+IHtcblx0XHRcdGlmICghbGlzdC5wcm9wcy5yZXZlYWxPcmRlcikge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGNhc2UgdGhlIHVuZGVmaW5lZCAoZmFsc3kpIHJldmVhbE9yZGVyLCBhcyB0aGVyZVxuXHRcdFx0XHQvLyBpcyBubyBuZWVkIHRvIGNvb3JkaW5hdGUgYSBzcGVjaWZpYyBvcmRlciBvciB1bnN1c3BlbmRzLlxuXHRcdFx0XHR1bnN1c3BlbmQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vZGUucHVzaCh1bnN1c3BlbmQpO1xuXHRcdFx0XHRyZXNvbHZlKGxpc3QsIGNoaWxkLCBub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChkZWxlZ2F0ZWQpIHtcblx0XHRcdGRlbGVnYXRlZCh3cmFwcGVkVW5zdXNwZW5kKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcHBlZFVuc3VzcGVuZCgpO1xuXHRcdH1cblx0fTtcbn07XG5cblN1c3BlbnNlTGlzdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgY2hpbGRyZW4gPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXHRpZiAocHJvcHMucmV2ZWFsT3JkZXIgJiYgcHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICdiJykge1xuXHRcdC8vIElmIG9yZGVyID09PSAnYmFja3dhcmRzJyAob3IsIHdlbGwsIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYSAnYicpXG5cdFx0Ly8gdGhlbiBmbGlwIHRoZSBjaGlsZCBsaXN0IGFyb3VuZCBzbyB0aGF0IHRoZSBsYXN0IGNoaWxkIHdpbGwgYmVcblx0XHQvLyB0aGUgZmlyc3QgaW4gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdGNoaWxkcmVuLnJldmVyc2UoKTtcblx0fVxuXHQvLyBCdWlsZCB0aGUgbGlua2VkIGxpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlclxuXHQvLyBzbyB0aGF0IGBfbmV4dGAgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5rZWQgbGlzdCBub2RlIHRvIGJlIHJlc29sdmVkLlxuXHRmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBsaW5rZWQgbGlzdCBub2RlIGFzIGFuIGFycmF5IG9mIGZvcm06XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlXVxuXHRcdC8vIHdoZXJlIHN1c3BlbmRlZF9jb3VudCBhbmQgcmVzb2x2ZWRfY291bnQgYXJlIG51bWVyaWMgY291bnRlcnMgZm9yXG5cdFx0Ly8ga2VlcGluZyB0cmFjayBob3cgbWFueSB0aW1lcyBhIG5vZGUgaGFzIGJlZW4gc3VzcGVuZGVkIGFuZCByZXNvbHZlZC5cblx0XHQvL1xuXHRcdC8vIE5vdGUgdGhhdCBzdXNwZW5kZWRfY291bnQgc3RhcnRzIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHNvIHdlIGNhbiBibG9ja1xuXHRcdC8vIHByb2Nlc3NpbmcgY2FsbGJhY2tzIHVudGlsIGNvbXBvbmVudERpZE1vdW50IGhhcyBiZWVuIGNhbGxlZC4gSW4gYSBzZW5zZVxuXHRcdC8vIG5vZGUgaXMgc3VzcGVuZGVkIGF0IGxlYXN0IHVudGlsIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkIVxuXHRcdC8vXG5cdFx0Ly8gUGVuZGluZyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGU6XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlLCBjYWxsYmFja18wLCBjYWxsYmFja18xLCAuLi5dXG5cdFx0dGhpcy5fbWFwLnNldChjaGlsZHJlbltpXSwgKHRoaXMuX25leHQgPSBbMSwgMCwgdGhpcy5fbmV4dF0pKTtcblx0fVxuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9XG5cdFN1c3BlbnNlTGlzdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZnRlciBtb3VudGluZyBmb3IgdHdvIHJlYXNvbnM6XG5cdFx0Ly8gMS4gQXMgZWFjaCBub2RlW1NVU1BFTkRFRF9DT1VOVF0gc3RhcnRzIGZyb20gMSwgdGhpcyBpdGVyYXRpb24gaW5jcmVhc2VzXG5cdFx0Ly8gICAgZWFjaCBub2RlW1JFTEVBU0VEX0NPVU5UXSBieSAxLCB0aGVyZWZvcmUgYmFsYW5jaW5nIHRoZSBjb3VudGVycy5cblx0XHQvLyAgICBUaGUgbm9kZXMgY2FuIG5vdyBiZSBjb21wbGV0ZWx5IGNvbnN1bWVkIGZyb20gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdC8vIDIuIEhhbmRsZSBub2RlcyB0aGF0IG1pZ2h0IGhhdmUgZ290dGVuIHJlc29sdmVkIGJldHdlZW4gcmVuZGVyIGFuZFxuXHRcdC8vICAgIGNvbXBvbmVudERpZE1vdW50LlxuXHRcdHRoaXMuX21hcC5mb3JFYWNoKChub2RlLCBjaGlsZCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSh0aGlzLCBjaGlsZCwgbm9kZSk7XG5cdFx0fSk7XG5cdH07XG4iLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCByZW5kZXIgfSBmcm9tICdwcmVhY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9zcmMvaW5kZXgnKS5SZW5kZXJhYmxlUHJvcHM8eyBjb250ZXh0OiBhbnkgfT59IHByb3BzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHRQcm92aWRlcihwcm9wcykge1xuXHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IHByb3BzLmNvbnRleHQ7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBQb3J0YWwgY29tcG9uZW50XG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkfSBwcm9wc1xuICpcbiAqIFRPRE86IHVzZSBjcmVhdGVSb290KCkgaW5zdGVhZCBvZiBmYWtlIHJvb3RcbiAqL1xuZnVuY3Rpb24gUG9ydGFsKHByb3BzKSB7XG5cdGNvbnN0IF90aGlzID0gdGhpcztcblx0bGV0IGNvbnRhaW5lciA9IHByb3BzLl9jb250YWluZXI7XG5cblx0X3RoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmVuZGVyKG51bGwsIF90aGlzLl90ZW1wKTtcblx0XHRfdGhpcy5fdGVtcCA9IG51bGw7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cdH07XG5cblx0Ly8gV2hlbiB3ZSBjaGFuZ2UgY29udGFpbmVyIHdlIHNob3VsZCBjbGVhciBvdXIgb2xkIGNvbnRhaW5lciBhbmRcblx0Ly8gaW5kaWNhdGUgYSBuZXcgbW91bnQuXG5cdGlmIChfdGhpcy5fY29udGFpbmVyICYmIF90aGlzLl9jb250YWluZXIgIT09IGNvbnRhaW5lcikge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cblxuXHRpZiAoIV90aGlzLl90ZW1wKSB7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgRE9NIHBhcmVudCBub2RlIHRoYXQgbWFuYWdlcyBhIHN1YnNldCBvZiBgY29udGFpbmVyYCdzIGNoaWxkcmVuOlxuXHRcdF90aGlzLl90ZW1wID0ge1xuXHRcdFx0bm9kZVR5cGU6IDEsXG5cdFx0XHRwYXJlbnROb2RlOiBjb250YWluZXIsXG5cdFx0XHRjaGlsZE5vZGVzOiBbXSxcblx0XHRcdGNvbnRhaW5zOiAoKSA9PiB0cnVlLFxuXHRcdFx0YXBwZW5kQ2hpbGQoY2hpbGQpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRpbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZSkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fSxcblx0XHRcdHJlbW92ZUNoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoY2hpbGQpID4+PiAxLCAxKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFJlbmRlciBvdXIgd3JhcHBpbmcgZWxlbWVudCBpbnRvIHRlbXAuXG5cdHJlbmRlcihcblx0XHRjcmVhdGVFbGVtZW50KENvbnRleHRQcm92aWRlciwgeyBjb250ZXh0OiBfdGhpcy5jb250ZXh0IH0sIHByb3BzLl92bm9kZSksXG5cdFx0X3RoaXMuX3RlbXBcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgUG9ydGFsYCB0byBjb250aW51ZSByZW5kZXJpbmcgdGhlIHZub2RlIHRyZWUgYXQgYSBkaWZmZXJlbnQgRE9NIG5vZGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gY29udGFpbmVyIFRoZSBET00gbm9kZSB0byBjb250aW51ZSByZW5kZXJpbmcgaW4gdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3J0YWwodm5vZGUsIGNvbnRhaW5lcikge1xuXHRjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnQoUG9ydGFsLCB7IF92bm9kZTogdm5vZGUsIF9jb250YWluZXI6IGNvbnRhaW5lciB9KTtcblx0ZWwuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lcjtcblx0cmV0dXJuIGVsO1xufVxuIiwgImltcG9ydCB7XG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGh5ZHJhdGUgYXMgcHJlYWN0SHlkcmF0ZSxcblx0b3B0aW9ucyxcblx0dG9DaGlsZEFycmF5LFxuXHRDb21wb25lbnRcbn0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7XG5cdHVzZUNhbGxiYWNrLFxuXHR1c2VDb250ZXh0LFxuXHR1c2VEZWJ1Z1ZhbHVlLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUlkLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VMYXlvdXRFZmZlY3QsXG5cdHVzZU1lbW8sXG5cdHVzZVJlZHVjZXIsXG5cdHVzZVJlZixcblx0dXNlU3RhdGVcbn0gZnJvbSAncHJlYWN0L2hvb2tzJztcbmltcG9ydCB7XG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZUluc2VydGlvbkVmZmVjdCxcblx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdHVzZVRyYW5zaXRpb25cbn0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9FTEVNRU5UX1RZUEUgPVxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICYmIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcblx0MHhlYWM3O1xuXG5jb25zdCBDQU1FTF9QUk9QUyA9XG5cdC9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLztcbmNvbnN0IE9OX0FOSSA9IC9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS87XG5jb25zdCBDQU1FTF9SRVBMQUNFID0gL1tBLVowLTldL2c7XG5jb25zdCBJU19ET00gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBJbnB1dCB0eXBlcyBmb3Igd2hpY2ggb25jaGFuZ2Ugc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG8gb25pbnB1dC5cbi8vIHR5cGU9XCJmaWxlfGNoZWNrYm94fHJhZGlvXCIsIHBsdXMgXCJyYW5nZVwiIGluIElFMTEuXG4vLyAoSUUxMSBkb2Vzbid0IHN1cHBvcnQgU3ltYm9sLCB3aGljaCB3ZSB1c2UgaGVyZSB0byB0dXJuIGByYWRgIGludG8gYHJhYCB3aGljaCBtYXRjaGVzIFwicmFuZ2VcIilcbmNvbnN0IG9uQ2hhbmdlSW5wdXRUeXBlID0gdHlwZSA9PlxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT0gJ3N5bWJvbCdcblx0XHQ/IC9maWx8Y2hlfHJhZC9cblx0XHQ6IC9maWx8Y2hlfHJhL1xuXHQpLnRlc3QodHlwZSk7XG5cbi8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYHJlYWN0LXZpcnR1YWxpemVkYCBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGlzLlxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8vIGBVTlNBRkVfKmAgbGlmZWN5Y2xlIGhvb2tzXG4vLyBQcmVhY3Qgb25seSBldmVyIGludm9rZXMgdGhlIHVucHJlZml4ZWQgbWV0aG9kcy5cbi8vIEhlcmUgd2UgcHJvdmlkZSBhIGJhc2UgXCJmYWxsYmFja1wiIGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgYW55IGRlZmluZWQgVU5TQUZFXyBwcmVmaXhlZCBtZXRob2QuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgaXRzIG93biBgY29tcG9uZW50RGlkTW91bnQoKWAgKGluY2x1ZGluZyB2aWEgZGVmaW5lUHJvcGVydHkpLCB1c2UgdGhhdC5cbi8vIC0gSWYgYSBjb21wb25lbnQgZGVmaW5lcyBgVU5TQUZFX2NvbXBvbmVudERpZE1vdW50KClgLCBgY29tcG9uZW50RGlkTW91bnRgIGlzIHRoZSBhbGlhcyBnZXR0ZXIvc2V0dGVyLlxuLy8gLSBJZiBhbnl0aGluZyBhc3NpZ25zIHRvIGFuIGBVTlNBRkVfKmAgcHJvcGVydHksIHRoZSBhc3NpZ25tZW50IGlzIGZvcndhcmRlZCB0byB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJlYWN0anMvcHJlYWN0L2lzc3Vlcy8xOTQxXG5bXG5cdCdjb21wb25lbnRXaWxsTW91bnQnLFxuXHQnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdCdjb21wb25lbnRXaWxsVXBkYXRlJ1xuXS5mb3JFYWNoKGtleSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBrZXksIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbJ1VOU0FGRV8nICsga2V5XTtcblx0XHR9LFxuXHRcdHNldCh2KSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB2XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8qKlxuICogUHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBWTm9kZSB0cmVlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnQgRE9NIG5vZGUgdG8gcmVuZGVyIHZub2RlIHRyZWUgaW50b1xuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50IHwgbnVsbH0gVGhlIHJvb3QgY29tcG9uZW50IHJlZmVyZW5jZSBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0Ly8gUmVhY3QgZGVzdHJveXMgYW55IGV4aXN0aW5nIERPTSBub2Rlcywgc2VlICMxNzI3XG5cdC8vIC4uLmJ1dCBvbmx5IG9uIHRoZSBmaXJzdCByZW5kZXIsIHNlZSAjMTgyOFxuXHRpZiAocGFyZW50Ll9jaGlsZHJlbiA9PSBudWxsKSB7XG5cdFx0cGFyZW50LnRleHRDb250ZW50ID0gJyc7XG5cdH1cblxuXHRwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0cHJlYWN0SHlkcmF0ZSh2bm9kZSwgcGFyZW50KTtcblx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXG5cdHJldHVybiB2bm9kZSA/IHZub2RlLl9jb21wb25lbnQgOiBudWxsO1xufVxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblxuXHRlLnBlcnNpc3QgPSBlbXB0eTtcblx0ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGlzUHJvcGFnYXRpb25TdG9wcGVkO1xuXHRlLmlzRGVmYXVsdFByZXZlbnRlZCA9IGlzRGVmYXVsdFByZXZlbnRlZDtcblx0cmV0dXJuIChlLm5hdGl2ZUV2ZW50ID0gZSk7XG59O1xuXG5mdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKCkge1xuXHRyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcblx0cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZDtcbn1cblxuY29uc3QgY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlID0ge1xuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3M7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZURvbVZOb2RlKHZub2RlKSB7XG5cdGxldCBwcm9wcyA9IHZub2RlLnByb3BzLFxuXHRcdHR5cGUgPSB2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyA9IHt9O1xuXG5cdGxldCBpc05vbkRhc2hlZFR5cGUgPSB0eXBlLmluZGV4T2YoJy0nKSA9PT0gLTE7XG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIHtcblx0XHRsZXQgdmFsdWUgPSBwcm9wc1tpXTtcblxuXHRcdGlmIChcblx0XHRcdChpID09PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIHByb3BzICYmIHZhbHVlID09IG51bGwpIHx8XG5cdFx0XHQvLyBFbXVsYXRlIFJlYWN0J3MgYmVoYXZpb3Igb2Ygbm90IHJlbmRlcmluZyB0aGUgY29udGVudHMgb2Ygbm9zY3JpcHQgdGFncyBvbiB0aGUgY2xpZW50LlxuXHRcdFx0KElTX0RPTSAmJiBpID09PSAnY2hpbGRyZW4nICYmIHR5cGUgPT09ICdub3NjcmlwdCcpIHx8XG5cdFx0XHRpID09PSAnY2xhc3MnIHx8XG5cdFx0XHRpID09PSAnY2xhc3NOYW1lJ1xuXHRcdCkge1xuXHRcdFx0Ly8gU2tpcCBhcHBseWluZyB2YWx1ZSBpZiBpdCBpcyBudWxsL3VuZGVmaW5lZCBhbmQgd2UgYWxyZWFkeSBzZXRcblx0XHRcdC8vIGEgZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0bGV0IGxvd2VyQ2FzZWQgPSBpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGkgPT09ICdkZWZhdWx0VmFsdWUnICYmICd2YWx1ZScgaW4gcHJvcHMgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgaXMgdHJlYXRlZCBhcyBhIGZhbGxiYWNrIGB2YWx1ZWAgd2hlbiBhIHZhbHVlIHByb3AgaXMgcHJlc2VudCBidXQgbnVsbC91bmRlZmluZWQuXG5cdFx0XHQvLyBgZGVmYXVsdFZhbHVlYCBmb3IgRWxlbWVudHMgd2l0aCBubyB2YWx1ZSBwcm9wIGlzIHRoZSBzYW1lIGFzIHRoZSBET00gZGVmYXVsdFZhbHVlIHByb3BlcnR5LlxuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0fSBlbHNlIGlmIChpID09PSAnZG93bmxvYWQnICYmIHZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHQvLyBDYWxsaW5nIGBzZXRBdHRyaWJ1dGVgIHdpdGggYSB0cnV0aHkgdmFsdWUgd2lsbCBsZWFkIHRvIGl0IGJlaW5nXG5cdFx0XHQvLyBwYXNzZWQgYXMgYSBzdHJpbmdpZmllZCB2YWx1ZSwgZS5nLiBgZG93bmxvYWQ9XCJ0cnVlXCJgLiBSZWFjdFxuXHRcdFx0Ly8gY29udmVydHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQsIG90aGVyd2lzZSB0aGUgYXR0cmlidXRlXG5cdFx0XHQvLyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjYWxsZWRcblx0XHRcdC8vIFwidHJ1ZVwiIHVwb24gZG93bmxvYWRpbmcgaXQuXG5cdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ3RyYW5zbGF0ZScgJiYgdmFsdWUgPT09ICdubycpIHtcblx0XHRcdHZhbHVlID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkWzBdID09PSAnbycgJiYgbG93ZXJDYXNlZFsxXSA9PT0gJ24nKSB7XG5cdFx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uZG91YmxlY2xpY2snKSB7XG5cdFx0XHRcdGkgPSAnb25kYmxjbGljayc7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRsb3dlckNhc2VkID09PSAnb25jaGFuZ2UnICYmXG5cdFx0XHRcdCh0eXBlID09PSAnaW5wdXQnIHx8IHR5cGUgPT09ICd0ZXh0YXJlYScpICYmXG5cdFx0XHRcdCFvbkNoYW5nZUlucHV0VHlwZShwcm9wcy50eXBlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGxvd2VyQ2FzZWQgPSBpID0gJ29uaW5wdXQnO1xuXHRcdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25mb2N1cycpIHtcblx0XHRcdFx0aSA9ICdvbmZvY3VzaW4nO1xuXHRcdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25ibHVyJykge1xuXHRcdFx0XHRpID0gJ29uZm9jdXNvdXQnO1xuXHRcdFx0fSBlbHNlIGlmIChPTl9BTkkudGVzdChpKSkge1xuXHRcdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzTm9uRGFzaGVkVHlwZSAmJiBDQU1FTF9QUk9QUy50ZXN0KGkpKSB7XG5cdFx0XHRpID0gaS5yZXBsYWNlKENBTUVMX1JFUExBQ0UsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBzdXBwb3J0IGZvciBvbklucHV0IGFuZCBvbkNoYW5nZSwgc2VlICMzNTYxXG5cdFx0Ly8gaWYgd2UgaGF2ZSBhbiBvbmlucHV0IHByb3AgYWxyZWFkeSBjaGFuZ2UgaXQgdG8gb25pbnB1dENhcHR1cmVcblx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uaW5wdXQnKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0pIHtcblx0XHRcdFx0aSA9ICdvbmlucHV0Q2FwdHVyZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdmFsdWU7XG5cdH1cblxuXHQvLyBBZGQgc3VwcG9ydCBmb3IgYXJyYXkgc2VsZWN0IHZhbHVlczogPHNlbGVjdCBtdWx0aXBsZSB2YWx1ZT17W119IC8+XG5cdGlmIChcblx0XHR0eXBlID09ICdzZWxlY3QnICYmXG5cdFx0bm9ybWFsaXplZFByb3BzLm11bHRpcGxlICYmXG5cdFx0QXJyYXkuaXNBcnJheShub3JtYWxpemVkUHJvcHMudmFsdWUpXG5cdCkge1xuXHRcdC8vIGZvckVhY2goKSBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQsIHdoaWNoIHdlIGFidXNlIGhlcmUgdG8gdW5zZXQgdGhlIHZhbHVlIHByb3AuXG5cdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcblx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHRWYWx1ZSBpbiBzZWxlY3QgdGFnXG5cdGlmICh0eXBlID09ICdzZWxlY3QnICYmIG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGQucHJvcHMuc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgPT0gY2hpbGQucHJvcHMudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJvcHMuY2xhc3MgJiYgIXByb3BzLmNsYXNzTmFtZSkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IHByb3BzLmNsYXNzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcblx0XHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRcdCdjbGFzc05hbWUnLFxuXHRcdFx0Y2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgJiYgIXByb3BzLmNsYXNzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzcyAmJiBwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBub3JtYWxpemVkUHJvcHMuY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXHR9XG5cblx0dm5vZGUucHJvcHMgPSBub3JtYWxpemVkUHJvcHM7XG59XG5cbmxldCBvbGRWTm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0Ly8gb25seSBub3JtYWxpemUgcHJvcHMgb24gRWxlbWVudCBub2Rlc1xuXHRpZiAodHlwZW9mIHZub2RlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aGFuZGxlRG9tVk5vZGUodm5vZGUpO1xuXHR9XG5cblx0dm5vZGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cblx0aWYgKG9sZFZOb2RlSG9vaykgb2xkVk5vZGVIb29rKHZub2RlKTtcbn07XG5cbi8vIE9ubHkgbmVlZGVkIGZvciByZWFjdC1yZWxheVxubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5jb25zdCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5vcHRpb25zLl9yZW5kZXIgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKG9sZEJlZm9yZVJlbmRlcikge1xuXHRcdG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cdH1cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG59O1xuXG5jb25zdCBvbGREaWZmZWQgPSBvcHRpb25zLmRpZmZlZDtcbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGREaWZmZWQpIHtcblx0XHRvbGREaWZmZWQodm5vZGUpO1xuXHR9XG5cblx0Y29uc3QgcHJvcHMgPSB2bm9kZS5wcm9wcztcblx0Y29uc3QgZG9tID0gdm5vZGUuX2RvbTtcblxuXHRpZiAoXG5cdFx0ZG9tICE9IG51bGwgJiZcblx0XHR2bm9kZS50eXBlID09PSAndGV4dGFyZWEnICYmXG5cdFx0J3ZhbHVlJyBpbiBwcm9wcyAmJlxuXHRcdHByb3BzLnZhbHVlICE9PSBkb20udmFsdWVcblx0KSB7XG5cdFx0ZG9tLnZhbHVlID0gcHJvcHMudmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMudmFsdWU7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRoaXMgaXMgYSB2ZXJ5IHZlcnkgcHJpdmF0ZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgUmVhY3QgaXRcbi8vIGlzIHVzZWQgdG8gc29ydC1vZiBkbyBydW50aW1lIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuZXhwb3J0IGNvbnN0IF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0ge1xuXHRSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiB7XG5cdFx0Y3VycmVudDoge1xuXHRcdFx0cmVhZENvbnRleHQoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudENvbXBvbmVudC5fZ2xvYmFsQ29udGV4dFtjb250ZXh0Ll9pZF0ucHJvcHMudmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0dXNlQ2FsbGJhY2ssXG5cdFx0XHR1c2VDb250ZXh0LFxuXHRcdFx0dXNlRGVidWdWYWx1ZSxcblx0XHRcdHVzZURlZmVycmVkVmFsdWUsXG5cdFx0XHR1c2VFZmZlY3QsXG5cdFx0XHR1c2VJZCxcblx0XHRcdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdFx0XHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdFx0XHR1c2VMYXlvdXRFZmZlY3QsXG5cdFx0XHR1c2VNZW1vLFxuXHRcdFx0Ly8gdXNlTXV0YWJsZVNvdXJjZSwgLy8gZXhwZXJpbWVudGFsLW9ubHkgYW5kIHJlcGxhY2VkIGJ5IHVTRVMsIGxpa2VseSBub3Qgd29ydGggc3VwcG9ydGluZ1xuXHRcdFx0dXNlUmVkdWNlcixcblx0XHRcdHVzZVJlZixcblx0XHRcdHVzZVN0YXRlLFxuXHRcdFx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdFx0XHR1c2VUcmFuc2l0aW9uXG5cdFx0fVxuXHR9XG59O1xuIiwgImltcG9ydCB7XG5cdGNyZWF0ZUVsZW1lbnQsXG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsXG5cdGNyZWF0ZVJlZixcblx0Q29tcG9uZW50LFxuXHRjcmVhdGVDb250ZXh0LFxuXHRGcmFnbWVudFxufSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlUmVmLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VNZW1vLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZVxufSBmcm9tICdwcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJy4vUHVyZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi9tZW1vJztcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICcuL2ZvcndhcmRSZWYnO1xuaW1wb3J0IHsgQ2hpbGRyZW4gfSBmcm9tICcuL0NoaWxkcmVuJztcbmltcG9ydCB7IFN1c3BlbnNlLCBsYXp5IH0gZnJvbSAnLi9zdXNwZW5zZSc7XG5pbXBvcnQgeyBTdXNwZW5zZUxpc3QgfSBmcm9tICcuL3N1c3BlbnNlLWxpc3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAnLi9wb3J0YWxzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG5cdGh5ZHJhdGUsXG5cdHJlbmRlcixcblx0UkVBQ1RfRUxFTUVOVF9UWVBFLFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufSBmcm9tICcuL3JlbmRlcic7XG5cbmNvbnN0IHZlcnNpb24gPSAnMTguMy4xJzsgLy8gdHJpY2sgbGlicmFyaWVzIHRvIHRoaW5rIHdlIGFyZSByZWFjdFxuXG4vKipcbiAqIExlZ2FjeSB2ZXJzaW9uIG9mIGNyZWF0ZUVsZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5KHR5cGUpIHtcblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSB2YWxpZCAocClyZWFjdCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gISFlbGVtZW50ICYmIGVsZW1lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBGcmFnbWVudCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGcmFnbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50LnR5cGUgPT09IEZyYWdtZW50O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBhIE1lbW8gbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTWVtbyhlbGVtZW50KSB7XG5cdHJldHVybiAoXG5cdFx0ISFlbGVtZW50ICYmXG5cdFx0ISFlbGVtZW50LmRpc3BsYXlOYW1lICYmXG5cdFx0KHR5cGVvZiBlbGVtZW50LmRpc3BsYXlOYW1lID09PSAnc3RyaW5nJyB8fFxuXHRcdFx0ZWxlbWVudC5kaXNwbGF5TmFtZSBpbnN0YW5jZW9mIFN0cmluZykgJiZcblx0XHRlbGVtZW50LmRpc3BsYXlOYW1lLnN0YXJ0c1dpdGgoJ01lbW8oJylcblx0KTtcbn1cblxuLyoqXG4gKiBXcmFwIGBjbG9uZUVsZW1lbnRgIHRvIGFib3J0IGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBlbGVtZW50IGFuZCBhcHBseVxuICogYWxsIHZub2RlIG5vcm1hbGl6YXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gZWxlbWVudCBUaGUgdm5vZGUgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBPcHRpb25hbCBjb21wb25lbnQgY2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQpIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdHJldHVybiBwcmVhY3RDbG9uZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjb21wb25lbnQgdHJlZSBmcm9tIHRoZSBET00sIGluY2x1ZGluZyBzdGF0ZSBhbmQgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG5cdGlmIChjb250YWluZXIuX2NoaWxkcmVuKSB7XG5cdFx0cHJlYWN0UmVuZGVyKG51bGwsIGNvbnRhaW5lcik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWF0Y2hpbmcgRE9NIG5vZGUgZm9yIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudCB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudCkge1xuXHRyZXR1cm4gKFxuXHRcdChjb21wb25lbnQgJiZcblx0XHRcdChjb21wb25lbnQuYmFzZSB8fCAoY29tcG9uZW50Lm5vZGVUeXBlID09PSAxICYmIGNvbXBvbmVudCkpKSB8fFxuXHRcdG51bGxcblx0KTtcbn1cblxuLyoqXG4gKiBEZXByZWNhdGVkIHdheSB0byBjb250cm9sIGJhdGNoZWQgcmVuZGVyaW5nIGluc2lkZSB0aGUgcmVjb25jaWxlciwgYnV0IHdlXG4gKiBhbHJlYWR5IHNjaGVkdWxlIGluIGJhdGNoZXMgaW5zaWRlIG91ciByZW5kZXJpbmcgY29kZVxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IHZvaWR9IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHVwZGF0ZWRcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmNvbnN0IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gKGNhbGxiYWNrLCBhcmcpID0+IGNhbGxiYWNrKGFyZyk7XG5cbi8qKlxuICogSW4gUmVhY3QsIGBmbHVzaFN5bmNgIGZsdXNoZXMgdGhlIGVudGlyZSB0cmVlIGFuZCBmb3JjZXMgYSByZXJlbmRlci4gSXQnc1xuICogaW1wbG1lbnRlZCBoZXJlIGFzIGEgbm8tb3AuXG4gKiBAdGVtcGxhdGUgQXJnXG4gKiBAdGVtcGxhdGUgUmVzdWx0XG4gKiBAcGFyYW0geyhhcmc6IEFyZykgPT4gUmVzdWx0fSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBmbHVzaFxuICogQHBhcmFtIHtBcmd9IFthcmddIE9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGZsdXNoU3luYyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIFN0cmljdCBNb2RlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBQcmVhY3QsIHNvIHdlIHByb3ZpZGUgYSBzdGFuZC1pbiBmb3IgaXRcbiAqIHRoYXQganVzdCByZW5kZXJzIGl0cyBjaGlsZHJlbiB3aXRob3V0IGltcG9zaW5nIGFueSByZXN0cmljdGlvbnMuXG4gKi9cbmNvbnN0IFN0cmljdE1vZGUgPSBGcmFnbWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYikge1xuXHRjYigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZSh2YWwpIHtcblx0cmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG5cdHJldHVybiBbZmFsc2UsIHN0YXJ0VHJhbnNpdGlvbl07XG59XG5cbi8vIFRPRE86IGluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGEgVk5vZGUgaXMgZGlmZmVkIGFzIHdlIHdhbnQgdG8gaW5zZXJ0XG4vLyBzdHlsZXMvLi4uIGJlZm9yZSBpdCBhdHRhY2hlc1xuZXhwb3J0IGNvbnN0IHVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcblxuLy8gY29tcGF0IHRvIHJlYWN0LWlzXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5cbi8qKlxuICogVGhpcyBpcyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc3JjL3VzZVN5bmNFeHRlcm5hbFN0b3JlU2hpbUNsaWVudC5qcyNMODRcbiAqIG9uIGEgaGlnaCBsZXZlbCB0aGlzIGN1dHMgb3V0IHRoZSB3YXJuaW5ncywgLi4uIGFuZCBhdHRlbXB0cyBhIHNtYWxsZXIgaW1wbGVtZW50YXRpb25cbiAqIEB0eXBlZGVmIHt7IF92YWx1ZTogYW55OyBfZ2V0U25hcHNob3Q6ICgpID0+IGFueSB9fSBTdG9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuXHRjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIHt7IF9pbnN0YW5jZTogU3RvcmUgfX0gU3RvcmVSZWZcblx0ICogQHR5cGUge1tTdG9yZVJlZiwgKHN0b3JlOiBTdG9yZVJlZikgPT4gdm9pZF19XG5cdCAqL1xuXHRjb25zdCBbeyBfaW5zdGFuY2UgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuXHRcdF9pbnN0YW5jZTogeyBfdmFsdWU6IHZhbHVlLCBfZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH1cblx0fSk7XG5cblx0dXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcblx0XHRfaW5zdGFuY2UuX3ZhbHVlID0gdmFsdWU7XG5cdFx0X2luc3RhbmNlLl9nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuXG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblx0fSwgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgW3N1YnNjcmliZV0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEB0eXBlIHsoaW5zdDogU3RvcmUpID0+IGJvb2xlYW59ICovXG5mdW5jdGlvbiBkaWRTbmFwc2hvdENoYW5nZShpbnN0KSB7XG5cdGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5fZ2V0U25hcHNob3Q7XG5cdGNvbnN0IHByZXZWYWx1ZSA9IGluc3QuX3ZhbHVlO1xuXHR0cnkge1xuXHRcdGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG5cdFx0cmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ICogZnJvbSAncHJlYWN0L2hvb2tzJztcbmV4cG9ydCB7XG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2Vcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuXG4vLyBSZWFjdCBjb3BpZXMgdGhlIG5hbWVkIGV4cG9ydHMgdG8gdGhlIGRlZmF1bHQgb25lLlxuZXhwb3J0IGRlZmF1bHQge1xuXHR1c2VTdGF0ZSxcblx0dXNlSWQsXG5cdHVzZVJlZHVjZXIsXG5cdHVzZUVmZmVjdCxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVRyYW5zaXRpb24sXG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRzdGFydFRyYW5zaXRpb24sXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWUsXG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNFbGVtZW50LFxuXHRpc0ZyYWdtZW50LFxuXHRpc01lbW8sXG5cdGZpbmRET01Ob2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdG1lbW8sXG5cdGZvcndhcmRSZWYsXG5cdGZsdXNoU3luYyxcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuIiwgImNvbnN0IEVOQ09ERURfRU5USVRJRVMgPSAvW1wiJjxdLztcblxuLyoqIEBwYXJhbSB7c3RyaW5nfSBzdHIgKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFbnRpdGllcyhzdHIpIHtcblx0Ly8gU2tpcCBhbGwgd29yayBmb3Igc3RyaW5ncyB3aXRoIG5vIGVudGl0aWVzIG5lZWRpbmcgZW5jb2Rpbmc6XG5cdGlmIChzdHIubGVuZ3RoID09PSAwIHx8IEVOQ09ERURfRU5USVRJRVMudGVzdChzdHIpID09PSBmYWxzZSkgcmV0dXJuIHN0cjtcblxuXHRsZXQgbGFzdCA9IDAsXG5cdFx0aSA9IDAsXG5cdFx0b3V0ID0gJycsXG5cdFx0Y2ggPSAnJztcblxuXHQvLyBTZWVrIGZvcndhcmQgaW4gc3RyIHVudGlsIHRoZSBuZXh0IGVudGl0eSBjaGFyOlxuXHRmb3IgKDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaSkpIHtcblx0XHRcdGNhc2UgMzQ6XG5cdFx0XHRcdGNoID0gJyZxdW90Oyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0Y2ggPSAnJmFtcDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgNjA6XG5cdFx0XHRcdGNoID0gJyZsdDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBBcHBlbmQgc2tpcHBlZC9idWZmZXJlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZW5jb2RlZCBlbnRpdHk6XG5cdFx0aWYgKGkgIT09IGxhc3QpIG91dCArPSBzdHIuc2xpY2UobGFzdCwgaSk7XG5cdFx0b3V0ICs9IGNoO1xuXHRcdC8vIFN0YXJ0IHRoZSBuZXh0IHNlZWsvYnVmZmVyIGFmdGVyIHRoZSBlbnRpdHkncyBvZmZzZXQ6XG5cdFx0bGFzdCA9IGkgKyAxO1xuXHR9XG5cdGlmIChpICE9PSBsYXN0KSBvdXQgKz0gc3RyLnNsaWNlKGxhc3QsIGkpO1xuXHRyZXR1cm4gb3V0O1xufVxuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElTX05PTl9ESU1FTlNJT05BTCB9IGZyb20gJy4uLy4uL3NyYy9jb25zdGFudHMnO1xuXG5sZXQgdm5vZGVJZCA9IDA7XG5cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIFRoaXMgZmlsZSBleHBvcnRzIHZhcmlvdXMgbWV0aG9kcyB0aGF0IGltcGxlbWVudCBCYWJlbCdzIFwiYXV0b21hdGljXCIgSlNYIHJ1bnRpbWUgQVBJOlxuICogLSBqc3godHlwZSwgcHJvcHMsIGtleSlcbiAqIC0ganN4cyh0eXBlLCBwcm9wcywga2V5KVxuICogLSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgX19zb3VyY2UsIF9fc2VsZilcbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgY3JlYXRlVk5vZGUgaGVyZSBpcyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuICogQmVuY2htYXJrczogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81ZjZiNTRhMGI0NjMyMTAwYTdkY2QyYjNcbiAqL1xuXG4vKipcbiAqIEpTWC5FbGVtZW50IGZhY3RvcnkgdXNlZCBieSBCYWJlbCdzIHtydW50aW1lOlwiYXV0b21hdGljXCJ9IEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Vk5vZGVbJ3R5cGUnXX0gdHlwZVxuICogQHBhcmFtIHtWTm9kZVsncHJvcHMnXX0gcHJvcHNcbiAqIEBwYXJhbSB7Vk5vZGVbJ2tleSddfSBba2V5XVxuICogQHBhcmFtIHt1bmtub3dufSBbaXNTdGF0aWNDaGlsZHJlbl1cbiAqIEBwYXJhbSB7dW5rbm93bn0gW19fc291cmNlXVxuICogQHBhcmFtIHt1bmtub3dufSBbX19zZWxmXVxuICovXG5mdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBfX3NvdXJjZSwgX19zZWxmKSB7XG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cdC8vIFdlJ2xsIHdhbnQgdG8gcHJlc2VydmUgYHJlZmAgaW4gcHJvcHMgdG8gZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3Jcblx0Ly8gZm9yd2FyZFJlZiBjb21wb25lbnRzIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGF0IHNob3VsZCBoYXBwZW4gdmlhXG5cdC8vIGEgc2VwYXJhdGUgUFIuXG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBwcm9wcyxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRpZiAoJ3JlZicgaW4gcHJvcHMpIHtcblx0XHRyZWYgPSBwcm9wcy5yZWY7XG5cdFx0ZGVsZXRlIHByb3BzLnJlZjtcblx0fVxuXG5cdC8qKiBAdHlwZSB7Vk5vZGUgJiB7IF9fc291cmNlOiBhbnk7IF9fc2VsZjogYW55IH19ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHM6IG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogLS12bm9kZUlkLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwLFxuXHRcdF9fc291cmNlLFxuXHRcdF9fc2VsZlxuXHR9O1xuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wcy5cblx0Ly8gTm90ZTogYHR5cGVgIGlzIG9mdGVuIGEgU3RyaW5nLCBhbmQgY2FuIGJlIGB1bmRlZmluZWRgIGluIGRldmVsb3BtZW50LlxuXHRpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgKHJlZiA9IHR5cGUuZGVmYXVsdFByb3BzKSkge1xuXHRcdGZvciAoaSBpbiByZWYpXG5cdFx0XHRpZiAodHlwZW9mIG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcmVmW2ldO1xuXHRcdFx0fVxuXHR9XG5cblx0aWYgKG9wdGlvbnMudm5vZGUpIG9wdGlvbnMudm5vZGUodm5vZGUpO1xuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcGxhdGUgdm5vZGUuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGV4cGVjdGVkIHRvIGJlXG4gKiB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7c3RyaW5nW119IHRlbXBsYXRlc1xuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nIHwgbnVsbCB8IFZOb2RlPn0gZXhwcnNcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZnVuY3Rpb24ganN4VGVtcGxhdGUodGVtcGxhdGVzLCAuLi5leHBycykge1xuXHRjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50LCB7IHRwbDogdGVtcGxhdGVzLCBleHBycyB9KTtcblx0Ly8gQnlwYXNzIHJlbmRlciB0byBzdHJpbmcgdG9wIGxldmVsIEZyYWdtZW50IG9wdGltaXphdGlvblxuXHR2bm9kZS5rZXkgPSB2bm9kZS5fdm5vZGU7XG5cdHJldHVybiB2bm9kZTtcbn1cblxuY29uc3QgSlNfVE9fQ1NTID0ge307XG5jb25zdCBDU1NfUkVHRVggPSAvW0EtWl0vZztcblxuLyoqXG4gKiBTZXJpYWxpemUgYW4gSFRNTCBhdHRyaWJ1dGUgdG8gYSBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMgbm90XG4gKiBleHBlY3RlZCB0byBiZSB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlXG4gKiBKU1ggdHJhbnNmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24ganN4QXR0cihuYW1lLCB2YWx1ZSkge1xuXHRpZiAob3B0aW9ucy5hdHRyKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3B0aW9ucy5hdHRyKG5hbWUsIHZhbHVlKTtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRpZiAobmFtZSA9PT0gJ3JlZicgfHwgbmFtZSA9PT0gJ2tleScpIHJldHVybiAnJztcblx0aWYgKG5hbWUgPT09ICdzdHlsZScgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRmb3IgKGxldCBwcm9wIGluIHZhbHVlKSB7XG5cdFx0XHRsZXQgdmFsID0gdmFsdWVbcHJvcF07XG5cdFx0XHRpZiAodmFsICE9IG51bGwgJiYgdmFsICE9PSAnJykge1xuXHRcdFx0XHRjb25zdCBuYW1lID1cblx0XHRcdFx0XHRwcm9wWzBdID09ICctJ1xuXHRcdFx0XHRcdFx0PyBwcm9wXG5cdFx0XHRcdFx0XHQ6IEpTX1RPX0NTU1twcm9wXSB8fFxuXHRcdFx0XHRcdFx0XHQoSlNfVE9fQ1NTW3Byb3BdID0gcHJvcC5yZXBsYWNlKENTU19SRUdFWCwgJy0kJicpLnRvTG93ZXJDYXNlKCkpO1xuXG5cdFx0XHRcdGxldCBzdWZmaXggPSAnOyc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0XHRcdC8vIEV4Y2x1ZGUgY3VzdG9tLWF0dHJpYnV0ZXNcblx0XHRcdFx0XHQhbmFtZS5zdGFydHNXaXRoKCctLScpICYmXG5cdFx0XHRcdFx0IUlTX05PTl9ESU1FTlNJT05BTC50ZXN0KG5hbWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN1ZmZpeCA9ICdweDsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0ciA9IHN0ciArIG5hbWUgKyAnOicgKyB2YWwgKyBzdWZmaXg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lICsgJz1cIicgKyBzdHIgKyAnXCInO1xuXHR9XG5cblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR2YWx1ZSA9PT0gZmFsc2UgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG5cdCkge1xuXHRcdHJldHVybiAnJztcblx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWU7XG5cblx0cmV0dXJuIG5hbWUgKyAnPVwiJyArIGVuY29kZUVudGl0aWVzKHZhbHVlKSArICdcIic7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgZHluYW1pYyBjaGlsZCBwYXNzZWQgdG8gYGpzeFRlbXBsYXRlYC4gVGhpcyBmdW5jdGlvblxuICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhyb3VnaCBhXG4gKiBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsIHwgVk5vZGUgfCBBcnJheTxzdHJpbmcgfCBudWxsIHwgVk5vZGU+fVxuICovXG5mdW5jdGlvbiBqc3hFc2NhcGUodmFsdWUpIHtcblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gQ2hlY2sgZm9yIFZOb2RlXG5cdFx0aWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YWx1ZVtpXSA9IGpzeEVzY2FwZSh2YWx1ZVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVuY29kZUVudGl0aWVzKCcnICsgdmFsdWUpO1xufVxuXG5leHBvcnQge1xuXHRjcmVhdGVWTm9kZSBhcyBqc3gsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeHMsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeERFVixcblx0RnJhZ21lbnQsXG5cdC8vIHByZWNvbXBpbGVkIEpTWCB0cmFuc2Zvcm1cblx0anN4VGVtcGxhdGUsXG5cdGpzeEF0dHIsXG5cdGpzeEVzY2FwZVxufTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQge1xuICAgIEFQUF9DT05URVhULFxuICAgIENPTVBPTkVOVF9DT05URVhULFxuICAgIENVUlJFTlRfRklMRV9DT05URVhULFxuICAgIERBVEFDT1JFX0NPTlRFWFQsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIE1hcmtkb3duLFxufSBmcm9tIFwiLi4vLi4vdWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUsIGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG5pbXBvcnQgXCIuL2VtYmVkLmNzc1wiO1xuXG4vKiogUmVuZGVycyBhbiBlbWJlZCBpbiB0aGUgY2Fub25pY2FsIE9ic2lkaWFuIHN0eWxlLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWJlZCh7XG4gICAgbGluayxcbiAgICBpbmxpbmUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxufToge1xuICAgIC8qKiBUaGUgbGluayB0aGF0IGlzIGJlaW5nIGVtYmVkZGVkLiAqL1xuICAgIGxpbms6IExpbms7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGVtYmVkIHNob3VsZCBiZSBzaG93biBpbmxpbmUgd2l0aCBsZXNzIHBhZGRpbmcuICovXG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIC8qKiBUaGUgcGF0aCB3aGljaCB0aGUgbGluayB3aWxsIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgY3VycmVudEZpbGUgPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gbWF5YmVTb3VyY2VQYXRoID8/IGN1cnJlbnRGaWxlID8/IFwiXCI7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBsaW5rZWRGaWxlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCBzb3VyY2VQYXRoKSxcbiAgICAgICAgW2xpbmsucGF0aCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWxpbmtlZEZpbGUpIHJldHVybjtcblxuICAgICAgICBjb250YWluZXIuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSBhcHAuZW1iZWRSZWdpc3RyeS5nZXRFbWJlZENyZWF0b3IobGlua2VkRmlsZSk7XG4gICAgICAgIGxldCBlbWJlZENvbXBvbmVudCA9IG5ldyBjcmVhdG9yKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmt0ZXh0OiBsaW5rLnBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICAgICAgICBzaG93SW5saW5lOiBpbmxpbmUsXG4gICAgICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsOiBjb250YWluZXIuY3VycmVudCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rZWRGaWxlLFxuICAgICAgICAgICAgbGluay5zdWJwYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgY29tcG9uZW50LmFkZENoaWxkKGVtYmVkQ29tcG9uZW50KTtcbiAgICAgICAgZW1iZWRDb21wb25lbnQubG9hZEZpbGUobGlua2VkRmlsZSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNvbXBvbmVudC5yZW1vdmVDaGlsZChlbWJlZENvbXBvbmVudCk7XG4gICAgfSwgW2NvbnRhaW5lci5jdXJyZW50LCBsaW5rZWRGaWxlLCBsaW5rLnN1YnBhdGhdKTtcblxuICAgIGlmICghbGlua2VkRmlsZSkge1xuICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtgQ291bGQgbm90IGZpbmQgYSBwYWdlIGF0IGxpbmtlZCBsb2NhdGlvbjogJHtsaW5rLnBhdGh9YH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGMtZW1iZWRcIiByZWY9e2NvbnRhaW5lcn0+PC9kaXY+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBlbWJlZCBvZiBhbiBhcmJpdHJhcnkgc3BhbiBvZiBsaW5lcyBpbiBhIE1hcmtkb3duIGZpbGUuIE9wZXJhdGVzIGJ5IGFzeW5jaHJvbm91c2x5IGxvYWRpbmcgdGhlIGZpbGUgYW5kIHB1bGxpbmdcbiAqIG91dCB0aGUgZ2l2ZW4gW3N0YXJ0LCBlbmQpIGxpbmUgc3Bhbi5cbiAqXG4gKiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGZpbGUgb24gZGlzayB0byBiZSBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgd2hlbiB5b3UgZmlyc3QgbG9hZGVkIHRoZSBbc3RhcnQsIGVuZCkgbGluZSBzcGFuXG4gKiAtIGdlbmVyYWxseSwgZGF0YWNvcmUgd2lsbCBhc3luY2hyb25vdXNseSByZWxvYWQgdGhlc2UgZmlsZXMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGZpeCBpdCdzIGluZGV4LCBidXQgeW91IG1heSBoYXZlIHNvbWVcbiAqIHN0cmFuZ2UgYXJ0aWZhY3RzIG90aGVyd2lzZS5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gTGluZVNwYW5FbWJlZCh7XG4gICAgcGF0aCxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhwbGFpbixcbiAgICBzaG93RXhwbGFpbiA9IHRydWUsXG59OiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgZXhwbGFpbj86IHN0cmluZztcbiAgICBzaG93RXhwbGFpbj86IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgY29udGVudCA9IHVzZUxpbmVTcGFuKHBhdGgsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGV4cGxhaW5lciA9IGV4cGxhaW4gPz8gYCR7Z2V0RmlsZVRpdGxlKHBhdGgpfSAoJHtzdGFydH0gLSAke2VuZH0pYDtcblxuICAgIC8vIFRvIGFsbG93IGZvciB0aGUgZXhwbGFpbmVyIHRvIGJlIGNsaWNrZWQgb24gdG8gbmF2aWdhdGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbnN0IHdvcmtzcGFjZSA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpPy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgb25FeHBsYWluQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB3b3Jrc3BhY2U/Lm9wZW5MaW5rVGV4dChwYXRoLCBwYXRoLCBldmVudC5zaGlmdEtleSksXG4gICAgICAgIFtwYXRoXVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGNvbnRlbnQudHlwZSkge1xuICAgICAgICBjYXNlIFwibG9hZGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YFJlYWRpbmcgJHtwYXRofSAoJHtzdGFydH0gLSAke2VuZH0pYH0gLz47XG4gICAgICAgIGNhc2UgXCJmaWxlLW5vdC1mb3VuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YENvdWxkIG5vdCBmaW5kIGEgZmlsZSBhdCBwYXRoOiAke2NvbnRlbnQucGF0aH1gfSAvPjtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtjb250ZW50Lm1lc3NhZ2V9IC8+O1xuICAgICAgICBjYXNlIFwibG9hZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtc3Bhbi1lbWJlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd0V4cGxhaW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZW1iZWQtc291cmNlXCIgb25DbGljaz17b25FeHBsYWluQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBsYWluZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXtjb250ZW50LmNvbnRlbnR9IGlubGluZT17ZmFsc2V9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFN0YXRlIHRyYWNraW5nIGZvciBsb2FkaW5nIGEgbGluZSBzcGFuIGFzeW5jaHJvbm91c2x5LiAqL1xuZXhwb3J0IHR5cGUgTGluZVNwYW5Db250ZW50ID1cbiAgICB8IHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgIHwgeyB0eXBlOiBcImZpbGUtbm90LWZvdW5kXCI7IHBhdGg6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJsb2FkZWRcIjsgY29udGVudDogc3RyaW5nIH07XG5cbi8qKiBVdGlsaXR5IGhvb2sgd2hpY2ggbG9hZHMgcGF0aFtzdGFydC4uZW5kKSBhcyBsb25nIGFzIHRoZSB0YXJnZXQgZmlsZSBleGlzdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5lU3BhbihwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogTGluZVNwYW5Db250ZW50IHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkYXRhY29yZSA9IHVzZUNvbnRleHQoREFUQUNPUkVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIHVwZGF0ZV0gPSB1c2VSZWR1Y2VyPExpbmVTcGFuQ29udGVudCwgTGluZVNwYW5Db250ZW50PihcbiAgICAgICAgKHN0YXRlLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFuIGVycm9yIHVwZGF0ZSB0aGF0IHdvdWxkIG92ZXJyaWRlIGEgdmFsaWQgY3VycmVudCBzdGF0ZTsgb3RoZXJ3aXNlLCB1cGRhdGUgdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChzdGF0ZS50eXBlID09IFwibG9hZGVkXCIgJiYgZXZlbnQudHlwZSAhPT0gXCJsb2FkZWRcIikgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBjdXJyZW50IHBhdGggdG8gc2VlIGlmIGl0IHBvaW50cyB0byBhIHZhbGlkIGZpbGUuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlKHsgdHlwZTogXCJmaWxlLW5vdC1mb3VuZFwiLCBwYXRoOiBwYXRoIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGZpbGUgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgIGRhdGFjb3JlXG4gICAgICAgICAgICAucmVhZChmaWxlKVxuICAgICAgICAgICAgLnRoZW4oKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoeyB0eXBlOiBcImxvYWRlZFwiLCBjb250ZW50OiBsaW5lUmFuZ2UoY29udGVudCwgc3RhcnQsIGVuZCkgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh7IHR5cGU6IFwiZXJyb3JcIiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0sIFtwYXRoLCBzdGFydCwgZW5kXSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG59XG4iLCAiaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBTaW1wbGVFcnJvckJvdW5kYXJ5LCBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgRGF0YWNvcmVDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJDaGlsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBoLCByZW5kZXIsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVubW91bnRDb21wb25lbnRBdE5vZGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExvYWRpbmdCb3VuZGFyeSwgU2NyaXB0Q29udGFpbmVyIH0gZnJvbSBcIi4vbG9hZGluZy1ib3VuZGFyeVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcblxuLyoqXG4gKiBSZW5kZXJzIGEgc2NyaXB0IGJ5IGV4ZWN1dGluZyBpdCBhbmQgaGFuZGluZyBpdCB0aGUgYXBwcm9wcmlhdGUgUmVhY3QgY29udGV4dCB0byBleGVjdXRlXG4gKiBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVKU1JlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHJpdmF0ZSBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFwaTogRGF0YWNvcmVMb2NhbEFwaSxcbiAgICAgICAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBzY3JpcHQ6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZVxuICAgICkge1xuICAgICAgICBzdXBlcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgc2NyaXB0IHRvIHByb2R1Y2UgZWl0aGVyIGEgcmVuZGVyYWJsZSBKU1ggb2JqZWN0IG9yIGEgZnVuY3Rpb24uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcmltaXRpdmVTY3JpcHQgPSB0cmFuc3BpbGUodGhpcy5zY3JpcHQsIHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRXZhbEluQ29udGV4dChwcmltaXRpdmVTY3JpcHQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGM6IHRoaXMuYXBpLFxuICAgICAgICAgICAgICAgICAgICBoOiBoLFxuICAgICAgICAgICAgICAgICAgICBGcmFnbWVudDogRnJhZ21lbnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgPERhdGFjb3JlQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIGFwcD17dGhpcy5hcGkuYXBwfVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e3RoaXN9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFjb3JlPXt0aGlzLmFwaS5jb3JlfVxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5hcGkuY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17dGhpcy5wYXRofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaW1wbGVFcnJvckJvdW5kYXJ5IG1lc3NhZ2U9XCJUaGUgZGF0YWNvcmUgc2NyaXB0IGZhaWxlZCB0byBleGVjdXRlLlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuYXBpLmNvcmV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NyaXB0Q29udGFpbmVyIGV4ZWN1dG9yPXtyZW5kZXJlcn0gc291cmNlUGF0aD17dGhpcy5wYXRofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTG9hZGluZ0JvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TaW1wbGVFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8L0NVUlJFTlRfRklMRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIkRhdGFjb3JlIGZhaWxlZCB0byByZW5kZXIgdGhlIGNvZGUgYmxvY2suXCIgZXJyb3I9e1wiXCIgKyBleH0gLz4sXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKiogQSB0cml2aWFsIHdyYXBwZXIgd2hpY2ggYWxsb3dzIGEgcmVhY3QgY29tcG9uZW50IHRvIGxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGBNYXJrZG93blJlbmRlckNoaWxkYC4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdFJlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgYXBwOiBBcHAsXG4gICAgICAgIHB1YmxpYyBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgICAgIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBwdWJsaWMgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogVk5vZGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25sb2FkKCk6IHZvaWQge1xuICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICA8RGF0YWNvcmVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICAgICAgICBhcHA9e3RoaXMuYXBwfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD17dGhpc31cbiAgICAgICAgICAgICAgICBkYXRhY29yZT17dGhpcy5kYXRhY29yZX1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5kYXRhY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q1VSUkVOVF9GSUxFX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc291cmNlUGF0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuZGF0YWNvcmV9Pnt0aGlzLmVsZW1lbnR9PC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9DVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5jb250YWluZXIpO1xuICAgIH1cbn1cbiIsICIvLyEgVXRpbGl0aWVzIGZvciBydW5uaW5nIGphdmFzY3JpcHQuXG5cbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gXCJzdWNyYXNlXCI7XG5cbmV4cG9ydCB0eXBlIFNjcmlwdExhbmd1YWdlID0gXCJqc1wiIHwgXCJ0c1wiIHwgXCJqc3hcIiB8IFwidHN4XCI7XG5cbi8qKiBDb252ZXJ0cyBhIHJhdyBzY3JpcHQgaW4gdGhlIGdpdmVuIGxhbmd1YWdlIHRvIHBsYWluIGphdmFzY3JpcHQuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcGlsZShzY3JpcHQ6IHN0cmluZywgbGFuZ3VhZ2U6IFNjcmlwdExhbmd1YWdlKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGxhbmd1YWdlKSB7XG4gICAgICAgIGNhc2UgXCJqc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDtcbiAgICAgICAgY2FzZSBcImpzeFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHsgdHJhbnNmb3JtczogW1wianN4XCJdLCBqc3hQcmFnbWE6IFwiaFwiLCBqc3hGcmFnbWVudFByYWdtYTogXCJGcmFnbWVudFwiIH0pLmNvZGU7XG4gICAgICAgIGNhc2UgXCJ0c1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHsgdHJhbnNmb3JtczogW1widHlwZXNjcmlwdFwiXSB9KS5jb2RlO1xuICAgICAgICBjYXNlIFwidHN4XCI6XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHNjcmlwdCwge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybXM6IFtcInR5cGVzY3JpcHRcIiwgXCJqc3hcIl0sXG4gICAgICAgICAgICAgICAganN4UHJhZ21hOiBcImhcIixcbiAgICAgICAgICAgICAgICBqc3hGcmFnbWVudFByYWdtYTogXCJGcmFnbWVudFwiLFxuICAgICAgICAgICAgfSkuY29kZTtcbiAgICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBzY3JpcHQgd2hlcmUgJ3RoaXMnIGZvciB0aGUgc2NyaXB0IGlzIHNldCB0byB0aGUgZ2l2ZW4gY29udGV4dC4gQWxsb3dzIHlvdSB0byBkZWZpbmUgZ2xvYmFsIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbkNvbnRleHQoc2NyaXB0OiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gICAgY29uc3QgcGFpcnMgPSBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpO1xuICAgIGNvbnN0IGtleXMgPSBwYWlycy5tYXAoKFtrZXksIF9dKSA9PiBrZXkpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHBhaXJzLm1hcCgoW18sIHZhbHVlXSkgPT4gdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbiguLi5rZXlzLCBzY3JpcHQpKC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBzY3JpcHQgcG9zc2libHkgYXN5bmNocm9ub3VzbHksIGlmIHRoZSBzY3JpcHQgY29udGFpbnMgYGFzeW5jL2F3YWl0YCBibG9ja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0V2YWxJbkNvbnRleHQoc2NyaXB0OiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHNjcmlwdC5pbmNsdWRlcyhcImF3YWl0XCIpKSB7XG4gICAgICAgIHJldHVybiBldmFsSW5Db250ZXh0KFwicmV0dXJuIChhc3luYyAoKSA9PiB7IFwiICsgc2NyaXB0ICsgXCIgfSkoKVwiLCB2YXJpYWJsZXMpIGFzIFByb21pc2U8YW55PjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV2YWxJbkNvbnRleHQoc2NyaXB0LCB2YXJpYWJsZXMpKTtcbiAgICB9XG59XG4iLCAiLyoqIEBtb2R1bGUgdWkgKi9cbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgSW5kZXhRdWVyeSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJpbmRleC9kYXRhc3RvcmVcIjtcbmltcG9ydCB7IExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIEhvb2sgdGhhdCB1cGRhdGVzIHRoZSB2aWV3IHdoZW5ldmVyIHRoZSByZXZpc2lvbiB1cGRhdGVzLCByZXR1cm5pbmcgdGhlIG5ld2VzdCByZXZpc2lvbi5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW5kZXhVcGRhdGVzKGRhdGFjb3JlOiBEYXRhY29yZSwgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBudW1iZXIge1xuICAgIGNvbnN0IFtyZXZpc2lvbiwgc2V0UmV2aXNpb25dID0gdXNlU3RhdGUoZGF0YWNvcmUuZGF0YXN0b3JlLnJldmlzaW9uKTtcbiAgICBjb25zdCBkZWJvdW5jZWRSZXZpc2lvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGluZ3M/LmRlYm91bmNlICYmIHNldHRpbmdzLmRlYm91bmNlID09IDApIHJldHVybiBzZXRSZXZpc2lvbjtcbiAgICAgICAgZWxzZSByZXR1cm4gZGVib3VuY2Uoc2V0UmV2aXNpb24sIHNldHRpbmdzPy5kZWJvdW5jZSA/PyA1MDApO1xuICAgIH0sIFtzZXRSZXZpc2lvbiwgc2V0dGluZ3M/LmRlYm91bmNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSBkYXRhY29yZS5vbihcInVwZGF0ZVwiLCBkZWJvdW5jZWRSZXZpc2lvbik7XG4gICAgICAgIHJldHVybiAoKSA9PiBkYXRhY29yZS5vZmZyZWYocmVmKTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gcmV2aXNpb247XG59XG5cbi8qKiBBIGhvb2sgd2hpY2ggdXBkYXRlcyB3aGVuZXZlciBmaWxlIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGZpbGUgdXBkYXRlcy5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmlsZU1ldGFkYXRhKFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH1cbik6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5kZXhSZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgc2V0dGluZ3MpO1xuXG4gICAgLy8gVE9ETzogSSB0aGluayBsb2FkIHJldHVybnMgY29uc2lzdGVudCBvYmplY3RzIHNvIGl0IHNob3VsZCBiZSBva2F5LlxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IGRhdGFjb3JlLmRhdGFzdG9yZS5sb2FkKHBhdGgpLCBbaW5kZXhSZXZpc2lvbiwgcGF0aF0pO1xufVxuXG4vKiogU2V0dGluZ3Mgd2hpY2ggY29udHJvbCBob3cgYXV0b21hdGljIHF1ZXJ5IHJlbG9hZGluZyBzaG91bGQgd29yay5cbiAqIEBncm91cCBDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VRdWVyeVNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBJZiBwcmVzZW50LCBkZWJvdW5jZSByZXBlYXRlZCBxdWVyeSB1cGRhdGVzIHNvIHRoYXQgYW4gdXBkYXRlIG9ubHkgb2NjdXJzIGV2ZXJ5IFxcPGRlYm91bmNlXFw+IG1pbGxpc2Vjb25kcy4gVGhpc1xuICAgICAqIGRlZmF1bHRzIHRvIHRoZSBvdmVyYWxsIGRlZmF1bHQgZGVib3VuY2Ugc2V0dGluZ3MuXG4gICAgICovXG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5cbi8qKiBQZXJmb3JtIGEgbGl2ZSwgc3luY2hyb25vdXMgcXVlcnkgd2hpY2ggdXBkYXRlcyBpdHMgcmVzdWx0cyB3aGVuZXZlciB0aGUgYmFja2luZyBxdWVyeSB3b3VsZCBjaGFuZ2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlVc2VGdWxsUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogUmVzdWx0PFNlYXJjaFJlc3VsdDxJbmRleGFibGU+LCBzdHJpbmc+IHtcbiAgICAvLyBUcmFjayBpbmRleCB1cGRhdGVzIHdpdGggY3VzdG9taXphYmxlIGRlYm91bmNpbmcuXG4gICAgY29uc3QgaW5kZXhSZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgc2V0dGluZ3MpO1xuXG4gICAgLy8gV2UgXCJpbnRlcm5cIiB0aGUgcXVlcnksIG1lYW5pbmcgd2UgcmV1c2UgdGhlIG9sZGVzdCB2ZXJzaW9uIGlmIGl0IGlzIHNlbWFudGljYWxseSBlcXVhbCBidXQganVzdCBhIGRpZmZlcmVudCBvYmplY3QuXG4gICAgY29uc3QgaW50ZXJuZWRRdWVyeSA9IHVzZUludGVybmluZyhxdWVyeSwgTGl0ZXJhbHMuZXF1YWxzKTtcbiAgICAvLyBJbnRlcm4gdGhlIG91dHB1dCBhcyB3ZWxsIHNvIHJlYWN0IGRpZmZpbmcgXCJqdXN0IHdvcmtzXCIgd2l0aCB0aGUgcmVzdWx0IG9mIHVzZVF1ZXJ5LlxuICAgIGNvbnN0IGludGVybmVkUmVzdWx0ID0gdXNlUmVmPFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8vIE9uIGV2ZXJ5IGluZGV4IHJldmlzaW9uIHVwZGF0ZSwgcmUtcnVuIHRoZSBxdWVyeSBhbmQgY2hlY2sgaWYgaXQgcHJvZHVjZWQgbWVhbmluZ2Z1bGx5IG5ldyB2YWx1ZXMuXG4gICAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBkYXRhY29yZS5kYXRhc3RvcmUuc2VhcmNoKHF1ZXJ5KTtcblxuICAgICAgICAvLyBTZXQgZmFpbHVyZSBpZiB0aGUgbmV3IHJlcXVlc3QgaXMgYSBmYWlsdXJlLlxuICAgICAgICBpZiAoIW5ld1Jlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LmZhaWx1cmUobmV3UmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcm5lZCBzdGF0ZSwgdXBkYXRlIGl0IGFuZCByZXR1cm4uXG4gICAgICAgIGlmIChpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGludGVybmVkUmVzdWx0LmN1cnJlbnQgPSBSZXN1bHQuc3VjY2VzcyhuZXdSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgbmV3IHJlcXVlc3QgaXMgaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIG9sZCByZXN1bHQgaXMgZGVmaW5lZC4gSWYgdGhlIG9sZCByZXN1bHQgd2FzIGFuIGVycm9yLCB1cGRhdGUgaXQuXG4gICAgICAgIGNvbnN0IG9sZFJlc3VsdCA9IGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIGlmICghb2xkUmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIGludGVybmVkUmVzdWx0LmN1cnJlbnQgPSBSZXN1bHQuc3VjY2VzcyhuZXdSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCb3RoIGFyZSBzdWNjZXNzZnVsLCBjaGVjayBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG9sZFJlc3VsdC52YWx1ZS5yZXZpc2lvbiAhPSBuZXdSZXN1bHQudmFsdWUucmV2aXNpb24gfHxcbiAgICAgICAgICAgICFzYW1lT2JqZWN0cyhvbGRSZXN1bHQudmFsdWUucmVzdWx0cywgbmV3UmVzdWx0LnZhbHVlLnJlc3VsdHMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYW1lIHJldmlzaW9uIGFuZCBzYW1lIG9iamVjdHMsIHRoaXMgaXMgdGhlIHNhbWUgcXVlcnkgcmVzdWx0LCBzbyByZXR1cm4gdGhlIG9sZCBvYmplY3QuXG4gICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgIH0sIFtpbnRlcm5lZFF1ZXJ5LCBpbmRleFJldmlzaW9uXSk7XG59XG5cbi8qKiBQZXJmb3JtIGEgbGl2ZSwgc3luY2hyb25vdXMgcXVlcnkgd2hpY2ggdXBkYXRlcyBpdHMgcmVzdWx0cyB3aGVuZXZlciB0aGUgYmFja2luZyBxdWVyeSB3b3VsZCBjaGFuZ2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGdWxsUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogU2VhcmNoUmVzdWx0PEluZGV4YWJsZT4ge1xuICAgIHJldHVybiB0cnlVc2VGdWxsUXVlcnkoZGF0YWNvcmUsIHF1ZXJ5LCBzZXR0aW5ncykub3JFbHNlVGhyb3coKGUpID0+IFwiRmFpbGVkIHRvIHNlYXJjaDogXCIgKyBlKTtcbn1cblxuLyoqIFNpbXBsaWVyIHZlcnNpb24gb2YgdXNlRnVsbFF1ZXJ5IHdoaWNoIGp1c3QgZGlyZWN0bHkgcmV0dXJucyByZXN1bHRzLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5VXNlUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogUmVzdWx0PEluZGV4YWJsZVtdLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdHJ5VXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVzdWx0cyk7XG59XG5cbi8qKiBTaW1wbGllciB2ZXJzaW9uIG9mIHVzZUZ1bGxRdWVyeSB3aGljaCBqdXN0IGRpcmVjdGx5IHJldHVybnMgcmVzdWx0cy5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5KGRhdGFjb3JlOiBEYXRhY29yZSwgcXVlcnk6IEluZGV4UXVlcnksIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5ncyk6IEluZGV4YWJsZVtdIHtcbiAgICByZXR1cm4gdXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLnJlc3VsdHM7XG59XG5cbi8qKiBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc2V0cyBvZiBvYmplY3RzIGFyZSB0aGUgc2FtZS4gT25seSB1c2VzIHJldmlzaW9uIGNvbXBhcmlzb24gZm9yIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gc2FtZU9iamVjdHMob2xkOiBJbmRleGFibGVbXSwgaW5jb21pbmc6IEluZGV4YWJsZVtdKSB7XG4gICAgaWYgKG9sZC5sZW5ndGggIT0gaW5jb21pbmcubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBvbGRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBpbmRleGFibGUgb2Ygb2xkKSB7XG4gICAgICAgIG9sZHNbaW5kZXhhYmxlLiRpZF0gPSBpbmRleGFibGUuJHJldmlzaW9uITtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGluZGV4YWJsZSBvZiBpbmNvbWluZykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9sZHNbaW5kZXhhYmxlLiRpZF07XG4gICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHZhbHVlICE9IGluZGV4YWJsZS4kcmV2aXNpb24pIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBcIkludGVybnNcIiB0aGUgaW5jb21pbmcgdmFsdWUsIHJldHVybmluZyB0aGUgb2xkZXN0IGVxdWFsIGluc3RhbmNlLiBUaGlzIGlzIGEgdHJpY2sgdG8gaW1wcm92ZSBSZWFjdCBkaWZmaW5nXG4gKiAgYmVoYXZpb3IsIGFzIHR3byBvYmplY3RzIHdoaWNoIGFyZSBlcXVhbHMgdmlhIGVxdWFsaXR5KGEsIGIpIHdpbGwgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UgYWZ0ZXIgYmVpbmdcbiAqICBpbnRlcm5lZC5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVybmluZzxUPih2YWx1ZTogVCwgZXF1YWxpdHk6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogVCB7XG4gICAgY29uc3QgcmVmID0gdXNlUmVmPFQ+KCk7XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCAhZXF1YWxpdHkocmVmLmN1cnJlbnQsIHZhbHVlKSkge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiByZWYuY3VycmVudDtcbn1cblxuLyoqIFVzZSBhIHN0YWJsZSBjYWxsYmFjayB3aGljaCBoaWRlcyBtdXRhYmxlIHN0YXRlIGJlaGluZCBhIHN0YWJsZSByZWZlcmVuY2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGFibGVDYWxsYmFjazxUPihjYWxsYmFjazogVCwgZGVwczogYW55W10pOiBUIHtcbiAgICBjb25zdCByZWYgPSB1c2VSZWY8VD4oKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gY2FsbGJhY2s7XG4gICAgfSwgW2NhbGxiYWNrLCAuLi5kZXBzXSk7XG5cbiAgICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgICAgICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgKHJlZi5jdXJyZW50IGFzIGFueSkoLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICAgIFtyZWZdXG4gICAgKSBhcyBUO1xufVxuXG5jb25zdCBOT19PUF9VUERBVEUgPSAoeDogYW55KSA9PiB7fTtcblxuLyoqIFVzZSBzdGF0ZSB0aGF0IHdpbGwgZGVmYXVsdCB0byBhbiBleHRlcm5hbCBjb250cm9sbGVkIHZhbHVlIGlmIHNldDsgb3RoZXJ3aXNlLCB3aWxsIHRyYWNrIGFuIGludGVybmFsIHZhbHVlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZFN0YXRlPFQ+KFxuICAgIGluaXRpYWxTdGF0ZTogVCxcbiAgICBvdmVycmlkZT86IFQsXG4gICAgdXBkYXRlPzogKHZhbHVlOiBUKSA9PiB2b2lkXG4pOiBbVCwgKHZhbHVlOiBUKSA9PiB2b2lkXSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShvdmVycmlkZSA/PyBpbml0aWFsU3RhdGUpO1xuICAgIGlmIChvdmVycmlkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGF0ZSAhPSBvdmVycmlkZSkgc2V0U3RhdGUob3ZlcnJpZGUpO1xuXG4gICAgICAgIHJldHVybiBbb3ZlcnJpZGUsIHVwZGF0ZSA/PyBOT19PUF9VUERBVEVdO1xuICAgIH1cblxuICAgIGNvbnN0IHNldFN0YXRlV2l0aFVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgIHNldFN0YXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh1cGRhdGUpIHVwZGF0ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtzZXRTdGF0ZSwgdXBkYXRlXVxuICAgICk7XG5cbiAgICByZXR1cm4gW3N0YXRlLCBzZXRTdGF0ZVdpdGhVcGRhdGVdO1xufVxuIiwgImltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBQcm9wc1dpdGhDaGlsZHJlbiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VJbmRleFVwZGF0ZXMgfSBmcm9tIFwiLi9ob29rc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFZOb2RlLCBjcmVhdGVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgTGl0IH0gZnJvbSBcIi4vbWFya2Rvd25cIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmZ1bmN0aW9uIExvYWRpbmdQcm9ncmVzcyh7IGRhdGFjb3JlIH06IHsgZGF0YWNvcmU6IERhdGFjb3JlIH0pIHtcbiAgICB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHsgZGVib3VuY2U6IDI1MCB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxwPlxuICAgICAgICAgICAge2RhdGFjb3JlLmluaXRpYWxpemVyPy5pbml0aWFsaXplZCA/PyAwfSAvIHtkYXRhY29yZS5pbml0aWFsaXplcj8udGFyZ2V0VG90YWwgPz8gMH1cbiAgICAgICAgPC9wPlxuICAgICk7XG59XG5cbi8qKiBMb2FkaW5nIGJvdW5kYXJ5IHdoaWNoIHNob3dzIGEgbG9hZGluZyBzY3JlZW4gd2hpbGUgRGF0YWNvcmUgaXMgaW5pdGlhbGl6aW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvYWRpbmdCb3VuZGFyeSh7IGNoaWxkcmVuLCBkYXRhY29yZSB9OiBQcm9wc1dpdGhDaGlsZHJlbjx7IGRhdGFjb3JlOiBEYXRhY29yZSB9Pikge1xuICAgIGNvbnN0IFtpbml0aWFsaXplZCwgc2V0SW5pdGlhbGl6ZWRdID0gdXNlU3RhdGUoZGF0YWNvcmUuaW5pdGlhbGl6ZWQpO1xuXG4gICAgLy8gU3luY3MgdGhlIGJvdW5kYXJ5IHdpdGggZGF0YWNvcmUncyBpbml0aWFsaXphdGlvbiBzdGF0ZS5cbiAgICAvLyBUT0RPOiBBZGQgYW4gZXZlbnQgdG8gZGF0YWNvcmUgd2hpY2ggaW5kaWNhdGVzIHdoZW4gYSByZWluZGV4IGhhcHBlbnMgKGkuZS4sIGluaXRpYWxpemVkXG4gICAgLy8gcmV0dXJucyBiYWNrIHRvICdmYWxzZScpLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbml0aWFsaXplZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHJlZiA9IGRhdGFjb3JlLm9uKFwiaW5pdGlhbGl6ZWRcIiwgKCkgPT4gc2V0SW5pdGlhbGl6ZWQodHJ1ZSkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gZGF0YWNvcmUub2ZmcmVmKHJlZik7XG4gICAgfSwgW2luaXRpYWxpemVkLCBkYXRhY29yZV0pO1xuXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy1ib3VuZGFyeVwiPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1sb2FkaW5nLXRpdGxlXCI+RGF0YWNvcmUgaXMgZ2V0dGluZyByZWFkeS4uLjwvaDQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1sb2FkaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdQcm9ncmVzcyBkYXRhY29yZT17ZGF0YWNvcmV9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSB2YW5pbGxhIGphdmFzcmlwdCBmdW5jdGlvbiBsYXppbHkgb25lIHRpbWUuIE1haW5seSB1c2VmdWwgdG8gb25seSBydW4gYSBzY3JpcHRcbiAqIG9uY2UgdGhlIHBhcmVudCBsb2FkaW5nIGJvdW5kYXJ5IGlzIGFjdHVhbGx5IHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gU2NyaXB0Q29udGFpbmVyKHtcbiAgICBleGVjdXRvcixcbiAgICBzb3VyY2VQYXRoLFxufToge1xuICAgIGV4ZWN1dG9yOiAoKSA9PiBQcm9taXNlPExpdGVyYWwgfCBWTm9kZSB8IEZ1bmN0aW9uPjtcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgW2VsZW1lbnQsIHNldEVsZW1lbnRdID0gdXNlU3RhdGU8SlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEVsZW1lbnQodW5kZWZpbmVkKTtcbiAgICAgICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcblxuICAgICAgICBleGVjdXRvcigpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiBzZXRFbGVtZW50KG1ha2VSZW5kZXJhYmxlRWxlbWVudChyZXN1bHQsIHNvdXJjZVBhdGgpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHNldEVycm9yKGVycm9yKSk7XG4gICAgfSwgW2V4ZWN1dG9yXSk7XG5cbiAgICAvLyBQcm9wb2dhdGUgZXJyb3IgdXB3YXJkcy5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIDw+e2VsZW1lbnQgPz8gPEVycm9yTWVzc2FnZSBtZXNzYWdlPVwiPCBWaWV3IGlzIHJlbmRlcmluZyA+XCIgLz59PC8+O1xufVxuXG4vKiogTWFrZSBhIHJlbmRlcmFibGUgZWxlbWVudCBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3Q7IGlmIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgbm90IHBvc3NpYmxlLCB0aHJvdyBhbiBleGNlcHRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVJlbmRlcmFibGVFbGVtZW50KG9iamVjdDogYW55LCBzb3VyY2VQYXRoOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvYmplY3QsIHt9KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIChvYmplY3QgYXMgYW55W10pLm1hcCgoeCkgPT4gbWFrZVJlbmRlcmFibGVFbGVtZW50KHgsIHNvdXJjZVBhdGgpKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8TGl0IHZhbHVlPXtvYmplY3R9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIENvbGxlY3Rpb24gb2YgZGlyZWN0IEFQSS1mYWNpbmcgZWxlbWVudHMuIFRoaXMgZXNzZW50aWFsbHkgc2VydmVzIGFzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdG8gaW50ZXJuYWwgdHlwZXMsIHNvIHRoYXQgdGhlIGludGVybmFsIHR5cGVzIGNhbiBiZVxuICogY2hhbmdlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBBUEkuXG4gKlxuICogQG1vZHVsZSB1aVxuICovXG5cbmltcG9ydCB7IEhUTUxBdHRyaWJ1dGVzLCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW1wb3J0IFwiYXBpL3VpL2xheW91dC5jc3NcIjtcblxuLyoqIENyZWF0ZXMgYSB2ZXJ0aWNhbCBmbGV4Ym94IFwic3RhY2tcIiBvZiBlbGVtZW50cy5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU3RhY2soXG4gICAgcHJvcHM6IEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiAmIHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAgICAgICBhbGlnbj86IHN0cmluZztcbiAgICAgICAgc3R5bGU/OiBzdHJpbmc7XG4gICAgfVxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGp1c3RpZnksIGFsaWduLCBzdHlsZSwgY2hpbGRyZW4sIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IGV4dHJhU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKGp1c3RpZnkpIHN0eWxlICs9IGBqdXN0aWZ5LWNvbnRlbnQ6ICR7anVzdGlmeX07YDtcbiAgICAgICAgaWYgKGFsaWduKSBzdHlsZSArPSBgYWxpZ24taXRlbXM6ICR7YWxpZ259O2A7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlLmxlbmd0aCA9PSAwID8gdW5kZWZpbmVkIDogc3R5bGU7XG4gICAgfSwgW2p1c3RpZnksIGFsaWduXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSA/IGNsYXNzTmFtZSArIFwiIGRjLXN0YWNrXCIgOiBcImRjLXN0YWNrXCJ9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGUgPyBleHRyYVN0eWxlICsgc3R5bGUgOiBleHRyYVN0eWxlfVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBob3Jpem9udGFsIGZsZXhib3ggXCJncm91cGluZ1wiIG9mIGVsZW1lbnRzLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHcm91cChcbiAgICBwcm9wczogSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+ICYge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGp1c3RpZnk/OiBzdHJpbmc7XG4gICAgICAgIGFsaWduPzogc3RyaW5nO1xuICAgICAgICBzdHlsZT86IHN0cmluZztcbiAgICB9XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwganVzdGlmeSwgYWxpZ24sIHN0eWxlLCBjaGlsZHJlbiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3QgZXh0cmFTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBsZXQgc3R5bGUgPSBcIlwiO1xuICAgICAgICBpZiAoanVzdGlmeSkgc3R5bGUgKz0gYGp1c3RpZnktY29udGVudDogJHtqdXN0aWZ5fTtgO1xuICAgICAgICBpZiAoYWxpZ24pIHN0eWxlICs9IGBhbGlnbi1pdGVtczogJHthbGlnbn07YDtcblxuICAgICAgICByZXR1cm4gc3R5bGUubGVuZ3RoID09IDAgPyB1bmRlZmluZWQgOiBzdHlsZTtcbiAgICB9LCBbanVzdGlmeSwgYWxpZ25dKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lID8gY2xhc3NOYW1lICsgXCIgZGMtZ3JvdXBcIiA6IFwiZGMtZ3JvdXBcIn1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZSA/IGV4dHJhU3R5bGUgKyBzdHlsZSA6IGV4dHJhU3R5bGV9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuIiwgIi8qKiBCYXNpYyBVSSBjb21wb25lbnRzIHRoYXQgaGF2ZSBzaW1wbGUgT2JzaWRpYW4gdGhlbWluZy5cbiAqIEBtb2R1bGUgdWlcbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBzZXRJY29uIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUgfSBmcm9tIFwidWkvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9iYXNpY3MuY3NzXCI7XG5cbi8qKiBWYXJpb3VzIGludGVudHMgZm9yIGJ1dHRvbnMgYW5kIG90aGVyIGludGVyYWN0aXZlIGVsZW1lbnRzLiAqL1xuZXhwb3J0IHR5cGUgSW50ZW50ID0gXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgT21pdHRhYmxlID0gXCJ2YWx1ZVwiIHwgXCJkZWZhdWx0VmFsdWVcIjtcbmV4cG9ydCBjb25zdCBJTlRFTlRfQ0xBU1NFUzogUmVjb3JkPEludGVudCwgc3RyaW5nPiA9IHtcbiAgICBlcnJvcjogXCJkYy1pbnRlbnQtZXJyb3JcIixcbiAgICB3YXJuOiBcImRjLWludGVudC13YXJuXCIsXG4gICAgaW5mbzogXCJkYy1pbnRlbnQtaW5mb1wiLFxuICAgIHN1Y2Nlc3M6IFwiZGMtaW50ZW50LXN1Y2Nlc3NcIixcbn07XG5cbi8qKiBXcmFwcGVyIGZvciBhIHJlZ3VsYXIgSFRNTCBidXR0b24gd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24oXG4gICAgcHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nOyBpbnRlbnQ/OiBJbnRlbnQ7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxCdXR0b25FbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGludGVudCwgY2hpbGRyZW4sIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWJ1dHRvblwiLCBpbnRlbnQgPyBJTlRFTlRfQ0xBU1NFU1tpbnRlbnRdIDogdW5kZWZpbmVkLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufVxuXG4vKiogQSBzaW1wbGUgdGV4dGJveCB3aGljaCBhY2NlcHRzIHRleHQuXG4gKlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRleHRib3gocHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0IHR5cGU9e3Byb3BzLnR5cGUgPz8gXCJ0ZXh0XCJ9IGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy10ZXh0Ym94XCIsIGNsYXNzTmFtZSl9IHsuLi5mb3J3YXJkaW5nUHJvcHN9IC8+XG4gICAgKTtcbn1cblxuLyoqIEEgY2hlY2tib3ggdGhhdCBjYW4gYmUgY2hlY2tlZCBhbmQgdW5jaGVja2VkLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICAgICAgICBvbkNoZWNrQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICAgIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgY2hlY2tlZDogaXNDaGVja2VkLFxuICAgICAgICBvbkNoZWNrQ2hhbmdlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgLi4uZm9yd2FyZGluZ1Byb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0Q2hlY2tlZCA/PyBmYWxzZSwgaXNDaGVja2VkLCBvbkNoZWNrQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldENoZWNrZWQoZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkKSwgW3NldENoZWNrZWRdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtY2hlY2tib3hcIiwgZGlzYWJsZWQgPyBcImRjLWNoZWNrYm94LWRpc2FibGVkXCIgOiB1bmRlZmluZWQsIGNsYXNzTmFtZSl9PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2xhYmVsPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHNsaWRlciAocmFuZ2UgaW5wdXQpIHdpdGggc29tZSBkZWZhdWx0IGNsYXNzZXMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU2xpZGVyKFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgbWluPzogbnVtYmVyO1xuICAgICAgICBtYXg/OiBudW1iZXI7XG4gICAgICAgIHN0ZXA/OiBudW1iZXI7XG4gICAgICAgIHZhbHVlPzogbnVtYmVyO1xuICAgICAgICBkZWZhdWx0VmFsdWU/OiBudW1iZXI7XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U/OiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcbiAgICB9ICYgT21pdDxSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD4sIE9taXR0YWJsZT5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBtaW4gPSAwLCBtYXggPSAxMCwgc3RlcCA9IDEsIHZhbHVlLCBkZWZhdWx0VmFsdWUsIG9uVmFsdWVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3NsaWRlciwgc2V0U2xpZGVyXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0VmFsdWUgPz8gMCwgdmFsdWUsIG9uVmFsdWVDaGFuZ2UpO1xuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IGFueSkgPT4gc2V0U2xpZGVyKHBhcnNlRmxvYXQoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSkpLCBbc2V0U2xpZGVyXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtzbGlkZXIudG9TdHJpbmcoKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy1zbGlkZXJcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIG1pbj17bWlufVxuICAgICAgICAgICAgbWF4PXttYXh9XG4gICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgdmFsdWU9e3NsaWRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuLyoqIFdyYXBwZXIgZm9yIGEgc3dpdGNoICh0b2dnbGUpIGNvbXBvbmVudCB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN3aXRjaChcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgb25Ub2dnbGVDaGFuZ2U/OiAoY2hlY2tlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgZGlzYWJsZWQsIGRlZmF1bHRDaGVja2VkLCBjaGVja2VkLCBvblRvZ2dsZUNoYW5nZSwgLi4uZm9yd2FyZGluZ1Byb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbdG9nZ2xlZCwgc2V0VG9nZ2xlZF0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdENoZWNrZWQgPz8gZmFsc2UsIGNoZWNrZWQsIG9uVG9nZ2xlQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldFRvZ2dsZWQoZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkKSwgW3NldFRvZ2dsZWRdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcbiAgICAgICAgICAgICAgICBcImRjLXN3aXRjaCBjaGVja2JveC1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICB0b2dnbGVkID8gXCJpcy1lbmFibGVkXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQgPyBcImRjLXN3aXRjaC1kaXNhYmxlZFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYy1zd2l0Y2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkPXtkZWZhdWx0Q2hlY2tlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXt0b2dnbGVkfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgKTtcbn1cblxuLyoqIFdyYXBwZXIgZm9yIGEgc2VsZWN0IGNvbXBvbmVudCB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZhbmlsbGFTZWxlY3QoXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBvcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICAgICAgICB2YWx1ZT86IHN0cmluZztcbiAgICAgICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MU2VsZWN0RWxlbWVudD5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBvcHRpb25zID0gW10sIHZhbHVlLCBkZWZhdWx0VmFsdWUsIG9uVmFsdWVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3NlbGVjdGVkVmFsdWUsIHNldFNlbGVjdGVkVmFsdWVdID0gUmVhY3QudXNlU3RhdGUodmFsdWUgPz8gZGVmYXVsdFZhbHVlID8/IFwiXCIpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgc2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSwgW3ZhbHVlXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtc2VsZWN0IGRyb3Bkb3duXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkVmFsdWUoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlICYmIG9uVmFsdWVDaGFuZ2UoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IHZhbHVlPXtvcHRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICk7XG59XG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhbiBpY29uXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gSWNvbihwcm9wczogeyBjbGFzc05hbWU/OiBzdHJpbmc7IGljb246IHN0cmluZyB9KSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGljb24gfSA9IHByb3BzO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KCk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHNldEljb24ocmVmLmN1cnJlbnQsIGljb24pO1xuICAgICAgICB9XG4gICAgfSwgW3JlZl0pO1xuXG4gICAgcmV0dXJuIDxzcGFuIHJlZj17cmVmfSBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtaWNvblwiLCBjbGFzc05hbWUpfSBkYXRhLWljb249e2ljb259IC8+O1xufVxuXG4vKipcbiAqICBBcHBlbmRzIGFkZGl0aW9uYWwgY2xhc3NlcyB0byBhIGJhc2ljIGZpeGVkIGNsYXNzLlxuICpcbiAqIEBncm91cCBVdGlsaXRpZXNcbiAqICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUNsYXNzZXMoZml4ZWQ6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IHVuZGVmaW5lZClbXSkge1xuICAgIGNvbnN0IG5vbmVtcHR5ID0gcmVzdC5maWx0ZXIoKGMpID0+IGMgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5vbmVtcHR5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZpeGVkO1xuXG4gICAgcmV0dXJuIFtmaXhlZCwgLi4ubm9uZW1wdHldLmpvaW4oXCIgXCIpO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBpbmRleGFibGVzXG4gKi9cbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuXG4vKiogQW55IGluZGV4YWJsZSBmaWVsZCwgd2hpY2ggbXVzdCBoYXZlIGEgZmV3IGluZGV4LXJlbGV2YW50IHByb3BlcnRpZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZSB7XG4gICAgLyoqIFRoZSBvYmplY3QgdHlwZXMgdGhhdCB0aGlzIGluZGV4YWJsZSBpcy4gKi9cbiAgICAkdHlwZXM6IHN0cmluZ1tdO1xuICAgIC8qKiBUZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QsIHN1Y2ggYXMgYFBhZ2VgIG9yIGBTZWN0aW9uYC4gVXNlZCBpbiB2aXN1YWxpemF0aW9ucy4gKi9cbiAgICAkdHlwZW5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHVuaXF1ZSBpbmRleCBJRCBmb3IgdGhpcyBvYmplY3QuICovXG4gICAgJGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4YWJsZSBvYmplY3QgdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgb2JqZWN0LiBPbmx5IHNldCBhZnRlciB0aGUgb2JqZWN0IGlzIGFjdHVhbGx5IGluZGV4ZWQuXG4gICAgICovXG4gICAgJHBhcmVudD86IEluZGV4YWJsZTtcbiAgICAvKiogSWYgcHJlc2VudCwgdGhlIHJldmlzaW9uIGluIHRoZSBpbmRleCBvZiB0aGlzIG9iamVjdC4gKi9cbiAgICAkcmV2aXNpb24/OiBudW1iZXI7XG4gICAgLyoqIFRoZSBmaWxlIHRoYXQgdGhpcyBpbmRleGFibGUgd2FzIGRlcml2ZWQgZnJvbSwgaWYgZmlsZS1iYWNrZWQuICovXG4gICAgJGZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBzdXBwb3J0IGxpbmtpbmcuICovXG5leHBvcnQgY29uc3QgTElOS0FCTEVfVFlQRSA9IFwibGlua2FibGVcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIExJTktBQkxFX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2FibGUge1xuICAgIC8qKiBBIGxpbmsgdG8gdGhpcyBsaW5rYWJsZSBvYmplY3QuICovXG4gICAgJGxpbms6IExpbms7XG59XG5cbi8qKiBHZW5lcmFsIG1ldGFkYXRhIGZvciBhbnkgZmlsZS4gKi9cbmV4cG9ydCBjb25zdCBGSUxFX1RZUEUgPSBcImZpbGVcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIEZJTEVfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlIGV4dGVuZHMgTGlua2FibGUge1xuICAgIC8qKiBUaGUgcGF0aCB0aGlzIGZpbGUgZXhpc3RzIGF0LiAqL1xuICAgICRwYXRoOiBzdHJpbmc7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBjcmVhdGVkLiAqL1xuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBtb2RpZmllZC4gKi9cbiAgICAkbXRpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBzaXplIG9mIHRoaXMgcGFnZSBpbiBieXRlcy4gKi9cbiAgICAkc2l6ZTogbnVtYmVyO1xuICAgIC8qKiBUaGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgICRleHRlbnNpb246IHN0cmluZztcbn1cblxuLyoqIE1ldGFkYXRhIGZvciB0YWdnYWJsZSBvYmplY3RzLiAqL1xuZXhwb3J0IGNvbnN0IFRBR0dBQkxFX1RZUEUgPSBcInRhZ2dhYmxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBUQUdHQUJMRV9UWVBFfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dhYmxlIHtcbiAgICAvKiogVGhlIGV4YWN0IHRhZ3Mgb24gdGhpcyBvYmplY3QuICgjYS9iL2Mgb3IgI2Zvby9iYXIpLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbn1cblxuLyoqIE1ldGFkYXRhIGZvciBvYmplY3RzIHdoaWNoIGNhbiBsaW5rIHRvIG90aGVyIHRoaW5ncy4gKi9cbmV4cG9ydCBjb25zdCBMSU5LQkVBUklOR19UWVBFID0gXCJsaW5rc1wiO1xuLyoqXG4gKiB7QGluaGVyaXREb2MgTElOS0JFQVJJTkdfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rYmVhcmluZyB7XG4gICAgLyoqIFRoZSBsaW5rcyBpbiB0aGlzIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG59XG5cbi8qKlxuICogQWxsIHN1cHBvcnRlZCBleHRlbnNpb25zLiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZWNvbWUgYSBkeW5hbWljIGxvb2t1cCB0YWJsZSBhbmQgbm90IGp1c3RcbiAqIGEgZml4ZWQgbGlzdCBhdCBzb21lIHBvaW50LCBlc3BlY2lhbGx5IGlmIHdlIGFkZCB0aGUgYWJpbGl0eSB0byB0dXJuIGluZGV4aW5nIG9uL29mZi5cbiAqL1xuZXhwb3J0IGNvbnN0IElOREVYQUJMRV9FWFRFTlNJT05TID0gbmV3IFNldChbXCJtZFwiLCBcIm1hcmtkb3duXCIsIFwiY2FudmFzXCJdKTtcbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcIi4uL2luZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgSW5saW5lRmllbGQgfSBmcm9tIFwiaW5kZXgvaW1wb3J0L2lubGluZS1maWVsZFwiO1xuaW1wb3J0IHsgRnJvbnRtYXR0ZXJFbnRyeSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgTGluZVNwYW4gfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9tYXJrZG93blwiO1xuXG4vKiogVGhlIHNvdXJjZSBvZiBhIGZpZWxkLCB1c2VkIHdoZW4gZGV0ZXJtaW5pbmcgd2hhdCBmaWxlcyB0byBvdmVyd3JpdGUgYW5kIGhvdy4gKi9cbmV4cG9ydCB0eXBlIFByb3ZlbmFuY2UgPVxuICAgIHwgeyB0eXBlOiBcImZyb250bWF0dGVyXCI7IGZpbGU6IHN0cmluZzsga2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiBcImlubGluZS1maWVsZFwiOyBmaWxlOiBzdHJpbmc7IGxpbmU6IG51bWJlcjsga2V5OiBzdHJpbmcgfTtcblxuLyoqXG4gKiBHZW5lcmFsIGRlZmluaXRpb24gZm9yIGEgZmllbGQuIFByb3ZpZGVzIHRoZSBmaWVsZCBrZXksIHZhbHVlLCBhcyB3ZWxsIGFzIGluZm9ybWF0aW9uIG9uIGl0J3Mgc291cmNlIGFuZCBob3cgaXQgY2FuIGJlIGVkaXRlZC5cbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkIHtcbiAgICAvKiogVGhlIGNhbm9uaWNhbCBrZXkgbmFtZSBmb3IgdGhlIGZpZWxkIChpLmUuLCBhcyBpdCBhY3R1YWxseSBzaG93cyB1cCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUpLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkLiAqL1xuICAgIHZhbHVlOiBMaXRlcmFsO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBmaWVsZCBiZWZvcmUgcGFyc2luZywgaWYgcmVsZXZhbnQuICovXG4gICAgcmF3Pzogc3RyaW5nO1xuICAgIC8qKiBJZiBwcmVzZW50LCBkZXNjcmliZXMgd2hlcmUgdGhlIGZpZWxkIGNhbWUgZnJvbSBpbiBwcmVjaXNlIGRldGFpbCwgYWxsb3dpbmcgdGhlIGZpZWxkIHRvIGJlIGVkaXRlZC4gKi9cbiAgICBwcm92ZW5hbmNlPzogUHJvdmVuYW5jZTtcbn1cblxuLyoqIE1ldGFkYXRhIGZvciBvYmplY3RzIHdoaWNoIGFyZSBhbm5vdGF0ZWQgd2l0aCBmaWVsZHMuICovXG5leHBvcnQgY29uc3QgRklFTERCRUFSSU5HX1RZUEUgPSBcImZpZWxkc1wiO1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZGJlYXJpbmcge1xuICAgIC8qKiBSZXR1cm4gYSBsaXN0IG9mIGFsbCBmaWVsZHMuIFRoaXMgbWF5IGJlIGNvbXB1dGVkIGVhZ2VybHksIHNvIGNhY2hlIHRoaXMgdmFsdWUgZm9yIHJlcGVhdGVkIG9wZXJhdGlvbnMuICovXG4gICAgZmllbGRzOiBGaWVsZFtdO1xuXG4gICAgLyoqIEZldGNoIGEgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpZiBpdCBpcyBwcmVzZW50IG9uIHRoaXMgb2JqZWN0LiAqL1xuICAgIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRiZWFyaW5ncyB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRmllbGRiZWFyaW5nKG9iamVjdDogYW55KTogb2JqZWN0IGlzIEZpZWxkYmVhcmluZyB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmplY3QgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmIFwiZmllbGRcIiBpbiBvYmplY3QgJiYgdHlwZW9mIG9iamVjdFtcImZpZWxkXCJdID09IFwiZnVuY3Rpb25cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBrZXkgZnJvbSBhIGdlbmVyaWMgbWFwIG9yIGZpZWxkYmVhcmluZyBvYmplY3QuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGdldChvYmplY3Q6IEZpZWxkYmVhcmluZyB8IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+LCBrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNGaWVsZGJlYXJpbmcob2JqZWN0KSkgcmV0dXJuIG9iamVjdC5maWVsZChrZXkpPy52YWx1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGdldFdpdGhEZWZhdWx0PFQgZXh0ZW5kcyB7ICRwb3NpdGlvbjogTGluZVNwYW4gfSAmIEluZGV4YWJsZT4oXG4gICAgICAgIG9iamVjdDogVCxcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZT86IExpdGVyYWxcbiAgICApOiBGaWVsZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBkZWZhdWx0VmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGxpbmU6IG9iamVjdC4kcG9zaXRpb24uZW5kLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKlxuICogR2VuZXJpYyBmdW5jdGlvbiB3aGljaCBleHRyYWN0IGZpZWxkcy4gSWYgbm8gYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCByZXR1cm4gYWxsIGZpZWxkczsgb3RoZXJ3aXNlLFxuICogaXQgc2hvdWxkIHJldHVybiB0aGUgZmllbGQgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBLZXlzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIHRvIG1hdGNoIE9ic2lkaWFuIHN0YW5kYXJkIGJlaGF2aW9yLlxuICovXG5leHBvcnQgdHlwZSBGaWVsZEV4dHJhY3RvcjxUPiA9IChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4gRmllbGRbXTtcblxuLyoqIFF1aWNrIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBmaWVsZHMgYW5kIGRvaW5nIHNlYXJjaGVzIG92ZXIgdGhlbS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBFeHRyYWN0b3JzIHtcbiAgICAvKiogQ2hlY2sgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBvYmplY3QgaXMgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhIHBsYWluIHByb3BlcnR5IChub3QgYSBmdW5jdGlvbiBvciBvdGhlciBzcGVjaWFsIG9iamVjdCkuICovXG4gICAgZnVuY3Rpb24gaXNWYWxpZEludHJpbnNpYyhvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4sIGtleTogc3RyaW5nLCBleGNsdWRlPzogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgLy8gRG9uJ3QgYWxsb3cgcmVjdXJzaW9uIG9uICdmaWVsZHMnIG9yIGNhY2hlZCB2YWx1ZXMsIGFuZCBza2lwIGFueSBpZ25vcmVkIGFuZCBub24taW50cmluc2ljcy5cbiAgICAgICAgaWYgKGV4Y2x1ZGU/LmhhcyhrZXkpIHx8ICFrZXkuc3RhcnRzV2l0aChcIiRcIikpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBObyBmdW5jdGlvbnMsIG9ubHkgdXNlIGFjdHVhbCB2YWx1ZXMuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKG9iamVjdCBhcyBhbnkpW2tleV07XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWxsIGtleXMgb2YgdGhlIG9iamVjdCwgaW5jbHVkaW5nIGRlcml2ZWQgZmllbGRzIGZyb20gcHJvdG90eXBlcy4gKi9cbiAgICBmdW5jdGlvbiogcHJvdG90eXBlS2V5cyhvYmplY3Q6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB5aWVsZCBrZXk7XG5cbiAgICAgICAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIHdoaWxlIChwcm90bykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pKSB5aWVsZCBrZXk7XG5cbiAgICAgICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmllbGRzIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlbSBhcyBhIGxpc3QuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludHJpbnNpY3M8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGV4Y2VwdD86IFNldDxzdHJpbmc+KTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3RvdHlwZUtleXMob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRJbnRyaW5zaWMob2JqZWN0LCBrZXksIGV4Y2VwdCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAob2JqZWN0IGFzIGFueSlba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYga2V5IGlzIGRpcmVjdGx5IHByZXNlbnQgaW4gb2JqZWN0LCBqdXN0IHJldHVybiBpdC5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG9iamVjdCAmJiBpc1ZhbGlkSW50cmluc2ljKG9iamVjdCwga2V5LCBleGNlcHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAob2JqZWN0IGFzIGFueSlba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgRmllbGRbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZpZWxkIGV4dHJhY3RvciB3aGljaCBleHRyYWN0cyBmcm9udG1hdHRlciBmaWVsZHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZyb250bWF0dGVyPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBmcm9udDogKG9iamVjdDogVCkgPT4gUmVjb3JkPHN0cmluZywgRnJvbnRtYXR0ZXJFbnRyeT4gfCB1bmRlZmluZWRcbiAgICApOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gZnJvbnQob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghZnJvbnRtYXR0ZXIpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmcm9udG1hdHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmcm9udG1hdHRlcltrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZW50cnkua2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGVudHJ5LnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHsgdHlwZTogXCJmcm9udG1hdHRlclwiLCBmaWxlOiBvYmplY3QuJGZpbGUhLCBrZXk6IGVudHJ5LmtleSB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gZnJvbnRtYXR0ZXIpKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGZyb250bWF0dGVyW2tleV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogZW50cnkucmF3LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmVuYW5jZTogeyB0eXBlOiBcImZyb250bWF0dGVyXCIsIGZpbGU6IG9iamVjdC4kZmlsZSEsIGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZpZWxkIGV4dHJhY3RvciB3aGljaCBzaG93cyBhbGwgaW5saW5lIGZpZWxkcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaW5saW5lRmllbGRzPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBpbmxpbmVNYXA6IChvYmplY3Q6IFQpID0+IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpZWxkRXh0cmFjdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gaW5saW5lTWFwKG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIW1hcCkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LnZhbHVlcyhtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGZpZWxkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZmllbGQucG9zaXRpb24ubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgUHJvdmVuYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG1hcCkpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gbWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGZpZWxkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZmllbGQucG9zaXRpb24ubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgUHJvdmVuYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBNZXJnZSBtdWx0aXBsZSBmaWVsZCBleHRyYWN0b3JzIGludG8gb25lOyBpZiBtdWx0aXBsZSBleHRyYWN0b3JzIHByb2R1Y2UgaWRlbnRpY2FsIGtleXMsIGtleXMgZnJvbSB0aGUgZWFybGllciBleHRyYWN0b3Igd2lsbCBiZSBwcmVmZXJyZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBGaWVsZGJlYXJpbmc+KC4uLmV4dHJhY3RvcnM6IEZpZWxkRXh0cmFjdG9yPFQ+W10pOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIGV4dHJhY3RvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBleHRyYWN0b3Iob2JqZWN0LCB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlZC5oYXMoZmllbGQua2V5LnRvTG93ZXJDYXNlKCkpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlZC5hZGQoZmllbGQua2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIGV4dHJhY3RvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBleHRyYWN0b3Iob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQubGVuZ3RoID4gMCkgcmV0dXJuIGZpZWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCAiLyoqIFBhcnNlIGlubGluZSBmaWVsZHMgYW5kIG90aGVyIGVtYmVkZGVkIG1ldGFkYXRhIGluIGEgbGluZS4gKi9cblxuaW1wb3J0IHsgUFJJTUlUSVZFUyB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBKc29uQ29udmVyc2lvbiwgSnNvbkxpdGVyYWwgfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jb21tb25cIjtcblxuLyoqIEEgcGFyc2VkIGlubGluZSBmaWVsZCBmcm9tIGEgc3BlY2lmaWMgbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxJbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSByYXcgcGFyc2VkIGtleS4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZmllbGQuICovXG4gICAgdmFsdWU6IHN0cmluZztcbiAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiAqL1xuICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgIGVuZDogbnVtYmVyO1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogRnVsbCBpbmxpbmUgZmllbGQgbWV0YWRhdGEgZm9yIGFuIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgYWN0dWFsIGtleSBkZXNjcmliaW5nIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICByYXc6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZS4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogRnVsbCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3Igd2hlcmUgdGhlIGlubGluZSBmaWVsZCBpcyBsb2NhdGVkIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBwb3NpdGlvbjoge1xuICAgICAgICAvKiogVGhlIGxpbmUgbnVtYmVyIHRoZSBpbmxpbmUgZmllbGQgYXBwZWFycyBvbi4gKi9cbiAgICAgICAgbGluZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuIEltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnOjonLiAqL1xuICAgICAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBKU09OLCBzZXJpYWxpemFibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaW5saW5lIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgYWN0dWFsIGtleSBkZXNjcmliaW5nIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICByYXc6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZS4gKi9cbiAgICB2YWx1ZTogSnNvbkxpdGVyYWw7XG4gICAgLyoqIEZ1bGwgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHdoZXJlIHRoZSBpbmxpbmUgZmllbGQgaXMgbG9jYXRlZCBpbiB0aGUgZG9jdW1lbnQuICovXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgLyoqIFRoZSBsaW5lIG51bWJlciB0aGUgaW5saW5lIGZpZWxkIGFwcGVhcnMgb24uICovXG4gICAgICAgIGxpbmU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiBJbW1lZGlhdGVseSBhZnRlciB0aGUgJzo6Jy4gKi9cbiAgICAgICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogQ29udmVydCBhbiBpbmxpbmUgZmllbGQgdG8gYSBKU09OIGZvcm1hdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uSW5saW5lRmllbGQoZmllbGQ6IElubGluZUZpZWxkKTogSnNvbklubGluZUZpZWxkIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQsIHsgdmFsdWU6IEpzb25Db252ZXJzaW9uLmpzb24oZmllbGQudmFsdWUpIH0pO1xufVxuXG4vKiogQ29udmVydCBhIEpTT04gaW5saW5lIGZpZWxkIGJhY2sgdG8gYSByZWd1bGFyIGZpZWxkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlSW5saW5lRmllbGQoZmllbGQ6IEpzb25JbmxpbmVGaWVsZCk6IElubGluZUZpZWxkIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQsIHsgdmFsdWU6IEpzb25Db252ZXJzaW9uLnZhbHVlKGZpZWxkLnZhbHVlKSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQobG9jYWw6IExvY2FsSW5saW5lRmllbGQsIGxpbmVubzogbnVtYmVyKTogSW5saW5lRmllbGQ7XG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChsb2NhbDogTG9jYWxJbmxpbmVGaWVsZFtdLCBsaW5lbm86IG51bWJlcik6IElubGluZUZpZWxkW107XG4vKiogQ29udmVydCBhIGxvY2FsIGlubGluZSBmaWVsZCBpbnRvIGEgZnVsbCBpbmxpbmUgZmllbGQgYnkgcGVyZm9ybWluZyBwYXJzaW5nIGFuZCBhZGRpbmcgdGhlIGNvcnJlY3QgbGluZSBudW1iZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChcbiAgICBsb2NhbDogTG9jYWxJbmxpbmVGaWVsZCB8IExvY2FsSW5saW5lRmllbGRbXSxcbiAgICBsaW5lbm86IG51bWJlclxuKTogSW5saW5lRmllbGQgfCBJbmxpbmVGaWVsZFtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsb2NhbCkpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsLm1hcCgoZikgPT4gYXNJbmxpbmVGaWVsZChmLCBsaW5lbm8pKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGxvY2FsLmtleSxcbiAgICAgICAgcmF3OiBsb2NhbC52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW5saW5lVmFsdWUobG9jYWwudmFsdWUpLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbGluZTogbGluZW5vLFxuICAgICAgICAgICAgc3RhcnQ6IGxvY2FsLnN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRWYWx1ZTogbG9jYWwuc3RhcnRWYWx1ZSxcbiAgICAgICAgICAgIGVuZDogbG9jYWwuZW5kLFxuICAgICAgICB9LFxuICAgICAgICB3cmFwcGluZzogbG9jYWwud3JhcHBpbmcsXG4gICAgfTtcbn1cblxuLyoqIFRoZSB3cmFwcGVyIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gaW5saW5lIGZpZWxkLiAqL1xuZXhwb3J0IGNvbnN0IElOTElORV9GSUVMRF9XUkFQUEVSUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBcIltcIjogXCJdXCIsXG4gICAgXCIoXCI6IFwiKVwiLFxufSk7XG5cbi8qKlxuICogRmluZCBhIG1hdGNoaW5nIGNsb3NpbmcgYnJhY2tldCB0aGF0IG9jY3VycyBhdCBvciBhZnRlciBgc3RhcnRgLCByZXNwZWN0aW5nIG5lc3RpbmcgYW5kIGVzY2FwZXMuIElmIGZvdW5kLFxuICogcmV0dXJucyB0aGUgdmFsdWUgY29udGFpbmVkIHdpdGhpbiBhbmQgdGhlIHN0cmluZyBpbmRleCBhZnRlciB0aGUgZW5kIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZmluZENsb3NpbmcoXG4gICAgbGluZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgb3Blbjogc3RyaW5nLFxuICAgIGNsb3NlOiBzdHJpbmdcbik6IHsgdmFsdWU6IHN0cmluZzsgZW5kSW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbmVzdGluZyA9IDA7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGxpbmUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGxldCBjaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICAgIC8vIEFsbG93cyBmb3IgZG91YmxlIGVzY2FwZXMgbGlrZSAnXFxcXCcgdG8gYmUgcmVuZGVyZWQgbm9ybWFsbHkuXG4gICAgICAgIGlmIChjaGFyID09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGVzY2FwZWQsIGlnbm9yZSB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGNvbXB1dGluZyBuZXN0aW5nLCByZWdhcmRsZXNzIG9mIHdoYXQgaXQgaXMuXG4gICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyID09IG9wZW4pIG5lc3RpbmcrKztcbiAgICAgICAgZWxzZSBpZiAoY2hhciA9PSBjbG9zZSkgbmVzdGluZy0tO1xuXG4gICAgICAgIC8vIE9ubHkgb2NjdXJzIGlmIHdlIGFyZSBvbiBhIGNsb3NlIGNoYXJhY3RlciBhbmQgdHJoZXJlIGlzIG5vIG1vcmUgbmVzdGluZy5cbiAgICAgICAgaWYgKG5lc3RpbmcgPCAwKSByZXR1cm4geyB2YWx1ZTogbGluZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCksIGVuZEluZGV4OiBpbmRleCArIDEgfTtcblxuICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEZpbmQgdGhlICc6Oicgc2VwYXJhdG9yIGluIGFuIGlubGluZSBmaWVsZC4gKi9cbmZ1bmN0aW9uIGZpbmRTZXBhcmF0b3IobGluZTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogeyBrZXk6IHN0cmluZzsgdmFsdWVJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBzZXAgPSBsaW5lLmluZGV4T2YoXCI6OlwiLCBzdGFydCk7XG4gICAgaWYgKHNlcCA8IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4geyBrZXk6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBzZXApLnRyaW0oKSwgdmFsdWVJbmRleDogc2VwICsgMiB9O1xufVxuXG4vKiogVHJ5IHRvIGNvbXBsZXRlbHkgcGFyc2UgYW4gaW5saW5lIGZpZWxkIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gQXNzdW1lcyBgc3RhcnRgIGlzIG9uIGEgd3JhcHBpbmcgY2hhcmFjdGVyLiAqL1xuZnVuY3Rpb24gZmluZFNwZWNpZmljSW5saW5lRmllbGQobGluZTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogTG9jYWxJbmxpbmVGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG9wZW4gPSBsaW5lLmNoYXJBdChzdGFydCk7XG5cbiAgICBsZXQga2V5ID0gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCArIDEpO1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEZhaWwgdGhlIG1hdGNoIGlmIHdlIGZpbmQgYW55IHNlcGFyYXRvciBjaGFyYWN0ZXJzIChub3QgYWxsb3dlZCBpbiBrZXlzKS5cbiAgICBmb3IgKGxldCBzZXAgb2YgT2JqZWN0LmtleXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKS5jb25jYXQoT2JqZWN0LnZhbHVlcyhJTkxJTkVfRklFTERfV1JBUFBFUlMpKSkge1xuICAgICAgICBpZiAoa2V5LmtleS5pbmNsdWRlcyhzZXApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IGZpbmRDbG9zaW5nKGxpbmUsIGtleS52YWx1ZUluZGV4LCBvcGVuLCBJTkxJTkVfRklFTERfV1JBUFBFUlNbb3Blbl0pO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXkua2V5LFxuICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgc3RhcnRWYWx1ZToga2V5LnZhbHVlSW5kZXgsXG4gICAgICAgIGVuZDogdmFsdWUuZW5kSW5kZXgsXG4gICAgICAgIHdyYXBwaW5nOiBvcGVuLFxuICAgIH07XG59XG5cbi8qKiBQYXJzZSBhIHRleHR1YWwgaW5saW5lIGZpZWxkIHZhbHVlIGludG8gc29tZXRoaW5nIHdlIGNhbiB3b3JrIHdpdGguICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbmxpbmVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogTGl0ZXJhbCB7XG4gICAgLy8gRW1wdHkgaW5saW5lIHZhbHVlcyAoaS5lLiwgbm8gdGV4dCkgc2hvdWxkIG1hcCB0byBudWxsIHRvIG1hdGNoIGxvbmctdGVybSBEYXRhdmlldyBzZW1hbnRpY3MuXG4gICAgLy8gTnVsbCBpcyBhbHNvIGEgbW9yZSB1bml2ZXJzYWwgdHlwZSB0byBkZWFsIHdpdGggdGhhbiBzdHJpbmdzLCBzaW5jZSBhbGwgZnVuY3Rpb25zIGFjY2VwdCBudWxscy5cbiAgICBpZiAodmFsdWUudHJpbSgpID09IFwiXCIpIHJldHVybiBudWxsO1xuXG4gICAgLy8gVGhlIHN0cmlwcGVkIGxpdGVyYWwgZmllbGQgcGFyc2VyIHVuZGVyc3RhbmRzIGFsbCBvZiB0aGUgbm9uLWFycmF5L25vbi1vYmplY3QgZmllbGRzIGFuZCBjYW4gcGFyc2UgdGhlbSBmb3IgdXMuXG4gICAgLy8gSW5saW5lIGZpZWxkIG9iamVjdHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkOyBpbmxpbmUgYXJyYXkgb2JqZWN0cyBoYXZlIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHBhcnNlclxuICAgIC8vIHNlcGFyYXRlbHkuXG4gICAgbGV0IGlubGluZSA9IFBSSU1JVElWRVMuaW5saW5lRmllbGQucGFyc2UodmFsdWUpO1xuICAgIGlmIChpbmxpbmUuc3RhdHVzKSByZXR1cm4gaW5saW5lLnZhbHVlO1xuICAgIGVsc2UgcmV0dXJuIHZhbHVlO1xufVxuXG4vKiogRXh0cmFjdHMgaW5saW5lIGZpZWxkcyBvZiB0aGUgZm9ybSAnW2tleTo6IHZhbHVlXScgZnJvbSBhIGxpbmUgb2YgdGV4dC4gVGhpcyBpcyBkb25lIGluIGEgcmVsYXRpdmVseVxuICogXCJyb2J1c3RcIiB3YXkgdG8gYXZvaWQgZmFpbGluZyBkdWUgdG8gYmFkIG5lc3Rpbmcgb3Igb3RoZXIgaW50ZXJmZXJpbmcgTWFya2Rvd24gc3ltYm9sczpcbiAqXG4gKiAtIExvb2sgZm9yIGFueSB3cmFwcGVycyAoJ1snIGFuZCAnKCcpIGluIHRoZSBsaW5lLCB0cnlpbmcgdG8gcGFyc2Ugd2hhdGV2ZXIgY29tZXMgYWZ0ZXIgaXQgYXMgYW4gaW5saW5lIGtleTo6LlxuICogLSBJZiBzdWNjZXNzZnVsLCBzY2FuIHVudGlsIHlvdSBmaW5kIGEgbWF0Y2hpbmcgZW5kIGJyYWNrZXQsIGFuZCBwYXJzZSB3aGF0ZXZlciByZW1haW5zIGFzIGFuIGlubGluZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZTogc3RyaW5nLCBpbmNsdWRlVGFza0ZpZWxkczogYm9vbGVhbiA9IGZhbHNlKTogTG9jYWxJbmxpbmVGaWVsZFtdIHtcbiAgICBsZXQgZmllbGRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcbiAgICBmb3IgKGxldCB3cmFwcGVyIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykpIHtcbiAgICAgICAgbGV0IGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlcik7XG4gICAgICAgIHdoaWxlIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRGaWVsZCA9IGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIGZvdW5kSW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWRGaWVsZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlciwgZm91bmRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZWRGaWVsZCk7XG4gICAgICAgICAgICBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIsIHBhcnNlZEZpZWxkLmVuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZVRhc2tGaWVsZHMpIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmUpKTtcblxuICAgIGZpZWxkcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgICBsZXQgZmlsdGVyZWRGaWVsZHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID09IDAgfHwgZmlsdGVyZWRGaWVsZHNbZmlsdGVyZWRGaWVsZHMubGVuZ3RoIC0gMV0uZW5kIDwgZmllbGRzW2ldLnN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJlZEZpZWxkcy5wdXNoKGZpZWxkc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkRmllbGRzO1xufVxuXG4vKiogVmFsaWRhdGVzIHRoYXQgYSByYXcgZmllbGQgbmFtZSBoYXMgYSB2YWxpZCBmb3JtLiAqL1xuY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJUOiBQLlBhcnNlcjxzdHJpbmc+ID0gUC5hbHQoXG4gICAgUC5yZWdleHAobmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwidVwiKSksXG4gICAgUC5yZWdleHAoL1swLTlcXHB7TGV0dGVyfVxcd1xcc18vLV0rL3UpXG4pXG4gICAgLm1hbnkoKVxuICAgIC5tYXAoKHBhcnRzKSA9PiBwYXJ0cy5qb2luKFwiXCIpKTtcblxuY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJTRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLnJlZ2V4cCgvW14wLTlcXHdcXHB7TGV0dGVyfV0qL3UpXG4gICAgLnRoZW4oRlVMTF9MSU5FX0tFWV9QQVJUKVxuICAgIC5za2lwKFAucmVnZXhwKC9bX1xcKn5gXSovdSkpO1xuXG4vKiogQXR0ZW1wdCB0byBleHRyYWN0IGEgZnVsbC1saW5lIGZpZWxkIChLZXk6OiBWYWx1ZSBjb25zdW1pbmcgdGhlIGVudGlyZSBjb250ZW50IGxpbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGdWxsTGluZUZpZWxkKHRleHQ6IHN0cmluZyk6IExvY2FsSW5saW5lRmllbGQgfCB1bmRlZmluZWQge1xuICAgIGxldCBzZXAgPSBmaW5kU2VwYXJhdG9yKHRleHQsIDApO1xuICAgIGlmICghc2VwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gV2UgbmVlZCB0byBwb3N0LXByb2Nlc3MgdGhlIGtleSB0byBkcm9wIHVubmVjZXNzYXJ5IG9wZW5pbmcgYW5ub3RhdGlvbnMgYXMgd2VsbCBhc1xuICAgIC8vIGRyb3Agc3Vycm91bmRpbmcgTWFya2Rvd24uXG4gICAgbGV0IHJlYWxLZXkgPSBGVUxMX0xJTkVfS0VZX1BBUlNFUi5wYXJzZShzZXAua2V5KTtcbiAgICBpZiAoIXJlYWxLZXkuc3RhdHVzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByZWFsS2V5LnZhbHVlLFxuICAgICAgICB2YWx1ZTogdGV4dC5zdWJzdHJpbmcoc2VwLnZhbHVlSW5kZXgpLnRyaW0oKSxcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIHN0YXJ0VmFsdWU6IHNlcC52YWx1ZUluZGV4LFxuICAgICAgICBlbmQ6IHRleHQubGVuZ3RoLFxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBDUkVBVEVEX0RBVEVfUkVHRVggPSAvXFx1ezI3OTV9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBEVUVfREFURV9SRUdFWCA9IC8oPzpcXHV7MUY0QzV9fFxcdXsxRjRDNn18XFx1ezFGNUQzfVxcdXtGRTBGfT8pXFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBET05FX0RBVEVfUkVHRVggPSAvXFx1ezI3MDV9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBTQ0hFRFVMRURfREFURV9SRUdFWCA9IC9bXFx1ezIzRjN9XFx1ezIzMUJ9XVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgU1RBUlRfREFURV9SRUdFWCA9IC9cXHV7MUY2RUJ9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcblxuZXhwb3J0IGNvbnN0IEVNT0pJX1JFR0VYRVMgPSBbXG4gICAgeyByZWdleDogQ1JFQVRFRF9EQVRFX1JFR0VYLCBrZXk6IFwiY3JlYXRlZFwiIH0sXG4gICAgeyByZWdleDogU1RBUlRfREFURV9SRUdFWCwga2V5OiBcInN0YXJ0XCIgfSxcbiAgICB7IHJlZ2V4OiBTQ0hFRFVMRURfREFURV9SRUdFWCwga2V5OiBcInNjaGVkdWxlZFwiIH0sXG4gICAgeyByZWdleDogRFVFX0RBVEVfUkVHRVgsIGtleTogXCJkdWVcIiB9LFxuICAgIHsgcmVnZXg6IERPTkVfREFURV9SRUdFWCwga2V5OiBcImNvbXBsZXRpb25cIiB9LFxuXTtcblxuLyoqIFBhcnNlIHNwZWNpYWwgY29tcGxldGVkL2R1ZS9kb25lIHRhc2sgZmllbGRzIHdoaWNoIGFyZSBtYXJrZWQgdmlhIGVtb2ppLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmU6IHN0cmluZyk6IExvY2FsSW5saW5lRmllbGRbXSB7XG4gICAgbGV0IHJlc3VsdHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgeyByZWdleCwga2V5IH0gb2YgRU1PSklfUkVHRVhFUykge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMobGluZSk7XG4gICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBzdGFydFZhbHVlOiBtYXRjaC5pbmRleCArIDEsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgd3JhcHBpbmc6IFwiZW1vamktc2hvcnRoYW5kXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG4vKiogU2V0cyBvciByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYW4gaW5saW5lIGZpZWxkOyBpZiB0aGUgdmFsdWUgaXMgJ3VuZGVmaW5lZCcsIGRlbGV0ZXMgdGhlIGtleS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbmxpbmVGaWVsZChzb3VyY2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZXhpc3RpbmcgPSBleHRyYWN0SW5saW5lRmllbGRzKHNvdXJjZSk7XG4gICAgbGV0IGV4aXN0aW5nS2V5cyA9IGV4aXN0aW5nLmZpbHRlcigoZikgPT4gZi5rZXkgPT0ga2V5KTtcblxuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyBPUiB0aGUga2V5IGFscmVhZHkgZG9lc24ndCBleGlzdC5cbiAgICBpZiAoZXhpc3RpbmdLZXlzLmxlbmd0aCA+IDIgfHwgKGV4aXN0aW5nS2V5cy5sZW5ndGggPT0gMCAmJiAhdmFsdWUpKSByZXR1cm4gc291cmNlO1xuICAgIGxldCBleGlzdGluZ0tleSA9IGV4aXN0aW5nS2V5c1swXTtcblxuICAgIGxldCBhbm5vdGF0aW9uID0gdmFsdWUgPyBgWyR7a2V5fTo6ICR7dmFsdWV9XWAgOiBcIlwiO1xuICAgIGlmIChleGlzdGluZ0tleSkge1xuICAgICAgICBsZXQgcHJlZml4ID0gc291cmNlLnN1YnN0cmluZygwLCBleGlzdGluZ0tleS5zdGFydCk7XG4gICAgICAgIGxldCBzdWZmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKGV4aXN0aW5nS2V5LmVuZCk7XG5cbiAgICAgICAgaWYgKGFubm90YXRpb24pIHJldHVybiBgJHtwcmVmaXh9JHthbm5vdGF0aW9ufSR7c3VmZml4fWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke3ByZWZpeH0ke3N1ZmZpeC50cmltU3RhcnQoKX1gO1xuICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7c291cmNlLnRyaW1FbmQoKX0gJHthbm5vdGF0aW9ufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVtb2ppU2hvcnRoYW5kQ29tcGxldGlvbkZpZWxkKHNvdXJjZTogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleHRyYWN0SW5saW5lRmllbGRzKHNvdXJjZSwgdHJ1ZSk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gZXhpc3RpbmcuZmlsdGVyKChmKSA9PiBmLmtleSA9PT0gXCJjb21wbGV0aW9uXCIgJiYgZi53cmFwcGluZyA9PT0gXCJlbW9qaS1zaG9ydGhhbmRcIik7XG5cbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgT1IgdGhlIGtleSBhbHJlYWR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgaWYgKGV4aXN0aW5nS2V5cy5sZW5ndGggPiAyIHx8IChleGlzdGluZ0tleXMubGVuZ3RoID09IDAgJiYgIXZhbHVlKSkgcmV0dXJuIHNvdXJjZTtcblxuICAgIC8qIE5vIHdyYXBwZXIsIGFkZCBvd24gc3BhY2luZyBhdCBzdGFydCAqL1xuICAgIGNvbnN0IGFubm90YXRpb24gPSB2YWx1ZSA/IGAgXHUyNzA1ICR7dmFsdWV9YCA6IFwiXCI7XG4gICAgbGV0IGV4aXN0aW5nS2V5ID0gZXhpc3RpbmdLZXlzWzBdO1xuICAgIGlmIChleGlzdGluZ0tleSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIGV4aXN0aW5nS2V5LnN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gc291cmNlLnN1YnN0cmluZyhleGlzdGluZ0tleS5lbmQpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4LnRyaW1FbmQoKX0ke2Fubm90YXRpb259JHtzdWZmaXh9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7c291cmNlLnRyaW1FbmQoKX0ke2Fubm90YXRpb259YDtcbiAgICB9XG59XG4iLCAiLyoqIE1hcCB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IG9iamVjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3RWYWx1ZXM8ViwgVT4ob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBWPiwgZnVuYzogKHg6IFYpID0+IFUpOiBSZWNvcmQ8c3RyaW5nLCBVPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBVPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBmdW5jKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCB7IExpbmssIEpzb25MaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBKU09OLXNlcmlhbGl6ZWQgZXF1aXZhbGVudHMgZm9yIGxpdGVyYWxzLiAqL1xuZXhwb3J0IHR5cGUgSnNvbkxpdGVyYWwgPVxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IHsgJF90eXBlOiBcImRhdGVcIjsgdmFsdWU6IHN0cmluZyB9XG4gICAgfCB7ICRfdHlwZTogXCJkdXJhdGlvblwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgICB8IHsgJF90eXBlOiBcImxpbmtcIjsgdmFsdWU6IEpzb25MaW5rIH1cbiAgICB8IEFycmF5PEpzb25MaXRlcmFsPlxuICAgIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgIHwgbnVsbDtcblxuZXhwb3J0IG5hbWVzcGFjZSBKc29uQ29udmVyc2lvbiB7XG4gICAgZXhwb3J0IGNvbnN0IE5PT1BfTk9STUFMSVpFUjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gKGlucHV0KSA9PiBpbnB1dDtcblxuICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCB2YWx1ZSB0byBhIHNhZmUsIHBlcnNpc3RlbnQgSlNPTiBlcXVpdmFsZW50LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBqc29uKGxpdGVyYWw6IExpdGVyYWwpOiBKc29uTGl0ZXJhbCB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSBMaXRlcmFscy53cmFwVmFsdWUobGl0ZXJhbCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgc3dpdGNoICh3cmFwcGVkPy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAoSnNvbkNvbnZlcnNpb24uanNvbik7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyh3cmFwcGVkLnZhbHVlLCBKc29uQ29udmVyc2lvbi5qc29uKTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImRhdGVcIiwgdmFsdWU6IHdyYXBwZWQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pIH07XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJsaW5rXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkdXJhdGlvblwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTygpIH07XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEpTT04gbGl0ZXJhbCB0byBpdCdzIGNvcnJlc3BvbmRpbmcgaHlkcmF0ZWQgdmFsdWUsIG9wdGlvbmFsbHkgYXBwbHlpbmdcbiAgICAgKiBhIG5vcm1hbGl6YXRpb24gc3RlcCB0byB0aGUgcmVzdWx0aW5nIHZhbHVlIGFuZCBhbnkgbGl0ZXJhbHMgY29udGFpbmVkIHdpdGhpbiBpdFxuICAgICAqIChzdWNoIGFzIGlmIHRoZSBsaXRlcmFsIGlzIGEgbGlzdCBvciBvYmplY3QpLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2YWx1ZShqc29uOiBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gTk9PUF9OT1JNQUxJWkVSKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChqc29uID09PSBudWxsIHx8IGpzb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKGpzb24ubWFwKChpbnB1dCkgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUoaW5wdXQsIG5vcm1hbGl6ZXIpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghKFwiJF90eXBlXCIgaW4ganNvbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyhqc29uLCAodikgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUodiBhcyBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcikpO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0ganNvbltcIiRfdHlwZVwiXTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKERhdGVUaW1lLmZyb21JU08oanNvbi52YWx1ZSwgeyBzZXRab25lOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoRHVyYXRpb24uZnJvbUlTTyhqc29uLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBzZXJpYWxpemVkIHR5cGUgJyR7dHlwZX0nIWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbWl0aXZlIHR5cGUsIHJldHVybiBhcyBpcy5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoanNvbiBhcyBMaXRlcmFsKTtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGluZGV4YWJsZXNcbiAqL1xuaW1wb3J0IHsgTGluaywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7XG4gICAgRklMRV9UWVBFLFxuICAgIEZpbGUsXG4gICAgSW5kZXhhYmxlLFxuICAgIExJTktBQkxFX1RZUEUsXG4gICAgTElOS0JFQVJJTkdfVFlQRSxcbiAgICBMaW5rYWJsZSxcbiAgICBMaW5rYmVhcmluZyxcbiAgICBUQUdHQUJMRV9UWVBFLFxuICAgIFRhZ2dhYmxlLFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHtcbiAgICBFeHRyYWN0b3JzLFxuICAgIEZJRUxEQkVBUklOR19UWVBFLFxuICAgIEZpZWxkLFxuICAgIEZpZWxkRXh0cmFjdG9yLFxuICAgIEZpZWxkYmVhcmluZyxcbiAgICBGaWVsZGJlYXJpbmdzLFxufSBmcm9tIFwiLi4vLi4vZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgSW5saW5lRmllbGQsIGpzb25JbmxpbmVGaWVsZCwgdmFsdWVJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQge1xuICAgIExpbmVTcGFuLFxuICAgIEpzb25NYXJrZG93blBhZ2UsXG4gICAgSnNvbk1hcmtkb3duU2VjdGlvbixcbiAgICBKc29uTWFya2Rvd25CbG9jayxcbiAgICBKc29uTWFya2Rvd25MaXN0QmxvY2ssXG4gICAgSnNvbk1hcmtkb3duTGlzdEl0ZW0sXG4gICAgSnNvbk1hcmtkb3duVGFza0l0ZW0sXG4gICAgSnNvbk1hcmtkb3duRGF0YWJsb2NrIGFzIEpzb25NYXJrZG93bkRhdGFibG9jayxcbiAgICBKc29uTWFya2Rvd25Db2RlYmxvY2ssXG4gICAgSnNvbkZyb250bWF0dGVyRW50cnksXG59IGZyb20gXCIuL2pzb24vbWFya2Rvd25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5pbXBvcnQgeyBKc29uQ29udmVyc2lvbiB9IGZyb20gXCIuL2pzb24vY29tbW9uXCI7XG5cbi8qKiBBIG1hcmtkb3duIGZpbGUgaW4gdGhlIHZhdWx0OyB0aGUgc291cmNlIG9mIG1vc3QgbWV0YWRhdGEuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25QYWdlIGltcGxlbWVudHMgRmlsZSwgTGlua2JlYXJpbmcsIFRhZ2dhYmxlLCBJbmRleGFibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgLyoqIEFsbCBvZiB0aGUgdHlwZXMgdGhhdCBhIG1hcmtkb3duIGZpbGUgaXMuICovXG4gICAgc3RhdGljIFRZUEVTID0gW0ZJTEVfVFlQRSwgXCJtYXJrZG93blwiLCBcInBhZ2VcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgLy8gVXNlIHN0YXRpYyB0eXBlcyBmb3IgYWxsIG1hcmtkb3duIGZpbGVzLlxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93blBhZ2UuVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIlBhZ2VcIjtcblxuICAgIC8vIE1hcmtkb3duIGZpbGUgSURzIGFyZSBhbHdheXMganVzdCB0aGUgZnVsbCBwYXRoLlxuICAgIGdldCAkaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cbiAgICAvLyBUaGUgZmlsZSBvZiBhIGZpbGUgaXMuLi4gaXQncyBmaWxlLlxuICAgIGdldCAkZmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBhdGg7XG4gICAgfVxuXG4gICAgLyoqIEZyb250bWF0dGVyIHZhbHVlcyBpbiB0aGUgZmlsZSwgaWYgcHJlc2VudC4gTWFwcyBsb3dlciBjYXNlIGZyb250bWF0dGVyIGtleSAtPiBlbnRyeS4gKi9cbiAgICAkZnJvbnRtYXR0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5PjtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudC4gTWFwcyBsb3dlciBjYXNlIGtleSBuYW1lIC0+IGZ1bGwgbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG5cbiAgICAvKiogVGhlIHBhdGggdGhpcyBmaWxlIGV4aXN0cyBhdC4gKi9cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogVGhlIGV4dGVuc2lvbjsgZm9yIG1hcmtkb3duIGZpbGVzLCBhbG1vc3QgYWx3YXlzICcubWQnLiAqL1xuICAgICRleHRlbnNpb246IHN0cmluZztcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlciA9IDA7XG4gICAgLyoqIFRoZSBmdWxsIGV4dGVudCBvZiB0aGUgZmlsZSAoc3RhcnQgMCwgZW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuKSAqL1xuICAgICRwb3NpdGlvbjogTGluZVNwYW47XG4gICAgLyoqIFRoZSBleGFjdCB0YWdzIGluIHRoZSBmaWxlLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKlxuICAgICAqIEFsbCBjaGlsZCBtYXJrZG93biBzZWN0aW9ucyBvZiB0aGlzIG1hcmtkb3duIGZpbGUuIFRoZSBpbml0aWFsIHNlY3Rpb24gYmVmb3JlIGFueSBjb250ZW50IGlzIHNwZWNpYWwgYW5kIGlzXG4gICAgICogbmFtZWQgd2l0aCB0aGUgdGl0bGUgb2YgdGhlIGZpbGUuXG4gICAgICovXG4gICAgJHNlY3Rpb25zOiBNYXJrZG93blNlY3Rpb25bXSA9IFtdO1xuXG4gICAgLyoqIENyZWF0ZSBhIG1hcmtkb3duIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gcmF3IHZhbHVlcy4gKi9cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25NYXJrZG93blBhZ2UsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSKTogTWFya2Rvd25QYWdlIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSByYXcuJHNlY3Rpb25zLm1hcCgoc2VjdCkgPT4gTWFya2Rvd25TZWN0aW9uLmZyb20oc2VjdCwgcmF3LiRwYXRoLCBub3JtYWxpemVyKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blBhZ2Uoe1xuICAgICAgICAgICAgJHBhdGg6IHJhdy4kcGF0aCxcbiAgICAgICAgICAgICRmcm9udG1hdHRlcjogcmF3LiRmcm9udG1hdHRlclxuICAgICAgICAgICAgICAgID8gbWFwT2JqZWN0VmFsdWVzKHJhdy4kZnJvbnRtYXR0ZXIsIChmbSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVGcm9udG1hdHRlckVudHJ5KGZtKSwgbm9ybWFsaXplcikpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhyYXcuJGluZmllbGRzLCAoZmllbGQpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoZmllbGQpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkY3RpbWU6IERhdGVUaW1lLmZyb21NaWxsaXMocmF3LiRjdGltZSksXG4gICAgICAgICAgICAkbXRpbWU6IERhdGVUaW1lLmZyb21NaWxsaXMocmF3LiRtdGltZSksXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiByYXcuJGV4dGVuc2lvbixcbiAgICAgICAgICAgICRzaXplOiByYXcuJHNpemUsXG4gICAgICAgICAgICAkcG9zaXRpb246IHJhdy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiByYXcuJGxpbmtzLm1hcCgobGluaykgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobGluaykpKSxcbiAgICAgICAgICAgICRzZWN0aW9uczogc2VjdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93blBhZ2U+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBnZXQgJGxpbmVDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLmVuZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGZpbGUuICovXG4gICAgZ2V0ICRuYW1lKCkge1xuICAgICAgICByZXR1cm4gZ2V0RmlsZVRpdGxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBBIGxpbmsgdG8gdGhpcyBmaWxlLiAqL1xuICAgIGdldCAkbGluaygpIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRwYXRoKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCk6IEZpZWxkW10ge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25QYWdlLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBmdWxsIGZpZWxkIGRlZmluaXRpb24gZm9yIHRoZSBnaXZlbiBmaWVsZC4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpOiBGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBNYXJrZG93blBhZ2UuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIHBhZ2UgaW50byBpdCdzIHBhcnRpYWwgcmVwcmVzZW50YXRpb24gZm9yIHNhdmluZy4gKi9cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwYXRoOiB0aGlzLiRwYXRoLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiB0aGlzLiRmcm9udG1hdHRlciA/IG1hcE9iamVjdFZhbHVlcyh0aGlzLiRmcm9udG1hdHRlciwganNvbkZyb250bWF0dGVyRW50cnkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuJGN0aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuJG10aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiB0aGlzLiRleHRlbnNpb24sXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy4kc2l6ZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MubWFwKChsaW5rKSA9PiBsaW5rLnRvT2JqZWN0KCkpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLiRzZWN0aW9ucy5tYXAoKHNlY3QpID0+IHNlY3QuanNvbigpKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duUGFnZT4gPSBFeHRyYWN0b3JzLm1lcmdlKFxuICAgICAgICBFeHRyYWN0b3JzLmludHJpbnNpY3MoKSxcbiAgICAgICAgRXh0cmFjdG9ycy5mcm9udG1hdHRlcigoZikgPT4gZi4kZnJvbnRtYXR0ZXIpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hcmtkb3duU2VjdGlvbiBpbXBsZW1lbnRzIEluZGV4YWJsZSwgVGFnZ2FibGUsIExpbmthYmxlLCBMaW5rYmVhcmluZywgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0eXBlcyB0aGF0IGEgbWFya2Rvd24gc2VjdGlvbiBpcy4gKi9cbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcInNlY3Rpb25cIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgLyoqIFBhdGggb2YgdGhlIGZpbGUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgaW4uICovXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duU2VjdGlvbi5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiU2VjdGlvblwiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGluZGV4IG9mIHRoaXMgc2VjdGlvbiBpbiB0aGUgZmlsZS4gKi9cbiAgICAkb3JkaW5hbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgdGl0bGUgb2YgdGhlIHNlY3Rpb247IHRoZSByb290IChpbXBsaWNpdCkgc2VjdGlvbiB3aWxsIGhhdmUgdGhlIHRpdGxlIG9mIHRoZSBwYWdlLiAqL1xuICAgICR0aXRsZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgaW5kZW50YXRpb24gbGV2ZWwgb2YgdGhlIHNlY3Rpb24gKDEgLSA2KS4gKi9cbiAgICAkbGV2ZWw6IG51bWJlcjtcbiAgICAvKiogVGhlIHNwYW4gb2YgbGluZXMgaW5kaWNhdGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY3Rpb24uICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQWxsIHRhZ3Mgb24gdGhlIGZpbGUuICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIEFsbCBvZiB0aGUgbWFya2Rvd24gYmxvY2tzIGluIHRoaXMgc2VjdGlvbi4gKi9cbiAgICAkYmxvY2tzOiBNYXJrZG93bkJsb2NrW107XG4gICAgLyoqIE1hcCBvZiBhbGwgZGlzdGluY3QgaW5saW5lIGZpZWxkcyBpbiB0aGUgZG9jdW1lbnQsIGZyb20ga2V5IG5hbWUgLT4gbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG5cbiAgICAvKiogQ29udmVydCByYXcgbWFya2Rvd24gc2VjdGlvbiBkYXRhIHRvIHRoZSBhcHByb3ByaWF0ZSBjbGFzcy4gKi9cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25NYXJrZG93blNlY3Rpb24sIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93blNlY3Rpb24ge1xuICAgICAgICBjb25zdCBibG9ja3MgPSByYXcuJGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiBNYXJrZG93bkJsb2NrLmZyb20oYmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blNlY3Rpb24oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duU2VjdGlvbi5yZWFkYWJsZUlkKGZpbGUsIHJhdy4kdGl0bGUsIHJhdy4kb3JkaW5hbCksXG4gICAgICAgICAgICAkb3JkaW5hbDogcmF3LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHRpdGxlOiByYXcuJHRpdGxlLFxuICAgICAgICAgICAgJGxldmVsOiByYXcuJGxldmVsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiByYXcuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHJhdy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkYmxvY2tzOiBibG9ja3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhyYXcuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25TZWN0aW9uPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgc2VjdGlvbi4gKi9cbiAgICBnZXQgJGxpbmVDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uZW5kIC0gdGhpcy4kcG9zaXRpb24uc3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqIEFsaWFzIGZvciB0aXRsZSB3aGljaCBhbGxvd3Mgc2VhcmNoaW5nIG92ZXIgcGFnZXMgYW5kIHNlY3Rpb25zIGJ5ICduYW1lJy4gKi9cbiAgICBnZXQgJG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHRpdGxlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBsaW5rIHRvIHRoaXMgc2VjdGlvbi4gKi9cbiAgICBnZXQgJGxpbmsoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmhlYWRlcih0aGlzLiRmaWxlLCB0aGlzLiR0aXRsZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duU2VjdGlvbi5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duU2VjdGlvbi5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duU2VjdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkb3JkaW5hbDogdGhpcy4kb3JkaW5hbCxcbiAgICAgICAgICAgICR0aXRsZTogdGhpcy4kdGl0bGUsXG4gICAgICAgICAgICAkbGV2ZWw6IHRoaXMuJGxldmVsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcy5tYXAoKGxpbmspID0+IGxpbmsudG9PYmplY3QoKSksXG4gICAgICAgICAgICAkYmxvY2tzOiB0aGlzLiRibG9ja3MubWFwKChibG9jaykgPT4gYmxvY2suanNvbigpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25TZWN0aW9uPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcblxuICAgIC8qKiBHZW5lcmF0ZSBhIHJlYWRhYmxlIElEIGZvciB0aGlzIHNlY3Rpb24gdXNpbmcgdGhlIGZpcnN0IDggY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgb3JkaW5hbC4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIG9yZGluYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpcnN0OCA9IHRpdGxlLnN1YnN0cmluZygwLCBNYXRoLm1pbih0aXRsZS5sZW5ndGgsIDgpKS5yZXBsYWNlKC9bXkEtWmEtejAtOS1fXSsvZ2ksIFwiLVwiKTtcblxuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vc2VjdGlvbiR7b3JkaW5hbH0vJHtmaXJzdDh9YDtcbiAgICB9XG59XG5cbi8qKiBCYXNlIGNsYXNzIGZvciBhbGwgbWFya2Rvd24gYmxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImJsb2NrXCIsIExJTktCRUFSSU5HX1RZUEUsIFRBR0dBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93bkJsb2NrLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJCbG9ja1wiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGluZGV4IG9mIHRoaXMgYmxvY2sgaW4gdGhlIGZpbGUuICovXG4gICAgJG9yZGluYWw6IG51bWJlcjtcbiAgICAvKiogVGhlIHBvc2l0aW9uL2V4dGVudCBvZiB0aGUgYmxvY2suICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQWxsIHRhZ3Mgb24gdGhlIGJsb2NrLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LCBmcm9tIGtleSBuYW1lIC0+IG1ldGFkYXRhLiAqL1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgIC8qKiBJZiBwcmVzZW50LCB0aGUgZGlzdGluY3QgYmxvY2sgSUQgZm9yIHRoaXMgYmxvY2suICovXG4gICAgJGJsb2NrSWQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGJsb2NrIC0gcGFyYWdyYXBoLCBsaXN0LCBhbmQgc28gb24uICovXG4gICAgJHR5cGU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tKG9iamVjdDogSnNvbk1hcmtkb3duQmxvY2ssIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93bkJsb2NrIHtcbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXJrZG93bkxpc3RCbG9jay5mcm9tKG9iamVjdCBhcyBKc29uTWFya2Rvd25MaXN0QmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJkYXRhYmxvY2tcIikge1xuICAgICAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93bkRhdGFibG9jaywgZmlsZSwgbm9ybWFsaXplcik7XG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LiR0eXBlID09PSBcImNvZGVibG9ja1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWFya2Rvd25Db2RlYmxvY2suZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duQ29kZWJsb2NrLCBmaWxlLCBub3JtYWxpemVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25CbG9jayh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25CbG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kb3JkaW5hbCksXG4gICAgICAgICAgICAkb3JkaW5hbDogb2JqZWN0LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogb2JqZWN0LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICR0eXBlOiBvYmplY3QuJHR5cGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duQmxvY2s+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIElmIHRoaXMgYmxvY2sgaGFzIGEgYmxvY2sgSUQsIHRoZSBsaW5rIHRvIHRoaXMgYmxvY2suICovXG4gICAgZ2V0ICRsaW5rKCk6IExpbmsgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy4kYmxvY2tJZCkgcmV0dXJuIExpbmsuYmxvY2sodGhpcy4kZmlsZSwgdGhpcy4kYmxvY2tJZCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25CbG9jay5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25CbG9jay5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duQmxvY2sge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJG9yZGluYWw6IHRoaXMuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHRoaXMuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLm1hcCgobCkgPT4gbC50b09iamVjdCgpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuJGJsb2NrSWQsXG4gICAgICAgICAgICAkdHlwZTogdGhpcy4kdHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcblxuICAgIC8qKiBHZW5lcmF0ZSBhIHJlYWRhYmxlIElEIGZvciB0aGlzIGJsb2NrIHVzaW5nIHRoZSBvcmRpbmFsIG9mIHRoZSBibG9jay4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIG9yZGluYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9ibG9jayR7b3JkaW5hbH1gO1xuICAgIH1cbn1cblxuLyoqIFNwZWNpYWwgYmxvY2sgZm9yIG1hcmtkb3duIGxpc3RzIChvZiBlaXRoZXIgcGxhaW4gbGlzdCBlbnRyaWVzIG9yIHRhc2tzKS4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkxpc3RCbG9jayBleHRlbmRzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBUYWdnYWJsZSwgTGlua2JlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgXCJibG9jay1saXN0XCIsIFRBR0dBQkxFX1RZUEUsIExJTktCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duTGlzdEJsb2NrLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJMaXN0IEJsb2NrXCI7XG5cbiAgICAvKiogVGhlIGxpc3QgaXRlbXMgaW5zaWRlIG9mIHRoaXMgYmxvY2suICovXG4gICAgJGVsZW1lbnRzOiBNYXJrZG93bkxpc3RJdGVtW107XG5cbiAgICAvKiogQ3JlYXRlIGEgbGlzdCBibG9jayBmcm9tIGEgc2VyaWFsaXplZCB2YWx1ZS4gKi9cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25MaXN0QmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkxpc3RCbG9jayB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gb2JqZWN0LiRlbGVtZW50cy5tYXAoKGVsZW0pID0+IE1hcmtkb3duTGlzdEl0ZW0uZnJvbShlbGVtLCBmaWxlLCBub3JtYWxpemVyKSk7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25MaXN0QmxvY2soe1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBzaGFyZWQgd2l0aCBvdGhlciBibG9ja3MsIHNob3VsZCBwcm9iYWJseSBiZSBmaXhlZC5cbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgICAgICR0eXBlOiBcImxpc3RcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkZWxlbWVudHM6IHRoaXMuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZWxlbS5qc29uKCkpLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25MaXN0QmxvY2s7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25MaXN0QmxvY2s+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cbn1cblxuLyoqIEEgYmxvY2sgY29udGFpbmluZyBtYXJrZG93biBjb2RlLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29kZWJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImNvZGVibG9ja1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25Db2RlYmxvY2suVFlQRVM7XG4gICAgJGxhbmd1YWdlczogc3RyaW5nW107XG4gICAgJGNvbnRlbnRQb3NpdGlvbjogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9O1xuICAgICRzdHlsZTogXCJmZW5jZWRcIiB8IFwiaW5kZW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93bkNvZGVibG9jaz4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb20oXG4gICAgICAgIG9iamVjdDogSnNvbk1hcmtkb3duQ29kZWJsb2NrLFxuICAgICAgICBmaWxlOiBzdHJpbmcsXG4gICAgICAgIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSXG4gICAgKTogTWFya2Rvd25Db2RlYmxvY2sge1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duQ29kZWJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkNvZGVibG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICR0eXBlbmFtZTogXCJDb2RlYmxvY2tcIixcbiAgICAgICAgICAgICR0eXBlOiBcImNvZGVibG9ja1wiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRsYW5ndWFnZXM6IG9iamVjdC4kbGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobGluaykgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobGluaykpKSxcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCB2YWx1ZUlubGluZUZpZWxkKSxcbiAgICAgICAgICAgICRjb250ZW50UG9zaXRpb246IG9iamVjdC4kY29udGVudFBvc2l0aW9uLFxuICAgICAgICAgICAgJHN0eWxlOiBvYmplY3QuJHN0eWxlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25Db2RlYmxvY2suU1VCX0ZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5TVUJfRklFTERfREVGKHRoaXMsIGtleSk/LlswXSA/PyBGaWVsZGJlYXJpbmdzLmdldFdpdGhEZWZhdWx0KHRoaXMsIGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmpzb24oKSwge1xuICAgICAgICAgICAgJGxhbmd1YWdlczogdGhpcy4kbGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogdGhpcy4kY29udGVudFBvc2l0aW9uLFxuICAgICAgICAgICAgJHN0eWxlOiB0aGlzLiRzdHlsZSxcbiAgICAgICAgfSkgYXMgSnNvbk1hcmtkb3duQ29kZWJsb2NrO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2NvZGVibG9jayR7bGluZX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBTVUJfRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkNvZGVibG9jaz4gPSBFeHRyYWN0b3JzLm1lcmdlPE1hcmtkb3duQ29kZWJsb2NrPihcbiAgICAgICAgTWFya2Rvd25CbG9jay5GSUVMRF9ERUZcbiAgICApO1xufVxuXG4vKiogQSBkYXRhLWFubm90YXRlZCBZQU1MIGNvZGVibG9jay4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkRhdGFibG9jayBleHRlbmRzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBJbmRleGFibGUsIEZpZWxkYmVhcmluZywgTGlua2JlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgXCJkYXRhYmxvY2tcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duRGF0YWJsb2NrLlRZUEVTO1xuICAgICRkYXRhOiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duRGF0YWJsb2NrPikge1xuICAgICAgICBzdXBlcihpbml0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25EYXRhYmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkRhdGFibG9jayB7XG4gICAgICAgIC8vIERhdGFibG9ja3MgYXJlIGJhc2VkIG9uIHdoYXQgaXMgZXNzZW50aWFsbHkganVzdCBmcm9udG1hdHRlcjsgd2UgY2FuIGFwcGx5XG4gICAgICAgIC8vIHRoZSBzYW1lIG5vcm1hbGl6YXRpb24gbG9naWMgdG8gdGhlbS5cbiAgICAgICAgY29uc3Qgbm9ybWRhdGEgPSBub3JtYWxpemVMaW5rcyhtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRkYXRhLCB2YWx1ZUZyb250bWF0dGVyRW50cnkpLCBub3JtYWxpemVyKTtcbiAgICAgICAgY29uc3QgbGlua3MgPSBnYXRoZXJMaW5rcyhub3JtZGF0YSk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBnYXRoZXJUYWdzKG5vcm1kYXRhKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duRGF0YWJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkRhdGFibG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGluZmllbGRzOiB7fSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkZGF0YTogbm9ybWRhdGEsXG4gICAgICAgICAgICAkbGlua3M6IGxpbmtzLFxuICAgICAgICAgICAgJHR5cGVuYW1lOiBcIkRhdGFibG9ja1wiLFxuICAgICAgICAgICAgJHRhZ3M6IHRhZ3MsXG4gICAgICAgICAgICAkdHlwZTogXCJkYXRhYmxvY2tcIixcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkRhdGFibG9jay5TVUJfRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duRGF0YWJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkZGF0YTogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGRhdGEsIGpzb25Gcm9udG1hdHRlckVudHJ5KSxcbiAgICAgICAgfSkgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2RhdGFibG9jayR7bGluZX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBTVUJfRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkRhdGFibG9jaz4gPSBFeHRyYWN0b3JzLm1lcmdlPE1hcmtkb3duRGF0YWJsb2NrPihcbiAgICAgICAgTWFya2Rvd25CbG9jay5GSUVMRF9ERUYsXG4gICAgICAgIEV4dHJhY3RvcnMuZnJvbnRtYXR0ZXIoKGYpID0+IGYuJGRhdGEpXG4gICAgKTtcbn1cblxuLyoqIEEgc3BlY2lmaWMgbGlzdCBpdGVtIGluIGEgbGlzdC4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkxpc3RJdGVtIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJsaXN0LWl0ZW1cIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duTGlzdEl0ZW0uVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkxpc3QgSXRlbVwiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0IGl0ZW0gaW4gdGhlIGZpbGUuICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQ2hpbGQgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgJGVsZW1lbnRzOiBNYXJrZG93bkxpc3RJdGVtW107XG4gICAgLyoqIFRoZSB0eXBlIG9mIGxpc3QgaXRlbSB0aGF0IHRoaXMgZWxlbWVudCBpcy4gKi9cbiAgICAkdHlwZTogc3RyaW5nO1xuICAgIC8qKiBFeGFjdCB0YWdzIG9uIHRoaXMgbGlzdCBpdGVtLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudCwgZnJvbSBrZXkgbmFtZSAtPiBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb2YgdGhpcyBsaXN0IGl0ZW0gaWYgcHJlc2VudC4gKi9cbiAgICAkYmxvY2tJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIHBhcmVudCBvZiB0aGlzIGxpc3QgaXRlbS5cbiAgICAgKiBJZiBhIHBvc2l0aXZlIG51bWJlciwgdGhlbiB0aGlzIGxpc3QgZWxlbWVudCBpcyBhIGNoaWxkXG4gICAgICogb2YgdGhlIGxpc3QgZWxlbWVudCBhdCB0aGF0IGxpbmUuXG4gICAgICpcbiAgICAgKiBJZiBhIG5lZ2F0aXZlIG51bWJlciwgdGhlbiB0aGlzIGxpc3QgZWxlbWVudCBpcyBhIHJvb3QgZWxlbWVudFxuICAgICAqIG9mIGEgbGlzdCBzdGFydGluZyBhdCB0aGF0IGxpbmUgKG5lZ2F0ZWQpLiBJLmUuLCAtNyBtZWFuc1xuICAgICAqIHRoaXMgaXMgYSByb290IGVsZW1lbnQgb2YgdGhlIGxpc3Qgc3RhcnRpbmcgYXQgbGluZSA3LlxuICAgICAqL1xuICAgICRwYXJlbnRMaW5lOiBudW1iZXI7XG4gICAgLyoqIFRoZSBtYXJrZXIgdXNlZCB0byBzdGFydCB0aGUgbGlzdCBpdGVtIChzdWNoIGFzIC0gb3IgKyBvciAqKS4gT24gYSBtYWxmb3JtZWQgdGFzaywgbWF5IGJlIHVuZGVmaW5lZC4gKi9cbiAgICAkc3ltYm9sPzogc3RyaW5nO1xuICAgIC8qKiBUaGUgdGV4dCBjb250ZW50cyBvZiB0aGUgbGlzdCBpdGVtLiAqL1xuICAgICR0ZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqIENyZWF0ZSBhIGxpc3QgaXRlbSBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuICovXG4gICAgc3RhdGljIGZyb20oXG4gICAgICAgIG9iamVjdDogSnNvbk1hcmtkb3duTGlzdEl0ZW0sXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJ0YXNrXCIpIHJldHVybiBNYXJrZG93blRhc2tJdGVtLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93blRhc2tJdGVtLCBmaWxlLCBub3JtYWxpemVyKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG9iamVjdC4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBNYXJrZG93bkxpc3RJdGVtLmZyb20oZWxlbSwgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duTGlzdEl0ZW0oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duTGlzdEl0ZW0ucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJHBvc2l0aW9uLnN0YXJ0KSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgICAkdHlwZTogb2JqZWN0LiR0eXBlLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRwYXJlbnRMaW5lOiBvYmplY3QuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkdGV4dDogb2JqZWN0LiR0ZXh0LFxuICAgICAgICAgICAgJHN5bWJvbDogb2JqZWN0LiRzeW1ib2wsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duTGlzdEl0ZW0+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgbGluZSB0aGF0IHRoaXMgbGlzdCBpdGVtIHN0YXJ0cyBvbi4gKi9cbiAgICBnZXQgJGxpbmUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLnN0YXJ0O1xuICAgIH1cblxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMgbGlzdCBpdGVtLiAqL1xuICAgIGdldCAkbGluZUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwb3NpdGlvbi5lbmQgLSB0aGlzLiRwb3NpdGlvbi5zdGFydCArIDE7XG4gICAgfVxuXG4gICAgLyoqIENsZWFuZWQgdGV4dCB0aGF0IGlzIGdhcmF1bnRlZWQgdG8gYmUgbm9uLW51bGwgYW5kIGhhcyBpbmRlbmF0aW9uIGFuZCBpbmxpbmUgZmllbGRzIHJlbW92ZWQuICovXG4gICAgZ2V0ICRjbGVhbnRleHQoKSB7XG4gICAgICAgIGlmICghdGhpcy4kdGV4dCkgcmV0dXJuIFwiXCI7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuJHRleHRcbiAgICAgICAgICAgICAgICAvLyBFbGltaW5hdGUgW2tleTo6IHZhbHVlXSBhbm5vdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKC4qPykoW1xcW1xcKF1bXjooXFxbXSs6OlxccyouKj9bXFxdXFwpXVxccyopJC9nbSwgXCIkMVwiKVxuICAgICAgICAgICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZS5cbiAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEl0ZW0uRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEl0ZW0uRklFTERfREVGKHRoaXMsIGtleSk/LlswXSA/PyBGaWVsZGJlYXJpbmdzLmdldFdpdGhEZWZhdWx0KHRoaXMsIGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkZWxlbWVudHM6IHRoaXMuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZWxlbS5qc29uKCkpLFxuICAgICAgICAgICAgJHR5cGU6IHRoaXMuJHR5cGUsXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcyxcbiAgICAgICAgICAgICRibG9ja0lkOiB0aGlzLiRibG9ja0lkLFxuICAgICAgICAgICAgJHBhcmVudExpbmU6IHRoaXMuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkc3ltYm9sOiB0aGlzLiRzeW1ib2wsXG4gICAgICAgICAgICAkdGV4dDogdGhpcy4kdGV4dCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duTGlzdEl0ZW0+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgaXRlbSB1c2luZyB0aGUgbGluZSBudW1iZXIuICovXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vbGlzdCR7bGluZX1gO1xuICAgIH1cbn1cblxuLyoqIEEgc3BlY2lmaWMgdGFzayBpbnNpZGUgb2YgYSBtYXJrZG93biBsaXN0LiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duVGFza0l0ZW0gZXh0ZW5kcyBNYXJrZG93bkxpc3RJdGVtIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJsaXN0LWl0ZW1cIiwgXCJ0YXNrXCIsIExJTktCRUFSSU5HX1RZUEUsIFRBR0dBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93blRhc2tJdGVtLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJUYXNrXCI7XG5cbiAgICAvKiogVGhlIHRleHQgaW5zaWRlIG9mIHRoZSB0YXNrIGl0ZW0uICovXG4gICAgJHN0YXR1czogc3RyaW5nO1xuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKG9iamVjdDogSnNvbk1hcmtkb3duVGFza0l0ZW0sIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIpOiBNYXJrZG93blRhc2tJdGVtIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBvYmplY3QuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gTWFya2Rvd25MaXN0SXRlbS5mcm9tKGVsZW0sIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blRhc2tJdGVtKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkxpc3RJdGVtLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgICAgICAgJHR5cGU6IG9iamVjdC4kdHlwZSxcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgICAgICAkcGFyZW50TGluZTogb2JqZWN0LiRwYXJlbnRMaW5lLFxuICAgICAgICAgICAgJHN0YXR1czogb2JqZWN0LiRzdGF0dXMsXG4gICAgICAgICAgICAkc3ltYm9sOiBvYmplY3QuJHN5bWJvbCxcbiAgICAgICAgICAgICR0ZXh0OiBvYmplY3QuJHRleHQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duVGFza0l0ZW0+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkc3RhdHVzOiB0aGlzLiRzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHRhc2sgaXMgY29tcGxldGVkLiAqL1xuICAgIHB1YmxpYyBnZXQgJGNvbXBsZXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0YXR1cyA9PT0gXCJ4XCIgfHwgdGhpcy4kc3RhdHVzID09PSBcIlhcIjtcbiAgICB9XG59XG5cbi8qKiBBbiBlbnRyeSBpbiB0aGUgZnJvbnRtYXR0ZXI7IGluY2x1ZGVzIHRoZSByYXcgdmFsdWUsIHBhcnNlZCB2YWx1ZSwgYW5kIHJhdyBrZXkgKGJlZm9yZSBsb3dlci1jYXNpbmcpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlckVudHJ5IHtcbiAgICAvKiogVGhlIGFjdHVhbCBzdHJpbmcgaW4gZnJvbnRtYXR0ZXIgd2l0aCBleGFjdCBjYXNpbmcuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGZyb250bWF0dGVyIGVudHJ5IChkYXRlLCBkdXJhdGlvbiwgZXRjLikuICovXG4gICAgdmFsdWU6IExpdGVyYWw7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGZyb250bWF0dGVyIGVudHJ5IGJlZm9yZSBwYXJzaW5nOyBnZW5lcmFsbHkgYSBzdHJpbmcgb3IgbnVtYmVyLiAqL1xuICAgIHJhdzogc3RyaW5nO1xufVxuXG4vKiogQ29udmVydCBhIHJlZ3VsYXIgZnJvbnRtYXR0ZXIgZW50cnkgaW50byBhIEpTT04gZnJvbnRtYXR0ZXIgZW50cnkuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uRnJvbnRtYXR0ZXJFbnRyeShyYXc6IEZyb250bWF0dGVyRW50cnkpOiBKc29uRnJvbnRtYXR0ZXJFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByYXcua2V5LFxuICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihyYXcudmFsdWUpLFxuICAgICAgICByYXc6IHJhdy5yYXcsXG4gICAgfTtcbn1cblxuLyoqIENvbnZlcnQgYSBqc29uIGZyb250bWF0dGVyIGVudHJ5IHRvIGEgcmVndWxhciBmcm9udG1hdHRlciBlbnRyeS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbnRtYXR0ZXJFbnRyeShyYXc6IEpzb25Gcm9udG1hdHRlckVudHJ5KTogRnJvbnRtYXR0ZXJFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByYXcua2V5LFxuICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24udmFsdWUocmF3LnZhbHVlKSxcbiAgICAgICAgcmF3OiByYXcucmF3LFxuICAgIH07XG59XG5cbi8qKiBOb3JtYWxpemUgbGlua3MgZGVlcGx5IGluIHRoZSBvYmplY3QuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMaW5rczxUIGV4dGVuZHMgTGl0ZXJhbD4oaW5wdXQ6IFQsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyKTogVCB7XG4gICAgcmV0dXJuIExpdGVyYWxzLm1hcExlYXZlcyhpbnB1dCwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0xpbmsodmFsdWUpKSByZXR1cm4gbm9ybWFsaXplcih2YWx1ZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHZhbHVlO1xuICAgIH0pIGFzIFQ7XG59XG5cbi8qKiBSZWN1cnNpdmVseSBnYXRoZXIgbGlua3MgZnJvbSBhIGxpdGVyYWwgb2JqZWN0LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0aGVyTGlua3MoaW5wdXQ6IExpdGVyYWwpOiBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogTGlua1tdID0gW107XG5cbiAgICBMaXRlcmFscy5tYXBMZWF2ZXMoaW5wdXQsICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBHYXRoZXIgdGFncyBmcm9tIGEgZGF0YWJsb2NrLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0aGVyVGFncyhkYXRhOiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5Pik6IHN0cmluZ1tdIHtcbiAgICBmdW5jdGlvbiByZWN1cnNlKGlucHV0OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc1N0cmluZyhpbnB1dCkpIHJldHVybiBbaW5wdXQuc3RhcnRzV2l0aChcIiNcIikgPyBpbnB1dCA6IFwiI1wiICsgaW5wdXRdO1xuICAgICAgICBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KGlucHV0KSkgcmV0dXJuIGlucHV0LmZsYXRNYXAocmVjdXJzZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCB0YWdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChcInRhZ1wiIGluIGRhdGEpIHRhZ3MgPSB0YWdzLmNvbmNhdChyZWN1cnNlKGRhdGFbXCJ0YWdzXCJdKSk7XG4gICAgaWYgKFwidGFnc1wiIGluIGRhdGEpIHRhZ3MgPSB0YWdzLmNvbmNhdChyZWN1cnNlKGRhdGFbXCJ0YWdzXCJdKSk7XG5cbiAgICByZXR1cm4gdGFncztcbn1cblxuLyoqIEEgbGluayBub3JtYWxpemVyIHdoaWNoIHRha2VzIGluIGEgcmF3IGxpbmsgYW5kIHByb2R1Y2VzIGEgbm9ybWFsaXplZCBsaW5rLiAqL1xuZXhwb3J0IHR5cGUgTGlua05vcm1hbGl6ZXIgPSAobGluazogTGluaykgPT4gTGluaztcbmV4cG9ydCBjb25zdCBOT09QX05PUk1BTElaRVI6IExpbmtOb3JtYWxpemVyID0gKHgpID0+IHg7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfb2JqZWN0U3ByZWFkMiBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbmV4cG9ydCB7IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5leHBvcnQgeyBfYXJyYXlMaWtlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0IHsgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5leHBvcnQgeyBfc2xpY2VkVG9BcnJheSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKGUuaW5j